@effect-app/infra 2.85.0 → 2.87.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/api/layerUtils.d.ts +4 -8
  3. package/dist/api/layerUtils.d.ts.map +1 -1
  4. package/dist/api/layerUtils.js +3 -11
  5. package/dist/api/routing/middleware/ContextProvider.d.ts +2 -2
  6. package/dist/api/routing/middleware/ContextProvider.d.ts.map +1 -1
  7. package/dist/api/routing/middleware/RouterMiddleware.d.ts +33 -0
  8. package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +1 -0
  9. package/dist/api/routing/middleware/RouterMiddleware.js +5 -0
  10. package/dist/api/routing/middleware/RpcMiddleware.d.ts +199 -0
  11. package/dist/api/routing/middleware/RpcMiddleware.d.ts.map +1 -0
  12. package/dist/api/routing/middleware/RpcMiddleware.js +14 -0
  13. package/dist/api/routing/middleware/dynamic-middleware.d.ts +3 -13
  14. package/dist/api/routing/middleware/dynamic-middleware.d.ts.map +1 -1
  15. package/dist/api/routing/middleware/dynamic-middleware.js +2 -18
  16. package/dist/api/routing/middleware/generic-middleware.d.ts +15 -22
  17. package/dist/api/routing/middleware/generic-middleware.d.ts.map +1 -1
  18. package/dist/api/routing/middleware/generic-middleware.js +13 -9
  19. package/dist/api/routing/middleware/middleware-api.d.ts +55 -8
  20. package/dist/api/routing/middleware/middleware-api.d.ts.map +1 -1
  21. package/dist/api/routing/middleware/middleware-api.js +50 -14
  22. package/dist/api/routing/middleware/middleware.d.ts +8 -7
  23. package/dist/api/routing/middleware/middleware.d.ts.map +1 -1
  24. package/dist/api/routing/middleware/middleware.js +6 -5
  25. package/dist/api/routing/middleware.d.ts +2 -1
  26. package/dist/api/routing/middleware.d.ts.map +1 -1
  27. package/dist/api/routing/middleware.js +3 -2
  28. package/dist/api/routing/tsort.d.ts +2 -2
  29. package/dist/api/routing/tsort.d.ts.map +1 -1
  30. package/dist/api/routing/tsort.js +1 -1
  31. package/dist/api/routing.d.ts +0 -1
  32. package/dist/api/routing.d.ts.map +1 -1
  33. package/dist/api/routing.js +2 -3
  34. package/package.json +9 -5
  35. package/src/api/layerUtils.ts +7 -21
  36. package/src/api/routing/middleware/ContextProvider.ts +5 -5
  37. package/src/api/routing/middleware/RouterMiddleware.ts +149 -0
  38. package/src/api/routing/middleware/RpcMiddleware.ts +287 -0
  39. package/src/api/routing/middleware/dynamic-middleware.ts +9 -54
  40. package/src/api/routing/middleware/generic-middleware.ts +33 -33
  41. package/src/api/routing/middleware/middleware-api.ts +202 -32
  42. package/src/api/routing/middleware/middleware.ts +13 -5
  43. package/src/api/routing/middleware.ts +2 -1
  44. package/src/api/routing/tsort.ts +2 -2
  45. package/src/api/routing.ts +1 -9
  46. package/test/contextProvider.test.ts +1 -2
  47. package/test/controller.test.ts +35 -155
  48. package/test/dist/contextProvider.test.d.ts.map +1 -1
  49. package/test/dist/controller.test.d.ts.map +1 -1
  50. package/test/dist/fixtures.d.ts +146 -0
  51. package/test/dist/fixtures.d.ts.map +1 -0
  52. package/test/dist/fixtures.js +82 -0
  53. package/test/dist/layerUtils.test.d.ts.map +1 -0
  54. package/test/dist/query.test.d.ts.map +1 -1
  55. package/test/dist/requires.d.ts +21 -0
  56. package/test/dist/requires.d.ts.map +1 -0
  57. package/test/dist/requires.js +27 -0
  58. package/test/dist/requires.test.d.ts.map +1 -0
  59. package/test/fixtures.ts +102 -0
  60. package/test/layerUtils.test.ts +19 -0
  61. package/test/query.test.ts +2 -4
  62. package/test/requires.test.ts +156 -0
  63. package/dist/api/routing/middleware/DynamicMiddleware.d.ts +0 -215
  64. package/dist/api/routing/middleware/DynamicMiddleware.d.ts.map +0 -1
  65. package/dist/api/routing/middleware/DynamicMiddleware.js +0 -168
  66. package/src/api/routing/middleware/DynamicMiddleware.ts +0 -693
