@effect-app/infra 3.0.29 → 3.0.30
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/CHANGELOG.md +6 -0
- package/dist/api/routing/middleware/middleware.d.ts +2 -2
- package/dist/api/routing/middleware/middleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/middleware.js +10 -8
- package/package.json +1 -1
- package/src/api/routing/middleware/middleware.ts +71 -68
- package/test/dist/fixtures.d.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Layer } from "effect";
|
|
2
2
|
import { ConfigureInterruptibilityMiddleware, DevMode, DevModeMiddleware, LoggerMiddleware, RequestCacheMiddleware } from "effect-app/middleware";
|
|
3
|
+
export declare const DevModeLive: Layer.Layer<DevMode, import("effect/ConfigError").ConfigError, never>;
|
|
3
4
|
export declare const RequestCacheLayers: Layer.Layer<never, never, never>;
|
|
4
5
|
export declare const RequestCacheMiddlewareLive: Layer.Layer<RequestCacheMiddleware, never, never>;
|
|
5
6
|
export declare const ConfigureInterruptibilityMiddlewareLive: Layer.Layer<ConfigureInterruptibilityMiddleware, never, never>;
|
|
6
|
-
export declare const LoggerMiddlewareLive: Layer.Layer<LoggerMiddleware,
|
|
7
|
-
export declare const DevModeLive: Layer.Layer<DevMode, import("effect/ConfigError").ConfigError, never>;
|
|
7
|
+
export declare const LoggerMiddlewareLive: Layer.Layer<LoggerMiddleware, import("effect/ConfigError").ConfigError, never>;
|
|
8
8
|
export declare const DevModeMiddlewareLive: Layer.Layer<DevModeMiddleware, import("effect/ConfigError").ConfigError, never>;
|
|
9
9
|
export declare const DefaultGenericMiddlewaresLive: Layer.Layer<RequestCacheMiddleware | ConfigureInterruptibilityMiddleware | LoggerMiddleware | DevModeMiddleware, import("effect/ConfigError").ConfigError, never>;
|
|
10
10
|
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/routing/middleware/middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAmC,KAAK,EAA+C,MAAM,QAAQ,CAAA;AAC5G,OAAO,EAAE,mCAAmC,EAAE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/routing/middleware/middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAmC,KAAK,EAA+C,MAAM,QAAQ,CAAA;AAC5G,OAAO,EAAE,mCAAmC,EAAE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAUjJ,eAAO,MAAM,WAAW,uEAMvB,CAAA;AAED,eAAO,MAAM,kBAAkB,kCAM9B,CAAA;AAED,eAAO,MAAM,0BAA0B,mDAGtC,CAAA;AAOD,eAAO,MAAM,uCAAuC,gEAqBnD,CAAA;AAED,eAAO,MAAM,oBAAoB,gFA6DE,CAAA;AAEnC,eAAO,MAAM,qBAAqB,iFAQC,CAAA;AAEnC,eAAO,MAAM,6BAA6B,mKAKzC,CAAA"}
|
|
@@ -7,6 +7,11 @@ import { InfraLogger } from "../../../logger.js";
|
|
|
7
7
|
import { determineMethod, isCommand } from "../utils.js";
|
|
8
8
|
const logRequestError = logError("Request");
|
|
9
9
|
const reportRequestError = reportError("Request");
|
|
10
|
+
// TODO: do we need this as middleware or just as layer?
|
|
11
|
+
export const DevModeLive = Layer.effect(DevMode, Effect.gen(function* () {
|
|
12
|
+
const env = yield* Config.string("env").pipe(Config.withDefault("local-dev"));
|
|
13
|
+
return env !== "prod";
|
|
14
|
+
}));
|
|
10
15
|
export const RequestCacheLayers = Layer.mergeAll(Layer.setRequestCache(Request.makeCache({ capacity: 500, timeToLive: Duration.hours(8) })), Layer.setRequestCaching(true), Layer.setRequestBatching(true));
|
|
11
16
|
export const RequestCacheMiddlewareLive = Layer.succeed(RequestCacheMiddleware, (effect) => effect.pipe(Effect.provide(RequestCacheLayers)));
|
|
12
17
|
// retry just once on optimistic concurrency exceptions
|
|
@@ -29,7 +34,8 @@ export const ConfigureInterruptibilityMiddlewareLive = Layer.effect(ConfigureInt
|
|
|
29
34
|
return effect;
|
|
30
35
|
};
|
|
31
36
|
}));
|
|
32
|
-
export const LoggerMiddlewareLive = Layer
|
|
37
|
+
export const LoggerMiddlewareLive = Layer
|
|
38
|
+
.effect(LoggerMiddleware, Effect.gen(function* () {
|
|
33
39
|
const devMode = yield* DevMode;
|
|
34
40
|
return (effect, { headers, payload, rpc }) => Effect
|
|
35
41
|
.annotateCurrentSpan({
|
|
@@ -78,12 +84,8 @@ export const LoggerMiddlewareLive = Layer.effect(LoggerMiddleware, Effect.gen(fu
|
|
|
78
84
|
// )
|
|
79
85
|
}))
|
|
80
86
|
])), devMode ? (_) => _ : Effect.catchAllDefect(() => Effect.die("Internal Server Error")));
|
|
81
|
-
}))
|
|
82
|
-
|
|
83
|
-
export const DevModeLive = Layer.effect(DevMode, Effect.gen(function* () {
|
|
84
|
-
const env = yield* Config.string("env").pipe(Config.withDefault("local-dev"));
|
|
85
|
-
return env !== "prod";
|
|
86
|
-
}));
|
|
87
|
+
}))
|
|
88
|
+
.pipe(Layer.provide(DevModeLive));
|
|
87
89
|
export const DevModeMiddlewareLive = Layer
|
|
88
90
|
.effect(DevModeMiddleware, Effect.gen(function* () {
|
|
89
91
|
const devMode = yield* DevMode;
|
|
@@ -91,4 +93,4 @@ export const DevModeMiddlewareLive = Layer
|
|
|
91
93
|
}))
|
|
92
94
|
.pipe(Layer.provide(DevModeLive));
|
|
93
95
|
export const DefaultGenericMiddlewaresLive = Layer.mergeAll(RequestCacheMiddlewareLive, ConfigureInterruptibilityMiddlewareLive, LoggerMiddlewareLive, DevModeMiddlewareLive);
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvcm91dGluZy9taWRkbGV3YXJlL21pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFlLE1BQU0sUUFBUSxDQUFBO0FBQzVHLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUNqSixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFeEQsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBQzNDLE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBRWpELHdEQUF3RDtBQUN4RCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FDckMsT0FBTyxFQUNQLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO0lBQ2xCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtJQUM3RSxPQUFPLEdBQUcsS0FBSyxNQUFNLENBQUE7QUFD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
|
package/package.json
CHANGED
|
@@ -9,6 +9,15 @@ import { determineMethod, isCommand } from "../utils.js"
|
|
|
9
9
|
const logRequestError = logError("Request")
|
|
10
10
|
const reportRequestError = reportError("Request")
|
|
11
11
|
|
|
12
|
+
// TODO: do we need this as middleware or just as layer?
|
|
13
|
+
export const DevModeLive = Layer.effect(
|
|
14
|
+
DevMode,
|
|
15
|
+
Effect.gen(function*() {
|
|
16
|
+
const env = yield* Config.string("env").pipe(Config.withDefault("local-dev"))
|
|
17
|
+
return env !== "prod"
|
|
18
|
+
})
|
|
19
|
+
)
|
|
20
|
+
|
|
12
21
|
export const RequestCacheLayers = Layer.mergeAll(
|
|
13
22
|
Layer.setRequestCache(
|
|
14
23
|
Request.makeCache({ capacity: 500, timeToLive: Duration.hours(8) })
|
|
@@ -50,75 +59,69 @@ export const ConfigureInterruptibilityMiddlewareLive = Layer.effect(
|
|
|
50
59
|
})
|
|
51
60
|
)
|
|
52
61
|
|
|
53
|
-
export const LoggerMiddlewareLive = Layer
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
prev[key]
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
?
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
Effect
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
)
|
|
62
|
+
export const LoggerMiddlewareLive = Layer
|
|
63
|
+
.effect(
|
|
64
|
+
LoggerMiddleware,
|
|
65
|
+
Effect.gen(function*() {
|
|
66
|
+
const devMode = yield* DevMode
|
|
67
|
+
return (effect, { headers, payload, rpc }) =>
|
|
68
|
+
Effect
|
|
69
|
+
.annotateCurrentSpan({
|
|
70
|
+
"request.name": rpc._tag,
|
|
71
|
+
"requestInput": typeof payload === "object" && payload !== null
|
|
72
|
+
? Object.entries(payload).reduce((prev, [key, value]: [string, unknown]) => {
|
|
73
|
+
prev[key] = key === "password"
|
|
74
|
+
? "<redacted>"
|
|
75
|
+
: typeof value === "string" || typeof value === "number" || typeof value === "boolean"
|
|
76
|
+
? typeof value === "string" && value.length > 256
|
|
77
|
+
? (value.substring(0, 253) + "...")
|
|
78
|
+
: value
|
|
79
|
+
: Array.isArray(value)
|
|
80
|
+
? `Array[${value.length}]`
|
|
81
|
+
: value === null || value === undefined
|
|
82
|
+
? `${value}`
|
|
83
|
+
: typeof value === "object" && value
|
|
84
|
+
? `Object[${Object.keys(value).length}]`
|
|
85
|
+
: typeof value
|
|
86
|
+
return prev
|
|
87
|
+
}, {} as Record<string, string | number | boolean>)
|
|
88
|
+
: payload
|
|
89
|
+
})
|
|
90
|
+
.pipe(
|
|
91
|
+
// can't use andThen due to some being a function and effect
|
|
92
|
+
Effect.zipRight(effect),
|
|
93
|
+
// TODO: support ParseResult if the error channel of the request allows it.. but who would want that?
|
|
94
|
+
Effect.catchAll((_) => ParseResult.isParseError(_) ? Effect.die(_) : Effect.fail(_)),
|
|
95
|
+
Effect.tapErrorCause((cause) => Cause.isFailure(cause) ? logRequestError(cause) : Effect.void),
|
|
96
|
+
Effect.tapDefect((cause) =>
|
|
97
|
+
Effect
|
|
98
|
+
.all([
|
|
99
|
+
reportRequestError(cause, {
|
|
100
|
+
action: rpc._tag
|
|
101
|
+
}),
|
|
102
|
+
InfraLogger
|
|
103
|
+
.logError("Finished request", cause)
|
|
104
|
+
.pipe(Effect.annotateLogs({
|
|
105
|
+
action: rpc._tag,
|
|
106
|
+
req: pretty(payload),
|
|
107
|
+
headers: pretty(headers)
|
|
108
|
+
// resHeaders: pretty(
|
|
109
|
+
// Object
|
|
110
|
+
// .entries(headers)
|
|
111
|
+
// .reduce((prev, [key, value]) => {
|
|
112
|
+
// prev[key] = value && typeof value === "string" ? snipString(value) : value
|
|
113
|
+
// return prev
|
|
114
|
+
// }, {} as Record<string, any>)
|
|
115
|
+
// )
|
|
116
|
+
}))
|
|
117
|
+
])
|
|
118
|
+
),
|
|
119
|
+
devMode ? (_) => _ : Effect.catchAllDefect(() => Effect.die("Internal Server Error"))
|
|
120
|
+
)
|
|
121
|
+
})
|
|
122
|
+
)
|
|
123
|
+
.pipe(Layer.provide(DevModeLive))
|
|
113
124
|
|
|
114
|
-
// TODO: do we need this as middleware or just as layer?
|
|
115
|
-
export const DevModeLive = Layer.effect(
|
|
116
|
-
DevMode,
|
|
117
|
-
Effect.gen(function*() {
|
|
118
|
-
const env = yield* Config.string("env").pipe(Config.withDefault("local-dev"))
|
|
119
|
-
return env !== "prod"
|
|
120
|
-
})
|
|
121
|
-
)
|
|
122
125
|
export const DevModeMiddlewareLive = Layer
|
|
123
126
|
.effect(
|
|
124
127
|
DevModeMiddleware,
|
package/test/dist/fixtures.d.ts
CHANGED
|
@@ -63,7 +63,7 @@ declare const SomeElse_base: (abstract new (service: {
|
|
|
63
63
|
} & {
|
|
64
64
|
use: <X>(body: (_: {
|
|
65
65
|
b: number;
|
|
66
|
-
}) => X) => X extends Effect.Effect<infer A, infer E_1, infer R_3> ? Effect.Effect<A, E_1,
|
|
66
|
+
}) => X) => X extends Effect.Effect<infer A, infer E_1, infer R_3> ? Effect.Effect<A, E_1, R_3 | SomeElse> : Effect.Effect<X, never, SomeElse>;
|
|
67
67
|
};
|
|
68
68
|
export declare class SomeElse extends SomeElse_base {
|
|
69
69
|
}
|