@effect-app/infra 2.45.3 → 2.46.0

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.
@@ -1,32 +1,17 @@
1
- import { Rpc, RpcRouter } from "@effect/rpc";
2
- import { Array, Cause, Duration, Effect, FiberRef, flow, Layer, Predicate, Request, S, Schedule, Schema } from "effect-app";
3
- import { HttpHeaders, HttpRouter, HttpServerRequest, HttpServerResponse } from "effect-app/http";
1
+ /* eslint-disable @typescript-eslint/no-unsafe-assignment */
2
+ /* eslint-disable @typescript-eslint/no-unsafe-argument */
3
+ /* eslint-disable @typescript-eslint/no-empty-object-type */
4
+ /* eslint-disable @typescript-eslint/no-explicit-any */
5
+ import { determineMethod } from "@effect-app/infra/api/routing/utils";
6
+ import { logError, reportError } from "@effect-app/infra/errorReporter";
7
+ import { InfraLogger } from "@effect-app/infra/logger";
8
+ import { Rpc, RpcGroup, RpcServer } from "@effect/rpc";
9
+ import { Array, Cause, Duration, Effect, Layer, Predicate, Request, S, Schedule, Schema } from "effect-app";
4
10
  import { pretty, typedKeysOf, typedValuesOf } from "effect-app/utils";
5
- import { logError, reportError } from "../errorReporter.js";
6
- import { InfraLogger } from "../logger.js";
7
11
  import { makeRpc } from "./routing/DynamicMiddleware.js";
8
- import { determineMethod } from "./routing/utils.js";
9
12
  const logRequestError = logError("Request");
10
13
  const reportRequestError = reportError("Request");
11
14
  const optimisticConcurrencySchedule = Schedule.once.pipe(Schedule.intersect(Schedule.recurWhile((a) => a?._tag === "OptimisticConcurrencyException")));
12
- /**
13
- * Plain jane JSON version, with custom status codes just for fun
14
- */
15
- export const toHttpApp = (self, options) => {
16
- const handler = RpcRouter.toHandlerNoStream(self, options);
17
- return HttpServerRequest.HttpServerRequest.pipe(Effect.flatMap((_) => _.json), Effect.flatMap(handler), Effect.flatMap((r) => {
18
- // currently only 200, 418, 422 are allowed, see apiClientFactory
19
- let status = 200;
20
- const results = Array.isArray(r) ? r : [r];
21
- if (results.some((_) => _._tag === "Failure" && _.cause._tag === "Die")) {
22
- status = 418;
23
- }
24
- else if (results.some((_) => _._tag === "Failure" && _.cause._tag === "Fail")) {
25
- status = 422; // 418
26
- }
27
- return HttpServerResponse.json(r, { status }).pipe(Effect.orDie);
28
- }), Effect.tapDefect(reportError("RPCHttpApp")));
29
- };
30
15
  export const RouterSymbol = Symbol();
31
16
  // export interface RouteMatcher<
32
17
  // Filtered extends Record<string, any>,
@@ -87,9 +72,8 @@ export const makeRouter = (middleware, devMode) => {
87
72
  return prev;
88
73
  }, {});
