@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
@@ -1,76 +1,217 @@
1
1
  /**
2
2
  * @since 1.0.0
3
3
  */
4
- import type * as ConfigError from "effect/ConfigError"
5
- import type * as Context from "effect/Context"
6
- import type * as Duration from "effect/Duration"
7
- import type * as Layer from "effect/Layer"
8
- import * as internal from "./internal/shardingConfig.js"
4
+ import * as Config from "effect/Config"
5
+ import type { ConfigError } from "effect/ConfigError"
6
+ import * as ConfigProvider from "effect/ConfigProvider"
7
+ import * as Context from "effect/Context"
8
+ import type { DurationInput } from "effect/Duration"
9
+ import * as Duration from "effect/Duration"
10
+ import * as Effect from "effect/Effect"
11
+ import * as Layer from "effect/Layer"
12
+ import * as Option from "effect/Option"
13
+ import { RunnerAddress } from "./RunnerAddress.js"
9
14
 
10
15
  /**
16
+ * Represents the configuration for the `Sharding` service on a given runner.
17
+ *
11
18
  * @since 1.0.0
12
- * @category symbols
19
+ * @category models
13
20
  */
14
- export const ShardingConfigTypeId: unique symbol = internal.ShardingConfigTypeId
21
+ export class ShardingConfig extends Context.Tag("@effect/cluster/ShardingConfig")<ShardingConfig, {
22
+ /**
23
+ * The address for the current runner.
24
+ *
25
+ * If `None`, the runner is not part of the cluster and will be in a client-only
26
+ * mode.
27
+ */
28
+ readonly runnerAddress: Option.Option<RunnerAddress>
29
+ /**
30
+ * The version of the current runner.
31
+ */
32
+ readonly serverVersion: number
33
+ /**
34
+ * The number of shards to allocate to a runner.
35
+ *
36
+ * **Note**: this value should be consistent across all runners.
37
+ */
38
+ readonly numberOfShards: number
39
+ /**
40
+ * The address of the shard manager.
41
+ */
42
+ readonly shardManagerAddress: RunnerAddress
43
+ /**
44
+ * If the shard manager is unavailable for this duration, all the shard
45
+ * assignments will be reset.
46
+ */
47
+ readonly shardManagerUnavailableTimeout: DurationInput
48
+ /**
49
+ * The default capacity of the mailbox for entities.
50
+ */
51
+ readonly entityMailboxCapacity: number | "unbounded"
52
+ /**
53
+ * The maximum duration of inactivity (i.e. without receiving a message)
54
+ * after which an entity will be interrupted.
55
+ */
56
+ readonly entityMaxIdleTime: DurationInput
57
+ /**
58
+ * The maximum duration of time to wait for an entity to terminate.
59
+ *
60
+ * By default this is set to 15 seconds to stay within kubernetes defaults.
61
+ */
62
+ readonly entityTerminationTimeout: DurationInput
63
+ /**
64
+ * The interval at which to poll for unprocessed messages from storage.
65
+ */
66
+ readonly entityMessagePollInterval: DurationInput
67
+ /**
68
+ * The interval at which to poll for client replies from storage.
69
+ */
70
+ readonly entityReplyPollInterval: DurationInput
71
+ readonly refreshAssignmentsInterval: DurationInput
72
+ /**
73
+ * The interval to retry a send if EntityNotManagedByRunner is returned.
74
+ */
75
+ readonly sendRetryInterval: DurationInput
76
+ // readonly unhealthyRunnerReportInterval: Duration.Duration
77
+ /**
78
+ * Simulate serialization and deserialization to remote runners for local
79
+ * entities.
80
+ */
81
+ readonly simulateRemoteSerialization: boolean
82
+ }>() {}
83
+
84
+ const defaultRunnerAddress = RunnerAddress.make({ host: "localhost", port: 34431 })
15
85
 
16
86
  /**
17
87
  * @since 1.0.0
18
- * @category symbols
88
+ * @category defaults
19
89
  */
20
- export type ShardingConfigTypeId = typeof ShardingConfigTypeId
90
+ export const defaults: ShardingConfig["Type"] = {
91
+ runnerAddress: Option.some(defaultRunnerAddress),
92
+ serverVersion: 1,
93
+ numberOfShards: 300,
94
+ shardManagerAddress: RunnerAddress.make({ host: "localhost", port: 8080 }),
95
+ shardManagerUnavailableTimeout: Duration.minutes(10),
96
+ entityMailboxCapacity: 4096,
97
+ entityMaxIdleTime: Duration.minutes(1),
98
+ entityTerminationTimeout: Duration.seconds(15),
99
+ entityMessagePollInterval: Duration.seconds(10),
100
+ entityReplyPollInterval: Duration.millis(200),
101
+ sendRetryInterval: Duration.millis(100),
102
+ refreshAssignmentsInterval: Duration.minutes(5),
103
+ simulateRemoteSerialization: true
104
+ }
21
105
 
