rivetkit 2.1.2 → 2.1.4
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/browser/client.d.ts +11 -0
- package/dist/browser/client.js +1 -1
- package/dist/browser/client.js.map +1 -1
- package/dist/browser/inspector/client.js +1 -1
- package/dist/browser/inspector/client.js.map +1 -1
- package/dist/inspector.tar.gz +0 -0
- package/dist/tsup/{chunk-MNS5LY6M.cjs → chunk-3B6PCYJB.cjs} +280 -115
- package/dist/tsup/chunk-3B6PCYJB.cjs.map +1 -0
- package/dist/tsup/{chunk-YQ5P6KMN.js → chunk-3GTO6H3E.js} +12 -5
- package/dist/tsup/chunk-3GTO6H3E.js.map +1 -0
- package/dist/tsup/{chunk-RMJJE43B.cjs → chunk-4KSHPFXF.cjs} +2 -2
- package/dist/tsup/{chunk-RMJJE43B.cjs.map → chunk-4KSHPFXF.cjs.map} +1 -1
- package/dist/tsup/{chunk-PW3YONDJ.js → chunk-5UEFNG7P.js} +2 -2
- package/dist/tsup/{chunk-PSUVV4HM.js → chunk-ANKZ2FS6.js} +2 -4
- package/dist/tsup/chunk-ANKZ2FS6.js.map +1 -0
- package/dist/tsup/{chunk-GVQAVU7R.cjs → chunk-AQD4CBZ2.cjs} +4 -4
- package/dist/tsup/{chunk-GVQAVU7R.cjs.map → chunk-AQD4CBZ2.cjs.map} +1 -1
- package/dist/tsup/{chunk-WUXR722E.js → chunk-DZXDUGLL.js} +2 -2
- package/dist/tsup/{chunk-WUXR722E.js.map → chunk-DZXDUGLL.js.map} +1 -1
- package/dist/tsup/{chunk-NXEHFUDB.cjs → chunk-GXRVSSVD.cjs} +28 -21
- package/dist/tsup/chunk-GXRVSSVD.cjs.map +1 -0
- package/dist/tsup/{chunk-UZV7NXC6.cjs → chunk-H5TSEPN4.cjs} +30 -30
- package/dist/tsup/{chunk-UZV7NXC6.cjs.map → chunk-H5TSEPN4.cjs.map} +1 -1
- package/dist/tsup/{chunk-TDFDR7AO.js → chunk-HBYEYBIC.js} +2 -2
- package/dist/tsup/{chunk-772NPMTY.cjs → chunk-HKOSZKKZ.cjs} +263 -299
- package/dist/tsup/chunk-HKOSZKKZ.cjs.map +1 -0
- package/dist/tsup/{chunk-HB4RGGMC.js → chunk-I6PL6QIY.js} +5 -5
- package/dist/tsup/{chunk-RHUII57M.js → chunk-KTWY3K6Z.js} +23 -12
- package/dist/tsup/chunk-KTWY3K6Z.js.map +1 -0
- package/dist/tsup/{chunk-HFWRHT5T.cjs → chunk-LK36OGGO.cjs} +3 -5
- package/dist/tsup/chunk-LK36OGGO.cjs.map +1 -0
- package/dist/tsup/{chunk-BSIJG3LG.js → chunk-M6H4XIF4.js} +179 -215
- package/dist/tsup/chunk-M6H4XIF4.js.map +1 -0
- package/dist/tsup/{chunk-ZHQDRRMY.cjs → chunk-QPADHLDU.cjs} +3 -3
- package/dist/tsup/{chunk-ZHQDRRMY.cjs.map → chunk-QPADHLDU.cjs.map} +1 -1
- package/dist/tsup/{chunk-BFI4LYS2.js → chunk-TEFYRRAK.js} +4 -4
- package/dist/tsup/{chunk-PZAV6PP2.cjs → chunk-TEUL4UYN.cjs} +152 -152
- package/dist/tsup/{chunk-PZAV6PP2.cjs.map → chunk-TEUL4UYN.cjs.map} +1 -1
- package/dist/tsup/{chunk-VMX4I4MP.js → chunk-UDMRZR6A.js} +212 -47
- package/dist/tsup/chunk-UDMRZR6A.js.map +1 -0
- package/dist/tsup/{chunk-QABDKI3W.cjs → chunk-UWAGLDT6.cjs} +263 -252
- package/dist/tsup/chunk-UWAGLDT6.cjs.map +1 -0
- package/dist/tsup/client/mod.cjs +6 -6
- package/dist/tsup/client/mod.d.cts +2 -2
- package/dist/tsup/client/mod.d.ts +2 -2
- package/dist/tsup/client/mod.js +5 -5
- package/dist/tsup/common/log.cjs +2 -2
- package/dist/tsup/common/log.js +1 -1
- package/dist/tsup/common/websocket.cjs +3 -3
- package/dist/tsup/common/websocket.js +2 -2
- package/dist/tsup/{config-P3XujgRr.d.ts → config-Qj-zLJPc.d.ts} +11 -0
- package/dist/tsup/{config-_gfywqqI.d.cts → config-iPj5l1bL.d.cts} +11 -0
- package/dist/tsup/{context-uNA4TRn3.d.ts → context-CQCMuHND.d.ts} +1 -1
- package/dist/tsup/{context-Bxd8Cx4H.d.cts → context-DzvH1PBK.d.cts} +1 -1
- package/dist/tsup/{driver-CPGHKXyh.d.ts → driver-Jo8v-kbU.d.ts} +1 -1
- package/dist/tsup/driver-helpers/mod.cjs +4 -4
- package/dist/tsup/driver-helpers/mod.d.cts +4 -4
- package/dist/tsup/driver-helpers/mod.d.ts +4 -4
- package/dist/tsup/driver-helpers/mod.js +3 -3
- package/dist/tsup/{driver-BcLvZcKl.d.cts → driver-iV8J-WMv.d.cts} +1 -1
- package/dist/tsup/driver-test-suite/mod.cjs +556 -333
- package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
- package/dist/tsup/driver-test-suite/mod.d.cts +2 -2
- package/dist/tsup/driver-test-suite/mod.d.ts +2 -2
- package/dist/tsup/driver-test-suite/mod.js +1332 -1109
- package/dist/tsup/driver-test-suite/mod.js.map +1 -1
- package/dist/tsup/inspector/mod.cjs +3 -3
- package/dist/tsup/inspector/mod.js +2 -2
- package/dist/tsup/mod.cjs +8 -8
- package/dist/tsup/mod.d.cts +5 -5
- package/dist/tsup/mod.d.ts +5 -5
- package/dist/tsup/mod.js +7 -7
- package/dist/tsup/serve-test-suite/mod.cjs +194 -100
- package/dist/tsup/serve-test-suite/mod.cjs.map +1 -1
- package/dist/tsup/serve-test-suite/mod.js +105 -11
- package/dist/tsup/serve-test-suite/mod.js.map +1 -1
- package/dist/tsup/test/mod.cjs +10 -10
- package/dist/tsup/test/mod.d.cts +1 -1
- package/dist/tsup/test/mod.d.ts +1 -1
- package/dist/tsup/test/mod.js +6 -6
- package/dist/tsup/utils.cjs +2 -2
- package/dist/tsup/utils.js +1 -1
- package/dist/tsup/workflow/mod.cjs +5 -5
- package/dist/tsup/workflow/mod.d.cts +3 -3
- package/dist/tsup/workflow/mod.d.ts +3 -3
- package/dist/tsup/workflow/mod.js +4 -4
- package/package.json +5 -5
- package/src/actor/config.ts +0 -2
- package/src/actor/instance/mod.ts +30 -6
- package/src/actor/router.ts +9 -6
- package/src/driver-test-suite/mod.ts +3 -0
- package/src/driver-test-suite/tests/actor-db.ts +299 -216
- package/src/driver-test-suite/tests/actor-driver.ts +4 -0
- package/src/driver-test-suite/tests/actor-lifecycle.ts +157 -0
- package/src/driver-test-suite/tests/actor-queue.ts +10 -9
- package/src/driver-test-suite/tests/actor-workflow.ts +12 -2
- package/src/driver-test-suite/tests/conn-error-serialization.ts +64 -0
- package/src/driver-test-suite/utils.ts +8 -8
- package/src/drivers/engine/actor-driver.ts +113 -11
- package/src/manager/router.ts +20 -6
- package/src/{registry → utils}/serve.ts +38 -4
- package/src/workflow/context.ts +4 -0
- package/src/workflow/driver.ts +4 -1
- package/dist/tsup/chunk-772NPMTY.cjs.map +0 -1
- package/dist/tsup/chunk-BSIJG3LG.js.map +0 -1
- package/dist/tsup/chunk-HFWRHT5T.cjs.map +0 -1
- package/dist/tsup/chunk-MNS5LY6M.cjs.map +0 -1
- package/dist/tsup/chunk-NXEHFUDB.cjs.map +0 -1
- package/dist/tsup/chunk-PSUVV4HM.js.map +0 -1
- package/dist/tsup/chunk-QABDKI3W.cjs.map +0 -1
- package/dist/tsup/chunk-RHUII57M.js.map +0 -1
- package/dist/tsup/chunk-VMX4I4MP.js.map +0 -1
- package/dist/tsup/chunk-YQ5P6KMN.js.map +0 -1
- /package/dist/tsup/{chunk-PW3YONDJ.js.map → chunk-5UEFNG7P.js.map} +0 -0
- /package/dist/tsup/{chunk-TDFDR7AO.js.map → chunk-HBYEYBIC.js.map} +0 -0
- /package/dist/tsup/{chunk-HB4RGGMC.js.map → chunk-I6PL6QIY.js.map} +0 -0
- /package/dist/tsup/{chunk-BFI4LYS2.js.map → chunk-TEFYRRAK.js.map} +0 -0
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
var
|
|
8
|
+
var _chunkUWAGLDT6cjs = require('./chunk-UWAGLDT6.cjs');
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
@@ -16,7 +16,7 @@ var _chunkQABDKI3Wcjs = require('./chunk-QABDKI3W.cjs');
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
var
|
|
19
|
+
var _chunkTEUL4UYNcjs = require('./chunk-TEUL4UYN.cjs');
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
|
|
@@ -45,17 +45,17 @@ var _chunkPZAV6PP2cjs = require('./chunk-PZAV6PP2.cjs');
|
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
|
|
48
|
-
var _chunkMNS5LY6Mcjs = require('./chunk-MNS5LY6M.cjs');
|
|
49
48
|
|
|
50
49
|
|
|
51
50
|
|
|
51
|
+
var _chunk3B6PCYJBcjs = require('./chunk-3B6PCYJB.cjs');
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
|
|
55
|
-
var _chunkHFWRHT5Tcjs = require('./chunk-HFWRHT5T.cjs');
|
|
56
55
|
|
|
57
56
|
|
|
58
57
|
|
|
58
|
+
var _chunkLK36OGGOcjs = require('./chunk-LK36OGGO.cjs');
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
|
|
@@ -71,7 +71,10 @@ var _chunkHFWRHT5Tcjs = require('./chunk-HFWRHT5T.cjs');
|
|
|
71
71
|
|
|
72
72
|
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
var _chunk4KSHPFXFcjs = require('./chunk-4KSHPFXF.cjs');
|
|
75
78
|
|
|
76
79
|
|
|
77
80
|
|
|
@@ -81,11 +84,11 @@ var _chunkL47L3ZWJcjs = require('./chunk-L47L3ZWJ.cjs');
|
|
|
81
84
|
|
|
82
85
|
// src/actor/mod.ts
|
|
83
86
|
function actor(input) {
|
|
84
|
-
const config =
|
|
85
|
-
return new (0,
|
|
87
|
+
const config = _chunkLK36OGGOcjs.ActorConfigSchema.parse(input);
|
|
88
|
+
return new (0, _chunkUWAGLDT6cjs.ActorDefinition)(config);
|
|
86
89
|
}
|
|
87
|
-
var event2 =
|
|
88
|
-
var queue2 =
|
|
90
|
+
var event2 = _chunkLK36OGGOcjs.event;
|
|
91
|
+
var queue2 = _chunkLK36OGGOcjs.queue;
|
|
89
92
|
|
|
90
93
|
// src/drivers/engine/actor-driver.ts
|
|
91
94
|
var _enginerunner = require('@rivetkit/engine-runner');
|
|
@@ -95,12 +98,13 @@ var _ws = require('hono/ws');
|
|
|
95
98
|
var _invariant = require('invariant'); var _invariant2 = _interopRequireDefault(_invariant);
|
|
96
99
|
|
|
97
100
|
// src/drivers/engine/log.ts
|
|
98
|
-
function
|
|
99
|
-
return
|
|
101
|
+
function logger2() {
|
|
102
|
+
return _chunk4KSHPFXFcjs.getLogger.call(void 0, "driver-engine");
|
|
100
103
|
}
|
|
101
104
|
|
|
102
105
|
// src/drivers/engine/actor-driver.ts
|
|
103
106
|
var RUNNER_SSE_PING_INTERVAL = 1e3;
|
|
107
|
+
var RUNNER_STOP_WAIT_MS = 15e3;
|
|
104
108
|
var CONN_MESSAGE_ACK_DEADLINE = 5e3;
|
|
105
109
|
var CONN_BUFFERED_MESSAGE_SIZE_THRESHOLD = 5e5;
|
|
106
110
|
var EngineActorDriver = class {
|
|
@@ -110,8 +114,8 @@ var EngineActorDriver = class {
|
|
|
110
114
|
#runner;
|
|
111
115
|
#actors = /* @__PURE__ */ new Map();
|
|
112
116
|
#actorRouter;
|
|
113
|
-
#runnerStarted =
|
|
114
|
-
#runnerStopped =
|
|
117
|
+
#runnerStarted = _chunk4KSHPFXFcjs.promiseWithResolvers.call(void 0, (reason) => logger2().warn({ msg: "unhandled runner started promise rejection", reason }));
|
|
118
|
+
#runnerStopped = _chunk4KSHPFXFcjs.promiseWithResolvers.call(void 0, (reason) => logger2().warn({ msg: "unhandled runner stopped promise rejection", reason }));
|
|
115
119
|
#isRunnerStopped = false;
|
|
116
120
|
// HACK: Track actor stop intent locally since the runner protocol doesn't
|
|
117
121
|
// pass the stop reason to onActorStop. This will be fixed when the runner
|
|
@@ -135,7 +139,7 @@ var EngineActorDriver = class {
|
|
|
135
139
|
this.#managerDriver = managerDriver;
|
|
136
140
|
this.#inlineClient = inlineClient;
|
|
137
141
|
const token = config.token;
|
|
138
|
-
this.#actorRouter =
|
|
142
|
+
this.#actorRouter = _chunkUWAGLDT6cjs.createActorRouter.call(void 0,
|
|
139
143
|
config,
|
|
140
144
|
this,
|
|
141
145
|
void 0,
|
|
@@ -143,16 +147,16 @@ var EngineActorDriver = class {
|
|
|
143
147
|
);
|
|
144
148
|
const engineRunnerConfig = {
|
|
145
149
|
version: config.runner.version,
|
|
146
|
-
endpoint:
|
|
150
|
+
endpoint: _chunkTEUL4UYNcjs.getEndpoint.call(void 0, config),
|
|
147
151
|
token,
|
|
148
152
|
namespace: config.namespace,
|
|
149
153
|
totalSlots: config.runner.totalSlots,
|
|
150
154
|
runnerName: config.runner.runnerName,
|
|
151
155
|
runnerKey: _nullishCoalesce(config.runner.runnerKey, () => ( crypto.randomUUID())),
|
|
152
156
|
metadata: {
|
|
153
|
-
rivetkit: { version:
|
|
157
|
+
rivetkit: { version: _chunk4KSHPFXFcjs.VERSION }
|
|
154
158
|
},
|
|
155
|
-
prepopulateActorNames:
|
|
159
|
+
prepopulateActorNames: _chunk3B6PCYJBcjs.buildActorNames.call(void 0, config),
|
|
156
160
|
onConnected: () => {
|
|
157
161
|
this.#runnerStarted.resolve(void 0);
|
|
158
162
|
},
|
|
@@ -169,11 +173,11 @@ var EngineActorDriver = class {
|
|
|
169
173
|
},
|
|
170
174
|
onActorStart: this.#runnerOnActorStart.bind(this),
|
|
171
175
|
onActorStop: this.#runnerOnActorStop.bind(this),
|
|
172
|
-
logger:
|
|
176
|
+
logger: _chunk4KSHPFXFcjs.getLogger.call(void 0, "engine-runner")
|
|
173
177
|
};
|
|
174
178
|
this.#runner = new (0, _enginerunner.Runner)(engineRunnerConfig);
|
|
175
179
|
this.#runner.start();
|
|
176
|
-
|
|
180
|
+
logger2().debug({
|
|
177
181
|
msg: "engine runner started",
|
|
178
182
|
endpoint: config.endpoint,
|
|
179
183
|
namespace: config.namespace,
|
|
@@ -188,6 +192,7 @@ var EngineActorDriver = class {
|
|
|
188
192
|
if (!handler)
|
|
189
193
|
throw new Error(`Actor handler does not exist ${actorId}`);
|
|
190
194
|
if (handler.actorStartPromise) await handler.actorStartPromise.promise;
|
|
195
|
+
if (handler.actorStartError) throw handler.actorStartError;
|
|
191
196
|
if (!handler.actor) throw new Error("Actor should be loaded");
|
|
192
197
|
return handler;
|
|
193
198
|
}
|
|
@@ -197,7 +202,7 @@ var EngineActorDriver = class {
|
|
|
197
202
|
async setAlarm(actor2, timestamp) {
|
|
198
203
|
const handler = this.#actors.get(actor2.id);
|
|
199
204
|
if (!handler) {
|
|
200
|
-
|
|
205
|
+
logger2().warn({
|
|
201
206
|
msg: "no handler for actor to set alarm"
|
|
202
207
|
});
|
|
203
208
|
return;
|
|
@@ -207,7 +212,7 @@ var EngineActorDriver = class {
|
|
|
207
212
|
handler.alarmTimeout = void 0;
|
|
208
213
|
}
|
|
209
214
|
const delay = Math.max(0, timestamp - Date.now());
|
|
210
|
-
handler.alarmTimeout =
|
|
215
|
+
handler.alarmTimeout = _chunk4KSHPFXFcjs.setLongTimeout.call(void 0, () => {
|
|
211
216
|
actor2.onAlarm();
|
|
212
217
|
handler.alarmTimeout = void 0;
|
|
213
218
|
}, delay);
|
|
@@ -230,7 +235,7 @@ var EngineActorDriver = class {
|
|
|
230
235
|
new Uint8Array()
|
|
231
236
|
);
|
|
232
237
|
const keys = entries.map(([key]) => key);
|
|
233
|
-
|
|
238
|
+
logger2().info({
|
|
234
239
|
msg: "kvList called",
|
|
235
240
|
actorId,
|
|
236
241
|
keysCount: keys.length,
|
|
@@ -240,7 +245,7 @@ var EngineActorDriver = class {
|
|
|
240
245
|
}
|
|
241
246
|
async kvListPrefix(actorId, prefix) {
|
|
242
247
|
const result = await this.#runner.kvListPrefix(actorId, prefix);
|
|
243
|
-
|
|
248
|
+
logger2().info({
|
|
244
249
|
msg: "kvListPrefix called",
|
|
245
250
|
actorId,
|
|
246
251
|
prefixStr: new TextDecoder().decode(prefix),
|
|
@@ -249,6 +254,12 @@ var EngineActorDriver = class {
|
|
|
249
254
|
});
|
|
250
255
|
return result;
|
|
251
256
|
}
|
|
257
|
+
/** Creates a SQLite VFS instance for creating KV-backed databases */
|
|
258
|
+
async createSqliteVfs() {
|
|
259
|
+
const specifier = "@rivetkit/sqlite-vfs";
|
|
260
|
+
const { SqliteVfs } = await Promise.resolve().then(() => _interopRequireWildcard(require(specifier)));
|
|
261
|
+
return new SqliteVfs();
|
|
262
|
+
}
|
|
252
263
|
// MARK: - Actor Lifecycle
|
|
253
264
|
async loadActor(actorId) {
|
|
254
265
|
const handler = await this.#loadActorHandler(actorId);
|
|
@@ -264,8 +275,8 @@ var EngineActorDriver = class {
|
|
|
264
275
|
this.#runner.stopActor(actorId);
|
|
265
276
|
}
|
|
266
277
|
async shutdownRunner(immediate) {
|
|
267
|
-
|
|
268
|
-
|
|
278
|
+
logger2().info({ msg: "stopping engine actor driver", immediate });
|
|
279
|
+
logger2().debug({
|
|
269
280
|
msg: "stopping all actors before shutdown",
|
|
270
281
|
actorCount: this.#actors.size
|
|
271
282
|
});
|
|
@@ -277,22 +288,46 @@ var EngineActorDriver = class {
|
|
|
277
288
|
var _a;
|
|
278
289
|
(_a = handler.actor) == null ? void 0 : _a.rLog.error({
|
|
279
290
|
msg: "onStop errored",
|
|
280
|
-
error:
|
|
291
|
+
error: _chunk4KSHPFXFcjs.stringifyError.call(void 0, err)
|
|
281
292
|
});
|
|
282
293
|
})
|
|
283
294
|
);
|
|
284
295
|
}
|
|
285
296
|
}
|
|
286
297
|
await Promise.all(stopPromises);
|
|
287
|
-
|
|
288
|
-
|
|
298
|
+
logger2().debug({ msg: "all actors stopped" });
|
|
299
|
+
try {
|
|
300
|
+
await this.#runner.shutdown(immediate);
|
|
301
|
+
} catch (error) {
|
|
302
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
303
|
+
if (message.includes("WebSocket connection closed during shutdown")) {
|
|
304
|
+
logger2().debug({
|
|
305
|
+
msg: "ignoring shutdown websocket close race",
|
|
306
|
+
error: message
|
|
307
|
+
});
|
|
308
|
+
} else {
|
|
309
|
+
throw error;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
const stopped = await Promise.race([
|
|
313
|
+
this.#runnerStopped.promise.then(() => true),
|
|
314
|
+
new Promise(
|
|
315
|
+
(resolve) => setTimeout(() => resolve(false), RUNNER_STOP_WAIT_MS)
|
|
316
|
+
)
|
|
317
|
+
]);
|
|
318
|
+
if (!stopped) {
|
|
319
|
+
logger2().warn({
|
|
320
|
+
msg: "timed out waiting for runner shutdown",
|
|
321
|
+
waitMs: RUNNER_STOP_WAIT_MS
|
|
322
|
+
});
|
|
323
|
+
}
|
|
289
324
|
}
|
|
290
325
|
async serverlessHandleStart(c) {
|
|
291
326
|
return _streaming.streamSSE.call(void 0, c, async (stream) => {
|
|
292
327
|
stream.onAbort(() => {
|
|
293
328
|
});
|
|
294
329
|
c.req.raw.signal.addEventListener("abort", () => {
|
|
295
|
-
|
|
330
|
+
logger2().debug("SSE aborted, shutting down runner");
|
|
296
331
|
this.shutdownRunner(false);
|
|
297
332
|
});
|
|
298
333
|
await this.#runnerStarted.promise;
|
|
@@ -301,13 +336,13 @@ var EngineActorDriver = class {
|
|
|
301
336
|
await stream.writeSSE({ data: payload });
|
|
302
337
|
while (true) {
|
|
303
338
|
if (this.#isRunnerStopped) {
|
|
304
|
-
|
|
339
|
+
logger2().debug({
|
|
305
340
|
msg: "runner is stopped"
|
|
306
341
|
});
|
|
307
342
|
break;
|
|
308
343
|
}
|
|
309
344
|
if (stream.closed || stream.aborted) {
|
|
310
|
-
|
|
345
|
+
logger2().debug({
|
|
311
346
|
msg: "runner sse stream closed",
|
|
312
347
|
closed: stream.closed,
|
|
313
348
|
aborted: stream.aborted
|
|
@@ -322,7 +357,7 @@ var EngineActorDriver = class {
|
|
|
322
357
|
}
|
|
323
358
|
async #runnerOnActorStart(actorId, generation, actorConfig) {
|
|
324
359
|
var _a;
|
|
325
|
-
|
|
360
|
+
logger2().debug({
|
|
326
361
|
msg: "runner actor starting",
|
|
327
362
|
actorId,
|
|
328
363
|
name: actorConfig.name,
|
|
@@ -336,33 +371,49 @@ var EngineActorDriver = class {
|
|
|
336
371
|
let handler = this.#actors.get(actorId);
|
|
337
372
|
if (!handler) {
|
|
338
373
|
handler = {
|
|
339
|
-
actorStartPromise:
|
|
374
|
+
actorStartPromise: _chunk4KSHPFXFcjs.promiseWithResolvers.call(void 0, (reason) => logger2().warn({ msg: "unhandled actor start promise rejection", reason }))
|
|
340
375
|
};
|
|
341
376
|
this.#actors.set(actorId, handler);
|
|
342
377
|
}
|
|
378
|
+
handler.actorStartError = void 0;
|
|
343
379
|
const name = actorConfig.name;
|
|
344
380
|
_invariant2.default.call(void 0, actorConfig.key, "actor should have a key");
|
|
345
|
-
const key =
|
|
381
|
+
const key = _chunk3B6PCYJBcjs.deserializeActorKey.call(void 0, actorConfig.key);
|
|
346
382
|
try {
|
|
347
383
|
const [persistDataBuffer] = await this.#runner.kvGet(actorId, [
|
|
348
|
-
|
|
384
|
+
_chunkLK36OGGOcjs.KEYS.PERSIST_DATA
|
|
349
385
|
]);
|
|
350
386
|
if (persistDataBuffer === null) {
|
|
351
|
-
const initialKvState =
|
|
387
|
+
const initialKvState = _chunk3B6PCYJBcjs.getInitialActorKvState.call(void 0, input);
|
|
352
388
|
await this.#runner.kvPut(actorId, initialKvState);
|
|
353
|
-
|
|
389
|
+
logger2().debug({
|
|
354
390
|
msg: "initialized persist data for new actor",
|
|
355
391
|
actorId
|
|
356
392
|
});
|
|
357
393
|
} else {
|
|
358
|
-
|
|
394
|
+
logger2().debug({
|
|
359
395
|
msg: "found existing persist data for actor",
|
|
360
396
|
actorId,
|
|
361
397
|
dataSize: persistDataBuffer.byteLength
|
|
362
398
|
});
|
|
363
399
|
}
|
|
364
|
-
const definition =
|
|
400
|
+
const definition = _chunkUWAGLDT6cjs.lookupInRegistry.call(void 0, this.#config, actorConfig.name);
|
|
365
401
|
handler.actor = await definition.instantiate();
|
|
402
|
+
const protocolMetadata = this.#runner.getProtocolMetadata();
|
|
403
|
+
if (protocolMetadata) {
|
|
404
|
+
logger2().debug({
|
|
405
|
+
msg: "applying config limits from protocol",
|
|
406
|
+
protocolMetadata
|
|
407
|
+
});
|
|
408
|
+
const stopThresholdMax = Math.max(Number(protocolMetadata.actorStopThreshold) - 1e3, 0);
|
|
409
|
+
handler.actor.overrides.onSleepTimeout = stopThresholdMax;
|
|
410
|
+
handler.actor.overrides.onDestroyTimeout = stopThresholdMax;
|
|
411
|
+
if (protocolMetadata.serverlessDrainGracePeriod) {
|
|
412
|
+
const drainMax = Math.max(Number(protocolMetadata.serverlessDrainGracePeriod) - 1e3, 0);
|
|
413
|
+
handler.actor.overrides.runStopTimeout = drainMax;
|
|
414
|
+
handler.actor.overrides.waitUntilTimeout = drainMax;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
366
417
|
await handler.actor.start(
|
|
367
418
|
this,
|
|
368
419
|
this.#inlineClient,
|
|
@@ -372,38 +423,71 @@ var EngineActorDriver = class {
|
|
|
372
423
|
"unknown"
|
|
373
424
|
// TODO: Add regions
|
|
374
425
|
);
|
|
375
|
-
|
|
426
|
+
logger2().debug({ msg: "runner actor started", actorId, name, key });
|
|
376
427
|
} catch (innerError) {
|
|
377
|
-
const error = new Error(
|
|
378
|
-
`Failed to start actor ${actorId}: ${innerError}`,
|
|
428
|
+
const error = innerError instanceof Error ? new Error(
|
|
429
|
+
`Failed to start actor ${actorId}: ${innerError.message}`,
|
|
379
430
|
{ cause: innerError }
|
|
380
|
-
);
|
|
431
|
+
) : new Error(`Failed to start actor ${actorId}: ${String(innerError)}`);
|
|
432
|
+
handler.actor = void 0;
|
|
433
|
+
handler.actorStartError = error;
|
|
381
434
|
(_a = handler.actorStartPromise) == null ? void 0 : _a.reject(error);
|
|
382
435
|
handler.actorStartPromise = void 0;
|
|
383
|
-
|
|
436
|
+
logger2().error({
|
|
437
|
+
msg: "runner actor failed to start",
|
|
438
|
+
actorId,
|
|
439
|
+
name,
|
|
440
|
+
key,
|
|
441
|
+
err: _chunk4KSHPFXFcjs.stringifyError.call(void 0, error)
|
|
442
|
+
});
|
|
443
|
+
try {
|
|
444
|
+
this.#runner.stopActor(actorId);
|
|
445
|
+
} catch (stopError) {
|
|
446
|
+
logger2().debug({
|
|
447
|
+
msg: "failed to stop actor after start failure",
|
|
448
|
+
actorId,
|
|
449
|
+
err: _chunk4KSHPFXFcjs.stringifyError.call(void 0, stopError)
|
|
450
|
+
});
|
|
451
|
+
}
|
|
384
452
|
}
|
|
385
453
|
}
|
|
386
454
|
async #runnerOnActorStop(actorId, generation) {
|
|
387
|
-
|
|
455
|
+
logger2().debug({ msg: "runner actor stopping", actorId, generation });
|
|
388
456
|
const reason = _nullishCoalesce(this.#actorStopIntent.get(actorId), () => ( "sleep"));
|
|
389
457
|
this.#actorStopIntent.delete(actorId);
|
|
390
458
|
const handler = this.#actors.get(actorId);
|
|
391
|
-
if (handler
|
|
459
|
+
if (!handler) {
|
|
460
|
+
logger2().debug({ msg: "no runner actor handler to stop", actorId, reason });
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
463
|
+
if (handler.actorStartPromise) {
|
|
464
|
+
try {
|
|
465
|
+
logger2().debug({ msg: "runner actor stopping before it started, waiting", actorId, generation });
|
|
466
|
+
await handler.actorStartPromise.promise;
|
|
467
|
+
} catch (err) {
|
|
468
|
+
logger2().debug({
|
|
469
|
+
msg: "actor start failed during stop, cleaning up handler",
|
|
470
|
+
actorId,
|
|
471
|
+
err: _chunk4KSHPFXFcjs.stringifyError.call(void 0, err)
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
if (handler.actor) {
|
|
392
476
|
try {
|
|
393
477
|
await handler.actor.onStop(reason);
|
|
394
478
|
} catch (err) {
|
|
395
|
-
|
|
479
|
+
logger2().error({
|
|
396
480
|
msg: "error in onStop, proceeding with removing actor",
|
|
397
|
-
err:
|
|
481
|
+
err: _chunk4KSHPFXFcjs.stringifyError.call(void 0, err)
|
|
398
482
|
});
|
|
399
483
|
}
|
|
400
|
-
this.#actors.delete(actorId);
|
|
401
484
|
}
|
|
402
|
-
|
|
485
|
+
this.#actors.delete(actorId);
|
|
486
|
+
logger2().debug({ msg: "runner actor stopped", actorId, reason });
|
|
403
487
|
}
|
|
404
488
|
// MARK: - Runner Networking
|
|
405
489
|
async #runnerFetch(_runner, actorId, _gatewayIdBuf, _requestIdBuf, request) {
|
|
406
|
-
|
|
490
|
+
logger2().debug({
|
|
407
491
|
msg: "runner fetch",
|
|
408
492
|
actorId,
|
|
409
493
|
url: request.url,
|
|
@@ -416,7 +500,7 @@ var EngineActorDriver = class {
|
|
|
416
500
|
const websocket = websocketRaw;
|
|
417
501
|
const wsUniqueId = `ws_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
418
502
|
websocket.__rivet_ws_id = wsUniqueId;
|
|
419
|
-
|
|
503
|
+
logger2().debug({
|
|
420
504
|
msg: "runner websocket",
|
|
421
505
|
actorId,
|
|
422
506
|
url: request.url,
|
|
@@ -427,10 +511,10 @@ var EngineActorDriver = class {
|
|
|
427
511
|
websocketProps: websocketRaw ? Object.keys(websocketRaw).join(", ") : "null"
|
|
428
512
|
});
|
|
429
513
|
const protocols = request.headers.get("sec-websocket-protocol");
|
|
430
|
-
const { encoding, connParams } =
|
|
514
|
+
const { encoding, connParams } = _chunk3B6PCYJBcjs.parseWebSocketProtocols.call(void 0, protocols);
|
|
431
515
|
let wsHandler;
|
|
432
516
|
try {
|
|
433
|
-
wsHandler = await
|
|
517
|
+
wsHandler = await _chunk3B6PCYJBcjs.routeWebSocket.call(void 0,
|
|
434
518
|
request,
|
|
435
519
|
requestPath,
|
|
436
520
|
requestHeaders,
|
|
@@ -445,7 +529,7 @@ var EngineActorDriver = class {
|
|
|
445
529
|
isRestoringHibernatable
|
|
446
530
|
);
|
|
447
531
|
} catch (err) {
|
|
448
|
-
|
|
532
|
+
logger2().error({ msg: "building websocket handlers errored", err });
|
|
449
533
|
websocketRaw.close(1011, "ws.route_error");
|
|
450
534
|
return;
|
|
451
535
|
}
|
|
@@ -453,8 +537,8 @@ var EngineActorDriver = class {
|
|
|
453
537
|
const wsContext = new (0, _ws.WSContext)(websocket);
|
|
454
538
|
const conn = wsHandler.conn;
|
|
455
539
|
const actor2 = wsHandler.actor;
|
|
456
|
-
const connStateManager = conn == null ? void 0 : conn[
|
|
457
|
-
|
|
540
|
+
const connStateManager = conn == null ? void 0 : conn[_chunk3B6PCYJBcjs.CONN_STATE_MANAGER_SYMBOL];
|
|
541
|
+
logger2().debug({
|
|
458
542
|
msg: "attaching websocket event listeners",
|
|
459
543
|
actorId,
|
|
460
544
|
connId: conn == null ? void 0 : conn.id,
|
|
@@ -470,7 +554,7 @@ var EngineActorDriver = class {
|
|
|
470
554
|
});
|
|
471
555
|
websocket.addEventListener("message", (event3) => {
|
|
472
556
|
var _a2, _b2;
|
|
473
|
-
|
|
557
|
+
logger2().debug({
|
|
474
558
|
msg: "websocket message event listener triggered",
|
|
475
559
|
connId: conn == null ? void 0 : conn.id,
|
|
476
560
|
actorId: actor2 == null ? void 0 : actor2.id,
|
|
@@ -483,7 +567,7 @@ var EngineActorDriver = class {
|
|
|
483
567
|
eventTargetWsId: (_b2 = event3.target) == null ? void 0 : _b2.__rivet_ws_id
|
|
484
568
|
});
|
|
485
569
|
if (actor2 == null ? void 0 : actor2.isStopping) {
|
|
486
|
-
|
|
570
|
+
logger2().debug({
|
|
487
571
|
msg: "ignoring ws message, actor is stopping",
|
|
488
572
|
connId: conn == null ? void 0 : conn.id,
|
|
489
573
|
actorId: actor2 == null ? void 0 : actor2.id,
|
|
@@ -491,7 +575,7 @@ var EngineActorDriver = class {
|
|
|
491
575
|
});
|
|
492
576
|
return;
|
|
493
577
|
}
|
|
494
|
-
|
|
578
|
+
logger2().debug({
|
|
495
579
|
msg: "calling wsHandler.onMessage",
|
|
496
580
|
connId: conn == null ? void 0 : conn.id,
|
|
497
581
|
messageIndex: event3.rivetMessageIndex
|
|
@@ -505,7 +589,7 @@ var EngineActorDriver = class {
|
|
|
505
589
|
);
|
|
506
590
|
const previousMsgIndex = hibernate.serverMessageIndex;
|
|
507
591
|
hibernate.serverMessageIndex = event3.rivetMessageIndex;
|
|
508
|
-
|
|
592
|
+
logger2().info({
|
|
509
593
|
msg: "persisting message index",
|
|
510
594
|
connId: conn.id,
|
|
511
595
|
previousMsgIndex,
|
|
@@ -513,7 +597,7 @@ var EngineActorDriver = class {
|
|
|
513
597
|
});
|
|
514
598
|
const entry = this.#hwsMessageIndex.get(conn.id);
|
|
515
599
|
if (entry) {
|
|
516
|
-
const messageLength =
|
|
600
|
+
const messageLength = _chunk3B6PCYJBcjs.getValueLength.call(void 0, event3.data);
|
|
517
601
|
entry.bufferedMessageSize += messageLength;
|
|
518
602
|
if (entry.bufferedMessageSize >= CONN_BUFFERED_MESSAGE_SIZE_THRESHOLD) {
|
|
519
603
|
entry.bufferedMessageSize = 0;
|
|
@@ -540,7 +624,7 @@ var EngineActorDriver = class {
|
|
|
540
624
|
wsHandler.onError(event3, wsContext);
|
|
541
625
|
});
|
|
542
626
|
if (isRestoringHibernatable) {
|
|
543
|
-
|
|
627
|
+
logger2().info({
|
|
544
628
|
msg: "event listeners attached to restored websocket",
|
|
545
629
|
actorId,
|
|
546
630
|
connId: conn == null ? void 0 : conn.id,
|
|
@@ -558,7 +642,7 @@ var EngineActorDriver = class {
|
|
|
558
642
|
const path = url.pathname;
|
|
559
643
|
const actorInstance = this.#runner.getActor(actorId);
|
|
560
644
|
if (!actorInstance) {
|
|
561
|
-
|
|
645
|
+
logger2().warn({
|
|
562
646
|
msg: "actor not found in #hwsCanHibernate",
|
|
563
647
|
actorId
|
|
564
648
|
});
|
|
@@ -566,28 +650,28 @@ var EngineActorDriver = class {
|
|
|
566
650
|
}
|
|
567
651
|
const handler = this.#actors.get(actorId);
|
|
568
652
|
if (!handler) {
|
|
569
|
-
|
|
653
|
+
logger2().warn({
|
|
570
654
|
msg: "actor handler not found in #hwsCanHibernate",
|
|
571
655
|
actorId
|
|
572
656
|
});
|
|
573
657
|
return false;
|
|
574
658
|
}
|
|
575
659
|
if (!handler.actor) {
|
|
576
|
-
|
|
660
|
+
logger2().warn({
|
|
577
661
|
msg: "actor not found in #hwsCanHibernate",
|
|
578
662
|
actorId
|
|
579
663
|
});
|
|
580
664
|
return false;
|
|
581
665
|
}
|
|
582
|
-
|
|
666
|
+
logger2().debug({
|
|
583
667
|
msg: "no existing hibernatable websocket found",
|
|
584
668
|
gatewayId: _enginerunner.idToStr.call(void 0, gatewayId),
|
|
585
669
|
requestId: _enginerunner.idToStr.call(void 0, requestId)
|
|
586
670
|
});
|
|
587
|
-
if (path ===
|
|
671
|
+
if (path === _chunk3B6PCYJBcjs.PATH_CONNECT) {
|
|
588
672
|
return true;
|
|
589
|
-
} else if (path ===
|
|
590
|
-
const definition =
|
|
673
|
+
} else if (path === _chunk3B6PCYJBcjs.PATH_WEBSOCKET_BASE || path.startsWith(_chunk3B6PCYJBcjs.PATH_WEBSOCKET_PREFIX)) {
|
|
674
|
+
const definition = _chunkUWAGLDT6cjs.lookupInRegistry.call(void 0,
|
|
591
675
|
this.#config,
|
|
592
676
|
actorInstance.config.name
|
|
593
677
|
);
|
|
@@ -596,7 +680,7 @@ var EngineActorDriver = class {
|
|
|
596
680
|
return true;
|
|
597
681
|
} else if (typeof canHibernateWebSocket === "function") {
|
|
598
682
|
try {
|
|
599
|
-
const newPath =
|
|
683
|
+
const newPath = _chunk3B6PCYJBcjs.truncateRawWebSocketPathPrefix.call(void 0,
|
|
600
684
|
url.pathname
|
|
601
685
|
);
|
|
602
686
|
const truncatedRequest = new Request(
|
|
@@ -606,7 +690,7 @@ var EngineActorDriver = class {
|
|
|
606
690
|
const canHibernate = canHibernateWebSocket(truncatedRequest);
|
|
607
691
|
return canHibernate;
|
|
608
692
|
} catch (error) {
|
|
609
|
-
|
|
693
|
+
logger2().error({
|
|
610
694
|
msg: "error calling canHibernateWebSocket",
|
|
611
695
|
error
|
|
612
696
|
});
|
|
@@ -615,10 +699,10 @@ var EngineActorDriver = class {
|
|
|
615
699
|
} else {
|
|
616
700
|
return false;
|
|
617
701
|
}
|
|
618
|
-
} else if (path ===
|
|
702
|
+
} else if (path === _chunk3B6PCYJBcjs.PATH_INSPECTOR_CONNECT) {
|
|
619
703
|
return false;
|
|
620
704
|
} else {
|
|
621
|
-
|
|
705
|
+
logger2().warn({
|
|
622
706
|
msg: "unexpected path for getActorHibernationConfig",
|
|
623
707
|
path
|
|
624
708
|
});
|
|
@@ -628,7 +712,7 @@ var EngineActorDriver = class {
|
|
|
628
712
|
async #hwsLoadAll(actorId) {
|
|
629
713
|
const actor2 = await this.loadActor(actorId);
|
|
630
714
|
return actor2.conns.values().map((conn) => {
|
|
631
|
-
const connStateManager = conn[
|
|
715
|
+
const connStateManager = conn[_chunk3B6PCYJBcjs.CONN_STATE_MANAGER_SYMBOL];
|
|
632
716
|
const hibernatable = connStateManager.hibernatableData;
|
|
633
717
|
if (!hibernatable) return void 0;
|
|
634
718
|
return {
|
|
@@ -645,13 +729,14 @@ var EngineActorDriver = class {
|
|
|
645
729
|
var _a;
|
|
646
730
|
const handler = this.#actors.get(actor2.id);
|
|
647
731
|
_invariant2.default.call(void 0, handler, "missing actor handler in onBeforeActorReady");
|
|
732
|
+
handler.actorStartError = void 0;
|
|
648
733
|
(_a = handler.actorStartPromise) == null ? void 0 : _a.resolve();
|
|
649
734
|
handler.actorStartPromise = void 0;
|
|
650
735
|
const metaEntries = await this.#hwsLoadAll(actor2.id);
|
|
651
736
|
await this.#runner.restoreHibernatingRequests(actor2.id, metaEntries);
|
|
652
737
|
}
|
|
653
738
|
onCreateConn(conn) {
|
|
654
|
-
const hibernatable = conn[
|
|
739
|
+
const hibernatable = conn[_chunk3B6PCYJBcjs.CONN_STATE_MANAGER_SYMBOL].hibernatableData;
|
|
655
740
|
if (!hibernatable) return;
|
|
656
741
|
this.#hwsMessageIndex.set(conn.id, {
|
|
657
742
|
serverMessageIndex: hibernatable.serverMessageIndex,
|
|
@@ -659,7 +744,7 @@ var EngineActorDriver = class {
|
|
|
659
744
|
pendingAckFromMessageIndex: false,
|
|
660
745
|
pendingAckFromBufferSize: false
|
|
661
746
|
});
|
|
662
|
-
|
|
747
|
+
logger2().debug({
|
|
663
748
|
msg: "created #hwsMessageIndex entry",
|
|
664
749
|
connId: conn.id,
|
|
665
750
|
serverMessageIndex: hibernatable.serverMessageIndex
|
|
@@ -667,17 +752,17 @@ var EngineActorDriver = class {
|
|
|
667
752
|
}
|
|
668
753
|
onDestroyConn(conn) {
|
|
669
754
|
this.#hwsMessageIndex.delete(conn.id);
|
|
670
|
-
|
|
755
|
+
logger2().debug({
|
|
671
756
|
msg: "removed #hwsMessageIndex entry",
|
|
672
757
|
connId: conn.id
|
|
673
758
|
});
|
|
674
759
|
}
|
|
675
760
|
onBeforePersistConn(conn) {
|
|
676
|
-
const stateManager = conn[
|
|
761
|
+
const stateManager = conn[_chunk3B6PCYJBcjs.CONN_STATE_MANAGER_SYMBOL];
|
|
677
762
|
const hibernatable = stateManager.hibernatableDataOrError();
|
|
678
763
|
const entry = this.#hwsMessageIndex.get(conn.id);
|
|
679
764
|
if (!entry) {
|
|
680
|
-
|
|
765
|
+
logger2().warn({
|
|
681
766
|
msg: "missing EngineActorDriver.#hwsMessageIndex entry for conn",
|
|
682
767
|
connId: conn.id
|
|
683
768
|
});
|
|
@@ -687,11 +772,11 @@ var EngineActorDriver = class {
|
|
|
687
772
|
entry.serverMessageIndex = hibernatable.serverMessageIndex;
|
|
688
773
|
}
|
|
689
774
|
onAfterPersistConn(conn) {
|
|
690
|
-
const stateManager = conn[
|
|
775
|
+
const stateManager = conn[_chunk3B6PCYJBcjs.CONN_STATE_MANAGER_SYMBOL];
|
|
691
776
|
const hibernatable = stateManager.hibernatableDataOrError();
|
|
692
777
|
const entry = this.#hwsMessageIndex.get(conn.id);
|
|
693
778
|
if (!entry) {
|
|
694
|
-
|
|
779
|
+
logger2().warn({
|
|
695
780
|
msg: "missing EngineActorDriver.#hwsMessageIndex entry for conn",
|
|
696
781
|
connId: conn.id
|
|
697
782
|
});
|
|
@@ -712,9 +797,9 @@ var EngineActorDriver = class {
|
|
|
712
797
|
|
|
713
798
|
// src/drivers/engine/config.ts
|
|
714
799
|
var _v4 = require('zod/v4');
|
|
715
|
-
var EngineConfigSchemaBase =
|
|
800
|
+
var EngineConfigSchemaBase = _chunkTEUL4UYNcjs.ClientConfigSchemaBase.extend({
|
|
716
801
|
/** Unique key for this runner. Runners connecting a given key will replace any other runner connected with the same key. */
|
|
717
|
-
runnerKey: _v4.z.string().optional().transform((val) => _nullishCoalesce(val, () => (
|
|
802
|
+
runnerKey: _v4.z.string().optional().transform((val) => _nullishCoalesce(val, () => ( _chunk4KSHPFXFcjs.getRivetRunnerKey.call(void 0, )))),
|
|
718
803
|
/** How many actors this runner can run. */
|
|
719
804
|
totalSlots: _v4.z.number().default(1e5)
|
|
720
805
|
});
|
|
@@ -726,7 +811,7 @@ var EngineConfigSchema = EngineConfigSchemaTransformed.default(
|
|
|
726
811
|
);
|
|
727
812
|
function transformEngineConfig(config, ctx) {
|
|
728
813
|
return {
|
|
729
|
-
...
|
|
814
|
+
..._chunkTEUL4UYNcjs.transformClientConfig.call(void 0, config, ctx),
|
|
730
815
|
runnerKey: config.runnerKey
|
|
731
816
|
};
|
|
732
817
|
}
|
|
@@ -737,8 +822,8 @@ function createEngineDriver() {
|
|
|
737
822
|
name: "engine",
|
|
738
823
|
displayName: "Engine",
|
|
739
824
|
manager: (config) => {
|
|
740
|
-
const clientConfig =
|
|
741
|
-
return new (0,
|
|
825
|
+
const clientConfig = _chunkTEUL4UYNcjs.convertRegistryConfigToClientConfig.call(void 0, config);
|
|
826
|
+
return new (0, _chunkTEUL4UYNcjs.RemoteManagerDriver)(clientConfig);
|
|
742
827
|
},
|
|
743
828
|
actor: (config, managerDriver, inlineClient) => {
|
|
744
829
|
return new EngineActorDriver(
|
|
@@ -766,15 +851,15 @@ var LegacyRunnerConfigSchemaUnmerged = _v4.z.object({
|
|
|
766
851
|
/** @experimental */
|
|
767
852
|
maxOutgoingMessageSize: _v4.z.number().optional().default(1048576),
|
|
768
853
|
/** @experimental */
|
|
769
|
-
inspector:
|
|
854
|
+
inspector: _chunk3B6PCYJBcjs.InspectorConfigSchema,
|
|
770
855
|
/** @experimental */
|
|
771
856
|
disableDefaultServer: _v4.z.boolean().optional().default(false),
|
|
772
857
|
/** @experimental */
|
|
773
858
|
defaultServerPort: _v4.z.number().default(6420),
|
|
774
859
|
/** @experimental */
|
|
775
|
-
runEngine: _v4.z.boolean().optional().default(() =>
|
|
860
|
+
runEngine: _v4.z.boolean().optional().default(() => _chunk4KSHPFXFcjs.getRivetRunEngine.call(void 0, )),
|
|
776
861
|
/** @experimental */
|
|
777
|
-
runEngineVersion: _v4.z.string().optional().default(() => _nullishCoalesce(
|
|
862
|
+
runEngineVersion: _v4.z.string().optional().default(() => _nullishCoalesce(_chunk4KSHPFXFcjs.getRivetRunEngineVersion.call(void 0, ), () => ( _chunk4KSHPFXFcjs.VERSION))),
|
|
778
863
|
/** @experimental */
|
|
779
864
|
overrideServerAddress: _v4.z.string().optional(),
|
|
780
865
|
/** @experimental */
|
|
@@ -786,7 +871,7 @@ var LegacyRunnerConfigSchemaUnmerged = _v4.z.object({
|
|
|
786
871
|
* serverlessly (by the Rivet Engine for example).
|
|
787
872
|
*/
|
|
788
873
|
runnerKind: _v4.z.enum(["serverless", "normal"]).optional().default(
|
|
789
|
-
() =>
|
|
874
|
+
() => _chunk4KSHPFXFcjs.getRivetRunnerKind.call(void 0, ) === "serverless" ? "serverless" : "normal"
|
|
790
875
|
),
|
|
791
876
|
totalSlots: _v4.z.number().optional(),
|
|
792
877
|
/**
|
|
@@ -808,7 +893,7 @@ var LegacyRunnerConfigSchemaUnmerged = _v4.z.object({
|
|
|
808
893
|
* */
|
|
809
894
|
logging: _v4.z.object({
|
|
810
895
|
baseLogger: _v4.z.custom().optional(),
|
|
811
|
-
level:
|
|
896
|
+
level: _chunk4KSHPFXFcjs.LogLevelSchema.optional()
|
|
812
897
|
}).optional().default(() => ({})),
|
|
813
898
|
/**
|
|
814
899
|
* @experimental
|
|
@@ -836,7 +921,7 @@ var LegacyRunnerConfigSchemaUnmerged = _v4.z.object({
|
|
|
836
921
|
// created or must be imported async using `await import(...)`
|
|
837
922
|
getUpgradeWebSocket: _v4.z.custom().optional(),
|
|
838
923
|
/** @experimental */
|
|
839
|
-
token: _v4.z.string().optional().transform((v) => v ||
|
|
924
|
+
token: _v4.z.string().optional().transform((v) => v || _chunk4KSHPFXFcjs.getRivetToken.call(void 0, ))
|
|
840
925
|
}).merge(EngineConfigSchemaBase);
|
|
841
926
|
var LegacyRunnerConfigSchemaTransformed = LegacyRunnerConfigSchemaUnmerged.transform((config, ctx) => ({
|
|
842
927
|
...config,
|
|
@@ -860,53 +945,53 @@ function chooseDefaultDriver(config) {
|
|
|
860
945
|
return config.driver;
|
|
861
946
|
}
|
|
862
947
|
if (config.endpoint || config.token) {
|
|
863
|
-
|
|
948
|
+
_chunkLK36OGGOcjs.loggerWithoutContext.call(void 0, ).debug({
|
|
864
949
|
msg: "using rivet engine driver",
|
|
865
950
|
endpoint: config.endpoint
|
|
866
951
|
});
|
|
867
952
|
return createEngineDriver();
|
|
868
953
|
}
|
|
869
|
-
|
|
954
|
+
_chunkLK36OGGOcjs.loggerWithoutContext.call(void 0, ).debug({
|
|
870
955
|
msg: "using default file system driver",
|
|
871
956
|
storagePath: config.storagePath
|
|
872
957
|
});
|
|
873
|
-
return
|
|
958
|
+
return _chunkUWAGLDT6cjs.createFileSystemOrMemoryDriver.call(void 0, true, {
|
|
874
959
|
path: config.storagePath
|
|
875
960
|
});
|
|
876
961
|
}
|
|
877
962
|
|
|
878
963
|
// src/engine-process/log.ts
|
|
879
|
-
function
|
|
880
|
-
return
|
|
964
|
+
function logger3() {
|
|
965
|
+
return _chunk4KSHPFXFcjs.getLogger.call(void 0, "engine-process");
|
|
881
966
|
}
|
|
882
967
|
|
|
883
968
|
// src/engine-process/mod.ts
|
|
884
969
|
var ENGINE_BASE_URL = "https://releases.rivet.dev/rivet";
|
|
885
970
|
var ENGINE_BINARY_NAME = "rivet-engine";
|
|
886
971
|
async function ensureEngineProcess(options) {
|
|
887
|
-
|
|
888
|
-
|
|
972
|
+
_chunk3B6PCYJBcjs.importNodeDependencies.call(void 0, );
|
|
973
|
+
logger3().debug({
|
|
889
974
|
msg: "ensuring engine process",
|
|
890
975
|
version: options.version
|
|
891
976
|
});
|
|
892
|
-
const path =
|
|
893
|
-
const storageRoot =
|
|
977
|
+
const path = _chunk3B6PCYJBcjs.getNodePath.call(void 0, );
|
|
978
|
+
const storageRoot = _chunkUWAGLDT6cjs.getStoragePath.call(void 0, );
|
|
894
979
|
const binDir = path.join(storageRoot, "bin");
|
|
895
980
|
const varDir = path.join(storageRoot, "var");
|
|
896
981
|
const logsDir = path.join(varDir, "logs", "rivet-engine");
|
|
897
|
-
await
|
|
898
|
-
await
|
|
899
|
-
await
|
|
982
|
+
await _chunkUWAGLDT6cjs.ensureDirectoryExists.call(void 0, binDir);
|
|
983
|
+
await _chunkUWAGLDT6cjs.ensureDirectoryExists.call(void 0, varDir);
|
|
984
|
+
await _chunkUWAGLDT6cjs.ensureDirectoryExists.call(void 0, logsDir);
|
|
900
985
|
if (await isEngineRunning()) {
|
|
901
986
|
try {
|
|
902
987
|
const health = await waitForEngineHealth();
|
|
903
|
-
|
|
988
|
+
logger3().debug({
|
|
904
989
|
msg: "engine already running and healthy",
|
|
905
990
|
version: health.version
|
|
906
991
|
});
|
|
907
992
|
return;
|
|
908
993
|
} catch (error) {
|
|
909
|
-
|
|
994
|
+
logger3().warn({
|
|
910
995
|
msg: "existing engine process not healthy, cannot restart automatically",
|
|
911
996
|
error
|
|
912
997
|
});
|
|
@@ -921,19 +1006,19 @@ async function ensureEngineProcess(options) {
|
|
|
921
1006
|
const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/:/g, "-").replace(/\./g, "-");
|
|
922
1007
|
const stdoutLogPath = path.join(logsDir, `engine-${timestamp}-stdout.log`);
|
|
923
1008
|
const stderrLogPath = path.join(logsDir, `engine-${timestamp}-stderr.log`);
|
|
924
|
-
const fsSync =
|
|
1009
|
+
const fsSync = _chunk3B6PCYJBcjs.getNodeFsSync.call(void 0, );
|
|
925
1010
|
const stdoutStream = fsSync.createWriteStream(stdoutLogPath, {
|
|
926
1011
|
flags: "a"
|
|
927
1012
|
});
|
|
928
1013
|
const stderrStream = fsSync.createWriteStream(stderrLogPath, {
|
|
929
1014
|
flags: "a"
|
|
930
1015
|
});
|
|
931
|
-
|
|
1016
|
+
logger3().debug({
|
|
932
1017
|
msg: "creating engine log files",
|
|
933
1018
|
stdout: stdoutLogPath,
|
|
934
1019
|
stderr: stderrLogPath
|
|
935
1020
|
});
|
|
936
|
-
const childProcess =
|
|
1021
|
+
const childProcess = _chunk3B6PCYJBcjs.getNodeChildProcess.call(void 0, );
|
|
937
1022
|
const child = childProcess.spawn(binaryPath, ["start"], {
|
|
938
1023
|
cwd: path.dirname(binaryPath),
|
|
939
1024
|
stdio: ["inherit", "pipe", "pipe"],
|
|
@@ -985,7 +1070,7 @@ async function ensureEngineProcess(options) {
|
|
|
985
1070
|
});
|
|
986
1071
|
child.stderr.pipe(stderrStream);
|
|
987
1072
|
}
|
|
988
|
-
|
|
1073
|
+
logger3().debug({
|
|
989
1074
|
msg: "spawned engine process",
|
|
990
1075
|
pid: child.pid,
|
|
991
1076
|
cwd: path.dirname(binaryPath)
|
|
@@ -993,7 +1078,7 @@ async function ensureEngineProcess(options) {
|
|
|
993
1078
|
child.once("exit", (code, signal) => {
|
|
994
1079
|
const stderrOutput = Buffer.concat(stderrChunks).toString("utf-8");
|
|
995
1080
|
if (stderrOutput.includes("LOCK: Resource temporarily unavailable")) {
|
|
996
|
-
|
|
1081
|
+
logger3().error({
|
|
997
1082
|
msg: "another instance of rivet engine is unexpectedly running, this is an internal error",
|
|
998
1083
|
code,
|
|
999
1084
|
signal,
|
|
@@ -1003,7 +1088,7 @@ async function ensureEngineProcess(options) {
|
|
|
1003
1088
|
support: "https://rivet.dev/discord"
|
|
1004
1089
|
});
|
|
1005
1090
|
} else if (stderrOutput.includes("Rivet Engine has been rolled back to a previous version")) {
|
|
1006
|
-
|
|
1091
|
+
logger3().error({
|
|
1007
1092
|
msg: "rivet engine version downgrade detected",
|
|
1008
1093
|
hint: `You attempted to downgrade the RivetKit version in development. To fix this, nuke the database by running: '${binaryPath}' database nuke --yes`,
|
|
1009
1094
|
code,
|
|
@@ -1012,7 +1097,7 @@ async function ensureEngineProcess(options) {
|
|
|
1012
1097
|
stderrLog: stderrLogPath
|
|
1013
1098
|
});
|
|
1014
1099
|
} else {
|
|
1015
|
-
|
|
1100
|
+
logger3().warn({
|
|
1016
1101
|
msg: "engine process exited, please report this error",
|
|
1017
1102
|
code,
|
|
1018
1103
|
signal,
|
|
@@ -1026,7 +1111,7 @@ async function ensureEngineProcess(options) {
|
|
|
1026
1111
|
stderrStream.end();
|
|
1027
1112
|
});
|
|
1028
1113
|
child.once("error", (error) => {
|
|
1029
|
-
|
|
1114
|
+
logger3().error({
|
|
1030
1115
|
msg: "engine process failed",
|
|
1031
1116
|
error
|
|
1032
1117
|
});
|
|
@@ -1034,7 +1119,7 @@ async function ensureEngineProcess(options) {
|
|
|
1034
1119
|
stderrStream.end();
|
|
1035
1120
|
});
|
|
1036
1121
|
await waitForEngineHealth();
|
|
1037
|
-
|
|
1122
|
+
logger3().info({
|
|
1038
1123
|
msg: "engine process started",
|
|
1039
1124
|
pid: child.pid,
|
|
1040
1125
|
version: options.version,
|
|
@@ -1047,7 +1132,7 @@ async function ensureEngineProcess(options) {
|
|
|
1047
1132
|
async function downloadEngineBinaryIfNeeded(binaryPath, version, varDir) {
|
|
1048
1133
|
const binaryExists = await fileExists(binaryPath);
|
|
1049
1134
|
if (binaryExists) {
|
|
1050
|
-
|
|
1135
|
+
logger3().debug({
|
|
1051
1136
|
msg: "engine binary already cached",
|
|
1052
1137
|
version,
|
|
1053
1138
|
path: binaryPath
|
|
@@ -1057,7 +1142,7 @@ async function downloadEngineBinaryIfNeeded(binaryPath, version, varDir) {
|
|
|
1057
1142
|
const { targetTriplet, extension } = resolveTargetTriplet();
|
|
1058
1143
|
const remoteFile = `${ENGINE_BINARY_NAME}-${targetTriplet}${extension}`;
|
|
1059
1144
|
const downloadUrl = `${ENGINE_BASE_URL}/${version}/engine/${remoteFile}`;
|
|
1060
|
-
|
|
1145
|
+
logger3().info({
|
|
1061
1146
|
msg: "downloading engine binary",
|
|
1062
1147
|
url: downloadUrl,
|
|
1063
1148
|
path: binaryPath,
|
|
@@ -1069,50 +1154,50 @@ async function downloadEngineBinaryIfNeeded(binaryPath, version, varDir) {
|
|
|
1069
1154
|
`failed to download rivet engine binary from ${downloadUrl}: ${response.status} ${response.statusText}`
|
|
1070
1155
|
);
|
|
1071
1156
|
}
|
|
1072
|
-
const crypto2 =
|
|
1157
|
+
const crypto2 = _chunk3B6PCYJBcjs.getNodeCrypto.call(void 0, );
|
|
1073
1158
|
const tempPath = `${binaryPath}.${crypto2.randomUUID()}.tmp`;
|
|
1074
1159
|
const startTime = Date.now();
|
|
1075
|
-
|
|
1160
|
+
logger3().debug({
|
|
1076
1161
|
msg: "starting binary download",
|
|
1077
1162
|
tempPath,
|
|
1078
1163
|
contentLength: response.headers.get("content-length")
|
|
1079
1164
|
});
|
|
1080
1165
|
const slowDownloadWarning = setTimeout(() => {
|
|
1081
|
-
|
|
1166
|
+
logger3().warn({
|
|
1082
1167
|
msg: "engine binary download is taking longer than expected, please be patient",
|
|
1083
1168
|
version
|
|
1084
1169
|
});
|
|
1085
1170
|
}, 5e3);
|
|
1086
1171
|
try {
|
|
1087
|
-
const stream =
|
|
1088
|
-
const fsSync =
|
|
1172
|
+
const stream = _chunk3B6PCYJBcjs.getNodeStream.call(void 0, );
|
|
1173
|
+
const fsSync = _chunk3B6PCYJBcjs.getNodeFsSync.call(void 0, );
|
|
1089
1174
|
await stream.pipeline(
|
|
1090
1175
|
response.body,
|
|
1091
1176
|
fsSync.createWriteStream(tempPath)
|
|
1092
1177
|
);
|
|
1093
1178
|
clearTimeout(slowDownloadWarning);
|
|
1094
|
-
const fs =
|
|
1179
|
+
const fs = _chunk3B6PCYJBcjs.getNodeFs.call(void 0, );
|
|
1095
1180
|
const stats = await fs.stat(tempPath);
|
|
1096
1181
|
const downloadDuration = Date.now() - startTime;
|
|
1097
1182
|
if (process.platform !== "win32") {
|
|
1098
1183
|
await fs.chmod(tempPath, 493);
|
|
1099
1184
|
}
|
|
1100
1185
|
await fs.rename(tempPath, binaryPath);
|
|
1101
|
-
|
|
1186
|
+
logger3().debug({
|
|
1102
1187
|
msg: "engine binary download complete",
|
|
1103
1188
|
version,
|
|
1104
1189
|
path: binaryPath,
|
|
1105
1190
|
size: stats.size,
|
|
1106
1191
|
durationMs: downloadDuration
|
|
1107
1192
|
});
|
|
1108
|
-
|
|
1193
|
+
logger3().info({
|
|
1109
1194
|
msg: "engine binary downloaded",
|
|
1110
1195
|
version,
|
|
1111
1196
|
path: binaryPath
|
|
1112
1197
|
});
|
|
1113
1198
|
} catch (error) {
|
|
1114
1199
|
clearTimeout(slowDownloadWarning);
|
|
1115
|
-
|
|
1200
|
+
logger3().warn({
|
|
1116
1201
|
msg: "engine download failed, please report this error",
|
|
1117
1202
|
tempPath,
|
|
1118
1203
|
error,
|
|
@@ -1120,7 +1205,7 @@ async function downloadEngineBinaryIfNeeded(binaryPath, version, varDir) {
|
|
|
1120
1205
|
support: "https://rivet.dev/discord"
|
|
1121
1206
|
});
|
|
1122
1207
|
try {
|
|
1123
|
-
const fs =
|
|
1208
|
+
const fs = _chunk3B6PCYJBcjs.getNodeFs.call(void 0, );
|
|
1124
1209
|
await fs.unlink(tempPath);
|
|
1125
1210
|
} catch (unlinkError) {
|
|
1126
1211
|
}
|
|
@@ -1162,7 +1247,7 @@ function resolveTargetTripletFor(platform, arch) {
|
|
|
1162
1247
|
);
|
|
1163
1248
|
}
|
|
1164
1249
|
async function isEngineRunning() {
|
|
1165
|
-
return await checkIfEngineAlreadyRunningOnPort(
|
|
1250
|
+
return await checkIfEngineAlreadyRunningOnPort(_chunk3B6PCYJBcjs.ENGINE_PORT);
|
|
1166
1251
|
}
|
|
1167
1252
|
async function checkIfEngineAlreadyRunningOnPort(port) {
|
|
1168
1253
|
let response;
|
|
@@ -1174,13 +1259,13 @@ async function checkIfEngineAlreadyRunningOnPort(port) {
|
|
|
1174
1259
|
if (response.ok) {
|
|
1175
1260
|
const health = await response.json();
|
|
1176
1261
|
if (health.runtime === "engine") {
|
|
1177
|
-
|
|
1262
|
+
logger3().debug({
|
|
1178
1263
|
msg: "rivet engine already running on port",
|
|
1179
1264
|
port
|
|
1180
1265
|
});
|
|
1181
1266
|
return true;
|
|
1182
1267
|
} else if (health.runtime === "rivetkit") {
|
|
1183
|
-
|
|
1268
|
+
logger3().error({
|
|
1184
1269
|
msg: "another rivetkit process is already running on port",
|
|
1185
1270
|
port
|
|
1186
1271
|
});
|
|
@@ -1197,7 +1282,7 @@ async function checkIfEngineAlreadyRunningOnPort(port) {
|
|
|
1197
1282
|
}
|
|
1198
1283
|
async function fileExists(filePath) {
|
|
1199
1284
|
try {
|
|
1200
|
-
const fs =
|
|
1285
|
+
const fs = _chunk3B6PCYJBcjs.getNodeFs.call(void 0, );
|
|
1201
1286
|
await fs.access(filePath);
|
|
1202
1287
|
return true;
|
|
1203
1288
|
} catch (e) {
|
|
@@ -1208,19 +1293,19 @@ var HEALTH_MAX_WAIT = 1e4;
|
|
|
1208
1293
|
var HEALTH_INTERVAL = 100;
|
|
1209
1294
|
async function waitForEngineHealth() {
|
|
1210
1295
|
const maxRetries = Math.ceil(HEALTH_MAX_WAIT / HEALTH_INTERVAL);
|
|
1211
|
-
|
|
1296
|
+
logger3().debug({ msg: "waiting for engine health check" });
|
|
1212
1297
|
for (let i = 0; i < maxRetries; i++) {
|
|
1213
1298
|
try {
|
|
1214
|
-
const response = await fetch(`${
|
|
1299
|
+
const response = await fetch(`${_chunk3B6PCYJBcjs.ENGINE_ENDPOINT}/health`, {
|
|
1215
1300
|
signal: AbortSignal.timeout(1e3)
|
|
1216
1301
|
});
|
|
1217
1302
|
if (response.ok) {
|
|
1218
1303
|
const health = await response.json();
|
|
1219
|
-
|
|
1304
|
+
logger3().debug({ msg: "engine health check passed" });
|
|
1220
1305
|
return health;
|
|
1221
1306
|
}
|
|
1222
1307
|
} catch (error) {
|
|
1223
|
-
|
|
1308
|
+
logger3().debug({ msg: "engine health check failed", error });
|
|
1224
1309
|
if (i === maxRetries - 1) {
|
|
1225
1310
|
throw new Error(
|
|
1226
1311
|
`engine health check failed after ${maxRetries} retries: ${error}`
|
|
@@ -1228,7 +1313,7 @@ async function waitForEngineHealth() {
|
|
|
1228
1313
|
}
|
|
1229
1314
|
}
|
|
1230
1315
|
if (i < maxRetries - 1) {
|
|
1231
|
-
|
|
1316
|
+
logger3().trace({
|
|
1232
1317
|
msg: "engine not ready, retrying",
|
|
1233
1318
|
attempt: i + 1,
|
|
1234
1319
|
maxRetries
|
|
@@ -1250,14 +1335,14 @@ function getInspectorUrl(config, managerPort) {
|
|
|
1250
1335
|
}
|
|
1251
1336
|
|
|
1252
1337
|
// src/serverless/log.ts
|
|
1253
|
-
function
|
|
1254
|
-
return
|
|
1338
|
+
function logger4() {
|
|
1339
|
+
return _chunk4KSHPFXFcjs.getLogger.call(void 0, "serverless");
|
|
1255
1340
|
}
|
|
1256
1341
|
|
|
1257
1342
|
// src/serverless/configure.ts
|
|
1258
1343
|
|
|
1259
1344
|
async function configureServerlessRunner(config) {
|
|
1260
|
-
|
|
1345
|
+
logger4().debug("configuring serverless runner");
|
|
1261
1346
|
try {
|
|
1262
1347
|
if (!config.namespace) {
|
|
1263
1348
|
throw new Error(
|
|
@@ -1271,14 +1356,14 @@ async function configureServerlessRunner(config) {
|
|
|
1271
1356
|
}
|
|
1272
1357
|
const customConfig = config.serverless.configureRunnerPool;
|
|
1273
1358
|
_invariant2.default.call(void 0, customConfig, "configureRunnerPool should exist");
|
|
1274
|
-
const clientConfig =
|
|
1275
|
-
|
|
1359
|
+
const clientConfig = _chunkTEUL4UYNcjs.convertRegistryConfigToClientConfig.call(void 0, config);
|
|
1360
|
+
logger4().debug({
|
|
1276
1361
|
msg: "fetching datacenters",
|
|
1277
1362
|
endpoint: config.endpoint
|
|
1278
1363
|
});
|
|
1279
|
-
const dcsRes = await
|
|
1364
|
+
const dcsRes = await _chunkTEUL4UYNcjs.getDatacenters.call(void 0, clientConfig);
|
|
1280
1365
|
const runnerName = _nullishCoalesce(customConfig.name, () => ( "default"));
|
|
1281
|
-
|
|
1366
|
+
logger4().debug({
|
|
1282
1367
|
msg: "configuring serverless runner",
|
|
1283
1368
|
runnerName,
|
|
1284
1369
|
namespace: config.namespace
|
|
@@ -1298,148 +1383,24 @@ async function configureServerlessRunner(config) {
|
|
|
1298
1383
|
drain_on_version_upgrade: _nullishCoalesce(customConfig.drainOnVersionUpgrade, () => ( true)),
|
|
1299
1384
|
metadataPollInterval: _nullishCoalesce(customConfig.metadataPollInterval, () => ( 1e3))
|
|
1300
1385
|
};
|
|
1301
|
-
await
|
|
1386
|
+
await _chunkTEUL4UYNcjs.updateRunnerConfig.call(void 0, clientConfig, runnerName, {
|
|
1302
1387
|
datacenters: Object.fromEntries(
|
|
1303
1388
|
dcsRes.datacenters.map((dc) => [dc.name, serverlessConfig])
|
|
1304
1389
|
)
|
|
1305
1390
|
});
|
|
1306
|
-
|
|
1391
|
+
logger4().info({
|
|
1307
1392
|
msg: "serverless runner configured successfully",
|
|
1308
1393
|
runnerName,
|
|
1309
1394
|
namespace: config.namespace
|
|
1310
1395
|
});
|
|
1311
1396
|
} catch (error) {
|
|
1312
|
-
|
|
1397
|
+
logger4().error({
|
|
1313
1398
|
msg: "failed to configure serverless runner, validate endpoint is configured correctly then restart this process",
|
|
1314
1399
|
error
|
|
1315
1400
|
});
|
|
1316
1401
|
}
|
|
1317
1402
|
}
|
|
1318
1403
|
|
|
1319
|
-
// src/registry/log.ts
|
|
1320
|
-
function logger4() {
|
|
1321
|
-
return _chunkRMJJE43Bcjs.getLogger.call(void 0, "registry");
|
|
1322
|
-
}
|
|
1323
|
-
|
|
1324
|
-
// src/registry/serve.ts
|
|
1325
|
-
var _getport = require('get-port'); var _getport2 = _interopRequireDefault(_getport);
|
|
1326
|
-
var DEFAULT_PORT = 6420;
|
|
1327
|
-
async function findFreePort(startPort = DEFAULT_PORT) {
|
|
1328
|
-
function* portRange(start, count = 100) {
|
|
1329
|
-
for (let i = 0; i < count; i++) {
|
|
1330
|
-
yield start + i;
|
|
1331
|
-
}
|
|
1332
|
-
}
|
|
1333
|
-
return _getport2.default.call(void 0, { port: portRange(startPort) });
|
|
1334
|
-
}
|
|
1335
|
-
async function crossPlatformServe(config, managerPort, app) {
|
|
1336
|
-
const runtime = _chunkRMJJE43Bcjs.detectRuntime.call(void 0, );
|
|
1337
|
-
logger4().debug({ msg: "detected runtime for serve", runtime });
|
|
1338
|
-
switch (runtime) {
|
|
1339
|
-
case "deno":
|
|
1340
|
-
return serveDeno(config, managerPort, app);
|
|
1341
|
-
case "bun":
|
|
1342
|
-
return serveBun(config, managerPort, app);
|
|
1343
|
-
case "node":
|
|
1344
|
-
return serveNode(config, managerPort, app);
|
|
1345
|
-
default:
|
|
1346
|
-
return serveNode(config, managerPort, app);
|
|
1347
|
-
}
|
|
1348
|
-
}
|
|
1349
|
-
async function serveNode(config, managerPort, app) {
|
|
1350
|
-
const nodeServerModule = "@hono/node-server";
|
|
1351
|
-
let serve;
|
|
1352
|
-
try {
|
|
1353
|
-
const dep = await Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
1354
|
-
/* webpackIgnore: true */
|
|
1355
|
-
nodeServerModule
|
|
1356
|
-
)));
|
|
1357
|
-
serve = dep.serve;
|
|
1358
|
-
} catch (err) {
|
|
1359
|
-
logger4().error({
|
|
1360
|
-
msg: "failed to import @hono/node-server. please run 'npm install @hono/node-server @hono/node-ws'",
|
|
1361
|
-
error: _chunkRMJJE43Bcjs.stringifyError.call(void 0, err)
|
|
1362
|
-
});
|
|
1363
|
-
process.exit(1);
|
|
1364
|
-
}
|
|
1365
|
-
const nodeWsModule = "@hono/node-ws";
|
|
1366
|
-
let createNodeWebSocket;
|
|
1367
|
-
try {
|
|
1368
|
-
const dep = await Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
1369
|
-
/* webpackIgnore: true */
|
|
1370
|
-
nodeWsModule
|
|
1371
|
-
)));
|
|
1372
|
-
createNodeWebSocket = dep.createNodeWebSocket;
|
|
1373
|
-
} catch (err) {
|
|
1374
|
-
logger4().error({
|
|
1375
|
-
msg: "failed to import @hono/node-ws. please run 'npm install @hono/node-server @hono/node-ws'",
|
|
1376
|
-
error: _chunkRMJJE43Bcjs.stringifyError.call(void 0, err)
|
|
1377
|
-
});
|
|
1378
|
-
process.exit(1);
|
|
1379
|
-
}
|
|
1380
|
-
const { injectWebSocket, upgradeWebSocket } = createNodeWebSocket({
|
|
1381
|
-
app
|
|
1382
|
-
});
|
|
1383
|
-
const port = managerPort;
|
|
1384
|
-
const hostname = config.managerHost;
|
|
1385
|
-
const server = serve(
|
|
1386
|
-
{ fetch: app.fetch, port, hostname },
|
|
1387
|
-
() => logger4().info({ msg: "server listening", port, hostname })
|
|
1388
|
-
);
|
|
1389
|
-
injectWebSocket(server);
|
|
1390
|
-
return { upgradeWebSocket };
|
|
1391
|
-
}
|
|
1392
|
-
async function serveDeno(config, managerPort, app) {
|
|
1393
|
-
const honoDenoModule = "hono/deno";
|
|
1394
|
-
let upgradeWebSocket;
|
|
1395
|
-
try {
|
|
1396
|
-
const dep = await Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
1397
|
-
/* webpackIgnore: true */
|
|
1398
|
-
honoDenoModule
|
|
1399
|
-
)));
|
|
1400
|
-
upgradeWebSocket = dep.upgradeWebSocket;
|
|
1401
|
-
} catch (err) {
|
|
1402
|
-
logger4().error({
|
|
1403
|
-
msg: "failed to import hono/deno",
|
|
1404
|
-
error: _chunkRMJJE43Bcjs.stringifyError.call(void 0, err)
|
|
1405
|
-
});
|
|
1406
|
-
process.exit(1);
|
|
1407
|
-
}
|
|
1408
|
-
const port = config.managerPort;
|
|
1409
|
-
const hostname = config.managerHost;
|
|
1410
|
-
Deno.serve({ port, hostname }, app.fetch);
|
|
1411
|
-
logger4().info({ msg: "server listening", port, hostname });
|
|
1412
|
-
return { upgradeWebSocket };
|
|
1413
|
-
}
|
|
1414
|
-
async function serveBun(config, managerPort, app) {
|
|
1415
|
-
const honoBunModule = "hono/bun";
|
|
1416
|
-
let createBunWebSocket;
|
|
1417
|
-
try {
|
|
1418
|
-
const dep = await Promise.resolve().then(() => _interopRequireWildcard(require(
|
|
1419
|
-
/* webpackIgnore: true */
|
|
1420
|
-
honoBunModule
|
|
1421
|
-
)));
|
|
1422
|
-
createBunWebSocket = dep.createBunWebSocket;
|
|
1423
|
-
} catch (err) {
|
|
1424
|
-
logger4().error({
|
|
1425
|
-
msg: "failed to import hono/bun",
|
|
1426
|
-
error: _chunkRMJJE43Bcjs.stringifyError.call(void 0, err)
|
|
1427
|
-
});
|
|
1428
|
-
process.exit(1);
|
|
1429
|
-
}
|
|
1430
|
-
const { websocket, upgradeWebSocket } = createBunWebSocket();
|
|
1431
|
-
const port = config.managerPort;
|
|
1432
|
-
const hostname = config.managerHost;
|
|
1433
|
-
Bun.serve({
|
|
1434
|
-
fetch: app.fetch,
|
|
1435
|
-
port,
|
|
1436
|
-
hostname,
|
|
1437
|
-
websocket
|
|
1438
|
-
});
|
|
1439
|
-
logger4().info({ msg: "server listening", port, hostname });
|
|
1440
|
-
return { upgradeWebSocket };
|
|
1441
|
-
}
|
|
1442
|
-
|
|
1443
1404
|
// src/serverless/router.ts
|
|
1444
1405
|
|
|
1445
1406
|
|
|
@@ -1463,7 +1424,7 @@ var ServerlessStartHeadersSchema = _v4.z.object({
|
|
|
1463
1424
|
|
|
1464
1425
|
// src/serverless/router.ts
|
|
1465
1426
|
function buildServerlessRouter(driverConfig, config) {
|
|
1466
|
-
return
|
|
1427
|
+
return _chunk3B6PCYJBcjs.createRouter.call(void 0, config.serverless.basePath, (router) => {
|
|
1467
1428
|
router.get("/", (c) => {
|
|
1468
1429
|
return c.text(
|
|
1469
1430
|
"This is a RivetKit server.\n\nLearn more at https://rivetkit.org"
|
|
@@ -1484,7 +1445,7 @@ function buildServerlessRouter(driverConfig, config) {
|
|
|
1484
1445
|
);
|
|
1485
1446
|
}
|
|
1486
1447
|
const { endpoint, token, totalSlots, runnerName, namespace } = parseResult.data;
|
|
1487
|
-
|
|
1448
|
+
logger4().debug({
|
|
1488
1449
|
msg: "received serverless runner start request",
|
|
1489
1450
|
endpoint,
|
|
1490
1451
|
totalSlots,
|
|
@@ -1512,10 +1473,10 @@ function buildServerlessRouter(driverConfig, config) {
|
|
|
1512
1473
|
runnerKey: void 0
|
|
1513
1474
|
}
|
|
1514
1475
|
};
|
|
1515
|
-
const managerDriver = new (0,
|
|
1516
|
-
|
|
1476
|
+
const managerDriver = new (0, _chunkTEUL4UYNcjs.RemoteManagerDriver)(
|
|
1477
|
+
_chunkTEUL4UYNcjs.convertRegistryConfigToClientConfig.call(void 0, newConfig)
|
|
1517
1478
|
);
|
|
1518
|
-
const client =
|
|
1479
|
+
const client = _chunkTEUL4UYNcjs.createClientWithDriver.call(void 0, managerDriver);
|
|
1519
1480
|
const actorDriver = driverConfig.actor(
|
|
1520
1481
|
newConfig,
|
|
1521
1482
|
managerDriver,
|
|
@@ -1527,10 +1488,10 @@ function buildServerlessRouter(driverConfig, config) {
|
|
|
1527
1488
|
);
|
|
1528
1489
|
return await actorDriver.serverlessHandleStart(c);
|
|
1529
1490
|
});
|
|
1530
|
-
router.get("/health", (c) =>
|
|
1491
|
+
router.get("/health", (c) => _chunk3B6PCYJBcjs.handleHealthRequest.call(void 0, c));
|
|
1531
1492
|
router.get(
|
|
1532
1493
|
"/metadata",
|
|
1533
|
-
(c) =>
|
|
1494
|
+
(c) => _chunk3B6PCYJBcjs.handleMetadataRequest.call(void 0,
|
|
1534
1495
|
c,
|
|
1535
1496
|
config,
|
|
1536
1497
|
{ serverless: {} },
|
|
@@ -1612,12 +1573,12 @@ var Runtime = class _Runtime {
|
|
|
1612
1573
|
}
|
|
1613
1574
|
static async create(registry) {
|
|
1614
1575
|
var _a, _b, _c;
|
|
1615
|
-
|
|
1576
|
+
_chunk3B6PCYJBcjs.logger.call(void 0, ).info("rivetkit starting");
|
|
1616
1577
|
const config = registry.parseConfig();
|
|
1617
1578
|
if ((_a = config.logging) == null ? void 0 : _a.baseLogger) {
|
|
1618
|
-
|
|
1579
|
+
_chunk4KSHPFXFcjs.configureBaseLogger.call(void 0, config.logging.baseLogger);
|
|
1619
1580
|
} else {
|
|
1620
|
-
|
|
1581
|
+
_chunk4KSHPFXFcjs.configureDefaultLogger.call(void 0, (_b = config.logging) == null ? void 0 : _b.level);
|
|
1621
1582
|
}
|
|
1622
1583
|
_invariant2.default.call(void 0,
|
|
1623
1584
|
!(config.serverless.spawnEngine && config.serveManager),
|
|
@@ -1627,8 +1588,8 @@ var Runtime = class _Runtime {
|
|
|
1627
1588
|
const managerDriver = driver.manager(config);
|
|
1628
1589
|
let managerPort;
|
|
1629
1590
|
if (config.serverless.spawnEngine) {
|
|
1630
|
-
managerPort =
|
|
1631
|
-
|
|
1591
|
+
managerPort = _chunk3B6PCYJBcjs.ENGINE_PORT;
|
|
1592
|
+
_chunk3B6PCYJBcjs.logger.call(void 0, ).debug({
|
|
1632
1593
|
msg: "spawning engine",
|
|
1633
1594
|
version: config.serverless.engineVersion
|
|
1634
1595
|
});
|
|
@@ -1637,16 +1598,18 @@ var Runtime = class _Runtime {
|
|
|
1637
1598
|
});
|
|
1638
1599
|
} else if (config.serveManager) {
|
|
1639
1600
|
const configuredManagerPort = config.managerPort;
|
|
1601
|
+
const serveRuntime = _chunk4KSHPFXFcjs.detectRuntime.call(void 0, );
|
|
1640
1602
|
let upgradeWebSocket;
|
|
1641
1603
|
const getUpgradeWebSocket = () => upgradeWebSocket;
|
|
1642
1604
|
managerDriver.setGetUpgradeWebSocket(getUpgradeWebSocket);
|
|
1643
|
-
const { router: managerRouter } =
|
|
1605
|
+
const { router: managerRouter } = _chunk3B6PCYJBcjs.buildManagerRouter.call(void 0,
|
|
1644
1606
|
config,
|
|
1645
1607
|
managerDriver,
|
|
1646
|
-
getUpgradeWebSocket
|
|
1608
|
+
getUpgradeWebSocket,
|
|
1609
|
+
serveRuntime
|
|
1647
1610
|
);
|
|
1648
|
-
managerPort = await findFreePort(config.managerPort);
|
|
1649
|
-
|
|
1611
|
+
managerPort = await _chunk3B6PCYJBcjs.findFreePort.call(void 0, config.managerPort);
|
|
1612
|
+
_chunk3B6PCYJBcjs.logger.call(void 0, ).debug({
|
|
1650
1613
|
msg: "serving manager",
|
|
1651
1614
|
port: managerPort
|
|
1652
1615
|
});
|
|
@@ -1655,10 +1618,11 @@ var Runtime = class _Runtime {
|
|
|
1655
1618
|
config.serverless.publicEndpoint = config.publicEndpoint;
|
|
1656
1619
|
}
|
|
1657
1620
|
config.managerPort = managerPort;
|
|
1658
|
-
const out = await crossPlatformServe(
|
|
1621
|
+
const out = await _chunk3B6PCYJBcjs.crossPlatformServe.call(void 0,
|
|
1659
1622
|
config,
|
|
1660
1623
|
managerPort,
|
|
1661
|
-
managerRouter
|
|
1624
|
+
managerRouter,
|
|
1625
|
+
serveRuntime
|
|
1662
1626
|
);
|
|
1663
1627
|
upgradeWebSocket = out.upgradeWebSocket;
|
|
1664
1628
|
}
|
|
@@ -1670,7 +1634,7 @@ var Runtime = class _Runtime {
|
|
|
1670
1634
|
managerPort
|
|
1671
1635
|
);
|
|
1672
1636
|
const driverLog = _nullishCoalesce(((_c = managerDriver.extraStartupLog) == null ? void 0 : _c.call(managerDriver)), () => ( {}));
|
|
1673
|
-
|
|
1637
|
+
_chunk3B6PCYJBcjs.logger.call(void 0, ).info({
|
|
1674
1638
|
msg: "rivetkit ready",
|
|
1675
1639
|
driver: driver.name,
|
|
1676
1640
|
definitions: Object.keys(config.use).length,
|
|
@@ -1696,8 +1660,8 @@ var Runtime = class _Runtime {
|
|
|
1696
1660
|
_invariant2.default.call(void 0, !this.#startKind, "Runtime already started as serverless");
|
|
1697
1661
|
this.#startKind = "runner";
|
|
1698
1662
|
if (this.#config.runner && this.#driver.autoStartActorDriver) {
|
|
1699
|
-
|
|
1700
|
-
const inlineClient =
|
|
1663
|
+
_chunk3B6PCYJBcjs.logger.call(void 0, ).debug("starting actor driver");
|
|
1664
|
+
const inlineClient = _chunkTEUL4UYNcjs.createClientWithDriver.call(void 0,
|
|
1701
1665
|
this.#managerDriver
|
|
1702
1666
|
);
|
|
1703
1667
|
this.#driver.actor(this.#config, this.#managerDriver, inlineClient);
|
|
@@ -1709,7 +1673,7 @@ var Runtime = class _Runtime {
|
|
|
1709
1673
|
const inspectorUrl = this.managerPort ? getInspectorUrl(this.#config, this.managerPort) : void 0;
|
|
1710
1674
|
console.log();
|
|
1711
1675
|
console.log(
|
|
1712
|
-
` RivetKit ${
|
|
1676
|
+
` RivetKit ${_chunk4KSHPFXFcjs.package_default.version} (${this.#driver.displayName} - ${this.#startKind === "serverless" ? "Serverless" : "Runner"})`
|
|
1713
1677
|
);
|
|
1714
1678
|
if (this.#config.namespace !== "default") {
|
|
1715
1679
|
logLine("Namespace", this.#config.namespace);
|
|
@@ -1750,14 +1714,14 @@ var Registry = class {
|
|
|
1750
1714
|
return this.#config;
|
|
1751
1715
|
}
|
|
1752
1716
|
parseConfig() {
|
|
1753
|
-
return
|
|
1717
|
+
return _chunk3B6PCYJBcjs.RegistryConfigSchema.parse(this.#config);
|
|
1754
1718
|
}
|
|
1755
1719
|
// Shared runtime instance
|
|
1756
1720
|
#runtime;
|
|
1757
1721
|
#runtimePromise;
|
|
1758
1722
|
constructor(config) {
|
|
1759
1723
|
this.#config = config;
|
|
1760
|
-
if (
|
|
1724
|
+
if (_chunk4KSHPFXFcjs.getNodeEnv.call(void 0, ) !== "test") {
|
|
1761
1725
|
setTimeout(() => {
|
|
1762
1726
|
this.#ensureRuntime();
|
|
1763
1727
|
}, 0);
|
|
@@ -1818,7 +1782,7 @@ var Registry = class {
|
|
|
1818
1782
|
"autoConfigureServerless can only be configured when runnerKind is 'serverless'"
|
|
1819
1783
|
);
|
|
1820
1784
|
}
|
|
1821
|
-
const isDevEnv =
|
|
1785
|
+
const isDevEnv = _chunk4KSHPFXFcjs.isDev.call(void 0, );
|
|
1822
1786
|
if (isDevEnv && config.runnerKind === "serverless") {
|
|
1823
1787
|
if ((inputConfig == null ? void 0 : inputConfig.runEngine) === void 0) config.runEngine = true;
|
|
1824
1788
|
if ((inputConfig == null ? void 0 : inputConfig.autoConfigureServerless) === void 0)
|
|
@@ -1831,7 +1795,7 @@ var Registry = class {
|
|
|
1831
1795
|
}
|
|
1832
1796
|
}
|
|
1833
1797
|
#legacyStartServerless(config, _inputConfig) {
|
|
1834
|
-
const client =
|
|
1798
|
+
const client = _chunkTEUL4UYNcjs.createClient.call(void 0, {
|
|
1835
1799
|
endpoint: config.endpoint,
|
|
1836
1800
|
token: config.token,
|
|
1837
1801
|
namespace: config.namespace,
|
|
@@ -1844,7 +1808,7 @@ var Registry = class {
|
|
|
1844
1808
|
}
|
|
1845
1809
|
#legacyStartNormal(config) {
|
|
1846
1810
|
this.#ensureRuntime().then((runtime) => runtime.startRunner());
|
|
1847
|
-
const client =
|
|
1811
|
+
const client = _chunkTEUL4UYNcjs.createClient.call(void 0, {
|
|
1848
1812
|
endpoint: config.endpoint,
|
|
1849
1813
|
token: config.token,
|
|
1850
1814
|
namespace: config.namespace,
|
|
@@ -1868,4 +1832,4 @@ function setup(input) {
|
|
|
1868
1832
|
|
|
1869
1833
|
|
|
1870
1834
|
exports.actor = actor; exports.event = event2; exports.queue = queue2; exports.createEngineDriver = createEngineDriver; exports.Registry = Registry; exports.setup = setup;
|
|
1871
|
-
//# sourceMappingURL=chunk-
|
|
1835
|
+
//# sourceMappingURL=chunk-HKOSZKKZ.cjs.map
|