@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,35 +1,30 @@
1
+ // Copyright 2025 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
+
1
10
  import { sendRequired, type UnaryClient } from "@synnaxlabs/freighter";
2
11
  import { toArray, type UnknownRecord } from "@synnaxlabs/x";
3
- import { unknownRecordZ } from "@synnaxlabs/x/record";
4
12
  import { z } from "zod";
5
13
 
6
14
  import { ontology } from "@/ontology";
7
15
  import { nullableArrayZ } from "@/util/zod";
8
-
9
- export const keyZ = z.string().uuid();
10
- export type Key = z.infer<typeof keyZ>;
11
- export type Params = Key | Key[];
12
-
13
- export const schematicZ = z.object({
14
- key: z.string(),
15
- name: z.string(),
16
- data: unknownRecordZ.or(z.string().transform((s) => JSON.parse(s) as UnknownRecord)),
17
- snapshot: z.boolean(),
18
- });
19
-
20
- export const schematicRemoteZ = z.object({
21
- key: z.string(),
22
- name: z.string(),
23
- snapshot: z.boolean(),
24
- data: z.string().transform((s) => JSON.parse(s) as UnknownRecord),
25
- });
26
-
27
- export type Schematic = z.infer<typeof schematicZ>;
28
-
29
- export const ONTOLOGY_TYPE: ontology.ResourceType = "schematic";
30
-
31
- export const ontologyID = (key: Key): ontology.ID =>
32
- new ontology.ID({ type: ONTOLOGY_TYPE, key });
16
+ import { type Key as WorkspaceKey, keyZ as workspaceKeyZ } from "@/workspace/payload";
17
+ import {
18
+ type Key,
19
+ keyZ,
20
+ type New,
21
+ newZ,
22
+ ONTOLOGY_TYPE,
23
+ type Params,
24
+ remoteZ,
25
+ type Schematic,
26
+ schematicZ,
27
+ } from "@/workspace/schematic/payload";
33
28
 
34
29
  const RETRIEVE_ENDPOINT = "/workspace/schematic/retrieve";
35
30
  const CREATE_ENDPOINT = "/workspace/schematic/create";
@@ -38,27 +33,15 @@ const SET_DATA_ENDPOINT = "/workspace/schematic/set-data";
38
33
  const DELETE_ENDPOINT = "/workspace/schematic/delete";
39
34
  const COPY_ENDPOINT = "/workspace/schematic/copy";
40
35
 
41
- export const newSchematicZ = schematicZ
42
- .partial({ key: true, snapshot: true })
43
- .transform((p) => ({
44
- ...p,
45
- data: JSON.stringify(p.data),
46
- }));
47
-
48
- export type NewSchematic = z.input<typeof newSchematicZ>;
49
-
50
- const retrieveReqZ = z.object({ keys: z.string().array() });
51
- const createReqZ = z.object({
52
- workspace: z.string(),
53
- schematics: newSchematicZ.array(),
54
- });
55
- const renameReqZ = z.object({ key: z.string(), name: z.string() });
56
- const setDataReqZ = z.object({ key: z.string(), data: z.string() });
57
- const deleteReqZ = z.object({ keys: z.string().array() });
58
- const copyReqZ = z.object({ key: z.string(), name: z.string(), snapshot: z.boolean() });
36
+ const retrieveReqZ = z.object({ keys: keyZ.array() });
37
+ const createReqZ = z.object({ workspace: workspaceKeyZ, schematics: newZ.array() });
38
+ const renameReqZ = z.object({ key: keyZ, name: z.string() });
39
+ const setDataReqZ = z.object({ key: keyZ, data: z.string() });
40
+ const deleteReqZ = z.object({ keys: keyZ.array() });
41
+ const copyReqZ = z.object({ key: keyZ, name: z.string(), snapshot: z.boolean() });
59
42
 
60
- const retrieveResZ = z.object({ schematics: nullableArrayZ(schematicRemoteZ) });
61
- const createResZ = z.object({ schematics: schematicRemoteZ.array() });
43
+ const retrieveResZ = z.object({ schematics: nullableArrayZ(remoteZ) });
44
+ const createResZ = z.object({ schematics: remoteZ.array() });
62
45
  const copyResZ = z.object({ schematic: schematicZ });
