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