89
74
  const f = (layers, make) => {
90
- const r = (class Router extends HttpRouter.Tag(`${meta.moduleName}Router`)() {
91
- });
92
- const layer = r.use((router) => Effect.gen(function* () {
75
+ const layer = (requestLayers) => Effect
76
+ .gen(function* () {
93
77
  const controllers = yield* make;
94
78
  const rpc = yield* makeRpc(middleware);
95
79
  // return make.pipe(Effect.map((c) => controllers(c, layers)))
@@ -99,49 +83,50 @@ export const makeRouter = (middleware, devMode) => {
99
83
  const method = determineMethod(String(cur), req);
100
84
  const isCommand = method._tag === "command";
101
85
  const handle = isCommand
102
- ? (req) => Effect.retry(handler.handler(req), optimisticConcurrencySchedule)
103
- : (req) => Effect.interruptible(handler.handler(req));
104
- acc[cur] = rpc.effect(handler._tag === "raw"
105
- ? class extends req {
106
- static success = S.encodedSchema(req.success);
107
- get [Schema.symbolSerializable]() {
108
- return this.constructor;
86
+ ? (req, headers) => Effect.retry(handler.handler(req, headers), optimisticConcurrencySchedule)
87
+ : (req, headers) => Effect.interruptible(handler.handler(req, headers));
88
+ acc[cur] = [
89
+ handler._tag === "raw"
90
+ ? class extends req {
91
+ static success = S.encodedSchema(req.success);
92
+ get [Schema.symbolSerializable]() {
93
+ return this.constructor;
94
+ }
95
+ get [Schema.symbolWithResult]() {
96
+ return {
97
+ failure: req.failure,
98
+ success: S.encodedSchema(req.success)
99
+ };
100
+ }
109
101
  }
110
- get [Schema.symbolWithResult]() {
111
- return {
112
- failure: req.failure,
113
- success: S.encodedSchema(req.success)
114
- };
115
- }
116
- }
117
- : req, (req) =>
118
- // TODO: render more data... similar to console?
119
- Effect
120
- .annotateCurrentSpan("requestInput", Object.entries(req).reduce((prev, [key, value]) => {
121
- prev[key] = key === "password"
122
- ? "<redacted>"
123
- : typeof value === "string" || typeof value === "number" || typeof value === "boolean"
124
- ? typeof value === "string" && value.length > 256
125
- ? (value.substring(0, 253) + "...")
126
- : value
127
- : Array.isArray(value)
128
- ? `Array[${value.length}]`
129
- : value === null || value === undefined
130
- ? `${value}`
131
- : typeof value === "object" && value
132
- ? `Object[${Object.keys(value).length}]`
133
- : typeof value;
134
- return prev;
135
- }, {}))
136
- .pipe(
137
- // can't use andThen due to some being a function and effect
138
- Effect.zipRight(handle(req)), Effect.tapErrorCause((cause) => Cause.isFailure(cause) ? logRequestError(cause) : Effect.void), Effect.tapDefect((cause) => Effect
139
- .all([
140
- reportRequestError(cause, {
141
- action: `${meta.moduleName}.${req._tag}`
142
- }),
143
- Rpc.currentHeaders.pipe(Effect.andThen((headers) => {
144
- return InfraLogger
102
+ : req,
103
+ (requestLayers) => rpc.effect(req, (input, headers) =>
104
+ // TODO: render more data... similar to console?
105
+ Effect
106
+ .annotateCurrentSpan("requestInput", Object.entries(input).reduce((prev, [key, value]) => {
107
+ prev[key] = key === "password"
108
+ ? "<redacted>"
109
+ : typeof value === "string" || typeof value === "number" || typeof value === "boolean"
110
+ ? typeof value === "string" && value.length > 256
111
+ ? (value.substring(0, 253) + "...")
112
+ : value
113
+ : Array.isArray(value)
114
+ ? `Array[${value.length}]`
115
+ : value === null || value === undefined
116
+ ? `${value}`
117
+ : typeof value === "object" && value
118
+ ? `Object[${Object.keys(value).length}]`
119
+ : typeof value;
120
+ return prev;
121
+ }, {}))
122
+ .pipe(
123
+ // can't use andThen due to some being a function and effect
124
+ Effect.zipRight(handle(input, headers)), Effect.tapErrorCause((cause) => Cause.isFailure(cause) ? logRequestError(cause) : Effect.void), Effect.tapDefect((cause) => Effect
125
+ .all([
126
+ reportRequestError(cause, {
127
+ action: `${meta.moduleName}.${req._tag}`
128
+ }),
129
+ InfraLogger
145
130
  .logError("Finished request", cause)
146
131
  .pipe(Effect.annotateLogs({
147
132
  action: `${meta.moduleName}.${req._tag}`,
@@ -155,33 +140,54 @@ export const makeRouter = (middleware, devMode) => {
155
140
  // return prev
156
141
  // }, {} as Record<string, any>)
157
142
  // )
158
- }));
159
- }))
160
- ])),
161
- // NOTE: this does not catch errors from the middlewares..
162
- // we should re-evalute this in any case..
163
- devMode ? (_) => _ : Effect.catchAllDefect(() => Effect.die("Internal Server Error")), Effect.withSpan("Request." + meta.moduleName + "." + req._tag, {
164
- captureStackTrace: () => handler.stack
165
- })), meta.moduleName); // TODO
143
+ }))
144
+ ])),
145
+ // NOTE: this does not catch errors from the middlewares..
146
+ // we should re-evalute this in any case..
147
+ devMode ? (_) => _ : Effect.catchAllDefect(() => Effect.die("Internal Server Error")), Effect.withSpan("Request." + meta.moduleName + "." + req._tag, {
148
+ captureStackTrace: () => handler.stack
149
+ }), Effect.provide(requestLayers)), meta.moduleName),
150
+ meta.moduleName
151
+ ];
166
152
  return acc;
167
153
  }, {});
168
- const rpcRouter = RpcRouter.make(...Object.values(mapped));
169
- const httpApp = toHttpApp(rpcRouter, {
170
- spanPrefix: rsc
171
- .meta
172
- .moduleName + "."
173
- });
174
- yield* router
175
- .post("/", httpApp, { uninterruptible: true });
176
- }));
154
+ const rpcs = RpcGroup.make(...typedValuesOf(mapped).map((_) => {
155
+ return Rpc.fromTaggedRequest(_[0]);
156
+ }));
157
+ const rpcLayer = (requestLayers) => rpcs.toLayer(Effect.gen(function* () {
158
+ return typedValuesOf(mapped).reduce((acc, [req, handler]) => {
159
+ acc[req._tag] = handler(requestLayers);
160
+ return acc;
161
+ }, {});
162
+ }));
163
+ const impl = rpcLayer(requestLayers);
164
+ const l = RpcServer.layer(rpcs).pipe(Layer.provide(impl));
165
+ // TODO: also takes optional a RouterTag..
166
+ return l.pipe(Layer.provideMerge(RpcServer.layerProtocolHttp({ path: ("/rpc/" + meta.moduleName) })));
167
+ // const rpcRouter = RpcRouter.make(...typedValuesOf(mapped).map(_ => _[0]) as any) as RpcRouter.RpcRouter<
168
+ // RPCRouteReq<typeof mapped[keyof typeof mapped]>,
169
+ // RPCRouteR<typeof mapped[keyof typeof mapped]>
170
+ // >
171
+ // const httpApp = toHttpApp(rpcRouter, {
172
+ // spanPrefix: rsc
173
+ // .meta
174
+ // .moduleName + "."
175
+ // })
176
+ // yield* router
177
+ // .post(
178
+ // "/",
179
+ // httpApp as any,
180
+ // { uninterruptible: true }
181
+ // )
182
+ })
183
+ .pipe(Layer.unwrapEffect);
177
184
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
178
- const routes = layer.pipe(Layer.provideMerge(r.Live), layers && Array.isNonEmptyReadonlyArray(layers) ? Layer.provide(layers) : (_) => _,
185
+ const routes = ((requestLayer) => layer(requestLayer).pipe(layers && Array.isNonEmptyReadonlyArray(layers) ? Layer.provide(layers) : (_) => _,
179
186
  // TODO: only provide to the middleware?
180
- middleware.dependencies ? Layer.provide(middleware.dependencies) : (_) => _);
187
+ middleware.dependencies ? Layer.provide(middleware.dependencies) : (_) => _));
181
188
  // Effect.Effect<HttpRouter.HttpRouter<unknown, HttpRouter.HttpRouter.DefaultServices>, never, UserRouter>
