@synnaxlabs/client 0.56.2 → 0.57.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/dist/client-B08VDLSA.js +14463 -0
- package/dist/client-B08VDLSA.js.map +1 -0
- package/dist/client.js +1128 -14876
- package/dist/client.js.map +1 -0
- package/dist/src/access/client.d.ts +10 -1
- package/dist/src/access/client.d.ts.map +1 -1
- package/dist/src/access/enforce.d.ts.map +1 -1
- package/dist/src/access/external.d.ts +1 -0
- package/dist/src/access/external.d.ts.map +1 -1
- package/dist/src/access/granted.d.ts +39 -0
- package/dist/src/access/granted.d.ts.map +1 -0
- package/dist/src/access/policy/client.d.ts +136 -147
- package/dist/src/access/policy/client.d.ts.map +1 -1
- package/dist/src/access/policy/types.gen.d.ts +15 -68
- package/dist/src/access/policy/types.gen.d.ts.map +1 -1
- package/dist/src/access/role/client.d.ts +77 -58
- package/dist/src/access/role/client.d.ts.map +1 -1
- package/dist/src/access/role/types.gen.d.ts +8 -14
- package/dist/src/access/role/types.gen.d.ts.map +1 -1
- package/dist/src/actions/actions.d.ts +5 -6
- package/dist/src/actions/actions.d.ts.map +1 -1
- package/dist/src/actions/controller.d.ts +194 -0
- package/dist/src/actions/controller.d.ts.map +1 -0
- package/dist/src/actions/external.d.ts +1 -0
- package/dist/src/actions/external.d.ts.map +1 -1
- package/dist/src/arc/actions.d.ts +575 -0
- package/dist/src/arc/actions.d.ts.map +1 -0
- package/dist/src/arc/actions.gen.d.ts +1439 -0
- package/dist/src/arc/actions.gen.d.ts.map +1 -0
- package/dist/src/arc/client.d.ts +97 -13
- package/dist/src/arc/client.d.ts.map +1 -1
- package/dist/src/arc/compiler/types.gen.d.ts +3 -3
- package/dist/src/arc/compiler/types.gen.d.ts.map +1 -1
- package/dist/src/arc/external.d.ts +2 -0
- package/dist/src/arc/external.d.ts.map +1 -1
- package/dist/src/arc/graph/types.gen.d.ts +45 -597
- package/dist/src/arc/graph/types.gen.d.ts.map +1 -1
- package/dist/src/arc/ir/index.d.ts +1 -1
- package/dist/src/arc/ir/index.d.ts.map +1 -1
- package/dist/src/arc/ir/ir.d.ts +2 -0
- package/dist/src/arc/ir/ir.d.ts.map +1 -0
- package/dist/src/arc/ir/types.gen.d.ts +58 -2807
- package/dist/src/arc/ir/types.gen.d.ts.map +1 -1
- package/dist/src/arc/module/types.gen.d.ts +18 -1090
- package/dist/src/arc/module/types.gen.d.ts.map +1 -1
- package/dist/src/arc/program/types.gen.d.ts +18 -1090
- package/dist/src/arc/program/types.gen.d.ts.map +1 -1
- package/dist/src/arc/text/types.gen.d.ts +54 -1
- package/dist/src/arc/text/types.gen.d.ts.map +1 -1
- package/dist/src/arc/types/types.gen.d.ts +35 -153
- package/dist/src/arc/types/types.gen.d.ts.map +1 -1
- package/dist/src/arc/types.gen.d.ts +98 -2278
- package/dist/src/arc/types.gen.d.ts.map +1 -1
- package/dist/src/auth/auth.d.ts +14 -2
- package/dist/src/auth/auth.d.ts.map +1 -1
- package/dist/src/channel/client.d.ts +113 -75
- package/dist/src/channel/client.d.ts.map +1 -1
- package/dist/src/channel/external.d.ts +0 -1
- package/dist/src/channel/external.d.ts.map +1 -1
- package/dist/src/channel/payload.d.ts +65 -56
- package/dist/src/channel/payload.d.ts.map +1 -1
- package/dist/src/channel/types.gen.d.ts +26 -73
- package/dist/src/channel/types.gen.d.ts.map +1 -1
- package/dist/src/channel/writer.d.ts +1 -3
- package/dist/src/channel/writer.d.ts.map +1 -1
- package/dist/src/client.d.ts +55 -27
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/connection/client.d.ts +146 -0
- package/dist/src/connection/client.d.ts.map +1 -0
- package/dist/src/connection/external.d.ts +3 -0
- package/dist/src/connection/external.d.ts.map +1 -0
- package/dist/src/connection/index.d.ts +1 -1
- package/dist/src/connection/index.d.ts.map +1 -1
- package/dist/src/connection/status.d.ts +252 -0
- package/dist/src/connection/status.d.ts.map +1 -0
- package/dist/src/control/client.d.ts +31 -7
- package/dist/src/control/client.d.ts.map +1 -1
- package/dist/src/control/state.d.ts +47 -16
- package/dist/src/control/state.d.ts.map +1 -1
- package/dist/src/device/client.d.ts +59 -17
- package/dist/src/device/client.d.ts.map +1 -1
- package/dist/src/device/types.gen.d.ts +17 -67
- package/dist/src/device/types.gen.d.ts.map +1 -1
- package/dist/src/errors.d.ts +17 -20
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/ethercat/external.d.ts +2 -0
- package/dist/src/ethercat/external.d.ts.map +1 -0
- package/dist/src/ethercat/index.d.ts +2 -0
- package/dist/src/ethercat/index.d.ts.map +1 -0
- package/dist/src/ethercat/types.gen.d.ts +243 -0
- package/dist/src/ethercat/types.gen.d.ts.map +1 -0
- package/dist/src/framer/adapter.d.ts +8 -5
- package/dist/src/framer/adapter.d.ts.map +1 -1
- package/dist/src/framer/benchutil.d.ts +19 -0
- package/dist/src/framer/benchutil.d.ts.map +1 -0
- package/dist/src/framer/cache/cache.d.ts +38 -0
- package/dist/src/framer/cache/cache.d.ts.map +1 -0
- package/dist/src/framer/cache/dynamic.d.ts +71 -0
- package/dist/src/framer/cache/dynamic.d.ts.map +1 -0
- package/dist/src/framer/cache/reader.d.ts +43 -0
- package/dist/src/framer/cache/reader.d.ts.map +1 -0
- package/dist/src/framer/cache/static.d.ts +66 -0
- package/dist/src/framer/cache/static.d.ts.map +1 -0
- package/dist/src/framer/cache/streamer.d.ts +86 -0
- package/dist/src/framer/cache/streamer.d.ts.map +1 -0
- package/dist/src/framer/cache/transform.d.ts +18 -0
- package/dist/src/framer/cache/transform.d.ts.map +1 -0
- package/dist/src/framer/cache/unary.d.ts +37 -0
- package/dist/src/framer/cache/unary.d.ts.map +1 -0
- package/dist/src/framer/client.d.ts +35 -14
- package/dist/src/framer/client.d.ts.map +1 -1
- package/dist/src/framer/codec.d.ts.map +1 -1
- package/dist/src/framer/deleter.d.ts +3 -2
- package/dist/src/framer/deleter.d.ts.map +1 -1
- package/dist/src/framer/external.d.ts +6 -0
- package/dist/src/framer/external.d.ts.map +1 -1
- package/dist/src/framer/feed.d.ts +40 -0
- package/dist/src/framer/feed.d.ts.map +1 -0
- package/dist/src/framer/frame.d.ts +16 -20
- package/dist/src/framer/frame.d.ts.map +1 -1
- package/dist/src/framer/hardened.d.ts +70 -0
- package/dist/src/framer/hardened.d.ts.map +1 -0
- package/dist/src/framer/iterator.d.ts +36 -43
- package/dist/src/framer/iterator.d.ts.map +1 -1
- package/dist/src/framer/reader.d.ts +3 -2
- package/dist/src/framer/reader.d.ts.map +1 -1
- package/dist/src/framer/streamer.d.ts +132 -205
- package/dist/src/framer/streamer.d.ts.map +1 -1
- package/dist/src/framer/writer.d.ts +130 -161
- package/dist/src/framer/writer.d.ts.map +1 -1
- package/dist/src/group/client.d.ts +66 -9
- package/dist/src/group/client.d.ts.map +1 -1
- package/dist/src/group/types.gen.d.ts +2 -2
- package/dist/src/http/external.d.ts +2 -0
- package/dist/src/http/external.d.ts.map +1 -0
- package/dist/src/http/index.d.ts +2 -0
- package/dist/src/http/index.d.ts.map +1 -0
- package/dist/src/http/types.gen.d.ts +451 -0
- package/dist/src/http/types.gen.d.ts.map +1 -0
- package/dist/src/imex/client.d.ts +88 -0
- package/dist/src/imex/client.d.ts.map +1 -0
- package/dist/src/imex/index.d.ts +2 -0
- package/dist/src/imex/index.d.ts.map +1 -0
- package/dist/src/index.d.ts +18 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/label/client.d.ts +55 -36
- package/dist/src/label/client.d.ts.map +1 -1
- package/dist/src/label/external.d.ts +2 -0
- package/dist/src/label/external.d.ts.map +1 -1
- package/dist/src/label/payload.d.ts +4 -46
- package/dist/src/label/payload.d.ts.map +1 -1
- package/dist/src/label/store.d.ts +8 -0
- package/dist/src/label/store.d.ts.map +1 -0
- package/dist/src/label/types.gen.d.ts +45 -0
- package/dist/src/label/types.gen.d.ts.map +1 -0
- package/dist/src/labjack/external.d.ts +2 -0
- package/dist/src/labjack/external.d.ts.map +1 -0
- package/dist/src/labjack/index.d.ts +2 -0
- package/dist/src/labjack/index.d.ts.map +1 -0
- package/dist/src/labjack/types.gen.d.ts +442 -0
- package/dist/src/labjack/types.gen.d.ts.map +1 -0
- package/dist/src/lineplot/actions.d.ts +914 -0
- package/dist/src/lineplot/actions.d.ts.map +1 -0
- package/dist/src/lineplot/actions.gen.d.ts +4208 -0
- package/dist/src/lineplot/actions.gen.d.ts.map +1 -0
- package/dist/src/lineplot/client.d.ts +66 -16
- package/dist/src/lineplot/client.d.ts.map +1 -1
- package/dist/src/lineplot/external.d.ts +3 -0
- package/dist/src/lineplot/external.d.ts.map +1 -1
- package/dist/src/lineplot/line.d.ts +16 -0
- package/dist/src/lineplot/line.d.ts.map +1 -0
- package/dist/src/lineplot/types.gen.d.ts +837 -14
- package/dist/src/lineplot/types.gen.d.ts.map +1 -1
- package/dist/src/log/actions.d.ts +271 -0
- package/dist/src/log/actions.d.ts.map +1 -0
- package/dist/src/log/actions.gen.d.ts +1529 -0
- package/dist/src/log/actions.gen.d.ts.map +1 -0
- package/dist/src/log/client.d.ts +66 -16
- package/dist/src/log/client.d.ts.map +1 -1
- package/dist/src/log/external.d.ts +2 -0
- package/dist/src/log/external.d.ts.map +1 -1
- package/dist/src/log/types.gen.d.ts +139 -14
- package/dist/src/log/types.gen.d.ts.map +1 -1
- package/dist/src/modbus/external.d.ts +2 -0
- package/dist/src/modbus/external.d.ts.map +1 -0
- package/dist/src/modbus/index.d.ts +2 -0
- package/dist/src/modbus/index.d.ts.map +1 -0
- package/dist/src/modbus/types.gen.d.ts +280 -0
- package/dist/src/modbus/types.gen.d.ts.map +1 -0
- package/dist/src/ni/external.d.ts +2 -0
- package/dist/src/ni/external.d.ts.map +1 -0
- package/dist/src/ni/index.d.ts +2 -0
- package/dist/src/ni/index.d.ts.map +1 -0
- package/dist/src/ni/types.gen.d.ts +21029 -0
- package/dist/src/ni/types.gen.d.ts.map +1 -0
- package/dist/src/node/index.d.ts +2 -0
- package/dist/src/node/index.d.ts.map +1 -0
- package/dist/src/node/types.gen.d.ts +4 -0
- package/dist/src/node/types.gen.d.ts.map +1 -0
- package/dist/src/ontology/client.d.ts +314 -67
- package/dist/src/ontology/client.d.ts.map +1 -1
- package/dist/src/ontology/external.d.ts +1 -0
- package/dist/src/ontology/external.d.ts.map +1 -1
- package/dist/src/ontology/payload.d.ts +60 -18
- package/dist/src/ontology/payload.d.ts.map +1 -1
- package/dist/src/ontology/store.d.ts +32 -0
- package/dist/src/ontology/store.d.ts.map +1 -0
- package/dist/src/ontology/types.gen.d.ts +3 -2
- package/dist/src/ontology/types.gen.d.ts.map +1 -1
- package/dist/src/ontology/writer.d.ts +16 -10
- package/dist/src/ontology/writer.d.ts.map +1 -1
- package/dist/src/opcua/external.d.ts +2 -0
- package/dist/src/opcua/external.d.ts.map +1 -0
- package/dist/src/opcua/index.d.ts +2 -0
- package/dist/src/opcua/index.d.ts.map +1 -0
- package/dist/src/opcua/types.gen.d.ts +82 -0
- package/dist/src/opcua/types.gen.d.ts.map +1 -0
- package/dist/src/pagerduty/external.d.ts +2 -0
- package/dist/src/pagerduty/external.d.ts.map +1 -0
- package/dist/src/pagerduty/index.d.ts +2 -0
- package/dist/src/pagerduty/index.d.ts.map +1 -0
- package/dist/src/pagerduty/types.gen.d.ts +30 -0
- package/dist/src/pagerduty/types.gen.d.ts.map +1 -0
- package/dist/src/panel/actions.d.ts +273 -0
- package/dist/src/panel/actions.d.ts.map +1 -0
- package/dist/src/panel/actions.gen.d.ts +1255 -0
- package/dist/src/panel/actions.gen.d.ts.map +1 -0
- package/dist/src/panel/client.d.ts +148 -0
- package/dist/src/panel/client.d.ts.map +1 -0
- package/dist/src/panel/external.d.ts +6 -0
- package/dist/src/panel/external.d.ts.map +1 -0
- package/dist/src/panel/index.d.ts +2 -0
- package/dist/src/panel/index.d.ts.map +1 -0
- package/dist/src/panel/tree.d.ts +50 -0
- package/dist/src/panel/tree.d.ts.map +1 -0
- package/dist/src/panel/types.gen.d.ts +370 -0
- package/dist/src/panel/types.gen.d.ts.map +1 -0
- package/dist/src/project/client.d.ts +89 -0
- package/dist/src/project/client.d.ts.map +1 -0
- package/dist/src/project/external.d.ts.map +1 -0
- package/dist/src/project/index.d.ts +2 -0
- package/dist/src/project/index.d.ts.map +1 -0
- package/dist/src/project/types.gen.d.ts +27 -0
- package/dist/src/project/types.gen.d.ts.map +1 -0
- package/dist/src/query/cache.d.ts +132 -0
- package/dist/src/query/cache.d.ts.map +1 -0
- package/dist/src/query/deleted.d.ts +20 -0
- package/dist/src/query/deleted.d.ts.map +1 -0
- package/dist/src/query/derived.d.ts +33 -0
- package/dist/src/query/derived.d.ts.map +1 -0
- package/dist/src/query/external.d.ts +10 -0
- package/dist/src/query/external.d.ts.map +1 -0
- package/dist/src/query/index.d.ts +2 -0
- package/dist/src/query/index.d.ts.map +1 -0
- package/dist/src/query/query.d.ts +235 -0
- package/dist/src/query/query.d.ts.map +1 -0
- package/dist/src/query/retriever.d.ts +135 -0
- package/dist/src/query/retriever.d.ts.map +1 -0
- package/dist/src/query/streamer.d.ts +67 -0
- package/dist/src/query/streamer.d.ts.map +1 -0
- package/dist/src/query/table.d.ts +219 -0
- package/dist/src/query/table.d.ts.map +1 -0
- package/dist/src/query/types.d.ts +35 -0
- package/dist/src/query/types.d.ts.map +1 -0
- package/dist/src/query/write.d.ts +21 -0
- package/dist/src/query/write.d.ts.map +1 -0
- package/dist/src/rack/client.d.ts +58 -20
- package/dist/src/rack/client.d.ts.map +1 -1
- package/dist/src/rack/types.gen.d.ts +11 -12
- package/dist/src/rack/types.gen.d.ts.map +1 -1
- package/dist/src/range/alias/types.gen.d.ts +2 -3
- package/dist/src/range/alias/types.gen.d.ts.map +1 -1
- package/dist/src/ranger/client.d.ts +138 -27
- package/dist/src/ranger/client.d.ts.map +1 -1
- package/dist/src/ranger/kv/client.d.ts +7 -4
- package/dist/src/ranger/kv/client.d.ts.map +1 -1
- package/dist/src/ranger/payload.d.ts +3 -0
- package/dist/src/ranger/payload.d.ts.map +1 -1
- package/dist/src/ranger/types.gen.d.ts +45 -101
- package/dist/src/ranger/types.gen.d.ts.map +1 -1
- package/dist/src/ranger/writer.d.ts +2 -74
- package/dist/src/ranger/writer.d.ts.map +1 -1
- package/dist/src/schematic/actions.d.ts +90 -33
- package/dist/src/schematic/actions.d.ts.map +1 -1
- package/dist/src/schematic/actions.gen.d.ts +207 -114
- package/dist/src/schematic/actions.gen.d.ts.map +1 -1
- package/dist/src/schematic/client.d.ts +70 -68
- package/dist/src/schematic/client.d.ts.map +1 -1
- package/dist/src/schematic/symbol/client.d.ts +133 -27
- package/dist/src/schematic/symbol/client.d.ts.map +1 -1
- package/dist/src/schematic/symbol/types.gen.d.ts +258 -153
- package/dist/src/schematic/symbol/types.gen.d.ts.map +1 -1
- package/dist/src/schematic/types.gen.d.ts +17 -96
- package/dist/src/schematic/types.gen.d.ts.map +1 -1
- package/dist/src/status/client.d.ts +69 -14
- package/dist/src/status/client.d.ts.map +1 -1
- package/dist/src/status/external.d.ts +2 -0
- package/dist/src/status/external.d.ts.map +1 -1
- package/dist/src/status/payload.d.ts +2 -36
- package/dist/src/status/payload.d.ts.map +1 -1
- package/dist/src/status/status.d.ts +65 -0
- package/dist/src/status/status.d.ts.map +1 -0
- package/dist/src/status/types.gen.d.ts +58 -0
- package/dist/src/status/types.gen.d.ts.map +1 -0
- package/dist/src/table/actions.d.ts +72 -13
- package/dist/src/table/actions.d.ts.map +1 -1
- package/dist/src/table/actions.gen.d.ts +221 -137
- package/dist/src/table/actions.gen.d.ts.map +1 -1
- package/dist/src/table/client.d.ts +64 -40
- package/dist/src/table/client.d.ts.map +1 -1
- package/dist/src/table/types.gen.d.ts +20 -55
- package/dist/src/table/types.gen.d.ts.map +1 -1
- package/dist/src/task/client.d.ts +149 -28
- package/dist/src/task/client.d.ts.map +1 -1
- package/dist/src/task/types.gen.d.ts +71 -89
- package/dist/src/task/types.gen.d.ts.map +1 -1
- package/dist/src/testutil/access.d.ts +27 -1
- package/dist/src/testutil/access.d.ts.map +1 -1
- package/dist/src/testutil/channels.d.ts +2 -0
- package/dist/src/testutil/channels.d.ts.map +1 -1
- package/dist/src/testutil/client.d.ts +5 -0
- package/dist/src/testutil/client.d.ts.map +1 -1
- package/dist/src/testutil/connection.d.ts +10 -0
- package/dist/src/testutil/connection.d.ts.map +1 -0
- package/dist/src/testutil/index.d.ts +9 -0
- package/dist/src/testutil/index.d.ts.map +1 -0
- package/dist/src/testutil/panels.d.ts +8 -0
- package/dist/src/testutil/panels.d.ts.map +1 -0
- package/dist/src/testutil/proxy.d.ts +29 -0
- package/dist/src/testutil/proxy.d.ts.map +1 -0
- package/dist/src/testutil/query.d.ts +7 -0
- package/dist/src/testutil/query.d.ts.map +1 -0
- package/dist/src/testutil/telem.d.ts +4 -0
- package/dist/src/testutil/telem.d.ts.map +1 -1
- package/dist/src/transport.d.ts +10 -4
- package/dist/src/transport.d.ts.map +1 -1
- package/dist/src/user/client.d.ts +29 -28
- 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 +4 -4
- package/dist/src/util/retrieve.d.ts +2 -2
- package/dist/src/util/retrieve.d.ts.map +1 -1
- package/dist/src/util/telem.d.ts.map +1 -1
- package/dist/src/view/client.d.ts +30 -14
- package/dist/src/view/client.d.ts.map +1 -1
- package/dist/src/view/types.gen.d.ts +7 -15
- package/dist/src/view/types.gen.d.ts.map +1 -1
- package/dist/testutil.js +189 -0
- package/dist/testutil.js.map +1 -0
- package/package.json +40 -17
- package/src/access/client.ts +14 -3
- package/src/access/enforce.ts +0 -3
- package/src/access/external.ts +1 -0
- package/src/access/granted.ts +114 -0
- package/src/access/policy/client.ts +135 -43
- package/src/access/policy/types.gen.ts +9 -11
- package/src/access/role/client.ts +160 -38
- package/src/access/role/types.gen.ts +8 -12
- package/src/actions/actions.ts +5 -6
- package/src/actions/controller.ts +626 -0
- package/src/actions/external.ts +11 -0
- package/src/arc/actions.gen.ts +313 -0
- package/src/arc/actions.ts +192 -0
- package/src/arc/client.ts +424 -41
- package/src/arc/compiler/types.gen.ts +5 -6
- package/src/arc/external.ts +2 -0
- package/src/arc/graph/types.gen.ts +24 -22
- package/src/arc/ir/index.ts +1 -1
- package/{eslint.config.ts → src/arc/ir/ir.ts} +1 -4
- package/src/arc/ir/types.gen.ts +42 -41
- package/src/arc/text/types.gen.ts +21 -2
- package/src/arc/types/types.gen.ts +40 -32
- package/src/arc/types.gen.ts +31 -29
- package/src/auth/auth.ts +40 -8
- package/src/channel/client.ts +529 -132
- package/src/channel/external.ts +0 -1
- package/src/channel/payload.ts +30 -3
- package/src/channel/types.gen.ts +37 -48
- package/src/channel/writer.ts +2 -11
- package/src/client.ts +215 -91
- package/src/connection/client.ts +495 -0
- package/src/connection/external.ts +34 -0
- package/src/connection/index.ts +1 -1
- package/src/connection/status.ts +442 -0
- package/src/control/client.ts +84 -12
- package/src/control/state.ts +17 -36
- package/src/device/client.ts +293 -41
- package/src/device/types.gen.ts +15 -26
- package/src/errors.ts +45 -22
- package/src/{workspace → ethercat}/external.ts +1 -2
- package/src/{workspace → ethercat}/index.ts +1 -1
- package/src/ethercat/types.gen.ts +151 -0
- package/src/framer/adapter.ts +60 -37
- package/src/framer/benchutil.ts +67 -0
- package/src/framer/cache/cache.ts +115 -0
- package/src/framer/cache/dynamic.ts +279 -0
- package/src/framer/cache/reader.ts +160 -0
- package/src/framer/cache/static.ts +215 -0
- package/src/framer/cache/streamer.ts +391 -0
- package/src/framer/cache/transform.ts +31 -0
- package/src/framer/cache/unary.ts +104 -0
- package/src/framer/client.ts +71 -43
- package/src/framer/codec.ts +55 -18
- package/src/framer/deleter.ts +4 -6
- package/src/framer/external.ts +10 -0
- package/src/framer/feed.ts +108 -0
- package/src/framer/frame.ts +13 -23
- package/src/framer/hardened.ts +283 -0
- package/src/framer/iterator.ts +31 -42
- package/src/framer/reader.ts +11 -11
- package/src/framer/streamer.ts +18 -178
- package/src/framer/writer.ts +39 -59
- package/src/group/client.ts +158 -23
- package/src/http/external.ts +10 -0
- package/src/{cluster → http}/index.ts +1 -1
- package/src/http/types.gen.ts +245 -0
- package/src/imex/client.ts +125 -0
- package/src/imex/index.ts +10 -0
- package/src/index.ts +18 -6
- package/src/label/client.ts +193 -54
- package/src/label/external.ts +2 -0
- package/src/label/payload.ts +4 -9
- package/src/label/store.ts +28 -0
- package/src/label/types.gen.ts +31 -0
- package/src/labjack/external.ts +10 -0
- package/src/labjack/index.ts +10 -0
- package/src/labjack/types.gen.ts +251 -0
- package/src/lineplot/actions.gen.ts +880 -0
- package/src/lineplot/actions.ts +535 -0
- package/src/lineplot/client.ts +224 -52
- package/src/lineplot/external.ts +3 -0
- package/src/lineplot/line.ts +80 -0
- package/src/lineplot/types.gen.ts +225 -12
- package/src/log/actions.gen.ts +474 -0
- package/src/log/actions.ts +242 -0
- package/src/log/client.ts +223 -52
- package/src/log/external.ts +2 -0
- package/src/log/types.gen.ts +45 -14
- package/src/modbus/external.ts +10 -0
- package/src/modbus/index.ts +10 -0
- package/src/modbus/types.gen.ts +185 -0
- package/src/ni/external.ts +10 -0
- package/src/ni/index.ts +10 -0
- package/src/ni/types.gen.ts +1632 -0
- package/src/node/index.ts +10 -0
- package/src/{cluster → node}/types.gen.ts +2 -2
- package/src/ontology/client.ts +408 -99
- package/src/ontology/external.ts +7 -0
- package/src/ontology/payload.ts +48 -7
- package/src/ontology/store.ts +83 -0
- package/src/ontology/types.gen.ts +2 -1
- package/src/ontology/writer.ts +1 -0
- package/src/opcua/external.ts +10 -0
- package/src/opcua/index.ts +10 -0
- package/src/opcua/types.gen.ts +65 -0
- package/src/pagerduty/external.ts +10 -0
- package/src/pagerduty/index.ts +10 -0
- package/src/pagerduty/types.gen.ts +41 -0
- package/src/panel/actions.gen.ts +267 -0
- package/src/panel/actions.ts +357 -0
- package/src/panel/client.ts +327 -0
- package/src/panel/external.ts +14 -0
- package/src/panel/index.ts +10 -0
- package/src/panel/tree.ts +163 -0
- package/src/panel/types.gen.ts +164 -0
- package/src/project/client.ts +273 -0
- package/src/project/external.ts +11 -0
- package/src/project/index.ts +10 -0
- package/src/project/types.gen.ts +40 -0
- package/src/query/cache.ts +326 -0
- package/src/query/deleted.ts +38 -0
- package/src/query/derived.ts +101 -0
- package/src/query/external.ts +51 -0
- package/src/query/index.ts +10 -0
- package/src/query/query.ts +865 -0
- package/src/query/retriever.ts +308 -0
- package/src/query/streamer.ts +207 -0
- package/src/query/table.ts +625 -0
- package/src/query/types.ts +54 -0
- package/src/query/write.ts +42 -0
- package/src/rack/client.ts +233 -45
- package/src/rack/types.gen.ts +15 -16
- package/src/range/alias/types.gen.ts +2 -3
- package/src/ranger/client.ts +581 -70
- package/src/ranger/kv/client.ts +52 -21
- package/src/ranger/payload.ts +3 -0
- package/src/ranger/types.gen.ts +21 -23
- package/src/ranger/writer.ts +4 -8
- package/src/schematic/actions.gen.ts +62 -53
- package/src/schematic/actions.ts +44 -42
- package/src/schematic/client.ts +226 -70
- package/src/schematic/symbol/client.ts +277 -48
- package/src/schematic/symbol/types.gen.ts +22 -34
- package/src/schematic/types.gen.ts +22 -29
- package/src/status/client.ts +321 -44
- package/src/status/external.ts +2 -0
- package/src/status/payload.ts +1 -23
- package/src/status/status.ts +241 -0
- package/src/status/types.gen.ts +108 -0
- package/src/table/actions.gen.ts +96 -63
- package/src/table/actions.ts +44 -19
- package/src/table/client.ts +220 -56
- package/src/table/types.gen.ts +24 -31
- package/src/task/client.ts +580 -101
- package/src/task/types.gen.ts +68 -75
- package/src/testutil/access.ts +102 -6
- package/src/testutil/channels.ts +29 -0
- package/src/testutil/client.ts +27 -2
- package/src/testutil/connection.ts +47 -0
- package/src/testutil/index.ts +17 -0
- package/src/testutil/panels.ts +26 -0
- package/src/testutil/proxy.ts +106 -0
- package/src/testutil/query.ts +28 -0
- package/src/testutil/telem.ts +17 -1
- package/src/transport.ts +18 -7
- package/src/user/client.ts +165 -64
- package/src/user/external.ts +1 -1
- package/src/user/types.gen.ts +5 -5
- package/src/util/retrieve.ts +4 -4
- package/src/util/telem.ts +0 -1
- package/src/view/client.ts +120 -37
- package/src/view/types.gen.ts +8 -11
- package/.turbo/turbo-build.log +0 -20
- package/.vscode/settings.json +0 -3
- package/CONTRIBUTING.md +0 -47
- package/dist/client.cjs +0 -118
- package/dist/eslint.config.d.ts +0 -4
- package/dist/eslint.config.d.ts.map +0 -1
- package/dist/src/access/enforce.spec.d.ts +0 -2
- package/dist/src/access/enforce.spec.d.ts.map +0 -1
- package/dist/src/access/policy/access.spec.d.ts +0 -2
- package/dist/src/access/policy/access.spec.d.ts.map +0 -1
- package/dist/src/access/role/role.spec.d.ts +0 -2
- package/dist/src/access/role/role.spec.d.ts.map +0 -1
- package/dist/src/actions/actions.spec.d.ts +0 -2
- package/dist/src/actions/actions.spec.d.ts.map +0 -1
- package/dist/src/arc/access.spec.d.ts +0 -2
- package/dist/src/arc/access.spec.d.ts.map +0 -1
- package/dist/src/arc/arc.spec.d.ts +0 -2
- package/dist/src/arc/arc.spec.d.ts.map +0 -1
- package/dist/src/arc/lsp.spec.d.ts +0 -2
- package/dist/src/arc/lsp.spec.d.ts.map +0 -1
- package/dist/src/auth/auth.spec.d.ts +0 -2
- package/dist/src/auth/auth.spec.d.ts.map +0 -1
- package/dist/src/channel/access.spec.d.ts +0 -2
- package/dist/src/channel/access.spec.d.ts.map +0 -1
- package/dist/src/channel/batchRetriever.spec.d.ts +0 -2
- package/dist/src/channel/batchRetriever.spec.d.ts.map +0 -1
- package/dist/src/channel/channel.spec.d.ts +0 -2
- package/dist/src/channel/channel.spec.d.ts.map +0 -1
- package/dist/src/channel/payload.spec.d.ts +0 -2
- package/dist/src/channel/payload.spec.d.ts.map +0 -1
- package/dist/src/channel/retriever.d.ts +0 -64
- package/dist/src/channel/retriever.d.ts.map +0 -1
- package/dist/src/cluster/index.d.ts +0 -2
- package/dist/src/cluster/index.d.ts.map +0 -1
- package/dist/src/cluster/types.gen.d.ts +0 -4
- package/dist/src/cluster/types.gen.d.ts.map +0 -1
- package/dist/src/connection/checker.d.ts +0 -86
- package/dist/src/connection/checker.d.ts.map +0 -1
- package/dist/src/connection/connection.spec.d.ts +0 -2
- package/dist/src/connection/connection.spec.d.ts.map +0 -1
- package/dist/src/connection.spec.d.ts +0 -2
- package/dist/src/connection.spec.d.ts.map +0 -1
- package/dist/src/control/state.spec.d.ts +0 -2
- package/dist/src/control/state.spec.d.ts.map +0 -1
- package/dist/src/device/access.spec.d.ts +0 -2
- package/dist/src/device/access.spec.d.ts.map +0 -1
- package/dist/src/device/device.spec.d.ts +0 -2
- package/dist/src/device/device.spec.d.ts.map +0 -1
- package/dist/src/device/payload.spec.d.ts +0 -2
- package/dist/src/device/payload.spec.d.ts.map +0 -1
- package/dist/src/errors.spec.d.ts +0 -2
- package/dist/src/errors.spec.d.ts.map +0 -1
- package/dist/src/framer/adapter.spec.d.ts +0 -2
- package/dist/src/framer/adapter.spec.d.ts.map +0 -1
- package/dist/src/framer/client.spec.d.ts +0 -2
- package/dist/src/framer/client.spec.d.ts.map +0 -1
- package/dist/src/framer/codec.spec.d.ts +0 -2
- package/dist/src/framer/codec.spec.d.ts.map +0 -1
- package/dist/src/framer/deleter.spec.d.ts +0 -2
- package/dist/src/framer/deleter.spec.d.ts.map +0 -1
- package/dist/src/framer/frame.spec.d.ts +0 -2
- package/dist/src/framer/frame.spec.d.ts.map +0 -1
- package/dist/src/framer/iterator.spec.d.ts +0 -2
- package/dist/src/framer/iterator.spec.d.ts.map +0 -1
- package/dist/src/framer/reader.spec.d.ts +0 -2
- package/dist/src/framer/reader.spec.d.ts.map +0 -1
- package/dist/src/framer/streamer.spec.d.ts +0 -2
- package/dist/src/framer/streamer.spec.d.ts.map +0 -1
- package/dist/src/framer/writer.spec.d.ts +0 -2
- package/dist/src/framer/writer.spec.d.ts.map +0 -1
- package/dist/src/group/access.spec.d.ts +0 -2
- package/dist/src/group/access.spec.d.ts.map +0 -1
- package/dist/src/group/group.spec.d.ts +0 -2
- package/dist/src/group/group.spec.d.ts.map +0 -1
- package/dist/src/label/access.spec.d.ts +0 -2
- package/dist/src/label/access.spec.d.ts.map +0 -1
- package/dist/src/label/label.spec.d.ts +0 -2
- package/dist/src/label/label.spec.d.ts.map +0 -1
- package/dist/src/lineplot/access.spec.d.ts +0 -2
- package/dist/src/lineplot/access.spec.d.ts.map +0 -1
- package/dist/src/lineplot/lineplot.spec.d.ts +0 -2
- package/dist/src/lineplot/lineplot.spec.d.ts.map +0 -1
- package/dist/src/log/access.spec.d.ts +0 -2
- package/dist/src/log/access.spec.d.ts.map +0 -1
- package/dist/src/log/log.spec.d.ts +0 -2
- package/dist/src/log/log.spec.d.ts.map +0 -1
- package/dist/src/ontology/ontology.spec.d.ts +0 -2
- package/dist/src/ontology/ontology.spec.d.ts.map +0 -1
- package/dist/src/rack/access.spec.d.ts +0 -2
- package/dist/src/rack/access.spec.d.ts.map +0 -1
- package/dist/src/rack/rack.spec.d.ts +0 -2
- package/dist/src/rack/rack.spec.d.ts.map +0 -1
- package/dist/src/ranger/access.spec.d.ts +0 -2
- package/dist/src/ranger/access.spec.d.ts.map +0 -1
- package/dist/src/ranger/alias/payload.spec.d.ts +0 -2
- package/dist/src/ranger/alias/payload.spec.d.ts.map +0 -1
- package/dist/src/ranger/ranger.spec.d.ts +0 -2
- package/dist/src/ranger/ranger.spec.d.ts.map +0 -1
- package/dist/src/schematic/access.spec.d.ts +0 -2
- package/dist/src/schematic/access.spec.d.ts.map +0 -1
- package/dist/src/schematic/actions.spec.d.ts +0 -2
- package/dist/src/schematic/actions.spec.d.ts.map +0 -1
- package/dist/src/schematic/schematic.spec.d.ts +0 -2
- package/dist/src/schematic/schematic.spec.d.ts.map +0 -1
- package/dist/src/schematic/symbol/access.spec.d.ts +0 -2
- package/dist/src/schematic/symbol/access.spec.d.ts.map +0 -1
- package/dist/src/schematic/symbol/client.spec.d.ts +0 -2
- package/dist/src/schematic/symbol/client.spec.d.ts.map +0 -1
- package/dist/src/status/access.spec.d.ts +0 -2
- package/dist/src/status/access.spec.d.ts.map +0 -1
- package/dist/src/status/status.spec.d.ts +0 -2
- package/dist/src/status/status.spec.d.ts.map +0 -1
- package/dist/src/table/access.spec.d.ts +0 -2
- package/dist/src/table/access.spec.d.ts.map +0 -1
- package/dist/src/table/table.spec.d.ts +0 -2
- package/dist/src/table/table.spec.d.ts.map +0 -1
- package/dist/src/task/access.spec.d.ts +0 -2
- package/dist/src/task/access.spec.d.ts.map +0 -1
- package/dist/src/task/payload.spec.d.ts +0 -2
- package/dist/src/task/payload.spec.d.ts.map +0 -1
- package/dist/src/task/task.spec.d.ts +0 -2
- package/dist/src/task/task.spec.d.ts.map +0 -1
- package/dist/src/user/access.spec.d.ts +0 -2
- package/dist/src/user/access.spec.d.ts.map +0 -1
- package/dist/src/user/user.spec.d.ts +0 -2
- package/dist/src/user/user.spec.d.ts.map +0 -1
- package/dist/src/util/retrieve.spec.d.ts +0 -2
- package/dist/src/util/retrieve.spec.d.ts.map +0 -1
- package/dist/src/view/view.spec.d.ts +0 -2
- package/dist/src/view/view.spec.d.ts.map +0 -1
- package/dist/src/workspace/access.spec.d.ts +0 -2
- package/dist/src/workspace/access.spec.d.ts.map +0 -1
- package/dist/src/workspace/client.d.ts +0 -36
- package/dist/src/workspace/client.d.ts.map +0 -1
- package/dist/src/workspace/external.d.ts.map +0 -1
- package/dist/src/workspace/index.d.ts +0 -2
- package/dist/src/workspace/index.d.ts.map +0 -1
- package/dist/src/workspace/types.gen.d.ts +0 -34
- package/dist/src/workspace/types.gen.d.ts.map +0 -1
- package/dist/src/workspace/workspace.spec.d.ts +0 -2
- package/dist/src/workspace/workspace.spec.d.ts.map +0 -1
- package/examples/node/basicReadWrite.js +0 -86
- package/examples/node/createChannels.js +0 -50
- package/examples/node/createRange.js +0 -67
- package/examples/node/package-lock.json +0 -133
- package/examples/node/package.json +0 -17
- package/examples/node/readLatest.js +0 -76
- package/examples/node/seriesAndFrames.js +0 -173
- package/examples/node/streamRead.js +0 -50
- package/examples/node/streamWrite.js +0 -87
- package/src/access/enforce.spec.ts +0 -188
- package/src/access/policy/access.spec.ts +0 -147
- package/src/access/role/role.spec.ts +0 -95
- package/src/actions/actions.spec.ts +0 -229
- package/src/arc/access.spec.ts +0 -149
- package/src/arc/arc.spec.ts +0 -44
- package/src/arc/lsp.spec.ts +0 -717
- package/src/auth/auth.spec.ts +0 -101
- package/src/channel/access.spec.ts +0 -116
- package/src/channel/batchRetriever.spec.ts +0 -115
- package/src/channel/channel.spec.ts +0 -352
- package/src/channel/payload.spec.ts +0 -117
- package/src/channel/retriever.ts +0 -252
- package/src/connection/checker.ts +0 -203
- package/src/connection/connection.spec.ts +0 -152
- package/src/connection.spec.ts +0 -145
- package/src/control/state.spec.ts +0 -22
- package/src/device/access.spec.ts +0 -159
- package/src/device/device.spec.ts +0 -461
- package/src/device/payload.spec.ts +0 -142
- package/src/errors.spec.ts +0 -71
- package/src/framer/adapter.spec.ts +0 -620
- package/src/framer/client.spec.ts +0 -180
- package/src/framer/codec.spec.ts +0 -383
- package/src/framer/deleter.spec.ts +0 -103
- package/src/framer/frame.spec.ts +0 -973
- package/src/framer/iterator.spec.ts +0 -169
- package/src/framer/reader.spec.ts +0 -865
- package/src/framer/streamer.spec.ts +0 -871
- package/src/framer/writer.spec.ts +0 -486
- package/src/group/access.spec.ts +0 -77
- package/src/group/group.spec.ts +0 -65
- package/src/label/access.spec.ts +0 -109
- package/src/label/label.spec.ts +0 -83
- package/src/lineplot/access.spec.ts +0 -134
- package/src/lineplot/lineplot.spec.ts +0 -120
- package/src/log/access.spec.ts +0 -132
- package/src/log/log.spec.ts +0 -106
- package/src/ontology/ontology.spec.ts +0 -521
- package/src/rack/access.spec.ts +0 -102
- package/src/rack/rack.spec.ts +0 -171
- package/src/ranger/access.spec.ts +0 -115
- package/src/ranger/alias/payload.spec.ts +0 -52
- package/src/ranger/ranger.spec.ts +0 -343
- package/src/schematic/access.spec.ts +0 -134
- package/src/schematic/actions.spec.ts +0 -699
- package/src/schematic/schematic.spec.ts +0 -340
- package/src/schematic/symbol/access.spec.ts +0 -172
- package/src/schematic/symbol/client.spec.ts +0 -160
- package/src/status/access.spec.ts +0 -129
- package/src/status/status.spec.ts +0 -448
- package/src/table/access.spec.ts +0 -128
- package/src/table/table.spec.ts +0 -651
- package/src/task/access.spec.ts +0 -131
- package/src/task/payload.spec.ts +0 -113
- package/src/task/task.spec.ts +0 -657
- package/src/user/access.spec.ts +0 -107
- package/src/user/user.spec.ts +0 -290
- package/src/util/retrieve.spec.ts +0 -49
- package/src/view/view.spec.ts +0 -165
- package/src/workspace/access.spec.ts +0 -108
- package/src/workspace/client.ts +0 -112
- package/src/workspace/types.gen.ts +0 -46
- package/src/workspace/workspace.spec.ts +0 -111
- package/tsconfig.json +0 -5
- package/tsconfig.vite.json +0 -4
- package/vite.config.ts +0 -29
- /package/dist/src/{workspace → project}/external.d.ts +0 -0
package/src/device/client.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// included in the file licenses/APL.txt.
|
|
9
9
|
|
|
10
10
|
import { type UnaryClient } from "@synnaxlabs/freighter";
|
|
11
|
-
import { array, type record, zod } from "@synnaxlabs/x";
|
|
11
|
+
import { array, type destructor, primitive, type record, zod } from "@synnaxlabs/x";
|
|
12
12
|
import { z } from "zod";
|
|
13
13
|
|
|
14
14
|
import {
|
|
@@ -18,23 +18,27 @@ import {
|
|
|
18
18
|
type Key,
|
|
19
19
|
keyZ,
|
|
20
20
|
type New,
|
|
21
|
-
newZ,
|
|
22
21
|
ontologyID,
|
|
22
|
+
statusZ,
|
|
23
23
|
} from "@/device/types.gen";
|
|
24
24
|
import { ontology } from "@/ontology";
|
|
25
|
+
import { query } from "@/query";
|
|
25
26
|
import { keyZ as rackKeyZ } from "@/rack/types.gen";
|
|
27
|
+
import { type status } from "@/status";
|
|
26
28
|
import { checkForMultipleOrNoResults } from "@/util/retrieve";
|
|
27
29
|
|
|
28
30
|
export const SET_CHANNEL_NAME = "sy_device_set";
|
|
29
31
|
export const DELETE_CHANNEL_NAME = "sy_device_delete";
|
|
30
32
|
|
|
33
|
+
const genericDeviceZ = deviceZ();
|
|
34
|
+
|
|
31
35
|
const createReqZ = <
|
|
32
36
|
Properties extends z.ZodType<record.Unknown> = z.ZodType<record.Unknown>,
|
|
33
37
|
Make extends z.ZodType<string> = z.ZodString,
|
|
34
38
|
Model extends z.ZodType<string> = z.ZodString,
|
|
35
39
|
>(
|
|
36
40
|
schemas?: DeviceSchemas<Properties, Make, Model>,
|
|
37
|
-
) => z.object({ devices: zod.toArray(
|
|
41
|
+
) => z.object({ devices: zod.toArray(deviceZ(schemas)) });
|
|
38
42
|
|
|
39
43
|
const createResZ = <
|
|
40
44
|
Properties extends z.ZodType<record.Unknown> = z.ZodType<record.Unknown>,
|
|
@@ -60,6 +64,7 @@ const retrieveRequestZ = z.object({
|
|
|
60
64
|
includeStatus: z.boolean().optional(),
|
|
61
65
|
includeParent: z.boolean().optional(),
|
|
62
66
|
});
|
|
67
|
+
const retrieveMultiParamsZ = retrieveRequestZ.or(query.keyListZ(keyZ));
|
|
63
68
|
|
|
64
69
|
const retrieveResZ = <
|
|
65
70
|
Properties extends z.ZodType<record.Unknown> = z.ZodType<record.Unknown>,
|
|
@@ -67,9 +72,14 @@ const retrieveResZ = <
|
|
|
67
72
|
Model extends z.ZodType<string> = z.ZodString,
|
|
68
73
|
>(
|
|
69
74
|
schemas?: DeviceSchemas<Properties, Make, Model>,
|
|
70
|
-
) =>
|
|
75
|
+
) =>
|
|
76
|
+
z.object({
|
|
77
|
+
devices: deviceZ(schemas)
|
|
78
|
+
.array()
|
|
79
|
+
.default(() => []),
|
|
80
|
+
});
|
|
71
81
|
|
|
72
|
-
const
|
|
82
|
+
const singleRetrieveParamsZ = z
|
|
73
83
|
.object({
|
|
74
84
|
key: keyZ,
|
|
75
85
|
includeStatus: z.boolean().optional(),
|
|
@@ -79,12 +89,16 @@ const singleRetrieveArgsZ = z
|
|
|
79
89
|
includeStatus,
|
|
80
90
|
}));
|
|
81
91
|
|
|
82
|
-
export type RetrieveSingleParams = z.input<typeof
|
|
92
|
+
export type RetrieveSingleParams = z.input<typeof singleRetrieveParamsZ>;
|
|
83
93
|
export type RetrieveMultipleParams = z.input<typeof retrieveRequestZ>;
|
|
84
94
|
|
|
85
|
-
const
|
|
95
|
+
const retrieveParamsZ = z.union([singleRetrieveParamsZ, retrieveRequestZ]);
|
|
96
|
+
|
|
97
|
+
export type RetrieveParams = z.input<typeof retrieveParamsZ>;
|
|
98
|
+
|
|
99
|
+
interface RetrieveRequest extends z.infer<typeof retrieveRequestZ> {}
|
|
86
100
|
|
|
87
|
-
|
|
101
|
+
type SingleQuery = { key: Key; includeStatus?: boolean };
|
|
88
102
|
|
|
89
103
|
type RetrieveSchemas<
|
|
90
104
|
Properties extends z.ZodType<record.Unknown>,
|
|
@@ -92,11 +106,136 @@ type RetrieveSchemas<
|
|
|
92
106
|
Model extends z.ZodType<string>,
|
|
93
107
|
> = { schemas: DeviceSchemas<Properties, Make, Model> };
|
|
94
108
|
|
|
95
|
-
|
|
96
|
-
|
|
109
|
+
/** Query fields only the server can evaluate. */
|
|
110
|
+
const SERVER_FIELDS = ["searchTerm", "limit", "offset", "includeParent"] as const;
|
|
111
|
+
|
|
112
|
+
/** Drops includeStatus when unset so equivalent queries hash identically. */
|
|
113
|
+
const normalizeSingle = ({ key, includeStatus }: RetrieveSingleParams): SingleQuery =>
|
|
114
|
+
includeStatus === true ? { key, includeStatus: true } : { key };
|
|
115
|
+
|
|
116
|
+
const singleQueryZ = z
|
|
117
|
+
.union([
|
|
118
|
+
z.strictObject({ key: keyZ, includeStatus: z.boolean().optional() }),
|
|
119
|
+
keyZ.transform((key) => ({ key })),
|
|
120
|
+
])
|
|
121
|
+
.transform(normalizeSingle);
|
|
122
|
+
|
|
123
|
+
/** The table never holds statuses; the status table is their single home. */
|
|
124
|
+
const stripStatus = ({ status: _, ...device }: Device): Omit<Device, "status"> =>
|
|
125
|
+
device;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Client-side matching for a request: key, name, make, model, location, and
|
|
129
|
+
* rack sets. Server-computed shapes (search, pagination, parent resolution)
|
|
130
|
+
* never reach this filter; they refetch instead.
|
|
131
|
+
*/
|
|
132
|
+
const requestFilter = (
|
|
133
|
+
req: RetrieveRequest,
|
|
134
|
+
): ((d: Omit<Device, "status">) => boolean) => {
|
|
135
|
+
const keySet = primitive.isNonZero(req.keys) ? new Set(req.keys) : undefined;
|
|
136
|
+
const nameSet = primitive.isNonZero(req.names) ? new Set(req.names) : undefined;
|
|
137
|
+
const makeSet = primitive.isNonZero(req.makes) ? new Set(req.makes) : undefined;
|
|
138
|
+
const modelSet = primitive.isNonZero(req.models) ? new Set(req.models) : undefined;
|
|
139
|
+
const locationSet = primitive.isNonZero(req.locations)
|
|
140
|
+
? new Set(req.locations)
|
|
141
|
+
: undefined;
|
|
142
|
+
const rackSet = primitive.isNonZero(req.racks) ? new Set(req.racks) : undefined;
|
|
143
|
+
return (d) => {
|
|
144
|
+
if (keySet != null && !keySet.has(d.key)) return false;
|
|
145
|
+
if (nameSet != null && !nameSet.has(d.name)) return false;
|
|
146
|
+
if (makeSet != null && !makeSet.has(d.make)) return false;
|
|
147
|
+
if (modelSet != null && !modelSet.has(d.model)) return false;
|
|
148
|
+
if (locationSet != null && !locationSet.has(d.location)) return false;
|
|
149
|
+
if (rackSet != null && !rackSet.has(d.rack)) return false;
|
|
150
|
+
return true;
|
|
151
|
+
};
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
// Device statuses live in the status table under the "device:<key>" status
|
|
155
|
+
// key, carrying the device key in their details.
|
|
156
|
+
const affectedDeviceKeys = (
|
|
157
|
+
event: query.TableEvent<status.Key, status.Status>,
|
|
158
|
+
): Key[] | null => {
|
|
159
|
+
if (event.variant === "set") {
|
|
160
|
+
const parsed = statusZ.safeParse(event.value);
|
|
161
|
+
return parsed.success ? [parsed.data.details.device] : null;
|
|
162
|
+
}
|
|
163
|
+
const [type, key] = event.key.split(":");
|
|
164
|
+
if (type !== "device" || !primitive.isNonZero(key)) return null;
|
|
165
|
+
return [key];
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
export interface ClientConfig {
|
|
169
|
+
unary: UnaryClient;
|
|
170
|
+
cache: query.Cache;
|
|
171
|
+
statusStore: query.Table<status.Key, status.Status>;
|
|
172
|
+
ontology: ontology.Client;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export class Client extends query.Retriever<
|
|
176
|
+
typeof retrieveMultiParamsZ,
|
|
177
|
+
Key,
|
|
178
|
+
Omit<Device, "status">,
|
|
179
|
+
Device,
|
|
180
|
+
RetrieveSingleParams,
|
|
181
|
+
SingleQuery
|
|
182
|
+
> {
|
|
183
|
+
private readonly cfg: ClientConfig;
|
|
184
|
+
private readonly store: query.Table<Key, Omit<Device, "status">>;
|
|
97
185
|
|
|
98
|
-
constructor(
|
|
99
|
-
|
|
186
|
+
constructor(cfg: ClientConfig) {
|
|
187
|
+
const { cache, statusStore } = cfg;
|
|
188
|
+
// Explicitly omit 'status' from the device type to make sure we aren't
|
|
189
|
+
// storing two copies of the statuses in the store.
|
|
190
|
+
const store = cache.createTable<Key, Omit<Device, "status">>({
|
|
191
|
+
name: "devices",
|
|
192
|
+
fetch: async (keys) => await this.fetchThrough({ keys }),
|
|
193
|
+
listen: [
|
|
194
|
+
query.createSetListener(SET_CHANNEL_NAME, genericDeviceZ, {
|
|
195
|
+
value: ({ status: _, ...device }) => device,
|
|
196
|
+
}),
|
|
197
|
+
query.createDeleteListener(DELETE_CHANNEL_NAME, keyZ),
|
|
198
|
+
],
|
|
199
|
+
});
|
|
200
|
+
// Composed rows always carry status; includeStatus only gates fetch flags.
|
|
201
|
+
const composed = cache.derive<Key, Omit<Device, "status">, Device>({
|
|
202
|
+
name: "device.composed",
|
|
203
|
+
source: store,
|
|
204
|
+
compose: (record) => this.compose(record, true),
|
|
205
|
+
watch: [query.deriveWatch(statusStore, (event) => affectedDeviceKeys(event))],
|
|
206
|
+
});
|
|
207
|
+
const single = cache.queries<SingleQuery, Device, Key, Device>({
|
|
208
|
+
name: "device",
|
|
209
|
+
table: composed,
|
|
210
|
+
fetch: async (q) => [(await this.fetchSingle(q)).key],
|
|
211
|
+
// The composed row always carries status; the query gates whether the
|
|
212
|
+
// answer keeps it, mirroring the request space.
|
|
213
|
+
compose: (records, q) =>
|
|
214
|
+
q.includeStatus === true ? records[0] : stripStatus(records[0]),
|
|
215
|
+
keyOf: (q) => q.key,
|
|
216
|
+
single: true,
|
|
217
|
+
});
|
|
218
|
+
super(cache, {
|
|
219
|
+
name: "device",
|
|
220
|
+
table: store,
|
|
221
|
+
request: {
|
|
222
|
+
schema: retrieveMultiParamsZ,
|
|
223
|
+
fetch: async (req) => (await this.fetchThrough(req)).map(stripStatus),
|
|
224
|
+
matches: (d, req) => requestFilter(req)(d),
|
|
225
|
+
serverFields: SERVER_FIELDS,
|
|
226
|
+
watch: [
|
|
227
|
+
query.watch(statusStore, (event, q: RetrieveRequest) => {
|
|
228
|
+
if (q.includeStatus !== true) return null;
|
|
229
|
+
return affectedDeviceKeys(event);
|
|
230
|
+
}),
|
|
231
|
+
],
|
|
232
|
+
},
|
|
233
|
+
compose: (record, q) =>
|
|
234
|
+
this.compose(record, (q as { includeStatus?: boolean }).includeStatus === true),
|
|
235
|
+
single: { schema: singleQueryZ, space: single },
|
|
236
|
+
});
|
|
237
|
+
this.cfg = cfg;
|
|
238
|
+
this.store = store;
|
|
100
239
|
}
|
|
101
240
|
|
|
102
241
|
async retrieve<
|
|
@@ -104,34 +243,37 @@ export class Client {
|
|
|
104
243
|
Make extends z.ZodType<string>,
|
|
105
244
|
Model extends z.ZodType<string>,
|
|
106
245
|
>(
|
|
107
|
-
|
|
246
|
+
params: RetrieveSingleParams & RetrieveSchemas<Properties, Make, Model>,
|
|
108
247
|
): Promise<Device<Properties, Make, Model>>;
|
|
109
248
|
|
|
110
|
-
async retrieve(
|
|
249
|
+
async retrieve(params: Key | RetrieveSingleParams): Promise<Device>;
|
|
111
250
|
|
|
112
251
|
async retrieve<
|
|
113
252
|
Properties extends z.ZodType<record.Unknown>,
|
|
114
253
|
Make extends z.ZodType<string>,
|
|
115
254
|
Model extends z.ZodType<string>,
|
|
116
255
|
>(
|
|
117
|
-
|
|
256
|
+
params: RetrieveMultipleParams & RetrieveSchemas<Properties, Make, Model>,
|
|
118
257
|
): Promise<Array<Device<Properties, Make, Model>>>;
|
|
119
258
|
|
|
120
|
-
async retrieve(
|
|
259
|
+
async retrieve(params: RetrieveMultipleParams): Promise<Array<Device>>;
|
|
121
260
|
|
|
122
261
|
async retrieve(
|
|
123
|
-
|
|
262
|
+
rawParams: Key | (RetrieveParams & { schemas?: DeviceSchemas }),
|
|
124
263
|
): Promise<Device | Array<Device>> {
|
|
125
|
-
const {
|
|
126
|
-
const
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
264
|
+
const params = typeof rawParams === "string" ? { key: rawParams } : rawParams;
|
|
265
|
+
const { schemas, ...rest } = params;
|
|
266
|
+
const isSingle = "key" in rest;
|
|
267
|
+
// Schemas are not hashable, so schema-typed retrieves bypass the query
|
|
268
|
+
// cache and hit the network, still writing records through.
|
|
269
|
+
if (schemas != null) {
|
|
270
|
+
const devices = await this.execRetrieve(rest, schemas);
|
|
271
|
+
checkForMultipleOrNoResults("Device", rest, devices, isSingle);
|
|
272
|
+
this.writeThrough(devices);
|
|
273
|
+
return isSingle ? devices[0] : devices;
|
|
274
|
+
}
|
|
275
|
+
if (isSingle) return await super.retrieve(rest);
|
|
276
|
+
return await super.retrieve(rest);
|
|
135
277
|
}
|
|
136
278
|
|
|
137
279
|
async create(device: New): Promise<Device>;
|
|
@@ -145,9 +287,14 @@ export class Client {
|
|
|
145
287
|
>(
|
|
146
288
|
device: New<Properties, Make, Model>,
|
|
147
289
|
schemas: DeviceSchemas<Properties, Make, Model>,
|
|
290
|
+
opts?: query.WriteOptions,
|
|
148
291
|
): Promise<Device<Properties, Make, Model>>;
|
|
149
292
|
|
|
150
|
-
async create(
|
|
293
|
+
async create(
|
|
294
|
+
device: New,
|
|
295
|
+
schemas?: DeviceSchemas,
|
|
296
|
+
opts?: query.WriteOptions,
|
|
297
|
+
): Promise<Device>;
|
|
151
298
|
|
|
152
299
|
async create<
|
|
153
300
|
Properties extends z.ZodType<record.Unknown>,
|
|
@@ -156,31 +303,136 @@ export class Client {
|
|
|
156
303
|
>(
|
|
157
304
|
devices: New<Properties, Make, Model>[],
|
|
158
305
|
schemas: DeviceSchemas<Properties, Make, Model>,
|
|
306
|
+
opts?: query.WriteOptions,
|
|
159
307
|
): Promise<Device<Properties, Make, Model>[]>;
|
|
160
308
|
|
|
161
|
-
async create(
|
|
309
|
+
async create(
|
|
310
|
+
devices: New[],
|
|
311
|
+
schemas?: DeviceSchemas,
|
|
312
|
+
opts?: query.WriteOptions,
|
|
313
|
+
): Promise<Device[]>;
|
|
162
314
|
|
|
163
315
|
async create(
|
|
164
316
|
devices: New | New[],
|
|
165
317
|
schemas?: DeviceSchemas,
|
|
318
|
+
opts: query.WriteOptions = {},
|
|
166
319
|
): Promise<Device | Device[]> {
|
|
167
320
|
const isSingle = !Array.isArray(devices);
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
);
|
|
321
|
+
// Filling the schema defaults up front hands the cache the same records the request
|
|
322
|
+
// carries. It is the schema createReqZ already applies.
|
|
323
|
+
const normalized = array
|
|
324
|
+
.toArray(devices)
|
|
325
|
+
.map((device) => deviceZ(schemas).parse(device) as Device);
|
|
326
|
+
const apply = () => [this.store.set(normalized.map(stripStatus))];
|
|
327
|
+
const res = await query.optimistic({
|
|
328
|
+
rollbacks: apply(),
|
|
329
|
+
onOptimistic: opts.onOptimistic,
|
|
330
|
+
commit: async () =>
|
|
331
|
+
await this.cfg.unary.send(
|
|
332
|
+
"/device/create",
|
|
333
|
+
{ devices: normalized },
|
|
334
|
+
createReqZ(schemas),
|
|
335
|
+
createResZ(schemas),
|
|
336
|
+
),
|
|
337
|
+
});
|
|
338
|
+
this.store.set(res.devices.map(stripStatus));
|
|
174
339
|
return isSingle ? res.devices[0] : res.devices;
|
|
175
340
|
}
|
|
176
341
|
|
|
177
|
-
async delete(keys: Key | Key[]): Promise<void> {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
342
|
+
async delete(keys: Key | Key[], opts: query.WriteOptions = {}): Promise<void> {
|
|
343
|
+
const keysArr = array.toArray(keys);
|
|
344
|
+
const drop = () => [
|
|
345
|
+
this.cfg.ontology.cache.deleteResources(ontologyID(keysArr)),
|
|
346
|
+
this.store.delete(keysArr),
|
|
347
|
+
];
|
|
348
|
+
await query.optimistic({
|
|
349
|
+
rollbacks: drop(),
|
|
350
|
+
onOptimistic: opts.onOptimistic,
|
|
351
|
+
commit: async () =>
|
|
352
|
+
await this.cfg.unary.send(
|
|
353
|
+
"/device/delete",
|
|
354
|
+
{ keys: keysArr },
|
|
355
|
+
deleteReqZ,
|
|
356
|
+
deleteResZ,
|
|
357
|
+
),
|
|
358
|
+
});
|
|
359
|
+
drop();
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
async rename(key: Key, name: string, opts: query.WriteOptions = {}): Promise<void> {
|
|
363
|
+
const dev = await this.retrieve(key);
|
|
364
|
+
const renamed = { ...dev, name };
|
|
365
|
+
await query.optimistic({
|
|
366
|
+
rollbacks: [this.store.set(renamed.key, stripStatus(renamed))],
|
|
367
|
+
onOptimistic: opts.onOptimistic,
|
|
368
|
+
commit: async () => {
|
|
369
|
+
await this.create(renamed);
|
|
370
|
+
},
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/** Subscribes to every device set delivered to the cache. Statuses excluded. */
|
|
375
|
+
onSet(handler: (device: Omit<Device, "status">) => void): destructor.Destructor {
|
|
376
|
+
return this.store.subscribe((event) => {
|
|
377
|
+
if (event.variant === "set") handler(event.value);
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/** Subscribes to every device delete delivered to the cache. */
|
|
382
|
+
onDelete(handler: (key: Key) => void): destructor.Destructor {
|
|
383
|
+
return this.store.subscribe((event) => {
|
|
384
|
+
if (event.variant === "delete") handler(event.key);
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
/** Rebuilds a cached device, attaching its cached status when requested. */
|
|
389
|
+
private compose(cached: Omit<Device, "status">, includeStatus: boolean): Device {
|
|
390
|
+
if (!includeStatus) return cached;
|
|
391
|
+
const st = this.cfg.statusStore.get(statusKey(cached.key));
|
|
392
|
+
if (st == null) return cached;
|
|
393
|
+
const parsed = statusZ.safeParse(st);
|
|
394
|
+
if (!parsed.success) return cached;
|
|
395
|
+
return { ...cached, status: parsed.data };
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
/** Writes fetched devices and their included statuses. */
|
|
399
|
+
private writeThrough(devices: Device[]): void {
|
|
400
|
+
this.store.set(devices.map(stripStatus));
|
|
401
|
+
devices.forEach(({ status: st }) => {
|
|
402
|
+
if (st != null) this.cfg.statusStore.set(st);
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
private async execRetrieve(
|
|
407
|
+
params: RetrieveParams,
|
|
408
|
+
schemas?: DeviceSchemas,
|
|
409
|
+
): Promise<Device[]> {
|
|
410
|
+
const res = await this.cfg.unary.send(
|
|
411
|
+
"/device/retrieve",
|
|
412
|
+
params,
|
|
413
|
+
retrieveParamsZ,
|
|
414
|
+
retrieveResZ(schemas),
|
|
183
415
|
);
|
|
416
|
+
return res.devices;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/** Fetches devices and writes their included statuses through the caches. */
|
|
420
|
+
private async fetchThrough(req: RetrieveRequest): Promise<Device[]> {
|
|
421
|
+
const devices = await this.execRetrieve(req);
|
|
422
|
+
this.writeThrough(devices);
|
|
423
|
+
return devices;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
private async fetchSingle(q: SingleQuery): Promise<Device> {
|
|
427
|
+
// A status-bearing hit needs both the record and its status cached.
|
|
428
|
+
if (q.includeStatus !== true) {
|
|
429
|
+
const cached = this.store.get(q.key);
|
|
430
|
+
if (cached != null) return cached;
|
|
431
|
+
}
|
|
432
|
+
const devices = await this.execRetrieve(q);
|
|
433
|
+
checkForMultipleOrNoResults("Device", q, devices, true);
|
|
434
|
+
this.writeThrough(devices);
|
|
435
|
+
return devices[0];
|
|
184
436
|
}
|
|
185
437
|
}
|
|
186
438
|
|
package/src/device/types.gen.ts
CHANGED
|
@@ -9,16 +9,20 @@
|
|
|
9
9
|
|
|
10
10
|
// Code generated by Oracle. DO NOT EDIT.
|
|
11
11
|
|
|
12
|
-
import { type optional, record
|
|
12
|
+
import { type optional, record } from "@synnaxlabs/x";
|
|
13
13
|
import { z } from "zod";
|
|
14
14
|
|
|
15
15
|
import { ontology } from "@/ontology";
|
|
16
16
|
import { rack } from "@/rack";
|
|
17
|
+
import { status } from "@/status";
|
|
17
18
|
|
|
18
19
|
export const keyZ = z.string();
|
|
19
20
|
export type Key = z.infer<typeof keyZ>;
|
|
20
21
|
|
|
21
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* StatusDetails contains device-specific status details identifying the device and its
|
|
24
|
+
* associated rack.
|
|
25
|
+
*/
|
|
22
26
|
export const statusDetailsZ = z.object({
|
|
23
27
|
/** rack is the key of the rack this device belongs to. */
|
|
24
28
|
rack: rack.keyZ,
|
|
@@ -47,13 +51,13 @@ export const deviceZ = <
|
|
|
47
51
|
>({ properties, make, model }: Partial<DeviceSchemas<Properties, Make, Model>> = {}) =>
|
|
48
52
|
z.object({
|
|
49
53
|
key: keyZ,
|
|
50
|
-
rack: rack.keyZ,
|
|
51
|
-
location: z.string().min(1, "
|
|
52
|
-
make: make ?? z.string().min(1, "
|
|
53
|
-
model: model ?? z.string().min(1, "
|
|
54
|
-
name: z.string().min(1, "
|
|
54
|
+
rack: rack.keyZ.refine((v) => v !== 0, "rack is required"),
|
|
55
|
+
location: z.string().min(1, "location is required"),
|
|
56
|
+
make: make ?? z.string().min(1, "make is required"),
|
|
57
|
+
model: model ?? z.string().min(1, "model is required"),
|
|
58
|
+
name: z.string().min(1, "name is required"),
|
|
55
59
|
configured: z.boolean().default(false),
|
|
56
|
-
properties: properties ?? record.
|
|
60
|
+
properties: properties ?? record.unknownZ().default(() => ({})),
|
|
57
61
|
status: statusZ.optional(),
|
|
58
62
|
parent: ontology.idZ.optional(),
|
|
59
63
|
});
|
|
@@ -73,28 +77,13 @@ export interface Device<
|
|
|
73
77
|
status?: Status;
|
|
74
78
|
parent?: ontology.ID;
|
|
75
79
|
}
|
|
76
|
-
|
|
77
|
-
export interface NewSchemas<
|
|
78
|
-
Properties extends z.ZodType<record.Unknown> = z.ZodType<record.Unknown>,
|
|
79
|
-
Make extends z.ZodType<string> = z.ZodType<string>,
|
|
80
|
-
Model extends z.ZodType<string> = z.ZodType<string>,
|
|
81
|
-
> {
|
|
82
|
-
properties: Properties;
|
|
83
|
-
make: Make;
|
|
84
|
-
model: Model;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
export const newZ = <
|
|
88
|
-
Properties extends z.ZodType<record.Unknown> = z.ZodType<record.Unknown>,
|
|
89
|
-
Make extends z.ZodType<string> = z.ZodString,
|
|
90
|
-
Model extends z.ZodType<string> = z.ZodString,
|
|
91
|
-
>({ properties, make, model }: Partial<NewSchemas<Properties, Make, Model>> = {}) =>
|
|
92
|
-
deviceZ({ properties, make, model }).partial({ key: true, configured: true });
|
|
93
80
|
export type New<
|
|
94
81
|
Properties extends z.ZodType<record.Unknown> = z.ZodType<record.Unknown>,
|
|
95
82
|
Make extends z.ZodType<string> = z.ZodString,
|
|
96
83
|
Model extends z.ZodType<string> = z.ZodString,
|
|
97
|
-
> = optional.Optional<Device<Properties, Make, Model>, "
|
|
84
|
+
> = optional.Optional<Omit<Device<Properties, Make, Model>, "status">, "configured"> & {
|
|
85
|
+
status?: status.New<typeof statusDetailsZ>;
|
|
86
|
+
};
|
|
98
87
|
|
|
99
88
|
export const ontologyID = ontology.createIDFactory<Key>("device");
|
|
100
89
|
export const TYPE_ONTOLOGY_ID = ontologyID("");
|
package/src/errors.ts
CHANGED
|
@@ -13,9 +13,7 @@ import { z } from "zod";
|
|
|
13
13
|
|
|
14
14
|
export class SynnaxError extends errors.createTyped("sy") {}
|
|
15
15
|
|
|
16
|
-
/**
|
|
17
|
-
* Raised when a validation error occurs.
|
|
18
|
-
*/
|
|
16
|
+
/** Raised when a validation error occurs. */
|
|
19
17
|
export class ValidationError extends SynnaxError.sub("validation") {}
|
|
20
18
|
|
|
21
19
|
export class PathError extends ValidationError.sub("path") {
|
|
@@ -37,25 +35,39 @@ export class PathError extends ValidationError.sub("path") {
|
|
|
37
35
|
const decoded = PathError.encodedSchema.parse(JSON.parse(payload.data));
|
|
38
36
|
return new PathError(decoded.path, errors.decode(decoded.error) as Error);
|
|
39
37
|
}
|
|
38
|
+
|
|
39
|
+
static matchExact(e: unknown): e is PathError {
|
|
40
|
+
return (
|
|
41
|
+
e != null &&
|
|
42
|
+
typeof e === "object" &&
|
|
43
|
+
"path" in e &&
|
|
44
|
+
"error" in e &&
|
|
45
|
+
"type" in e &&
|
|
46
|
+
typeof e.type === "string" &&
|
|
47
|
+
e.type === PathError.TYPE
|
|
48
|
+
);
|
|
49
|
+
}
|
|
40
50
|
}
|
|
41
51
|
|
|
42
|
-
/**
|
|
43
|
-
* AuthError is raised when an authentication error occurs.
|
|
44
|
-
*/
|
|
52
|
+
/** AuthError is raised when an authentication error occurs. */
|
|
45
53
|
export class AuthError extends SynnaxError.sub("auth") {}
|
|
46
54
|
|
|
47
|
-
/**
|
|
48
|
-
* InvalidTokenError is raised when an authentication token is invalid.
|
|
49
|
-
*/
|
|
55
|
+
/** InvalidTokenError is raised when an authentication token is invalid. */
|
|
50
56
|
export class InvalidTokenError extends AuthError.sub("invalid_token") {}
|
|
51
57
|
|
|
52
58
|
export class ExpiredTokenError extends AuthError.sub("expired_token") {}
|
|
53
59
|
|
|
54
|
-
|
|
60
|
+
/** Raised when the caller's policies do not permit the action. */
|
|
61
|
+
export class AccessDeniedError extends AuthError.sub("access_denied") {
|
|
62
|
+
toStatus() {
|
|
63
|
+
return {
|
|
64
|
+
message: "You do not have permission to do that",
|
|
65
|
+
description: this.message,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
55
69
|
|
|
56
|
-
/**
|
|
57
|
-
* UnexpectedError is raised when an unexpected error occurs.
|
|
58
|
-
*/
|
|
70
|
+
/** UnexpectedError is raised when an unexpected error occurs. */
|
|
59
71
|
export class UnexpectedError extends SynnaxError.sub("unexpected") {
|
|
60
72
|
constructor(message: string) {
|
|
61
73
|
super(`
|
|
@@ -68,18 +80,14 @@ export class UnexpectedError extends SynnaxError.sub("unexpected") {
|
|
|
68
80
|
}
|
|
69
81
|
}
|
|
70
82
|
|
|
71
|
-
/**
|
|
72
|
-
* QueryError is raised when a query error occurs.
|
|
73
|
-
*/
|
|
83
|
+
/** QueryError is raised when a query error occurs. */
|
|
74
84
|
export class QueryError extends SynnaxError.sub("query") {}
|
|
75
85
|
|
|
76
86
|
export class NotFoundError extends QueryError.sub("not_found") {}
|
|
77
87
|
|
|
78
88
|
export class MultipleFoundError extends QueryError.sub("multiple_results") {}
|
|
79
89
|
|
|
80
|
-
/**
|
|
81
|
-
* RouteError is raised when a routing error occurs.
|
|
82
|
-
*/
|
|
90
|
+
/** RouteError is raised when a routing error occurs. */
|
|
83
91
|
export class RouteError extends SynnaxError.sub("route") {
|
|
84
92
|
path: string;
|
|
85
93
|
|
|
@@ -100,8 +108,13 @@ export class DisconnectedError extends SynnaxError.sub("disconnected") {
|
|
|
100
108
|
}
|
|
101
109
|
|
|
102
110
|
/**
|
|
103
|
-
*
|
|
111
|
+
* Whether the error means the Core could not be reached: a request that failed on
|
|
112
|
+
* the wire, or one short-circuited while the connection is known unreachable.
|
|
104
113
|
*/
|
|
114
|
+
export const isConnectionError = (err: unknown): boolean =>
|
|
115
|
+
Unreachable.matches(err) || DisconnectedError.matches(err);
|
|
116
|
+
|
|
117
|
+
/** Raised when time-series data is not contiguous. */
|
|
105
118
|
export class ContiguityError extends SynnaxError.sub("contiguity") {}
|
|
106
119
|
|
|
107
120
|
const decode = (payload: errors.Payload): Error | null => {
|
|
@@ -116,6 +129,8 @@ const decode = (payload: errors.Payload): Error | null => {
|
|
|
116
129
|
return new InvalidTokenError(payload.data);
|
|
117
130
|
if (payload.type.startsWith(ExpiredTokenError.TYPE))
|
|
118
131
|
return new ExpiredTokenError(payload.data);
|
|
132
|
+
if (payload.type.startsWith(AccessDeniedError.TYPE))
|
|
133
|
+
return new AccessDeniedError(payload.data);
|
|
119
134
|
return new AuthError(payload.data);
|
|
120
135
|
}
|
|
121
136
|
|
|
@@ -142,8 +157,16 @@ const decode = (payload: errors.Payload): Error | null => {
|
|
|
142
157
|
return new UnexpectedError(payload.data);
|
|
143
158
|
};
|
|
144
159
|
|
|
145
|
-
const encode = ()
|
|
146
|
-
|
|
160
|
+
const encode: errors.Encoder = (error) => {
|
|
161
|
+
if (!error.type.startsWith(SynnaxError.TYPE)) return null;
|
|
162
|
+
if (PathError.matchExact(error)) {
|
|
163
|
+
const { path, error: cause } = error;
|
|
164
|
+
return {
|
|
165
|
+
type: PathError.TYPE,
|
|
166
|
+
data: JSON.stringify({ path, error: errors.encode(cause) }),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
return { type: error.type, data: error.message };
|
|
147
170
|
};
|
|
148
171
|
|
|
149
172
|
errors.register({ encode, decode });
|