@effect-app/infra 2.74.0 → 2.76.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.
Files changed (43) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/api/layerUtils.d.ts +22 -0
  3. package/dist/api/layerUtils.d.ts.map +1 -0
  4. package/dist/api/layerUtils.js +2 -0
  5. package/dist/api/routing/middleware/ContextProvider.d.ts +41 -0
  6. package/dist/api/routing/middleware/ContextProvider.d.ts.map +1 -0
  7. package/dist/api/routing/middleware/ContextProvider.js +27 -0
  8. package/dist/api/routing/middleware/DynamicMiddleware.d.ts +61 -0
  9. package/dist/api/routing/middleware/DynamicMiddleware.d.ts.map +1 -0
  10. package/dist/api/routing/middleware/DynamicMiddleware.js +45 -0
  11. package/dist/api/routing/middleware/dynamic-middleware.d.ts +25 -0
  12. package/dist/api/routing/middleware/dynamic-middleware.d.ts.map +1 -0
  13. package/dist/api/routing/middleware/dynamic-middleware.js +39 -0
  14. package/dist/api/routing/middleware/generic-middleware.d.ts +9 -0
  15. package/dist/api/routing/middleware/generic-middleware.d.ts.map +1 -0
  16. package/dist/api/routing/middleware/generic-middleware.js +20 -0
  17. package/dist/api/routing/middleware/middleware.d.ts +28 -0
  18. package/dist/api/routing/middleware/middleware.d.ts.map +1 -0
  19. package/dist/api/routing/middleware/middleware.js +101 -0
  20. package/dist/api/routing/middleware.d.ts +6 -0
  21. package/dist/api/routing/middleware.d.ts.map +1 -0
  22. package/dist/api/routing/middleware.js +8 -0
  23. package/dist/api/routing.d.ts +18 -28
  24. package/dist/api/routing.d.ts.map +1 -1
  25. package/dist/api/routing.js +3 -3
  26. package/package.json +27 -7
  27. package/src/api/layerUtils.ts +33 -0
  28. package/src/api/routing/middleware/ContextProvider.ts +136 -0
  29. package/src/api/routing/middleware/DynamicMiddleware.ts +317 -0
  30. package/src/api/routing/{dynamic-middleware.ts → middleware/dynamic-middleware.ts} +29 -63
  31. package/src/api/routing/middleware/generic-middleware.ts +38 -0
  32. package/src/api/routing/middleware/middleware.ts +134 -0
  33. package/src/api/routing/middleware.ts +7 -0
  34. package/src/api/routing.ts +37 -56
  35. package/test/controller.test.ts +132 -15
  36. package/test/dist/controller.test.d.ts.map +1 -1
  37. package/dist/api/routing/DynamicMiddleware.d.ts +0 -104
  38. package/dist/api/routing/DynamicMiddleware.d.ts.map +0 -1
  39. package/dist/api/routing/DynamicMiddleware.js +0 -122
  40. package/dist/api/routing/dynamic-middleware.d.ts +0 -24
  41. package/dist/api/routing/dynamic-middleware.d.ts.map +0 -1
  42. package/dist/api/routing/dynamic-middleware.js +0 -39
  43. package/src/api/routing/DynamicMiddleware.ts +0 -527
