@effect-app/infra 2.64.6 → 2.65.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.
@@ -6,34 +6,40 @@ import { determineMethod } from "@effect-app/infra/api/routing/utils";
6
6
  import { logError, reportError } from "@effect-app/infra/errorReporter";
7
7
  import { InfraLogger } from "@effect-app/infra/logger";
8
8
  import { Rpc, RpcGroup, RpcServer } from "@effect/rpc";
9
- import { Array, Cause, Duration, Effect, Layer, ParseResult, Predicate, Request, S, Schedule, Schema } from "effect-app";
9
+ import { Array, Cause, Context, Duration, Effect, Layer, ParseResult, Predicate, Request, S, Schedule, Schema } from "effect-app";
10
10
  import { HttpRouter } from "effect-app/http";
11
11
  import { pretty, typedKeysOf, typedValuesOf } from "effect-app/utils";
12
12
  import { makeRpc } from "./routing/DynamicMiddleware.js";
13
13
  const logRequestError = logError("Request");
14
14
  const reportRequestError = reportError("Request");
15
+ // retry just once on optimistic concurrency exceptions
15
16
  const optimisticConcurrencySchedule = Schedule.once.pipe(Schedule.intersect(Schedule.recurWhile((a) => a?._tag === "OptimisticConcurrencyException")));
17
+ // note:
18
+ // "d" stands for decoded i.e. the Type
19
+ // "raw" stands for encoded i.e. the Encoded
20
+ var RequestTypes;
21
+ (function (RequestTypes) {
22
+ RequestTypes.DECODED = "d";
23
+ RequestTypes.TYPE = "raw";
24
+ })(RequestTypes || (RequestTypes = {}));
16
25
  export const RouterSymbol = Symbol();
17
- // export interface RouteMatcher<
18
- // Filtered extends Record<string, any>,
19
- // CTXMap extends Record<string, any>,
20
- // Rsc extends Filtered
21
- // > extends RouteMatcherInt<Filtered, CTXMap, Rsc> {}
26
+ // identity factory for Middleware
22
27
  export const makeMiddleware = (content) => content;
23
28
  export class Router extends HttpRouter.Tag("@effect-app/Rpc")() {
24
29
  }
