@effect-app/infra 0.154.7 → 0.155.1
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 +24 -0
- package/_cjs/api/routing/defaultErrorHandler.cjs +9 -7
- package/_cjs/api/routing/defaultErrorHandler.cjs.map +1 -1
- package/_src/api/routing/defaultErrorHandler.ts +26 -9
- package/dist/api/routing/defaultErrorHandler.d.ts +3 -1
- package/dist/api/routing/defaultErrorHandler.d.ts.map +1 -1
- package/dist/api/routing/defaultErrorHandler.js +10 -8
- package/package.json +8 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# @effect-app/infra
|
|
2
2
|
|
|
3
|
+
## 0.155.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [c80a6bb]
|
|
8
|
+
- @effect-app/prelude@0.132.1
|
|
9
|
+
- @effect-app/infra-adapters@0.105.1
|
|
10
|
+
|
|
11
|
+
## 0.155.0
|
|
12
|
+
|
|
13
|
+
### Minor Changes
|
|
14
|
+
|
|
15
|
+
- 99f79ab: update packages
|
|
16
|
+
- cd25b5f: improve: typed error handling
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- Updated dependencies [99f79ab]
|
|
21
|
+
- Updated dependencies [cd25b5f]
|
|
22
|
+
- @effect-app/infra-adapters@0.105.0
|
|
23
|
+
- @effect-app/prelude@0.132.0
|
|
24
|
+
- @effect-app/schema@0.170.0
|
|
25
|
+
- @effect-app/core@0.116.0
|
|
26
|
+
|
|
3
27
|
## 0.154.7
|
|
4
28
|
|
|
5
29
|
### Patch Changes
|
|
@@ -12,7 +12,9 @@ var tsplus_module_3 = _interopRequireWildcard(require("@effect/platform/Http/Ser
|
|
|
12
12
|
var tsplus_module_4 = _interopRequireWildcard(require("effect/Effect"));
|
|
13
13
|
var tsplus_module_5 = _interopRequireWildcard(require("effect/Cause"));
|
|
14
14
|
var tsplus_module_6 = _interopRequireWildcard(require("effect/Schedule"));
|
|
15
|
+
var tsplus_module_7 = _interopRequireWildcard(require("@effect/schema/Parser"));
|
|
15
16
|
var _errorReporter = require("@effect-app/infra/errorReporter");
|
|
17
|
+
var _errors = require("@effect-app/prelude/client/errors");
|
|
16
18
|
var _http = require("../http.cjs");
|
|
17
19
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
18
20
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
@@ -28,7 +30,7 @@ function defaultBasicErrorHandler(_req, res, r2) {
|
|
|
28
30
|
const optimisticConcurrencySchedule = tsplus_module_6.once && tsplus_module_6.recurWhile(a => a._tag === "OptimisticConcurrencyException");
|
|
29
31
|
function defaultErrorHandler(req, res, r2) {
|
|
30
32
|
const r3 = req.method === "PATCH" ? tsplus_module_4.retry(r2, optimisticConcurrencySchedule) : r2;
|
|
31
|
-
const sendError = code => body => tsplus_module_4.
|
|
33
|
+
const sendError = (code, schema) => body => tsplus_module_4.andThen(tsplus_module_4.orDie(tsplus_module_7.encode(schema)(body)), body => tsplus_module_3.setBody(tsplus_module_3.setStatus(code)(res), tsplus_module_2.unsafeJson(body)));
|
|
32
34
|
return tsplus_module_4.catchAll(tsplus_module_4.catchTags(tsplus_module_4.tapErrorCause(r3, cause => tsplus_module_5.isFailure(cause) ? logRequestError(cause) : tsplus_module_4.unit), {
|
|
33
35
|
"JWTError": err => tsplus_module_4.succeed(tsplus_module_3.unsafeJson({
|
|
34
36
|
message: err.error.message
|
|
@@ -36,13 +38,13 @@ function defaultErrorHandler(req, res, r2) {
|
|
|
36
38
|
status: err.error.status,
|
|
37
39
|
headers: _http.HttpHeaders.fromInput(err.error.headers)
|
|
38
40
|
})),
|
|
39
|
-
"ValidationError":
|
|
40
|
-
"NotFoundError": sendError(404),
|
|
41
|
-
"NotLoggedInError": sendError(401),
|
|
42
|
-
"UnauthorizedError": sendError(403),
|
|
43
|
-
"InvalidStateError": sendError(422),
|
|
41
|
+
"ValidationError": sendError(400, _errors.ValidationError),
|
|
42
|
+
"NotFoundError": sendError(404, _errors.NotFoundError),
|
|
43
|
+
"NotLoggedInError": sendError(401, _errors.NotLoggedInError),
|
|
44
|
+
"UnauthorizedError": sendError(403, _errors.UnauthorizedError),
|
|
45
|
+
"InvalidStateError": sendError(422, _errors.InvalidStateError),
|
|
44
46
|
// 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
|
|
45
|
-
"OptimisticConcurrencyException": sendError(412)
|
|
47
|
+
"OptimisticConcurrencyException": sendError(412, _errors.OptimisticConcurrencyException)
|
|
46
48
|
})
|
|
47
49
|
// final catch all; expecting never so that unhandled known errors will show up
|
|
48
50
|
, err => tsplus_module_4.flatMap(tsplus_module_4.map(tsplus_module_4.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err), () => err), tsplus_module_4.die));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultErrorHandler.cjs","names":["_errorReporter","require","_http","_getRequireWildcardCache","e","WeakMap","r","t","_interopRequireWildcard","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","JWTError","tsplus_module_1","TaggedClass","exports","logRequestError","logError","defaultBasicErrorHandler","_req","res","r2","sendError","code","body","tsplus_module_4","sync","tsplus_module_3","setStatus","setBody","tsplus_module_2","unsafeJson","catchAll","catchTag","tapErrorCause","cause","tsplus_module_5","isFailure","unit","err","errors","flatMap","map","die","optimisticConcurrencySchedule","tsplus_module_6","once","recurWhile","_tag","defaultErrorHandler","req","r3","method","retry","catchTags","succeed","message","error","status","headers","HttpHeaders","fromInput"],"sources":["../../../_src/api/routing/defaultErrorHandler.ts"],"sourcesContent":[null],"mappings":"
|
|
1
|
+
{"version":3,"file":"defaultErrorHandler.cjs","names":["_errorReporter","require","_errors","_http","_getRequireWildcardCache","e","WeakMap","r","t","_interopRequireWildcard","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","JWTError","tsplus_module_1","TaggedClass","exports","logRequestError","logError","defaultBasicErrorHandler","_req","res","r2","sendError","code","body","tsplus_module_4","sync","tsplus_module_3","setStatus","setBody","tsplus_module_2","unsafeJson","catchAll","catchTag","tapErrorCause","cause","tsplus_module_5","isFailure","unit","err","errors","flatMap","map","die","optimisticConcurrencySchedule","tsplus_module_6","once","recurWhile","_tag","defaultErrorHandler","req","r3","method","retry","schema","andThen","orDie","tsplus_module_7","encode","catchTags","succeed","message","error","status","headers","HttpHeaders","fromInput","ValidationError","NotFoundError","NotLoggedInError","UnauthorizedError","InvalidStateError","OptimisticConcurrencyException"],"sources":["../../../_src/api/routing/defaultErrorHandler.ts"],"sourcesContent":[null],"mappings":"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"}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { logError } from "@effect-app/infra/errorReporter"
|
|
2
|
-
import type { SupportedErrors
|
|
2
|
+
import type { SupportedErrors } from "@effect-app/prelude/client/errors"
|
|
3
|
+
import {
|
|
4
|
+
InvalidStateError,
|
|
5
|
+
NotFoundError,
|
|
6
|
+
NotLoggedInError,
|
|
7
|
+
OptimisticConcurrencyException,
|
|
8
|
+
UnauthorizedError,
|
|
9
|
+
ValidationError
|
|
10
|
+
} from "@effect-app/prelude/client/errors"
|
|
3
11
|
import { HttpBody, HttpHeaders, type HttpServerRequest, type HttpServerResponse } from "../http.js"
|
|
4
12
|
|
|
5
13
|
import type {
|
|
@@ -24,7 +32,8 @@ export function defaultBasicErrorHandler<R>(
|
|
|
24
32
|
res: HttpServerResponse,
|
|
25
33
|
r2: Effect<R, ValidationError, HttpServerResponse>
|
|
26
34
|
) {
|
|
27
|
-
const sendError = (code: number) => (body: unknown) =>
|
|
35
|
+
const sendError = (code: number) => (body: unknown) =>
|
|
36
|
+
Effect.sync(() => res.setBody(HttpBody.unsafeJson(body)).setStatus(code))
|
|
28
37
|
return r2
|
|
29
38
|
.tapErrorCause((cause) => cause.isFailure() ? logRequestError(cause) : Effect.unit)
|
|
30
39
|
.catchTag("ValidationError", (err) => sendError(400)(err.errors))
|
|
@@ -50,7 +59,15 @@ export function defaultErrorHandler<R>(
|
|
|
50
59
|
const r3 = req.method === "PATCH"
|
|
51
60
|
? r2.retry(optimisticConcurrencySchedule)
|
|
52
61
|
: r2
|
|
53
|
-
const sendError = (code: number
|
|
62
|
+
const sendError = <R, From, To>(code: number, schema: Schema<R, From, To>) => (body: To) =>
|
|
63
|
+
schema
|
|
64
|
+
.encode(body)
|
|
65
|
+
.orDie
|
|
66
|
+
.andThen((body) =>
|
|
67
|
+
res
|
|
68
|
+
.setStatus(code)
|
|
69
|
+
.setBody(HttpBody.unsafeJson(body))
|
|
70
|
+
)
|
|
54
71
|
return r3
|
|
55
72
|
.tapErrorCause((cause) => cause.isFailure() ? logRequestError(cause) : Effect.unit)
|
|
56
73
|
.catchTags({
|
|
@@ -63,13 +80,13 @@ export function defaultErrorHandler<R>(
|
|
|
63
80
|
headers: HttpHeaders.fromInput(err.error.headers)
|
|
64
81
|
})
|
|
65
82
|
),
|
|
66
|
-
"ValidationError":
|
|
67
|
-
"NotFoundError": sendError(404),
|
|
68
|
-
"NotLoggedInError": sendError(401),
|
|
69
|
-
"UnauthorizedError": sendError(403),
|
|
70
|
-
"InvalidStateError": sendError(422),
|
|
83
|
+
"ValidationError": sendError(400, ValidationError),
|
|
84
|
+
"NotFoundError": sendError(404, NotFoundError),
|
|
85
|
+
"NotLoggedInError": sendError(401, NotLoggedInError),
|
|
86
|
+
"UnauthorizedError": sendError(403, UnauthorizedError),
|
|
87
|
+
"InvalidStateError": sendError(422, InvalidStateError),
|
|
71
88
|
// 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
|
|
72
|
-
"OptimisticConcurrencyException": sendError(412)
|
|
89
|
+
"OptimisticConcurrencyException": sendError(412, OptimisticConcurrencyException)
|
|
73
90
|
})
|
|
74
91
|
// final catch all; expecting never so that unhandled known errors will show up
|
|
75
92
|
.catchAll((err: never) =>
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Data } from "effect/Data";
|
|
2
2
|
import { Effect } from "effect/Effect";
|
|
3
|
-
import
|
|
3
|
+
import { Schema } from "@effect-app/prelude/schema";
|
|
4
|
+
import type { SupportedErrors } from "@effect-app/prelude/client/errors";
|
|
5
|
+
import { ValidationError } from "@effect-app/prelude/client/errors";
|
|
4
6
|
import { type HttpServerRequest, type HttpServerResponse } from "../http.js";
|
|
5
7
|
import type { InsufficientScopeError, InvalidRequestError, InvalidTokenError, UnauthorizedError as JWTUnauthorizedError } from "express-oauth2-jwt-bearer";
|
|
6
8
|
declare const JWTError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<Omit<A, keyof import("effect/Equal").Equal>, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" | keyof import("effect/Equal").Equal ? never : P]: A[P]; }) => import("effect/Data").Data<Readonly<A> & {
|
|
@@ -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,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACxE,OAAO,EAML,eAAe,EAChB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAyB,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEnG,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,EACvB,GAAG,EAAE,kBAAkB,EACvB,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,EAAE,kBAAkB,CAAC,gEAgBnD;AAKD,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,GAAG,EAAE,iBAAiB,EACtB,GAAG,EAAE,kBAAkB,EACvB,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,GAAG,QAAQ,EAAE,kBAAkB,CAAC,gEA2C9D"}
|
|
@@ -4,7 +4,9 @@ import * as tsplus_module_3 from "@effect/platform/Http/ServerResponse";
|
|
|
4
4
|
import * as tsplus_module_4 from "effect/Effect";
|
|
5
5
|
import * as tsplus_module_5 from "effect/Cause";
|
|
6
6
|
import * as tsplus_module_6 from "effect/Schedule";
|
|
7
|
+
import * as tsplus_module_7 from "@effect/schema/Parser";
|
|
7
8
|
import { logError } from "@effect-app/infra/errorReporter";
|
|
9
|
+
import { InvalidStateError, NotFoundError, NotLoggedInError, OptimisticConcurrencyException, UnauthorizedError, ValidationError } from "@effect-app/prelude/client/errors";
|
|
8
10
|
import { HttpHeaders } from "../http.js";
|
|
9
11
|
export class JWTError extends tsplus_module_1.TaggedClass("JWTError") {
|
|
10
12
|
}
|
|
@@ -20,7 +22,7 @@ export function defaultErrorHandler(req, res, r2) {
|
|
|
20
22
|
const r3 = req.method === "PATCH"
|
|
21
23
|
? tsplus_module_4.retry(r2, optimisticConcurrencySchedule)
|
|
22
24
|
: r2;
|
|
23
|
-
const sendError = (code) => (body) => tsplus_module_4.
|
|
25
|
+
const sendError = (code, schema) => (body) => tsplus_module_4.andThen(tsplus_module_4.orDie(tsplus_module_7.encode(schema)(body)), (body) => tsplus_module_3.setBody(tsplus_module_3.setStatus(code)(res), tsplus_module_2.unsafeJson(body)));
|
|
24
26
|
return tsplus_module_4.catchAll(tsplus_module_4.catchTags(tsplus_module_4.tapErrorCause(r3, (cause) => tsplus_module_5.isFailure(cause) ? logRequestError(cause) : tsplus_module_4.unit), {
|
|
25
27
|
"JWTError": (err) => tsplus_module_4.succeed(tsplus_module_3.unsafeJson({ message: err.error.message }, {
|
|
26
28
|
status: err
|
|
@@ -28,15 +30,15 @@ export function defaultErrorHandler(req, res, r2) {
|
|
|
28
30
|
.status,
|
|
29
31
|
headers: HttpHeaders.fromInput(err.error.headers)
|
|
30
32
|
})),
|
|
31
|
-
"ValidationError":
|
|
32
|
-
"NotFoundError": sendError(404),
|
|
33
|
-
"NotLoggedInError": sendError(401),
|
|
34
|
-
"UnauthorizedError": sendError(403),
|
|
35
|
-
"InvalidStateError": sendError(422),
|
|
33
|
+
"ValidationError": sendError(400, ValidationError),
|
|
34
|
+
"NotFoundError": sendError(404, NotFoundError),
|
|
35
|
+
"NotLoggedInError": sendError(401, NotLoggedInError),
|
|
36
|
+
"UnauthorizedError": sendError(403, UnauthorizedError),
|
|
37
|
+
"InvalidStateError": sendError(422, InvalidStateError),
|
|
36
38
|
// 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
|
|
37
|
-
"OptimisticConcurrencyException": sendError(412)
|
|
39
|
+
"OptimisticConcurrencyException": sendError(412, OptimisticConcurrencyException)
|
|
38
40
|
})
|
|
39
41
|
// final catch all; expecting never so that unhandled known errors will show up
|
|
40
42
|
, (err) => tsplus_module_4.flatMap(tsplus_module_4.map(tsplus_module_4.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err), () => err), tsplus_module_4.die));
|
|
41
43
|
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvYXBpL3JvdXRpbmcvZGVmYXVsdEVycm9ySGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBRTFELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGdCQUFnQixFQUNoQiw4QkFBOEIsRUFDOUIsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDaEIsTUFBTSxtQ0FBbUMsQ0FBQTtBQUMxQyxPQUFPLEVBQVksV0FBVyxFQUFtRCxNQUFNLFlBQVksQ0FBQTtBQVNuRyxNQUFNLE9BQU8sUUFBUyxTQUFRLDRCQUFpQixVQUFVLENBTXZEO0NBQUc7QUFFTCxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUE7QUFFM0MsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxJQUF1QixFQUN2QixHQUF1QixFQUN2QixFQUFrRDtJQUVsRCxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUNwRCxxQkFBWSxHQUFHLEVBQUUsQ0FBQywwQkFBaUQsSUFBSSxFQUFyRCx3QkFBQSxHQUFHLEVBQVMsMkJBQW9CLElBQUksQ0FBQyxDQUFDLENBQWdCLENBQUMsQ0FBQTtJQUMzRSxPQUFPLHlCQUFBLHlCQUFBLDhCQUFBLEVBQUUsRUFDUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsMEJBQUEsS0FBSyxDQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFZLENBQUMsRUFDekUsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakUsK0VBQStFO01BQ3JFLENBQUMsR0FBVSxFQUFFLEVBQUUsQ0FDdkIsd0JBQUEsb0JBQUEseUJBRUksZ0dBQWdHLEdBQUcsR0FBRyxDQUN2RyxFQUNJLEdBQUcsRUFBRSxDQUFDLEdBQWMsQ0FBQyxzQkFDTixDQUN2QixDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sNkJBQTZCLEdBQUcsd0JBQ2pDLDJCQUFnRCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxnQ0FBZ0MsQ0FBQyxDQUFBO0FBRXhHLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsR0FBc0IsRUFDdEIsR0FBdUIsRUFDdkIsRUFBNkQ7SUFFN0QsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sS0FBSyxPQUFPO1FBQy9CLENBQUMsQ0FBQyxzQkFBQSxFQUFFLEVBQU8sNkJBQTZCLENBQUM7UUFDekMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNOLE1BQU0sU0FBUyxHQUFHLENBQWMsSUFBWSxFQUFFLE1BQTJCLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBUSxFQUFFLEVBQUUsQ0FDekYsOENBQUEsdUJBQUEsTUFBTSxFQUNJLElBQUksQ0FBQyxHQUVKLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDaEIsd0JBQUEsMEJBQ2EsSUFBSSxFQURqQixHQUFHLENBQ2UsRUFDUCwyQkFBb0IsSUFBSSxDQUFDLENBQUMsQ0FDdEMsQ0FBQTtJQUNMLE9BQU8seUJBQUEsMEJBQUEsOEJBQUEsRUFBRSxFQUNRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQywwQkFBQSxLQUFLLENBQVksQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMscUJBQVksQ0FBQyxFQUN4RTtRQUNULFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ2xCLHdCQUNFLDJCQUE4QixFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzVELE1BQU0sRUFBRSxHQUFHO2lCQUNSLEtBQUs7aUJBQ0wsTUFBTTtZQUNULE9BQU8sRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1NBQ2xELENBQUMsQ0FDSDtRQUNILGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDO1FBQ2xELGVBQWUsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQztRQUM5QyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDO1FBQ3BELG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUM7UUFDdEQsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQztRQUN0RCw0SUFBNEk7UUFDNUksZ0NBQWdDLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSw4QkFBOEIsQ0FBQztLQUNqRixDQUFDO0lBQ0YsK0VBQStFO01BQ3JFLENBQUMsR0FBVSxFQUFFLEVBQUUsQ0FDdkIsd0JBQUEsb0JBQUEseUJBRUksZ0dBQWdHLEdBQUcsR0FBRyxDQUN2RyxFQUNJLEdBQUcsRUFBRSxDQUFDLEdBQWMsQ0FBQyxzQkFDTixDQUN2QixDQUFBO0FBQ0wsQ0FBQyJ9
|
package/package.json
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.155.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@azure/cosmos": "^4.0.0",
|
|
8
8
|
"@azure/service-bus": "^7.9.3",
|
|
9
|
-
"@effect/platform": "^0.43.
|
|
10
|
-
"@effect/schema": "npm:@effect-app/schema-fork@0.0.0-
|
|
9
|
+
"@effect/platform": "^0.43.4",
|
|
10
|
+
"@effect/schema": "npm:@effect-app/schema-fork@0.0.0-20240129113320",
|
|
11
11
|
"express-oauth2-jwt-bearer": "^1.6.0",
|
|
12
12
|
"@faker-js/faker": "^8.4.0",
|
|
13
13
|
"@sendgrid/helpers": "^8.0.0",
|
|
14
14
|
"@sendgrid/mail": "^8.1.0",
|
|
15
15
|
"change-case": "^5.4.2",
|
|
16
16
|
"cross-fetch": "^4.0.0",
|
|
17
|
-
"effect": "^2.2.
|
|
17
|
+
"effect": "^2.2.3",
|
|
18
18
|
"fast-check": "~3.15.0",
|
|
19
19
|
"object-hash": "^3.0.0",
|
|
20
20
|
"path-parser": "^6.1.0",
|
|
21
21
|
"proper-lockfile": "^4.1.2",
|
|
22
22
|
"pure-rand": "6.0.4",
|
|
23
23
|
"redlock": "^4.2.0",
|
|
24
|
-
"@effect-app/
|
|
25
|
-
"@effect-app/infra-adapters": "0.
|
|
26
|
-
"@effect-app/schema": "0.
|
|
27
|
-
"@effect-app/
|
|
24
|
+
"@effect-app/core": "0.116.0",
|
|
25
|
+
"@effect-app/infra-adapters": "0.105.1",
|
|
26
|
+
"@effect-app/schema": "0.170.0",
|
|
27
|
+
"@effect-app/prelude": "0.132.1"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@babel/cli": "^7.23.9",
|