22
106
  /**
23
- * Sharding configuration
24
- * @param numberOfShards number of shards (see documentation on how to choose this), should be same on all nodes
25
- * @param selfHost hostname or IP address of the current pod
26
- * @param shardingPort port used for pods to communicate together
27
- * @param shardManagerUri url of the Shard Manager API
28
- * @param serverVersion version of the current pod
29
- * @param entityMaxIdleTime time of inactivity (without receiving any message) after which an entity will be interrupted
30
- * @param entityTerminationTimeout time we give to an entity to handle the termination message before interrupting it
31
- * @param refreshAssignmentsRetryInterval retry interval in case of failure getting shard assignments from storage
32
- * @param unhealthyPodReportInterval interval to report unhealthy pods to the Shard Manager (this exists to prevent calling the Shard Manager for each failed message)
33
107
  * @since 1.0.0
34
- * @category models
108
+ * @category Layers
35
109
  */
36
- export interface ShardingConfig {
37
- readonly numberOfShards: number
38
- readonly selfHost: string
39
- readonly shardingPort: number
40
- readonly shardManagerUri: string
41
- readonly serverVersion: string
42
- readonly entityMaxIdleTime: Duration.Duration
43
- readonly entityTerminationTimeout: Duration.Duration
44
- readonly refreshAssignmentsRetryInterval: Duration.Duration
45
- readonly unhealthyPodReportInterval: Duration.Duration
46
- }
110
+ export const layer = (options?: Partial<ShardingConfig["Type"]>): Layer.Layer<ShardingConfig> =>
111
+ Layer.succeed(ShardingConfig, { ...defaults, ...options })
47
112
 
48
113
  /**
49
114
  * @since 1.0.0
50
- * @category context
115
+ * @category defaults
51
116
  */
52
- export const ShardingConfig: Context.Tag<ShardingConfig, ShardingConfig> = internal.shardingConfigTag
117
+ export const layerDefaults: Layer.Layer<ShardingConfig> = layer()
53
118
 
54
119
  /**
55
- * Provides the default values for the ShardingConfig.
56
- *
57
120
  * @since 1.0.0
58
- * @category layers
121
+ * @category Config
59
122
  */
