@effect-app/infra 4.0.0-beta.22 → 4.0.0-beta.221
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 +1648 -0
- package/_check.sh +1 -1
- package/dist/CUPS.d.ts +12 -7
- package/dist/CUPS.d.ts.map +1 -1
- package/dist/CUPS.js +16 -12
- package/dist/Emailer/Sendgrid.d.ts +15 -15
- package/dist/Emailer/Sendgrid.d.ts.map +1 -1
- package/dist/Emailer/Sendgrid.js +20 -16
- package/dist/Emailer/fake.d.ts +1 -1
- package/dist/Emailer/fake.js +2 -2
- package/dist/Emailer/service.d.ts +13 -4
- package/dist/Emailer/service.d.ts.map +1 -1
- package/dist/Emailer/service.js +4 -3
- package/dist/Emailer.d.ts +1 -1
- package/dist/MainFiberSet.d.ts +12 -9
- package/dist/MainFiberSet.d.ts.map +1 -1
- package/dist/MainFiberSet.js +7 -3
- package/dist/Model/Repository/Registry.d.ts +21 -0
- package/dist/Model/Repository/Registry.d.ts.map +1 -0
- package/dist/Model/Repository/Registry.js +18 -0
- package/dist/Model/Repository/ext.d.ts +35 -16
- package/dist/Model/Repository/ext.d.ts.map +1 -1
- package/dist/Model/Repository/ext.js +60 -3
- package/dist/Model/Repository/internal/internal.d.ts +9 -6
- package/dist/Model/Repository/internal/internal.d.ts.map +1 -1
- package/dist/Model/Repository/internal/internal.js +115 -51
- package/dist/Model/Repository/legacy.d.ts +4 -2
- package/dist/Model/Repository/legacy.d.ts.map +1 -1
- package/dist/Model/Repository/makeRepo.d.ts +10 -6
- package/dist/Model/Repository/makeRepo.d.ts.map +1 -1
- package/dist/Model/Repository/makeRepo.js +5 -2
- package/dist/Model/Repository/service.d.ts +32 -24
- package/dist/Model/Repository/service.d.ts.map +1 -1
- package/dist/Model/Repository/validation.d.ts +47 -18
- package/dist/Model/Repository/validation.d.ts.map +1 -1
- package/dist/Model/Repository/validation.js +6 -6
- package/dist/Model/Repository.d.ts +2 -1
- package/dist/Model/Repository.d.ts.map +1 -1
- package/dist/Model/Repository.js +2 -1
- package/dist/Model/dsl.d.ts +6 -5
- package/dist/Model/dsl.d.ts.map +1 -1
- package/dist/Model/dsl.js +2 -3
- package/dist/Model/filter/filterApi.d.ts +5 -5
- package/dist/Model/filter/filterApi.d.ts.map +1 -1
- package/dist/Model/filter/types/errors.d.ts +1 -1
- package/dist/Model/filter/types/fields.d.ts +1 -1
- package/dist/Model/filter/types/path/common.d.ts +1 -1
- package/dist/Model/filter/types/path/eager.d.ts +1 -1
- package/dist/Model/filter/types/path/eager.d.ts.map +1 -1
- package/dist/Model/filter/types/path/eager.js +1 -1
- package/dist/Model/filter/types/path/index.d.ts +1 -1
- package/dist/Model/filter/types/utils.d.ts +1 -1
- package/dist/Model/filter/types/validator.d.ts +1 -1
- package/dist/Model/filter/types.d.ts +1 -1
- package/dist/Model/query/dsl.d.ts +142 -17
- package/dist/Model/query/dsl.d.ts.map +1 -1
- package/dist/Model/query/dsl.js +190 -5
- package/dist/Model/query/new-kid-interpreter.d.ts +77 -8
- package/dist/Model/query/new-kid-interpreter.d.ts.map +1 -1
- package/dist/Model/query/new-kid-interpreter.js +127 -6
- package/dist/Model/query.d.ts +1 -1
- package/dist/Model.d.ts +2 -1
- package/dist/Model.d.ts.map +1 -1
- package/dist/Model.js +2 -1
- package/dist/QueueMaker/SQLQueue.d.ts +7 -8
- package/dist/QueueMaker/SQLQueue.d.ts.map +1 -1
- package/dist/QueueMaker/SQLQueue.js +135 -117
- package/dist/QueueMaker/errors.d.ts +5 -3
- package/dist/QueueMaker/errors.d.ts.map +1 -1
- package/dist/QueueMaker/errors.js +4 -2
- package/dist/QueueMaker/memQueue.d.ts +9 -5
- package/dist/QueueMaker/memQueue.d.ts.map +1 -1
- package/dist/QueueMaker/memQueue.js +81 -65
- package/dist/QueueMaker/sbqueue.d.ts +8 -4
- package/dist/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/QueueMaker/sbqueue.js +57 -55
- package/dist/QueueMaker/service.d.ts +4 -2
- package/dist/QueueMaker/service.d.ts.map +1 -1
- package/dist/QueueMaker/service.js +1 -1
- package/dist/RequestContext.d.ts +75 -35
- package/dist/RequestContext.d.ts.map +1 -1
- package/dist/RequestContext.js +14 -14
- package/dist/RequestFiberSet.d.ts +10 -7
- package/dist/RequestFiberSet.d.ts.map +1 -1
- package/dist/RequestFiberSet.js +8 -3
- package/dist/Store/ContextMapContainer.d.ts +22 -3
- package/dist/Store/ContextMapContainer.d.ts.map +1 -1
- package/dist/Store/ContextMapContainer.js +17 -3
- package/dist/Store/Cosmos/query.d.ts +7 -2
- package/dist/Store/Cosmos/query.d.ts.map +1 -1
- package/dist/Store/Cosmos/query.js +115 -35
- package/dist/Store/Cosmos.d.ts +2 -2
- package/dist/Store/Cosmos.d.ts.map +1 -1
- package/dist/Store/Cosmos.js +343 -244
- package/dist/Store/Disk.d.ts +3 -3
- package/dist/Store/Disk.d.ts.map +1 -1
- package/dist/Store/Disk.js +76 -36
- package/dist/Store/Memory.d.ts +7 -4
- package/dist/Store/Memory.d.ts.map +1 -1
- package/dist/Store/Memory.js +251 -58
- package/dist/Store/SQL/Pg.d.ts +4 -0
- package/dist/Store/SQL/Pg.d.ts.map +1 -0
- package/dist/Store/SQL/Pg.js +233 -0
- package/dist/Store/SQL/query.d.ts +43 -0
- package/dist/Store/SQL/query.d.ts.map +1 -0
- package/dist/Store/SQL/query.js +478 -0
- package/dist/Store/SQL.d.ts +21 -0
- package/dist/Store/SQL.d.ts.map +1 -0
- package/dist/Store/SQL.js +450 -0
- package/dist/Store/codeFilter.d.ts +2 -2
- package/dist/Store/codeFilter.d.ts.map +1 -1
- package/dist/Store/codeFilter.js +6 -3
- package/dist/Store/index.d.ts +6 -3
- package/dist/Store/index.d.ts.map +1 -1
- package/dist/Store/index.js +18 -4
- package/dist/Store/service.d.ts +26 -8
- package/dist/Store/service.d.ts.map +1 -1
- package/dist/Store/service.js +25 -6
- package/dist/Store/utils.d.ts +3 -2
- package/dist/Store/utils.d.ts.map +1 -1
- package/dist/Store/utils.js +5 -5
- package/dist/Store.d.ts +1 -1
- package/dist/adapters/SQL/Model.d.ts +32 -43
- package/dist/adapters/SQL/Model.d.ts.map +1 -1
- package/dist/adapters/SQL/Model.js +30 -39
- package/dist/adapters/SQL.d.ts +1 -1
- package/dist/adapters/ServiceBus.d.ts +14 -11
- package/dist/adapters/ServiceBus.d.ts.map +1 -1
- package/dist/adapters/ServiceBus.js +30 -21
- package/dist/adapters/cosmos-client.d.ts +5 -3
- package/dist/adapters/cosmos-client.d.ts.map +1 -1
- package/dist/adapters/cosmos-client.js +5 -3
- package/dist/adapters/index.d.ts +8 -2
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +8 -2
- package/dist/adapters/logger.d.ts +2 -2
- package/dist/adapters/logger.d.ts.map +1 -1
- package/dist/adapters/memQueue.d.ts +5 -3
- package/dist/adapters/memQueue.d.ts.map +1 -1
- package/dist/adapters/memQueue.js +6 -5
- package/dist/adapters/mongo-client.d.ts +4 -3
- package/dist/adapters/mongo-client.d.ts.map +1 -1
- package/dist/adapters/mongo-client.js +5 -3
- package/dist/adapters/redis-client.d.ts +6 -3
- package/dist/adapters/redis-client.d.ts.map +1 -1
- package/dist/adapters/redis-client.js +7 -3
- package/dist/api/ContextProvider.d.ts +12 -8
- package/dist/api/ContextProvider.d.ts.map +1 -1
- package/dist/api/ContextProvider.js +9 -7
- package/dist/api/codec.d.ts +1 -1
- package/dist/api/internal/RequestContextMiddleware.d.ts +3 -3
- package/dist/api/internal/RequestContextMiddleware.d.ts.map +1 -1
- package/dist/api/internal/RequestContextMiddleware.js +10 -6
- package/dist/api/internal/auth.d.ts +45 -7
- package/dist/api/internal/auth.d.ts.map +1 -1
- package/dist/api/internal/auth.js +162 -29
- package/dist/api/internal/events.d.ts +6 -4
- package/dist/api/internal/events.d.ts.map +1 -1
- package/dist/api/internal/events.js +16 -9
- package/dist/api/internal/health.d.ts +1 -1
- package/dist/api/layerUtils.d.ts +10 -6
- package/dist/api/layerUtils.d.ts.map +1 -1
- package/dist/api/layerUtils.js +7 -6
- package/dist/api/middlewares.d.ts +1 -1
- package/dist/api/reportError.d.ts +2 -2
- package/dist/api/reportError.d.ts.map +1 -1
- package/dist/api/reportError.js +3 -2
- package/dist/api/routing/middleware/RouterMiddleware.d.ts +5 -4
- package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/middleware.d.ts +42 -3
- package/dist/api/routing/middleware/middleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/middleware.js +53 -17
- package/dist/api/routing/middleware.d.ts +1 -2
- package/dist/api/routing/middleware.d.ts.map +1 -1
- package/dist/api/routing/middleware.js +1 -2
- package/dist/api/routing/schema/jwt.d.ts +1 -1
- package/dist/api/routing/schema/jwt.d.ts.map +1 -1
- package/dist/api/routing/schema/jwt.js +3 -2
- package/dist/api/routing/tsort.d.ts +1 -1
- package/dist/api/routing/tsort.d.ts.map +1 -1
- package/dist/api/routing/utils.d.ts +4 -4
- package/dist/api/routing/utils.d.ts.map +1 -1
- package/dist/api/routing/utils.js +3 -2
- package/dist/api/routing.d.ts +84 -37
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +115 -45
- package/dist/api/setupRequest.d.ts +10 -6
- package/dist/api/setupRequest.d.ts.map +1 -1
- package/dist/api/setupRequest.js +15 -7
- package/dist/api/util.d.ts +1 -1
- package/dist/arbs.d.ts +2 -2
- package/dist/arbs.d.ts.map +1 -1
- package/dist/arbs.js +5 -3
- package/dist/errorReporter.d.ts +7 -5
- package/dist/errorReporter.d.ts.map +1 -1
- package/dist/errorReporter.js +22 -26
- package/dist/errors.d.ts +1 -1
- package/dist/fileUtil.d.ts +2 -2
- package/dist/fileUtil.d.ts.map +1 -1
- package/dist/fileUtil.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/logger/jsonLogger.d.ts +2 -2
- package/dist/logger/jsonLogger.d.ts.map +1 -1
- package/dist/logger/jsonLogger.js +4 -2
- package/dist/logger/logFmtLogger.d.ts +2 -2
- package/dist/logger/logFmtLogger.d.ts.map +1 -1
- package/dist/logger/logFmtLogger.js +2 -2
- package/dist/logger/shared.d.ts +2 -2
- package/dist/logger/shared.d.ts.map +1 -1
- package/dist/logger/shared.js +3 -3
- package/dist/logger.d.ts +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/otel.d.ts +75 -0
- package/dist/otel.d.ts.map +1 -0
- package/dist/otel.js +65 -0
- package/dist/rateLimit.d.ts +12 -4
- package/dist/rateLimit.d.ts.map +1 -1
- package/dist/rateLimit.js +7 -12
- package/dist/test.d.ts +3 -3
- package/dist/test.d.ts.map +1 -1
- package/dist/test.js +2 -2
- package/dist/vitest.d.ts +1 -1
- package/examples/query.ts +46 -38
- package/package.json +46 -37
- package/src/CUPS.ts +15 -11
- package/src/Emailer/Sendgrid.ts +21 -15
- package/src/Emailer/fake.ts +1 -1
- package/src/Emailer/service.ts +13 -3
- package/src/MainFiberSet.ts +9 -6
- package/src/Model/Repository/Registry.ts +34 -0
- package/src/Model/Repository/ext.ts +103 -11
- package/src/Model/Repository/internal/internal.ts +231 -149
- package/src/Model/Repository/legacy.ts +3 -1
- package/src/Model/Repository/makeRepo.ts +15 -10
- package/src/Model/Repository/service.ts +35 -23
- package/src/Model/Repository/validation.ts +5 -5
- package/src/Model/Repository.ts +1 -0
- package/src/Model/dsl.ts +5 -4
- package/src/Model/filter/types/path/eager.ts +1 -2
- package/src/Model/query/dsl.ts +353 -19
- package/src/Model/query/new-kid-interpreter.ts +211 -6
- package/src/Model.ts +1 -0
- package/src/QueueMaker/SQLQueue.ts +150 -153
- package/src/QueueMaker/errors.ts +3 -1
- package/src/QueueMaker/memQueue.ts +111 -105
- package/src/QueueMaker/sbqueue.ts +76 -88
- package/src/QueueMaker/service.ts +3 -1
- package/src/RequestContext.ts +15 -16
- package/src/RequestFiberSet.ts +8 -2
- package/src/Store/ContextMapContainer.ts +45 -2
- package/src/Store/Cosmos/query.ts +143 -44
- package/src/Store/Cosmos.ts +491 -350
- package/src/Store/Disk.ts +106 -66
- package/src/Store/Memory.ts +285 -87
- package/src/Store/SQL/Pg.ts +364 -0
- package/src/Store/SQL/query.ts +540 -0
- package/src/Store/SQL.ts +736 -0
- package/src/Store/codeFilter.ts +5 -2
- package/src/Store/index.ts +20 -3
- package/src/Store/service.ts +45 -10
- package/src/Store/utils.ts +25 -23
- package/src/adapters/SQL/Model.ts +42 -41
- package/src/adapters/ServiceBus.ts +131 -121
- package/src/adapters/cosmos-client.ts +4 -2
- package/src/adapters/index.ts +7 -0
- package/src/adapters/memQueue.ts +5 -4
- package/src/adapters/mongo-client.ts +4 -2
- package/src/adapters/redis-client.ts +6 -2
- package/src/api/ContextProvider.ts +17 -13
- package/src/api/internal/RequestContextMiddleware.ts +16 -5
- package/src/api/internal/auth.ts +248 -44
- package/src/api/internal/events.ts +19 -10
- package/src/api/layerUtils.ts +12 -8
- package/src/api/reportError.ts +2 -1
- package/src/api/routing/middleware/RouterMiddleware.ts +5 -4
- package/src/api/routing/middleware/middleware.ts +60 -15
- package/src/api/routing/middleware.ts +0 -2
- package/src/api/routing/schema/jwt.ts +2 -1
- package/src/api/routing/utils.ts +2 -1
- package/src/api/routing.ts +304 -131
- package/src/api/setupRequest.ts +31 -8
- package/src/arbs.ts +5 -3
- package/src/errorReporter.ts +65 -75
- package/src/fileUtil.ts +1 -1
- package/src/logger/jsonLogger.ts +3 -1
- package/src/logger/logFmtLogger.ts +1 -1
- package/src/logger/shared.ts +3 -2
- package/src/otel.ts +152 -0
- package/src/rateLimit.ts +34 -23
- package/src/test.ts +2 -2
- package/test/auth.test.ts +101 -0
- package/test/contextProvider.test.ts +14 -11
- package/test/controller.test.ts +25 -29
- package/test/dist/auth.test.d.ts.map +1 -0
- package/test/dist/contextProvider.test.d.ts.map +1 -1
- package/test/dist/controller.test.d.ts.map +1 -1
- package/test/dist/date-query.test.d.ts.map +1 -0
- package/test/dist/fixtures.d.ts +30 -12
- package/test/dist/fixtures.d.ts.map +1 -1
- package/test/dist/fixtures.js +17 -10
- package/test/dist/query.test.d.ts.map +1 -1
- package/test/dist/rawQuery.test.d.ts.map +1 -1
- package/test/dist/repository-ext.test.d.ts.map +1 -0
- package/test/dist/requires.test.d.ts.map +1 -1
- package/test/dist/router-generator.test.d.ts.map +1 -0
- package/test/dist/routing-interruptibility.test.d.ts.map +1 -0
- package/test/dist/rpc-e2e-invalidation.test.d.ts.map +1 -0
- package/test/dist/rpc-multi-middleware.test.d.ts.map +1 -1
- package/test/dist/rpc-stream-fullstack.test.d.ts.map +1 -0
- package/test/dist/sql-store.test.d.ts.map +1 -0
- package/test/fixtures.ts +16 -9
- package/test/layerUtils.test.ts +1 -1
- package/test/query.test.ts +819 -38
- package/test/rawQuery.test.ts +312 -20
- package/test/repository-ext.test.ts +62 -0
- package/test/requires.test.ts +10 -5
- package/test/router-generator.test.ts +187 -0
- package/test/routing-interruptibility.test.ts +66 -0
- package/test/rpc-e2e-invalidation.test.ts +256 -0
- package/test/rpc-multi-middleware.test.ts +84 -9
- package/test/rpc-stream-fullstack.test.ts +304 -0
- package/test/sql-store.test.ts +1592 -0
- package/test/validateSample.test.ts +17 -12
- package/tsconfig.examples.json +1 -1
- package/tsconfig.json +0 -1
- package/tsconfig.json.bak +2 -2
- package/tsconfig.src.json +35 -35
- package/tsconfig.test.json +2 -2
- package/dist/Operations.d.ts +0 -55
- package/dist/Operations.d.ts.map +0 -1
- package/dist/Operations.js +0 -102
- package/dist/OperationsRepo.d.ts +0 -41
- package/dist/OperationsRepo.d.ts.map +0 -1
- package/dist/OperationsRepo.js +0 -14
- package/eslint.config.mjs +0 -24
- package/src/Operations.ts +0 -235
- package/src/OperationsRepo.ts +0 -16
|
@@ -1,40 +1,173 @@
|
|
|
1
|
-
|
|
2
|
-
/* eslint-disable unused-imports/no-unused-vars */
|
|
3
|
-
import { Data, Effect } from "effect-app";
|
|
1
|
+
import * as Effect from "effect-app/Effect";
|
|
4
2
|
import { HttpHeaders, HttpMiddleware, HttpServerRequest, HttpServerResponse } from "effect-app/http";
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
3
|
+
import * as Option from "effect-app/Option";
|
|
4
|
+
import * as Data from "effect/Data";
|
|
5
|
+
import { createRemoteJWKSet, jwtVerify } from "jose";
|
|
6
|
+
const getHeaders = (error, description, scopes) => ({
|
|
7
|
+
"WWW-Authenticate": `Bearer realm="api", error="${error}", error_description="${description.replace(/"/g, "'")}"${scopes ? `, scope="${scopes.join(" ")}"` : ""}`
|
|
8
|
+
});
|
|
9
|
+
export class UnauthorizedError extends Error {
|
|
10
|
+
status = 401;
|
|
11
|
+
statusCode = 401;
|
|
12
|
+
headers = { "WWW-Authenticate": "Bearer realm=\"api\"" };
|
|
13
|
+
constructor(message = "Unauthorized") {
|
|
14
|
+
super(message);
|
|
15
|
+
this.name = this.constructor.name;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export class InvalidRequestError extends UnauthorizedError {
|
|
19
|
+
code;
|
|
20
|
+
status = 400;
|
|
21
|
+
statusCode = 400;
|
|
22
|
+
constructor(message = "Invalid Request", useErrorCode = true) {
|
|
23
|
+
super(message);
|
|
24
|
+
this.code = useErrorCode ? "invalid_request" : "";
|
|
25
|
+
if (useErrorCode) {
|
|
26
|
+
this.headers = getHeaders(this.code, this.message);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export class InvalidTokenError extends UnauthorizedError {
|
|
31
|
+
code = "invalid_token";
|
|
32
|
+
constructor(message = "Invalid Token") {
|
|
33
|
+
super(message);
|
|
34
|
+
this.headers = getHeaders(this.code, this.message);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export class InsufficientScopeError extends UnauthorizedError {
|
|
38
|
+
code = "insufficient_scope";
|
|
39
|
+
status = 403;
|
|
40
|
+
statusCode = 403;
|
|
41
|
+
constructor(scopes, message = "Insufficient Scope") {
|
|
42
|
+
super(message);
|
|
43
|
+
this.headers = getHeaders(this.code, this.message, scopes);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const isRecord = (value) => typeof value === "object" && value !== null;
|
|
47
|
+
const getErrorMessage = (error) => error instanceof Error ? error.message : String(error);
|
|
48
|
+
const normalizeAudience = (audience) => Array.isArray(audience) ? Array.from(audience) : audience;
|
|
49
|
+
const buildDiscoveryUrl = (issuerBaseURL) => {
|
|
50
|
+
const url = new URL(issuerBaseURL);
|
|
51
|
+
if (!url.pathname.includes("/.well-known/")) {
|
|
52
|
+
url.pathname = url.pathname.endsWith("/")
|
|
53
|
+
? `${url.pathname}.well-known/openid-configuration`
|
|
54
|
+
: `${url.pathname}/.well-known/openid-configuration`;
|
|
55
|
+
}
|
|
56
|
+
url.search = "";
|
|
57
|
+
url.hash = "";
|
|
58
|
+
return url;
|
|
59
|
+
};
|
|
60
|
+
const fetchDiscoveryDocumentPromise = async (issuerBaseURL) => {
|
|
61
|
+
const response = await fetch(buildDiscoveryUrl(issuerBaseURL));
|
|
62
|
+
if (!response.ok) {
|
|
63
|
+
throw new Error(`Failed to fetch authorization server metadata: ${response.status}`);
|
|
64
|
+
}
|
|
65
|
+
const json = await response.json();
|
|
66
|
+
if (!isRecord(json) || typeof json["issuer"] !== "string" || typeof json["jwks_uri"] !== "string") {
|
|
67
|
+
throw new Error("Invalid authorization server metadata");
|
|
68
|
+
}
|
|
69
|
+
return { issuer: json["issuer"], jwksUri: json["jwks_uri"] };
|
|
70
|
+
};
|
|
71
|
+
const getAuthorizationToken = (headers, authRequired) => {
|
|
72
|
+
const authorization = HttpHeaders.get(headers, "authorization");
|
|
73
|
+
if (Option.isNone(authorization)) {
|
|
74
|
+
return authRequired ? Effect.fail(new UnauthorizedError()) : Effect.succeed(Option.none());
|
|
75
|
+
}
|
|
76
|
+
const [scheme, token] = authorization.value.split(" ");
|
|
77
|
+
if (!scheme || !token || scheme.toLowerCase() !== "bearer") {
|
|
78
|
+
return Effect.fail(new InvalidRequestError("", false));
|
|
79
|
+
}
|
|
80
|
+
return Effect.succeed(Option.some(token));
|
|
81
|
+
};
|
|
82
|
+
const makeResolveConfig = (config) => {
|
|
83
|
+
let cached;
|
|
84
|
+
return Effect.tryPromise({
|
|
85
|
+
try: () => {
|
|
86
|
+
if (!cached) {
|
|
87
|
+
cached = (async () => {
|
|
88
|
+
const discovery = config.issuerBaseURL
|
|
89
|
+
? await fetchDiscoveryDocumentPromise(config.issuerBaseURL)
|
|
90
|
+
: undefined;
|
|
91
|
+
const issuer = config.issuer ?? discovery?.issuer;
|
|
92
|
+
const jwksUri = config.jwksUri ?? discovery?.jwksUri;
|
|
93
|
+
const secret = config.secret;
|
|
94
|
+
const base = {
|
|
95
|
+
audience: normalizeAudience(config.audience),
|
|
96
|
+
clockTolerance: config.clockTolerance ?? 5,
|
|
97
|
+
issuer,
|
|
98
|
+
maxTokenAge: config.maxTokenAge,
|
|
99
|
+
strict: config.strict ?? false,
|
|
100
|
+
tokenSigningAlg: config.tokenSigningAlg
|
|
101
|
+
};
|
|
102
|
+
if (!issuer && !secret) {
|
|
103
|
+
throw new InvalidRequestError("JWT config requires 'issuer', 'issuerBaseURL', or 'secret'");
|
|
104
|
+
}
|
|
105
|
+
if (!secret) {
|
|
106
|
+
if (!jwksUri) {
|
|
107
|
+
throw new InvalidRequestError("JWT config requires 'jwksUri', 'issuerBaseURL', or 'secret'");
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
...base,
|
|
111
|
+
key: createRemoteJWKSet(new URL(jwksUri)),
|
|
112
|
+
keyType: "jwks"
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
...base,
|
|
117
|
+
key: new TextEncoder().encode(secret),
|
|
118
|
+
keyType: "secret"
|
|
119
|
+
};
|
|
120
|
+
})();
|
|
27
121
|
}
|
|
122
|
+
return cached;
|
|
123
|
+
},
|
|
124
|
+
catch: (error) => error instanceof InvalidRequestError || error instanceof InvalidTokenError
|
|
125
|
+
? error
|
|
126
|
+
: new InvalidTokenError(getErrorMessage(error))
|
|
127
|
+
});
|
|
128
|
+
};
|
|
129
|
+
const verifyToken = (resolveConfig) => (token) => resolveConfig.pipe(Effect.flatMap((config) => {
|
|
130
|
+
const options = {
|
|
131
|
+
clockTolerance: config.clockTolerance,
|
|
132
|
+
...(config.tokenSigningAlg ? { algorithms: [config.tokenSigningAlg] } : {}),
|
|
133
|
+
...(config.audience !== undefined ? { audience: config.audience } : {}),
|
|
134
|
+
...(config.issuer !== undefined ? { issuer: config.issuer } : {}),
|
|
135
|
+
...(config.maxTokenAge !== undefined ? { maxTokenAge: config.maxTokenAge } : {})
|
|
136
|
+
};
|
|
137
|
+
const verified = config.keyType === "jwks"
|
|
138
|
+
? Effect.tryPromise({
|
|
139
|
+
try: () => jwtVerify(token, config.key, options).then(({ protectedHeader }) => ({ protectedHeader })),
|
|
140
|
+
catch: (error) => new InvalidTokenError(getErrorMessage(error))
|
|
141
|
+
})
|
|
142
|
+
: Effect.tryPromise({
|
|
143
|
+
try: () => jwtVerify(token, config.key, options).then(({ protectedHeader }) => ({ protectedHeader })),
|
|
144
|
+
catch: (error) => new InvalidTokenError(getErrorMessage(error))
|
|
28
145
|
});
|
|
146
|
+
return verified.pipe(Effect.flatMap(({ protectedHeader }) => {
|
|
147
|
+
const typ = protectedHeader.typ?.toLowerCase().replace(/^application\//, "");
|
|
148
|
+
return config.strict && typ !== "at+jwt"
|
|
149
|
+
? Effect.fail(new InvalidTokenError("Unexpected 'typ' value"))
|
|
150
|
+
: Effect.void;
|
|
151
|
+
}));
|
|
152
|
+
}));
|
|
153
|
+
export const checkJWTI = (config) => {
|
|
154
|
+
const resolveConfig = makeResolveConfig(config);
|
|
155
|
+
const verify = verifyToken(resolveConfig);
|
|
156
|
+
return Effect.fnUntraced(function* (headers) {
|
|
157
|
+
const token = yield* getAuthorizationToken(headers, config.authRequired !== false);
|
|
158
|
+
if (Option.isNone(token)) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
yield* verify(token.value);
|
|
29
162
|
});
|
|
30
163
|
};
|
|
31
164
|
export const checkJwt = (config) => {
|
|
32
165
|
const check = checkJWTI(config);
|
|
33
166
|
return HttpMiddleware.make((app) => Effect.gen(function* () {
|
|
34
167
|
const req = yield* HttpServerRequest.HttpServerRequest;
|
|
35
|
-
const response = yield* check(req.headers).pipe(Effect.catch((
|
|
36
|
-
status:
|
|
37
|
-
headers: HttpHeaders.fromInput(
|
|
168
|
+
const response = yield* check(req.headers).pipe(Effect.catch((error) => HttpServerResponse.json({ message: error.message }, {
|
|
169
|
+
status: error.status,
|
|
170
|
+
headers: HttpHeaders.fromInput(error.headers)
|
|
38
171
|
})));
|
|
39
172
|
if (response) {
|
|
40
173
|
return response;
|
|
@@ -44,4 +177,4 @@ export const checkJwt = (config) => {
|
|
|
44
177
|
};
|
|
45
178
|
export class JWTError extends Data.TaggedClass("JWTError") {
|
|
46
179
|
}
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvaW50ZXJuYWwvYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsa0RBQWtEO0FBQ2xELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDcEcsT0FBTyxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBT25JLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFO0lBQzFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN2QixPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUMsT0FBNEI7UUFDN0QsT0FBTyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUkzQixDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ1QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFhLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLEdBQUc7b0JBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUNwQyxJQUNFLEdBQUcsWUFBWSxzQkFBc0I7dUJBQ2xDLEdBQUcsWUFBWSxtQkFBbUI7dUJBQ2xDLEdBQUcsWUFBWSxpQkFBaUI7dUJBQ2hDLEdBQUcsWUFBWSxpQkFBaUIsRUFDbkMsQ0FBQztvQkFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7Z0JBQ2pDLENBQUM7Z0JBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQ2hDLENBQUMsQ0FBQTtZQUNELE1BQU0sQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQSxDQUFDLG1CQUFtQjtZQUMvRixJQUFJLENBQUM7Z0JBQ0gsRUFBRSxDQUFDLENBQVEsRUFBRSxFQUFTLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDL0IsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQzlCLENBQUM7UUFDSCxDQUFDLENBQ0YsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUU7SUFDekMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQy9CLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ2pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ2xCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFBO1FBQ3RELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNqRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzlDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTTtZQUNoQixPQUFPLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1NBQzFDLENBQUMsQ0FDSCxDQUFDLENBQUE7UUFDRixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsT0FBTyxRQUFRLENBQUE7UUFDakIsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFBO0lBQ25CLENBQUMsQ0FBQyxDQUNILENBQUE7QUFDSCxDQUFDLENBQUE7QUFFRCxNQUFNLE9BQU8sUUFBUyxTQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQU12RDtDQUFHIn0=
|
|
180
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvaW50ZXJuYWwvYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDcEcsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssSUFBSSxNQUFNLGFBQWEsQ0FBQTtBQUNuQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRXBELE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBYSxFQUFFLFdBQW1CLEVBQUUsTUFBOEIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxRixrQkFBa0IsRUFBRSw4QkFBOEIsS0FBSyx5QkFBeUIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQzVHLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQzdDLEVBQUU7Q0FDSCxDQUFDLENBQUE7QUFFRixNQUFNLE9BQU8saUJBQWtCLFNBQVEsS0FBSztJQUNqQyxNQUFNLEdBQVcsR0FBRyxDQUFBO0lBQ3BCLFVBQVUsR0FBVyxHQUFHLENBQUE7SUFDakMsT0FBTyxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQTtJQUV4RCxZQUFZLE9BQU8sR0FBRyxjQUFjO1FBQ2xDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUE7SUFDbkMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLG1CQUFvQixT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
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Effect from "effect-app/Effect";
|
|
2
2
|
import { HttpServerResponse } from "effect-app/http";
|
|
3
|
+
import * as S from "effect-app/Schema";
|
|
4
|
+
import * as Stream from "effect/Stream";
|
|
3
5
|
export declare const makeSSE: <A extends {
|
|
4
6
|
id: any;
|
|
5
|
-
}, SI,
|
|
7
|
+
}, SI, SRD, SRE>(schema: S.Codec<A, SI, SRD, SRE>) => <E, R>(events: Stream.Stream<{
|
|
6
8
|
evt: A;
|
|
7
9
|
namespace: string;
|
|
8
|
-
}, E, R>) => Effect.Effect<HttpServerResponse.HttpServerResponse, never, Exclude<Exclude<
|
|
9
|
-
//# sourceMappingURL=
|
|
10
|
+
}, E, R>) => Effect.Effect<HttpServerResponse.HttpServerResponse, never, Exclude<Exclude<R, import("effect/Tracer").ParentSpan>, never> | Exclude<Exclude<SRD, import("effect/Tracer").ParentSpan>, never> | Exclude<Exclude<SRE, import("effect/Tracer").ParentSpan>, never>>;
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL2ludGVybmFsL2V2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sRUFBZSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ2pFLE9BQU8sS0FBSyxDQUFDLE1BQU0sbUJBQW1CLENBQUE7QUFJdEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUE7QUFXdkMsZUFBTyxNQUFNLE9BQU8sR0FBSSxDQUFDLFNBQVM7SUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFBO0NBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsVUFDakQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFFakMsQ0FBQyxFQUFFLENBQUMsVUFBVSxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUFDLFNBQVMsRUFBRSxNQUFNLENBQUE7Q0FBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsc1FBd0QyQixDQUFBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/api/internal/events.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/api/internal/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAe,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACjE,OAAO,KAAK,CAAC,MAAM,mBAAmB,CAAA;AAItC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAWvC,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS;IAAE,EAAE,EAAE,GAAG,CAAA;CAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,UACjD,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,MAEjC,CAAC,EAAE,CAAC,UAAU,MAAM,CAAC,MAAM,CAAC;IAAE,GAAG,EAAE,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,EAAE,CAAC,CAAC,sQAwD2B,CAAA"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Effect from "effect-app/Effect";
|
|
2
2
|
import { HttpHeaders, HttpServerResponse } from "effect-app/http";
|
|
3
|
+
import * as S from "effect-app/Schema";
|
|
4
|
+
import * as Duration from "effect/Duration";
|
|
5
|
+
import { pipe } from "effect/Function";
|
|
6
|
+
import * as Schedule from "effect/Schedule";
|
|
7
|
+
import * as Stream from "effect/Stream";
|
|
3
8
|
import { reportError } from "../../errorReporter.js";
|
|
9
|
+
import { storeId } from "../../Store/Memory.js";
|
|
4
10
|
import { setupRequestContextFromCurrent } from "../setupRequest.js";
|
|
5
11
|
// Tell the client to retry every 10 seconds if connectivity is lost
|
|
6
12
|
const setRetry = Stream.succeed("retry: 10000");
|
|
@@ -9,22 +15,23 @@ let connId = BigInt(0);
|
|
|
9
15
|
export const makeSSE = (schema) => (events) => Effect
|
|
10
16
|
.gen(function* () {
|
|
11
17
|
const id = connId++;
|
|
12
|
-
const ctx = yield* Effect.
|
|
18
|
+
const ctx = yield* Effect.context();
|
|
13
19
|
const res = HttpServerResponse.stream(
|
|
14
20
|
// workaround for different scoped behaviour for streams in Bun
|
|
15
21
|
// https://discord.com/channels/795981131316985866/1098177242598756412/1389646879675125861
|
|
16
22
|
Effect
|
|
17
23
|
.gen(function* () {
|
|
18
|
-
|
|
19
|
-
yield* Effect.
|
|
20
|
-
yield* Effect.
|
|
24
|
+
const ns = yield* storeId;
|
|
25
|
+
yield* Effect.annotateCurrentSpan({ "network.connection.id": id.toString() });
|
|
26
|
+
yield* Effect.logInfo("$ start listening to events, id: " + id.toString() + ", ns: " + ns);
|
|
27
|
+
yield* Effect.addFinalizer(() => Effect.logInfo("$ end listening to events, id: " + id.toString() + ", ns: " + ns));
|
|
21
28
|
const enc = new TextEncoder();
|
|
22
|
-
const encode = S.encodeEffect(S.fromJsonString(schema));
|
|
23
|
-
const eventStream = Stream.mapEffect(events, (_) => encode(_.evt)
|
|
29
|
+
const encode = S.encodeEffect(S.fromJsonString(S.toCodecJson(schema)));
|
|
30
|
+
const eventStream = Stream.mapEffect(Stream.filter(events, (_) => _.namespace === ns), (_) => encode(_.evt)
|
|
24
31
|
.pipe(Effect.map((data) => `id: ${_.evt.id}\ndata: ${data}`)));
|
|
25
32
|
const stream = pipe(setRetry, Stream.merge(keepAlive),
|
|
26
33
|
// Keep this unary so pipe receives a function, not a Stream value.
|
|
27
|
-
(self) => Stream.merge(self, eventStream, { haltStrategy: "either" }), Stream.tapCause((cause) => Effect.logError("SSE error", cause)), Stream.map((_) => enc.encode(_ + "\n\n")));
|
|
34
|
+
(self) => Stream.merge(self, eventStream, { haltStrategy: "either" }), Stream.tapCause((cause) => Effect.logError("SSE error, id: " + id.toString() + ", ns: " + ns, cause)), Stream.map((_) => enc.encode(_ + "\n\n")));
|
|
28
35
|
return stream;
|
|
29
36
|
})
|
|
30
37
|
.pipe(Stream.unwrap, Stream.tapCause(reportError("Request")), Stream.provide(ctx)), {
|
|
@@ -39,4 +46,4 @@ export const makeSSE = (schema) => (events) => Effect
|
|
|
39
46
|
return res;
|
|
40
47
|
})
|
|
41
48
|
.pipe(Effect.tapCause(reportError("Request")), setupRequestContextFromCurrent("events"));
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9pbnRlcm5hbC9ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDakUsT0FBTyxLQUFLLENBQUMsTUFBTSxtQkFBbUIsQ0FBQTtBQUN0QyxPQUFPLEtBQUssUUFBUSxNQUFNLGlCQUFpQixDQUFBO0FBQzNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUN0QyxPQUFPLEtBQUssUUFBUSxNQUFNLGlCQUFpQixDQUFBO0FBQzNDLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDL0MsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFbkUsb0VBQW9FO0FBQ3BFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUE7QUFDL0MsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUVoSCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFFdEIsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQ3JCLE1BQWdDLEVBQ2hDLEVBQUUsQ0FDSixDQUFPLE1BQTBELEVBQUUsRUFBRSxDQUNuRSxNQUFNO0tBQ0gsR0FBRyxDQUFD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
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { HttpServerResponse } from "effect-app/http";
|
|
2
2
|
export declare function serverHealth(version: string): import("effect/Effect").Effect<HttpServerResponse.HttpServerResponse, import("effect/unstable/http/HttpBody").HttpBodyError, import("effect/unstable/http/HttpServerRequest").HttpServerRequest>;
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL2ludGVybmFsL2hlYWx0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFcEUsd0JBQWdCLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxvTUFFM0MifQ==
|
package/dist/api/layerUtils.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type { NonEmptyReadonlyArray } from "effect-app/Array";
|
|
2
|
+
import * as Context from "effect-app/Context";
|
|
3
|
+
import * as Effect from "effect-app/Effect";
|
|
4
|
+
import type * as Layer from "effect-app/Layer";
|
|
5
|
+
import * as Option from "effect-app/Option";
|
|
2
6
|
export declare namespace LayerUtils {
|
|
3
7
|
type GetLayersSuccess<Layers extends ReadonlyArray<Layer.Any>> = Layers extends NonEmptyReadonlyArray<Layer.Any> ? {
|
|
4
8
|
[k in keyof Layers]: Layer.Success<Layers[k]>;
|
|
@@ -10,15 +14,15 @@ export declare namespace LayerUtils {
|
|
|
10
14
|
[k in keyof Layers]: Layer.Error<Layers[k]>;
|
|
11
15
|
}[number] : Layer.Error<Layers[number]>;
|
|
12
16
|
}
|
|
13
|
-
export type ContextTagWithDefault<Id, A, LayerE, LayerR> =
|
|
17
|
+
export type ContextTagWithDefault<Id, A, LayerE, LayerR> = Context.Service<Id, A> & {
|
|
14
18
|
Default: Layer.Layer<Id, LayerE, LayerR>;
|
|
15
19
|
};
|
|
16
20
|
export declare namespace ContextTagWithDefault {
|
|
17
21
|
type Base<A> = ContextTagWithDefault<any, A, any, any>;
|
|
18
22
|
}
|
|
19
|
-
export type GetContext<T> = T extends
|
|
23
|
+
export type GetContext<T> = T extends Context.Context<infer Y> ? Y : never;
|
|
20
24
|
export declare const mergeContexts: <T extends readonly {
|
|
21
25
|
maker: any;
|
|
22
|
-
handle: Effect.Effect<
|
|
23
|
-
}[]>(makers: T) => Effect.Effect<
|
|
24
|
-
//# sourceMappingURL=
|
|
26
|
+
handle: Effect.Effect<Context.Context<any> | Option.Option<Context.Context<any>>>;
|
|
27
|
+
}[]>(makers: T) => Effect.Effect<Context.Context<Effect.Success<T[number]["handle"]>>, never, never>;
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXJVdGlscy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9sYXllclV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDN0QsT0FBTyxLQUFLLE9BQU8sTUFBTSxvQkFBb0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sS0FBSyxLQUFLLEtBQUssTUFBTSxrQkFBa0IsQ0FBQTtBQUM5QyxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFBO0FBTzNDLHlCQUFpQixVQUFVLENBQUMsQ0FBQztJQUMzQixLQUFZLGdCQUFnQixDQUFDLE1BQU0sU0FBUyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sU0FDNUUscUJBQXFCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHO1NBQ2hDLENBQUMsSUFBSSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM5QyxDQUFDLE1BQU0sQ0FBQyxHQUNQLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFFakMsS0FBWSxnQkFBZ0IsQ0FBQyxNQUFNLFNBQVMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLFNBQzVFLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRztTQUNoQyxDQUFDLElBQUksTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDL0MsQ0FBQyxNQUFNLENBQUMsR0FDUCxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBRWxDLEtBQVksY0FBYyxDQUFDLE1BQU0sU0FBUyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sU0FBUyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQ2pIO1NBQ0MsQ0FBQyxJQUFJLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzVDLENBQUMsTUFBTSxDQUFDLEdBQ1AsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtDQUNoQztBQUVELE1BQU0sTUFBTSxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQ25ELE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUN0QjtJQUNBLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7Q0FDekMsQ0FBQTtBQUVILHlCQUFpQixxQkFBcUIsQ0FBQyxDQUFDO0lBQ3RDLEtBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtDQUM5RDtBQUVELE1BQU0sTUFBTSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtBQUUxRSxlQUFPLE1BQU0sYUFBYSxHQUV0QixDQUFDLFNBQVMsU0FBUztJQUNqQixLQUFLLEVBQUUsR0FBRyxDQUFBO0lBQ1YsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQ2xGLEVBQUUsaUdBa0JOLENBQUEifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layerUtils.d.ts","sourceRoot":"","sources":["../../src/api/layerUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"layerUtils.d.ts","sourceRoot":"","sources":["../../src/api/layerUtils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAO3C,yBAAiB,UAAU,CAAC,CAAC;IAC3B,KAAY,gBAAgB,CAAC,MAAM,SAAS,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,SAC5E,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG;SAChC,CAAC,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAC9C,CAAC,MAAM,CAAC,GACP,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;IAEjC,KAAY,gBAAgB,CAAC,MAAM,SAAS,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,SAC5E,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG;SAChC,CAAC,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAC/C,CAAC,MAAM,CAAC,GACP,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;IAElC,KAAY,cAAc,CAAC,MAAM,SAAS,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,SAAS,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,GACjH;SACC,CAAC,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAC5C,CAAC,MAAM,CAAC,GACP,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;CAChC;AAED,MAAM,MAAM,qBAAqB,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,IACnD,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,GACtB;IACA,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CACzC,CAAA;AAEH,yBAAiB,qBAAqB,CAAC,CAAC;IACtC,KAAY,IAAI,CAAC,CAAC,IAAI,qBAAqB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;CAC9D;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AAE1E,eAAO,MAAM,aAAa,GAEtB,CAAC,SAAS,SAAS;IACjB,KAAK,EAAE,GAAG,CAAA;IACV,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;CAClF,EAAE,iGAkBN,CAAA"}
|
package/dist/api/layerUtils.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
1
|
+
import * as Context from "effect-app/Context";
|
|
2
|
+
import * as Effect from "effect-app/Effect";
|
|
3
|
+
import * as Option from "effect-app/Option";
|
|
3
4
|
import { InfraLogger } from "../logger.js";
|
|
4
5
|
export const mergeContexts = Effect.fnUntraced(function* (makers) {
|
|
5
|
-
let context =
|
|
6
|
+
let context = Context.empty();
|
|
6
7
|
for (const mw of makers) {
|
|
7
8
|
const ctx = yield* mw.handle.pipe(Effect.provide(context));
|
|
8
|
-
const moreContext =
|
|
9
|
+
const moreContext = Context.isContext(ctx) ? Option.some(ctx) : ctx;
|
|
9
10
|
yield* InfraLogger.logDebug("Built dynamic context for middleware" + (mw.maker.key ?? mw.maker), Option.map(moreContext, (c) => c.toJSON().services));
|
|
10
11
|
if (moreContext.value) {
|
|
11
|
-
context =
|
|
12
|
+
context = Context.merge(context, moreContext.value);
|
|
12
13
|
}
|
|
13
14
|
}
|
|
14
15
|
return context;
|
|
15
16
|
});
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXJVdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvbGF5ZXJVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssT0FBTyxNQUFNLG9CQUFvQixDQUFBO0FBQzdDLE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUE7QUFFM0MsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBc0MxQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FDNUMsUUFBUSxDQUFDLEVBTVAsTUFBUztJQUVULElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUM3QixLQUFLLE1BQU0sRUFBRSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUMxRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUE7UUFDbkUsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FDekIsc0NBQXNDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQ25FLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBRSxDQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQzdELENBQUE7UUFDRCxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QixPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3JELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxPQUErRCxDQUFBO0FBQ3hFLENBQUMsQ0FDRixDQUFBIn0=
|
|
@@ -7,4 +7,4 @@ export * from "./internal/auth.js";
|
|
|
7
7
|
export * from "./internal/events.js";
|
|
8
8
|
export * from "./internal/health.js";
|
|
9
9
|
export * from "./internal/RequestContextMiddleware.js";
|
|
10
|
-
//# sourceMappingURL=
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvbWlkZGxld2FyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILGNBQWMsb0JBQW9CLENBQUE7QUFDbEMsY0FBYyxzQkFBc0IsQ0FBQTtBQUNwQyxjQUFjLHNCQUFzQixDQUFBO0FBQ3BDLGNBQWMsd0NBQXdDLENBQUEifQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Effect from "effect-app/Effect";
|
|
2
2
|
export declare const reportRequestError: <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
3
3
|
export declare const reportUnknownRequestError: <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
|
|
4
|
-
//# sourceMappingURL=
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0RXJyb3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcmVwb3J0RXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQTRCM0MsZUFBTyxNQUFNLGtCQUFrQixHQVJyQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLDJCQVFXLENBQUE7QUFDMUQsZUFBTyxNQUFNLHlCQUF5QixHQVQ1QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLDJCQVN3QixDQUFBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportError.d.ts","sourceRoot":"","sources":["../../src/api/reportError.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"reportError.d.ts","sourceRoot":"","sources":["../../src/api/reportError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AA4B3C,eAAO,MAAM,kBAAkB,GARrB,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,2BAQW,CAAA;AAC1D,eAAO,MAAM,yBAAyB,GAT5B,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,2BASwB,CAAA"}
|
package/dist/api/reportError.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Effect from "effect-app/Effect";
|
|
2
|
+
import * as Cause from "effect/Cause";
|
|
2
3
|
import { logError, reportError } from "../errorReporter.js";
|
|
3
4
|
// const onExitReportError = (name: string, unknownOnly?: boolean) => {
|
|
4
5
|
// const report = reportError(name)
|
|
@@ -24,4 +25,4 @@ const tapErrorCause = (name, unknownOnly) => {
|
|
|
24
25
|
};
|
|
25
26
|
export const reportRequestError = tapErrorCause("request");
|
|
26
27
|
export const reportUnknownRequestError = tapErrorCause("request", true);
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0RXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3JlcG9ydEVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxLQUFLLEtBQUssTUFBTSxjQUFjLENBQUE7QUFDckMsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUUzRCx1RUFBdUU7QUFDdkUscUNBQXFDO0FBQ3JDLCtCQUErQjtBQUMvQixzREFBc0Q7QUFDdEQsb0NBQW9DO0FBQ3BDLDZCQUE2QjtBQUM3Qix3QkFBd0I7QUFDeEIsNkVBQTZFO0FBQzdFLG1DQUFtQztBQUNuQyxnQ0FBZ0M7QUFDaEMsaUNBQWlDO0FBQ2pDLHlCQUF5QjtBQUN6QixJQUFJO0FBQ0osTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFZLEVBQUUsV0FBcUIsRUFBRSxFQUFFO0lBQzVELE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNoQyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDMUIsT0FBTyxDQUFVLElBQTRCLEVBQUUsRUFBRSxDQUMvQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQzlCLFdBQVc7UUFDVCxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDckIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDWixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDeEIsQ0FBQyxDQUFBO0FBQ0QsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBQzFELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUEifQ==
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type * as Context from "effect-app/Context";
|
|
2
|
+
import type * as Layer from "effect-app/Layer";
|
|
2
3
|
import { type GetContextConfig, type RpcContextMap } from "effect-app/rpc/RpcContextMap";
|
|
3
4
|
import { type RpcMiddlewareV4 } from "effect-app/rpc/RpcMiddleware";
|
|
4
5
|
export type RouterMiddleware<Self, RequestContextMap extends Record<string, RpcContextMap.Any>, // what services will the middlware provide dynamically to the next, or raise errors.
|
|
@@ -7,9 +8,9 @@ MakeMiddlewareR, // what the middlware requires to be constructed
|
|
|
7
8
|
ContextProviderA, // what the context provider provides
|
|
8
9
|
ContextProviderE, // what the context provider may fail with
|
|
9
10
|
_ContextProviderR, // what the context provider requires
|
|
10
|
-
RequestContextId> =
|
|
11
|
+
RequestContextId> = Context.Service<Self, RpcMiddlewareV4<ContextProviderA, ContextProviderE, never>> & {
|
|
11
12
|
readonly Default: Layer.Layer<Self, MakeMiddlewareE, MakeMiddlewareR>;
|
|
12
|
-
readonly requestContext:
|
|
13
|
+
readonly requestContext: Context.Service<RequestContextId, GetContextConfig<RequestContextMap>>;
|
|
13
14
|
readonly requestContextMap: RequestContextMap;
|
|
14
15
|
};
|
|
15
|
-
//# sourceMappingURL=
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVyTWlkZGxld2FyZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaS9yb3V0aW5nL21pZGRsZXdhcmUvUm91dGVyTWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEtBQUssS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUE7QUFDbEQsT0FBTyxLQUFLLEtBQUssS0FBSyxNQUFNLGtCQUFrQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxLQUFLLGdCQUFnQixFQUFFLEtBQUssYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFDeEYsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFLbkUsTUFBTSxNQUFNLGdCQUFnQixDQUMxQixJQUFJLEVBQ0osaUJBQWlCLFNBQVMsTUFBTSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUscUZBQXFGO0FBQ2xKLGVBQWUsRUFBRSxpREFBaUQ7QUFDbEUsZUFBZSxFQUFFLGdEQUFnRDtBQUNqRSxnQkFBZ0IsRUFBRSxxQ0FBcUM7QUFDdkQsZ0JBQWdCLEVBQUUsMENBQTBDO0FBQzVELGlCQUFpQixFQUFFLHFDQUFxQztBQUN4RCxnQkFBZ0IsSUFFZCxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FDakY7SUFDQSxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQTtJQUNyRSxRQUFRLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFBO0lBQy9GLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQTtDQUM5QyxDQUFBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouterMiddleware.d.ts","sourceRoot":"","sources":["../../../../src/api/routing/middleware/RouterMiddleware.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"RouterMiddleware.d.ts","sourceRoot":"","sources":["../../../../src/api/routing/middleware/RouterMiddleware.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAA;AACxF,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAKnE,MAAM,MAAM,gBAAgB,CAC1B,IAAI,EACJ,iBAAiB,SAAS,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,qFAAqF;AAClJ,eAAe,EAAE,iDAAiD;AAClE,eAAe,EAAE,gDAAgD;AACjE,gBAAgB,EAAE,qCAAqC;AACvD,gBAAgB,EAAE,0CAA0C;AAC5D,iBAAiB,EAAE,qCAAqC;AACxD,gBAAgB,IAEd,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC,GACjF;IACA,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,eAAe,CAAC,CAAA;IACrE,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAC/F,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAA;CAC9C,CAAA"}
|
|
@@ -1,9 +1,48 @@
|
|
|
1
|
-
import { Config, Layer } from "effect";
|
|
2
1
|
import { ConfigureInterruptibilityMiddleware, DevModeMiddleware, LoggerMiddleware, RequestCacheMiddleware } from "effect-app/middleware";
|
|
2
|
+
import { RpcContextMap, type RpcMiddleware } from "effect-app/rpc";
|
|
3
|
+
import * as Config from "effect/Config";
|
|
4
|
+
import * as Context from "effect/Context";
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import * as Layer from "effect/Layer";
|
|
7
|
+
import * as Schema from "effect/Schema";
|
|
8
|
+
import { type Rpc } from "effect/unstable/rpc";
|
|
9
|
+
import { WithNsTransaction } from "../../../Store/SQL.js";
|
|
3
10
|
export declare const DevModeLive: Layer.Layer<never, Config.ConfigError, never>;
|
|
4
11
|
export declare const RequestCacheMiddlewareLive: Layer.Layer<RequestCacheMiddleware, never, never>;
|
|
12
|
+
export declare const RequestType: Context.Reference<"command" | "query">;
|
|
5
13
|
export declare const ConfigureInterruptibilityMiddlewareLive: Layer.Layer<ConfigureInterruptibilityMiddleware, never, never>;
|
|
6
14
|
export declare const LoggerMiddlewareLive: Layer.Layer<LoggerMiddleware, Config.ConfigError, never>;
|
|
7
15
|
export declare const DevModeMiddlewareLive: Layer.Layer<DevModeMiddleware, Config.ConfigError, never>;
|
|
8
|
-
export declare const DefaultGenericMiddlewaresLive: Layer.Layer<
|
|
9
|
-
|
|
16
|
+
export declare const DefaultGenericMiddlewaresLive: Layer.Layer<ConfigureInterruptibilityMiddleware | DevModeMiddleware | LoggerMiddleware | RequestCacheMiddleware, Config.ConfigError, never>;
|
|
17
|
+
/**
|
|
18
|
+
* Config entry for `RequestContextMap` that controls per-RPC transaction wrapping.
|
|
19
|
+
* Defaults to `false` (no transaction). Set `requiresTransaction: true` on a route to enable.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* class RequestContextMap extends RpcContextMap.makeMap({
|
|
24
|
+
* requiresTransaction: requiresTransactionConfig,
|
|
25
|
+
* // ...
|
|
26
|
+
* }) {}
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare const requiresTransactionConfig: RpcContextMap.RpcContextMap.Custom<never, Schema.Never, boolean>;
|
|
30
|
+
/**
|
|
31
|
+
* Creates the middleware Effect for SQL transaction wrapping.
|
|
32
|
+
* Requires `WithNsTransaction` service.
|
|
33
|
+
* Reads `requiresTransaction` from the RPC config; defaults to `false`.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* const SqlTransactionMiddlewareLive = Layer.effect(
|
|
38
|
+
* SqlTransactionMiddleware,
|
|
39
|
+
* makeSqlTransactionMiddleware(RequestContextMap)
|
|
40
|
+
* )
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare const makeSqlTransactionMiddleware: (rcm: {
|
|
44
|
+
getConfig: (rpc: Rpc.AnyWithProps) => {
|
|
45
|
+
readonly requiresTransaction?: boolean;
|
|
46
|
+
};
|
|
47
|
+
}) => Effect.Effect<RpcMiddleware.RpcMiddlewareV4<never, never, never>, never, WithNsTransaction>;
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaS9yb3V0aW5nL21pZGRsZXdhcmUvbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsbUNBQW1DLEVBQVcsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUNqSixPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFJbEUsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUE7QUFDdkMsT0FBTyxLQUFLLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQTtBQUN6QyxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEtBQUssS0FBSyxNQUFNLGNBQWMsQ0FBQTtBQUNyQyxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEVBQUUsS0FBSyxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUc5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQU16RCxlQUFPLE1BQU0sV0FBVywrQ0FNdkIsQ0FBQTtBQUVELGVBQU8sTUFBTSwwQkFBMEIsbURBR3RDLENBQUE7QUFLRCxlQUFPLE1BQU0sV0FBVyx3Q0FHdkIsQ0FBQTtBQUVELGVBQU8sTUFBTSx1Q0FBdUMsZ0VBY25ELENBQUE7QUFFRCxlQUFPLE1BQU0sb0JBQW9CLDBEQTJERSxDQUFBO0FBRW5DLGVBQU8sTUFBTSxxQkFBcUIsMkRBUUMsQ0FBQTtBQUVuQyxlQUFPLE1BQU0sNkJBQTZCLDZJQUt6QyxDQUFBO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxlQUFPLE1BQU0seUJBQXlCLGtFQUFrRCxDQUFBO0FBRXhGOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILGVBQU8sTUFBTSw0QkFBNEI7ZUFDckIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLFlBQVksS0FBSztRQUFFLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLE9BQU8sQ0FBQTtLQUFFO2lHQVN2RixDQUFBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/routing/middleware/middleware.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/routing/middleware/middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mCAAmC,EAAW,iBAAiB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AACjJ,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAIlE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,qBAAqB,CAAA;AAG9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAMzD,eAAO,MAAM,WAAW,+CAMvB,CAAA;AAED,eAAO,MAAM,0BAA0B,mDAGtC,CAAA;AAKD,eAAO,MAAM,WAAW,wCAGvB,CAAA;AAED,eAAO,MAAM,uCAAuC,gEAcnD,CAAA;AAED,eAAO,MAAM,oBAAoB,0DA2DE,CAAA;AAEnC,eAAO,MAAM,qBAAqB,2DAQC,CAAA;AAEnC,eAAO,MAAM,6BAA6B,6IAKzC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,yBAAyB,kEAAkD,CAAA;AAExF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,4BAA4B;eACrB,CAAC,GAAG,EAAE,GAAG,CAAC,YAAY,KAAK;QAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAE;iGASvF,CAAA"}
|