@ohos-ports/rivetkit-effect 2.3.17-beta.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 (89) hide show
  1. package/dist/Action.d.ts +104 -0
  2. package/dist/Action.d.ts.map +1 -0
  3. package/dist/Action.js +50 -0
  4. package/dist/Action.js.map +1 -0
  5. package/dist/Actor.d.ts +132 -0
  6. package/dist/Actor.d.ts.map +1 -0
  7. package/dist/Actor.js +104 -0
  8. package/dist/Actor.js.map +1 -0
  9. package/dist/Client.d.ts +31 -0
  10. package/dist/Client.d.ts.map +1 -0
  11. package/dist/Client.js +100 -0
  12. package/dist/Client.js.map +1 -0
  13. package/dist/Registry.d.ts +134 -0
  14. package/dist/Registry.d.ts.map +1 -0
  15. package/dist/Registry.js +178 -0
  16. package/dist/Registry.js.map +1 -0
  17. package/dist/RivetError.d.ts +480 -0
  18. package/dist/RivetError.d.ts.map +1 -0
  19. package/dist/RivetError.js +985 -0
  20. package/dist/RivetError.js.map +1 -0
  21. package/dist/RivetLogger.d.ts +41 -0
  22. package/dist/RivetLogger.d.ts.map +1 -0
  23. package/dist/RivetLogger.js +41 -0
  24. package/dist/RivetLogger.js.map +1 -0
  25. package/dist/State.d.ts +159 -0
  26. package/dist/State.d.ts.map +1 -0
  27. package/dist/State.js +98 -0
  28. package/dist/State.js.map +1 -0
  29. package/dist/internal/ActionDispatcher.d.ts +14 -0
  30. package/dist/internal/ActionDispatcher.d.ts.map +1 -0
  31. package/dist/internal/ActionDispatcher.js +100 -0
  32. package/dist/internal/ActionDispatcher.js.map +1 -0
  33. package/dist/internal/ActionErrorEnvelope.d.ts +11 -0
  34. package/dist/internal/ActionErrorEnvelope.d.ts.map +1 -0
  35. package/dist/internal/ActionErrorEnvelope.js +14 -0
  36. package/dist/internal/ActionErrorEnvelope.js.map +1 -0
  37. package/dist/internal/ActorInstanceManager.d.ts +28 -0
  38. package/dist/internal/ActorInstanceManager.d.ts.map +1 -0
  39. package/dist/internal/ActorInstanceManager.js +51 -0
  40. package/dist/internal/ActorInstanceManager.js.map +1 -0
  41. package/dist/internal/ActorStateAdapter.d.ts +18 -0
  42. package/dist/internal/ActorStateAdapter.d.ts.map +1 -0
  43. package/dist/internal/ActorStateAdapter.js +24 -0
  44. package/dist/internal/ActorStateAdapter.js.map +1 -0
  45. package/dist/internal/StateOptions.d.ts +13 -0
  46. package/dist/internal/StateOptions.d.ts.map +1 -0
  47. package/dist/internal/StateOptions.js +2 -0
  48. package/dist/internal/StateOptions.js.map +1 -0
  49. package/dist/internal/logging.d.ts +22 -0
  50. package/dist/internal/logging.d.ts.map +1 -0
  51. package/dist/internal/logging.js +138 -0
  52. package/dist/internal/logging.js.map +1 -0
  53. package/dist/internal/tracing.d.ts +23 -0
  54. package/dist/internal/tracing.d.ts.map +1 -0
  55. package/dist/internal/tracing.js +30 -0
  56. package/dist/internal/tracing.js.map +1 -0
  57. package/dist/internal/utils.d.ts +7 -0
  58. package/dist/internal/utils.d.ts.map +1 -0
  59. package/dist/internal/utils.js +7 -0
  60. package/dist/internal/utils.js.map +1 -0
  61. package/dist/mod.d.ts +8 -0
  62. package/dist/mod.d.ts.map +1 -0
  63. package/dist/mod.js +8 -0
  64. package/dist/mod.js.map +1 -0
  65. package/package.json +56 -0
  66. package/src/Action.ts +231 -0
  67. package/src/Actor.test-d.ts +641 -0
  68. package/src/Actor.test.ts +209 -0
  69. package/src/Actor.ts +575 -0
  70. package/src/Client.test.ts +206 -0
  71. package/src/Client.ts +218 -0
  72. package/src/Registry.test-d.ts +126 -0
  73. package/src/Registry.test.ts +400 -0
  74. package/src/Registry.ts +304 -0
  75. package/src/RivetError.test.ts +199 -0
  76. package/src/RivetError.ts +1163 -0
  77. package/src/RivetLogger.ts +60 -0
  78. package/src/State.test.ts +340 -0
  79. package/src/State.ts +420 -0
  80. package/src/internal/ActionDispatcher.ts +189 -0
  81. package/src/internal/ActionErrorEnvelope.ts +19 -0
  82. package/src/internal/ActorInstanceManager.ts +137 -0
  83. package/src/internal/ActorStateAdapter.ts +82 -0
  84. package/src/internal/StateOptions.ts +21 -0
  85. package/src/internal/logging.test.ts +274 -0
  86. package/src/internal/logging.ts +197 -0
  87. package/src/internal/tracing.ts +42 -0
  88. package/src/internal/utils.ts +12 -0
  89. package/src/mod.ts +7 -0
