@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
@@ -0,0 +1,10 @@
1
+ // Copyright 2026 Synnax Labs, Inc.
2
+ //
3
+ // Use of this software is governed by the Business Source License included in the file
4
+ // licenses/BSL.txt.
5
+ //
6
+ // As of the Change Date specified in that file, in accordance with the Business Source
7
+ // License, use of this software will be governed by the Apache License, Version 2.0,
8
+ // included in the file licenses/APL.txt.
9
+
10
+ export * as node from "@/node/types.gen";
@@ -12,5 +12,5 @@
12
12
  import { zod } from "@synnaxlabs/x";
13
13
  import { type z } from "zod";
14
14
 
15
- export const nodeKeyZ = zod.uint12;
16
- export type NodeKey = z.infer<typeof nodeKeyZ>;
15
+ export const keyZ = zod.uint12;
16
+ export type Key = z.infer<typeof keyZ>;
@@ -8,22 +8,40 @@
8
8
  // included in the file licenses/APL.txt.
9
9
 
10
10
  import { type UnaryClient } from "@synnaxlabs/freighter";
11
- import { array, strings } from "@synnaxlabs/x";
11
+ import { deep, type destructor, primitive } from "@synnaxlabs/x";
12
12
  import { z } from "zod";
13
13
 
14
- import { QueryError } from "@/errors";
14
+ import { NotFoundError } from "@/errors";
15
15
  import {
16
16
  type ID,
17
+ idsEqual,
17
18
  idToString,
18
19
  idZ,
20
+ oppositeRelationshipDirection,
21
+ PARENT_OF_RELATIONSHIP_TYPE,
22
+ parseID,
19
23
  parseIDs,
24
+ type Relationship,
25
+ type RelationshipDirection,
26
+ relationshipToString,
27
+ relationshipZ,
20
28
  type Resource,
29
+ type ResourceType,
21
30
  resourceTypeZ,
22
31
  resourceZ,
32
+ stringIDZ,
23
33
  } from "@/ontology/payload";
34
+ import {
35
+ Cache,
36
+ RELATIONSHIP_DELETE_CHANNEL_NAME,
37
+ RELATIONSHIP_SET_CHANNEL_NAME,
38
+ RESOURCE_DELETE_CHANNEL_NAME,
39
+ RESOURCE_SET_CHANNEL_NAME,
40
+ } from "@/ontology/store";
24
41
  import { Writer } from "@/ontology/writer";
42
+ import { query } from "@/query";
25
43
 