182
189
  return {
183
190
  moduleName: meta.moduleName,
184
- Router: r,
185
191
  routes
186
192
  };
187
193
  };
@@ -206,24 +212,7 @@ export const makeRouter = (middleware, devMode) => {
206
212
  }
207
213
  function matchAll(handlers, requestLayer) {
208
214
  const routers = typedValuesOf(handlers);
209
- const rootRouter = class extends HttpRouter.Tag("RootRouter")() {
210
- };
211
- const r = rootRouter
212
- .use((router) => Effect.gen(function* () {
213
- for (const route of routers) {
214
- yield* router.mount(("/rpc/" + route.moduleName), yield* route
215
- .Router
216
- .router
217
- .pipe(Effect.map(HttpRouter.use(flow(Effect.provide(requestLayer))))));
218
- }
219
- }))
220
- .pipe(routers.length
221
- ? Layer.provide(routers.map((r) => r.routes).flat())
222
- : (_) => _);
223
- return {
224
- layer: r,
225
- Router: rootRouter
226
- };
215
+ return Layer.mergeAll(...routers.map((_) => _.routes(requestLayer))); // TODO
227
216
  }
228
217
  return {
229
218
  matchAll,
@@ -232,11 +221,4 @@ export const makeRouter = (middleware, devMode) => {
232
221
  };
233
222
  };
