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