63
46
  const emptyResZ = z.object({});
64
47
 
@@ -69,18 +52,17 @@ export class Client {
69
52
  this.client = client;
70
53
  }
71
54
 
72
- async create(workspace: string, schematic: NewSchematic): Promise<Schematic>;
73
- async create(workspace: string, schematics: NewSchematic[]): Promise<Schematic[]>;
55
+ async create(workspace: WorkspaceKey, schematic: New): Promise<Schematic>;
56
+ async create(workspace: WorkspaceKey, schematics: New[]): Promise<Schematic[]>;
74
57
  async create(
75
- workspace: string,
76
- schematics: NewSchematic | NewSchematic[],
58
+ workspace: WorkspaceKey,
59
+ schematics: New | New[],
77
60
  ): Promise<Schematic | Schematic[]> {
78
61
  const isMany = Array.isArray(schematics);
79
- const normalized = toArray(schematics);
80
62
  const res = await sendRequired(
81
63
  this.client,
82
64
  CREATE_ENDPOINT,
83
- { workspace, schematics: normalized },
65
+ { workspace, schematics: toArray(schematics) },
84
66
  createReqZ,
85
67
  createResZ,
86
68
  );
@@ -111,11 +93,10 @@ export class Client {
111
93
  async retrieve(keys: Key[]): Promise<Schematic[]>;
112
94
  async retrieve(keys: Params): Promise<Schematic | Schematic[]> {
113
95
  const isMany = Array.isArray(keys);
114
- const normalized = toArray(keys);
115
96
  const res = await sendRequired(
116
97
  this.client,
117
98
  RETRIEVE_ENDPOINT,
118
- { keys: normalized },
99
+ { keys: toArray(keys) },
119
100
  retrieveReqZ,
120
101
  retrieveResZ,
121
102
  );
@@ -125,11 +106,10 @@ export class Client {
125
106
  async delete(key: Key): Promise<void>;
126
107
  async delete(keys: Key[]): Promise<void>;
127
108
  async delete(keys: Params): Promise<void> {
128
- const normalized = toArray(keys);
129
109
  await sendRequired(
130
110
  this.client,
131
111
  DELETE_ENDPOINT,
132
- { keys: normalized },
112
+ { keys: toArray(keys) },
133
113
  deleteReqZ,
134
114
  emptyResZ,
135
115
  );
@@ -146,3 +126,6 @@ export class Client {
146
126
  return res.schematic;
147
127
  }
148
128
  }
129
+
130
+ export const ontologyID = (key: Key): ontology.ID =>
131
+ new ontology.ID({ type: ONTOLOGY_TYPE, key });
@@ -0,0 +1,11 @@
1
+ // Copyright 2025 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 "@/workspace/schematic/client";
11
+ export * from "@/workspace/schematic/payload";
@@ -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.
@@ -7,4 +7,4 @@
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
- export * as schematic from "@/workspace/schematic/client";
10
+ export * as schematic from "@/workspace/schematic/external";
@@ -0,0 +1,37 @@
1
+ // Copyright 2025 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 { unknownRecordZ } from "@synnaxlabs/x/record";
11
+ import { z } from "zod";
12
+
13
+ import { parseWithoutKeyConversion } from "@/util/parseWithoutKeyConversion";
14
+
15
+ export const keyZ = z.string().uuid();
16
+ export type Key = z.infer<typeof keyZ>;
17
+ export type Params = Key | Key[];
18
+
19
+ export const schematicZ = z.object({
20
+ key: keyZ,
21
+ name: z.string(),
22
+ data: unknownRecordZ.or(z.string().transform(parseWithoutKeyConversion)),
23
+ snapshot: z.boolean(),
24
+ });
25
+ export interface Schematic extends z.infer<typeof schematicZ> {}
26
+
27
+ export const newZ = schematicZ
28
+ .partial({ key: true, snapshot: true })
29
+ .transform((p) => ({ ...p, data: JSON.stringify(p.data) }));
30
+ export interface New extends z.input<typeof newZ> {}
31
+
32
+ export const remoteZ = schematicZ.extend({
33
+ data: z.string().transform(parseWithoutKeyConversion),
34
+ });
35
+
36
+ export const ONTOLOGY_TYPE = "schematic";
37
+ export type OntologyType = typeof ONTOLOGY_TYPE;
@@ -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.
@@ -7,15 +7,14 @@
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 { describe, expect, it,test } from "vitest";
10
+ import { NIL as ZERO_UUID } from "uuid";
11
+ import { describe, expect, it, test } from "vitest";
11
12
 
12
13
  import { ValidationError } from "@/errors";
13
14
  import { newClient } from "@/setupspecs";
14
15
 
15
16
  const client = newClient();
16
17
 
17
- const ZERO_UUID = "00000000-0000-0000-0000-000000000000";
18
-
19
18
  describe("Schematic", () => {
20
19
  describe("create", () => {
21
20
  test("create one", async () => {
@@ -73,7 +72,9 @@ describe("Schematic", () => {
73
72
  data: { one: 1 },
74
73
  });
75
74
  await client.workspaces.schematic.delete(schematic.key);
76
- await expect(client.workspaces.schematic.retrieve(schematic.key)).rejects.toThrow();
75
+ await expect(
76
+ client.workspaces.schematic.retrieve(schematic.key),
77
+ ).rejects.toThrow();
77
78
  });
78
79
  });
79
80
  describe("copy", () => {
@@ -86,7 +87,11 @@ describe("Schematic", () => {
86
87
  name: "Schematic",
87
88
  data: { one: 1 },
88
89
  });
89
- const schematic2 = await client.workspaces.schematic.copy(schematic.key, "Schematic2", false);
90
+ const schematic2 = await client.workspaces.schematic.copy(
91
+ schematic.key,
92
+ "Schematic2",
93
+ false,
94
+ );
90
95
  expect(schematic2.name).toEqual("Schematic2");
91
96
  expect(schematic2.key).not.toEqual(ZERO_UUID);
92
97
  expect(schematic2.data.one).toEqual(1);
@@ -101,7 +106,11 @@ describe("Schematic", () => {
101
106
  name: "Schematic",
102
107
  data: { one: 1 },
103
108
  });
104
- const schematic2 = await client.workspaces.schematic.copy(schematic.key, "Schematic2", true);
109
+ const schematic2 = await client.workspaces.schematic.copy(
110
+ schematic.key,
111
+ "Schematic2",
112
+ true,
113
+ );
105
114
  await expect(
106
115
  client.workspaces.schematic.setData(schematic2.key, { two: 2 }),
107
116
  ).rejects.toThrow(ValidationError);
@@ -1,26 +1,28 @@
1
+ // Copyright 2025 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
+
1
10
  import { sendRequired, type UnaryClient } from "@synnaxlabs/freighter";
2
11
  import { toArray, type UnknownRecord } from "@synnaxlabs/x";
3
- import { unknownRecordZ } from "@synnaxlabs/x/record";
4
12
  import { z } from "zod";
5
13
 
6
14
  import { ontology } from "@/ontology";
7
-
8
- export const keyZ = z.string().uuid();
9
- export type Key = z.infer<typeof keyZ>;
10
- export type Params = Key | Key[];
11
-
12
- export const tableZ = z.object({
13
- key: z.string(),
14
- name: z.string(),
15
- data: unknownRecordZ.or(z.string().transform((s) => JSON.parse(s) as UnknownRecord)),
16
- });
17
-
18
- export type Table = z.infer<typeof tableZ>;
19
-
20
- export const ONTOLOGY_TYPE: ontology.ResourceType = "table";
21
-
22
- export const ontologyID = (key: Key): ontology.ID =>
23
- new ontology.ID({ type: ONTOLOGY_TYPE, key });
15
+ import { type Key as WorkspaceKey, keyZ as workspaceKeyZ } from "@/workspace/payload";
16
+ import {
17
+ type Key,
18
+ keyZ,
19
+ type New,
20
+ newZ,
21
+ ONTOLOGY_TYPE,
22
+ type Params,
23
+ remoteZ,
24
+ type Table,
25
+ } from "@/workspace/table/payload";
24
26
 
25
27
  const RETRIEVE_ENDPOINT = "/workspace/table/retrieve";
26
28
  const CREATE_ENDPOINT = "/workspace/table/create";
@@ -28,27 +30,14 @@ const RENAME_ENDPOINT = "/workspace/table/rename";
28
30
  const SET_DATA_ENDPOINT = "/workspace/table/set-data";
29
31
  const DELETE_ENDPOINT = "/workspace/table/delete";
30
32
 
31
- export const newTableZ = tableZ.partial({ key: true }).transform((p) => ({
32
- ...p,
33
- data: JSON.stringify(p.data),
34
- }));
35
-
36
- export type NewTable = z.input<typeof newTableZ>;
37
-
38
- export const tableRemoteZ = z.object({
39
- key: z.string(),
40
- name: z.string(),
41
- data: z.string().transform((s) => JSON.parse(s) as UnknownRecord),
42
- });
43
-
44
- const retrieveReqZ = z.object({ keys: z.string().array() });
45
- const createReqZ = z.object({ workspace: z.string(), tables: newTableZ.array() });
46
- const renameReqZ = z.object({ key: z.string(), name: z.string() });
47
- const setDataReqZ = z.object({ key: z.string(), data: z.string() });
48
- const deleteReqZ = z.object({ keys: z.string().array() });
33
+ const retrieveReqZ = z.object({ keys: keyZ.array() });
34
+ const createReqZ = z.object({ workspace: workspaceKeyZ, tables: newZ.array() });
35
+ const renameReqZ = z.object({ key: keyZ, name: z.string() });
36
+ const setDataReqZ = z.object({ key: keyZ, data: z.string() });
37
+ const deleteReqZ = z.object({ keys: keyZ.array() });
49
38
 
50
- const retrieveResZ = z.object({ tables: tableRemoteZ.array() });
51
- const createResZ = z.object({ tables: tableRemoteZ.array() });
39
+ const retrieveResZ = z.object({ tables: remoteZ.array() });
40
+ const createResZ = z.object({ tables: remoteZ.array() });
52
41
  const emptyResZ = z.object({});
53
42
 
54
43
  export class Client {
@@ -58,18 +47,14 @@ export class Client {
58
47
  this.client = client;
59
48
  }
60
49
 
61
- async create(workspace: string, table: NewTable): Promise<Table>;
62
- async create(workspace: string, tables: NewTable[]): Promise<Table[]>;
63
- async create(
64
- workspace: string,
65
- tables: NewTable | NewTable[],
66
- ): Promise<Table | Table[]> {
50
+ async create(workspace: WorkspaceKey, table: New): Promise<Table>;
51
+ async create(workspace: WorkspaceKey, tables: New[]): Promise<Table[]>;
52
+ async create(workspace: WorkspaceKey, tables: New | New[]): Promise<Table | Table[]> {
67
53
  const isMany = Array.isArray(tables);
68
- const normalized = toArray(tables);
69
54
  const res = await sendRequired(
70
55
  this.client,
71
56
  CREATE_ENDPOINT,
72
- { workspace, tables: normalized },
57
+ { workspace, tables: toArray(tables) },
73
58
  createReqZ,
74
59
  createResZ,
75
60
  );
@@ -100,11 +85,10 @@ export class Client {
100
85
  async retrieve(keys: Key[]): Promise<Table[]>;
101
86
  async retrieve(keys: Params): Promise<Table | Table[]> {
102
87
  const isMany = Array.isArray(keys);
103
- const normalized = toArray(keys);
104
88
  const res = await sendRequired(
105
89
  this.client,
106
90
  RETRIEVE_ENDPOINT,
107
- { keys: normalized },
91
+ { keys: toArray(keys) },
108
92
  retrieveReqZ,
109
93
  retrieveResZ,
110
94
  );
@@ -114,13 +98,15 @@ export class Client {
114
98
  async delete(key: Key): Promise<void>;
115
99
  async delete(keys: Key[]): Promise<void>;
116
100
  async delete(keys: Params): Promise<void> {
117
- const normalized = toArray(keys);
118
101
  await sendRequired(
119
102
  this.client,
120
103
  DELETE_ENDPOINT,
121
- { keys: normalized },
104
+ { keys: toArray(keys) },
122
105
  deleteReqZ,
123
106
  emptyResZ,
124
107
  );
125
108
  }
126
109
  }
110
+
111
+ export const ontologyID = (key: Key): ontology.ID =>
112
+ new ontology.ID({ type: ONTOLOGY_TYPE, key });
@@ -0,0 +1,11 @@
1
+ // Copyright 2025 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 "@/workspace/table/client";
11
+ export * from "@/workspace/table/payload";
@@ -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.
@@ -7,4 +7,4 @@
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
- export * as table from "@/workspace/table/client";
10
+ export * as table from "@/workspace/table/external";
@@ -0,0 +1,36 @@
1
+ // Copyright 2025 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 { unknownRecordZ } from "@synnaxlabs/x/record";
11
+ import { z } from "zod";
12
+
13
+ import { parseWithoutKeyConversion } from "@/util/parseWithoutKeyConversion";
14
+
15
+ export const keyZ = z.string().uuid();
16
+ export type Key = z.infer<typeof keyZ>;
17
+ export type Params = Key | Key[];
18
+
19
+ export const tableZ = z.object({
20
+ key: keyZ,
21
+ name: z.string(),
22
+ data: unknownRecordZ.or(z.string().transform(parseWithoutKeyConversion)),
23
+ });
24
+ export interface Table extends z.infer<typeof tableZ> {}
25
+
26
+ export const newZ = tableZ
27
+ .partial({ key: true })
28
+ .transform((p) => ({ ...p, data: JSON.stringify(p.data) }));
29
+ export interface New extends z.input<typeof newZ> {}
30
+
31
+ export const remoteZ = tableZ.extend({
32
+ data: z.string().transform(parseWithoutKeyConversion),
33
+ });
34
+
35
+ export const ONTOLOGY_TYPE = "table";
36
+ export type OntologyType = typeof ONTOLOGY_TYPE;
@@ -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.
@@ -7,14 +7,13 @@
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 { NIL as ZERO_UUID } from "uuid";
10
11
  import { describe, expect, test } from "vitest";
11
12
 
12
13
  import { newClient } from "@/setupspecs";
13
14
 
14
15
  const client = newClient();
15
16
 
16
- const ZERO_UUID = "00000000-0000-0000-0000-000000000000";
17
-
18
17
  describe("Workspace", () => {
19
18
  describe("create", () => {
20
19
  test("create one", async () => {
package/vite.config.ts CHANGED
@@ -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,9 +0,0 @@
1
- import { UnaryClient } from '@synnaxlabs/freighter';
2
- import { NewPayload, Payload } from './payload';
3
- export declare class Creator {
4
- private static readonly ENDPOINT;
5
- private readonly client;
6
- constructor(client: UnaryClient);
7
- create(channels: NewPayload[]): Promise<Payload[]>;
8
- }
9
- //# sourceMappingURL=creator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"creator.d.ts","sourceRoot":"","sources":["../../src/channel/creator.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,EAAE,KAAK,UAAU,EAAa,KAAK,OAAO,EAAW,MAAM,mBAAmB,CAAC;AAMtF,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IACrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;gBAEzB,MAAM,EAAE,WAAW;IAIzB,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAUzD"}
@@ -1,37 +0,0 @@
1
- // Copyright 2024 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 { UnaryClient } from "@synnaxlabs/freighter";
11
- import { z } from "zod";
12
-
13
- import { type NewPayload,newPayload, type Payload, payload } from "@/channel/payload";
14
-
15
- const reqZ = z.object({ channels: newPayload.array() });
16
-
17
- const resZ = z.object({ channels: payload.array() });
18
-
19
- export class Creator {
20
- private static readonly ENDPOINT = "/channel/create";
21
- private readonly client: UnaryClient;
22
-
23
- constructor(client: UnaryClient) {
24
- this.client = client;
25
- }
26
-
27
- async create(channels: NewPayload[]): Promise<Payload[]> {
28
- const [res, err] = await this.client.send<typeof reqZ, typeof resZ>(
29
- Creator.ENDPOINT,
30
- { channels },
31
- reqZ,
32
- resZ,
33
- );
34
- if (err != null) throw err;
35
- return res.channels;
36
- }
37
- }