@effect/cluster 0.28.4 → 0.29.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/ClusterError/package.json +6 -0
- package/ClusterMetrics/package.json +6 -0
- package/ClusterSchema/package.json +6 -0
- package/DeliverAt/package.json +6 -0
- package/Entity/package.json +6 -0
- package/EntityAddress/package.json +6 -0
- package/EntityId/package.json +6 -0
- package/EntityType/package.json +6 -0
- package/Envelope/package.json +6 -0
- package/HttpCommon/package.json +6 -0
- package/HttpRunner/package.json +6 -0
- package/HttpShardManager/package.json +6 -0
- package/MachineId/package.json +6 -0
- package/MessageStorage/package.json +6 -0
- package/README.md +2 -2
- package/Reply/package.json +6 -0
- package/Runner/package.json +6 -0
- package/RunnerAddress/package.json +6 -0
- package/RunnerHealth/package.json +6 -0
- package/RunnerServer/package.json +6 -0
- package/Runners/package.json +6 -0
- package/ShardStorage/package.json +6 -0
- package/Singleton/package.json +6 -0
- package/SingletonAddress/package.json +6 -0
- package/Snowflake/package.json +6 -0
- package/SocketRunner/package.json +6 -0
- package/SocketShardManager/package.json +6 -0
- package/SqlMessageStorage/package.json +6 -0
- package/SqlShardStorage/package.json +6 -0
- package/SynchronizedClock/package.json +6 -0
- package/dist/cjs/ClusterError.js +180 -0
- package/dist/cjs/ClusterError.js.map +1 -0
- package/dist/cjs/ClusterMetrics.js +63 -0
- package/dist/cjs/ClusterMetrics.js.map +1 -0
- package/dist/cjs/{Pods.js → ClusterSchema.js} +10 -22
- package/dist/cjs/ClusterSchema.js.map +1 -0
- package/dist/cjs/DeliverAt.js +30 -0
- package/dist/cjs/DeliverAt.js.map +1 -0
- package/dist/cjs/Entity.js +187 -0
- package/dist/cjs/Entity.js.map +1 -0
- package/dist/cjs/EntityAddress.js +54 -0
- package/dist/cjs/EntityAddress.js.map +1 -0
- package/dist/cjs/{AtLeastOnce.js → EntityId.js} +6 -7
- package/dist/cjs/EntityId.js.map +1 -0
- package/dist/cjs/{ShardManagerClient.js → EntityType.js} +5 -16
- package/dist/cjs/EntityType.js.map +1 -0
- package/dist/cjs/Envelope.js +168 -0
- package/dist/cjs/Envelope.js.map +1 -0
- package/dist/cjs/HttpCommon.js +49 -0
- package/dist/cjs/HttpCommon.js.map +1 -0
- package/dist/cjs/HttpRunner.js +108 -0
- package/dist/cjs/HttpRunner.js.map +1 -0
- package/dist/cjs/HttpShardManager.js +140 -0
- package/dist/cjs/HttpShardManager.js.map +1 -0
- package/dist/cjs/{AtLeastOnceStorage.js → MachineId.js} +11 -9
- package/dist/cjs/MachineId.js.map +1 -0
- package/dist/cjs/Message.js +99 -18
- package/dist/cjs/Message.js.map +1 -1
- package/dist/cjs/MessageStorage.js +356 -0
- package/dist/cjs/MessageStorage.js.map +1 -0
- package/dist/cjs/Reply.js +200 -0
- package/dist/cjs/Reply.js.map +1 -0
- package/dist/cjs/Runner.js +79 -0
- package/dist/cjs/Runner.js.map +1 -0
- package/dist/cjs/RunnerAddress.js +63 -0
- package/dist/cjs/RunnerAddress.js.map +1 -0
- package/dist/cjs/RunnerHealth.js +68 -0
- package/dist/cjs/RunnerHealth.js.map +1 -0
- package/dist/cjs/RunnerServer.js +125 -0
- package/dist/cjs/RunnerServer.js.map +1 -0
- package/dist/cjs/Runners.js +344 -0
- package/dist/cjs/Runners.js.map +1 -0
- package/dist/cjs/ShardId.js +7 -46
- package/dist/cjs/ShardId.js.map +1 -1
- package/dist/cjs/ShardManager.js +493 -8
- package/dist/cjs/ShardManager.js.map +1 -1
- package/dist/cjs/ShardStorage.js +139 -0
- package/dist/cjs/ShardStorage.js.map +1 -0
- package/dist/cjs/Sharding.js +731 -91
- package/dist/cjs/Sharding.js.map +1 -1
- package/dist/cjs/ShardingConfig.js +85 -18
- package/dist/cjs/ShardingConfig.js.map +1 -1
- package/dist/cjs/ShardingRegistrationEvent.js +26 -32
- package/dist/cjs/ShardingRegistrationEvent.js.map +1 -1
- package/dist/cjs/{ManagerConfig.js → Singleton.js} +11 -20
- package/dist/cjs/Singleton.js.map +1 -0
- package/dist/cjs/SingletonAddress.js +50 -0
- package/dist/cjs/SingletonAddress.js.map +1 -0
- package/dist/cjs/Snowflake.js +133 -0
- package/dist/cjs/Snowflake.js.map +1 -0
- package/dist/cjs/SocketRunner.js +40 -0
- package/dist/cjs/SocketRunner.js.map +1 -0
- package/dist/cjs/SocketShardManager.js +33 -0
- package/dist/cjs/SocketShardManager.js.map +1 -0
- package/dist/cjs/SqlMessageStorage.js +668 -0
- package/dist/cjs/SqlMessageStorage.js.map +1 -0
- package/dist/cjs/SqlShardStorage.js +228 -0
- package/dist/cjs/SqlShardStorage.js.map +1 -0
- package/dist/cjs/SynchronizedClock.js +66 -0
- package/dist/cjs/SynchronizedClock.js.map +1 -0
- package/dist/cjs/index.js +57 -45
- package/dist/cjs/internal/entityManager.js +311 -143
- package/dist/cjs/internal/entityManager.js.map +1 -1
- package/dist/cjs/internal/entityReaper.js +47 -0
- package/dist/cjs/internal/entityReaper.js.map +1 -0
- package/dist/cjs/internal/hash.js +20 -0
- package/dist/cjs/internal/hash.js.map +1 -0
- package/dist/cjs/internal/interruptors.js +9 -0
- package/dist/cjs/internal/interruptors.js.map +1 -0
- package/dist/cjs/internal/resourceMap.js +88 -0
- package/dist/cjs/internal/resourceMap.js.map +1 -0
- package/dist/cjs/internal/resourceRef.js +92 -0
- package/dist/cjs/internal/resourceRef.js.map +1 -0
- package/dist/cjs/internal/shardManager.js +219 -235
- package/dist/cjs/internal/shardManager.js.map +1 -1
- package/dist/dts/ClusterError.d.ts +169 -0
- package/dist/dts/ClusterError.d.ts.map +1 -0
- package/dist/dts/ClusterMetrics.d.ts +50 -0
- package/dist/dts/ClusterMetrics.d.ts.map +1 -0
- package/dist/dts/ClusterSchema.d.ts +13 -0
- package/dist/dts/ClusterSchema.d.ts.map +1 -0
- package/dist/dts/DeliverAt.d.ts +27 -0
- package/dist/dts/DeliverAt.d.ts.map +1 -0
- package/dist/dts/Entity.d.ts +180 -0
- package/dist/dts/Entity.d.ts.map +1 -0
- package/dist/dts/EntityAddress.d.ts +55 -0
- package/dist/dts/EntityAddress.d.ts.map +1 -0
- package/dist/dts/EntityId.d.ts +15 -0
- package/dist/dts/EntityId.d.ts.map +1 -0
- package/dist/dts/EntityType.d.ts +15 -0
- package/dist/dts/EntityType.d.ts.map +1 -0
- package/dist/dts/Envelope.d.ts +252 -0
- package/dist/dts/Envelope.d.ts.map +1 -0
- package/dist/dts/HttpCommon.d.ts +25 -0
- package/dist/dts/HttpCommon.d.ts.map +1 -0
- package/dist/dts/HttpRunner.d.ts +76 -0
- package/dist/dts/HttpRunner.d.ts.map +1 -0
- package/dist/dts/HttpShardManager.d.ts +119 -0
- package/dist/dts/HttpShardManager.d.ts.map +1 -0
- package/dist/dts/MachineId.d.ts +20 -0
- package/dist/dts/MachineId.d.ts.map +1 -0
- package/dist/dts/Message.d.ts +91 -74
- package/dist/dts/Message.d.ts.map +1 -1
- package/dist/dts/MessageStorage.d.ts +336 -0
- package/dist/dts/MessageStorage.d.ts.map +1 -0
- package/dist/dts/Reply.d.ts +171 -0
- package/dist/dts/Reply.d.ts.map +1 -0
- package/dist/dts/Runner.d.ts +81 -0
- package/dist/dts/Runner.d.ts.map +1 -0
- package/dist/dts/RunnerAddress.d.ts +56 -0
- package/dist/dts/RunnerAddress.d.ts.map +1 -0
- package/dist/dts/RunnerHealth.d.ts +54 -0
- package/dist/dts/RunnerHealth.d.ts.map +1 -0
- package/dist/dts/RunnerServer.d.ts +44 -0
- package/dist/dts/RunnerServer.d.ts.map +1 -0
- package/dist/dts/Runners.d.ts +161 -0
- package/dist/dts/Runners.d.ts.map +1 -0
- package/dist/dts/ShardId.d.ts +5 -55
- package/dist/dts/ShardId.d.ts.map +1 -1
- package/dist/dts/ShardManager.d.ts +435 -23
- package/dist/dts/ShardManager.d.ts.map +1 -1
- package/dist/dts/ShardStorage.d.ts +200 -0
- package/dist/dts/ShardStorage.d.ts.map +1 -0
- package/dist/dts/Sharding.d.ts +64 -133
- package/dist/dts/Sharding.d.ts.map +1 -1
- package/dist/dts/ShardingConfig.d.ts +147 -44
- package/dist/dts/ShardingConfig.d.ts.map +1 -1
- package/dist/dts/ShardingRegistrationEvent.d.ts +38 -23
- package/dist/dts/ShardingRegistrationEvent.d.ts.map +1 -1
- package/dist/dts/Singleton.d.ts +13 -0
- package/dist/dts/Singleton.d.ts.map +1 -0
- package/dist/dts/SingletonAddress.d.ts +49 -0
- package/dist/dts/SingletonAddress.d.ts.map +1 -0
- package/dist/dts/Snowflake.d.ts +121 -0
- package/dist/dts/Snowflake.d.ts.map +1 -0
- package/dist/dts/SocketRunner.d.ts +22 -0
- package/dist/dts/SocketRunner.d.ts.map +1 -0
- package/dist/dts/SocketShardManager.d.ts +17 -0
- package/dist/dts/SocketShardManager.d.ts.map +1 -0
- package/dist/dts/SqlMessageStorage.d.ts +43 -0
- package/dist/dts/SqlMessageStorage.d.ts.map +1 -0
- package/dist/dts/SqlShardStorage.d.ts +38 -0
- package/dist/dts/SqlShardStorage.d.ts.map +1 -0
- package/dist/dts/SynchronizedClock.d.ts +19 -0
- package/dist/dts/SynchronizedClock.d.ts.map +1 -0
- package/dist/dts/index.d.ts +48 -24
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/entityReaper.d.ts +2 -0
- package/dist/dts/internal/entityReaper.d.ts.map +1 -0
- package/dist/dts/internal/hash.d.ts +2 -0
- package/dist/dts/internal/hash.d.ts.map +1 -0
- package/dist/dts/internal/interruptors.d.ts +2 -0
- package/dist/dts/internal/interruptors.d.ts.map +1 -0
- package/dist/dts/internal/resourceMap.d.ts +22 -0
- package/dist/dts/internal/resourceMap.d.ts.map +1 -0
- package/dist/dts/internal/resourceRef.d.ts +25 -0
- package/dist/dts/internal/resourceRef.d.ts.map +1 -0
- package/dist/dts/internal/shardManager.d.ts +1 -11
- package/dist/dts/internal/shardManager.d.ts.map +1 -1
- package/dist/esm/ClusterError.js +164 -0
- package/dist/esm/ClusterError.js.map +1 -0
- package/dist/esm/ClusterMetrics.js +54 -0
- package/dist/esm/ClusterMetrics.js.map +1 -0
- package/dist/esm/ClusterSchema.js +13 -0
- package/dist/esm/ClusterSchema.js.map +1 -0
- package/dist/esm/DeliverAt.js +22 -0
- package/dist/esm/DeliverAt.js.map +1 -0
- package/dist/esm/Entity.js +173 -0
- package/dist/esm/Entity.js.map +1 -0
- package/dist/esm/EntityAddress.js +44 -0
- package/dist/esm/EntityAddress.js.map +1 -0
- package/dist/esm/EntityId.js +10 -0
- package/dist/esm/EntityId.js.map +1 -0
- package/dist/esm/EntityType.js +10 -0
- package/dist/esm/EntityType.js.map +1 -0
- package/dist/esm/Envelope.js +154 -0
- package/dist/esm/Envelope.js.map +1 -0
- package/dist/esm/HttpCommon.js +38 -0
- package/dist/esm/HttpCommon.js.map +1 -0
- package/dist/esm/HttpRunner.js +98 -0
- package/dist/esm/HttpRunner.js.map +1 -0
- package/dist/esm/HttpShardManager.js +128 -0
- package/dist/esm/HttpShardManager.js.map +1 -0
- package/dist/esm/MachineId.js +17 -0
- package/dist/esm/MachineId.js.map +1 -0
- package/dist/esm/Message.js +88 -17
- package/dist/esm/Message.js.map +1 -1
- package/dist/esm/MessageStorage.js +345 -0
- package/dist/esm/MessageStorage.js.map +1 -0
- package/dist/esm/Reply.js +184 -0
- package/dist/esm/Reply.js.map +1 -0
- package/dist/esm/Runner.js +68 -0
- package/dist/esm/Runner.js.map +1 -0
- package/dist/esm/RunnerAddress.js +52 -0
- package/dist/esm/RunnerAddress.js.map +1 -0
- package/dist/esm/RunnerHealth.js +58 -0
- package/dist/esm/RunnerHealth.js.map +1 -0
- package/dist/esm/RunnerServer.js +116 -0
- package/dist/esm/RunnerServer.js.map +1 -0
- package/dist/esm/Runners.js +332 -0
- package/dist/esm/Runners.js.map +1 -0
- package/dist/esm/ShardId.js +5 -42
- package/dist/esm/ShardId.js.map +1 -1
- package/dist/esm/ShardManager.js +486 -7
- package/dist/esm/ShardManager.js.map +1 -1
- package/dist/esm/ShardStorage.js +129 -0
- package/dist/esm/ShardStorage.js.map +1 -0
- package/dist/esm/Sharding.js +729 -90
- package/dist/esm/Sharding.js.map +1 -1
- package/dist/esm/ShardingConfig.js +80 -17
- package/dist/esm/ShardingConfig.js.map +1 -1
- package/dist/esm/ShardingRegistrationEvent.js +19 -29
- package/dist/esm/ShardingRegistrationEvent.js.map +1 -1
- package/dist/esm/Singleton.js +15 -0
- package/dist/esm/Singleton.js.map +1 -0
- package/dist/esm/SingletonAddress.js +40 -0
- package/dist/esm/SingletonAddress.js.map +1 -0
- package/dist/esm/Snowflake.js +117 -0
- package/dist/esm/Snowflake.js.map +1 -0
- package/dist/esm/SocketRunner.js +31 -0
- package/dist/esm/SocketRunner.js.map +1 -0
- package/dist/esm/SocketShardManager.js +24 -0
- package/dist/esm/SocketShardManager.js.map +1 -0
- package/dist/esm/SqlMessageStorage.js +658 -0
- package/dist/esm/SqlMessageStorage.js.map +1 -0
- package/dist/esm/SqlShardStorage.js +218 -0
- package/dist/esm/SqlShardStorage.js.map +1 -0
- package/dist/esm/SynchronizedClock.js +57 -0
- package/dist/esm/SynchronizedClock.js.map +1 -0
- package/dist/esm/index.js +48 -24
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/entityManager.js +311 -142
- package/dist/esm/internal/entityManager.js.map +1 -1
- package/dist/esm/internal/entityReaper.js +38 -0
- package/dist/esm/internal/entityReaper.js.map +1 -0
- package/dist/esm/internal/hash.js +12 -0
- package/dist/esm/internal/hash.js.map +1 -0
- package/dist/esm/internal/interruptors.js +3 -0
- package/dist/esm/internal/interruptors.js.map +1 -0
- package/dist/esm/internal/resourceMap.js +79 -0
- package/dist/esm/internal/resourceMap.js.map +1 -0
- package/dist/esm/internal/resourceRef.js +83 -0
- package/dist/esm/internal/resourceRef.js.map +1 -0
- package/dist/esm/internal/shardManager.js +217 -233
- package/dist/esm/internal/shardManager.js.map +1 -1
- package/package.json +212 -154
- package/src/ClusterError.ts +193 -0
- package/src/ClusterMetrics.ts +62 -0
- package/src/ClusterSchema.ts +13 -0
- package/src/DeliverAt.ts +36 -0
- package/src/Entity.ts +438 -0
- package/src/EntityAddress.ts +55 -0
- package/src/EntityId.ts +16 -0
- package/src/EntityType.ts +16 -0
- package/src/Envelope.ts +352 -0
- package/src/HttpCommon.ts +73 -0
- package/src/HttpRunner.ts +196 -0
- package/src/HttpShardManager.ts +273 -0
- package/src/MachineId.ts +27 -0
- package/src/Message.ts +143 -92
- package/src/MessageStorage.ts +697 -0
- package/src/Reply.ts +295 -0
- package/src/Runner.ts +84 -0
- package/src/RunnerAddress.ts +61 -0
- package/src/RunnerHealth.ts +87 -0
- package/src/RunnerServer.ts +156 -0
- package/src/Runners.ts +533 -0
- package/src/ShardId.ts +10 -62
- package/src/ShardManager.ts +780 -29
- package/src/ShardStorage.ts +289 -0
- package/src/Sharding.ts +1059 -186
- package/src/ShardingConfig.ts +186 -45
- package/src/ShardingRegistrationEvent.ts +38 -39
- package/src/Singleton.ts +20 -0
- package/src/SingletonAddress.ts +47 -0
- package/src/Snowflake.ts +194 -0
- package/src/SocketRunner.ts +59 -0
- package/src/SocketShardManager.ts +48 -0
- package/src/SqlMessageStorage.ts +833 -0
- package/src/SqlShardStorage.ts +292 -0
- package/src/SynchronizedClock.ts +82 -0
- package/src/index.ts +54 -24
- package/src/internal/entityManager.ts +464 -361
- package/src/internal/entityReaper.ts +53 -0
- package/src/internal/hash.ts +11 -0
- package/src/internal/interruptors.ts +4 -0
- package/src/internal/resourceMap.ts +89 -0
- package/src/internal/resourceRef.ts +88 -0
- package/src/internal/shardManager.ts +273 -546
- package/AtLeastOnce/package.json +0 -6
- package/AtLeastOnceStorage/package.json +0 -6
- package/Broadcaster/package.json +0 -6
- package/ManagerConfig/package.json +0 -6
- package/MessageState/package.json +0 -6
- package/Messenger/package.json +0 -6
- package/Pod/package.json +0 -6
- package/PodAddress/package.json +0 -6
- package/Pods/package.json +0 -6
- package/PodsHealth/package.json +0 -6
- package/PoisonPill/package.json +0 -6
- package/RecipientAddress/package.json +0 -6
- package/RecipientBehaviour/package.json +0 -6
- package/RecipientBehaviourContext/package.json +0 -6
- package/RecipientType/package.json +0 -6
- package/Serialization/package.json +0 -6
- package/SerializedEnvelope/package.json +0 -6
- package/SerializedMessage/package.json +0 -6
- package/ShardManagerClient/package.json +0 -6
- package/ShardingEvent/package.json +0 -6
- package/ShardingException/package.json +0 -6
- package/Storage/package.json +0 -6
- package/dist/cjs/AtLeastOnce.js.map +0 -1
- package/dist/cjs/AtLeastOnceStorage.js.map +0 -1
- package/dist/cjs/Broadcaster.js +0 -6
- package/dist/cjs/Broadcaster.js.map +0 -1
- package/dist/cjs/ManagerConfig.js.map +0 -1
- package/dist/cjs/MessageState.js +0 -55
- package/dist/cjs/MessageState.js.map +0 -1
- package/dist/cjs/Messenger.js +0 -6
- package/dist/cjs/Messenger.js.map +0 -1
- package/dist/cjs/Pod.js +0 -78
- package/dist/cjs/Pod.js.map +0 -1
- package/dist/cjs/PodAddress.js +0 -77
- package/dist/cjs/PodAddress.js.map +0 -1
- package/dist/cjs/Pods.js.map +0 -1
- package/dist/cjs/PodsHealth.js +0 -41
- package/dist/cjs/PodsHealth.js.map +0 -1
- package/dist/cjs/PoisonPill.js +0 -78
- package/dist/cjs/PoisonPill.js.map +0 -1
- package/dist/cjs/RecipientAddress.js +0 -79
- package/dist/cjs/RecipientAddress.js.map +0 -1
- package/dist/cjs/RecipientBehaviour.js +0 -38
- package/dist/cjs/RecipientBehaviour.js.map +0 -1
- package/dist/cjs/RecipientBehaviourContext.js +0 -64
- package/dist/cjs/RecipientBehaviourContext.js.map +0 -1
- package/dist/cjs/RecipientType.js +0 -123
- package/dist/cjs/RecipientType.js.map +0 -1
- package/dist/cjs/Serialization.js +0 -32
- package/dist/cjs/Serialization.js.map +0 -1
- package/dist/cjs/SerializedEnvelope.js +0 -87
- package/dist/cjs/SerializedEnvelope.js.map +0 -1
- package/dist/cjs/SerializedMessage.js +0 -64
- package/dist/cjs/SerializedMessage.js.map +0 -1
- package/dist/cjs/ShardManagerClient.js.map +0 -1
- package/dist/cjs/ShardingEvent.js +0 -72
- package/dist/cjs/ShardingEvent.js.map +0 -1
- package/dist/cjs/ShardingException.js +0 -107
- package/dist/cjs/ShardingException.js.map +0 -1
- package/dist/cjs/Storage.js +0 -40
- package/dist/cjs/Storage.js.map +0 -1
- package/dist/cjs/internal/atLeastOnce.js +0 -35
- package/dist/cjs/internal/atLeastOnce.js.map +0 -1
- package/dist/cjs/internal/atLeastOnceStorage.js +0 -163
- package/dist/cjs/internal/atLeastOnceStorage.js.map +0 -1
- package/dist/cjs/internal/entityState.js +0 -47
- package/dist/cjs/internal/entityState.js.map +0 -1
- package/dist/cjs/internal/managerConfig.js +0 -46
- package/dist/cjs/internal/managerConfig.js.map +0 -1
- package/dist/cjs/internal/message.js +0 -48
- package/dist/cjs/internal/message.js.map +0 -1
- package/dist/cjs/internal/messageState.js +0 -79
- package/dist/cjs/internal/messageState.js.map +0 -1
- package/dist/cjs/internal/podWithMetadata.js +0 -54
- package/dist/cjs/internal/podWithMetadata.js.map +0 -1
- package/dist/cjs/internal/pods.js +0 -35
- package/dist/cjs/internal/pods.js.map +0 -1
- package/dist/cjs/internal/podsHealth.js +0 -40
- package/dist/cjs/internal/podsHealth.js.map +0 -1
- package/dist/cjs/internal/recipientBehaviour.js +0 -52
- package/dist/cjs/internal/recipientBehaviour.js.map +0 -1
- package/dist/cjs/internal/recipientBehaviourContext.js +0 -36
- package/dist/cjs/internal/recipientBehaviourContext.js.map +0 -1
- package/dist/cjs/internal/serialization.js +0 -48
- package/dist/cjs/internal/serialization.js.map +0 -1
- package/dist/cjs/internal/shardManagerClient.js +0 -48
- package/dist/cjs/internal/shardManagerClient.js.map +0 -1
- package/dist/cjs/internal/shardManagerState.js +0 -44
- package/dist/cjs/internal/shardManagerState.js.map +0 -1
- package/dist/cjs/internal/sharding.js +0 -306
- package/dist/cjs/internal/sharding.js.map +0 -1
- package/dist/cjs/internal/shardingConfig.js +0 -56
- package/dist/cjs/internal/shardingConfig.js.map +0 -1
- package/dist/cjs/internal/storage.js +0 -52
- package/dist/cjs/internal/storage.js.map +0 -1
- package/dist/cjs/internal/utils.js +0 -69
- package/dist/cjs/internal/utils.js.map +0 -1
- package/dist/dts/AtLeastOnce.d.ts +0 -20
- package/dist/dts/AtLeastOnce.d.ts.map +0 -1
- package/dist/dts/AtLeastOnceStorage.d.ts +0 -75
- package/dist/dts/AtLeastOnceStorage.d.ts.map +0 -1
- package/dist/dts/Broadcaster.d.ts +0 -32
- package/dist/dts/Broadcaster.d.ts.map +0 -1
- package/dist/dts/ManagerConfig.d.ts +0 -61
- package/dist/dts/ManagerConfig.d.ts.map +0 -1
- package/dist/dts/MessageState.d.ts +0 -107
- package/dist/dts/MessageState.d.ts.map +0 -1
- package/dist/dts/Messenger.d.ts +0 -32
- package/dist/dts/Messenger.d.ts.map +0 -1
- package/dist/dts/Pod.d.ts +0 -81
- package/dist/dts/Pod.d.ts.map +0 -1
- package/dist/dts/PodAddress.d.ts +0 -80
- package/dist/dts/PodAddress.d.ts.map +0 -1
- package/dist/dts/Pods.d.ts +0 -78
- package/dist/dts/Pods.d.ts.map +0 -1
- package/dist/dts/PodsHealth.d.ts +0 -66
- package/dist/dts/PodsHealth.d.ts.map +0 -1
- package/dist/dts/PoisonPill.d.ts +0 -78
- package/dist/dts/PoisonPill.d.ts.map +0 -1
- package/dist/dts/RecipientAddress.d.ts +0 -57
- package/dist/dts/RecipientAddress.d.ts.map +0 -1
- package/dist/dts/RecipientBehaviour.d.ts +0 -72
- package/dist/dts/RecipientBehaviour.d.ts.map +0 -1
- package/dist/dts/RecipientBehaviourContext.d.ts +0 -83
- package/dist/dts/RecipientBehaviourContext.d.ts.map +0 -1
- package/dist/dts/RecipientType.d.ts +0 -93
- package/dist/dts/RecipientType.d.ts.map +0 -1
- package/dist/dts/Serialization.d.ts +0 -58
- package/dist/dts/Serialization.d.ts.map +0 -1
- package/dist/dts/SerializedEnvelope.d.ts +0 -86
- package/dist/dts/SerializedEnvelope.d.ts.map +0 -1
- package/dist/dts/SerializedMessage.d.ts +0 -66
- package/dist/dts/SerializedMessage.d.ts.map +0 -1
- package/dist/dts/ShardManagerClient.d.ts +0 -50
- package/dist/dts/ShardManagerClient.d.ts.map +0 -1
- package/dist/dts/ShardingEvent.d.ts +0 -90
- package/dist/dts/ShardingEvent.d.ts.map +0 -1
- package/dist/dts/ShardingException.d.ts +0 -125
- package/dist/dts/ShardingException.d.ts.map +0 -1
- package/dist/dts/Storage.d.ts +0 -78
- package/dist/dts/Storage.d.ts.map +0 -1
- package/dist/dts/internal/atLeastOnce.d.ts +0 -2
- package/dist/dts/internal/atLeastOnce.d.ts.map +0 -1
- package/dist/dts/internal/atLeastOnceStorage.d.ts +0 -2
- package/dist/dts/internal/atLeastOnceStorage.d.ts.map +0 -1
- package/dist/dts/internal/entityState.d.ts +0 -21
- package/dist/dts/internal/entityState.d.ts.map +0 -1
- package/dist/dts/internal/managerConfig.d.ts +0 -2
- package/dist/dts/internal/managerConfig.d.ts.map +0 -1
- package/dist/dts/internal/message.d.ts +0 -9
- package/dist/dts/internal/message.d.ts.map +0 -1
- package/dist/dts/internal/messageState.d.ts +0 -2
- package/dist/dts/internal/messageState.d.ts.map +0 -1
- package/dist/dts/internal/podWithMetadata.d.ts +0 -2
- package/dist/dts/internal/podWithMetadata.d.ts.map +0 -1
- package/dist/dts/internal/pods.d.ts +0 -2
- package/dist/dts/internal/pods.d.ts.map +0 -1
- package/dist/dts/internal/podsHealth.d.ts +0 -2
- package/dist/dts/internal/podsHealth.d.ts.map +0 -1
- package/dist/dts/internal/recipientBehaviour.d.ts +0 -2
- package/dist/dts/internal/recipientBehaviour.d.ts.map +0 -1
- package/dist/dts/internal/recipientBehaviourContext.d.ts +0 -2
- package/dist/dts/internal/recipientBehaviourContext.d.ts.map +0 -1
- package/dist/dts/internal/serialization.d.ts +0 -2
- package/dist/dts/internal/serialization.d.ts.map +0 -1
- package/dist/dts/internal/shardManagerClient.d.ts +0 -2
- package/dist/dts/internal/shardManagerClient.d.ts.map +0 -1
- package/dist/dts/internal/shardManagerState.d.ts +0 -26
- package/dist/dts/internal/shardManagerState.d.ts.map +0 -1
- package/dist/dts/internal/sharding.d.ts +0 -2
- package/dist/dts/internal/sharding.d.ts.map +0 -1
- package/dist/dts/internal/shardingConfig.d.ts +0 -2
- package/dist/dts/internal/shardingConfig.d.ts.map +0 -1
- package/dist/dts/internal/storage.d.ts +0 -2
- package/dist/dts/internal/storage.d.ts.map +0 -1
- package/dist/dts/internal/utils.d.ts +0 -2
- package/dist/dts/internal/utils.d.ts.map +0 -1
- package/dist/esm/AtLeastOnce.js +0 -12
- package/dist/esm/AtLeastOnce.js.map +0 -1
- package/dist/esm/AtLeastOnceStorage.js +0 -17
- package/dist/esm/AtLeastOnceStorage.js.map +0 -1
- package/dist/esm/Broadcaster.js +0 -2
- package/dist/esm/Broadcaster.js.map +0 -1
- package/dist/esm/ManagerConfig.js +0 -26
- package/dist/esm/ManagerConfig.js.map +0 -1
- package/dist/esm/MessageState.js +0 -47
- package/dist/esm/MessageState.js.map +0 -1
- package/dist/esm/Messenger.js +0 -2
- package/dist/esm/Messenger.js.map +0 -1
- package/dist/esm/Pod.js +0 -65
- package/dist/esm/Pod.js.map +0 -1
- package/dist/esm/PodAddress.js +0 -64
- package/dist/esm/PodAddress.js.map +0 -1
- package/dist/esm/Pods.js +0 -27
- package/dist/esm/Pods.js.map +0 -1
- package/dist/esm/PodsHealth.js +0 -33
- package/dist/esm/PodsHealth.js.map +0 -1
- package/dist/esm/PoisonPill.js +0 -65
- package/dist/esm/PoisonPill.js.map +0 -1
- package/dist/esm/RecipientAddress.js +0 -67
- package/dist/esm/RecipientAddress.js.map +0 -1
- package/dist/esm/RecipientBehaviour.js +0 -30
- package/dist/esm/RecipientBehaviour.js.map +0 -1
- package/dist/esm/RecipientBehaviourContext.js +0 -56
- package/dist/esm/RecipientBehaviourContext.js.map +0 -1
- package/dist/esm/RecipientType.js +0 -108
- package/dist/esm/RecipientType.js.map +0 -1
- package/dist/esm/Serialization.js +0 -24
- package/dist/esm/Serialization.js.map +0 -1
- package/dist/esm/SerializedEnvelope.js +0 -74
- package/dist/esm/SerializedEnvelope.js.map +0 -1
- package/dist/esm/SerializedMessage.js +0 -51
- package/dist/esm/SerializedMessage.js.map +0 -1
- package/dist/esm/ShardManagerClient.js +0 -22
- package/dist/esm/ShardManagerClient.js.map +0 -1
- package/dist/esm/ShardingEvent.js +0 -62
- package/dist/esm/ShardingEvent.js.map +0 -1
- package/dist/esm/ShardingException.js +0 -91
- package/dist/esm/ShardingException.js.map +0 -1
- package/dist/esm/Storage.js +0 -32
- package/dist/esm/Storage.js.map +0 -1
- package/dist/esm/internal/atLeastOnce.js +0 -26
- package/dist/esm/internal/atLeastOnce.js.map +0 -1
- package/dist/esm/internal/atLeastOnceStorage.js +0 -154
- package/dist/esm/internal/atLeastOnceStorage.js.map +0 -1
- package/dist/esm/internal/entityState.js +0 -35
- package/dist/esm/internal/entityState.js.map +0 -1
- package/dist/esm/internal/managerConfig.js +0 -38
- package/dist/esm/internal/managerConfig.js.map +0 -1
- package/dist/esm/internal/message.js +0 -35
- package/dist/esm/internal/message.js.map +0 -1
- package/dist/esm/internal/messageState.js +0 -66
- package/dist/esm/internal/messageState.js.map +0 -1
- package/dist/esm/internal/podWithMetadata.js +0 -41
- package/dist/esm/internal/podWithMetadata.js.map +0 -1
- package/dist/esm/internal/pods.js +0 -25
- package/dist/esm/internal/pods.js.map +0 -1
- package/dist/esm/internal/podsHealth.js +0 -30
- package/dist/esm/internal/podsHealth.js.map +0 -1
- package/dist/esm/internal/recipientBehaviour.js +0 -42
- package/dist/esm/internal/recipientBehaviour.js.map +0 -1
- package/dist/esm/internal/recipientBehaviourContext.js +0 -26
- package/dist/esm/internal/recipientBehaviourContext.js.map +0 -1
- package/dist/esm/internal/serialization.js +0 -38
- package/dist/esm/internal/serialization.js.map +0 -1
- package/dist/esm/internal/shardManagerClient.js +0 -38
- package/dist/esm/internal/shardManagerClient.js.map +0 -1
- package/dist/esm/internal/shardManagerState.js +0 -36
- package/dist/esm/internal/shardManagerState.js.map +0 -1
- package/dist/esm/internal/sharding.js +0 -288
- package/dist/esm/internal/sharding.js.map +0 -1
- package/dist/esm/internal/shardingConfig.js +0 -47
- package/dist/esm/internal/shardingConfig.js.map +0 -1
- package/dist/esm/internal/storage.js +0 -42
- package/dist/esm/internal/storage.js.map +0 -1
- package/dist/esm/internal/utils.js +0 -56
- package/dist/esm/internal/utils.js.map +0 -1
- package/src/AtLeastOnce.ts +0 -28
- package/src/AtLeastOnceStorage.ts +0 -96
- package/src/Broadcaster.ts +0 -48
- package/src/ManagerConfig.ts +0 -67
- package/src/MessageState.ts +0 -126
- package/src/Messenger.ts +0 -40
- package/src/Pod.ts +0 -95
- package/src/PodAddress.ts +0 -94
- package/src/Pods.ts +0 -100
- package/src/PodsHealth.ts +0 -74
- package/src/PoisonPill.ts +0 -105
- package/src/RecipientAddress.ts +0 -72
- package/src/RecipientBehaviour.ts +0 -108
- package/src/RecipientBehaviourContext.ts +0 -101
- package/src/RecipientType.ts +0 -134
- package/src/Serialization.ts +0 -72
- package/src/SerializedEnvelope.ts +0 -108
- package/src/SerializedMessage.ts +0 -82
- package/src/ShardManagerClient.ts +0 -57
- package/src/ShardingEvent.ts +0 -121
- package/src/ShardingException.ts +0 -151
- package/src/Storage.ts +0 -92
- package/src/internal/atLeastOnce.ts +0 -59
- package/src/internal/atLeastOnceStorage.ts +0 -218
- package/src/internal/entityState.ts +0 -64
- package/src/internal/managerConfig.ts +0 -84
- package/src/internal/message.ts +0 -63
- package/src/internal/messageState.ts +0 -98
- package/src/internal/podWithMetadata.ts +0 -72
- package/src/internal/pods.ts +0 -29
- package/src/internal/podsHealth.ts +0 -39
- package/src/internal/recipientBehaviour.ts +0 -133
- package/src/internal/recipientBehaviourContext.ts +0 -70
- package/src/internal/serialization.ts +0 -63
- package/src/internal/shardManagerClient.ts +0 -49
- package/src/internal/shardManagerState.ts +0 -80
- package/src/internal/sharding.ts +0 -789
- package/src/internal/shardingConfig.ts +0 -97
- package/src/internal/storage.ts +0 -60
- package/src/internal/utils.ts +0 -54
@@ -0,0 +1,658 @@
|
|
1
|
+
/**
|
2
|
+
* @since 1.0.0
|
3
|
+
*/
|
4
|
+
import * as SqlClient from "@effect/sql/SqlClient";
|
5
|
+
import * as Arr from "effect/Array";
|
6
|
+
import * as Effect from "effect/Effect";
|
7
|
+
import * as Layer from "effect/Layer";
|
8
|
+
import * as Option from "effect/Option";
|
9
|
+
import * as Schedule from "effect/Schedule";
|
10
|
+
import { PersistenceError } from "./ClusterError.js";
|
11
|
+
import * as MessageStorage from "./MessageStorage.js";
|
12
|
+
import { SaveResultEncoded } from "./MessageStorage.js";
|
13
|
+
import * as Snowflake from "./Snowflake.js";
|
14
|
+
/**
|
15
|
+
* @since 1.0.0
|
16
|
+
* @category Constructors
|
17
|
+
*/
|
18
|
+
export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
|
19
|
+
const sql = (yield* SqlClient.SqlClient).withoutTransforms();
|
20
|
+
const prefix = options?.prefix ?? "cluster";
|
21
|
+
const table = name => `${prefix}_${name}`;
|
22
|
+
const messageKindAckChunk = sql.literal(String(messageKind.AckChunk));
|
23
|
+
const replyKindWithExit = sql.literal(String(replyKind.WithExit));
|
24
|
+
const messagesTable = table("messages");
|
25
|
+
const messagesTableSql = sql(messagesTable);
|
26
|
+
const repliesTable = table("replies");
|
27
|
+
const repliesTableSql = sql(repliesTable);
|
28
|
+
yield* sql.onDialectOrElse({
|
29
|
+
mssql: () => sql`
|
30
|
+
IF OBJECT_ID(N'${messagesTableSql}', N'U') IS NULL
|
31
|
+
CREATE TABLE ${messagesTableSql} (
|
32
|
+
id BIGINT PRIMARY KEY,
|
33
|
+
rowid BIGINT IDENTITY(1,1),
|
34
|
+
message_id VARCHAR(255),
|
35
|
+
shard_id INT NOT NULL,
|
36
|
+
entity_type VARCHAR(255) NOT NULL,
|
37
|
+
entity_id VARCHAR(255) NOT NULL,
|
38
|
+
kind INT NOT NULL,
|
39
|
+
tag VARCHAR(255),
|
40
|
+
payload TEXT,
|
41
|
+
headers TEXT,
|
42
|
+
trace_id VARCHAR(255),
|
43
|
+
span_id VARCHAR(255),
|
44
|
+
sampled BIT,
|
45
|
+
processed BIT NOT NULL DEFAULT 0,
|
46
|
+
request_id BIGINT NOT NULL,
|
47
|
+
reply_id BIGINT,
|
48
|
+
last_reply_id BIGINT,
|
49
|
+
last_read DATETIME,
|
50
|
+
deliver_at BIGINT,
|
51
|
+
UNIQUE (message_id),
|
52
|
+
FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
|
53
|
+
)
|
54
|
+
`,
|
55
|
+
mysql: () => sql`
|
56
|
+
CREATE TABLE IF NOT EXISTS ${messagesTableSql} (
|
57
|
+
id BIGINT NOT NULL,
|
58
|
+
rowid BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
59
|
+
message_id VARCHAR(255),
|
60
|
+
shard_id INT NOT NULL,
|
61
|
+
entity_type VARCHAR(255) NOT NULL,
|
62
|
+
entity_id VARCHAR(255) NOT NULL,
|
63
|
+
kind INT NOT NULL,
|
64
|
+
tag VARCHAR(255),
|
65
|
+
payload TEXT,
|
66
|
+
headers TEXT,
|
67
|
+
trace_id VARCHAR(255),
|
68
|
+
span_id VARCHAR(255),
|
69
|
+
sampled BOOLEAN,
|
70
|
+
processed BOOLEAN NOT NULL DEFAULT FALSE,
|
71
|
+
request_id BIGINT NOT NULL,
|
72
|
+
reply_id BIGINT,
|
73
|
+
last_reply_id BIGINT,
|
74
|
+
last_read DATETIME,
|
75
|
+
deliver_at BIGINT,
|
76
|
+
UNIQUE (id),
|
77
|
+
UNIQUE (message_id),
|
78
|
+
FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
|
79
|
+
)
|
80
|
+
`,
|
81
|
+
pg: () => sql`
|
82
|
+
CREATE TABLE IF NOT EXISTS ${messagesTableSql} (
|
83
|
+
id BIGINT PRIMARY KEY,
|
84
|
+
rowid BIGSERIAL,
|
85
|
+
message_id VARCHAR(255),
|
86
|
+
shard_id INT NOT NULL,
|
87
|
+
entity_type VARCHAR(255) NOT NULL,
|
88
|
+
entity_id VARCHAR(255) NOT NULL,
|
89
|
+
kind INT NOT NULL,
|
90
|
+
tag VARCHAR(255),
|
91
|
+
payload TEXT,
|
92
|
+
headers TEXT,
|
93
|
+
trace_id VARCHAR(255),
|
94
|
+
span_id VARCHAR(255),
|
95
|
+
sampled BOOLEAN,
|
96
|
+
processed BOOLEAN NOT NULL DEFAULT FALSE,
|
97
|
+
request_id BIGINT NOT NULL,
|
98
|
+
reply_id BIGINT,
|
99
|
+
last_reply_id BIGINT,
|
100
|
+
last_read TIMESTAMP,
|
101
|
+
deliver_at BIGINT,
|
102
|
+
UNIQUE (message_id),
|
103
|
+
FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
|
104
|
+
)
|
105
|
+
`.pipe(Effect.ignore),
|
106
|
+
orElse: () =>
|
107
|
+
// sqlite
|
108
|
+
sql`
|
109
|
+
CREATE TABLE IF NOT EXISTS ${messagesTableSql} (
|
110
|
+
id INTEGER PRIMARY KEY,
|
111
|
+
message_id TEXT,
|
112
|
+
shard_id INTEGER NOT NULL,
|
113
|
+
entity_type TEXT NOT NULL,
|
114
|
+
entity_id TEXT NOT NULL,
|
115
|
+
kind INTEGER NOT NULL,
|
116
|
+
tag TEXT,
|
117
|
+
payload TEXT,
|
118
|
+
headers TEXT,
|
119
|
+
trace_id TEXT,
|
120
|
+
span_id TEXT,
|
121
|
+
sampled BOOLEAN,
|
122
|
+
processed BOOLEAN NOT NULL DEFAULT FALSE,
|
123
|
+
request_id INTEGER NOT NULL,
|
124
|
+
reply_id INTEGER,
|
125
|
+
last_reply_id INTEGER,
|
126
|
+
last_read TEXT,
|
127
|
+
deliver_at INTEGER,
|
128
|
+
UNIQUE (message_id),
|
129
|
+
FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
|
130
|
+
)
|
131
|
+
`
|
132
|
+
});
|
133
|
+
// Add message indexes optimized for the specific query patterns
|
134
|
+
const shardLookupIndex = `${messagesTable}_shard_idx`;
|
135
|
+
const requestIdLookupIndex = `${messagesTable}_request_id_idx`;
|
136
|
+
yield* sql.onDialectOrElse({
|
137
|
+
mssql: () => sql`
|
138
|
+
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = ${shardLookupIndex})
|
139
|
+
CREATE INDEX ${sql(shardLookupIndex)}
|
140
|
+
ON ${messagesTableSql} (shard_id, processed, last_read, deliver_at);
|
141
|
+
|
142
|
+
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = ${requestIdLookupIndex})
|
143
|
+
CREATE INDEX ${sql(requestIdLookupIndex)}
|
144
|
+
ON ${messagesTableSql} (request_id);
|
145
|
+
`,
|
146
|
+
mysql: () => sql`
|
147
|
+
CREATE INDEX ${sql(shardLookupIndex)}
|
148
|
+
ON ${messagesTableSql} (shard_id, processed, last_read, deliver_at);
|
149
|
+
|
150
|
+
CREATE INDEX ${sql(requestIdLookupIndex)}
|
151
|
+
ON ${messagesTableSql} (request_id);
|
152
|
+
`.unprepared.pipe(Effect.ignore),
|
153
|
+
pg: () => sql`
|
154
|
+
CREATE INDEX IF NOT EXISTS ${sql(shardLookupIndex)}
|
155
|
+
ON ${messagesTableSql} (shard_id, processed, last_read, deliver_at);
|
156
|
+
|
157
|
+
CREATE INDEX IF NOT EXISTS ${sql(requestIdLookupIndex)}
|
158
|
+
ON ${messagesTableSql} (request_id);
|
159
|
+
`.pipe(Effect.tapDefect(error => Effect.annotateLogs(Effect.logDebug("Failed to create indexes", error), {
|
160
|
+
package: "@effect/cluster",
|
161
|
+
module: "SqlMessageStorage"
|
162
|
+
})), Effect.retry({
|
163
|
+
schedule: Schedule.spaced(1000)
|
164
|
+
})),
|
165
|
+
orElse: () =>
|
166
|
+
// sqlite
|
167
|
+
Effect.all([sql`
|
168
|
+
CREATE INDEX IF NOT EXISTS ${sql(shardLookupIndex)}
|
169
|
+
ON ${messagesTableSql} (shard_id, processed, last_read, deliver_at)
|
170
|
+
`, sql`
|
171
|
+
CREATE INDEX IF NOT EXISTS ${sql(requestIdLookupIndex)}
|
172
|
+
ON ${messagesTableSql} (request_id)
|
173
|
+
`]).pipe(sql.withTransaction)
|
174
|
+
});
|
175
|
+
yield* sql.onDialectOrElse({
|
176
|
+
mssql: () => sql`
|
177
|
+
IF OBJECT_ID(N'${repliesTableSql}', N'U') IS NULL
|
178
|
+
CREATE TABLE ${repliesTableSql} (
|
179
|
+
id BIGINT PRIMARY KEY,
|
180
|
+
rowid BIGINT IDENTITY(1,1),
|
181
|
+
kind INT,
|
182
|
+
request_id BIGINT NOT NULL,
|
183
|
+
payload TEXT NOT NULL,
|
184
|
+
sequence INT,
|
185
|
+
acked BIT NOT NULL DEFAULT 0,
|
186
|
+
CONSTRAINT ${sql(repliesTable + "_one_exit")} UNIQUE (request_id, kind),
|
187
|
+
CONSTRAINT ${sql(repliesTable + "_sequence")} UNIQUE (request_id, sequence),
|
188
|
+
FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
|
189
|
+
)
|
190
|
+
`,
|
191
|
+
mysql: () => sql`
|
192
|
+
CREATE TABLE IF NOT EXISTS ${repliesTableSql} (
|
193
|
+
id BIGINT NOT NULL,
|
194
|
+
rowid BIGINT AUTO_INCREMENT PRIMARY KEY,
|
195
|
+
kind INT,
|
196
|
+
request_id BIGINT NOT NULL,
|
197
|
+
payload TEXT NOT NULL,
|
198
|
+
sequence INT,
|
199
|
+
acked BOOLEAN NOT NULL DEFAULT FALSE,
|
200
|
+
UNIQUE (id),
|
201
|
+
UNIQUE (request_id, kind),
|
202
|
+
UNIQUE (request_id, sequence),
|
203
|
+
FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
|
204
|
+
)
|
205
|
+
`,
|
206
|
+
pg: () => sql`
|
207
|
+
CREATE TABLE IF NOT EXISTS ${repliesTableSql} (
|
208
|
+
id BIGINT PRIMARY KEY,
|
209
|
+
rowid BIGSERIAL,
|
210
|
+
kind INT,
|
211
|
+
request_id BIGINT NOT NULL,
|
212
|
+
payload TEXT NOT NULL,
|
213
|
+
sequence INT,
|
214
|
+
acked BOOLEAN NOT NULL DEFAULT FALSE,
|
215
|
+
UNIQUE (request_id, kind),
|
216
|
+
UNIQUE (request_id, sequence),
|
217
|
+
FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
|
218
|
+
)
|
219
|
+
`,
|
220
|
+
orElse: () =>
|
221
|
+
// sqlite
|
222
|
+
sql`
|
223
|
+
CREATE TABLE IF NOT EXISTS ${repliesTableSql} (
|
224
|
+
id INTEGER PRIMARY KEY,
|
225
|
+
kind INTEGER,
|
226
|
+
request_id INTEGER NOT NULL,
|
227
|
+
payload TEXT NOT NULL,
|
228
|
+
sequence INTEGER,
|
229
|
+
acked BOOLEAN NOT NULL DEFAULT FALSE,
|
230
|
+
UNIQUE (request_id, kind),
|
231
|
+
UNIQUE (request_id, sequence),
|
232
|
+
FOREIGN KEY (request_id) REFERENCES ${messagesTableSql} (id) ON DELETE CASCADE
|
233
|
+
)
|
234
|
+
`
|
235
|
+
});
|
236
|
+
// Add reply indexes optimized for request_id lookups
|
237
|
+
const replyLookupIndex = `${repliesTable}_request_lookup_idx`;
|
238
|
+
yield* sql.onDialectOrElse({
|
239
|
+
mssql: () => sql`
|
240
|
+
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = ${replyLookupIndex})
|
241
|
+
CREATE INDEX ${sql(replyLookupIndex)}
|
242
|
+
ON ${repliesTableSql} (request_id, kind, acked);
|
243
|
+
`,
|
244
|
+
mysql: () => sql`
|
245
|
+
CREATE INDEX ${sql(replyLookupIndex)}
|
246
|
+
ON ${repliesTableSql} (request_id, kind, acked);
|
247
|
+
`.unprepared.pipe(Effect.ignore),
|
248
|
+
pg: () => sql`
|
249
|
+
CREATE INDEX IF NOT EXISTS ${sql(replyLookupIndex)}
|
250
|
+
ON ${repliesTableSql} (request_id, kind, acked);
|
251
|
+
`.pipe(Effect.tapDefect(error => Effect.annotateLogs(Effect.logDebug("Failed to create indexes", error), {
|
252
|
+
package: "@effect/cluster",
|
253
|
+
module: "SqlMessageStorage"
|
254
|
+
})), Effect.retry({
|
255
|
+
schedule: Schedule.spaced(1000)
|
256
|
+
})),
|
257
|
+
orElse: () =>
|
258
|
+
// sqlite
|
259
|
+
sql`
|
260
|
+
CREATE INDEX IF NOT EXISTS ${sql(replyLookupIndex)}
|
261
|
+
ON ${repliesTableSql} (request_id, kind, acked);
|
262
|
+
`
|
263
|
+
});
|
264
|
+
const envelopeToRow = (envelope, message_id, deliver_at) => {
|
265
|
+
switch (envelope._tag) {
|
266
|
+
case "Request":
|
267
|
+
return {
|
268
|
+
id: envelope.requestId,
|
269
|
+
message_id,
|
270
|
+
shard_id: envelope.address.shardId,
|
271
|
+
entity_type: envelope.address.entityType,
|
272
|
+
entity_id: envelope.address.entityId,
|
273
|
+
kind: messageKind.Request,
|
274
|
+
tag: envelope.tag,
|
275
|
+
payload: JSON.stringify(envelope.payload),
|
276
|
+
headers: JSON.stringify(envelope.headers),
|
277
|
+
trace_id: envelope.traceId,
|
278
|
+
span_id: envelope.spanId,
|
279
|
+
sampled: supportsBooleans ? envelope.sampled : envelope.sampled ? 1 : 0,
|
280
|
+
request_id: envelope.requestId,
|
281
|
+
reply_id: null,
|
282
|
+
deliver_at
|
283
|
+
};
|
284
|
+
case "AckChunk":
|
285
|
+
return {
|
286
|
+
id: envelope.id,
|
287
|
+
message_id,
|
288
|
+
shard_id: envelope.address.shardId,
|
289
|
+
entity_type: envelope.address.entityType,
|
290
|
+
entity_id: envelope.address.entityId,
|
291
|
+
kind: messageKind.AckChunk,
|
292
|
+
tag: null,
|
293
|
+
payload: null,
|
294
|
+
headers: null,
|
295
|
+
trace_id: null,
|
296
|
+
span_id: null,
|
297
|
+
sampled: null,
|
298
|
+
request_id: envelope.requestId,
|
299
|
+
reply_id: envelope.replyId,
|
300
|
+
deliver_at
|
301
|
+
};
|
302
|
+
case "Interrupt":
|
303
|
+
return {
|
304
|
+
id: envelope.id,
|
305
|
+
message_id,
|
306
|
+
shard_id: envelope.address.shardId,
|
307
|
+
entity_type: envelope.address.entityType,
|
308
|
+
entity_id: envelope.address.entityId,
|
309
|
+
kind: messageKind.Interrupt,
|
310
|
+
payload: null,
|
311
|
+
tag: null,
|
312
|
+
headers: null,
|
313
|
+
trace_id: null,
|
314
|
+
span_id: null,
|
315
|
+
sampled: null,
|
316
|
+
request_id: envelope.requestId,
|
317
|
+
reply_id: null,
|
318
|
+
deliver_at
|
319
|
+
};
|
320
|
+
}
|
321
|
+
};
|
322
|
+
const replyToRow = reply => ({
|
323
|
+
id: reply.id,
|
324
|
+
kind: replyKind[reply._tag],
|
325
|
+
request_id: reply.requestId,
|
326
|
+
payload: reply._tag === "WithExit" ? JSON.stringify(reply.exit) : JSON.stringify(reply.values),
|
327
|
+
sequence: reply._tag === "Chunk" ? reply.sequence : null
|
328
|
+
});
|
329
|
+
const supportsBooleans = sql.onDialectOrElse({
|
330
|
+
mssql: () => false,
|
331
|
+
sqlite: () => false,
|
332
|
+
orElse: () => true
|
333
|
+
});
|
334
|
+
const messageFromRow = row => {
|
335
|
+
switch (Number(row.kind)) {
|
336
|
+
case 0:
|
337
|
+
return {
|
338
|
+
envelope: {
|
339
|
+
_tag: "Request",
|
340
|
+
requestId: String(row.id),
|
341
|
+
address: {
|
342
|
+
shardId: Number(row.shard_id),
|
343
|
+
entityType: row.entity_type,
|
344
|
+
entityId: row.entity_id
|
345
|
+
},
|
346
|
+
tag: row.tag,
|
347
|
+
payload: JSON.parse(row.payload),
|
348
|
+
headers: JSON.parse(row.headers),
|
349
|
+
traceId: row.trace_id,
|
350
|
+
spanId: row.span_id,
|
351
|
+
sampled: !!row.sampled
|
352
|
+
},
|
353
|
+
lastSentReply: row.reply_reply_id ? Option.some({
|
354
|
+
_tag: "Chunk",
|
355
|
+
id: String(row.reply_reply_id),
|
356
|
+
requestId: String(row.request_id),
|
357
|
+
sequence: Number(row.reply_sequence),
|
358
|
+
values: JSON.parse(row.reply_payload)
|
359
|
+
}) : Option.none()
|
360
|
+
};
|
361
|
+
case 1:
|
362
|
+
return {
|
363
|
+
envelope: {
|
364
|
+
_tag: "AckChunk",
|
365
|
+
id: String(row.id),
|
366
|
+
requestId: String(row.request_id),
|
367
|
+
replyId: String(row.reply_id),
|
368
|
+
address: {
|
369
|
+
shardId: Number(row.shard_id),
|
370
|
+
entityType: row.entity_type,
|
371
|
+
entityId: row.entity_id
|
372
|
+
}
|
373
|
+
},
|
374
|
+
lastSentReply: Option.none()
|
375
|
+
};
|
376
|
+
case 2:
|
377
|
+
return {
|
378
|
+
envelope: {
|
379
|
+
_tag: "Interrupt",
|
380
|
+
id: String(row.id),
|
381
|
+
requestId: String(row.request_id),
|
382
|
+
address: {
|
383
|
+
shardId: Number(row.shard_id),
|
384
|
+
entityType: row.entity_type,
|
385
|
+
entityId: row.entity_id
|
386
|
+
}
|
387
|
+
},
|
388
|
+
lastSentReply: Option.none()
|
389
|
+
};
|
390
|
+
}
|
391
|
+
};
|
392
|
+
const sqlFalse = sql.literal(supportsBooleans ? "FALSE" : "0");
|
393
|
+
const sqlTrue = sql.literal(supportsBooleans ? "TRUE" : "1");
|
394
|
+
const insertEnvelope = sql.onDialectOrElse({
|
395
|
+
pg: () => (row, message_id) => sql`
|
396
|
+
WITH inserted AS (
|
397
|
+
INSERT INTO ${messagesTableSql} ${sql.insert(row)}
|
398
|
+
ON CONFLICT (message_id) DO NOTHING
|
399
|
+
RETURNING id
|
400
|
+
),
|
401
|
+
existing AS (
|
402
|
+
SELECT m.id, r.id as reply_id, r.kind as reply_kind, r.payload as reply_payload, r.sequence as reply_sequence
|
403
|
+
FROM ${messagesTableSql} m
|
404
|
+
LEFT JOIN ${repliesTableSql} r ON r.id = m.last_reply_id
|
405
|
+
WHERE m.message_id = ${message_id}
|
406
|
+
AND NOT EXISTS (SELECT 1 FROM inserted)
|
407
|
+
)
|
408
|
+
SELECT * FROM existing
|
409
|
+
`,
|
410
|
+
mysql: () => (row, message_id) => sql`
|
411
|
+
SELECT m.id, r.id as reply_id, r.kind as reply_kind, r.payload as reply_payload, r.sequence as reply_sequence
|
412
|
+
FROM ${messagesTableSql} m
|
413
|
+
LEFT JOIN ${repliesTableSql} r ON r.id = m.last_reply_id
|
414
|
+
WHERE m.message_id = ${message_id};
|
415
|
+
INSERT INTO ${messagesTableSql} ${sql.insert(row)}
|
416
|
+
ON DUPLICATE KEY UPDATE id = id;
|
417
|
+
`.unprepared.pipe(
|
418
|
+
// we need 2 queries for mysql, so we need to run them in a
|
419
|
+
// transaction with retries
|
420
|
+
sql.withTransaction, Effect.retry({
|
421
|
+
times: 3
|
422
|
+
}), Effect.map(([rows]) => rows)),
|
423
|
+
mssql: () => (row, message_id) => sql`
|
424
|
+
MERGE ${messagesTableSql} WITH (HOLDLOCK) AS target
|
425
|
+
USING (SELECT ${message_id} as message_id) AS source
|
426
|
+
ON target.message_id = source.message_id
|
427
|
+
WHEN NOT MATCHED THEN
|
428
|
+
INSERT ${sql.insert(row)}
|
429
|
+
OUTPUT
|
430
|
+
inserted.id,
|
431
|
+
CASE
|
432
|
+
WHEN inserted.id IS NULL THEN (
|
433
|
+
SELECT r.id, r.kind, r.payload
|
434
|
+
FROM ${repliesTableSql} r
|
435
|
+
WHERE r.id = target.last_reply_id
|
436
|
+
)
|
437
|
+
END as reply_id,
|
438
|
+
CASE
|
439
|
+
WHEN inserted.id IS NULL THEN (
|
440
|
+
SELECT r.kind
|
441
|
+
FROM ${repliesTableSql} r
|
442
|
+
WHERE r.id = target.last_reply_id
|
443
|
+
)
|
444
|
+
END as reply_kind,
|
445
|
+
CASE
|
446
|
+
WHEN inserted.id IS NULL THEN (
|
447
|
+
SELECT r.payload
|
448
|
+
FROM ${repliesTableSql} r
|
449
|
+
WHERE r.id = target.last_reply_id
|
450
|
+
)
|
451
|
+
END as reply_payload,
|
452
|
+
CASE
|
453
|
+
WHEN inserted.id IS NULL THEN (
|
454
|
+
SELECT r.sequence
|
455
|
+
FROM ${repliesTableSql} r
|
456
|
+
WHERE r.id = target.last_reply_id
|
457
|
+
)
|
458
|
+
END as reply_sequence;
|
459
|
+
`,
|
460
|
+
orElse: () => (row, message_id) => sql`
|
461
|
+
SELECT m.id, r.id as reply_id, r.kind as reply_kind, r.payload as reply_payload, r.sequence as reply_sequence
|
462
|
+
FROM ${messagesTableSql} m
|
463
|
+
LEFT JOIN ${repliesTableSql} r ON r.id = m.last_reply_id
|
464
|
+
WHERE m.message_id = ${message_id}
|
465
|
+
`.pipe(Effect.tap(sql`INSERT OR IGNORE INTO ${messagesTableSql} ${sql.insert(row)}`), sql.withTransaction, Effect.retry({
|
466
|
+
times: 3
|
467
|
+
}))
|
468
|
+
});
|
469
|
+
const fiveMinutesAgo = sql.onDialectOrElse({
|
470
|
+
mssql: () => sql.literal(`DATEADD(MINUTE, -5, GETDATE())`),
|
471
|
+
mysql: () => sql.literal(`NOW() - INTERVAL 5 MINUTE`),
|
472
|
+
pg: () => sql.literal(`NOW() - INTERVAL '5 minutes'`),
|
473
|
+
orElse: () => sql.literal(`DATETIME('now', '-5 minute')`)
|
474
|
+
});
|
475
|
+
const sqlNowString = sql.onDialectOrElse({
|
476
|
+
pg: () => "NOW()",
|
477
|
+
mysql: () => "NOW()",
|
478
|
+
mssql: () => "GETDATE()",
|
479
|
+
orElse: () => "CURRENT_TIMESTAMP"
|
480
|
+
});
|
481
|
+
const sqlNow = sql.literal(sqlNowString);
|
482
|
+
const getUnprocessedMessages = sql.onDialectOrElse({
|
483
|
+
pg: () => (shardIds, now) => sql`
|
484
|
+
UPDATE ${messagesTableSql} m
|
485
|
+
SET last_read = ${sqlNow}
|
486
|
+
FROM (
|
487
|
+
SELECT m.*
|
488
|
+
FROM ${messagesTableSql} m
|
489
|
+
WHERE m.shard_id IN (${sql.literal(shardIds.map(String).join(","))})
|
490
|
+
AND NOT EXISTS (
|
491
|
+
SELECT 1 FROM ${repliesTableSql}
|
492
|
+
WHERE request_id = m.request_id
|
493
|
+
AND (kind = ${replyKindWithExit} OR acked = ${sqlFalse})
|
494
|
+
)
|
495
|
+
AND m.processed = ${sqlFalse}
|
496
|
+
AND (m.last_read IS NULL OR m.last_read < ${fiveMinutesAgo})
|
497
|
+
AND (m.deliver_at IS NULL OR m.deliver_at <= ${sql.literal(String(now))})
|
498
|
+
ORDER BY m.rowid ASC
|
499
|
+
FOR UPDATE
|
500
|
+
) AS ids
|
501
|
+
LEFT JOIN ${repliesTableSql} r ON r.id = ids.last_reply_id
|
502
|
+
WHERE m.id = ids.id
|
503
|
+
RETURNING ids.*, r.id as reply_reply_id, r.kind as reply_kind, r.payload as reply_payload, r.sequence as reply_sequence
|
504
|
+
`,
|
505
|
+
orElse: () => (shardIds, now) => sql`
|
506
|
+
SELECT m.*, r.id as reply_reply_id, r.kind as reply_kind, r.payload as reply_payload, r.sequence as reply_sequence
|
507
|
+
FROM ${messagesTableSql} m
|
508
|
+
LEFT JOIN ${repliesTableSql} r ON r.id = m.last_reply_id
|
509
|
+
WHERE m.shard_id IN (${sql.literal(shardIds.map(String).join(","))})
|
510
|
+
AND NOT EXISTS (
|
511
|
+
SELECT 1 FROM ${repliesTableSql}
|
512
|
+
WHERE request_id = m.request_id
|
513
|
+
AND (kind = ${replyKindWithExit} OR acked = ${sqlFalse})
|
514
|
+
)
|
515
|
+
AND processed = ${sqlFalse}
|
516
|
+
AND (m.last_read IS NULL OR m.last_read < ${fiveMinutesAgo})
|
517
|
+
AND (m.deliver_at IS NULL OR m.deliver_at <= ${sql.literal(String(now))})
|
518
|
+
ORDER BY m.rowid ASC
|
519
|
+
`.unprepared.pipe(Effect.tap(rows => {
|
520
|
+
if (rows.length === 0) {
|
521
|
+
return Effect.void;
|
522
|
+
}
|
523
|
+
return sql`
|
524
|
+
UPDATE ${messagesTableSql}
|
525
|
+
SET last_read = ${sqlNow}
|
526
|
+
WHERE id IN (${sql.literal(rows.map(row => row.id).join(","))})
|
527
|
+
`.unprepared;
|
528
|
+
}), sql.withTransaction)
|
529
|
+
});
|
530
|
+
return yield* MessageStorage.makeEncoded({
|
531
|
+
saveEnvelope: ({
|
532
|
+
deliverAt,
|
533
|
+
envelope,
|
534
|
+
primaryKey
|
535
|
+
}) => Effect.suspend(() => {
|
536
|
+
const row = envelopeToRow(envelope, primaryKey, deliverAt);
|
537
|
+
let insert = primaryKey ? insertEnvelope(row, primaryKey) : Effect.as(sql`INSERT INTO ${messagesTableSql} ${sql.insert(row)}`.unprepared, []);
|
538
|
+
if (envelope._tag === "AckChunk") {
|
539
|
+
insert = sql`UPDATE ${repliesTableSql} SET acked = ${sqlTrue} WHERE id = ${envelope.replyId}`.pipe(Effect.andThen(sql`UPDATE ${messagesTableSql} SET processed = ${sqlTrue} WHERE processed = ${sqlFalse} AND request_id = ${envelope.requestId} AND kind = ${messageKindAckChunk}`), Effect.andThen(insert), sql.withTransaction);
|
540
|
+
}
|
541
|
+
return insert.pipe(Effect.map(rows => {
|
542
|
+
if (rows.length === 0) {
|
543
|
+
return SaveResultEncoded.Success();
|
544
|
+
}
|
545
|
+
const row = rows[0];
|
546
|
+
return SaveResultEncoded.Duplicate({
|
547
|
+
originalId: Snowflake.Snowflake(row.id),
|
548
|
+
lastReceivedReply: row.reply_id ? Option.some({
|
549
|
+
id: String(row.reply_id),
|
550
|
+
requestId: String(row.id),
|
551
|
+
_tag: row.reply_kind === replyKind.WithExit ? "WithExit" : "Chunk",
|
552
|
+
...(row.reply_kind === replyKind.WithExit ? {
|
553
|
+
exit: JSON.parse(row.reply_payload)
|
554
|
+
} : {
|
555
|
+
sequence: Number(row.reply_sequence),
|
556
|
+
values: JSON.parse(row.reply_payload)
|
557
|
+
})
|
558
|
+
}) : Option.none()
|
559
|
+
});
|
560
|
+
}));
|
561
|
+
}).pipe(Effect.provideService(SqlClient.SafeIntegers, true), PersistenceError.refail),
|
562
|
+
saveReply: reply => Effect.suspend(() => {
|
563
|
+
const row = replyToRow(reply);
|
564
|
+
const update = reply._tag === "Chunk" ? sql`UPDATE ${messagesTableSql} SET last_reply_id = ${reply.id} WHERE id = ${reply.requestId}` : sql`UPDATE ${messagesTableSql} SET processed = ${sqlTrue}, last_reply_id = NULL WHERE request_id = ${reply.requestId}`;
|
565
|
+
return update.unprepared.pipe(Effect.andThen(sql`INSERT INTO ${repliesTableSql} ${sql.insert(row)}`), sql.withTransaction);
|
566
|
+
}).pipe(Effect.asVoid, PersistenceError.refail),
|
567
|
+
repliesFor: requestIds =>
|
568
|
+
// replies where:
|
569
|
+
// - the request is in the list
|
570
|
+
// - the kind is WithExit
|
571
|
+
// - or the kind is Chunk and has not been acked yet
|
572
|
+
sql`
|
573
|
+
SELECT id, kind, request_id, payload, sequence
|
574
|
+
FROM ${repliesTableSql}
|
575
|
+
WHERE request_id IN (${sql.literal(requestIds.join(","))})
|
576
|
+
AND (
|
577
|
+
kind = ${replyKindWithExit}
|
578
|
+
OR (
|
579
|
+
kind IS NULL
|
580
|
+
AND acked = ${sqlFalse}
|
581
|
+
)
|
582
|
+
)
|
583
|
+
ORDER BY rowid ASC
|
584
|
+
`.unprepared.pipe(Effect.provideService(SqlClient.SafeIntegers, true), Effect.map(Arr.map(row => row.kind === replyKind.WithExit ? {
|
585
|
+
_tag: "WithExit",
|
586
|
+
id: String(row.id),
|
587
|
+
requestId: String(row.request_id),
|
588
|
+
exit: JSON.parse(row.payload)
|
589
|
+
} : {
|
590
|
+
_tag: "Chunk",
|
591
|
+
id: String(row.id),
|
592
|
+
requestId: String(row.request_id),
|
593
|
+
values: JSON.parse(row.payload),
|
594
|
+
sequence: Number(row.sequence)
|
595
|
+
})), PersistenceError.refail),
|
596
|
+
unprocessedMessages: Effect.fnUntraced(function* (shardIds, now) {
|
597
|
+
const rows = yield* getUnprocessedMessages(shardIds, now);
|
598
|
+
if (rows.length === 0) {
|
599
|
+
return [];
|
600
|
+
}
|
601
|
+
const messages = new Array(rows.length);
|
602
|
+
const ids = new Array(rows.length);
|
603
|
+
for (let i = 0; i < rows.length; i++) {
|
604
|
+
messages[i] = messageFromRow(rows[i]);
|
605
|
+
ids[i] = String(rows[i].id);
|
606
|
+
}
|
607
|
+
return messages;
|
608
|
+
}, Effect.provideService(SqlClient.SafeIntegers, true), PersistenceError.refail),
|
609
|
+
unprocessedMessagesById(ids, now) {
|
610
|
+
const idArr = Array.from(ids, id => String(id));
|
611
|
+
return sql`
|
612
|
+
SELECT m.*, r.id as reply_id, r.kind as reply_kind, r.payload as reply_payload, r.sequence as reply_sequence
|
613
|
+
FROM ${messagesTableSql} m
|
614
|
+
LEFT JOIN ${repliesTableSql} r ON r.id = m.last_reply_id
|
615
|
+
WHERE m.id IN (${sql.literal(idArr.join(","))})
|
616
|
+
AND NOT EXISTS (
|
617
|
+
SELECT 1 FROM ${repliesTableSql}
|
618
|
+
WHERE request_id = m.request_id
|
619
|
+
AND (kind = ${replyKindWithExit} OR acked = ${sqlFalse})
|
620
|
+
)
|
621
|
+
AND m.processed = ${sqlFalse}
|
622
|
+
AND (m.deliver_at IS NULL OR m.deliver_at <= ${sql.literal(String(now))})
|
623
|
+
ORDER BY m.rowid ASC
|
624
|
+
`.unprepared.pipe(Effect.map(Arr.map(messageFromRow)), Effect.provideService(SqlClient.SafeIntegers, true), PersistenceError.refail);
|
625
|
+
},
|
626
|
+
resetAddress: address => sql`
|
627
|
+
UPDATE ${messagesTableSql}
|
628
|
+
SET last_read = NULL
|
629
|
+
WHERE processed = ${sqlFalse}
|
630
|
+
AND shard_id = ${address.shardId}
|
631
|
+
AND entity_type = ${address.entityType}
|
632
|
+
AND entity_id = ${address.entityId}
|
633
|
+
`.pipe(Effect.asVoid, PersistenceError.refail)
|
634
|
+
});
|
635
|
+
});
|
636
|
+
/**
|
637
|
+
* @since 1.0.0
|
638
|
+
* @category Layers
|
639
|
+
*/
|
640
|
+
export const layer = /*#__PURE__*/Layer.scoped(MessageStorage.MessageStorage, make()).pipe( /*#__PURE__*/Layer.provide(Snowflake.layerGenerator));
|
641
|
+
/**
|
642
|
+
* @since 1.0.0
|
643
|
+
* @category Layers
|
644
|
+
*/
|
645
|
+
export const layerWith = options => Layer.scoped(MessageStorage.MessageStorage, make(options)).pipe(Layer.provide(Snowflake.layerGenerator));
|
646
|
+
// -------------------------------------------------------------------------------------------------
|
647
|
+
// internal
|
648
|
+
// -------------------------------------------------------------------------------------------------
|
649
|
+
const messageKind = {
|
650
|
+
"Request": 0,
|
651
|
+
"AckChunk": 1,
|
652
|
+
"Interrupt": 2
|
653
|
+
};
|
654
|
+
const replyKind = {
|
655
|
+
"WithExit": 0,
|
656
|
+
"Chunk": null
|
657
|
+
};
|
658
|
+
//# sourceMappingURL=SqlMessageStorage.js.map
|