@@ -1,122 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
2
- /* eslint-disable @typescript-eslint/no-unsafe-return */
3
- /* eslint-disable @typescript-eslint/no-explicit-any */
4
- import { Array, Cause, Context, Effect, Layer, ParseResult, pipe } from "effect-app";
5
- import { HttpHeaders, HttpServerRequest } from "effect-app/http";
6
- import { pretty } from "effect-app/utils";
7
- import { logError, reportError } from "../../errorReporter.js";
8
- import { InfraLogger } from "../../logger.js";
9
- import { implementMiddleware, mergeContexts } from "./dynamic-middleware.js";
10
- // Note: the type here must be aligned with MergedContextProvider
11
- export const mergeContextProviders = (...deps) => ({
12
- dependencies: deps.map((_) => _.Default),
13
- effect: Effect.gen(function* () {
14
- const makers = yield* Effect.all(deps);
15
- return Effect
16
- .gen(function* () {
17
- const services = makers.map((handle, i) => ({ maker: deps[i], handle }));
18
- // services are effects which return some Context.Context<...>
19
- const context = yield* mergeContexts(services);
20
- return context;
21
- });
22
- })
23
- });
24
- export const ContextProvider = (input) => {
25
- const ctx = Context.GenericTag("ContextProvider");
26
- const l = Layer.scoped(ctx, input.effect);
27
- return Object.assign(ctx, {
28
- Default: l.pipe(input.dependencies ? Layer.provide(input.dependencies) : (_) => _)
29
- });
30
- };
31
- // Note: the type here must be aligned with mergeContextProviders
32
- export const MergedContextProvider = (...deps) => pipe(deps, (_) => mergeContextProviders(..._), (_) => ContextProvider(_));
33
- export const EmptyContextProvider = ContextProvider({ effect: Effect.succeed(Effect.succeed(Context.empty())) });
34
- const logRequestError = logError("Request");
35
- const reportRequestError = reportError("Request");
36
- export class DevMode extends Context.Reference()("DevMode", { defaultValue: () => false }) {
37
- }
38
- // TODO: pull out to a generic middleware system..
39
- export const requestMiddleware = (handle, moduleName) => Effect.fnUntraced(function* (input, rpcHeaders) {
40
- const devMode = yield* DevMode;
41
- // merge in the request headers
42
- // we should consider if we should merge them into rpc headers on the Protocol layer instead.
43
- const httpReq = yield* HttpServerRequest.HttpServerRequest;
44
- const headers = HttpHeaders.merge(httpReq.headers, rpcHeaders);
45
- return yield* Effect
46
- .annotateCurrentSpan("requestInput", Object.entries(input).reduce((prev, [key, value]) => {
47
- prev[key] = key === "password"
48
- ? "<redacted>"
49
- : typeof value === "string" || typeof value === "number" || typeof value === "boolean"
50
- ? typeof value === "string" && value.length > 256
51
- ? (value.substring(0, 253) + "...")
52
- : value
53
- : Array.isArray(value)
54
- ? `Array[${value.length}]`
55
- : value === null || value === undefined
56
- ? `${value}`
57
- : typeof value === "object" && value
58
- ? `Object[${Object.keys(value).length}]`
59
- : typeof value;
60
- return prev;
61
- }, {}))
62
- .pipe(
63
- // can't use andThen due to some being a function and effect
64
- Effect.zipRight(handle(input, headers)),
65
- // TODO: support ParseResult if the error channel of the request allows it.. but who would want that?
66
- Effect.catchAll((_) => ParseResult.isParseError(_) ? Effect.die(_) : Effect.fail(_)), Effect.tapErrorCause((cause) => Cause.isFailure(cause) ? logRequestError(cause) : Effect.void), Effect.tapDefect((cause) => Effect
67
- .all([
68
- reportRequestError(cause, {
69
- action: `${moduleName}.${input._tag}`
70
- }),
71
- InfraLogger
72
- .logError("Finished request", cause)
73
- .pipe(Effect.annotateLogs({
74
- action: `${moduleName}.${input._tag}`,
75
- req: pretty(input),
76
- headers: pretty(headers)
77
- // resHeaders: pretty(
78
- // Object
79
- // .entries(headers)
80
- // .reduce((prev, [key, value]) => {
81
- // prev[key] = value && typeof value === "string" ? snipString(value) : value
82
- // return prev
83
- // }, {} as Record<string, any>)
84
- // )
85
- }))
86
- ])), devMode ? (_) => _ : Effect.catchAllDefect(() => Effect.die("Internal Server Error")));
87
- });
88
- // factory for middlewares
89
- export const makeMiddleware =
90
- // by setting RequestContextMap beforehand, execute contextual typing does not fuck up itself to anys
91
- () => (make) => {
92
- // type Id = MiddlewareMakerId &
93
- const MiddlewareMaker = Context.GenericTag("MiddlewareMaker");
94
- const dynamicMiddlewares = implementMiddleware()(make.dynamicMiddlewares);
95
- const l = Layer.scoped(MiddlewareMaker, Effect
96
- .all({
97
- dynamicMiddlewares: dynamicMiddlewares.effect,
98
- middleware: make.execute((cb) => cb),
99
- contextProvider: make.contextProvider // uses the middleware.contextProvider tag to get the context provider service
100
- })
101
- .pipe(Effect.map(({ contextProvider, dynamicMiddlewares, middleware }) => ({
102
- _tag: "MiddlewareMaker",
103
- effect: makeRpcEffect()((schema, handler, moduleName) => {
104
- const h = middleware(schema, handler, moduleName);
105
- return requestMiddleware(Effect.fnUntraced(function* (req, headers) {
106
- yield* Effect.annotateCurrentSpan("request.name", moduleName ? `${moduleName}.${req._tag}` : req._tag);
107
- // the contextProvider is an Effect that builds the context for the request
108
- return yield* contextProvider.pipe(Effect.flatMap((contextProviderContext) =>
109
- // the dynamicMiddlewares is an Effect that builds the dynamiuc context for the request
110
- dynamicMiddlewares(schema.config ?? {}, headers).pipe(Effect.flatMap((dynamicContext) => h(req, headers).pipe(Effect.provide(dynamicContext))), Effect.provide(contextProviderContext))));
111
- }), moduleName);
112
- })
113
- }))));
114
- const middlewareLayer = l
115
- .pipe(Layer.provide(Layer.mergeAll(make.dependencies ? make.dependencies : Layer.empty, ...dynamicMiddlewares.dependencies, make.contextProvider.Default)));
116
- return Object.assign(MiddlewareMaker, { Default: middlewareLayer });
117
- };
118
- // it just provides the right types without cluttering the implementation with them
119
- function makeRpcEffect() {
120
- return (cb) => cb;
121
- }
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHluYW1pY01pZGRsZXdhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JvdXRpbmcvRHluYW1pY01pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNERBQTREO0FBQzVELHdEQUF3RDtBQUN4RCx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXNCLFdBQVcsRUFBRSxJQUFJLEVBQW9DLE1BQU0sWUFBWSxDQUFBO0FBRTFJLE9BQU8sRUFBRSxXQUFXLEVBQW1CLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFakYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRXpDLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRTdDLE9BQU8sRUFBNEIsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFxSXRHLGlFQUFpRTtBQUNqRSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQWlCbkMsR0FBRyxJQU1GLEVBWUQsRUFBRSxDQUFDLENBQUM7SUFDSixZQUFZLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBUTtJQUMvQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDMUIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN0QyxPQUFPLE1BQU07YUFDVixHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ1osTUFBTSxRQUFRLEdBQUksTUFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FB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
@@ -1,24 +0,0 @@
1
- import { Context, Effect, type Layer, Option, type S } from "effect-app";
2
- import { type GetEffectContext, type RPCContextMap } from "effect-app/client";
3
- import { type Tag } from "effect-app/Context";
4
- export type ContextWithLayer<Config, Id, Service, E, R, MakeE, MakeR, Tag extends string, Args extends [config: Config, headers: Record<string, string>], Dependencies extends any[]> = Context.Tag<Id, {
5
- handle: (...args: Args) => Effect<Option<Context<Service>>, E, R>;
6
- _tag: Tag;
7
- }> & {
8
- Default: Layer.Layer<Id, MakeE, MakeR>;
9
- dependsOn?: Dependencies;
10
- };
11
- export type AnyContextWithLayer<Config, Service, Error> = ContextWithLayer<Config, any, Service, Error, any, any, any, string, any, any> | ContextWithLayer<Config, any, Service, Error, never, any, never, any, any, any> | ContextWithLayer<Config, any, Service, Error, any, any, never, any, any, any> | ContextWithLayer<Config, any, Service, Error, never, any, any, any, any, any>;
12
- export declare const mergeContexts: <T extends readonly {
13
- maker: any;
14
- handle: Effect<Context<any>>;
15
- }[]>(makers: T) => Effect.Effect<Context.Context<Effect.Effect.Success<T[number]["handle"]>>, never, never>;
16
- export declare const mergeOptionContexts: <T extends readonly {
17
- maker: any;
18
- handle: Effect<Option<Context<any>>>;
19
- }[]>(makers: T) => Effect.Effect<Context.Context<never>, never, never>;
20
- export declare const implementMiddleware: <T extends Record<string, RPCContextMap.Any>>() => <TI extends { [K in keyof T]: AnyContextWithLayer<{ [K_1 in keyof T]?: T[K_1]["contextActivation"]; }, T[K]["service"], S.Schema.Type<T[K]["error"]>>; }>(implementations: TI) => {
21
- dependencies: { [K in keyof TI]: TI[K]["Default"]; }[keyof TI][];
22
- effect: Effect.Effect<(config: { [K in keyof T]?: T[K]["contextActivation"]; }, headers: Record<string, string>) => Effect.Effect<Context.Context<GetEffectContext<T, typeof config>>, Effect.Error<ReturnType<Tag.Service<TI[keyof TI]>["handle"]>>, Effect.Context<ReturnType<Tag.Service<TI[keyof TI]>["handle"]>>>, unknown, unknown>;
23
- };
24
- //# sourceMappingURL=dynamic-middleware.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dynamic-middleware.d.ts","sourceRoot":"","sources":["../../../src/api/routing/dynamic-middleware.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { Array, Context, Effect, Option } from "effect-app";
3
- import { typedValuesOf } from "effect-app/utils";
4
- import { InfraLogger } from "../../logger.js";
5
- import { sort } from "./tsort.js";
6
- export const mergeContexts = Effect.fnUntraced(function* (makers) {
7
- let context = Context.empty();
8
- for (const mw of makers) {
9
- yield* InfraLogger.logDebug("Building context for middleware", mw.maker.key ?? mw.maker);
10
- const moreContext = yield* mw.handle.pipe(Effect.provide(context));
11
- yield* InfraLogger.logDebug("Built context for middleware", mw.maker.key ?? mw.maker, moreContext.toJSON().services);
12
- context = Context.merge(context, moreContext);
13
- }
14
- return context;
15
- });
16
- export const mergeOptionContexts = Effect.fnUntraced(function* (makers) {
17
- let context = Context.empty();
18
- for (const mw of makers) {
19
- yield* InfraLogger.logDebug("Building context for middleware", mw.maker.key ?? mw.maker);
20
- const moreContext = yield* mw.handle.pipe(Effect.provide(context));
21
- yield* InfraLogger.logDebug("Built context for middleware", mw.maker.key ?? mw.maker, Option.map(moreContext, (c) => c.toJSON().services));
22
- if (moreContext.value) {
23
- context = Context.merge(context, moreContext.value);
24
- }
25
- }
26
- return context;
27
- });
28
- export const implementMiddleware = () => (implementations) => ({
29
- dependencies: typedValuesOf(implementations).map((_) => _.Default),
30
- effect: Effect.gen(function* () {
31
- const sorted = sort(typedValuesOf(implementations));
32
- const makers = yield* Effect.all(sorted);
33
- return Effect.fnUntraced(function* (config, headers) {
34
- const ctx = yield* mergeOptionContexts(Array.map(makers, (_, i) => ({ maker: sorted[i], handle: _.handle(config, headers) })));
35
- return ctx;
36
- });
37
- })
38
- });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1taWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9yb3V0aW5nL2R5bmFtaWMtbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFjLE1BQU0sRUFBVSxNQUFNLFlBQVksQ0FBQTtBQUcvRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUE7QUF5RWpDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUM1QyxRQUFRLENBQUMsRUFBb0UsTUFBUztJQUNwRixJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDN0IsS0FBSyxNQUFNLEVBQUUsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGlDQUFpQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN4RixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFDbEUsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FDekIsOEJBQThCLEVBQzlCLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQ3ZCLFdBQW1CLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUN2QyxDQUFBO1FBQ0QsT0FBTyxHQUFHLE9BQU8sQ0FB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