@effect/cluster 0.38.1 → 0.38.3

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 (36) hide show
  1. package/EntityProxy/package.json +6 -0
  2. package/EntityProxyServer/package.json +6 -0
  3. package/dist/cjs/ClusterWorkflowEngine.js +34 -66
  4. package/dist/cjs/ClusterWorkflowEngine.js.map +1 -1
  5. package/dist/cjs/EntityProxy.js +126 -0
  6. package/dist/cjs/EntityProxy.js.map +1 -0
  7. package/dist/cjs/EntityProxyServer.js +54 -0
  8. package/dist/cjs/EntityProxyServer.js.map +1 -0
  9. package/dist/cjs/ShardingConfig.js +1 -1
  10. package/dist/cjs/ShardingConfig.js.map +1 -1
  11. package/dist/cjs/index.js +5 -1
  12. package/dist/dts/ClusterWorkflowEngine.d.ts +0 -1
  13. package/dist/dts/ClusterWorkflowEngine.d.ts.map +1 -1
  14. package/dist/dts/EntityProxy.d.ts +93 -0
  15. package/dist/dts/EntityProxy.d.ts.map +1 -0
  16. package/dist/dts/EntityProxyServer.d.ts +26 -0
  17. package/dist/dts/EntityProxyServer.d.ts.map +1 -0
  18. package/dist/dts/ShardingConfig.d.ts.map +1 -1
  19. package/dist/dts/index.d.ts +8 -0
  20. package/dist/dts/index.d.ts.map +1 -1
  21. package/dist/esm/ClusterWorkflowEngine.js +34 -66
  22. package/dist/esm/ClusterWorkflowEngine.js.map +1 -1
  23. package/dist/esm/EntityProxy.js +116 -0
  24. package/dist/esm/EntityProxy.js.map +1 -0
  25. package/dist/esm/EntityProxyServer.js +45 -0
  26. package/dist/esm/EntityProxyServer.js.map +1 -0
  27. package/dist/esm/ShardingConfig.js +1 -1
  28. package/dist/esm/ShardingConfig.js.map +1 -1
  29. package/dist/esm/index.js +8 -0
  30. package/dist/esm/index.js.map +1 -1
  31. package/package.json +21 -5
  32. package/src/ClusterWorkflowEngine.ts +54 -89
  33. package/src/EntityProxy.ts +193 -0
  34. package/src/EntityProxyServer.ts +86 -0
  35. package/src/ShardingConfig.ts +0 -1
  36. package/src/index.ts +10 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ShardingConfig.js","names":["Config","ConfigProvider","Context","Duration","Effect","Layer","Option","RunnerAddress","ShardingConfig","Tag","defaultRunnerAddress","make","host","port","defaults","runnerAddress","some","runnerListenAddress","none","serverVersion","shardsPerGroup","shardManagerAddress","shardManagerUnavailableTimeout","minutes","shardGroups","entityMailboxCapacity","entityMaxIdleTime","entityTerminationTimeout","seconds","entityMessagePollInterval","entityReplyPollInterval","millis","sendRetryInterval","refreshAssignmentsInterval","simulateRemoteSerialization","layer","options","succeed","layerDefaults","config","all","string","pipe","withDefault","withDescription","integer","map","option","array","duration","boolean","configFromEnv","withConfigProvider","fromEnv","constantCase","layerFromEnv","effect"],"sources":["../../src/ShardingConfig.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,MAAM,MAAM,eAAe;AAEvC,OAAO,KAAKC,cAAc,MAAM,uBAAuB;AACvD,OAAO,KAAKC,OAAO,MAAM,gBAAgB;AAEzC,OAAO,KAAKC,QAAQ,MAAM,iBAAiB;AAC3C,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,aAAa,QAAQ,oBAAoB;AAElD;;;;;;AAMA,OAAM,MAAOC,cAAe,sBAAQN,OAAO,CAACO,GAAG,CAAC,gCAAgC,CAAC,EA0E7E;AAEJ,MAAMC,oBAAoB,gBAAGH,aAAa,CAACI,IAAI,CAAC;EAAEC,IAAI,EAAE,WAAW;EAAEC,IAAI,EAAE;AAAK,CAAE,CAAC;AAEnF;;;;AAIA,OAAO,MAAMC,QAAQ,GAA2B;EAC9CC,aAAa,eAAET,MAAM,CAACU,IAAI,CAACN,oBAAoB,CAAC;EAChDO,mBAAmB,eAAEX,MAAM,CAACY,IAAI,EAAE;EAClCC,aAAa,EAAE,CAAC;EAChBC,cAAc,EAAE,GAAG;EACnBC,mBAAmB,eAAEd,aAAa,CAACI,IAAI,CAAC;IAAEC,IAAI,EAAE,WAAW;IAAEC,IAAI,EAAE;EAAI,CAAE,CAAC;EAC1ES,8BAA8B,eAAEnB,QAAQ,CAACoB,OAAO,CAAC,EAAE,CAAC;EACpDC,WAAW,EAAE,CAAC,SAAS,CAAC;EACxBC,qBAAqB,EAAE,IAAI;EAC3BC,iBAAiB,eAAEvB,QAAQ,CAACoB,OAAO,CAAC,CAAC,CAAC;EACtCI,wBAAwB,eAAExB,QAAQ,CAACyB,OAAO,CAAC,EAAE,CAAC;EAC9CC,yBAAyB,eAAE1B,QAAQ,CAACyB,OAAO,CAAC,EAAE,CAAC;EAC/CE,uBAAuB,eAAE3B,QAAQ,CAAC4B,MAAM,CAAC,GAAG,CAAC;EAC7CC,iBAAiB,eAAE7B,QAAQ,CAAC4B,MAAM,CAAC,GAAG,CAAC;EACvCE,0BAA0B,eAAE9B,QAAQ,CAACoB,OAAO,CAAC,CAAC,CAAC;EAC/CW,2BAA2B,EAAE;CAC9B;AAED;;;;AAIA,OAAO,MAAMC,KAAK,GAAIC,OAAyC,IAC7D/B,KAAK,CAACgC,OAAO,CAAC7B,cAAc,EAAE;EAAE,GAAGM,QAAQ;EAAE,GAAGsB;AAAO,CAAE,CAAC;AAE5D;;;;AAIA,OAAO,MAAME,aAAa,gBAAgCH,KAAK,EAAE;AAEjE;;;;AAIA,OAAO,MAAMI,MAAM,gBAA0CvC,MAAM,CAACwC,GAAG,CAAC;EACtEzB,aAAa,eAAEf,MAAM,CAACwC,GAAG,CAAC;IACxB5B,IAAI,EAAEZ,MAAM,CAACyC,MAAM,CAAC,MAAM,CAAC,CAACC,IAAI,CAC9B1C,MAAM,CAAC2C,WAAW,CAACjC,oBAAoB,CAACE,IAAI,CAAC,EAC7CZ,MAAM,CAAC4C,eAAe,CAAC,2CAA2C,CAAC,CACpE;IACD/B,IAAI,EAAEb,MAAM,CAAC6C,OAAO,CAAC,MAAM,CAAC,CAACH,IAAI,CAC/B1C,MAAM,CAAC2C,WAAW,CAACjC,oBAAoB,CAACG,IAAI,CAAC,EAC7Cb,MAAM,CAAC4C,eAAe,CAAC,+CAA+C,CAAC;GAE1E,CAAC,CAACF,IAAI,cAAC1C,MAAM,CAAC8C,GAAG,CAAEV,OAAO,IAAK7B,aAAa,CAACI,IAAI,CAACyB,OAAO,CAAC,CAAC,EAAEpC,MAAM,CAAC+C,MAAM,CAAC;EAC5E9B,mBAAmB,eAAEjB,MAAM,CAACwC,GAAG,CAAC;IAC9B5B,IAAI,EAAEZ,MAAM,CAACyC,MAAM,CAAC,YAAY,CAAC,CAACC,IAAI,CACpC1C,MAAM,CAAC2C,WAAW,CAACjC,oBAAoB,CAACE,IAAI,CAAC,EAC7CZ,MAAM,CAAC4C,eAAe,CAAC,wBAAwB,CAAC,CACjD;IACD/B,IAAI,EAAEb,MAAM,CAAC6C,OAAO,CAAC,YAAY,CAAC,CAACH,IAAI,CACrC1C,MAAM,CAAC2C,WAAW,CAACjC,oBAAoB,CAACG,IAAI,CAAC,EAC7Cb,MAAM,CAAC4C,eAAe,CAAC,wBAAwB,CAAC;GAEnD,CAAC,CAACF,IAAI,cAAC1C,MAAM,CAAC8C,GAAG,CAAEV,OAAO,IAAK7B,aAAa,CAACI,IAAI,CAACyB,OAAO,CAAC,CAAC,EAAEpC,MAAM,CAAC+C,MAAM,CAAC;EAC5E5B,aAAa,eAAEnB,MAAM,CAAC6C,OAAO,CAAC,eAAe,CAAC,CAACH,IAAI,cACjD1C,MAAM,CAAC2C,WAAW,CAAC7B,QAAQ,CAACK,aAAa,CAAC,eAC1CnB,MAAM,CAAC4C,eAAe,CAAC,oCAAoC,CAAC,CAC7D;EACDpB,WAAW,eAAExB,MAAM,CAACgD,KAAK,CAAChD,MAAM,CAACyC,MAAM,CAAC,aAAa,CAAC,CAAC,CAACC,IAAI,cAC1D1C,MAAM,CAAC2C,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,eAC/B3C,MAAM,CAAC4C,eAAe,CAAC,oDAAoD,CAAC,CAC7E;EACDxB,cAAc,eAAEpB,MAAM,CAAC6C,OAAO,CAAC,gBAAgB,CAAC,CAACH,IAAI,cACnD1C,MAAM,CAAC2C,WAAW,CAAC7B,QAAQ,CAACM,cAAc,CAAC,eAC3CpB,MAAM,CAAC4C,eAAe,CAAC,mDAAmD,CAAC,CAC5E;EACDvB,mBAAmB,eAAErB,MAAM,CAACwC,GAAG,CAAC;IAC9B5B,IAAI,EAAEZ,MAAM,CAACyC,MAAM,CAAC,kBAAkB,CAAC,CAACC,IAAI,CAC1C1C,MAAM,CAAC2C,WAAW,CAAC7B,QAAQ,CAACO,mBAAmB,CAACT,IAAI,CAAC,EACrDZ,MAAM,CAAC4C,eAAe,CAAC,gCAAgC,CAAC,CACzD;IACD/B,IAAI,EAAEb,MAAM,CAAC6C,OAAO,CAAC,kBAAkB,CAAC,CAACH,IAAI,CAC3C1C,MAAM,CAAC2C,WAAW,CAAC7B,QAAQ,CAACO,mBAAmB,CAACR,IAAI,CAAC,EACrDb,MAAM,CAAC4C,eAAe,CAAC,gCAAgC,CAAC;GAE3D,CAAC,CAACF,IAAI,cAAC1C,MAAM,CAAC8C,GAAG,CAAEV,OAAO,IAAK7B,aAAa,CAACI,IAAI,CAACyB,OAAO,CAAC,CAAC,CAAC;EAC7Dd,8BAA8B,eAAEtB,MAAM,CAACiD,QAAQ,CAAC,gCAAgC,CAAC,CAACP,IAAI,cACpF1C,MAAM,CAAC2C,WAAW,CAAC7B,QAAQ,CAACQ,8BAA8B,CAAC,eAC3DtB,MAAM,CAAC4C,eAAe,CACpB,wFAAwF,CACzF,CACF;EACDnB,qBAAqB,eAAEzB,MAAM,CAAC6C,OAAO,CAAC,uBAAuB,CAAC,CAACH,IAAI,cACjE1C,MAAM,CAAC2C,WAAW,CAAC7B,QAAQ,CAACW,qBAAqB,CAAC,eAClDzB,MAAM,CAAC4C,eAAe,CAAC,mDAAmD,CAAC,CAC5E;EACDlB,iBAAiB,eAAE1B,MAAM,CAACiD,QAAQ,CAAC,mBAAmB,CAAC,CAACP,IAAI,cAC1D1C,MAAM,CAAC2C,WAAW,CAAC7B,QAAQ,CAACY,iBAAiB,CAAC,eAC9C1B,MAAM,CAAC4C,eAAe,CACpB,kHAAkH,CACnH,CACF;EACDjB,wBAAwB,eAAE3B,MAAM,CAACiD,QAAQ,CAAC,0BAA0B,CAAC,CAACP,IAAI,cACxE1C,MAAM,CAAC2C,WAAW,CAAC7B,QAAQ,CAACa,wBAAwB,CAAC,eACrD3B,MAAM,CAAC4C,eAAe,CAAC,kEAAkE,CAAC,CAC3F;EACDf,yBAAyB,eAAE7B,MAAM,CAACiD,QAAQ,CAAC,2BAA2B,CAAC,CAACP,IAAI,cAC1E1C,MAAM,CAAC2C,WAAW,CAAC7B,QAAQ,CAACe,yBAAyB,CAAC,eACtD7B,MAAM,CAAC4C,eAAe,CAAC,sEAAsE,CAAC,CAC/F;EACDd,uBAAuB,eAAE9B,MAAM,CAACiD,QAAQ,CAAC,yBAAyB,CAAC,CAACP,IAAI,cACtE1C,MAAM,CAAC2C,WAAW,CAAC7B,QAAQ,CAACgB,uBAAuB,CAAC,eACpD9B,MAAM,CAAC4C,eAAe,CAAC,gEAAgE,CAAC,CACzF;EACDZ,iBAAiB,eAAEhC,MAAM,CAACiD,QAAQ,CAAC,mBAAmB,CAAC,CAACP,IAAI,cAC1D1C,MAAM,CAAC2C,WAAW,CAAC7B,QAAQ,CAACkB,iBAAiB,CAAC,eAC9ChC,MAAM,CAAC4C,eAAe,CAAC,uEAAuE,CAAC,CAChG;EACDX,0BAA0B,eAAEjC,MAAM,CAACiD,QAAQ,CAAC,4BAA4B,CAAC,CAACP,IAAI,cAC5E1C,MAAM,CAAC2C,WAAW,CAAC7B,QAAQ,CAACmB,0BAA0B,CAAC,eACvDjC,MAAM,CAAC4C,eAAe,CAAC,qDAAqD,CAAC,CAC9E;EACDV,2BAA2B,eAAElC,MAAM,CAACkD,OAAO,CAAC,6BAA6B,CAAC,CAACR,IAAI,cAC7E1C,MAAM,CAAC2C,WAAW,CAAC7B,QAAQ,CAACoB,2BAA2B,CAAC,eACxDlC,MAAM,CAAC4C,eAAe,CAAC,kFAAkF,CAAC;CAE7G,CAAC;AAEF;;;;AAIA,OAAO,MAAMO,aAAa,gBAAGZ,MAAM,CAACG,IAAI,cACtCtC,MAAM,CAACgD,kBAAkB,cACvBnD,cAAc,CAACoD,OAAO,EAAE,CAACX,IAAI,CAC3BzC,cAAc,CAACqD,YAAY,CAC5B,CACF,CACF;AAED;;;;AAIA,OAAO,MAAMC,YAAY,GAAInB,OAAqD,IAIhF/B,KAAK,CAACmD,MAAM,CACVhD,cAAc,EACd4B,OAAO,GAAGhC,MAAM,CAAC0C,GAAG,CAACK,aAAa,EAAGZ,MAAM,KAAM;EAAE,GAAGA,MAAM;EAAE,GAAGH;AAAO,CAAE,CAAC,CAAC,GAAGe,aAAa,CAC7F","ignoreList":[]}