234
223
  export const RequestCacheLayers = Layer.mergeAll(Layer.setRequestCache(Request.makeCache({ capacity: 500, timeToLive: Duration.hours(8) })), Layer.setRequestCaching(true), Layer.setRequestBatching(true));
235
- export const RpcHeadersFromHttpHeaders = Effect
236
- .gen(function* () {
237
- const httpReq = yield* HttpServerRequest.HttpServerRequest;
238
- // TODO: only pass Authentication etc, or move headers to actual Rpc Headers
239
- yield* FiberRef.update(Rpc.currentHeaders, (headers) => HttpHeaders.merge(httpReq.headers, headers));
240
- })
241
- .pipe(Layer.effectDiscard);
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcm91dGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFrRCxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRTNLLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUF3QixpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3RILE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBR3JFLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsT0FBTyxFQUFtQixNQUFNLGdDQUFnQyxDQUFBO0FBQ3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUVwRCxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUE7QUFDM0MsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUE7QUFFakQsTUFBTSw2QkFBNkIsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDdEQsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxLQUFLLGdDQUFnQyxDQUFDLENBQUMsQ0FDbEcsQ0FBQTtBQWVE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
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcm91dGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0REFBNEQ7QUFDNUQsMERBQTBEO0FBQzFELDREQUE0RDtBQUM1RCx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBOEIsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUd2SSxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUVyRSxPQUFPLEVBQUUsT0FBTyxFQUFtQixNQUFNLGdDQUFnQyxDQUFBO0FBRXpFLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUMzQyxNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUVqRCxNQUFNLDZCQUE2QixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUN0RCxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEtBQUssZ0NBQWdDLENBQUMsQ0FBQyxDQUNsRyxDQUFBO0FBaUZELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxNQUFNLEVB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
package/package.json CHANGED
@@ -1,31 +1,31 @@
1
1
  {
2
2
  "name": "@effect-app/infra",
3
- "version": "2.45.3",
3
+ "version": "2.46.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
7
7
  "@faker-js/faker": "^8.4.1",
8
8
  "change-case": "^5.4.4",
9
9
  "cross-fetch": "^4.1.0",
10
- "express-oauth2-jwt-bearer": "^1.6.0",
10
+ "express-oauth2-jwt-bearer": "^1.6.1",
11
11
  "fast-check": "~4.0.0",
12
12
  "path-parser": "^6.1.0",
13
13
  "proper-lockfile": "^4.1.2",
14
14
  "pure-rand": "7.0.1",
15
15
  "query-string": "^9.1.1",
16
- "effect-app": "2.35.0"
16
+ "effect-app": "2.36.0"
17
17
  },
18
18
  "devDependencies": {
19
- "@azure/cosmos": "^4.2.0",
19
+ "@azure/cosmos": "^4.3.0",
20
20
  "@azure/service-bus": "^7.9.5",
21
21
  "@babel/cli": "^7.26.4",
22
- "@babel/core": "^7.26.9",
22
+ "@babel/core": "^7.26.10",
23
23
  "@babel/plugin-proposal-export-namespace-from": "^7.18.9",
24
24
  "@babel/plugin-syntax-import-attributes": "^7.26.0",
25
25
  "@babel/plugin-transform-modules-commonjs": "^7.26.3",
26
26
  "babel-plugin-replace-import-extension": "^1.1.5",
27
- "@sentry/node": "^9.5.0",
28
- "@types/express": "^5.0.0",
27
+ "@sentry/node": "^9.6.1",
28
+ "@types/express": "^5.0.1",
29
29
  "@types/node": "~22.13.10",
30
30
  "@types/proper-lockfile": "^4.1.4",
31
31
  "@types/redis": "^2.8.32",
@@ -33,27 +33,27 @@
33
33
  "express": "^4.21.2",
34
34
  "jwks-rsa": "2.1.4",
35
35
  "jwt-decode": "^4.0.0",
36
- "mongodb": "6.14.2",
36
+ "mongodb": "6.15.0",
37
37
  "redis": "^3.1.2",
38
38
  "redlock": "^4.2.0",
39
39
  "strip-ansi": "^7.1.0",
40
40
  "typescript": "^5.8.2",
41
- "vitest": "^3.0.8"
41
+ "vitest": "^3.0.9"
42
42
  },