60
- export const defaults: Layer.Layer<ShardingConfig> = internal.defaults
123
+ export const config: Config.Config<ShardingConfig["Type"]> = Config.all({
124
+ runnerAddress: Config.all({
125
+ host: Config.string("host").pipe(
126
+ Config.withDefault(defaultRunnerAddress.host),
127
+ Config.withDescription("The hostname or IP address of the runner.")
128
+ ),
129
+ port: Config.integer("port").pipe(
130
+ Config.withDefault(defaultRunnerAddress.port),
131
+ Config.withDescription("The port used for inter-runner communication.")
132
+ )
133
+ }).pipe(Config.map((options) => RunnerAddress.make(options)), Config.option),
134
+ serverVersion: Config.integer("serverVersion").pipe(
135
+ Config.withDefault(defaults.serverVersion),
136
+ Config.withDescription("The version of the current runner.")
137
+ ),
138
+ numberOfShards: Config.integer("numberOfShards").pipe(
139
+ Config.withDefault(defaults.numberOfShards),
140
+ Config.withDescription("The number of shards to allocate to a runner.")
141
+ ),
142
+ shardManagerAddress: Config.all({
143
+ host: Config.string("shardManagerHost").pipe(
144
+ Config.withDefault(defaults.shardManagerAddress.host),
145
+ Config.withDescription("The host of the shard manager.")
146
+ ),
147
+ port: Config.integer("shardManagerPort").pipe(
148
+ Config.withDefault(defaults.shardManagerAddress.port),
149
+ Config.withDescription("The port of the shard manager.")
150
+ )
151
+ }).pipe(Config.map((options) => RunnerAddress.make(options))),
152
+ shardManagerUnavailableTimeout: Config.duration("shardManagerUnavailableTimeout").pipe(
153
+ Config.withDefault(defaults.shardManagerUnavailableTimeout),
154
+ Config.withDescription(
155
+ "If the shard is unavilable for this duration, all the shard assignments will be reset."
156
+ )
157
+ ),
158
+ entityMailboxCapacity: Config.integer("entityMailboxCapacity").pipe(
159
+ Config.withDefault(defaults.entityMailboxCapacity),
160
+ Config.withDescription("The default capacity of the mailbox for entities.")
161
+ ),
162
+ entityMaxIdleTime: Config.duration("entityMaxIdleTime").pipe(
163
+ Config.withDefault(defaults.entityMaxIdleTime),
164
+ Config.withDescription(
165
+ "The maximum duration of inactivity (i.e. without receiving a message) after which an entity will be interrupted."
166
+ )
167
+ ),
168
+ entityTerminationTimeout: Config.duration("entityTerminationTimeout").pipe(
169
+ Config.withDefault(defaults.entityTerminationTimeout),
170
+ Config.withDescription("The maximum duration of time to wait for an entity to terminate.")
171
+ ),
172
+ entityMessagePollInterval: Config.duration("entityMessagePollInterval").pipe(
173
+ Config.withDefault(defaults.entityMessagePollInterval),
174
+ Config.withDescription("The interval at which to poll for unprocessed messages from storage.")
175
+ ),
176
+ entityReplyPollInterval: Config.duration("entityReplyPollInterval").pipe(
177
+ Config.withDefault(defaults.entityReplyPollInterval),
178
+ Config.withDescription("The interval at which to poll for client replies from storage.")
179
+ ),
180
+ sendRetryInterval: Config.duration("sendRetryInterval").pipe(
181
+ Config.withDefault(defaults.sendRetryInterval),
182
+ Config.withDescription("The interval to retry a send if EntityNotManagedByRunner is returned.")
183
+ ),
184
+ refreshAssignmentsInterval: Config.duration("refreshAssignmentsInterval").pipe(
185
+ Config.withDefault(defaults.refreshAssignmentsInterval),
186
+ Config.withDescription("The interval at which to refresh shard assignments.")
187
+ ),
188
+ simulateRemoteSerialization: Config.boolean("simulateRemoteSerialization").pipe(
189
+ Config.withDefault(defaults.simulateRemoteSerialization),
190
+ Config.withDescription("Simulate serialization and deserialization to remote runners for local entities.")
191
+ )
192
+ })
61
193
 
62
194
  /**
63
- * Provides the ShardingConfig, values that are omitted will be read from the defaults
64
- *
65
195
  * @since 1.0.0
66
- * @category layers
196
+ * @category Config
67
197
  */
68
- export const withDefaults: (customs: Partial<ShardingConfig>) => Layer.Layer<ShardingConfig> = internal.withDefaults
198
+ export const configFromEnv = config.pipe(
199
+ Effect.withConfigProvider(
200
+ ConfigProvider.fromEnv().pipe(
201
+ ConfigProvider.constantCase
202
+ )
203
+ )
204
+ )
69
205
 
70
206
  /**
71
- * Reads the ShardingConfig from the effect/ConfigProvider
72
- *
73
207
  * @since 1.0.0
74
- * @category layers
208
+ * @category Layers
75
209
  */
76
- export const fromConfig: Layer.Layer<ShardingConfig, ConfigError.ConfigError> = internal.fromConfig
210
+ export const layerFromEnv = (options?: Partial<ShardingConfig["Type"]> | undefined): Layer.Layer<
211
+ ShardingConfig,
212
+ ConfigError
213
+ > =>
214
+ Layer.effect(
215
+ ShardingConfig,
216
+ options ? Effect.map(configFromEnv, (config) => ({ ...config, ...options })) : configFromEnv
217
+ )
@@ -1,62 +1,61 @@
1
1
  /**
2
2
  * @since 1.0.0
3
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
- }
4
+ import * as Data from "effect/Data"
5
+ import type { Entity } from "./Entity.js"
6
+ import type { SingletonAddress } from "./SingletonAddress.js"
11
7
 
12
8
  /**
13
- * Constructs and event that occurs when a new EntityType gets registered.
9
+ * Represents events that can occur when a runner registers entities or singletons.
14
10
  *
15
11
  * @since 1.0.0
16
- * @category constructors
12
+ * @category models
17
13
  */
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
- }
14
+ export type ShardingRegistrationEvent =
15
+ | EntityRegistered
16
+ | SingletonRegistered
28
17
 
