@synnaxlabs/client 0.50.0 → 0.52.3

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 (260) hide show
  1. package/.turbo/turbo-build.log +7 -7
  2. package/dist/client.cjs +58 -34
  3. package/dist/client.js +5059 -4398
  4. package/dist/eslint.config.d.ts +2 -2
  5. package/dist/eslint.config.d.ts.map +1 -1
  6. package/dist/src/access/policy/client.d.ts +90 -90
  7. package/dist/src/access/policy/payload.d.ts +17 -17
  8. package/dist/src/access/role/payload.d.ts +2 -2
  9. package/dist/src/arc/payload.d.ts +2 -2
  10. package/dist/src/channel/client.d.ts +4 -5
  11. package/dist/src/channel/client.d.ts.map +1 -1
  12. package/dist/src/channel/payload.d.ts +9 -11
  13. package/dist/src/channel/payload.d.ts.map +1 -1
  14. package/dist/src/channel/retriever.d.ts.map +1 -1
  15. package/dist/src/client.d.ts +10 -0
  16. package/dist/src/client.d.ts.map +1 -1
  17. package/dist/src/device/client.d.ts +14 -7
  18. package/dist/src/device/client.d.ts.map +1 -1
  19. package/dist/src/device/payload.d.ts +65 -32
  20. package/dist/src/device/payload.d.ts.map +1 -1
  21. package/dist/src/device/payload.spec.d.ts +2 -0
  22. package/dist/src/device/payload.spec.d.ts.map +1 -0
  23. package/dist/src/framer/adapter.d.ts.map +1 -1
  24. package/dist/src/framer/client.d.ts +2 -2
  25. package/dist/src/framer/frame.d.ts +5 -5
  26. package/dist/src/framer/frame.d.ts.map +1 -1
  27. package/dist/src/framer/streamer.d.ts +6 -6
  28. package/dist/src/framer/writer.d.ts +9 -9
  29. package/dist/src/group/access.spec.d.ts.map +1 -0
  30. package/dist/src/{ontology/group → group}/client.d.ts +3 -3
  31. package/dist/src/group/client.d.ts.map +1 -0
  32. package/dist/src/group/external.d.ts.map +1 -0
  33. package/dist/src/group/group.spec.d.ts.map +1 -0
  34. package/dist/src/group/index.d.ts.map +1 -0
  35. package/dist/src/{ontology/group → group}/payload.d.ts +1 -1
  36. package/dist/src/group/payload.d.ts.map +1 -0
  37. package/dist/src/index.d.ts +5 -5
  38. package/dist/src/index.d.ts.map +1 -1
  39. package/dist/src/label/client.d.ts +27 -13
  40. package/dist/src/label/client.d.ts.map +1 -1
  41. package/dist/src/label/payload.d.ts +15 -1
  42. package/dist/src/label/payload.d.ts.map +1 -1
  43. package/dist/src/lineplot/access.spec.d.ts.map +1 -0
  44. package/dist/src/{workspace/lineplot → lineplot}/client.d.ts +6 -6
  45. package/dist/src/lineplot/client.d.ts.map +1 -0
  46. package/dist/src/lineplot/external.d.ts.map +1 -0
  47. package/dist/src/lineplot/index.d.ts.map +1 -0
  48. package/dist/src/lineplot/lineplot.spec.d.ts.map +1 -0
  49. package/dist/src/lineplot/payload.d.ts.map +1 -0
  50. package/dist/src/log/access.spec.d.ts.map +1 -0
  51. package/dist/src/{workspace/log → log}/client.d.ts +6 -6
  52. package/dist/src/log/client.d.ts.map +1 -0
  53. package/dist/src/log/external.d.ts.map +1 -0
  54. package/dist/src/log/index.d.ts.map +1 -0
  55. package/dist/src/log/log.spec.d.ts.map +1 -0
  56. package/dist/src/log/payload.d.ts.map +1 -0
  57. package/dist/src/ontology/client.d.ts +6 -10
  58. package/dist/src/ontology/client.d.ts.map +1 -1
  59. package/dist/src/ontology/payload.d.ts +22 -22
  60. package/dist/src/ontology/writer.d.ts +15 -15
  61. package/dist/src/rack/client.d.ts +2 -2
  62. package/dist/src/rack/payload.d.ts +44 -16
  63. package/dist/src/rack/payload.d.ts.map +1 -1
  64. package/dist/src/ranger/alias/client.d.ts +17 -0
  65. package/dist/src/ranger/alias/client.d.ts.map +1 -0
  66. package/dist/src/ranger/alias/external.d.ts +2 -0
  67. package/dist/src/ranger/alias/external.d.ts.map +1 -0
  68. package/dist/src/ranger/alias/index.d.ts +2 -0
  69. package/dist/src/ranger/alias/index.d.ts.map +1 -0
  70. package/dist/src/ranger/{alias.d.ts → alias/payload.d.ts} +14 -20
  71. package/dist/src/ranger/alias/payload.d.ts.map +1 -0
  72. package/dist/src/ranger/client.d.ts +10 -10
  73. package/dist/src/ranger/client.d.ts.map +1 -1
  74. package/dist/src/ranger/external.d.ts +20 -0
  75. package/dist/src/ranger/external.d.ts.map +1 -1
  76. package/dist/src/ranger/kv/client.d.ts +14 -0
  77. package/dist/src/ranger/kv/client.d.ts.map +1 -0
  78. package/dist/src/ranger/kv/external.d.ts +2 -0
  79. package/dist/src/ranger/kv/external.d.ts.map +1 -0
  80. package/dist/src/ranger/kv/index.d.ts +2 -0
  81. package/dist/src/ranger/kv/index.d.ts.map +1 -0
  82. package/dist/src/ranger/kv/payload.d.ts +26 -0
  83. package/dist/src/ranger/kv/payload.d.ts.map +1 -0
  84. package/dist/src/ranger/payload.d.ts +45 -3
  85. package/dist/src/ranger/payload.d.ts.map +1 -1
  86. package/dist/src/ranger/writer.d.ts +18 -4
  87. package/dist/src/ranger/writer.d.ts.map +1 -1
  88. package/dist/src/schematic/access.spec.d.ts.map +1 -0
  89. package/dist/src/{workspace/schematic → schematic}/client.d.ts +6 -6
  90. package/dist/src/schematic/client.d.ts.map +1 -0
  91. package/dist/src/schematic/external.d.ts.map +1 -0
  92. package/dist/src/schematic/index.d.ts.map +1 -0
  93. package/dist/src/schematic/payload.d.ts.map +1 -0
  94. package/dist/src/schematic/schematic.spec.d.ts.map +1 -0
  95. package/dist/src/schematic/symbol/access.spec.d.ts.map +1 -0
  96. package/dist/src/{workspace/schematic → schematic}/symbol/client.d.ts +2 -2
  97. package/dist/src/schematic/symbol/client.d.ts.map +1 -0
  98. package/dist/src/schematic/symbol/client.spec.d.ts.map +1 -0
  99. package/dist/src/schematic/symbol/external.d.ts.map +1 -0
  100. package/dist/src/schematic/symbol/index.d.ts.map +1 -0
  101. package/dist/src/schematic/symbol/payload.d.ts.map +1 -0
  102. package/dist/src/status/payload.d.ts +43 -7
  103. package/dist/src/status/payload.d.ts.map +1 -1
  104. package/dist/src/table/access.spec.d.ts.map +1 -0
  105. package/dist/src/{workspace/table → table}/client.d.ts +6 -6
  106. package/dist/src/table/client.d.ts.map +1 -0
  107. package/dist/src/table/external.d.ts.map +1 -0
  108. package/dist/src/table/index.d.ts.map +1 -0
  109. package/dist/src/table/payload.d.ts.map +1 -0
  110. package/dist/src/table/table.spec.d.ts.map +1 -0
  111. package/dist/src/task/client.d.ts +2 -2
  112. package/dist/src/task/payload.d.ts +4 -4
  113. package/dist/src/task/payload.d.ts.map +1 -1
  114. package/dist/src/user/client.d.ts +2 -2
  115. package/dist/src/view/client.d.ts +2 -2
  116. package/dist/src/workspace/client.d.ts +2 -10
  117. package/dist/src/workspace/client.d.ts.map +1 -1
  118. package/eslint.config.ts +2 -3
  119. package/package.json +10 -9
  120. package/src/arc/lsp.spec.ts +155 -283
  121. package/src/channel/client.ts +3 -5
  122. package/src/channel/payload.spec.ts +0 -57
  123. package/src/channel/payload.ts +7 -14
  124. package/src/channel/retriever.ts +2 -3
  125. package/src/client.ts +16 -1
  126. package/src/device/client.ts +89 -43
  127. package/src/device/payload.spec.ts +118 -0
  128. package/src/device/payload.ts +55 -30
  129. package/src/errors.spec.ts +1 -1
  130. package/src/framer/adapter.ts +5 -7
  131. package/src/framer/frame.ts +8 -8
  132. package/src/{ontology/group → group}/access.spec.ts +7 -7
  133. package/src/{ontology/group → group}/client.ts +1 -1
  134. package/src/group/external.ts +11 -0
  135. package/src/{ontology/group → group}/group.spec.ts +9 -9
  136. package/src/{workspace/log → group}/index.ts +1 -1
  137. package/src/index.ts +5 -5
  138. package/src/label/access.spec.ts +1 -1
  139. package/src/label/client.ts +1 -1
  140. package/src/label/label.spec.ts +4 -4
  141. package/src/{workspace/lineplot → lineplot}/access.spec.ts +14 -14
  142. package/src/{workspace/lineplot → lineplot}/client.ts +13 -13
  143. package/src/lineplot/external.ts +11 -0
  144. package/src/{ontology/group → lineplot}/index.ts +1 -1
  145. package/src/{workspace/lineplot → lineplot}/lineplot.spec.ts +12 -12
  146. package/src/{workspace/log → log}/access.spec.ts +16 -18
  147. package/src/{workspace/log → log}/client.ts +13 -13
  148. package/src/{workspace/schematic/index.ts → log/external.ts} +2 -1
  149. package/src/{workspace/table → log}/index.ts +1 -1
  150. package/src/{workspace/log → log}/log.spec.ts +10 -10
  151. package/src/ontology/client.ts +1 -7
  152. package/src/ontology/ontology.spec.ts +12 -12
  153. package/src/ranger/{alias.ts → alias/client.ts} +6 -37
  154. package/src/{workspace/lineplot → ranger/alias}/external.ts +10 -2
  155. package/src/{workspace/lineplot → ranger/alias}/index.ts +1 -1
  156. package/src/ranger/alias/payload.ts +50 -0
  157. package/src/ranger/client.ts +26 -19
  158. package/src/ranger/external.ts +22 -0
  159. package/src/ranger/{kv.ts → kv/client.ts} +5 -19
  160. package/src/{workspace/schematic → ranger/kv}/external.ts +7 -3
  161. package/src/ranger/kv/index.ts +10 -0
  162. package/src/ranger/kv/payload.ts +32 -0
  163. package/src/ranger/payload.ts +2 -2
  164. package/src/ranger/ranger.spec.ts +1 -1
  165. package/src/{workspace/schematic → schematic}/access.spec.ts +14 -14
  166. package/src/{workspace/schematic → schematic}/client.ts +14 -14
  167. package/src/{workspace/log → schematic}/external.ts +3 -2
  168. package/src/schematic/index.ts +10 -0
  169. package/src/{workspace/schematic → schematic}/schematic.spec.ts +17 -17
  170. package/src/{workspace/schematic → schematic}/symbol/access.spec.ts +19 -19
  171. package/src/{workspace/schematic → schematic}/symbol/client.spec.ts +16 -16
  172. package/src/{workspace/schematic → schematic}/symbol/client.ts +8 -8
  173. package/src/{ontology/group → schematic/symbol}/external.ts +2 -2
  174. package/src/schematic/symbol/index.ts +10 -0
  175. package/src/status/payload.ts +1 -1
  176. package/src/status/status.spec.ts +2 -2
  177. package/src/{workspace/table → table}/access.spec.ts +14 -14
  178. package/src/{workspace/table → table}/client.ts +15 -12
  179. package/src/table/external.ts +11 -0
  180. package/src/table/index.ts +10 -0
  181. package/src/{workspace/table → table}/table.spec.ts +12 -12
  182. package/src/task/payload.ts +4 -5
  183. package/src/workspace/client.ts +0 -12
  184. package/dist/src/ontology/group/access.spec.d.ts.map +0 -1
  185. package/dist/src/ontology/group/client.d.ts.map +0 -1
  186. package/dist/src/ontology/group/external.d.ts.map +0 -1
  187. package/dist/src/ontology/group/group.spec.d.ts.map +0 -1
  188. package/dist/src/ontology/group/index.d.ts.map +0 -1
  189. package/dist/src/ontology/group/payload.d.ts.map +0 -1
  190. package/dist/src/ranger/alias.d.ts.map +0 -1
  191. package/dist/src/ranger/kv.d.ts +0 -48
  192. package/dist/src/ranger/kv.d.ts.map +0 -1
  193. package/dist/src/workspace/lineplot/access.spec.d.ts.map +0 -1
  194. package/dist/src/workspace/lineplot/client.d.ts.map +0 -1
  195. package/dist/src/workspace/lineplot/external.d.ts.map +0 -1
  196. package/dist/src/workspace/lineplot/index.d.ts.map +0 -1
  197. package/dist/src/workspace/lineplot/lineplot.spec.d.ts.map +0 -1
  198. package/dist/src/workspace/lineplot/payload.d.ts.map +0 -1
  199. package/dist/src/workspace/log/access.spec.d.ts.map +0 -1
  200. package/dist/src/workspace/log/client.d.ts.map +0 -1
  201. package/dist/src/workspace/log/external.d.ts.map +0 -1
  202. package/dist/src/workspace/log/index.d.ts.map +0 -1
  203. package/dist/src/workspace/log/log.spec.d.ts.map +0 -1
  204. package/dist/src/workspace/log/payload.d.ts.map +0 -1
  205. package/dist/src/workspace/schematic/access.spec.d.ts.map +0 -1
  206. package/dist/src/workspace/schematic/client.d.ts.map +0 -1
  207. package/dist/src/workspace/schematic/external.d.ts.map +0 -1
  208. package/dist/src/workspace/schematic/index.d.ts.map +0 -1
  209. package/dist/src/workspace/schematic/payload.d.ts.map +0 -1
  210. package/dist/src/workspace/schematic/schematic.spec.d.ts.map +0 -1
  211. package/dist/src/workspace/schematic/symbol/access.spec.d.ts.map +0 -1
  212. package/dist/src/workspace/schematic/symbol/client.d.ts.map +0 -1
  213. package/dist/src/workspace/schematic/symbol/client.spec.d.ts.map +0 -1
  214. package/dist/src/workspace/schematic/symbol/external.d.ts.map +0 -1
  215. package/dist/src/workspace/schematic/symbol/index.d.ts.map +0 -1
  216. package/dist/src/workspace/schematic/symbol/payload.d.ts.map +0 -1
  217. package/dist/src/workspace/table/access.spec.d.ts.map +0 -1
  218. package/dist/src/workspace/table/client.d.ts.map +0 -1
  219. package/dist/src/workspace/table/external.d.ts.map +0 -1
  220. package/dist/src/workspace/table/index.d.ts.map +0 -1
  221. package/dist/src/workspace/table/payload.d.ts.map +0 -1
  222. package/dist/src/workspace/table/table.spec.d.ts.map +0 -1
  223. package/src/workspace/schematic/symbol/external.ts +0 -11
  224. package/src/workspace/schematic/symbol/index.ts +0 -10
  225. package/src/workspace/table/external.ts +0 -11
  226. /package/dist/src/{ontology/group → group}/access.spec.d.ts +0 -0
  227. /package/dist/src/{ontology/group → group}/external.d.ts +0 -0
  228. /package/dist/src/{ontology/group → group}/group.spec.d.ts +0 -0
  229. /package/dist/src/{ontology/group → group}/index.d.ts +0 -0
  230. /package/dist/src/{workspace/lineplot → lineplot}/access.spec.d.ts +0 -0
  231. /package/dist/src/{workspace/lineplot → lineplot}/external.d.ts +0 -0
  232. /package/dist/src/{workspace/lineplot → lineplot}/index.d.ts +0 -0
  233. /package/dist/src/{workspace/lineplot → lineplot}/lineplot.spec.d.ts +0 -0
  234. /package/dist/src/{workspace/lineplot → lineplot}/payload.d.ts +0 -0
  235. /package/dist/src/{workspace/log → log}/access.spec.d.ts +0 -0
  236. /package/dist/src/{workspace/log → log}/external.d.ts +0 -0
  237. /package/dist/src/{workspace/log → log}/index.d.ts +0 -0
  238. /package/dist/src/{workspace/log → log}/log.spec.d.ts +0 -0
  239. /package/dist/src/{workspace/log → log}/payload.d.ts +0 -0
  240. /package/dist/src/{workspace/schematic → schematic}/access.spec.d.ts +0 -0
  241. /package/dist/src/{workspace/schematic → schematic}/external.d.ts +0 -0
  242. /package/dist/src/{workspace/schematic → schematic}/index.d.ts +0 -0
  243. /package/dist/src/{workspace/schematic → schematic}/payload.d.ts +0 -0
  244. /package/dist/src/{workspace/schematic → schematic}/schematic.spec.d.ts +0 -0
  245. /package/dist/src/{workspace/schematic → schematic}/symbol/access.spec.d.ts +0 -0
  246. /package/dist/src/{workspace/schematic → schematic}/symbol/client.spec.d.ts +0 -0
  247. /package/dist/src/{workspace/schematic → schematic}/symbol/external.d.ts +0 -0
  248. /package/dist/src/{workspace/schematic → schematic}/symbol/index.d.ts +0 -0
  249. /package/dist/src/{workspace/schematic → schematic}/symbol/payload.d.ts +0 -0
  250. /package/dist/src/{workspace/table → table}/access.spec.d.ts +0 -0
  251. /package/dist/src/{workspace/table → table}/external.d.ts +0 -0
  252. /package/dist/src/{workspace/table → table}/index.d.ts +0 -0
  253. /package/dist/src/{workspace/table → table}/payload.d.ts +0 -0
  254. /package/dist/src/{workspace/table → table}/table.spec.d.ts +0 -0
  255. /package/src/{ontology/group → group}/payload.ts +0 -0
  256. /package/src/{workspace/lineplot → lineplot}/payload.ts +0 -0
  257. /package/src/{workspace/log → log}/payload.ts +0 -0
  258. /package/src/{workspace/schematic → schematic}/payload.ts +0 -0
  259. /package/src/{workspace/schematic → schematic}/symbol/payload.ts +0 -0
  260. /package/src/{workspace/table → table}/payload.ts +0 -0