43
43
  "peerDependencies": {
44
- "@azure/cosmos": "^4.2.0",
44
+ "@azure/cosmos": "^4.3.0",
45
45
  "@azure/service-bus": "^7.9.5",
46
- "@effect/experimental": "^0.43.1",
47
- "@effect/platform": "^0.79.1",
48
- "@effect/rpc-http": "^0.52.1",
49
- "@effect/rpc": "^0.54.1",
50
- "@effect/sql": "^0.32.1",
51
- "@effect/vitest": "^0.19.8",
46
+ "@effect/experimental": "^0.44.0",
47
+ "@effect/platform": "^0.80.0",
48
+ "@effect/rpc-http": "^0.52.4",
49
+ "@effect/rpc": "^0.55.0",
50
+ "@effect/sql": "^0.33.0",
51
+ "@effect/vitest": "^0.20.0",
52
52
  "@sendgrid/helpers": "^8.0.0",
53
53
  "@sendgrid/mail": "^8.1.4",
54
54
  "redis": "^3.1.2",
55
55
  "redlock": "^4.2.0",
56
- "effect": "^3.13.10",
56
+ "effect": "^3.14.0",
57
57
  "express": "^4.21.2"
58
58
  },
59
59
  "typesVersions": {
@@ -1,9 +1,8 @@
1
1
  /* eslint-disable @typescript-eslint/no-unsafe-assignment */
2
2
  /* eslint-disable @typescript-eslint/no-unsafe-return */
3
3
  /* eslint-disable @typescript-eslint/no-explicit-any */
4
- import { Rpc } from "@effect/rpc"
5
4
  import { type Array, Effect, type Layer, type Request, type S } from "effect-app"
6
- import type { GetEffectContext, RPCContextMap } from "effect-app/client/req"
5
+ import type { RPCContextMap } from "effect-app/client/req"
7
6
  import type * as EffectRequest from "effect/Request"
8
7
 
9
8
  export interface Middleware<
@@ -25,11 +24,13 @@ export interface Middleware<
25
24
  >(
26
25
  schema: T & S.Schema<Req, any, never>,
27
26
  handler: (
28
- request: Req
27
+ request: Req,
28
+ headers: any
29
29
  ) => Effect.Effect<EffectRequest.Request.Success<Req>, EffectRequest.Request.Error<Req>, R>,
30
30
  moduleName?: string
31
31
  ) => (
32
- req: Req
32
+ req: Req,
33
+ headers: any
33
34
  ) => Effect.Effect<
34
35
  Request.Request.Success<Req>,
35
36
  Request.Request.Error<Req>,
@@ -52,7 +53,8 @@ export const makeRpc = <
52
53
  effect: <T extends { config?: { [K in keyof CTXMap]?: any } }, Req extends S.TaggedRequest.All, R>(
53
54
  schema: T & S.Schema<Req, any, never>,
54
55
  handler: (
55
- request: Req
56
+ request: Req,
57
+ headers: any
56
58
  ) => Effect.Effect<
57
59
  EffectRequest.Request.Success<Req>,
58
60
  EffectRequest.Request.Error<Req>,
@@ -60,9 +62,10 @@ export const makeRpc = <
60
62
  >,
61
63
  moduleName?: string
62
64
  ) => {
63
- return Rpc.effect<Req, Context | Exclude<R, GetEffectContext<CTXMap, T["config"]>>>(
64
- schema,
65
- execute(schema, handler, moduleName)
66
- )
65
+ const h = execute(schema, handler, moduleName)
66
+ return (req: Req, headers: any) =>
67
+ h(req, headers).pipe(
68
+ Effect.uninterruptible // TODO: make this depend on query/command, and consider if middleware also should be affected or not.
69
+ )
67
70
  }
68
71
  })))