26
- const retrieveReqZ = z.object({
44
+ const wireReqZ = z.object({
27
45
  ids: idZ.array().optional(),
28
46
  children: z.boolean().optional(),
29
47
  parents: z.boolean().optional(),
@@ -32,148 +50,439 @@ const retrieveReqZ = z.object({
32
50
  searchTerm: z.string().optional(),
33
51
  limit: z.int().optional(),
34
52
  offset: z.int().optional(),
53
+ ignoreNotFoundError: z.boolean().optional(),
35
54
  });
36
- export interface RetrieveRequest extends z.infer<typeof retrieveReqZ> {}
55
+ /** Everything an ontology retrieval can filter on. */
56
+ export interface RetrieveRequest extends z.infer<typeof wireReqZ> {}
37
57
 
58
+ /** The filters a retrieval accepts alongside its IDs. */
38
59
  export interface RetrieveOptions extends Pick<
39
60
  RetrieveRequest,
40
- "excludeFieldData" | "types" | "children" | "parents"
61
+ "excludeFieldData" | "types"
41
62
  > {}
42
63
 
43
64
  const retrieveResZ = z.object({ resources: resourceZ.array() });
44
65
 
45
- /** The main client class for executing queries against a Synnax cluster ontology */
46
- export class Client {
66
+ const parentRel = (from: ID, to: ID): Relationship => ({
67
+ from,
68
+ type: PARENT_OF_RELATIONSHIP_TYPE,
69
+ to,
70
+ });
71
+
72
+ /** A retrieve request with IDs normalized to stable, sorted strings. */
73
+ type NormalizedRequest = {
74
+ ids?: string[];
75
+ excludeFieldData?: boolean;
76
+ types?: ResourceType[];
77
+ searchTerm?: string;
78
+ limit?: number;
79
+ offset?: number;
80
+ };
81
+
82
+ /** Request key for children/parents listings of a set of resources. */
83
+ type DependentRequest = {
84
+ ids: string[];
85
+ types?: ResourceType[];
86
+ searchTerm?: string;
87
+ offset?: number;
88
+ limit?: number;
89
+ excludeFieldData?: boolean;
90
+ };
91
+
92
+ /** Query addressing the children or parents of a set of resources. */
93
+ export type DependentParams = {
94
+ ids: ID | ID[];
95
+ types?: ResourceType[];
96
+ searchTerm?: string;
97
+ offset?: number;
98
+ limit?: number;
99
+ excludeFieldData?: boolean;
100
+ };
101
+
102
+ const DEPENDENT_SERVER_FIELDS = ["searchTerm", "limit", "offset"] as const;
103
+
104
+ const normalizeIDs = (ids: ID | ID[]): string[] =>
105
+ [...new Set(idToString(parseIDs(ids)))].sort();
106
+
107
+ const normalizeDependents = (
108
+ ids: ID | ID[],
109
+ options?: Omit<DependentParams, "ids">,
110
+ ): DependentRequest => {
111
+ const out: DependentRequest = { ids: normalizeIDs(ids) };
112
+ const { types, searchTerm, offset, limit, excludeFieldData } = options ?? {};
113
+ if (types != null) out.types = [...types].sort();
114
+ if (searchTerm != null) out.searchTerm = searchTerm;
115
+ if (offset != null) out.offset = offset;
116
+ if (limit != null) out.limit = limit;
117
+ if (excludeFieldData != null) out.excludeFieldData = excludeFieldData;
118
+ return out;
119
+ };
120
+
121
+ const retrieveRequestZ = z
122
+ .object({
123
+ ids: idZ.array().optional(),
124
+ excludeFieldData: z.boolean().optional(),
125
+ types: resourceTypeZ.array().optional(),
126
+ searchTerm: z.string().optional(),
127
+ limit: z.int().optional(),
128
+ offset: z.int().optional(),
129
+ })
130
+ .transform((req): NormalizedRequest => {
131
+ const out: NormalizedRequest = {};
132
+ if (req.ids != null) out.ids = normalizeIDs(req.ids);
133
+ if (req.excludeFieldData != null) out.excludeFieldData = req.excludeFieldData;
134
+ if (req.types != null) out.types = [...req.types].sort();
135
+ if (req.searchTerm != null) out.searchTerm = req.searchTerm;
136
+ if (req.limit != null) out.limit = req.limit;
137
+ if (req.offset != null) out.offset = req.offset;
138
+ return out;
139
+ });
140
+
141
+ /** Resources are addressed by `ids`, so a bare key list is that shorthand. */
142
+ const retrieveMultiParamsZ = retrieveRequestZ.or(
143
+ idZ.array().transform((ids): NormalizedRequest => ({ ids: normalizeIDs(ids) })),
144
+ );
145
+
146
+ /** Params for an ontology retrieval. A bare ID array is shorthand for `{ ids }`. */
147
+ export type RetrieveParams = z.input<typeof retrieveRequestZ>;
148
+
149
+ const singleParamsZ = z
150
+ .union([z.strictObject({ type: resourceTypeZ, key: z.string() }), stringIDZ])
151
+ .transform((id) => idToString(id));
152
+
153
+ /**
154
+ * Client-side matching for a request: exact for id and type sets. Server-computed
155
+ * shapes (search, limit/offset) never reach this filter; they refetch instead.
156
+ */
157
+ const requestFilter = (req: NormalizedRequest): ((r: Resource) => boolean) => {
158
+ const idSet = primitive.isNonZero(req.ids) ? new Set(req.ids) : undefined;
159
+ const typeSet = primitive.isNonZero(req.types) ? new Set(req.types) : undefined;
160
+ return (r) => {
161
+ if (idSet != null && !idSet.has(r.key)) return false;
162
+ if (typeSet != null && !typeSet.has(r.id.type)) return false;
163
+ return true;
164
+ };
165
+ };
166
+
167
+ /** Config for {@link Client}. */
168
+ export interface ClientConfig {
169
+ unary: UnaryClient;
170
+ cache: query.Cache;
171
+ }
172
+
173
+ /**
174
+ * Reads the ontology on a Core: the resources and the relationships that join them.
175
+ * Reach it through `client.ontology`. Reads are served from a cache that a change
176
+ * stream keeps current.
177
+ */
178
+ export class Client extends query.Retriever<
179
+ typeof retrieveMultiParamsZ,
180
+ string,
181
+ Resource,
182
+ Resource,
183
+ z.input<typeof singleParamsZ>
184
+ > {
47
185
  readonly type: string = "ontology";
48
- private readonly client: UnaryClient;
186
+ /** Read surface of the ontology record tables. */
187
+ readonly cache: Cache;
188
+ /** Cached read surface for the children of a set of resources. */
189
+ readonly children: query.Retrieves<DependentParams, Resource[]>;
190
+ /** Cached read surface for the parents of a set of resources. */
191
+ readonly parents: query.Retrieves<DependentParams, Resource[]>;
192
+ private readonly cfg: ClientConfig;
49
193
  private readonly writer: Writer;
50
194
 
51
- constructor(unary: UnaryClient) {
52
- this.client = unary;
195
+ constructor(cfg: ClientConfig) {
196
+ const { unary, cache } = cfg;
197
+ const relationships = cache.createTable<string, Relationship>({
198
+ name: "relationships",
199
+ equal: (a, b) =>
200
+ idsEqual(a.from, b.from) && idsEqual(a.to, b.to) && a.type === b.type,
201
+ listen: [
202
+ query.createSetListener(RELATIONSHIP_SET_CHANNEL_NAME, relationshipZ, {
203
+ key: (changed) => relationshipToString(changed),
204
+ }),
205
+ query.createDeleteListener(RELATIONSHIP_DELETE_CHANNEL_NAME, relationshipZ, {
206
+ key: (changed) => relationshipToString(changed),
207
+ }),
208
+ ],
209
+ });
210
+ const resources = cache.createTable<string, Resource>({
211
+ name: "resources",
212
+ equal: (a, b) => deep.equal(a, b),
213
+ // Fetches bypass the query cache: sibling domain deletes never write
214
+ // through to the resource store, so cached entries may be stale.
215
+ fetch: async (keys) =>
216
+ await this.execRetrieve({ ids: parseIDs(keys), ignoreNotFoundError: true }),
217
+ listen: [
218
+ query.createSetListener(RESOURCE_SET_CHANNEL_NAME, resourceZ, {
219
+ value: (changed, prev) => (prev == null ? changed : { ...prev, ...changed }),
220
+ }),
221
+ // The store is keyed by the full "type:key" string, not the bare key.
222
+ query.createDeleteListener(RESOURCE_DELETE_CHANNEL_NAME, idZ, {
223
+ key: (changed) => idToString(changed),
224
+ }),
225
+ ],
226
+ });
227
+ const single = cache.queries<string, Resource, string, Resource>({
228
+ name: "resource",
229
+ table: resources,
230
+ fetch: async (q) => [(await this.fetchSingle(q)).key],
231
+ compose: (records) => records[0],
232
+ keyOf: (q) => q,
233
+ single: true,
234
+ });
235
+ super(cache, {
236
+ name: "resource",
237
+ table: resources,
238
+ request: {
239
+ schema: retrieveMultiParamsZ,
240
+ fetch: async (req) => await this.fetchRequest(req),
241
+ matches: (resource, req) => requestFilter(req)(resource),
242
+ },
243
+ single: { schema: singleParamsZ, space: single },
244
+ });
245
+ this.cfg = cfg;
53
246
  this.writer = new Writer(unary);
247
+ this.cache = new Cache(relationships, resources);
248
+ this.children = this.dependentSurface(cache, "children", "to");
249
+ this.parents = this.dependentSurface(cache, "parents", "from");
54
250
  }
55
251
 
56
252
  /**
57
- * Retrieves the resource in the ontology with the given ID.
58
- * @param id - The ID of the resource to retrieve.
59
- * @param options - Additional options for the retrieval.
60
- * @param options.excludeFieldData - Whether to exclude the field data of the resource
61
- * in the results.
62
- * @returns The resource with the given ID.
63
- * @throws {QueryError} If no resource is found with the given ID.
253
+ * Reads the resources the params address. The ID-array form remains for migration
254
+ * only: query with `{ ids }`, `children.retrieve`, or `parents.retrieve` instead.
64
255
  */
65
- async retrieve(id: ID, options?: RetrieveOptions): Promise<Resource>;
66
-
67
- /**
68
- * Retrieves the resources in the ontology with the given IDs.
69
- *
70
- * @param ids - The IDs of the resources to retrieve.
71
- * @param options - Additional options for the retrieval.
72
- * @param options.excludeFieldData - Whether to exclude the field data of the
73
- * resources in the results.
74
- * @returns The resources with the given IDs.
75
- * @throws {QueryError} If no resource is found with any of the given IDs.
76
- */
77
- async retrieve(ids: ID[], options?: RetrieveOptions): Promise<Resource[]>;
78
-
79
- async retrieve(params: RetrieveRequest): Promise<Resource[]>;
80
-
256
+ retrieve(
257
+ ids: Array<ID | string>,
258
+ options?: RetrieveOptions & { children?: boolean; parents?: boolean },
259
+ ): Promise<Resource[]>;
260
+ retrieve(
261
+ params: string | z.input<typeof singleParamsZ>,
262
+ options?: query.FetchOptions,
263
+ ): Promise<Resource>;
264
+ retrieve(params: RetrieveParams, options?: query.FetchOptions): Promise<Resource[]>;
81
265
  async retrieve(
82
- ids: ID | ID[] | RetrieveRequest,
83
- options?: RetrieveOptions,
266
+ params:
267
+ Array<ID | string> | string | z.input<typeof singleParamsZ> | RetrieveParams,
268
+ options?:
269
+ | query.FetchOptions
270
+ | (RetrieveOptions & { children?: boolean; parents?: boolean }),
84
271
  ): Promise<Resource | Resource[]> {
85
- if (!Array.isArray(ids) && typeof ids === "object" && !("key" in ids))
86
- return await this.execRetrieve(ids);
87
- const parsedIDs = parseIDs(ids);
88
- const resources = await this.execRetrieve({ ids: parsedIDs, ...options });
89
- if (Array.isArray(ids)) return resources;
90
- if (resources.length === 0)
91
- throw new QueryError(
92
- `No resource found with ID ${strings.naturalLanguageJoin(
93
- parsedIDs.map((id) => idToString(id)),
94
- )}`,
95
- );
96
- return resources[0];
272
+ if (Array.isArray(params)) {
273
+ const ids = parseIDs(params);
274
+ const {
275
+ children = false,
276
+ parents = false,
277
+ ...rest
278
+ } = (options ?? {}) as RetrieveOptions & {
279
+ children?: boolean;
280
+ parents?: boolean;
281
+ };
282
+ if (children) return await this.children.retrieve({ ids, ...rest });
283
+ if (parents) return await this.parents.retrieve({ ids, ...rest });
284
+ return await super.retrieve({ ids, ...rest });
285
+ }
286
+ return await super.retrieve(
287
+ params as z.input<typeof singleParamsZ>,
288
+ options as query.FetchOptions,
289
+ );
97
290
  }
98
291
 
99
- /**
100
- * Retrieves the children of the resources with the given IDs.
101
- * @param ids - The IDs of the resources whose children to retrieve.
102
- * @param options - Additional options for the retrieval.
103
- * the results.
104
- * @returns The children of the resources with the given IDs.
105
- */
292
+ /** Migration-only alias for `children.retrieve({ ids })`. */
106
293
  async retrieveChildren(
107
294
  ids: ID | ID[],
108
295
  options?: RetrieveOptions,
109
296
  ): Promise<Resource[]> {
110
- return await this.execRetrieve({
111
- ids: array.toArray(ids),
112
- children: true,
113
- ...options,
114
- });
297
+ return await this.children.retrieve({ ids, ...options });
115
298
  }
116
299
 
117
- /**
118
- * Retrieves the parents of the resources with the given IDs.
119
- *
120
- * @param ids - the IDs of the resources whose parents to retrieve
121
- * @param options - additional options for the retrieval
122
- * @param options.excludeFieldData - whether to exclude the field data of the parents
123
- * in the results
124
- * @returns the parents of the resources with the given IDs
125
- */
300
+ /** Migration-only alias for `parents.retrieve({ ids })`. */
126
301
  async retrieveParents(
127
302
  ids: ID | ID[],
128
303
  options?: RetrieveOptions,
129
304
  ): Promise<Resource[]> {
130
- return await this.execRetrieve({
131
- ids: array.toArray(ids),
132
- parents: true,
133
- ...options,
134
- });
305
+ return await this.parents.retrieve({ ids, ...options });
135
306
  }
136
307
 
137
- /**
138
- * Adds children to a resource in the ontology.
139
- * @param id - The ID of the resource to add children to.
140
- * @param children - The IDs of the children to add.
141
- */
308
+ /** Adds children to a resource in the ontology. */
142
309
  async addChildren(id: ID, ...children: ID[]): Promise<void> {
143
- return await this.writer.addChildren(id, ...children);
310
+ await this.writer.addChildren(id, ...children);
311
+ children.forEach((child) => {
312
+ const rel = parentRel(id, child);
313
+ this.cache.relationships.set(relationshipToString(rel), rel);
314
+ });
144
315
  }
145
316
 
146
- /**
147
- * Removes children from a resource in the ontology.
148
- * @param id - The ID of the resource to remove children from.
149
- * @param children - The IDs of the children to remove.
150
- */
317
+ /** Removes children from a resource in the ontology. */
151
318
  async removeChildren(id: ID, ...children: ID[]): Promise<void> {
152
- return await this.writer.removeChildren(id, ...children);
319
+ await this.writer.removeChildren(id, ...children);
320
+ children.forEach((child) =>
321
+ this.cache.relationships.delete(relationshipToString(parentRel(id, child))),
322
+ );
153
323
  }
154
324
 
155
- /**
156
- * Moves children from one resource to another in the ontology.
157
- * @param from - The ID of the resource to move children from.
158
- * @param to - The ID of the resource to move children to.
159
- * @param children - The IDs of the children to move.
160
- */
325
+ /** Moves children from one resource to another in the ontology. */
161
326
  async moveChildren(from: ID, to: ID, ...children: ID[]): Promise<void> {
162
- return await this.writer.moveChildren(from, to, ...children);
327
+ const move = (): destructor.Destructor[] => {
328
+ const deletions = children.map((child) =>
329
+ this.cache.relationships.delete(relationshipToString(parentRel(from, child))),
330
+ );
331
+ const insertions = children.map((child) => {
332
+ const rel = parentRel(to, child);
333
+ return this.cache.relationships.set(relationshipToString(rel), rel);
334
+ });
335
+ return [...deletions, ...insertions];
336
+ };
337
+ await query.optimistic({
338
+ rollbacks: move(),
339
+ commit: async () => await this.writer.moveChildren(from, to, ...children),
340
+ });
341
+ move();
342
+ }
343
+
344
+ /** Subscribes to every resource set delivered to the cache. */
345
+ onResourceSet(handler: (resource: Resource) => void): destructor.Destructor {
346
+ return this.cache.resources.subscribe((event) => {
347
+ if (event.variant === "set") handler(event.value);
348
+ });
349
+ }
350
+
351
+ /** Subscribes to every resource delete delivered to the cache. */
352
+ onResourceDelete(handler: (id: ID) => void): destructor.Destructor {
353
+ return this.cache.resources.subscribe((event) => {
354
+ if (event.variant === "delete") handler(parseID(event.key));
355
+ });
356
+ }
357
+
358
+ /** Subscribes to every relationship set delivered to the cache. */
359
+ onRelationshipSet(handler: (rel: Relationship) => void): destructor.Destructor {
360
+ return this.cache.relationships.subscribe((event) => {
361
+ if (event.variant === "set") handler(event.value);
362
+ });
363
+ }
364
+
365
+ /** Subscribes to every relationship delete delivered to the cache. */
366
+ onRelationshipDelete(handler: (rel: Relationship) => void): destructor.Destructor {
367
+ return this.cache.relationships.subscribe((event) => {
368
+ if (event.variant === "delete") handler(relationshipZ.parse(event.key));
369
+ });
370
+ }
371
+
372
+ /** Merges a fetched resource with cached field data it may lack. */
373
+ private mergeFieldData(r: Resource): Resource {
374
+ const p = this.cache.resources.get(r.key);
375
+ return p == null ? r : { ...r, data: r.data ?? p.data };
376
+ }
377
+
378
+ private writeResources(resources: Resource[]): void {
379
+ this.cache.resources.set(resources.map((r) => this.mergeFieldData(r)));
380
+ }
381
+
382
+ // Resources are deleted through other domain clients whose write-through
383
+ // never reaches the resource store, so fetches always hit the network
384
+ // rather than serving a possibly stale cached entry.
385
+ private async fetchSingle(q: string): Promise<Resource> {
386
+ const resources = await this.execRetrieve({
387
+ ids: [parseID(q)],
388
+ });
389
+ if (resources.length === 0)
390
+ throw new NotFoundError(`No resource found with ID ${q}`);
391
+ this.writeResources(resources);
392
+ return resources[0];
393
+ }
394
+
395
+ private async fetchRequest(req: NormalizedRequest): Promise<Resource[]> {
396
+ const { ids, ...rest } = req;
397
+ const resources = await this.execRetrieve(
398
+ ids == null ? rest : { ids: parseIDs(ids), ...rest },
399
+ );
400
+ return resources.map((r) => this.mergeFieldData(r));
401
+ }
402
+
403
+ private async fetchDependents(
404
+ q: DependentRequest,
405
+ direction: RelationshipDirection,
406
+ ): Promise<Resource[]> {
407
+ const { ids, ...rest } = q;
408
+ const resources = await this.execRetrieve({
409
+ ids: parseIDs(ids),
410
+ children: direction === "to",
411
+ parents: direction === "from",
412
+ ...rest,
413
+ });
414
+ this.writeResources(resources);
415
+ // Multi-anchor answers can't attribute members to an anchor, so only
416
+ // single-anchor queries write relationships through.
417
+ if (ids.length === 1) {
418
+ const anchor = parseID(ids[0]);
419
+ resources.forEach(({ id }) => {
420
+ const rel = direction === "to" ? parentRel(anchor, id) : parentRel(id, anchor);
421
+ this.cache.relationships.set(relationshipToString(rel), rel);
422
+ });
423
+ }
424
+ return resources;
425
+ }
426
+
427
+ private dependentSurface(
428
+ cache: query.Cache,
429
+ name: string,
430
+ direction: RelationshipDirection,
431
+ ): query.Retrieves<DependentParams, Resource[]> {
432
+ const anchor = oppositeRelationshipDirection(direction);
433
+ const space = cache.queries<DependentRequest, Resource[], string, Resource>({
434
+ name,
435
+ table: this.cache.resources,
436
+ fetch: async (q) => (await this.fetchDependents(q, direction)).map((r) => r.key),
437
+ compose: (records) => records,
438
+ matches: (resource, q) => this.isDependent(resource, q, direction),
439
+ serverFields: DEPENDENT_SERVER_FIELDS,
440
+ watch: [
441
+ query.watch(this.cache.relationships, (event, q: DependentRequest) => {
442
+ const rel =
443
+ event.variant === "set" ? event.value : relationshipZ.parse(event.key);
444
+ if (rel.type !== PARENT_OF_RELATIONSHIP_TYPE) return null;
445
+ if (!q.ids.includes(idToString(rel[anchor]))) return null;
446
+ if (q.types != null && !q.types.includes(rel[direction].type)) return null;
447
+ return [idToString(rel[direction])];
448
+ }),
449
+ ],
450
+ });
451
+ return {
452
+ retrieve: async ({ ids, ...options }, opts) =>
453
+ await space.retrieve(normalizeDependents(ids, options), opts),
454
+ onChange: ({ ids, ...options }, handler) =>
455
+ space.onChange(normalizeDependents(ids, options), handler),
456
+ getCached: ({ ids, ...options }) =>
457
+ space.getCached(normalizeDependents(ids, options)),
458
+ };
459
+ }
460
+
461
+ /** Whether a cached relationship makes the resource a dependent of the query. */
462
+ private isDependent(
463
+ resource: Resource,
464
+ q: DependentRequest,
465
+ direction: RelationshipDirection,
466
+ ): boolean {
467
+ if (q.types != null && !q.types.includes(resource.id.type)) return false;
468
+ const anchor = oppositeRelationshipDirection(direction);
469
+ return (
470
+ this.cache.relationships.get(
471
+ (rel) =>
472
+ rel.type === PARENT_OF_RELATIONSHIP_TYPE &&
473
+ q.ids.includes(idToString(rel[anchor])) &&
474
+ idsEqual(rel[direction], resource.id),
475
+ ).length > 0
476
+ );
163
477
  }
164
478
 
165
479
  private async execRetrieve(request: RetrieveRequest): Promise<Resource[]> {
166
- const { resources } = await this.client.send(
480
+ const { resources } = await this.cfg.unary.send(
167
481
  "/ontology/retrieve",
168
482
  request,
169
- retrieveReqZ,
483
+ wireReqZ,
170
484
  retrieveResZ,
171
485
  );
172
486
  return resources;
173
487
  }
174
488
  }
175
-
176
- export const RESOURCE_SET_CHANNEL_NAME = "sy_ontology_resource_set";
177
- export const RESOURCE_DELETE_CHANNEL_NAME = "sy_ontology_resource_delete";
178
- export const RELATIONSHIP_SET_CHANNEL_NAME = "sy_ontology_relationship_set";
179
- export const RELATIONSHIP_DELETE_CHANNEL_NAME = "sy_ontology_relationship_delete";
@@ -9,3 +9,10 @@
9
9
 
10
10
  export * from "@/ontology/client";
11
11
  export * from "@/ontology/payload";
12
+ export {
13
+ Cache,
14
+ RELATIONSHIP_DELETE_CHANNEL_NAME,
15
+ RELATIONSHIP_SET_CHANNEL_NAME,
16
+ RESOURCE_DELETE_CHANNEL_NAME,
17
+ RESOURCE_SET_CHANNEL_NAME,
18
+ } from "@/ontology/store";