@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
package/src/Reply.ts ADDED
@@ -0,0 +1,295 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Rpc from "@effect/rpc/Rpc"
5
+ import type * as RpcSchema from "@effect/rpc/RpcSchema"
6
+ import type { NonEmptyReadonlyArray } from "effect/Array"
7
+ import * as Context from "effect/Context"
8
+ import * as Data from "effect/Data"
9
+ import * as Effect from "effect/Effect"
10
+ import * as Exit from "effect/Exit"
11
+ import * as FiberRef from "effect/FiberRef"
12
+ import { identity } from "effect/Function"
13
+ import type * as Option from "effect/Option"
14
+ import { hasProperty } from "effect/Predicate"
15
+ import * as Schema from "effect/Schema"
16
+ import { MalformedMessage } from "./ClusterError.js"
17
+ import type { OutgoingRequest } from "./Message.js"
18
+ import { Snowflake, SnowflakeFromString } from "./Snowflake.js"
19
+
20
+ /**
21
+ * @since 1.0.0
22
+ * @category type ids
23
+ */
24
+ export const TypeId: unique symbol = Symbol.for("@effect/cluster/Reply")
25
+
26
+ /**
27
+ * @since 1.0.0
28
+ * @category type ids
29
+ */
30
+ export type TypeId = typeof TypeId
31
+
32
+ /**
33
+ * @since 1.0.0
34
+ * @category guards
35
+ */
36
+ export const isReply = (u: unknown): u is Reply<Rpc.Any> => hasProperty(u, TypeId)
37
+
38
+ /**
39
+ * @since 1.0.0
40
+ * @category models
41
+ */
42
+ export type Reply<R extends Rpc.Any> = WithExit<R> | Chunk<R>
43
+
44
+ /**
45
+ * @since 1.0.0
46
+ * @category models
47
+ */
48
+ export class ReplyWithContext<R extends Rpc.Any> extends Data.TaggedClass("ReplyWithContext")<{
49
+ readonly reply: Reply<R>
50
+ readonly context: Context.Context<Rpc.Context<R>>
51
+ readonly rpc: R
52
+ }> {
53
+ /**
54
+ * @since 1.0.0
55
+ */
56
+ static fromDefect(options: {
57
+ readonly id: Snowflake
58
+ readonly requestId: Snowflake
59
+ readonly defect: unknown
60
+ }): ReplyWithContext<any> {
61
+ return new ReplyWithContext({
62
+ reply: new WithExit({
63
+ requestId: options.requestId,
64
+ id: options.id,
65
+ exit: Exit.die(Schema.encodeSync(Schema.Defect)(options.defect))
66
+ }),
67
+ context: Context.empty() as any,
68
+ rpc: neverRpc
69
+ })
70
+ }
71
+ }
72
+
73
+ const neverRpc = Rpc.make("Never", {
74
+ success: Schema.Never as any,
75
+ error: Schema.Never,
76
+ payload: {}
77
+ })
78
+
79
+ /**
80
+ * @since 1.0.0
81
+ * @category models
82
+ */
83
+ export type ReplyEncoded<R extends Rpc.Any> = WithExitEncoded<R> | ChunkEncoded<R>
84
+
85
+ /**
86
+ * @since 1.0.0
87
+ * @category models
88
+ */
89
+ export interface WithExitEncoded<R extends Rpc.Any> {
90
+ readonly _tag: "WithExit"
91
+ readonly requestId: string
92
+ readonly id: string
93
+ readonly exit: Rpc.ExitEncoded<R>
94
+ }
95
+
96
+ /**
97
+ * @since 1.0.0
98
+ * @category models
99
+ */
100
+ export interface ChunkEncoded<R extends Rpc.Any> {
101
+ readonly _tag: "Chunk"
102
+ readonly requestId: string
103
+ readonly id: string
104
+ readonly sequence: number
105
+ readonly values: NonEmptyReadonlyArray<Rpc.SuccessChunkEncoded<R>>
106
+ }
107
+
108
+ const schemaCache = new WeakMap<Rpc.Any, Schema.Schema<Reply<Rpc.Any>, ReplyEncoded<Rpc.Any>, Rpc.Context<Rpc.Any>>>()
109
+
110
+ /**
111
+ * @since 1.0.0
112
+ * @category schemas
113
+ */
114
+ export const Reply = <R extends Rpc.Any>(rpc: R): Schema.Schema<
115
+ Reply<R>,
116
+ ReplyEncoded<R>,
117
+ Rpc.Context<R>
118
+ > => {
119
+ if (schemaCache.has(rpc)) {
120
+ return schemaCache.get(rpc) as any
121
+ }
122
+ const schema = Schema.Union(WithExit.schema(rpc), Chunk.schema(rpc))
123
+ schemaCache.set(rpc, schema)
124
+ return schema
125
+ }
126
+
127
+ /**
128
+ * @since 1.0.0
129
+ * @category schemas
130
+ */
131
+ export const Encoded = Schema.Union(
132
+ Schema.Struct({
133
+ _tag: Schema.Literal("WithExit"),
134
+ requestId: Schema.String,
135
+ id: Schema.String,
136
+ exit: Schema.Unknown
137
+ }),
138
+ Schema.Struct({
139
+ _tag: Schema.Literal("Chunk"),
140
+ requestId: Schema.String,
141
+ id: Schema.String,
142
+ sequence: Schema.Number,
143
+ values: Schema.Array(Schema.Unknown)
144
+ })
145
+ )
146
+
147
+ /**
148
+ * @since 1.0.0
149
+ * @category models
150
+ */
151
+ export class Chunk<R extends Rpc.Any> extends Data.TaggedClass("Chunk")<{
152
+ readonly requestId: Snowflake
153
+ readonly id: Snowflake
154
+ readonly sequence: number
155
+ readonly values: NonEmptyReadonlyArray<Rpc.SuccessChunk<R>>
156
+ }> {
157
+ /**
158
+ * @since 1.0.0
159
+ */
160
+ readonly [TypeId] = TypeId
161
+
162
+ /**
163
+ * @since 1.0.0
164
+ */
165
+ static emptyFrom(requestId: Snowflake) {
166
+ return new Chunk({
167
+ requestId,
168
+ id: Snowflake(BigInt(0)),
169
+ sequence: 0,
170
+ values: [undefined]
171
+ })
172
+ }
173
+
174
+ /**
175
+ * @since 1.0.0
176
+ */
177
+ static readonly schemaFromSelf: Schema.Schema<Chunk<never>> = Schema.declare((u): u is Chunk<never> =>
178
+ isReply(u) && u._tag === "Chunk"
179
+ )
180
+
181
+ /**
182
+ * @since 1.0.0
183
+ */
184
+ static schema<R extends Rpc.Any>(rpc: R): Schema.Schema<
185
+ Chunk<R>,
186
+ ChunkEncoded<R>,
187
+ Rpc.Context<R>
188
+ > {
189
+ const successSchema = ((rpc as any as Rpc.AnyWithProps).successSchema as RpcSchema.Stream<any, any>).success
190
+ if (!successSchema) {
191
+ return Schema.Never as any
192
+ }
193
+ return Schema.transform(
194
+ Schema.Struct({
195
+ _tag: Schema.Literal("Chunk"),
196
+ requestId: SnowflakeFromString,
197
+ id: SnowflakeFromString,
198
+ sequence: Schema.Number,
199
+ values: Schema.NonEmptyArray(successSchema)
200
+ }),
201
+ Chunk.schemaFromSelf,
202
+ {
203
+ decode: (encoded) => new Chunk(encoded as any),
204
+ encode: identity
205
+ }
206
+ ) as any
207
+ }
208
+
209
+ /**
210
+ * @since 1.0.0
211
+ */
212
+ withRequestId(requestId: Snowflake): Chunk<R> {
213
+ return new Chunk({
214
+ ...this,
215
+ requestId
216
+ })
217
+ }
218
+ }
219
+
220
+ /**
221
+ * @since 1.0.0
222
+ * @category models
223
+ */
224
+ export class WithExit<R extends Rpc.Any> extends Data.TaggedClass("WithExit")<{
225
+ readonly requestId: Snowflake
226
+ readonly id: Snowflake
227
+ readonly exit: Rpc.Exit<R>
228
+ }> {
229
+ /**
230
+ * @since 1.0.0
231
+ */
232
+ readonly [TypeId] = TypeId
233
+
234
+ /**
235
+ * @since 1.0.0
236
+ */
237
+ static schema<R extends Rpc.Any>(rpc: R): Schema.Schema<
238
+ WithExit<R>,
239
+ WithExitEncoded<R>,
240
+ Rpc.Context<R>
241
+ > {
242
+ return Schema.transform(
243
+ Schema.Struct({
244
+ _tag: Schema.Literal("WithExit"),
245
+ requestId: SnowflakeFromString,
246
+ id: SnowflakeFromString,
247
+ exit: Rpc.exitSchema(rpc)
248
+ }),
249
+ Schema.declare((u): u is WithExit<R> => isReply(u) && u._tag === "WithExit"),
250
+ {
251
+ decode: (encoded) => new WithExit(encoded),
252
+ encode: identity
253
+ }
254
+ ) as any
255
+ }
256
+
257
+ /**
258
+ * @since 1.0.0
259
+ */
260
+ withRequestId(requestId: Snowflake): WithExit<R> {
261
+ return new WithExit({
262
+ ...this,
263
+ requestId
264
+ })
265
+ }
266
+ }
267
+
268
+ /**
269
+ * @since 1.0.0
270
+ * @category serialization / deserialization
271
+ */
272
+ export const serialize = <R extends Rpc.Any>(
273
+ self: ReplyWithContext<R>
274
+ ): Effect.Effect<ReplyEncoded<R>, MalformedMessage> => {
275
+ const schema = Reply(self.rpc)
276
+ return MalformedMessage.refail(
277
+ Effect.locally(Schema.encode(schema)(self.reply), FiberRef.currentContext, self.context)
278
+ )
279
+ }
280
+
281
+ /**
282
+ * @since 1.0.0
283
+ * @category serialization / deserialization
284
+ */
285
+ export const serializeLastReceived = <R extends Rpc.Any>(
286
+ self: OutgoingRequest<R>
287
+ ): Effect.Effect<Option.Option<ReplyEncoded<R>>, MalformedMessage> => {
288
+ if (self.lastReceivedReply._tag === "None") {
289
+ return Effect.succeedNone
290
+ }
291
+ const schema = Reply(self.rpc)
292
+ return Effect.asSome(MalformedMessage.refail(
293
+ Effect.locally(Schema.encode(schema)(self.lastReceivedReply.value), FiberRef.currentContext, self.context)
294
+ ))
295
+ }
package/src/Runner.ts ADDED
@@ -0,0 +1,84 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import { NodeInspectSymbol } from "effect/Inspectable"
5
+ import * as Pretty from "effect/Pretty"
6
+ import * as Schema from "effect/Schema"
7
+ import { RunnerAddress } from "./RunnerAddress.js"
8
+
9
+ const SymbolKey = "@effect/cluster/Runner"
10
+
11
+ /**
12
+ * @since 1.0.0
13
+ * @category type ids
14
+ */
15
+ export const TypeId: unique symbol = Symbol.for(SymbolKey)
16
+
17
+ /**
18
+ * @since 1.0.0
19
+ * @category type ids
20
+ */
21
+ export type TypeId = typeof TypeId
22
+
23
+ /**
24
+ * A `Runner` represents a physical application server that is capable of running
25
+ * entities.
26
+ *
27
+ * Because a Runner represents a physical application server, a Runner must have a
28
+ * unique `address` which can be used to communicate with the server.
29
+ *
30
+ * The version of a Runner is used during rebalancing to give priority to newer
31
+ * application servers and slowly decommission older ones.
32
+ *
33
+ * @since 1.0.0
34
+ * @category models
35
+ */
36
+ export class Runner extends Schema.Class<Runner>(SymbolKey)({
37
+ address: RunnerAddress,
38
+ version: Schema.Int
39
+ }) {
40
+ /**
41
+ * @since 1.0.0
42
+ */
43
+ static pretty = Pretty.make(this)
44
+
45
+ /**
46
+ * @since 1.0.0
47
+ */
48
+ readonly [TypeId] = TypeId
49
+
50
+ /**
51
+ * @since 1.0.0
52
+ */
53
+ static readonly decodeSync = Schema.decodeSync(Schema.parseJson(Runner))
54
+
55
+ /**
56
+ * @since 1.0.0
57
+ */
58
+ static readonly encodeSync = Schema.encodeSync(Schema.parseJson(Runner));
59
+
60
+ /**
61
+ * @since 1.0.0
62
+ */
63
+ [NodeInspectSymbol](): string {
64
+ return this.toString()
65
+ }
66
+ }
67
+
68
+ /**
69
+ * A `Runner` represents a physical application server that is capable of running
70
+ * entities.
71
+ *
72
+ * Because a Runner represents a physical application server, a Runner must have a
73
+ * unique `address` which can be used to communicate with the server.
74
+ *
75
+ * The version of a Runner is used during rebalancing to give priority to newer
76
+ * application servers and slowly decommission older ones.
77
+ *
78
+ * @since 1.0.0
79
+ * @category Constructors
80
+ */
81
+ export const make = (props: {
82
+ readonly address: RunnerAddress
83
+ readonly version: number
84
+ }): Runner => new Runner(props)
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Hash from "effect/Hash"
5
+ import { NodeInspectSymbol } from "effect/Inspectable"
6
+ import * as Schema from "effect/Schema"
7
+
8
+ const SymbolKey = "@effect/cluster/RunnerAddress"
9
+
10
+ /**
11
+ * @since 1.0.0
12
+ * @category type ids
13
+ */
14
+ export const TypeId: unique symbol = Symbol.for(SymbolKey)
15
+
16
+ /**
17
+ * @since 1.0.0
18
+ * @category type ids
19
+ */
20
+ export type TypeId = typeof TypeId
21
+
22
+ /**
23
+ * @since 1.0.0
24
+ * @category models
25
+ */
26
+ export class RunnerAddress extends Schema.Class<RunnerAddress>(SymbolKey)({
27
+ host: Schema.NonEmptyString,
28
+ port: Schema.Int
29
+ }) {
30
+ /**
31
+ * @since 1.0.0
32
+ */
33
+ readonly [TypeId] = TypeId;
34
+
35
+ /**
36
+ * @since 1.0.0
37
+ */
38
+ [Hash.symbol]() {
39
+ return Hash.cached(this)(Hash.string(this.toString()))
40
+ }
41
+
42
+ /**
43
+ * @since 1.0.0
44
+ */
45
+ toString(): string {
46
+ return `RunnerAddress(${this.host}:${this.port})`
47
+ }
48
+
49
+ /**
50
+ * @since 1.0.0
51
+ */
52
+ [NodeInspectSymbol](): string {
53
+ return this.toString()
54
+ }
55
+ }
56
+
57
+ /**
58
+ * @since 1.0.0
59
+ * @category constructors
60
+ */
61
+ export const make = (host: string, port: number): RunnerAddress => new RunnerAddress({ host, port })
@@ -0,0 +1,87 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Context from "effect/Context"
5
+ import * as Effect from "effect/Effect"
6
+ import * as Layer from "effect/Layer"
7
+ import * as MessageStorage from "./MessageStorage.js"
8
+ import type { RunnerAddress } from "./RunnerAddress.js"
9
+ import * as Runners from "./Runners.js"
10
+ import type { ShardingConfig } from "./ShardingConfig.js"
11
+
12
+ /**
13
+ * Represents the service used to check if a Runner is healthy.
14
+ *
15
+ * If a Runner is responsive, shards will not be re-assigned because the Runner may
16
+ * still be processing messages. If a Runner is not responsive, then its
17
+ * associated shards can and will be re-assigned to a different Runner.
18
+ *
19
+ * @since 1.0.0
20
+ * @category models
21
+ */
22
+ export class RunnerHealth extends Context.Tag("@effect/cluster/RunnerHealth")<
23
+ RunnerHealth,
24
+ {
25
+ readonly isAlive: (address: RunnerAddress) => Effect.Effect<boolean>
26
+ }
27
+ >() {}
28
+
29
+ /**
30
+ * A layer which will **always** consider a Runner healthy.
31
+ *
32
+ * This is useful for testing.
33
+ *
34
+ * @since 1.0.0
35
+ * @category layers
36
+ */
37
+ export const layerNoop = Layer.succeed(
38
+ RunnerHealth,
39
+ RunnerHealth.of({
40
+ isAlive: () => Effect.succeed(true)
41
+ })
42
+ )
43
+
44
+ /**
45
+ * @since 1.0.0
46
+ * @category Constructors
47
+ */
48
+ export const make: Effect.Effect<
49
+ RunnerHealth["Type"],
50
+ never,
51
+ Runners.Runners
52
+ > = Effect.gen(function*() {
53
+ const runners = yield* Runners.Runners
54
+
55
+ function isAlive(address: RunnerAddress): Effect.Effect<boolean> {
56
+ return Effect.isSuccess(Effect.timeout(runners.ping(address), 3000))
57
+ }
58
+
59
+ return RunnerHealth.of({ isAlive })
60
+ })
61
+
62
+ /**
63
+ * A layer which will ping a Runner directly to check if it is healthy.
64
+ *
65
+ * @since 1.0.0
66
+ * @category layers
67
+ */
68
+ export const layer: Layer.Layer<
69
+ RunnerHealth,
70
+ never,
71
+ Runners.Runners
72
+ > = Layer.effect(RunnerHealth, make)
73
+
74
+ /**
75
+ * A layer which will ping a Runner directly to check if it is healthy.
76
+ *
77
+ * @since 1.0.0
78
+ * @category layers
79
+ */
80
+ export const layerRpc: Layer.Layer<
81
+ RunnerHealth,
82
+ never,
83
+ Runners.RpcClientProtocol | ShardingConfig
84
+ > = layer.pipe(
85
+ Layer.provide(Runners.layerRpc),
86
+ Layer.provide(MessageStorage.layerNoop)
87
+ )
@@ -0,0 +1,156 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as RpcServer from "@effect/rpc/RpcServer"
5
+ import * as Effect from "effect/Effect"
6
+ import { constant } from "effect/Function"
7
+ import * as Layer from "effect/Layer"
8
+ import * as Mailbox from "effect/Mailbox"
9
+ import * as Option from "effect/Option"
10
+ import * as Message from "./Message.js"
11
+ import type * as MessageStorage from "./MessageStorage.js"
12
+ import * as Reply from "./Reply.js"
13
+ import * as Runners from "./Runners.js"
14
+ import * as Sharding from "./Sharding.js"
15
+ import { ShardingConfig } from "./ShardingConfig.js"
16
+ import * as ShardManager from "./ShardManager.js"
17
+ import * as ShardStorage from "./ShardStorage.js"
18
+ import * as SynchronizedClock from "./SynchronizedClock.js"
19
+
20
+ const constVoid = constant(Effect.void)
21
+
22
+ /**
23
+ * @since 1.0.0
24
+ * @category Layers
25
+ */
26
+ export const layerHandlers = Runners.Rpcs.toLayer(Effect.gen(function*() {
27
+ const sharding = yield* Sharding.Sharding
28
+
29
+ return {
30
+ Ping: () => Effect.void,
31
+ Notify: ({ envelope }) =>
32
+ sharding.notify(
33
+ envelope._tag === "Request"
34
+ ? new Message.IncomingRequest({
35
+ envelope,
36
+ respond: constVoid,
37
+ lastSentReply: Option.none()
38
+ })
39
+ : new Message.IncomingEnvelope({ envelope })
40
+ ),
41
+ Effect: ({ request }) => {
42
+ let resume: (reply: Effect.Effect<Reply.ReplyEncoded<any>>) => void
43
+ let replyEncoded: Reply.ReplyEncoded<any> | undefined
44
+ const message = new Message.IncomingRequest({
45
+ envelope: request,
46
+ lastSentReply: Option.none(),
47
+ respond(reply) {
48
+ return Effect.flatMap(Reply.serialize(reply), (reply) => {
49
+ if (resume) {
50
+ resume(Effect.succeed(reply))
51
+ } else {
52
+ replyEncoded = reply
53
+ }
54
+ return Effect.void
55
+ })
56
+ }
57
+ })
58
+ return Effect.zipRight(
59
+ sharding.send(message),
60
+ Effect.async<Reply.ReplyEncoded<any>>((resume_) => {
61
+ if (replyEncoded) {
62
+ resume_(Effect.succeed(replyEncoded))
63
+ } else {
64
+ resume = resume_
65
+ }
66
+ })
67
+ )
68
+ },
69
+ Stream: ({ request }) =>
70
+ Effect.flatMap(
71
+ Mailbox.make<Reply.ReplyEncoded<any>>(),
72
+ (mailbox) =>
73
+ Effect.as(
74
+ sharding.send(
75
+ new Message.IncomingRequest({
76
+ envelope: request,
77
+ lastSentReply: Option.none(),
78
+ respond(reply) {
79
+ return Effect.flatMap(Reply.serialize(reply), (reply) => {
80
+ mailbox.unsafeOffer(reply)
81
+ return Effect.void
82
+ })
83
+ }
84
+ })
85
+ ),
86
+ mailbox
87
+ )
88
+ ),
89
+ Envelope: ({ envelope }) => sharding.send(new Message.IncomingEnvelope({ envelope }))
90
+ }
91
+ }))
92
+
93
+ /**
94
+ * The `RunnerServer` recieves messages from other Runners and forwards them to the
95
+ * `Sharding` layer.
96
+ *
97
+ * It also responds to `Ping` requests.
98
+ *
99
+ * @since 1.0.0
100
+ * @category Layers
101
+ */
102
+ export const layer: Layer.Layer<
103
+ never,
104
+ never,
105
+ RpcServer.Protocol | Sharding.Sharding | MessageStorage.MessageStorage
106
+ > = RpcServer.layer(Runners.Rpcs, {
107
+ spanPrefix: "RunnerServer",
108
+ disableTracing: true
109
+ }).pipe(Layer.provide(layerHandlers))
110
+
111
+ /**
112
+ * A `RunnerServer` layer that includes the `Runners` & `Sharding` clients.
113
+ *
114
+ * @since 1.0.0
115
+ * @category Layers
116
+ */
117
+ export const layerWithClients: Layer.Layer<
118
+ Sharding.Sharding | Runners.Runners,
119
+ never,
120
+ | RpcServer.Protocol
121
+ | ShardingConfig
122
+ | Runners.RpcClientProtocol
123
+ | MessageStorage.MessageStorage
124
+ | ShardStorage.ShardStorage
125
+ > = layer.pipe(
126
+ Layer.provideMerge(Sharding.layer),
127
+ Layer.provideMerge(Runners.layerRpc),
128
+ Layer.provideMerge(SynchronizedClock.layer),
129
+ Layer.provide(ShardManager.layerClientRpc)
130
+ )
131
+
132
+ /**
133
+ * A `Runners` layer that is client only.
134
+ *
135
+ * It will not register with the ShardManager and recieve shard assignments,
136
+ * so this layer can be used to embed a cluster client inside another effect
137
+ * application.
138
+ *
139
+ * @since 1.0.0
140
+ * @category Layers
141
+ */
142
+ export const layerClientOnly: Layer.Layer<
143
+ Sharding.Sharding | Runners.Runners,
144
+ never,
145
+ | ShardingConfig
146
+ | Runners.RpcClientProtocol
147
+ | MessageStorage.MessageStorage
148
+ > = Sharding.layer.pipe(
149
+ Layer.provideMerge(Runners.layerRpc),
150
+ Layer.provide(ShardManager.layerClientRpc),
151
+ Layer.provide(ShardStorage.layerNoop),
152
+ Layer.updateService(ShardingConfig, (config) => ({
153
+ ...config,
154
+ runnerAddress: Option.none()
155
+ }))
156
+ )