@synnaxlabs/client 0.56.1 → 0.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (741) hide show
  1. package/dist/client-B08VDLSA.js +14463 -0
  2. package/dist/client-B08VDLSA.js.map +1 -0
  3. package/dist/client.js +1128 -14876
  4. package/dist/client.js.map +1 -0
  5. package/dist/src/access/client.d.ts +10 -1
  6. package/dist/src/access/client.d.ts.map +1 -1
  7. package/dist/src/access/enforce.d.ts.map +1 -1
  8. package/dist/src/access/external.d.ts +1 -0
  9. package/dist/src/access/external.d.ts.map +1 -1
  10. package/dist/src/access/granted.d.ts +39 -0
  11. package/dist/src/access/granted.d.ts.map +1 -0
  12. package/dist/src/access/policy/client.d.ts +136 -147
  13. package/dist/src/access/policy/client.d.ts.map +1 -1
  14. package/dist/src/access/policy/types.gen.d.ts +15 -68
  15. package/dist/src/access/policy/types.gen.d.ts.map +1 -1
  16. package/dist/src/access/role/client.d.ts +77 -58
  17. package/dist/src/access/role/client.d.ts.map +1 -1
  18. package/dist/src/access/role/types.gen.d.ts +8 -14
  19. package/dist/src/access/role/types.gen.d.ts.map +1 -1
  20. package/dist/src/actions/actions.d.ts +5 -6
  21. package/dist/src/actions/actions.d.ts.map +1 -1
  22. package/dist/src/actions/controller.d.ts +194 -0
  23. package/dist/src/actions/controller.d.ts.map +1 -0
  24. package/dist/src/actions/external.d.ts +1 -0
  25. package/dist/src/actions/external.d.ts.map +1 -1
  26. package/dist/src/arc/actions.d.ts +575 -0
  27. package/dist/src/arc/actions.d.ts.map +1 -0
  28. package/dist/src/arc/actions.gen.d.ts +1439 -0
  29. package/dist/src/arc/actions.gen.d.ts.map +1 -0
  30. package/dist/src/arc/client.d.ts +97 -13
  31. package/dist/src/arc/client.d.ts.map +1 -1
  32. package/dist/src/arc/compiler/types.gen.d.ts +3 -3
  33. package/dist/src/arc/compiler/types.gen.d.ts.map +1 -1
  34. package/dist/src/arc/external.d.ts +2 -0
  35. package/dist/src/arc/external.d.ts.map +1 -1
  36. package/dist/src/arc/graph/types.gen.d.ts +45 -597
  37. package/dist/src/arc/graph/types.gen.d.ts.map +1 -1
  38. package/dist/src/arc/ir/index.d.ts +1 -1
  39. package/dist/src/arc/ir/index.d.ts.map +1 -1
  40. package/dist/src/arc/ir/ir.d.ts +2 -0
  41. package/dist/src/arc/ir/ir.d.ts.map +1 -0
  42. package/dist/src/arc/ir/types.gen.d.ts +58 -2807
  43. package/dist/src/arc/ir/types.gen.d.ts.map +1 -1
  44. package/dist/src/arc/module/types.gen.d.ts +18 -1090
  45. package/dist/src/arc/module/types.gen.d.ts.map +1 -1
  46. package/dist/src/arc/program/types.gen.d.ts +18 -1090
  47. package/dist/src/arc/program/types.gen.d.ts.map +1 -1
  48. package/dist/src/arc/text/types.gen.d.ts +54 -1
  49. package/dist/src/arc/text/types.gen.d.ts.map +1 -1
  50. package/dist/src/arc/types/types.gen.d.ts +35 -153
  51. package/dist/src/arc/types/types.gen.d.ts.map +1 -1
  52. package/dist/src/arc/types.gen.d.ts +98 -2278
  53. package/dist/src/arc/types.gen.d.ts.map +1 -1
  54. package/dist/src/auth/auth.d.ts +14 -2
  55. package/dist/src/auth/auth.d.ts.map +1 -1
  56. package/dist/src/channel/client.d.ts +113 -75
  57. package/dist/src/channel/client.d.ts.map +1 -1
  58. package/dist/src/channel/external.d.ts +0 -1
  59. package/dist/src/channel/external.d.ts.map +1 -1
  60. package/dist/src/channel/payload.d.ts +65 -56
  61. package/dist/src/channel/payload.d.ts.map +1 -1
  62. package/dist/src/channel/types.gen.d.ts +26 -73
  63. package/dist/src/channel/types.gen.d.ts.map +1 -1
  64. package/dist/src/channel/writer.d.ts +1 -3
  65. package/dist/src/channel/writer.d.ts.map +1 -1
  66. package/dist/src/client.d.ts +55 -27
  67. package/dist/src/client.d.ts.map +1 -1
  68. package/dist/src/connection/client.d.ts +146 -0
  69. package/dist/src/connection/client.d.ts.map +1 -0
  70. package/dist/src/connection/external.d.ts +3 -0
  71. package/dist/src/connection/external.d.ts.map +1 -0
  72. package/dist/src/connection/index.d.ts +1 -1
  73. package/dist/src/connection/index.d.ts.map +1 -1
  74. package/dist/src/connection/status.d.ts +252 -0
  75. package/dist/src/connection/status.d.ts.map +1 -0
  76. package/dist/src/control/client.d.ts +31 -7
  77. package/dist/src/control/client.d.ts.map +1 -1
  78. package/dist/src/control/state.d.ts +47 -16
  79. package/dist/src/control/state.d.ts.map +1 -1
  80. package/dist/src/device/client.d.ts +59 -17
  81. package/dist/src/device/client.d.ts.map +1 -1
  82. package/dist/src/device/types.gen.d.ts +17 -67
  83. package/dist/src/device/types.gen.d.ts.map +1 -1
  84. package/dist/src/errors.d.ts +17 -20
  85. package/dist/src/errors.d.ts.map +1 -1
  86. package/dist/src/ethercat/external.d.ts +2 -0
  87. package/dist/src/ethercat/external.d.ts.map +1 -0
  88. package/dist/src/ethercat/index.d.ts +2 -0
  89. package/dist/src/ethercat/index.d.ts.map +1 -0
  90. package/dist/src/ethercat/types.gen.d.ts +243 -0
  91. package/dist/src/ethercat/types.gen.d.ts.map +1 -0
  92. package/dist/src/framer/adapter.d.ts +8 -5
  93. package/dist/src/framer/adapter.d.ts.map +1 -1
  94. package/dist/src/framer/benchutil.d.ts +19 -0
  95. package/dist/src/framer/benchutil.d.ts.map +1 -0
  96. package/dist/src/framer/cache/cache.d.ts +38 -0
  97. package/dist/src/framer/cache/cache.d.ts.map +1 -0
  98. package/dist/src/framer/cache/dynamic.d.ts +71 -0
  99. package/dist/src/framer/cache/dynamic.d.ts.map +1 -0
  100. package/dist/src/framer/cache/reader.d.ts +43 -0
  101. package/dist/src/framer/cache/reader.d.ts.map +1 -0
  102. package/dist/src/framer/cache/static.d.ts +66 -0
  103. package/dist/src/framer/cache/static.d.ts.map +1 -0
  104. package/dist/src/framer/cache/streamer.d.ts +86 -0
  105. package/dist/src/framer/cache/streamer.d.ts.map +1 -0
  106. package/dist/src/framer/cache/transform.d.ts +18 -0
  107. package/dist/src/framer/cache/transform.d.ts.map +1 -0
  108. package/dist/src/framer/cache/unary.d.ts +37 -0
  109. package/dist/src/framer/cache/unary.d.ts.map +1 -0
  110. package/dist/src/framer/client.d.ts +35 -14
  111. package/dist/src/framer/client.d.ts.map +1 -1
  112. package/dist/src/framer/codec.d.ts.map +1 -1
  113. package/dist/src/framer/deleter.d.ts +3 -2
  114. package/dist/src/framer/deleter.d.ts.map +1 -1
  115. package/dist/src/framer/external.d.ts +6 -0
  116. package/dist/src/framer/external.d.ts.map +1 -1
  117. package/dist/src/framer/feed.d.ts +40 -0
  118. package/dist/src/framer/feed.d.ts.map +1 -0
  119. package/dist/src/framer/frame.d.ts +16 -20
  120. package/dist/src/framer/frame.d.ts.map +1 -1
  121. package/dist/src/framer/hardened.d.ts +70 -0
  122. package/dist/src/framer/hardened.d.ts.map +1 -0
  123. package/dist/src/framer/iterator.d.ts +36 -43
  124. package/dist/src/framer/iterator.d.ts.map +1 -1
  125. package/dist/src/framer/reader.d.ts +3 -2
  126. package/dist/src/framer/reader.d.ts.map +1 -1
  127. package/dist/src/framer/streamer.d.ts +132 -205
  128. package/dist/src/framer/streamer.d.ts.map +1 -1
  129. package/dist/src/framer/writer.d.ts +130 -161
  130. package/dist/src/framer/writer.d.ts.map +1 -1
  131. package/dist/src/group/client.d.ts +66 -9
  132. package/dist/src/group/client.d.ts.map +1 -1
  133. package/dist/src/group/types.gen.d.ts +2 -2
  134. package/dist/src/http/external.d.ts +2 -0
  135. package/dist/src/http/external.d.ts.map +1 -0
  136. package/dist/src/http/index.d.ts +2 -0
  137. package/dist/src/http/index.d.ts.map +1 -0
  138. package/dist/src/http/types.gen.d.ts +451 -0
  139. package/dist/src/http/types.gen.d.ts.map +1 -0
  140. package/dist/src/imex/client.d.ts +88 -0
  141. package/dist/src/imex/client.d.ts.map +1 -0
  142. package/dist/src/imex/index.d.ts +2 -0
  143. package/dist/src/imex/index.d.ts.map +1 -0
  144. package/dist/src/index.d.ts +18 -5
  145. package/dist/src/index.d.ts.map +1 -1
  146. package/dist/src/label/client.d.ts +55 -36
  147. package/dist/src/label/client.d.ts.map +1 -1
  148. package/dist/src/label/external.d.ts +2 -0
  149. package/dist/src/label/external.d.ts.map +1 -1
  150. package/dist/src/label/payload.d.ts +4 -46
  151. package/dist/src/label/payload.d.ts.map +1 -1
  152. package/dist/src/label/store.d.ts +8 -0
  153. package/dist/src/label/store.d.ts.map +1 -0
  154. package/dist/src/label/types.gen.d.ts +45 -0
  155. package/dist/src/label/types.gen.d.ts.map +1 -0
  156. package/dist/src/labjack/external.d.ts +2 -0
  157. package/dist/src/labjack/external.d.ts.map +1 -0
  158. package/dist/src/labjack/index.d.ts +2 -0
  159. package/dist/src/labjack/index.d.ts.map +1 -0
  160. package/dist/src/labjack/types.gen.d.ts +442 -0
  161. package/dist/src/labjack/types.gen.d.ts.map +1 -0
  162. package/dist/src/lineplot/actions.d.ts +914 -0
  163. package/dist/src/lineplot/actions.d.ts.map +1 -0
  164. package/dist/src/lineplot/actions.gen.d.ts +4208 -0
  165. package/dist/src/lineplot/actions.gen.d.ts.map +1 -0
  166. package/dist/src/lineplot/client.d.ts +66 -16
  167. package/dist/src/lineplot/client.d.ts.map +1 -1
  168. package/dist/src/lineplot/external.d.ts +3 -0
  169. package/dist/src/lineplot/external.d.ts.map +1 -1
  170. package/dist/src/lineplot/line.d.ts +16 -0
  171. package/dist/src/lineplot/line.d.ts.map +1 -0
  172. package/dist/src/lineplot/types.gen.d.ts +837 -14
  173. package/dist/src/lineplot/types.gen.d.ts.map +1 -1
  174. package/dist/src/log/actions.d.ts +271 -0
  175. package/dist/src/log/actions.d.ts.map +1 -0
  176. package/dist/src/log/actions.gen.d.ts +1529 -0
  177. package/dist/src/log/actions.gen.d.ts.map +1 -0
  178. package/dist/src/log/client.d.ts +66 -16
  179. package/dist/src/log/client.d.ts.map +1 -1
  180. package/dist/src/log/external.d.ts +2 -0
  181. package/dist/src/log/external.d.ts.map +1 -1
  182. package/dist/src/log/types.gen.d.ts +139 -14
  183. package/dist/src/log/types.gen.d.ts.map +1 -1
  184. package/dist/src/modbus/external.d.ts +2 -0
  185. package/dist/src/modbus/external.d.ts.map +1 -0
  186. package/dist/src/modbus/index.d.ts +2 -0
  187. package/dist/src/modbus/index.d.ts.map +1 -0
  188. package/dist/src/modbus/types.gen.d.ts +280 -0
  189. package/dist/src/modbus/types.gen.d.ts.map +1 -0
  190. package/dist/src/ni/external.d.ts +2 -0
  191. package/dist/src/ni/external.d.ts.map +1 -0
  192. package/dist/src/ni/index.d.ts +2 -0
  193. package/dist/src/ni/index.d.ts.map +1 -0
  194. package/dist/src/ni/types.gen.d.ts +21029 -0
  195. package/dist/src/ni/types.gen.d.ts.map +1 -0
  196. package/dist/src/node/index.d.ts +2 -0
  197. package/dist/src/node/index.d.ts.map +1 -0
  198. package/dist/src/node/types.gen.d.ts +4 -0
  199. package/dist/src/node/types.gen.d.ts.map +1 -0
  200. package/dist/src/ontology/client.d.ts +314 -67
  201. package/dist/src/ontology/client.d.ts.map +1 -1
  202. package/dist/src/ontology/external.d.ts +1 -0
  203. package/dist/src/ontology/external.d.ts.map +1 -1
  204. package/dist/src/ontology/payload.d.ts +60 -18
  205. package/dist/src/ontology/payload.d.ts.map +1 -1
  206. package/dist/src/ontology/store.d.ts +32 -0
  207. package/dist/src/ontology/store.d.ts.map +1 -0
  208. package/dist/src/ontology/types.gen.d.ts +3 -2
  209. package/dist/src/ontology/types.gen.d.ts.map +1 -1
  210. package/dist/src/ontology/writer.d.ts +16 -10
  211. package/dist/src/ontology/writer.d.ts.map +1 -1
  212. package/dist/src/opcua/external.d.ts +2 -0
  213. package/dist/src/opcua/external.d.ts.map +1 -0
  214. package/dist/src/opcua/index.d.ts +2 -0
  215. package/dist/src/opcua/index.d.ts.map +1 -0
  216. package/dist/src/opcua/types.gen.d.ts +82 -0
  217. package/dist/src/opcua/types.gen.d.ts.map +1 -0
  218. package/dist/src/pagerduty/external.d.ts +2 -0
  219. package/dist/src/pagerduty/external.d.ts.map +1 -0
  220. package/dist/src/pagerduty/index.d.ts +2 -0
  221. package/dist/src/pagerduty/index.d.ts.map +1 -0
  222. package/dist/src/pagerduty/types.gen.d.ts +30 -0
  223. package/dist/src/pagerduty/types.gen.d.ts.map +1 -0
  224. package/dist/src/panel/actions.d.ts +273 -0
  225. package/dist/src/panel/actions.d.ts.map +1 -0
  226. package/dist/src/panel/actions.gen.d.ts +1255 -0
  227. package/dist/src/panel/actions.gen.d.ts.map +1 -0
  228. package/dist/src/panel/client.d.ts +148 -0
  229. package/dist/src/panel/client.d.ts.map +1 -0
  230. package/dist/src/panel/external.d.ts +6 -0
  231. package/dist/src/panel/external.d.ts.map +1 -0
  232. package/dist/src/panel/index.d.ts +2 -0
  233. package/dist/src/panel/index.d.ts.map +1 -0
  234. package/dist/src/panel/tree.d.ts +50 -0
  235. package/dist/src/panel/tree.d.ts.map +1 -0
  236. package/dist/src/panel/types.gen.d.ts +370 -0
  237. package/dist/src/panel/types.gen.d.ts.map +1 -0
  238. package/dist/src/project/client.d.ts +89 -0
  239. package/dist/src/project/client.d.ts.map +1 -0
  240. package/dist/src/project/external.d.ts.map +1 -0
  241. package/dist/src/project/index.d.ts +2 -0
  242. package/dist/src/project/index.d.ts.map +1 -0
  243. package/dist/src/project/types.gen.d.ts +27 -0
  244. package/dist/src/project/types.gen.d.ts.map +1 -0
  245. package/dist/src/query/cache.d.ts +132 -0
  246. package/dist/src/query/cache.d.ts.map +1 -0
  247. package/dist/src/query/deleted.d.ts +20 -0
  248. package/dist/src/query/deleted.d.ts.map +1 -0
  249. package/dist/src/query/derived.d.ts +33 -0
  250. package/dist/src/query/derived.d.ts.map +1 -0
  251. package/dist/src/query/external.d.ts +10 -0
  252. package/dist/src/query/external.d.ts.map +1 -0
  253. package/dist/src/query/index.d.ts +2 -0
  254. package/dist/src/query/index.d.ts.map +1 -0
  255. package/dist/src/query/query.d.ts +235 -0
  256. package/dist/src/query/query.d.ts.map +1 -0
  257. package/dist/src/query/retriever.d.ts +135 -0
  258. package/dist/src/query/retriever.d.ts.map +1 -0
  259. package/dist/src/query/streamer.d.ts +67 -0
  260. package/dist/src/query/streamer.d.ts.map +1 -0
  261. package/dist/src/query/table.d.ts +219 -0
  262. package/dist/src/query/table.d.ts.map +1 -0
  263. package/dist/src/query/types.d.ts +35 -0
  264. package/dist/src/query/types.d.ts.map +1 -0
  265. package/dist/src/query/write.d.ts +21 -0
  266. package/dist/src/query/write.d.ts.map +1 -0
  267. package/dist/src/rack/client.d.ts +58 -20
  268. package/dist/src/rack/client.d.ts.map +1 -1
  269. package/dist/src/rack/types.gen.d.ts +11 -12
  270. package/dist/src/rack/types.gen.d.ts.map +1 -1
  271. package/dist/src/range/alias/types.gen.d.ts +2 -3
  272. package/dist/src/range/alias/types.gen.d.ts.map +1 -1
  273. package/dist/src/ranger/client.d.ts +138 -27
  274. package/dist/src/ranger/client.d.ts.map +1 -1
  275. package/dist/src/ranger/kv/client.d.ts +7 -4
  276. package/dist/src/ranger/kv/client.d.ts.map +1 -1
  277. package/dist/src/ranger/payload.d.ts +3 -0
  278. package/dist/src/ranger/payload.d.ts.map +1 -1
  279. package/dist/src/ranger/types.gen.d.ts +45 -101
  280. package/dist/src/ranger/types.gen.d.ts.map +1 -1
  281. package/dist/src/ranger/writer.d.ts +2 -74
  282. package/dist/src/ranger/writer.d.ts.map +1 -1
  283. package/dist/src/schematic/actions.d.ts +90 -33
  284. package/dist/src/schematic/actions.d.ts.map +1 -1
  285. package/dist/src/schematic/actions.gen.d.ts +207 -114
  286. package/dist/src/schematic/actions.gen.d.ts.map +1 -1
  287. package/dist/src/schematic/client.d.ts +70 -68
  288. package/dist/src/schematic/client.d.ts.map +1 -1
  289. package/dist/src/schematic/symbol/client.d.ts +133 -27
  290. package/dist/src/schematic/symbol/client.d.ts.map +1 -1
  291. package/dist/src/schematic/symbol/types.gen.d.ts +258 -153
  292. package/dist/src/schematic/symbol/types.gen.d.ts.map +1 -1
  293. package/dist/src/schematic/types.gen.d.ts +17 -96
  294. package/dist/src/schematic/types.gen.d.ts.map +1 -1
  295. package/dist/src/status/client.d.ts +69 -14
  296. package/dist/src/status/client.d.ts.map +1 -1
  297. package/dist/src/status/external.d.ts +2 -0
  298. package/dist/src/status/external.d.ts.map +1 -1
  299. package/dist/src/status/payload.d.ts +2 -36
  300. package/dist/src/status/payload.d.ts.map +1 -1
  301. package/dist/src/status/status.d.ts +65 -0
  302. package/dist/src/status/status.d.ts.map +1 -0
  303. package/dist/src/status/types.gen.d.ts +58 -0
  304. package/dist/src/status/types.gen.d.ts.map +1 -0
  305. package/dist/src/table/actions.d.ts +72 -13
  306. package/dist/src/table/actions.d.ts.map +1 -1
  307. package/dist/src/table/actions.gen.d.ts +221 -137
  308. package/dist/src/table/actions.gen.d.ts.map +1 -1
  309. package/dist/src/table/client.d.ts +64 -40
  310. package/dist/src/table/client.d.ts.map +1 -1
  311. package/dist/src/table/types.gen.d.ts +20 -55
  312. package/dist/src/table/types.gen.d.ts.map +1 -1
  313. package/dist/src/task/client.d.ts +149 -28
  314. package/dist/src/task/client.d.ts.map +1 -1
  315. package/dist/src/task/types.gen.d.ts +71 -89
  316. package/dist/src/task/types.gen.d.ts.map +1 -1
  317. package/dist/src/testutil/access.d.ts +27 -1
  318. package/dist/src/testutil/access.d.ts.map +1 -1
  319. package/dist/src/testutil/channels.d.ts +2 -0
  320. package/dist/src/testutil/channels.d.ts.map +1 -1
  321. package/dist/src/testutil/client.d.ts +5 -0
  322. package/dist/src/testutil/client.d.ts.map +1 -1
  323. package/dist/src/testutil/connection.d.ts +10 -0
  324. package/dist/src/testutil/connection.d.ts.map +1 -0
  325. package/dist/src/testutil/index.d.ts +9 -0
  326. package/dist/src/testutil/index.d.ts.map +1 -0
  327. package/dist/src/testutil/panels.d.ts +8 -0
  328. package/dist/src/testutil/panels.d.ts.map +1 -0
  329. package/dist/src/testutil/proxy.d.ts +29 -0
  330. package/dist/src/testutil/proxy.d.ts.map +1 -0
  331. package/dist/src/testutil/query.d.ts +7 -0
  332. package/dist/src/testutil/query.d.ts.map +1 -0
  333. package/dist/src/testutil/telem.d.ts +4 -0
  334. package/dist/src/testutil/telem.d.ts.map +1 -1
  335. package/dist/src/transport.d.ts +10 -4
  336. package/dist/src/transport.d.ts.map +1 -1
  337. package/dist/src/user/client.d.ts +29 -28
  338. package/dist/src/user/client.d.ts.map +1 -1
  339. package/dist/src/user/external.d.ts +1 -1
  340. package/dist/src/user/external.d.ts.map +1 -1
  341. package/dist/src/user/types.gen.d.ts +4 -4
  342. package/dist/src/util/retrieve.d.ts +2 -2
  343. package/dist/src/util/retrieve.d.ts.map +1 -1
  344. package/dist/src/util/telem.d.ts.map +1 -1
  345. package/dist/src/view/client.d.ts +30 -14
  346. package/dist/src/view/client.d.ts.map +1 -1
  347. package/dist/src/view/types.gen.d.ts +7 -15
  348. package/dist/src/view/types.gen.d.ts.map +1 -1
  349. package/dist/testutil.js +189 -0
  350. package/dist/testutil.js.map +1 -0
  351. package/package.json +40 -17
  352. package/src/access/client.ts +14 -3
  353. package/src/access/enforce.ts +0 -3
  354. package/src/access/external.ts +1 -0
  355. package/src/access/granted.ts +114 -0
  356. package/src/access/policy/client.ts +135 -43
  357. package/src/access/policy/types.gen.ts +9 -11
  358. package/src/access/role/client.ts +160 -38
  359. package/src/access/role/types.gen.ts +8 -12
  360. package/src/actions/actions.ts +5 -6
  361. package/src/actions/controller.ts +626 -0
  362. package/src/actions/external.ts +11 -0
  363. package/src/arc/actions.gen.ts +313 -0
  364. package/src/arc/actions.ts +192 -0
  365. package/src/arc/client.ts +424 -41
  366. package/src/arc/compiler/types.gen.ts +5 -6
  367. package/src/arc/external.ts +2 -0
  368. package/src/arc/graph/types.gen.ts +24 -22
  369. package/src/arc/ir/index.ts +1 -1
  370. package/{eslint.config.ts → src/arc/ir/ir.ts} +1 -4
  371. package/src/arc/ir/types.gen.ts +42 -41
  372. package/src/arc/text/types.gen.ts +21 -2
  373. package/src/arc/types/types.gen.ts +40 -32
  374. package/src/arc/types.gen.ts +31 -29
  375. package/src/auth/auth.ts +40 -8
  376. package/src/channel/client.ts +529 -132
  377. package/src/channel/external.ts +0 -1
  378. package/src/channel/payload.ts +30 -3
  379. package/src/channel/types.gen.ts +37 -48
  380. package/src/channel/writer.ts +2 -11
  381. package/src/client.ts +215 -91
  382. package/src/connection/client.ts +495 -0
  383. package/src/connection/external.ts +34 -0
  384. package/src/connection/index.ts +1 -1
  385. package/src/connection/status.ts +442 -0
  386. package/src/control/client.ts +84 -12
  387. package/src/control/state.ts +17 -36
  388. package/src/device/client.ts +293 -41
  389. package/src/device/types.gen.ts +15 -26
  390. package/src/errors.ts +45 -22
  391. package/src/{workspace → ethercat}/external.ts +1 -2
  392. package/src/{workspace → ethercat}/index.ts +1 -1
  393. package/src/ethercat/types.gen.ts +151 -0
  394. package/src/framer/adapter.ts +60 -37
  395. package/src/framer/benchutil.ts +67 -0
  396. package/src/framer/cache/cache.ts +115 -0
  397. package/src/framer/cache/dynamic.ts +279 -0
  398. package/src/framer/cache/reader.ts +160 -0
  399. package/src/framer/cache/static.ts +215 -0
  400. package/src/framer/cache/streamer.ts +391 -0
  401. package/src/framer/cache/transform.ts +31 -0
  402. package/src/framer/cache/unary.ts +104 -0
  403. package/src/framer/client.ts +71 -43
  404. package/src/framer/codec.ts +55 -18
  405. package/src/framer/deleter.ts +4 -6
  406. package/src/framer/external.ts +10 -0
  407. package/src/framer/feed.ts +108 -0
  408. package/src/framer/frame.ts +13 -23
  409. package/src/framer/hardened.ts +283 -0
  410. package/src/framer/iterator.ts +31 -42
  411. package/src/framer/reader.ts +11 -11
  412. package/src/framer/streamer.ts +18 -178
  413. package/src/framer/writer.ts +39 -59
  414. package/src/group/client.ts +158 -23
  415. package/src/http/external.ts +10 -0
  416. package/src/{cluster → http}/index.ts +1 -1
  417. package/src/http/types.gen.ts +245 -0
  418. package/src/imex/client.ts +125 -0
  419. package/src/imex/index.ts +10 -0
  420. package/src/index.ts +18 -6
  421. package/src/label/client.ts +193 -54
  422. package/src/label/external.ts +2 -0
  423. package/src/label/payload.ts +4 -9
  424. package/src/label/store.ts +28 -0
  425. package/src/label/types.gen.ts +31 -0
  426. package/src/labjack/external.ts +10 -0
  427. package/src/labjack/index.ts +10 -0
  428. package/src/labjack/types.gen.ts +251 -0
  429. package/src/lineplot/actions.gen.ts +880 -0
  430. package/src/lineplot/actions.ts +535 -0
  431. package/src/lineplot/client.ts +224 -52
  432. package/src/lineplot/external.ts +3 -0
  433. package/src/lineplot/line.ts +80 -0
  434. package/src/lineplot/types.gen.ts +225 -12
  435. package/src/log/actions.gen.ts +474 -0
  436. package/src/log/actions.ts +242 -0
  437. package/src/log/client.ts +223 -52
  438. package/src/log/external.ts +2 -0
  439. package/src/log/types.gen.ts +45 -14
  440. package/src/modbus/external.ts +10 -0
  441. package/src/modbus/index.ts +10 -0
  442. package/src/modbus/types.gen.ts +185 -0
  443. package/src/ni/external.ts +10 -0
  444. package/src/ni/index.ts +10 -0
  445. package/src/ni/types.gen.ts +1632 -0
  446. package/src/node/index.ts +10 -0
  447. package/src/{cluster → node}/types.gen.ts +2 -2
  448. package/src/ontology/client.ts +408 -99
  449. package/src/ontology/external.ts +7 -0
  450. package/src/ontology/payload.ts +48 -7
  451. package/src/ontology/store.ts +83 -0
  452. package/src/ontology/types.gen.ts +2 -1
  453. package/src/ontology/writer.ts +1 -0
  454. package/src/opcua/external.ts +10 -0
  455. package/src/opcua/index.ts +10 -0
  456. package/src/opcua/types.gen.ts +65 -0
  457. package/src/pagerduty/external.ts +10 -0
  458. package/src/pagerduty/index.ts +10 -0
  459. package/src/pagerduty/types.gen.ts +41 -0
  460. package/src/panel/actions.gen.ts +267 -0
  461. package/src/panel/actions.ts +357 -0
  462. package/src/panel/client.ts +327 -0
  463. package/src/panel/external.ts +14 -0
  464. package/src/panel/index.ts +10 -0
  465. package/src/panel/tree.ts +163 -0
  466. package/src/panel/types.gen.ts +164 -0
  467. package/src/project/client.ts +273 -0
  468. package/src/project/external.ts +11 -0
  469. package/src/project/index.ts +10 -0
  470. package/src/project/types.gen.ts +40 -0
  471. package/src/query/cache.ts +326 -0
  472. package/src/query/deleted.ts +38 -0
  473. package/src/query/derived.ts +101 -0
  474. package/src/query/external.ts +51 -0
  475. package/src/query/index.ts +10 -0
  476. package/src/query/query.ts +865 -0
  477. package/src/query/retriever.ts +308 -0
  478. package/src/query/streamer.ts +207 -0
  479. package/src/query/table.ts +625 -0
  480. package/src/query/types.ts +54 -0
  481. package/src/query/write.ts +42 -0
  482. package/src/rack/client.ts +233 -45
  483. package/src/rack/types.gen.ts +15 -16
  484. package/src/range/alias/types.gen.ts +2 -3
  485. package/src/ranger/client.ts +581 -70
  486. package/src/ranger/kv/client.ts +52 -21
  487. package/src/ranger/payload.ts +3 -0
  488. package/src/ranger/types.gen.ts +21 -23
  489. package/src/ranger/writer.ts +4 -8
  490. package/src/schematic/actions.gen.ts +62 -53
  491. package/src/schematic/actions.ts +44 -42
  492. package/src/schematic/client.ts +226 -70
  493. package/src/schematic/symbol/client.ts +277 -48
  494. package/src/schematic/symbol/types.gen.ts +22 -34
  495. package/src/schematic/types.gen.ts +22 -29
  496. package/src/status/client.ts +321 -44
  497. package/src/status/external.ts +2 -0
  498. package/src/status/payload.ts +1 -23
  499. package/src/status/status.ts +241 -0
  500. package/src/status/types.gen.ts +108 -0
  501. package/src/table/actions.gen.ts +96 -63
  502. package/src/table/actions.ts +44 -19
  503. package/src/table/client.ts +220 -56
  504. package/src/table/types.gen.ts +24 -31
  505. package/src/task/client.ts +580 -101
  506. package/src/task/types.gen.ts +68 -75
  507. package/src/testutil/access.ts +102 -6
  508. package/src/testutil/channels.ts +29 -0
  509. package/src/testutil/client.ts +27 -2
  510. package/src/testutil/connection.ts +47 -0
  511. package/src/testutil/index.ts +17 -0
  512. package/src/testutil/panels.ts +26 -0
  513. package/src/testutil/proxy.ts +106 -0
  514. package/src/testutil/query.ts +28 -0
  515. package/src/testutil/telem.ts +17 -1
  516. package/src/transport.ts +18 -7
  517. package/src/user/client.ts +165 -64
  518. package/src/user/external.ts +1 -1
  519. package/src/user/types.gen.ts +5 -5
  520. package/src/util/retrieve.ts +4 -4
  521. package/src/util/telem.ts +0 -1
  522. package/src/view/client.ts +120 -37
  523. package/src/view/types.gen.ts +8 -11
  524. package/.turbo/turbo-build.log +0 -20
  525. package/.vscode/settings.json +0 -3
  526. package/CONTRIBUTING.md +0 -47
  527. package/dist/client.cjs +0 -118
  528. package/dist/eslint.config.d.ts +0 -4
  529. package/dist/eslint.config.d.ts.map +0 -1
  530. package/dist/src/access/enforce.spec.d.ts +0 -2
  531. package/dist/src/access/enforce.spec.d.ts.map +0 -1
  532. package/dist/src/access/policy/access.spec.d.ts +0 -2
  533. package/dist/src/access/policy/access.spec.d.ts.map +0 -1
  534. package/dist/src/access/role/role.spec.d.ts +0 -2
  535. package/dist/src/access/role/role.spec.d.ts.map +0 -1
  536. package/dist/src/actions/actions.spec.d.ts +0 -2
  537. package/dist/src/actions/actions.spec.d.ts.map +0 -1
  538. package/dist/src/arc/access.spec.d.ts +0 -2
  539. package/dist/src/arc/access.spec.d.ts.map +0 -1
  540. package/dist/src/arc/arc.spec.d.ts +0 -2
  541. package/dist/src/arc/arc.spec.d.ts.map +0 -1
  542. package/dist/src/arc/lsp.spec.d.ts +0 -2
  543. package/dist/src/arc/lsp.spec.d.ts.map +0 -1
  544. package/dist/src/auth/auth.spec.d.ts +0 -2
  545. package/dist/src/auth/auth.spec.d.ts.map +0 -1
  546. package/dist/src/channel/access.spec.d.ts +0 -2
  547. package/dist/src/channel/access.spec.d.ts.map +0 -1
  548. package/dist/src/channel/batchRetriever.spec.d.ts +0 -2
  549. package/dist/src/channel/batchRetriever.spec.d.ts.map +0 -1
  550. package/dist/src/channel/channel.spec.d.ts +0 -2
  551. package/dist/src/channel/channel.spec.d.ts.map +0 -1
  552. package/dist/src/channel/payload.spec.d.ts +0 -2
  553. package/dist/src/channel/payload.spec.d.ts.map +0 -1
  554. package/dist/src/channel/retriever.d.ts +0 -64
  555. package/dist/src/channel/retriever.d.ts.map +0 -1
  556. package/dist/src/cluster/index.d.ts +0 -2
  557. package/dist/src/cluster/index.d.ts.map +0 -1
  558. package/dist/src/cluster/types.gen.d.ts +0 -4
  559. package/dist/src/cluster/types.gen.d.ts.map +0 -1
  560. package/dist/src/connection/checker.d.ts +0 -86
  561. package/dist/src/connection/checker.d.ts.map +0 -1
  562. package/dist/src/connection/connection.spec.d.ts +0 -2
  563. package/dist/src/connection/connection.spec.d.ts.map +0 -1
  564. package/dist/src/connection.spec.d.ts +0 -2
  565. package/dist/src/connection.spec.d.ts.map +0 -1
  566. package/dist/src/control/state.spec.d.ts +0 -2
  567. package/dist/src/control/state.spec.d.ts.map +0 -1
  568. package/dist/src/device/access.spec.d.ts +0 -2
  569. package/dist/src/device/access.spec.d.ts.map +0 -1
  570. package/dist/src/device/device.spec.d.ts +0 -2
  571. package/dist/src/device/device.spec.d.ts.map +0 -1
  572. package/dist/src/device/payload.spec.d.ts +0 -2
  573. package/dist/src/device/payload.spec.d.ts.map +0 -1
  574. package/dist/src/errors.spec.d.ts +0 -2
  575. package/dist/src/errors.spec.d.ts.map +0 -1
  576. package/dist/src/framer/adapter.spec.d.ts +0 -2
  577. package/dist/src/framer/adapter.spec.d.ts.map +0 -1
  578. package/dist/src/framer/client.spec.d.ts +0 -2
  579. package/dist/src/framer/client.spec.d.ts.map +0 -1
  580. package/dist/src/framer/codec.spec.d.ts +0 -2
  581. package/dist/src/framer/codec.spec.d.ts.map +0 -1
  582. package/dist/src/framer/deleter.spec.d.ts +0 -2
  583. package/dist/src/framer/deleter.spec.d.ts.map +0 -1
  584. package/dist/src/framer/frame.spec.d.ts +0 -2
  585. package/dist/src/framer/frame.spec.d.ts.map +0 -1
  586. package/dist/src/framer/iterator.spec.d.ts +0 -2
  587. package/dist/src/framer/iterator.spec.d.ts.map +0 -1
  588. package/dist/src/framer/reader.spec.d.ts +0 -2
  589. package/dist/src/framer/reader.spec.d.ts.map +0 -1
  590. package/dist/src/framer/streamer.spec.d.ts +0 -2
  591. package/dist/src/framer/streamer.spec.d.ts.map +0 -1
  592. package/dist/src/framer/writer.spec.d.ts +0 -2
  593. package/dist/src/framer/writer.spec.d.ts.map +0 -1
  594. package/dist/src/group/access.spec.d.ts +0 -2
  595. package/dist/src/group/access.spec.d.ts.map +0 -1
  596. package/dist/src/group/group.spec.d.ts +0 -2
  597. package/dist/src/group/group.spec.d.ts.map +0 -1
  598. package/dist/src/label/access.spec.d.ts +0 -2
  599. package/dist/src/label/access.spec.d.ts.map +0 -1
  600. package/dist/src/label/label.spec.d.ts +0 -2
  601. package/dist/src/label/label.spec.d.ts.map +0 -1
  602. package/dist/src/lineplot/access.spec.d.ts +0 -2
  603. package/dist/src/lineplot/access.spec.d.ts.map +0 -1
  604. package/dist/src/lineplot/lineplot.spec.d.ts +0 -2
  605. package/dist/src/lineplot/lineplot.spec.d.ts.map +0 -1
  606. package/dist/src/log/access.spec.d.ts +0 -2
  607. package/dist/src/log/access.spec.d.ts.map +0 -1
  608. package/dist/src/log/log.spec.d.ts +0 -2
  609. package/dist/src/log/log.spec.d.ts.map +0 -1
  610. package/dist/src/ontology/ontology.spec.d.ts +0 -2
  611. package/dist/src/ontology/ontology.spec.d.ts.map +0 -1
  612. package/dist/src/rack/access.spec.d.ts +0 -2
  613. package/dist/src/rack/access.spec.d.ts.map +0 -1
  614. package/dist/src/rack/rack.spec.d.ts +0 -2
  615. package/dist/src/rack/rack.spec.d.ts.map +0 -1
  616. package/dist/src/ranger/access.spec.d.ts +0 -2
  617. package/dist/src/ranger/access.spec.d.ts.map +0 -1
  618. package/dist/src/ranger/alias/payload.spec.d.ts +0 -2
  619. package/dist/src/ranger/alias/payload.spec.d.ts.map +0 -1
  620. package/dist/src/ranger/ranger.spec.d.ts +0 -2
  621. package/dist/src/ranger/ranger.spec.d.ts.map +0 -1
  622. package/dist/src/schematic/access.spec.d.ts +0 -2
  623. package/dist/src/schematic/access.spec.d.ts.map +0 -1
  624. package/dist/src/schematic/actions.spec.d.ts +0 -2
  625. package/dist/src/schematic/actions.spec.d.ts.map +0 -1
  626. package/dist/src/schematic/schematic.spec.d.ts +0 -2
  627. package/dist/src/schematic/schematic.spec.d.ts.map +0 -1
  628. package/dist/src/schematic/symbol/access.spec.d.ts +0 -2
  629. package/dist/src/schematic/symbol/access.spec.d.ts.map +0 -1
  630. package/dist/src/schematic/symbol/client.spec.d.ts +0 -2
  631. package/dist/src/schematic/symbol/client.spec.d.ts.map +0 -1
  632. package/dist/src/status/access.spec.d.ts +0 -2
  633. package/dist/src/status/access.spec.d.ts.map +0 -1
  634. package/dist/src/status/status.spec.d.ts +0 -2
  635. package/dist/src/status/status.spec.d.ts.map +0 -1
  636. package/dist/src/table/access.spec.d.ts +0 -2
  637. package/dist/src/table/access.spec.d.ts.map +0 -1
  638. package/dist/src/table/table.spec.d.ts +0 -2
  639. package/dist/src/table/table.spec.d.ts.map +0 -1
  640. package/dist/src/task/access.spec.d.ts +0 -2
  641. package/dist/src/task/access.spec.d.ts.map +0 -1
  642. package/dist/src/task/payload.spec.d.ts +0 -2
  643. package/dist/src/task/payload.spec.d.ts.map +0 -1
  644. package/dist/src/task/task.spec.d.ts +0 -2
  645. package/dist/src/task/task.spec.d.ts.map +0 -1
  646. package/dist/src/user/access.spec.d.ts +0 -2
  647. package/dist/src/user/access.spec.d.ts.map +0 -1
  648. package/dist/src/user/user.spec.d.ts +0 -2
  649. package/dist/src/user/user.spec.d.ts.map +0 -1
  650. package/dist/src/util/retrieve.spec.d.ts +0 -2
  651. package/dist/src/util/retrieve.spec.d.ts.map +0 -1
  652. package/dist/src/view/view.spec.d.ts +0 -2
  653. package/dist/src/view/view.spec.d.ts.map +0 -1
  654. package/dist/src/workspace/access.spec.d.ts +0 -2
  655. package/dist/src/workspace/access.spec.d.ts.map +0 -1
  656. package/dist/src/workspace/client.d.ts +0 -36
  657. package/dist/src/workspace/client.d.ts.map +0 -1
  658. package/dist/src/workspace/external.d.ts.map +0 -1
  659. package/dist/src/workspace/index.d.ts +0 -2
  660. package/dist/src/workspace/index.d.ts.map +0 -1
  661. package/dist/src/workspace/types.gen.d.ts +0 -34
  662. package/dist/src/workspace/types.gen.d.ts.map +0 -1
  663. package/dist/src/workspace/workspace.spec.d.ts +0 -2
  664. package/dist/src/workspace/workspace.spec.d.ts.map +0 -1
  665. package/examples/node/basicReadWrite.js +0 -86
  666. package/examples/node/createChannels.js +0 -50
  667. package/examples/node/createRange.js +0 -67
  668. package/examples/node/package-lock.json +0 -133
  669. package/examples/node/package.json +0 -17
  670. package/examples/node/readLatest.js +0 -76
  671. package/examples/node/seriesAndFrames.js +0 -173
  672. package/examples/node/streamRead.js +0 -50
  673. package/examples/node/streamWrite.js +0 -87
  674. package/src/access/enforce.spec.ts +0 -188
  675. package/src/access/policy/access.spec.ts +0 -147
  676. package/src/access/role/role.spec.ts +0 -95
  677. package/src/actions/actions.spec.ts +0 -229
  678. package/src/arc/access.spec.ts +0 -149
  679. package/src/arc/arc.spec.ts +0 -44
  680. package/src/arc/lsp.spec.ts +0 -717
  681. package/src/auth/auth.spec.ts +0 -101
  682. package/src/channel/access.spec.ts +0 -116
  683. package/src/channel/batchRetriever.spec.ts +0 -115
  684. package/src/channel/channel.spec.ts +0 -352
  685. package/src/channel/payload.spec.ts +0 -117
  686. package/src/channel/retriever.ts +0 -252
  687. package/src/connection/checker.ts +0 -203
  688. package/src/connection/connection.spec.ts +0 -152
  689. package/src/connection.spec.ts +0 -145
  690. package/src/control/state.spec.ts +0 -22
  691. package/src/device/access.spec.ts +0 -159
  692. package/src/device/device.spec.ts +0 -461
  693. package/src/device/payload.spec.ts +0 -142
  694. package/src/errors.spec.ts +0 -71
  695. package/src/framer/adapter.spec.ts +0 -620
  696. package/src/framer/client.spec.ts +0 -180
  697. package/src/framer/codec.spec.ts +0 -383
  698. package/src/framer/deleter.spec.ts +0 -103
  699. package/src/framer/frame.spec.ts +0 -973
  700. package/src/framer/iterator.spec.ts +0 -169
  701. package/src/framer/reader.spec.ts +0 -865
  702. package/src/framer/streamer.spec.ts +0 -871
  703. package/src/framer/writer.spec.ts +0 -486
  704. package/src/group/access.spec.ts +0 -77
  705. package/src/group/group.spec.ts +0 -65
  706. package/src/label/access.spec.ts +0 -109
  707. package/src/label/label.spec.ts +0 -83
  708. package/src/lineplot/access.spec.ts +0 -134
  709. package/src/lineplot/lineplot.spec.ts +0 -120
  710. package/src/log/access.spec.ts +0 -132
  711. package/src/log/log.spec.ts +0 -106
  712. package/src/ontology/ontology.spec.ts +0 -521
  713. package/src/rack/access.spec.ts +0 -102
  714. package/src/rack/rack.spec.ts +0 -171
  715. package/src/ranger/access.spec.ts +0 -115
  716. package/src/ranger/alias/payload.spec.ts +0 -52
  717. package/src/ranger/ranger.spec.ts +0 -343
  718. package/src/schematic/access.spec.ts +0 -134
  719. package/src/schematic/actions.spec.ts +0 -699
  720. package/src/schematic/schematic.spec.ts +0 -340
  721. package/src/schematic/symbol/access.spec.ts +0 -172
  722. package/src/schematic/symbol/client.spec.ts +0 -160
  723. package/src/status/access.spec.ts +0 -129
  724. package/src/status/status.spec.ts +0 -448
  725. package/src/table/access.spec.ts +0 -128
  726. package/src/table/table.spec.ts +0 -651
  727. package/src/task/access.spec.ts +0 -131
  728. package/src/task/payload.spec.ts +0 -113
  729. package/src/task/task.spec.ts +0 -657
  730. package/src/user/access.spec.ts +0 -107
  731. package/src/user/user.spec.ts +0 -290
  732. package/src/util/retrieve.spec.ts +0 -49
  733. package/src/view/view.spec.ts +0 -165
  734. package/src/workspace/access.spec.ts +0 -108
  735. package/src/workspace/client.ts +0 -112
  736. package/src/workspace/types.gen.ts +0 -46
  737. package/src/workspace/workspace.spec.ts +0 -111
  738. package/tsconfig.json +0 -5
  739. package/tsconfig.vite.json +0 -4
  740. package/vite.config.ts +0 -29
  741. /package/dist/src/{workspace → project}/external.d.ts +0 -0
