@effect-app/infra 1.12.1 → 1.13.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.
- package/CHANGELOG.md +25 -0
- package/_cjs/api/routing/defaultErrorHandler.cjs +4 -2
- package/_cjs/api/routing/defaultErrorHandler.cjs.map +1 -1
- package/dist/api/routing/defaultErrorHandler.d.ts +4 -1
- package/dist/api/routing/defaultErrorHandler.d.ts.map +1 -1
- package/dist/api/routing/defaultErrorHandler.js +8 -3
- package/package.json +9 -9
- package/src/api/routing/defaultErrorHandler.ts +12 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# @effect-app/infra
|
|
2
2
|
|
|
3
|
+
## 1.13.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 24f0c0f: feat: allow custom errors per endpoint.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [24f0c0f]
|
|
12
|
+
- effect-app@1.11.0
|
|
13
|
+
- @effect-app/schema@1.8.0
|
|
14
|
+
- @effect-app/infra-adapters@1.8.3
|
|
15
|
+
|
|
16
|
+
## 1.12.2
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- 0b399ce: update packages
|
|
21
|
+
- Updated dependencies [1ac74ec]
|
|
22
|
+
- Updated dependencies [0b399ce]
|
|
23
|
+
- effect-app@1.10.2
|
|
24
|
+
- @effect-app/infra-adapters@1.8.2
|
|
25
|
+
- @effect-app/schema@1.7.1
|
|
26
|
+
- @effect-app/core@1.7.1
|
|
27
|
+
|
|
3
28
|
## 1.12.1
|
|
4
29
|
|
|
5
30
|
### Patch Changes
|
|
@@ -21,7 +21,7 @@ function defaultBasicErrorHandler(_req, res, r2) {
|
|
|
21
21
|
.catchAll(err => _effectApp.Effect.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err).pipe(_effectApp.Effect.map(() => err), _effectApp.Effect.flatMap(_effectApp.Effect.die))));
|
|
22
22
|
}
|
|
23
23
|
const optimisticConcurrencySchedule = _effectApp.Schedule.once && _effectApp.Schedule.recurWhile(a => a._tag === "OptimisticConcurrencyException");
|
|
24
|
-
function defaultErrorHandler(req, res, r2) {
|
|
24
|
+
function defaultErrorHandler(req, res, r2, customErrorSchema) {
|
|
25
25
|
const r3 = req.method === "PATCH" ? _effectApp.Effect.retry(r2, optimisticConcurrencySchedule) : r2;
|
|
26
26
|
const sendError = (code, schema) => body => _effectApp.S.encode(schema)(body).pipe(_effectApp.Effect.orDie, _effectApp.Effect.andThen(body => res.pipe((0, _HttpServerResponse.setStatus)(code), (0, _HttpServerResponse.setBody)(_http.HttpBody.unsafeJson(body)))));
|
|
27
27
|
return r3.pipe(_effectApp.Effect.tapErrorCause(cause => _effectApp.Cause.isFailure(cause) ? logRequestError(cause) : _effectApp.Effect.void), _effectApp.Effect.tapErrorCause(cause => _effectApp.Effect.annotateCurrentSpan({
|
|
@@ -52,7 +52,9 @@ function defaultErrorHandler(req, res, r2) {
|
|
|
52
52
|
"ServiceUnavailableError": sendError(503, _errors.ServiceUnavailableError),
|
|
53
53
|
// 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
|
|
54
54
|
"OptimisticConcurrencyException": sendError(412, _errors.OptimisticConcurrencyException)
|
|
55
|
-
}), _effectApp.Effect
|
|
55
|
+
}), customErrorSchema ? _effectApp.Effect.catchAll(x => _effectApp.S.is(customErrorSchema)(x)
|
|
56
|
+
// TODO: customize error code
|
|
57
|
+
? sendError(422, customErrorSchema)(x) : _effectApp.Effect.fail(x)) : x => x, _effectApp.Effect
|
|
56
58
|
// final catch all; expecting never so that unhandled known errors will show up
|
|
57
59
|
.catchAll(err => _effectApp.Effect.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err).pipe(_effectApp.Effect.map(() => err), _effectApp.Effect.flatMap(_effectApp.Effect.die))));
|
|
58
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultErrorHandler.cjs","names":["_errorReporter","require","_HttpServerResponse","_effectApp","_errors","_http","JWTError","Data","TaggedClass","exports","logRequestError","logError","defaultBasicErrorHandler","_req","res","r2","sendError","code","body","Effect","sync","setBody","HttpBody","unsafeJson","pipe","setStatus","tapErrorCause","cause","Cause","isFailure","void","catchTag","err","errors","catchAll","map","flatMap","die","optimisticConcurrencySchedule","Schedule","once","recurWhile","a","_tag","defaultErrorHandler","req","r3","method","retry","schema","S","encode","orDie","andThen","annotateCurrentSpan","pretty","squashWith","_","catchTags","succeed","HttpServerResponse","message","error","status","headers","HttpHeaders","fromInput","ValidationError","NotFoundError","NotLoggedInError","UnauthorizedError","InvalidStateError","ServiceUnavailableError","OptimisticConcurrencyException"],"sources":["../../../src/api/routing/defaultErrorHandler.ts"],"sourcesContent":[null],"mappings":";;;;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAEA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAEA,IAAAG,OAAA,GAAAH,OAAA;AASA,IAAAI,KAAA,GAAAJ,OAAA;AAQM,MAAOK,QAAS,SAAQC,eAAI,CAACC,WAAW,CAAC,UAAU,CAMvD;AAAGC,OAAA,CAAAH,QAAA,GAAAA,QAAA;AAEL,MAAMI,eAAe,GAAG,IAAAC,uBAAQ,EAAC,SAAS,CAAC;AAErC,SAAUC,wBAAwBA,CACtCC,IAAyC,EACzCC,GAA0C,EAC1CC,EAAqE;EAErE,MAAMC,SAAS,GAAIC,IAAY,IAAMC,IAAa,IAChDC,iBAAM,CAACC,IAAI,CAAC,MAAM,IAAAC,2BAAO,EAACP,GAAG,EAAEQ,cAAQ,CAACC,UAAU,CAACL,IAAI,CAAC,CAAC,CAACM,IAAI,CAAC,IAAAC,6BAAS,EAACR,IAAI,CAAC,CAAC,CAAC;EAClF,OAAOF,EAAE,CAACS,IAAI,CACZL,iBAAM,CAACO,aAAa,CAAEC,KAAK,IAAKC,gBAAK,CAACC,SAAS,CAACF,KAAK,CAAC,GAAGjB,eAAe,CAACiB,KAAK,CAAC,GAAGR,iBAAM,CAACW,IAAI,CAAC,EAC9FX,iBAAM,CAACY,QAAQ,CAAC,iBAAiB,EAAGC,GAAG,IAAKhB,SAAS,CAAC,GAAG,CAAC,CAACgB,GAAG,CAACC,MAAM,CAAC,CAAC,EACvEd;EACE;EAAA,CACCe,QAAQ,CAAEF,GAAU,IACnBb,iBAAM,CACHR,QAAQ,CACP,gGAAgG,GAAGqB,GAAG,CACvG,CACAR,IAAI,CACHL,iBAAM,CAACgB,GAAG,CAAC,MAAMH,GAAc,CAAC,EAChCb,iBAAM,CAACiB,OAAO,CAACjB,iBAAM,CAACkB,GAAG,CAAC,CAC3B,CACJ,CACJ;AACH;AAEA,MAAMC,6BAA6B,GAAGC,mBAAQ,CAACC,IAAI,IAC9CD,mBAAQ,CAACE,UAAU,
|
|
1
|
+
{"version":3,"file":"defaultErrorHandler.cjs","names":["_errorReporter","require","_HttpServerResponse","_effectApp","_errors","_http","JWTError","Data","TaggedClass","exports","logRequestError","logError","defaultBasicErrorHandler","_req","res","r2","sendError","code","body","Effect","sync","setBody","HttpBody","unsafeJson","pipe","setStatus","tapErrorCause","cause","Cause","isFailure","void","catchTag","err","errors","catchAll","map","flatMap","die","optimisticConcurrencySchedule","Schedule","once","recurWhile","a","_tag","defaultErrorHandler","req","customErrorSchema","r3","method","retry","schema","S","encode","orDie","andThen","annotateCurrentSpan","pretty","squashWith","_","catchTags","succeed","HttpServerResponse","message","error","status","headers","HttpHeaders","fromInput","ValidationError","NotFoundError","NotLoggedInError","UnauthorizedError","InvalidStateError","ServiceUnavailableError","OptimisticConcurrencyException","x","is","fail"],"sources":["../../../src/api/routing/defaultErrorHandler.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Schema } from "@effect-app/schema";
|
|
1
2
|
import { Effect } from "effect-app";
|
|
2
3
|
import type { SupportedErrors } from "effect-app/client/errors";
|
|
3
4
|
import { ValidationError } from "effect-app/client/errors";
|
|
@@ -11,6 +12,8 @@ export declare class JWTError extends JWTError_base<{
|
|
|
11
12
|
}> {
|
|
12
13
|
}
|
|
13
14
|
export declare function defaultBasicErrorHandler<R>(_req: HttpServerRequest.HttpServerRequest, res: HttpServerResponse.HttpServerResponse, r2: Effect<HttpServerResponse.HttpServerResponse, ValidationError, R>): Effect.Effect<HttpServerResponse.HttpServerResponse, never, R>;
|
|
14
|
-
export declare function defaultErrorHandler<R
|
|
15
|
+
export declare function defaultErrorHandler<R, A extends {
|
|
16
|
+
_tag: string;
|
|
17
|
+
} = never>(req: HttpServerRequest.HttpServerRequest, res: HttpServerResponse.HttpServerResponse, r2: Effect<HttpServerResponse.HttpServerResponse, SupportedErrors | JWTError, R>, customErrorSchema?: Schema<A, unknown>): Effect.Effect<HttpServerResponse.HttpServerResponse, never, R>;
|
|
15
18
|
export {};
|
|
16
19
|
//# sourceMappingURL=defaultErrorHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultErrorHandler.d.ts","sourceRoot":"","sources":["../../../src/api/routing/defaultErrorHandler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"defaultErrorHandler.d.ts","sourceRoot":"","sources":["../../../src/api/routing/defaultErrorHandler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,EAAe,MAAM,EAAe,MAAM,YAAY,CAAA;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,EAOL,eAAe,EAChB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAyB,KAAK,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACnG,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,IAAI,oBAAoB,EAC1C,MAAM,2BAA2B,CAAA;;;;AAElC,qBAAa,QAAS,SAAQ,cAA6B;IACzD,KAAK,EACD,sBAAsB,GACtB,mBAAmB,GACnB,iBAAiB,GACjB,oBAAoB,CAAA;CACzB,CAAC;CAAG;AAIL,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,IAAI,EAAE,iBAAiB,CAAC,iBAAiB,EACzC,GAAG,EAAE,kBAAkB,CAAC,kBAAkB,EAC1C,EAAE,EAAE,MAAM,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,eAAe,EAAE,CAAC,CAAC,kEAoBtE;AAKD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,EACvE,GAAG,EAAE,iBAAiB,CAAC,iBAAiB,EACxC,GAAG,EAAE,kBAAkB,CAAC,kBAAkB,EAC1C,EAAE,EAAE,MAAM,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,eAAe,GAAG,QAAQ,EAAE,CAAC,CAAC,EAChF,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,kEA0EvC"}
|
|
@@ -16,7 +16,7 @@ export function defaultBasicErrorHandler(_req, res, r2) {
|
|
|
16
16
|
}
|
|
17
17
|
const optimisticConcurrencySchedule = Schedule.once
|
|
18
18
|
&& Schedule.recurWhile((a) => a._tag === "OptimisticConcurrencyException");
|
|
19
|
-
export function defaultErrorHandler(req, res, r2) {
|
|
19
|
+
export function defaultErrorHandler(req, res, r2, customErrorSchema) {
|
|
20
20
|
const r3 = req.method === "PATCH"
|
|
21
21
|
? Effect.retry(r2, optimisticConcurrencySchedule)
|
|
22
22
|
: r2;
|
|
@@ -53,10 +53,15 @@ export function defaultErrorHandler(req, res, r2) {
|
|
|
53
53
|
"ServiceUnavailableError": sendError(503, ServiceUnavailableError),
|
|
54
54
|
// 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
|
|
55
55
|
"OptimisticConcurrencyException": sendError(412, OptimisticConcurrencyException)
|
|
56
|
-
}),
|
|
56
|
+
}), customErrorSchema
|
|
57
|
+
? Effect.catchAll((x) => S.is(customErrorSchema)(x)
|
|
58
|
+
// TODO: customize error code
|
|
59
|
+
? sendError(422, customErrorSchema)(x)
|
|
60
|
+
: Effect.fail(x))
|
|
61
|
+
: (x) => x, Effect
|
|
57
62
|
// final catch all; expecting never so that unhandled known errors will show up
|
|
58
63
|
.catchAll((err) => Effect
|
|
59
64
|
.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err)
|
|
60
65
|
.pipe(Effect.map(() => err), Effect.flatMap(Effect.die))));
|
|
61
66
|
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcm91dGluZy9kZWZhdWx0RXJyb3JIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUUxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBQ3hFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRTdELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGdCQUFnQixFQUNoQiw4QkFBOEIsRUFDOUIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixlQUFlLEVBQ2hCLE1BQU0sMEJBQTBCLENBQUE7QUFDakMsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQTBCLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFRbkcsTUFBTSxPQUFPLFFBQVMsU0FBUSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FNdkQ7Q0FBRztBQUVMLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUUzQyxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLElBQXlDLEVBQ3pDLEdBQTBDLEVBQzFDLEVBQXFFO0lBRXJFLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQ3BELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbEYsT0FBTyxFQUFF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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.13.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -18,16 +18,16 @@
|
|
|
18
18
|
"proper-lockfile": "^4.1.2",
|
|
19
19
|
"pure-rand": "6.1.0",
|
|
20
20
|
"redlock": "^4.2.0",
|
|
21
|
-
"@effect-app/core": "1.7.
|
|
22
|
-
"@effect-app/infra-adapters": "1.8.
|
|
23
|
-
"effect-app": "1.
|
|
24
|
-
"@effect-app/schema": "1.
|
|
21
|
+
"@effect-app/core": "1.7.1",
|
|
22
|
+
"@effect-app/infra-adapters": "1.8.3",
|
|
23
|
+
"effect-app": "1.11.0",
|
|
24
|
+
"@effect-app/schema": "1.8.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@babel/cli": "^7.25.6",
|
|
28
28
|
"@sentry/node": "^8.28.0",
|
|
29
29
|
"@types/express": "^4.17.21",
|
|
30
|
-
"@types/node": "~22.5.
|
|
30
|
+
"@types/node": "~22.5.4",
|
|
31
31
|
"@types/proper-lockfile": "^4.1.4",
|
|
32
32
|
"@types/redis": "^2.8.32",
|
|
33
33
|
"@types/redlock": "^4.0.7",
|
|
@@ -42,9 +42,9 @@
|
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"express": "^4.19.2",
|
|
45
|
-
"@effect/platform": "^0.63.
|
|
46
|
-
"@effect/schema": "^0.72.
|
|
47
|
-
"effect": "^3.7.
|
|
45
|
+
"@effect/platform": "^0.63.3",
|
|
46
|
+
"@effect/schema": "^0.72.2",
|
|
47
|
+
"effect": "^3.7.2"
|
|
48
48
|
},
|
|
49
49
|
"typesVersions": {
|
|
50
50
|
"*": {
|
|
@@ -56,12 +56,13 @@ export function defaultBasicErrorHandler<R>(
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
const optimisticConcurrencySchedule = Schedule.once
|
|
59
|
-
&& Schedule.recurWhile<
|
|
59
|
+
&& Schedule.recurWhile<{ _tag: string }>((a) => a._tag === "OptimisticConcurrencyException")
|
|
60
60
|
|
|
61
|
-
export function defaultErrorHandler<R>(
|
|
61
|
+
export function defaultErrorHandler<R, A extends { _tag: string } = never>(
|
|
62
62
|
req: HttpServerRequest.HttpServerRequest,
|
|
63
63
|
res: HttpServerResponse.HttpServerResponse,
|
|
64
|
-
r2: Effect<HttpServerResponse.HttpServerResponse, SupportedErrors | JWTError, R
|
|
64
|
+
r2: Effect<HttpServerResponse.HttpServerResponse, SupportedErrors | JWTError, R>,
|
|
65
|
+
customErrorSchema?: Schema<A, unknown>
|
|
65
66
|
) {
|
|
66
67
|
const r3 = req.method === "PATCH"
|
|
67
68
|
? Effect.retry(r2, optimisticConcurrencySchedule)
|
|
@@ -114,6 +115,14 @@ export function defaultErrorHandler<R>(
|
|
|
114
115
|
// 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
|
|
115
116
|
"OptimisticConcurrencyException": sendError(412, OptimisticConcurrencyException)
|
|
116
117
|
}),
|
|
118
|
+
customErrorSchema
|
|
119
|
+
? Effect.catchAll((x) =>
|
|
120
|
+
S.is(customErrorSchema)(x)
|
|
121
|
+
// TODO: customize error code
|
|
122
|
+
? sendError(422, customErrorSchema)(x)
|
|
123
|
+
: Effect.fail(x)
|
|
124
|
+
)
|
|
125
|
+
: (x) => x,
|
|
117
126
|
Effect
|
|
118
127
|
// final catch all; expecting never so that unhandled known errors will show up
|
|
119
128
|
.catchAll((err: never) =>
|