@@ -0,0 +1,102 @@
1
+ import { Context, Effect, Option, S, Scope } from "effect-app"
2
+ import { NotLoggedInError, type RPCContextMap, UnauthorizedError } from "effect-app/client"
3
+ import { TaggedError } from "effect-app/Schema"
4
+ import { contextMap, Middleware } from "../src/api/routing.js"
5
+
6
+ export class UserProfile extends Context.assignTag<UserProfile, UserProfile>("UserProfile")(
7
+ S.Class<UserProfile>("UserProfile")({
8
+ id: S.String,
9
+ roles: S.Array(S.String)
10
+ })
11
+ ) {
12
+ }
13
+
14
+ export class Some extends Context.TagMakeId("Some", Effect.succeed({ a: 1 }))<Some>() {}
15
+ export class SomeElse extends Context.TagMakeId("SomeElse", Effect.succeed({ b: 2 }))<SomeElse>() {}
16
+
17
+ export type RequestContextMap = {
18
+ allowAnonymous: RPCContextMap.Inverted<[typeof UserProfile], typeof NotLoggedInError>
19
+ requireRoles: RPCContextMap.Custom<never, typeof UnauthorizedError, Array<string>>
20
+ test: RPCContextMap<never, typeof S.Never>
21
+ }
22
+
23
+ export class AllowAnonymous extends Middleware.Tag<AllowAnonymous>()("AllowAnonymous", {
24
+ dynamic: contextMap<RequestContextMap>()("allowAnonymous", [UserProfile]),
25
+ requires: SomeElse
26
+ })({
27
+ effect: Effect.gen(function*() {
28
+ return Effect.fnUntraced(
29
+ function*({ config, headers }) {
30
+ yield* SomeElse
31
+ yield* Scope.Scope // provided by HttpRouter.HttpRouter.Provided
32
+ const isLoggedIn = !!headers["x-user"]
33
+ if (!isLoggedIn) {
34
+ if (!config.allowAnonymous) {
35
+ return yield* new NotLoggedInError({ message: "Not logged in" })
36
+ }
37
+ return Option.none()
38
+ }
39
+ return Option.some(
40
+ Context.make(
41
+ UserProfile,
42
+ new UserProfile({
43
+ id: "whatever",
44
+ roles: ["user", ...headers["x-is-manager"] === "true" ? ["manager"] : []]
45
+ })
46
+ )
47
+ )
48
+ }
49
+ )
50
+ })
51
+ }) {
52
+ }
53
+
54
+ // @effect-diagnostics-next-line missingEffectServiceDependency:off
55
+ export class RequireRoles extends Middleware.Tag<RequireRoles>()("RequireRoles", {
56
+ dynamic: contextMap<RequestContextMap>()("requireRoles", null as never), // TODO
57
+ wrap: true,
58
+ // wrap: true,
59
+ // had to move this in here, because once you put it manually as a readonly static property on the class,
60
+ // there's a weird issue where the fluent api stops behaving properly after adding this middleware via `addDynamicMiddleware`
61
+ dependsOn: [AllowAnonymous]
62
+ })({
63
+ effect: Effect.gen(function*() {
64
+ yield* Some
65
+ return Effect.fnUntraced(
66
+ function*({ config, next }) {
67
+ // we don't know if the service will be provided or not, so we use option..
68
+ const userProfile = yield* Effect.serviceOption(UserProfile)
69
+ const { requireRoles } = config
70
+ console.dir(
71
+ {
72
+ userProfile,
73
+ requireRoles
74
+ },
75
+ { depth: 5 }
76
+ )
77
+ if (requireRoles && !userProfile.value?.roles?.some((role) => requireRoles.includes(role))) {
78
+ return yield* new UnauthorizedError({ message: "don't have the right roles" })
79
+ }
80
+ return yield* next
81
+ }
82
+ )
83
+ })
84
+ }) {
85
+ }
86
+
87
+ export class Test extends Middleware.Tag<Test>()("Test", {
88
+ wrap: true,
89
+ dynamic: contextMap<RequestContextMap>()("test", null as never) // TODO
90
+ })({
91
+ effect: Effect.gen(function*() {
92
+ return Effect.fn(function*({ next }) {
93
+ return yield* next
94
+ })
95
+ })
96
+ }) {}
97
+
98
+ export class CustomError1 extends TaggedError<NotLoggedInError>()("CustomError1", {}) {}
99
+ export class CustomError2 extends TaggedError<NotLoggedInError>()("CustomError1", {}) {}
100
+
101
+ const MakeSomeService = Effect.succeed({ a: 1 })
102
+ export class SomeService extends Context.TagMakeId("SomeService", MakeSomeService)<SomeService>() {}
@@ -0,0 +1,19 @@
1
+ import { it } from "@effect/vitest"
2
+ import { type Layer } from "effect"
3
+ import { expectTypeOf } from "vitest/index.cjs"
4
+ import { type LayerUtils } from "../src/api/layerUtils.js"
5
+
6
+ it("works", () => {
7
+ type B = (Layer.Layer<void, "error-a", "a"> | Layer.Layer<void, "error-b", "b">)[]
8
+ type C = LayerUtils.GetLayersContext<B>
9
+ type CE = LayerUtils.GetLayersError<B>
10
+
11
+ expectTypeOf({} as C).toEqualTypeOf<"a" | "b">()
12
+ expectTypeOf({} as CE).toEqualTypeOf<"error-a" | "error-b">()
13
+
14
+ type B2 = [Layer.Layer<void, "error-a", "a">, Layer.Layer<void, "error-b", "b"> | Layer.Layer<void, "error-c", "c">]
15
+ type C2 = LayerUtils.GetLayersContext<B2>
16
+ type CE2 = LayerUtils.GetLayersError<B2>
17
+ expectTypeOf({} as C2).toEqualTypeOf<"a" | "b" | "c">()
18
+ expectTypeOf({} as CE2).toEqualTypeOf<"error-a" | "error-b" | "error-c">()
19
+ })
@@ -1,13 +1,14 @@
1
1
  /* eslint-disable unused-imports/no-unused-vars */
