@synnaxlabs/client 0.2.0 → 0.13.5

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 (409) hide show
  1. package/.eslintrc.cjs +18 -0
  2. package/.pytest_cache/README.md +8 -0
  3. package/.turbo/turbo-build.log +16 -0
  4. package/LICENSE +4 -21
  5. package/{build/main/lib → dist/auth}/auth.d.ts +16 -19
  6. package/dist/auth/index.d.ts +1 -0
  7. package/dist/cdc/external.d.ts +1 -0
  8. package/dist/cdc/index.d.ts +1 -0
  9. package/dist/cdc/observable.d.ts +17 -0
  10. package/dist/channel/client.d.ts +58 -0
  11. package/dist/channel/creator.d.ts +8 -0
  12. package/dist/channel/external.d.ts +4 -0
  13. package/dist/channel/index.d.ts +1 -0
  14. package/dist/channel/payload.d.ts +63 -0
  15. package/dist/channel/retriever.d.ts +49 -0
  16. package/dist/client.cjs.js +23050 -0
  17. package/dist/client.cjs.js.map +1 -0
  18. package/dist/client.d.ts +73 -0
  19. package/dist/client.es.js +23050 -0
  20. package/dist/client.es.js.map +1 -0
  21. package/dist/connection/checker.d.ts +66 -0
  22. package/dist/connection/index.d.ts +1 -0
  23. package/dist/control/authority.d.ts +6 -0
  24. package/dist/control/external.d.ts +2 -0
  25. package/dist/control/index.d.ts +1 -0
  26. package/dist/control/state.d.ts +81 -0
  27. package/{build/main/lib → dist}/errors.d.ts +6 -3
  28. package/dist/framer/adapter.d.ts +21 -0
  29. package/dist/framer/client.d.ts +44 -0
  30. package/dist/framer/external.d.ts +5 -0
  31. package/dist/framer/frame.d.ts +251 -0
  32. package/dist/framer/index.d.ts +1 -0
  33. package/{build/module/lib/segment → dist/framer}/iterator.d.ts +32 -64
  34. package/dist/framer/streamProxy.d.ts +12 -0
  35. package/dist/framer/streamer.d.ts +17 -0
  36. package/dist/framer/writer.d.ts +257 -0
  37. package/dist/index.d.ts +16 -0
  38. package/dist/label/client.d.ts +25 -0
  39. package/dist/label/external.d.ts +4 -0
  40. package/dist/label/index.d.ts +1 -0
  41. package/dist/label/payload.d.ts +20 -0
  42. package/dist/label/retriever.d.ts +13 -0
  43. package/dist/label/writer.d.ts +26 -0
  44. package/dist/ontology/cdc.d.ts +25 -0
  45. package/dist/ontology/client.d.ts +25 -0
  46. package/dist/ontology/external.d.ts +3 -0
  47. package/dist/ontology/group/client.d.ts +11 -0
  48. package/dist/ontology/group/external.d.ts +2 -0
  49. package/dist/ontology/group/group.d.ts +7 -0
  50. package/dist/ontology/group/index.d.ts +1 -0
  51. package/dist/ontology/group/payload.d.ts +40 -0
  52. package/dist/ontology/group/writer.d.ts +13 -0
  53. package/dist/ontology/index.d.ts +1 -0
  54. package/dist/ontology/ontology.spec.d.ts +1 -0
  55. package/dist/ontology/payload.d.ts +235 -0
  56. package/dist/ontology/retriever.d.ts +12 -0
  57. package/dist/ontology/signals.d.ts +25 -0
  58. package/dist/ontology/writer.d.ts +9 -0
  59. package/dist/ranger/active.d.ts +9 -0
  60. package/dist/ranger/alias.d.ts +32 -0
  61. package/dist/ranger/client.d.ts +31 -0
  62. package/dist/ranger/external.d.ts +6 -0
  63. package/dist/ranger/index.d.ts +1 -0
  64. package/dist/ranger/kv.d.ts +50 -0
  65. package/dist/ranger/payload.d.ts +94 -0
  66. package/dist/ranger/range.d.ts +29 -0
  67. package/dist/ranger/ranger.spec.d.ts +1 -0
  68. package/dist/ranger/retriever.d.ts +10 -0
  69. package/dist/ranger/writer.d.ts +9 -0
  70. package/{build/main → dist}/setupspecs.d.ts +2 -2
  71. package/dist/signals/external.d.ts +1 -0
  72. package/dist/signals/index.d.ts +1 -0
  73. package/dist/signals/observable.d.ts +17 -0
  74. package/dist/transport.d.ts +10 -0
  75. package/dist/user/index.d.ts +1 -0
  76. package/{build/main/lib → dist}/user/payload.d.ts +3 -3
  77. package/dist/util/telem.d.ts +2 -0
  78. package/dist/workspace/client.d.ts +22 -0
  79. package/dist/workspace/external.d.ts +2 -0
  80. package/dist/workspace/index.d.ts +1 -0
  81. package/dist/workspace/lineplot/client.d.ts +15 -0
  82. package/dist/workspace/lineplot/external.d.ts +2 -0
  83. package/dist/workspace/lineplot/index.d.ts +1 -0
  84. package/dist/workspace/lineplot/linePlot.spec.d.ts +1 -0
  85. package/dist/workspace/lineplot/payload.d.ts +31 -0
  86. package/dist/workspace/lineplot/retriever.d.ts +9 -0
  87. package/dist/workspace/lineplot/writer.d.ts +39 -0
  88. package/dist/workspace/payload.d.ts +31 -0
  89. package/dist/workspace/pid/client.d.ts +16 -0
  90. package/dist/workspace/pid/external.d.ts +2 -0
  91. package/dist/workspace/pid/index.d.ts +1 -0
  92. package/dist/workspace/pid/payload.d.ts +37 -0
  93. package/dist/workspace/pid/pid.spec.d.ts +1 -0
  94. package/dist/workspace/pid/retriever.d.ts +9 -0
  95. package/dist/workspace/pid/writer.d.ts +46 -0
  96. package/dist/workspace/retriever.d.ts +12 -0
  97. package/dist/workspace/workspace.spec.d.ts +1 -0
  98. package/dist/workspace/writer.d.ts +55 -0
  99. package/package.json +27 -98
  100. package/src/auth/auth.spec.ts +46 -0
  101. package/src/auth/auth.ts +83 -0
  102. package/src/auth/index.ts +10 -0
  103. package/src/cdc/external.ts +10 -0
  104. package/src/cdc/index.ts +10 -0
  105. package/src/cdc/observable.ts +80 -0
  106. package/src/channel/channel.spec.ts +82 -0
  107. package/src/channel/client.ts +209 -0
  108. package/src/channel/creator.ts +43 -0
  109. package/src/channel/external.ts +13 -0
  110. package/src/channel/index.ts +10 -0
  111. package/src/channel/payload.ts +52 -0
  112. package/src/channel/retriever.ts +160 -0
  113. package/src/client.ts +112 -0
  114. package/src/connection/checker.ts +104 -0
  115. package/src/connection/connection.spec.ts +35 -0
  116. package/src/connection/index.ts +10 -0
  117. package/src/control/authority.ts +25 -0
  118. package/src/control/external.ts +11 -0
  119. package/src/control/index.ts +10 -0
  120. package/src/control/state.spec.ts +24 -0
  121. package/src/control/state.ts +117 -0
  122. package/src/errors.ts +153 -0
  123. package/src/framer/adapter.ts +116 -0
  124. package/src/framer/client.ts +116 -0
  125. package/src/framer/external.ts +14 -0
  126. package/src/framer/frame.spec.ts +317 -0
  127. package/src/framer/frame.ts +412 -0
  128. package/src/framer/index.ts +10 -0
  129. package/src/framer/iterator.spec.ts +62 -0
  130. package/src/framer/iterator.ts +240 -0
  131. package/src/framer/streamProxy.ts +59 -0
  132. package/src/framer/streamer.spec.ts +42 -0
  133. package/src/framer/streamer.ts +86 -0
  134. package/src/framer/writer.spec.ts +52 -0
  135. package/src/framer/writer.ts +236 -0
  136. package/src/index.ts +43 -4
  137. package/src/ontology/cdc.ts +135 -0
  138. package/src/ontology/client.ts +103 -0
  139. package/src/ontology/external.ts +12 -0
  140. package/src/ontology/group/client.ts +40 -0
  141. package/src/ontology/group/external.ts +11 -0
  142. package/src/ontology/group/group.spec.ts +46 -0
  143. package/src/ontology/group/group.ts +27 -0
  144. package/src/ontology/group/index.ts +10 -0
  145. package/src/ontology/group/payload.ts +65 -0
  146. package/src/ontology/group/writer.ts +48 -0
  147. package/src/ontology/index.ts +10 -0
  148. package/src/ontology/ontology.spec.ts +114 -0
  149. package/src/ontology/payload.ts +121 -0
  150. package/src/ontology/retriever.ts +91 -0
  151. package/src/ontology/writer.ts +49 -0
  152. package/src/ranger/active.ts +56 -0
  153. package/src/ranger/alias.ts +183 -0
  154. package/src/ranger/client.ts +124 -0
  155. package/src/ranger/external.ts +15 -0
  156. package/src/ranger/index.ts +10 -0
  157. package/src/ranger/kv.ts +91 -0
  158. package/src/ranger/payload.ts +70 -0
  159. package/src/ranger/range.ts +74 -0
  160. package/src/ranger/ranger.spec.ts +167 -0
  161. package/src/ranger/retriever.ts +50 -0
  162. package/src/ranger/writer.ts +80 -0
  163. package/src/setupspecs.ts +14 -5
  164. package/src/transport.ts +39 -0
  165. package/src/user/index.ts +10 -0
  166. package/src/user/payload.ts +17 -0
  167. package/src/util/telem.ts +19 -0
  168. package/src/vite-env.d.ts +11 -0
  169. package/src/workspace/client.ts +75 -0
  170. package/src/workspace/external.ts +11 -0
  171. package/src/workspace/index.ts +10 -0
  172. package/src/workspace/lineplot/client.ts +51 -0
  173. package/src/workspace/lineplot/external.ts +11 -0
  174. package/src/workspace/lineplot/index.ts +10 -0
  175. package/src/workspace/lineplot/linePlot.spec.ts +78 -0
  176. package/src/workspace/lineplot/payload.ts +29 -0
  177. package/src/workspace/lineplot/retriever.ts +49 -0
  178. package/src/workspace/lineplot/writer.ts +109 -0
  179. package/src/workspace/payload.ts +29 -0
  180. package/src/workspace/pid/client.ts +55 -0
  181. package/src/workspace/pid/external.ts +11 -0
  182. package/src/workspace/pid/index.ts +10 -0
  183. package/src/workspace/pid/payload.ts +31 -0
  184. package/src/workspace/pid/pid.spec.ts +111 -0
  185. package/src/workspace/pid/retriever.ts +45 -0
  186. package/src/workspace/pid/writer.ts +130 -0
  187. package/src/workspace/retriever.ts +67 -0
  188. package/src/workspace/workspace.spec.ts +62 -0
  189. package/src/workspace/writer.ts +103 -0
  190. package/tsconfig.json +3 -43
  191. package/tsconfig.vite.json +4 -0
  192. package/vite.config.ts +25 -0
  193. package/.DS_Store +0 -0
  194. package/.editorconfig +0 -15
  195. package/.eslintrc.json +0 -33
  196. package/.gitignore +0 -9
  197. package/.nyc_output/20720f2d-6abe-420f-a3c5-304d52d60827.json +0 -1
  198. package/.nyc_output/4725921c-6f1b-4ae9-9819-e455f702d31c.json +0 -1
  199. package/.nyc_output/47478588-5ffd-4332-873c-facaa4a2fc38.json +0 -1
  200. package/.nyc_output/48180641-e0b2-49ab-a6eb-e7910e9eac2f.json +0 -1
  201. package/.nyc_output/cb0abf31-740f-47db-b94a-8e3f8f117cb8.json +0 -1
  202. package/.nyc_output/fc77fce2-dad0-49a8-8d4b-0a9014ecf8c5.json +0 -1
  203. package/.nyc_output/processinfo/20720f2d-6abe-420f-a3c5-304d52d60827.json +0 -1
  204. package/.nyc_output/processinfo/4725921c-6f1b-4ae9-9819-e455f702d31c.json +0 -1
  205. package/.nyc_output/processinfo/47478588-5ffd-4332-873c-facaa4a2fc38.json +0 -1
  206. package/.nyc_output/processinfo/48180641-e0b2-49ab-a6eb-e7910e9eac2f.json +0 -1
  207. package/.nyc_output/processinfo/cb0abf31-740f-47db-b94a-8e3f8f117cb8.json +0 -1
  208. package/.nyc_output/processinfo/fc77fce2-dad0-49a8-8d4b-0a9014ecf8c5.json +0 -1
  209. package/.nyc_output/processinfo/index.json +0 -1
  210. package/.prettierignore +0 -2
  211. package/CHANGELOG.md +0 -5
  212. package/build/main/index.d.ts +0 -4
  213. package/build/main/index.js +0 -35
  214. package/build/main/lib/auth.js +0 -62
  215. package/build/main/lib/auth.spec.js +0 -39
  216. package/build/main/lib/channel/channel.spec.js +0 -49
  217. package/build/main/lib/channel/client.d.ts +0 -94
  218. package/build/main/lib/channel/client.js +0 -134
  219. package/build/main/lib/channel/creator.d.ts +0 -19
  220. package/build/main/lib/channel/creator.js +0 -44
  221. package/build/main/lib/channel/payload.d.ts +0 -25
  222. package/build/main/lib/channel/payload.js +0 -18
  223. package/build/main/lib/channel/registry.d.ts +0 -9
  224. package/build/main/lib/channel/registry.js +0 -37
  225. package/build/main/lib/channel/retriever.d.ts +0 -11
  226. package/build/main/lib/channel/retriever.js +0 -39
  227. package/build/main/lib/client.d.ts +0 -30
  228. package/build/main/lib/client.js +0 -46
  229. package/build/main/lib/errors.js +0 -122
  230. package/build/main/lib/segment/client.d.ts +0 -62
  231. package/build/main/lib/segment/client.js +0 -95
  232. package/build/main/lib/segment/iterator.d.ts +0 -134
  233. package/build/main/lib/segment/iterator.js +0 -253
  234. package/build/main/lib/segment/iterator.spec.js +0 -73
  235. package/build/main/lib/segment/payload.d.ts +0 -16
  236. package/build/main/lib/segment/payload.js +0 -13
  237. package/build/main/lib/segment/splitter.d.ts +0 -7
  238. package/build/main/lib/segment/splitter.js +0 -25
  239. package/build/main/lib/segment/typed.d.ts +0 -15
  240. package/build/main/lib/segment/typed.js +0 -49
  241. package/build/main/lib/segment/validator.d.ts +0 -22
  242. package/build/main/lib/segment/validator.js +0 -64
  243. package/build/main/lib/segment/writer.d.ts +0 -98
  244. package/build/main/lib/segment/writer.js +0 -183
  245. package/build/main/lib/segment/writer.spec.js +0 -90
  246. package/build/main/lib/telem.d.ts +0 -395
  247. package/build/main/lib/telem.js +0 -553
  248. package/build/main/lib/telem.spec.js +0 -152
  249. package/build/main/lib/transport.d.ts +0 -10
  250. package/build/main/lib/transport.js +0 -22
  251. package/build/main/lib/user/payload.js +0 -9
  252. package/build/main/lib/util/telem.d.ts +0 -2
  253. package/build/main/lib/util/telem.js +0 -13
  254. package/build/main/setupspecs.js +0 -17
  255. package/build/module/index.d.ts +0 -4
  256. package/build/module/index.js +0 -5
  257. package/build/module/lib/auth.d.ts +0 -54
  258. package/build/module/lib/auth.js +0 -63
  259. package/build/module/lib/auth.spec.js +0 -34
  260. package/build/module/lib/channel/channel.spec.js +0 -44
  261. package/build/module/lib/channel/client.d.ts +0 -94
  262. package/build/module/lib/channel/client.js +0 -134
  263. package/build/module/lib/channel/creator.d.ts +0 -19
  264. package/build/module/lib/channel/creator.js +0 -42
  265. package/build/module/lib/channel/payload.d.ts +0 -25
  266. package/build/module/lib/channel/payload.js +0 -15
  267. package/build/module/lib/channel/registry.d.ts +0 -9
  268. package/build/module/lib/channel/registry.js +0 -36
  269. package/build/module/lib/channel/retriever.d.ts +0 -11
  270. package/build/module/lib/channel/retriever.js +0 -37
  271. package/build/module/lib/client.d.ts +0 -30
  272. package/build/module/lib/client.js +0 -44
  273. package/build/module/lib/errors.d.ts +0 -53
  274. package/build/module/lib/errors.js +0 -113
  275. package/build/module/lib/segment/client.d.ts +0 -62
  276. package/build/module/lib/segment/client.js +0 -94
  277. package/build/module/lib/segment/iterator.js +0 -248
  278. package/build/module/lib/segment/iterator.spec.js +0 -68
  279. package/build/module/lib/segment/payload.d.ts +0 -16
  280. package/build/module/lib/segment/payload.js +0 -10
  281. package/build/module/lib/segment/splitter.d.ts +0 -7
  282. package/build/module/lib/segment/splitter.js +0 -26
  283. package/build/module/lib/segment/typed.d.ts +0 -15
  284. package/build/module/lib/segment/typed.js +0 -49
  285. package/build/module/lib/segment/validator.d.ts +0 -22
  286. package/build/module/lib/segment/validator.js +0 -60
  287. package/build/module/lib/segment/writer.d.ts +0 -98
  288. package/build/module/lib/segment/writer.js +0 -183
  289. package/build/module/lib/segment/writer.spec.js +0 -85
  290. package/build/module/lib/telem.d.ts +0 -395
  291. package/build/module/lib/telem.js +0 -545
  292. package/build/module/lib/telem.spec.js +0 -147
  293. package/build/module/lib/transport.d.ts +0 -10
  294. package/build/module/lib/transport.js +0 -22
  295. package/build/module/lib/user/payload.d.ts +0 -12
  296. package/build/module/lib/user/payload.js +0 -6
  297. package/build/module/lib/util/telem.d.ts +0 -2
  298. package/build/module/lib/util/telem.js +0 -9
  299. package/build/module/setupspecs.d.ts +0 -4
  300. package/build/module/setupspecs.js +0 -16
  301. package/build/tsconfig.module.tsbuildinfo +0 -1
  302. package/build/tsconfig.tsbuildinfo +0 -1
  303. package/coverage/base.css +0 -224
  304. package/coverage/block-navigation.js +0 -87
  305. package/coverage/favicon.png +0 -0
  306. package/coverage/index.html +0 -191
  307. package/coverage/lcov-report/base.css +0 -224
  308. package/coverage/lcov-report/block-navigation.js +0 -87
  309. package/coverage/lcov-report/favicon.png +0 -0
  310. package/coverage/lcov-report/index.html +0 -191
  311. package/coverage/lcov-report/prettify.css +0 -1
  312. package/coverage/lcov-report/prettify.js +0 -2
  313. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  314. package/coverage/lcov-report/sorter.js +0 -196
  315. package/coverage/lcov-report/src/index.html +0 -116
  316. package/coverage/lcov-report/src/lib/auth.ts.html +0 -340
  317. package/coverage/lcov-report/src/lib/channel/client.ts.html +0 -604
  318. package/coverage/lcov-report/src/lib/channel/creator.ts.html +0 -304
  319. package/coverage/lcov-report/src/lib/channel/index.html +0 -176
  320. package/coverage/lcov-report/src/lib/channel/payload.ts.html +0 -139
  321. package/coverage/lcov-report/src/lib/channel/registry.ts.html +0 -202
  322. package/coverage/lcov-report/src/lib/channel/retriever.ts.html +0 -244
  323. package/coverage/lcov-report/src/lib/client.ts.html +0 -244
  324. package/coverage/lcov-report/src/lib/errors.ts.html +0 -484
  325. package/coverage/lcov-report/src/lib/index.html +0 -176
  326. package/coverage/lcov-report/src/lib/segment/client.ts.html +0 -463
  327. package/coverage/lcov-report/src/lib/segment/index.html +0 -206
  328. package/coverage/lcov-report/src/lib/segment/iterator.ts.html +0 -928
  329. package/coverage/lcov-report/src/lib/segment/payload.ts.html +0 -139
  330. package/coverage/lcov-report/src/lib/segment/splitter.ts.html +0 -181
  331. package/coverage/lcov-report/src/lib/segment/typed.ts.html +0 -307
  332. package/coverage/lcov-report/src/lib/segment/validator.ts.html +0 -331
  333. package/coverage/lcov-report/src/lib/segment/writer.ts.html +0 -727
  334. package/coverage/lcov-report/src/lib/telem.ts.html +0 -2056
  335. package/coverage/lcov-report/src/lib/transport.ts.html +0 -196
  336. package/coverage/lcov-report/src/lib/user/index.html +0 -116
  337. package/coverage/lcov-report/src/lib/user/payload.ts.html +0 -109
  338. package/coverage/lcov-report/src/lib/util/index.html +0 -116
  339. package/coverage/lcov-report/src/lib/util/telem.ts.html +0 -124
  340. package/coverage/lcov-report/src/setupspecs.ts.html +0 -133
  341. package/coverage/lcov.info +0 -1230
  342. package/coverage/prettify.css +0 -1
  343. package/coverage/prettify.js +0 -2
  344. package/coverage/sort-arrow-sprite.png +0 -0
  345. package/coverage/sorter.js +0 -196
  346. package/coverage/src/index.html +0 -116
  347. package/coverage/src/lib/auth.ts.html +0 -340
  348. package/coverage/src/lib/channel/client.ts.html +0 -604
  349. package/coverage/src/lib/channel/creator.ts.html +0 -304
  350. package/coverage/src/lib/channel/index.html +0 -176
  351. package/coverage/src/lib/channel/payload.ts.html +0 -139
  352. package/coverage/src/lib/channel/registry.ts.html +0 -202
  353. package/coverage/src/lib/channel/retriever.ts.html +0 -244
  354. package/coverage/src/lib/client.ts.html +0 -244
  355. package/coverage/src/lib/errors.ts.html +0 -484
  356. package/coverage/src/lib/index.html +0 -176
  357. package/coverage/src/lib/segment/client.ts.html +0 -463
  358. package/coverage/src/lib/segment/index.html +0 -206
  359. package/coverage/src/lib/segment/iterator.ts.html +0 -928
  360. package/coverage/src/lib/segment/payload.ts.html +0 -139
  361. package/coverage/src/lib/segment/splitter.ts.html +0 -181
  362. package/coverage/src/lib/segment/typed.ts.html +0 -307
  363. package/coverage/src/lib/segment/validator.ts.html +0 -331
  364. package/coverage/src/lib/segment/writer.ts.html +0 -727
  365. package/coverage/src/lib/telem.ts.html +0 -2056
  366. package/coverage/src/lib/transport.ts.html +0 -196
  367. package/coverage/src/lib/user/index.html +0 -116
  368. package/coverage/src/lib/user/payload.ts.html +0 -109
  369. package/coverage/src/lib/util/index.html +0 -116
  370. package/coverage/src/lib/util/telem.ts.html +0 -124
  371. package/coverage/src/setupspecs.ts.html +0 -133
  372. package/src/lib/.DS_Store +0 -0
  373. package/src/lib/auth.spec.ts +0 -36
  374. package/src/lib/auth.ts +0 -85
  375. package/src/lib/channel/channel.spec.ts +0 -49
  376. package/src/lib/channel/client.ts +0 -173
  377. package/src/lib/channel/creator.ts +0 -73
  378. package/src/lib/channel/payload.ts +0 -18
  379. package/src/lib/channel/registry.ts +0 -39
  380. package/src/lib/channel/retriever.ts +0 -53
  381. package/src/lib/client.ts +0 -53
  382. package/src/lib/errors.ts +0 -133
  383. package/src/lib/segment/client.ts +0 -126
  384. package/src/lib/segment/iterator.spec.ts +0 -78
  385. package/src/lib/segment/iterator.ts +0 -281
  386. package/src/lib/segment/payload.ts +0 -18
  387. package/src/lib/segment/splitter.ts +0 -32
  388. package/src/lib/segment/typed.ts +0 -74
  389. package/src/lib/segment/validator.ts +0 -82
  390. package/src/lib/segment/writer.spec.ts +0 -85
  391. package/src/lib/segment/writer.ts +0 -214
  392. package/src/lib/telem.spec.ts +0 -200
  393. package/src/lib/telem.ts +0 -657
  394. package/src/lib/transport.ts +0 -37
  395. package/src/lib/user/payload.ts +0 -8
  396. package/src/lib/util/telem.ts +0 -13
  397. package/tsconfig.module.json +0 -9
  398. package/yarn-error.log +0 -5756
  399. package/yarn.lock +0 -5936
  400. /package/{build/main/lib → dist/auth}/auth.spec.d.ts +0 -0
  401. /package/{build/main/lib → dist}/channel/channel.spec.d.ts +0 -0
  402. /package/{build/main/lib/segment/iterator.spec.d.ts → dist/connection/connection.spec.d.ts} +0 -0
  403. /package/{build/main/lib/segment/writer.spec.d.ts → dist/control/state.spec.d.ts} +0 -0
  404. /package/{build/main/lib/telem.spec.d.ts → dist/framer/frame.spec.d.ts} +0 -0
  405. /package/{build/module/lib/segment → dist/framer}/iterator.spec.d.ts +0 -0
  406. /package/{build/module/lib/auth.spec.d.ts → dist/framer/streamer.spec.d.ts} +0 -0
  407. /package/{build/module/lib/segment → dist/framer}/writer.spec.d.ts +0 -0
  408. /package/{build/module/lib/channel/channel.spec.d.ts → dist/label/label.spec.d.ts} +0 -0
  409. /package/{build/module/lib/telem.spec.d.ts → dist/ontology/group/group.spec.d.ts} +0 -0
