@synnaxlabs/client 0.53.0 → 0.54.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 +14 -8
- package/dist/client.cjs +48 -54
- package/dist/client.js +12360 -15511
- package/dist/src/access/action/index.d.ts +2 -0
- package/dist/src/access/action/index.d.ts.map +1 -0
- package/dist/src/access/{payload.d.ts → action/types.gen.d.ts} +2 -1
- package/dist/src/access/action/types.gen.d.ts.map +1 -0
- package/dist/src/access/enforce.d.ts +2 -2
- package/dist/src/access/enforce.d.ts.map +1 -1
- package/dist/src/access/external.d.ts +1 -1
- package/dist/src/access/external.d.ts.map +1 -1
- package/dist/src/access/policy/client.d.ts +233 -389
- package/dist/src/access/policy/client.d.ts.map +1 -1
- package/dist/src/access/policy/external.d.ts +1 -1
- package/dist/src/access/policy/external.d.ts.map +1 -1
- package/dist/src/access/policy/types.gen.d.ts +120 -0
- package/dist/src/access/policy/types.gen.d.ts.map +1 -0
- package/dist/src/access/role/client.d.ts +1 -1
- package/dist/src/access/role/client.d.ts.map +1 -1
- package/dist/src/access/role/external.d.ts +1 -1
- package/dist/src/access/role/external.d.ts.map +1 -1
- package/dist/src/access/role/types.gen.d.ts +34 -0
- package/dist/src/access/role/types.gen.d.ts.map +1 -0
- package/dist/src/arc/client.d.ts +2 -2
- package/dist/src/arc/client.d.ts.map +1 -1
- package/dist/src/arc/compiler/index.d.ts +2 -0
- package/dist/src/arc/compiler/index.d.ts.map +1 -0
- package/dist/src/arc/compiler/types.gen.d.ts +12 -0
- package/dist/src/arc/compiler/types.gen.d.ts.map +1 -0
- package/dist/src/arc/external.d.ts +6 -1
- package/dist/src/arc/external.d.ts.map +1 -1
- package/dist/src/arc/graph/index.d.ts +2 -0
- package/dist/src/arc/graph/index.d.ts.map +1 -0
- package/dist/src/arc/graph/types.gen.d.ts +644 -0
- package/dist/src/arc/graph/types.gen.d.ts.map +1 -0
- package/dist/src/arc/ir/index.d.ts +2 -0
- package/dist/src/arc/ir/index.d.ts.map +1 -0
- package/dist/src/arc/ir/types.gen.d.ts +2988 -0
- package/dist/src/arc/ir/types.gen.d.ts.map +1 -0
- package/dist/src/arc/module/index.d.ts +2 -0
- package/dist/src/arc/module/index.d.ts.map +1 -0
- package/dist/src/arc/module/types.gen.d.ts +1138 -0
- package/dist/src/arc/module/types.gen.d.ts.map +1 -0
- package/dist/src/arc/program/index.d.ts +2 -0
- package/dist/src/arc/program/index.d.ts.map +1 -0
- package/dist/src/arc/program/types.gen.d.ts +1138 -0
- package/dist/src/arc/program/types.gen.d.ts.map +1 -0
- package/dist/src/arc/text/index.d.ts +2 -0
- package/dist/src/arc/text/index.d.ts.map +1 -0
- package/dist/src/arc/text/types.gen.d.ts +8 -0
- package/dist/src/arc/text/types.gen.d.ts.map +1 -0
- package/dist/src/arc/types/index.d.ts +2 -0
- package/dist/src/arc/types/index.d.ts.map +1 -0
- package/dist/src/arc/types/types.gen.d.ts +237 -0
- package/dist/src/arc/types/types.gen.d.ts.map +1 -0
- package/dist/src/arc/types.gen.d.ts +2394 -0
- package/dist/src/arc/types.gen.d.ts.map +1 -0
- package/dist/src/channel/client.d.ts +5 -4
- package/dist/src/channel/client.d.ts.map +1 -1
- package/dist/src/channel/external.d.ts +1 -0
- package/dist/src/channel/external.d.ts.map +1 -1
- package/dist/src/channel/payload.d.ts +93 -178
- package/dist/src/channel/payload.d.ts.map +1 -1
- package/dist/src/channel/retriever.d.ts +3 -2
- package/dist/src/channel/retriever.d.ts.map +1 -1
- package/dist/src/channel/types.gen.d.ts +151 -0
- package/dist/src/channel/types.gen.d.ts.map +1 -0
- package/dist/src/channel/writer.d.ts +1 -1
- package/dist/src/channel/writer.d.ts.map +1 -1
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/cluster/index.d.ts +2 -0
- package/dist/src/cluster/index.d.ts.map +1 -0
- package/dist/src/cluster/types.gen.d.ts +4 -0
- package/dist/src/cluster/types.gen.d.ts.map +1 -0
- package/dist/src/control/state.d.ts +14 -9
- package/dist/src/control/state.d.ts.map +1 -1
- package/dist/src/device/client.d.ts +7 -12
- package/dist/src/device/client.d.ts.map +1 -1
- package/dist/src/device/external.d.ts +1 -1
- package/dist/src/device/external.d.ts.map +1 -1
- package/dist/src/device/types.gen.d.ts +163 -0
- package/dist/src/device/types.gen.d.ts.map +1 -0
- package/dist/src/framer/adapter.d.ts +2 -2
- package/dist/src/framer/adapter.d.ts.map +1 -1
- package/dist/src/framer/client.d.ts +7 -7
- package/dist/src/framer/client.d.ts.map +1 -1
- package/dist/src/framer/codec.d.ts +5 -5
- package/dist/src/framer/codec.d.ts.map +1 -1
- package/dist/src/framer/external.d.ts +1 -1
- package/dist/src/framer/external.d.ts.map +1 -1
- package/dist/src/framer/frame.d.ts +18 -18
- package/dist/src/framer/frame.d.ts.map +1 -1
- package/dist/src/framer/reader.d.ts +1 -1
- package/dist/src/framer/reader.d.ts.map +1 -1
- package/dist/src/framer/streamer.d.ts +177 -114
- package/dist/src/framer/streamer.d.ts.map +1 -1
- package/dist/src/framer/types.gen.d.ts +9 -0
- package/dist/src/framer/types.gen.d.ts.map +1 -0
- package/dist/src/framer/writer.d.ts +192 -128
- package/dist/src/framer/writer.d.ts.map +1 -1
- package/dist/src/group/client.d.ts +17 -17
- package/dist/src/group/client.d.ts.map +1 -1
- package/dist/src/group/external.d.ts +1 -1
- package/dist/src/group/external.d.ts.map +1 -1
- package/dist/src/group/types.gen.d.ts +23 -0
- package/dist/src/group/types.gen.d.ts.map +1 -0
- package/dist/src/label/client.d.ts +51 -72
- package/dist/src/label/client.d.ts.map +1 -1
- package/dist/src/label/payload.d.ts +30 -8
- package/dist/src/label/payload.d.ts.map +1 -1
- package/dist/src/lineplot/client.d.ts +2 -11
- package/dist/src/lineplot/client.d.ts.map +1 -1
- package/dist/src/lineplot/external.d.ts +1 -1
- package/dist/src/lineplot/external.d.ts.map +1 -1
- package/dist/src/lineplot/types.gen.d.ts +33 -0
- package/dist/src/lineplot/types.gen.d.ts.map +1 -0
- package/dist/src/log/client.d.ts +2 -11
- package/dist/src/log/client.d.ts.map +1 -1
- package/dist/src/log/external.d.ts +1 -1
- package/dist/src/log/external.d.ts.map +1 -1
- package/dist/src/log/types.gen.d.ts +33 -0
- package/dist/src/log/types.gen.d.ts.map +1 -0
- package/dist/src/ontology/client.d.ts +31 -31
- package/dist/src/ontology/payload.d.ts +74 -99
- package/dist/src/ontology/payload.d.ts.map +1 -1
- package/dist/src/ontology/types.gen.d.ts +30 -0
- package/dist/src/ontology/types.gen.d.ts.map +1 -0
- package/dist/src/ontology/writer.d.ts +80 -80
- package/dist/src/rack/client.d.ts +22 -11
- package/dist/src/rack/client.d.ts.map +1 -1
- package/dist/src/rack/external.d.ts +1 -1
- package/dist/src/rack/external.d.ts.map +1 -1
- package/dist/src/rack/types.gen.d.ts +72 -0
- package/dist/src/rack/types.gen.d.ts.map +1 -0
- package/dist/src/range/alias/types.gen.d.ts +14 -0
- package/dist/src/range/alias/types.gen.d.ts.map +1 -0
- package/dist/src/range/kv/types.gen.d.ts +13 -0
- package/dist/src/range/kv/types.gen.d.ts.map +1 -0
- package/dist/src/ranger/alias/client.d.ts +1 -1
- package/dist/src/ranger/alias/client.d.ts.map +1 -1
- package/dist/src/ranger/alias/external.d.ts +3 -1
- package/dist/src/ranger/alias/external.d.ts.map +1 -1
- package/dist/src/ranger/alias/payload.d.ts +5 -9
- package/dist/src/ranger/alias/payload.d.ts.map +1 -1
- package/dist/src/ranger/alias/payload.spec.d.ts +2 -0
- package/dist/src/ranger/alias/payload.spec.d.ts.map +1 -0
- package/dist/src/ranger/alias/types.gen.d.ts +14 -0
- package/dist/src/ranger/alias/types.gen.d.ts.map +1 -0
- package/dist/src/ranger/client.d.ts +10 -15
- package/dist/src/ranger/client.d.ts.map +1 -1
- package/dist/src/ranger/external.d.ts +4 -4
- package/dist/src/ranger/external.d.ts.map +1 -1
- package/dist/src/ranger/kv/client.d.ts +1 -1
- package/dist/src/ranger/kv/client.d.ts.map +1 -1
- package/dist/src/ranger/kv/external.d.ts +3 -1
- package/dist/src/ranger/kv/external.d.ts.map +1 -1
- package/dist/src/ranger/kv/payload.d.ts +6 -13
- package/dist/src/ranger/kv/payload.d.ts.map +1 -1
- package/dist/src/ranger/kv/types.gen.d.ts +13 -0
- package/dist/src/ranger/kv/types.gen.d.ts.map +1 -0
- package/dist/src/ranger/payload.d.ts +2 -97
- package/dist/src/ranger/payload.d.ts.map +1 -1
- package/dist/src/ranger/types.gen.d.ts +219 -0
- package/dist/src/ranger/types.gen.d.ts.map +1 -0
- package/dist/src/ranger/writer.d.ts +25 -25
- package/dist/src/ranger/writer.d.ts.map +1 -1
- package/dist/src/schematic/client.d.ts +2 -11
- package/dist/src/schematic/client.d.ts.map +1 -1
- package/dist/src/schematic/external.d.ts +1 -1
- package/dist/src/schematic/external.d.ts.map +1 -1
- package/dist/src/schematic/symbol/client.d.ts +1 -2
- package/dist/src/schematic/symbol/client.d.ts.map +1 -1
- package/dist/src/schematic/symbol/external.d.ts +1 -1
- package/dist/src/schematic/symbol/external.d.ts.map +1 -1
- package/dist/src/schematic/symbol/types.gen.d.ts +277 -0
- package/dist/src/schematic/symbol/types.gen.d.ts.map +1 -0
- package/dist/src/schematic/types.gen.d.ts +35 -0
- package/dist/src/schematic/types.gen.d.ts.map +1 -0
- package/dist/src/status/client.d.ts +2 -0
- package/dist/src/status/client.d.ts.map +1 -1
- package/dist/src/status/payload.d.ts +25 -54
- package/dist/src/status/payload.d.ts.map +1 -1
- package/dist/src/table/client.d.ts +2 -11
- package/dist/src/table/client.d.ts.map +1 -1
- package/dist/src/table/external.d.ts +1 -1
- package/dist/src/table/external.d.ts.map +1 -1
- package/dist/src/table/types.gen.d.ts +33 -0
- package/dist/src/table/types.gen.d.ts.map +1 -0
- package/dist/src/task/client.d.ts +15 -20
- package/dist/src/task/client.d.ts.map +1 -1
- package/dist/src/task/external.d.ts +1 -1
- package/dist/src/task/external.d.ts.map +1 -1
- package/dist/src/task/types.gen.d.ts +155 -0
- package/dist/src/task/types.gen.d.ts.map +1 -0
- package/dist/src/user/client.d.ts +3 -3
- package/dist/src/user/client.d.ts.map +1 -1
- package/dist/src/user/external.d.ts +1 -1
- package/dist/src/user/external.d.ts.map +1 -1
- package/dist/src/user/types.gen.d.ts +35 -0
- package/dist/src/user/types.gen.d.ts.map +1 -0
- package/dist/src/util/decodeJSONString.d.ts.map +1 -1
- package/dist/src/view/client.d.ts +1 -10
- package/dist/src/view/client.d.ts.map +1 -1
- package/dist/src/view/external.d.ts +1 -1
- package/dist/src/view/external.d.ts.map +1 -1
- package/dist/src/view/types.gen.d.ts +35 -0
- package/dist/src/view/types.gen.d.ts.map +1 -0
- package/dist/src/workspace/client.d.ts +2 -11
- package/dist/src/workspace/client.d.ts.map +1 -1
- package/dist/src/workspace/external.d.ts +1 -1
- package/dist/src/workspace/external.d.ts.map +1 -1
- package/dist/src/workspace/types.gen.d.ts +34 -0
- package/dist/src/workspace/types.gen.d.ts.map +1 -0
- package/package.json +11 -11
- package/src/access/action/index.ts +11 -0
- package/src/access/{payload.ts → action/types.gen.ts} +4 -1
- package/src/access/enforce.spec.ts +1 -2
- package/src/access/enforce.ts +2 -2
- package/src/access/external.ts +1 -1
- package/src/access/policy/client.ts +2 -2
- package/src/access/policy/external.ts +1 -1
- package/src/access/policy/types.gen.ts +44 -0
- package/src/access/role/client.ts +2 -2
- package/src/access/role/external.ts +1 -1
- package/src/access/role/types.gen.ts +46 -0
- package/src/arc/access.spec.ts +18 -6
- package/src/arc/client.ts +3 -3
- package/src/{framer/payload.ts → arc/compiler/index.ts} +1 -6
- package/src/arc/compiler/types.gen.ts +27 -0
- package/src/arc/external.ts +6 -1
- package/src/arc/graph/index.ts +10 -0
- package/src/arc/graph/types.gen.ts +59 -0
- package/src/arc/ir/index.ts +10 -0
- package/src/arc/ir/types.gen.ts +166 -0
- package/src/arc/module/index.ts +10 -0
- package/src/arc/module/types.gen.ts +18 -0
- package/src/arc/program/index.ts +10 -0
- package/src/arc/program/types.gen.ts +18 -0
- package/src/arc/text/index.ts +10 -0
- package/src/arc/text/types.gen.ts +19 -0
- package/src/arc/types/index.ts +10 -0
- package/src/arc/types/types.gen.ts +132 -0
- package/src/arc/types.gen.ts +85 -0
- package/src/channel/client.ts +14 -15
- package/src/channel/external.ts +1 -0
- package/src/channel/payload.spec.ts +19 -16
- package/src/channel/payload.ts +14 -82
- package/src/channel/retriever.ts +9 -18
- package/src/channel/types.gen.ts +137 -0
- package/src/channel/writer.ts +2 -2
- package/src/client.ts +4 -0
- package/src/cluster/index.ts +10 -0
- package/src/cluster/types.gen.ts +16 -0
- package/src/control/state.ts +8 -6
- package/src/device/client.ts +14 -11
- package/src/device/device.spec.ts +95 -1
- package/src/device/external.ts +1 -1
- package/src/device/payload.spec.ts +26 -2
- package/src/device/types.gen.ts +100 -0
- package/src/framer/adapter.ts +7 -4
- package/src/framer/client.ts +15 -9
- package/src/framer/codec.spec.ts +25 -5
- package/src/framer/codec.ts +11 -9
- package/src/framer/deleter.spec.ts +0 -15
- package/src/framer/external.ts +1 -1
- package/src/framer/frame.ts +44 -36
- package/src/framer/reader.spec.ts +2 -2
- package/src/framer/reader.ts +6 -6
- package/src/framer/streamer.spec.ts +98 -0
- package/src/framer/streamer.ts +10 -0
- package/src/framer/types.gen.ts +20 -0
- package/src/framer/writer.ts +14 -8
- package/src/group/client.ts +1 -1
- package/src/group/external.ts +1 -1
- package/src/group/group.spec.ts +1 -1
- package/src/{access/role/payload.ts → group/types.gen.ts} +11 -11
- package/src/label/client.ts +2 -5
- package/src/label/label.spec.ts +12 -3
- package/src/label/payload.ts +3 -1
- package/src/lineplot/client.ts +9 -11
- package/src/lineplot/external.ts +1 -1
- package/src/lineplot/lineplot.spec.ts +40 -0
- package/src/lineplot/types.gen.ts +42 -0
- package/src/log/client.ts +9 -18
- package/src/log/external.ts +1 -1
- package/src/log/log.spec.ts +38 -0
- package/src/log/types.gen.ts +42 -0
- package/src/ontology/payload.ts +5 -29
- package/src/ontology/types.gen.ts +41 -0
- package/src/rack/client.ts +26 -10
- package/src/rack/external.ts +1 -1
- package/src/rack/rack.spec.ts +37 -0
- package/src/rack/types.gen.ts +62 -0
- package/src/range/alias/types.gen.ts +30 -0
- package/src/range/kv/types.gen.ts +28 -0
- package/src/ranger/alias/client.ts +1 -1
- package/src/ranger/alias/external.ts +3 -10
- package/src/ranger/alias/payload.spec.ts +52 -0
- package/src/ranger/alias/payload.ts +11 -10
- package/src/ranger/alias/types.gen.ts +30 -0
- package/src/ranger/client.ts +34 -45
- package/src/ranger/external.ts +3 -3
- package/src/ranger/kv/client.ts +3 -3
- package/src/ranger/kv/external.ts +3 -7
- package/src/ranger/kv/payload.ts +1 -6
- package/src/ranger/kv/types.gen.ts +28 -0
- package/src/ranger/payload.ts +2 -46
- package/src/ranger/ranger.spec.ts +2 -4
- package/src/ranger/types.gen.ts +66 -0
- package/src/ranger/writer.ts +2 -1
- package/src/schematic/client.ts +11 -14
- package/src/schematic/external.ts +1 -1
- package/src/schematic/schematic.spec.ts +54 -2
- package/src/schematic/symbol/client.ts +2 -4
- package/src/schematic/symbol/external.ts +1 -1
- package/src/schematic/symbol/types.gen.ts +124 -0
- package/src/schematic/types.gen.ts +44 -0
- package/src/status/client.ts +4 -3
- package/src/status/payload.ts +5 -4
- package/src/status/status.spec.ts +106 -11
- package/src/table/client.ts +10 -19
- package/src/table/external.ts +1 -1
- package/src/table/table.spec.ts +38 -0
- package/src/table/types.gen.ts +42 -0
- package/src/task/client.ts +30 -28
- package/src/task/external.ts +1 -1
- package/src/task/payload.spec.ts +19 -19
- package/src/task/task.spec.ts +127 -9
- package/src/task/types.gen.ts +169 -0
- package/src/user/client.ts +2 -2
- package/src/user/external.ts +1 -1
- package/src/user/types.gen.ts +49 -0
- package/src/util/decodeJSONString.ts +1 -1
- package/src/util/retrieve.ts +2 -2
- package/src/view/client.ts +2 -7
- package/src/view/external.ts +1 -1
- package/src/view/types.gen.ts +44 -0
- package/src/workspace/client.ts +10 -14
- package/src/workspace/external.ts +1 -1
- package/src/workspace/types.gen.ts +45 -0
- package/src/workspace/workspace.spec.ts +37 -0
- package/tsconfig.json +1 -3
- package/vite.config.ts +9 -2
- package/dist/src/access/payload.d.ts.map +0 -1
- package/dist/src/access/policy/payload.d.ts +0 -156
- package/dist/src/access/policy/payload.d.ts.map +0 -1
- package/dist/src/access/role/payload.d.ts +0 -27
- package/dist/src/access/role/payload.d.ts.map +0 -1
- package/dist/src/arc/payload.d.ts +0 -167
- package/dist/src/arc/payload.d.ts.map +0 -1
- package/dist/src/device/payload.d.ts +0 -281
- package/dist/src/device/payload.d.ts.map +0 -1
- package/dist/src/framer/payload.d.ts +0 -7
- package/dist/src/framer/payload.d.ts.map +0 -1
- package/dist/src/group/payload.d.ts +0 -16
- package/dist/src/group/payload.d.ts.map +0 -1
- package/dist/src/lineplot/payload.d.ts +0 -28
- package/dist/src/lineplot/payload.d.ts.map +0 -1
- package/dist/src/log/payload.d.ts +0 -28
- package/dist/src/log/payload.d.ts.map +0 -1
- package/dist/src/rack/payload.d.ts +0 -243
- package/dist/src/rack/payload.d.ts.map +0 -1
- package/dist/src/schematic/payload.d.ts +0 -38
- package/dist/src/schematic/payload.d.ts.map +0 -1
- package/dist/src/schematic/symbol/payload.d.ts +0 -169
- package/dist/src/schematic/symbol/payload.d.ts.map +0 -1
- package/dist/src/table/payload.d.ts +0 -33
- package/dist/src/table/payload.d.ts.map +0 -1
- package/dist/src/task/payload.d.ts +0 -123
- package/dist/src/task/payload.d.ts.map +0 -1
- package/dist/src/user/payload.d.ts +0 -22
- package/dist/src/user/payload.d.ts.map +0 -1
- package/dist/src/view/payload.d.ts +0 -20
- package/dist/src/view/payload.d.ts.map +0 -1
- package/dist/src/workspace/payload.d.ts +0 -33
- package/dist/src/workspace/payload.d.ts.map +0 -1
- package/src/access/policy/payload.ts +0 -37
- package/src/arc/payload.ts +0 -73
- package/src/device/payload.ts +0 -83
- package/src/group/payload.ts +0 -24
- package/src/lineplot/payload.ts +0 -29
- package/src/log/payload.ts +0 -29
- package/src/rack/payload.ts +0 -30
- package/src/schematic/payload.ts +0 -34
- package/src/schematic/symbol/payload.ts +0 -70
- package/src/table/payload.ts +0 -33
- package/src/task/payload.ts +0 -127
- package/src/user/payload.ts +0 -29
- package/src/view/payload.ts +0 -25
- package/src/workspace/payload.ts +0 -33
package/src/task/client.ts
CHANGED
|
@@ -21,7 +21,7 @@ import { z } from "zod";
|
|
|
21
21
|
|
|
22
22
|
import { type framer } from "@/framer";
|
|
23
23
|
import { ontology } from "@/ontology";
|
|
24
|
-
import { keyZ as rackKeyZ } from "@/rack/
|
|
24
|
+
import { type Key as RackKey, keyZ as rackKeyZ } from "@/rack/types.gen";
|
|
25
25
|
import { type ranger } from "@/ranger";
|
|
26
26
|
import { status } from "@/status";
|
|
27
27
|
import {
|
|
@@ -29,20 +29,28 @@ import {
|
|
|
29
29
|
keyZ,
|
|
30
30
|
type New,
|
|
31
31
|
newZ,
|
|
32
|
+
ontologyID,
|
|
32
33
|
type Payload,
|
|
33
|
-
type Schemas,
|
|
34
|
+
type PayloadSchemas as Schemas,
|
|
35
|
+
payloadZ,
|
|
34
36
|
type Status,
|
|
35
37
|
statusZ,
|
|
36
|
-
|
|
37
|
-
} from "@/task/payload";
|
|
38
|
+
} from "@/task/types.gen";
|
|
38
39
|
import { checkForMultipleOrNoResults } from "@/util/retrieve";
|
|
39
40
|
|
|
41
|
+
export type { PayloadSchemas as Schemas } from "@/task/types.gen";
|
|
42
|
+
|
|
40
43
|
export const COMMAND_CHANNEL_NAME = "sy_task_cmd";
|
|
41
44
|
export const SET_CHANNEL_NAME = "sy_task_set";
|
|
42
45
|
export const DELETE_CHANNEL_NAME = "sy_task_delete";
|
|
43
46
|
|
|
44
47
|
const NOT_CREATED_ERROR = new Error("Task not created");
|
|
45
48
|
|
|
49
|
+
export const rackKey = (key: Key): RackKey => Number(BigInt(key) >> 32n);
|
|
50
|
+
|
|
51
|
+
export const newKey = (rackKey: RackKey, taskKey: number = 0): Key =>
|
|
52
|
+
((BigInt(rackKey) << 32n) + BigInt(taskKey)).toString();
|
|
53
|
+
|
|
46
54
|
const retrieveSnapshottedTo = async (taskKey: Key, ontologyClient: ontology.Client) => {
|
|
47
55
|
const parents = await ontologyClient.retrieveParents(ontologyID(taskKey));
|
|
48
56
|
if (parents.length === 0) return null;
|
|
@@ -119,10 +127,10 @@ export class Task<S extends Schemas = Schemas> {
|
|
|
119
127
|
this.schemas =
|
|
120
128
|
schemas ??
|
|
121
129
|
({
|
|
122
|
-
type: z.string()
|
|
123
|
-
config: z.unknown()
|
|
124
|
-
statusData: z.unknown()
|
|
125
|
-
} as S);
|
|
130
|
+
type: z.string(),
|
|
131
|
+
config: z.unknown(),
|
|
132
|
+
statusData: z.unknown(),
|
|
133
|
+
} as unknown as S);
|
|
126
134
|
this.internal = internal;
|
|
127
135
|
this.snapshot = snapshot;
|
|
128
136
|
this.status = status;
|
|
@@ -212,10 +220,7 @@ const singleRetrieveArgsZ = z.union([
|
|
|
212
220
|
.object({ name: z.string(), includeStatus: z.boolean().optional() })
|
|
213
221
|
.transform(({ name, includeStatus }) => ({ names: [name], includeStatus })),
|
|
214
222
|
z
|
|
215
|
-
.object({
|
|
216
|
-
type: z.string(),
|
|
217
|
-
rack: rackKeyZ.optional(),
|
|
218
|
-
})
|
|
223
|
+
.object({ type: z.string(), rack: rackKeyZ.optional() })
|
|
219
224
|
.transform(({ type, rack }) => ({ types: [type], rack })),
|
|
220
225
|
]);
|
|
221
226
|
export type RetrieveSingleParams = z.input<typeof singleRetrieveArgsZ>;
|
|
@@ -231,19 +236,19 @@ interface RetrieveSchemas<S extends Schemas = Schemas> {
|
|
|
231
236
|
}
|
|
232
237
|
|
|
233
238
|
const retrieveResZ = <S extends Schemas = Schemas>(schemas?: S) =>
|
|
234
|
-
z.object({ tasks: array.
|
|
239
|
+
z.object({ tasks: array.nullishToEmpty(payloadZ(schemas)) });
|
|
235
240
|
|
|
236
241
|
export interface RetrieveRequest extends z.infer<typeof retrieveReqZ> {}
|
|
237
242
|
|
|
238
243
|
const createReqZ = <S extends Schemas = Schemas>(schemas?: S) =>
|
|
239
244
|
z.object({ tasks: newZ(schemas).array() });
|
|
240
245
|
const createResZ = <S extends Schemas = Schemas>(schemas?: S) =>
|
|
241
|
-
z.object({ tasks:
|
|
246
|
+
z.object({ tasks: payloadZ(schemas).array() });
|
|
242
247
|
const deleteReqZ = z.object({ keys: keyZ.array() });
|
|
243
248
|
const deleteResZ = z.object({});
|
|
244
249
|
const copyReqZ = z.object({ key: keyZ, name: z.string(), snapshot: z.boolean() });
|
|
245
250
|
const copyResZ = <S extends Schemas = Schemas>(schemas?: S) =>
|
|
246
|
-
z.object({ task:
|
|
251
|
+
z.object({ task: payloadZ(schemas) });
|
|
247
252
|
|
|
248
253
|
export class Client {
|
|
249
254
|
private readonly client: UnaryClient;
|
|
@@ -323,7 +328,7 @@ export class Client {
|
|
|
323
328
|
return isSingle ? sugared[0] : sugared;
|
|
324
329
|
}
|
|
325
330
|
|
|
326
|
-
async copy(key:
|
|
331
|
+
async copy(key: Key, name: string, snapshot: boolean): Promise<Task> {
|
|
327
332
|
const copyRes = copyResZ();
|
|
328
333
|
const response = await sendRequired(
|
|
329
334
|
this.client,
|
|
@@ -332,7 +337,7 @@ export class Client {
|
|
|
332
337
|
copyReqZ,
|
|
333
338
|
copyRes,
|
|
334
339
|
);
|
|
335
|
-
return this.sugar(response.task
|
|
340
|
+
return this.sugar(response.task);
|
|
336
341
|
}
|
|
337
342
|
|
|
338
343
|
async list(rack?: number): Promise<Task[]> {
|
|
@@ -388,15 +393,15 @@ export class Client {
|
|
|
388
393
|
return await executeCommand({ ...params, frameClient: this.frameClient });
|
|
389
394
|
}
|
|
390
395
|
|
|
391
|
-
async executeCommandSync<StatusData extends z.ZodType = z.
|
|
396
|
+
async executeCommandSync<StatusData extends z.ZodType = z.ZodNever>(
|
|
392
397
|
params: ExecuteCommandsSyncParams<StatusData>,
|
|
393
398
|
): Promise<Status<StatusData>[]>;
|
|
394
399
|
|
|
395
|
-
async executeCommandSync<StatusData extends z.ZodType = z.
|
|
400
|
+
async executeCommandSync<StatusData extends z.ZodType = z.ZodNever>(
|
|
396
401
|
params: ExecuteCommandSyncParams<StatusData>,
|
|
397
402
|
): Promise<Status<StatusData>>;
|
|
398
403
|
|
|
399
|
-
async executeCommandSync<StatusData extends z.ZodType = z.
|
|
404
|
+
async executeCommandSync<StatusData extends z.ZodType = z.ZodNever>(
|
|
400
405
|
params:
|
|
401
406
|
| ExecuteCommandsSyncParams<StatusData>
|
|
402
407
|
| ExecuteCommandSyncParams<StatusData>,
|
|
@@ -426,9 +431,6 @@ export class Client {
|
|
|
426
431
|
}
|
|
427
432
|
}
|
|
428
433
|
|
|
429
|
-
export const ontologyID = ontology.createIDFactory<Key>("task");
|
|
430
|
-
export const TYPE_ONTOLOGY_ID = ontologyID("");
|
|
431
|
-
|
|
432
434
|
export const statusKey = (key: Key): string => ontology.idToString(ontologyID(key));
|
|
433
435
|
|
|
434
436
|
interface ExecuteCommandInternalParams {
|
|
@@ -469,14 +471,14 @@ const executeCommands = async ({
|
|
|
469
471
|
return cmds.map((c) => c.key);
|
|
470
472
|
};
|
|
471
473
|
|
|
472
|
-
interface ExecuteCommandSyncInternalParams<StatusData extends z.ZodType = z.
|
|
474
|
+
interface ExecuteCommandSyncInternalParams<StatusData extends z.ZodType = z.ZodNever>
|
|
473
475
|
extends
|
|
474
476
|
Omit<ExecuteCommandsSyncInternalParams<StatusData>, "commands">,
|
|
475
477
|
TaskExecuteCommandSyncParams {
|
|
476
478
|
task: Key;
|
|
477
479
|
}
|
|
478
480
|
|
|
479
|
-
const executeCommandSync = async <StatusData extends z.ZodType = z.
|
|
481
|
+
const executeCommandSync = async <StatusData extends z.ZodType = z.ZodNever>({
|
|
480
482
|
frameClient,
|
|
481
483
|
task,
|
|
482
484
|
type,
|
|
@@ -495,7 +497,7 @@ const executeCommandSync = async <StatusData extends z.ZodType = z.ZodType>({
|
|
|
495
497
|
})
|
|
496
498
|
)[0];
|
|
497
499
|
|
|
498
|
-
interface ExecuteCommandsSyncInternalParams<StatusData extends z.ZodType = z.
|
|
500
|
+
interface ExecuteCommandsSyncInternalParams<StatusData extends z.ZodType = z.ZodNever> {
|
|
499
501
|
frameClient: framer.Client | null;
|
|
500
502
|
commands: NewCommand[];
|
|
501
503
|
timeout?: CrudeTimeSpan;
|
|
@@ -503,7 +505,7 @@ interface ExecuteCommandsSyncInternalParams<StatusData extends z.ZodType = z.Zod
|
|
|
503
505
|
name: string | string[] | (() => Promise<string | string[]>);
|
|
504
506
|
}
|
|
505
507
|
|
|
506
|
-
const executeCommandsSync = async <StatusData extends z.ZodType = z.
|
|
508
|
+
const executeCommandsSync = async <StatusData extends z.ZodType = z.ZodNever>({
|
|
507
509
|
frameClient,
|
|
508
510
|
commands,
|
|
509
511
|
timeout = TimeSpan.seconds(10),
|
|
@@ -562,7 +564,7 @@ const formatTimeoutError = async (
|
|
|
562
564
|
} catch (e) {
|
|
563
565
|
console.error("Failed to retrieve task name for timeout error:", e);
|
|
564
566
|
return new Error(
|
|
565
|
-
`${formattedType} command to task with key ${strings.naturalLanguageJoin(key)} timed out after ${formattedTimeout}`,
|
|
567
|
+
`${formattedType} command to task with key ${strings.naturalLanguageJoin(array.toArray(key).map((k) => k.toString()))} timed out after ${formattedTimeout}`,
|
|
566
568
|
);
|
|
567
569
|
}
|
|
568
570
|
};
|
package/src/task/external.ts
CHANGED
package/src/task/payload.spec.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
import { describe, expect, it } from "vitest";
|
|
11
11
|
|
|
12
|
-
import {
|
|
12
|
+
import { task } from "@/task";
|
|
13
13
|
|
|
14
14
|
describe("newKey", () => {
|
|
15
15
|
describe("basic key generation", () => {
|
|
@@ -24,7 +24,7 @@ describe("newKey", () => {
|
|
|
24
24
|
];
|
|
25
25
|
cases.forEach(({ rackKey: r, taskKey: t, expected }) => {
|
|
26
26
|
it(`should combine rackKey=${r} and taskKey=${t}`, () => {
|
|
27
|
-
expect(newKey(r, t)).toBe(expected);
|
|
27
|
+
expect(task.newKey(r, t)).toBe(expected);
|
|
28
28
|
});
|
|
29
29
|
});
|
|
30
30
|
});
|
|
@@ -34,7 +34,7 @@ describe("newKey", () => {
|
|
|
34
34
|
const rackKeys = [0, 1, 42, 1000];
|
|
35
35
|
rackKeys.forEach((r) => {
|
|
36
36
|
it(`should default taskKey to 0 for rackKey=${r}`, () => {
|
|
37
|
-
expect(newKey(r)).toBe(newKey(r, 0));
|
|
37
|
+
expect(task.newKey(r)).toBe(task.newKey(r, 0));
|
|
38
38
|
});
|
|
39
39
|
});
|
|
40
40
|
});
|
|
@@ -49,10 +49,10 @@ describe("newKey", () => {
|
|
|
49
49
|
{ rack: 100, task: 50000 },
|
|
50
50
|
{ rack: 2147483647, task: 2147483647 }, // max 32-bit signed integers
|
|
51
51
|
];
|
|
52
|
-
cases.forEach(({ rack, task }) => {
|
|
53
|
-
it(`should extract rack=${rack} from key generated with task=${
|
|
54
|
-
const key = newKey(rack,
|
|
55
|
-
expect(rackKey(key)).toBe(rack);
|
|
52
|
+
cases.forEach(({ rack, task: tsk }) => {
|
|
53
|
+
it(`should extract rack=${rack} from key generated with task=${tsk}`, () => {
|
|
54
|
+
const key = task.newKey(rack, tsk);
|
|
55
|
+
expect(task.rackKey(key)).toBe(rack);
|
|
56
56
|
});
|
|
57
57
|
});
|
|
58
58
|
});
|
|
@@ -61,22 +61,22 @@ describe("newKey", () => {
|
|
|
61
61
|
// Verifies behavior at boundary values to ensure no overflow or precision issues.
|
|
62
62
|
it("should handle max 32-bit unsigned rack key", () => {
|
|
63
63
|
const maxUint32 = 0xffffffff;
|
|
64
|
-
const key = newKey(maxUint32, 0);
|
|
65
|
-
expect(rackKey(key)).toBe(maxUint32);
|
|
64
|
+
const key = task.newKey(maxUint32, 0);
|
|
65
|
+
expect(task.rackKey(key)).toBe(maxUint32);
|
|
66
66
|
});
|
|
67
67
|
|
|
68
68
|
it("should handle max 32-bit unsigned task key", () => {
|
|
69
69
|
const maxUint32 = 0xffffffff;
|
|
70
|
-
const key = newKey(1, maxUint32);
|
|
70
|
+
const key = task.newKey(1, maxUint32);
|
|
71
71
|
expect(key).toBe(((1n << 32n) + BigInt(maxUint32)).toString());
|
|
72
72
|
});
|
|
73
73
|
|
|
74
74
|
it("should handle both max 32-bit values", () => {
|
|
75
75
|
const maxUint32 = 0xffffffff;
|
|
76
|
-
const key = newKey(maxUint32, maxUint32);
|
|
76
|
+
const key = task.newKey(maxUint32, maxUint32);
|
|
77
77
|
const expected = ((BigInt(maxUint32) << 32n) + BigInt(maxUint32)).toString();
|
|
78
78
|
expect(key).toBe(expected);
|
|
79
|
-
expect(rackKey(key)).toBe(maxUint32);
|
|
79
|
+
expect(task.rackKey(key)).toBe(maxUint32);
|
|
80
80
|
});
|
|
81
81
|
});
|
|
82
82
|
});
|
|
@@ -86,28 +86,28 @@ describe("rackKey", () => {
|
|
|
86
86
|
// Keys can be string, bigint, or number per keyZ schema.
|
|
87
87
|
describe("key format handling", () => {
|
|
88
88
|
const rack = 42;
|
|
89
|
-
const
|
|
90
|
-
const expectedKey = newKey(rack,
|
|
89
|
+
const tsk = 100;
|
|
90
|
+
const expectedKey = task.newKey(rack, tsk);
|
|
91
91
|
|
|
92
92
|
it("should extract rack from string key", () => {
|
|
93
|
-
expect(rackKey(expectedKey)).toBe(rack);
|
|
93
|
+
expect(task.rackKey(expectedKey)).toBe(rack);
|
|
94
94
|
});
|
|
95
95
|
|
|
96
96
|
it("should extract rack from numeric string", () => {
|
|
97
97
|
const numericKey = ((42n << 32n) + 100n).toString();
|
|
98
|
-
expect(rackKey(numericKey)).toBe(42);
|
|
98
|
+
expect(task.rackKey(numericKey)).toBe(42);
|
|
99
99
|
});
|
|
100
100
|
});
|
|
101
101
|
|
|
102
102
|
describe("zero handling", () => {
|
|
103
103
|
// Verifies correct behavior when rack or task portions are zero.
|
|
104
104
|
it("should return 0 for key with zero rack", () => {
|
|
105
|
-
expect(rackKey("100")).toBe(0);
|
|
105
|
+
expect(task.rackKey("100")).toBe(0);
|
|
106
106
|
});
|
|
107
107
|
|
|
108
108
|
it("should return rack when task portion is zero", () => {
|
|
109
|
-
const key = newKey(5, 0);
|
|
110
|
-
expect(rackKey(key)).toBe(5);
|
|
109
|
+
const key = task.newKey(5, 0);
|
|
110
|
+
expect(task.rackKey(key)).toBe(5);
|
|
111
111
|
});
|
|
112
112
|
});
|
|
113
113
|
});
|
package/src/task/task.spec.ts
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
import { TimeStamp } from "@synnaxlabs/x";
|
|
11
11
|
import { beforeAll, describe, expect, it } from "vitest";
|
|
12
|
+
import { z } from "zod";
|
|
12
13
|
|
|
13
14
|
import { ontology } from "@/ontology";
|
|
14
15
|
import { task } from "@/task";
|
|
@@ -46,17 +47,20 @@ describe("Task", async () => {
|
|
|
46
47
|
expect(m.config).toStrictEqual(config);
|
|
47
48
|
});
|
|
48
49
|
it("should create a task with a custom status", async () => {
|
|
50
|
+
const customStatus = {
|
|
51
|
+
key: "",
|
|
52
|
+
name: "",
|
|
53
|
+
variant: "success" as const,
|
|
54
|
+
message: "Custom task status",
|
|
55
|
+
description: "Task is running",
|
|
56
|
+
time: TimeStamp.now(),
|
|
57
|
+
details: { running: true, data: { customData: true } },
|
|
58
|
+
};
|
|
49
59
|
const m = await testRack.createTask({
|
|
50
60
|
name: "task-with-status",
|
|
51
61
|
config: { test: true },
|
|
52
62
|
type: "ni",
|
|
53
|
-
status:
|
|
54
|
-
variant: "success",
|
|
55
|
-
message: "Custom task status",
|
|
56
|
-
description: "Task is running",
|
|
57
|
-
time: TimeStamp.now(),
|
|
58
|
-
details: { running: true, data: { customData: true } },
|
|
59
|
-
},
|
|
63
|
+
status: customStatus,
|
|
60
64
|
});
|
|
61
65
|
expect(m.key).not.toHaveLength(0);
|
|
62
66
|
const retrieved = await client.tasks.retrieve({
|
|
@@ -78,8 +82,10 @@ describe("Task", async () => {
|
|
|
78
82
|
config: { a: "dog" },
|
|
79
83
|
type: "ni",
|
|
80
84
|
});
|
|
85
|
+
// Exclude status, internal, snapshot when updating - these have different input/output types
|
|
86
|
+
const { status: _, internal: __, snapshot: ___, ...taskFields } = m;
|
|
81
87
|
const updated = await client.tasks.create({
|
|
82
|
-
...
|
|
88
|
+
...taskFields,
|
|
83
89
|
name: "updated",
|
|
84
90
|
});
|
|
85
91
|
expect(updated.name).toBe("updated");
|
|
@@ -119,7 +125,7 @@ describe("Task", async () => {
|
|
|
119
125
|
key: ontology.idToString(task.ontologyID(t.key)),
|
|
120
126
|
name: "test",
|
|
121
127
|
variant: "success",
|
|
122
|
-
details: { task: t.key, running: false, data:
|
|
128
|
+
details: { task: t.key, running: false, data: undefined },
|
|
123
129
|
message: "test",
|
|
124
130
|
time: TimeStamp.now(),
|
|
125
131
|
};
|
|
@@ -522,4 +528,116 @@ describe("Task", async () => {
|
|
|
522
528
|
);
|
|
523
529
|
});
|
|
524
530
|
});
|
|
531
|
+
|
|
532
|
+
describe("with schemas", () => {
|
|
533
|
+
const schemas = {
|
|
534
|
+
type: z.literal("sensor_task"),
|
|
535
|
+
config: z.object({
|
|
536
|
+
sampleRate: z.number(),
|
|
537
|
+
channels: z.array(z.string()),
|
|
538
|
+
enabled: z.boolean(),
|
|
539
|
+
}),
|
|
540
|
+
statusData: z.object({
|
|
541
|
+
samplesCollected: z.number().optional(),
|
|
542
|
+
}),
|
|
543
|
+
};
|
|
544
|
+
|
|
545
|
+
it("should create and retrieve a task with typed config", async () => {
|
|
546
|
+
const config = {
|
|
547
|
+
sampleRate: 1000,
|
|
548
|
+
channels: ["ch1", "ch2"],
|
|
549
|
+
enabled: true,
|
|
550
|
+
};
|
|
551
|
+
const t = await testRack.createTask(
|
|
552
|
+
{
|
|
553
|
+
name: "typed-config-task",
|
|
554
|
+
type: "sensor_task",
|
|
555
|
+
config,
|
|
556
|
+
},
|
|
557
|
+
schemas,
|
|
558
|
+
);
|
|
559
|
+
expect(t.config.sampleRate).toBe(1000);
|
|
560
|
+
expect(t.config.channels).toEqual(["ch1", "ch2"]);
|
|
561
|
+
expect(t.config.enabled).toBe(true);
|
|
562
|
+
|
|
563
|
+
const retrieved = await client.tasks.retrieve({
|
|
564
|
+
key: t.key,
|
|
565
|
+
schemas,
|
|
566
|
+
});
|
|
567
|
+
expect(retrieved.config.sampleRate).toBe(1000);
|
|
568
|
+
expect(retrieved.config.channels).toEqual(["ch1", "ch2"]);
|
|
569
|
+
expect(retrieved.type).toBe("sensor_task");
|
|
570
|
+
});
|
|
571
|
+
|
|
572
|
+
it("should retrieve multiple tasks with schemas", async () => {
|
|
573
|
+
const t1 = await testRack.createTask(
|
|
574
|
+
{
|
|
575
|
+
name: "multi-schema-1",
|
|
576
|
+
type: "sensor_task",
|
|
577
|
+
config: { sampleRate: 100, channels: ["a"], enabled: true },
|
|
578
|
+
},
|
|
579
|
+
schemas,
|
|
580
|
+
);
|
|
581
|
+
const t2 = await testRack.createTask(
|
|
582
|
+
{
|
|
583
|
+
name: "multi-schema-2",
|
|
584
|
+
type: "sensor_task",
|
|
585
|
+
config: { sampleRate: 200, channels: ["b", "c"], enabled: false },
|
|
586
|
+
},
|
|
587
|
+
schemas,
|
|
588
|
+
);
|
|
589
|
+
|
|
590
|
+
const retrieved = await client.tasks.retrieve({
|
|
591
|
+
keys: [t1.key, t2.key],
|
|
592
|
+
schemas,
|
|
593
|
+
});
|
|
594
|
+
expect(retrieved).toHaveLength(2);
|
|
595
|
+
expect(retrieved[0].config.sampleRate).toBe(100);
|
|
596
|
+
expect(retrieved[1].config.sampleRate).toBe(200);
|
|
597
|
+
});
|
|
598
|
+
|
|
599
|
+
it("should retrieve task by name with schemas", async () => {
|
|
600
|
+
const uniqueName = `schema-name-test-${Date.now()}`;
|
|
601
|
+
await testRack.createTask(
|
|
602
|
+
{
|
|
603
|
+
name: uniqueName,
|
|
604
|
+
type: "sensor_task",
|
|
605
|
+
config: { sampleRate: 500, channels: ["x"], enabled: true },
|
|
606
|
+
},
|
|
607
|
+
schemas,
|
|
608
|
+
);
|
|
609
|
+
|
|
610
|
+
const retrieved = await client.tasks.retrieve({
|
|
611
|
+
name: uniqueName,
|
|
612
|
+
schemas,
|
|
613
|
+
});
|
|
614
|
+
expect(retrieved.name).toBe(uniqueName);
|
|
615
|
+
expect(retrieved.config.sampleRate).toBe(500);
|
|
616
|
+
});
|
|
617
|
+
|
|
618
|
+
it("should retrieve task by type with schemas", async () => {
|
|
619
|
+
const customSchemas = {
|
|
620
|
+
type: z.literal("unique_type_test"),
|
|
621
|
+
config: z.object({ value: z.number() }),
|
|
622
|
+
statusData: z.unknown(),
|
|
623
|
+
};
|
|
624
|
+
|
|
625
|
+
await testRack.createTask(
|
|
626
|
+
{
|
|
627
|
+
name: "type-filter-test",
|
|
628
|
+
type: "unique_type_test",
|
|
629
|
+
config: { value: 42 },
|
|
630
|
+
},
|
|
631
|
+
customSchemas,
|
|
632
|
+
);
|
|
633
|
+
|
|
634
|
+
const retrieved = await client.tasks.retrieve({
|
|
635
|
+
type: "unique_type_test",
|
|
636
|
+
rack: testRack.key,
|
|
637
|
+
schemas: customSchemas,
|
|
638
|
+
});
|
|
639
|
+
expect(retrieved.type).toBe("unique_type_test");
|
|
640
|
+
expect(retrieved.config.value).toBe(42);
|
|
641
|
+
});
|
|
642
|
+
});
|
|
525
643
|
});
|
|
@@ -0,0 +1,169 @@
|
|
|
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
|
+
// Code generated by Oracle. DO NOT EDIT.
|
|
11
|
+
|
|
12
|
+
import { caseconv, type optional, record, status, zod } from "@synnaxlabs/x";
|
|
13
|
+
import { z } from "zod";
|
|
14
|
+
|
|
15
|
+
import { ontology } from "@/ontology";
|
|
16
|
+
|
|
17
|
+
export const keyZ = z
|
|
18
|
+
.string()
|
|
19
|
+
.or(z.number().transform(String).or(z.bigint().transform(String)));
|
|
20
|
+
export type Key = z.infer<typeof keyZ>;
|
|
21
|
+
|
|
22
|
+
export type StatusDetailsZodObject<Data extends z.ZodType = z.ZodNever> = z.ZodObject<{
|
|
23
|
+
task: typeof keyZ;
|
|
24
|
+
running: z.ZodBoolean;
|
|
25
|
+
cmd: z.ZodOptional<z.ZodString>;
|
|
26
|
+
data: [Data] extends [z.ZodNever] ? z.ZodOptional<z.ZodUnknown> : Data;
|
|
27
|
+
}>;
|
|
28
|
+
|
|
29
|
+
export interface StatusDetailsZFunction {
|
|
30
|
+
<Data extends z.ZodType>(data: Data): StatusDetailsZodObject<Data>;
|
|
31
|
+
<Data extends z.ZodType = z.ZodNever>(data?: Data): StatusDetailsZodObject<Data>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export const statusDetailsZ: StatusDetailsZFunction = <Data extends z.ZodType>(
|
|
35
|
+
data?: Data,
|
|
36
|
+
) =>
|
|
37
|
+
z.object({
|
|
38
|
+
task: keyZ,
|
|
39
|
+
running: z.boolean(),
|
|
40
|
+
cmd: z.string().optional(),
|
|
41
|
+
data: data ?? z.unknown().optional(),
|
|
42
|
+
});
|
|
43
|
+
export type StatusDetails<Data extends z.ZodType = z.ZodNever> = {
|
|
44
|
+
task: Key;
|
|
45
|
+
running: boolean;
|
|
46
|
+
cmd?: string;
|
|
47
|
+
} & ([Data] extends [z.ZodNever] ? {} : { data: z.infer<Data> });
|
|
48
|
+
|
|
49
|
+
export type NewStatusDetailsZodObject<Data extends z.ZodType = z.ZodNever> =
|
|
50
|
+
z.ZodObject<{
|
|
51
|
+
task: z.ZodOptional<typeof keyZ>;
|
|
52
|
+
running: z.ZodBoolean;
|
|
53
|
+
cmd: z.ZodOptional<z.ZodString>;
|
|
54
|
+
data: [Data] extends [z.ZodNever] ? z.ZodOptional<z.ZodUnknown> : Data;
|
|
55
|
+
}>;
|
|
56
|
+
|
|
57
|
+
export interface NewStatusDetailsZFunction {
|
|
58
|
+
<Data extends z.ZodType>(data: Data): NewStatusDetailsZodObject<Data>;
|
|
59
|
+
<Data extends z.ZodType = z.ZodNever>(data?: Data): NewStatusDetailsZodObject<Data>;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export const newStatusDetailsZ: NewStatusDetailsZFunction = <Data extends z.ZodType>(
|
|
63
|
+
data?: Data,
|
|
64
|
+
) =>
|
|
65
|
+
z.object({
|
|
66
|
+
task: keyZ.optional(),
|
|
67
|
+
running: z.boolean(),
|
|
68
|
+
cmd: z.string().optional(),
|
|
69
|
+
data: data ?? z.unknown().optional(),
|
|
70
|
+
});
|
|
71
|
+
export type NewStatusDetails<Data extends z.ZodType = z.ZodNever> = {
|
|
72
|
+
task?: Key;
|
|
73
|
+
running: boolean;
|
|
74
|
+
cmd?: string;
|
|
75
|
+
} & ([Data] extends [z.ZodNever] ? {} : { data: z.infer<Data> });
|
|
76
|
+
|
|
77
|
+
/** Command is a command to execute on a task in the Driver system. */
|
|
78
|
+
export const commandZ = z.object({
|
|
79
|
+
/** task is the key of the target task. */
|
|
80
|
+
task: keyZ,
|
|
81
|
+
/** type is the command type (e.g., 'start', 'stop', 'configure'). */
|
|
82
|
+
type: z.string(),
|
|
83
|
+
/** key is a unique identifier for this command instance. */
|
|
84
|
+
key: z.string(),
|
|
85
|
+
/** args contains optional arguments for the command. */
|
|
86
|
+
args: caseconv.preserveCase(zod.nullToUndefined(record.unknownZ())),
|
|
87
|
+
});
|
|
88
|
+
export interface Command extends z.infer<typeof commandZ> {}
|
|
89
|
+
|
|
90
|
+
export const statusZ = <Data extends z.ZodType = z.ZodNever>(data?: Data) =>
|
|
91
|
+
status.statusZ({ details: statusDetailsZ(data) });
|
|
92
|
+
export type Status<Data extends z.ZodType = z.ZodNever> = z.infer<
|
|
93
|
+
ReturnType<typeof statusZ<Data>>
|
|
94
|
+
>;
|
|
95
|
+
|
|
96
|
+
export const newStatusZ = <Data extends z.ZodType = z.ZodNever>(data?: Data) =>
|
|
97
|
+
status.newZ({ details: newStatusDetailsZ(data) });
|
|
98
|
+
export type NewStatus<Data extends z.ZodType = z.ZodNever> = z.infer<
|
|
99
|
+
ReturnType<typeof newStatusZ<Data>>
|
|
100
|
+
>;
|
|
101
|
+
|
|
102
|
+
export interface PayloadSchemas<
|
|
103
|
+
Type extends z.ZodType<string> = z.ZodType<string>,
|
|
104
|
+
Config extends z.ZodType<record.Unknown> = z.ZodType<record.Unknown>,
|
|
105
|
+
StatusData extends z.ZodType = z.ZodType,
|
|
106
|
+
> {
|
|
107
|
+
type: Type;
|
|
108
|
+
config: Config;
|
|
109
|
+
statusData: StatusData;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export const payloadZ = <
|
|
113
|
+
Type extends z.ZodType<string> = z.ZodString,
|
|
114
|
+
Config extends z.ZodType<record.Unknown> = z.ZodType<record.Unknown>,
|
|
115
|
+
StatusData extends z.ZodType = z.ZodNever,
|
|
116
|
+
>({
|
|
117
|
+
type,
|
|
118
|
+
config,
|
|
119
|
+
statusData,
|
|
120
|
+
}: Partial<PayloadSchemas<Type, Config, StatusData>> = {}) =>
|
|
121
|
+
z.object({
|
|
122
|
+
key: keyZ,
|
|
123
|
+
name: z.string(),
|
|
124
|
+
type: type ?? z.string(),
|
|
125
|
+
config: config ?? record.nullishToEmpty(),
|
|
126
|
+
internal: z.boolean().optional(),
|
|
127
|
+
snapshot: z.boolean().optional(),
|
|
128
|
+
status: status.statusZ({ details: statusDetailsZ(statusData) }).optional(),
|
|
129
|
+
});
|
|
130
|
+
export interface Payload<S extends PayloadSchemas = PayloadSchemas> {
|
|
131
|
+
key: Key;
|
|
132
|
+
name: string;
|
|
133
|
+
type: z.infer<S["type"]>;
|
|
134
|
+
config: z.infer<S["config"]>;
|
|
135
|
+
internal?: boolean;
|
|
136
|
+
snapshot?: boolean;
|
|
137
|
+
status?: Status<S["statusData"]>;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export interface NewSchemas<
|
|
141
|
+
Type extends z.ZodType<string> = z.ZodType<string>,
|
|
142
|
+
Config extends z.ZodType<record.Unknown> = z.ZodType<record.Unknown>,
|
|
143
|
+
StatusData extends z.ZodType = z.ZodType,
|
|
144
|
+
> {
|
|
145
|
+
type: Type;
|
|
146
|
+
config: Config;
|
|
147
|
+
statusData: StatusData;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export const newZ = <
|
|
151
|
+
Type extends z.ZodType<string> = z.ZodString,
|
|
152
|
+
Config extends z.ZodType<record.Unknown> = z.ZodType<record.Unknown>,
|
|
153
|
+
StatusData extends z.ZodType = z.ZodNever,
|
|
154
|
+
>({ type, config, statusData }: Partial<NewSchemas<Type, Config, StatusData>> = {}) =>
|
|
155
|
+
payloadZ({ type, config, statusData })
|
|
156
|
+
.omit({ internal: true, snapshot: true, status: true })
|
|
157
|
+
.partial({ key: true })
|
|
158
|
+
.extend({
|
|
159
|
+
status: status.newZ({ details: newStatusDetailsZ(statusData) }).optional(),
|
|
160
|
+
});
|
|
161
|
+
export type New<S extends NewSchemas = NewSchemas> = optional.Optional<
|
|
162
|
+
Omit<Payload<S>, "internal" | "snapshot" | "status">,
|
|
163
|
+
"key"
|
|
164
|
+
> & {
|
|
165
|
+
status?: NewStatus<S["statusData"]>;
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
export const ontologyID = ontology.createIDFactory<Key>("task");
|
|
169
|
+
export const TYPE_ONTOLOGY_ID = ontologyID("");
|
package/src/user/client.ts
CHANGED
|
@@ -13,7 +13,7 @@ import { z } from "zod";
|
|
|
13
13
|
|
|
14
14
|
import { MultipleFoundError, NotFoundError } from "@/errors";
|
|
15
15
|
import { ontology } from "@/ontology";
|
|
16
|
-
import { type Key, keyZ, type New, newZ, type User, userZ } from "@/user/
|
|
16
|
+
import { type Key, keyZ, type New, newZ, type User, userZ } from "@/user/types.gen";
|
|
17
17
|
|
|
18
18
|
const retrieveRequestZ = z.object({
|
|
19
19
|
keys: keyZ.array().optional(),
|
|
@@ -53,7 +53,7 @@ export type RetrieveArgs = z.input<typeof retrieveArgsZ>;
|
|
|
53
53
|
|
|
54
54
|
export interface RetrieveRequest extends z.infer<typeof retrieveRequestZ> {}
|
|
55
55
|
|
|
56
|
-
const retrieveResZ = z.object({ users: array.
|
|
56
|
+
const retrieveResZ = z.object({ users: array.nullishToEmpty(userZ) });
|
|
57
57
|
|
|
58
58
|
const createReqZ = z.object({ users: newZ.array() });
|
|
59
59
|
const createResZ = z.object({ users: userZ.array() });
|
package/src/user/external.ts
CHANGED