@synnaxlabs/client 0.38.0 → 0.39.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 (304) hide show
  1. package/.turbo/turbo-build.log +7 -7
  2. package/dist/access/payload.d.ts +6 -6
  3. package/dist/access/payload.d.ts.map +1 -1
  4. package/dist/access/policy/client.d.ts +5 -3
  5. package/dist/access/policy/client.d.ts.map +1 -1
  6. package/dist/access/policy/external.d.ts +1 -0
  7. package/dist/access/policy/external.d.ts.map +1 -1
  8. package/dist/access/policy/ontology.d.ts +5 -0
  9. package/dist/access/policy/ontology.d.ts.map +1 -0
  10. package/dist/access/policy/payload.d.ts +86 -89
  11. package/dist/access/policy/payload.d.ts.map +1 -1
  12. package/dist/access/policy/retriever.d.ts +7 -6
  13. package/dist/access/policy/retriever.d.ts.map +1 -1
  14. package/dist/access/policy/writer.d.ts +2 -2
  15. package/dist/access/policy/writer.d.ts.map +1 -1
  16. package/dist/auth/auth.d.ts +2 -1
  17. package/dist/auth/auth.d.ts.map +1 -1
  18. package/dist/channel/client.d.ts +8 -7
  19. package/dist/channel/client.d.ts.map +1 -1
  20. package/dist/channel/payload.d.ts +13 -11
  21. package/dist/channel/payload.d.ts.map +1 -1
  22. package/dist/channel/retriever.d.ts +9 -6
  23. package/dist/channel/retriever.d.ts.map +1 -1
  24. package/dist/channel/writer.d.ts +6 -4
  25. package/dist/channel/writer.d.ts.map +1 -1
  26. package/dist/client.cjs +30 -30
  27. package/dist/client.d.ts +4 -2
  28. package/dist/client.d.ts.map +1 -1
  29. package/dist/client.js +3488 -3500
  30. package/dist/connection/checker.d.ts +5 -4
  31. package/dist/connection/checker.d.ts.map +1 -1
  32. package/dist/control/state.d.ts +10 -8
  33. package/dist/control/state.d.ts.map +1 -1
  34. package/dist/errors.d.ts +5 -0
  35. package/dist/errors.d.ts.map +1 -1
  36. package/dist/framer/adapter.d.ts +14 -15
  37. package/dist/framer/adapter.d.ts.map +1 -1
  38. package/dist/framer/client.d.ts +13 -15
  39. package/dist/framer/client.d.ts.map +1 -1
  40. package/dist/framer/deleter.d.ts +3 -2
  41. package/dist/framer/deleter.d.ts.map +1 -1
  42. package/dist/framer/frame.d.ts +31 -27
  43. package/dist/framer/frame.d.ts.map +1 -1
  44. package/dist/framer/iterator.d.ts +4 -5
  45. package/dist/framer/iterator.d.ts.map +1 -1
  46. package/dist/framer/streamer.d.ts +5 -6
  47. package/dist/framer/streamer.d.ts.map +1 -1
  48. package/dist/framer/writer.d.ts +42 -39
  49. package/dist/framer/writer.d.ts.map +1 -1
  50. package/dist/hardware/device/client.d.ts +17 -12
  51. package/dist/hardware/device/client.d.ts.map +1 -1
  52. package/dist/hardware/device/payload.d.ts +19 -16
  53. package/dist/hardware/device/payload.d.ts.map +1 -1
  54. package/dist/hardware/rack/client.d.ts +15 -15
  55. package/dist/hardware/rack/client.d.ts.map +1 -1
  56. package/dist/hardware/rack/payload.d.ts +9 -8
  57. package/dist/hardware/rack/payload.d.ts.map +1 -1
  58. package/dist/hardware/task/client.d.ts +38 -29
  59. package/dist/hardware/task/client.d.ts.map +1 -1
  60. package/dist/hardware/task/payload.d.ts +58 -53
  61. package/dist/hardware/task/payload.d.ts.map +1 -1
  62. package/dist/label/client.d.ts +4 -3
  63. package/dist/label/client.d.ts.map +1 -1
  64. package/dist/label/payload.d.ts +4 -4
  65. package/dist/label/payload.d.ts.map +1 -1
  66. package/dist/label/retriever.d.ts.map +1 -1
  67. package/dist/label/writer.d.ts +13 -10
  68. package/dist/label/writer.d.ts.map +1 -1
  69. package/dist/ontology/client.d.ts +12 -10
  70. package/dist/ontology/client.d.ts.map +1 -1
  71. package/dist/ontology/group/client.d.ts +5 -4
  72. package/dist/ontology/group/client.d.ts.map +1 -1
  73. package/dist/ontology/group/group.d.ts +7 -5
  74. package/dist/ontology/group/group.d.ts.map +1 -1
  75. package/dist/ontology/group/payload.d.ts +6 -5
  76. package/dist/ontology/group/payload.d.ts.map +1 -1
  77. package/dist/ontology/group/writer.d.ts +8 -8
  78. package/dist/ontology/group/writer.d.ts.map +1 -1
  79. package/dist/ontology/payload.d.ts +72 -62
  80. package/dist/ontology/payload.d.ts.map +1 -1
  81. package/dist/ontology/writer.d.ts.map +1 -1
  82. package/dist/ranger/alias.d.ts +9 -10
  83. package/dist/ranger/alias.d.ts.map +1 -1
  84. package/dist/ranger/client.d.ts +18 -18
  85. package/dist/ranger/client.d.ts.map +1 -1
  86. package/dist/ranger/external.d.ts +1 -1
  87. package/dist/ranger/external.d.ts.map +1 -1
  88. package/dist/ranger/kv.d.ts +18 -14
  89. package/dist/ranger/kv.d.ts.map +1 -1
  90. package/dist/ranger/payload.d.ts +13 -13
  91. package/dist/ranger/payload.d.ts.map +1 -1
  92. package/dist/ranger/writer.d.ts +14 -14
  93. package/dist/ranger/writer.d.ts.map +1 -1
  94. package/dist/setupspecs.d.ts.map +1 -1
  95. package/dist/signals/observable.d.ts +3 -1
  96. package/dist/signals/observable.d.ts.map +1 -1
  97. package/dist/user/client.d.ts +5 -3
  98. package/dist/user/client.d.ts.map +1 -1
  99. package/dist/user/payload.d.ts +7 -6
  100. package/dist/user/payload.d.ts.map +1 -1
  101. package/dist/user/retriever.d.ts +2 -1
  102. package/dist/user/retriever.d.ts.map +1 -1
  103. package/dist/user/writer.d.ts +2 -2
  104. package/dist/user/writer.d.ts.map +1 -1
  105. package/dist/util/decodeJSONString.d.ts +3 -0
  106. package/dist/util/decodeJSONString.d.ts.map +1 -0
  107. package/dist/util/parseWithoutKeyConversion.d.ts +3 -0
  108. package/dist/util/parseWithoutKeyConversion.d.ts.map +1 -0
  109. package/dist/util/retrieve.d.ts +1 -1
  110. package/dist/util/retrieve.d.ts.map +1 -1
  111. package/dist/util/telem.d.ts.map +1 -1
  112. package/dist/util/zod.d.ts.map +1 -1
  113. package/dist/workspace/client.d.ts +6 -60
  114. package/dist/workspace/client.d.ts.map +1 -1
  115. package/dist/workspace/external.d.ts +3 -0
  116. package/dist/workspace/external.d.ts.map +1 -0
  117. package/dist/workspace/index.d.ts +1 -1
  118. package/dist/workspace/index.d.ts.map +1 -1
  119. package/dist/workspace/lineplot/client.d.ts +5 -44
  120. package/dist/workspace/lineplot/client.d.ts.map +1 -1
  121. package/dist/workspace/lineplot/external.d.ts +3 -0
  122. package/dist/workspace/lineplot/external.d.ts.map +1 -0
  123. package/dist/workspace/lineplot/index.d.ts +1 -1
  124. package/dist/workspace/lineplot/index.d.ts.map +1 -1
  125. package/dist/workspace/lineplot/payload.d.ts +45 -0
  126. package/dist/workspace/lineplot/payload.d.ts.map +1 -0
  127. package/dist/workspace/log/client.d.ts +5 -44
  128. package/dist/workspace/log/client.d.ts.map +1 -1
  129. package/dist/workspace/log/external.d.ts +3 -0
  130. package/dist/workspace/log/external.d.ts.map +1 -0
  131. package/dist/workspace/log/index.d.ts +1 -1
  132. package/dist/workspace/log/index.d.ts.map +1 -1
  133. package/dist/workspace/log/payload.d.ts +45 -0
  134. package/dist/workspace/log/payload.d.ts.map +1 -0
  135. package/dist/workspace/payload.d.ts +60 -0
  136. package/dist/workspace/payload.d.ts.map +1 -0
  137. package/dist/workspace/schematic/client.d.ts +5 -68
  138. package/dist/workspace/schematic/client.d.ts.map +1 -1
  139. package/dist/workspace/schematic/external.d.ts +3 -0
  140. package/dist/workspace/schematic/external.d.ts.map +1 -0
  141. package/dist/workspace/schematic/index.d.ts +1 -1
  142. package/dist/workspace/schematic/index.d.ts.map +1 -1
  143. package/dist/workspace/schematic/payload.d.ts +71 -0
  144. package/dist/workspace/schematic/payload.d.ts.map +1 -0
  145. package/dist/workspace/table/client.d.ts +5 -57
  146. package/dist/workspace/table/client.d.ts.map +1 -1
  147. package/dist/workspace/table/external.d.ts +3 -0
  148. package/dist/workspace/table/external.d.ts.map +1 -0
  149. package/dist/workspace/table/index.d.ts +1 -1
  150. package/dist/workspace/table/index.d.ts.map +1 -1
  151. package/dist/workspace/table/payload.d.ts +60 -0
  152. package/dist/workspace/table/payload.d.ts.map +1 -0
  153. package/eslint.config.js +1 -1
  154. package/examples/node/basicReadWrite.js +27 -27
  155. package/examples/node/liveStream.js +16 -16
  156. package/examples/node/seriesAndFrames.js +39 -39
  157. package/examples/node/streamWrite.js +48 -46
  158. package/package.json +14 -12
  159. package/src/access/client.ts +1 -1
  160. package/src/access/external.ts +1 -1
  161. package/src/access/index.ts +1 -1
  162. package/src/access/payload.ts +13 -13
  163. package/src/access/policy/client.ts +14 -13
  164. package/src/access/policy/external.ts +2 -1
  165. package/src/access/policy/index.ts +1 -1
  166. package/src/access/policy/ontology.ts +17 -0
  167. package/src/access/policy/payload.ts +8 -20
  168. package/src/access/policy/policy.spec.ts +17 -17
  169. package/src/access/policy/retriever.ts +3 -2
  170. package/src/access/policy/writer.ts +5 -5
  171. package/src/auth/auth.spec.ts +28 -24
  172. package/src/auth/auth.ts +8 -12
  173. package/src/auth/index.ts +1 -1
  174. package/src/channel/batchRetriever.spec.ts +26 -23
  175. package/src/channel/channel.spec.ts +1 -1
  176. package/src/channel/client.ts +24 -24
  177. package/src/channel/external.ts +1 -1
  178. package/src/channel/index.ts +1 -1
  179. package/src/channel/payload.ts +17 -21
  180. package/src/channel/retriever.ts +21 -22
  181. package/src/channel/writer.ts +12 -14
  182. package/src/client.ts +7 -17
  183. package/src/connection/checker.ts +10 -12
  184. package/src/connection/connection.spec.ts +18 -6
  185. package/src/connection/index.ts +1 -1
  186. package/src/control/client.ts +1 -1
  187. package/src/control/external.ts +1 -1
  188. package/src/control/index.ts +1 -1
  189. package/src/control/state.spec.ts +1 -1
  190. package/src/control/state.ts +9 -10
  191. package/src/errors.spec.ts +2 -2
  192. package/src/errors.ts +9 -1
  193. package/src/framer/adapter.spec.ts +29 -24
  194. package/src/framer/adapter.ts +38 -42
  195. package/src/framer/client.spec.ts +6 -12
  196. package/src/framer/client.ts +35 -39
  197. package/src/framer/deleter.spec.ts +1 -1
  198. package/src/framer/deleter.ts +6 -7
  199. package/src/framer/external.ts +1 -1
  200. package/src/framer/frame.spec.ts +1 -1
  201. package/src/framer/frame.ts +63 -51
  202. package/src/framer/index.ts +1 -1
  203. package/src/framer/iterator.spec.ts +1 -1
  204. package/src/framer/iterator.ts +12 -17
  205. package/src/framer/streamProxy.ts +2 -2
  206. package/src/framer/streamer.spec.ts +3 -11
  207. package/src/framer/streamer.ts +16 -20
  208. package/src/framer/writer.spec.ts +49 -8
  209. package/src/framer/writer.ts +40 -32
  210. package/src/hardware/client.ts +1 -1
  211. package/src/hardware/device/client.ts +65 -40
  212. package/src/hardware/device/device.spec.ts +50 -34
  213. package/src/hardware/device/external.ts +1 -1
  214. package/src/hardware/device/index.ts +1 -1
  215. package/src/hardware/device/payload.ts +30 -30
  216. package/src/hardware/external.ts +1 -1
  217. package/src/hardware/index.ts +1 -1
  218. package/src/hardware/rack/client.ts +53 -66
  219. package/src/hardware/rack/external.ts +1 -1
  220. package/src/hardware/rack/index.ts +1 -1
  221. package/src/hardware/rack/payload.ts +10 -19
  222. package/src/hardware/rack/rack.spec.ts +13 -1
  223. package/src/hardware/task/client.ts +161 -132
  224. package/src/hardware/task/external.ts +1 -1
  225. package/src/hardware/task/index.ts +1 -1
  226. package/src/hardware/task/payload.ts +50 -69
  227. package/src/hardware/task/task.spec.ts +99 -82
  228. package/src/index.ts +1 -1
  229. package/src/label/client.ts +13 -16
  230. package/src/label/external.ts +1 -1
  231. package/src/label/index.ts +1 -1
  232. package/src/label/label.spec.ts +1 -1
  233. package/src/label/payload.ts +4 -10
  234. package/src/label/retriever.ts +4 -8
  235. package/src/label/writer.ts +9 -16
  236. package/src/ontology/client.ts +31 -29
  237. package/src/ontology/external.ts +1 -1
  238. package/src/ontology/group/client.ts +6 -6
  239. package/src/ontology/group/external.ts +1 -1
  240. package/src/ontology/group/group.spec.ts +5 -5
  241. package/src/ontology/group/group.ts +11 -8
  242. package/src/ontology/group/index.ts +1 -1
  243. package/src/ontology/group/payload.ts +12 -36
  244. package/src/ontology/group/writer.ts +23 -27
  245. package/src/ontology/index.ts +1 -1
  246. package/src/ontology/ontology.spec.ts +16 -16
  247. package/src/ontology/payload.ts +68 -44
  248. package/src/ontology/writer.ts +17 -24
  249. package/src/ranger/alias.ts +26 -43
  250. package/src/ranger/client.ts +34 -41
  251. package/src/ranger/external.ts +2 -2
  252. package/src/ranger/index.ts +1 -1
  253. package/src/ranger/kv.ts +10 -33
  254. package/src/ranger/payload.ts +15 -37
  255. package/src/ranger/ranger.spec.ts +2 -3
  256. package/src/ranger/writer.ts +9 -27
  257. package/src/setupspecs.ts +1 -1
  258. package/src/signals/external.ts +1 -1
  259. package/src/signals/index.ts +1 -1
  260. package/src/signals/observable.ts +4 -5
  261. package/src/transport.ts +1 -1
  262. package/src/user/client.ts +9 -5
  263. package/src/user/external.ts +1 -1
  264. package/src/user/index.ts +1 -1
  265. package/src/user/payload.ts +6 -10
  266. package/src/user/retriever.ts +2 -2
  267. package/src/user/user.spec.ts +18 -16
  268. package/src/user/writer.ts +4 -11
  269. package/src/util/decodeJSONString.ts +13 -0
  270. package/src/util/parseWithoutKeyConversion.ts +19 -0
  271. package/src/util/retrieve.spec.ts +4 -14
  272. package/src/util/retrieve.ts +3 -13
  273. package/src/util/telem.ts +2 -2
  274. package/src/util/zod.ts +1 -1
  275. package/src/vite-env.d.ts +2 -1
  276. package/src/workspace/client.ts +39 -57
  277. package/src/workspace/external.ts +11 -0
  278. package/src/workspace/index.ts +2 -2
  279. package/src/workspace/lineplot/client.ts +31 -36
  280. package/src/workspace/lineplot/external.ts +11 -0
  281. package/src/workspace/lineplot/index.ts +2 -2
  282. package/src/workspace/lineplot/linePlot.spec.ts +2 -3
  283. package/src/workspace/lineplot/payload.ts +32 -0
  284. package/src/workspace/log/client.ts +34 -39
  285. package/src/workspace/log/external.ts +11 -0
  286. package/src/workspace/log/index.ts +2 -2
  287. package/src/workspace/log/log.spec.ts +6 -19
  288. package/src/workspace/log/payload.ts +32 -0
  289. package/src/workspace/payload.ts +36 -0
  290. package/src/workspace/schematic/client.ts +39 -56
  291. package/src/workspace/schematic/external.ts +11 -0
  292. package/src/workspace/schematic/index.ts +2 -2
  293. package/src/workspace/schematic/payload.ts +37 -0
  294. package/src/workspace/schematic/schematic.spec.ts +16 -7
  295. package/src/workspace/table/client.ts +36 -50
  296. package/src/workspace/table/external.ts +11 -0
  297. package/src/workspace/table/index.ts +2 -2
  298. package/src/workspace/table/payload.ts +36 -0
  299. package/src/workspace/table/table.spec.ts +1 -1
  300. package/src/workspace/workspace.spec.ts +2 -3
  301. package/vite.config.ts +1 -1
  302. package/dist/channel/creator.d.ts +0 -9
  303. package/dist/channel/creator.d.ts.map +0 -1
  304. package/src/channel/creator.ts +0 -37
