@synnaxlabs/client 0.16.4 → 0.17.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 (69) hide show
  1. package/.turbo/turbo-build.log +5 -5
  2. package/dist/auth/auth.d.ts +2 -2
  3. package/dist/client.cjs +11 -11
  4. package/dist/client.cjs.map +1 -1
  5. package/dist/client.d.ts +14 -4
  6. package/dist/client.js +5437 -5436
  7. package/dist/client.js.map +1 -1
  8. package/dist/framer/frame.d.ts +280 -24
  9. package/dist/framer/writer.d.ts +203 -15
  10. package/dist/hardware/rack/client.d.ts +1 -1
  11. package/dist/hardware/task/payload.d.ts +5 -5
  12. package/dist/ontology/retriever.d.ts +1 -1
  13. package/dist/ranger/active.d.ts +1 -1
  14. package/dist/ranger/payload.d.ts +308 -20
  15. package/dist/workspace/client.d.ts +2 -2
  16. package/dist/workspace/lineplot/client.d.ts +2 -2
  17. package/dist/workspace/lineplot/payload.d.ts +3 -16
  18. package/dist/workspace/lineplot/retriever.d.ts +0 -1
  19. package/dist/workspace/lineplot/writer.d.ts +9 -14
  20. package/dist/workspace/payload.d.ts +3 -3
  21. package/dist/workspace/pid/client.d.ts +2 -2
  22. package/dist/workspace/pid/payload.d.ts +3 -3
  23. package/dist/workspace/pid/retriever.d.ts +0 -1
  24. package/dist/workspace/pid/writer.d.ts +12 -18
  25. package/dist/workspace/writer.d.ts +14 -6
  26. package/examples/node/basicReadWriter.js +34 -5
  27. package/examples/node/package-lock.json +23 -23
  28. package/examples/node/package.json +1 -1
  29. package/package.json +3 -3
  30. package/src/auth/auth.ts +5 -4
  31. package/src/channel/client.ts +0 -1
  32. package/src/channel/creator.ts +1 -0
  33. package/src/channel/retriever.ts +2 -2
  34. package/src/client.ts +2 -2
  35. package/src/connection/checker.ts +1 -1
  36. package/src/framer/client.ts +1 -1
  37. package/src/framer/frame.ts +4 -4
  38. package/src/hardware/device/retriever.ts +3 -3
  39. package/src/hardware/device/writer.ts +3 -1
  40. package/src/hardware/rack/client.ts +3 -4
  41. package/src/hardware/rack/retriever.ts +3 -0
  42. package/src/hardware/rack/writer.ts +2 -0
  43. package/src/hardware/task/payload.ts +5 -4
  44. package/src/hardware/task/retriever.ts +10 -7
  45. package/src/hardware/task/writer.ts +3 -1
  46. package/src/label/retriever.ts +1 -0
  47. package/src/label/writer.ts +4 -0
  48. package/src/ontology/group/writer.ts +18 -5
  49. package/src/ontology/retriever.ts +9 -9
  50. package/src/ontology/writer.ts +25 -11
  51. package/src/ranger/active.ts +26 -8
  52. package/src/ranger/alias.ts +9 -13
  53. package/src/ranger/client.ts +0 -1
  54. package/src/ranger/kv.ts +4 -1
  55. package/src/ranger/retriever.ts +1 -1
  56. package/src/ranger/writer.ts +3 -0
  57. package/src/workspace/client.ts +3 -3
  58. package/src/workspace/lineplot/client.ts +2 -2
  59. package/src/workspace/lineplot/payload.ts +1 -7
  60. package/src/workspace/lineplot/retriever.ts +10 -11
  61. package/src/workspace/lineplot/writer.ts +13 -8
  62. package/src/workspace/payload.ts +1 -1
  63. package/src/workspace/pid/client.ts +2 -2
  64. package/src/workspace/pid/payload.ts +1 -1
  65. package/src/workspace/pid/retriever.ts +8 -10
  66. package/src/workspace/pid/writer.ts +12 -5
  67. package/src/workspace/retriever.ts +2 -4
  68. package/src/workspace/workspace.spec.ts +4 -4
  69. package/src/workspace/writer.ts +12 -10
@@ -2,43 +2,37 @@ import { type UnaryClient } from "@synnaxlabs/freighter";
2
2
  import { type UnknownRecord } from "@synnaxlabs/x";
3
3
  import { z } from "zod";
4
4
  import { type PID, type Params, type Key } from './payload';