1
+ {"version":3,"file":"ShardingConfig.js","names":["Config","ConfigProvider","Context","Duration","Effect","Layer","Option","RunnerAddress","ShardingConfig","Tag","defaultRunnerAddress","make","host","port","defaults","runnerAddress","some","runnerListenAddress","none","serverVersion","shardsPerGroup","shardManagerAddress","shardManagerUnavailableTimeout","minutes","shardGroups","entityMailboxCapacity","entityMaxIdleTime","entityTerminationTimeout","seconds","entityMessagePollInterval","entityReplyPollInterval","millis","sendRetryInterval","refreshAssignmentsInterval","simulateRemoteSerialization","layer","options","succeed","layerDefaults","config","all","string","pipe","withDefault","withDescription","integer","map","option","array","duration","boolean","configFromEnv","withConfigProvider","fromEnv","constantCase","layerFromEnv","effect"],"sources":["../../src/ShardingConfig.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/dist/esm/index.js CHANGED
@@ -34,6 +34,14 @@ export * as EntityAddress from "./EntityAddress.js";
34
34
  * @since 1.0.0
35
35
  */
36
36
  export * as EntityId from "./EntityId.js";
37
+ /**
38
+ * @since 1.0.0
39
+ */
40
+ export * as EntityProxy from "./EntityProxy.js";
41
+ /**
42
+ * @since 1.0.0
43
+ */
44
+ export * as EntityProxyServer from "./EntityProxyServer.js";
37
45
  /**
38
46
  * @since 1.0.0
39
47
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["ClusterCron","ClusterError","ClusterMetrics","ClusterSchema","ClusterWorkflowEngine","DeliverAt","Entity","EntityAddress","EntityId","EntityType","Envelope","HttpCommon","HttpRunner","HttpShardManager","MachineId","Message","MessageStorage","Reply","Runner","RunnerAddress","RunnerHealth","RunnerServer","Runners","ShardId","ShardManager","ShardStorage","Sharding","ShardingConfig","ShardingRegistrationEvent","Singleton","SingletonAddress","Snowflake","SocketRunner","SocketShardManager","SqlMessageStorage","SqlShardStorage","SynchronizedClock"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,WAAW,MAAM,kBAAkB;AAE/C;;;AAGA,OAAO,KAAKC,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAKC,cAAc,MAAM,qBAAqB;AAErD;;;AAGA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,qBAAqB,MAAM,4BAA4B;AAEnE;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,MAAM,MAAM,aAAa;AAErC;;;AAGA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAE7C;;;AAGA,OAAO,KAAKC,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAE7C;;;AAGA,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAE7C;;;AAGA,OAAO,KAAKC,gBAAgB,MAAM,uBAAuB;AAEzD;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAKC,cAAc,MAAM,qBAAqB;AAErD;;;AAGA,OAAO,KAAKC,KAAK,MAAM,YAAY;AAEnC;;;AAGA,OAAO,KAAKC,MAAM,MAAM,aAAa;AAErC;;;AAGA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAKC,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAKC,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAKC,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAKC,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAKC,cAAc,MAAM,qBAAqB;AAErD;;;AAGA,OAAO,KAAKC,yBAAyB,MAAM,gCAAgC;AAE3E;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,gBAAgB,MAAM,uBAAuB;AAEzD;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAKC,kBAAkB,MAAM,yBAAyB;AAE7D;;;AAGA,OAAO,KAAKC,iBAAiB,MAAM,wBAAwB;AAE3D;;;AAGA,OAAO,KAAKC,eAAe,MAAM,sBAAsB;AAEvD;;;AAGA,OAAO,KAAKC,iBAAiB,MAAM,wBAAwB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["ClusterCron","ClusterError","ClusterMetrics","ClusterSchema","ClusterWorkflowEngine","DeliverAt","Entity","EntityAddress","EntityId","EntityProxy","EntityProxyServer","EntityType","Envelope","HttpCommon","HttpRunner","HttpShardManager","MachineId","Message","MessageStorage","Reply","Runner","RunnerAddress","RunnerHealth","RunnerServer","Runners","ShardId","ShardManager","ShardStorage","Sharding","ShardingConfig","ShardingRegistrationEvent","Singleton","SingletonAddress","Snowflake","SocketRunner","SocketShardManager","SqlMessageStorage","SqlShardStorage","SynchronizedClock"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,WAAW,MAAM,kBAAkB;AAE/C;;;AAGA,OAAO,KAAKC,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAKC,cAAc,MAAM,qBAAqB;AAErD;;;AAGA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,qBAAqB,MAAM,4BAA4B;AAEnE;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,MAAM,MAAM,aAAa;AAErC;;;AAGA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAKC,WAAW,MAAM,kBAAkB;AAE/C;;;AAGA,OAAO,KAAKC,iBAAiB,MAAM,wBAAwB;AAE3D;;;AAGA,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAE7C;;;AAGA,OAAO,KAAKC,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAE7C;;;AAGA,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAE7C;;;AAGA,OAAO,KAAKC,gBAAgB,MAAM,uBAAuB;AAEzD;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAKC,cAAc,MAAM,qBAAqB;AAErD;;;AAGA,OAAO,KAAKC,KAAK,MAAM,YAAY;AAEnC;;;AAGA,OAAO,KAAKC,MAAM,MAAM,aAAa;AAErC;;;AAGA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAKC,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAKC,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAKC,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAKC,QAAQ,MAAM,eAAe;AAEzC;;;AAGA,OAAO,KAAKC,cAAc,MAAM,qBAAqB;AAErD;;;AAGA,OAAO,KAAKC,yBAAyB,MAAM,gCAAgC;AAE3E;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,gBAAgB,MAAM,uBAAuB;AAEzD;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAKC,kBAAkB,MAAM,yBAAyB;AAE7D;;;AAGA,OAAO,KAAKC,iBAAiB,MAAM,wBAAwB;AAE3D;;;AAGA,OAAO,KAAKC,eAAe,MAAM,sBAAsB;AAEvD;;;AAGA,OAAO,KAAKC,iBAAiB,MAAM,wBAAwB","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/cluster",
3
- "version": "0.38.1",
3
+ "version": "0.38.3",
4
4
  "description": "Unified interfaces for common cluster-specific services",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -11,10 +11,10 @@
11
11
  "sideEffects": [],
12
12
  "homepage": "https://effect.website",
13
13
  "peerDependencies": {
14
- "@effect/platform": "^0.84.5",
15
- "@effect/rpc": "^0.61.5",
16
- "@effect/sql": "^0.37.5",
17
- "@effect/workflow": "^0.1.2",
14
+ "@effect/platform": "^0.84.6",
15
+ "@effect/rpc": "^0.61.6",
16
+ "@effect/sql": "^0.37.7",
17
+ "@effect/workflow": "^0.1.3",
18
18
  "effect": "^3.16.3"
19
19
  },
20
20
  "publishConfig": {
@@ -75,6 +75,16 @@
75
75
  "import": "./dist/esm/EntityId.js",
76
76
  "default": "./dist/cjs/EntityId.js"
77
77
  },
78
+ "./EntityProxy": {
79
+ "types": "./dist/dts/EntityProxy.d.ts",
80
+ "import": "./dist/esm/EntityProxy.js",
81
+ "default": "./dist/cjs/EntityProxy.js"
82
+ },
83
+ "./EntityProxyServer": {
84
+ "types": "./dist/dts/EntityProxyServer.d.ts",
85
+ "import": "./dist/esm/EntityProxyServer.js",
86
+ "default": "./dist/cjs/EntityProxyServer.js"
87
+ },
78
88
  "./EntityType": {
79
89
  "types": "./dist/dts/EntityType.d.ts",
80
90
  "import": "./dist/esm/EntityType.js",
@@ -250,6 +260,12 @@
250
260
  "EntityId": [
251
261
  "./dist/dts/EntityId.d.ts"
252
262
  ],
263
+ "EntityProxy": [
264
+ "./dist/dts/EntityProxy.d.ts"
265
+ ],
266
+ "EntityProxyServer": [
267
+ "./dist/dts/EntityProxyServer.d.ts"
268
+ ],
253
269
  "EntityType": [
254
270
  "./dist/dts/EntityType.d.ts"
255
271
  ],
@@ -42,6 +42,7 @@ export const make = Effect.gen(function*() {
42
42
  string,
43
43
  Entity.Entity<
44
44
  | Rpc.Rpc<"run", Schema.Struct<{}>, Schema.Schema<Workflow.Result<any, any>>>
45
+ | Rpc.Rpc<"deferred", Schema.Struct<{ name: typeof Schema.String; exit: typeof ExitUnknown }>, typeof ExitUnknown>
45
46
  | Rpc.Rpc<
46
47
  "activity",
47
48
  Schema.Struct<{ name: typeof Schema.String; attempt: typeof Schema.Number }>,
@@ -65,7 +66,6 @@ export const make = Effect.gen(function*() {
65
66
  idleTimeToLive: "5 minutes"
66
67
  })
67
68
  const clockClient = yield* ClockEntity.client
68
- const deferredClient = yield* DeferredEntity.client
69
69
 
70
70
  const requestIdFor = Effect.fnUntraced(function*(options: {
71
71
  readonly workflow: Workflow.Any
@@ -151,6 +151,22 @@ export const make = Effect.gen(function*() {
151
151
  yield* storage.clearAddress(clockAddress)
152
152
  })
153
153
 
154
+ const resume = Effect.fnUntraced(function*(workflow: Workflow.Any, executionId: string) {
155
+ const maybeReply = yield* requestReply({
156
+ workflow,
157
+ entityType: `Workflow/${workflow.name}`,
158
+ executionId,
159
+ tag: "run",
160
+ id: ""
161
+ })
162
+ const maybeSuspended = Option.filter(
163
+ maybeReply,
164
+ (reply) => reply.exit._tag === "Success" && reply.exit.value._tag === "Suspended"
165
+ )
166
+ if (Option.isNone(maybeSuspended)) return
167
+ yield* sharding.reset(Snowflake.Snowflake(maybeSuspended.value.requestId))
168
+ })
169
+
154
170
  return WorkflowEngine.of({
155
171
  register(workflow, execute) {
156
172
  // eslint-disable-next-line @typescript-eslint/no-this-alias
@@ -198,6 +214,7 @@ export const make = Effect.gen(function*() {
198
214
  Effect.provideService(WorkflowInstance, instance)
199
215
  ) as any
200
216
  },
217
+
201
218
  activity: Effect.fnUntraced(function*(request: Entity.Request<any>) {
202
219
  const activityId = `${executionId}/${request.payload.name}`
203
220
  let entry = activities.get(activityId)
@@ -224,7 +241,12 @@ export const make = Effect.gen(function*() {
224
241
  activities.delete(activityId)
225
242
  }))
226
243
  )
227
- }, Rpc.fork)
244
+ }, Rpc.fork),
245
+
246
+ deferred: Effect.fnUntraced(function*(request: Entity.Request<any>) {
247
+ yield* ensureSuccess(resume(workflow, executionId))
248
+ return request.payload.exit
249
+ })
228
250
  }
229
251
  })
230
252
  ) as Effect.Effect<void>
@@ -240,17 +262,13 @@ export const make = Effect.gen(function*() {
240
262
 
241
263
  interrupt: Effect.fnUntraced(
242
264
  function*(this: WorkflowEngine["Type"], workflow, executionId) {
243
- const requestId = yield* requestIdFor({
265
+ const reply = yield* requestReply({
244
266
  workflow,
245
267
  entityType: `Workflow/${workflow.name}`,
246
268
  executionId,
247
269
  tag: "run",
248
270
  id: ""
249
271
  })
250
- if (Option.isNone(requestId)) {
251
- return
252
- }
253
- const reply = yield* replyForRequestId(requestId.value)
254
272
  const nonSuspendedReply = reply.pipe(
255
273
  Option.filter((reply) => reply.exit._tag !== "Success" || reply.exit.value._tag !== "Suspended")
256
274
  )
@@ -273,34 +291,6 @@ export const make = Effect.gen(function*() {
273
291
  Effect.orDie
274
292
  ),
275
293
 
276
- resume: Effect.fnUntraced(
277
- function*(workflowName: string, executionId: string) {
278
- const workflow = workflows.get(workflowName)
279
- if (!workflow) {
280
- return yield* Effect.dieMessage(`WorkflowEngine.resume: ${workflowName} not registered`)
281
- }
282
- const maybeReply = yield* requestReply({
283
- workflow,
284
- entityType: `Workflow/${workflowName}`,
285
- executionId,
286
- tag: "run",
287
- id: ""
288
- })
289
- const maybeSuspended = Option.filter(
290
- maybeReply,
291
- (reply) => reply.exit._tag === "Success" && reply.exit.value._tag === "Suspended"
292
- )
293
- if (Option.isNone(maybeSuspended)) return
294
- yield* sharding.reset(Snowflake.Snowflake(maybeSuspended.value.requestId))
295
- },
296
- Effect.retry({
297
- while: (e) => e._tag === "PersistenceError",
298
- times: 3,
299
- schedule: Schedule.exponential(250)
300
- }),
301
- Effect.orDie
302
- ),
303
-
304
294
  activityExecute: Effect.fnUntraced(function*({ activity, attempt }) {
305
295
  const context = yield* Effect.context<WorkflowInstance>()
306
296
  const instance = Context.get(context, WorkflowInstance)
@@ -335,9 +325,9 @@ export const make = Effect.gen(function*() {
335
325
  Effect.flatMap((instance) =>
336
326
  requestReply({
337
327
  workflow: instance.workflow,
338
- entityType: DeferredEntity.type,
328
+ entityType: `Workflow/${instance.workflow.name}`,
339
329
  executionId: instance.executionId,
340
- tag: "set",
330
+ tag: "deferred",
341
331
  id: deferred.name
342
332
  })
343
333
  ),
@@ -350,14 +340,15 @@ export const make = Effect.gen(function*() {
350
340
  Effect.orDie
351
341
  ),
352
342
 
353
- deferredDone({ deferred, executionId, exit, workflowName }) {
354
- const client = deferredClient(executionId)
355
- return Effect.orDie(client.set({
356
- workflowName,
357
- name: deferred.name,
358
- exit
359
- }))
360
- },
343
+ deferredDone: Effect.fnUntraced(function*({ deferred, executionId, exit, workflowName }) {
344
+ const client = yield* RcMap.get(clients, workflowName)
345
+ return yield* Effect.orDie(
346
+ client(executionId).deferred({
347
+ name: deferred.name,
348
+ exit
349
+ })
350
+ )
351
+ }, Effect.scoped),
361
352
 
362
353
  scheduleClock(options) {
363
354
  const client = clockClient(options.executionId)
@@ -396,7 +387,7 @@ const ActivityRpc = Rpc.make("activity", {
396
387
  success: Schema.Unknown,
397
388
  error: Schema.Unknown
398
389
  })
399
- })
390
+ }).annotate(ClusterSchema.Persisted, true)
400
391
 
401
392
  const makeWorkflowEntity = (workflow: Workflow.Any) =>
402
393
  Entity.make(`Workflow/${workflow.name}`, [
@@ -407,12 +398,23 @@ const makeWorkflowEntity = (workflow: Workflow.Any) =>
407
398
  success: workflow.successSchema,
408
399
  error: workflow.errorSchema
409
400
  })
410
- }),
401
+ })
402
+ .annotate(ClusterSchema.Persisted, true)
403
+ .annotate(ClusterSchema.Uninterruptible, true),
404
+
405
+ Rpc.make("deferred", {
406
+ payload: {
407
+ name: Schema.String,
408
+ exit: ExitUnknown
409
+ },
410
+ primaryKey: ({ name }) => name,
411
+ success: ExitUnknown
412
+ })
413
+ .annotate(ClusterSchema.Persisted, true)
414
+ .annotate(ClusterSchema.Uninterruptible, true),
415
+
411
416
  ActivityRpc
412
- ])
413
- .annotateContext(workflow.annotations)
414
- .annotateRpcs(ClusterSchema.Persisted, true)
415
- .annotateRpcs(ClusterSchema.Uninterruptible, true)
417
+ ]).annotateContext(workflow.annotations)
416
418
 
417
419
  const activityPrimaryKey = (activity: string, attempt: number) => `${activity}/${attempt}`
418
420
 
@@ -422,42 +424,6 @@ const ExitUnknown = Schema.encodedSchema(Schema.Exit({
422
424
  defect: Schema.Defect
423
425
  }))
424
426
 
425
- const DeferredEntity = Entity.make("Workflow/-/DurableDeferred", [
426
- Rpc.make("set", {
427
- payload: {
428
- workflowName: Schema.String,
429
- name: Schema.String,
430
- exit: ExitUnknown
431
- },
432
- primaryKey: ({ name }) => name,
433
- success: ExitUnknown
434
- }),
435
- Rpc.make("resume", {
436
- payload: {
437
- workflowName: Schema.String,
438
- name: Schema.String
439
- },
440
- primaryKey: ({ name }) => name
441
- })
442
- ])
443
- .annotateRpcs(ClusterSchema.Persisted, true)
444
- .annotateRpcs(ClusterSchema.Uninterruptible, true)
445
-
446
- const DeferredEntityLayer = DeferredEntity.toLayer(Effect.gen(function*() {
447
- const engine = yield* WorkflowEngine
448
- const address = yield* Entity.CurrentAddress
449
- const executionId = address.entityId
450
- const client = (yield* DeferredEntity.client)(executionId)
451
- return {
452
- set: (request) =>
453
- Effect.as(
454
- ensureSuccess(client.resume(request.payload, { discard: true })),
455
- request.payload.exit
456
- ),
457
- resume: (request) => engine.resume(request.payload.workflowName, executionId)
458
- }
459
- }))
460
-
461
427
  class ClockPayload extends Schema.Class<ClockPayload>(`Workflow/DurableClock/Run`)({
462
428
  name: Schema.String,
463
429
  workflowName: Schema.String,
@@ -504,7 +470,6 @@ export const layer: Layer.Layer<
504
470
  WorkflowEngine,
505
471
  never,
506
472
  Sharding.Sharding | MessageStorage
507
- > = DeferredEntityLayer.pipe(
508
- Layer.merge(ClockEntityLayer),
473
+ > = ClockEntityLayer.pipe(
509
474
  Layer.provideMerge(Layer.scoped(WorkflowEngine, make))
510
475
  )
@@ -0,0 +1,193 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as HttpApiEndpoint from "@effect/platform/HttpApiEndpoint"
5
+ import * as HttpApiGroup from "@effect/platform/HttpApiGroup"
6
+ import * as Rpc from "@effect/rpc/Rpc"
7
+ import * as RpcGroup from "@effect/rpc/RpcGroup"
8
+ import * as Schema from "effect/Schema"
9
+ import { AlreadyProcessingMessage, EntityNotManagedByRunner, MailboxFull, PersistenceError } from "./ClusterError.js"
10
+ import type * as Entity from "./Entity.js"
11
+
12
+ const clientErrors = [
13
+ MailboxFull,
14
+ AlreadyProcessingMessage,
15
+ PersistenceError,
16
+ EntityNotManagedByRunner
17
+ ] as const
18
+
19
+ /**
20
+ * Derives an `RpcGroup` from an `Entity`.
21
+ *
22
+ * ```ts
23
+ * import { ClusterSchema, Entity, EntityProxy, EntityProxyServer } from "@effect/cluster"
24
+ * import { Rpc, RpcServer } from "@effect/rpc"
25
+ * import { Layer, Schema } from "effect"
26
+ *
27
+ * export const Counter = Entity.make("Counter", [
28
+ * Rpc.make("Increment", {
29
+ * payload: { id: Schema.String, amount: Schema.Number },
30
+ * primaryKey: ({ id }) => id,
31
+ * success: Schema.Number
32
+ * })
33
+ * ]).annotateRpcs(ClusterSchema.Persisted, true)
34
+ *
35
+ * // Use EntityProxy.toRpcGroup to create a `RpcGroup` from the Counter entity
36
+ * export class MyRpcs extends EntityProxy.toRpcGroup(Counter) {}
37
+ *
38
+ * // Use EntityProxyServer.layerRpcHandlers to create a layer that implements
39
+ * // the rpc handlers
40
+ * const RpcServerLayer = RpcServer.layer(MyRpcs).pipe(
41
+ * Layer.provide(EntityProxyServer.layerRpcHandlers(Counter))
42
+ * )
43
+ * ```
44
+ *
45
+ * @since 1.0.0
46
+ * @category Constructors
47
+ */
48
+ export const toRpcGroup = <Rpcs extends Rpc.Any, const Prefix extends string = "">(
49
+ entity: Entity.Entity<Rpcs>,
50
+ options?: {
51
+ readonly prefix?: Prefix | undefined
52
+ }
53
+ ): RpcGroup.RpcGroup<ConvertRpcs<Rpcs, Prefix>> => {
54
+ const prefix = options?.prefix ?? ""
55
+ const rpcs: Array<Rpc.Any> = []
56
+ for (const parentRpc_ of entity.protocol.requests.values()) {
57
+ const parentRpc = parentRpc_ as any as Rpc.AnyWithProps
58
+ const payloadSchema = Schema.Struct({
59
+ entityId: Schema.String,
60
+ payload: parentRpc.payloadSchema
61
+ })
62
+ const oldMake = payloadSchema.make
63
+ payloadSchema.make = (input: any, options?: Schema.MakeOptions) => {
64
+ return oldMake({
65
+ entityId: input.entityId,
66
+ payload: parentRpc.payloadSchema.make(input.payload, options)
67
+ }, options)
68
+ }
69
+ const rpc = Rpc.make(`${prefix}${parentRpc._tag}`, {
70
+ payload: payloadSchema,
71
+ error: Schema.Union(parentRpc.errorSchema, ...clientErrors),
72
+ success: parentRpc.successSchema
73
+ }).annotateContext(parentRpc.annotations)
74
+ rpcs.push(rpc)
75
+ }
76
+ return RpcGroup.make(...rpcs) as any as RpcGroup.RpcGroup<ConvertRpcs<Rpcs, Prefix>>
77
+ }
78
+
79
+ /**
80
+ * @since 1.0.0
81
+ */
82
+ export type ConvertRpcs<Rpcs extends Rpc.Any, Prefix extends string> = Rpcs extends Rpc.Rpc<
83
+ infer _Tag,
84
+ infer _Payload,
85
+ infer _Success,
86
+ infer _Error,
87
+ infer _Middleware
88
+ > ? Rpc.Rpc<
89
+ `${Prefix}${_Tag}`,
90
+ Schema.Struct<{
91
+ entityId: typeof Schema.String
92
+ payload: _Payload
93
+ }>,
94
+ _Success,
95
+ Schema.Schema<
96
+ _Error["Type"] | MailboxFull | AlreadyProcessingMessage | PersistenceError | EntityNotManagedByRunner,
97
+ | _Error["Encoded"]
98
+ | typeof MailboxFull["Encoded"]
99
+ | typeof AlreadyProcessingMessage["Encoded"]
100
+ | typeof PersistenceError["Encoded"]
101
+ | typeof EntityNotManagedByRunner["Encoded"],
102
+ _Error["Context"]
103
+ >
104
+ >
105
+ : never
106
+
107
+ const entityIdPath = Schema.Struct({
108
+ entityId: Schema.String
109
+ })
110
+
111
+ /**
112
+ * Derives an `HttpApiGroup` from an `Entity`.
113
+ *
114
+ * ```ts
115
+ * import { ClusterSchema, Entity, EntityProxy, EntityProxyServer } from "@effect/cluster"
116
+ * import { HttpApi, HttpApiBuilder } from "@effect/platform"
117
+ * import { Rpc } from "@effect/rpc"
118
+ * import { Layer, Schema } from "effect"
119
+ *
120
+ * export const Counter = Entity.make("Counter", [
121
+ * Rpc.make("Increment", {
122
+ * payload: { id: Schema.String, amount: Schema.Number },
123
+ * primaryKey: ({ id }) => id,
124
+ * success: Schema.Number
125
+ * })
126
+ * ]).annotateRpcs(ClusterSchema.Persisted, true)
127
+ *
128
+ * // Use EntityProxy.toHttpApiGroup to create a `HttpApiGroup` from the
129
+ * // Counter entity
130
+ * export class MyApi extends HttpApi.make("api")
131
+ * .add(
132
+ * EntityProxy.toHttpApiGroup("counter", Counter)
133
+ * .prefix("/counter")
134
+ * )
135
+ * {}
136
+ *
137
+ * // Use EntityProxyServer.layerHttpApi to create a layer that implements
138
+ * // the handlers for the HttpApiGroup
139
+ * const ApiLayer = HttpApiBuilder.api(MyApi).pipe(
140
+ * Layer.provide(EntityProxyServer.layerHttpApi(MyApi, "counter", Counter))
141
+ * )
142
+ * ```
143
+ *
144
+ * @since 1.0.0
145
+ * @category Constructors
146
+ */
147
+ export const toHttpApiGroup = <const Name extends string, Rpcs extends Rpc.Any>(
148
+ name: Name,
149
+ entity: Entity.Entity<Rpcs>
150
+ ): HttpApiGroup.HttpApiGroup<Name, ConvertHttpApi<Rpcs>> => {
151
+ let group = HttpApiGroup.make(name)
152
+ for (const parentRpc_ of entity.protocol.requests.values()) {
153
+ const parentRpc = parentRpc_ as any as Rpc.AnyWithProps
154
+ const endpoint = HttpApiEndpoint.post(parentRpc._tag, `/${tagToPath(parentRpc._tag)}/:entityId`)
155
+ .setPath(entityIdPath)
156
+ .setPayload(parentRpc.payloadSchema)
157
+ .addSuccess(parentRpc.successSchema)
158
+ .addError(Schema.Union(parentRpc.errorSchema, ...clientErrors))
159
+ .annotateContext(parentRpc.annotations)
160
+
161
+ group = group.add(endpoint) as any
162
+ }
163
+ return group as any as HttpApiGroup.HttpApiGroup<Name, ConvertHttpApi<Rpcs>>
164
+ }
165
+
166
+ const tagToPath = (tag: string): string =>
167
+ tag
168
+ .replace(/[^a-zA-Z0-9]+/g, "-") // Replace non-alphanumeric characters with hyphen
169
+ .replace(/([a-z])([A-Z])/g, "$1-$2") // Insert hyphen before uppercase letters
170
+ .toLowerCase()
171
+
172
+ /**
173
+ * @since 1.0.0
174
+ */
175
+ export type ConvertHttpApi<Rpcs extends Rpc.Any> = Rpcs extends Rpc.Rpc<
176
+ infer _Tag,
177
+ infer _Payload,
178
+ infer _Success,
179
+ infer _Error,
180
+ infer _Middleware
181
+ > ? HttpApiEndpoint.HttpApiEndpoint<
182
+ _Tag,
183
+ "POST",
184
+ { readonly entityId: string },
185
+ never,
186
+ _Payload["Type"],
187
+ never,
188
+ _Success["Type"],
189
+ _Error["Type"] | MailboxFull | AlreadyProcessingMessage | PersistenceError | EntityNotManagedByRunner,
190
+ _Payload["Context"] | _Success["Context"],
191
+ _Error["Context"]
192
+ > :
193
+ never
@@ -0,0 +1,86 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type * as HttpApi from "@effect/platform/HttpApi"
5
+ import * as HttpApiBuilder from "@effect/platform/HttpApiBuilder"
6
+ import type { ApiGroup, HttpApiGroup } from "@effect/platform/HttpApiGroup"
7
+ import type * as Rpc from "@effect/rpc/Rpc"
8
+ import * as Context from "effect/Context"
9
+ import * as Effect from "effect/Effect"
10
+ import * as Layer from "effect/Layer"
11
+ import type * as Entity from "./Entity.js"
12
+ import type { Sharding } from "./Sharding.js"
13
+
14
+ /**
15
+ * @since 1.0.0
16
+ * @category Layers
17
+ */
18
+ export const layerHttpApi = <
19
+ ApiId extends string,
20
+ Groups extends HttpApiGroup.Any,
21
+ ApiE,
22
+ ApiR,
23
+ Name extends HttpApiGroup.Name<Groups>,
24
+ Rpcs extends Rpc.Any
25
+ >(
26
+ api: HttpApi.HttpApi<ApiId, Groups, ApiE, ApiR>,
27
+ name: Name,
28
+ entity: Entity.Entity<Rpcs>
29
+ ): Layer.Layer<ApiGroup<ApiId, Name>, never, Sharding | Rpc.Context<Rpcs>> =>
30
+ HttpApiBuilder.group(
31
+ api,
32
+ name,
33
+ Effect.fnUntraced(function*(handlers_) {
34
+ const client = yield* entity.client
35
+ let handlers = handlers_
36
+ for (const parentRpc_ of entity.protocol.requests.values()) {
37
+ const parentRpc = parentRpc_ as any as Rpc.AnyWithProps
38
+ handlers = handlers.handle(
39
+ parentRpc._tag as any,
40
+ (({ path, payload }: { path: { entityId: string }; payload: any }) =>
41
+ (client(path.entityId) as any)[parentRpc._tag](payload)) as any
42
+ ) as any
43
+ }
44
+ return handlers as HttpApiBuilder.Handlers<never, never, never>
45
+ })
46
+ )
47
+
48
+ /**
49
+ * @since 1.0.0
50
+ * @category Layers
51
+ */
52
+ export const layerRpcHandlers = <
53
+ Rpcs extends Rpc.Any,
54
+ const Prefix extends string = ""
55
+ >(entity: Entity.Entity<Rpcs>, options?: {
56
+ readonly prefix?: Prefix
57
+ }): Layer.Layer<RpcHandlers<Rpcs, Prefix>, never, Sharding | Rpc.Context<Rpcs>> =>
58
+ Layer.effectContext(Effect.gen(function*() {
59
+ const context = yield* Effect.context<never>()
60
+ const prefix = options?.prefix ?? ""
61
+ const client = yield* entity.client
62
+ const handlers = new Map<string, Rpc.Handler<string>>()
63
+ for (const parentRpc_ of entity.protocol.requests.values()) {
64
+ const parentRpc = parentRpc_ as any as Rpc.AnyWithProps
65
+ const tag = `${prefix}${parentRpc._tag}` as const
66
+ const key = `@effect/rpc/Rpc/${tag}`
67
+ handlers.set(key, {
68
+ context,
69
+ tag,
70
+ handler: ({ entityId, payload }: any) => (client(entityId) as any)[parentRpc._tag](payload) as any
71
+ } as any)
72
+ }
73
+ return Context.unsafeMake(handlers)
74
+ }))
75
+
76
+ /**
77
+ * @since 1.0.0
78
+ */
79
+ export type RpcHandlers<Rpcs extends Rpc.Any, Prefix extends string> = Rpcs extends Rpc.Rpc<
80
+ infer _Tag,
81
+ infer _Payload,
82
+ infer _Success,
83
+ infer _Error,
84
+ infer _Middleware
85
+ > ? Rpc.Handler<`${Prefix}${_Tag}`>
86
+ : never
@@ -148,7 +148,6 @@ export const config: Config.Config<ShardingConfig["Type"]> = Config.all({
148
148
  }).pipe(Config.map((options) => RunnerAddress.make(options)), Config.option),
149
149
  runnerListenAddress: Config.all({
150
150
  host: Config.string("listenHost").pipe(
151
- Config.withDefault(defaultRunnerAddress.host),
152
151
  Config.withDescription("The host to listen on.")
153
152
  ),
154
153
  port: Config.integer("listenPort").pipe(
package/src/index.ts CHANGED
@@ -43,6 +43,16 @@ export * as EntityAddress from "./EntityAddress.js"
43
43
  */
44
44
  export * as EntityId from "./EntityId.js"
45
45
 
46
+ /**
47
+ * @since 1.0.0
48
+ */
49
+ export * as EntityProxy from "./EntityProxy.js"
50
+
51
+ /**
52
+ * @since 1.0.0
53
+ */
54
+ export * as EntityProxyServer from "./EntityProxyServer.js"
55
+
46
56
  /**
47
57
  * @since 1.0.0
48
58
  */