@effect/cluster 0.38.0 → 0.38.2
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.
- package/EntityProxy/package.json +6 -0
- package/EntityProxyServer/package.json +6 -0
- package/dist/cjs/EntityProxy.js +126 -0
- package/dist/cjs/EntityProxy.js.map +1 -0
- package/dist/cjs/EntityProxyServer.js +54 -0
- package/dist/cjs/EntityProxyServer.js.map +1 -0
- package/dist/cjs/ShardStorage.js +6 -2
- package/dist/cjs/ShardStorage.js.map +1 -1
- package/dist/cjs/ShardingConfig.js +1 -1
- package/dist/cjs/ShardingConfig.js.map +1 -1
- package/dist/cjs/index.js +5 -1
- package/dist/dts/EntityProxy.d.ts +93 -0
- package/dist/dts/EntityProxy.d.ts.map +1 -0
- package/dist/dts/EntityProxyServer.d.ts +26 -0
- package/dist/dts/EntityProxyServer.d.ts.map +1 -0
- package/dist/dts/ShardStorage.d.ts.map +1 -1
- package/dist/dts/ShardingConfig.d.ts.map +1 -1
- package/dist/dts/index.d.ts +8 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/esm/EntityProxy.js +116 -0
- package/dist/esm/EntityProxy.js.map +1 -0
- package/dist/esm/EntityProxyServer.js +45 -0
- package/dist/esm/EntityProxyServer.js.map +1 -0
- package/dist/esm/ShardStorage.js +6 -2
- package/dist/esm/ShardStorage.js.map +1 -1
- package/dist/esm/ShardingConfig.js +1 -1
- package/dist/esm/ShardingConfig.js.map +1 -1
- package/dist/esm/index.js +8 -0
- package/dist/esm/index.js.map +1 -1
- package/package.json +21 -5
- package/src/EntityProxy.ts +193 -0
- package/src/EntityProxyServer.ts +86 -0
- package/src/ShardStorage.ts +6 -2
- package/src/ShardingConfig.ts +0 -1
- package/src/index.ts +10 -0
@@ -0,0 +1,116 @@
|
|
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
|
+
const clientErrors = [MailboxFull, AlreadyProcessingMessage, PersistenceError, EntityNotManagedByRunner];
|
11
|
+
/**
|
12
|
+
* Derives an `RpcGroup` from an `Entity`.
|
13
|
+
*
|
14
|
+
* ```ts
|
15
|
+
* import { ClusterSchema, Entity, EntityProxy, EntityProxyServer } from "@effect/cluster"
|
16
|
+
* import { Rpc, RpcServer } from "@effect/rpc"
|
17
|
+
* import { Layer, Schema } from "effect"
|
18
|
+
*
|
19
|
+
* export const Counter = Entity.make("Counter", [
|
20
|
+
* Rpc.make("Increment", {
|
21
|
+
* payload: { id: Schema.String, amount: Schema.Number },
|
22
|
+
* primaryKey: ({ id }) => id,
|
23
|
+
* success: Schema.Number
|
24
|
+
* })
|
25
|
+
* ]).annotateRpcs(ClusterSchema.Persisted, true)
|
26
|
+
*
|
27
|
+
* // Use EntityProxy.toRpcGroup to create a `RpcGroup` from the Counter entity
|
28
|
+
* export class MyRpcs extends EntityProxy.toRpcGroup(Counter) {}
|
29
|
+
*
|
30
|
+
* // Use EntityProxyServer.layerRpcHandlers to create a layer that implements
|
31
|
+
* // the rpc handlers
|
32
|
+
* const RpcServerLayer = RpcServer.layer(MyRpcs).pipe(
|
33
|
+
* Layer.provide(EntityProxyServer.layerRpcHandlers(Counter))
|
34
|
+
* )
|
35
|
+
* ```
|
36
|
+
*
|
37
|
+
* @since 1.0.0
|
38
|
+
* @category Constructors
|
39
|
+
*/
|
40
|
+
export const toRpcGroup = (entity, options) => {
|
41
|
+
const prefix = options?.prefix ?? "";
|
42
|
+
const rpcs = [];
|
43
|
+
for (const parentRpc_ of entity.protocol.requests.values()) {
|
44
|
+
const parentRpc = parentRpc_;
|
45
|
+
const payloadSchema = Schema.Struct({
|
46
|
+
entityId: Schema.String,
|
47
|
+
payload: parentRpc.payloadSchema
|
48
|
+
});
|
49
|
+
const oldMake = payloadSchema.make;
|
50
|
+
payloadSchema.make = (input, options) => {
|
51
|
+
return oldMake({
|
52
|
+
entityId: input.entityId,
|
53
|
+
payload: parentRpc.payloadSchema.make(input.payload, options)
|
54
|
+
}, options);
|
55
|
+
};
|
56
|
+
const rpc = Rpc.make(`${prefix}${parentRpc._tag}`, {
|
57
|
+
payload: payloadSchema,
|
58
|
+
error: Schema.Union(parentRpc.errorSchema, ...clientErrors),
|
59
|
+
success: parentRpc.successSchema
|
60
|
+
}).annotateContext(parentRpc.annotations);
|
61
|
+
rpcs.push(rpc);
|
62
|
+
}
|
63
|
+
return RpcGroup.make(...rpcs);
|
64
|
+
};
|
65
|
+
const entityIdPath = /*#__PURE__*/Schema.Struct({
|
66
|
+
entityId: Schema.String
|
67
|
+
});
|
68
|
+
/**
|
69
|
+
* Derives an `HttpApiGroup` from an `Entity`.
|
70
|
+
*
|
71
|
+
* ```ts
|
72
|
+
* import { ClusterSchema, Entity, EntityProxy, EntityProxyServer } from "@effect/cluster"
|
73
|
+
* import { HttpApi, HttpApiBuilder } from "@effect/platform"
|
74
|
+
* import { Rpc } from "@effect/rpc"
|
75
|
+
* import { Layer, Schema } from "effect"
|
76
|
+
*
|
77
|
+
* export const Counter = Entity.make("Counter", [
|
78
|
+
* Rpc.make("Increment", {
|
79
|
+
* payload: { id: Schema.String, amount: Schema.Number },
|
80
|
+
* primaryKey: ({ id }) => id,
|
81
|
+
* success: Schema.Number
|
82
|
+
* })
|
83
|
+
* ]).annotateRpcs(ClusterSchema.Persisted, true)
|
84
|
+
*
|
85
|
+
* // Use EntityProxy.toHttpApiGroup to create a `HttpApiGroup` from the
|
86
|
+
* // Counter entity
|
87
|
+
* export class MyApi extends HttpApi.make("api")
|
88
|
+
* .add(
|
89
|
+
* EntityProxy.toHttpApiGroup("counter", Counter)
|
90
|
+
* .prefix("/counter")
|
91
|
+
* )
|
92
|
+
* {}
|
93
|
+
*
|
94
|
+
* // Use EntityProxyServer.layerHttpApi to create a layer that implements
|
95
|
+
* // the handlers for the HttpApiGroup
|
96
|
+
* const ApiLayer = HttpApiBuilder.api(MyApi).pipe(
|
97
|
+
* Layer.provide(EntityProxyServer.layerHttpApi(MyApi, "counter", Counter))
|
98
|
+
* )
|
99
|
+
* ```
|
100
|
+
*
|
101
|
+
* @since 1.0.0
|
102
|
+
* @category Constructors
|
103
|
+
*/
|
104
|
+
export const toHttpApiGroup = (name, entity) => {
|
105
|
+
let group = HttpApiGroup.make(name);
|
106
|
+
for (const parentRpc_ of entity.protocol.requests.values()) {
|
107
|
+
const parentRpc = parentRpc_;
|
108
|
+
const endpoint = HttpApiEndpoint.post(parentRpc._tag, `/${tagToPath(parentRpc._tag)}/:entityId`).setPath(entityIdPath).setPayload(parentRpc.payloadSchema).addSuccess(parentRpc.successSchema).addError(Schema.Union(parentRpc.errorSchema, ...clientErrors)).annotateContext(parentRpc.annotations);
|
109
|
+
group = group.add(endpoint);
|
110
|
+
}
|
111
|
+
return group;
|
112
|
+
};
|
113
|
+
const tagToPath = tag => tag.replace(/[^a-zA-Z0-9]+/g, "-") // Replace non-alphanumeric characters with hyphen
|
114
|
+
.replace(/([a-z])([A-Z])/g, "$1-$2") // Insert hyphen before uppercase letters
|
115
|
+
.toLowerCase();
|
116
|
+
//# sourceMappingURL=EntityProxy.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"EntityProxy.js","names":["HttpApiEndpoint","HttpApiGroup","Rpc","RpcGroup","Schema","AlreadyProcessingMessage","EntityNotManagedByRunner","MailboxFull","PersistenceError","clientErrors","toRpcGroup","entity","options","prefix","rpcs","parentRpc_","protocol","requests","values","parentRpc","payloadSchema","Struct","entityId","String","payload","oldMake","make","input","rpc","_tag","error","Union","errorSchema","success","successSchema","annotateContext","annotations","push","entityIdPath","toHttpApiGroup","name","group","endpoint","post","tagToPath","setPath","setPayload","addSuccess","addError","add","tag","replace","toLowerCase"],"sources":["../../src/EntityProxy.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import * as HttpApiBuilder from "@effect/platform/HttpApiBuilder";
|
2
|
+
import * as Context from "effect/Context";
|
3
|
+
import * as Effect from "effect/Effect";
|
4
|
+
import * as Layer from "effect/Layer";
|
5
|
+
/**
|
6
|
+
* @since 1.0.0
|
7
|
+
* @category Layers
|
8
|
+
*/
|
9
|
+
export const layerHttpApi = (api, name, entity) => HttpApiBuilder.group(api, name, Effect.fnUntraced(function* (handlers_) {
|
10
|
+
const client = yield* entity.client;
|
11
|
+
let handlers = handlers_;
|
12
|
+
for (const parentRpc_ of entity.protocol.requests.values()) {
|
13
|
+
const parentRpc = parentRpc_;
|
14
|
+
handlers = handlers.handle(parentRpc._tag, ({
|
15
|
+
path,
|
16
|
+
payload
|
17
|
+
}) => client(path.entityId)[parentRpc._tag](payload));
|
18
|
+
}
|
19
|
+
return handlers;
|
20
|
+
}));
|
21
|
+
/**
|
22
|
+
* @since 1.0.0
|
23
|
+
* @category Layers
|
24
|
+
*/
|
25
|
+
export const layerRpcHandlers = (entity, options) => Layer.effectContext(Effect.gen(function* () {
|
26
|
+
const context = yield* Effect.context();
|
27
|
+
const prefix = options?.prefix ?? "";
|
28
|
+
const client = yield* entity.client;
|
29
|
+
const handlers = new Map();
|
30
|
+
for (const parentRpc_ of entity.protocol.requests.values()) {
|
31
|
+
const parentRpc = parentRpc_;
|
32
|
+
const tag = `${prefix}${parentRpc._tag}`;
|
33
|
+
const key = `@effect/rpc/Rpc/${tag}`;
|
34
|
+
handlers.set(key, {
|
35
|
+
context,
|
36
|
+
tag,
|
37
|
+
handler: ({
|
38
|
+
entityId,
|
39
|
+
payload
|
40
|
+
}) => client(entityId)[parentRpc._tag](payload)
|
41
|
+
});
|
42
|
+
}
|
43
|
+
return Context.unsafeMake(handlers);
|
44
|
+
}));
|
45
|
+
//# sourceMappingURL=EntityProxyServer.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"EntityProxyServer.js","names":["HttpApiBuilder","Context","Effect","Layer","layerHttpApi","api","name","entity","group","fnUntraced","handlers_","client","handlers","parentRpc_","protocol","requests","values","parentRpc","handle","_tag","path","payload","entityId","layerRpcHandlers","options","effectContext","gen","context","prefix","Map","tag","key","set","handler","unsafeMake"],"sources":["../../src/EntityProxyServer.ts"],"sourcesContent":[null],"mappings":"AAIA,OAAO,KAAKA,cAAc,MAAM,iCAAiC;AAGjE,OAAO,KAAKC,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AAIrC;;;;AAIA,OAAO,MAAMC,YAAY,GAAGA,CAQ1BC,GAA+C,EAC/CC,IAAU,EACVC,MAA2B,KAE3BP,cAAc,CAACQ,KAAK,CAClBH,GAAG,EACHC,IAAI,EACJJ,MAAM,CAACO,UAAU,CAAC,WAAUC,SAAS;EACnC,MAAMC,MAAM,GAAG,OAAOJ,MAAM,CAACI,MAAM;EACnC,IAAIC,QAAQ,GAAGF,SAAS;EACxB,KAAK,MAAMG,UAAU,IAAIN,MAAM,CAACO,QAAQ,CAACC,QAAQ,CAACC,MAAM,EAAE,EAAE;IAC1D,MAAMC,SAAS,GAAGJ,UAAqC;IACvDD,QAAQ,GAAGA,QAAQ,CAACM,MAAM,CACxBD,SAAS,CAACE,IAAW,EACpB,CAAC;MAAEC,IAAI;MAAEC;IAAO,CAAgD,KAC9DV,MAAM,CAACS,IAAI,CAACE,QAAQ,CAAS,CAACL,SAAS,CAACE,IAAI,CAAC,CAACE,OAAO,CAAS,CAC3D;EACV;EACA,OAAOT,QAAwD;AACjE,CAAC,CAAC,CACH;AAEH;;;;AAIA,OAAO,MAAMW,gBAAgB,GAAGA,CAG9BhB,MAA2B,EAAEiB,OAE9B,KACCrB,KAAK,CAACsB,aAAa,CAACvB,MAAM,CAACwB,GAAG,CAAC,aAAS;EACtC,MAAMC,OAAO,GAAG,OAAOzB,MAAM,CAACyB,OAAO,EAAS;EAC9C,MAAMC,MAAM,GAAGJ,OAAO,EAAEI,MAAM,IAAI,EAAE;EACpC,MAAMjB,MAAM,GAAG,OAAOJ,MAAM,CAACI,MAAM;EACnC,MAAMC,QAAQ,GAAG,IAAIiB,GAAG,EAA+B;EACvD,KAAK,MAAMhB,UAAU,IAAIN,MAAM,CAACO,QAAQ,CAACC,QAAQ,CAACC,MAAM,EAAE,EAAE;IAC1D,MAAMC,SAAS,GAAGJ,UAAqC;IACvD,MAAMiB,GAAG,GAAG,GAAGF,MAAM,GAAGX,SAAS,CAACE,IAAI,EAAW;IACjD,MAAMY,GAAG,GAAG,mBAAmBD,GAAG,EAAE;IACpClB,QAAQ,CAACoB,GAAG,CAACD,GAAG,EAAE;MAChBJ,OAAO;MACPG,GAAG;MACHG,OAAO,EAAEA,CAAC;QAAEX,QAAQ;QAAED;MAAO,CAAO,KAAMV,MAAM,CAACW,QAAQ,CAAS,CAACL,SAAS,CAACE,IAAI,CAAC,CAACE,OAAO;KACpF,CAAC;EACX;EACA,OAAOpB,OAAO,CAACiC,UAAU,CAACtB,QAAQ,CAAC;AACrC,CAAC,CAAC,CAAC","ignoreList":[]}
|
package/dist/esm/ShardStorage.js
CHANGED
@@ -39,10 +39,14 @@ export const makeEncoded = encoded => ShardStorage.of({
|
|
39
39
|
},
|
40
40
|
getRunners: Effect.gen(function* () {
|
41
41
|
const runners = yield* encoded.getRunners;
|
42
|
-
const results =
|
42
|
+
const results = [];
|
43
43
|
for (let i = 0; i < runners.length; i++) {
|
44
44
|
const [address, runner] = runners[i];
|
45
|
-
|
45
|
+
try {
|
46
|
+
results.push([decodeRunnerAddress(address), Runner.decodeSync(runner)]);
|
47
|
+
} catch {
|
48
|
+
//
|
49
|
+
}
|
46
50
|
}
|
47
51
|
return results;
|
48
52
|
}),
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ShardStorage.js","names":["Arr","Context","Effect","Layer","MutableHashMap","Option","Runner","RunnerAddress","ShardId","ShardStorage","Tag","makeEncoded","encoded","of","getAssignments","map","assignments","arr","empty","shardId","runnerAddress","push","fromString","none","some","decodeRunnerAddress","saveAssignments","toString","isNone","encodeRunnerAddress","value","getRunners","gen","runners","results","
|
1
|
+
{"version":3,"file":"ShardStorage.js","names":["Arr","Context","Effect","Layer","MutableHashMap","Option","Runner","RunnerAddress","ShardId","ShardStorage","Tag","makeEncoded","encoded","of","getAssignments","map","assignments","arr","empty","shardId","runnerAddress","push","fromString","none","some","decodeRunnerAddress","saveAssignments","toString","isNone","encodeRunnerAddress","value","getRunners","gen","runners","results","i","length","address","runner","decodeSync","saveRunners","suspend","Array","from","encodeSync","acquire","shardIds","id","pipe","shards","refresh","release","releaseAll","layerNoop","sync","acquired","void","_address","succeed","makeMemory","set","layerMemory","effect","host","port","split","Number"],"sources":["../../src/ShardStorage.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
@@ -67,7 +67,7 @@ export const config = /*#__PURE__*/Config.all({
|
|
67
67
|
port: Config.integer("port").pipe(Config.withDefault(defaultRunnerAddress.port), Config.withDescription("The port used for inter-runner communication."))
|
68
68
|
}).pipe(/*#__PURE__*/Config.map(options => RunnerAddress.make(options)), Config.option),
|
69
69
|
runnerListenAddress: /*#__PURE__*/Config.all({
|
70
|
-
host: Config.string("listenHost").pipe(Config.
|
70
|
+
host: Config.string("listenHost").pipe(Config.withDescription("The host to listen on.")),
|
71
71
|
port: Config.integer("listenPort").pipe(Config.withDefault(defaultRunnerAddress.port), Config.withDescription("The port to listen on."))
|
72
72
|
}).pipe(/*#__PURE__*/Config.map(options => RunnerAddress.make(options)), Config.option),
|
73
73
|
serverVersion: /*#__PURE__*/Config.integer("serverVersion").pipe(/*#__PURE__*/Config.withDefault(defaults.serverVersion), /*#__PURE__*/Config.withDescription("The version of the current runner.")),
|
@@ -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":"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
|
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
|
*/
|
package/dist/esm/index.js.map
CHANGED
@@ -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.
|
3
|
+
"version": "0.38.2",
|
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.
|
15
|
-
"@effect/rpc": "^0.61.
|
16
|
-
"@effect/sql": "^0.37.
|
17
|
-
"@effect/workflow": "^0.1.
|
14
|
+
"@effect/platform": "^0.84.6",
|
15
|
+
"@effect/rpc": "^0.61.6",
|
16
|
+
"@effect/sql": "^0.37.6",
|
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
|
],
|
@@ -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
|
package/src/ShardStorage.ts
CHANGED
@@ -177,10 +177,14 @@ export const makeEncoded = (encoded: Encoded) =>
|
|
177
177
|
},
|
178
178
|
getRunners: Effect.gen(function*() {
|
179
179
|
const runners = yield* encoded.getRunners
|
180
|
-
const results
|
180
|
+
const results: Array<[RunnerAddress, Runner]> = []
|
181
181
|
for (let i = 0; i < runners.length; i++) {
|
182
182
|
const [address, runner] = runners[i]
|
183
|
-
|
183
|
+
try {
|
184
|
+
results.push([decodeRunnerAddress(address), Runner.decodeSync(runner)])
|
185
|
+
} catch {
|
186
|
+
//
|
187
|
+
}
|
184
188
|
}
|
185
189
|
return results
|
186
190
|
}),
|