@synnaxlabs/client 0.56.2 → 0.57.1
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-DDACDVZ-.js +14505 -0
- package/dist/client-DDACDVZ-.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 +91 -0
- package/dist/src/framer/cache/dynamic.d.ts.map +1 -0
- package/dist/src/framer/cache/reader.d.ts +57 -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 +39 -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 +39 -16
- 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 +340 -0
- package/src/framer/cache/reader.ts +231 -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 +108 -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 +19 -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
|
@@ -0,0 +1,108 @@
|
|
|
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
|
+
import { MultiSeries, type Series, type TimeRange } from "@synnaxlabs/x";
|
|
11
|
+
|
|
12
|
+
import { UnexpectedError } from "@/errors";
|
|
13
|
+
import { Dynamic, type DynamicProps } from "@/framer/cache/dynamic";
|
|
14
|
+
import {
|
|
15
|
+
type DirtyReadResult,
|
|
16
|
+
type GCMetrics,
|
|
17
|
+
Static,
|
|
18
|
+
type StaticProps,
|
|
19
|
+
} from "@/framer/cache/static";
|
|
20
|
+
|
|
21
|
+
export interface UnaryProps
|
|
22
|
+
extends StaticProps, Pick<DynamicProps, "dynamicBufferSize"> {}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Caches data for a single channel: a dynamic leading buffer for live writes backed
|
|
26
|
+
* by a static cache for flushed and historical data.
|
|
27
|
+
* @throws {UnexpectedError} from every method after close().
|
|
28
|
+
*/
|
|
29
|
+
export class Unary {
|
|
30
|
+
private closed: boolean = false;
|
|
31
|
+
private readonly static: Static;
|
|
32
|
+
private readonly dynamic: Dynamic;
|
|
33
|
+
|
|
34
|
+
constructor(props: UnaryProps) {
|
|
35
|
+
this.static = new Static(props);
|
|
36
|
+
this.dynamic = new Dynamic({
|
|
37
|
+
dynamicBufferSize: props.dynamicBufferSize,
|
|
38
|
+
transform: props.transform,
|
|
39
|
+
instrumentation: props.instrumentation,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
writeDynamic(series: MultiSeries): MultiSeries {
|
|
44
|
+
this.checkOpen("writeDynamic");
|
|
45
|
+
const { flushed, allocated } = this.dynamic.write(series);
|
|
46
|
+
// Flushed buffers stay streamed until a fetch replaces them.
|
|
47
|
+
if (flushed.length > 0) this.static.write(flushed, true);
|
|
48
|
+
return allocated;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
get leadingBuffer(): Series | null {
|
|
52
|
+
this.checkOpen("leadingBuffer");
|
|
53
|
+
return this.dynamic.leadingBuffer;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Flushes the live leading buffer into the static cache with its real end time,
|
|
58
|
+
* so reads treat the span after it as a gap to fetch. Call when streaming for
|
|
59
|
+
* the channel stops.
|
|
60
|
+
*/
|
|
61
|
+
flushDynamic(): void {
|
|
62
|
+
this.checkOpen("flushDynamic");
|
|
63
|
+
const flushed = this.dynamic.flush();
|
|
64
|
+
if (flushed != null && flushed.length > 0)
|
|
65
|
+
this.static.write(new MultiSeries([flushed]), true);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
writeStatic(series: MultiSeries): void {
|
|
69
|
+
this.checkOpen("writeStatic");
|
|
70
|
+
this.static.write(series);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Reads cached data overlapping the given time range. The result includes the live
|
|
75
|
+
* leading buffer when the data it actually holds overlaps the range, judged by the
|
|
76
|
+
* last stamped write rather than the buffer's provisional MAX end, so the buffer
|
|
77
|
+
* never leaks into reads of spans it has no samples for. It never claims coverage
|
|
78
|
+
* either: its samples carry provisional leading alignments that cannot pair with
|
|
79
|
+
* fetched data on another channel, so its span is still reported as a gap to fetch. A
|
|
80
|
+
* span may therefore return in both its streamed and fetched representation.
|
|
81
|
+
*/
|
|
82
|
+
read(tr: TimeRange): DirtyReadResult {
|
|
83
|
+
this.checkOpen("read");
|
|
84
|
+
const res = this.static.dirtyRead(tr);
|
|
85
|
+
const buf = this.dynamic.leadingBuffer;
|
|
86
|
+
const dataTr = this.dynamic.dataTimeRange;
|
|
87
|
+
if (buf == null || dataTr == null || buf.length === 0 || !dataTr.overlapsWith(tr))
|
|
88
|
+
return res;
|
|
89
|
+
res.series.push(buf);
|
|
90
|
+
return res;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
gc(): GCMetrics {
|
|
94
|
+
this.checkOpen("gc");
|
|
95
|
+
return this.static.gc();
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
close(): void {
|
|
99
|
+
this.closed = true;
|
|
100
|
+
this.dynamic.close();
|
|
101
|
+
this.static.close();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
private checkOpen(op: string): void {
|
|
105
|
+
if (this.closed)
|
|
106
|
+
throw new UnexpectedError(`${op} called on a closed telemetry cache entry`);
|
|
107
|
+
}
|
|
108
|
+
}
|
package/src/framer/client.ts
CHANGED
|
@@ -17,8 +17,11 @@ import {
|
|
|
17
17
|
TimeSpan,
|
|
18
18
|
} from "@synnaxlabs/x";
|
|
19
19
|
|
|
20
|
-
import { channel } from "@/channel";
|
|
20
|
+
import { type channel } from "@/channel";
|
|
21
|
+
import { analyzeParams } from "@/channel/payload";
|
|
22
|
+
import { type ChannelRetriever } from "@/framer/adapter";
|
|
21
23
|
import { Deleter } from "@/framer/deleter";
|
|
24
|
+
import { Feed, type FeedOptions } from "@/framer/feed";
|
|
22
25
|
import { Frame } from "@/framer/frame";
|
|
23
26
|
import { AUTO_SPAN, Iterator, type IteratorConfig } from "@/framer/iterator";
|
|
24
27
|
import { Reader, type ReadRequest } from "@/framer/reader";
|
|
@@ -29,27 +32,32 @@ import { ontology } from "@/ontology";
|
|
|
29
32
|
export const ontologyID = ontology.createIDFactory<string>("framer");
|
|
30
33
|
export const TYPE_ONTOLOGY_ID = ontologyID("");
|
|
31
34
|
|
|
35
|
+
/** Config for {@link Client}. */
|
|
36
|
+
export interface ClientConfig {
|
|
37
|
+
stream: WebSocketClient;
|
|
38
|
+
unary: UnaryClient;
|
|
39
|
+
retrieveChannels: ChannelRetriever;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Reads and writes telemetry on a Core. Reach it through `client.telem` rather than
|
|
44
|
+
* building one: `read` and `write` cover one-shot access, and the `open*` methods hand
|
|
45
|
+
* back a long-lived stream the caller must close.
|
|
46
|
+
*/
|
|
32
47
|
export class Client {
|
|
33
|
-
private readonly
|
|
34
|
-
private readonly retriever: channel.Retriever;
|
|
48
|
+
private readonly cfg: ClientConfig;
|
|
35
49
|
private readonly deleter: Deleter;
|
|
36
50
|
private readonly reader: Reader;
|
|
37
51
|
|
|
38
|
-
constructor(
|
|
39
|
-
stream
|
|
40
|
-
|
|
41
|
-
retriever: channel.Retriever,
|
|
42
|
-
) {
|
|
43
|
-
this.streamClient = stream;
|
|
44
|
-
this.retriever = retriever;
|
|
52
|
+
constructor(cfg: ClientConfig) {
|
|
53
|
+
const { stream, unary, retrieveChannels } = cfg;
|
|
54
|
+
this.cfg = cfg;
|
|
45
55
|
this.deleter = new Deleter(unary);
|
|
46
|
-
this.reader = new Reader(
|
|
56
|
+
this.reader = new Reader(retrieveChannels, stream);
|
|
47
57
|
}
|
|
48
58
|
|
|
49
59
|
/**
|
|
50
60
|
* Opens a new iterator over the given channels within the provided time range.
|
|
51
|
-
*
|
|
52
|
-
* @param tr - A time range to iterate over.
|
|
53
61
|
* @param channels - A list of channels (by name or key) to iterate over.
|
|
54
62
|
* @param opts - see {@link IteratorConfig}
|
|
55
63
|
* @returns a new {@link Iterator}.
|
|
@@ -59,33 +67,47 @@ export class Client {
|
|
|
59
67
|
channels: channel.Params,
|
|
60
68
|
opts?: IteratorConfig,
|
|
61
69
|
): Promise<Iterator> {
|
|
62
|
-
return await Iterator._open(
|
|
70
|
+
return await Iterator._open(
|
|
71
|
+
tr,
|
|
72
|
+
channels,
|
|
73
|
+
this.cfg.retrieveChannels,
|
|
74
|
+
this.cfg.stream,
|
|
75
|
+
opts,
|
|
76
|
+
);
|
|
63
77
|
}
|
|
64
78
|
|
|
65
79
|
/**
|
|
66
80
|
* Opens a new writer on the given channels.
|
|
67
|
-
*
|
|
68
81
|
* @param config - The configuration for the created writer, see documentation for
|
|
69
82
|
* writerConfig for more detail.
|
|
70
83
|
* @returns a new {@link Writer}.
|
|
71
84
|
*/
|
|
72
85
|
async openWriter(config: WriterConfig): Promise<Writer> {
|
|
73
|
-
return await Writer._open(this.
|
|
86
|
+
return await Writer._open(this.cfg.retrieveChannels, this.cfg.stream, config);
|
|
74
87
|
}
|
|
75
88
|
|
|
76
89
|
/**
|
|
77
90
|
* Opens a new streamer with the provided configuration.
|
|
78
|
-
*
|
|
79
|
-
* @param config - Configuration parameters for the streamer.
|
|
80
91
|
* @param config.channels - The channels to stream values from. Can be a key, name,
|
|
81
92
|
* list of keys, or list of names.
|
|
82
|
-
* @param config.from - If this parameter is set and is before the current time,
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
93
|
+
* @param config.from - If this parameter is set and is before the current time, the
|
|
94
|
+
* streamer will first read and receive historical data from before this point and
|
|
95
|
+
* then will start reading new values.
|
|
86
96
|
*/
|
|
87
97
|
async openStreamer(config: StreamerConfig): Promise<Streamer> {
|
|
88
|
-
return await openStreamer(this.
|
|
98
|
+
return await openStreamer(this.cfg.retrieveChannels, this.cfg.stream, config);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Opens a feed over this client. The underlying stream opens on first demand;
|
|
103
|
+
* the caller must close the feed.
|
|
104
|
+
*/
|
|
105
|
+
openFeed(options: FeedOptions = {}): Feed {
|
|
106
|
+
return new Feed({
|
|
107
|
+
...options,
|
|
108
|
+
readRemote: async (tr, keys) => await this.read(tr, keys),
|
|
109
|
+
openStreamer: async (config) => await this.openStreamer(config),
|
|
110
|
+
});
|
|
89
111
|
}
|
|
90
112
|
|
|
91
113
|
async write(
|
|
@@ -106,13 +128,13 @@ export class Client {
|
|
|
106
128
|
): Promise<void>;
|
|
107
129
|
|
|
108
130
|
/**
|
|
109
|
-
* Writes telemetry to the given
|
|
131
|
+
* Writes telemetry to the given channels, starting at the given timestamp. It commits
|
|
132
|
+
* and closes before it returns, so the samples land on disk.
|
|
110
133
|
*
|
|
111
|
-
* @param
|
|
112
|
-
* @
|
|
113
|
-
* @
|
|
114
|
-
* data type
|
|
115
|
-
* @throws if the channel does not exist.
|
|
134
|
+
* @param start - The timestamp of the first sample.
|
|
135
|
+
* @throws {NotFoundError} if a channel does not exist.
|
|
136
|
+
* @throws {UnauthorizedError} if another writer holds control of a channel.
|
|
137
|
+
* @throws {ValidationError} if the data type does not match the channel's.
|
|
116
138
|
*/
|
|
117
139
|
async write(
|
|
118
140
|
start: CrudeTimeStamp,
|
|
@@ -142,6 +164,12 @@ export class Client {
|
|
|
142
164
|
await w.close();
|
|
143
165
|
}
|
|
144
166
|
|
|
167
|
+
/**
|
|
168
|
+
* Reads every sample in the time range from the given channels.
|
|
169
|
+
*
|
|
170
|
+
* @returns a {@link MultiSeries} for one channel, or a {@link Frame} for several.
|
|
171
|
+
* @throws {NotFoundError} if a channel does not exist.
|
|
172
|
+
*/
|
|
145
173
|
async read(
|
|
146
174
|
tr: CrudeTimeRange,
|
|
147
175
|
channel: channel.Key | channel.Name,
|
|
@@ -153,7 +181,7 @@ export class Client {
|
|
|
153
181
|
channels?: channel.Params,
|
|
154
182
|
): Promise<MultiSeries | Frame | ReadableStream<Uint8Array>> {
|
|
155
183
|
if (!("start" in tr)) return await this.reader.read(tr);
|
|
156
|
-
const { single } =
|
|
184
|
+
const { single } = analyzeParams(channels!);
|
|
157
185
|
const fr = await this.readFrame(tr, channels!);
|
|
158
186
|
if (single) return fr.get(channels as channel.Key | channel.Name);
|
|
159
187
|
return fr;
|
|
@@ -181,22 +209,18 @@ export class Client {
|
|
|
181
209
|
async readLatest(channels: channel.Params, n: number): Promise<Frame>;
|
|
182
210
|
|
|
183
211
|
/**
|
|
184
|
-
* Reads the latest n samples from the given channel(s).
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
* exist.
|
|
188
|
-
*
|
|
189
|
-
* @param channels - A single channel key/name or an array of channel
|
|
190
|
-
* keys/names.
|
|
212
|
+
* Reads the latest n samples from the given channel(s). If fewer than n samples are
|
|
213
|
+
* available, returns only the samples that exist.
|
|
214
|
+
* @param channels - A single channel key/name or an array of channel keys/names.
|
|
191
215
|
* @param n - The maximum number of samples to read. Defaults to 1.
|
|
192
|
-
* @returns A MultiSeries when a single channel is provided, or a Frame when
|
|
193
|
-
*
|
|
216
|
+
* @returns A MultiSeries when a single channel is provided, or a Frame when multiple
|
|
217
|
+
* channels are provided.
|
|
194
218
|
*/
|
|
195
219
|
async readLatest(
|
|
196
220
|
channels: channel.Params,
|
|
197
221
|
n: number = 1,
|
|
198
222
|
): Promise<MultiSeries | Frame> {
|
|
199
|
-
const { single } =
|
|
223
|
+
const { single } = analyzeParams(channels);
|
|
200
224
|
const fr = await this.readLatestNFrame(channels, n);
|
|
201
225
|
if (single) return fr.get(channels as channel.Key | channel.Name);
|
|
202
226
|
return fr;
|
|
@@ -216,11 +240,15 @@ export class Client {
|
|
|
216
240
|
return frame;
|
|
217
241
|
}
|
|
218
242
|
|
|
243
|
+
/**
|
|
244
|
+
* Deletes every sample in the time range from the given channels. Deletion is
|
|
245
|
+
* permanent.
|
|
246
|
+
*/
|
|
219
247
|
async delete(channels: channel.Params, timeRange: CrudeTimeRange): Promise<void> {
|
|
220
|
-
const { normalized, variant } =
|
|
248
|
+
const { normalized, variant } = analyzeParams(channels);
|
|
221
249
|
const bounds = new TimeRange(timeRange);
|
|
222
250
|
if (variant === "keys")
|
|
223
|
-
return await this.deleter.delete({ keys: normalized
|
|
224
|
-
return await this.deleter.delete({ names: normalized
|
|
251
|
+
return await this.deleter.delete({ keys: normalized, bounds });
|
|
252
|
+
return await this.deleter.delete({ names: normalized, bounds });
|
|
225
253
|
}
|
|
226
254
|
}
|
package/src/framer/codec.ts
CHANGED
|
@@ -24,22 +24,51 @@ import { type StreamerResponse } from "@/framer/streamer";
|
|
|
24
24
|
import { IteratorResponseVariant, WriterCommand } from "@/framer/types.gen";
|
|
25
25
|
import { type WriteRequest } from "@/framer/writer";
|
|
26
26
|
|
|
27
|
+
const BITS_PER_BYTE = 8;
|
|
28
|
+
|
|
29
|
+
const bitPackedByteCount = (nSamples: number): number =>
|
|
30
|
+
Math.ceil(nSamples / BITS_PER_BYTE);
|
|
31
|
+
|
|
27
32
|
const seriesPldLength = (series: SeriesPayload): number =>
|
|
28
33
|
series.data.byteLength / series.dataType.density.valueOf();
|
|
29
34
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
const seriesWireByteLength = (series: SeriesPayload): number => {
|
|
36
|
+
if (series.dataType.equals(DataType.BOOLEAN))
|
|
37
|
+
return bitPackedByteCount(seriesPldLength(series));
|
|
38
|
+
return series.data.byteLength;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const packBoolBits = (src: ArrayBuffer | Uint8Array): Uint8Array => {
|
|
42
|
+
const srcBytes = src instanceof Uint8Array ? src : new Uint8Array(src);
|
|
43
|
+
const dst = new Uint8Array(bitPackedByteCount(srcBytes.length));
|
|
44
|
+
for (let i = 0; i < srcBytes.length; i++)
|
|
45
|
+
if (srcBytes[i] !== 0)
|
|
46
|
+
dst[Math.floor(i / BITS_PER_BYTE)] |= 1 << (i % BITS_PER_BYTE);
|
|
47
|
+
return dst;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const unpackBoolBits = (src: Uint8Array, sampleCount: number): ArrayBuffer => {
|
|
51
|
+
const buf = new ArrayBuffer(sampleCount);
|
|
52
|
+
const dst = new Uint8Array(buf);
|
|
53
|
+
for (let i = 0; i < sampleCount; i++)
|
|
54
|
+
dst[i] = (src[Math.floor(i / BITS_PER_BYTE)] >> (i % BITS_PER_BYTE)) & 1;
|
|
55
|
+
return buf;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/** Orders channel keys the way the Core does. The default comparator sorts numbers as
|
|
59
|
+
* strings and diverges as soon as two keys differ in decimal width. */
|
|
60
|
+
const compareKeys = (a: channel.Key, b: channel.Key): number => a - b;
|
|
33
61
|
|
|
34
62
|
const sortFramePayloadByKey = (framePayload: Payload): void => {
|
|
35
63
|
const { keys, series } = framePayload;
|
|
36
|
-
keys.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
64
|
+
if (keys.every((k, i) => i === 0 || keys[i - 1] <= k)) return;
|
|
65
|
+
const order = keys.map((_, i) => i).sort((a, b) => compareKeys(keys[a], keys[b]));
|
|
66
|
+
const orderedKeys = order.map((i) => keys[i]);
|
|
67
|
+
const orderedSeries = order.map((i) => series[i]);
|
|
68
|
+
for (let i = 0; i < keys.length; i++) {
|
|
69
|
+
keys[i] = orderedKeys[i];
|
|
70
|
+
series[i] = orderedSeries[i];
|
|
71
|
+
}
|
|
43
72
|
};
|
|
44
73
|
|
|
45
74
|
const ZERO_ALIGNMENTS_FLAG_POS = 5;
|
|
@@ -75,7 +104,7 @@ export class Codec {
|
|
|
75
104
|
update(keys: channel.Key[], dataTypes: DataType[]): void {
|
|
76
105
|
this.seqNum++;
|
|
77
106
|
const state = {
|
|
78
|
-
keys,
|
|
107
|
+
keys: [...keys],
|
|
79
108
|
keyDataTypes: new Map(),
|
|
80
109
|
hasVariableDataTypes: false,
|
|
81
110
|
};
|
|
@@ -84,7 +113,9 @@ export class Codec {
|
|
|
84
113
|
state.keyDataTypes.set(k, dt);
|
|
85
114
|
if (dt.isVariable) state.hasVariableDataTypes = true;
|
|
86
115
|
});
|
|
87
|
-
|
|
116
|
+
// Encoder and decoder walk this order positionally when a frame carries every
|
|
117
|
+
// channel, so it has to match the Core's.
|
|
118
|
+
state.keys.sort(compareKeys);
|
|
88
119
|
this.states.set(this.seqNum, state);
|
|
89
120
|
this.currState = state;
|
|
90
121
|
}
|
|
@@ -133,7 +164,7 @@ export class Codec {
|
|
|
133
164
|
`Series data type of ${series.dataType.toString()} does not match the data type of ${dt.toString()} for channel ${key}`,
|
|
134
165
|
);
|
|
135
166
|
|
|
136
|
-
byteArraySize += series
|
|
167
|
+
byteArraySize += seriesWireByteLength(series);
|
|
137
168
|
if (currDataSize === -1) {
|
|
138
169
|
currDataSize = pldLength;
|
|
139
170
|
startTime = series.timeRange?.start;
|
|
@@ -208,8 +239,11 @@ export class Codec {
|
|
|
208
239
|
view.setUint32(offset, seriesLengthOrSize, true);
|
|
209
240
|
offset += DATA_LENGTH_SIZE;
|
|
210
241
|
}
|
|
211
|
-
|
|
212
|
-
|
|
242
|
+
const bytes = series.dataType.equals(DataType.BOOLEAN)
|
|
243
|
+
? packBoolBits(series.data)
|
|
244
|
+
: new Uint8Array(series.data);
|
|
245
|
+
buffer.set(bytes, offset);
|
|
246
|
+
offset += bytes.byteLength;
|
|
213
247
|
if (!equalTimeRangesFlag && !timeRangesZeroFlag) {
|
|
214
248
|
view.setBigUint64(offset, series.timeRange?.start.valueOf() ?? 0n, true);
|
|
215
249
|
offset += TIMESTAMP_SIZE;
|
|
@@ -281,12 +315,15 @@ export class Codec {
|
|
|
281
315
|
|
|
282
316
|
let dataByteLength = currSize;
|
|
283
317
|
if (!dataType.isVariable) dataByteLength *= dataType.density.valueOf();
|
|
284
|
-
|
|
318
|
+
const isBool = dataType.equals(DataType.BOOLEAN);
|
|
319
|
+
const wireByteLength = isBool ? bitPackedByteCount(currSize) : dataByteLength;
|
|
320
|
+
if (index + wireByteLength > view.byteLength) return false;
|
|
321
|
+
const wireBytes = src.slice(index, index + wireByteLength);
|
|
285
322
|
const currSeries: SeriesPayload = {
|
|
286
323
|
dataType,
|
|
287
|
-
data:
|
|
324
|
+
data: isBool ? unpackBoolBits(wireBytes, currSize) : wireBytes.buffer,
|
|
288
325
|
};
|
|
289
|
-
index +=
|
|
326
|
+
index += wireByteLength;
|
|
290
327
|
if (!equalTimeRangesFlag && !timeRangesZeroFlag) {
|
|
291
328
|
if (index + TIMESTAMP_SIZE * 2 > view.byteLength) return false;
|
|
292
329
|
const start = view.getBigUint64(index, true);
|
package/src/framer/deleter.ts
CHANGED
|
@@ -11,21 +11,19 @@ import { type UnaryClient } from "@synnaxlabs/freighter";
|
|
|
11
11
|
import { TimeRange } from "@synnaxlabs/x";
|
|
12
12
|
import { z } from "zod";
|
|
13
13
|
|
|
14
|
-
import {
|
|
14
|
+
import { keyZ, nameZ } from "@/channel/types.gen";
|
|
15
15
|
|
|
16
16
|
const reqZ = z.object({
|
|
17
|
-
keys:
|
|
17
|
+
keys: keyZ.array().optional(),
|
|
18
18
|
bounds: TimeRange.z,
|
|
19
|
-
names:
|
|
19
|
+
names: nameZ.array().optional(),
|
|
20
20
|
});
|
|
21
21
|
interface Request extends z.infer<typeof reqZ> {}
|
|
22
22
|
|
|
23
23
|
const resZ = z.object({});
|
|
24
24
|
|
|
25
|
+
/** Deletes a time range of telemetry from a Core. Reach it through `client.telem`. */
|
|
25
26
|
export class Deleter {
|
|
26
|
-
/*
|
|
27
|
-
Deleter is used to delete a time range of telemetry from the data engine.
|
|
28
|
-
*/
|
|
29
27
|
private readonly client: UnaryClient;
|
|
30
28
|
|
|
31
29
|
constructor(client: UnaryClient) {
|
package/src/framer/external.ts
CHANGED
|
@@ -7,8 +7,18 @@
|
|
|
7
7
|
// License, use of this software will be governed by the Apache License, Version 2.0,
|
|
8
8
|
// included in the file licenses/APL.txt.
|
|
9
9
|
|
|
10
|
+
export { type ChannelRetriever } from "@/framer/adapter";
|
|
11
|
+
export { type RemoteReader } from "@/framer/cache/reader";
|
|
12
|
+
export {
|
|
13
|
+
type StatusHandler,
|
|
14
|
+
type StreamHandler,
|
|
15
|
+
type Subscription,
|
|
16
|
+
} from "@/framer/cache/streamer";
|
|
17
|
+
export { IDENTITY_TRANSFORM, type Transform } from "@/framer/cache/transform";
|
|
10
18
|
export * from "@/framer/client";
|
|
19
|
+
export * from "@/framer/feed";
|
|
11
20
|
export * from "@/framer/frame";
|
|
21
|
+
export * from "@/framer/hardened";
|
|
12
22
|
export * from "@/framer/iterator";
|
|
13
23
|
export * from "@/framer/reader";
|
|
14
24
|
export * from "@/framer/streamer";
|
|
@@ -0,0 +1,108 @@
|
|
|
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
|
+
import { type MultiSeries, type TimeRange } from "@synnaxlabs/x";
|
|
11
|
+
|
|
12
|
+
import { type channel } from "@/channel";
|
|
13
|
+
import { Cache, type CacheProps } from "@/framer/cache/cache";
|
|
14
|
+
import { Reader, type ReaderProps } from "@/framer/cache/reader";
|
|
15
|
+
import {
|
|
16
|
+
MultiplexedStreamer,
|
|
17
|
+
type MultiplexedStreamerProps,
|
|
18
|
+
type StreamHandler,
|
|
19
|
+
type Subscription,
|
|
20
|
+
} from "@/framer/cache/streamer";
|
|
21
|
+
import { HardenedStreamer } from "@/framer/hardened";
|
|
22
|
+
import { type StreamOpener } from "@/framer/streamer";
|
|
23
|
+
|
|
24
|
+
/** Props for {@link Feed}, including the transport it reads and streams through. */
|
|
25
|
+
export interface FeedProps
|
|
26
|
+
extends
|
|
27
|
+
CacheProps,
|
|
28
|
+
Omit<ReaderProps, "cache">,
|
|
29
|
+
Omit<MultiplexedStreamerProps, "cache" | "openStreamer"> {
|
|
30
|
+
openStreamer: StreamOpener;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** The part of {@link FeedProps} a caller sets. The client supplies the rest. */
|
|
34
|
+
export interface FeedOptions extends Omit<FeedProps, "readRemote" | "openStreamer"> {}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Cached, demand-managed access to channel telemetry: durable streaming
|
|
38
|
+
* subscriptions multiplexed onto one frame stream, and batched historical reads
|
|
39
|
+
* served through per-channel rolling buffers.
|
|
40
|
+
*/
|
|
41
|
+
export class Feed {
|
|
42
|
+
private readonly cache: Cache;
|
|
43
|
+
private readonly reader: Reader;
|
|
44
|
+
private readonly streamer: MultiplexedStreamer;
|
|
45
|
+
|
|
46
|
+
constructor(props: FeedProps) {
|
|
47
|
+
const {
|
|
48
|
+
readRemote,
|
|
49
|
+
openStreamer,
|
|
50
|
+
transform,
|
|
51
|
+
instrumentation,
|
|
52
|
+
dynamicBufferSize,
|
|
53
|
+
gcInterval,
|
|
54
|
+
staleEntryThreshold,
|
|
55
|
+
removalDelay,
|
|
56
|
+
breaker,
|
|
57
|
+
batchDebounce,
|
|
58
|
+
overlapThreshold,
|
|
59
|
+
} = props;
|
|
60
|
+
this.cache = new Cache({
|
|
61
|
+
transform,
|
|
62
|
+
dynamicBufferSize,
|
|
63
|
+
gcInterval,
|
|
64
|
+
staleEntryThreshold,
|
|
65
|
+
instrumentation: instrumentation?.child("cache"),
|
|
66
|
+
});
|
|
67
|
+
this.reader = new Reader({
|
|
68
|
+
readRemote,
|
|
69
|
+
cache: this.cache,
|
|
70
|
+
batchDebounce,
|
|
71
|
+
overlapThreshold,
|
|
72
|
+
});
|
|
73
|
+
this.streamer = new MultiplexedStreamer({
|
|
74
|
+
cache: this.cache,
|
|
75
|
+
openStreamer: async (config, { onReopen, onDrop }) =>
|
|
76
|
+
await HardenedStreamer.open(openStreamer, config, breaker, onReopen, onDrop),
|
|
77
|
+
removalDelay,
|
|
78
|
+
breaker,
|
|
79
|
+
instrumentation: instrumentation?.child("streamer"),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Registers durable streaming demand for the given keys. Returns synchronously;
|
|
85
|
+
* convergence failures surface as per-key statuses, never as rejections. The
|
|
86
|
+
* handler's first call precedes registration, so a throw from it leaves no
|
|
87
|
+
* subscription behind.
|
|
88
|
+
* @throws {UnexpectedError} if the feed has been closed.
|
|
89
|
+
*/
|
|
90
|
+
stream(handler: StreamHandler, keys: channel.Key[]): Subscription {
|
|
91
|
+
return this.streamer.stream(handler, keys);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Reads the given time range for the given channel, serving from the cache and
|
|
96
|
+
* gap-filling from the cluster.
|
|
97
|
+
*/
|
|
98
|
+
async read(tr: TimeRange, key: channel.Key): Promise<MultiSeries> {
|
|
99
|
+
return await this.reader.read(tr, key);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** Closes the feed, releasing the stream and all cached buffers. */
|
|
103
|
+
async close(): Promise<void> {
|
|
104
|
+
await this.streamer.close();
|
|
105
|
+
await this.reader.close();
|
|
106
|
+
this.cache.close();
|
|
107
|
+
}
|
|
108
|
+
}
|