@shivaedev/server 0.2.0 → 0.3.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 (57) hide show
  1. package/README.md +26 -2
  2. package/dist/AppHostFactory.d.ts +9 -8
  3. package/dist/AppHostFactory.d.ts.map +1 -1
  4. package/dist/AppHostInput.d.ts +4 -3
  5. package/dist/AppHostInput.d.ts.map +1 -1
  6. package/dist/appHost.d.ts +30 -5
  7. package/dist/appHost.d.ts.map +1 -1
  8. package/dist/appHost.js +4 -3
  9. package/dist/appHost.js.map +1 -1
  10. package/dist/appHostHttp.d.ts +44 -45
  11. package/dist/appHostHttp.d.ts.map +1 -1
  12. package/dist/appHostHttp.js +13 -42
  13. package/dist/appHostHttp.js.map +1 -1
  14. package/dist/healthRoute.d.ts.map +1 -1
  15. package/dist/healthRoute.js +3 -2
  16. package/dist/healthRoute.js.map +1 -1
  17. package/dist/hostApplicationRoutes.d.ts +3 -0
  18. package/dist/hostApplicationRoutes.d.ts.map +1 -0
  19. package/dist/hostApplicationRoutes.js +6 -0
  20. package/dist/hostApplicationRoutes.js.map +1 -0
  21. package/dist/hostChanges.js +1 -1
  22. package/dist/hostChanges.js.map +1 -1
  23. package/dist/hostOptions.d.ts +6 -2
  24. package/dist/hostOptions.d.ts.map +1 -1
  25. package/dist/hostRpc.d.ts +11 -0
  26. package/dist/hostRpc.d.ts.map +1 -0
  27. package/dist/hostRpc.js +20 -0
  28. package/dist/hostRpc.js.map +1 -0
  29. package/dist/hostRpcRoutes.d.ts +23 -0
  30. package/dist/hostRpcRoutes.d.ts.map +1 -0
  31. package/dist/hostRpcRoutes.js +29 -0
  32. package/dist/hostRpcRoutes.js.map +1 -0
  33. package/dist/nativeClientOrigins.d.ts +2 -1
  34. package/dist/nativeClientOrigins.d.ts.map +1 -1
  35. package/dist/nativeClientOrigins.js +11 -5
  36. package/dist/nativeClientOrigins.js.map +1 -1
  37. package/dist/nodeHttpServer.d.ts +7 -0
  38. package/dist/nodeHttpServer.d.ts.map +1 -0
  39. package/dist/nodeHttpServer.js +15 -0
  40. package/dist/nodeHttpServer.js.map +1 -0
  41. package/dist/otlpHttpClient.d.ts.map +1 -1
  42. package/dist/otlpHttpClient.js +2 -1
  43. package/dist/otlpHttpClient.js.map +1 -1
  44. package/package.json +11 -10
  45. package/src/AppHostFactory.ts +47 -44
  46. package/src/AppHostInput.ts +27 -4
  47. package/src/appHost.ts +25 -7
  48. package/src/appHostHttp.ts +65 -69
  49. package/src/healthRoute.ts +3 -2
  50. package/src/hostApplicationRoutes.ts +8 -0
  51. package/src/hostChanges.ts +2 -2
  52. package/src/hostOptions.ts +20 -2
  53. package/src/hostRpc.ts +26 -0
  54. package/src/hostRpcRoutes.ts +57 -0
  55. package/src/nativeClientOrigins.ts +16 -5
  56. package/src/nodeHttpServer.ts +24 -0
  57. package/src/otlpHttpClient.ts +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"hostChanges.js","sourceRoot":"","sources":["../src/hostChanges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhE,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAG3E,MAAM,UAAU,WAAW,CAAoB,KAA2B,EAAE,cAAiC;IAC5G,OAAO,KAAK,CAAC,aAAa,CACzB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAS,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC5C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACrC,SAAS;YACV,CAAC;YACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjD,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACtD,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAChC,SAAS;YACV,CAAC;YACD,SAAS,OAAO,CAAC,EAAE,OAAO,EAAmD;gBAC5E,OAAO,MAAM,CAAC,MAAM,CACnB,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAC9D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAC3E,CACD,CAAC;YACH,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,OAAO,CAAC,UAAU,CAAqE,QAAQ,CAAC,CAAC;IACzG,CAAC,CAAC,CACF,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"hostChanges.js","sourceRoot":"","sources":["../src/hostChanges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhE,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAG3E,MAAM,UAAU,WAAW,CAAoB,KAA2B,EAAE,cAAiC;IAC5G,OAAO,KAAK,CAAC,aAAa,CACzB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAS,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC5C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACrC,SAAS;YACV,CAAC;YACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjD,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACtD,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAChC,SAAS;YACV,CAAC;YACD,SAAS,OAAO,CAAC,EAAE,OAAO,EAAmD;gBAC5E,OAAO,MAAM,CAAC,MAAM,CACnB,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,EAAE,CACtE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACtF,CACD,CAAC;YACH,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,OAAO,CAAC,UAAU,CAAqE,QAAQ,CAAC,CAAC;IACzG,CAAC,CAAC,CACF,CAAC;AACH,CAAC"}
@@ -3,7 +3,8 @@ import type { HttpRouter, HttpStaticServer } from "effect/http";
3
3
  import type { Rpc, RpcGroup } from "effect/rpc";
4
4
  import type { SessionPolicy, SessionShape } from "@shivaedev/identity/server/session.ts";
5
5
  import type { AppDatabaseOptions } from "./appHost.ts";
6
- export type HostOptions<TRpcs extends Rpc.Any, THandlers, THandlerError, THandlerRequirements, TServices, TServiceError, TServiceRequirements> = {
6
+ export type HostRouteRequirements = HttpRouter.HttpRouter | HttpRouter.Request<"Error", unknown>;
7
+ export type HostCoreOptions<TRpcs extends Rpc.Any, THandlers, THandlerError, THandlerRequirements, TServices, TServiceError, TServiceRequirements> = {
7
8
  readonly assets?: string | Parameters<typeof HttpStaticServer.layer>[0];
8
9
  readonly config?: AppDatabaseOptions["config"] & {
9
10
  readonly port?: number;
@@ -17,13 +18,16 @@ export type HostOptions<TRpcs extends Rpc.Any, THandlers, THandlerError, THandle
17
18
  readonly group: RpcGroup.RpcGroup<TRpcs>;
18
19
  readonly handlers: Layer.Layer<THandlers, THandlerError, THandlerRequirements>;
19
20
  readonly nativeOrigins?: readonly string[];
20
- readonly routes?: Layer.Layer<never, never, HttpRouter.HttpRouter | HttpRouter.Request<"Error", unknown>>;
21
21
  readonly rpcPath?: HttpRouter.PathInput;
22
22
  } & ({
23
23
  readonly services: Layer.Layer<TServices, TServiceError, TServiceRequirements>;
24
24
  } | ([TServices | TServiceError | TServiceRequirements] extends [never] ? {
25
25
  readonly services?: never;
26
26
  } : never));
27
+ export interface HostRoutes<TRouteError = never, TRouteRequirements = HostRouteRequirements> {
28
+ readonly routes?: Layer.Layer<never, TRouteError, TRouteRequirements>;
29
+ }
30
+ export type HostOptions<TRpcs extends Rpc.Any, THandlers, THandlerError, THandlerRequirements, TServices, TServiceError, TServiceRequirements, TRouteError = never, TRouteRequirements = HostRouteRequirements> = HostCoreOptions<TRpcs, THandlers, THandlerError, THandlerRequirements, TServices, TServiceError, TServiceRequirements> & HostRoutes<TRouteError, TRouteRequirements>;
27
31
  export type HostPolicy<TSession extends SessionShape> = {
28
32
  readonly policy?: undefined;
29
33
  readonly sessions: SessionPolicy<TSession>;
@@ -1 +1 @@
1
- {"version":3,"file":"hostOptions.d.ts","sourceRoot":"","sources":["../src/hostOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,MAAM,WAAW,CAAC,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,IAAI;IAChJ,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG;QAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAC3C,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;QAC7C,QAAQ,CAAC,uBAAuB,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;KAClD,CAAC;IACF,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC;IAC/E,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1G,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC;CACxC,GAAG,CACD;IAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAA;CAAE,GAClF,CAAC,CAAC,SAAS,GAAG,aAAa,GAAG,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG,KAAK,CAAC,CAC9G,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,QAAQ,SAAS,YAAY,IACjD;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;CAAE,GAC3E;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC"}
1
+ {"version":3,"file":"hostOptions.d.ts","sourceRoot":"","sources":["../src/hostOptions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Effect, Schema } from "effect";
2
+ import { type HttpEffect, HttpServerResponse } from "effect/http";
3
+ import { type Rpc, type RpcGroup, RpcMiddleware } from "effect/rpc";
4
+ import { MissingReadPolicy, QueryReadDenied } from "@shivaedev/contract/readPolicyErrors.ts";
5
+ declare const HostedReadPolicy_base: RpcMiddleware.ServiceClass<HostedReadPolicy, "@shivaedev/server/HostedReadPolicy", never, Schema.Union<readonly [typeof MissingReadPolicy, typeof QueryReadDenied]>, never, never, false>;
6
+ declare class HostedReadPolicy extends HostedReadPolicy_base {
7
+ }
8
+ export type { HostedReadPolicy };
9
+ export declare const rpcCacheControl: HttpEffect.PreResponseHandler;
10
+ export declare const hostRpc: <R extends Rpc.Any>(group: RpcGroup.RpcGroup<R>) => Effect.Effect<Effect.Effect<HttpServerResponse.HttpServerResponse, never, import("effect/http/HttpServerRequest").HttpServerRequest | import("effect/Scope").Scope>, never, import("effect/rpc/RpcSerialization").RpcSerialization | import("effect/Scope").Scope | Exclude<Rpc.Middleware<Rpc.AddMiddleware<Rpc.AddMiddleware<R, typeof HostedReadPolicy>, typeof import("@shivaedev/identity/middleware.ts").RequestTracing>>, HostedReadPolicy> | Exclude<Rpc.ServicesServer<Rpc.AddMiddleware<Rpc.AddMiddleware<R, typeof HostedReadPolicy>, typeof import("@shivaedev/identity/middleware.ts").RequestTracing>>, HostedReadPolicy> | Exclude<Rpc.ToHandler<Rpc.AddMiddleware<Rpc.AddMiddleware<R, typeof HostedReadPolicy>, typeof import("@shivaedev/identity/middleware.ts").RequestTracing>>, HostedReadPolicy>>;
11
+ //# sourceMappingURL=hostRpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostRpc.d.ts","sourceRoot":"","sources":["../src/hostRpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,KAAK,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,aAAa,EAAa,MAAM,YAAY,CAAC;AAE/E,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;;AAG7F,cAAM,gBAAiB,SAAQ,qBAE7B;CAAG;AAEL,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC,eAAO,MAAM,eAAe,EAAE,UAAU,CAAC,kBACoD,CAAC;AAE9F,eAAO,MAAM,OAAO,GAAgC,CAAC,SAAS,GAAG,CAAC,GAAG,0zBASnE,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { Effect, Schema } from "effect";
2
+ import { HttpServerResponse } from "effect/http";
3
+ import { RpcMiddleware, RpcServer } from "effect/rpc";
4
+ import { authorizeReads, CurrentViewer } from "@shivaedev/contract/readPolicy.ts";
5
+ import { MissingReadPolicy, QueryReadDenied } from "@shivaedev/contract/readPolicyErrors.ts";
6
+ import { tracedGroup } from "#tracedGroup.ts";
7
+ class HostedReadPolicy extends RpcMiddleware.Service()("@shivaedev/server/HostedReadPolicy", {
8
+ error: Schema.Union([MissingReadPolicy, QueryReadDenied]),
9
+ }) {
10
+ }
11
+ export const rpcCacheControl = (_, response) => Effect.succeed(HttpServerResponse.setHeader(response, "cache-control", "private, no-store"));
12
+ export const hostRpc = Effect.fnUntraced(function* (group) {
13
+ const guarded = group.middleware(HostedReadPolicy);
14
+ // Keep the policy inside identity middleware so it sees the request's viewer.
15
+ for (const rpc of guarded.requests.values()) {
16
+ Object.assign(rpc, { middlewares: new Set([HostedReadPolicy, ...rpc.middlewares]) });
17
+ }
18
+ return yield* RpcServer.toHttpEffect(tracedGroup(guarded)).pipe(Effect.provideService(HostedReadPolicy, (effect, request) => Effect.flatMap(CurrentViewer, (viewer) => authorizeReads(effect, request, viewer))));
19
+ });
20
+ //# sourceMappingURL=hostRpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostRpc.js","sourceRoot":"","sources":["../src/hostRpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAmB,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAA2B,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,gBAAiB,SAAQ,aAAa,CAAC,OAAO,EAAoB,CAAC,oCAAoC,EAAE;IAC9G,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;CACzD,CAAC;CAAG;AAIL,MAAM,CAAC,MAAM,eAAe,GAAkC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAC7E,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,EAAE,eAAe,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAE9F,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAqB,KAA2B;IACjG,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACnD,8EAA8E;IAC9E,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,GAAG,CAAC,CAAC,gBAAgB,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC9D,MAAM,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAChJ,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { Effect, Layer } from "effect";
2
+ import { HttpRouter } from "effect/http";
3
+ import { type Rpc, type RpcGroup, RpcSerialization } from "effect/rpc";
4
+ import type { RequestTracing } from "@shivaedev/identity/middleware.ts";
5
+ import { type SessionShape } from "@shivaedev/identity/server/session.ts";
6
+ import type { AppChanges } from "#appHost.ts";
7
+ import type { HostPolicy } from "#hostOptions.ts";
8
+ import type { hostTransport } from "#hostTransport.ts";
9
+ import type { schemaSensitiveKeys } from "#schemaSensitiveKeys.ts";
10
+ export declare function hostRpcRoutes<TRpcs extends Rpc.Any, THandlers, TError, TRequirements, TSession extends SessionShape>(options: {
11
+ readonly group: RpcGroup.RpcGroup<TRpcs>;
12
+ readonly handlers: Layer.Layer<THandlers, TError, TRequirements>;
13
+ readonly rpcPath?: HttpRouter.PathInput;
14
+ } & HostPolicy<TSession>, changesService: typeof AppChanges, { bodySize, trustedProxy, nativeOrigins }: Effect.Success<ReturnType<typeof hostTransport>>, sensitive: ReturnType<typeof schemaSensitiveKeys>): Layer.Layer<never, TError, Exclude<TRequirements, RpcSerialization.RpcSerialization> | Exclude<Exclude<HttpRouter.HttpRouter, THandlers | RequestTracing | Rpc.ToHandler<Extract<TRpcs, {
15
+ readonly _tag: `${string}.$changes`;
16
+ }>>>, RpcSerialization.RpcSerialization> | Exclude<Exclude<RpcSerialization.RpcSerialization, THandlers | RequestTracing | Rpc.ToHandler<Extract<TRpcs, {
17
+ readonly _tag: `${string}.$changes`;
18
+ }>>>, RpcSerialization.RpcSerialization> | Exclude<Exclude<Exclude<Exclude<Exclude<Rpc.ServicesServer<Rpc.AddMiddleware<Rpc.AddMiddleware<TRpcs, typeof import("#hostRpc.ts").HostedReadPolicy>, typeof RequestTracing>>, import("#hostRpc.ts").HostedReadPolicy>, RpcSerialization.RpcSerialization>, import("effect/Scope").Scope>, THandlers | RequestTracing | Rpc.ToHandler<Extract<TRpcs, {
19
+ readonly _tag: `${string}.$changes`;
20
+ }>>>, RpcSerialization.RpcSerialization> | Exclude<Exclude<Exclude<Exclude<Exclude<Rpc.ToHandler<Rpc.AddMiddleware<Rpc.AddMiddleware<TRpcs, typeof import("#hostRpc.ts").HostedReadPolicy>, typeof RequestTracing>>, import("#hostRpc.ts").HostedReadPolicy>, RpcSerialization.RpcSerialization>, import("effect/Scope").Scope>, THandlers | RequestTracing | Rpc.ToHandler<Extract<TRpcs, {
21
+ readonly _tag: `${string}.$changes`;
22
+ }>>>, RpcSerialization.RpcSerialization>>;
23
+ //# sourceMappingURL=hostRpcRoutes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostRpcRoutes.d.ts","sourceRoot":"","sources":["../src/hostRpcRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAmC,UAAU,EAAyC,MAAM,aAAa,CAAC;AAEjH,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,KAAK,EAAqC,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAE3G,OAAO,EAA+C,KAAK,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAEvH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,wBAAgB,aAAa,CAAC,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,SAAS,YAAY,EACnH,OAAO,EAAE;IACR,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC;CACxC,GAAG,UAAU,CAAC,QAAQ,CAAC,EACxB,cAAc,EAAE,OAAO,UAAU,EACjC,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,EAC3F,SAAS,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC;;;;;;;;0CA+BjD"}
@@ -0,0 +1,29 @@
1
+ import { ByteSize, Effect, Layer } from "effect";
2
+ import { HttpEffect, HttpIncomingMessage, HttpRouter, HttpServerRequest, HttpServerResponse } from "effect/http";
3
+ import * as HttpStatus from "effect/http/HttpStatus";
4
+ import { RpcSerialization } from "effect/rpc";
5
+ import { localRpcGuard } from "@shivaedev/identity/server/local.ts";
6
+ import { authenticatedLayer, maybeAuthenticatedLayer } from "@shivaedev/identity/server/session.ts";
7
+ import { requestTracingLayer } from "@shivaedev/identity/server/tracing.ts";
8
+ import { boundedRpcRequest } from "#boundedRpcRequest.ts";
9
+ import { hostChanges } from "#hostChanges.ts";
10
+ import { hostRpc, rpcCacheControl } from "#hostRpc.ts";
11
+ import { redactingRpcSerialization } from "#redactingRpcSerialization.ts";
12
+ export function hostRpcRoutes(options, changesService, { bodySize, trustedProxy, nativeOrigins }, sensitive) {
13
+ const middleware = options.policy === "loopback"
14
+ ? requestTracingLayer({ sensitive })
15
+ : Layer.mergeAll(authenticatedLayer(options.sessions), maybeAuthenticatedLayer(options.sessions), requestTracingLayer({ sensitive }));
16
+ return HttpRouter.use((router) => Effect.gen(function* () {
17
+ const wire = redactingRpcSerialization(yield* RpcSerialization.RpcSerialization, sensitive, sensitive.maskFailure);
18
+ const handler = yield* hostRpc(options.group).pipe(Effect.provideService(RpcSerialization.RpcSerialization, wire));
19
+ const guarded = localRpcGuard(handler, trustedProxy, nativeOrigins);
20
+ yield* router.add("OPTIONS", options.rpcPath ?? "/rpc", HttpServerResponse.text("Local same-origin requests only", {
21
+ status: HttpStatus.fromLiteral("Forbidden"),
22
+ }));
23
+ yield* router.add("POST", options.rpcPath ?? "/rpc", (request) => {
24
+ HttpEffect.appendPreResponseHandlerUnsafe(request, rpcCacheControl);
25
+ return guarded.pipe(Effect.provideService(HttpIncomingMessage.MaxBodySize, ByteSize.bytes(bodySize)), Effect.provideService(HttpServerRequest.HttpServerRequest, boundedRpcRequest(request)), Effect.provideService(RpcSerialization.RpcSerialization, wire));
26
+ });
27
+ })).pipe(Layer.provide(Layer.merge(middleware, hostChanges(options.group, changesService).pipe(Layer.provideMerge(options.handlers)))), Layer.provide(RpcSerialization.layerNdjson));
28
+ }
29
+ //# sourceMappingURL=hostRpcRoutes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostRpcRoutes.js","sourceRoot":"","sources":["../src/hostRpcRoutes.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { Schema } from "effect";
2
+ import { HttpRouter } from "effect/http";
2
3
  export declare const NativeOrigins: Schema.$Array<Schema.String>;
3
- export declare function nativeClientOrigins(origins: readonly string[], trustedProxy: string | undefined, auth?: boolean): import("effect/Layer").Layer<never, never, never>;
4
+ export declare function nativeClientOrigins(origins: readonly string[], trustedProxy: string | undefined, auth?: boolean | "preflight", rpcPath?: HttpRouter.PathInput): import("effect/Layer").Layer<never, never, never>;
4
5
  //# sourceMappingURL=nativeClientOrigins.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nativeClientOrigins.d.ts","sourceRoot":"","sources":["../src/nativeClientOrigins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIxC,eAAO,MAAM,aAAa,8BAYzB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,UAAQ,qDAyB7G"}
1
+ {"version":3,"file":"nativeClientOrigins.d.ts","sourceRoot":"","sources":["../src/nativeClientOrigins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAA2B,UAAU,EAAyC,MAAM,aAAa,CAAC;AAIzG,eAAO,MAAM,aAAa,8BAYzB,CAAC;AAEF,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,IAAI,GAAE,OAAO,GAAG,WAAmB,EACnC,OAAO,GAAE,UAAU,CAAC,SAAkB,qDA+BtC"}
@@ -1,5 +1,6 @@
1
1
  import { Effect, Schema } from "effect";
2
2
  import { Headers, HttpMiddleware, HttpRouter, HttpServerRequest, HttpServerResponse } from "effect/http";
3
+ import * as HttpStatus from "effect/http/HttpStatus";
3
4
  import { localTransport } from "@shivaedev/identity/server/local.ts";
4
5
  export const NativeOrigins = Schema.Array(Schema.String.check(Schema.makeFilter((origin) => {
5
6
  try {
@@ -11,7 +12,8 @@ export const NativeOrigins = Schema.Array(Schema.String.check(Schema.makeFilter(
11
12
  return false;
12
13
  }
13
14
  })));
14
- export function nativeClientOrigins(origins, trustedProxy, auth = false) {
15
+ export function nativeClientOrigins(origins, trustedProxy, auth = false, rpcPath = "/rpc") {
16
+ const matchesPath = auth ? (path) => path === "/api/auth" || path.startsWith("/api/auth/") : (path) => path === rpcPath;
15
17
  const allowed = localTransport(trustedProxy, origins);
16
18
  const cors = HttpMiddleware.cors({
17
19
  allowedHeaders: ["Authorization", "Content-Type"],
@@ -22,16 +24,20 @@ export function nativeClientOrigins(origins, trustedProxy, auth = false) {
22
24
  });
23
25
  return HttpRouter.middleware((effect) => Effect.gen(function* () {
24
26
  const request = yield* HttpServerRequest.HttpServerRequest;
25
- if (auth && !request.url.split("?")[0]?.startsWith("/api/auth/")) {
27
+ if (!matchesPath(request.url.split("?")[0] ?? "")) {
26
28
  return yield* effect;
27
29
  }
28
- if ((auth || request.method === "OPTIONS") && !allowed(request)) {
29
- return HttpServerResponse.text("Local same-origin requests only", { status: 403 });
30
+ if ((auth === true || request.method === "OPTIONS") && !allowed(request)) {
31
+ return HttpServerResponse.text("Local same-origin requests only", {
32
+ status: HttpStatus.fromLiteral("Forbidden"),
33
+ });
30
34
  }
31
35
  if (!origins.includes(request.headers.origin ?? "")) {
32
36
  return yield* effect;
33
37
  }
34
- const native = request.modify({ headers: Headers.remove(request.headers, "cookie") });
38
+ const native = request.modify({
39
+ headers: Headers.remove(request.headers, "cookie"),
40
+ });
35
41
  return yield* cors(effect).pipe(Effect.provideService(HttpServerRequest.HttpServerRequest, native));
36
42
  })).layer;
37
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"nativeClientOrigins.js","sourceRoot":"","sources":["../src/nativeClientOrigins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nativeClientOrigins.js","sourceRoot":"","sources":["../src/nativeClientOrigins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Config, type Duration, Layer } from "effect";
2
+ export declare function nodeHttpServer(host: string, config?: {
3
+ readonly port?: number;
4
+ readonly gracefulShutdownTimeout?: Duration.Input;
5
+ readonly disablePreemptiveShutdown?: boolean;
6
+ }): Layer.Layer<import("effect/http/Etag").Generator | import("effect/http/HttpPlatform").HttpPlatform | import("effect/http/HttpServer").HttpServer | import("@effect/platform-node/NodeServices").NodeServices, Config.ConfigError | import("effect/http/HttpServerError").ServeError, never>;
7
+ //# sourceMappingURL=nodeHttpServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeHttpServer.d.ts","sourceRoot":"","sources":["../src/nodeHttpServer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,KAAK,QAAQ,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE9D,wBAAgB,cAAc,CAC7B,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE;IACR,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,uBAAuB,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;IAClD,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAC;CAC7C,+RAaD"}
@@ -0,0 +1,15 @@
1
+ import { createServer } from "node:http";
2
+ import { NodeHttpServer } from "@effect/platform-node";
3
+ import { Config, Effect, Layer } from "effect";
4
+ export function nodeHttpServer(host, config) {
5
+ return Layer.unwrap(Effect.gen(function* () {
6
+ const port = config?.port ?? (yield* Config.Int("PORT").pipe(Config.withDefault(3000)));
7
+ return NodeHttpServer.layer(createServer, {
8
+ gracefulShutdownTimeout: config?.gracefulShutdownTimeout,
9
+ host,
10
+ port,
11
+ ...(config?.disablePreemptiveShutdown === undefined ? {} : { disablePreemptiveShutdown: config.disablePreemptiveShutdown }),
12
+ });
13
+ }));
14
+ }
15
+ //# sourceMappingURL=nodeHttpServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeHttpServer.js","sourceRoot":"","sources":["../src/nodeHttpServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAiB,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE9D,MAAM,UAAU,cAAc,CAC7B,IAAY,EACZ,MAIC;IAED,OAAO,KAAK,CAAC,MAAM,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnB,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxF,OAAO,cAAc,CAAC,KAAK,CAAC,YAAY,EAAE;YACzC,uBAAuB,EAAE,MAAM,EAAE,uBAAuB;YACxD,IAAI;YACJ,IAAI;YACJ,GAAG,CAAC,MAAM,EAAE,yBAAyB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,yBAAyB,EAAE,MAAM,CAAC,yBAAyB,EAAE,CAAC;SAC3H,CAAC,CAAC;IACJ,CAAC,CAAC,CACF,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"otlpHttpClient.d.ts","sourceRoot":"","sources":["../src/otlpHttpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAmB,UAAU,EAA2C,MAAM,aAAa,CAAC;AAUnG,wBAAgB,cAAc,CAAC,OAAO,SAAS,oDA0C9C"}
1
+ {"version":3,"file":"otlpHttpClient.d.ts","sourceRoot":"","sources":["../src/otlpHttpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAmB,UAAU,EAA2C,MAAM,aAAa,CAAC;AAWnG,wBAAgB,cAAc,CAAC,OAAO,SAAS,oDA0C9C"}
@@ -1,5 +1,6 @@
1
1
  import { Effect, Layer } from "effect";
2
2
  import { FetchHttpClient, HttpClient, HttpClientError } from "effect/http";
3
+ import * as HttpStatus from "effect/http/HttpStatus";
3
4
  import { RedactionPolicy } from "#RedactionPolicy.ts";
4
5
  import { redactOtlpText } from "#safeOtlpSerialization.ts";
5
6
  function timeoutError(request) {
@@ -25,7 +26,7 @@ export function otlpHttpClient(timeout = 10_000) {
25
26
  duration: timeout,
26
27
  orElse: () => Effect.fail(timeoutError(request)),
27
28
  }))), HttpClient.tap((response) => {
28
- if (response.status >= 200 && response.status < 300) {
29
+ if (response.status >= HttpStatus.fromLiteral("OK") && response.status < HttpStatus.fromLiteral("MultipleChoices")) {
29
30
  warned = false;
30
31
  return Effect.void;
31
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"otlpHttpClient.js","sourceRoot":"","sources":["../src/otlpHttpClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"otlpHttpClient.js","sourceRoot":"","sources":["../src/otlpHttpClient.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shivaedev/server",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "The Effect application host: HTTP and RPC serving, health, OTLP export, database and migrations, and development mode",
5
5
  "keywords": [
6
6
  "effect"
@@ -44,25 +44,26 @@
44
44
  "README.md"
45
45
  ],
46
46
  "dependencies": {
47
- "@shivaedev/contract": "0.18.0",
47
+ "@shivaedev/changes": "0.5.0",
48
+ "@shivaedev/contract": "0.19.0",
48
49
  "@shivaedev/errors": "0.1.0",
49
50
  "@shivaedev/http": "0.1.0",
50
- "@shivaedev/identity": "0.2.0",
51
+ "@shivaedev/identity": "0.3.0",
51
52
  "@shivaedev/local-postgres": "0.7.0",
52
- "@shivaedev/sql": "0.23.0"
53
+ "@shivaedev/sql": "0.24.0"
53
54
  },
54
55
  "devDependencies": {
55
56
  "@effect/platform-node": "4.0.5",
56
57
  "@effect/sql-pg": "4.0.5",
57
58
  "@effect/vitest": "4.0.5",
58
- "@shivaedev/jobs": "0.21.0",
59
- "@shivaedev/quality": "0.42.0",
59
+ "@shivaedev/jobs": "0.22.0",
60
+ "@shivaedev/quality": "0.43.0",
60
61
  "@shivaedev/test": "0.10.0",
61
- "@shivaedev/test-sql": "0.10.1",
62
- "@shivaedev/test-story": "0.21.1",
62
+ "@shivaedev/test-sql": "0.10.2",
63
+ "@shivaedev/test-story": "0.22.0",
63
64
  "@types/node": "24.19.2",
64
65
  "@types/pg": "8.20.0",
65
- "better-auth": "1.7.11",
66
+ "better-auth": "1.7.12",
66
67
  "effect": "4.0.5",
67
68
  "pg": "8.23.0",
68
69
  "pg-boss": "12.38.0",
@@ -73,7 +74,7 @@
73
74
  "@effect/platform-node": "4.0.5",
74
75
  "@effect/sql-pg": "4.0.5",
75
76
  "@effect/vitest": "4.0.5",
76
- "better-auth": "1.7.11",
77
+ "better-auth": "1.7.12",
77
78
  "effect": "4.0.5",
78
79
  "pg": "8.23.0"
79
80
  },
@@ -1,14 +1,15 @@
1
- import type { Effect, Layer } from "effect";
1
+ import type { Crypto, Layer } from "effect";
2
2
  import type { Rpc } from "effect/rpc";
3
3
  import type { SessionShape } from "@shivaedev/identity/server/session.ts";
4
- import type { HostPreflight } from "#AppHostInput.ts";
5
- import type { AppDatabaseOptions, AppHostOptions, AppHttpHostOptions, AppLocalHostOptions } from "#appHost.ts";
4
+ import type { AppHostInput } from "#AppHostInput.ts";
5
+ import type { AppDatabaseOptions, AppHttpHostOptions } from "#appHost.ts";
6
6
  import type { appHostHttp, deferredHost } from "#appHostHttp.ts";
7
+ import type { HostRouteRequirements } from "#hostOptions.ts";
7
8
 
8
9
  type PreflightHost<THost extends Layer.Any, TServices, TError, TRequirements> = Layer.Layer<
9
10
  Layer.Success<THost> | TServices,
10
11
  Layer.Error<THost> | TError,
11
- Exclude<Layer.Services<THost>, TServices> | TRequirements
12
+ Exclude<Layer.Services<THost>, TServices | Crypto.Crypto> | Exclude<TRequirements, Crypto.Crypto>
12
13
  >;
13
14
 
14
15
  export interface AppHostFactory {
@@ -27,44 +28,27 @@ export interface AppHostFactory {
27
28
  TPreflight = never,
28
29
  TPreflightError = never,
29
30
  TPreflightRequirements = never,
31
+ TRouteError = never,
32
+ TRouteRequirements = HostRouteRequirements,
30
33
  >(
31
- options: HostPreflight<TPreflight, TPreflightError, TPreflightRequirements> &
32
- (
33
- | (AppDatabaseOptions<TMigrations> & {
34
- readonly application: Effect.Effect<
35
- AppHttpHostOptions<TRpcs, THandlers, THandlerError, THandlerRequirements, TServices, TServiceError, TServiceRequirements, TSession>,
36
- TApplicationError,
37
- TApplicationRequirements
38
- >;
39
- })
40
- | AppHostOptions<
41
- TRpcs,
42
- THandlers,
43
- THandlerError,
44
- THandlerRequirements,
45
- TServices,
46
- TServiceError,
47
- TServiceRequirements,
48
- TMigrations,
49
- TSession,
50
- TPreflight,
51
- TPreflightError,
52
- TPreflightRequirements
53
- >
54
- | AppLocalHostOptions<
55
- TRpcs,
56
- THandlers,
57
- THandlerError,
58
- THandlerRequirements,
59
- TServices,
60
- TServiceError,
61
- TServiceRequirements,
62
- TMigrations,
63
- TPreflight,
64
- TPreflightError,
65
- TPreflightRequirements
66
- >
67
- ),
34
+ options: AppHostInput<
35
+ TRpcs,
36
+ THandlers,
37
+ THandlerError,
38
+ THandlerRequirements,
39
+ TServices,
40
+ TServiceError,
41
+ TServiceRequirements,
42
+ TMigrations,
43
+ TSession,
44
+ TApplicationError,
45
+ TApplicationRequirements,
46
+ TPreflight,
47
+ TPreflightError,
48
+ TPreflightRequirements,
49
+ TRouteError,
50
+ TRouteRequirements
51
+ > & { readonly migrations: AppDatabaseOptions<TMigrations>["migrations"] },
68
52
  ): PreflightHost<
69
53
  ReturnType<
70
54
  typeof deferredHost<
@@ -78,7 +62,9 @@ export interface AppHostFactory {
78
62
  TMigrations,
79
63
  TSession,
80
64
  TApplicationError,
81
- TApplicationRequirements
65
+ TApplicationRequirements,
66
+ TRouteError,
67
+ TRouteRequirements
82
68
  >
83
69
  >,
84
70
  NoInfer<TPreflight>,
@@ -98,6 +84,8 @@ export interface AppHostFactory {
98
84
  TPreflight = never,
99
85
  TPreflightError = never,
100
86
  TPreflightRequirements = never,
87
+ TRouteError = never,
88
+ TRouteRequirements = HostRouteRequirements,
101
89
  >(
102
90
  options: AppHttpHostOptions<
103
91
  TRpcs,
@@ -110,10 +98,25 @@ export interface AppHostFactory {
110
98
  TSession,
111
99
  TPreflight,
112
100
  TPreflightError,
113
- TPreflightRequirements
101
+ TPreflightRequirements,
102
+ TRouteError,
103
+ TRouteRequirements
114
104
  >,
115
105
  ): PreflightHost<
116
- ReturnType<typeof appHostHttp<TRpcs, THandlers, THandlerError, THandlerRequirements, TServices, TServiceError, TServiceRequirements, TSession>>,
106
+ ReturnType<
107
+ typeof appHostHttp<
108
+ TRpcs,
109
+ THandlers,
110
+ THandlerError,
111
+ THandlerRequirements,
112
+ TServices,
113
+ TServiceError,
114
+ TServiceRequirements,
115
+ TSession,
116
+ TRouteError,
117
+ TRouteRequirements
118
+ >
119
+ >,
117
120
  NoInfer<TPreflight>,
118
121
  NoInfer<TPreflightError>,
119
122
  NoInfer<TPreflightRequirements>
@@ -2,6 +2,7 @@ import type { Effect, Layer } from "effect";
2
2
  import type { Rpc } from "effect/rpc";
3
3
  import type { SessionShape } from "@shivaedev/identity/server/session.ts";
4
4
  import type { AppDatabaseOptions, AppHostOptions, AppHttpHostOptions, AppLocalHostOptions } from "#appHost.ts";
5
+ import type { HostRouteRequirements } from "#hostOptions.ts";
5
6
 
6
7
  export type HostPreflight<TServices = never, TError = never, TRequirements = never> =
7
8
  | { readonly preflight: Layer.Layer<TServices, TError, TRequirements> }
@@ -22,11 +23,27 @@ export type AppHostInput<
22
23
  TPreflight = never,
23
24
  TPreflightError = never,
24
25
  TPreflightRequirements = never,
26
+ TRouteError = never,
27
+ TRouteRequirements = HostRouteRequirements,
25
28
  > = HostPreflight<TPreflight, TPreflightError, TPreflightRequirements> &
26
29
  (
27
30
  | (AppDatabaseOptions<TMigrations> & {
28
31
  readonly application: Effect.Effect<
29
- AppHttpHostOptions<TRpcs, THandlers, THandlerError, THandlerRequirements, TServices, TServiceError, TServiceRequirements, TSession>,
32
+ AppHttpHostOptions<
33
+ TRpcs,
34
+ THandlers,
35
+ THandlerError,
36
+ THandlerRequirements,
37
+ TServices,
38
+ TServiceError,
39
+ TServiceRequirements,
40
+ TSession,
41
+ never,
42
+ never,
43
+ never,
44
+ TRouteError,
45
+ TRouteRequirements
46
+ >,
30
47
  TApplicationError,
31
48
  TApplicationRequirements
32
49
  >;
@@ -43,7 +60,9 @@ export type AppHostInput<
43
60
  TSession,
44
61
  TPreflight,
45
62
  TPreflightError,
46
- TPreflightRequirements
63
+ TPreflightRequirements,
64
+ TRouteError,
65
+ TRouteRequirements
47
66
  >
48
67
  | AppLocalHostOptions<
49
68
  TRpcs,
@@ -56,7 +75,9 @@ export type AppHostInput<
56
75
  TMigrations,
57
76
  TPreflight,
58
77
  TPreflightError,
59
- TPreflightRequirements
78
+ TPreflightRequirements,
79
+ TRouteError,
80
+ TRouteRequirements
60
81
  >
61
82
  | AppHttpHostOptions<
62
83
  TRpcs,
@@ -69,6 +90,8 @@ export type AppHostInput<
69
90
  TSession,
70
91
  TPreflight,
71
92
  TPreflightError,
72
- TPreflightRequirements
93
+ TPreflightRequirements,
94
+ TRouteError,
95
+ TRouteRequirements
73
96
  >
74
97
  );