5
- export declare const crudePIDz: z.ZodObject<{
5
+ export declare const newPIDZ: z.ZodEffects<z.ZodObject<{
6
6
  name: z.ZodString;
7
7
  key: z.ZodOptional<z.ZodString>;
8
- data: z.ZodRecord<z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodSymbol]>, z.ZodUnknown>;
9
- snapshot: z.ZodBoolean;
8
+ data: z.ZodUnion<[z.ZodRecord<z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodSymbol]>, z.ZodUnknown>, z.ZodEffects<z.ZodString, UnknownRecord, string>]>;
9
+ snapshot: z.ZodOptional<z.ZodBoolean>;
10
10
  }, "strip", z.ZodTypeAny, {
11
11
  name: string;
12
- data: Record<string | number | symbol, unknown>;
13
- snapshot: boolean;
12
+ data: (UnknownRecord | Record<string | number | symbol, unknown>) & (UnknownRecord | Record<string | number | symbol, unknown> | undefined);
14
13
  key?: string | undefined;
14
+ snapshot?: boolean | undefined;
15
15
  }, {
16
16
  name: string;
17
- data: Record<string | number | symbol, unknown>;
18
- snapshot: boolean;
17
+ data: (string | Record<string | number | symbol, unknown>) & (string | Record<string | number | symbol, unknown> | undefined);
19
18
  key?: string | undefined;
20
- }>;
21
- export declare const pidWriteZ: z.ZodObject<{
22
- name: z.ZodString;
23
- key: z.ZodOptional<z.ZodString>;
24
- data: z.ZodEffects<z.ZodString, UnknownRecord, string>;
25
- snapshot: z.ZodOptional<z.ZodBoolean>;
26
- }, "strip", z.ZodTypeAny, {
19
+ snapshot?: boolean | undefined;
20
+ }>, {
21
+ data: string;
27
22
  name: string;
28
- data: UnknownRecord;
29
23
  key?: string | undefined;
30
24
  snapshot?: boolean | undefined;
31
25
  }, {
32
26
  name: string;
33
- data: string;
27
+ data: (string | Record<string | number | symbol, unknown>) & (string | Record<string | number | symbol, unknown> | undefined);
34
28
  key?: string | undefined;
35
29
  snapshot?: boolean | undefined;
36
30
  }>;