@@ -0,0 +1,134 @@
1
+ import { Context, Effect, Layer, type Scope } from "effect";
2
+ import { type HttpMiddleware, type HttpServerError, type HttpServerRequest, type HttpServerResponse } from "effect/unstable/http";
3
+ import * as Rivetkit from "@ohos-ports/rivetkit";
4
+ import * as RivetkitLog from "@ohos-ports/rivetkit/log";
5
+ import * as Client from "./Client.ts";
6
+ declare const TypeId = "~@rivetkit/effect/Registry";
7
+ type ServerlessOptions = NonNullable<Rivetkit.RegistryConfigInput<Rivetkit.RegistryActors>["serverless"]>;
8
+ export type Options = Pick<Rivetkit.RegistryConfigInput<Rivetkit.RegistryActors>, "endpoint" | "token" | "namespace" | "noWelcome" | "sqlite">;
9
+ export interface Registry {
10
+ readonly [TypeId]: typeof TypeId;
11
+ readonly options: Options;
12
+ readonly baseLogger: RivetkitLog.Logger;
13
+ readonly rivetkitActors: Map<string, Rivetkit.AnyActorDefinition>;
14
+ }
15
+ export declare const Registry: Context.Service<Registry, Registry>;
16
+ /**
17
+ * Creates the shared registry that actor layers register into.
18
+ *
19
+ * @remarks
20
+ * Actor layers created with {@link Actor.Actor.toLayer|`Actor.toLayer()`}
21
+ * register into this service. Registry entrypoints such as
22
+ * {@link serve|`Registry.serve()`}, {@link toWebHandler|`Registry.toWebHandler()`},
23
+ * and {@link toHttpEffect|`Registry.toHttpEffect()`} later use the collected
24
+ * actors to create the underlying RivetKit runtime.
25
+ *
26
+ * @param options - RivetKit runtime options shared by the registered actors.
27
+ *
28
+ * @returns A layer that provides the {@link Registry|`Registry.Registry`}
29
+ * service.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * import { Registry } from "@rivetkit/effect"
34
+ * import { Layer } from "effect"
35
+ *
36
+ * const ActorsLayer = Layer.mergeAll(ChatRoomLive, ModeratorLive)
37
+ *
38
+ * const MainLayer = Registry.serve(ActorsLayer).pipe(
39
+ * Layer.provide(Registry.layer({ endpoint: "http://127.0.0.1:6420" }))
40
+ * )
41
+ * ```
42
+ *
43
+ * @see {@link serve|`Registry.serve()`} for starting a long-running actor
44
+ * server.
45
+ * @see {@link toWebHandler|`Registry.toWebHandler()`} for Fetch-compatible
46
+ * serverless handlers.
47
+ * @see {@link toHttpEffect|`Registry.toHttpEffect()`} for Effect HTTP handlers.
48
+ */
49
+ export declare const layer: (options?: Options) => Layer.Layer<Registry>;
50
+ /**
51
+ * Serves the actors registered by `actorsLayer`.
52
+ *
53
+ * @remarks
54
+ * Provide this with {@link layer|`Registry.layer()`} at the application root.
55
+ * Building the returned layer evaluates the actor layer, collects its registered
56
+ * actors, and starts the underlying RivetKit runtime using the options from
57
+ * {@link layer|`Registry.layer()`}. Launch the resulting layer with
58
+ * {@link Layer.launch|`Layer.launch()`} to keep the server process alive.
59
+ *
60
+ * @param actorsLayer - A layer containing one or more
61
+ * {@link Actor.Actor.toLayer|`Actor.toLayer()`} registrations.
62
+ *
63
+ * @returns A side-effecting startup layer that requires the
64
+ * {@link Registry|`Registry.Registry`} service and the services required by
65
+ * `actorsLayer`.
66
+ *
67
+ * @example
68
+ * ```ts
69
+ * import { Registry } from "@rivetkit/effect"
70
+ * import { Layer } from "effect"
71
+ *
72
+ * const ActorsLayer = Layer.mergeAll(ChatRoomLive, ModeratorLive)
73
+ *
74
+ * const MainLayer = Registry.serve(ActorsLayer).pipe(
75
+ * Layer.provide(Registry.layer({ endpoint: "http://127.0.0.1:6420" }))
76
+ * )
77
+ *
78
+ * Layer.launch(MainLayer).pipe(NodeRuntime.runMain);
79
+ * ```
80
+ *
81
+ * @see {@link toWebHandler|`Registry.toWebHandler()`} for Fetch-compatible
82
+ * serverless handlers.
83
+ * @see {@link toHttpEffect|`Registry.toHttpEffect()`} for Effect HTTP handlers.
84
+ *
85
+ */
86
+ export declare const serve: <E, R>(actorsLayer: Layer.Layer<never, E, R>) => Layer.Layer<never, E, R | Registry>;
87
+ /**
88
+ * In-process test runtime. Boots the rivetkit registry against the
89
+ * configured engine, waits for `/health` to answer, and provides
90
+ * `Client` from the same Layer so consumers don't need to wire
91
+ * `Client.layer` separately. Mirrors `Registry.start` plus test-mode
92
+ * flags and a scoped client dispose. The registry itself is leaked
93
+ * to process exit because the public rivetkit `Registry` doesn't
94
+ * expose a public `shutdown()` today; only the SIGINT handler can
95
+ * drive `#runShutdown`. This matches `setupTest`'s existing behavior.
96
+ */
97
+ export declare const test: Layer.Layer<Client.Client, never, Registry>;
98
+ export type ToHttpEffectOptions = ServerlessOptions;
99
+ /**
100
+ * Builds a scoped Effect HTTP handler from a registry layer.
101
+ *
102
+ * The registry layer is built once in the surrounding scope. Registered Rivet
103
+ * Actors are materialized into a single underlying RivetKit registry, and each
104
+ * request is delegated to that registry's serverless handler.
105
+ */
106
+ export declare const toHttpEffect: <E>(registryLayer: Layer.Layer<Registry, E, never>, options?: {
107
+ basePath?: string | undefined;
108
+ maxStartPayloadBytes?: number | undefined;
109
+ publicEndpoint?: string | undefined;
110
+ publicToken?: string | undefined;
111
+ } | undefined) => Effect.Effect<Effect.Effect<HttpServerResponse.HttpServerResponse, HttpServerError.HttpServerError, HttpServerRequest.HttpServerRequest>, E, Scope.Scope>;
112
+ export type ToWebHandlerOptions = ServerlessOptions & {
113
+ /**
114
+ * Effect HTTP middleware applied around the generated handler.
115
+ */
116
+ readonly middleware?: HttpMiddleware.HttpMiddleware | undefined;
117
+ /**
118
+ * Memo map used while building the registry layer.
119
+ */
120
+ readonly memoMap?: Layer.MemoMap | undefined;
121
+ };
122
+ /**
123
+ * Builds a Fetch-compatible request handler from a registry layer.
124
+ *
125
+ * This is the serverless entrypoint for the Effect SDK. The registry layer must
126
+ * provide `Registry`, usually by composing actor layers with `Registry.layer`
127
+ * via `Layer.provideMerge`.
128
+ */
129
+ export declare const toWebHandler: <E>(registryLayer: Layer.Layer<Registry, E>, options?: ToWebHandlerOptions) => {
130
+ readonly dispose: () => Promise<void>;
131
+ readonly handler: (request: Request, context?: Context.Context<never> | undefined) => Promise<globalThis.Response>;
132
+ };
133
+ export {};
134
+ //# sourceMappingURL=Registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Registry.d.ts","sourceRoot":"","sources":["../src/Registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC5D,OAAO,EAEN,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AACrC,OAAO,KAAK,WAAW,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAItC,QAAA,MAAM,MAAM,+BAA+B,CAAC;AAC5C,KAAK,iBAAiB,GAAG,WAAW,CACnC,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,CACnE,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,IAAI,CACzB,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,CAAC,cAAc,CAAC,EACrD,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAC3D,CAAC;AAEF,MAAM,WAAW,QAAQ;IACxB,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,MAAM,CAAC;IAEjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC;IAExC,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;CAClE;AAED,eAAO,MAAM,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CACF,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,KAAK,GAAI,UAAS,OAAY,KAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAWhE,CAAC;AAmBH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,CAAC,EACzB,aAAa,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KACnC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,QAAQ,CAcnC,CAAC;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAoC5D,CAAC;AAsBF,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAEpD;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GAAgC,CAAC;;;;;2KAqBxD,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,GAAG;IACrD;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC,cAAc,GAAG,SAAS,CAAC;IAChE;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;CAC7C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,EAC7B,eAAe,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,EACvC,UAAU,mBAAmB;;;CA6B7B,CAAC"}
@@ -0,0 +1,178 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import { HttpEffect, } from "effect/unstable/http";
3
+ import * as Rivetkit from "@ohos-ports/rivetkit";
4
+ import * as RivetkitLog from "@ohos-ports/rivetkit/log";
5
+ import * as Client from "./Client.js";
6
+ import { BaseLogger, getOrCreateBaseLogger } from "./internal/logging.js";
7
+ import * as RivetLogger from "./RivetLogger.js";
8
+ const TypeId = "~@rivetkit/effect/Registry";
9
+ export const Registry = Context.Service("@rivetkit/effect/Registry");
10
+ /**
11
+ * Creates the shared registry that actor layers register into.
12
+ *
13
+ * @remarks
14
+ * Actor layers created with {@link Actor.Actor.toLayer|`Actor.toLayer()`}
15
+ * register into this service. Registry entrypoints such as
16
+ * {@link serve|`Registry.serve()`}, {@link toWebHandler|`Registry.toWebHandler()`},
17
+ * and {@link toHttpEffect|`Registry.toHttpEffect()`} later use the collected
18
+ * actors to create the underlying RivetKit runtime.
19
+ *
20
+ * @param options - RivetKit runtime options shared by the registered actors.
21
+ *
22
+ * @returns A layer that provides the {@link Registry|`Registry.Registry`}
23
+ * service.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * import { Registry } from "@rivetkit/effect"
28
+ * import { Layer } from "effect"
29
+ *
30
+ * const ActorsLayer = Layer.mergeAll(ChatRoomLive, ModeratorLive)
31
+ *
32
+ * const MainLayer = Registry.serve(ActorsLayer).pipe(
33
+ * Layer.provide(Registry.layer({ endpoint: "http://127.0.0.1:6420" }))
34
+ * )
35
+ * ```
36
+ *
37
+ * @see {@link serve|`Registry.serve()`} for starting a long-running actor
38
+ * server.
39
+ * @see {@link toWebHandler|`Registry.toWebHandler()`} for Fetch-compatible
40
+ * serverless handlers.
41
+ * @see {@link toHttpEffect|`Registry.toHttpEffect()`} for Effect HTTP handlers.
42
+ */
43
+ export const layer = (options = {}) => Layer.effect(Registry, Effect.map(getOrCreateBaseLogger, (baseLogger) => Registry.of({
44
+ [TypeId]: TypeId,
45
+ options,
46
+ baseLogger,
47
+ rivetkitActors: new Map(),
48
+ })));
49
+ const setupRivetkitRegistry = (registry, options) => Effect.sync(() => Rivetkit.setup({
50
+ use: Object.fromEntries(registry.rivetkitActors),
51
+ ...registry.options,
52
+ logging: { baseLogger: registry.baseLogger },
53
+ ...(options?.serverless === undefined
54
+ ? {}
55
+ : { serverless: options.serverless }),
56
+ }));
57
+ /**
58
+ * Serves the actors registered by `actorsLayer`.
59
+ *
60
+ * @remarks
61
+ * Provide this with {@link layer|`Registry.layer()`} at the application root.
62
+ * Building the returned layer evaluates the actor layer, collects its registered
63
+ * actors, and starts the underlying RivetKit runtime using the options from
64
+ * {@link layer|`Registry.layer()`}. Launch the resulting layer with
65
+ * {@link Layer.launch|`Layer.launch()`} to keep the server process alive.
66
+ *
67
+ * @param actorsLayer - A layer containing one or more
68
+ * {@link Actor.Actor.toLayer|`Actor.toLayer()`} registrations.
69
+ *
70
+ * @returns A side-effecting startup layer that requires the
71
+ * {@link Registry|`Registry.Registry`} service and the services required by
72
+ * `actorsLayer`.
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * import { Registry } from "@rivetkit/effect"
77
+ * import { Layer } from "effect"
78
+ *
79
+ * const ActorsLayer = Layer.mergeAll(ChatRoomLive, ModeratorLive)
80
+ *
81
+ * const MainLayer = Registry.serve(ActorsLayer).pipe(
82
+ * Layer.provide(Registry.layer({ endpoint: "http://127.0.0.1:6420" }))
83
+ * )
84
+ *
85
+ * Layer.launch(MainLayer).pipe(NodeRuntime.runMain);
86
+ * ```
87
+ *
88
+ * @see {@link toWebHandler|`Registry.toWebHandler()`} for Fetch-compatible
89
+ * serverless handlers.
90
+ * @see {@link toHttpEffect|`Registry.toHttpEffect()`} for Effect HTTP handlers.
91
+ *
92
+ */
93
+ export const serve = (actorsLayer) => Layer.effectDiscard(Effect.gen(function* () {
94
+ const registry = yield* Registry;
95
+ yield* Layer.build(actorsLayer.pipe(Layer.provideMerge(RivetLogger.layerFromPino(registry.baseLogger))));
96
+ const rivetkitRegistry = yield* setupRivetkitRegistry(registry);
97
+ yield* Effect.sync(() => rivetkitRegistry.start());
98
+ }));
99
+ /**
100
+ * In-process test runtime. Boots the rivetkit registry against the
101
+ * configured engine, waits for `/health` to answer, and provides
102
+ * `Client` from the same Layer so consumers don't need to wire
103
+ * `Client.layer` separately. Mirrors `Registry.start` plus test-mode
104
+ * flags and a scoped client dispose. The registry itself is leaked
105
+ * to process exit because the public rivetkit `Registry` doesn't
106
+ * expose a public `shutdown()` today; only the SIGINT handler can
107
+ * drive `#runShutdown`. This matches `setupTest`'s existing behavior.
108
+ */
109
+ export const test = Layer.effect(Client.Client, Effect.gen(function* () {
110
+ const registry = yield* Registry;
111
+ const rivetkitRegistry = yield* setupRivetkitRegistry(registry);
112
+ rivetkitRegistry.config.test = {
113
+ ...rivetkitRegistry.config.test,
114
+ enabled: true,
115
+ };
116
+ rivetkitRegistry.config.noWelcome = true;
117
+ // Auto-spawn the engine when no endpoint was provided, so
118
+ // `Registry.test` works out of the box without requiring the
119
+ // caller to start an engine externally. If the user wired an
120
+ // explicit endpoint via `Registry.layer({ endpoint: ... })`,
121
+ // honor it and skip the local spawn.
122
+ if (registry.options.endpoint === undefined) {
123
+ rivetkitRegistry.config.startEngine = true;
124
+ }
125
+ yield* Effect.sync(() => rivetkitRegistry.start());
126
+ // The rivetkitRegistry itself is leaked until process exit (matches
127
+ // setupTest's behavior). The public Rivetkit.Registry doesn't
128
+ // expose a shutdown method; only the SIGINT handler can drive the
129
+ // inner .shutdown(). Disposing the client is the only cleanup we
130
+ // can do cleanly today.
131
+ //
132
+ // When the engine was auto-spawned, propagate its resolved
133
+ // endpoint to the client so `createClient` doesn't fall back
134
+ // to its (warning-emitting) default.
135
+ const resolvedEndpoint = rivetkitRegistry.parseConfig().endpoint;
136
+ return yield* Client.make({
137
+ ...registry.options,
138
+ endpoint: registry.options.endpoint ?? resolvedEndpoint,
139
+ }).pipe(Effect.provideService(BaseLogger, registry.baseLogger));
140
+ }));
141
+ const makeHttpEffect = (registry, options) => Effect.map(setupRivetkitRegistry(registry, {
142
+ serverless: options,
143
+ }), (rivetkitRegistry) => HttpEffect.fromWebHandler((request) => rivetkitRegistry.handler(request)));
144
+ /**
145
+ * Builds a scoped Effect HTTP handler from a registry layer.
146
+ *
147
+ * The registry layer is built once in the surrounding scope. Registered Rivet
148
+ * Actors are materialized into a single underlying RivetKit registry, and each
149
+ * request is delegated to that registry's serverless handler.
150
+ */
151
+ export const toHttpEffect = Effect.fnUntraced(function* (registryLayer, options) {
152
+ const context = yield* Layer.build(registryLayer.pipe(Layer.provideMerge(RivetLogger.defaultLayer)));
153
+ const httpEffect = yield* makeHttpEffect(Context.get(context, Registry), options);
154
+ // @effect-diagnostics-next-line returnEffectInGen:off
155
+ return httpEffect.pipe(Effect.provide(context));
156
+ });
157
+ /**
158
+ * Builds a Fetch-compatible request handler from a registry layer.
159
+ *
160
+ * This is the serverless entrypoint for the Effect SDK. The registry layer must
161
+ * provide `Registry`, usually by composing actor layers with `Registry.layer`
162
+ * via `Layer.provideMerge`.
163
+ */
164
+ export const toWebHandler = (registryLayer, options) => {
165
+ const { middleware, memoMap } = options ?? {};
166
+ let serverlessOptions;
167
+ if (options !== undefined) {
168
+ const { middleware: _middleware, memoMap: _memoMap, ...handlerOptions } = options;
169
+ serverlessOptions = handlerOptions;
170
+ }
171
+ const registryLayerWithLogging = registryLayer.pipe(Layer.provideMerge(RivetLogger.defaultLayer));
172
+ return HttpEffect.toWebHandlerLayerWith(registryLayerWithLogging, {
173
+ toHandler: (context) => Effect.map(makeHttpEffect(Context.get(context, Registry), serverlessOptions), (httpEffect) => httpEffect.pipe(Effect.provide(context))),
174
+ middleware,
175
+ memoMap,
176
+ });
177
+ };
178
+ //# sourceMappingURL=Registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Registry.js","sourceRoot":"","sources":["../src/Registry.ts"],"names":[],"mappings":"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"}