package/src/errors.ts ADDED
@@ -0,0 +1,153 @@
1
+ // Copyright 2023 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 {
11
+ BaseTypedError,
12
+ type Middleware,
13
+ registerError,
14
+ Unreachable,
15
+ type ErrorPayload,
16
+ } from "@synnaxlabs/freighter";
17
+
18
+ const _FREIGHTER_EXCEPTION_PREFIX = "sy.api.";
19
+
20
+ enum APIErrorType {
21
+ General = _FREIGHTER_EXCEPTION_PREFIX + "general",
22
+ Parse = _FREIGHTER_EXCEPTION_PREFIX + "parse",
23
+ Auth = _FREIGHTER_EXCEPTION_PREFIX + "auth",
24
+ Unexpected = _FREIGHTER_EXCEPTION_PREFIX + "unexpected",
25
+ Validation = _FREIGHTER_EXCEPTION_PREFIX + "validation",
26
+ Query = _FREIGHTER_EXCEPTION_PREFIX + "query",
27
+ Route = _FREIGHTER_EXCEPTION_PREFIX + "route",
28
+ }
29
+
30
+ export interface Field {
31
+ field: string;
32
+ message: string;
33
+ }
34
+
35
+ class BaseError extends BaseTypedError {
36
+ constructor(message: string) {
37
+ super(message, _FREIGHTER_EXCEPTION_PREFIX);
38
+ }
39
+ }
40
+
41
+ /**
42
+ * Raised when a validation error occurs.
43
+ */
44
+ export class ValidationError extends BaseError {
45
+ fields: Field[];
46
+
47
+ constructor(fieldsOrMessage: string | Field[] | Field) {
48
+ if (typeof fieldsOrMessage === "string") {
49
+ super(fieldsOrMessage);
50
+ this.fields = [];
51
+ } else if (Array.isArray(fieldsOrMessage)) {
52
+ super(
53
+ fieldsOrMessage.map((field) => `${field.field}: ${field.message}`).join("\n"),
54
+ );
55
+ this.fields = fieldsOrMessage;
56
+ } else {
57
+ super(`${fieldsOrMessage.field}: ${fieldsOrMessage.message}`);
58
+ this.fields = [fieldsOrMessage];
59
+ }
60
+ }
61
+ }
62
+
63
+ /**
64
+ * GeneralError is raised when a general error occurs.
65
+ */
66
+ export class GeneralError extends BaseError {}
67
+
68
+ /**
69
+ * ParseError is raised when a parse error occurs.
70
+ */
71
+ export class ParseError extends BaseError {}
72
+
73
+ /**
74
+ * AuthError is raised when an authentication error occurs.
75
+ */
76
+ export class AuthError extends BaseError {}
77
+
78
+ /**
79
+ * UnexpectedError is raised when an unexpected error occurs.
80
+ */
81
+ export class UnexpectedError extends BaseError {}
82
+
83
+ /**
84
+ * QueryError is raised when a query error occurs.
85
+ */
86
+ export class QueryError extends BaseError {}
87
+
88
+ /**
89
+ * RouteError is raised when a routing error occurs.
90
+ */
91
+ export class RouteError extends BaseError {
92
+ path: string;
93
+
94
+ constructor(message: string, path: string) {
95
+ super(message);
96
+ this.path = path;
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Raised when time-series data is not contiguous.
102
+ */
103
+ export class ContiguityError extends BaseError {}
104
+
105
+ const decode = (payload: ErrorPayload): Error | null => {
106
+ if (!payload.type.startsWith(_FREIGHTER_EXCEPTION_PREFIX)) return null;
107
+ switch (payload.type) {
108
+ case APIErrorType.General:
109
+ return new GeneralError(payload.data);
110
+ case APIErrorType.Parse:
111
+ return new ParseError(payload.data);
112
+ case APIErrorType.Auth:
113
+ return new AuthError(payload.data);
114
+ case APIErrorType.Unexpected:
115
+ return new UnexpectedError(payload.data);
116
+ case APIErrorType.Validation:
117
+ return new ValidationError(payload.data);
118
+ case APIErrorType.Query:
119
+ return new QueryError(payload.data);
120
+ case APIErrorType.Route:
121
+ return new RouteError(payload.data, payload.data);
122
+ default:
123
+ return new UnexpectedError(payload.data);
124
+ }
125
+ };
126
+
127
+ const encode = (): ErrorPayload => {
128
+ throw new Error("Not implemented");
129
+ };
130
+
131
+ registerError({ encode, decode });
132
+
133
+ export const validateFieldNotNull = (
134
+ key: string,
135
+ value: unknown,
136
+ message: string = "must be provided",
137
+ ): void => {
138
+ if (value == null) throw new ValidationError({ field: key, message });
139
+ };
140
+
141
+ export const errorsMiddleware: Middleware = async (ctx, next) => {
142
+ const [res, err] = await next(ctx);
143
+ if (err == null) return [res, err];
144
+ if (err instanceof Unreachable)
145
+ return [
146
+ res,
147
+ new Unreachable({
148
+ message: `Cannot reach cluster at ${err.url.host}:${err.url.port}`,
149
+ url: err.url,
150
+ }),
151
+ ];
152
+ return [res, err];
153
+ };
@@ -0,0 +1,116 @@
1
+ // Copyright 2023 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 { type Key, type Name, type Params } from "@/channel/payload";
11
+ import { type Retriever, analyzeParams } from "@/channel/retriever";
12
+ import { type Frame } from "@/framer/frame";
13
+
14
+ export class BackwardFrameAdapter {
15
+ private adapter: Map<Key, Name> | null;
16
+ retriever: Retriever;
17
+ keys: Key[];
18
+
19
+ private constructor(retriever: Retriever) {
20
+ this.retriever = retriever;
21
+ this.adapter = null;
22
+ this.keys = [];
23
+ }
24
+
25
+ static async open(
26
+ retriever: Retriever,
27
+ channels: Params,
28
+ ): Promise<BackwardFrameAdapter> {
29
+ const adapter = new BackwardFrameAdapter(retriever);
30
+ await adapter.update(channels);
31
+ return adapter;
32
+ }
33
+
34
+ async update(channels: Params): Promise<void> {
35
+ const { variant, normalized } = analyzeParams(channels);
36
+ if (variant === "keys") {
37
+ this.adapter = null;
38
+ this.keys = normalized;
39
+ return;
40
+ }
41
+ const fetched = await this.retriever.retrieve(normalized);
42
+ const a = new Map<Key, Name>();
43
+ this.adapter = a;
44
+ normalized.forEach((name) => {
45
+ const channel = fetched.find((channel) => channel.name === name);
46
+ if (channel == null) throw new Error(`Channel ${name} not found`);
47
+ a.set(channel.key, channel.name);
48
+ });
49
+ this.keys = Array.from(this.adapter.keys());
50
+ }
51
+
52
+ adapt(fr: Frame): Frame {
53
+ if (this.adapter == null) return fr;
54
+ const a = this.adapter;
55
+ return fr.map((k, arr) => {
56
+ if (typeof k === "number") {
57
+ const name = a.get(k);
58
+ if (name == null) throw new Error(`Channel ${k} not found`);
59
+ return [name, arr];
60
+ }
61
+ return [k, arr];
62
+ });
63
+ }
64
+ }
65
+
66
+ export class ForwardFrameAdapter {
67
+ private adapter: Map<Name, Key> | null;
68
+ retriever: Retriever;
69
+ keys: Key[];
70
+
71
+ private constructor(retriever: Retriever) {
72
+ this.retriever = retriever;
73
+ this.adapter = null;
74
+ this.keys = [];
75
+ }
76
+
77
+ static async open(
78
+ retriever: Retriever,
79
+ channels: Params,
80
+ ): Promise<ForwardFrameAdapter> {
81
+ const adapter = new ForwardFrameAdapter(retriever);
82
+ await adapter.update(channels);
83
+ return adapter;
84
+ }
85
+
86
+ async update(channels: Params): Promise<void> {
87
+ const { variant, normalized } = analyzeParams(channels);
88
+ if (variant === "keys") {
89
+ this.adapter = null;
90
+ this.keys = normalized;
91
+ return;
92
+ }
93
+ const fetched = await this.retriever.retrieve(normalized);
94
+ const a = new Map<Name, Key>();
95
+ this.adapter = a;
96
+ normalized.forEach((name) => {
97
+ const channel = fetched.find((channel) => channel.name === name);
98
+ if (channel == null) throw new Error(`Channel ${name} not found`);
99
+ a.set(channel.name, channel.key);
100
+ });
101
+ this.keys = fetched.map((c) => c.key);
102
+ }
103
+
104
+ adapt(fr: Frame): Frame {
105
+ if (this.adapter == null) return fr;
106
+ const a = this.adapter;
107
+ return fr.map((k, arr) => {
108
+ if (typeof k === "string") {
109
+ const key = a.get(k);
110
+ if (key == null) throw new Error(`Channel ${k} not found`);
111
+ return [key, arr];
112
+ }
113
+ return [k, arr];
114
+ });
115
+ }
116
+ }
@@ -0,0 +1,116 @@
1
+ // Copyright 2023 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 { type StreamClient } from "@synnaxlabs/freighter";
11
+ import {
12
+ type NativeTypedArray,
13
+ type Series,
14
+ type TimeRange,
15
+ type CrudeTimeStamp,
16
+ TimeStamp,
17
+ } from "@synnaxlabs/x";
18
+
19
+ import { type KeyOrName, type Params } from "@/channel/payload";
20
+ import { type Retriever, analyzeParams } from "@/channel/retriever";
21
+ import { Authority } from "@/control/authority";
22
+ import { Frame } from "@/framer/frame";
23
+ import { Iterator } from "@/framer/iterator";
24
+ import { Streamer } from "@/framer/streamer";
25
+ import { Writer, type WriterConfig } from "@/framer/writer";
26
+
27
+ export class Client {
28
+ private readonly stream: StreamClient;
29
+ private readonly retriever: Retriever;
30
+
31
+ constructor(stream: StreamClient, retriever: Retriever) {
32
+ this.stream = stream;
33
+ this.retriever = retriever;
34
+ }
35
+
36
+ /**
37
+ * Opens a new iterator over the given channels within the provided time range.
38
+ *
39
+ * @param tr - A time range to iterate over.
40
+ * @param keys - A list of channel keys to iterate over.
41
+ * @returns a new {@link TypedIterator}.
42
+ */
43
+ async newIterator(tr: TimeRange, channels: Params): Promise<Iterator> {
44
+ return await Iterator._open(tr, channels, this.retriever, this.stream);
45
+ }
46
+
47
+ /**
48
+ * Opens a new writer on the given channels.
49
+ *
50
+ * @param keys - The keys of the channels to write to. A writer cannot write to
51
+ * a channel that is not in this list. See the {@link RecordWriter} documentation
52
+ * for more information.
53
+ * @returns a new {@link RecordWriter}.
54
+ */
55
+ async newWriter({
56
+ start,
57
+ channels,
58
+ controlSubject,
59
+ authorities = Authority.ABSOLUTE,
60
+ }: WriterConfig): Promise<Writer> {
61
+ return await Writer._open(this.retriever, this.stream, {
62
+ start: start ?? TimeStamp.now(),
63
+ controlSubject,
64
+ channels,
65
+ authorities,
66
+ });
67
+ }
68
+
69
+ async newStreamer(
70
+ params: Params,
71
+ from: TimeStamp = TimeStamp.now(),
72
+ ): Promise<Streamer> {
73
+ return await Streamer._open(from, params, this.retriever, this.stream);
74
+ }
75
+
76
+ /**
77
+ * Writes telemetry to the given channel starting at the given timestamp.
78
+ *
79
+ * @param to - The key of the channel to write to.
80
+ * @param start - The starting timestamp of the first sample in data.
81
+ * @param data - The telemetry to write. This telemetry must have the same
82
+ * data type as the channel.
83
+ * @throws if the channel does not exist.
84
+ */
85
+ async write(
86
+ to: KeyOrName,
87
+ start: CrudeTimeStamp,
88
+ data: NativeTypedArray,
89
+ ): Promise<void> {
90
+ const w = await this.newWriter({ start, channels: to });
91
+ try {
92
+ await w.write(to, data);
93
+ if (!(await w.commit())) throw (await w.error()) as Error;
94
+ } catch {
95
+ await w.close();
96
+ }
97
+ }
98
+
99
+ async read(tr: TimeRange, channel: KeyOrName): Promise<Series>;
100
+
101
+ async read(tr: TimeRange, channels: Params): Promise<Frame>;
102
+
103
+ async read(tr: TimeRange, channels: Params): Promise<Series | Frame> {
104
+ const { single } = analyzeParams(channels);
105
+ const fr = await this.readFrame(tr, channels);
106
+ if (single) return fr.series[0];
107
+ return fr;
108
+ }
109
+
110
+ private async readFrame(tr: TimeRange, params: Params): Promise<Frame> {
111
+ const i = await this.newIterator(tr, params);
112
+ const frame = new Frame();
113
+ for await (const f of i) frame.push(f);
114
+ return frame;
115
+ }
116
+ }
@@ -0,0 +1,14 @@
1
+ // Copyright 2023 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 "@/framer/client";
11
+ export * from "@/framer/frame";
12
+ export * from "@/framer/iterator";
13
+ export * from "@/framer/streamer";
14
+ export * from "@/framer/writer";
@@ -0,0 +1,317 @@
1
+ // Copyright 2023 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 { DataType, Series, TimeRange } from "@synnaxlabs/x";
11
+ import { describe, expect, it, test } from "vitest";
12
+
13
+ import { framer } from "@/framer";
14
+
15
+ describe("framer.Frame", () => {
16
+ describe("construction", () => {
17
+ describe("valid", () => {
18
+ test("from an array of channel names and an array of arrays", () => {
19
+ const f = new framer.Frame(
20
+ ["a", "b", "c"],
21
+ [
22
+ new Series(new Float32Array([1, 2, 3])),
23
+ new Series(new Float32Array([1, 2, 3])),
24
+ new Series(new Float32Array([1, 2, 3])),
25
+ ],
26
+ );
27
+ expect(f.length).toEqual(9);
28
+ expect(f.colType).toEqual("name");
29
+ });
30
+
31
+ test("from an array of channel keys and an array of arrays", () => {
32
+ const f = new framer.Frame(
33
+ [12, 13, 14],
34
+ [
35
+ new Series(new Float32Array([1, 2, 3])),
36
+ new Series(new Float32Array([1, 2, 3])),
37
+ new Series(new Float32Array([1, 2, 3])),
38
+ ],
39
+ );
40
+ expect(f.length).toEqual(9);
41
+ expect(f.colType).toEqual("key");
42
+ });
43
+
44
+ test("from a single name and an array of arrays", () => {
45
+ const f = new framer.Frame("a", [new Series(new Float32Array([1, 2, 3]))]);
46
+ expect(f.length).toEqual(3);
47
+ expect(f.colType).toEqual("name");
48
+ });
49
+
50
+ test("from a single key and an array of arrays", () => {
51
+ const f = new framer.Frame(12, [new Series(new Float32Array([1, 2, 3]))]);
52
+ expect(f.length).toEqual(3);
53
+ expect(f.colType).toEqual("key");
54
+ });
55
+
56
+ test("from a single key and a single array", () => {
57
+ const f = new framer.Frame(12, new Series(new Float32Array([1, 2, 3])));
58
+ expect(f.length).toEqual(3);
59
+ expect(f.colType).toEqual("key");
60
+ });
61
+
62
+ test("from a single name and a single array", () => {
63
+ const f = new framer.Frame("a", new Series(new Float32Array([1, 2, 3])));
64
+ expect(f.length).toEqual(3);
65
+ expect(f.colType).toEqual("name");
66
+ });
67
+
68
+ test("from payload", () => {
69
+ const f = new framer.Frame({
70
+ keys: [12],
71
+ series: [
72
+ {
73
+ dataType: new DataType("float32"),
74
+ data: new SharedArrayBuffer(12),
75
+ },
76
+ ],
77
+ });
78
+ expect(f.length.valueOf()).toEqual(3);
79
+ expect(f.columns.length).toEqual(1);
80
+ expect(f.series.length).toEqual(1);
81
+ });
82
+
83
+ test("from record", () => {
84
+ const f = new framer.Frame({
85
+ a: new Series(new Float32Array([1, 2, 3])),
86
+ });
87
+ expect(f.length.valueOf()).toEqual(3);
88
+ expect(f.columns.length).toEqual(1);
89
+ expect(f.series.length).toEqual(1);
90
+ });
91
+
92
+ test("from map", () => {
93
+ const f = new framer.Frame(
94
+ new Map([[12, new Series(new Float32Array([1, 2, 3]))]]),
95
+ );
96
+ expect(f.length).toEqual(3);
97
+ expect(f.columns.length).toEqual(1);
98
+ expect(f.series.length).toEqual(1);
99
+ });
100
+ });
101
+
102
+ describe("invalid", () => {
103
+ test("mismatched lengths", () => {
104
+ expect(
105
+ () =>
106
+ new framer.Frame(
107
+ ["a", "b", "c"],
108
+ [
109
+ new Series(new Float32Array([1, 2, 3])),
110
+ new Series(new Float32Array([1, 2, 3])),
111
+ ],
112
+ ),
113
+ ).toThrow();
114
+ });
115
+ });
116
+ });
117
+
118
+ describe("vertical", () => {
119
+ it("should return false if a key has more than one array", () => {
120
+ const f = new framer.Frame(
121
+ new Map([
122
+ [12, [new Series(new Float32Array([1, 2, 3]))]],
123
+ [
124
+ 13,
125
+ [
126
+ new Series(new Float32Array([1, 2, 3])),
127
+ new Series(new Float32Array([1, 2, 3])),
128
+ ],
129
+ ],
130
+ ]),
131
+ );
132
+ expect(f.isVertical).toEqual(false);
133
+ });
134
+ });
135
+
136
+ describe("horizontal", () => {
137
+ it("should return false if there is more than one key", () => {
138
+ const f = new framer.Frame(
139
+ new Map([
140
+ [12, [new Series(new Float32Array([1, 2, 3]))]],
141
+ [13, [new Series(new Float32Array([1, 2, 3]))]],
142
+ ]),
143
+ );
144
+ expect(f.isHorizontal).toEqual(false);
145
+ });
146
+ });
147
+
148
+ describe("weaklyAligned", () => {
149
+ it("should return true if all keys have the same timerange", () => {
150
+ const f = new framer.Frame(
151
+ new Map([
152
+ [
153
+ 12,
154
+ [
155
+ new Series(
156
+ new Float32Array([1, 2, 3]),
157
+ undefined,
158
+ new TimeRange(500, 50000),
159
+ ),
160
+ ],
161
+ ],
162
+ [
163
+ 13,
164
+ [
165
+ new Series(
166
+ new Float32Array([1, 2, 3]),
167
+ undefined,
168
+ new TimeRange(500, 50000),
169
+ ),
170
+ ],
171
+ ],
172
+ ]),
173
+ );
174
+ expect(f.isWeaklyAligned).toEqual(true);
175
+ });
176
+
177
+ it("should return false if any key has a different timerange", () => {
178
+ const f = new framer.Frame(
179
+ new Map([
180
+ [
181
+ 12,
182
+ [
183
+ new Series(
184
+ new Float32Array([1, 2, 3]),
185
+ undefined,
186
+ new TimeRange(500, 50000),
187
+ ),
188
+ ],
189
+ ],
190
+ [
191
+ 13,
192
+ [
193
+ new Series(
194
+ new Float32Array([1, 2, 3]),
195
+ undefined,
196
+ new TimeRange(500, 50001),
197
+ ),
198
+ ],
199
+ ],
200
+ ]),
201
+ );
202
+ expect(f.isWeaklyAligned).toEqual(false);
203
+ });
204
+ });
205
+
206
+ describe("timeRange", () => {
207
+ describe("no key provided", () => {
208
+ it("should return the maxium time range of the frame", () => {
209
+ const f = new framer.Frame(
210
+ new Map([
211
+ [
212
+ 12,
213
+ [
214
+ new Series(
215
+ new Float32Array([1, 2, 3]),
216
+ undefined,
217
+ new TimeRange(40, 50000),
218
+ ),
219
+ ],
220
+ ],
221
+ [
222
+ 13,
223
+ [
224
+ new Series(
225
+ new Float32Array([1, 2, 3]),
226
+ undefined,
227
+ new TimeRange(500, 50001),
228
+ ),
229
+ ],
230
+ ],
231
+ ]),
232
+ );
233
+ expect(f.timeRange()).toEqual(new TimeRange(40, 50001));
234
+ });
235
+ });
236
+
237
+ describe("key provided", () => {
238
+ it("should return the time range of the key", () => {
239
+ const f = new framer.Frame({
240
+ a: new Series(
241
+ new Float32Array([1, 2, 3]),
242
+ undefined,
243
+ new TimeRange(40, 50000),
244
+ ),
245
+ b: new Series(
246
+ new Float32Array([1, 2, 3]),
247
+ undefined,
248
+ new TimeRange(500, 50001),
249
+ ),
250
+ });
251
+ expect(f.timeRange("a")).toEqual(new TimeRange(40, 50000));
252
+ });
253
+ });
254
+
255
+ describe("filter", () => {
256
+ it("should return a frame filtered on a particular condition", () => {
257
+ const f = new framer.Frame(
258
+ new Map([
259
+ [
260
+ 12,
261
+ [
262
+ new Series(
263
+ new Float32Array([1, 2, 3]),
264
+ undefined,
265
+ new TimeRange(40, 50000),
266
+ ),
267
+ ],
268
+ ],
269
+ [
270
+ 13,
271
+ [
272
+ new Series(
273
+ new Float32Array([1, 2, 3]),
274
+ undefined,
275
+ new TimeRange(500, 50001),
276
+ ),
277
+ ],
278
+ ],
279
+ ]),
280
+ );
281
+ expect(f.filter((k) => k === 12).columns).toEqual([12]);
282
+ });
283
+ });
284
+ });
285
+
286
+ describe("toPayload", () => {
287
+ it("should return the frame as framer.FramePayload", () => {
288
+ const f = new framer.Frame(
289
+ new Map([
290
+ [
291
+ 12,
292
+ [
293
+ new Series(
294
+ new Float32Array([1, 2, 3]),
295
+ undefined,
296
+ new TimeRange(40, 50000),
297
+ ),
298
+ ],
299
+ ],
300
+ [
301
+ 13,
302
+ [
303
+ new Series(
304
+ new Float32Array([1, 2, 3]),
305
+ undefined,
306
+ new TimeRange(500, 50001),
307
+ ),
308
+ ],
309
+ ],
310
+ ]),
311
+ );
312
+ const pld = f.toPayload();
313
+ expect(pld.keys).toEqual([12, 13]);
314
+ expect(pld.series?.[0].data.byteLength).toEqual(12);
315
+ });
316
+ });
317
+ });