@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.
- package/dist/Action.d.ts +104 -0
- package/dist/Action.d.ts.map +1 -0
- package/dist/Action.js +50 -0
- package/dist/Action.js.map +1 -0
- package/dist/Actor.d.ts +132 -0
- package/dist/Actor.d.ts.map +1 -0
- package/dist/Actor.js +104 -0
- package/dist/Actor.js.map +1 -0
- package/dist/Client.d.ts +31 -0
- package/dist/Client.d.ts.map +1 -0
- package/dist/Client.js +100 -0
- package/dist/Client.js.map +1 -0
- package/dist/Registry.d.ts +134 -0
- package/dist/Registry.d.ts.map +1 -0
- package/dist/Registry.js +178 -0
- package/dist/Registry.js.map +1 -0
- package/dist/RivetError.d.ts +480 -0
- package/dist/RivetError.d.ts.map +1 -0
- package/dist/RivetError.js +985 -0
- package/dist/RivetError.js.map +1 -0
- package/dist/RivetLogger.d.ts +41 -0
- package/dist/RivetLogger.d.ts.map +1 -0
- package/dist/RivetLogger.js +41 -0
- package/dist/RivetLogger.js.map +1 -0
- package/dist/State.d.ts +159 -0
- package/dist/State.d.ts.map +1 -0
- package/dist/State.js +98 -0
- package/dist/State.js.map +1 -0
- package/dist/internal/ActionDispatcher.d.ts +14 -0
- package/dist/internal/ActionDispatcher.d.ts.map +1 -0
- package/dist/internal/ActionDispatcher.js +100 -0
- package/dist/internal/ActionDispatcher.js.map +1 -0
- package/dist/internal/ActionErrorEnvelope.d.ts +11 -0
- package/dist/internal/ActionErrorEnvelope.d.ts.map +1 -0
- package/dist/internal/ActionErrorEnvelope.js +14 -0
- package/dist/internal/ActionErrorEnvelope.js.map +1 -0
- package/dist/internal/ActorInstanceManager.d.ts +28 -0
- package/dist/internal/ActorInstanceManager.d.ts.map +1 -0
- package/dist/internal/ActorInstanceManager.js +51 -0
- package/dist/internal/ActorInstanceManager.js.map +1 -0
- package/dist/internal/ActorStateAdapter.d.ts +18 -0
- package/dist/internal/ActorStateAdapter.d.ts.map +1 -0
- package/dist/internal/ActorStateAdapter.js +24 -0
- package/dist/internal/ActorStateAdapter.js.map +1 -0
- package/dist/internal/StateOptions.d.ts +13 -0
- package/dist/internal/StateOptions.d.ts.map +1 -0
- package/dist/internal/StateOptions.js +2 -0
- package/dist/internal/StateOptions.js.map +1 -0
- package/dist/internal/logging.d.ts +22 -0
- package/dist/internal/logging.d.ts.map +1 -0
- package/dist/internal/logging.js +138 -0
- package/dist/internal/logging.js.map +1 -0
- package/dist/internal/tracing.d.ts +23 -0
- package/dist/internal/tracing.d.ts.map +1 -0
- package/dist/internal/tracing.js +30 -0
- package/dist/internal/tracing.js.map +1 -0
- package/dist/internal/utils.d.ts +7 -0
- package/dist/internal/utils.d.ts.map +1 -0
- package/dist/internal/utils.js +7 -0
- package/dist/internal/utils.js.map +1 -0
- package/dist/mod.d.ts +8 -0
- package/dist/mod.d.ts.map +1 -0
- package/dist/mod.js +8 -0
- package/dist/mod.js.map +1 -0
- package/package.json +56 -0
- package/src/Action.ts +231 -0
- package/src/Actor.test-d.ts +641 -0
- package/src/Actor.test.ts +209 -0
- package/src/Actor.ts +575 -0
- package/src/Client.test.ts +206 -0
- package/src/Client.ts +218 -0
- package/src/Registry.test-d.ts +126 -0
- package/src/Registry.test.ts +400 -0
- package/src/Registry.ts +304 -0
- package/src/RivetError.test.ts +199 -0
- package/src/RivetError.ts +1163 -0
- package/src/RivetLogger.ts +60 -0
- package/src/State.test.ts +340 -0
- package/src/State.ts +420 -0
- package/src/internal/ActionDispatcher.ts +189 -0
- package/src/internal/ActionErrorEnvelope.ts +19 -0
- package/src/internal/ActorInstanceManager.ts +137 -0
- package/src/internal/ActorStateAdapter.ts +82 -0
- package/src/internal/StateOptions.ts +21 -0
- package/src/internal/logging.test.ts +274 -0
- package/src/internal/logging.ts +197 -0
- package/src/internal/tracing.ts +42 -0
- package/src/internal/utils.ts +12 -0
- 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"}
|
package/dist/Registry.js
ADDED
|
@@ -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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"}
|