29
18
  /**
30
- * Constructs a new event that occurs when a new Singleton is registered.
19
+ * Represents an event that occurs when a new entity is registered with a runner.
31
20
  *
32
21
  * @since 1.0.0
33
- * @category constructors
22
+ * @category models
34
23
  */
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>
24
+ export interface EntityRegistered {
25
+ readonly _tag: "EntityRegistered"
26
+ readonly entity: Entity<any>
42
27
  }
43
28
 
44
29
  /**
45
- * Constructs a new event that occurs when a topic is Registered.
30
+ * Represents an event that occurs when a new singleton is registered with a
31
+ * runner.
32
+ *
46
33
  * @since 1.0.0
47
- * @category constructors
34
+ * @category models
48
35
  */
49
- export function TopicRegistered<Msg extends Message.Message.Any>(
50
- topicType: RecipientType.TopicType<Msg>
51
- ): ShardingRegistrationEvent {
52
- return ({ _tag: "TopicRegistered", topicType })
36
+ export interface SingletonRegistered {
37
+ readonly _tag: "SingletonRegistered"
38
+ readonly address: SingletonAddress
53
39
  }
54
40
 
55
41
  /**
56
42
  * @since 1.0.0
57
- * @category models
43
+ * @category pattern matching
58
44
  */
59
- export type ShardingRegistrationEvent =
60
- | EntityRegistered<any>
61
- | SingletonRegistered
62
- | TopicRegistered<any>
45
+ export const {
46
+ /**
47
+ * @since 1.0.0
48
+ * @category pattern matching
49
+ */
50
+ $match: match,
51
+ /**
52
+ * @since 1.0.0
53
+ * @category constructors
54
+ */
55
+ EntityRegistered,
56
+ /**
57
+ * @since 1.0.0
58
+ * @category constructors
59
+ */
60
+ SingletonRegistered
61
+ } = Data.taggedEnum<ShardingRegistrationEvent>()
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Effect from "effect/Effect"
5
+ import * as Layer from "effect/Layer"
6
+ import type { Scope } from "effect/Scope"
7
+ import { Sharding } from "./Sharding.js"
8
+
9
+ /**
10
+ * @since 1.0.0
11
+ * @category constructors
12
+ */
13
+ export const make = <E, R>(
14
+ name: string,
15
+ run: Effect.Effect<void, E, R>
16
+ ): Layer.Layer<never, never, Sharding | Exclude<R, Scope>> =>
17
+ Layer.effectDiscard(Effect.gen(function*() {
18
+ const sharding = yield* Sharding
19
+ yield* sharding.registerSingleton(name, run)
20
+ }))
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Equal from "effect/Equal"
5
+ import * as Hash from "effect/Hash"
6
+ import * as Schema from "effect/Schema"
7
+ import { ShardId } from "./ShardId.js"
8
+
9
+ /**
10
+ * @since 1.0.0
11
+ * @category Address
12
+ */
13
+ export const TypeId: unique symbol = Symbol.for("@effect/cluster/SingletonAddress")
14
+
15
+ /**
16
+ * @since 1.0.0
17
+ * @category Address
18
+ */
19
+ export type TypeId = typeof TypeId
20
+
21
+ /**
22
+ * Represents the unique address of an singleton within the cluster.
23
+ *
24
+ * @since 1.0.0
25
+ * @category Address
26
+ */
27
+ export class SingletonAddress extends Schema.Class<SingletonAddress>("@effect/cluster/SingletonAddress")({
28
+ shardId: ShardId,
29
+ name: Schema.NonEmptyTrimmedString
30
+ }) {
31
+ /**
32
+ * @since 1.0.0
33
+ */
34
+ readonly [TypeId] = TypeId;
35
+ /**
36
+ * @since 1.0.0
37
+ */
38
+ [Hash.symbol]() {
39
+ return Hash.cached(this)(Hash.string(`${this.shardId}:${this.name}`))
40
+ }
41
+ /**
42
+ * @since 1.0.0
43
+ */
44
+ [Equal.symbol](that: SingletonAddress): boolean {
45
+ return this.shardId === that.shardId && this.name === that.name
46
+ }
47
+ }
@@ -0,0 +1,194 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type * as Brand from "effect/Brand"
5
+ import * as Context from "effect/Context"
6
+ import * as DateTime from "effect/DateTime"
7
+ import * as Effect from "effect/Effect"
8
+ import { identity } from "effect/Function"
9
+ import * as Layer from "effect/Layer"
10
+ import * as Schema from "effect/Schema"
11
+ import type { MachineId } from "./MachineId.js"
12
+
13
+ /**
14
+ * @since 1.0.0
15
+ * @category Symbols
16
+ */
17
+ export const TypeId: unique symbol = Symbol.for("@effect/cluster/Snowflake")
18
+
19
+ /**
20
+ * @since 1.0.0
21
+ * @category Symbols
22
+ */
23
+ export type TypeId = typeof TypeId
24
+
25
+ /**
26
+ * @since 1.0.0
27
+ * @category Models
28
+ */
29
+ export type Snowflake = Brand.Branded<bigint, TypeId>
30
+
31
+ /**
32
+ * @since 1.0.0
33
+ * @category Models
34
+ */
35
+ export const Snowflake = (input: string | bigint): Snowflake =>
36
+ typeof input === "string" ? BigInt(input) as Snowflake : input as Snowflake
37
+
38
+ /**
39
+ * @since 1.0.0
40
+ * @category Models
41
+ */
42
+ export declare namespace Snowflake {
43
+ /**
44
+ * @since 1.0.0
45
+ * @category Models
46
+ */
47
+ export interface Parts {
48
+ readonly timestamp: number
49
+ readonly machineId: MachineId
50
+ readonly sequence: number
51
+ }
52
+
53
+ /**
54
+ * @since 1.0.0
55
+ * @category Models
56
+ */
57
+ export interface Generator {
58
+ readonly unsafeNext: () => Snowflake
59
+ readonly setMachineId: (machineId: MachineId) => Effect.Effect<void>
60
+ }
61
+ }
62
+
63
+ /**
64
+ * @since 1.0.0
65
+ * @category Schemas
66
+ */
67
+ export const SnowflakeFromBigInt: Schema.Schema<Snowflake, bigint> = Schema.BigIntFromSelf.pipe(
68
+ Schema.brand(TypeId)
69
+ )
70
+
71
+ /**
72
+ * @since 1.0.0
73
+ * @category Schemas
74
+ */
75
+ export const SnowflakeFromString: Schema.Schema<Snowflake, string> = Schema.BigInt.pipe(
76
+ Schema.brand(TypeId)
77
+ )
78
+
79
+ /**
80
+ * @since 1.0.0
81
+ * @category Epoch
82
+ */
83
+ export const constEpochMillis: number = Date.UTC(2025, 0, 1)
84
+
85
+ const sinceUnixEpoch = constEpochMillis - Date.UTC(1970, 0, 1)
86
+ const constBigInt12 = BigInt(12)
87
+ const constBigInt22 = BigInt(22)
88
+ const constBigInt1024 = BigInt(1024)
89
+ const constBigInt4096 = BigInt(4096)
90
+
91
+ /**
92
+ * @since 1.0.0
93
+ * @category constructors
94
+ */
95
+ export const make = (options: {
96
+ readonly machineId: MachineId
97
+ readonly sequence: number
98
+ readonly timestamp: number
99
+ }): Snowflake =>
100
+ (BigInt(options.timestamp - constEpochMillis) << constBigInt22
101
+ | (BigInt(options.machineId % 1024) << constBigInt12)
102
+ | BigInt(options.sequence % 4096)) as Snowflake
103
+
104
+ /**
105
+ * @since 1.0.0
106
+ * @category Parts
107
+ */
108
+ export const timestamp = (snowflake: Snowflake): number => Number(snowflake >> constBigInt22) + sinceUnixEpoch
109
+
110
+ /**
111
+ * @since 1.0.0
112
+ * @category Parts
113
+ */
114
+ export const dateTime = (snowflake: Snowflake): DateTime.Utc => DateTime.unsafeMake(timestamp(snowflake))
115
+
116
+ /**
117
+ * @since 1.0.0
118
+ * @category Parts
119
+ */
120
+ export const machineId = (snowflake: Snowflake): MachineId =>
121
+ Number((snowflake >> constBigInt12) % constBigInt1024) as MachineId
122
+
123
+ /**
124
+ * @since 1.0.0
125
+ * @category Parts
126
+ */
127
+ export const sequence = (snowflake: Snowflake): number => Number(snowflake % constBigInt4096)
128
+
129
+ /**
130
+ * @since 1.0.0
131
+ * @category Parts
132
+ */
133
+ export const toParts = (snowflake: Snowflake): Snowflake.Parts => ({
134
+ timestamp: timestamp(snowflake),
135
+ machineId: machineId(snowflake),
136
+ sequence: sequence(snowflake)
137
+ })
138
+
139
+ /**
140
+ * @since 1.0.0
141
+ * @category Generator
142
+ */
143
+ export const makeGenerator: Effect.Effect<Snowflake.Generator> = Effect.gen(function*() {
144
+ let machineId = Math.floor(Math.random() * 1024) as MachineId
145
+ const clock = yield* Effect.clock
146
+
147
+ let sequence = 0
148
+ let sequenceAt = clock.unsafeCurrentTimeMillis()
149
+
150
+ return identity<Snowflake.Generator>({
151
+ setMachineId: (newMachineId) =>
152
+ Effect.sync(() => {
153
+ machineId = newMachineId
154
+ }),
155
+ unsafeNext() {
156
+ let now = clock.unsafeCurrentTimeMillis()
157
+
158
+ // account for clock drift, only allow time to move forward
159
+ if (now < sequenceAt) {
160
+ now = sequenceAt
161
+ } else if (now > sequenceAt) {
162
+ // reset sequence if we're in a new millisecond
163
+ sequence = 0
164
+ sequenceAt = now
165
+ } else if (sequence >= 1024) {
166
+ // if we've hit the max sequence for this millisecond, go to the next
167
+ // millisecond
168
+ sequenceAt++
169
+ sequence = 0
170
+ }
171
+
172
+ return make({
173
+ machineId,
174
+ sequence: sequence++,
175
+ timestamp: sequenceAt
176
+ })
177
+ }
178
+ })
179
+ })
180
+
181
+ /**
182
+ * @since 1.0.0
183
+ * @category Generator
184
+ */
185
+ export class Generator extends Context.Tag("@effect/cluster/Snowflake/Generator")<
186
+ Generator,
187
+ Snowflake.Generator
188
+ >() {}
189
+
190
+ /**
191
+ * @since 1.0.0
192
+ * @category Generator
193
+ */
194
+ export const layerGenerator: Layer.Layer<Generator> = Layer.effect(Generator, makeGenerator)
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import { SocketServer } from "@effect/platform/SocketServer"
5
+ import type * as RpcSerialization from "@effect/rpc/RpcSerialization"
6
+ import * as RpcServer from "@effect/rpc/RpcServer"
7
+ import * as Effect from "effect/Effect"
8
+ import * as Layer from "effect/Layer"
9
+ import type { MessageStorage } from "./MessageStorage.js"
10
+ import * as Runners from "./Runners.js"
11
+ import * as RunnerServer from "./RunnerServer.js"
12
+ import * as Sharding from "./Sharding.js"
13
+ import type { ShardingConfig } from "./ShardingConfig.js"
14
+ import * as ShardManager from "./ShardManager.js"
15
+ import * as ShardStorage from "./ShardStorage.js"
16
+
17
+ const withLogAddress = <A, E, R>(layer: Layer.Layer<A, E, R>): Layer.Layer<A, E, R | SocketServer> =>
18
+ Layer.effectDiscard(Effect.gen(function*() {
19
+ const server = yield* SocketServer
20
+ const address = server.address._tag === "UnixAddress"
21
+ ? server.address.path
22
+ : `${server.address.hostname}:${server.address.port}`
23
+ yield* Effect.annotateLogs(Effect.logInfo(`Listening on: ${address}`), {
24
+ package: "@effect/cluster",
25
+ service: "Runner"
26
+ })
27
+ })).pipe(Layer.provideMerge(layer))
28
+
29
+ /**
30
+ * @since 1.0.0
31
+ * @category Layers
32
+ */
33
+ export const layer: Layer.Layer<
34
+ Sharding.Sharding | Runners.Runners,
35
+ never,
36
+ | Runners.RpcClientProtocol
37
+ | ShardingConfig
38
+ | RpcSerialization.RpcSerialization
39
+ | SocketServer
40
+ | MessageStorage
41
+ | ShardStorage.ShardStorage
42
+ > = RunnerServer.layerWithClients.pipe(
43
+ withLogAddress,
44
+ Layer.provide(RpcServer.layerProtocolSocketServer)
45
+ )
46
+
47
+ /**
48
+ * @since 1.0.0
49
+ * @category Layers
50
+ */
51
+ export const layerClientOnly: Layer.Layer<
52
+ Sharding.Sharding | Runners.Runners,
53
+ never,
54
+ Runners.RpcClientProtocol | ShardingConfig | MessageStorage
55
+ > = Sharding.layer.pipe(
56
+ Layer.provideMerge(Runners.layerRpc),
57
+ Layer.provide(ShardManager.layerClientRpc),
58
+ Layer.provide(ShardStorage.layerNoop)
59
+ )