@effect/cluster 0.0.0-snapshot-d33d8b050b8e3c87dcde9587083e6c1cf733f72b

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 (375) hide show
  1. package/AtLeastOnce/package.json +6 -0
  2. package/AtLeastOnceStorage/package.json +6 -0
  3. package/Broadcaster/package.json +6 -0
  4. package/LICENSE +21 -0
  5. package/ManagerConfig/package.json +6 -0
  6. package/Message/package.json +6 -0
  7. package/MessageState/package.json +6 -0
  8. package/Messenger/package.json +6 -0
  9. package/Pod/package.json +6 -0
  10. package/PodAddress/package.json +6 -0
  11. package/Pods/package.json +6 -0
  12. package/PodsHealth/package.json +6 -0
  13. package/PoisonPill/package.json +6 -0
  14. package/README.md +3 -0
  15. package/RecipientAddress/package.json +6 -0
  16. package/RecipientBehaviour/package.json +6 -0
  17. package/RecipientBehaviourContext/package.json +6 -0
  18. package/RecipientType/package.json +6 -0
  19. package/Serialization/package.json +6 -0
  20. package/SerializedEnvelope/package.json +6 -0
  21. package/SerializedMessage/package.json +6 -0
  22. package/ShardId/package.json +6 -0
  23. package/ShardManager/package.json +6 -0
  24. package/ShardManagerClient/package.json +6 -0
  25. package/Sharding/package.json +6 -0
  26. package/ShardingConfig/package.json +6 -0
  27. package/ShardingEvent/package.json +6 -0
  28. package/ShardingException/package.json +6 -0
  29. package/ShardingRegistrationEvent/package.json +6 -0
  30. package/Storage/package.json +6 -0
  31. package/dist/cjs/AtLeastOnce.js +43 -0
  32. package/dist/cjs/AtLeastOnce.js.map +1 -0
  33. package/dist/cjs/AtLeastOnceStorage.js +48 -0
  34. package/dist/cjs/AtLeastOnceStorage.js.map +1 -0
  35. package/dist/cjs/Broadcaster.js +6 -0
  36. package/dist/cjs/Broadcaster.js.map +1 -0
  37. package/dist/cjs/ManagerConfig.js +57 -0
  38. package/dist/cjs/ManagerConfig.js.map +1 -0
  39. package/dist/cjs/Message.js +64 -0
  40. package/dist/cjs/Message.js.map +1 -0
  41. package/dist/cjs/MessageState.js +78 -0
  42. package/dist/cjs/MessageState.js.map +1 -0
  43. package/dist/cjs/Messenger.js +6 -0
  44. package/dist/cjs/Messenger.js.map +1 -0
  45. package/dist/cjs/Pod.js +101 -0
  46. package/dist/cjs/Pod.js.map +1 -0
  47. package/dist/cjs/PodAddress.js +100 -0
  48. package/dist/cjs/PodAddress.js.map +1 -0
  49. package/dist/cjs/Pods.js +58 -0
  50. package/dist/cjs/Pods.js.map +1 -0
  51. package/dist/cjs/PodsHealth.js +64 -0
  52. package/dist/cjs/PodsHealth.js.map +1 -0
  53. package/dist/cjs/PoisonPill.js +101 -0
  54. package/dist/cjs/PoisonPill.js.map +1 -0
  55. package/dist/cjs/RecipientAddress.js +102 -0
  56. package/dist/cjs/RecipientAddress.js.map +1 -0
  57. package/dist/cjs/RecipientBehaviour.js +61 -0
  58. package/dist/cjs/RecipientBehaviour.js.map +1 -0
  59. package/dist/cjs/RecipientBehaviourContext.js +87 -0
  60. package/dist/cjs/RecipientBehaviourContext.js.map +1 -0
  61. package/dist/cjs/RecipientType.js +142 -0
  62. package/dist/cjs/RecipientType.js.map +1 -0
  63. package/dist/cjs/Serialization.js +55 -0
  64. package/dist/cjs/Serialization.js.map +1 -0
  65. package/dist/cjs/SerializedEnvelope.js +111 -0
  66. package/dist/cjs/SerializedEnvelope.js.map +1 -0
  67. package/dist/cjs/SerializedMessage.js +87 -0
  68. package/dist/cjs/SerializedMessage.js.map +1 -0
  69. package/dist/cjs/ShardId.js +89 -0
  70. package/dist/cjs/ShardId.js.map +1 -0
  71. package/dist/cjs/ShardManager.js +48 -0
  72. package/dist/cjs/ShardManager.js.map +1 -0
  73. package/dist/cjs/ShardManagerClient.js +53 -0
  74. package/dist/cjs/ShardManagerClient.js.map +1 -0
  75. package/dist/cjs/Sharding.js +129 -0
  76. package/dist/cjs/Sharding.js.map +1 -0
  77. package/dist/cjs/ShardingConfig.js +64 -0
  78. package/dist/cjs/ShardingConfig.js.map +1 -0
  79. package/dist/cjs/ShardingEvent.js +72 -0
  80. package/dist/cjs/ShardingEvent.js.map +1 -0
  81. package/dist/cjs/ShardingException.js +130 -0
  82. package/dist/cjs/ShardingException.js.map +1 -0
  83. package/dist/cjs/ShardingRegistrationEvent.js +44 -0
  84. package/dist/cjs/ShardingRegistrationEvent.js.map +1 -0
  85. package/dist/cjs/Storage.js +63 -0
  86. package/dist/cjs/Storage.js.map +1 -0
  87. package/dist/cjs/index.js +88 -0
  88. package/dist/cjs/index.js.map +1 -0
  89. package/dist/cjs/internal/atLeastOnce.js +58 -0
  90. package/dist/cjs/internal/atLeastOnce.js.map +1 -0
  91. package/dist/cjs/internal/atLeastOnceStorage.js +186 -0
  92. package/dist/cjs/internal/atLeastOnceStorage.js.map +1 -0
  93. package/dist/cjs/internal/entityManager.js +191 -0
  94. package/dist/cjs/internal/entityManager.js.map +1 -0
  95. package/dist/cjs/internal/entityState.js +70 -0
  96. package/dist/cjs/internal/entityState.js.map +1 -0
  97. package/dist/cjs/internal/managerConfig.js +69 -0
  98. package/dist/cjs/internal/managerConfig.js.map +1 -0
  99. package/dist/cjs/internal/message.js +68 -0
  100. package/dist/cjs/internal/message.js.map +1 -0
  101. package/dist/cjs/internal/messageState.js +102 -0
  102. package/dist/cjs/internal/messageState.js.map +1 -0
  103. package/dist/cjs/internal/podWithMetadata.js +77 -0
  104. package/dist/cjs/internal/podWithMetadata.js.map +1 -0
  105. package/dist/cjs/internal/pods.js +58 -0
  106. package/dist/cjs/internal/pods.js.map +1 -0
  107. package/dist/cjs/internal/podsHealth.js +63 -0
  108. package/dist/cjs/internal/podsHealth.js.map +1 -0
  109. package/dist/cjs/internal/recipientBehaviour.js +75 -0
  110. package/dist/cjs/internal/recipientBehaviour.js.map +1 -0
  111. package/dist/cjs/internal/recipientBehaviourContext.js +59 -0
  112. package/dist/cjs/internal/recipientBehaviourContext.js.map +1 -0
  113. package/dist/cjs/internal/serialization.js +72 -0
  114. package/dist/cjs/internal/serialization.js.map +1 -0
  115. package/dist/cjs/internal/shardManager.js +291 -0
  116. package/dist/cjs/internal/shardManager.js.map +1 -0
  117. package/dist/cjs/internal/shardManagerClient.js +71 -0
  118. package/dist/cjs/internal/shardManagerClient.js.map +1 -0
  119. package/dist/cjs/internal/shardManagerState.js +67 -0
  120. package/dist/cjs/internal/shardManagerState.js.map +1 -0
  121. package/dist/cjs/internal/sharding.js +329 -0
  122. package/dist/cjs/internal/sharding.js.map +1 -0
  123. package/dist/cjs/internal/shardingConfig.js +79 -0
  124. package/dist/cjs/internal/shardingConfig.js.map +1 -0
  125. package/dist/cjs/internal/storage.js +75 -0
  126. package/dist/cjs/internal/storage.js.map +1 -0
  127. package/dist/cjs/internal/utils.js +92 -0
  128. package/dist/cjs/internal/utils.js.map +1 -0
  129. package/dist/dts/AtLeastOnce.d.ts +20 -0
  130. package/dist/dts/AtLeastOnce.d.ts.map +1 -0
  131. package/dist/dts/AtLeastOnceStorage.d.ts +75 -0
  132. package/dist/dts/AtLeastOnceStorage.d.ts.map +1 -0
  133. package/dist/dts/Broadcaster.d.ts +32 -0
  134. package/dist/dts/Broadcaster.d.ts.map +1 -0
  135. package/dist/dts/ManagerConfig.d.ts +61 -0
  136. package/dist/dts/ManagerConfig.d.ts.map +1 -0
  137. package/dist/dts/Message.d.ts +106 -0
  138. package/dist/dts/Message.d.ts.map +1 -0
  139. package/dist/dts/MessageState.d.ts +107 -0
  140. package/dist/dts/MessageState.d.ts.map +1 -0
  141. package/dist/dts/Messenger.d.ts +32 -0
  142. package/dist/dts/Messenger.d.ts.map +1 -0
  143. package/dist/dts/Pod.d.ts +81 -0
  144. package/dist/dts/Pod.d.ts.map +1 -0
  145. package/dist/dts/PodAddress.d.ts +80 -0
  146. package/dist/dts/PodAddress.d.ts.map +1 -0
  147. package/dist/dts/Pods.d.ts +78 -0
  148. package/dist/dts/Pods.d.ts.map +1 -0
  149. package/dist/dts/PodsHealth.d.ts +66 -0
  150. package/dist/dts/PodsHealth.d.ts.map +1 -0
  151. package/dist/dts/PoisonPill.d.ts +78 -0
  152. package/dist/dts/PoisonPill.d.ts.map +1 -0
  153. package/dist/dts/RecipientAddress.d.ts +57 -0
  154. package/dist/dts/RecipientAddress.d.ts.map +1 -0
  155. package/dist/dts/RecipientBehaviour.d.ts +72 -0
  156. package/dist/dts/RecipientBehaviour.d.ts.map +1 -0
  157. package/dist/dts/RecipientBehaviourContext.d.ts +83 -0
  158. package/dist/dts/RecipientBehaviourContext.d.ts.map +1 -0
  159. package/dist/dts/RecipientType.d.ts +96 -0
  160. package/dist/dts/RecipientType.d.ts.map +1 -0
  161. package/dist/dts/Serialization.d.ts +58 -0
  162. package/dist/dts/Serialization.d.ts.map +1 -0
  163. package/dist/dts/SerializedEnvelope.d.ts +87 -0
  164. package/dist/dts/SerializedEnvelope.d.ts.map +1 -0
  165. package/dist/dts/SerializedMessage.d.ts +66 -0
  166. package/dist/dts/SerializedMessage.d.ts.map +1 -0
  167. package/dist/dts/ShardId.d.ts +70 -0
  168. package/dist/dts/ShardId.d.ts.map +1 -0
  169. package/dist/dts/ShardManager.d.ts +44 -0
  170. package/dist/dts/ShardManager.d.ts.map +1 -0
  171. package/dist/dts/ShardManagerClient.d.ts +50 -0
  172. package/dist/dts/ShardManagerClient.d.ts.map +1 -0
  173. package/dist/dts/Sharding.d.ts +146 -0
  174. package/dist/dts/Sharding.d.ts.map +1 -0
  175. package/dist/dts/ShardingConfig.d.ts +69 -0
  176. package/dist/dts/ShardingConfig.d.ts.map +1 -0
  177. package/dist/dts/ShardingEvent.d.ts +90 -0
  178. package/dist/dts/ShardingEvent.d.ts.map +1 -0
  179. package/dist/dts/ShardingException.d.ts +125 -0
  180. package/dist/dts/ShardingException.d.ts.map +1 -0
  181. package/dist/dts/ShardingRegistrationEvent.d.ts +44 -0
  182. package/dist/dts/ShardingRegistrationEvent.d.ts.map +1 -0
  183. package/dist/dts/Storage.d.ts +78 -0
  184. package/dist/dts/Storage.d.ts.map +1 -0
  185. package/dist/dts/index.d.ts +113 -0
  186. package/dist/dts/index.d.ts.map +1 -0
  187. package/dist/dts/internal/atLeastOnce.d.ts +2 -0
  188. package/dist/dts/internal/atLeastOnce.d.ts.map +1 -0
  189. package/dist/dts/internal/atLeastOnceStorage.d.ts +2 -0
  190. package/dist/dts/internal/atLeastOnceStorage.d.ts.map +1 -0
  191. package/dist/dts/internal/entityManager.d.ts +2 -0
  192. package/dist/dts/internal/entityManager.d.ts.map +1 -0
  193. package/dist/dts/internal/entityState.d.ts +21 -0
  194. package/dist/dts/internal/entityState.d.ts.map +1 -0
  195. package/dist/dts/internal/managerConfig.d.ts +2 -0
  196. package/dist/dts/internal/managerConfig.d.ts.map +1 -0
  197. package/dist/dts/internal/message.d.ts +9 -0
  198. package/dist/dts/internal/message.d.ts.map +1 -0
  199. package/dist/dts/internal/messageState.d.ts +2 -0
  200. package/dist/dts/internal/messageState.d.ts.map +1 -0
  201. package/dist/dts/internal/podWithMetadata.d.ts +2 -0
  202. package/dist/dts/internal/podWithMetadata.d.ts.map +1 -0
  203. package/dist/dts/internal/pods.d.ts +2 -0
  204. package/dist/dts/internal/pods.d.ts.map +1 -0
  205. package/dist/dts/internal/podsHealth.d.ts +2 -0
  206. package/dist/dts/internal/podsHealth.d.ts.map +1 -0
  207. package/dist/dts/internal/recipientBehaviour.d.ts +2 -0
  208. package/dist/dts/internal/recipientBehaviour.d.ts.map +1 -0
  209. package/dist/dts/internal/recipientBehaviourContext.d.ts +2 -0
  210. package/dist/dts/internal/recipientBehaviourContext.d.ts.map +1 -0
  211. package/dist/dts/internal/serialization.d.ts +2 -0
  212. package/dist/dts/internal/serialization.d.ts.map +1 -0
  213. package/dist/dts/internal/shardManager.d.ts +12 -0
  214. package/dist/dts/internal/shardManager.d.ts.map +1 -0
  215. package/dist/dts/internal/shardManagerClient.d.ts +2 -0
  216. package/dist/dts/internal/shardManagerClient.d.ts.map +1 -0
  217. package/dist/dts/internal/shardManagerState.d.ts +26 -0
  218. package/dist/dts/internal/shardManagerState.d.ts.map +1 -0
  219. package/dist/dts/internal/sharding.d.ts +2 -0
  220. package/dist/dts/internal/sharding.d.ts.map +1 -0
  221. package/dist/dts/internal/shardingConfig.d.ts +2 -0
  222. package/dist/dts/internal/shardingConfig.d.ts.map +1 -0
  223. package/dist/dts/internal/storage.d.ts +2 -0
  224. package/dist/dts/internal/storage.d.ts.map +1 -0
  225. package/dist/dts/internal/utils.d.ts +2 -0
  226. package/dist/dts/internal/utils.d.ts.map +1 -0
  227. package/dist/esm/AtLeastOnce.js +12 -0
  228. package/dist/esm/AtLeastOnce.js.map +1 -0
  229. package/dist/esm/AtLeastOnceStorage.js +17 -0
  230. package/dist/esm/AtLeastOnceStorage.js.map +1 -0
  231. package/dist/esm/Broadcaster.js +2 -0
  232. package/dist/esm/Broadcaster.js.map +1 -0
  233. package/dist/esm/ManagerConfig.js +26 -0
  234. package/dist/esm/ManagerConfig.js.map +1 -0
  235. package/dist/esm/Message.js +33 -0
  236. package/dist/esm/Message.js.map +1 -0
  237. package/dist/esm/MessageState.js +47 -0
  238. package/dist/esm/MessageState.js.map +1 -0
  239. package/dist/esm/Messenger.js +2 -0
  240. package/dist/esm/Messenger.js.map +1 -0
  241. package/dist/esm/Pod.js +65 -0
  242. package/dist/esm/Pod.js.map +1 -0
  243. package/dist/esm/PodAddress.js +64 -0
  244. package/dist/esm/PodAddress.js.map +1 -0
  245. package/dist/esm/Pods.js +27 -0
  246. package/dist/esm/Pods.js.map +1 -0
  247. package/dist/esm/PodsHealth.js +33 -0
  248. package/dist/esm/PodsHealth.js.map +1 -0
  249. package/dist/esm/PoisonPill.js +65 -0
  250. package/dist/esm/PoisonPill.js.map +1 -0
  251. package/dist/esm/RecipientAddress.js +67 -0
  252. package/dist/esm/RecipientAddress.js.map +1 -0
  253. package/dist/esm/RecipientBehaviour.js +30 -0
  254. package/dist/esm/RecipientBehaviour.js.map +1 -0
  255. package/dist/esm/RecipientBehaviourContext.js +56 -0
  256. package/dist/esm/RecipientBehaviourContext.js.map +1 -0
  257. package/dist/esm/RecipientType.js +105 -0
  258. package/dist/esm/RecipientType.js.map +1 -0
  259. package/dist/esm/Serialization.js +24 -0
  260. package/dist/esm/Serialization.js.map +1 -0
  261. package/dist/esm/SerializedEnvelope.js +75 -0
  262. package/dist/esm/SerializedEnvelope.js.map +1 -0
  263. package/dist/esm/SerializedMessage.js +51 -0
  264. package/dist/esm/SerializedMessage.js.map +1 -0
  265. package/dist/esm/ShardId.js +54 -0
  266. package/dist/esm/ShardId.js.map +1 -0
  267. package/dist/esm/ShardManager.js +17 -0
  268. package/dist/esm/ShardManager.js.map +1 -0
  269. package/dist/esm/ShardManagerClient.js +22 -0
  270. package/dist/esm/ShardManagerClient.js.map +1 -0
  271. package/dist/esm/Sharding.js +98 -0
  272. package/dist/esm/Sharding.js.map +1 -0
  273. package/dist/esm/ShardingConfig.js +33 -0
  274. package/dist/esm/ShardingConfig.js.map +1 -0
  275. package/dist/esm/ShardingEvent.js +62 -0
  276. package/dist/esm/ShardingEvent.js.map +1 -0
  277. package/dist/esm/ShardingException.js +91 -0
  278. package/dist/esm/ShardingException.js.map +1 -0
  279. package/dist/esm/ShardingRegistrationEvent.js +36 -0
  280. package/dist/esm/ShardingRegistrationEvent.js.map +1 -0
  281. package/dist/esm/Storage.js +32 -0
  282. package/dist/esm/Storage.js.map +1 -0
  283. package/dist/esm/index.js +113 -0
  284. package/dist/esm/index.js.map +1 -0
  285. package/dist/esm/internal/atLeastOnce.js +26 -0
  286. package/dist/esm/internal/atLeastOnce.js.map +1 -0
  287. package/dist/esm/internal/atLeastOnceStorage.js +154 -0
  288. package/dist/esm/internal/atLeastOnceStorage.js.map +1 -0
  289. package/dist/esm/internal/entityManager.js +159 -0
  290. package/dist/esm/internal/entityManager.js.map +1 -0
  291. package/dist/esm/internal/entityState.js +35 -0
  292. package/dist/esm/internal/entityState.js.map +1 -0
  293. package/dist/esm/internal/managerConfig.js +38 -0
  294. package/dist/esm/internal/managerConfig.js.map +1 -0
  295. package/dist/esm/internal/message.js +32 -0
  296. package/dist/esm/internal/message.js.map +1 -0
  297. package/dist/esm/internal/messageState.js +66 -0
  298. package/dist/esm/internal/messageState.js.map +1 -0
  299. package/dist/esm/internal/podWithMetadata.js +41 -0
  300. package/dist/esm/internal/podWithMetadata.js.map +1 -0
  301. package/dist/esm/internal/pods.js +25 -0
  302. package/dist/esm/internal/pods.js.map +1 -0
  303. package/dist/esm/internal/podsHealth.js +30 -0
  304. package/dist/esm/internal/podsHealth.js.map +1 -0
  305. package/dist/esm/internal/recipientBehaviour.js +42 -0
  306. package/dist/esm/internal/recipientBehaviour.js.map +1 -0
  307. package/dist/esm/internal/recipientBehaviourContext.js +26 -0
  308. package/dist/esm/internal/recipientBehaviourContext.js.map +1 -0
  309. package/dist/esm/internal/serialization.js +39 -0
  310. package/dist/esm/internal/serialization.js.map +1 -0
  311. package/dist/esm/internal/shardManager.js +256 -0
  312. package/dist/esm/internal/shardManager.js.map +1 -0
  313. package/dist/esm/internal/shardManagerClient.js +38 -0
  314. package/dist/esm/internal/shardManagerClient.js.map +1 -0
  315. package/dist/esm/internal/shardManagerState.js +36 -0
  316. package/dist/esm/internal/shardManagerState.js.map +1 -0
  317. package/dist/esm/internal/sharding.js +288 -0
  318. package/dist/esm/internal/sharding.js.map +1 -0
  319. package/dist/esm/internal/shardingConfig.js +47 -0
  320. package/dist/esm/internal/shardingConfig.js.map +1 -0
  321. package/dist/esm/internal/storage.js +42 -0
  322. package/dist/esm/internal/storage.js.map +1 -0
  323. package/dist/esm/internal/utils.js +56 -0
  324. package/dist/esm/internal/utils.js.map +1 -0
  325. package/dist/esm/package.json +4 -0
  326. package/package.json +259 -0
  327. package/src/AtLeastOnce.ts +28 -0
  328. package/src/AtLeastOnceStorage.ts +96 -0
  329. package/src/Broadcaster.ts +48 -0
  330. package/src/ManagerConfig.ts +67 -0
  331. package/src/Message.ts +132 -0
  332. package/src/MessageState.ts +126 -0
  333. package/src/Messenger.ts +40 -0
  334. package/src/Pod.ts +95 -0
  335. package/src/PodAddress.ts +94 -0
  336. package/src/Pods.ts +100 -0
  337. package/src/PodsHealth.ts +74 -0
  338. package/src/PoisonPill.ts +105 -0
  339. package/src/RecipientAddress.ts +72 -0
  340. package/src/RecipientBehaviour.ts +108 -0
  341. package/src/RecipientBehaviourContext.ts +101 -0
  342. package/src/RecipientType.ts +134 -0
  343. package/src/Serialization.ts +72 -0
  344. package/src/SerializedEnvelope.ts +109 -0
  345. package/src/SerializedMessage.ts +82 -0
  346. package/src/ShardId.ts +79 -0
  347. package/src/ShardManager.ts +53 -0
  348. package/src/ShardManagerClient.ts +57 -0
  349. package/src/Sharding.ts +214 -0
  350. package/src/ShardingConfig.ts +76 -0
  351. package/src/ShardingEvent.ts +121 -0
  352. package/src/ShardingException.ts +151 -0
  353. package/src/ShardingRegistrationEvent.ts +62 -0
  354. package/src/Storage.ts +92 -0
  355. package/src/index.ts +139 -0
  356. package/src/internal/atLeastOnce.ts +59 -0
  357. package/src/internal/atLeastOnceStorage.ts +218 -0
  358. package/src/internal/entityManager.ts +404 -0
  359. package/src/internal/entityState.ts +64 -0
  360. package/src/internal/managerConfig.ts +84 -0
  361. package/src/internal/message.ts +64 -0
  362. package/src/internal/messageState.ts +98 -0
  363. package/src/internal/podWithMetadata.ts +72 -0
  364. package/src/internal/pods.ts +29 -0
  365. package/src/internal/podsHealth.ts +39 -0
  366. package/src/internal/recipientBehaviour.ts +133 -0
  367. package/src/internal/recipientBehaviourContext.ts +70 -0
  368. package/src/internal/serialization.ts +59 -0
  369. package/src/internal/shardManager.ts +593 -0
  370. package/src/internal/shardManagerClient.ts +49 -0
  371. package/src/internal/shardManagerState.ts +80 -0
  372. package/src/internal/sharding.ts +793 -0
  373. package/src/internal/shardingConfig.ts +97 -0
  374. package/src/internal/storage.ts +60 -0
  375. package/src/internal/utils.ts +54 -0
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type * as Message from "./Message.js"
5
+ import type * as RecipientType from "./RecipientType.js"
6
+
7
+ interface EntityRegistered<Msg extends Message.Message.Any> {
8
+ _tag: "EntityRegistered"
9
+ entityType: RecipientType.EntityType<Msg>
10
+ }
11
+
12
+ /**
13
+ * Constructs and event that occurs when a new EntityType gets registered.
14
+ *
15
+ * @since 1.0.0
16
+ * @category constructors
17
+ */
18
+ export function EntityRegistered<Msg extends Message.Message.Any>(
19
+ entityType: RecipientType.EntityType<Msg>
20
+ ): ShardingRegistrationEvent {
21
+ return ({ _tag: "EntityRegistered", entityType })
22
+ }
23
+
24
+ interface SingletonRegistered {
25
+ _tag: "SingletonRegistered"
26
+ name: string
27
+ }
28
+
29
+ /**
30
+ * Constructs a new event that occurs when a new Singleton is registered.
31
+ *
32
+ * @since 1.0.0
33
+ * @category constructors
34
+ */
35
+ export function SingletonRegistered(name: string): ShardingRegistrationEvent {
36
+ return ({ _tag: "SingletonRegistered", name })
37
+ }
38
+
39
+ interface TopicRegistered<Msg extends Message.Message.Any> {
40
+ _tag: "TopicRegistered"
41
+ topicType: RecipientType.TopicType<Msg>
42
+ }
43
+
44
+ /**
45
+ * Constructs a new event that occurs when a topic is Registered.
46
+ * @since 1.0.0
47
+ * @category constructors
48
+ */
49
+ export function TopicRegistered<Msg extends Message.Message.Any>(
50
+ topicType: RecipientType.TopicType<Msg>
51
+ ): ShardingRegistrationEvent {
52
+ return ({ _tag: "TopicRegistered", topicType })
53
+ }
54
+
55
+ /**
56
+ * @since 1.0.0
57
+ * @category models
58
+ */
59
+ export type ShardingRegistrationEvent =
60
+ | EntityRegistered<any>
61
+ | SingletonRegistered
62
+ | TopicRegistered<any>
package/src/Storage.ts ADDED
@@ -0,0 +1,92 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type * as Context from "effect/Context"
5
+ import type * as Effect from "effect/Effect"
6
+ import type * as HashMap from "effect/HashMap"
7
+ import type * as Layer from "effect/Layer"
8
+ import type * as Option from "effect/Option"
9
+ import type * as Stream from "effect/Stream"
10
+ import * as internal from "./internal/storage.js"
11
+ import type * as Pod from "./Pod.js"
12
+ import type * as PodAddress from "./PodAddress.js"
13
+ import type * as ShardId from "./ShardId.js"
14
+
15
+ /**
16
+ * @since 1.0.0
17
+ * @category symbols
18
+ */
19
+ export const StorageTypeId: unique symbol = internal.StorageTypeId
20
+
21
+ /**
22
+ * @since 1.0.0
23
+ * @category symbols
24
+ */
25
+ export type StorageTypeId = typeof StorageTypeId
26
+
27
+ /**
28
+ * The storage Service is responsible of persisting assignments and registered pods.
29
+ * The storage is expected to be shared among all pods, so it works also as communication of assignments between Pods.
30
+ *
31
+ * @since 1.0.0
32
+ * @category models
33
+ */
34
+ export interface Storage {
35
+ readonly [StorageTypeId]: StorageTypeId
36
+
37
+ /**
38
+ * Get the current state of shard assignments to pods
39
+ */
40
+ readonly getAssignments: Effect.Effect<HashMap.HashMap<ShardId.ShardId, Option.Option<PodAddress.PodAddress>>>
41
+
42
+ /**
43
+ * Save the current state of shard assignments to pods
44
+ */
45
+ readonly saveAssignments: (
46
+ assignments: HashMap.HashMap<ShardId.ShardId, Option.Option<PodAddress.PodAddress>>
47
+ ) => Effect.Effect<void>
48
+
49
+ /**
50
+ * A stream that will emit the state of shard assignments whenever it changes
51
+ */
52
+ readonly assignmentsStream: Stream.Stream<HashMap.HashMap<ShardId.ShardId, Option.Option<PodAddress.PodAddress>>>
53
+
54
+ /**
55
+ * Get the list of existing pods
56
+ */
57
+ readonly getPods: Effect.Effect<HashMap.HashMap<PodAddress.PodAddress, Pod.Pod>>
58
+
59
+ /**
60
+ * Save the list of existing pods
61
+ */
62
+ readonly savePods: (pods: HashMap.HashMap<PodAddress.PodAddress, Pod.Pod>) => Effect.Effect<void>
63
+ }
64
+
65
+ /**
66
+ * @since 1.0.0
67
+ * @category constructors
68
+ */
69
+ export const make: (args: Omit<Storage, typeof StorageTypeId>) => Storage = internal.make
70
+
71
+ /**
72
+ * @since 1.0.0
73
+ * @category context
74
+ */
75
+ export const Storage: Context.Tag<Storage, Storage> = internal.storageTag
76
+
77
+ /**
78
+ * A layer that stores data in-memory.
79
+ * This is useful for testing with a single pod only.
80
+ *
81
+ * @since 1.0.0
82
+ * @category layers
83
+ */
84
+ export const memory: Layer.Layer<Storage> = internal.memory
85
+
86
+ /**
87
+ * A layer that does nothing, useful for testing.
88
+ *
89
+ * @since 1.0.0
90
+ * @category layers
91
+ */
92
+ export const noop: Layer.Layer<Storage> = internal.noop
package/src/index.ts ADDED
@@ -0,0 +1,139 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ export * as AtLeastOnce from "./AtLeastOnce.js"
5
+
6
+ /**
7
+ * @since 1.0.0
8
+ */
9
+ export * as AtLeastOnceStorage from "./AtLeastOnceStorage.js"
10
+
11
+ /**
12
+ * @since 1.0.0
13
+ */
14
+ export * as Broadcaster from "./Broadcaster.js"
15
+
16
+ /**
17
+ * @since 1.0.0
18
+ */
19
+ export * as ManagerConfig from "./ManagerConfig.js"
20
+
21
+ /**
22
+ * @since 1.0.0
23
+ */
24
+ export * as Message from "./Message.js"
25
+
26
+ /**
27
+ * @since 1.0.0
28
+ */
29
+ export * as MessageState from "./MessageState.js"
30
+
31
+ /**
32
+ * @since 1.0.0
33
+ */
34
+ export * as Messenger from "./Messenger.js"
35
+
36
+ /**
37
+ * @since 1.0.0
38
+ */
39
+ export * as Pod from "./Pod.js"
40
+
41
+ /**
42
+ * @since 1.0.0
43
+ */
44
+ export * as PodAddress from "./PodAddress.js"
45
+
46
+ /**
47
+ * @since 1.0.0
48
+ */
49
+ export * as Pods from "./Pods.js"
50
+
51
+ /**
52
+ * @since 1.0.0
53
+ */
54
+ export * as PodsHealth from "./PodsHealth.js"
55
+
56
+ /**
57
+ * @since 1.0.0
58
+ */
59
+ export * as PoisonPill from "./PoisonPill.js"
60
+
61
+ /**
62
+ * @since 1.0.0
63
+ */
64
+ export * as RecipientAddress from "./RecipientAddress.js"
65
+
66
+ /**
67
+ * @since 1.0.0
68
+ */
69
+ export * as RecipientBehaviour from "./RecipientBehaviour.js"
70
+
71
+ /**
72
+ * @since 1.0.0
73
+ */
74
+ export * as RecipientBehaviourContext from "./RecipientBehaviourContext.js"
75
+
76
+ /**
77
+ * @since 1.0.0
78
+ */
79
+ export * as RecipientType from "./RecipientType.js"
80
+
81
+ /**
82
+ * @since 1.0.0
83
+ */
84
+ export * as Serialization from "./Serialization.js"
85
+
86
+ /**
87
+ * @since 1.0.0
88
+ */
89
+ export * as SerializedEnvelope from "./SerializedEnvelope.js"
90
+
91
+ /**
92
+ * @since 1.0.0
93
+ */
94
+ export * as SerializedMessage from "./SerializedMessage.js"
95
+
96
+ /**
97
+ * @since 1.0.0
98
+ */
99
+ export * as ShardId from "./ShardId.js"
100
+
101
+ /**
102
+ * @since 1.0.0
103
+ */
104
+ export * as ShardManager from "./ShardManager.js"
105
+
106
+ /**
107
+ * @since 1.0.0
108
+ */
109
+ export * as ShardManagerClient from "./ShardManagerClient.js"
110
+
111
+ /**
112
+ * @since 1.0.0
113
+ */
114
+ export * as Sharding from "./Sharding.js"
115
+
116
+ /**
117
+ * @since 1.0.0
118
+ */
119
+ export * as ShardingConfig from "./ShardingConfig.js"
120
+
121
+ /**
122
+ * @since 1.0.0
123
+ */
124
+ export * as ShardingEvent from "./ShardingEvent.js"
125
+
126
+ /**
127
+ * @since 1.0.0
128
+ */
129
+ export * as ShardingException from "./ShardingException.js"
130
+
131
+ /**
132
+ * @since 1.0.0
133
+ */
134
+ export * as ShardingRegistrationEvent from "./ShardingRegistrationEvent.js"
135
+
136
+ /**
137
+ * @since 1.0.0
138
+ */
139
+ export * as Storage from "./Storage.js"
@@ -0,0 +1,59 @@
1
+ import type * as Duration from "effect/Duration"
2
+ import * as Effect from "effect/Effect"
3
+ import { pipe } from "effect/Function"
4
+ import type * as Scope from "effect/Scope"
5
+ import * as Stream from "effect/Stream"
6
+ import * as AtLeastOnceStorage from "../AtLeastOnceStorage.js"
7
+ import type * as Message from "../Message.js"
8
+ import * as MessageState from "../MessageState.js"
9
+ import type * as RecipientBehaviour from "../RecipientBehaviour.js"
10
+ import * as RecipientBehaviourContext from "../RecipientBehaviourContext.js"
11
+ import * as Sharding from "../Sharding.js"
12
+
13
+ /** @internal */
14
+ export function runPendingMessageSweeperScoped(
15
+ interval: Duration.Duration
16
+ ): Effect.Effect<void, never, AtLeastOnceStorage.AtLeastOnceStorage | Sharding.Sharding | Scope.Scope> {
17
+ return Effect.flatMap(AtLeastOnceStorage.AtLeastOnceStorage, (storage) =>
18
+ pipe(
19
+ Sharding.getAssignedShardIds,
20
+ Effect.flatMap((shardIds) =>
21
+ pipe(
22
+ storage.sweepPending(shardIds),
23
+ Stream.mapEffect((envelope) => Sharding.sendMessageToLocalEntityManagerWithoutRetries(envelope)),
24
+ Stream.runDrain
25
+ )
26
+ ),
27
+ Effect.delay(interval),
28
+ Effect.catchAllCause(Effect.logError),
29
+ Effect.forever,
30
+ Effect.forkScoped,
31
+ Effect.asVoid
32
+ ))
33
+ }
34
+
35
+ /** @internal */
36
+ export function atLeastOnceRecipientBehaviour<Msg extends Message.Message.Any, R>(
37
+ fa: RecipientBehaviour.RecipientBehaviour<Msg, R>
38
+ ): RecipientBehaviour.RecipientBehaviour<Msg, R | AtLeastOnceStorage.AtLeastOnceStorage> {
39
+ return Effect.gen(function*(_) {
40
+ const storage = yield* _(AtLeastOnceStorage.AtLeastOnceStorage)
41
+ const entityId = yield* _(RecipientBehaviourContext.entityId)
42
+ const shardId = yield* _(RecipientBehaviourContext.shardId)
43
+ const recipientType = yield* _(RecipientBehaviourContext.recipientType)
44
+ const offer = yield* _(fa)
45
+ return <A extends Msg>(message: A) =>
46
+ pipe(
47
+ storage.upsert(recipientType, shardId, entityId, message),
48
+ Effect.zipRight(
49
+ pipe(
50
+ offer(message),
51
+ Effect.tap(MessageState.match({
52
+ onAcknowledged: () => Effect.void,
53
+ onProcessed: () => storage.markAsProcessed(recipientType, shardId, entityId, message)
54
+ }))
55
+ )
56
+ )
57
+ )
58
+ })
59
+ }
@@ -0,0 +1,218 @@
1
+ import * as Schema from "@effect/schema/Schema"
2
+ import * as SqlClient from "@effect/sql/SqlClient"
3
+ import type * as SqlError from "@effect/sql/SqlError"
4
+ import * as SqlResolver from "@effect/sql/SqlResolver"
5
+ import * as Context from "effect/Context"
6
+ import * as Effect from "effect/Effect"
7
+ import * as Layer from "effect/Layer"
8
+ import * as PrimaryKey from "effect/PrimaryKey"
9
+ import * as Stream from "effect/Stream"
10
+ import type * as AtLeastOnceStorage from "../AtLeastOnceStorage.js"
11
+ import * as RecipientAddress from "../RecipientAddress.js"
12
+ import type * as Serialization from "../Serialization.js"
13
+ import * as SerializedEnvelope from "../SerializedEnvelope.js"
14
+ import * as SerializedMessage from "../SerializedMessage.js"
15
+ import * as InternalSerialization from "./serialization.js"
16
+
17
+ /** @internal */
18
+ const SymbolKey = "@effect/cluster/AtLeastOnceStorage"
19
+
20
+ /** @internal */
21
+ export const TypeId: AtLeastOnceStorage.TypeId = Symbol.for(
22
+ SymbolKey
23
+ ) as AtLeastOnceStorage.TypeId
24
+
25
+ /** @internal */
26
+ export const atLeastOnceStorageTag: Context.Tag<
27
+ AtLeastOnceStorage.AtLeastOnceStorage,
28
+ AtLeastOnceStorage.AtLeastOnceStorage
29
+ > = Context.GenericTag<AtLeastOnceStorage.AtLeastOnceStorage>(SymbolKey)
30
+
31
+ const make = ({ table }: AtLeastOnceStorage.AtLeastOnceStorage.MakeOptions): Effect.Effect<
32
+ AtLeastOnceStorage.AtLeastOnceStorage,
33
+ SqlError.SqlError,
34
+ SqlClient.SqlClient | Serialization.Serialization
35
+ > =>
36
+ Effect.gen(function*() {
37
+ const sql = yield* SqlClient.SqlClient
38
+ const serialization = yield* InternalSerialization.serializationTag
39
+
40
+ yield* sql.onDialect({
41
+ mssql: () =>
42
+ sql`
43
+ IF OBJECT_ID(N'${sql.literal(table)}', N'U') IS NULL
44
+ CREATE TABLE ${sql(table)} (
45
+ recipient_name VARCHAR(255) NOT NULL,
46
+ shard_id INT NOT NULL DEFAULT 0,
47
+ entity_id VARCHAR(255) NOT NULL,
48
+ message_id VARCHAR(255) NOT NULL,
49
+ message_body TEXT NOT NULL,
50
+ processed BIT NOT NULL DEFAULT 0,
51
+ CONSTRAINT ${sql(table)}_pkey PRIMARY KEY (recipient_name, entity_id, message_id)
52
+ WITH (IGNORE_DUP_KEY = ON)
53
+ )
54
+ `,
55
+ mysql: () =>
56
+ sql`
57
+ CREATE TABLE IF NOT EXISTS ${sql(table)} (
58
+ recipient_name VARCHAR(255) NOT NULL,
59
+ shard_id INT NOT NULL DEFAULT 0,
60
+ entity_id VARCHAR(255) NOT NULL,
61
+ message_id VARCHAR(255) NOT NULL,
62
+ message_body TEXT NOT NULL,
63
+ processed BOOLEAN NOT NULL DEFAULT FALSE,
64
+ CONSTRAINT ${sql(table)}_pkey PRIMARY KEY (recipient_name, entity_id, message_id)
65
+ )
66
+ `,
67
+ pg: () =>
68
+ Effect.catchAll(sql`SELECT ${table}::regclass`, () =>
69
+ sql`
70
+ CREATE TABLE ${sql(table)} (
71
+ recipient_name VARCHAR(255) NOT NULL,
72
+ shard_id INT NOT NULL DEFAULT 0,
73
+ entity_id VARCHAR(255) NOT NULL,
74
+ message_id VARCHAR(255) NOT NULL,
75
+ message_body TEXT NOT NULL,
76
+ processed BOOLEAN NOT NULL DEFAULT FALSE,
77
+ CONSTRAINT ${sql(table)}_pkey PRIMARY KEY (recipient_name, entity_id, message_id)
78
+ )
79
+ `),
80
+ sqlite: () =>
81
+ sql`
82
+ CREATE TABLE IF NOT EXISTS ${sql.literal(table)} (
83
+ recipient_name VARCHAR(255) NOT NULL,
84
+ shard_id INT NOT NULL DEFAULT (0),
85
+ entity_id VARCHAR(255) NOT NULL,
86
+ message_id VARCHAR(255) NOT NULL,
87
+ message_body CLOB NOT NULL,
88
+ processed BOOLEAN NOT NULL DEFAULT (0),
89
+ CONSTRAINT ${sql.literal(table)}_pkey PRIMARY KEY (recipient_name, entity_id, message_id)
90
+ )
91
+ `
92
+ })
93
+
94
+ const UpsertEntryResolver = yield* SqlResolver.void("UpsertEntry", {
95
+ Request: Schema.Struct({
96
+ recipient_name: Schema.String,
97
+ shard_id: Schema.Number,
98
+ entity_id: Schema.String,
99
+ message_id: Schema.String,
100
+ message_body: Schema.String
101
+ }),
102
+ execute: (requests) =>
103
+ sql.onDialect({
104
+ mssql: () =>
105
+ sql`
106
+ INSERT INTO ${sql(table)}
107
+ ${sql.insert(requests)}
108
+ `,
109
+ mysql: () =>
110
+ sql`
111
+ INSERT INTO ${sql(table)}
112
+ ${sql.insert(requests)}
113
+ ON DUPLICATE KEY UPDATE
114
+ recipient_name = recipient_name,
115
+ entity_id = entity_id,
116
+ message_id = message_id
117
+ `,
118
+ pg: () =>
119
+ sql`
120
+ INSERT INTO ${sql(table)}
121
+ ${sql.insert(requests)}
122
+ ON CONFLICT ON CONSTRAINT ${sql(table)}_pkey DO NOTHING
123
+ `,
124
+ sqlite: () =>
125
+ sql`
126
+ INSERT INTO ${sql(table)}
127
+ ${sql.insert(requests)}
128
+ ON CONFLICT (recipient_name, entity_id, message_id) DO NOTHING
129
+ `
130
+ })
131
+ })
132
+
133
+ const SweepPendingResolver = yield* SqlResolver.ordered("SweepPending", {
134
+ Request: Schema.Number,
135
+ Result: Schema.Struct({
136
+ shard_id: Schema.Number,
137
+ entity_id: Schema.String,
138
+ message_id: Schema.String,
139
+ recipient_name: Schema.String,
140
+ message_body: Schema.String
141
+ }),
142
+ execute: (shard_ids) =>
143
+ sql`
144
+ SELECT
145
+ shard_id,
146
+ entity_id,
147
+ message_id,
148
+ recipient_name,
149
+ message_body
150
+ FROM ${sql(table)}
151
+ WHERE ${
152
+ sql.and([
153
+ sql`processed = ${false}`,
154
+ sql.in("shard_id", shard_ids)
155
+ ])
156
+ }
157
+ `
158
+ })
159
+
160
+ return {
161
+ [TypeId]: TypeId,
162
+ upsert: (recipientType, shardId, entityId, message) =>
163
+ serialization.encode(recipientType.schema, message).pipe(
164
+ Effect.flatMap(
165
+ (message_body) =>
166
+ UpsertEntryResolver.execute({
167
+ recipient_name: recipientType.name,
168
+ shard_id: shardId.value,
169
+ entity_id: entityId,
170
+ message_id: PrimaryKey.value(message),
171
+ message_body: message_body.value
172
+ })
173
+ ),
174
+ Effect.catchAllCause(Effect.logError)
175
+ ),
176
+ markAsProcessed: (recipientType, _shardId, entityId, message) => {
177
+ return sql`
178
+ UPDATE ${sql(table)}
179
+ SET ${
180
+ sql.onDialectOrElse({
181
+ pg: () => sql.update({ processed: "TRUE" }),
182
+ orElse: () => sql.update({ processed: 1 })
183
+ })
184
+ }
185
+ WHERE ${
186
+ sql.and([
187
+ sql`recipient_name = ${recipientType.name}`,
188
+ sql`entity_id = ${entityId}`,
189
+ sql`message_id = ${PrimaryKey.value(message)}`
190
+ ])
191
+ }`.pipe(Effect.catchAllCause(Effect.logError))
192
+ },
193
+ sweepPending: (shardIds) =>
194
+ Effect.forEach(shardIds, (id) =>
195
+ Effect.withRequestCaching(true)(
196
+ SweepPendingResolver.execute(id.value)
197
+ ), {
198
+ batching: true
199
+ }).pipe(
200
+ Effect.orDie,
201
+ Stream.fromIterableEffect,
202
+ Stream.map((entry) =>
203
+ SerializedEnvelope.make(
204
+ RecipientAddress.makeRecipientAddress(entry.recipient_name, entry.entity_id),
205
+ entry.message_id,
206
+ SerializedMessage.make(entry.message_body)
207
+ )
208
+ )
209
+ )
210
+ }
211
+ })
212
+
213
+ /** @internal */
214
+ export const layer = (options: AtLeastOnceStorage.AtLeastOnceStorage.MakeOptions): Layer.Layer<
215
+ AtLeastOnceStorage.AtLeastOnceStorage,
216
+ SqlError.SqlError,
217
+ SqlClient.SqlClient | Serialization.Serialization
218
+ > => Layer.effect(atLeastOnceStorageTag, make(options))