@@ -15,7 +15,7 @@ import { Codec } from "@/framer/codec";
15
15
  import { type CrudeFrame, Frame } from "@/framer/frame";
16
16
 
17
17
  export class ReadAdapter {
18
- private adapter: Map<channel.Key, channel.Name> | null;
18
+ private adapter: Map<channel.Key, string> | null;
19
19
  retriever: channel.Retriever;
20
20
  keys: Set<channel.Key>;
21
21
  codec: Codec;
@@ -54,7 +54,7 @@ export class ReadAdapter {
54
54
  this.keys = new Set(normalized as channel.Key[]);
55
55
  return true;
56
56
  }
57
- const a = new Map<channel.Key, channel.Name>();
57
+ const a = new Map<channel.Key, string>();
58
58
  this.adapter = a;
59
59
  normalized.forEach((name) => {
60
60
  const channel = fetched.find((channel) => channel.name === name);
@@ -87,7 +87,7 @@ export class ReadAdapter {
87
87
  }
88
88
 
89
89
  export class WriteAdapter {
90
- private adapter: Map<channel.Name, channel.Key> | null;
90
+ private adapter: Map<string, channel.Key> | null;
91
91
  retriever: channel.Retriever;
92
92
  keys: channel.Key[];
93
93
  codec: Codec;
@@ -125,9 +125,7 @@ export class WriteAdapter {
125
125
  const hasRemovedKeys = !previousKeySet.isSubsetOf(newKeySet);
126
126
  const hasChanged = hasAddedKeys || hasRemovedKeys;
127
127
  if (!hasChanged) return false;
128
- this.adapter = new Map<channel.Name, channel.Key>(
129
- results.map((c) => [c.name, c.key]),
130
- );
128
+ this.adapter = new Map<string, channel.Key>(results.map((c) => [c.name, c.key]));
131
129
  this.keys = newKeys;
132
130
  this.codec.update(
133
131
  this.keys,
@@ -137,7 +135,7 @@ export class WriteAdapter {
137
135
  }
138
136
 
139
137
  private async fetchChannel(
140
- ch: channel.Key | channel.Name | channel.Payload,
138
+ ch: channel.KeyOrName | channel.Payload,
141
139
  ): Promise<channel.Payload> {
142
140
  const res = await this.retriever.retrieve(ch);
143
141
  if (res.length === 0) throw new Error(`Channel ${JSON.stringify(ch)} not found`);
@@ -95,7 +95,7 @@ export type CrudeFrame =
95
95
  * and array can be square.
96
96
  */
97
97
  export class Frame {
98
- readonly columns: channel.Keys | channel.Names = [];
98
+ readonly columns: channel.KeysOrNames = [];
99
99
  readonly series: Series[] = [];
100
100
 
101
101
  constructor(
@@ -140,7 +140,7 @@ export class Frame {
140
140
  ["string", "number"].includes(typeof columnsOrData)
141
141
  ) {
142
142
  const data_ = array.toArray(series);
143
- const cols = array.toArray(columnsOrData) as channel.Keys | channel.Names;
143
+ const cols = array.toArray(columnsOrData) as channel.KeysOrNames;
144
144
  validateMatchedColsAndSeries(cols, data_);
145
145
  data_.forEach((d, i) => this.push(cols[i], d));
146
146
  return;
@@ -184,23 +184,23 @@ export class Frame {
184
184
  * @returns the channel names if the frame is keyed by channel name, and throws an error
185
185
  * otherwise.
186
186
  */
187
- get names(): channel.Names {
187
+ get names(): string[] {
188
188
  if (this.colType === "key") throw new UnexpectedError("colType is not name");
189
- return (this.columns as channel.Names) ?? [];
189
+ return (this.columns as string[]) ?? [];
190
190
  }
191
191
 
192
192
  /**
193
193
  * @returns the unique channel names if the frame is keyed by channel name, and throws an
194
194
  * otherwise.
195
195
  */
196
- get uniqueNames(): channel.Names {
196
+ get uniqueNames(): string[] {
197
197
  return unique.unique(this.names);
198
198
  }
199
199
 
200
200
  /**
201
201
  * @returns the unique columns in the frame.
202
202
  */
203
- get uniqueColumns(): channel.Keys | channel.Names {
203
+ get uniqueColumns(): channel.KeysOrNames {
204
204
  return this.colType === "key" ? this.uniqueKeys : this.uniqueNames;
205
205
  }
206
206
 
@@ -280,9 +280,9 @@ export class Frame {
280
280
  * @returns a frame with the given channel keys or names.
281
281
  * @param keys the channel keys or names.
282
282
  */
283
- get(keys: channel.Keys | channel.Names): Frame;
283
+ get(keys: channel.KeysOrNames): Frame;
284
284
 
285
- get(key: channel.KeyOrName | channel.Keys | channel.Names): MultiSeries | Frame {
285
+ get(key: channel.PrimitiveParams): MultiSeries | Frame {
286
286
  if (Array.isArray(key))
287
287
  return this.filter((k) => (key as channel.Keys).includes(k as channel.Key));
288
288
  return new MultiSeries(this.series.filter((_, i) => this.columns[i] === key));
@@ -11,8 +11,8 @@ import { id } from "@synnaxlabs/x";
11
11
  import { describe, expect, it } from "vitest";
12
12
 
13
13
  import { AuthError } from "@/errors";
14
+ import { group } from "@/group";
14
15
  import { ontology } from "@/ontology";
15
- import { group } from "@/ontology/group";
16
16
  import { createTestClientWithPolicy } from "@/testutil/access";
17
17
  import { createTestClient } from "@/testutil/client";
18
18
 
@@ -26,7 +26,7 @@ describe("group", () => {
26
26
  objects: [group.ontologyID("")],
27
27
  actions: ["create"],
28
28
  });
29
- await userClient.ontology.groups.create({
29
+ await userClient.groups.create({
30
30
  parent: ontology.ROOT_ID,
31
31
  name: `test-${id.create()}`,
32
32
  });
@@ -39,7 +39,7 @@ describe("group", () => {
39
39
  actions: [],
40
40
  });
41
41
  await expect(
42
- userClient.ontology.groups.create({
42
+ userClient.groups.create({
43
43
  parent: ontology.ROOT_ID,
44
44
  name: `test-${id.create()}`,
45
45
  }),
@@ -52,11 +52,11 @@ describe("group", () => {
52
52
  objects: [group.ontologyID("")],
53
53
  actions: ["delete", "retrieve"],
54
54
  });
55
- const randomGroup = await client.ontology.groups.create({
55
+ const randomGroup = await client.groups.create({
56
56
  parent: ontology.ROOT_ID,
57
57
  name: `test-${id.create()}`,
58
58
  });
59
- await userClient.ontology.groups.delete(randomGroup.key);
59
+ await userClient.groups.delete(randomGroup.key);
60
60
  });
61
61
 
62
62
  it("should deny access when no delete policy exists", async () => {
@@ -65,11 +65,11 @@ describe("group", () => {
65
65
  objects: [group.ontologyID("")],
66
66
  actions: [],
67
67
  });
68
- const randomGroup = await client.ontology.groups.create({
68
+ const randomGroup = await client.groups.create({
69
69
  parent: ontology.ROOT_ID,
70
70
  name: `test-${id.create()}`,
71
71
  });
72
- await expect(userClient.ontology.groups.delete(randomGroup.key)).rejects.toThrow(
72
+ await expect(userClient.groups.delete(randomGroup.key)).rejects.toThrow(
73
73
  AuthError,
74
74
  );
75
75
  });
@@ -11,7 +11,7 @@ import { sendRequired, type UnaryClient } from "@synnaxlabs/freighter";
11
11
  import { array } from "@synnaxlabs/x";
12
12
  import z from "zod";
13
13
 
14
- import { type Group, groupZ, type Key, keyZ } from "@/ontology/group/payload";
14
+ import { type Group, groupZ, type Key, keyZ } from "@/group/payload";
15
15
  import { idZ as ontologyIDZ } from "@/ontology/payload";
16
16
 
17
17
  export const SET_CHANNEL_NAME = "sy_group_set";
@@ -0,0 +1,11 @@
1
+ // Copyright 2026 Synnax Labs, Inc.
2
+ //
3
+ // Use of this software is governed by the Business Source License included in the file
4
+ // licenses/BSL.txt.
5
+ //
6
+ // As of the Change Date specified in that file, in accordance with the Business Source
7
+ // License, use of this software will be governed by the Apache License, Version 2.0,
8
+ // included in the file licenses/APL.txt.
9
+
10
+ export * from "@/group/client";
11
+ export * from "@/group/payload";
@@ -11,8 +11,8 @@ import { id } from "@synnaxlabs/x";
11
11
  import { describe, expect, it } from "vitest";
12
12
 
13
13
  import { NotFoundError } from "@/errors";
14
+ import { group } from "@/group";
14
15
  import { ontology } from "@/ontology";
15
- import { group } from "@/ontology/group";
16
16
  import { createTestClient } from "@/testutil/client";
17
17
 
18
18
  const client = createTestClient();
@@ -21,19 +21,19 @@ describe("Group", () => {
21
21
  describe("create", () => {
22
22
  it("should correctly create a group", async () => {
23
23
  const name = `group-${Math.random()}`;
24
- const g = await client.ontology.groups.create({ parent: ontology.ROOT_ID, name });
24
+ const g = await client.groups.create({ parent: ontology.ROOT_ID, name });
25
25
  expect(g.name).toEqual(name);
26
26
  });
27
27
  it("should update an existing group", async () => {
28
- const parent = await client.ontology.groups.create({
28
+ const parent = await client.groups.create({
29
29
  parent: ontology.ROOT_ID,
30
30
  name: `test-parent-key${id.create()}`,
31
31
  });
32
- const g = await client.ontology.groups.create({
32
+ const g = await client.groups.create({
33
33
  parent: group.ontologyID(parent.key),
34
34
  name: `original-name-${id.create()}`,
35
35
  });
36
- await client.ontology.groups.create({
36
+ await client.groups.create({
37
37
  parent: group.ontologyID(parent.key),
38
38
  key: g.key,
39
39
  name: "updated-name",
@@ -45,9 +45,9 @@ describe("Group", () => {
45
45
  describe("rename", () => {
46
46
  it("should correctly rename a group", async () => {
47
47
  const name = `group-${Math.random()}`;
48
- const g = await client.ontology.groups.create({ parent: ontology.ROOT_ID, name });
48
+ const g = await client.groups.create({ parent: ontology.ROOT_ID, name });
49
49
  const newName = `group-${Math.random()}`;
50
- await client.ontology.groups.rename(g.key, newName);
50
+ await client.groups.rename(g.key, newName);
51
51
  const g2 = await client.ontology.retrieve(group.ontologyID(g.key));
52
52
  expect(g2.name).toEqual(newName);
53
53
  });
@@ -55,8 +55,8 @@ describe("Group", () => {
55
55
  describe("delete", () => {
56
56
  it("should correctly delete the group", async () => {
57
57
  const name = `group-${Math.random()}`;
58
- const g = await client.ontology.groups.create({ parent: ontology.ROOT_ID, name });
59
- await client.ontology.groups.delete(g.key);
58
+ const g = await client.groups.create({ parent: ontology.ROOT_ID, name });
59
+ await client.groups.delete(g.key);
60
60
  await expect(
61
61
  async () => await client.ontology.retrieve(group.ontologyID(g.key)),
62
62
  ).rejects.toThrowError(NotFoundError);
@@ -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 log from "@/workspace/log/external";
10
+ export * as group from "@/group/external";
package/src/index.ts CHANGED
@@ -35,22 +35,22 @@ export {
35
35
  } from "@/errors";
36
36
  export { framer } from "@/framer";
37
37
  export { Frame } from "@/framer/frame";
38
+ export { group } from "@/group";
38
39
  export { label } from "@/label";
40
+ export { lineplot } from "@/lineplot";
41
+ export { log } from "@/log";
39
42
  export { ontology } from "@/ontology";
40
- export { group } from "@/ontology/group";
41
43
  export { rack } from "@/rack";
42
44
  export { ranger } from "@/ranger";
45
+ export { schematic } from "@/schematic";
43
46
  export { status } from "@/status";
47
+ export { table } from "@/table";
44
48
  export { task } from "@/task";
45
49
  export { createTestClientWithPolicy } from "@/testutil/access";
46
50
  export { createTestClient, TEST_CLIENT_PARAMS } from "@/testutil/client";
47
51
  export { user } from "@/user";
48
52
  export { view } from "@/view";
49
53
  export { workspace } from "@/workspace";
50
- export { lineplot } from "@/workspace/lineplot";
51
- export { log } from "@/workspace/log";
52
- export { schematic } from "@/workspace/schematic";
53
- export { table } from "@/workspace/table";
54
54
  export {
55
55
  type CrudeDataType,
56
56
  type CrudeDensity,
@@ -46,7 +46,7 @@ describe("label", () => {
46
46
  const retrieved = await userClient.labels.retrieve({ key: randomLabel.key });
47
47
  expect(retrieved.key).toBe(randomLabel.key);
48
48
  expect(retrieved.name).toBe(randomLabel.name);
49
- expect(retrieved.color).toBe(randomLabel.color);
49
+ expect(retrieved.color).toEqual(randomLabel.color);
50
50
  });
51
51
 
52
52
  it("should allow the caller to create labels with the correct policy", async () => {
@@ -19,7 +19,7 @@ export const SET_CHANNEL_NAME = "sy_label_set";
19
19
  export const DELETE_CHANNEL_NAME = "sy_label_delete";
20
20
 
21
21
  export const newZ = labelZ.extend({ key: keyZ.optional() });
22
- export interface New extends z.infer<typeof newZ> {}
22
+ export interface New extends z.input<typeof newZ> {}
23
23
 
24
24
  const createReqZ = z.object({ labels: newZ.array() });
25
25
  const createResZ = z.object({ labels: labelZ.array() });
@@ -42,16 +42,16 @@ describe("Label", () => {
42
42
 
43
43
  describe("label", () => {
44
44
  it("should set a label on an item", async () => {
45
- const l1 = await client.labels.create({ name: "Label One", color: "#E774D)" });
46
- const l2 = await client.labels.create({ name: "Label Two", color: "#E774D)" });
45
+ const l1 = await client.labels.create({ name: "Label One", color: "#E774D0" });
46
+ const l2 = await client.labels.create({ name: "Label Two", color: "#E774D0" });
47
47
  await client.labels.label(label.ontologyID(l1.key), [l2.key]);
48
48
  const labels = await client.labels.retrieve({ for: label.ontologyID(l1.key) });
49
49
  expect(labels).toHaveLength(1);
50
50
  expect(labels[0].key).toEqual(l2.key);
51
51
  });
52
52
  it("should replace the labels on an item", async () => {
53
- const l1 = await client.labels.create({ name: "Label One", color: "#E774D)" });
54
- const l2 = await client.labels.create({ name: "Label Two", color: "#E774D)" });
53
+ const l1 = await client.labels.create({ name: "Label One", color: "#E774D0" });
54
+ const l2 = await client.labels.create({ name: "Label Two", color: "#E774D0" });
55
55
  await client.labels.label(label.ontologyID(l1.key), [l2.key]);
56
56
  await client.labels.label(label.ontologyID(l1.key), [l1.key], { replace: true });
57
57
  const labels = await client.labels.retrieve({ for: label.ontologyID(l1.key) });
@@ -10,9 +10,9 @@
10
10
  import { describe, expect, it } from "vitest";
11
11
 
12
12
  import { AuthError, NotFoundError } from "@/errors";
13
+ import { lineplot } from "@/lineplot";
13
14
  import { createTestClientWithPolicy } from "@/testutil/access";
14
15
  import { createTestClient } from "@/testutil/client";
15
- import { lineplot } from "@/workspace/lineplot";
16
16
 
17
17
  const client = createTestClient();
18
18
 
@@ -28,12 +28,12 @@ describe("lineplot", () => {
28
28
  name: "test",
29
29
  layout: {},
30
30
  });
31
- const randomLinePlot = await client.workspaces.lineplots.create(ws.key, {
31
+ const randomLinePlot = await client.lineplots.create(ws.key, {
32
32
  name: "test",
33
33
  data: {},
34
34
  });
35
35
  await expect(
36
- userClient.workspaces.lineplots.retrieve({ key: randomLinePlot.key }),
36
+ userClient.lineplots.retrieve({ key: randomLinePlot.key }),
37
37
  ).rejects.toThrow(AuthError);
38
38
  });
39
39
 
@@ -47,11 +47,11 @@ describe("lineplot", () => {
47
47
  name: "test",
48
48
  layout: {},
49
49
  });
50
- const randomLinePlot = await client.workspaces.lineplots.create(ws.key, {
50
+ const randomLinePlot = await client.lineplots.create(ws.key, {
51
51
  name: "test",
52
52
  data: {},
53
53
  });
54
- const retrieved = await userClient.workspaces.lineplots.retrieve({
54
+ const retrieved = await userClient.lineplots.retrieve({
55
55
  key: randomLinePlot.key,
56
56
  });
57
57
  expect(retrieved.key).toBe(randomLinePlot.key);
@@ -68,7 +68,7 @@ describe("lineplot", () => {
68
68
  name: "test",
69
69
  layout: {},
70
70
  });
71
- await userClient.workspaces.lineplots.create(ws.key, {
71
+ await userClient.lineplots.create(ws.key, {
72
72
  name: "test",
73
73
  data: {},
74
74
  });
@@ -85,7 +85,7 @@ describe("lineplot", () => {
85
85
  layout: {},
86
86
  });
87
87
  await expect(
88
- userClient.workspaces.lineplots.create(ws.key, {
88
+ userClient.lineplots.create(ws.key, {
89
89
  name: "test",
90
90
  data: {},
91
91
  }),
@@ -102,13 +102,13 @@ describe("lineplot", () => {
102
102
  name: "test",
103
103
  layout: {},
104
104
  });
105
- const randomLinePlot = await client.workspaces.lineplots.create(ws.key, {
105
+ const randomLinePlot = await client.lineplots.create(ws.key, {
106
106
  name: "test",
107
107
  data: {},
108
108
  });
109
- await userClient.workspaces.lineplots.delete(randomLinePlot.key);
109
+ await userClient.lineplots.delete(randomLinePlot.key);
110
110
  await expect(
111
- userClient.workspaces.lineplots.retrieve({ key: randomLinePlot.key }),
111
+ userClient.lineplots.retrieve({ key: randomLinePlot.key }),
112
112
  ).rejects.toThrow(NotFoundError);
113
113
  });
114
114
 
@@ -122,13 +122,13 @@ describe("lineplot", () => {
122
122
  name: "test",
123
123
  layout: {},
124
124
  });
125
- const randomLinePlot = await client.workspaces.lineplots.create(ws.key, {
125
+ const randomLinePlot = await client.lineplots.create(ws.key, {
126
126
  name: "test",
127
127
  data: {},
128
128
  });
129
- await expect(
130
- userClient.workspaces.lineplots.delete(randomLinePlot.key),
131
- ).rejects.toThrow(AuthError);
129
+ await expect(userClient.lineplots.delete(randomLinePlot.key)).rejects.toThrow(
130
+ AuthError,
131
+ );
132
132
  });
133
133
  });
134
134
  });
@@ -11,8 +11,6 @@ import { sendRequired, type UnaryClient } from "@synnaxlabs/freighter";
11
11
  import { array, type record } from "@synnaxlabs/x";
12
12
  import { z } from "zod";
13
13
 
14
- import { ontology } from "@/ontology";
15
- import { checkForMultipleOrNoResults } from "@/util/retrieve";
16
14
  import {
17
15
  type Key,
18
16
  keyZ,
@@ -21,8 +19,10 @@ import {
21
19
  type New,
22
20
  newZ,
23
21
  type Params,
24
- } from "@/workspace/lineplot/payload";
25
- import { type Key as WorkspaceKey, keyZ as workspaceKeyZ } from "@/workspace/payload";
22
+ } from "@/lineplot/payload";
23
+ import { ontology } from "@/ontology";
24
+ import { checkForMultipleOrNoResults } from "@/util/retrieve";
25
+ import { workspace } from "@/workspace";
26
26
 
27
27
  const renameReqZ = z.object({ key: keyZ, name: z.string() });
28
28
 
@@ -41,7 +41,7 @@ export type RetrieveMultipleParams = z.input<typeof retrieveReqZ>;
41
41
 
42
42
  const retrieveResZ = z.object({ linePlots: array.nullableZ(linePlotZ) });
43
43
 
44
- const createReqZ = z.object({ workspace: workspaceKeyZ, linePlots: newZ.array() });
44
+ const createReqZ = z.object({ workspace: workspace.keyZ, linePlots: newZ.array() });
45
45
  const createResZ = z.object({ linePlots: linePlotZ.array() });
46
46
 
47
47
  const emptyResZ = z.object({});
@@ -53,16 +53,16 @@ export class Client {
53
53
  this.client = client;
54
54
  }
55
55
 
56
- async create(workspace: WorkspaceKey, linePlot: New): Promise<LinePlot>;
57
- async create(workspace: WorkspaceKey, linePlots: New[]): Promise<LinePlot[]>;
56
+ async create(workspace: workspace.Key, linePlot: New): Promise<LinePlot>;
57
+ async create(workspace: workspace.Key, linePlots: New[]): Promise<LinePlot[]>;
58
58
  async create(
59
- workspace: WorkspaceKey,
59
+ workspace: workspace.Key,
60
60
  linePlots: New | New[],
61
61
  ): Promise<LinePlot | LinePlot[]> {
62
62
  const isMany = Array.isArray(linePlots);
63
63
  const res = await sendRequired(
64
64
  this.client,
65
- "/workspace/lineplot/create",
65
+ "/lineplot/create",
66
66
  { workspace, linePlots: array.toArray(linePlots) },
67
67
  createReqZ,
68
68
  createResZ,
@@ -73,7 +73,7 @@ export class Client {
73
73
  async rename(key: Key, name: string): Promise<void> {
74
74
  await sendRequired(
75
75
  this.client,
76
- "/workspace/lineplot/rename",
76
+ "/lineplot/rename",
77
77
  { key, name },
78
78
  renameReqZ,
79
79
  emptyResZ,
@@ -83,7 +83,7 @@ export class Client {
83
83
  async setData(key: Key, data: record.Unknown): Promise<void> {
84
84
  await sendRequired(
85
85
  this.client,
86
- "/workspace/lineplot/set-data",
86
+ "/lineplot/set-data",
87
87
  { key, data: JSON.stringify(data) },
88
88
  setDataReqZ,
89
89
  emptyResZ,
@@ -98,7 +98,7 @@ export class Client {
98
98
  const isSingle = singleRetrieveArgsZ.safeParse(args).success;
99
99
  const res = await sendRequired(
100
100
  this.client,
101
- "/workspace/lineplot/retrieve",
101
+ "/lineplot/retrieve",
102
102
  args,
103
103
  retrieveArgsZ,
104
104
  retrieveResZ,
@@ -110,7 +110,7 @@ export class Client {
110
110
  async delete(keys: Params): Promise<void> {
111
111
  await sendRequired(
112
112
  this.client,
113
- "/workspace/lineplot/delete",
113
+ "/lineplot/delete",
114
114
  { keys: array.toArray(keys) },
115
115
  deleteReqZ,
116
116
  emptyResZ,
@@ -0,0 +1,11 @@
1
+ // Copyright 2026 Synnax Labs, Inc.
2
+ //
3
+ // Use of this software is governed by the Business Source License included in the file
4
+ // licenses/BSL.txt.
5
+ //
6
+ // As of the Change Date specified in that file, in accordance with the Business Source
7
+ // License, use of this software will be governed by the Apache License, Version 2.0,
8
+ // included in the file licenses/APL.txt.
9
+
10
+ export * from "@/lineplot/client";
11
+ export * from "@/lineplot/payload";
@@ -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 group from "@/ontology/group/external";
10
+ export * as lineplot from "@/lineplot/external";
@@ -22,7 +22,7 @@ describe("LinePlot", () => {
22
22
  name: "Line Plot",
23
23
  layout: { one: 1 },
24
24
  });
25
- const linePlot = await client.workspaces.lineplots.create(ws.key, {
25
+ const linePlot = await client.lineplots.create(ws.key, {
26
26
  name: "Line Plot",
27
27
  data: { one: 1 },
28
28
  });
@@ -37,12 +37,12 @@ describe("LinePlot", () => {
37
37
  name: "Line Plot",
38
38
  layout: { one: 1 },
39
39
  });
40
- const linePlot = await client.workspaces.lineplots.create(ws.key, {
40
+ const linePlot = await client.lineplots.create(ws.key, {
41
41
  name: "Line Plot",
42
42
  data: { one: 1 },
43
43
  });
44
- await client.workspaces.lineplots.rename(linePlot.key, "Line Plot2");
45
- const res = await client.workspaces.lineplots.retrieve({ key: linePlot.key });
44
+ await client.lineplots.rename(linePlot.key, "Line Plot2");
45
+ const res = await client.lineplots.retrieve({ key: linePlot.key });
46
46
  expect(res.name).toEqual("Line Plot2");
47
47
  });
48
48
  });
@@ -52,12 +52,12 @@ describe("LinePlot", () => {
52
52
  name: "Line Plot",
53
53
  layout: { one: 1 },
54
54
  });
55
- const linePlot = await client.workspaces.lineplots.create(ws.key, {
55
+ const linePlot = await client.lineplots.create(ws.key, {
56
56
  name: "Line Plot",
57
57
  data: { one: 1 },
58
58
  });
59
- await client.workspaces.lineplots.setData(linePlot.key, { two: 2 });
60
- const res = await client.workspaces.lineplots.retrieve({ key: linePlot.key });
59
+ await client.lineplots.setData(linePlot.key, { two: 2 });
60
+ const res = await client.lineplots.retrieve({ key: linePlot.key });
61
61
  expect(res.data.two).toEqual(2);
62
62
  });
63
63
  });
@@ -67,14 +67,14 @@ describe("LinePlot", () => {
67
67
  name: "Line Plot",
68
68
  layout: { one: 1 },
69
69
  });
70
- const linePlot = await client.workspaces.lineplots.create(ws.key, {
70
+ const linePlot = await client.lineplots.create(ws.key, {
71
71
  name: "Line Plot",
72
72
  data: { one: 1 },
73
73
  });
74
- await client.workspaces.lineplots.delete(linePlot.key);
75
- await expect(
76
- client.workspaces.lineplots.retrieve({ key: linePlot.key }),
77
- ).rejects.toThrow(NotFoundError);
74
+ await client.lineplots.delete(linePlot.key);
75
+ await expect(client.lineplots.retrieve({ key: linePlot.key })).rejects.toThrow(
76
+ NotFoundError,
77
+ );
78
78
  });
79
79
  });
80
80
  });