@rivetkit/effect 0.0.0-sqlite-uds.37f9e48 → 0.0.0-sqlite-profiling-compat.4a9a623
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/Actor.d.ts +3 -2
- package/dist/Actor.d.ts.map +1 -1
- package/dist/Actor.js +2 -2
- package/dist/Actor.js.map +1 -1
- package/dist/Client.d.ts.map +1 -1
- package/dist/Client.js +4 -6
- package/dist/Client.js.map +1 -1
- package/dist/Logger.d.ts +29 -0
- package/dist/Logger.d.ts.map +1 -0
- package/dist/Logger.js +31 -0
- package/dist/Logger.js.map +1 -0
- package/dist/Registry.d.ts +7 -69
- package/dist/Registry.d.ts.map +1 -1
- package/dist/Registry.js +40 -93
- package/dist/Registry.js.map +1 -1
- package/dist/RivetError.d.ts +3 -18
- package/dist/RivetError.d.ts.map +1 -1
- package/dist/RivetError.js +0 -31
- package/dist/RivetError.js.map +1 -1
- package/dist/State.d.ts +56 -92
- package/dist/State.d.ts.map +1 -1
- package/dist/State.js +57 -51
- package/dist/State.js.map +1 -1
- package/dist/internal/ActorInstanceManager.d.ts.map +1 -1
- package/dist/internal/ActorInstanceManager.js +4 -4
- package/dist/internal/ActorInstanceManager.js.map +1 -1
- package/dist/internal/ActorStateAdapter.d.ts +1 -1
- package/dist/internal/ActorStateAdapter.d.ts.map +1 -1
- package/dist/internal/ActorStateAdapter.js +7 -2
- package/dist/internal/ActorStateAdapter.js.map +1 -1
- package/dist/internal/StateOptions.d.ts +0 -1
- package/dist/internal/StateOptions.d.ts.map +1 -1
- package/dist/internal/logging.d.ts +7 -6
- package/dist/internal/logging.d.ts.map +1 -1
- package/dist/internal/logging.js +102 -78
- package/dist/internal/logging.js.map +1 -1
- package/dist/mod.d.ts +1 -1
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +1 -1
- package/dist/mod.js.map +1 -1
- package/package.json +8 -3
- package/src/Actor.test-d.ts +0 -32
- package/src/Actor.ts +4 -29
- package/src/Client.test.ts +18 -21
- package/src/Client.ts +4 -6
- package/src/Logger.ts +43 -0
- package/src/Registry.test.ts +11 -7
- package/src/Registry.ts +50 -116
- package/src/RivetError.test.ts +0 -11
- package/src/RivetError.ts +0 -37
- package/src/State.test.ts +4 -163
- package/src/State.ts +97 -293
- package/src/internal/ActorInstanceManager.ts +10 -4
- package/src/internal/ActorStateAdapter.ts +11 -5
- package/src/internal/StateOptions.ts +0 -4
- package/src/internal/logging.test.ts +88 -65
- package/src/internal/logging.ts +143 -103
- package/src/mod.ts +1 -1
- package/dist/RivetLogger.d.ts +0 -41
- package/dist/RivetLogger.d.ts.map +0 -1
- package/dist/RivetLogger.js +0 -41
- package/dist/RivetLogger.js.map +0 -1
- package/src/RivetLogger.ts +0 -60
package/src/Client.test.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { assert, describe, it } from "@effect/vitest";
|
|
2
|
-
import { Client,
|
|
2
|
+
import { Client, Logger, RivetError } from "@rivetkit/effect";
|
|
3
3
|
import { Effect, Layer, Schema } from "effect";
|
|
4
4
|
import * as RivetkitErrors from "rivetkit/errors";
|
|
5
|
-
import
|
|
5
|
+
import {
|
|
6
|
+
configureDefaultLogger,
|
|
7
|
+
getBaseLogger,
|
|
8
|
+
type Logger as PinoLogger,
|
|
9
|
+
} from "rivetkit/log";
|
|
6
10
|
import * as ActionErrorEnvelope from "./internal/ActionErrorEnvelope";
|
|
7
11
|
|
|
8
12
|
function makeTestLogger(
|
|
@@ -11,7 +15,7 @@ function makeTestLogger(
|
|
|
11
15
|
readonly fields: Record<string, unknown>;
|
|
12
16
|
readonly msg: string | undefined;
|
|
13
17
|
}>,
|
|
14
|
-
):
|
|
18
|
+
): PinoLogger {
|
|
15
19
|
const logger: Record<string, unknown> = {
|
|
16
20
|
level: "debug",
|
|
17
21
|
child: () => logger,
|
|
@@ -25,7 +29,7 @@ function makeTestLogger(
|
|
|
25
29
|
};
|
|
26
30
|
}
|
|
27
31
|
|
|
28
|
-
return logger as unknown as
|
|
32
|
+
return logger as unknown as PinoLogger;
|
|
29
33
|
}
|
|
30
34
|
|
|
31
35
|
describe("Client", () => {
|
|
@@ -35,15 +39,13 @@ describe("Client", () => {
|
|
|
35
39
|
const baseLogger = makeTestLogger();
|
|
36
40
|
|
|
37
41
|
yield* Effect.addFinalizer(() =>
|
|
38
|
-
Effect.sync(() =>
|
|
39
|
-
RivetkitLog.configureDefaultLogger("silent"),
|
|
40
|
-
),
|
|
42
|
+
Effect.sync(() => configureDefaultLogger("silent")),
|
|
41
43
|
);
|
|
42
44
|
yield* Client.make({
|
|
43
45
|
endpoint: "http://127.0.0.1:6420",
|
|
44
|
-
}).pipe(Effect.provide(
|
|
46
|
+
}).pipe(Effect.provide(Logger.layerPino(baseLogger)));
|
|
45
47
|
|
|
46
|
-
assert.strictEqual(
|
|
48
|
+
assert.strictEqual(getBaseLogger(), baseLogger);
|
|
47
49
|
}),
|
|
48
50
|
),
|
|
49
51
|
);
|
|
@@ -59,9 +61,7 @@ describe("Client", () => {
|
|
|
59
61
|
const baseLogger = makeTestLogger(entries);
|
|
60
62
|
|
|
61
63
|
yield* Effect.addFinalizer(() =>
|
|
62
|
-
Effect.sync(() =>
|
|
63
|
-
RivetkitLog.configureDefaultLogger("silent"),
|
|
64
|
-
),
|
|
64
|
+
Effect.sync(() => configureDefaultLogger("silent")),
|
|
65
65
|
);
|
|
66
66
|
yield* Effect.gen(function* () {
|
|
67
67
|
yield* Client.Client;
|
|
@@ -73,19 +73,16 @@ describe("Client", () => {
|
|
|
73
73
|
Client.layer({
|
|
74
74
|
endpoint: "http://127.0.0.1:6420",
|
|
75
75
|
}).pipe(
|
|
76
|
-
Layer.provideMerge(
|
|
77
|
-
RivetLogger.layerFromPino(baseLogger),
|
|
78
|
-
),
|
|
76
|
+
Layer.provideMerge(Logger.layerPino(baseLogger)),
|
|
79
77
|
),
|
|
80
78
|
),
|
|
81
79
|
);
|
|
82
80
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
assert.strictEqual(typeof entry.fields.fiberId, "string");
|
|
81
|
+
assert.deepStrictEqual(entries[0], {
|
|
82
|
+
level: "info",
|
|
83
|
+
fields: { clientId: "test-client" },
|
|
84
|
+
msg: "client effect log",
|
|
85
|
+
});
|
|
89
86
|
assert.ok(
|
|
90
87
|
entries.some(
|
|
91
88
|
(entry) =>
|
package/src/Client.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Context, Effect, Layer, Record, Result, Schema } from "effect";
|
|
2
2
|
import * as RivetkitClient from "rivetkit/client";
|
|
3
3
|
import * as RivetkitErrors from "rivetkit/errors";
|
|
4
|
-
import
|
|
4
|
+
import { configureBaseLogger } from "rivetkit/log";
|
|
5
5
|
import type * as Action from "./Action.ts";
|
|
6
6
|
import type * as Actor from "./Actor.ts";
|
|
7
7
|
import * as ActionErrorEnvelope from "./internal/ActionErrorEnvelope.ts";
|
|
8
8
|
import { getOrCreateBaseLogger } from "./internal/logging.ts";
|
|
9
9
|
import { rpcSystem, type TraceMeta } from "./internal/tracing.ts";
|
|
10
|
-
import * as
|
|
10
|
+
import * as Logger from "./Logger.ts";
|
|
11
11
|
import * as RivetError from "./RivetError.ts";
|
|
12
12
|
|
|
13
13
|
const TypeId = "~@rivetkit/effect/Client";
|
|
@@ -49,9 +49,7 @@ export const make = Effect.fnUntraced(function* (options: Options = {}) {
|
|
|
49
49
|
const baseLogger = yield* getOrCreateBaseLogger;
|
|
50
50
|
const rivetkitClient = yield* Effect.acquireRelease(
|
|
51
51
|
Effect.sync(() => {
|
|
52
|
-
|
|
53
|
-
// so install the Effect-selected logger before construction.
|
|
54
|
-
RivetkitLog.configureBaseLogger(baseLogger);
|
|
52
|
+
configureBaseLogger(baseLogger);
|
|
55
53
|
return RivetkitClient.createClient(options);
|
|
56
54
|
}),
|
|
57
55
|
(c) => Effect.promise(() => c.dispose()),
|
|
@@ -148,7 +146,7 @@ export const layer = (options: Options = {}): Layer.Layer<Client> =>
|
|
|
148
146
|
Layer.unwrap(
|
|
149
147
|
Effect.map(getOrCreateBaseLogger, (baseLogger) =>
|
|
150
148
|
Layer.effect(Client, make(options)).pipe(
|
|
151
|
-
Layer.provideMerge(
|
|
149
|
+
Layer.provideMerge(Logger.layerPino(baseLogger)),
|
|
152
150
|
),
|
|
153
151
|
),
|
|
154
152
|
);
|
package/src/Logger.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Effect, Logger as EffectLogger, Layer } from "effect";
|
|
2
|
+
import type { Logger as PinoLogger } from "rivetkit/log";
|
|
3
|
+
import {
|
|
4
|
+
BaseLogger,
|
|
5
|
+
getOrCreateBaseLogger,
|
|
6
|
+
makeEffectLogger,
|
|
7
|
+
} from "./internal/logging.ts";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Builds a logging layer from a custom Pino-compatible logger.
|
|
11
|
+
*
|
|
12
|
+
* The layer installs the matching Effect logger and configures the underlying
|
|
13
|
+
* RivetKit TypeScript SDK logs to go through the same logger.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { Logger } from "@rivetkit/effect"
|
|
18
|
+
* import { pino } from "pino"
|
|
19
|
+
*
|
|
20
|
+
* const LoggerLive = Logger.layerPino(
|
|
21
|
+
* pino({ transport: { target: "pino-pretty" } })
|
|
22
|
+
* )
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export const layerPino = (baseLogger: PinoLogger) =>
|
|
26
|
+
Layer.mergeAll(
|
|
27
|
+
Layer.succeed(BaseLogger, baseLogger),
|
|
28
|
+
EffectLogger.layer([
|
|
29
|
+
EffectLogger.tracerLogger,
|
|
30
|
+
makeEffectLogger(baseLogger),
|
|
31
|
+
]),
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Default RivetKit Effect logging layer.
|
|
36
|
+
*
|
|
37
|
+
* The layer creates a base logger from `References.MinimumLogLevel` and installs
|
|
38
|
+
* the Effect logger adapter. Applications that want custom formatting or
|
|
39
|
+
* transports should provide {@link layerPino} instead.
|
|
40
|
+
*/
|
|
41
|
+
export const layer: Layer.Layer<never> = Layer.unwrap(
|
|
42
|
+
Effect.map(getOrCreateBaseLogger, layerPino),
|
|
43
|
+
);
|
package/src/Registry.test.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { assert, describe, it } from "@effect/vitest";
|
|
2
|
-
import { Action, Actor,
|
|
2
|
+
import { Action, Actor, Logger, Registry } from "@rivetkit/effect";
|
|
3
3
|
import { Effect, Layer } from "effect";
|
|
4
4
|
import { HttpEffect } from "effect/unstable/http";
|
|
5
|
-
import
|
|
5
|
+
import {
|
|
6
|
+
configureDefaultLogger,
|
|
7
|
+
getBaseLogger,
|
|
8
|
+
type Logger as PinoLogger,
|
|
9
|
+
} from "rivetkit/log";
|
|
6
10
|
import { vi } from "vitest";
|
|
7
11
|
|
|
8
12
|
const TestActor = Actor.make("TestActor", {
|
|
@@ -24,7 +28,7 @@ const RegistryLive = ActorsLayer.pipe(
|
|
|
24
28
|
),
|
|
25
29
|
);
|
|
26
30
|
|
|
27
|
-
function makeTestLogger():
|
|
31
|
+
function makeTestLogger(): PinoLogger {
|
|
28
32
|
const logger: Record<string, unknown> = {
|
|
29
33
|
level: "debug",
|
|
30
34
|
child: () => logger,
|
|
@@ -33,7 +37,7 @@ function makeTestLogger(): RivetkitLog.Logger {
|
|
|
33
37
|
logger[level] = (): void => {};
|
|
34
38
|
}
|
|
35
39
|
|
|
36
|
-
return logger as unknown as
|
|
40
|
+
return logger as unknown as PinoLogger;
|
|
37
41
|
}
|
|
38
42
|
|
|
39
43
|
describe("Registry.toWebHandler", () => {
|
|
@@ -220,7 +224,7 @@ describe("Registry.toWebHandler", () => {
|
|
|
220
224
|
it("uses a custom logger layer for the underlying RivetKit registry", async () => {
|
|
221
225
|
const baseLogger = makeTestLogger();
|
|
222
226
|
const CustomLoggerRegistryLive = RegistryLive.pipe(
|
|
223
|
-
Layer.provide(
|
|
227
|
+
Layer.provide(Logger.layerPino(baseLogger)),
|
|
224
228
|
);
|
|
225
229
|
const { handler, dispose } = Registry.toWebHandler(
|
|
226
230
|
CustomLoggerRegistryLive,
|
|
@@ -232,10 +236,10 @@ describe("Registry.toWebHandler", () => {
|
|
|
232
236
|
);
|
|
233
237
|
|
|
234
238
|
assert.strictEqual(response.status, 200);
|
|
235
|
-
assert.strictEqual(
|
|
239
|
+
assert.strictEqual(getBaseLogger(), baseLogger);
|
|
236
240
|
} finally {
|
|
237
241
|
await dispose();
|
|
238
|
-
|
|
242
|
+
configureDefaultLogger("silent");
|
|
239
243
|
}
|
|
240
244
|
});
|
|
241
245
|
|
package/src/Registry.ts
CHANGED
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
type HttpServerResponse,
|
|
8
8
|
} from "effect/unstable/http";
|
|
9
9
|
import * as Rivetkit from "rivetkit";
|
|
10
|
-
import
|
|
10
|
+
import { configureBaseLogger, type Logger as PinoLogger } from "rivetkit/log";
|
|
11
11
|
import * as Client from "./Client.ts";
|
|
12
12
|
import { BaseLogger, getOrCreateBaseLogger } from "./internal/logging.ts";
|
|
13
|
-
import * as
|
|
13
|
+
import * as Logger from "./Logger.ts";
|
|
14
14
|
|
|
15
15
|
const TypeId = "~@rivetkit/effect/Registry";
|
|
16
16
|
type ServerlessOptions = NonNullable<
|
|
@@ -19,7 +19,7 @@ type ServerlessOptions = NonNullable<
|
|
|
19
19
|
|
|
20
20
|
export type Options = Pick<
|
|
21
21
|
Rivetkit.RegistryConfigInput<Rivetkit.RegistryActors>,
|
|
22
|
-
"endpoint" | "token" | "namespace" | "noWelcome"
|
|
22
|
+
"endpoint" | "token" | "namespace" | "noWelcome"
|
|
23
23
|
>;
|
|
24
24
|
|
|
25
25
|
export interface Registry {
|
|
@@ -27,7 +27,7 @@ export interface Registry {
|
|
|
27
27
|
|
|
28
28
|
readonly options: Options;
|
|
29
29
|
|
|
30
|
-
readonly baseLogger:
|
|
30
|
+
readonly baseLogger: PinoLogger;
|
|
31
31
|
|
|
32
32
|
readonly rivetkitActors: Map<string, Rivetkit.AnyActorDefinition>;
|
|
33
33
|
}
|
|
@@ -35,49 +35,20 @@ export interface Registry {
|
|
|
35
35
|
export const Registry: Context.Service<Registry, Registry> =
|
|
36
36
|
Context.Service<Registry>("@rivetkit/effect/Registry");
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
*
|
|
48
|
-
* @param options - RivetKit runtime options shared by the registered actors.
|
|
49
|
-
*
|
|
50
|
-
* @returns A layer that provides the {@link Registry|`Registry.Registry`}
|
|
51
|
-
* service.
|
|
52
|
-
*
|
|
53
|
-
* @example
|
|
54
|
-
* ```ts
|
|
55
|
-
* import { Registry } from "@rivetkit/effect"
|
|
56
|
-
* import { Layer } from "effect"
|
|
57
|
-
*
|
|
58
|
-
* const ActorsLayer = Layer.mergeAll(ChatRoomLive, ModeratorLive)
|
|
59
|
-
*
|
|
60
|
-
* const MainLayer = Registry.serve(ActorsLayer).pipe(
|
|
61
|
-
* Layer.provide(Registry.layer({ endpoint: "http://127.0.0.1:6420" }))
|
|
62
|
-
* )
|
|
63
|
-
* ```
|
|
64
|
-
*
|
|
65
|
-
* @see {@link serve|`Registry.serve()`} for starting a long-running actor
|
|
66
|
-
* server.
|
|
67
|
-
* @see {@link toWebHandler|`Registry.toWebHandler()`} for Fetch-compatible
|
|
68
|
-
* serverless handlers.
|
|
69
|
-
* @see {@link toHttpEffect|`Registry.toHttpEffect()`} for Effect HTTP handlers.
|
|
70
|
-
*/
|
|
38
|
+
const make = (options: Options, baseLogger: PinoLogger): Registry => {
|
|
39
|
+
return Registry.of({
|
|
40
|
+
[TypeId]: TypeId,
|
|
41
|
+
options,
|
|
42
|
+
baseLogger,
|
|
43
|
+
rivetkitActors: new Map(),
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
|
|
71
47
|
export const layer = (options: Options = {}): Layer.Layer<Registry> =>
|
|
72
48
|
Layer.effect(
|
|
73
49
|
Registry,
|
|
74
50
|
Effect.map(getOrCreateBaseLogger, (baseLogger) =>
|
|
75
|
-
|
|
76
|
-
[TypeId]: TypeId,
|
|
77
|
-
options,
|
|
78
|
-
baseLogger,
|
|
79
|
-
rivetkitActors: new Map(),
|
|
80
|
-
}),
|
|
51
|
+
make(options, baseLogger),
|
|
81
52
|
),
|
|
82
53
|
);
|
|
83
54
|
|
|
@@ -86,53 +57,24 @@ const setupRivetkitRegistry = (
|
|
|
86
57
|
options?: {
|
|
87
58
|
readonly serverless?: ServerlessOptions | undefined;
|
|
88
59
|
},
|
|
89
|
-
) =>
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
60
|
+
) => {
|
|
61
|
+
configureBaseLogger(registry.baseLogger);
|
|
62
|
+
return Rivetkit.setup({
|
|
63
|
+
use: Object.fromEntries(registry.rivetkitActors),
|
|
64
|
+
...registry.options,
|
|
65
|
+
logging: { baseLogger: registry.baseLogger },
|
|
66
|
+
...(options?.serverless === undefined
|
|
67
|
+
? {}
|
|
68
|
+
: { serverless: options.serverless }),
|
|
69
|
+
});
|
|
70
|
+
};
|
|
100
71
|
|
|
101
72
|
/**
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
* @remarks
|
|
105
|
-
* Provide this with {@link layer|`Registry.layer()`} at the application root.
|
|
106
|
-
* Building the returned layer evaluates the actor layer, collects its registered
|
|
107
|
-
* actors, and starts the underlying RivetKit runtime using the options from
|
|
108
|
-
* {@link layer|`Registry.layer()`}. Launch the resulting layer with
|
|
109
|
-
* {@link Layer.launch|`Layer.launch()`} to keep the server process alive.
|
|
110
|
-
*
|
|
111
|
-
* @param actorsLayer - A layer containing one or more
|
|
112
|
-
* {@link Actor.Actor.toLayer|`Actor.toLayer()`} registrations.
|
|
113
|
-
*
|
|
114
|
-
* @returns A side-effecting startup layer that requires the
|
|
115
|
-
* {@link Registry|`Registry.Registry`} service and the services required by
|
|
116
|
-
* `actorsLayer`.
|
|
117
|
-
*
|
|
118
|
-
* @example
|
|
119
|
-
* ```ts
|
|
120
|
-
* import { Registry } from "@rivetkit/effect"
|
|
121
|
-
* import { Layer } from "effect"
|
|
122
|
-
*
|
|
123
|
-
* const ActorsLayer = Layer.mergeAll(ChatRoomLive, ModeratorLive)
|
|
124
|
-
*
|
|
125
|
-
* const MainLayer = Registry.serve(ActorsLayer).pipe(
|
|
126
|
-
* Layer.provide(Registry.layer({ endpoint: "http://127.0.0.1:6420" }))
|
|
127
|
-
* )
|
|
128
|
-
*
|
|
129
|
-
* Layer.launch(MainLayer).pipe(NodeRuntime.runMain);
|
|
130
|
-
* ```
|
|
131
|
-
*
|
|
132
|
-
* @see {@link toWebHandler|`Registry.toWebHandler()`} for Fetch-compatible
|
|
133
|
-
* serverless handlers.
|
|
134
|
-
* @see {@link toHttpEffect|`Registry.toHttpEffect()`} for Effect HTTP handlers.
|
|
73
|
+
* Runs an actor registration layer against the configured engine.
|
|
135
74
|
*
|
|
75
|
+
* The actor layer is built in the server layer scope. Registered Rivet Actors
|
|
76
|
+
* are collected from `Registry`, materialized into a single underlying RivetKit
|
|
77
|
+
* registry, and started.
|
|
136
78
|
*/
|
|
137
79
|
export const serve = <E, R>(
|
|
138
80
|
actorsLayer: Layer.Layer<never, E, R>,
|
|
@@ -140,14 +82,13 @@ export const serve = <E, R>(
|
|
|
140
82
|
Layer.effectDiscard(
|
|
141
83
|
Effect.gen(function* () {
|
|
142
84
|
const registry = yield* Registry;
|
|
85
|
+
const baseLogger = registry.baseLogger;
|
|
143
86
|
yield* Layer.build(
|
|
144
87
|
actorsLayer.pipe(
|
|
145
|
-
Layer.provideMerge(
|
|
146
|
-
RivetLogger.layerFromPino(registry.baseLogger),
|
|
147
|
-
),
|
|
88
|
+
Layer.provideMerge(Logger.layerPino(baseLogger)),
|
|
148
89
|
),
|
|
149
90
|
);
|
|
150
|
-
const rivetkitRegistry =
|
|
91
|
+
const rivetkitRegistry = setupRivetkitRegistry(registry);
|
|
151
92
|
yield* Effect.sync(() => rivetkitRegistry.start());
|
|
152
93
|
}),
|
|
153
94
|
);
|
|
@@ -166,7 +107,7 @@ export const test: Layer.Layer<Client.Client, never, Registry> = Layer.effect(
|
|
|
166
107
|
Client.Client,
|
|
167
108
|
Effect.gen(function* () {
|
|
168
109
|
const registry = yield* Registry;
|
|
169
|
-
const rivetkitRegistry =
|
|
110
|
+
const rivetkitRegistry = setupRivetkitRegistry(registry);
|
|
170
111
|
rivetkitRegistry.config.test = {
|
|
171
112
|
...rivetkitRegistry.config.test,
|
|
172
113
|
enabled: true,
|
|
@@ -204,21 +145,17 @@ const makeHttpEffect = (
|
|
|
204
145
|
registry: Registry,
|
|
205
146
|
options?: ToHttpEffectOptions,
|
|
206
147
|
): Effect.Effect<
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
}),
|
|
217
|
-
(rivetkitRegistry) =>
|
|
218
|
-
HttpEffect.fromWebHandler((request) =>
|
|
219
|
-
rivetkitRegistry.handler(request),
|
|
220
|
-
),
|
|
148
|
+
HttpServerResponse.HttpServerResponse,
|
|
149
|
+
HttpServerError.HttpServerError,
|
|
150
|
+
HttpServerRequest.HttpServerRequest
|
|
151
|
+
> => {
|
|
152
|
+
const rivetkitRegistry = setupRivetkitRegistry(registry, {
|
|
153
|
+
serverless: options,
|
|
154
|
+
});
|
|
155
|
+
return HttpEffect.fromWebHandler((request) =>
|
|
156
|
+
rivetkitRegistry.handler(request),
|
|
221
157
|
);
|
|
158
|
+
};
|
|
222
159
|
|
|
223
160
|
export type ToHttpEffectOptions = ServerlessOptions;
|
|
224
161
|
|
|
@@ -242,14 +179,12 @@ export const toHttpEffect = Effect.fnUntraced(function* <E>(
|
|
|
242
179
|
Scope.Scope
|
|
243
180
|
> {
|
|
244
181
|
const context = yield* Layer.build(
|
|
245
|
-
registryLayer.pipe(Layer.provideMerge(
|
|
246
|
-
);
|
|
247
|
-
const httpEffect = yield* makeHttpEffect(
|
|
248
|
-
Context.get(context, Registry),
|
|
249
|
-
options,
|
|
182
|
+
registryLayer.pipe(Layer.provideMerge(Logger.layer)),
|
|
250
183
|
);
|
|
251
184
|
// @effect-diagnostics-next-line returnEffectInGen:off
|
|
252
|
-
return
|
|
185
|
+
return makeHttpEffect(Context.get(context, Registry), options).pipe(
|
|
186
|
+
Effect.provide(context),
|
|
187
|
+
);
|
|
253
188
|
});
|
|
254
189
|
|
|
255
190
|
export type ToWebHandlerOptions = ServerlessOptions & {
|
|
@@ -286,17 +221,16 @@ export const toWebHandler = <E>(
|
|
|
286
221
|
}
|
|
287
222
|
|
|
288
223
|
const registryLayerWithLogging = registryLayer.pipe(
|
|
289
|
-
Layer.provideMerge(
|
|
224
|
+
Layer.provideMerge(Logger.layer),
|
|
290
225
|
);
|
|
291
226
|
|
|
292
227
|
return HttpEffect.toWebHandlerLayerWith(registryLayerWithLogging, {
|
|
293
228
|
toHandler: (context) =>
|
|
294
|
-
Effect.
|
|
229
|
+
Effect.succeed(
|
|
295
230
|
makeHttpEffect(
|
|
296
231
|
Context.get(context, Registry),
|
|
297
232
|
serverlessOptions,
|
|
298
|
-
),
|
|
299
|
-
(httpEffect) => httpEffect.pipe(Effect.provide(context)),
|
|
233
|
+
).pipe(Effect.provide(context)),
|
|
300
234
|
),
|
|
301
235
|
middleware,
|
|
302
236
|
memoMap,
|
package/src/RivetError.test.ts
CHANGED
|
@@ -121,13 +121,6 @@ describe("RivetError", () => {
|
|
|
121
121
|
"actor ready timeout",
|
|
122
122
|
),
|
|
123
123
|
);
|
|
124
|
-
const wakeRetriesExceeded = RivetError.fromUnknown(
|
|
125
|
-
new RivetkitErrors.RivetError(
|
|
126
|
-
"guard",
|
|
127
|
-
"actor_wake_retries_exceeded",
|
|
128
|
-
"actor wake retries exceeded",
|
|
129
|
-
),
|
|
130
|
-
);
|
|
131
124
|
const tunnelTimeout = RivetError.fromUnknown(
|
|
132
125
|
new RivetkitErrors.RivetError(
|
|
133
126
|
"guard",
|
|
@@ -144,10 +137,6 @@ describe("RivetError", () => {
|
|
|
144
137
|
readyTimeout.reason,
|
|
145
138
|
RivetError.GuardActorReadyTimeout,
|
|
146
139
|
);
|
|
147
|
-
assert.instanceOf(
|
|
148
|
-
wakeRetriesExceeded.reason,
|
|
149
|
-
RivetError.GuardActorWakeRetriesExceeded,
|
|
150
|
-
);
|
|
151
140
|
assert.instanceOf(
|
|
152
141
|
tunnelTimeout.reason,
|
|
153
142
|
RivetError.GuardTunnelMessageTimeout,
|
package/src/RivetError.ts
CHANGED
|
@@ -426,38 +426,6 @@ export class GuardActorReadyTimeout extends Schema.TaggedErrorClass<GuardActorRe
|
|
|
426
426
|
}
|
|
427
427
|
}
|
|
428
428
|
|
|
429
|
-
export class GuardActorWakeRetriesExceeded extends Schema.TaggedErrorClass<GuardActorWakeRetriesExceeded>(
|
|
430
|
-
`${ReasonTypeId}/GuardActorWakeRetriesExceeded`,
|
|
431
|
-
)("GuardActorWakeRetriesExceeded", {
|
|
432
|
-
cause: Schema.instanceOf(RivetkitErrors.RivetError),
|
|
433
|
-
}) {
|
|
434
|
-
readonly [ReasonTypeId] = ReasonTypeId;
|
|
435
|
-
override get message() {
|
|
436
|
-
return this.cause.message;
|
|
437
|
-
}
|
|
438
|
-
get group() {
|
|
439
|
-
return this.cause.group;
|
|
440
|
-
}
|
|
441
|
-
get code() {
|
|
442
|
-
return this.cause.code;
|
|
443
|
-
}
|
|
444
|
-
get metadata() {
|
|
445
|
-
return this.cause.metadata;
|
|
446
|
-
}
|
|
447
|
-
get actor() {
|
|
448
|
-
return this.cause.actor;
|
|
449
|
-
}
|
|
450
|
-
get statusCode() {
|
|
451
|
-
return this.cause.statusCode;
|
|
452
|
-
}
|
|
453
|
-
get public() {
|
|
454
|
-
return this.cause.public;
|
|
455
|
-
}
|
|
456
|
-
get isRetryable(): boolean {
|
|
457
|
-
return true;
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
|
|
461
429
|
export class GuardActorRunnerFailed extends Schema.TaggedErrorClass<GuardActorRunnerFailed>(
|
|
462
430
|
`${ReasonTypeId}/GuardActorRunnerFailed`,
|
|
463
431
|
)("GuardActorRunnerFailed", {
|
|
@@ -848,7 +816,6 @@ export type RivetErrorReason =
|
|
|
848
816
|
| InvalidEncoding
|
|
849
817
|
| InvalidRequest
|
|
850
818
|
| GuardActorReadyTimeout
|
|
851
|
-
| GuardActorWakeRetriesExceeded
|
|
852
819
|
| GuardActorRunnerFailed
|
|
853
820
|
| GuardServiceUnavailable
|
|
854
821
|
| GuardActorStoppedWhileWaiting
|
|
@@ -876,7 +843,6 @@ export const RivetErrorReason: Schema.Union<
|
|
|
876
843
|
typeof InvalidEncoding,
|
|
877
844
|
typeof InvalidRequest,
|
|
878
845
|
typeof GuardActorReadyTimeout,
|
|
879
|
-
typeof GuardActorWakeRetriesExceeded,
|
|
880
846
|
typeof GuardActorRunnerFailed,
|
|
881
847
|
typeof GuardServiceUnavailable,
|
|
882
848
|
typeof GuardActorStoppedWhileWaiting,
|
|
@@ -903,7 +869,6 @@ export const RivetErrorReason: Schema.Union<
|
|
|
903
869
|
InvalidEncoding,
|
|
904
870
|
InvalidRequest,
|
|
905
871
|
GuardActorReadyTimeout,
|
|
906
|
-
GuardActorWakeRetriesExceeded,
|
|
907
872
|
GuardActorRunnerFailed,
|
|
908
873
|
GuardServiceUnavailable,
|
|
909
874
|
GuardActorStoppedWhileWaiting,
|
|
@@ -1028,8 +993,6 @@ const reasonByCode: { [key: string]: MakeRivetErrorReason | undefined } = {
|
|
|
1028
993
|
"request.invalid": (error) => new InvalidRequest({ cause: error }),
|
|
1029
994
|
"guard.actor_ready_timeout": (error) =>
|
|
1030
995
|
new GuardActorReadyTimeout({ cause: error }),
|
|
1031
|
-
"guard.actor_wake_retries_exceeded": (error) =>
|
|
1032
|
-
new GuardActorWakeRetriesExceeded({ cause: error }),
|
|
1033
996
|
"guard.actor_runner_failed": (error) =>
|
|
1034
997
|
new GuardActorRunnerFailed({ cause: error }),
|
|
1035
998
|
"guard.service_unavailable": (error) =>
|