2
2
  /* eslint-disable @typescript-eslint/no-empty-object-type */
3
3
  /* eslint-disable @typescript-eslint/no-explicit-any */
4
- import { Context, Effect, flow, Layer, Option, pipe, S, Struct } from "effect-app"
4
+ import { Effect, flow, Layer, Option, pipe, S, Struct } from "effect-app"
5
5
  import { inspect } from "util"
6
6
  import { expect, expectTypeOf, it } from "vitest"
7
7
  import { setupRequestContextFromCurrent } from "../src/api/setupRequest.js"
8
8
  import { and, count, make, one, or, order, page, project, type QueryEnd, type QueryProjection, type QueryWhere, toFilter, where } from "../src/Model/query.js"
9
9
  import { makeRepo } from "../src/Model/Repository.js"
10
10
  import { memFilter, MemoryStoreLive } from "../src/Store/Memory.js"
11
+ import { SomeService } from "./fixtures.js"
11
12
 
12
13
  const str = S.Struct({ _tag: S.Literal("string"), value: S.String })
13
14
  const num = S.Struct({ _tag: S.Literal("number"), value: S.Number })
@@ -25,9 +26,6 @@ export declare namespace Something {
25
26
  export interface Encoded extends S.Schema.Encoded<typeof Something> {}
26
27
  }
27
28
 
28
- const MakeSomeService = Effect.succeed({ a: 1 })
29
- export class SomeService extends Context.TagMakeId("SomeService", MakeSomeService)<SomeService>() {}
30
-
31
29
  const q = make<Something.Encoded>()
