@effect-app/infra 4.0.0-beta.20 → 4.0.0-beta.201
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 +1410 -0
- package/_check.sh +1 -1
- package/dist/CUPS.d.ts +15 -7
- package/dist/CUPS.d.ts.map +1 -1
- package/dist/CUPS.js +10 -12
- package/dist/Emailer/Sendgrid.d.ts +14 -14
- package/dist/Emailer/Sendgrid.d.ts.map +1 -1
- package/dist/Emailer/Sendgrid.js +16 -15
- package/dist/Emailer/fake.d.ts +1 -1
- package/dist/Emailer/service.d.ts +10 -4
- package/dist/Emailer/service.d.ts.map +1 -1
- package/dist/Emailer/service.js +3 -3
- package/dist/Emailer.d.ts +1 -1
- package/dist/MainFiberSet.d.ts +9 -9
- package/dist/MainFiberSet.d.ts.map +1 -1
- package/dist/MainFiberSet.js +3 -3
- package/dist/Model/Repository/Registry.d.ts +20 -0
- package/dist/Model/Repository/Registry.d.ts.map +1 -0
- package/dist/Model/Repository/Registry.js +17 -0
- package/dist/Model/Repository/ext.d.ts +33 -15
- package/dist/Model/Repository/ext.d.ts.map +1 -1
- package/dist/Model/Repository/ext.js +54 -2
- package/dist/Model/Repository/internal/internal.d.ts +6 -6
- package/dist/Model/Repository/internal/internal.d.ts.map +1 -1
- package/dist/Model/Repository/internal/internal.js +43 -32
- package/dist/Model/Repository/legacy.d.ts +1 -1
- package/dist/Model/Repository/makeRepo.d.ts +7 -6
- package/dist/Model/Repository/makeRepo.d.ts.map +1 -1
- package/dist/Model/Repository/makeRepo.js +5 -1
- package/dist/Model/Repository/service.d.ts +28 -23
- package/dist/Model/Repository/service.d.ts.map +1 -1
- package/dist/Model/Repository/validation.d.ts +142 -17
- package/dist/Model/Repository/validation.d.ts.map +1 -1
- package/dist/Model/Repository/validation.js +5 -5
- 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 +4 -4
- package/dist/Model/dsl.d.ts.map +1 -1
- 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 +16 -16
- package/dist/Model/query/dsl.d.ts.map +1 -1
- package/dist/Model/query/new-kid-interpreter.d.ts +6 -6
- package/dist/Model/query/new-kid-interpreter.d.ts.map +1 -1
- package/dist/Model/query/new-kid-interpreter.js +3 -3
- 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 +5 -7
- package/dist/QueueMaker/SQLQueue.d.ts.map +1 -1
- package/dist/QueueMaker/SQLQueue.js +105 -114
- package/dist/QueueMaker/errors.d.ts +2 -2
- package/dist/QueueMaker/errors.d.ts.map +1 -1
- package/dist/QueueMaker/memQueue.d.ts +7 -4
- package/dist/QueueMaker/memQueue.d.ts.map +1 -1
- package/dist/QueueMaker/memQueue.js +51 -62
- package/dist/QueueMaker/sbqueue.d.ts +6 -3
- package/dist/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/QueueMaker/sbqueue.js +37 -53
- package/dist/QueueMaker/service.d.ts +1 -1
- package/dist/RequestContext.d.ts +112 -26
- package/dist/RequestContext.d.ts.map +1 -1
- package/dist/RequestContext.js +7 -8
- package/dist/RequestFiberSet.d.ts +7 -7
- package/dist/RequestFiberSet.d.ts.map +1 -1
- package/dist/RequestFiberSet.js +5 -5
- package/dist/Store/ContextMapContainer.d.ts +19 -3
- package/dist/Store/ContextMapContainer.d.ts.map +1 -1
- package/dist/Store/ContextMapContainer.js +13 -3
- package/dist/Store/Cosmos/query.d.ts +1 -1
- package/dist/Store/Cosmos/query.d.ts.map +1 -1
- package/dist/Store/Cosmos/query.js +10 -12
- package/dist/Store/Cosmos.d.ts +1 -1
- package/dist/Store/Cosmos.d.ts.map +1 -1
- package/dist/Store/Cosmos.js +318 -240
- package/dist/Store/Disk.d.ts +2 -2
- package/dist/Store/Disk.d.ts.map +1 -1
- package/dist/Store/Disk.js +25 -22
- package/dist/Store/Memory.d.ts +4 -4
- package/dist/Store/Memory.d.ts.map +1 -1
- package/dist/Store/Memory.js +27 -22
- 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 +189 -0
- package/dist/Store/SQL/query.d.ts +38 -0
- package/dist/Store/SQL/query.d.ts.map +1 -0
- package/dist/Store/SQL/query.js +367 -0
- package/dist/Store/SQL.d.ts +20 -0
- package/dist/Store/SQL.d.ts.map +1 -0
- package/dist/Store/SQL.js +381 -0
- package/dist/Store/codeFilter.d.ts +1 -1
- package/dist/Store/codeFilter.d.ts.map +1 -1
- package/dist/Store/codeFilter.js +2 -1
- package/dist/Store/index.d.ts +5 -2
- package/dist/Store/index.d.ts.map +1 -1
- package/dist/Store/index.js +15 -3
- package/dist/Store/service.d.ts +18 -7
- package/dist/Store/service.d.ts.map +1 -1
- package/dist/Store/service.js +24 -6
- package/dist/Store/utils.d.ts +1 -1
- package/dist/Store/utils.d.ts.map +1 -1
- package/dist/Store/utils.js +3 -4
- package/dist/Store.d.ts +1 -1
- package/dist/adapters/SQL/Model.d.ts +28 -42
- package/dist/adapters/SQL/Model.d.ts.map +1 -1
- package/dist/adapters/SQL/Model.js +2 -2
- package/dist/adapters/SQL.d.ts +1 -1
- package/dist/adapters/ServiceBus.d.ts +11 -11
- package/dist/adapters/ServiceBus.d.ts.map +1 -1
- package/dist/adapters/ServiceBus.js +13 -15
- package/dist/adapters/cosmos-client.d.ts +3 -3
- package/dist/adapters/cosmos-client.d.ts.map +1 -1
- package/dist/adapters/cosmos-client.js +3 -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 +3 -3
- package/dist/adapters/memQueue.d.ts.map +1 -1
- package/dist/adapters/memQueue.js +3 -3
- package/dist/adapters/mongo-client.d.ts +3 -3
- package/dist/adapters/mongo-client.d.ts.map +1 -1
- package/dist/adapters/mongo-client.js +3 -3
- package/dist/adapters/redis-client.d.ts +3 -3
- package/dist/adapters/redis-client.d.ts.map +1 -1
- package/dist/adapters/redis-client.js +3 -3
- package/dist/api/ContextProvider.d.ts +8 -8
- package/dist/api/ContextProvider.d.ts.map +1 -1
- package/dist/api/ContextProvider.js +6 -6
- package/dist/api/codec.d.ts +1 -1
- package/dist/api/internal/RequestContextMiddleware.d.ts +2 -2
- package/dist/api/internal/RequestContextMiddleware.d.ts.map +1 -1
- package/dist/api/internal/RequestContextMiddleware.js +2 -2
- package/dist/api/internal/auth.d.ts +44 -6
- package/dist/api/internal/auth.d.ts.map +1 -1
- package/dist/api/internal/auth.js +160 -29
- package/dist/api/internal/events.d.ts +3 -3
- package/dist/api/internal/events.d.ts.map +1 -1
- package/dist/api/internal/events.js +9 -7
- package/dist/api/internal/health.d.ts +1 -1
- package/dist/api/layerUtils.d.ts +6 -6
- package/dist/api/layerUtils.d.ts.map +1 -1
- package/dist/api/layerUtils.js +5 -5
- package/dist/api/middlewares.d.ts +1 -1
- package/dist/api/reportError.d.ts +1 -1
- package/dist/api/routing/middleware/RouterMiddleware.d.ts +4 -4
- package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/middleware.d.ts +39 -3
- package/dist/api/routing/middleware/middleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/middleware.js +46 -14
- 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/tsort.d.ts +1 -1
- package/dist/api/routing/tsort.d.ts.map +1 -1
- package/dist/api/routing/utils.d.ts +3 -3
- package/dist/api/routing/utils.d.ts.map +1 -1
- package/dist/api/routing.d.ts +25 -26
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +99 -35
- package/dist/api/setupRequest.d.ts +8 -5
- package/dist/api/setupRequest.d.ts.map +1 -1
- package/dist/api/setupRequest.js +12 -7
- package/dist/api/util.d.ts +1 -1
- package/dist/arbs.d.ts +1 -1
- package/dist/arbs.d.ts.map +1 -1
- package/dist/arbs.js +5 -3
- package/dist/errorReporter.d.ts +4 -4
- package/dist/errorReporter.d.ts.map +1 -1
- package/dist/errorReporter.js +20 -25
- package/dist/errors.d.ts +1 -1
- package/dist/fileUtil.d.ts +1 -1
- package/dist/fileUtil.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/logger/jsonLogger.d.ts +1 -1
- package/dist/logger/logFmtLogger.d.ts +1 -1
- package/dist/logger/shared.d.ts +1 -1
- package/dist/logger/shared.js +2 -2
- package/dist/logger.d.ts +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/rateLimit.d.ts +9 -3
- package/dist/rateLimit.d.ts.map +1 -1
- package/dist/rateLimit.js +5 -11
- package/dist/test.d.ts +2 -2
- package/dist/test.d.ts.map +1 -1
- package/dist/test.js +1 -1
- package/dist/vitest.d.ts +1 -1
- package/examples/query.ts +39 -35
- package/package.json +41 -37
- package/src/CUPS.ts +9 -11
- package/src/Emailer/Sendgrid.ts +17 -14
- package/src/Emailer/service.ts +9 -3
- package/src/MainFiberSet.ts +5 -6
- package/src/Model/Repository/Registry.ts +33 -0
- package/src/Model/Repository/ext.ts +96 -10
- package/src/Model/Repository/internal/internal.ts +97 -88
- package/src/Model/Repository/makeRepo.ts +12 -10
- package/src/Model/Repository/service.ts +31 -22
- package/src/Model/Repository/validation.ts +4 -4
- package/src/Model/Repository.ts +1 -0
- package/src/Model/dsl.ts +3 -3
- package/src/Model/filter/types/path/eager.ts +1 -2
- package/src/Model/query/dsl.ts +18 -18
- package/src/Model/query/new-kid-interpreter.ts +2 -2
- package/src/Model.ts +1 -0
- package/src/QueueMaker/SQLQueue.ts +121 -151
- package/src/QueueMaker/memQueue.ts +82 -103
- package/src/QueueMaker/sbqueue.ts +56 -86
- package/src/RequestContext.ts +8 -10
- package/src/RequestFiberSet.ts +4 -4
- package/src/Store/ContextMapContainer.ts +41 -2
- package/src/Store/Cosmos/query.ts +16 -20
- package/src/Store/Cosmos.ts +452 -342
- package/src/Store/Disk.ts +52 -49
- package/src/Store/Memory.ts +54 -48
- package/src/Store/SQL/Pg.ts +318 -0
- package/src/Store/SQL/query.ts +409 -0
- package/src/Store/SQL.ts +668 -0
- package/src/Store/codeFilter.ts +1 -0
- package/src/Store/index.ts +17 -2
- package/src/Store/service.ts +32 -8
- package/src/Store/utils.ts +23 -22
- package/src/adapters/SQL/Model.ts +10 -4
- package/src/adapters/ServiceBus.ts +112 -116
- package/src/adapters/cosmos-client.ts +2 -2
- package/src/adapters/index.ts +7 -0
- package/src/adapters/memQueue.ts +2 -2
- package/src/adapters/mongo-client.ts +2 -2
- package/src/adapters/redis-client.ts +2 -2
- package/src/api/ContextProvider.ts +12 -13
- package/src/api/internal/RequestContextMiddleware.ts +1 -1
- package/src/api/internal/auth.ts +246 -44
- package/src/api/internal/events.ts +12 -8
- package/src/api/layerUtils.ts +8 -8
- package/src/api/routing/middleware/RouterMiddleware.ts +4 -4
- package/src/api/routing/middleware/middleware.ts +53 -12
- package/src/api/routing/middleware.ts +0 -2
- package/src/api/routing.ts +173 -63
- package/src/api/setupRequest.ts +28 -8
- package/src/arbs.ts +4 -2
- package/src/errorReporter.ts +62 -74
- package/src/logger/shared.ts +1 -1
- package/src/rateLimit.ts +30 -22
- package/src/test.ts +1 -1
- package/test/auth.test.ts +101 -0
- package/test/contextProvider.test.ts +11 -11
- package/test/controller.test.ts +19 -17
- 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 +26 -12
- package/test/dist/fixtures.d.ts.map +1 -1
- package/test/dist/fixtures.js +12 -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 +11 -9
- package/test/query.test.ts +216 -34
- package/test/rawQuery.test.ts +23 -19
- package/test/repository-ext.test.ts +60 -0
- package/test/requires.test.ts +6 -6
- package/test/router-generator.test.ts +183 -0
- package/test/routing-interruptibility.test.ts +63 -0
- package/test/rpc-e2e-invalidation.test.ts +249 -0
- package/test/rpc-multi-middleware.test.ts +78 -9
- package/test/rpc-stream-fullstack.test.ts +325 -0
- package/test/sql-store.test.ts +1064 -0
- package/test/validateSample.test.ts +15 -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,15 +1,53 @@
|
|
|
1
1
|
import { Effect } from "effect-app";
|
|
2
2
|
import { HttpHeaders, HttpServerRequest, HttpServerResponse } from "effect-app/http";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
export declare class UnauthorizedError extends Error {
|
|
4
|
+
readonly status: number;
|
|
5
|
+
readonly statusCode: number;
|
|
6
|
+
headers: {
|
|
7
|
+
"WWW-Authenticate": string;
|
|
8
|
+
};
|
|
9
|
+
constructor(message?: string);
|
|
10
|
+
}
|
|
11
|
+
export declare class InvalidRequestError extends UnauthorizedError {
|
|
12
|
+
readonly code: string;
|
|
13
|
+
readonly status = 400;
|
|
14
|
+
readonly statusCode = 400;
|
|
15
|
+
constructor(message?: string, useErrorCode?: boolean);
|
|
16
|
+
}
|
|
17
|
+
export declare class InvalidTokenError extends UnauthorizedError {
|
|
18
|
+
readonly code = "invalid_token";
|
|
19
|
+
constructor(message?: string);
|
|
20
|
+
}
|
|
21
|
+
export declare class InsufficientScopeError extends UnauthorizedError {
|
|
22
|
+
readonly code = "insufficient_scope";
|
|
23
|
+
readonly status = 403;
|
|
24
|
+
readonly statusCode = 403;
|
|
25
|
+
constructor(scopes?: ReadonlyArray<string>, message?: string);
|
|
26
|
+
}
|
|
27
|
+
export interface JwtVerifierOptions {
|
|
28
|
+
readonly audience?: string | Array<string> | ReadonlyArray<string>;
|
|
29
|
+
readonly clockTolerance?: number;
|
|
30
|
+
readonly issuer?: string;
|
|
31
|
+
readonly issuerBaseURL?: string;
|
|
32
|
+
readonly jwksUri?: string;
|
|
33
|
+
readonly maxTokenAge?: number;
|
|
34
|
+
readonly secret?: string;
|
|
35
|
+
readonly strict?: boolean;
|
|
36
|
+
readonly tokenSigningAlg?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface AuthOptions extends JwtVerifierOptions {
|
|
39
|
+
readonly authRequired?: boolean;
|
|
40
|
+
}
|
|
41
|
+
type Config = AuthOptions;
|
|
42
|
+
type JwtError = InsufficientScopeError | InvalidRequestError | InvalidTokenError | UnauthorizedError;
|
|
43
|
+
export declare const checkJWTI: (config: Config) => (headers: HttpHeaders.Headers) => Effect.Effect<void, UnauthorizedError, never>;
|
|
44
|
+
export declare const checkJwt: (config: Config) => <E, R>(app: Effect.Effect<HttpServerResponse.HttpServerResponse, E, R | HttpServerRequest.HttpServerRequest>) => Effect.Effect<HttpServerResponse.HttpServerResponse, E | import("effect/unstable/http/HttpBody").HttpBodyError, R | HttpServerRequest.HttpServerRequest>;
|
|
7
45
|
declare const JWTError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => Readonly<A> & {
|
|
8
46
|
readonly _tag: "JWTError";
|
|
9
47
|
} & import("effect/Pipeable").Pipeable;
|
|
10
48
|
export declare class JWTError extends JWTError_base<{
|
|
11
|
-
error:
|
|
49
|
+
error: JwtError;
|
|
12
50
|
}> {
|
|
13
51
|
}
|
|
14
52
|
export {};
|
|
15
|
-
//# sourceMappingURL=
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9pbnRlcm5hbC9hdXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBUSxNQUFNLEVBQVUsTUFBTSxZQUFZLENBQUE7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBa0IsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQVNwRyxxQkFBYSxpQkFBa0IsU0FBUSxLQUFLO0lBQzFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFNO0lBQzdCLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFNO0lBQ2pDLE9BQU87UUFBSyxrQkFBa0I7TUFBMEI7SUFFeEQsWUFBWSxPQUFPLFNBQWlCLEVBR25DO0NBQ0Y7QUFFRCxxQkFBYSxtQkFBb0IsU0FBUSxpQkFBaUI7SUFDeEQsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUE7SUFDckIsU0FBa0IsTUFBTSxPQUFNO0lBQzlCLFNBQWtCLFVBQVUsT0FBTTtJQUVsQyxZQUFZLE9BQU8sU0FBb0IsRUFBRSxZQUFZLFVBQU8sRUFNM0Q7Q0FDRjtBQUVELHFCQUFhLGlCQUFrQixTQUFRLGlCQUFpQjtJQUN0RCxRQUFRLENBQUMsSUFBSSxtQkFBa0I7SUFFL0IsWUFBWSxPQUFPLFNBQWtCLEVBR3BDO0NBQ0Y7QUFFRCxxQkFBYSxzQkFBdUIsU0FBUSxpQkFBaUI7SUFDM0QsUUFBUSxDQUFDLElBQUksd0JBQXVCO0lBQ3BDLFNBQWtCLE1BQU0sT0FBTTtJQUM5QixTQUFrQixVQUFVLE9BQU07SUFFbEMsWUFBWSxNQUFNLENBQUMsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxTQUF1QixFQUd6RTtDQUNGO0FBRUQsTUFBTSxXQUFXLGtCQUFrQjtJQUNqQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbEUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtJQUNoQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFBO0lBQ3hCLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxNQUFNLENBQUE7SUFDL0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQTtJQUN6QixRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFBO0lBQzdCLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUE7SUFDeEIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQTtJQUN6QixRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUUsTUFBTSxDQUFBO0NBQ2xDO0FBRUQsTUFBTSxXQUFXLFdBQVksU0FBUSxrQkFBa0I7SUFDckQsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLE9BQU8sQ0FBQTtDQUNoQztBQUVELEtBQUssTUFBTSxHQUFHLFdBQVcsQ0FBQTtBQUV6QixLQUFLLFFBQVEsR0FBRyxzQkFBc0IsR0FBRyxtQkFBbUIsR0FBRyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQTtBQTZKcEcsZUFBTyxNQUFNLFNBQVMsV0FBWSxNQUFNLG9GQVl2QyxDQUFBO0FBRUQsZUFBTyxNQUFNLFFBQVEsV0FBWSxNQUFNLDhRQXFCdEMsQ0FBQTs7OztBQUVELHFCQUFhLFFBQVMsU0FBUSxjQUE2QjtJQUN6RCxLQUFLLEVBQUUsUUFBUSxDQUFBO0NBQ2hCLENBQUM7Q0FBRyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/api/internal/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/api/internal/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,MAAM,EAAU,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,WAAW,EAAkB,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AASpG,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAM;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAM;IACjC,OAAO;QAAK,kBAAkB;MAA0B;IAExD,YAAY,OAAO,SAAiB,EAGnC;CACF;AAED,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,SAAkB,MAAM,OAAM;IAC9B,SAAkB,UAAU,OAAM;IAElC,YAAY,OAAO,SAAoB,EAAE,YAAY,UAAO,EAM3D;CACF;AAED,qBAAa,iBAAkB,SAAQ,iBAAiB;IACtD,QAAQ,CAAC,IAAI,mBAAkB;IAE/B,YAAY,OAAO,SAAkB,EAGpC;CACF;AAED,qBAAa,sBAAuB,SAAQ,iBAAiB;IAC3D,QAAQ,CAAC,IAAI,wBAAuB;IACpC,SAAkB,MAAM,OAAM;IAC9B,SAAkB,UAAU,OAAM;IAElC,YAAY,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,SAAuB,EAGzE;CACF;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IAClE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAClC;AAED,MAAM,WAAW,WAAY,SAAQ,kBAAkB;IACrD,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAChC;AAED,KAAK,MAAM,GAAG,WAAW,CAAA;AAEzB,KAAK,QAAQ,GAAG,sBAAsB,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,iBAAiB,CAAA;AA6JpG,eAAO,MAAM,SAAS,WAAY,MAAM,oFAYvC,CAAA;AAED,eAAO,MAAM,QAAQ,WAAY,MAAM,8QAqBtC,CAAA;;;;AAED,qBAAa,QAAS,SAAQ,cAA6B;IACzD,KAAK,EAAE,QAAQ,CAAA;CAChB,CAAC;CAAG"}
|
|
@@ -1,40 +1,171 @@
|
|
|
1
|
-
|
|
2
|
-
/* eslint-disable unused-imports/no-unused-vars */
|
|
3
|
-
import { Data, Effect } from "effect-app";
|
|
1
|
+
import { Data, Effect, Option } from "effect-app";
|
|
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 { createRemoteJWKSet, jwtVerify } from "jose";
|
|
4
|
+
const getHeaders = (error, description, scopes) => ({
|
|
5
|
+
"WWW-Authenticate": `Bearer realm="api", error="${error}", error_description="${description.replace(/"/g, "'")}"${scopes ? `, scope="${scopes.join(" ")}"` : ""}`
|
|
6
|
+
});
|
|
7
|
+
export class UnauthorizedError extends Error {
|
|
8
|
+
status = 401;
|
|
9
|
+
statusCode = 401;
|
|
10
|
+
headers = { "WWW-Authenticate": "Bearer realm=\"api\"" };
|
|
11
|
+
constructor(message = "Unauthorized") {
|
|
12
|
+
super(message);
|
|
13
|
+
this.name = this.constructor.name;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export class InvalidRequestError extends UnauthorizedError {
|
|
17
|
+
code;
|
|
18
|
+
status = 400;
|
|
19
|
+
statusCode = 400;
|
|
20
|
+
constructor(message = "Invalid Request", useErrorCode = true) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.code = useErrorCode ? "invalid_request" : "";
|
|
23
|
+
if (useErrorCode) {
|
|
24
|
+
this.headers = getHeaders(this.code, this.message);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export class InvalidTokenError extends UnauthorizedError {
|
|
29
|
+
code = "invalid_token";
|
|
30
|
+
constructor(message = "Invalid Token") {
|
|
31
|
+
super(message);
|
|
32
|
+
this.headers = getHeaders(this.code, this.message);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class InsufficientScopeError extends UnauthorizedError {
|
|
36
|
+
code = "insufficient_scope";
|
|
37
|
+
status = 403;
|
|
38
|
+
statusCode = 403;
|
|
39
|
+
constructor(scopes, message = "Insufficient Scope") {
|
|
40
|
+
super(message);
|
|
41
|
+
this.headers = getHeaders(this.code, this.message, scopes);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const isRecord = (value) => typeof value === "object" && value !== null;
|
|
45
|
+
const getErrorMessage = (error) => error instanceof Error ? error.message : String(error);
|
|
46
|
+
const normalizeAudience = (audience) => Array.isArray(audience) ? Array.from(audience) : audience;
|
|
47
|
+
const buildDiscoveryUrl = (issuerBaseURL) => {
|
|
48
|
+
const url = new URL(issuerBaseURL);
|
|
49
|
+
if (!url.pathname.includes("/.well-known/")) {
|
|
50
|
+
url.pathname = url.pathname.endsWith("/")
|
|
51
|
+
? `${url.pathname}.well-known/openid-configuration`
|
|
52
|
+
: `${url.pathname}/.well-known/openid-configuration`;
|
|
53
|
+
}
|
|
54
|
+
url.search = "";
|
|
55
|
+
url.hash = "";
|
|
56
|
+
return url;
|
|
57
|
+
};
|
|
58
|
+
const fetchDiscoveryDocumentPromise = async (issuerBaseURL) => {
|
|
59
|
+
const response = await fetch(buildDiscoveryUrl(issuerBaseURL));
|
|
60
|
+
if (!response.ok) {
|
|
61
|
+
throw new Error(`Failed to fetch authorization server metadata: ${response.status}`);
|
|
62
|
+
}
|
|
63
|
+
const json = await response.json();
|
|
64
|
+
if (!isRecord(json) || typeof json["issuer"] !== "string" || typeof json["jwks_uri"] !== "string") {
|
|
65
|
+
throw new Error("Invalid authorization server metadata");
|
|
66
|
+
}
|
|
67
|
+
return { issuer: json["issuer"], jwksUri: json["jwks_uri"] };
|
|
68
|
+
};
|
|
69
|
+
const getAuthorizationToken = (headers, authRequired) => {
|
|
70
|
+
const authorization = HttpHeaders.get(headers, "authorization");
|
|
71
|
+
if (Option.isNone(authorization)) {
|
|
72
|
+
return authRequired ? Effect.fail(new UnauthorizedError()) : Effect.succeed(Option.none());
|
|
73
|
+
}
|
|
74
|
+
const [scheme, token] = authorization.value.split(" ");
|
|
75
|
+
if (!scheme || !token || scheme.toLowerCase() !== "bearer") {
|
|
76
|
+
return Effect.fail(new InvalidRequestError("", false));
|
|
77
|
+
}
|
|
78
|
+
return Effect.succeed(Option.some(token));
|
|
79
|
+
};
|
|
80
|
+
const makeResolveConfig = (config) => {
|
|
81
|
+
let cached;
|
|
82
|
+
return Effect.tryPromise({
|
|
83
|
+
try: () => {
|
|
84
|
+
if (!cached) {
|
|
85
|
+
cached = (async () => {
|
|
86
|
+
const discovery = config.issuerBaseURL
|
|
87
|
+
? await fetchDiscoveryDocumentPromise(config.issuerBaseURL)
|
|
88
|
+
: undefined;
|
|
89
|
+
const issuer = config.issuer ?? discovery?.issuer;
|
|
90
|
+
const jwksUri = config.jwksUri ?? discovery?.jwksUri;
|
|
91
|
+
const secret = config.secret;
|
|
92
|
+
const base = {
|
|
93
|
+
audience: normalizeAudience(config.audience),
|
|
94
|
+
clockTolerance: config.clockTolerance ?? 5,
|
|
95
|
+
issuer,
|
|
96
|
+
maxTokenAge: config.maxTokenAge,
|
|
97
|
+
strict: config.strict ?? false,
|
|
98
|
+
tokenSigningAlg: config.tokenSigningAlg
|
|
99
|
+
};
|
|
100
|
+
if (!issuer && !secret) {
|
|
101
|
+
throw new InvalidRequestError("JWT config requires 'issuer', 'issuerBaseURL', or 'secret'");
|
|
102
|
+
}
|
|
103
|
+
if (!secret) {
|
|
104
|
+
if (!jwksUri) {
|
|
105
|
+
throw new InvalidRequestError("JWT config requires 'jwksUri', 'issuerBaseURL', or 'secret'");
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
...base,
|
|
109
|
+
key: createRemoteJWKSet(new URL(jwksUri)),
|
|
110
|
+
keyType: "jwks"
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
...base,
|
|
115
|
+
key: new TextEncoder().encode(secret),
|
|
116
|
+
keyType: "secret"
|
|
117
|
+
};
|
|
118
|
+
})();
|
|
27
119
|
}
|
|
120
|
+
return cached;
|
|
121
|
+
},
|
|
122
|
+
catch: (error) => error instanceof InvalidRequestError || error instanceof InvalidTokenError
|
|
123
|
+
? error
|
|
124
|
+
: new InvalidTokenError(getErrorMessage(error))
|
|
125
|
+
});
|
|
126
|
+
};
|
|
127
|
+
const verifyToken = (resolveConfig) => (token) => resolveConfig.pipe(Effect.flatMap((config) => {
|
|
128
|
+
const options = {
|
|
129
|
+
clockTolerance: config.clockTolerance,
|
|
130
|
+
...(config.tokenSigningAlg ? { algorithms: [config.tokenSigningAlg] } : {}),
|
|
131
|
+
...(config.audience !== undefined ? { audience: config.audience } : {}),
|
|
132
|
+
...(config.issuer !== undefined ? { issuer: config.issuer } : {}),
|
|
133
|
+
...(config.maxTokenAge !== undefined ? { maxTokenAge: config.maxTokenAge } : {})
|
|
134
|
+
};
|
|
135
|
+
const verified = config.keyType === "jwks"
|
|
136
|
+
? Effect.tryPromise({
|
|
137
|
+
try: () => jwtVerify(token, config.key, options).then(({ protectedHeader }) => ({ protectedHeader })),
|
|
138
|
+
catch: (error) => new InvalidTokenError(getErrorMessage(error))
|
|
139
|
+
})
|
|
140
|
+
: Effect.tryPromise({
|
|
141
|
+
try: () => jwtVerify(token, config.key, options).then(({ protectedHeader }) => ({ protectedHeader })),
|
|
142
|
+
catch: (error) => new InvalidTokenError(getErrorMessage(error))
|
|
28
143
|
});
|
|
144
|
+
return verified.pipe(Effect.flatMap(({ protectedHeader }) => {
|
|
145
|
+
const typ = protectedHeader.typ?.toLowerCase().replace(/^application\//, "");
|
|
146
|
+
return config.strict && typ !== "at+jwt"
|
|
147
|
+
? Effect.fail(new InvalidTokenError("Unexpected 'typ' value"))
|
|
148
|
+
: Effect.void;
|
|
149
|
+
}));
|
|
150
|
+
}));
|
|
151
|
+
export const checkJWTI = (config) => {
|
|
152
|
+
const resolveConfig = makeResolveConfig(config);
|
|
153
|
+
const verify = verifyToken(resolveConfig);
|
|
154
|
+
return Effect.fnUntraced(function* (headers) {
|
|
155
|
+
const token = yield* getAuthorizationToken(headers, config.authRequired !== false);
|
|
156
|
+
if (Option.isNone(token)) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
yield* verify(token.value);
|
|
29
160
|
});
|
|
30
161
|
};
|
|
31
162
|
export const checkJwt = (config) => {
|
|
32
163
|
const check = checkJWTI(config);
|
|
33
164
|
return HttpMiddleware.make((app) => Effect.gen(function* () {
|
|
34
165
|
const req = yield* HttpServerRequest.HttpServerRequest;
|
|
35
|
-
const response = yield* check(req.headers).pipe(Effect.catch((
|
|
36
|
-
status:
|
|
37
|
-
headers: HttpHeaders.fromInput(
|
|
166
|
+
const response = yield* check(req.headers).pipe(Effect.catch((error) => HttpServerResponse.json({ message: error.message }, {
|
|
167
|
+
status: error.status,
|
|
168
|
+
headers: HttpHeaders.fromInput(error.headers)
|
|
38
169
|
})));
|
|
39
170
|
if (response) {
|
|
40
171
|
return response;
|
|
@@ -44,4 +175,4 @@ export const checkJwt = (config) => {
|
|
|
44
175
|
};
|
|
45
176
|
export class JWTError extends Data.TaggedClass("JWTError") {
|
|
46
177
|
}
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvaW50ZXJuYWwvYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsa0RBQWtEO0FBQ2xELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDcEcsT0FBTyxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBT25JLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFO0lBQzFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN2QixPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUMsT0FBNEI7UUFDN0QsT0FBTyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUkzQixDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ1QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFhLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLEdBQUc7b0JBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUNwQyxJQUNFLEdBQUcsWUFBWSxzQkFBc0I7dUJBQ2xDLEdBQUcsWUFBWSxtQkFBbUI7dUJBQ2xDLEdBQUcsWUFBWSxpQkFBaUI7dUJBQ2hDLEdBQUcsWUFBWSxpQkFBaUIsRUFDbkMsQ0FBQztvQkFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7Z0JBQ2pDLENBQUM7Z0JBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQ2hDLENBQUMsQ0FBQTtZQUNELE1BQU0sQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQSxDQUFDLG1CQUFtQjtZQUMvRixJQUFJLENBQUM7Z0JBQ0gsRUFBRSxDQUFDLENBQVEsRUFBRSxFQUFTLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDL0IsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQzlCLENBQUM7UUFDSCxDQUFDLENBQ0YsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUU7SUFDekMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQy9CLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ2pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ2xCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFBO1FBQ3RELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNqRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzlDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTTtZQUNoQixPQUFPLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1NBQzFDLENBQUMsQ0FDSCxDQUFDLENBQUE7UUFDRixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsT0FBTyxRQUFRLENBQUE7UUFDakIsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFBO0lBQ25CLENBQUMsQ0FBQyxDQUNILENBQUE7QUFDSCxDQUFDLENBQUE7QUFFRCxNQUFNLE9BQU8sUUFBUyxTQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQU12RDtDQUFHIn0=
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvaW50ZXJuYWwvYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNwRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRXBELE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBYSxFQUFFLFdBQW1CLEVBQUUsTUFBOEIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxRixrQkFBa0IsRUFBRSw4QkFBOEIsS0FBSyx5QkFBeUIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQzVHLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQzdDLEVBQUU7Q0FDSCxDQUFDLENBQUE7QUFFRixNQUFNLE9BQU8saUJBQWtCLFNBQVEsS0FBSztJQUNqQyxNQUFNLEdBQVcsR0FBRyxDQUFBO0lBQ3BCLFVBQVUsR0FBVyxHQUFHLENBQUE7SUFDakMsT0FBTyxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQTtJQUV4RCxZQUFZLE9BQU8sR0FBRyxjQUFjO1FBQ2xDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUE7SUFDbkMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGlCQUFpQjtJQUMvQyxJQUFJLENBQVE7SUFDSCxNQUFNLEdBQUcsR0FBRyxDQUFB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
|
|
@@ -2,8 +2,8 @@ import { Effect, S, Stream } from "effect-app";
|
|
|
2
2
|
import { HttpServerResponse } from "effect-app/http";
|
|
3
3
|
export declare const makeSSE: <A extends {
|
|
4
4
|
id: any;
|
|
5
|
-
}, SI,
|
|
5
|
+
}, SI, SRD, SRE>(schema: S.Codec<A, SI, SRD, SRE>) => <E, R>(events: Stream.Stream<{
|
|
6
6
|
evt: A;
|
|
7
7
|
namespace: string;
|
|
8
|
-
}, E, R>) => Effect.Effect<HttpServerResponse.HttpServerResponse, never, Exclude<Exclude<
|
|
9
|
-
//# sourceMappingURL=
|
|
8
|
+
}, 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>>;
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL2ludGVybmFsL2V2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksTUFBTSxFQUFRLENBQUMsRUFBWSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDeEUsT0FBTyxFQUFlLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFXakUsZUFBTyxNQUFNLE9BQU8sR0FBSSxDQUFDLFNBQVM7SUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFBO0NBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsVUFDakQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFFakMsQ0FBQyxFQUFFLENBQUMsVUFBVSxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUFDLFNBQVMsRUFBRSxNQUFNLENBQUE7Q0FBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsc1FBd0QyQixDQUFBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/api/internal/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAAQ,CAAC,EAAY,MAAM,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAe,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/api/internal/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAAQ,CAAC,EAAY,MAAM,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAe,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAWjE,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,7 @@
|
|
|
1
1
|
import { Duration, Effect, pipe, S, Schedule, Stream } from "effect-app";
|
|
2
2
|
import { HttpHeaders, HttpServerResponse } from "effect-app/http";
|
|
3
3
|
import { reportError } from "../../errorReporter.js";
|
|
4
|
+
import { storeId } from "../../Store/Memory.js";
|
|
4
5
|
import { setupRequestContextFromCurrent } from "../setupRequest.js";
|
|
5
6
|
// Tell the client to retry every 10 seconds if connectivity is lost
|
|
6
7
|
const setRetry = Stream.succeed("retry: 10000");
|
|
@@ -9,22 +10,23 @@ let connId = BigInt(0);
|
|
|
9
10
|
export const makeSSE = (schema) => (events) => Effect
|
|
10
11
|
.gen(function* () {
|
|
11
12
|
const id = connId++;
|
|
12
|
-
const ctx = yield* Effect.
|
|
13
|
+
const ctx = yield* Effect.context();
|
|
13
14
|
const res = HttpServerResponse.stream(
|
|
14
15
|
// workaround for different scoped behaviour for streams in Bun
|
|
15
16
|
// https://discord.com/channels/795981131316985866/1098177242598756412/1389646879675125861
|
|
16
17
|
Effect
|
|
17
18
|
.gen(function* () {
|
|
19
|
+
const ns = yield* storeId;
|
|
18
20
|
yield* Effect.annotateCurrentSpan({ connectionId: id.toString() });
|
|
19
|
-
yield* Effect.logInfo("$ start listening to events, id: " + id.toString());
|
|
20
|
-
yield* Effect.addFinalizer(() => Effect.logInfo("$ end listening to events, id: " + id.toString()));
|
|
21
|
+
yield* Effect.logInfo("$ start listening to events, id: " + id.toString() + ", ns: " + ns);
|
|
22
|
+
yield* Effect.addFinalizer(() => Effect.logInfo("$ end listening to events, id: " + id.toString() + ", ns: " + ns));
|
|
21
23
|
const enc = new TextEncoder();
|
|
22
|
-
const encode = S.encodeEffect(S.fromJsonString(schema));
|
|
23
|
-
const eventStream = Stream.mapEffect(events, (_) => encode(_.evt)
|
|
24
|
+
const encode = S.encodeEffect(S.fromJsonString(S.toCodecJson(schema)));
|
|
25
|
+
const eventStream = Stream.mapEffect(Stream.filter(events, (_) => _.namespace === ns), (_) => encode(_.evt)
|
|
24
26
|
.pipe(Effect.map((data) => `id: ${_.evt.id}\ndata: ${data}`)));
|
|
25
27
|
const stream = pipe(setRetry, Stream.merge(keepAlive),
|
|
26
28
|
// 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")));
|
|
29
|
+
(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
30
|
return stream;
|
|
29
31
|
})
|
|
30
32
|
.pipe(Stream.unwrap, Stream.tapCause(reportError("Request")), Stream.provide(ctx)), {
|
|
@@ -39,4 +41,4 @@ export const makeSSE = (schema) => (events) => Effect
|
|
|
39
41
|
return res;
|
|
40
42
|
})
|
|
41
43
|
.pipe(Effect.tapCause(reportError("Request")), setupRequestContextFromCurrent("events"));
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9pbnRlcm5hbC9ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQy9DLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBRW5FLG9FQUFvRTtBQUNwRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0FBQy9DLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFFaEgsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBRXRCLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUNyQixNQUFnQyxFQUNoQyxFQUFFLENBQ0osQ0FBTyxNQUEwRCxFQUFFLEVBQUUsQ0FDbkUsTUFBTTtLQUNILEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDWixNQUFNLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQTtJQUNuQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFpQixDQUFBO0lBQ2xELE1BQU0sR0FBRyxHQUFHLGtCQUFrQixDQUFD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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,4 @@
|
|
|
1
|
-
import { Effect, type Layer, type NonEmptyReadonlyArray, Option
|
|
1
|
+
import { Context, Effect, type Layer, type NonEmptyReadonlyArray, Option } from "effect-app";
|
|
2
2
|
export declare namespace LayerUtils {
|
|
3
3
|
type GetLayersSuccess<Layers extends ReadonlyArray<Layer.Any>> = Layers extends NonEmptyReadonlyArray<Layer.Any> ? {
|
|
4
4
|
[k in keyof Layers]: Layer.Success<Layers[k]>;
|
|
@@ -10,15 +10,15 @@ export declare namespace LayerUtils {
|
|
|
10
10
|
[k in keyof Layers]: Layer.Error<Layers[k]>;
|
|
11
11
|
}[number] : Layer.Error<Layers[number]>;
|
|
12
12
|
}
|
|
13
|
-
export type ContextTagWithDefault<Id, A, LayerE, LayerR> =
|
|
13
|
+
export type ContextTagWithDefault<Id, A, LayerE, LayerR> = Context.Service<Id, A> & {
|
|
14
14
|
Default: Layer.Layer<Id, LayerE, LayerR>;
|
|
15
15
|
};
|
|
16
16
|
export declare namespace ContextTagWithDefault {
|
|
17
17
|
type Base<A> = ContextTagWithDefault<any, A, any, any>;
|
|
18
18
|
}
|
|
19
|
-
export type GetContext<T> = T extends
|
|
19
|
+
export type GetContext<T> = T extends Context.Context<infer Y> ? Y : never;
|
|
20
20
|
export declare const mergeContexts: <T extends readonly {
|
|
21
21
|
maker: any;
|
|
22
|
-
handle: Effect.Effect<
|
|
23
|
-
}[]>(makers: T) => Effect.Effect<
|
|
24
|
-
//# sourceMappingURL=
|
|
22
|
+
handle: Effect.Effect<Context.Context<any> | Option.Option<Context.Context<any>>>;
|
|
23
|
+
}[]>(makers: T) => Effect.Effect<Context.Context<Effect.Success<T[number]["handle"]>>, never, never>;
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXJVdGlscy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9sYXllclV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUsscUJBQXFCLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBTzVGLHlCQUFpQixVQUFVLENBQUMsQ0FBQztJQUMzQixLQUFZLGdCQUFnQixDQUFDLE1BQU0sU0FBUyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sU0FDNUUscUJBQXFCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHO1NBQ2hDLENBQUMsSUFBSSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM5QyxDQUFDLE1BQU0sQ0FBQyxHQUNQLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFFakMsS0FBWSxnQkFBZ0IsQ0FBQyxNQUFNLFNBQVMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLFNBQzVFLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRztTQUNoQyxDQUFDLElBQUksTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDL0MsQ0FBQyxNQUFNLENBQUMsR0FDUCxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBRWxDLEtBQVksY0FBYyxDQUFDLE1BQU0sU0FBUyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sU0FBUyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQ2pIO1NBQ0MsQ0FBQyxJQUFJLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzVDLENBQUMsTUFBTSxDQUFDLEdBQ1AsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtDQUNoQztBQUVELE1BQU0sTUFBTSxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQ25ELE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUN0QjtJQUNBLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7Q0FDekMsQ0FBQTtBQUVILHlCQUFpQixxQkFBcUIsQ0FBQyxDQUFDO0lBQ3RDLEtBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtDQUM5RDtBQUVELE1BQU0sTUFBTSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtBQUUxRSxlQUFPLE1BQU0sYUFBYSxHQUV0QixDQUFDLFNBQVMsU0FBUztJQUNqQixLQUFLLEVBQUUsR0FBRyxDQUFBO0lBQ1YsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQ2xGLEVBQUUsaUdBa0JOLENBQUEifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layerUtils.d.ts","sourceRoot":"","sources":["../../src/api/layerUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAE,KAAK,qBAAqB,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"layerUtils.d.ts","sourceRoot":"","sources":["../../src/api/layerUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAE,KAAK,qBAAqB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAO5F,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,16 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { Effect, Option
|
|
2
|
+
import { Context, Effect, Option } from "effect-app";
|
|
3
3
|
import { InfraLogger } from "../logger.js";
|
|
4
4
|
export const mergeContexts = Effect.fnUntraced(function* (makers) {
|
|
5
|
-
let context =
|
|
5
|
+
let context = Context.empty();
|
|
6
6
|
for (const mw of makers) {
|
|
7
7
|
const ctx = yield* mw.handle.pipe(Effect.provide(context));
|
|
8
|
-
const moreContext =
|
|
8
|
+
const moreContext = Context.isContext(ctx) ? Option.some(ctx) : ctx;
|
|
9
9
|
yield* InfraLogger.logDebug("Built dynamic context for middleware" + (mw.maker.key ?? mw.maker), Option.map(moreContext, (c) => c.toJSON().services));
|
|
10
10
|
if (moreContext.value) {
|
|
11
|
-
context =
|
|
11
|
+
context = Context.merge(context, moreContext.value);
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
return context;
|
|
15
15
|
});
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXJVdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvbGF5ZXJVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQTBDLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUM1RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBc0MxQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FDNUMsUUFBUSxDQUFDLEVBTVAsTUFBUztJQUVULElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUM3QixLQUFLLE1BQU0sRUFBRSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUMxRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUE7UUFDbkUsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FDekIsc0NBQXNDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQ25FLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBRSxDQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQzdELENBQUE7UUFDRCxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QixPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3JELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxPQUErRCxDQUFBO0FBQ3hFLENBQUMsQ0FDRixDQUFBIn0=
|
|
@@ -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
1
|
import { Effect } from "effect-app";
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0RXJyb3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcmVwb3J0RXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFTLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQTJCMUMsZUFBTyxNQUFNLGtCQUFrQixHQVJyQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLDJCQVFXLENBQUE7QUFDMUQsZUFBTyxNQUFNLHlCQUF5QixHQVQ1QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLDJCQVN3QixDQUFBIn0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type Context, type Layer } from "effect-app";
|
|
2
2
|
import { type GetContextConfig, type RpcContextMap } from "effect-app/rpc/RpcContextMap";
|
|
3
3
|
import { type RpcMiddlewareV4 } from "effect-app/rpc/RpcMiddleware";
|
|
4
4
|
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 +7,9 @@ MakeMiddlewareR, // what the middlware requires to be constructed
|
|
|
7
7
|
ContextProviderA, // what the context provider provides
|
|
8
8
|
ContextProviderE, // what the context provider may fail with
|
|
9
9
|
_ContextProviderR, // what the context provider requires
|
|
10
|
-
RequestContextId> =
|
|
10
|
+
RequestContextId> = Context.Service<Self, RpcMiddlewareV4<ContextProviderA, ContextProviderE, never>> & {
|
|
11
11
|
readonly Default: Layer.Layer<Self, MakeMiddlewareE, MakeMiddlewareR>;
|
|
12
|
-
readonly requestContext:
|
|
12
|
+
readonly requestContext: Context.Service<RequestContextId, GetContextConfig<RequestContextMap>>;
|
|
13
13
|
readonly requestContextMap: RequestContextMap;
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVyTWlkZGxld2FyZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaS9yb3V0aW5nL21pZGRsZXdhcmUvUm91dGVyTWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FBSyxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDckQsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQUUsS0FBSyxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUN4RixPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUtuRSxNQUFNLE1BQU0sZ0JBQWdCLENBQzFCLElBQUksRUFDSixpQkFBaUIsU0FBUyxNQUFNLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxxRkFBcUY7QUFDbEosZUFBZSxFQUFFLGlEQUFpRDtBQUNsRSxlQUFlLEVBQUUsZ0RBQWdEO0FBQ2pFLGdCQUFnQixFQUFFLHFDQUFxQztBQUN2RCxnQkFBZ0IsRUFBRSwwQ0FBMEM7QUFDNUQsaUJBQWlCLEVBQUUscUNBQXFDO0FBQ3hELGdCQUFnQixJQUVkLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUNqRjtJQUNBLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFBO0lBQ3JFLFFBQVEsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUE7SUFDL0YsUUFBUSxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixDQUFBO0NBQzlDLENBQUEifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouterMiddleware.d.ts","sourceRoot":"","sources":["../../../../src/api/routing/middleware/RouterMiddleware.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"RouterMiddleware.d.ts","sourceRoot":"","sources":["../../../../src/api/routing/middleware/RouterMiddleware.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAA;AACrD,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,45 @@
|
|
|
1
|
-
import { Config, Layer } from "effect";
|
|
1
|
+
import { Config, Effect, Layer, Schema } from "effect";
|
|
2
2
|
import { ConfigureInterruptibilityMiddleware, DevModeMiddleware, LoggerMiddleware, RequestCacheMiddleware } from "effect-app/middleware";
|
|
3
|
+
import { RpcContextMap, type RpcMiddleware } from "effect-app/rpc";
|
|
4
|
+
import * as Context from "effect/Context";
|
|
5
|
+
import { type Rpc } from "effect/unstable/rpc";
|
|
6
|
+
import { WithNsTransaction } from "../../../Store/SQL.js";
|
|
3
7
|
export declare const DevModeLive: Layer.Layer<never, Config.ConfigError, never>;
|
|
4
8
|
export declare const RequestCacheMiddlewareLive: Layer.Layer<RequestCacheMiddleware, never, never>;
|
|
9
|
+
export declare const RequestType: Context.Reference<"command" | "query">;
|
|
5
10
|
export declare const ConfigureInterruptibilityMiddlewareLive: Layer.Layer<ConfigureInterruptibilityMiddleware, never, never>;
|
|
6
11
|
export declare const LoggerMiddlewareLive: Layer.Layer<LoggerMiddleware, Config.ConfigError, never>;
|
|
7
12
|
export declare const DevModeMiddlewareLive: Layer.Layer<DevModeMiddleware, Config.ConfigError, never>;
|
|
8
|
-
export declare const DefaultGenericMiddlewaresLive: Layer.Layer<
|
|
9
|
-
|
|
13
|
+
export declare const DefaultGenericMiddlewaresLive: Layer.Layer<ConfigureInterruptibilityMiddleware | DevModeMiddleware | LoggerMiddleware | RequestCacheMiddleware, Config.ConfigError, never>;
|
|
14
|
+
/**
|
|
15
|
+
* Config entry for `RequestContextMap` that controls per-RPC transaction wrapping.
|
|
16
|
+
* Defaults to `false` (no transaction). Set `requiresTransaction: true` on a route to enable.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* class RequestContextMap extends RpcContextMap.makeMap({
|
|
21
|
+
* requiresTransaction: requiresTransactionConfig,
|
|
22
|
+
* // ...
|
|
23
|
+
* }) {}
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare const requiresTransactionConfig: RpcContextMap.RpcContextMap.Custom<never, Schema.Never, boolean>;
|
|
27
|
+
/**
|
|
28
|
+
* Creates the middleware Effect for SQL transaction wrapping.
|
|
29
|
+
* Requires `WithNsTransaction` service.
|
|
30
|
+
* Reads `requiresTransaction` from the RPC config; defaults to `false`.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* const SqlTransactionMiddlewareLive = Layer.effect(
|
|
35
|
+
* SqlTransactionMiddleware,
|
|
36
|
+
* makeSqlTransactionMiddleware(RequestContextMap)
|
|
37
|
+
* )
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export declare const makeSqlTransactionMiddleware: (rcm: {
|
|
41
|
+
getConfig: (rpc: Rpc.AnyWithProps) => {
|
|
42
|
+
readonly requiresTransaction?: boolean;
|
|
43
|
+
};
|
|
44
|
+
}) => Effect.Effect<RpcMiddleware.RpcMiddlewareV4<never, never, never>, never, WithNsTransaction>;
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaS9yb3V0aW5nL21pZGRsZXdhcmUvbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQVMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdELE9BQU8sRUFBRSxtQ0FBbUMsRUFBVyxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ2pKLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUdsRSxPQUFPLEtBQUssT0FBTyxNQUFNLGdCQUFnQixDQUFBO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBTXpELGVBQU8sTUFBTSxXQUFXLCtDQU12QixDQUFBO0FBRUQsZUFBTyxNQUFNLDBCQUEwQixtREFHdEMsQ0FBQTtBQUtELGVBQU8sTUFBTSxXQUFXLHdDQUd2QixDQUFBO0FBRUQsZUFBTyxNQUFNLHVDQUF1QyxnRUFjbkQsQ0FBQTtBQUVELGVBQU8sTUFBTSxvQkFBb0IsMERBMkRFLENBQUE7QUFFbkMsZUFBTyxNQUFNLHFCQUFxQiwyREFRQyxDQUFBO0FBRW5DLGVBQU8sTUFBTSw2QkFBNkIsNklBS3pDLENBQUE7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILGVBQU8sTUFBTSx5QkFBeUIsa0VBQWtELENBQUE7QUFFeEY7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsZUFBTyxNQUFNLDRCQUE0QjtlQUNyQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsWUFBWSxLQUFLO1FBQUUsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsT0FBTyxDQUFBO0tBQUU7aUdBU3ZGLENBQUEifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/routing/middleware/middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,MAAM,
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/routing/middleware/middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7D,OAAO,EAAE,mCAAmC,EAAW,iBAAiB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AACjJ,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAGlE,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,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"}
|