@@ -8,17 +8,19 @@
8
8
  // included in the file licenses/APL.txt.
9
9
 
10
10
  import { type UnaryClient } from "@synnaxlabs/freighter";
11
- import { array } from "@synnaxlabs/x";
11
+ import { array, primitive, zod } from "@synnaxlabs/x";
12
12
  import z from "zod";
13
13
 
14
- import { type Key, keyZ, type Label, labelZ, type New, newZ } from "@/label/payload";
14
+ import { LABELED_BY_ONTOLOGY_RELATIONSHIP_TYPE } from "@/label/payload";
15
+ import { matchLabeledBy } from "@/label/store";
16
+ import { type Key, keyZ, type Label, labelZ, type New } from "@/label/types.gen";
15
17
  import { ontology } from "@/ontology";
16
- import { checkForMultipleOrNoResults } from "@/util/retrieve";
18
+ import { query } from "@/query";
17
19
 
18
20
  export const SET_CHANNEL_NAME = "sy_label_set";
19
21
  export const DELETE_CHANNEL_NAME = "sy_label_delete";
20
22
 
21
- const createReqZ = z.object({ labels: newZ.array() });
23
+ const createReqZ = z.object({ labels: labelZ.array() });
22
24
  const createResZ = z.object({ labels: labelZ.array() });