32
30
  .pipe( // provided automatically inside Repo.q2()
33
31
  where("displayName", "Verona"),
@@ -0,0 +1,156 @@
1
+ import { expect, expectTypeOf, it } from "@effect/vitest"
2
+ import { Effect, Either, Layer, S } from "effect-app"
3
+ import { NotLoggedInError, UnauthorizedError } from "effect-app/client"
4
+ import { makeMiddleware, Middleware } from "../src/api/routing.js"
5
+ import { AllowAnonymous, type RequestContextMap, RequireRoles, Some, SomeElse, Test } from "./fixtures.js"
6
+
7
+ export class SomeMiddleware extends Middleware.Tag<SomeMiddleware>()("SomeMiddleware", {
8
+ provides: Some
9
+ })({
10
+ effect: Effect.gen(function*() {
11
+ // yield* Effect.context<"test-dep">()
12
+ return () =>
13
+ Effect.gen(function*() {
14
+ return new Some({ a: 1 })
15
+ })
16
+ })
17
+ }) {
18
+ }
19
+
20
+ export class SomeElseMiddleware extends Middleware.Tag<SomeElseMiddleware>()("SomeElseMiddleware", {
21
+ provides: SomeElse,
22
+ wrap: true
23
+ })({
24
+ effect: Effect.gen(function*() {
25
+ // yield* Effect.context<"test-dep">()
26
+ return ({ next }) =>
27
+ Effect.gen(function*() {
28
+ // yield* Effect.context<"test-dep2">()
29
+ return yield* next.pipe(Effect.provideService(SomeElse, new SomeElse({ b: 2 })))
30
+ })
31
+ })
32
+ }) {
33
+ }
34
+
35
+ export class RequiresSomeMiddleware extends Middleware.Tag<RequiresSomeMiddleware>()("RequiresSomeMiddleware", {
36
+ requires: [Some],
37
+ wrap: true
38
+ })({
39
+ effect: Effect.gen(function*() {
40
+ // yield* Effect.context<"test-dep">()
41
+ return ({ next }) =>
42
+ Effect.gen(function*() {
43
+ yield* Some
44
+ // yield* Effect.context<"test-dep2">()
45
+ return yield* next
46
+ })
47
+ })
48
+ }) {
49
+ }
50
+
51
+ it("requires gets enforced", async () => {
52
+ const middleware3 = makeMiddleware<RequestContextMap>()
53
+ .middleware(RequiresSomeMiddleware)
54
+ .middleware(SomeMiddleware)
55
+ .middleware(RequireRoles)
56
+ .middleware(AllowAnonymous, Test)
57
+ .middleware(SomeElseMiddleware)
58
+
59
+ const layer = middleware3.Default.pipe(Layer.provide(Layer.succeed(Some, new Some({ a: 1 }))))
60
+
61
+ type Default = typeof middleware3["Default"]
62
+ type LayerContext = Layer.Layer.Context<Default>
63
+ expectTypeOf({} as LayerContext).toEqualTypeOf<Some>()
64
+
65
+ await Effect
66
+ .gen(function*() {
67
+ const mw = yield* middleware3
68
+ const mwM = mw.effect(
69
+ Object.assign({}, S.Any, { config: { requireRoles: ["manager"] } }),
70
+ (_req) => Effect.void,
71
+ "some-module"
72
+ )
73
+ yield* mwM({}, { "x-user": "test-user", "x-is-manager": "true" })
74
+ })
75
+ .pipe(
76
+ Effect.scoped,
77
+ Effect.provide(layer),
78
+ Effect.runPromise
79
+ )
80
+
81
+ await Effect
82
+ .gen(function*() {
83
+ const mw = yield* middleware3
84
+ const mwM = mw.effect(
85
+ Object.assign({}, S.Any, { config: { allowAnonymous: true } }),
86
+ (_req) => Effect.void,
87
+ "some-module"
88
+ )
89
+ yield* mwM({}, {})
90
+ })
91
+ .pipe(
92
+ Effect.scoped,
93
+ Effect.provide(layer),
94
+ Effect.runPromise
95
+ )
96
+
97
+ expect(
98
+ await Effect
99
+ .gen(function*() {
100
+ const mw = yield* middleware3
101
+ const mwM = mw.effect(
102
+ Object.assign({}, S.Any, { config: {} }),
103
+ (_req) => Effect.void,
104
+ "some-module"
105
+ )
106
+ yield* mwM({}, {})
107
+ })
108
+ .pipe(
109
+ Effect.scoped,
110
+ Effect.provide(layer),
111
+ Effect.either,
112
+ Effect.runPromise
113
+ )
114
+ )
115
+ .toEqual(Either.left(new NotLoggedInError()))
116
+
117
+ expect(
118
+ await Effect
119
+ .gen(function*() {
120
+ const mw = yield* middleware3
121
+ const mwM = mw.effect(
122
+ Object.assign({}, S.Any, { config: { requireRoles: ["manager"] } }),
123
+ (_req) => Effect.void,
124
+ "some-module"
125
+ )
126
+ yield* mwM({}, {})
127
+ })
128
+ .pipe(
129
+ Effect.scoped,
130
+ Effect.provide(layer),
131
+ Effect.either,
132
+ Effect.runPromise
133
+ )
134
+ )
135
+ .toEqual(Either.left(new NotLoggedInError()))
136
+
137
+ expect(
138
+ await Effect
139
+ .gen(function*() {
140
+ const mw = yield* middleware3
141
+ const mwM = mw.effect(
142
+ Object.assign({}, S.Any, { config: { requireRoles: ["manager"] } }),
143
+ (_req) => Effect.void,
144
+ "some-module"
145
+ )
146
+ yield* mwM({}, { "x-user": "test-user" })
147
+ })
148
+ .pipe(
149
+ Effect.scoped,
150
+ Effect.provide(layer),
151
+ Effect.either,
152
+ Effect.runPromise
153
+ )
154
+ )
155
+ .toEqual(Either.left(new UnauthorizedError({ message: "don't have the right roles" })))
156
+ })
@@ -1,215 +0,0 @@
1
- import { Rpc, RpcMiddleware } from "@effect/rpc";
2
- import { type SuccessValue, type TypeId } from "@effect/rpc/RpcMiddleware";
3
- import { Context, Effect, Layer, type NonEmptyReadonlyArray, type Option, type Request, type S, type Schema, type Scope } from "effect-app";
4
- import type { GetEffectContext, RPCContextMap } from "effect-app/client/req";
5
- import { type HttpHeaders } from "effect-app/http";
6
- import type * as EffectRequest from "effect/Request";
7
- import { type ContextTagWithDefault, type LayerUtils } from "../../layerUtils.js";
8
- import { type ContextWithLayer } from "./dynamic-middleware.js";
9
- import { type ContextRepr, type GenericMiddlewareMaker } from "./generic-middleware.js";
10
- export type MakeRPCHandlerFactory<RequestContextMap extends Record<string, RPCContextMap.Any>, MiddlewareR> = <T extends {
11
- config?: Partial<Record<keyof RequestContextMap, any>>;
12
- }, Req extends S.TaggedRequest.All, HandlerR>(schema: T & S.Schema<Req, any, never>, next: (request: Req, headers: any) => Effect.Effect<EffectRequest.Request.Success<Req>, EffectRequest.Request.Error<Req>, Exclude<HandlerR, GetEffectContext<RequestContextMap, (T & S.Schema<Req, any, never>)["config"]>>>, moduleName: string) => (req: Req, headers: any) => Effect.Effect<Request.Request.Success<Req>, Request.Request.Error<Req> | RequestContextMapErrors<RequestContextMap>, MiddlewareR | Exclude<HandlerR, GetEffectContext<RequestContextMap, (T & S.Schema<Req, any, never>)["config"]>>>;
13
- export type RPCHandlerFactory<RequestContextMap extends Record<string, RPCContextMap.Any>, ContextProviderA> = <T extends {
14
- config?: Partial<Record<keyof RequestContextMap, any>>;
15
- }, Req extends S.TaggedRequest.All, HandlerR>(schema: T & S.Schema<Req, any, never>, next: (request: Req, headers: any) => Effect.Effect<EffectRequest.Request.Success<Req>, EffectRequest.Request.Error<Req>, HandlerR>, moduleName: string) => (req: Req, headers: any) => Effect.Effect<Request.Request.Success<Req>, Request.Request.Error<Req> | RequestContextMapErrors<RequestContextMap>, Scope.Scope | Exclude<Exclude<HandlerR, GetEffectContext<RequestContextMap, (T & S.Schema<Req, any, never>)["config"]>>, ContextProviderA>>;
16
- export type RequestContextMapProvider<RequestContextMap extends Record<string, RPCContextMap.Any>> = {
17
- [K in keyof RequestContextMap]: ContextWithLayer.Base<{
18
- [K in keyof RequestContextMap]?: RequestContextMap[K]["contextActivation"];
19
- }, RequestContextMap[K]["service"], S.Schema.Type<RequestContextMap[K]["error"]>>;
20
- };
21
- export interface MiddlewareMake<RequestContextMap extends Record<string, RPCContextMap.Any>, // what services will the middleware provide dynamically to the next, or raise errors.
22
- DynamicMiddlewareProviders extends RequestContextMapProvider<RequestContextMap>, // how to resolve the dynamic middleware
23
- GenericMiddlewareProviders extends NonEmptyReadonlyArray<GenericMiddlewareMaker>, MakeMiddlewareE, // what the middleware construction can fail with
24
- MakeMiddlewareR, // what the middleware requires to be constructed
25
- MiddlewareDependencies extends NonEmptyReadonlyArray<Layer.Layer.Any>> {
26
- dynamicMiddlewares: DynamicMiddlewareProviders;
27
- /** generic middlewares are those which follow the (next) => (input, headers) => pattern */
28
- genericMiddlewares: GenericMiddlewareProviders;
29
- dependencies?: MiddlewareDependencies;
30
- execute?: (maker: (cb: MakeRPCHandlerFactory<RequestContextMap, GenericMiddlewareMaker.Provided<GenericMiddlewareProviders[number]> | Scope.Scope>) => MakeRPCHandlerFactory<RequestContextMap, GenericMiddlewareMaker.Provided<GenericMiddlewareProviders[number]> | Scope.Scope>) => Effect<MakeRPCHandlerFactory<RequestContextMap, GenericMiddlewareMaker.Provided<GenericMiddlewareProviders[number]> | Scope.Scope>, MakeMiddlewareE, MakeMiddlewareR | Scope>;
31
- }
32
- export interface MiddlewareMakerId {
33
- _tag: "MiddlewareMaker";
34
- }
35
- export type RouterMiddleware<RequestContextMap extends Record<string, RPCContextMap.Any>, // what services will the middlware provide dynamically to the next, or raise errors.
36
- MakeMiddlewareE, // what the middleware construction can fail with
37
- MakeMiddlewareR, // what the middlware requires to be constructed
38
- ContextProviderA> = ContextTagWithDefault<MiddlewareMakerId, {
39
- _tag: "MiddlewareMaker";
40
- effect: RPCHandlerFactory<RequestContextMap, ContextProviderA>;
41
- }, MakeMiddlewareE, MakeMiddlewareR>;
42
- export type RequestContextMapErrors<RequestContextMap extends Record<string, RPCContextMap.Any>> = S.Schema.Type<RequestContextMap[keyof RequestContextMap]["error"]>;
43
- export declare const makeMiddleware: <RequestContextMap extends Record<string, RPCContextMap.Any>>() => <RequestContextProviders extends RequestContextMapProvider<RequestContextMap>, // how to resolve the dynamic middleware
44
- GenericMiddlewareProviders extends NonEmptyReadonlyArray<GenericMiddlewareMaker>, MiddlewareDependencies extends NonEmptyReadonlyArray<Layer.Layer.Any>, // layers provided for the middlware to be constructed
45
- MakeMiddlewareE = never, // what the middleware construction can fail with
46
- MakeMiddlewareR = never>(make: MiddlewareMake<RequestContextMap, RequestContextProviders, GenericMiddlewareProviders, MakeMiddlewareE, MakeMiddlewareR, MiddlewareDependencies>) => Context.Tag<MiddlewareMakerId, {
47
- effect: RPCHandlerFactory<RequestContextMap, GenericMiddlewareMaker.Provided<GenericMiddlewareProviders[number]>>;
48
- _tag: "MiddlewareMaker";
49
- }> & {
50
- Default: Layer.Layer<MiddlewareMakerId, MakeMiddlewareE | LayerUtils.GetLayersError<[...{ [K in keyof GenericMiddlewareProviders]: GenericMiddlewareProviders[K]["Default"]; }]>, LayerUtils.GetLayersContext<MiddlewareDependencies> | LayerUtils.GetLayersContext<[...{ [K in keyof GenericMiddlewareProviders]: GenericMiddlewareProviders[K]["Default"]; }]> | Exclude<MakeMiddlewareR, LayerUtils.GetLayersSuccess<MiddlewareDependencies>>>;
51
- };
52
- export declare const makeMiddlewareBasic: <RequestContextMap extends Record<string, RPCContextMap.Any>, RequestContextProviders extends RequestContextMapProvider<RequestContextMap>, // how to resolve the dynamic middleware
53
- GenericMiddlewareProviders extends NonEmptyReadonlyArray<GenericMiddlewareMaker>>(make: MiddlewareMake<RequestContextMap, RequestContextProviders, GenericMiddlewareProviders, never, never, never>) => Context.Tag<MiddlewareMakerId, {
54
- effect: RPCHandlerFactory<RequestContextMap, GenericMiddlewareMaker.Provided<GenericMiddlewareProviders[number]>>;
55
- _tag: "MiddlewareMaker";
56
- }> & {
57
- Default: Layer.Layer<MiddlewareMakerId, LayerUtils.GetLayersError<[...{ [K in keyof GenericMiddlewareProviders]: GenericMiddlewareProviders[K]["Default"]; }]>, LayerUtils.GetLayersContext<[...{ [K in keyof GenericMiddlewareProviders]: GenericMiddlewareProviders[K]["Default"]; }]>>;
58
- };
59
- export interface RpcMiddleware<Provides, E> {
60
- (options: {
61
- readonly clientId: number;
62
- readonly rpc: Rpc.AnyWithProps;
63
- readonly payload: unknown;
64
- readonly headers: HttpHeaders.Headers;
65
- }): Effect.Effect<Provides, E, Scope.Scope>;
66
- }
67
- export interface RpcMiddlewareWrap<Provides, E> {
68
- (options: {
69
- readonly clientId: number;
70
- readonly rpc: Rpc.AnyWithProps;
71
- readonly payload: unknown;
72
- readonly headers: HttpHeaders.Headers;
73
- readonly next: Effect.Effect<SuccessValue, E, Provides | Scope.Scope>;
74
- }): Effect.Effect<SuccessValue, E, Scope.Scope>;
75
- }
76
- type RpcOptionsOriginal = {
77
- readonly wrap?: boolean;
78
- readonly optional?: boolean;
79
- readonly failure?: Schema.Schema.All;
80
- readonly provides?: Context.Tag<any, any> | ContextRepr;
81
- readonly requiredForClient?: boolean;
82
- };
83
- type RpcDynamic<Key extends string, A extends RPCContextMap.Any> = {
84
- key: Key;
85
- settings: A;
86
- };
87
- type RpcOptionsDynamic<Key extends string, A extends RPCContextMap.Any> = RpcOptionsOriginal & {
88
- readonly dynamic: RpcDynamic<Key, A>;
89
- readonly dependsOn?: NonEmptyReadonlyArray<TagClassDynamicAny<any>>;
90
- };
91
- export type Dynamic<Options> = Options extends RpcOptionsDynamic<any, any> ? true : false;
92
- export interface RpcMiddlewareDynamic<A, E, Config> {
93
- (options: {
94
- readonly config: Config;
95
- readonly clientId: number;
96
- readonly rpc: Rpc.AnyWithProps;
97
- readonly payload: unknown;
98
- readonly headers: HttpHeaders.Headers;
99
- }): Effect.Effect<Option.Option<Context.Context<A>>, E, Scope.Scope>;
100
- }
101
- export interface TagClassDynamicAny<RequestContext extends Record<string, RPCContextMap.Any>> extends Context.Tag<any, any> {
102
- readonly [RpcMiddleware.TypeId]: RpcMiddleware.TypeId;
103
- readonly optional: boolean;
104
- readonly provides?: Context.Tag<any, any> | undefined;
105
- readonly failure: Schema.Schema.All;
106
- readonly requiredForClient: boolean;
107
- readonly dynamic: RpcDynamic<any, RequestContext[keyof RequestContext]>;
108
- readonly wrap: boolean;
109
- readonly dependsOn?: any;
110
- }
111
- export declare namespace TagClass {
112
- /**
113
- * @since 1.0.0
114
- * @category models
115
- */
116
- type Provides<Options> = Options extends {
117
- readonly provides: Context.Tag<any, any>;
118
- readonly optional?: false;
119
- } ? Context.Tag.Identifier<Options["provides"]> : Options extends {
120
- readonly provides: ContextRepr;
121
- readonly optional?: false;
122
- } ? ContextRepr.Identifier<Options["provides"]> : never;
123
- /**
124
- * @since 1.0.0
125
- * @category models
126
- */
127
- type Service<Options> = Options extends {
128
- readonly provides: Context.Tag<any, any>;
129
- } ? Context.Tag.Service<Options["provides"]> : Options extends {
130
- readonly dynamic: RpcDynamic<any, infer A>;
131
- } ? A["service"] : Options extends {
132
- readonly provides: ContextRepr;
133
- } ? Context.Context<ContextRepr.Identifier<Options["provides"]>> : void;
134
- /**
135
- * @since 1.0.0
136
- * @category models
137
- */
138
- type FailureSchema<Options> = Options extends {
139
- readonly failure: Schema.Schema.All;
140
- readonly optional?: false;
141
- } ? Options["failure"] : Options extends {
142
- readonly dynamic: RpcDynamic<any, infer A>;
143
- } ? A["error"] : typeof Schema.Never;
144
- /**
145
- * @since 1.0.0
146
- * @category models
147
- */
148
- type Failure<Options> = Options extends {
149
- readonly failure: Schema.Schema<infer _A, infer _I, infer _R>;
150
- readonly optional?: false;
151
- } ? _A : Options extends {
152
- readonly dynamic: RpcDynamic<any, infer A>;
153
- } ? S.Schema.Type<A["error"]> : never;
154
- /**
155
- * @since 1.0.0
156
- * @category models
157
- */
158
- type FailureContext<Options> = Schema.Schema.Context<FailureSchema<Options>>;
159
- /**
160
- * @since 1.0.0
161
- * @category models
162
- */
163
- type FailureService<Options> = Optional<Options> extends true ? unknown : Failure<Options>;
164
- /**
165
- * @since 1.0.0
166
- * @category models
167
- */
168
- type Optional<Options> = Options extends {
169
- readonly optional: true;
170
- } ? true : false;
171
- /**
172
- * @since 1.0.0
173
- * @category models
174
- */
175
- type RequiredForClient<Options> = Options extends {
176
- readonly requiredForClient: true;
177
- } ? true : false;
178
- /**
179
- * @since 1.0.0
180
- * @category models
181
- */
182
- type Wrap<Options> = Options extends {
183
- readonly wrap: true;
184
- } ? true : false;
185
- /**
186
- * @since 1.0.0
187
- * @category models
188
- */
189
- interface Base<Self, Name extends string, Options, Service> extends Context.Tag<Self, Service> {
190
- new (_: never): Context.TagClassShape<Name, Service>;
191
- readonly [TypeId]: TypeId;
192
- readonly optional: Optional<Options>;
193
- readonly failure: FailureSchema<Options>;
194
- readonly provides: Options extends {
195
- readonly provides: Context.Tag<any, any>;
196
- } ? Options["provides"] : Options extends {
197
- readonly provides: ContextRepr;
198
- } ? Options["provides"] : undefined;
199
- readonly dynamic: Options extends RpcOptionsDynamic<any, any> ? Options["dynamic"] : undefined;
200
- readonly requiredForClient: RequiredForClient<Options>;
201
- readonly wrap: Wrap<Options>;
202
- }
203
- }
204
- export interface TagClass<Self, Name extends string, Options> extends TagClass.Base<Self, Name, Options, TagClass.Wrap<Options> extends true ? RpcMiddlewareWrap<TagClass.Provides<Options>, TagClass.Failure<Options>> : Options extends RpcOptionsDynamic<any, any> ? RpcMiddlewareDynamic<TagClass.Service<Options>, TagClass.FailureService<Options>, {
205
- [K in Options["dynamic"]["key"]]?: Options["dynamic"]["settings"]["contextActivation"];
206
- }> : RpcMiddleware<TagClass.Service<Options>, TagClass.FailureService<Options>>> {
207
- }
208
- export declare const Tag: <Self>() => <const Name extends string, const Options extends RpcOptionsOriginal | RpcOptionsDynamic<any, any>>(id: Name, options?: Options | undefined) => <E, R, L extends NonEmptyReadonlyArray<Layer.Layer.Any>>(opts: {
209
- effect: Effect.Effect<TagClass.Wrap<Options> extends true ? RpcMiddlewareWrap<TagClass.Provides<Options>, TagClass.Failure<Options>> : Options extends RpcOptionsDynamic<any, any> ? RpcMiddlewareDynamic<TagClass.Service<Options>, TagClass.FailureService<Options>, { [K in Options["dynamic"]["key"]]?: Options["dynamic"]["settings"]["contextActivation"]; }> : RpcMiddleware<TagClass.Service<Options>, TagClass.FailureService<Options>>, E, R>;
210
- dependencies?: L;
211
- }) => TagClass<Self, Name, Options> & {
212
- Default: Layer.Layer<Self, E | LayerUtils.GetLayersError<L>, Exclude<R, LayerUtils.GetLayersSuccess<L>>>;
213
- };
214
- export {};
215
- //# sourceMappingURL=DynamicMiddleware.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DynamicMiddleware.d.ts","sourceRoot":"","sources":["../../../../src/api/routing/middleware/DynamicMiddleware.ts"],"names":[],"mappings":"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"}