@@ -1,4 +1,4 @@
1
- // Copyright 2024 Synnax Labs, Inc.
1
+ // Copyright 2025 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.
@@ -9,47 +9,39 @@
9
9
 
10
10
  import { type CrudeSeries, Series } from "@synnaxlabs/x/telem";
11
11
 
12
- import {
13
- type Key,
14
- type KeyOrName,
15
- type Name,
16
- type Params,
17
- type Payload,
18
- } from "@/channel/payload";
19
- import {
20
- analyzeChannelParams,
21
- type Retriever,
22
- retrieveRequired,
23
- } from "@/channel/retriever";
12
+ import { channel } from "@/channel";
24
13
  import { ValidationError } from "@/errors";
25
- import { type CrudeFrame, Frame } from "@/framer/frame";
14
+ import { type Crude, Frame } from "@/framer/frame";
26
15
 
27
- export class ReadFrameAdapter {
28
- private adapter: Map<Key, Name> | null;
29
- retriever: Retriever;
30
- keys: Key[];
16
+ export class ReadAdapter {
17
+ private adapter: Map<channel.Key, channel.Name> | null;
18
+ retriever: channel.Retriever;
19
+ keys: channel.Key[];
31
20
 
32
- private constructor(retriever: Retriever) {
21
+ private constructor(retriever: channel.Retriever) {
33
22
  this.retriever = retriever;
34
23
  this.adapter = null;
35
24
  this.keys = [];
36
25
  }
37
26
 
38
- static async open(retriever: Retriever, channels: Params): Promise<ReadFrameAdapter> {
39
- const adapter = new ReadFrameAdapter(retriever);
27
+ static async open(
28
+ retriever: channel.Retriever,
29
+ channels: channel.Params,
30
+ ): Promise<ReadAdapter> {
31
+ const adapter = new ReadAdapter(retriever);
40
32
  await adapter.update(channels);
41
33
  return adapter;
42
34
  }
43
35
 
44
- async update(channels: Params): Promise<void> {
45
- const { variant, normalized } = analyzeChannelParams(channels);
36
+ async update(channels: channel.Params): Promise<void> {
37
+ const { variant, normalized } = channel.analyzeParams(channels);
46
38
  if (variant === "keys") {
47
39
  this.adapter = null;
48
- this.keys = normalized as Key[];
40
+ this.keys = normalized as channel.Key[];
49
41
  return;
50
42
  }
51
43
  const fetched = await this.retriever.retrieve(normalized);
52
- const a = new Map<Key, Name>();
44
+ const a = new Map<channel.Key, channel.Name>();
53
45
  this.adapter = a;
54
46
  normalized.forEach((name) => {
55
47
  const channel = fetched.find((channel) => channel.name === name);
@@ -73,52 +65,56 @@ export class ReadFrameAdapter {
73
65
  }
74
66
  }
75
67
 
76
- export class WriteFrameAdapter {
77
- private adapter: Map<Name, Key> | null;
78
- retriever: Retriever;
79
- keys: Key[];
68
+ export class WriteAdapter {
69
+ private adapter: Map<channel.Name, channel.Key> | null;
70
+ retriever: channel.Retriever;
71
+ keys: channel.Key[];
80
72
 
81
- private constructor(retriever: Retriever) {
73
+ private constructor(retriever: channel.Retriever) {
82
74
  this.retriever = retriever;
83
75
  this.adapter = null;
84
76
  this.keys = [];
85
77
  }
86
78
 
87
79
  static async open(
88
- retriever: Retriever,
89
- channels: Params,
90
- ): Promise<WriteFrameAdapter> {
91
- const adapter = new WriteFrameAdapter(retriever);
80
+ retriever: channel.Retriever,
81
+ channels: channel.Params,
82
+ ): Promise<WriteAdapter> {
83
+ const adapter = new WriteAdapter(retriever);
92
84
  await adapter.update(channels);
93
85
  return adapter;
94
86
  }
95
87
 
96
- async adaptObjectKeys<V>(data: Record<KeyOrName, V>): Promise<Record<Key, V>> {
97
- const out: Record<Key, V> = {};
88
+ async adaptObjectKeys<V>(
89
+ data: Record<channel.KeyOrName, V>,
90
+ ): Promise<Record<channel.Key, V>> {
91
+ const out: Record<channel.Key, V> = {};
98
92
  for (const [k, v] of Object.entries(data)) out[await this.adaptToKey(k)] = v;
99
93
  return out;
100
94
  }
101
95
 
102
- async update(channels: Params): Promise<void> {
103
- const results = await retrieveRequired(this.retriever, channels);
104
- this.adapter = new Map<Name, Key>(results.map((c) => [c.name, c.key]));
96
+ async update(channels: channel.Params): Promise<void> {
97
+ const results = await channel.retrieveRequired(this.retriever, channels);
98
+ this.adapter = new Map<channel.Name, channel.Key>(
99
+ results.map((c) => [c.name, c.key]),
100
+ );
105
101
  this.keys = results.map((c) => c.key);
106
102
  }
107
103
 
108
- private async fetchChannel(ch: Key | Name): Promise<Payload> {
104
+ private async fetchChannel(ch: channel.Key | channel.Name): Promise<channel.Payload> {
109
105
  const res = await this.retriever.retrieve(ch);
110
106
  if (res.length === 0) throw new Error(`Channel ${ch} not found`);
111
107
  return res[0];
112
108
  }
113
109
 
114
- private async adaptToKey(k: KeyOrName): Promise<Key> {
110
+ private async adaptToKey(k: channel.KeyOrName): Promise<channel.Key> {
115
111
  if (typeof k === "number") return k;
116
112
  const res = await this.fetchChannel(k);
117
113
  return res.key;
118
114
  }
119
115
 
120
116
  async adapt(
121
- columnsOrData: Params | Record<KeyOrName, CrudeSeries> | CrudeFrame,
117
+ columnsOrData: channel.Params | Record<channel.KeyOrName, CrudeSeries> | Crude,
122
118
  series?: CrudeSeries | CrudeSeries[],
123
119
  ): Promise<Frame> {
124
120
  if (typeof columnsOrData === "string" || typeof columnsOrData === "number") {
@@ -1,4 +1,4 @@
1
- // Copyright 2024 Synnax Labs, Inc.
1
+ // Copyright 2025 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.
@@ -29,17 +29,11 @@ describe("Client", () => {
29
29
  index: time.key,
30
30
  });
31
31
  const start = TimeStamp.now();
32
- await client.write(start, {
33
- [time.key]: [start],
34
- [data.key]: [1],
35
- });
36
- const frame = await client.read(
37
- {
38
- start,
39
- end: start.add(TimeSpan.seconds(1)),
40
- },
41
- [time.key, data.key],
42
- );
32
+ await client.write(start, { [time.key]: [start], [data.key]: [1] });
33
+ const frame = await client.read({ start, end: start.add(TimeSpan.seconds(1)) }, [
34
+ time.key,
35
+ data.key,
36
+ ]);
43
37
  expect(Array.from(frame.get(time.key))).toEqual([start.valueOf()]);
44
38
  expect(Array.from(frame.get(data.key))).toEqual([1]);
45
39
  });
@@ -1,4 +1,4 @@
1
- // Copyright 2024 Synnax Labs, Inc.
1
+ // Copyright 2025 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.
@@ -17,34 +17,24 @@ import {
17
17
  TimeSpan,
18
18
  } from "@synnaxlabs/x";
19
19
 
20
- import {
21
- type Key,
22
- type KeyOrName,
23
- type KeysOrNames,
24
- type Params,
25
- } from "@/channel/payload";
26
- import { analyzeChannelParams, type Retriever } from "@/channel/retriever";
20
+ import { channel } from "@/channel";
27
21
  import { Deleter } from "@/framer/deleter";
28
- import { Frame } from "@/framer/frame";
22
+ import { Frame, ONTOLOGY_TYPE } from "@/framer/frame";
29
23
  import { Iterator, type IteratorConfig } from "@/framer/iterator";
30
24
  import { Streamer, type StreamerConfig } from "@/framer/streamer";
31
25
  import { Writer, type WriterConfig, WriterMode } from "@/framer/writer";
32
26
  import { ontology } from "@/ontology";
33
27
 
34
- export const ONTOLOGY_TYPE: ontology.ResourceType = "framer";
35
-
36
- export const ontologyID = (key: Key): ontology.ID =>
28
+ export const ontologyID = (key: channel.Key): ontology.ID =>
37
29
  new ontology.ID({ type: ONTOLOGY_TYPE, key: key.toString() });
38
30
 
39
31
  export class Client {
40
32
  private readonly streamClient: StreamClient;
41
- // private readonly unaryClient: UnaryClient;
42
- private readonly retriever: Retriever;
33
+ private readonly retriever: channel.Retriever;
43
34
  private readonly deleter: Deleter;
44
35
 
45
- constructor(stream: StreamClient, unary: UnaryClient, retriever: Retriever) {
36
+ constructor(stream: StreamClient, unary: UnaryClient, retriever: channel.Retriever) {
46
37
  this.streamClient = stream;
47
- // this.unaryClient = unary;
48
38
  this.retriever = retriever;
49
39
  this.deleter = new Deleter(unary);
50
40
  }
@@ -59,7 +49,7 @@ export class Client {
59
49
  */
60
50
  async openIterator(
61
51
  tr: CrudeTimeRange,
62
- channels: Params,
52
+ channels: channel.Params,
63
53
  opts?: IteratorConfig,
64
54
  ): Promise<Iterator> {
65
55
  return await Iterator._open(tr, channels, this.retriever, this.streamClient, opts);
@@ -72,9 +62,9 @@ export class Client {
72
62
  * writerConfig for more detail.
73
63
  * @returns a new {@link Writer}.
74
64
  */
75
- async openWriter(config: WriterConfig | Params): Promise<Writer> {
65
+ async openWriter(config: WriterConfig | channel.Params): Promise<Writer> {
76
66
  if (Array.isArray(config) || typeof config !== "object")
77
- config = { channels: config as Params };
67
+ config = { channels: config as channel.Params };
78
68
  return await Writer._open(this.retriever, this.streamClient, config);
79
69
  }
80
70
 
@@ -87,7 +77,7 @@ export class Client {
87
77
  * @returns a new {@link Streamer} that must be closed when done streaming, otherwise
88
78
  * a network socket will remain open.
89
79
  */
90
- async openStreamer(channels: Params): Promise<Streamer>;
80
+ async openStreamer(channels: channel.Params): Promise<Streamer>;
91
81
 
92
82
  /**
93
83
  * Opens a new streamer with the provided configuration.
@@ -100,29 +90,29 @@ export class Client {
100
90
  * and then will start reading new values.
101
91
  *
102
92
  */
103
- async openStreamer(config: StreamerConfig | Params): Promise<Streamer>;
93
+ async openStreamer(config: StreamerConfig | channel.Params): Promise<Streamer>;
104
94
 
105
- async openStreamer(config: StreamerConfig | Params): Promise<Streamer> {
95
+ async openStreamer(config: StreamerConfig | channel.Params): Promise<Streamer> {
106
96
  if (Array.isArray(config) || typeof config !== "object")
107
- config = { channels: config as Params, downsampleFactor: 1 };
97
+ config = { channels: config as channel.Params, downsampleFactor: 1 };
108
98
  return await Streamer._open(this.retriever, this.streamClient, config);
109
99
  }
110
100
 
111
101
  async write(
112
102
  start: CrudeTimeStamp,
113
- channel: KeyOrName,
103
+ channel: channel.KeyOrName,
114
104
  data: CrudeSeries,
115
105
  ): Promise<void>;
116
106
 
117
107
  async write(
118
108
  start: CrudeTimeStamp,
119
- channels: KeysOrNames,
109
+ channels: channel.KeysOrNames,
120
110
  data: CrudeSeries[],
121
111
  ): Promise<void>;
122
112
 
123
113
  async write(
124
114
  start: CrudeTimeStamp,
125
- data: Record<KeyOrName, CrudeSeries>,
115
+ data: Record<channel.KeyOrName, CrudeSeries>,
126
116
  ): Promise<void>;
127
117
 
128
118
  /**
@@ -136,11 +126,11 @@ export class Client {
136
126
  */
137
127
  async write(
138
128
  start: CrudeTimeStamp,
139
- channels: Params | Record<KeyOrName, CrudeSeries>,
129
+ channels: channel.Params | Record<channel.KeyOrName, CrudeSeries>,
140
130
  data?: CrudeSeries | CrudeSeries[],
141
131
  ): Promise<void> {
142
132
  if (data == null) {
143
- const data_ = channels as Record<KeyOrName, CrudeSeries>;
133
+ const data_ = channels as Record<channel.KeyOrName, CrudeSeries>;
144
134
  const w = await this.openWriter({
145
135
  start,
146
136
  channels: Object.keys(data_),
@@ -156,31 +146,37 @@ export class Client {
156
146
  }
157
147
  const w = await this.openWriter({
158
148
  start,
159
- channels: channels as Params,
149
+ channels: channels as channel.Params,
160
150
  mode: WriterMode.Persist,
161
151
  errOnUnauthorized: true,
162
152
  enableAutoCommit: true,
163
153
  autoIndexPersistInterval: TimeSpan.MAX,
164
154
  });
165
155
  try {
166
- await w.write(channels as Params, data);
156
+ await w.write(channels as channel.Params, data);
167
157
  } finally {
168
158
  await w.close();
169
159
  }
170
160
  }
171
161
 
172
- async read(tr: CrudeTimeRange, channel: KeyOrName): Promise<MultiSeries>;
162
+ async read(tr: CrudeTimeRange, channel: channel.KeyOrName): Promise<MultiSeries>;
173
163
 
174
- async read(tr: CrudeTimeRange, channels: Params): Promise<Frame>;
164
+ async read(tr: CrudeTimeRange, channels: channel.Params): Promise<Frame>;
175
165
 
176
- async read(tr: CrudeTimeRange, channels: Params): Promise<MultiSeries | Frame> {
177
- const { single } = analyzeChannelParams(channels);
166
+ async read(
167
+ tr: CrudeTimeRange,
168
+ channels: channel.Params,
169
+ ): Promise<MultiSeries | Frame> {
170
+ const { single } = channel.analyzeParams(channels);
178
171
  const fr = await this.readFrame(tr, channels);
179
- if (single) return fr.get(channels as KeyOrName);
172
+ if (single) return fr.get(channels as channel.KeyOrName);
180
173
  return fr;
181
174
  }
182
175
 
183
- private async readFrame(tr: CrudeTimeRange, channels: Params): Promise<Frame> {
176
+ private async readFrame(
177
+ tr: CrudeTimeRange,
178
+ channels: channel.Params,
179
+ ): Promise<Frame> {
184
180
  const i = await this.openIterator(tr, channels);
185
181
  const frame = new Frame();
186
182
  try {
@@ -191,11 +187,11 @@ export class Client {
191
187
  return frame;
192
188
  }
193
189
 
194
- async delete(channels: Params, timeRange: TimeRange): Promise<void> {
195
- const { normalized, variant } = analyzeChannelParams(channels);
190
+ async delete(channels: channel.Params, timeRange: TimeRange): Promise<void> {
191
+ const { normalized, variant } = channel.analyzeParams(channels);
196
192
  if (variant === "keys")
197
193
  return await this.deleter.delete({
198
- keys: normalized as Key[],
194
+ keys: normalized as channel.Key[],
199
195
  bounds: timeRange,
200
196
  });
201
197
  return await this.deleter.delete({
@@ -1,4 +1,4 @@
1
- // Copyright 2024 Synnax Labs, Inc.
1
+ // Copyright 2025 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.
@@ -1,4 +1,4 @@
1
- // Copyright 2024 Synnax Labs, Inc.
1
+ // Copyright 2025 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.
@@ -11,15 +11,14 @@ import { sendRequired, type UnaryClient } from "@synnaxlabs/freighter";
11
11
  import { TimeRange } from "@synnaxlabs/x";
12
12
  import { z } from "zod";
13
13
 
14
- import { keyZ } from "@/channel/payload";
14
+ import { channel } from "@/channel";
15
15
 
16
16
  const reqZ = z.object({
17
- keys: keyZ.array().optional(),
17
+ keys: channel.keyZ.array().optional(),
18
18
  bounds: TimeRange.z,
19
- names: z.string().array().optional(),
19
+ names: channel.nameZ.array().optional(),
20
20
  });
21
-
22
- type RequestProps = z.infer<typeof reqZ>;
21
+ interface Request extends z.infer<typeof reqZ> {}
23
22
 
24
23
  const resZ = z.object({});
25
24
 
@@ -35,7 +34,7 @@ export class Deleter {
35
34
  this.client = client;
36
35
  }
37
36
 
38
- async delete(props: RequestProps): Promise<void> {
37
+ async delete(props: Request): Promise<void> {
39
38
  await sendRequired<typeof reqZ, typeof resZ>(
40
39
  this.client,
41
40
  ENDPOINT,
@@ -1,4 +1,4 @@
1
- // Copyright 2024 Synnax Labs, Inc.
1
+ // Copyright 2025 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.
@@ -1,4 +1,4 @@
1
- // Copyright 2024 Synnax Labs, Inc.
1
+ // Copyright 2025 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.