reactor-effect-client 0.7.1 → 0.8.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/NOTICE +7 -2
- package/README.md +103 -141
- package/dist/Coordinator.d.ts +382 -0
- package/dist/Coordinator.d.ts.map +1 -0
- package/dist/Coordinator.js +732 -0
- package/dist/Coordinator.js.map +1 -0
- package/dist/H3.d.ts +159 -0
- package/dist/H3.d.ts.map +1 -0
- package/dist/H3.js +21 -0
- package/dist/H3.js.map +1 -0
- package/dist/H3Source.d.ts +93 -0
- package/dist/H3Source.d.ts.map +1 -0
- package/dist/H3Source.js +401 -0
- package/dist/H3Source.js.map +1 -0
- package/dist/LocalSource.d.ts +68 -0
- package/dist/LocalSource.d.ts.map +1 -0
- package/dist/LocalSource.js +354 -0
- package/dist/LocalSource.js.map +1 -0
- package/dist/Media.d.ts +106 -0
- package/dist/Media.d.ts.map +1 -0
- package/dist/Media.js +16 -0
- package/dist/Media.js.map +1 -0
- package/dist/Peer.d.ts +134 -0
- package/dist/Peer.d.ts.map +1 -0
- package/dist/Peer.js +57 -0
- package/dist/Peer.js.map +1 -0
- package/dist/Playout.d.ts +724 -0
- package/dist/Playout.d.ts.map +1 -0
- package/dist/Playout.js +28 -0
- package/dist/Playout.js.map +1 -0
- package/dist/Reactor.d.ts +135 -0
- package/dist/Reactor.d.ts.map +1 -0
- package/dist/Reactor.js +158 -0
- package/dist/Reactor.js.map +1 -0
- package/dist/ReactorError.d.ts +331 -0
- package/dist/ReactorError.d.ts.map +1 -0
- package/dist/ReactorError.js +316 -0
- package/dist/ReactorError.js.map +1 -0
- package/dist/ReactorTest.d.ts +383 -0
- package/dist/ReactorTest.d.ts.map +1 -0
- package/dist/ReactorTest.js +317 -0
- package/dist/ReactorTest.js.map +1 -0
- package/dist/Session.d.ts +314 -0
- package/dist/Session.d.ts.map +1 -0
- package/dist/Session.js +51 -0
- package/dist/Session.js.map +1 -0
- package/dist/index.d.ts +12 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -11
- package/dist/index.js.map +1 -1
- package/dist/internal/correlator.d.ts +46 -0
- package/dist/internal/correlator.d.ts.map +1 -0
- package/dist/internal/correlator.js +150 -0
- package/dist/internal/correlator.js.map +1 -0
- package/dist/internal/deadline.d.ts +24 -0
- package/dist/internal/deadline.d.ts.map +1 -0
- package/dist/internal/deadline.js +44 -0
- package/dist/internal/deadline.js.map +1 -0
- package/dist/{h3/_internal/contracts.d.ts → internal/h3/commands.d.ts} +39 -33
- package/dist/internal/h3/commands.d.ts.map +1 -0
- package/dist/internal/h3/commands.js +128 -0
- package/dist/internal/h3/commands.js.map +1 -0
- package/dist/{h3 → internal/h3}/messages.d.ts +16 -11
- package/dist/internal/h3/messages.d.ts.map +1 -0
- package/dist/{h3 → internal/h3}/messages.js +19 -31
- package/dist/internal/h3/messages.js.map +1 -0
- package/dist/internal/h3/operations.d.ts +145 -0
- package/dist/internal/h3/operations.d.ts.map +1 -0
- package/dist/internal/h3/operations.js +284 -0
- package/dist/internal/h3/operations.js.map +1 -0
- package/dist/{h3 → internal/h3}/profile.d.ts +63 -65
- package/dist/internal/h3/profile.d.ts.map +1 -0
- package/dist/{h3 → internal/h3}/profile.js +39 -39
- package/dist/internal/h3/profile.js.map +1 -0
- package/dist/internal/h3/provider.d.ts +14 -0
- package/dist/internal/h3/provider.d.ts.map +1 -0
- package/dist/internal/h3/provider.js +672 -0
- package/dist/internal/h3/provider.js.map +1 -0
- package/dist/internal/h3/references.d.ts +68 -0
- package/dist/internal/h3/references.d.ts.map +1 -0
- package/dist/internal/h3/references.js +339 -0
- package/dist/internal/h3/references.js.map +1 -0
- package/dist/internal/h3/request.d.ts +56 -0
- package/dist/internal/h3/request.d.ts.map +1 -0
- package/dist/internal/h3/request.js +70 -0
- package/dist/internal/h3/request.js.map +1 -0
- package/dist/internal/h3/state.d.ts +120 -0
- package/dist/internal/h3/state.d.ts.map +1 -0
- package/dist/internal/h3/state.js +270 -0
- package/dist/internal/h3/state.js.map +1 -0
- package/dist/{Submission.d.ts → internal/h3/submission.d.ts} +1 -3
- package/dist/internal/h3/submission.d.ts.map +1 -0
- package/dist/{Submission.js → internal/h3/submission.js} +1 -9
- package/dist/internal/h3/submission.js.map +1 -0
- package/dist/internal/hub.d.ts +32 -0
- package/dist/internal/hub.d.ts.map +1 -0
- package/dist/internal/hub.js +92 -0
- package/dist/internal/hub.js.map +1 -0
- package/dist/internal/playout/errors.d.ts +51 -0
- package/dist/internal/playout/errors.d.ts.map +1 -0
- package/dist/internal/playout/errors.js +40 -0
- package/dist/internal/playout/errors.js.map +1 -0
- package/dist/internal/playout/policy.d.ts +559 -0
- package/dist/internal/playout/policy.d.ts.map +1 -0
- package/dist/internal/playout/policy.js +2338 -0
- package/dist/internal/playout/policy.js.map +1 -0
- package/dist/internal/playout/runtime.d.ts +28 -0
- package/dist/internal/playout/runtime.d.ts.map +1 -0
- package/dist/internal/playout/runtime.js +766 -0
- package/dist/internal/playout/runtime.js.map +1 -0
- package/dist/internal/playout/tag.d.ts +14 -0
- package/dist/internal/playout/tag.d.ts.map +1 -0
- package/dist/internal/playout/tag.js +43 -0
- package/dist/internal/playout/tag.js.map +1 -0
- package/dist/internal/proto/reactor_wire/v1/common_pb.d.ts +55 -0
- package/dist/internal/proto/reactor_wire/v1/common_pb.d.ts.map +1 -0
- package/dist/internal/proto/reactor_wire/v1/common_pb.js +42 -0
- package/dist/internal/proto/reactor_wire/v1/common_pb.js.map +1 -0
- package/dist/internal/proto/reactor_wire/v1/control_pb.d.ts +160 -0
- package/dist/internal/proto/reactor_wire/v1/control_pb.d.ts.map +1 -0
- package/dist/internal/proto/reactor_wire/v1/control_pb.js +21 -0
- package/dist/internal/proto/reactor_wire/v1/control_pb.js.map +1 -0
- package/dist/internal/proto/reactor_wire/v1/data_pb.d.ts +89 -0
- package/dist/internal/proto/reactor_wire/v1/data_pb.d.ts.map +1 -0
- package/dist/internal/proto/reactor_wire/v1/data_pb.js +20 -0
- package/dist/internal/proto/reactor_wire/v1/data_pb.js.map +1 -0
- package/dist/internal/proto/reactor_wire/v1/model_pb.d.ts +85 -0
- package/dist/internal/proto/reactor_wire/v1/model_pb.d.ts.map +1 -0
- package/dist/internal/proto/reactor_wire/v1/model_pb.js +24 -0
- package/dist/internal/proto/reactor_wire/v1/model_pb.js.map +1 -0
- package/dist/internal/proto/reactor_wire/v1/platform_pb.d.ts +190 -0
- package/dist/internal/proto/reactor_wire/v1/platform_pb.d.ts.map +1 -0
- package/dist/internal/proto/reactor_wire/v1/platform_pb.js +54 -0
- package/dist/internal/proto/reactor_wire/v1/platform_pb.js.map +1 -0
- package/dist/internal/proto/reactor_wire/v1/track_pb.d.ts +88 -0
- package/dist/internal/proto/reactor_wire/v1/track_pb.d.ts.map +1 -0
- package/dist/internal/proto/reactor_wire/v1/track_pb.js +33 -0
- package/dist/internal/proto/reactor_wire/v1/track_pb.js.map +1 -0
- package/dist/internal/queue.d.ts +4 -0
- package/dist/internal/queue.d.ts.map +1 -0
- package/dist/{_internal → internal}/queue.js +0 -9
- package/dist/internal/queue.js.map +1 -0
- package/dist/internal/reactorTest/coordinator.d.ts +5 -0
- package/dist/internal/reactorTest/coordinator.d.ts.map +1 -0
- package/dist/internal/reactorTest/coordinator.js +178 -0
- package/dist/internal/reactorTest/coordinator.js.map +1 -0
- package/dist/internal/reactorTest/faults.d.ts +172 -0
- package/dist/internal/reactorTest/faults.d.ts.map +1 -0
- package/dist/internal/reactorTest/faults.js +23 -0
- package/dist/internal/reactorTest/faults.js.map +1 -0
- package/dist/internal/reactorTest/h3.d.ts +431 -0
- package/dist/internal/reactorTest/h3.d.ts.map +1 -0
- package/dist/internal/reactorTest/h3.js +625 -0
- package/dist/internal/reactorTest/h3.js.map +1 -0
- package/dist/internal/reactorTest/media.d.ts +22 -0
- package/dist/internal/reactorTest/media.d.ts.map +1 -0
- package/dist/internal/reactorTest/media.js +34 -0
- package/dist/internal/reactorTest/media.js.map +1 -0
- package/dist/internal/reactorTest/peer.d.ts +318 -0
- package/dist/internal/reactorTest/peer.d.ts.map +1 -0
- package/dist/internal/reactorTest/peer.js +206 -0
- package/dist/internal/reactorTest/peer.js.map +1 -0
- package/dist/internal/reactorTest/playout.d.ts +34 -0
- package/dist/internal/reactorTest/playout.d.ts.map +1 -0
- package/dist/internal/reactorTest/playout.js +340 -0
- package/dist/internal/reactorTest/playout.js.map +1 -0
- package/dist/internal/reactorTest/references.d.ts +25 -0
- package/dist/internal/reactorTest/references.d.ts.map +1 -0
- package/dist/{testing/Png.js → internal/reactorTest/references.js} +50 -12
- package/dist/internal/reactorTest/references.js.map +1 -0
- package/dist/internal/reactorTest/sessions.d.ts +364 -0
- package/dist/internal/reactorTest/sessions.d.ts.map +1 -0
- package/dist/internal/reactorTest/sessions.js +592 -0
- package/dist/internal/reactorTest/sessions.js.map +1 -0
- package/dist/internal/reactorTest/timing.d.ts +13 -0
- package/dist/internal/reactorTest/timing.d.ts.map +1 -0
- package/dist/internal/reactorTest/timing.js +20 -0
- package/dist/internal/reactorTest/timing.js.map +1 -0
- package/dist/internal/recording.d.ts +52 -0
- package/dist/internal/recording.d.ts.map +1 -0
- package/dist/internal/recording.js +141 -0
- package/dist/internal/recording.js.map +1 -0
- package/dist/internal/session/connect.d.ts +34 -0
- package/dist/internal/session/connect.d.ts.map +1 -0
- package/dist/internal/session/connect.js +502 -0
- package/dist/internal/session/connect.js.map +1 -0
- package/dist/internal/session/generation.d.ts +35 -0
- package/dist/internal/session/generation.d.ts.map +1 -0
- package/dist/internal/session/generation.js +185 -0
- package/dist/internal/session/generation.js.map +1 -0
- package/dist/internal/session/ice.d.ts +23 -0
- package/dist/internal/session/ice.d.ts.map +1 -0
- package/dist/internal/session/ice.js +57 -0
- package/dist/internal/session/ice.js.map +1 -0
- package/dist/internal/session/inbound.d.ts +50 -0
- package/dist/internal/session/inbound.d.ts.map +1 -0
- package/dist/internal/session/inbound.js +202 -0
- package/dist/internal/session/inbound.js.map +1 -0
- package/dist/internal/session/model.d.ts +163 -0
- package/dist/internal/session/model.d.ts.map +1 -0
- package/dist/internal/session/model.js +78 -0
- package/dist/internal/session/model.js.map +1 -0
- package/dist/internal/session/requests.d.ts +71 -0
- package/dist/internal/session/requests.d.ts.map +1 -0
- package/dist/internal/session/requests.js +240 -0
- package/dist/internal/session/requests.js.map +1 -0
- package/dist/internal/session/tracks.d.ts +21 -0
- package/dist/internal/session/tracks.d.ts.map +1 -0
- package/dist/internal/session/tracks.js +166 -0
- package/dist/internal/session/tracks.js.map +1 -0
- package/dist/internal/session/upload.d.ts +21 -0
- package/dist/internal/session/upload.d.ts.map +1 -0
- package/dist/internal/session/upload.js +68 -0
- package/dist/internal/session/upload.js.map +1 -0
- package/dist/internal/session.d.ts +66 -0
- package/dist/internal/session.d.ts.map +1 -0
- package/dist/internal/session.js +280 -0
- package/dist/internal/session.js.map +1 -0
- package/dist/{stats.d.ts → internal/stats.d.ts} +30 -16
- package/dist/internal/stats.d.ts.map +1 -0
- package/dist/internal/stats.js +201 -0
- package/dist/internal/stats.js.map +1 -0
- package/dist/internal/token.d.ts +22 -0
- package/dist/internal/token.d.ts.map +1 -0
- package/dist/internal/token.js +65 -0
- package/dist/internal/token.js.map +1 -0
- package/dist/internal/wire.d.ts +37 -0
- package/dist/internal/wire.d.ts.map +1 -0
- package/dist/internal/wire.js +49 -0
- package/dist/internal/wire.js.map +1 -0
- package/notices/bufbuild-protobuf-LICENSE +201 -0
- package/package.json +17 -38
- package/dist/FetchHttp.d.ts +0 -9
- package/dist/FetchHttp.d.ts.map +0 -1
- package/dist/FetchHttp.js +0 -63
- package/dist/FetchHttp.js.map +0 -1
- package/dist/PeerFactory.d.ts +0 -26
- package/dist/PeerFactory.d.ts.map +0 -1
- package/dist/PeerFactory.js +0 -4
- package/dist/PeerFactory.js.map +0 -1
- package/dist/PeerTypes.d.ts +0 -64
- package/dist/PeerTypes.d.ts.map +0 -1
- package/dist/PeerTypes.js +0 -2
- package/dist/PeerTypes.js.map +0 -1
- package/dist/Sequence.d.ts +0 -85
- package/dist/Sequence.d.ts.map +0 -1
- package/dist/Sequence.js +0 -210
- package/dist/Sequence.js.map +0 -1
- package/dist/SessionTypes.d.ts +0 -312
- package/dist/SessionTypes.d.ts.map +0 -1
- package/dist/SessionTypes.js +0 -19
- package/dist/SessionTypes.js.map +0 -1
- package/dist/Submission.d.ts.map +0 -1
- package/dist/Submission.js.map +0 -1
- package/dist/_internal/queue.d.ts +0 -6
- package/dist/_internal/queue.d.ts.map +0 -1
- package/dist/_internal/queue.js.map +0 -1
- package/dist/bytes.d.ts +0 -6
- package/dist/bytes.d.ts.map +0 -1
- package/dist/bytes.js +0 -32
- package/dist/bytes.js.map +0 -1
- package/dist/contract.d.ts +0 -149
- package/dist/contract.d.ts.map +0 -1
- package/dist/contract.js +0 -119
- package/dist/contract.js.map +0 -1
- package/dist/coordinator/_internal/client.d.ts +0 -215
- package/dist/coordinator/_internal/client.d.ts.map +0 -1
- package/dist/coordinator/_internal/client.js +0 -563
- package/dist/coordinator/_internal/client.js.map +0 -1
- package/dist/coordinator/_internal/recording.d.ts +0 -31
- package/dist/coordinator/_internal/recording.d.ts.map +0 -1
- package/dist/coordinator/_internal/recording.js +0 -123
- package/dist/coordinator/_internal/recording.js.map +0 -1
- package/dist/coordinator/_internal/response.d.ts +0 -15
- package/dist/coordinator/_internal/response.d.ts.map +0 -1
- package/dist/coordinator/_internal/response.js +0 -55
- package/dist/coordinator/_internal/response.js.map +0 -1
- package/dist/coordinator/_internal/schemas.d.ts +0 -73
- package/dist/coordinator/_internal/schemas.d.ts.map +0 -1
- package/dist/coordinator/_internal/schemas.js +0 -200
- package/dist/coordinator/_internal/schemas.js.map +0 -1
- package/dist/coordinator/index.d.ts +0 -40
- package/dist/coordinator/index.d.ts.map +0 -1
- package/dist/coordinator/index.js +0 -21
- package/dist/coordinator/index.js.map +0 -1
- package/dist/correlation.d.ts +0 -47
- package/dist/correlation.d.ts.map +0 -1
- package/dist/correlation.js +0 -131
- package/dist/correlation.js.map +0 -1
- package/dist/duration.d.ts +0 -27
- package/dist/duration.d.ts.map +0 -1
- package/dist/duration.js +0 -47
- package/dist/duration.js.map +0 -1
- package/dist/errors.d.ts +0 -1303
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -745
- package/dist/errors.js.map +0 -1
- package/dist/h3/_internal/client.d.ts +0 -9
- package/dist/h3/_internal/client.d.ts.map +0 -1
- package/dist/h3/_internal/client.js +0 -652
- package/dist/h3/_internal/client.js.map +0 -1
- package/dist/h3/_internal/contracts.d.ts.map +0 -1
- package/dist/h3/_internal/contracts.js +0 -123
- package/dist/h3/_internal/contracts.js.map +0 -1
- package/dist/h3/_internal/deployment.d.ts +0 -8
- package/dist/h3/_internal/deployment.d.ts.map +0 -1
- package/dist/h3/_internal/deployment.js +0 -149
- package/dist/h3/_internal/deployment.js.map +0 -1
- package/dist/h3/_internal/evidence.d.ts +0 -17
- package/dist/h3/_internal/evidence.d.ts.map +0 -1
- package/dist/h3/_internal/evidence.js +0 -48
- package/dist/h3/_internal/evidence.js.map +0 -1
- package/dist/h3/_internal/operations.d.ts +0 -58
- package/dist/h3/_internal/operations.d.ts.map +0 -1
- package/dist/h3/_internal/operations.js +0 -268
- package/dist/h3/_internal/operations.js.map +0 -1
- package/dist/h3/_internal/references.d.ts +0 -24
- package/dist/h3/_internal/references.d.ts.map +0 -1
- package/dist/h3/_internal/references.js +0 -309
- package/dist/h3/_internal/references.js.map +0 -1
- package/dist/h3/_internal/request.d.ts +0 -21
- package/dist/h3/_internal/request.d.ts.map +0 -1
- package/dist/h3/_internal/request.js +0 -97
- package/dist/h3/_internal/request.js.map +0 -1
- package/dist/h3/_internal/retained.d.ts +0 -22
- package/dist/h3/_internal/retained.d.ts.map +0 -1
- package/dist/h3/_internal/retained.js +0 -89
- package/dist/h3/_internal/retained.js.map +0 -1
- package/dist/h3/_internal/state.d.ts +0 -44
- package/dist/h3/_internal/state.d.ts.map +0 -1
- package/dist/h3/_internal/state.js +0 -283
- package/dist/h3/_internal/state.js.map +0 -1
- package/dist/h3/index.d.ts +0 -10
- package/dist/h3/index.d.ts.map +0 -1
- package/dist/h3/index.js +0 -7
- package/dist/h3/index.js.map +0 -1
- package/dist/h3/messages.d.ts.map +0 -1
- package/dist/h3/messages.js.map +0 -1
- package/dist/h3/profile.d.ts.map +0 -1
- package/dist/h3/profile.js.map +0 -1
- package/dist/h3/types.d.ts +0 -291
- package/dist/h3/types.d.ts.map +0 -1
- package/dist/h3/types.js +0 -2
- package/dist/h3/types.js.map +0 -1
- package/dist/host.d.ts +0 -26
- package/dist/host.d.ts.map +0 -1
- package/dist/host.js +0 -20
- package/dist/host.js.map +0 -1
- package/dist/json.d.ts +0 -25
- package/dist/json.d.ts.map +0 -1
- package/dist/json.js +0 -143
- package/dist/json.js.map +0 -1
- package/dist/media-stream.d.ts +0 -10
- package/dist/media-stream.d.ts.map +0 -1
- package/dist/media-stream.js +0 -18
- package/dist/media-stream.js.map +0 -1
- package/dist/observation.d.ts +0 -38
- package/dist/observation.d.ts.map +0 -1
- package/dist/observation.js +0 -113
- package/dist/observation.js.map +0 -1
- package/dist/orchestration/elapsed.d.ts +0 -9
- package/dist/orchestration/elapsed.d.ts.map +0 -1
- package/dist/orchestration/elapsed.js +0 -8
- package/dist/orchestration/elapsed.js.map +0 -1
- package/dist/orchestration/h3-source.d.ts +0 -58
- package/dist/orchestration/h3-source.d.ts.map +0 -1
- package/dist/orchestration/h3-source.js +0 -362
- package/dist/orchestration/h3-source.js.map +0 -1
- package/dist/orchestration/index.d.ts +0 -17
- package/dist/orchestration/index.d.ts.map +0 -1
- package/dist/orchestration/index.js +0 -12
- package/dist/orchestration/index.js.map +0 -1
- package/dist/orchestration/media-buffer.d.ts +0 -32
- package/dist/orchestration/media-buffer.d.ts.map +0 -1
- package/dist/orchestration/media-buffer.js +0 -94
- package/dist/orchestration/media-buffer.js.map +0 -1
- package/dist/orchestration/open-h3.d.ts +0 -101
- package/dist/orchestration/open-h3.d.ts.map +0 -1
- package/dist/orchestration/open-h3.js +0 -127
- package/dist/orchestration/open-h3.js.map +0 -1
- package/dist/orchestration/queries.d.ts +0 -10
- package/dist/orchestration/queries.d.ts.map +0 -1
- package/dist/orchestration/queries.js +0 -43
- package/dist/orchestration/queries.js.map +0 -1
- package/dist/orchestration/references.d.ts +0 -18
- package/dist/orchestration/references.d.ts.map +0 -1
- package/dist/orchestration/references.js +0 -79
- package/dist/orchestration/references.js.map +0 -1
- package/dist/orchestration/renewal-state.d.ts +0 -84
- package/dist/orchestration/renewal-state.d.ts.map +0 -1
- package/dist/orchestration/renewal-state.js +0 -95
- package/dist/orchestration/renewal-state.js.map +0 -1
- package/dist/orchestration/renewal.d.ts +0 -103
- package/dist/orchestration/renewal.d.ts.map +0 -1
- package/dist/orchestration/renewal.js +0 -1099
- package/dist/orchestration/renewal.js.map +0 -1
- package/dist/orchestration/request.d.ts +0 -65
- package/dist/orchestration/request.d.ts.map +0 -1
- package/dist/orchestration/request.js +0 -134
- package/dist/orchestration/request.js.map +0 -1
- package/dist/orchestration/retention.d.ts +0 -100
- package/dist/orchestration/retention.d.ts.map +0 -1
- package/dist/orchestration/retention.js +0 -134
- package/dist/orchestration/retention.js.map +0 -1
- package/dist/orchestration/routing.d.ts +0 -21
- package/dist/orchestration/routing.d.ts.map +0 -1
- package/dist/orchestration/routing.js +0 -93
- package/dist/orchestration/routing.js.map +0 -1
- package/dist/orchestration/scheduler-key.d.ts +0 -14
- package/dist/orchestration/scheduler-key.d.ts.map +0 -1
- package/dist/orchestration/scheduler-key.js +0 -62
- package/dist/orchestration/scheduler-key.js.map +0 -1
- package/dist/orchestration/scheduler-policy.d.ts +0 -246
- package/dist/orchestration/scheduler-policy.d.ts.map +0 -1
- package/dist/orchestration/scheduler-policy.js +0 -668
- package/dist/orchestration/scheduler-policy.js.map +0 -1
- package/dist/orchestration/scheduler.d.ts +0 -393
- package/dist/orchestration/scheduler.d.ts.map +0 -1
- package/dist/orchestration/scheduler.js +0 -2621
- package/dist/orchestration/scheduler.js.map +0 -1
- package/dist/orchestration/source-slot.d.ts +0 -124
- package/dist/orchestration/source-slot.d.ts.map +0 -1
- package/dist/orchestration/source-slot.js +0 -348
- package/dist/orchestration/source-slot.js.map +0 -1
- package/dist/orchestration/types.d.ts +0 -1462
- package/dist/orchestration/types.d.ts.map +0 -1
- package/dist/orchestration/types.js +0 -135
- package/dist/orchestration/types.js.map +0 -1
- package/dist/protobuf.d.ts +0 -63
- package/dist/protobuf.d.ts.map +0 -1
- package/dist/protobuf.js +0 -252
- package/dist/protobuf.js.map +0 -1
- package/dist/session/_internal/acquire.d.ts +0 -21
- package/dist/session/_internal/acquire.d.ts.map +0 -1
- package/dist/session/_internal/acquire.js +0 -168
- package/dist/session/_internal/acquire.js.map +0 -1
- package/dist/session/_internal/cleanup.d.ts +0 -19
- package/dist/session/_internal/cleanup.d.ts.map +0 -1
- package/dist/session/_internal/cleanup.js +0 -102
- package/dist/session/_internal/cleanup.js.map +0 -1
- package/dist/session/_internal/lifecycle.d.ts +0 -67
- package/dist/session/_internal/lifecycle.d.ts.map +0 -1
- package/dist/session/_internal/lifecycle.js +0 -142
- package/dist/session/_internal/lifecycle.js.map +0 -1
- package/dist/session/_internal/remote.d.ts +0 -28
- package/dist/session/_internal/remote.d.ts.map +0 -1
- package/dist/session/_internal/remote.js +0 -71
- package/dist/session/_internal/remote.js.map +0 -1
- package/dist/session/_internal/uploads.d.ts +0 -7
- package/dist/session/_internal/uploads.d.ts.map +0 -1
- package/dist/session/_internal/uploads.js +0 -31
- package/dist/session/_internal/uploads.js.map +0 -1
- package/dist/session/commands.d.ts +0 -2
- package/dist/session/commands.d.ts.map +0 -1
- package/dist/session/commands.js +0 -2
- package/dist/session/commands.js.map +0 -1
- package/dist/session/files.d.ts +0 -21
- package/dist/session/files.d.ts.map +0 -1
- package/dist/session/files.js +0 -49
- package/dist/session/files.js.map +0 -1
- package/dist/session/index.d.ts +0 -84
- package/dist/session/index.d.ts.map +0 -1
- package/dist/session/index.js +0 -16
- package/dist/session/index.js.map +0 -1
- package/dist/session/media.d.ts +0 -114
- package/dist/session/media.d.ts.map +0 -1
- package/dist/session/media.js +0 -2
- package/dist/session/media.js.map +0 -1
- package/dist/session/recorder.d.ts +0 -24
- package/dist/session/recorder.d.ts.map +0 -1
- package/dist/session/recorder.js +0 -19
- package/dist/session/recorder.js.map +0 -1
- package/dist/session.d.ts +0 -105
- package/dist/session.d.ts.map +0 -1
- package/dist/session.js +0 -976
- package/dist/session.js.map +0 -1
- package/dist/simulation/_internal/source.d.ts +0 -12
- package/dist/simulation/_internal/source.d.ts.map +0 -1
- package/dist/simulation/_internal/source.js +0 -513
- package/dist/simulation/_internal/source.js.map +0 -1
- package/dist/simulation/index.d.ts +0 -13
- package/dist/simulation/index.d.ts.map +0 -1
- package/dist/simulation/index.js +0 -12
- package/dist/simulation/index.js.map +0 -1
- package/dist/simulation/types.d.ts +0 -39
- package/dist/simulation/types.d.ts.map +0 -1
- package/dist/simulation/types.js +0 -2
- package/dist/simulation/types.js.map +0 -1
- package/dist/stats.d.ts.map +0 -1
- package/dist/stats.js +0 -205
- package/dist/stats.js.map +0 -1
- package/dist/testing/Faults.d.ts +0 -4
- package/dist/testing/Faults.d.ts.map +0 -1
- package/dist/testing/Faults.js +0 -7
- package/dist/testing/Faults.js.map +0 -1
- package/dist/testing/Png.d.ts +0 -3
- package/dist/testing/Png.d.ts.map +0 -1
- package/dist/testing/Png.js.map +0 -1
- package/dist/testing/Wav.d.ts +0 -14
- package/dist/testing/Wav.d.ts.map +0 -1
- package/dist/testing/Wav.js +0 -37
- package/dist/testing/Wav.js.map +0 -1
- package/dist/testing/index.d.ts +0 -5
- package/dist/testing/index.d.ts.map +0 -1
- package/dist/testing/index.js +0 -4
- package/dist/testing/index.js.map +0 -1
- package/dist/wire.d.ts +0 -7
- package/dist/wire.d.ts.map +0 -1
- package/dist/wire.generated.d.ts +0 -305
- package/dist/wire.generated.d.ts.map +0 -1
- package/dist/wire.generated.js +0 -1257
- package/dist/wire.generated.js.map +0 -1
- package/dist/wire.js +0 -5
- package/dist/wire.js.map +0 -1
package/dist/Session.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as Schema from "effect/Schema";
|
|
2
|
+
import { Termination } from "./Coordinator.js";
|
|
3
|
+
import { FailureSummary } from "./ReactorError.js";
|
|
4
|
+
/** A recording the session prepared, with the playlist to download it from. */
|
|
5
|
+
export const ClipReady = Schema.Struct({
|
|
6
|
+
sessionId: Schema.String,
|
|
7
|
+
kind: Schema.String,
|
|
8
|
+
startMarker: Schema.Finite,
|
|
9
|
+
endMarker: Schema.Finite,
|
|
10
|
+
nowMarker: Schema.Finite,
|
|
11
|
+
predictedReadyAtMs: Schema.BigInt,
|
|
12
|
+
playlistUrl: Schema.String,
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* A control-channel message Reactor sent. Provider text (a clip failure's
|
|
16
|
+
* reason, an error's code and message) stays `Redacted`.
|
|
17
|
+
*/
|
|
18
|
+
export const ControlMessage = Schema.Union([
|
|
19
|
+
Schema.TaggedStruct("ModelSchema", { openapi: Schema.optionalKey(Schema.JsonObject) }),
|
|
20
|
+
Schema.TaggedStruct("ClipReady", { clip: ClipReady }),
|
|
21
|
+
Schema.TaggedStruct("ClipFailed", { reason: Schema.Redacted(Schema.String) }),
|
|
22
|
+
Schema.TaggedStruct("TrackPublished", { name: Schema.String }),
|
|
23
|
+
Schema.TaggedStruct("Error", {
|
|
24
|
+
code: Schema.Redacted(Schema.String),
|
|
25
|
+
message: Schema.Redacted(Schema.String),
|
|
26
|
+
}),
|
|
27
|
+
]);
|
|
28
|
+
/**
|
|
29
|
+
* A session's cleanup evidence, a Schema so it can be persisted. Termination
|
|
30
|
+
* is confirmed by an independent read, never by a DELETE response alone.
|
|
31
|
+
*/
|
|
32
|
+
export const CloseReport = Schema.Struct({
|
|
33
|
+
localClosed: Schema.Boolean,
|
|
34
|
+
allocation: Schema.Literals(["none", "known", "unknown"]),
|
|
35
|
+
ownership: Schema.optionalKey(Schema.Literals(["owned", "attached"])),
|
|
36
|
+
sessionId: Schema.optionalKey(Schema.String),
|
|
37
|
+
remote: Termination,
|
|
38
|
+
unpublishSubmitted: Schema.Array(Schema.String),
|
|
39
|
+
/** Claims possibly accepted remotely without an attributable response. */
|
|
40
|
+
unresolvedPublications: Schema.Array(Schema.String),
|
|
41
|
+
localErrors: Schema.Array(FailureSummary),
|
|
42
|
+
});
|
|
43
|
+
/**
|
|
44
|
+
* Whether the session a report closed may still bill: this process owned it
|
|
45
|
+
* and no read confirmed it ended, or it asked for an allocation whose outcome,
|
|
46
|
+
* and so whose id, never arrived. Nothing can confirm the second ended; the
|
|
47
|
+
* session's cap bounds it.
|
|
48
|
+
*/
|
|
49
|
+
export const mayStillBill = (report) => report.allocation === "unknown" ||
|
|
50
|
+
(report.allocation === "known" && report.ownership === "owned" && !report.remote.confirmed);
|
|
51
|
+
//# sourceMappingURL=Session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Session.js","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAIxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAK/C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAInD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM;IAC1B,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,kBAAkB,EAAE,MAAM,CAAC,MAAM;IACjC,WAAW,EAAE,MAAM,CAAC,MAAM;CAC3B,CAAC,CAAC;AAGH;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC;IACzC,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;IACtF,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACrD,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7E,MAAM,CAAC,YAAY,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC9D,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE;QAC3B,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QACpC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;KACxC,CAAC;CACH,CAAC,CAAC;AAoBH;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC,OAAO;IAC3B,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACzD,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IACrE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5C,MAAM,EAAE,WAAW;IACnB,kBAAkB,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IAC/C,0EAA0E;IAC1E,sBAAsB,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IACnD,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;CAC1C,CAAC,CAAC;AAGH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAmB,EAAW,EAAE,CAC3D,MAAM,CAAC,UAAU,KAAK,SAAS;IAC/B,CAAC,MAAM,CAAC,UAAU,KAAK,OAAO,IAAI,MAAM,CAAC,SAAS,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,23 +1,13 @@
|
|
|
1
|
-
/** Portable entry point: importing it
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export * as
|
|
5
|
-
export * as
|
|
6
|
-
export * as
|
|
7
|
-
export
|
|
8
|
-
export
|
|
9
|
-
export
|
|
10
|
-
export
|
|
11
|
-
export
|
|
12
|
-
export
|
|
13
|
-
export type { SessionEvent, EventPayload, Snapshot, ReadyState, ReadyDescriptor, Status, Ownership, Observe, Observation, Attribution, CommandReply, CommandOptions, ReplyTimeoutOptions, SessionTimeouts, Uploaded, UploadProgress, UploadTimeoutOptions, } from "./SessionTypes.js";
|
|
14
|
-
export { CloseReport } from "./SessionTypes.js";
|
|
15
|
-
export { Termination } from "./coordinator/_internal/client.js";
|
|
16
|
-
export type { HttpOptions } from "./coordinator/_internal/client.js";
|
|
17
|
-
export type { CommandContext } from "./session/commands.js";
|
|
18
|
-
export type { Correlation } from "./correlation.js";
|
|
19
|
-
export type { Statistics } from "./stats.js";
|
|
20
|
-
export type { Json, JsonObject } from "./json.js";
|
|
21
|
-
export { Capabilities, Mapping, SessionDescriptor, Track } from "./contract.js";
|
|
22
|
-
export type { Descriptor } from "./contract.js";
|
|
1
|
+
/** Portable entry point: importing it selects no host and loads no native code. */
|
|
2
|
+
export * as Coordinator from "./Coordinator.js";
|
|
3
|
+
export * as H3 from "./H3.js";
|
|
4
|
+
export * as H3Source from "./H3Source.js";
|
|
5
|
+
export * as LocalSource from "./LocalSource.js";
|
|
6
|
+
export * as Media from "./Media.js";
|
|
7
|
+
export * as Peer from "./Peer.js";
|
|
8
|
+
export * as Playout from "./Playout.js";
|
|
9
|
+
export * as Reactor from "./Reactor.js";
|
|
10
|
+
export * as ReactorError from "./ReactorError.js";
|
|
11
|
+
export * as ReactorTest from "./ReactorTest.js";
|
|
12
|
+
export * as Session from "./Session.js";
|
|
23
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
/** Portable entry point: importing it
|
|
2
|
-
export
|
|
3
|
-
export * as
|
|
4
|
-
export * as
|
|
5
|
-
export * as
|
|
6
|
-
export
|
|
7
|
-
export
|
|
8
|
-
export
|
|
9
|
-
export
|
|
10
|
-
export
|
|
11
|
-
export
|
|
1
|
+
/** Portable entry point: importing it selects no host and loads no native code. */
|
|
2
|
+
export * as Coordinator from "./Coordinator.js";
|
|
3
|
+
export * as H3 from "./H3.js";
|
|
4
|
+
export * as H3Source from "./H3Source.js";
|
|
5
|
+
export * as LocalSource from "./LocalSource.js";
|
|
6
|
+
export * as Media from "./Media.js";
|
|
7
|
+
export * as Peer from "./Peer.js";
|
|
8
|
+
export * as Playout from "./Playout.js";
|
|
9
|
+
export * as Reactor from "./Reactor.js";
|
|
10
|
+
export * as ReactorError from "./ReactorError.js";
|
|
11
|
+
export * as ReactorTest from "./ReactorTest.js";
|
|
12
|
+
export * as Session from "./Session.js";
|
|
12
13
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request/reply correlation for the Reactor wire.
|
|
3
|
+
*
|
|
4
|
+
* Effect's `RpcClient` does not fit this wire: it drops a late or second
|
|
5
|
+
* reply, forgets a request whose caller was interrupted and has no bound. A
|
|
6
|
+
* model command is paid and has no cancel message, so a reply must stay
|
|
7
|
+
* attributable after its caller stops waiting. Requests are registered before
|
|
8
|
+
* they are sent, replies are labelled rather than dropped, and retiring a
|
|
9
|
+
* generation fails its requests with their dispatch outcome.
|
|
10
|
+
*/
|
|
11
|
+
import * as Deferred from "effect/Deferred";
|
|
12
|
+
import * as Effect from "effect/Effect";
|
|
13
|
+
import { ReactorError } from "../ReactorError.js";
|
|
14
|
+
/** How a reply relates to the requests this client made. */
|
|
15
|
+
export type Correlation = "matched" | "late" | "duplicate" | "unsolicited" | "late-or-unknown" | "stale-generation";
|
|
16
|
+
export interface Pending<A> {
|
|
17
|
+
readonly id: string;
|
|
18
|
+
readonly generation: bigint;
|
|
19
|
+
readonly operation: string;
|
|
20
|
+
readonly deferred: Deferred.Deferred<A, ReactorError>;
|
|
21
|
+
}
|
|
22
|
+
export interface Correlator<A> {
|
|
23
|
+
readonly size: Effect.Effect<number>;
|
|
24
|
+
readonly register: (generation: bigint, operation: string) => Effect.Effect<Pending<A>, ReactorError>;
|
|
25
|
+
readonly submitted: (pending: Pending<A>) => Effect.Effect<void>;
|
|
26
|
+
readonly isSubmitted: (pending: Pending<A>) => Effect.Effect<boolean>;
|
|
27
|
+
readonly isPending: (pending: Pending<A>) => Effect.Effect<boolean>;
|
|
28
|
+
/** The caller stopped waiting; a later reply is `late`, not `matched`. */
|
|
29
|
+
readonly abandon: (pending: Pending<A>) => Effect.Effect<void>;
|
|
30
|
+
readonly cancel: (pending: Pending<A>) => Effect.Effect<boolean>;
|
|
31
|
+
/**
|
|
32
|
+
* Labels a reply, then builds its result and completes the request if it
|
|
33
|
+
* was pending. `result` runs before the caller wakes, so what it publishes
|
|
34
|
+
* is ordered before anything the caller does next.
|
|
35
|
+
*/
|
|
36
|
+
readonly settle: (id: string, generation: bigint, result: (correlation: Correlation) => Effect.Effect<A, ReactorError>, stage?: "acknowledged" | "replied") => Effect.Effect<Correlation>;
|
|
37
|
+
readonly failGeneration: (generation: bigint, failure: ReactorError) => Effect.Effect<void>;
|
|
38
|
+
}
|
|
39
|
+
export declare const make: <A>(options: {
|
|
40
|
+
readonly prefix: "data" | "ctrl";
|
|
41
|
+
/** Requests awaiting a reply at once. */
|
|
42
|
+
readonly limit: number;
|
|
43
|
+
/** Distinguishes this client's ids from another's on a shared session. */
|
|
44
|
+
readonly namespace: string;
|
|
45
|
+
}) => Effect.Effect<Correlator<A>>;
|
|
46
|
+
//# sourceMappingURL=correlator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correlator.d.ts","sourceRoot":"","sources":["../../src/internal/correlator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,4DAA4D;AAC5D,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,MAAM,GACN,WAAW,GACX,aAAa,GACb,iBAAiB,GACjB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;CACvD;AAsBD,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,CACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,KACd,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjE,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtE,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpE,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/D,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjE;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,CACf,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,EACpE,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,KAC/B,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAC7F;AAuCD,eAAO,MAAM,IAAI,GAAI,CAAC,WAAW;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,yCAAyC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,KAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAoI5B,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request/reply correlation for the Reactor wire.
|
|
3
|
+
*
|
|
4
|
+
* Effect's `RpcClient` does not fit this wire: it drops a late or second
|
|
5
|
+
* reply, forgets a request whose caller was interrupted and has no bound. A
|
|
6
|
+
* model command is paid and has no cancel message, so a reply must stay
|
|
7
|
+
* attributable after its caller stops waiting. Requests are registered before
|
|
8
|
+
* they are sent, replies are labelled rather than dropped, and retiring a
|
|
9
|
+
* generation fails its requests with their dispatch outcome.
|
|
10
|
+
*/
|
|
11
|
+
import * as Deferred from "effect/Deferred";
|
|
12
|
+
import * as Effect from "effect/Effect";
|
|
13
|
+
import * as Ref from "effect/Ref";
|
|
14
|
+
import { ReactorError } from "../ReactorError.js";
|
|
15
|
+
const remember = (state, id, generation, completion) => {
|
|
16
|
+
const recent = new Map(state.recent).set(id, { generation, completion });
|
|
17
|
+
if (recent.size > 256) {
|
|
18
|
+
const oldest = recent.keys().next();
|
|
19
|
+
if (oldest.done !== true)
|
|
20
|
+
recent.delete(oldest.value);
|
|
21
|
+
}
|
|
22
|
+
return recent;
|
|
23
|
+
};
|
|
24
|
+
/** How a reply on `generation` relates to its request, pending or recently completed. */
|
|
25
|
+
const correlationOf = (entry, recent, generation, stage) => {
|
|
26
|
+
if (entry !== undefined) {
|
|
27
|
+
if (entry.pending.generation !== generation)
|
|
28
|
+
return "stale-generation";
|
|
29
|
+
return entry.waiting ? "matched" : "late";
|
|
30
|
+
}
|
|
31
|
+
if (recent === undefined)
|
|
32
|
+
return "late-or-unknown";
|
|
33
|
+
if (recent.generation !== generation)
|
|
34
|
+
return "stale-generation";
|
|
35
|
+
if (recent.completion === "acknowledged" && stage === "replied")
|
|
36
|
+
return "late";
|
|
37
|
+
return recent.completion === "cancelled" ? "late-or-unknown" : "duplicate";
|
|
38
|
+
};
|
|
39
|
+
const without = (pending, id) => {
|
|
40
|
+
const next = new Map(pending);
|
|
41
|
+
next.delete(id);
|
|
42
|
+
return next;
|
|
43
|
+
};
|
|
44
|
+
export const make = (options) => Effect.map(Ref.make({ counter: 0n, pending: new Map(), recent: new Map() }), (state) => {
|
|
45
|
+
const update = (pending, change) => Ref.update(state, (current) => {
|
|
46
|
+
const entry = current.pending.get(pending.id);
|
|
47
|
+
return entry?.pending === pending
|
|
48
|
+
? { ...current, pending: new Map(current.pending).set(pending.id, change(entry)) }
|
|
49
|
+
: current;
|
|
50
|
+
});
|
|
51
|
+
const entryOf = (pending) => Effect.map(Ref.get(state), (current) => {
|
|
52
|
+
const entry = current.pending.get(pending.id);
|
|
53
|
+
return entry?.pending === pending ? entry : undefined;
|
|
54
|
+
});
|
|
55
|
+
return {
|
|
56
|
+
size: Effect.map(Ref.get(state), (current) => current.pending.size),
|
|
57
|
+
register: Effect.fnUntraced(function* (generation, operation) {
|
|
58
|
+
const deferred = yield* Deferred.make();
|
|
59
|
+
const pending = yield* Ref.modify(state, (current) => {
|
|
60
|
+
if (current.pending.size >= options.limit)
|
|
61
|
+
return [undefined, current];
|
|
62
|
+
const counter = current.counter + 1n;
|
|
63
|
+
const id = `${options.prefix}_${options.namespace}_${String(counter)}`;
|
|
64
|
+
const pending = { id, generation, operation, deferred };
|
|
65
|
+
return [
|
|
66
|
+
pending,
|
|
67
|
+
{
|
|
68
|
+
...current,
|
|
69
|
+
counter,
|
|
70
|
+
pending: new Map(current.pending).set(id, {
|
|
71
|
+
pending,
|
|
72
|
+
submitted: false,
|
|
73
|
+
waiting: true,
|
|
74
|
+
}),
|
|
75
|
+
},
|
|
76
|
+
];
|
|
77
|
+
});
|
|
78
|
+
if (pending === undefined)
|
|
79
|
+
return yield* ReactorError.fromCode("Overflow", "pending request bound reached", {
|
|
80
|
+
operation,
|
|
81
|
+
outcome: "not-submitted",
|
|
82
|
+
});
|
|
83
|
+
return pending;
|
|
84
|
+
}),
|
|
85
|
+
submitted: (pending) => update(pending, (entry) => ({ ...entry, submitted: true })),
|
|
86
|
+
isSubmitted: (pending) => Effect.map(entryOf(pending), (entry) => entry?.submitted === true),
|
|
87
|
+
isPending: (pending) => Effect.map(entryOf(pending), (entry) => entry !== undefined),
|
|
88
|
+
abandon: (pending) => update(pending, (entry) => ({ ...entry, waiting: false })),
|
|
89
|
+
cancel: (pending) => Ref.modify(state, (current) => current.pending.get(pending.id)?.pending === pending
|
|
90
|
+
? [
|
|
91
|
+
true,
|
|
92
|
+
{
|
|
93
|
+
...current,
|
|
94
|
+
pending: without(current.pending, pending.id),
|
|
95
|
+
recent: remember(current, pending.id, pending.generation, "cancelled"),
|
|
96
|
+
},
|
|
97
|
+
]
|
|
98
|
+
: [false, current]),
|
|
99
|
+
settle: Effect.fnUntraced(function* (id, generation, result, stage = "replied") {
|
|
100
|
+
const [correlation, matched] = yield* Ref.modify(state, (current) => {
|
|
101
|
+
const entry = current.pending.get(id);
|
|
102
|
+
const recent = current.recent.get(id);
|
|
103
|
+
const correlation = id === "" ? "unsolicited" : correlationOf(entry, recent, generation, stage);
|
|
104
|
+
if (entry !== undefined && (correlation === "matched" || correlation === "late"))
|
|
105
|
+
return [
|
|
106
|
+
[correlation, entry.pending],
|
|
107
|
+
{
|
|
108
|
+
...current,
|
|
109
|
+
pending: without(current.pending, id),
|
|
110
|
+
recent: remember(current, id, generation, stage),
|
|
111
|
+
},
|
|
112
|
+
];
|
|
113
|
+
// An acknowledgement and a later model payload are two facts.
|
|
114
|
+
if (correlation === "late" && recent?.completion === "acknowledged")
|
|
115
|
+
return [
|
|
116
|
+
[correlation, undefined],
|
|
117
|
+
{ ...current, recent: remember(current, id, generation, "replied") },
|
|
118
|
+
];
|
|
119
|
+
return [[correlation, undefined], current];
|
|
120
|
+
});
|
|
121
|
+
const completion = yield* Effect.exit(result(correlation));
|
|
122
|
+
if (matched !== undefined)
|
|
123
|
+
yield* Deferred.done(matched.deferred, completion);
|
|
124
|
+
return correlation;
|
|
125
|
+
}),
|
|
126
|
+
failGeneration: Effect.fnUntraced(function* (generation, failure) {
|
|
127
|
+
const retired = yield* Ref.modify(state, (current) => {
|
|
128
|
+
const retired = [...current.pending.values()].filter((entry) => entry.pending.generation === generation);
|
|
129
|
+
let recent = current.recent;
|
|
130
|
+
const pending = new Map(current.pending);
|
|
131
|
+
for (const entry of retired) {
|
|
132
|
+
pending.delete(entry.pending.id);
|
|
133
|
+
recent = remember({ ...current, recent }, entry.pending.id, generation, "cancelled");
|
|
134
|
+
}
|
|
135
|
+
return [retired, { ...current, pending, recent }];
|
|
136
|
+
});
|
|
137
|
+
yield* Effect.forEach(retired, (entry) => Deferred.fail(entry.pending.deferred, ReactorError.make({
|
|
138
|
+
reason: failure.reason,
|
|
139
|
+
context: {
|
|
140
|
+
...failure.context,
|
|
141
|
+
operation: entry.pending.operation,
|
|
142
|
+
requestId: entry.pending.id,
|
|
143
|
+
generation,
|
|
144
|
+
outcome: entry.submitted ? "unknown" : "not-submitted",
|
|
145
|
+
},
|
|
146
|
+
})), { discard: true });
|
|
147
|
+
}),
|
|
148
|
+
};
|
|
149
|
+
});
|
|
150
|
+
//# sourceMappingURL=correlator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correlator.js","sourceRoot":"","sources":["../../src/internal/correlator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A deadline a caller names in an option, in any `Duration.Input` form,
|
|
3
|
+
* decoded once where it comes in. `Duration` reads a NaN as zero and keeps a
|
|
4
|
+
* negative or infinite number as it is, so every numeric form is checked
|
|
5
|
+
* finite before it becomes a duration, and the duration must be finite and
|
|
6
|
+
* not negative.
|
|
7
|
+
*/
|
|
8
|
+
import * as Duration from "effect/Duration";
|
|
9
|
+
import * as Effect from "effect/Effect";
|
|
10
|
+
import * as Schema from "effect/Schema";
|
|
11
|
+
import { ReactorError } from "../ReactorError.js";
|
|
12
|
+
export declare const Deadline: Schema.Union<readonly [Schema.Duration, Schema.DurationFromString, Schema.DurationFromNanos, Schema.decodeTo<Schema.Duration, Schema.Finite, never, never>, Schema.decodeTo<Schema.Duration, Schema.Tuple<readonly [Schema.Finite, Schema.Finite]>, never, never>, Schema.decodeTo<Schema.Duration, Schema.Struct<{
|
|
13
|
+
readonly weeks: Schema.optional<Schema.Finite>;
|
|
14
|
+
readonly days: Schema.optional<Schema.Finite>;
|
|
15
|
+
readonly hours: Schema.optional<Schema.Finite>;
|
|
16
|
+
readonly minutes: Schema.optional<Schema.Finite>;
|
|
17
|
+
readonly seconds: Schema.optional<Schema.Finite>;
|
|
18
|
+
readonly milliseconds: Schema.optional<Schema.Finite>;
|
|
19
|
+
readonly microseconds: Schema.optional<Schema.Finite>;
|
|
20
|
+
readonly nanoseconds: Schema.optional<Schema.Finite>;
|
|
21
|
+
}>, never, never>]>;
|
|
22
|
+
/** A decoder of the option `name`: anything but a finite, non-negative duration is `InvalidInput`. */
|
|
23
|
+
export declare const decode: (name: string) => (input: Duration.Input) => Effect.Effect<Duration.Duration, ReactorError>;
|
|
24
|
+
//# sourceMappingURL=deadline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deadline.d.ts","sourceRoot":"","sources":["../../src/internal/deadline.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAIxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAiBlD,eAAO,MAAM,QAAQ;;;;;;;;;mBAwBpB,CAAC;AAEF,sGAAsG;AACtG,eAAO,MAAM,MAAM,SACV,MAAM,aACL,QAAQ,CAAC,KAAK,KAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAQnE,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A deadline a caller names in an option, in any `Duration.Input` form,
|
|
3
|
+
* decoded once where it comes in. `Duration` reads a NaN as zero and keeps a
|
|
4
|
+
* negative or infinite number as it is, so every numeric form is checked
|
|
5
|
+
* finite before it becomes a duration, and the duration must be finite and
|
|
6
|
+
* not negative.
|
|
7
|
+
*/
|
|
8
|
+
import * as Duration from "effect/Duration";
|
|
9
|
+
import * as Effect from "effect/Effect";
|
|
10
|
+
import * as Schema from "effect/Schema";
|
|
11
|
+
import * as SchemaGetter from "effect/SchemaGetter";
|
|
12
|
+
import * as SchemaIssue from "effect/SchemaIssue";
|
|
13
|
+
import * as SchemaTransformation from "effect/SchemaTransformation";
|
|
14
|
+
import { ReactorError } from "../ReactorError.js";
|
|
15
|
+
/** A tuple or object form, which `Duration` reads without a Schema of its own. */
|
|
16
|
+
const parts = (form) => form.pipe(Schema.decodeTo(Schema.Duration, {
|
|
17
|
+
decode: SchemaGetter.transformEffect((input) => Effect.fromOption(Duration.fromInput(input)).pipe(Effect.mapError(() => new SchemaIssue.InvalidValue({ message: "not a duration" }, input)))),
|
|
18
|
+
encode: SchemaGetter.forbidden(() => "a deadline is only decoded"),
|
|
19
|
+
}));
|
|
20
|
+
const Finite = Schema.optional(Schema.Finite);
|
|
21
|
+
export const Deadline = Schema.Union([
|
|
22
|
+
Schema.Duration,
|
|
23
|
+
Schema.DurationFromString,
|
|
24
|
+
Schema.DurationFromNanos,
|
|
25
|
+
Schema.Finite.pipe(Schema.decodeTo(Schema.Duration, SchemaTransformation.durationFromMillis)),
|
|
26
|
+
parts(Schema.Tuple([Schema.Finite, Schema.Finite])),
|
|
27
|
+
parts(Schema.Struct({
|
|
28
|
+
weeks: Finite,
|
|
29
|
+
days: Finite,
|
|
30
|
+
hours: Finite,
|
|
31
|
+
minutes: Finite,
|
|
32
|
+
seconds: Finite,
|
|
33
|
+
milliseconds: Finite,
|
|
34
|
+
microseconds: Finite,
|
|
35
|
+
nanoseconds: Finite,
|
|
36
|
+
})),
|
|
37
|
+
]).check(Schema.makeFilter((duration) => (Duration.isFinite(duration) && !Duration.isNegative(duration)) ||
|
|
38
|
+
"a finite duration that is not negative"));
|
|
39
|
+
/** A decoder of the option `name`: anything but a finite, non-negative duration is `InvalidInput`. */
|
|
40
|
+
export const decode = (name) => (input) => Schema.decodeEffect(Deadline)(input).pipe(Effect.mapError((cause) => ReactorError.fromCode("InvalidInput", `${name} is not a finite, non-negative duration`, {
|
|
41
|
+
outcome: "not-submitted",
|
|
42
|
+
detail: cause,
|
|
43
|
+
})));
|
|
44
|
+
//# sourceMappingURL=deadline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deadline.js","sourceRoot":"","sources":["../../src/internal/deadline.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,WAAW,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,oBAAoB,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,kFAAkF;AAClF,MAAM,KAAK,GAAG,CAAyD,IAAO,EAAE,EAAE,CAChF,IAAI,CAAC,IAAI,CACP,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC/B,MAAM,EAAE,YAAY,CAAC,eAAe,CAAC,CAAC,KAAqB,EAAE,EAAE,CAC7D,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAC/C,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,KAAK,CAAC,CAAC,CAC1F,CACF;IACD,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,4BAA4B,CAAC;CACnE,CAAC,CACH,CAAC;AAEJ,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAE9C,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;IACnC,MAAM,CAAC,QAAQ;IACf,MAAM,CAAC,kBAAkB;IACzB,MAAM,CAAC,iBAAiB;IACxB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IAC7F,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,KAAK,CACH,MAAM,CAAC,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,MAAM;QACf,YAAY,EAAE,MAAM;QACpB,YAAY,EAAE,MAAM;QACpB,WAAW,EAAE,MAAM;KACpB,CAAC,CACH;CACF,CAAC,CAAC,KAAK,CACN,MAAM,CAAC,UAAU,CACf,CAAC,QAAQ,EAAE,EAAE,CACX,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/D,wCAAwC,CAC3C,CACF,CAAC;AAEF,sGAAsG;AACtG,MAAM,CAAC,MAAM,MAAM,GACjB,CAAC,IAAY,EAAE,EAAE,CACjB,CAAC,KAAqB,EAAkD,EAAE,CACxE,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CACvC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,YAAY,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,IAAI,yCAAyC,EAAE;IACtF,OAAO,EAAE,eAAe;IACxB,MAAM,EAAE,KAAK;CACd,CAAC,CACH,CACF,CAAC"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* H3's commands: each one's arguments and the message it replies with, and
|
|
3
|
+
* the check that a deployment's OpenAPI document offers them.
|
|
4
|
+
*/
|
|
5
|
+
import * as Result from "effect/Result";
|
|
1
6
|
import * as Schema from "effect/Schema";
|
|
2
|
-
import
|
|
7
|
+
import { ReactorError } from "../../ReactorError.js";
|
|
8
|
+
import type { MessageType } from "./messages.js";
|
|
9
|
+
import { documentedVersion, modelName } from "./profile.js";
|
|
3
10
|
/**
|
|
4
|
-
* One command-to-reply authority for
|
|
5
|
-
* Required keys
|
|
6
|
-
*
|
|
7
|
-
* the adapter's outgoing arguments omit null and retain its existing validators.
|
|
11
|
+
* One command-to-reply authority for the client, the simulated model and the
|
|
12
|
+
* deployment check. Required keys are what this adapter always sends;
|
|
13
|
+
* nullable parameters follow the documented deployment shape.
|
|
8
14
|
*/
|
|
9
15
|
export declare const Commands: {
|
|
10
16
|
readonly enqueue: {
|
|
@@ -22,7 +28,7 @@ export declare const Commands: {
|
|
|
22
28
|
readonly mime_type: Schema.String;
|
|
23
29
|
readonly size: Schema.Int;
|
|
24
30
|
}>>>>;
|
|
25
|
-
readonly seconds: Schema.optionalKey<Schema.NullOr<Schema.
|
|
31
|
+
readonly seconds: Schema.optionalKey<Schema.NullOr<Schema.Finite>>;
|
|
26
32
|
readonly seed: Schema.optionalKey<Schema.NullOr<Schema.Int>>;
|
|
27
33
|
readonly position: Schema.optionalKey<Schema.NullOr<Schema.Int>>;
|
|
28
34
|
readonly metadata: Schema.String;
|
|
@@ -61,7 +67,7 @@ export declare const Commands: {
|
|
|
61
67
|
};
|
|
62
68
|
readonly set_clip_seconds: {
|
|
63
69
|
readonly args: Schema.Struct<{
|
|
64
|
-
readonly seconds: Schema.
|
|
70
|
+
readonly seconds: Schema.Finite;
|
|
65
71
|
}>;
|
|
66
72
|
readonly reply: "clip_length_accepted";
|
|
67
73
|
};
|
|
@@ -105,32 +111,32 @@ export type ReplyCommand = {
|
|
|
105
111
|
}[CommandName];
|
|
106
112
|
export type ReplyType<K extends ReplyCommand> = (typeof Commands)[K]["reply"];
|
|
107
113
|
export type ControlCommand = Exclude<CommandName, ReplyCommand>;
|
|
108
|
-
/**
|
|
109
|
-
export interface
|
|
110
|
-
readonly
|
|
111
|
-
readonly
|
|
112
|
-
readonly
|
|
113
|
-
|
|
114
|
-
|
|
114
|
+
/** What this adapter supports, and what the deployment it checked declares. */
|
|
115
|
+
export interface Contract {
|
|
116
|
+
readonly modelName: typeof modelName;
|
|
117
|
+
readonly documentedVersion: typeof documentedVersion;
|
|
118
|
+
readonly source: string;
|
|
119
|
+
/**
|
|
120
|
+
* Whether the deployment's `enqueue` declares `reference_audios`. When it
|
|
121
|
+
* does not, a request with audio is refused as `UnsupportedCapability`
|
|
122
|
+
* before anything is uploaded or sent.
|
|
123
|
+
*/
|
|
124
|
+
readonly referenceAudio: boolean;
|
|
125
|
+
/**
|
|
126
|
+
* The commands the deployment offers. One it lacks fails its operation as
|
|
127
|
+
* `UnsupportedCapability` before anything is sent.
|
|
128
|
+
*/
|
|
129
|
+
readonly commands: ReadonlySet<CommandName>;
|
|
130
|
+
readonly deployment: {
|
|
131
|
+
readonly title: string | null;
|
|
132
|
+
readonly version: string | null;
|
|
133
|
+
};
|
|
115
134
|
}
|
|
116
|
-
export declare const messageShapes: Readonly<Record<MessageType, Shape>>;
|
|
117
135
|
/**
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
136
|
+
* Admits a deployment whose OpenAPI document offers the commands a provider
|
|
137
|
+
* needs to start, and records which others it offers. Payloads are checked
|
|
138
|
+
* where they arrive: a message that does not match its Schema fails the
|
|
139
|
+
* provider as `Protocol`.
|
|
121
140
|
*/
|
|
122
|
-
export declare const
|
|
123
|
-
|
|
124
|
-
name: string;
|
|
125
|
-
args: {
|
|
126
|
-
type: "string" | "number" | "integer" | "boolean" | "object" | "array";
|
|
127
|
-
nullable?: boolean;
|
|
128
|
-
fields?: Readonly<Record<string, Shape>>;
|
|
129
|
-
items?: Shape;
|
|
130
|
-
required: never[];
|
|
131
|
-
};
|
|
132
|
-
supplied: readonly string[];
|
|
133
|
-
capabilities: readonly string[];
|
|
134
|
-
reply: "autoplay_accepted" | "canvas_accepted" | "clip_length_accepted" | "clip_moved" | "clip_popped" | "clip_queued" | "flush_accepted" | "queue_update" | "seed_accepted" | "session_reset" | "state_update" | null;
|
|
135
|
-
}[];
|
|
136
|
-
//# sourceMappingURL=contracts.d.ts.map
|
|
141
|
+
export declare const deploymentContract: (openapi: Schema.Json | undefined) => Result.Result<Contract, ReactorError>;
|
|
142
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/internal/h3/commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAU,MAAM,cAAc,CAAC;AAUpE;;;;GAIG;AACH,eAAO,MAAM,QAAQ;;iBAEjB,IAAI;;;;;;;;;;;;;;;;;;;;iBAUJ,KAAK,EAAE,aAAa;;;iBAGpB,IAAI;;;;iBACJ,KAAK,EAAE,YAAY;;;iBAEd,IAAI;;;iBAA6C,KAAK,EAAE,aAAa;;;iBACpE,IAAI;;;iBAA6C,KAAK;;;iBACtD,IAAI;iBAAe,KAAK;;;iBACpB,IAAI;;;iBAAuC,KAAK,EAAE,eAAe;;;iBAE3E,IAAI;;;iBACJ,KAAK,EAAE,sBAAsB;;;iBAEjB,IAAI;;;iBAA4C,KAAK,EAAE,iBAAiB;;;iBACtE,IAAI;;;iBAA8C,KAAK,EAAE,mBAAmB;;;iBAE1F,IAAI;;;iBACJ,KAAK,EAAE,gBAAgB;;;iBAEZ,IAAI;iBAAe,KAAK,EAAE,cAAc;;;iBACxC,IAAI;iBAAe,KAAK,EAAE,cAAc;;;iBAC5C,IAAI;iBAAe,KAAK,EAAE,eAAe;;CAGnD,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,QAAQ,CAAC;AAChD,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,WAAW,IAAI;IAC/C,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CACjE,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACvC,IAAI,CACL;CACF,CAAC;AACF,MAAM,MAAM,YAAY,GAAG;KACxB,CAAC,IAAI,WAAW,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,WAAW,GAAG,CAAC,GAAG,KAAK;CAClF,CAAC,WAAW,CAAC,CAAC;AACf,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,YAAY,IAAI,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAC9E,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAKhE,+EAA+E;AAC/E,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,SAAS,EAAE,OAAO,SAAS,CAAC;IACrC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CACzF;AAoCD;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,YACpB,MAAM,CAAC,IAAI,GAAG,SAAS,KAC/B,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAyCnC,CAAC"}
|