25
30
  export const makeRouter = (middleware, devMode) => {
26
31
  function matchFor(rsc) {
27
- const meta = rsc.meta;
28
- const filtered = typedKeysOf(rsc).reduce((acc, cur) => {
32
+ const { meta } = rsc;
33
+ const requestModules = typedKeysOf(rsc).reduce((acc, cur) => {
29
34
  if (Predicate.isObject(rsc[cur]) && rsc[cur]["success"]) {
30
35
  acc[cur] = rsc[cur];
31
36
  }
32
37
  return acc;
33
38
  }, {});
34
- const items = typedKeysOf(filtered).reduce((prev, cur) => {
39
+ const items = typedKeysOf(requestModules).reduce((prev, cur) => {
35
40
  ;
36
41
  prev[cur] = Object.assign((fnOrEffect) => {
42
+ // fnOrEffect is the actual handler implementation
37
43
  if (fnOrEffect[Symbol.toStringTag] === "GeneratorFunction")
38
44
  fnOrEffect = Effect.fnUntraced(fnOrEffect);
39
45
  const stack = new Error().stack?.split("\n").slice(2).join("\n");
@@ -41,13 +47,13 @@ export const makeRouter = (middleware, devMode) => {
41
47
  ? class {
42
48
  static request = rsc[cur];
43
49
  static stack = stack;
44
- static _tag = "d";
50
+ static _tag = RequestTypes.DECODED;
45
51
  static handler = () => fnOrEffect;
46
52
  }
47
53
  : class {
48
54
  static request = rsc[cur];
49
55
  static stack = stack;
50
- static _tag = "d";
56
+ static _tag = RequestTypes.DECODED;
51
57
  static handler = fnOrEffect;
52
58
  };
53
59
  }, {
@@ -65,20 +71,20 @@ export const makeRouter = (middleware, devMode) => {
65
71
  ? class {
66
72
  static request = rsc[cur];
67
73
  static stack = stack;
68
- static _tag = "raw";
74
+ static _tag = RequestTypes.TYPE;
69
75
  static handler = () => fnOrEffect;
70
76
  }
71
77
  : class {
72
78
  static request = rsc[cur];
73
79
  static stack = stack;
74
- static _tag = "raw";
75
- static handler = (req) => fnOrEffect(req);
80
+ static _tag = RequestTypes.TYPE;
81
+ static handler = fnOrEffect;
76
82
  };
77
83
  }
78
84
  });
79
85
  return prev;
80
86
  }, {});
81
- const total = Object.keys(filtered).length;
87
+ const total = Object.keys(requestModules).length;
82
88
  const router = {
83
89
  accum: {},
84
90
  add(a) {
@@ -95,7 +101,7 @@ export const makeRouter = (middleware, devMode) => {
95
101
  return acc;
96
102
  }, {});
97
103
  const f = (layers, make) => {
98
- const layer = (requestLayers) => Effect
104
+ const layer = Effect
99
105
  .gen(function* () {
100
106
  make = make[Symbol.toStringTag] === "GeneratorFunction"
101
107
  ? Effect.fnUntraced(make)(router3)
@@ -103,7 +109,7 @@ export const makeRouter = (middleware, devMode) => {
103
109
  const controllers = yield* make;
104
110
  const rpc = yield* makeRpc(middleware);
105
111
  // return make.pipe(Effect.map((c) => controllers(c, layers)))
106
- const mapped = typedKeysOf(filtered).reduce((acc, cur) => {
112
+ const mapped = typedKeysOf(requestModules).reduce((acc, cur) => {
107
113
  const handler = controllers[cur];
108
114
  const req = rsc[cur];
109
115
  const method = determineMethod(String(cur), req);
@@ -112,7 +118,7 @@ export const makeRouter = (middleware, devMode) => {
112
118
  ? (req, headers) => Effect.retry(handler.handler(req, headers), optimisticConcurrencySchedule)
113
119
  : (req, headers) => Effect.interruptible(handler.handler(req, headers));
114
120
  acc[cur] = [
115
- handler._tag === "raw"
121
+ handler._tag === RequestTypes.TYPE
116
122
  ? class extends req {
117
123
  static success = S.encodedSchema(req.success);
118
124
  get [Schema.symbolSerializable]() {
@@ -126,7 +132,7 @@ export const makeRouter = (middleware, devMode) => {
126
132
  }
127
133
  }
128
134
  : req,
129
- (requestLayers) => rpc.effect(req, (input, headers) =>
135
+ rpc.effect(req, (input, headers) =>
130
136
  // TODO: render more data... similar to console?
131
137
  Effect
132
138
  .annotateCurrentSpan("requestInput", Object.entries(input).reduce((prev, [key, value]) => {
@@ -174,7 +180,7 @@ export const makeRouter = (middleware, devMode) => {
174
180
  // we should re-evalute this in any case..
175
181
  devMode ? (_) => _ : Effect.catchAllDefect(() => Effect.die("Internal Server Error")), Effect.withSpan("Request." + meta.moduleName + "." + req._tag, {
176
182
  captureStackTrace: () => handler.stack
177
- }), Effect.provide(requestLayers)), meta.moduleName),
183
+ })), meta.moduleName),
178
184
  meta.moduleName
179
185
  ];
180
186
  return acc;
@@ -182,13 +188,13 @@ export const makeRouter = (middleware, devMode) => {
182
188
  const rpcs = RpcGroup.make(...typedValuesOf(mapped).map((_) => {
183
189
  return Rpc.fromTaggedRequest(_[0]);
184
190
  }));
185
- const rpcLayer = (requestLayers) => rpcs.toLayer(Effect.gen(function* () {
191
+ const rpcLayer = rpcs.toLayer(Effect.gen(function* () {
186
192
  return typedValuesOf(mapped).reduce((acc, [req, handler]) => {
187
- acc[req._tag] = handler(requestLayers);
193
+ acc[req._tag] = handler;
188
194
  return acc;
189
195
  }, {});
190
196
  }));
191
- const impl = rpcLayer(requestLayers);
197
+ const impl = rpcLayer;
192
198
  const l = RpcServer.layer(rpcs, { spanPrefix: "RpcServer." + meta.moduleName }).pipe(Layer.provide(impl));
193
199
  return l.pipe(Layer.provideMerge(RpcServer.layerProtocolHttp({ path: ("/" + meta.moduleName), routerTag: Router })));
194
200
  // const rpcRouter = RpcRouter.make(...typedValuesOf(mapped).map(_ => _[0]) as any) as RpcRouter.RpcRouter<
@@ -209,7 +215,7 @@ export const makeRouter = (middleware, devMode) => {
209
215
  })
210
216
  .pipe(Layer.unwrapEffect);
211
217
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
212
- const routes = ((requestLayer) => layer(requestLayer).pipe(layers && Array.isNonEmptyReadonlyArray(layers) ? Layer.provide(layers) : (_) => _,
218
+ const routes = (layer.pipe(layers && Array.isNonEmptyReadonlyArray(layers) ? Layer.provide(layers) : (_) => _, Layer.provide(middleware.contextProvider.Default),
213
219
  // TODO: only provide to the middleware?
214
220
  middleware.dependencies ? Layer.provide(middleware.dependencies) : (_) => _));
215
221
  // Effect.Effect<HttpRouter.HttpRouter<unknown, HttpRouter.HttpRouter.DefaultServices>, never, UserRouter>
@@ -221,9 +227,9 @@ export const makeRouter = (middleware, devMode) => {
221
227
  const effect = ((m) => Object.assign(f(m.dependencies, m.effect), { make: m }));
222
228
  return Object.assign(effect, items, { router, router3 });
223
229
  }
224
- function matchAll(handlers, requestLayer) {
230
+ function matchAll(handlers) {
225
231
  const routers = typedValuesOf(handlers);
226
- return Layer.mergeAll(...routers.map((_) => _.routes(requestLayer))); // TODO
232
+ return Layer.mergeAll(...routers.map((_) => _.routes)); // TODO
227
233
  }
228
234
  return {
229
235
  matchAll,
@@ -232,4 +238,9 @@ export const makeRouter = (middleware, devMode) => {
232
238
  };
233
239
  };
234
240
  export const RequestCacheLayers = Layer.mergeAll(Layer.setRequestCache(Request.makeCache({ capacity: 500, timeToLive: Duration.hours(8) })), Layer.setRequestCaching(true), Layer.setRequestBatching(true));
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcm91dGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0REFBNEQ7QUFDNUQsMERBQTBEO0FBQzFELDREQUE0RDtBQUM1RCx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBOEIsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFcEosT0FBTyxFQUFvQixVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUdyRSxPQUFPLEVBQUUsT0FBTyxFQUFtQixNQUFNLGdDQUFnQyxDQUFBO0FBRXpFLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUMzQyxNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUVqRCxNQUFNLDZCQUE2QixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUN0RCxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEtBQUssZ0NBQWdDLENBQUMs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
241
+ export class DefaultContextMaker extends Effect.Service()("ContextMaker", {
242
+ strict: false,
243
+ succeed: Effect.succeed(Context.empty())
244
+ }) {
245
+ }
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcm91dGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0REFBNEQ7QUFDNUQsMERBQTBEO0FBQzFELDREQUE0RDtBQUM1RCx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQThCLFdBQVcsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRTdKLE9BQU8sRUFBb0IsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFHckUsT0FBTyxFQUFFLE9BQU8sRUFBbUIsTUFBTSxnQ0FBZ0MsQ0FBQTtBQXNCekUsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBQzNDLE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBRWpELHVEQUF1RDtBQUN2RCxNQUFNLDZCQUE2QixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUN0RCxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-app/infra",
3
- "version": "2.64.6",
3
+ "version": "2.65.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -13,7 +13,7 @@
13
13
  "proper-lockfile": "^4.1.2",
14
14
  "pure-rand": "7.0.1",
15
15
  "query-string": "^9.2.2",
16
- "effect-app": "2.43.3"
16
+ "effect-app": "2.44.0"
17
17
  },
18
18
  "devDependencies": {
19
19
  "@azure/cosmos": "^4.5.0",
@@ -29,7 +29,7 @@ export const checkJWTI = (config: Config) => {
29
29
  ) {
30
30
  return cb(Effect.fail(err))
31
31
  }
32
- return Effect.die(err)
32
+ return cb(Effect.die(err))
33
33
  }
34
34
  const r = { headers: req.headers, query: {}, body: {}, is: () => false } // is("urlencoded")
35
35
  try {
@@ -47,36 +47,32 @@ export const endpointCallsMetric = () => {
47
47
  const endpointCalledCounter = Metric.counter("server.endpoint_calls")
48
48
 
49
49
  return Middleware.make((app) =>
50
- Effect.gen(function*(_) {
51
- const request = yield* _(HttpServerRequest.HttpServerRequest)
50
+ Effect.gen(function*() {
51
+ const request = yield* (HttpServerRequest.HttpServerRequest)
52
52
 
53
- yield* _(
53
+ yield* pipe(
54
54
  Metric.increment(endpointCalledCounter),
55
55
  Effect.tagMetrics("path", request.url)
56
56
  )
57
57
 
58
- return yield* _(app)
58
+ return yield* app
59
59
  })
60
60
  )
61
61
  }
62
62
 
63
63
  export const errorLog = Middleware.make((app) =>
64
- Effect.gen(function*(_) {
65
- const request = yield* _(HttpServerRequest.HttpServerRequest)
64
+ Effect.gen(function*() {
65
+ const request = yield* HttpServerRequest.HttpServerRequest
66
66
 
67
- const response = yield* _(app)
67
+ const response = yield* app
68
68
 
69
69
  if (response.status >= 400 && response.status < 500) {
70
- yield* _(
71
- InfraLogger.logWarning(
72
- `${request.method.toUpperCase()} ${request.url} client error ${response.status}`
73
- )
70
+ yield* InfraLogger.logWarning(
71
+ `${request.method.toUpperCase()} ${request.url} client error ${response.status}`
74
72
  )
75
73
  } else if (response.status >= 500) {
76
- yield* _(
77
- InfraLogger.logError(
78
- `${request.method.toUpperCase()} ${request.url} server error ${response.status}`
79
- )
74
+ yield* InfraLogger.logError(
75
+ `${request.method.toUpperCase()} ${request.url} server error ${response.status}`
80
76
  )
81
77
  }
82
78
 
@@ -84,7 +80,7 @@ export const errorLog = Middleware.make((app) =>
84
80
  })
85
81
  )
86
82
 
87
- export const toServerResponse = (err: NotLoggedInError) =>
83
+ const toServerResponse = (err: NotLoggedInError) =>
88
84
  HttpServerResponse.empty().pipe(
89
85
  HttpServerResponse.setStatus(401),
90
86
  HttpServerResponse.setBody(HttpBody.unsafeJson({ message: err.message }))
@@ -100,13 +96,13 @@ export const basicAuth = <_, R>(
100
96
  }>
101
97
  ) =>
102
98
  Middleware.make((app) =>
103
- Effect.gen(function*(_) {
99
+ Effect.gen(function*() {
104
100
  const headerName = options?.headerName ?? "Authorization"
105
101
  const skippedPaths = options?.skipPaths ?? []
106
- const request = yield* _(HttpServerRequest.HttpServerRequest)
102
+ const request = yield* HttpServerRequest.HttpServerRequest
107
103
 
108
104
  if (skippedPaths.includes(request.url)) {
109
- return yield* _(app)
105
+ return yield* app
110
106
  }
111
107
 
112
108
  const authHeader = request.headers[headerName.toLowerCase()]
@@ -149,19 +145,16 @@ export const basicAuth = <_, R>(
149
145
  )
150
146
  }
151
147
 
152
- const check = yield* _(
153
- checkCredentials({
154
- user: credentialsParts[0],
155
- password: credentialsParts[1]!
156
- }),
157
- Effect.either
158
- )
148
+ const check = yield* Effect.either(checkCredentials({
149
+ user: credentialsParts[0],
150
+ password: credentialsParts[1]!
151
+ }))
159
152
 
160
153
  if (Either.isLeft(check)) {
161
154
  return toServerResponse(check.left)
162
155
  }
163
156
 
164
- return yield* _(app)
157
+ return yield* app
165
158
  })
166
159
  )
167
160
 
@@ -181,15 +174,12 @@ export const cors = (_options?: Partial<Middlewares.CorsOptions>) => {
181
174
  }
182
175
 
183
176
  const allowOrigin = (originHeader: string) => {
184
- if (options.allowedOrigins.length === 0) {
177
+ if (options.allowedOrigins.includes("*")) {
185
178
  return { "Access-Control-Allow-Origin": "*" }
186
179
  }
187
180
 
188
- if (options.allowedOrigins.length === 1) {
189
- return {
190
- "Access-Control-Allow-Origin": options.allowedOrigins[0],
191
- Vary: "Origin"
192
- }
181
+ if (options.allowedOrigins.length === 0) {
182
+ return { "Access-Control-Allow-Origin": "*" }
193
183
  }
194
184
 
195
185
  if (isAllowedOrigin(originHeader)) {
@@ -221,6 +211,8 @@ export const cors = (_options?: Partial<Middlewares.CorsOptions>) => {
221
211
  })()
222
212
 
223
213
  const allowHeaders = (accessControlRequestHeaders: string | undefined) => {
214
+ if(!options.allowedOrigins) return undefined
215
+
224
216
  if (options.allowedHeaders.length === 0 && accessControlRequestHeaders) {
225
217
  return {
226
218
  Vary: "Access-Control-Request-Headers",
@@ -228,7 +220,7 @@ export const cors = (_options?: Partial<Middlewares.CorsOptions>) => {
228
220
  }
229
221
  }
230
222
 
231
- if (options.allowedHeaders) {
223
+ if (options.allowedHeaders.length) {
232
224
  return {
233
225
  "Access-Control-Allow-Headers": options.allowedHeaders.join(",")
234
226
  }
@@ -256,8 +248,8 @@ export const cors = (_options?: Partial<Middlewares.CorsOptions>) => {
256
248
  })()
257
249
 
258
250
  return Middleware.make((app) =>
259
- Effect.gen(function*(_) {
260
- const request = yield* _(HttpServerRequest.HttpServerRequest)
251
+ Effect.gen(function*() {
252
+ const request = yield* HttpServerRequest.HttpServerRequest
261
253
 
262
254
  const origin = request.headers["origin"]
263
255
  const accessControlRequestHeaders = request.headers["access-control-request-headers"]
@@ -279,7 +271,7 @@ export const cors = (_options?: Partial<Middlewares.CorsOptions>) => {
279
271
  return ServerResponse.empty({ status: 204, headers: HttpHeaders.fromInput(dropUndefined(corsHeaders)) })
280
272
  }
281
273
 
282
- const response = yield* _(app)
274
+ const response = yield* app
283
275
 
284
276
  return response.pipe(ServerResponse.setHeaders(dropUndefined(corsHeaders)))
285
277
  })
@@ -1,41 +1,53 @@
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 { type Array, Effect, type Layer, type Request, type S } from "effect-app"
4
+ import { type Array, type Context, Effect, type Layer, type Request, type S } from "effect-app"
5
5
  import type { RPCContextMap } from "effect-app/client/req"
6
+
6
7
  import type * as EffectRequest from "effect/Request"
7
8
 
9
+ export type RPCHandlerFactory<CTXMap extends Record<string, RPCContextMap.Any>> = <
10
+ T extends {
11
+ config?: Partial<Record<keyof CTXMap, any>>
12
+ },
13
+ Req extends S.TaggedRequest.All,
14
+ R
15
+ >(
16
+ schema: T & S.Schema<Req, any, never>,
17
+ handler: (
18
+ request: Req,
19
+ headers: any
20
+ ) => Effect.Effect<EffectRequest.Request.Success<Req>, EffectRequest.Request.Error<Req>, R>,
21
+ moduleName?: string
22
+ ) => (
23
+ req: Req,
24
+ headers: any
25
+ ) => Effect.Effect<
26
+ Request.Request.Success<Req>,
27
+ Request.Request.Error<Req>,
28
+ any // smd
29
+ >
30
+
31
+ export type ContextProviderOut<RRet> = Effect<Context.Context<RRet>> & { _tag: "ContextMaker" }
32
+
8
33
  export interface Middleware<
9
- Context,
34
+ MiddlewareContext,
10
35
  CTXMap extends Record<string, RPCContextMap.Any>,
11
36
  R,
12
- Layers extends Array<Layer.Layer.Any>
37
+ Layers extends Array<Layer.Layer.Any>,
38
+ CtxId,
39
+ RRet,
40
+ RErr,
41
+ RCtx
13
42
  > {
14
43
  dependencies?: Layers
15
44
  contextMap: CTXMap
16
- context: Context
45
+ context: MiddlewareContext
46
+ contextProvider: Context.Tag<CtxId, ContextProviderOut<RRet>> & {
47
+ Default: Layer.Layer<CtxId, RErr, RCtx>
48
+ }
17
49
  execute: Effect<
18
- <
19
- T extends {
20
- config?: { [K in keyof CTXMap]?: any }
21
- },
22
- Req extends S.TaggedRequest.All,
23
- R
24
- >(
25
- schema: T & S.Schema<Req, any, never>,
26
- handler: (
27
- request: Req,
28
- headers: any
29
- ) => Effect.Effect<EffectRequest.Request.Success<Req>, EffectRequest.Request.Error<Req>, R>,
30
- moduleName?: string
31
- ) => (
32
- req: Req,
33
- headers: any
34
- ) => Effect.Effect<
35
- Request.Request.Success<Req>,
36
- Request.Request.Error<Req>,
37
- any // smd
38
- >,
50
+ RPCHandlerFactory<CTXMap>,
39
51
  never,
40
52
  R
41
53
  >
@@ -45,27 +57,40 @@ export const makeRpc = <
45
57
  Context,
46
58
  CTXMap extends Record<string, RPCContextMap.Any>,
47
59
  R,
48
- Layers extends Array<Layer.Layer.Any>
60
+ Layers extends Array<Layer.Layer.Any>,
61
+ CtxId,
62
+ RRet,
63
+ RErr,
64
+ RCtx
49
65
  >(
50
- middleware: Middleware<Context, CTXMap, R, Layers>
66
+ middleware: Middleware<Context, CTXMap, R, Layers, CtxId, RRet, RErr, RCtx>
51
67
  ) =>
52
- middleware.execute.pipe(Effect.map((execute) => ({
53
- effect: <T extends { config?: { [K in keyof CTXMap]?: any } }, Req extends S.TaggedRequest.All, R>(
54
- schema: T & S.Schema<Req, any, never>,
55
- handler: (
56
- request: Req,
57
- headers: any
58
- ) => Effect.Effect<
59
- EffectRequest.Request.Success<Req>,
60
- EffectRequest.Request.Error<Req>,
61
- R
62
- >,
63
- moduleName?: string
64
- ) => {
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
- )
70
- }
71
- })))
68
+ Effect
69
+ .all({
70
+ execute: middleware.execute,
71
+ contextProvider: middleware.contextProvider
72
+ })
73
+ .pipe(Effect.map(({ contextProvider, execute }) => ({
74
+ effect: <T extends { config?: Partial<Record<keyof CTXMap, any>> }, Req extends S.TaggedRequest.All, R>(
75
+ schema: T & S.Schema<Req, any, never>,
76
+ handler: (
77
+ request: Req,
78
+ headers: any
79
+ ) => Effect.Effect<
80
+ EffectRequest.Request.Success<Req>,
81
+ EffectRequest.Request.Error<Req>,
82
+ R
83
+ >,
84
+ moduleName?: string
85
+ ) => {
86
+ const h = execute(schema, handler, moduleName)
87
+ return (req: Req, headers: any) =>
88
+ Effect.gen(function*() {
89
+ const ctx = yield* contextProvider
90
+ return yield* h(req, headers).pipe(
91
+ Effect.provide(ctx),
92
+ Effect.uninterruptible // TODO: make this depend on query/command, and consider if middleware also should be affected or not.
93
+ )
94
+ })
95
+ }
96
+ })))