rivetkit 2.1.3 → 2.1.5
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-OAOF23ZY.js → chunk-2OK7S6QF.js} +2 -2
- package/dist/tsup/{chunk-5AZ6UPEF.cjs → chunk-7WF2QSIC.cjs} +24 -20
- package/dist/tsup/chunk-7WF2QSIC.cjs.map +1 -0
- package/dist/tsup/{chunk-IJAGZS57.cjs → chunk-D2SPAJVT.cjs} +30 -30
- package/dist/tsup/{chunk-IJAGZS57.cjs.map → chunk-D2SPAJVT.cjs.map} +1 -1
- package/dist/tsup/{chunk-YET3IZD6.js → chunk-EIATSBYZ.js} +2 -2
- package/dist/tsup/{chunk-YET3IZD6.js.map → chunk-EIATSBYZ.js.map} +1 -1
- package/dist/tsup/{chunk-DADGS67O.cjs → chunk-GQGRQDRL.cjs} +4 -4
- package/dist/tsup/{chunk-DADGS67O.cjs.map → chunk-GQGRQDRL.cjs.map} +1 -1
- package/dist/tsup/{chunk-ZSJ2OTY4.cjs → chunk-HYPIHCDT.cjs} +2 -2
- package/dist/tsup/{chunk-ZSJ2OTY4.cjs.map → chunk-HYPIHCDT.cjs.map} +1 -1
- package/dist/tsup/{chunk-HPAX7L72.cjs → chunk-IIJNPVPQ.cjs} +152 -152
- package/dist/tsup/{chunk-HPAX7L72.cjs.map → chunk-IIJNPVPQ.cjs.map} +1 -1
- package/dist/tsup/{chunk-U6VWVHVW.cjs → chunk-JC6BEPE7.cjs} +3 -3
- package/dist/tsup/{chunk-U6VWVHVW.cjs.map → chunk-JC6BEPE7.cjs.map} +1 -1
- package/dist/tsup/{chunk-N7ASEZ2Y.js → chunk-JPXO2H55.js} +5 -5
- package/dist/tsup/{chunk-QUDLEWGD.js → chunk-MIX2KB6U.js} +212 -47
- package/dist/tsup/chunk-MIX2KB6U.js.map +1 -0
- package/dist/tsup/{chunk-BMNB6YRQ.cjs → chunk-OAXJWGMU.cjs} +212 -305
- package/dist/tsup/chunk-OAXJWGMU.cjs.map +1 -0
- package/dist/tsup/{chunk-KSZZRTOD.cjs → chunk-PB5AEMKQ.cjs} +3 -5
- package/dist/tsup/chunk-PB5AEMKQ.cjs.map +1 -0
- package/dist/tsup/{chunk-6T3WSP5M.js → chunk-R5OQUSLN.js} +4 -4
- package/dist/tsup/{chunk-POUBQA6Z.js → chunk-S662Y6ZU.js} +2 -2
- package/dist/tsup/{chunk-GNGRMP5E.js → chunk-SRIM3GHD.js} +18 -11
- package/dist/tsup/chunk-SRIM3GHD.js.map +1 -0
- package/dist/tsup/{chunk-MAXIXG56.js → chunk-TADUYCHF.js} +2 -4
- package/dist/tsup/chunk-TADUYCHF.js.map +1 -0
- package/dist/tsup/{chunk-R64EFI6F.cjs → chunk-TI5PXQGG.cjs} +280 -115
- package/dist/tsup/chunk-TI5PXQGG.cjs.map +1 -0
- package/dist/tsup/{chunk-T6MM5RTW.cjs → chunk-U5SMSA27.cjs} +250 -243
- package/dist/tsup/chunk-U5SMSA27.cjs.map +1 -0
- package/dist/tsup/{chunk-6LHZQSWJ.js → chunk-WY2SHWXQ.js} +8 -4
- package/dist/tsup/chunk-WY2SHWXQ.js.map +1 -0
- package/dist/tsup/{chunk-YLDDENCZ.js → chunk-ZPWOYQHN.js} +126 -219
- package/dist/tsup/chunk-ZPWOYQHN.js.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 +196 -60
- 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 +971 -835
- 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 +182 -100
- package/dist/tsup/serve-test-suite/mod.cjs.map +1 -1
- package/dist/tsup/serve-test-suite/mod.js +93 -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 +6 -6
- package/src/actor/config.ts +0 -2
- package/src/actor/instance/mod.ts +17 -4
- package/src/actor/router.ts +9 -6
- package/src/driver-test-suite/mod.ts +3 -0
- 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/conn-error-serialization.ts +64 -0
- package/src/drivers/engine/actor-driver.ts +47 -15
- package/src/manager/router.ts +20 -6
- package/src/{registry → utils}/serve.ts +38 -4
- package/src/workflow/context.ts +4 -0
- package/dist/tsup/chunk-5AZ6UPEF.cjs.map +0 -1
- package/dist/tsup/chunk-6LHZQSWJ.js.map +0 -1
- package/dist/tsup/chunk-BMNB6YRQ.cjs.map +0 -1
- package/dist/tsup/chunk-GNGRMP5E.js.map +0 -1
- package/dist/tsup/chunk-KSZZRTOD.cjs.map +0 -1
- package/dist/tsup/chunk-MAXIXG56.js.map +0 -1
- package/dist/tsup/chunk-QUDLEWGD.js.map +0 -1
- package/dist/tsup/chunk-R64EFI6F.cjs.map +0 -1
- package/dist/tsup/chunk-T6MM5RTW.cjs.map +0 -1
- package/dist/tsup/chunk-YLDDENCZ.js.map +0 -1
- /package/dist/tsup/{chunk-OAOF23ZY.js.map → chunk-2OK7S6QF.js.map} +0 -0
- /package/dist/tsup/{chunk-N7ASEZ2Y.js.map → chunk-JPXO2H55.js.map} +0 -0
- /package/dist/tsup/{chunk-6T3WSP5M.js.map → chunk-R5OQUSLN.js.map} +0 -0
- /package/dist/tsup/{chunk-POUBQA6Z.js.map → chunk-S662Y6ZU.js.map} +0 -0
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
ensureDirectoryExists,
|
|
6
6
|
getStoragePath,
|
|
7
7
|
lookupInRegistry
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-SRIM3GHD.js";
|
|
9
9
|
import {
|
|
10
10
|
ClientConfigSchemaBase,
|
|
11
11
|
RemoteManagerDriver,
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
getEndpoint,
|
|
17
17
|
transformClientConfig,
|
|
18
18
|
updateRunnerConfig
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-JPXO2H55.js";
|
|
20
20
|
import {
|
|
21
21
|
CONN_STATE_MANAGER_SYMBOL,
|
|
22
22
|
ENGINE_ENDPOINT,
|
|
@@ -30,7 +30,9 @@ import {
|
|
|
30
30
|
buildActorNames,
|
|
31
31
|
buildManagerRouter,
|
|
32
32
|
createRouter,
|
|
33
|
+
crossPlatformServe,
|
|
33
34
|
deserializeActorKey,
|
|
35
|
+
findFreePort,
|
|
34
36
|
getInitialActorKvState,
|
|
35
37
|
getNodeChildProcess,
|
|
36
38
|
getNodeCrypto,
|
|
@@ -42,17 +44,18 @@ import {
|
|
|
42
44
|
handleHealthRequest,
|
|
43
45
|
handleMetadataRequest,
|
|
44
46
|
importNodeDependencies,
|
|
47
|
+
logger,
|
|
45
48
|
parseWebSocketProtocols,
|
|
46
49
|
routeWebSocket,
|
|
47
50
|
truncateRawWebSocketPathPrefix
|
|
48
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-MIX2KB6U.js";
|
|
49
52
|
import {
|
|
50
53
|
ActorConfigSchema,
|
|
51
54
|
KEYS,
|
|
52
55
|
event,
|
|
53
56
|
loggerWithoutContext,
|
|
54
57
|
queue
|
|
55
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-TADUYCHF.js";
|
|
56
59
|
import {
|
|
57
60
|
LogLevelSchema,
|
|
58
61
|
VERSION,
|
|
@@ -71,7 +74,7 @@ import {
|
|
|
71
74
|
promiseWithResolvers,
|
|
72
75
|
setLongTimeout,
|
|
73
76
|
stringifyError
|
|
74
|
-
} from "./chunk-
|
|
77
|
+
} from "./chunk-EIATSBYZ.js";
|
|
75
78
|
import {
|
|
76
79
|
EndpointMismatch,
|
|
77
80
|
InvalidRequest,
|
|
@@ -95,7 +98,7 @@ import { WSContext } from "hono/ws";
|
|
|
95
98
|
import invariant from "invariant";
|
|
96
99
|
|
|
97
100
|
// src/drivers/engine/log.ts
|
|
98
|
-
function
|
|
101
|
+
function logger2() {
|
|
99
102
|
return getLogger("driver-engine");
|
|
100
103
|
}
|
|
101
104
|
|
|
@@ -111,8 +114,8 @@ var EngineActorDriver = class {
|
|
|
111
114
|
#runner;
|
|
112
115
|
#actors = /* @__PURE__ */ new Map();
|
|
113
116
|
#actorRouter;
|
|
114
|
-
#runnerStarted = promiseWithResolvers((reason) =>
|
|
115
|
-
#runnerStopped = promiseWithResolvers((reason) =>
|
|
117
|
+
#runnerStarted = promiseWithResolvers((reason) => logger2().warn({ msg: "unhandled runner started promise rejection", reason }));
|
|
118
|
+
#runnerStopped = promiseWithResolvers((reason) => logger2().warn({ msg: "unhandled runner stopped promise rejection", reason }));
|
|
116
119
|
#isRunnerStopped = false;
|
|
117
120
|
// HACK: Track actor stop intent locally since the runner protocol doesn't
|
|
118
121
|
// pass the stop reason to onActorStop. This will be fixed when the runner
|
|
@@ -174,7 +177,7 @@ var EngineActorDriver = class {
|
|
|
174
177
|
};
|
|
175
178
|
this.#runner = new Runner(engineRunnerConfig);
|
|
176
179
|
this.#runner.start();
|
|
177
|
-
|
|
180
|
+
logger2().debug({
|
|
178
181
|
msg: "engine runner started",
|
|
179
182
|
endpoint: config.endpoint,
|
|
180
183
|
namespace: config.namespace,
|
|
@@ -199,7 +202,7 @@ var EngineActorDriver = class {
|
|
|
199
202
|
async setAlarm(actor2, timestamp) {
|
|
200
203
|
const handler = this.#actors.get(actor2.id);
|
|
201
204
|
if (!handler) {
|
|
202
|
-
|
|
205
|
+
logger2().warn({
|
|
203
206
|
msg: "no handler for actor to set alarm"
|
|
204
207
|
});
|
|
205
208
|
return;
|
|
@@ -232,7 +235,7 @@ var EngineActorDriver = class {
|
|
|
232
235
|
new Uint8Array()
|
|
233
236
|
);
|
|
234
237
|
const keys = entries.map(([key]) => key);
|
|
235
|
-
|
|
238
|
+
logger2().info({
|
|
236
239
|
msg: "kvList called",
|
|
237
240
|
actorId,
|
|
238
241
|
keysCount: keys.length,
|
|
@@ -242,7 +245,7 @@ var EngineActorDriver = class {
|
|
|
242
245
|
}
|
|
243
246
|
async kvListPrefix(actorId, prefix) {
|
|
244
247
|
const result = await this.#runner.kvListPrefix(actorId, prefix);
|
|
245
|
-
|
|
248
|
+
logger2().info({
|
|
246
249
|
msg: "kvListPrefix called",
|
|
247
250
|
actorId,
|
|
248
251
|
prefixStr: new TextDecoder().decode(prefix),
|
|
@@ -272,8 +275,8 @@ var EngineActorDriver = class {
|
|
|
272
275
|
this.#runner.stopActor(actorId);
|
|
273
276
|
}
|
|
274
277
|
async shutdownRunner(immediate) {
|
|
275
|
-
|
|
276
|
-
|
|
278
|
+
logger2().info({ msg: "stopping engine actor driver", immediate });
|
|
279
|
+
logger2().debug({
|
|
277
280
|
msg: "stopping all actors before shutdown",
|
|
278
281
|
actorCount: this.#actors.size
|
|
279
282
|
});
|
|
@@ -292,13 +295,13 @@ var EngineActorDriver = class {
|
|
|
292
295
|
}
|
|
293
296
|
}
|
|
294
297
|
await Promise.all(stopPromises);
|
|
295
|
-
|
|
298
|
+
logger2().debug({ msg: "all actors stopped" });
|
|
296
299
|
try {
|
|
297
300
|
await this.#runner.shutdown(immediate);
|
|
298
301
|
} catch (error) {
|
|
299
302
|
const message = error instanceof Error ? error.message : String(error);
|
|
300
303
|
if (message.includes("WebSocket connection closed during shutdown")) {
|
|
301
|
-
|
|
304
|
+
logger2().debug({
|
|
302
305
|
msg: "ignoring shutdown websocket close race",
|
|
303
306
|
error: message
|
|
304
307
|
});
|
|
@@ -313,7 +316,7 @@ var EngineActorDriver = class {
|
|
|
313
316
|
)
|
|
314
317
|
]);
|
|
315
318
|
if (!stopped) {
|
|
316
|
-
|
|
319
|
+
logger2().warn({
|
|
317
320
|
msg: "timed out waiting for runner shutdown",
|
|
318
321
|
waitMs: RUNNER_STOP_WAIT_MS
|
|
319
322
|
});
|
|
@@ -324,7 +327,7 @@ var EngineActorDriver = class {
|
|
|
324
327
|
stream.onAbort(() => {
|
|
325
328
|
});
|
|
326
329
|
c.req.raw.signal.addEventListener("abort", () => {
|
|
327
|
-
|
|
330
|
+
logger2().debug("SSE aborted, shutting down runner");
|
|
328
331
|
this.shutdownRunner(false);
|
|
329
332
|
});
|
|
330
333
|
await this.#runnerStarted.promise;
|
|
@@ -333,13 +336,13 @@ var EngineActorDriver = class {
|
|
|
333
336
|
await stream.writeSSE({ data: payload });
|
|
334
337
|
while (true) {
|
|
335
338
|
if (this.#isRunnerStopped) {
|
|
336
|
-
|
|
339
|
+
logger2().debug({
|
|
337
340
|
msg: "runner is stopped"
|
|
338
341
|
});
|
|
339
342
|
break;
|
|
340
343
|
}
|
|
341
344
|
if (stream.closed || stream.aborted) {
|
|
342
|
-
|
|
345
|
+
logger2().debug({
|
|
343
346
|
msg: "runner sse stream closed",
|
|
344
347
|
closed: stream.closed,
|
|
345
348
|
aborted: stream.aborted
|
|
@@ -354,7 +357,7 @@ var EngineActorDriver = class {
|
|
|
354
357
|
}
|
|
355
358
|
async #runnerOnActorStart(actorId, generation, actorConfig) {
|
|
356
359
|
var _a;
|
|
357
|
-
|
|
360
|
+
logger2().debug({
|
|
358
361
|
msg: "runner actor starting",
|
|
359
362
|
actorId,
|
|
360
363
|
name: actorConfig.name,
|
|
@@ -368,7 +371,7 @@ var EngineActorDriver = class {
|
|
|
368
371
|
let handler = this.#actors.get(actorId);
|
|
369
372
|
if (!handler) {
|
|
370
373
|
handler = {
|
|
371
|
-
actorStartPromise: promiseWithResolvers((reason) =>
|
|
374
|
+
actorStartPromise: promiseWithResolvers((reason) => logger2().warn({ msg: "unhandled actor start promise rejection", reason }))
|
|
372
375
|
};
|
|
373
376
|
this.#actors.set(actorId, handler);
|
|
374
377
|
}
|
|
@@ -383,12 +386,12 @@ var EngineActorDriver = class {
|
|
|
383
386
|
if (persistDataBuffer === null) {
|
|
384
387
|
const initialKvState = getInitialActorKvState(input);
|
|
385
388
|
await this.#runner.kvPut(actorId, initialKvState);
|
|
386
|
-
|
|
389
|
+
logger2().debug({
|
|
387
390
|
msg: "initialized persist data for new actor",
|
|
388
391
|
actorId
|
|
389
392
|
});
|
|
390
393
|
} else {
|
|
391
|
-
|
|
394
|
+
logger2().debug({
|
|
392
395
|
msg: "found existing persist data for actor",
|
|
393
396
|
actorId,
|
|
394
397
|
dataSize: persistDataBuffer.byteLength
|
|
@@ -396,6 +399,21 @@ var EngineActorDriver = class {
|
|
|
396
399
|
}
|
|
397
400
|
const definition = lookupInRegistry(this.#config, actorConfig.name);
|
|
398
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
|
+
}
|
|
399
417
|
await handler.actor.start(
|
|
400
418
|
this,
|
|
401
419
|
this.#inlineClient,
|
|
@@ -405,7 +423,7 @@ var EngineActorDriver = class {
|
|
|
405
423
|
"unknown"
|
|
406
424
|
// TODO: Add regions
|
|
407
425
|
);
|
|
408
|
-
|
|
426
|
+
logger2().debug({ msg: "runner actor started", actorId, name, key });
|
|
409
427
|
} catch (innerError) {
|
|
410
428
|
const error = innerError instanceof Error ? new Error(
|
|
411
429
|
`Failed to start actor ${actorId}: ${innerError.message}`,
|
|
@@ -415,7 +433,7 @@ var EngineActorDriver = class {
|
|
|
415
433
|
handler.actorStartError = error;
|
|
416
434
|
(_a = handler.actorStartPromise) == null ? void 0 : _a.reject(error);
|
|
417
435
|
handler.actorStartPromise = void 0;
|
|
418
|
-
|
|
436
|
+
logger2().error({
|
|
419
437
|
msg: "runner actor failed to start",
|
|
420
438
|
actorId,
|
|
421
439
|
name,
|
|
@@ -425,7 +443,7 @@ var EngineActorDriver = class {
|
|
|
425
443
|
try {
|
|
426
444
|
this.#runner.stopActor(actorId);
|
|
427
445
|
} catch (stopError) {
|
|
428
|
-
|
|
446
|
+
logger2().debug({
|
|
429
447
|
msg: "failed to stop actor after start failure",
|
|
430
448
|
actorId,
|
|
431
449
|
err: stringifyError(stopError)
|
|
@@ -434,32 +452,42 @@ var EngineActorDriver = class {
|
|
|
434
452
|
}
|
|
435
453
|
}
|
|
436
454
|
async #runnerOnActorStop(actorId, generation) {
|
|
437
|
-
|
|
455
|
+
logger2().debug({ msg: "runner actor stopping", actorId, generation });
|
|
438
456
|
const reason = this.#actorStopIntent.get(actorId) ?? "sleep";
|
|
439
457
|
this.#actorStopIntent.delete(actorId);
|
|
440
458
|
const handler = this.#actors.get(actorId);
|
|
441
|
-
if (handler
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
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: stringifyError(err)
|
|
472
|
+
});
|
|
473
|
+
}
|
|
446
474
|
}
|
|
447
|
-
if (handler
|
|
475
|
+
if (handler.actor) {
|
|
448
476
|
try {
|
|
449
477
|
await handler.actor.onStop(reason);
|
|
450
478
|
} catch (err) {
|
|
451
|
-
|
|
479
|
+
logger2().error({
|
|
452
480
|
msg: "error in onStop, proceeding with removing actor",
|
|
453
481
|
err: stringifyError(err)
|
|
454
482
|
});
|
|
455
483
|
}
|
|
456
484
|
}
|
|
457
|
-
|
|
458
|
-
|
|
485
|
+
this.#actors.delete(actorId);
|
|
486
|
+
logger2().debug({ msg: "runner actor stopped", actorId, reason });
|
|
459
487
|
}
|
|
460
488
|
// MARK: - Runner Networking
|
|
461
489
|
async #runnerFetch(_runner, actorId, _gatewayIdBuf, _requestIdBuf, request) {
|
|
462
|
-
|
|
490
|
+
logger2().debug({
|
|
463
491
|
msg: "runner fetch",
|
|
464
492
|
actorId,
|
|
465
493
|
url: request.url,
|
|
@@ -472,7 +500,7 @@ var EngineActorDriver = class {
|
|
|
472
500
|
const websocket = websocketRaw;
|
|
473
501
|
const wsUniqueId = `ws_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
474
502
|
websocket.__rivet_ws_id = wsUniqueId;
|
|
475
|
-
|
|
503
|
+
logger2().debug({
|
|
476
504
|
msg: "runner websocket",
|
|
477
505
|
actorId,
|
|
478
506
|
url: request.url,
|
|
@@ -501,7 +529,7 @@ var EngineActorDriver = class {
|
|
|
501
529
|
isRestoringHibernatable
|
|
502
530
|
);
|
|
503
531
|
} catch (err) {
|
|
504
|
-
|
|
532
|
+
logger2().error({ msg: "building websocket handlers errored", err });
|
|
505
533
|
websocketRaw.close(1011, "ws.route_error");
|
|
506
534
|
return;
|
|
507
535
|
}
|
|
@@ -510,7 +538,7 @@ var EngineActorDriver = class {
|
|
|
510
538
|
const conn = wsHandler.conn;
|
|
511
539
|
const actor2 = wsHandler.actor;
|
|
512
540
|
const connStateManager = conn == null ? void 0 : conn[CONN_STATE_MANAGER_SYMBOL];
|
|
513
|
-
|
|
541
|
+
logger2().debug({
|
|
514
542
|
msg: "attaching websocket event listeners",
|
|
515
543
|
actorId,
|
|
516
544
|
connId: conn == null ? void 0 : conn.id,
|
|
@@ -526,7 +554,7 @@ var EngineActorDriver = class {
|
|
|
526
554
|
});
|
|
527
555
|
websocket.addEventListener("message", (event3) => {
|
|
528
556
|
var _a2, _b2;
|
|
529
|
-
|
|
557
|
+
logger2().debug({
|
|
530
558
|
msg: "websocket message event listener triggered",
|
|
531
559
|
connId: conn == null ? void 0 : conn.id,
|
|
532
560
|
actorId: actor2 == null ? void 0 : actor2.id,
|
|
@@ -539,7 +567,7 @@ var EngineActorDriver = class {
|
|
|
539
567
|
eventTargetWsId: (_b2 = event3.target) == null ? void 0 : _b2.__rivet_ws_id
|
|
540
568
|
});
|
|
541
569
|
if (actor2 == null ? void 0 : actor2.isStopping) {
|
|
542
|
-
|
|
570
|
+
logger2().debug({
|
|
543
571
|
msg: "ignoring ws message, actor is stopping",
|
|
544
572
|
connId: conn == null ? void 0 : conn.id,
|
|
545
573
|
actorId: actor2 == null ? void 0 : actor2.id,
|
|
@@ -547,7 +575,7 @@ var EngineActorDriver = class {
|
|
|
547
575
|
});
|
|
548
576
|
return;
|
|
549
577
|
}
|
|
550
|
-
|
|
578
|
+
logger2().debug({
|
|
551
579
|
msg: "calling wsHandler.onMessage",
|
|
552
580
|
connId: conn == null ? void 0 : conn.id,
|
|
553
581
|
messageIndex: event3.rivetMessageIndex
|
|
@@ -561,7 +589,7 @@ var EngineActorDriver = class {
|
|
|
561
589
|
);
|
|
562
590
|
const previousMsgIndex = hibernate.serverMessageIndex;
|
|
563
591
|
hibernate.serverMessageIndex = event3.rivetMessageIndex;
|
|
564
|
-
|
|
592
|
+
logger2().info({
|
|
565
593
|
msg: "persisting message index",
|
|
566
594
|
connId: conn.id,
|
|
567
595
|
previousMsgIndex,
|
|
@@ -596,7 +624,7 @@ var EngineActorDriver = class {
|
|
|
596
624
|
wsHandler.onError(event3, wsContext);
|
|
597
625
|
});
|
|
598
626
|
if (isRestoringHibernatable) {
|
|
599
|
-
|
|
627
|
+
logger2().info({
|
|
600
628
|
msg: "event listeners attached to restored websocket",
|
|
601
629
|
actorId,
|
|
602
630
|
connId: conn == null ? void 0 : conn.id,
|
|
@@ -614,7 +642,7 @@ var EngineActorDriver = class {
|
|
|
614
642
|
const path = url.pathname;
|
|
615
643
|
const actorInstance = this.#runner.getActor(actorId);
|
|
616
644
|
if (!actorInstance) {
|
|
617
|
-
|
|
645
|
+
logger2().warn({
|
|
618
646
|
msg: "actor not found in #hwsCanHibernate",
|
|
619
647
|
actorId
|
|
620
648
|
});
|
|
@@ -622,20 +650,20 @@ var EngineActorDriver = class {
|
|
|
622
650
|
}
|
|
623
651
|
const handler = this.#actors.get(actorId);
|
|
624
652
|
if (!handler) {
|
|
625
|
-
|
|
653
|
+
logger2().warn({
|
|
626
654
|
msg: "actor handler not found in #hwsCanHibernate",
|
|
627
655
|
actorId
|
|
628
656
|
});
|
|
629
657
|
return false;
|
|
630
658
|
}
|
|
631
659
|
if (!handler.actor) {
|
|
632
|
-
|
|
660
|
+
logger2().warn({
|
|
633
661
|
msg: "actor not found in #hwsCanHibernate",
|
|
634
662
|
actorId
|
|
635
663
|
});
|
|
636
664
|
return false;
|
|
637
665
|
}
|
|
638
|
-
|
|
666
|
+
logger2().debug({
|
|
639
667
|
msg: "no existing hibernatable websocket found",
|
|
640
668
|
gatewayId: idToStr(gatewayId),
|
|
641
669
|
requestId: idToStr(requestId)
|
|
@@ -662,7 +690,7 @@ var EngineActorDriver = class {
|
|
|
662
690
|
const canHibernate = canHibernateWebSocket(truncatedRequest);
|
|
663
691
|
return canHibernate;
|
|
664
692
|
} catch (error) {
|
|
665
|
-
|
|
693
|
+
logger2().error({
|
|
666
694
|
msg: "error calling canHibernateWebSocket",
|
|
667
695
|
error
|
|
668
696
|
});
|
|
@@ -674,7 +702,7 @@ var EngineActorDriver = class {
|
|
|
674
702
|
} else if (path === PATH_INSPECTOR_CONNECT) {
|
|
675
703
|
return false;
|
|
676
704
|
} else {
|
|
677
|
-
|
|
705
|
+
logger2().warn({
|
|
678
706
|
msg: "unexpected path for getActorHibernationConfig",
|
|
679
707
|
path
|
|
680
708
|
});
|
|
@@ -716,7 +744,7 @@ var EngineActorDriver = class {
|
|
|
716
744
|
pendingAckFromMessageIndex: false,
|
|
717
745
|
pendingAckFromBufferSize: false
|
|
718
746
|
});
|
|
719
|
-
|
|
747
|
+
logger2().debug({
|
|
720
748
|
msg: "created #hwsMessageIndex entry",
|
|
721
749
|
connId: conn.id,
|
|
722
750
|
serverMessageIndex: hibernatable.serverMessageIndex
|
|
@@ -724,7 +752,7 @@ var EngineActorDriver = class {
|
|
|
724
752
|
}
|
|
725
753
|
onDestroyConn(conn) {
|
|
726
754
|
this.#hwsMessageIndex.delete(conn.id);
|
|
727
|
-
|
|
755
|
+
logger2().debug({
|
|
728
756
|
msg: "removed #hwsMessageIndex entry",
|
|
729
757
|
connId: conn.id
|
|
730
758
|
});
|
|
@@ -734,7 +762,7 @@ var EngineActorDriver = class {
|
|
|
734
762
|
const hibernatable = stateManager.hibernatableDataOrError();
|
|
735
763
|
const entry = this.#hwsMessageIndex.get(conn.id);
|
|
736
764
|
if (!entry) {
|
|
737
|
-
|
|
765
|
+
logger2().warn({
|
|
738
766
|
msg: "missing EngineActorDriver.#hwsMessageIndex entry for conn",
|
|
739
767
|
connId: conn.id
|
|
740
768
|
});
|
|
@@ -748,7 +776,7 @@ var EngineActorDriver = class {
|
|
|
748
776
|
const hibernatable = stateManager.hibernatableDataOrError();
|
|
749
777
|
const entry = this.#hwsMessageIndex.get(conn.id);
|
|
750
778
|
if (!entry) {
|
|
751
|
-
|
|
779
|
+
logger2().warn({
|
|
752
780
|
msg: "missing EngineActorDriver.#hwsMessageIndex entry for conn",
|
|
753
781
|
connId: conn.id
|
|
754
782
|
});
|
|
@@ -933,7 +961,7 @@ function chooseDefaultDriver(config) {
|
|
|
933
961
|
}
|
|
934
962
|
|
|
935
963
|
// src/engine-process/log.ts
|
|
936
|
-
function
|
|
964
|
+
function logger3() {
|
|
937
965
|
return getLogger("engine-process");
|
|
938
966
|
}
|
|
939
967
|
|
|
@@ -942,7 +970,7 @@ var ENGINE_BASE_URL = "https://releases.rivet.dev/rivet";
|
|
|
942
970
|
var ENGINE_BINARY_NAME = "rivet-engine";
|
|
943
971
|
async function ensureEngineProcess(options) {
|
|
944
972
|
importNodeDependencies();
|
|
945
|
-
|
|
973
|
+
logger3().debug({
|
|
946
974
|
msg: "ensuring engine process",
|
|
947
975
|
version: options.version
|
|
948
976
|
});
|
|
@@ -957,13 +985,13 @@ async function ensureEngineProcess(options) {
|
|
|
957
985
|
if (await isEngineRunning()) {
|
|
958
986
|
try {
|
|
959
987
|
const health = await waitForEngineHealth();
|
|
960
|
-
|
|
988
|
+
logger3().debug({
|
|
961
989
|
msg: "engine already running and healthy",
|
|
962
990
|
version: health.version
|
|
963
991
|
});
|
|
964
992
|
return;
|
|
965
993
|
} catch (error) {
|
|
966
|
-
|
|
994
|
+
logger3().warn({
|
|
967
995
|
msg: "existing engine process not healthy, cannot restart automatically",
|
|
968
996
|
error
|
|
969
997
|
});
|
|
@@ -985,7 +1013,7 @@ async function ensureEngineProcess(options) {
|
|
|
985
1013
|
const stderrStream = fsSync.createWriteStream(stderrLogPath, {
|
|
986
1014
|
flags: "a"
|
|
987
1015
|
});
|
|
988
|
-
|
|
1016
|
+
logger3().debug({
|
|
989
1017
|
msg: "creating engine log files",
|
|
990
1018
|
stdout: stdoutLogPath,
|
|
991
1019
|
stderr: stderrLogPath
|
|
@@ -1042,7 +1070,7 @@ async function ensureEngineProcess(options) {
|
|
|
1042
1070
|
});
|
|
1043
1071
|
child.stderr.pipe(stderrStream);
|
|
1044
1072
|
}
|
|
1045
|
-
|
|
1073
|
+
logger3().debug({
|
|
1046
1074
|
msg: "spawned engine process",
|
|
1047
1075
|
pid: child.pid,
|
|
1048
1076
|
cwd: path.dirname(binaryPath)
|
|
@@ -1050,7 +1078,7 @@ async function ensureEngineProcess(options) {
|
|
|
1050
1078
|
child.once("exit", (code, signal) => {
|
|
1051
1079
|
const stderrOutput = Buffer.concat(stderrChunks).toString("utf-8");
|
|
1052
1080
|
if (stderrOutput.includes("LOCK: Resource temporarily unavailable")) {
|
|
1053
|
-
|
|
1081
|
+
logger3().error({
|
|
1054
1082
|
msg: "another instance of rivet engine is unexpectedly running, this is an internal error",
|
|
1055
1083
|
code,
|
|
1056
1084
|
signal,
|
|
@@ -1060,7 +1088,7 @@ async function ensureEngineProcess(options) {
|
|
|
1060
1088
|
support: "https://rivet.dev/discord"
|
|
1061
1089
|
});
|
|
1062
1090
|
} else if (stderrOutput.includes("Rivet Engine has been rolled back to a previous version")) {
|
|
1063
|
-
|
|
1091
|
+
logger3().error({
|
|
1064
1092
|
msg: "rivet engine version downgrade detected",
|
|
1065
1093
|
hint: `You attempted to downgrade the RivetKit version in development. To fix this, nuke the database by running: '${binaryPath}' database nuke --yes`,
|
|
1066
1094
|
code,
|
|
@@ -1069,7 +1097,7 @@ async function ensureEngineProcess(options) {
|
|
|
1069
1097
|
stderrLog: stderrLogPath
|
|
1070
1098
|
});
|
|
1071
1099
|
} else {
|
|
1072
|
-
|
|
1100
|
+
logger3().warn({
|
|
1073
1101
|
msg: "engine process exited, please report this error",
|
|
1074
1102
|
code,
|
|
1075
1103
|
signal,
|
|
@@ -1083,7 +1111,7 @@ async function ensureEngineProcess(options) {
|
|
|
1083
1111
|
stderrStream.end();
|
|
1084
1112
|
});
|
|
1085
1113
|
child.once("error", (error) => {
|
|
1086
|
-
|
|
1114
|
+
logger3().error({
|
|
1087
1115
|
msg: "engine process failed",
|
|
1088
1116
|
error
|
|
1089
1117
|
});
|
|
@@ -1091,7 +1119,7 @@ async function ensureEngineProcess(options) {
|
|
|
1091
1119
|
stderrStream.end();
|
|
1092
1120
|
});
|
|
1093
1121
|
await waitForEngineHealth();
|
|
1094
|
-
|
|
1122
|
+
logger3().info({
|
|
1095
1123
|
msg: "engine process started",
|
|
1096
1124
|
pid: child.pid,
|
|
1097
1125
|
version: options.version,
|
|
@@ -1104,7 +1132,7 @@ async function ensureEngineProcess(options) {
|
|
|
1104
1132
|
async function downloadEngineBinaryIfNeeded(binaryPath, version, varDir) {
|
|
1105
1133
|
const binaryExists = await fileExists(binaryPath);
|
|
1106
1134
|
if (binaryExists) {
|
|
1107
|
-
|
|
1135
|
+
logger3().debug({
|
|
1108
1136
|
msg: "engine binary already cached",
|
|
1109
1137
|
version,
|
|
1110
1138
|
path: binaryPath
|
|
@@ -1114,7 +1142,7 @@ async function downloadEngineBinaryIfNeeded(binaryPath, version, varDir) {
|
|
|
1114
1142
|
const { targetTriplet, extension } = resolveTargetTriplet();
|
|
1115
1143
|
const remoteFile = `${ENGINE_BINARY_NAME}-${targetTriplet}${extension}`;
|
|
1116
1144
|
const downloadUrl = `${ENGINE_BASE_URL}/${version}/engine/${remoteFile}`;
|
|
1117
|
-
|
|
1145
|
+
logger3().info({
|
|
1118
1146
|
msg: "downloading engine binary",
|
|
1119
1147
|
url: downloadUrl,
|
|
1120
1148
|
path: binaryPath,
|
|
@@ -1129,13 +1157,13 @@ async function downloadEngineBinaryIfNeeded(binaryPath, version, varDir) {
|
|
|
1129
1157
|
const crypto2 = getNodeCrypto();
|
|
1130
1158
|
const tempPath = `${binaryPath}.${crypto2.randomUUID()}.tmp`;
|
|
1131
1159
|
const startTime = Date.now();
|
|
1132
|
-
|
|
1160
|
+
logger3().debug({
|
|
1133
1161
|
msg: "starting binary download",
|
|
1134
1162
|
tempPath,
|
|
1135
1163
|
contentLength: response.headers.get("content-length")
|
|
1136
1164
|
});
|
|
1137
1165
|
const slowDownloadWarning = setTimeout(() => {
|
|
1138
|
-
|
|
1166
|
+
logger3().warn({
|
|
1139
1167
|
msg: "engine binary download is taking longer than expected, please be patient",
|
|
1140
1168
|
version
|
|
1141
1169
|
});
|
|
@@ -1155,21 +1183,21 @@ async function downloadEngineBinaryIfNeeded(binaryPath, version, varDir) {
|
|
|
1155
1183
|
await fs.chmod(tempPath, 493);
|
|
1156
1184
|
}
|
|
1157
1185
|
await fs.rename(tempPath, binaryPath);
|
|
1158
|
-
|
|
1186
|
+
logger3().debug({
|
|
1159
1187
|
msg: "engine binary download complete",
|
|
1160
1188
|
version,
|
|
1161
1189
|
path: binaryPath,
|
|
1162
1190
|
size: stats.size,
|
|
1163
1191
|
durationMs: downloadDuration
|
|
1164
1192
|
});
|
|
1165
|
-
|
|
1193
|
+
logger3().info({
|
|
1166
1194
|
msg: "engine binary downloaded",
|
|
1167
1195
|
version,
|
|
1168
1196
|
path: binaryPath
|
|
1169
1197
|
});
|
|
1170
1198
|
} catch (error) {
|
|
1171
1199
|
clearTimeout(slowDownloadWarning);
|
|
1172
|
-
|
|
1200
|
+
logger3().warn({
|
|
1173
1201
|
msg: "engine download failed, please report this error",
|
|
1174
1202
|
tempPath,
|
|
1175
1203
|
error,
|
|
@@ -1231,13 +1259,13 @@ async function checkIfEngineAlreadyRunningOnPort(port) {
|
|
|
1231
1259
|
if (response.ok) {
|
|
1232
1260
|
const health = await response.json();
|
|
1233
1261
|
if (health.runtime === "engine") {
|
|
1234
|
-
|
|
1262
|
+
logger3().debug({
|
|
1235
1263
|
msg: "rivet engine already running on port",
|
|
1236
1264
|
port
|
|
1237
1265
|
});
|
|
1238
1266
|
return true;
|
|
1239
1267
|
} else if (health.runtime === "rivetkit") {
|
|
1240
|
-
|
|
1268
|
+
logger3().error({
|
|
1241
1269
|
msg: "another rivetkit process is already running on port",
|
|
1242
1270
|
port
|
|
1243
1271
|
});
|
|
@@ -1265,7 +1293,7 @@ var HEALTH_MAX_WAIT = 1e4;
|
|
|
1265
1293
|
var HEALTH_INTERVAL = 100;
|
|
1266
1294
|
async function waitForEngineHealth() {
|
|
1267
1295
|
const maxRetries = Math.ceil(HEALTH_MAX_WAIT / HEALTH_INTERVAL);
|
|
1268
|
-
|
|
1296
|
+
logger3().debug({ msg: "waiting for engine health check" });
|
|
1269
1297
|
for (let i = 0; i < maxRetries; i++) {
|
|
1270
1298
|
try {
|
|
1271
1299
|
const response = await fetch(`${ENGINE_ENDPOINT}/health`, {
|
|
@@ -1273,11 +1301,11 @@ async function waitForEngineHealth() {
|
|
|
1273
1301
|
});
|
|
1274
1302
|
if (response.ok) {
|
|
1275
1303
|
const health = await response.json();
|
|
1276
|
-
|
|
1304
|
+
logger3().debug({ msg: "engine health check passed" });
|
|
1277
1305
|
return health;
|
|
1278
1306
|
}
|
|
1279
1307
|
} catch (error) {
|
|
1280
|
-
|
|
1308
|
+
logger3().debug({ msg: "engine health check failed", error });
|
|
1281
1309
|
if (i === maxRetries - 1) {
|
|
1282
1310
|
throw new Error(
|
|
1283
1311
|
`engine health check failed after ${maxRetries} retries: ${error}`
|
|
@@ -1285,7 +1313,7 @@ async function waitForEngineHealth() {
|
|
|
1285
1313
|
}
|
|
1286
1314
|
}
|
|
1287
1315
|
if (i < maxRetries - 1) {
|
|
1288
|
-
|
|
1316
|
+
logger3().trace({
|
|
1289
1317
|
msg: "engine not ready, retrying",
|
|
1290
1318
|
attempt: i + 1,
|
|
1291
1319
|
maxRetries
|
|
@@ -1307,14 +1335,14 @@ function getInspectorUrl(config, managerPort) {
|
|
|
1307
1335
|
}
|
|
1308
1336
|
|
|
1309
1337
|
// src/serverless/log.ts
|
|
1310
|
-
function
|
|
1338
|
+
function logger4() {
|
|
1311
1339
|
return getLogger("serverless");
|
|
1312
1340
|
}
|
|
1313
1341
|
|
|
1314
1342
|
// src/serverless/configure.ts
|
|
1315
1343
|
import invariant2 from "invariant";
|
|
1316
1344
|
async function configureServerlessRunner(config) {
|
|
1317
|
-
|
|
1345
|
+
logger4().debug("configuring serverless runner");
|
|
1318
1346
|
try {
|
|
1319
1347
|
if (!config.namespace) {
|
|
1320
1348
|
throw new Error(
|
|
@@ -1329,13 +1357,13 @@ async function configureServerlessRunner(config) {
|
|
|
1329
1357
|
const customConfig = config.serverless.configureRunnerPool;
|
|
1330
1358
|
invariant2(customConfig, "configureRunnerPool should exist");
|
|
1331
1359
|
const clientConfig = convertRegistryConfigToClientConfig(config);
|
|
1332
|
-
|
|
1360
|
+
logger4().debug({
|
|
1333
1361
|
msg: "fetching datacenters",
|
|
1334
1362
|
endpoint: config.endpoint
|
|
1335
1363
|
});
|
|
1336
1364
|
const dcsRes = await getDatacenters(clientConfig);
|
|
1337
1365
|
const runnerName = customConfig.name ?? "default";
|
|
1338
|
-
|
|
1366
|
+
logger4().debug({
|
|
1339
1367
|
msg: "configuring serverless runner",
|
|
1340
1368
|
runnerName,
|
|
1341
1369
|
namespace: config.namespace
|
|
@@ -1360,143 +1388,19 @@ async function configureServerlessRunner(config) {
|
|
|
1360
1388
|
dcsRes.datacenters.map((dc) => [dc.name, serverlessConfig])
|
|
1361
1389
|
)
|
|
1362
1390
|
});
|
|
1363
|
-
|
|
1391
|
+
logger4().info({
|
|
1364
1392
|
msg: "serverless runner configured successfully",
|
|
1365
1393
|
runnerName,
|
|
1366
1394
|
namespace: config.namespace
|
|
1367
1395
|
});
|
|
1368
1396
|
} catch (error) {
|
|
1369
|
-
|
|
1397
|
+
logger4().error({
|
|
1370
1398
|
msg: "failed to configure serverless runner, validate endpoint is configured correctly then restart this process",
|
|
1371
1399
|
error
|
|
1372
1400
|
});
|
|
1373
1401
|
}
|
|
1374
1402
|
}
|
|
1375
1403
|
|
|
1376
|
-
// src/registry/log.ts
|
|
1377
|
-
function logger4() {
|
|
1378
|
-
return getLogger("registry");
|
|
1379
|
-
}
|
|
1380
|
-
|
|
1381
|
-
// src/registry/serve.ts
|
|
1382
|
-
import getPort from "get-port";
|
|
1383
|
-
var DEFAULT_PORT = 6420;
|
|
1384
|
-
async function findFreePort(startPort = DEFAULT_PORT) {
|
|
1385
|
-
function* portRange(start, count = 100) {
|
|
1386
|
-
for (let i = 0; i < count; i++) {
|
|
1387
|
-
yield start + i;
|
|
1388
|
-
}
|
|
1389
|
-
}
|
|
1390
|
-
return getPort({ port: portRange(startPort) });
|
|
1391
|
-
}
|
|
1392
|
-
async function crossPlatformServe(config, managerPort, app) {
|
|
1393
|
-
const runtime = detectRuntime();
|
|
1394
|
-
logger4().debug({ msg: "detected runtime for serve", runtime });
|
|
1395
|
-
switch (runtime) {
|
|
1396
|
-
case "deno":
|
|
1397
|
-
return serveDeno(config, managerPort, app);
|
|
1398
|
-
case "bun":
|
|
1399
|
-
return serveBun(config, managerPort, app);
|
|
1400
|
-
case "node":
|
|
1401
|
-
return serveNode(config, managerPort, app);
|
|
1402
|
-
default:
|
|
1403
|
-
return serveNode(config, managerPort, app);
|
|
1404
|
-
}
|
|
1405
|
-
}
|
|
1406
|
-
async function serveNode(config, managerPort, app) {
|
|
1407
|
-
const nodeServerModule = "@hono/node-server";
|
|
1408
|
-
let serve;
|
|
1409
|
-
try {
|
|
1410
|
-
const dep = await import(
|
|
1411
|
-
/* webpackIgnore: true */
|
|
1412
|
-
nodeServerModule
|
|
1413
|
-
);
|
|
1414
|
-
serve = dep.serve;
|
|
1415
|
-
} catch (err) {
|
|
1416
|
-
logger4().error({
|
|
1417
|
-
msg: "failed to import @hono/node-server. please run 'npm install @hono/node-server @hono/node-ws'",
|
|
1418
|
-
error: stringifyError(err)
|
|
1419
|
-
});
|
|
1420
|
-
process.exit(1);
|
|
1421
|
-
}
|
|
1422
|
-
const nodeWsModule = "@hono/node-ws";
|
|
1423
|
-
let createNodeWebSocket;
|
|
1424
|
-
try {
|
|
1425
|
-
const dep = await import(
|
|
1426
|
-
/* webpackIgnore: true */
|
|
1427
|
-
nodeWsModule
|
|
1428
|
-
);
|
|
1429
|
-
createNodeWebSocket = dep.createNodeWebSocket;
|
|
1430
|
-
} catch (err) {
|
|
1431
|
-
logger4().error({
|
|
1432
|
-
msg: "failed to import @hono/node-ws. please run 'npm install @hono/node-server @hono/node-ws'",
|
|
1433
|
-
error: stringifyError(err)
|
|
1434
|
-
});
|
|
1435
|
-
process.exit(1);
|
|
1436
|
-
}
|
|
1437
|
-
const { injectWebSocket, upgradeWebSocket } = createNodeWebSocket({
|
|
1438
|
-
app
|
|
1439
|
-
});
|
|
1440
|
-
const port = managerPort;
|
|
1441
|
-
const hostname = config.managerHost;
|
|
1442
|
-
const server = serve(
|
|
1443
|
-
{ fetch: app.fetch, port, hostname },
|
|
1444
|
-
() => logger4().info({ msg: "server listening", port, hostname })
|
|
1445
|
-
);
|
|
1446
|
-
injectWebSocket(server);
|
|
1447
|
-
return { upgradeWebSocket };
|
|
1448
|
-
}
|
|
1449
|
-
async function serveDeno(config, managerPort, app) {
|
|
1450
|
-
const honoDenoModule = "hono/deno";
|
|
1451
|
-
let upgradeWebSocket;
|
|
1452
|
-
try {
|
|
1453
|
-
const dep = await import(
|
|
1454
|
-
/* webpackIgnore: true */
|
|
1455
|
-
honoDenoModule
|
|
1456
|
-
);
|
|
1457
|
-
upgradeWebSocket = dep.upgradeWebSocket;
|
|
1458
|
-
} catch (err) {
|
|
1459
|
-
logger4().error({
|
|
1460
|
-
msg: "failed to import hono/deno",
|
|
1461
|
-
error: stringifyError(err)
|
|
1462
|
-
});
|
|
1463
|
-
process.exit(1);
|
|
1464
|
-
}
|
|
1465
|
-
const port = config.managerPort;
|
|
1466
|
-
const hostname = config.managerHost;
|
|
1467
|
-
Deno.serve({ port, hostname }, app.fetch);
|
|
1468
|
-
logger4().info({ msg: "server listening", port, hostname });
|
|
1469
|
-
return { upgradeWebSocket };
|
|
1470
|
-
}
|
|
1471
|
-
async function serveBun(config, managerPort, app) {
|
|
1472
|
-
const honoBunModule = "hono/bun";
|
|
1473
|
-
let createBunWebSocket;
|
|
1474
|
-
try {
|
|
1475
|
-
const dep = await import(
|
|
1476
|
-
/* webpackIgnore: true */
|
|
1477
|
-
honoBunModule
|
|
1478
|
-
);
|
|
1479
|
-
createBunWebSocket = dep.createBunWebSocket;
|
|
1480
|
-
} catch (err) {
|
|
1481
|
-
logger4().error({
|
|
1482
|
-
msg: "failed to import hono/bun",
|
|
1483
|
-
error: stringifyError(err)
|
|
1484
|
-
});
|
|
1485
|
-
process.exit(1);
|
|
1486
|
-
}
|
|
1487
|
-
const { websocket, upgradeWebSocket } = createBunWebSocket();
|
|
1488
|
-
const port = config.managerPort;
|
|
1489
|
-
const hostname = config.managerHost;
|
|
1490
|
-
Bun.serve({
|
|
1491
|
-
fetch: app.fetch,
|
|
1492
|
-
port,
|
|
1493
|
-
hostname,
|
|
1494
|
-
websocket
|
|
1495
|
-
});
|
|
1496
|
-
logger4().info({ msg: "server listening", port, hostname });
|
|
1497
|
-
return { upgradeWebSocket };
|
|
1498
|
-
}
|
|
1499
|
-
|
|
1500
1404
|
// src/serverless/router.ts
|
|
1501
1405
|
import invariant3 from "invariant";
|
|
1502
1406
|
|
|
@@ -1541,7 +1445,7 @@ function buildServerlessRouter(driverConfig, config) {
|
|
|
1541
1445
|
);
|
|
1542
1446
|
}
|
|
1543
1447
|
const { endpoint, token, totalSlots, runnerName, namespace } = parseResult.data;
|
|
1544
|
-
|
|
1448
|
+
logger4().debug({
|
|
1545
1449
|
msg: "received serverless runner start request",
|
|
1546
1450
|
endpoint,
|
|
1547
1451
|
totalSlots,
|
|
@@ -1669,7 +1573,7 @@ var Runtime = class _Runtime {
|
|
|
1669
1573
|
}
|
|
1670
1574
|
static async create(registry) {
|
|
1671
1575
|
var _a, _b, _c;
|
|
1672
|
-
|
|
1576
|
+
logger().info("rivetkit starting");
|
|
1673
1577
|
const config = registry.parseConfig();
|
|
1674
1578
|
if ((_a = config.logging) == null ? void 0 : _a.baseLogger) {
|
|
1675
1579
|
configureBaseLogger(config.logging.baseLogger);
|
|
@@ -1685,7 +1589,7 @@ var Runtime = class _Runtime {
|
|
|
1685
1589
|
let managerPort;
|
|
1686
1590
|
if (config.serverless.spawnEngine) {
|
|
1687
1591
|
managerPort = ENGINE_PORT;
|
|
1688
|
-
|
|
1592
|
+
logger().debug({
|
|
1689
1593
|
msg: "spawning engine",
|
|
1690
1594
|
version: config.serverless.engineVersion
|
|
1691
1595
|
});
|
|
@@ -1694,16 +1598,18 @@ var Runtime = class _Runtime {
|
|
|
1694
1598
|
});
|
|
1695
1599
|
} else if (config.serveManager) {
|
|
1696
1600
|
const configuredManagerPort = config.managerPort;
|
|
1601
|
+
const serveRuntime = detectRuntime();
|
|
1697
1602
|
let upgradeWebSocket;
|
|
1698
1603
|
const getUpgradeWebSocket = () => upgradeWebSocket;
|
|
1699
1604
|
managerDriver.setGetUpgradeWebSocket(getUpgradeWebSocket);
|
|
1700
1605
|
const { router: managerRouter } = buildManagerRouter(
|
|
1701
1606
|
config,
|
|
1702
1607
|
managerDriver,
|
|
1703
|
-
getUpgradeWebSocket
|
|
1608
|
+
getUpgradeWebSocket,
|
|
1609
|
+
serveRuntime
|
|
1704
1610
|
);
|
|
1705
1611
|
managerPort = await findFreePort(config.managerPort);
|
|
1706
|
-
|
|
1612
|
+
logger().debug({
|
|
1707
1613
|
msg: "serving manager",
|
|
1708
1614
|
port: managerPort
|
|
1709
1615
|
});
|
|
@@ -1715,7 +1621,8 @@ var Runtime = class _Runtime {
|
|
|
1715
1621
|
const out = await crossPlatformServe(
|
|
1716
1622
|
config,
|
|
1717
1623
|
managerPort,
|
|
1718
|
-
managerRouter
|
|
1624
|
+
managerRouter,
|
|
1625
|
+
serveRuntime
|
|
1719
1626
|
);
|
|
1720
1627
|
upgradeWebSocket = out.upgradeWebSocket;
|
|
1721
1628
|
}
|
|
@@ -1727,7 +1634,7 @@ var Runtime = class _Runtime {
|
|
|
1727
1634
|
managerPort
|
|
1728
1635
|
);
|
|
1729
1636
|
const driverLog = ((_c = managerDriver.extraStartupLog) == null ? void 0 : _c.call(managerDriver)) ?? {};
|
|
1730
|
-
|
|
1637
|
+
logger().info({
|
|
1731
1638
|
msg: "rivetkit ready",
|
|
1732
1639
|
driver: driver.name,
|
|
1733
1640
|
definitions: Object.keys(config.use).length,
|
|
@@ -1753,7 +1660,7 @@ var Runtime = class _Runtime {
|
|
|
1753
1660
|
invariant4(!this.#startKind, "Runtime already started as serverless");
|
|
1754
1661
|
this.#startKind = "runner";
|
|
1755
1662
|
if (this.#config.runner && this.#driver.autoStartActorDriver) {
|
|
1756
|
-
|
|
1663
|
+
logger().debug("starting actor driver");
|
|
1757
1664
|
const inlineClient = createClientWithDriver(
|
|
1758
1665
|
this.#managerDriver
|
|
1759
1666
|
);
|
|
@@ -1925,4 +1832,4 @@ export {
|
|
|
1925
1832
|
Registry,
|
|
1926
1833
|
setup
|
|
1927
1834
|
};
|
|
1928
|
-
//# sourceMappingURL=chunk-
|
|
1835
|
+
//# sourceMappingURL=chunk-ZPWOYQHN.js.map
|