37
- export type UncreatedPID = z.infer<typeof pidWriteZ>;
31
+ export type NewPID = z.input<typeof newPIDZ>;
38
32
  export declare class Writer {
39
33
  private readonly client;
40
34
  constructor(client: UnaryClient);
41
- create(workspace: string, pid: UncreatedPID): Promise<PID>;
35
+ create(workspace: string, pid: NewPID): Promise<PID>;
42
36
  copy(key: Key, name: string, snapshot: boolean): Promise<PID>;
43
37
  delete(params: Params): Promise<void>;
44
38
  rename(pid: Key, name: string): Promise<void>;
@@ -2,20 +2,28 @@ import { type UnaryClient } from "@synnaxlabs/freighter";
2
2
  import { type UnknownRecord } from "@synnaxlabs/x";
3
3
  import { z } from "zod";
4
4
  import { type Workspace } from "./payload";
5
- declare const crudeWorkspaceZ: z.ZodObject<{
5
+ declare const newWorkspaceZ: z.ZodEffects<z.ZodObject<{
6
6
  name: z.ZodString;
7
7
  key: z.ZodOptional<z.ZodString>;
8
- layout: z.ZodRecord<z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodSymbol]>, z.ZodUnknown>;
8
+ layout: z.ZodUnion<[z.ZodRecord<z.ZodUnion<[z.ZodNumber, z.ZodString, z.ZodSymbol]>, z.ZodUnknown>, z.ZodEffects<z.ZodString, UnknownRecord, string>]>;
9
9
  }, "strip", z.ZodTypeAny, {
10
10
  name: string;
11
- layout: Record<string | number | symbol, unknown>;
11
+ layout: (UnknownRecord | Record<string | number | symbol, unknown>) & (UnknownRecord | Record<string | number | symbol, unknown> | undefined);
12
12
  key?: string | undefined;
13
13
  }, {
14
14
  name: string;
15
- layout: Record<string | number | symbol, unknown>;
15
+ layout: (string | Record<string | number | symbol, unknown>) & (string | Record<string | number | symbol, unknown> | undefined);
16
+ key?: string | undefined;
17
+ }>, {
18
+ layout: string;
19
+ name: string;
20
+ key?: string | undefined;
21
+ }, {
22
+ name: string;
23
+ layout: (string | Record<string | number | symbol, unknown>) & (string | Record<string | number | symbol, unknown> | undefined);
16
24
  key?: string | undefined;
17
25
  }>;
18
- export type CrudeWorkspace = z.infer<typeof crudeWorkspaceZ>;
26
+ export type NewWorkspace = z.input<typeof newWorkspaceZ>;
19
27
  declare const createResZ: z.ZodObject<{
20
28
  workspaces: z.ZodArray<z.ZodObject<{
21
29
  name: z.ZodString;
@@ -47,7 +55,7 @@ export type CreateResponse = z.infer<typeof createResZ>;
47
55
  export declare class Writer {
48
56
  private readonly client;
49
57
  constructor(client: UnaryClient);
50
- create(workspaces: CrudeWorkspace | CrudeWorkspace[]): Promise<Workspace[]>;
58
+ create(workspaces: NewWorkspace | NewWorkspace[]): Promise<Workspace[]>;
51
59
  delete(keys: string | string[]): Promise<void>;
52
60
  rename(key: string, name: string): Promise<void>;
53
61
  setLayout(key: string, layout: UnknownRecord): Promise<void>;
@@ -25,13 +25,42 @@ const N_SAMPLES = 500;
25
25
 
26
26
  const start = TimeStamp.now();
27
27
 
28
+ console.log(BigInt(start.valueOf().toString()) - BigInt(start.bigInt.toString()))
29
+
28
30
  const data = Float32Array.from({ length: N_SAMPLES }, (_, i) => Math.sin(i / 100));
29
- const time = BigInt64Array.from({ length: N_SAMPLES }, (_, i) => start.add(TimeSpan.milliseconds(i)).bigInt);
31
+ const time = BigInt64Array.from({ length: N_SAMPLES }, (_, i) => BigInt(start.add(TimeSpan.milliseconds(i)).valueOf()));
32
+ console.log(time[0], start, Number(time[0]) - start.valueOf())
30
33
 
31
- await client.telem.write("basic_read_write_time", start, time);
32
- // console.log("HERE")
33
- // // await data_channel.write(start, data);
34
+ console.log(time_channel.key, data_channel.key)
35
+
36
+ // await client.telem.write(time_channel.key, start, time);
37
+ // await client.telem.write(data_channel.key, start, data);
38
+
39
+ const w1 = await client.telem.newWriter({
40
+ start,
41
+ channels: time_channel.key,
42
+ });
43
+ try {
44
+ await w1.write(time_channel.key, time);
45
+ console.log(await w1.commit());
46
+ } finally {
47
+ await w1.close();
48
+ }
34
49
 
35
- console.log("HERE")
50
+ const w = await client.telem.newWriter({
51
+ start,
52
+ channels: data_channel.key,
53
+ });
54
+ try {
55
+ await w.write(data_channel.key, data);
56
+ console.log(await w.commit());
57
+ } finally {
58
+ await w.close();
59
+ }
60
+
61
+
62
+ // await client.telem.write(data_channel.key, start, data);
63
+
64
+ // console.log("HERE")
36
65
 
37
66
  client.close();
@@ -9,7 +9,7 @@
9
9
  "version": "1.0.0",
10
10
  "license": "ISC",
11
11
  "dependencies": {
12
- "@synnaxlabs/client": "^0.16.3"
12
+ "@synnaxlabs/client": "^0.16.4"
13
13
  }
14
14
  },
15
15
  "node_modules/@grpc/grpc-js": {
@@ -3623,15 +3623,15 @@
3623
3623
  "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ=="
3624
3624
  },
3625
3625
  "node_modules/@synnaxlabs/alamos": {
3626
- "version": "0.2.0",
3627
- "resolved": "https://registry.npmjs.org/@synnaxlabs/alamos/-/alamos-0.2.0.tgz",
3628
- "integrity": "sha512-oR20jqcd2Z1GikrIH7FzilIXQDD0y8j3TVTaIawVcRVkNMgPALnIP7wf/4bzZ89/bGb0rtVzUaxnnxup6Yl35Q==",
3626
+ "version": "0.3.0",
3627
+ "resolved": "https://registry.npmjs.org/@synnaxlabs/alamos/-/alamos-0.3.0.tgz",
3628
+ "integrity": "sha512-UcCjXobj1KadClfWvuO2hRzklnHiUnJvfxR8as48OXI6Incs2Fpk9OcWDbH9pHfAGByNeW29OrOcDNO6AIAzZQ==",
3629
3629
  "dependencies": {
3630
3630
  "@opentelemetry/api": "^1.6.0",
3631
3631
  "@opentelemetry/context-zone": "^1.17.1",
3632
3632
  "@opentelemetry/instrumentation-document-load": "^0.33.2",
3633
3633
  "@opentelemetry/sdk-trace-web": "^1.17.1",
3634
- "@synnaxlabs/x": "0.12.0",
3634
+ "@synnaxlabs/x": "0.13.0",
3635
3635
  "@uptrace/node": "^1.17.0",
3636
3636
  "@uptrace/web": "^1.11.1"
3637
3637
  },
@@ -3640,23 +3640,23 @@
3640
3640
  }
3641
3641
  },
3642
3642
  "node_modules/@synnaxlabs/client": {
3643
- "version": "0.16.3",
3644
- "resolved": "https://registry.npmjs.org/@synnaxlabs/client/-/client-0.16.3.tgz",
3645
- "integrity": "sha512-s2Mk0bP69GjAFQbIwatrnrnMLjf5c/EJQX9JwLRo7oNBEOjVrvER38snAGPhBeklSz8Rv1SSXBJJlOHJ7VlNjQ==",
3643
+ "version": "0.16.4",
3644
+ "resolved": "https://registry.npmjs.org/@synnaxlabs/client/-/client-0.16.4.tgz",
3645
+ "integrity": "sha512-vOj3AZivCv1QUZI4fuZPhm+8bEaXaEMrN8q3dPSTTZmih4WXxl4wApP0CNdNHdr9qQb6xIa+SKSoxQYN5ZfvXw==",
3646
3646
  "dependencies": {
3647
- "@synnaxlabs/freighter": "0.7.1",
3648
- "@synnaxlabs/x": "0.12.0",
3647
+ "@synnaxlabs/freighter": "0.8.1",
3648
+ "@synnaxlabs/x": "0.13.0",
3649
3649
  "async-mutex": "^0.4.0",
3650
3650
  "zod": "3.22.4"
3651
3651
  }
3652
3652
  },
3653
3653
  "node_modules/@synnaxlabs/freighter": {
3654
- "version": "0.7.1",
3655
- "resolved": "https://registry.npmjs.org/@synnaxlabs/freighter/-/freighter-0.7.1.tgz",
3656
- "integrity": "sha512-OguCAx3EFiA+SJWsgy99sxa5ZsYzmCyju8I8ahNd81y2vmUGAxclK509ffXglVmWaDVB6ExQkupn8AW2DAMesA==",
3654
+ "version": "0.8.1",
3655
+ "resolved": "https://registry.npmjs.org/@synnaxlabs/freighter/-/freighter-0.8.1.tgz",
3656
+ "integrity": "sha512-Ujd3Ls15eTRFOCgM8sWrHuu9QKFh5/xM+K+sPCgu1s6Tl9IrBYdhEzJFvGHUZnvfXegblABacGS3ErMvtdtq7A==",
3657
3657
  "dependencies": {
3658
- "@synnaxlabs/alamos": "0.2.0",
3659
- "@synnaxlabs/x": "0.12.0",
3658
+ "@synnaxlabs/alamos": "0.3.0",
3659
+ "@synnaxlabs/x": "0.13.0",
3660
3660
  "js-convert-case": "^4.2.0",
3661
3661
  "msgpackr": "^1.10.0",
3662
3662
  "node-fetch": "2.6.11",
@@ -3668,9 +3668,9 @@
3668
3668
  }
3669
3669
  },
3670
3670
  "node_modules/@synnaxlabs/x": {
3671
- "version": "0.12.0",
3672
- "resolved": "https://registry.npmjs.org/@synnaxlabs/x/-/x-0.12.0.tgz",
3673
- "integrity": "sha512-B80+/+ENxlpefPoFQi9Bb/opICQw6HBdNYhv9j/Kj0as0Bw0F2waePXc79spFsydh9QDV45xg28f6/XIL8RHlA==",
3671
+ "version": "0.13.0",
3672
+ "resolved": "https://registry.npmjs.org/@synnaxlabs/x/-/x-0.13.0.tgz",
3673
+ "integrity": "sha512-9Sh5Io7/Ywegk/axxwHA2wDsmdYL28RQYKUo+gkXtzM6+uj1JSpFvyZFVRSx21uP3p6ABE9MwFCZcCY2/N1iWw==",
3674
3674
  "dependencies": {
3675
3675
  "async-mutex": "^0.4.0",
3676
3676
  "js-convert-case": "^4.2.0",
@@ -3919,13 +3919,13 @@
3919
3919
  }
3920
3920
  },
3921
3921
  "node_modules/@types/serve-static": {
3922
- "version": "1.15.5",
3923
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz",
3924
- "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==",
3922
+ "version": "1.15.6",
3923
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.6.tgz",
3924
+ "integrity": "sha512-xkChxykiNb1X2YBevPIhQhNU9m9M7h9e2gDsmePAP2kNqhOvpKOrZWOCzq2ERQqfNFzlzHG2bdM0u3z5x+gQgg==",
3925
3925
  "dependencies": {
3926
3926
  "@types/http-errors": "*",
3927
- "@types/mime": "*",
3928
- "@types/node": "*"
3927
+ "@types/node": "*",
3928
+ "@types/send": "*"
3929
3929
  }
3930
3930
  },
3931
3931
  "node_modules/@types/shimmer": {
@@ -11,6 +11,6 @@
11
11
  "author": "",
12
12
  "license": "ISC",
13
13
  "dependencies": {
14
- "@synnaxlabs/client": "^0.16.3"
14
+ "@synnaxlabs/client": "^0.16.4"
15
15
  }
16
16
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@synnaxlabs/client",
3
3
  "private": false,
4
- "version": "0.16.4",
4
+ "version": "0.17.0",
5
5
  "type": "module",
6
6
  "description": "The Client Library for Synnax",
7
7
  "repository": "https://github.com/synnaxlabs/synnax/tree/main/client/ts",
@@ -18,8 +18,8 @@
18
18
  "dependencies": {
19
19
  "async-mutex": "^0.4.0",
20
20
  "zod": "3.22.4",
21
- "@synnaxlabs/freighter": "0.8.1",
22
- "@synnaxlabs/x": "0.13.0"
21
+ "@synnaxlabs/freighter": "0.9.1",
22
+ "@synnaxlabs/x": "0.14.1"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@types/node": "^20.10.5",
package/src/auth/auth.ts CHANGED
@@ -47,18 +47,19 @@ export class Client {
47
47
  authenticated: boolean;
48
48
  user: user.Payload | undefined;
49
49
 
50
- constructor(client: UnaryClient, creds: InsecureCredentials) {
50
+ constructor(client: UnaryClient, credentials: InsecureCredentials) {
51
51
  this.client = client;
52
52
  this.authenticated = false;
53
- this.authenticate(creds);
53
+ this.authenticate(credentials);
54
54
  }
55
55
 
56
- authenticate(creds: InsecureCredentials): void {
56
+ authenticate(credentials: InsecureCredentials): void {
57
57
  this.authenticating = new Promise((resolve, reject) => {
58
58
  this.client
59
59
  .send<typeof insecureCredentialsZ, typeof tokenResponseZ>(
60
60
  LOGIN_ENDPOINT,
61
- creds,
61
+ credentials,
62
+ insecureCredentialsZ,
62
63
  tokenResponseZ,
63
64
  )
64
65
  .then(([res, err]) => {
@@ -244,7 +244,6 @@ export class Client implements AsyncTermSearcher<string, Key, Channel> {
244
244
  async create(channels: NewPayload[]): Promise<Channel[]>;
245
245
 
246
246
  async create(channels: NewPayload | NewPayload[]): Promise<Channel | Channel[]> {
247
- console.log("ABC");
248
247
  const single = !Array.isArray(channels);
249
248
  const payloads = await this.creator.create(toArray(channels));
250
249
  const res = this.sugar(payloads);
@@ -35,6 +35,7 @@ export class Creator {
35
35
  const [res, err] = await this.client.send<typeof reqZ, typeof resZ>(
36
36
  Creator.ENDPOINT,
37
37
  req,
38
+ reqZ,
38
39
  resZ,
39
40
  );
40
41
  if (err != null) throw err;
@@ -33,7 +33,7 @@ const reqZ = z.object({
33
33
  offset: z.number().optional(),
34
34
  });
35
35
 
36
- type Request = z.infer<typeof reqZ>;
36
+ type Request = z.input<typeof reqZ>;
37
37
 
38
38
  const resZ = z.object({
39
39
  channels: payload.array(),
@@ -67,7 +67,7 @@ export class ClusterRetriever implements Retriever {
67
67
  }
68
68
 
69
69
  private async execute(request: Request): Promise<Payload[]> {
70
- const [res, err] = await this.client.send(ClusterRetriever.ENDPOINT, request, resZ);
70
+ const [res, err] = await this.client.send(ClusterRetriever.ENDPOINT, request, reqZ, resZ);
71
71
  if (err != null) throw err;
72
72
  return res.channels;
73
73
  }
package/src/client.ts CHANGED
@@ -48,19 +48,19 @@ export type ParsedSynnaxProps = z.output<typeof synnaxPropsZ>;
48
48
  */
49
49
  // eslint-disable-next-line import/no-default-export
50
50
  export default class Synnax {
51
- private readonly transport: Transport;
52
51
  readonly createdAt: TimeStamp;
52
+ readonly props: ParsedSynnaxProps;
53
53
  readonly telem: framer.Client;
54
54
  readonly ranges: ranger.Client;
55
55
  readonly channels: channel.Client;
56
56
  readonly auth: auth.Client | undefined;
57
57
  readonly connectivity: connection.Checker;
58
58
  readonly ontology: ontology.Client;
59
- readonly props: ParsedSynnaxProps;
60
59
  readonly workspaces: workspace.Client;
61
60
  readonly labels: label.Client;
62
61
  readonly hardware: hardware.Client;
63
62
  static readonly connectivity = connection.Checker;
63
+ private readonly transport: Transport;
64
64
 
65
65
  /**
66
66
  * @param props.host - Hostname of a node in the cluster.
@@ -77,7 +77,7 @@ export class Checker {
77
77
  async check(): Promise<State> {
78
78
  const prevStatus = this._state.status;
79
79
  try {
80
- const [res, err] = await this.client.send(Checker.ENDPOINT, null, responseZ);
80
+ const [res, err] = await this.client.send(Checker.ENDPOINT, {}, z.object({}), responseZ);
81
81
  if (err != null) throw err;
82
82
  this._state.status = "connected";
83
83
  this._state.message = `Connected to ${this.name ?? "cluster"}`;
@@ -96,7 +96,7 @@ export class Client {
96
96
  });
97
97
  try {
98
98
  await w.write(to, data);
99
- if (!(await w.commit())) throw (await w.error()) as Error;
99
+ await w.commit();
100
100
  } finally {
101
101
  await w.close();
102
102
  }
@@ -7,7 +7,7 @@
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 { Size, Series, TimeRange, toArray, DataType, unique } from "@synnaxlabs/x";
10
+ import { Size, Series, TimeRange, toArray, DataType, unique, TimeStamp } from "@synnaxlabs/x";
11
11
  import { z } from "zod";
12
12
 
13
13
  import {
@@ -222,7 +222,7 @@ export class Frame {
222
222
  * @returns true if the frame is weakly aligned. A frame is weakly aligned if it meets
223
223
  * the time range occupied by all arrays of a particular channel is the same for all
224
224
  * channels in the frame. This means that the arrays for a particular channel can have
225
- * gaps betwen them.
225
+ * gaps between them.
226
226
  */
227
227
  get isWeaklyAligned(): boolean {
228
228
  if (this.columns.length <= 1) return true;
@@ -233,8 +233,8 @@ export class Frame {
233
233
  timeRange(col?: KeyOrName): TimeRange {
234
234
  if (col == null) {
235
235
  if (this.columns.length === 0) return TimeRange.ZERO;
236
- const start = Math.min(...this.series.map((a) => a.timeRange.start.valueOf()));
237
- const end = Math.max(...this.series.map((a) => a.timeRange.end.valueOf()));
236
+ const start = TimeStamp.min(...this.series.map((a) => a.timeRange.start));
237
+ const end = TimeStamp.max(...this.series.map((a) => a.timeRange.end));
238
238
  return new TimeRange(start, end);
239
239
  }
240
240
  const group = this.get(col);
@@ -37,7 +37,7 @@ export class Retriever {
37
37
  const res = await sendRequired<
38
38
  typeof retrieveDeviceReqZ,
39
39
  typeof retrieveDeviceResZ
40
- >(this.client, RETRIEVE_ENDPOINT, { keys: [term] }, retrieveDeviceResZ);
40
+ >(this.client, RETRIEVE_ENDPOINT, { keys: [term] }, retrieveDeviceReqZ, retrieveDeviceResZ);
41
41
  return res.devices;
42
42
  }
43
43
 
@@ -45,7 +45,7 @@ export class Retriever {
45
45
  const res = await sendRequired<
46
46
  typeof retrieveDeviceReqZ,
47
47
  typeof retrieveDeviceResZ
48
- >(this.client, RETRIEVE_ENDPOINT, { offset, limit }, retrieveDeviceResZ);
48
+ >(this.client, RETRIEVE_ENDPOINT, { offset, limit }, retrieveDeviceReqZ, retrieveDeviceResZ);
49
49
  return res.devices;
50
50
  }
51
51
 
@@ -54,7 +54,7 @@ export class Retriever {
54
54
  const res = await sendRequired<
55
55
  typeof retrieveDeviceReqZ,
56
56
  typeof retrieveDeviceResZ
57
- >(this.client, RETRIEVE_ENDPOINT, { keys }, retrieveDeviceResZ);
57
+ >(this.client, RETRIEVE_ENDPOINT, { keys }, retrieveDeviceReqZ, retrieveDeviceResZ);
58
58
  return res.devices;
59
59
  }
60
60
  }
@@ -40,7 +40,8 @@ export class Writer {
40
40
  const res = await sendRequired<typeof createReqZ, typeof createResZ>(
41
41
  this.client,
42
42
  CREATE_ENDPOINT,
43
- createReqZ.parse({ devices }),
43
+ { devices },
44
+ createReqZ,
44
45
  createResZ,
45
46
  );
46
47
  return res.devices;
@@ -51,6 +52,7 @@ export class Writer {
51
52
  this.client,
52
53
  DELETE_ENDPOINT,
53
54
  { keys },
55
+ deleteReqZ,
54
56
  deleteResZ,
55
57
  );
56
58
  }
@@ -74,7 +74,7 @@ export class Rack {
74
74
  key: number;
75
75
  name: string;
76
76
  private readonly writer: TaskWriter;
77
- private readonly retriever: TaskRetriever;
77
+ private readonly tasks: TaskRetriever;
78
78
 
79
79
  constructor(
80
80
  key: number,
@@ -85,11 +85,11 @@ export class Rack {
85
85
  this.key = key;
86
86
  this.name = name;
87
87
  this.writer = _writer;
88
- this.retriever = _retriever;
88
+ this.tasks = _retriever;
89
89
  }
90
90
 
91
91
  async listTasks(): Promise<Task[]> {
92
- return await this.retriever.retrieve({ rack: this.key });
92
+ return await this.tasks.retrieve({ rack: this.key });
93
93
  }
94
94
 
95
95
  async retrieveTasks(): Promise<Task[]> {
@@ -97,7 +97,6 @@ export class Rack {
97
97
  }
98
98
 
99
99
  async createTask(task: NewTask): Promise<Task> {
100
- // @ts-expect-error
101
100
  task.key = (
102
101
  (BigInt(this.key) << 32n) +
103
102
  (BigInt(task.key ?? 0) & 0xffffffffn)
@@ -38,6 +38,7 @@ export class Retriever {
38
38
  this.client,
39
39
  RETRIEVE_ENDPOINT,
40
40
  { offset, limit },
41
+ retrieveRackReqZ,
41
42
  retrieveRackResZ,
42
43
  );
43
44
  return res.racks;
@@ -48,6 +49,7 @@ export class Retriever {
48
49
  this.client,
49
50
  RETRIEVE_ENDPOINT,
50
51
  { search: term },
52
+ retrieveRackReqZ,
51
53
  retrieveRackResZ,
52
54
  );
53
55
  return res.racks;
@@ -58,6 +60,7 @@ export class Retriever {
58
60
  this.client,
59
61
  RETRIEVE_ENDPOINT,
60
62
  { keys },
63
+ retrieveRackReqZ,
61
64
  retrieveRackResZ,
62
65
  );
63
66
  return res.racks;
@@ -40,6 +40,7 @@ export class Writer {
40
40
  this.client,
41
41
  CREATE_RACK_ENDPOINT,
42
42
  { racks },
43
+ createReqZ,
43
44
  createResZ,
44
45
  );
45
46
  return res.racks;
@@ -50,6 +51,7 @@ export class Writer {
50
51
  this.client,
51
52
  DELETE_RACK_ENDPOINT,
52
53
  { keys },
54
+ deleteReqZ,
53
55
  deleteResZ,
54
56
  );
55
57
  }
@@ -10,10 +10,11 @@
10
10
  import { type UnknownRecord } from "@synnaxlabs/x";
11
11
  import { z } from "zod";
12
12
 
13
- export const taskKeyZ = z
14
- .bigint()
15
- .or(z.number())
16
- .transform((k) => k.toString());
13
+ export const taskKeyZ = z.union([
14
+ z.string(),
15
+ z.bigint().transform((k) => k.toString()),
16
+ z.number().transform((k) => k.toString()),
17
+ ])
17
18
 
18
19
  export type TaskKey = z.infer<typeof taskKeyZ>;
19
20
 
@@ -20,7 +20,7 @@ const retrieveReqZ = z.object({
20
20
  limit: z.number().optional(),
21
21
  });
22
22
 
23
- const rerieveResS = z.object({
23
+ const retrieveResZ = z.object({
24
24
  tasks: z.union([taskZ.array(), z.null().transform(() => [])]),
25
25
  });
26
26
 
@@ -36,31 +36,34 @@ export class Retriever {
36
36
  }
37
37
 
38
38
  async retrieve(params: RetrieveRequest): Promise<Task[]> {
39
- const res = await sendRequired<typeof retrieveReqZ, typeof rerieveResS>(
39
+ const res = await sendRequired<typeof retrieveReqZ, typeof retrieveResZ>(
40
40
  this.client,
41
41
  RETRIEVE_ENDPOINT,
42
42
  params,
43
- rerieveResS,
43
+ retrieveReqZ,
44
+ retrieveResZ,
44
45
  );
45
46
  return res.tasks;
46
47
  }
47
48
 
48
49
  async search(term: string): Promise<Task[]> {
49
- const res = await sendRequired<typeof retrieveReqZ, typeof rerieveResS>(
50
+ const res = await sendRequired<typeof retrieveReqZ, typeof retrieveResZ>(
50
51
  this.client,
51
52
  RETRIEVE_ENDPOINT,
52
53
  { keys: [term] },
53
- rerieveResS,
54
+ retrieveReqZ,
55
+ retrieveResZ,
54
56
  );
55
57
  return res.tasks;
56
58
  }
57
59
 
58
60
  async page(offset: number, limit: number): Promise<Task[]> {
59
- const res = await sendRequired<typeof retrieveReqZ, typeof rerieveResS>(
61
+ const res = await sendRequired<typeof retrieveReqZ, typeof retrieveResZ>(
60
62
  this.client,
61
63
  RETRIEVE_ENDPOINT,
62
64
  { offset, limit },
63
- rerieveResS,
65
+ retrieveReqZ,
66
+ retrieveResZ,
64
67
  );
65
68
  return res.tasks;
66
69
  }
@@ -46,7 +46,8 @@ export class Writer {
46
46
  const res = await sendRequired<typeof createReqZ, typeof createResZ>(
47
47
  this.client,
48
48
  CREATE_ENDPOINT,
49
- { tasks: tasks.map((t) => ({ ...t, config: JSON.stringify(t.config) })) },
49
+ { tasks },
50
+ createReqZ,
50
51
  createResZ,
51
52
  );
52
53
  return res.tasks;
@@ -57,6 +58,7 @@ export class Writer {
57
58
  this.client,
58
59
  DELETE_ENDPOINT,
59
60
  { keys },
61
+ deleteReqZ,
60
62
  deleteResZ,
61
63
  );
62
64
  }
@@ -57,6 +57,7 @@ export class Retriever {
57
57
  const [res, err] = await this.client.send<typeof reqZ, typeof resZ>(
58
58
  Retriever.ENDPOINT,
59
59
  req,
60
+ reqZ,
60
61
  resZ,
61
62
  );
62
63
  if (err != null) throw err;
@@ -56,6 +56,7 @@ export class Writer {
56
56
  this.client,
57
57
  CREATE_ENDPOINT,
58
58
  { labels: toArray(labels) },
59
+ createReqZ,
59
60
  createResZ,
60
61
  );
61
62
  return res.labels;
@@ -66,6 +67,7 @@ export class Writer {
66
67
  this.client,
67
68
  DELETE_ENDPOINT,
68
69
  { keys: toArray(keys) },
70
+ deleteReqZ,
69
71
  emptyResZ,
70
72
  );
71
73
  }
@@ -75,6 +77,7 @@ export class Writer {
75
77
  this.client,
76
78
  SET_ENDPOINT,
77
79
  { id, labels },
80
+ setReqZ,
78
81
  emptyResZ,
79
82
  );
80
83
  }
@@ -84,6 +87,7 @@ export class Writer {
84
87
  this.client,
85
88
  REMOVE_ENDPOINT,
86
89
  { id, labels },
90
+ removeReqZ,
87
91
  emptyResZ,
88
92
  );
89
93
  }