23
25
  const deleteReqZ = z.object({ keys: keyZ.array() });
24
26
  const setReqZ = z.object({
@@ -28,6 +30,7 @@ const setReqZ = z.object({
28
30
  });
29
31
 
30
32
  interface SetReq extends z.infer<typeof setReqZ> {}
33
+ /** Options for `Client.set`. Set `replace` to swap the whole label set at once. */
31
34
  export interface SetOptions extends Pick<SetReq, "replace"> {}
32
35
 
33
36
  const removeReqZ = setReqZ.omit({ replace: true });
@@ -40,77 +43,213 @@ const retrieveRequestZ = z.object({
40
43
  searchTerm: z.string().optional(),
41
44
  offset: z.int().optional(),
42
45
  limit: z.int().optional(),
46
+ ignoreNotFoundError: z.boolean().optional(),
43
47
  });
48
+ const retrieveMultiParamsZ = retrieveRequestZ.or(query.keyListZ(keyZ));
44
49
 
45
- const singleRetrieveArgsZ = z
46
- .object({ key: keyZ })
47
- .transform(({ key }) => ({ keys: [key] }));
48
-
49
- const retrieveArgsZ = z.union([singleRetrieveArgsZ, retrieveRequestZ]);
50
-
51
- export type RetrieveArgs = z.input<typeof retrieveArgsZ>;
52
- export type RetrieveSingleParams = z.input<typeof singleRetrieveArgsZ>;
50
+ /** Names one label. */
51
+ export type RetrieveSingleParams = { key: Key };
52
+ /** Everything a multi-label retrieval can filter on, including the resource labeled. */
53
53
  export type RetrieveMultipleParams = z.input<typeof retrieveRequestZ>;
54
+ /** Params for a label retrieval, single or multiple. */
55
+ export type RetrieveParams = RetrieveSingleParams | RetrieveMultipleParams;
54
56
 
55
- const retrieveResponseZ = z.object({ labels: array.nullishToEmpty(labelZ) });
57
+ interface RetrieveRequest extends z.infer<typeof retrieveRequestZ> {}
56
58
 
57
- export class Client {
59
+ /** Config for {@link Client}. */
60
+ export interface ClientConfig {
61
+ unary: UnaryClient;
62
+ cache: query.Cache;
63
+ ontology: ontology.Client;
64
+ }
65
+
66
+ /**
67
+ * Creates, reads, deletes, and attaches labels on a Core. Reach it through
68
+ * `client.labels`.
69
+ */
70
+ export class Client extends query.Retriever<typeof retrieveMultiParamsZ, Key, Label> {
58
71
  readonly type: string = "label";
59
- private readonly client: UnaryClient;
72
+ /** The label record table; injected into sibling clients at wiring. */
73
+ readonly store: query.Table<Key, Label>;
74
+ private readonly cfg: ClientConfig;
75
+
76
+ constructor(cfg: ClientConfig) {
77
+ const { cache, ontology: ontologyClient } = cfg;
78
+ const { relationships } = ontologyClient.cache;
79
+ const store = cache.createTable<Key, Label>({
80
+ name: "labels",
81
+ fetch: async (keys) =>
82
+ await this.execRetrieve({ keys, ignoreNotFoundError: true }),
83
+ listen: [
84
+ query.createSetListener(SET_CHANNEL_NAME, labelZ),
85
+ query.createDeleteListener(DELETE_CHANNEL_NAME, keyZ),
86
+ ],
87
+ });
88
+ super(cache, {
89
+ name: "label",
90
+ table: store,
91
+ request: {
92
+ schema: retrieveMultiParamsZ,
93
+ fetch: async (req) => await this.execRetrieve(req),
94
+ matches: (label, req) => this.requestFilter(req)(label),
95
+ watch: [
96
+ query.watch(relationships, (event, req: RetrieveRequest) => {
97
+ if (req.for == null) return null;
98
+ const rel =
99
+ event.variant === "set"
100
+ ? event.value
101
+ : ontology.relationshipZ.parse(event.key);
102
+ if (!matchLabeledBy(rel, req.for)) return null;
103
+ return [rel.to.key];
104
+ }),
105
+ ],
106
+ },
107
+ });
108
+ this.cfg = cfg;
109
+ this.store = store;
110
+ }
60
111
 
61
- constructor(client: UnaryClient) {
62
- this.client = client;
112
+ async label(
113
+ id: ontology.ID,
114
+ labels: Key[],
115
+ opts: SetOptions & query.WriteOptions = {},
116
+ ): Promise<void> {
117
+ await query.optimistic({
118
+ rollbacks: [
119
+ ...(opts.replace === true
120
+ ? [this.cfg.ontology.cache.relationships.delete((r) => matchLabeledBy(r, id))]
121
+ : []),
122
+ ...labels.map((key) => {
123
+ const rel = labeledByRel(id, key);
124
+ return this.cfg.ontology.cache.relationships.set(
125
+ ontology.relationshipToString(rel),
126
+ rel,
127
+ );
128
+ }),
129
+ ],
130
+ onOptimistic: opts.onOptimistic,
131
+ commit: async () =>
132
+ await this.cfg.unary.send(
133
+ "/label/set",
134
+ { id, labels, replace: opts.replace },
135
+ setReqZ,
136
+ emptyResZ,
137
+ ),
138
+ });
63
139
  }
64
140
 
65
- async retrieve(args: RetrieveSingleParams): Promise<Label>;
66
- async retrieve(args: RetrieveMultipleParams): Promise<Label[]>;
67
- async retrieve(args: RetrieveArgs): Promise<Label | Label[]> {
68
- const isSingle = "key" in args;
69
- const res = await this.client.send(
70
- "/label/retrieve",
71
- args,
72
- retrieveArgsZ,
73
- retrieveResponseZ,
74
- );
75
- checkForMultipleOrNoResults("Label", args, res.labels, isSingle);
76
- return isSingle ? res.labels[0] : res.labels;
141
+ async remove(
142
+ id: ontology.ID,
143
+ labels: Key[],
144
+ opts: query.WriteOptions = {},
145
+ ): Promise<void> {
146
+ await query.optimistic({
147
+ rollbacks: [
148
+ this.cfg.ontology.cache.relationships.delete(
149
+ (r) => matchLabeledBy(r, id) && labels.includes(r.to.key),
150
+ ),
151
+ ],
152
+ onOptimistic: opts.onOptimistic,
153
+ commit: async () =>
154
+ await this.cfg.unary.send(
155
+ "/label/remove",
156
+ { id, labels },
157
+ removeReqZ,
158
+ emptyResZ,
159
+ ),
160
+ });
77
161
  }
78
162
 
79
- async label(id: ontology.ID, labels: Key[], opts: SetOptions = {}): Promise<void> {
80
- await this.client.send(
81
- "/label/set",
82
- { id, labels, replace: opts.replace },
83
- setReqZ,
84
- emptyResZ,
85
- );
163
+ async create(label: New, opts?: query.WriteOptions<Label[]>): Promise<Label>;
164
+ async create(labels: New[], opts?: query.WriteOptions<Label[]>): Promise<Label[]>;
165
+ async create(
166
+ labels: New | New[],
167
+ opts: query.WriteOptions<Label[]> = {},
168
+ ): Promise<Label | Label[]> {
169
+ const isMany = Array.isArray(labels);
170
+ const optimistic = array
171
+ .toArray(labels)
172
+ .map((l) => zod.parse(labelZ, l, { label: "label" }));
173
+ const res = await query.optimistic({
174
+ rollbacks: [this.store.set(optimistic)],
175
+ onOptimistic: () => opts.onOptimistic?.(optimistic),
176
+ commit: async () =>
177
+ await this.cfg.unary.send(
178
+ "/label/create",
179
+ { labels: optimistic },
180
+ createReqZ,
181
+ createResZ,
182
+ ),
183
+ });
184
+ this.store.set(res.labels);
185
+ return isMany ? res.labels : res.labels[0];
86
186
  }
87
187
 
88
- async remove(id: ontology.ID, labels: Key[]): Promise<void> {
89
- await this.client.send("/label/remove", { id, labels }, removeReqZ, emptyResZ);
188
+ async delete(keys: Key | Key[], opts: query.WriteOptions = {}): Promise<void> {
189
+ const keysArr = array.toArray(keys);
190
+ const drop = () => [
191
+ this.store.delete(keysArr),
192
+ this.cfg.ontology.cache.relationships.delete(
193
+ (r) =>
194
+ r.type === LABELED_BY_ONTOLOGY_RELATIONSHIP_TYPE &&
195
+ r.to.type === "label" &&
196
+ keysArr.includes(r.to.key),
197
+ ),
198
+ ];
199
+ await query.optimistic({
200
+ rollbacks: drop(),
201
+ onOptimistic: opts.onOptimistic,
202
+ commit: async () =>
203
+ await this.cfg.unary.send(
204
+ "/label/delete",
205
+ { keys: keysArr },
206
+ deleteReqZ,
207
+ emptyResZ,
208
+ ),
209
+ });
210
+ drop();
90
211
  }
91
212
 
92
- async create(label: New): Promise<Label>;
93
- async create(labels: New[]): Promise<Label[]>;
94
- async create(labels: New | New[]): Promise<Label | Label[]> {
95
- const isMany = Array.isArray(labels);
96
- const res = await this.client.send(
97
- "/label/create",
98
- { labels: array.toArray(labels) },
99
- createReqZ,
100
- createResZ,
213
+ private async execRetrieve(params: RetrieveMultipleParams): Promise<Label[]> {
214
+ const res = await this.cfg.unary.send(
215
+ "/label/retrieve",
216
+ params,
217
+ retrieveRequestZ,
218
+ retrieveResponseZ,
101
219
  );
102
- return isMany ? res.labels : res.labels[0];
220
+ return res.labels;
103
221
  }
104
222
 
105
- async delete(keys: Key | Key[]): Promise<void> {
106
- await this.client.send(
107
- "/label/delete",
108
- { keys: array.toArray(keys) },
109
- deleteReqZ,
110
- emptyResZ,
223
+ /**
224
+ * Client-side matching for a request: key sets, names, and labeled-entity
225
+ * membership via the relationship table. Server-computed shapes (search,
226
+ * limit/offset) never reach this filter; they refetch instead.
227
+ */
228
+ private requestFilter(req: RetrieveRequest): (l: Label) => boolean {
229
+ const keySet = primitive.isNonZero(req.keys) ? new Set(req.keys) : undefined;
230
+ const nameSet = primitive.isNonZero(req.names) ? new Set(req.names) : undefined;
231
+ return (l) => {
232
+ if (keySet != null && !keySet.has(l.key)) return false;
233
+ if (nameSet != null && !nameSet.has(l.name)) return false;
234
+ if (req.for != null && !this.isLabelOf(req.for, l.key)) return false;
235
+ return true;
236
+ };
237
+ }
238
+
239
+ private isLabelOf(id: ontology.ID, key: Key): boolean {
240
+ return this.cfg.ontology.cache.relationships.has(
241
+ ontology.relationshipToString(labeledByRel(id, key)),
111
242
  );
112
243
  }
113
244
  }
114
245
 
246
+ const retrieveResponseZ = z.object({ labels: labelZ.array().default(() => []) });
247
+
248
+ const labeledByRel = (id: ontology.ID, key: Key): ontology.Relationship => ({
249
+ from: id,
250
+ type: LABELED_BY_ONTOLOGY_RELATIONSHIP_TYPE,
251
+ to: ontologyID(key),
252
+ });
253
+
115
254
  export const ontologyID = ontology.createIDFactory<Key>("label");
116
255
  export const TYPE_ONTOLOGY_ID = ontologyID("");
@@ -9,3 +9,5 @@
9
9
 
10
10
  export * from "@/label/client";
11
11
  export * from "@/label/payload";
12
+ export { cachedLabelsOf, matchLabeledBy } from "@/label/store";
13
+ export * from "@/label/types.gen";
@@ -7,15 +7,10 @@
7
7
  // License, use of this software will be governed by the Apache License, Version 2.0,
8
8
  // included in the file licenses/APL.txt.
9
9
 
10
- import { label } from "@synnaxlabs/x";
10
+ import { type Key } from "@/label/types.gen";
11
11
 
12
- export type Params = label.Key | label.Key[];
13
-
14
- export const keyZ = label.keyZ;
15
- export type Key = label.Key;
16
- export const labelZ = label.labelZ;
17
- export interface Label extends label.Label {}
18
- export const newZ = label.newZ;
19
- export interface New extends label.New {}
12
+ /** One or many labels, by key. */
13
+ export type Params = Key | Key[];
20
14
 
15
+ /** Relationship type joining a resource to the labels on it. */
21
16
  export const LABELED_BY_ONTOLOGY_RELATIONSHIP_TYPE = "labeled_by";
@@ -0,0 +1,28 @@
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
+ import { LABELED_BY_ONTOLOGY_RELATIONSHIP_TYPE } from "@/label/payload";
11
+ import { type Key, type Label } from "@/label/types.gen";
12
+ import { ontology } from "@/ontology";
13
+ import { type query } from "@/query";
14
+
15
+ /** Reports whether the relationship labels the given ontology ID. */
16
+ export const matchLabeledBy = (rel: ontology.Relationship, id: ontology.ID): boolean =>
17
+ ontology.matchRelationship(rel, {
18
+ from: id,
19
+ type: LABELED_BY_ONTOLOGY_RELATIONSHIP_TYPE,
20
+ });
21
+
22
+ /** Returns the cached labels attached to the given ontology ID. */
23
+ export const cachedLabelsOf = (
24
+ relationships: query.Table<string, ontology.Relationship>,
25
+ labels: query.Table<Key, Label>,
26
+ id: ontology.ID,
27
+ ): Label[] =>
28
+ labels.get(relationships.get((r) => matchLabeledBy(r, id)).map((r) => r.to.key));
@@ -0,0 +1,31 @@
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
+ // Code generated by Oracle. DO NOT EDIT.
11
+
12
+ import { color, uuid } from "@synnaxlabs/x";
13
+ import { z } from "zod";
14
+
15
+ export const keyZ = z.uuid();
16
+ export type Key = z.infer<typeof keyZ>;
17
+
18
+ /**
19
+ * Label is a tagging and categorization entity with a name and associated color. Labels
20
+ * can be attached to resources like ranges for organization and filtering.
21
+ */
22
+ export const labelZ = z.object({
23
+ /** key is the unique identifier for this label. */
24
+ key: keyZ.default(uuid.create),
25
+ /** name is a human-readable name for the label. */
26
+ name: z.string().min(1),
27
+ /** color is the display color for visual identification of the label. */
28
+ color: color.colorZ,
29
+ });
30
+ export interface Label extends z.infer<typeof labelZ> {}
31
+ export interface New extends z.input<typeof labelZ> {}
@@ -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 * from "@/labjack/types.gen";
@@ -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 labjack from "@/labjack/external";
@@ -0,0 +1,251 @@
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
+ // Code generated by Oracle. DO NOT EDIT.
11
+
12
+ import { id } from "@synnaxlabs/x";
13
+ import { z } from "zod";
14
+
15
+ import { channel } from "@/channel";
16
+ import { device } from "@/device";
17
+ import { task } from "@/task";
18
+
19
+ export const TEMPERATURE_UNITS = ["C", "F", "K"] as const;
20
+ export const temperatureUnitsZ = z.enum(TEMPERATURE_UNITS);
21
+ export type TemperatureUnits = z.infer<typeof temperatureUnitsZ>;
22
+
23
+ export const THERMOCOUPLE_TYPES = [
24
+ "J",
25
+ "K",
26
+ "N",
27
+ "R",
28
+ "S",
29
+ "T",
30
+ "B",
31
+ "E",
32
+ "C",
33
+ ] as const;
34
+ export const thermocoupleTypeZ = z.enum(THERMOCOUPLE_TYPES);
35
+ export type ThermocoupleType = z.infer<typeof thermocoupleTypeZ>;
36
+
37
+ /** BaseReadChannel carries the fields every LabJack read channel shares. */
38
+ export const baseReadChannelZ = z.object({
39
+ /** key uniquely identifies the channel within the task. */
40
+ key: z.string().default(id.create),
41
+ /** name is the human-readable channel name. */
42
+ name: z.string().default(""),
43
+ /** disabled is true when the channel is excluded from acquisition. */
44
+ disabled: z.boolean().default(false),
45
+ /** channel is the Synnax channel that raw samples are written to. */
46
+ channel: channel.keyZ.default(0),
47
+ /** port is the physical port the channel reads from (e.g. 'AIN0', 'DIO4'). */
48
+ port: z.string().default(""),
49
+ });
50
+ export interface BaseReadChannel extends z.infer<typeof baseReadChannelZ> {}
51
+
52
+ /** BaseWriteChannel carries the fields every LabJack write channel shares. */
53
+ export const baseWriteChannelZ = z.object({
54
+ /** key uniquely identifies the channel within the task. */
55
+ key: z.string().default(id.create),
56
+ /** disabled is true when the channel is excluded from the task. */
57
+ disabled: z.boolean().default(false),
58
+ /** cmdChannel is the Synnax channel commands are read from. */
59
+ cmdChannel: channel.keyZ.default(0),
60
+ /** stateChannel is the Synnax channel the output state is written to. */
61
+ stateChannel: channel.keyZ.default(0),
62
+ /** cmdChannelName is the human-readable name of the command channel. */
63
+ cmdChannelName: z.string().default(""),
64
+ /** stateChannelName is the human-readable name of the state channel. */
65
+ stateChannelName: z.string().default(""),
66
+ /** port is the physical port the channel writes to (e.g. 'DAC0', 'DIO4'). */
67
+ port: z.string().default(""),
68
+ });
69
+ export interface BaseWriteChannel extends z.infer<typeof baseWriteChannelZ> {}
70
+
71
+ export const scanConfigZ = task.scanConfigZ.extend({
72
+ tcpScanMultiplier: z.int32().default(10),
73
+ });
74
+ export interface ScanConfig extends z.infer<typeof scanConfigZ> {}
75
+
76
+ /** LinearScale maps raw values to engineering units with a slope and offset. */
77
+ export const linearScaleZ = z.object({
78
+ type: z.literal("linear"),
79
+ /** slope is the multiplier applied to the raw value. */
80
+ slope: z.number().default(1),
81
+ /** offset is the offset added after scaling. */
82
+ offset: z.number().default(0),
83
+ });
84
+ export interface LinearScale extends z.infer<typeof linearScaleZ> {}
85
+
86
+ /** MapScale maps a raw range linearly onto a scaled range. */
87
+ export const mapScaleZ = z.object({
88
+ type: z.literal("map"),
89
+ /** preScaledMin is the lower bound of the raw input range. */
90
+ preScaledMin: z.number().default(0),
91
+ /** preScaledMax is the upper bound of the raw input range. */
92
+ preScaledMax: z.number().default(1),
93
+ /** scaledMin is the lower bound of the scaled output range. */
94
+ scaledMin: z.number().default(0),
95
+ /** scaledMax is the upper bound of the scaled output range. */
96
+ scaledMax: z.number().default(1),
97
+ });
98
+ export interface MapScale extends z.infer<typeof mapScaleZ> {}
99
+
100
+ /** NoneScale applies no scaling; the raw value is used directly. */
101
+ export const noneScaleZ = z.object({
102
+ type: z.literal("none"),
103
+ });
104
+ export interface NoneScale extends z.infer<typeof noneScaleZ> {}
105
+
106
+ export const SCALE_TYPES = ["linear", "map", "none"] as const;
107
+ export const scaleTypeZ = z.enum(SCALE_TYPES);
108
+ export type ScaleType = z.infer<typeof scaleTypeZ>;
109
+
110
+ /** Scale determines how raw sensor values are transformed to engineering units. */
111
+ export const scaleZ = z.discriminatedUnion("type", [
112
+ linearScaleZ,
113
+ mapScaleZ,
114
+ noneScaleZ,
115
+ ]);
116
+ export type Scale = LinearScale | MapScale | NoneScale;
117
+
118
+ export const SCALE_SCHEMAS: {
119
+ [K in ScaleType]: z.ZodType<Extract<Scale, { type: K }>>;
120
+ } = {
121
+ linear: linearScaleZ,
122
+ map: mapScaleZ,
123
+ none: noneScaleZ,
124
+ };
125
+
126
+ /** AnalogWriteChannel drives an analog output on a DAC port. */
127
+ export const analogWriteChannelZ = baseWriteChannelZ.extend({
128
+ type: z.literal("analog"),
129
+ port: z.string().default("DAC0"),
130
+ });
131
+ export interface AnalogWriteChannel extends z.infer<typeof analogWriteChannelZ> {}
132
+
133
+ /** DigitalWriteChannel drives a digital output line on a DIO port. */
134
+ export const digitalWriteChannelZ = baseWriteChannelZ.extend({
135
+ type: z.literal("digital"),
136
+ port: z.string().default("DIO4"),
137
+ });
138
+ export interface DigitalWriteChannel extends z.infer<typeof digitalWriteChannelZ> {}
139
+
140
+ export const WRITE_CHANNEL_TYPES = ["analog", "digital"] as const;
141
+ export const writeChannelTypeZ = z.enum(WRITE_CHANNEL_TYPES);
142
+ export type WriteChannelType = z.infer<typeof writeChannelTypeZ>;
143
+
144
+ /**
145
+ * WriteChannel is a single LabJack write channel. The type field selects the output
146
+ * mode.
147
+ */
148
+ export const writeChannelZ = z.discriminatedUnion("type", [
149
+ analogWriteChannelZ,
150
+ digitalWriteChannelZ,
151
+ ]);
152
+ export type WriteChannel = AnalogWriteChannel | DigitalWriteChannel;
153
+
154
+ export const WRITE_CHANNEL_SCHEMAS: {
155
+ [K in WriteChannelType]: z.ZodType<Extract<WriteChannel, { type: K }>>;
156
+ } = {
157
+ analog: analogWriteChannelZ,
158
+ digital: digitalWriteChannelZ,
159
+ };
160
+
161
+ /** AnalogReadChannel reads a voltage from an analog input port. */
162
+ export const analogReadChannelZ = baseReadChannelZ.extend({
163
+ type: z.literal("analog"),
164
+ port: z.string().default("AIN0"),
165
+ /** range is the upper bound of the voltage input range, in Volts. */
166
+ range: z.number().default(10),
167
+ /**
168
+ * negChan is the negative channel for differential readings on T7 devices. 199
169
+ * selects single-ended.
170
+ */
171
+ negChan: z.int32().default(199),
172
+ /** scale is the scale applied to raw samples after acquisition. */
173
+ scale: scaleZ.prefault({ type: "none" }),
174
+ });
175
+ export interface AnalogReadChannel extends z.infer<typeof analogReadChannelZ> {}
176
+
177
+ /** DigitalReadChannel reads a digital input line. */
178
+ export const digitalReadChannelZ = baseReadChannelZ.extend({
179
+ type: z.literal("digital"),
180
+ port: z.string().default("DIO4"),
181
+ });
182
+ export interface DigitalReadChannel extends z.infer<typeof digitalReadChannelZ> {}
183
+
184
+ /** ThermocoupleReadChannel reads temperature from a thermocouple. */
185
+ export const thermocoupleReadChannelZ = baseReadChannelZ.extend({
186
+ type: z.literal("thermocouple"),
187
+ /** port is the AIN port the thermocouple's positive lead is wired to. */
188
+ port: z.string().default("AIN0"),
189
+ /** thermocoupleType selects the thermocouple alloy type. */
190
+ thermocoupleType: thermocoupleTypeZ.default("K"),
191
+ /**
192
+ * negChan is the AIN port of the thermocouple's negative lead on T7 devices. 199
193
+ * selects single-ended.
194
+ */
195
+ negChan: z.int32().default(199),
196
+ /**
197
+ * cjcSource selects the cold-junction-compensation source: the device sensor
198
+ * ('TEMPERATURE_DEVICE_K'), ambient air ('TEMPERATURE_AIR_K'), or an AIN port (e.g.
199
+ * 'AIN2').
200
+ */
201
+ cjcSource: z.string().default("TEMPERATURE_DEVICE_K"),
202
+ /** cjcSlope is the CJC voltage-to-temperature slope, in Kelvin per Volt. */
203
+ cjcSlope: z.number().default(1),
204
+ /** cjcOffset is the CJC temperature offset, in Kelvins. */
205
+ cjcOffset: z.number().default(0),
206
+ /** units are the units of the temperature measurement. */
207
+ units: temperatureUnitsZ.default("K"),
208
+ /** scale is the scale applied to raw samples after acquisition. */
209
+ scale: scaleZ.prefault({ type: "none" }),
210
+ });
211
+ export interface ThermocoupleReadChannel extends z.infer<
212
+ typeof thermocoupleReadChannelZ
213
+ > {}
214
+
215
+ export const READ_CHANNEL_TYPES = ["analog", "digital", "thermocouple"] as const;
216
+ export const readChannelTypeZ = z.enum(READ_CHANNEL_TYPES);
217
+ export type ReadChannelType = z.infer<typeof readChannelTypeZ>;
218
+
219
+ /**
220
+ * ReadChannel is a single LabJack read channel. The type field selects the input mode
221
+ * and the fields that accompany it.
222
+ */
223
+ export const readChannelZ = z.discriminatedUnion("type", [
224
+ analogReadChannelZ,
225
+ digitalReadChannelZ,
226
+ thermocoupleReadChannelZ,
227
+ ]);
228
+ export type ReadChannel =
229
+ AnalogReadChannel | DigitalReadChannel | ThermocoupleReadChannel;
230
+
231
+ export const READ_CHANNEL_SCHEMAS: {
232
+ [K in ReadChannelType]: z.ZodType<Extract<ReadChannel, { type: K }>>;
233
+ } = {
234
+ analog: analogReadChannelZ,
235
+ digital: digitalReadChannelZ,
236
+ thermocouple: thermocoupleReadChannelZ,
237
+ };
238
+
239
+ export const writeConfigZ = task.writeConfigZ.extend({
240
+ stateRate: z.number().default(10),
241
+ channels: writeChannelZ.array().default(() => []),
242
+ });
243
+ export interface WriteConfig extends z.infer<typeof writeConfigZ> {}
244
+
245
+ export const readConfigZ = task.readConfigZ.extend({
246
+ device: device.keyZ.default(""),
247
+ channels: readChannelZ.array().default(() => []),
248
+ deviceScanBacklogWarnOnCount: z.uint32().default(0),
249
+ ljmScanBacklogWarnOnCount: z.uint32().default(0),
250
+ });
251
+ export interface ReadConfig extends z.infer<typeof readConfigZ> {}