rivetkit 2.0.39 → 2.0.41
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/schemas/actor-persist/v1.js +167 -0
- package/dist/schemas/actor-persist/v2.js +200 -0
- package/dist/schemas/actor-persist/v3.js +200 -0
- package/dist/schemas/client-protocol/v1.js +301 -0
- package/dist/schemas/client-protocol/v2.js +299 -0
- package/dist/schemas/file-system-driver/v1.js +76 -0
- package/dist/schemas/file-system-driver/v2.js +103 -0
- package/dist/schemas/file-system-driver/v3.js +122 -0
- package/dist/tsup/actor/errors.cjs.map +1 -1
- package/dist/tsup/{chunk-OJZRCEIA.js → chunk-4J5EFV3E.js} +5 -5
- package/dist/tsup/{chunk-7E3RWMR6.cjs → chunk-4UHJ3ADW.cjs} +173 -107
- package/dist/tsup/chunk-4UHJ3ADW.cjs.map +1 -0
- package/dist/tsup/{chunk-BQ36VTSB.js → chunk-7KIR3QLO.js} +86 -20
- package/dist/tsup/{chunk-BQ36VTSB.js.map → chunk-7KIR3QLO.js.map} +1 -1
- package/dist/tsup/{chunk-KMYFL3OL.cjs → chunk-B5UXC4QV.cjs} +75 -64
- package/dist/tsup/chunk-B5UXC4QV.cjs.map +1 -0
- package/dist/tsup/{chunk-C64FV764.cjs → chunk-DSNSFYDL.cjs} +3 -3
- package/dist/tsup/chunk-DSNSFYDL.cjs.map +1 -0
- package/dist/tsup/chunk-GBENOENJ.cjs.map +1 -1
- package/dist/tsup/{chunk-DY4H3ASE.cjs → chunk-GTQKDCM4.cjs} +46 -46
- package/dist/tsup/chunk-GTQKDCM4.cjs.map +1 -0
- package/dist/tsup/chunk-KDFWJKMJ.cjs.map +1 -1
- package/dist/tsup/{chunk-CDK6DRO2.js → chunk-LMG4QMDO.js} +2 -2
- package/dist/tsup/{chunk-CDK6DRO2.js.map → chunk-LMG4QMDO.js.map} +1 -1
- package/dist/tsup/{chunk-T7IPDBWH.js → chunk-NRP2OHSW.js} +4 -4
- package/dist/tsup/{chunk-PVKUXMOA.js → chunk-OXN6EZUB.js} +19 -8
- package/dist/tsup/chunk-OXN6EZUB.js.map +1 -0
- package/dist/tsup/{chunk-MZPYVTVG.cjs → chunk-QDVKDX7G.cjs} +9 -9
- package/dist/tsup/chunk-QDVKDX7G.cjs.map +1 -0
- package/dist/tsup/{chunk-X72X7I7T.cjs → chunk-S6F7EKC7.cjs} +2 -2
- package/dist/tsup/chunk-S6F7EKC7.cjs.map +1 -0
- package/dist/tsup/chunk-SNAUKDDK.cjs.map +1 -1
- package/dist/tsup/{chunk-XU74APB4.js → chunk-UGOCTUBG.js} +6 -5
- package/dist/tsup/chunk-UGOCTUBG.js.map +1 -0
- package/dist/tsup/{chunk-UAX5E3EU.cjs → chunk-WYZLRPQM.cjs} +250 -249
- package/dist/tsup/chunk-WYZLRPQM.cjs.map +1 -0
- package/dist/tsup/{chunk-PHCD25XO.js → chunk-Y7ZDTLD2.js} +2 -2
- package/dist/tsup/client/mod.cjs +5 -5
- package/dist/tsup/client/mod.cjs.map +1 -1
- package/dist/tsup/client/mod.d.cts +2 -2
- package/dist/tsup/client/mod.d.ts +2 -2
- package/dist/tsup/client/mod.js +4 -4
- package/dist/tsup/common/log.cjs +2 -2
- package/dist/tsup/common/log.cjs.map +1 -1
- package/dist/tsup/common/log.d.cts +2 -2
- package/dist/tsup/common/log.d.ts +2 -2
- package/dist/tsup/common/log.js +1 -1
- package/dist/tsup/common/websocket.cjs +3 -3
- package/dist/tsup/common/websocket.cjs.map +1 -1
- package/dist/tsup/common/websocket.js +2 -2
- package/dist/tsup/{config-BuBlMs6C.d.cts → config-COyis_uH.d.cts} +22 -10
- package/dist/tsup/{config-CBwo4ooA.d.ts → config-D43N-CFi.d.ts} +22 -10
- package/dist/tsup/{driver-CPXmh8f8.d.cts → driver-Bt7B-qMd.d.cts} +1 -1
- package/dist/tsup/{driver-DxWa6HUO.d.ts → driver-KyM2v645.d.ts} +1 -1
- package/dist/tsup/driver-helpers/mod.cjs +3 -3
- package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
- package/dist/tsup/driver-helpers/mod.d.cts +2 -2
- package/dist/tsup/driver-helpers/mod.d.ts +2 -2
- package/dist/tsup/driver-helpers/mod.js +2 -2
- package/dist/tsup/driver-test-suite/mod.cjs +62 -34
- 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 +35 -7
- package/dist/tsup/driver-test-suite/mod.js.map +1 -1
- package/dist/tsup/inspector/mod.cjs.map +1 -1
- package/dist/tsup/mod.cjs +7 -7
- package/dist/tsup/mod.cjs.map +1 -1
- package/dist/tsup/mod.d.cts +4 -4
- package/dist/tsup/mod.d.ts +4 -4
- package/dist/tsup/mod.js +6 -6
- package/dist/tsup/test/mod.cjs +7 -7
- package/dist/tsup/test/mod.cjs.map +1 -1
- 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.cjs.map +1 -1
- package/dist/tsup/utils.js +1 -1
- package/package.json +2 -2
- package/src/actor/instance/schedule-manager.ts +2 -1
- package/src/actor/router-websocket-endpoints.test.ts +54 -0
- package/src/actor/router-websocket-endpoints.ts +9 -4
- package/src/common/router.ts +2 -0
- package/src/driver-test-suite/tests/raw-websocket.ts +40 -0
- package/src/engine-process/mod.ts +69 -7
- package/src/registry/config/index.ts +7 -0
- package/src/registry/config/serverless.ts +2 -0
- package/src/registry/serve.ts +9 -5
- package/src/remote-manager-driver/api-endpoints.ts +2 -0
- package/src/serverless/configure.ts +3 -0
- package/dist/tsup/chunk-7E3RWMR6.cjs.map +0 -1
- package/dist/tsup/chunk-C64FV764.cjs.map +0 -1
- package/dist/tsup/chunk-DY4H3ASE.cjs.map +0 -1
- package/dist/tsup/chunk-KMYFL3OL.cjs.map +0 -1
- package/dist/tsup/chunk-MZPYVTVG.cjs.map +0 -1
- package/dist/tsup/chunk-PVKUXMOA.js.map +0 -1
- package/dist/tsup/chunk-UAX5E3EU.cjs.map +0 -1
- package/dist/tsup/chunk-X72X7I7T.cjs.map +0 -1
- package/dist/tsup/chunk-XU74APB4.js.map +0 -1
- /package/dist/tsup/{chunk-OJZRCEIA.js.map → chunk-4J5EFV3E.js.map} +0 -0
- /package/dist/tsup/{chunk-T7IPDBWH.js.map → chunk-NRP2OHSW.js.map} +0 -0
- /package/dist/tsup/{chunk-PHCD25XO.js.map → chunk-Y7ZDTLD2.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/nathan/rivet/rivetkit-typescript/packages/rivetkit/dist/tsup/inspector/mod.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,qpIAAC","file":"/Users/nathan/rivet/rivetkit-typescript/packages/rivetkit/dist/tsup/inspector/mod.cjs"}
|
package/dist/tsup/mod.cjs
CHANGED
|
@@ -3,18 +3,18 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunk4UHJ3ADWcjs = require('./chunk-4UHJ3ADW.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _chunkGTQKDCM4cjs = require('./chunk-GTQKDCM4.cjs');
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
var
|
|
17
|
-
require('./chunk-
|
|
16
|
+
var _chunkWYZLRPQMcjs = require('./chunk-WYZLRPQM.cjs');
|
|
17
|
+
require('./chunk-DSNSFYDL.cjs');
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
|
|
@@ -32,12 +32,12 @@ require('./chunk-C64FV764.cjs');
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
var
|
|
35
|
+
var _chunkB5UXC4QVcjs = require('./chunk-B5UXC4QV.cjs');
|
|
36
36
|
require('./chunk-KDFWJKMJ.cjs');
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
|
|
40
|
-
var
|
|
40
|
+
var _chunkS6F7EKC7cjs = require('./chunk-S6F7EKC7.cjs');
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
var _chunkSNAUKDDKcjs = require('./chunk-SNAUKDDK.cjs');
|
|
@@ -72,5 +72,5 @@ require('./chunk-GBENOENJ.cjs');
|
|
|
72
72
|
|
|
73
73
|
|
|
74
74
|
|
|
75
|
-
exports.ALLOWED_PUBLIC_HEADERS =
|
|
75
|
+
exports.ALLOWED_PUBLIC_HEADERS = _chunkB5UXC4QVcjs.ALLOWED_PUBLIC_HEADERS; exports.ActorKv = _chunkB5UXC4QVcjs.ActorKv; exports.ActorsSchema = _chunkB5UXC4QVcjs.ActorsSchema; exports.DocConfigureRunnerPoolSchema = _chunkB5UXC4QVcjs.DocConfigureRunnerPoolSchema; exports.DocInspectorConfigSchema = _chunkB5UXC4QVcjs.DocInspectorConfigSchema; exports.DocRegistryConfigSchema = _chunkB5UXC4QVcjs.DocRegistryConfigSchema; exports.DocRunnerConfigSchema = _chunkB5UXC4QVcjs.DocRunnerConfigSchema; exports.DocServerlessConfigSchema = _chunkB5UXC4QVcjs.DocServerlessConfigSchema; exports.DriverConfigSchema = _chunkB5UXC4QVcjs.DriverConfigSchema; exports.InlineWebSocketAdapter = _chunkGTQKDCM4cjs.InlineWebSocketAdapter; exports.KV_KEYS = _chunkB5UXC4QVcjs.KEYS; exports.PATH_CONNECT = _chunkB5UXC4QVcjs.PATH_CONNECT; exports.PATH_WEBSOCKET_PREFIX = _chunkB5UXC4QVcjs.PATH_WEBSOCKET_PREFIX; exports.Registry = _chunk4UHJ3ADWcjs.Registry; exports.RegistryConfigSchema = _chunkB5UXC4QVcjs.RegistryConfigSchema; exports.TestConfigSchema = _chunkB5UXC4QVcjs.TestConfigSchema; exports.UserError = _chunkSNAUKDDKcjs.UserError; exports.actor = _chunk4UHJ3ADWcjs.actor; exports.buildActorNames = _chunkB5UXC4QVcjs.buildActorNames; exports.createActorRouter = _chunkGTQKDCM4cjs.createActorRouter; exports.createClientWithDriver = _chunkWYZLRPQMcjs.createClientWithDriver; exports.createEngineDriver = _chunk4UHJ3ADWcjs.createEngineDriver; exports.createFileSystemDriver = _chunkGTQKDCM4cjs.createFileSystemDriver; exports.createMemoryDriver = _chunkGTQKDCM4cjs.createMemoryDriver; exports.lookupInRegistry = _chunkWYZLRPQMcjs.lookupInRegistry; exports.noopNext = _chunkS6F7EKC7cjs.noopNext; exports.routeWebSocket = _chunkB5UXC4QVcjs.routeWebSocket; exports.setup = _chunk4UHJ3ADWcjs.setup; exports.toUint8Array = _chunkS6F7EKC7cjs.toUint8Array;
|
|
76
76
|
//# sourceMappingURL=mod.cjs.map
|
package/dist/tsup/mod.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/nathan/rivet/rivetkit-typescript/packages/rivetkit/dist/tsup/mod.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,qyDAAC","file":"/Users/nathan/rivet/rivetkit-typescript/packages/rivetkit/dist/tsup/mod.cjs"}
|
package/dist/tsup/mod.d.cts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { R as RegistryConfig, A as ActorDriver, a as AnyConn, b as AnyActorInstance, E as Encoding, c as AnyDatabaseProvider, d as Actions, e as ActorConfigInput, f as ActorDefinition } from './config-
|
|
2
|
-
export { B as ActionContext, F as ActionContextOf, r as ActorConfig, p as ActorConfigSchema, u as ActorContext, v as ActorContextOf, j as ActorKey, n as ActorKv, i as ActorQuery, o as ActorTypes, ac as ActorsSchema, l as AnyActorDefinition, g as AnyClient, q as AuthIntent, G as BeforeActionResponseContext, H as BeforeActionResponseContextOf, I as BeforeConnectContext, J as BeforeConnectContextOf, C as Client, k as Conn, w as ConnContext, x as ConnContextOf, y as ConnInitContext, z as ConnInitContextOf, K as ConnectContext, L as ConnectContextOf, O as CreateConnStateContext, P as CreateConnStateContextOf, M as CreateContext, N as CreateContextOf, Q as CreateVarsContext, S as CreateVarsContextOf, T as DestroyContext, U as DestroyContextOf, V as DisconnectContext, W as DisconnectContextOf, s as DocActorConfigSchema, D as DocActorOptionsSchema, ai as DocConfigureRunnerPoolSchema, ah as DocInspectorConfigSchema, al as DocRegistryConfigSchema, ak as DocRunnerConfigSchema, aj as DocServerlessConfigSchema, a7 as FetchHandler, a9 as LegacyStartServerOutput, aa as Registry, a5 as RegistryActors, af as RegistryConfigInput, a6 as RegistryConfigSchema, X as RequestContext, Y as RequestContextOf, a8 as ServerlessHandler, Z as SleepContext, _ as SleepContextOf, $ as StateChangeContext, a0 as StateChangeContextOf, ae as TestConfig, ad as TestConfigSchema, a1 as WakeContext, a2 as WakeContextOf, a3 as WebSocketContext, a4 as WebSocketContextOf, ag as buildActorNames, h as createClientWithDriver, m as lookupInRegistry, ab as setup, t as test } from './config-
|
|
1
|
+
import { R as RegistryConfig, A as ActorDriver, a as AnyConn, b as AnyActorInstance, E as Encoding, c as AnyDatabaseProvider, d as Actions, e as ActorConfigInput, f as ActorDefinition } from './config-COyis_uH.cjs';
|
|
2
|
+
export { B as ActionContext, F as ActionContextOf, r as ActorConfig, p as ActorConfigSchema, u as ActorContext, v as ActorContextOf, j as ActorKey, n as ActorKv, i as ActorQuery, o as ActorTypes, ac as ActorsSchema, l as AnyActorDefinition, g as AnyClient, q as AuthIntent, G as BeforeActionResponseContext, H as BeforeActionResponseContextOf, I as BeforeConnectContext, J as BeforeConnectContextOf, C as Client, k as Conn, w as ConnContext, x as ConnContextOf, y as ConnInitContext, z as ConnInitContextOf, K as ConnectContext, L as ConnectContextOf, O as CreateConnStateContext, P as CreateConnStateContextOf, M as CreateContext, N as CreateContextOf, Q as CreateVarsContext, S as CreateVarsContextOf, T as DestroyContext, U as DestroyContextOf, V as DisconnectContext, W as DisconnectContextOf, s as DocActorConfigSchema, D as DocActorOptionsSchema, ai as DocConfigureRunnerPoolSchema, ah as DocInspectorConfigSchema, al as DocRegistryConfigSchema, ak as DocRunnerConfigSchema, aj as DocServerlessConfigSchema, a7 as FetchHandler, a9 as LegacyStartServerOutput, aa as Registry, a5 as RegistryActors, af as RegistryConfigInput, a6 as RegistryConfigSchema, X as RequestContext, Y as RequestContextOf, a8 as ServerlessHandler, Z as SleepContext, _ as SleepContextOf, $ as StateChangeContext, a0 as StateChangeContextOf, ae as TestConfig, ad as TestConfigSchema, a1 as WakeContext, a2 as WakeContextOf, a3 as WebSocketContext, a4 as WebSocketContextOf, ag as buildActorNames, h as createClientWithDriver, m as lookupInRegistry, ab as setup, t as test } from './config-COyis_uH.cjs';
|
|
3
3
|
import { WSContext } from 'hono/ws';
|
|
4
4
|
import { UniversalWebSocket } from '@rivetkit/virtual-websocket';
|
|
5
5
|
export { RivetCloseEvent, RivetEvent, RivetMessageEvent, UniversalWebSocket } from '@rivetkit/virtual-websocket';
|
|
6
6
|
export { n as noopNext } from './utils-fwx3o3K9.cjs';
|
|
7
|
-
import { D as DriverConfig } from './driver-
|
|
8
|
-
export { a as DriverConfigSchema } from './driver-
|
|
7
|
+
import { D as DriverConfig } from './driver-Bt7B-qMd.cjs';
|
|
8
|
+
export { a as DriverConfigSchema } from './driver-Bt7B-qMd.cjs';
|
|
9
9
|
import { GetUpgradeWebSocket } from './utils.cjs';
|
|
10
10
|
export { toUint8Array } from './utils.cjs';
|
|
11
11
|
export { A as ALLOWED_PUBLIC_HEADERS, P as PATH_CONNECT, a as PATH_WEBSOCKET_PREFIX } from './actor-router-consts-DzI2szci.cjs';
|
package/dist/tsup/mod.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { R as RegistryConfig, A as ActorDriver, a as AnyConn, b as AnyActorInstance, E as Encoding, c as AnyDatabaseProvider, d as Actions, e as ActorConfigInput, f as ActorDefinition } from './config-
|
|
2
|
-
export { B as ActionContext, F as ActionContextOf, r as ActorConfig, p as ActorConfigSchema, u as ActorContext, v as ActorContextOf, j as ActorKey, n as ActorKv, i as ActorQuery, o as ActorTypes, ac as ActorsSchema, l as AnyActorDefinition, g as AnyClient, q as AuthIntent, G as BeforeActionResponseContext, H as BeforeActionResponseContextOf, I as BeforeConnectContext, J as BeforeConnectContextOf, C as Client, k as Conn, w as ConnContext, x as ConnContextOf, y as ConnInitContext, z as ConnInitContextOf, K as ConnectContext, L as ConnectContextOf, O as CreateConnStateContext, P as CreateConnStateContextOf, M as CreateContext, N as CreateContextOf, Q as CreateVarsContext, S as CreateVarsContextOf, T as DestroyContext, U as DestroyContextOf, V as DisconnectContext, W as DisconnectContextOf, s as DocActorConfigSchema, D as DocActorOptionsSchema, ai as DocConfigureRunnerPoolSchema, ah as DocInspectorConfigSchema, al as DocRegistryConfigSchema, ak as DocRunnerConfigSchema, aj as DocServerlessConfigSchema, a7 as FetchHandler, a9 as LegacyStartServerOutput, aa as Registry, a5 as RegistryActors, af as RegistryConfigInput, a6 as RegistryConfigSchema, X as RequestContext, Y as RequestContextOf, a8 as ServerlessHandler, Z as SleepContext, _ as SleepContextOf, $ as StateChangeContext, a0 as StateChangeContextOf, ae as TestConfig, ad as TestConfigSchema, a1 as WakeContext, a2 as WakeContextOf, a3 as WebSocketContext, a4 as WebSocketContextOf, ag as buildActorNames, h as createClientWithDriver, m as lookupInRegistry, ab as setup, t as test } from './config-
|
|
1
|
+
import { R as RegistryConfig, A as ActorDriver, a as AnyConn, b as AnyActorInstance, E as Encoding, c as AnyDatabaseProvider, d as Actions, e as ActorConfigInput, f as ActorDefinition } from './config-D43N-CFi.js';
|
|
2
|
+
export { B as ActionContext, F as ActionContextOf, r as ActorConfig, p as ActorConfigSchema, u as ActorContext, v as ActorContextOf, j as ActorKey, n as ActorKv, i as ActorQuery, o as ActorTypes, ac as ActorsSchema, l as AnyActorDefinition, g as AnyClient, q as AuthIntent, G as BeforeActionResponseContext, H as BeforeActionResponseContextOf, I as BeforeConnectContext, J as BeforeConnectContextOf, C as Client, k as Conn, w as ConnContext, x as ConnContextOf, y as ConnInitContext, z as ConnInitContextOf, K as ConnectContext, L as ConnectContextOf, O as CreateConnStateContext, P as CreateConnStateContextOf, M as CreateContext, N as CreateContextOf, Q as CreateVarsContext, S as CreateVarsContextOf, T as DestroyContext, U as DestroyContextOf, V as DisconnectContext, W as DisconnectContextOf, s as DocActorConfigSchema, D as DocActorOptionsSchema, ai as DocConfigureRunnerPoolSchema, ah as DocInspectorConfigSchema, al as DocRegistryConfigSchema, ak as DocRunnerConfigSchema, aj as DocServerlessConfigSchema, a7 as FetchHandler, a9 as LegacyStartServerOutput, aa as Registry, a5 as RegistryActors, af as RegistryConfigInput, a6 as RegistryConfigSchema, X as RequestContext, Y as RequestContextOf, a8 as ServerlessHandler, Z as SleepContext, _ as SleepContextOf, $ as StateChangeContext, a0 as StateChangeContextOf, ae as TestConfig, ad as TestConfigSchema, a1 as WakeContext, a2 as WakeContextOf, a3 as WebSocketContext, a4 as WebSocketContextOf, ag as buildActorNames, h as createClientWithDriver, m as lookupInRegistry, ab as setup, t as test } from './config-D43N-CFi.js';
|
|
3
3
|
import { WSContext } from 'hono/ws';
|
|
4
4
|
import { UniversalWebSocket } from '@rivetkit/virtual-websocket';
|
|
5
5
|
export { RivetCloseEvent, RivetEvent, RivetMessageEvent, UniversalWebSocket } from '@rivetkit/virtual-websocket';
|
|
6
6
|
export { n as noopNext } from './utils-fwx3o3K9.js';
|
|
7
|
-
import { D as DriverConfig } from './driver-
|
|
8
|
-
export { a as DriverConfigSchema } from './driver-
|
|
7
|
+
import { D as DriverConfig } from './driver-KyM2v645.js';
|
|
8
|
+
export { a as DriverConfigSchema } from './driver-KyM2v645.js';
|
|
9
9
|
import { GetUpgradeWebSocket } from './utils.js';
|
|
10
10
|
export { toUint8Array } from './utils.js';
|
|
11
11
|
export { A as ALLOWED_PUBLIC_HEADERS, P as PATH_CONNECT, a as PATH_WEBSOCKET_PREFIX } from './actor-router-consts-DzI2szci.js';
|
package/dist/tsup/mod.js
CHANGED
|
@@ -3,18 +3,18 @@ import {
|
|
|
3
3
|
actor,
|
|
4
4
|
createEngineDriver,
|
|
5
5
|
setup
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-7KIR3QLO.js";
|
|
7
7
|
import {
|
|
8
8
|
InlineWebSocketAdapter,
|
|
9
9
|
createActorRouter,
|
|
10
10
|
createFileSystemDriver,
|
|
11
11
|
createMemoryDriver
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-NRP2OHSW.js";
|
|
13
13
|
import {
|
|
14
14
|
createClientWithDriver,
|
|
15
15
|
lookupInRegistry
|
|
16
|
-
} from "./chunk-
|
|
17
|
-
import "./chunk-
|
|
16
|
+
} from "./chunk-UGOCTUBG.js";
|
|
17
|
+
import "./chunk-Y7ZDTLD2.js";
|
|
18
18
|
import {
|
|
19
19
|
ALLOWED_PUBLIC_HEADERS,
|
|
20
20
|
ActorKv,
|
|
@@ -32,12 +32,12 @@ import {
|
|
|
32
32
|
TestConfigSchema,
|
|
33
33
|
buildActorNames,
|
|
34
34
|
routeWebSocket
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-OXN6EZUB.js";
|
|
36
36
|
import "./chunk-E6ZE2YEA.js";
|
|
37
37
|
import {
|
|
38
38
|
noopNext,
|
|
39
39
|
toUint8Array
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-LMG4QMDO.js";
|
|
41
41
|
import {
|
|
42
42
|
UserError
|
|
43
43
|
} from "./chunk-2YHR67M4.js";
|
package/dist/tsup/test/mod.cjs
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
require('../chunk-
|
|
6
|
-
require('../chunk-
|
|
7
|
-
require('../chunk-
|
|
8
|
-
require('../chunk-
|
|
4
|
+
var _chunkQDVKDX7Gcjs = require('../chunk-QDVKDX7G.cjs');
|
|
5
|
+
require('../chunk-GTQKDCM4.cjs');
|
|
6
|
+
require('../chunk-WYZLRPQM.cjs');
|
|
7
|
+
require('../chunk-DSNSFYDL.cjs');
|
|
8
|
+
require('../chunk-B5UXC4QV.cjs');
|
|
9
9
|
require('../chunk-KDFWJKMJ.cjs');
|
|
10
|
-
require('../chunk-
|
|
10
|
+
require('../chunk-S6F7EKC7.cjs');
|
|
11
11
|
require('../chunk-SNAUKDDK.cjs');
|
|
12
12
|
require('../chunk-GBENOENJ.cjs');
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
exports.getPort =
|
|
16
|
+
exports.getPort = _chunkQDVKDX7Gcjs.getPort; exports.setupTest = _chunkQDVKDX7Gcjs.setupTest;
|
|
17
17
|
//# sourceMappingURL=mod.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/nathan/rivet/rivetkit-typescript/packages/rivetkit/dist/tsup/test/mod.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B;AACE;AACA;AACF,6FAAC","file":"/Users/nathan/rivet/rivetkit-typescript/packages/rivetkit/dist/tsup/test/mod.cjs"}
|
package/dist/tsup/test/mod.d.cts
CHANGED
package/dist/tsup/test/mod.d.ts
CHANGED
package/dist/tsup/test/mod.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getPort,
|
|
3
3
|
setupTest
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
6
|
-
import "../chunk-
|
|
7
|
-
import "../chunk-
|
|
8
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-4J5EFV3E.js";
|
|
5
|
+
import "../chunk-NRP2OHSW.js";
|
|
6
|
+
import "../chunk-UGOCTUBG.js";
|
|
7
|
+
import "../chunk-Y7ZDTLD2.js";
|
|
8
|
+
import "../chunk-OXN6EZUB.js";
|
|
9
9
|
import "../chunk-E6ZE2YEA.js";
|
|
10
|
-
import "../chunk-
|
|
10
|
+
import "../chunk-LMG4QMDO.js";
|
|
11
11
|
import "../chunk-2YHR67M4.js";
|
|
12
12
|
export {
|
|
13
13
|
getPort,
|
package/dist/tsup/utils.cjs
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
var
|
|
17
|
+
var _chunkS6F7EKC7cjs = require('./chunk-S6F7EKC7.cjs');
|
|
18
18
|
require('./chunk-SNAUKDDK.cjs');
|
|
19
19
|
require('./chunk-GBENOENJ.cjs');
|
|
20
20
|
|
|
@@ -33,5 +33,5 @@ require('./chunk-GBENOENJ.cjs');
|
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
exports.EXTRA_ERROR_LOG =
|
|
36
|
+
exports.EXTRA_ERROR_LOG = _chunkS6F7EKC7cjs.EXTRA_ERROR_LOG; exports.SinglePromiseQueue = _chunkS6F7EKC7cjs.SinglePromiseQueue; exports.VERSION = _chunkS6F7EKC7cjs.VERSION; exports.arrayBuffersEqual = _chunkS6F7EKC7cjs.arrayBuffersEqual; exports.assertUnreachable = _chunkS6F7EKC7cjs.assertUnreachable; exports.bufferToArrayBuffer = _chunkS6F7EKC7cjs.bufferToArrayBuffer; exports.combineUrlPath = _chunkS6F7EKC7cjs.combineUrlPath; exports.dbg = _chunkS6F7EKC7cjs.dbg; exports.detectRuntime = _chunkS6F7EKC7cjs.detectRuntime; exports.getEnvUniversal = _chunkS6F7EKC7cjs.getEnvUniversal; exports.httpUserAgent = _chunkS6F7EKC7cjs.httpUserAgent; exports.promiseWithResolvers = _chunkS6F7EKC7cjs.promiseWithResolvers; exports.setLongTimeout = _chunkS6F7EKC7cjs.setLongTimeout; exports.stringifyError = _chunkS6F7EKC7cjs.stringifyError; exports.toUint8Array = _chunkS6F7EKC7cjs.toUint8Array;
|
|
37
37
|
//# sourceMappingURL=utils.cjs.map
|
package/dist/tsup/utils.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/nathan/rivet/rivetkit-typescript/packages/rivetkit/dist/tsup/utils.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,s3BAAC","file":"/Users/nathan/rivet/rivetkit-typescript/packages/rivetkit/dist/tsup/utils.cjs"}
|
package/dist/tsup/utils.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rivetkit",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.41",
|
|
4
4
|
"description": "Lightweight libraries for building stateful actors on edge platforms",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"keywords": [
|
|
@@ -167,7 +167,7 @@
|
|
|
167
167
|
"uuid": "^12.0.0",
|
|
168
168
|
"vbare": "^0.0.4",
|
|
169
169
|
"zod": "^4.1.0",
|
|
170
|
-
"@rivetkit/engine-runner": "2.0.
|
|
170
|
+
"@rivetkit/engine-runner": "2.0.41",
|
|
171
171
|
"@rivetkit/virtual-websocket": "2.0.33"
|
|
172
172
|
},
|
|
173
173
|
"devDependencies": {
|
|
@@ -261,7 +261,8 @@ export class ScheduleManager<S, CP, CS, V, I, DB extends AnyDatabaseProvider> {
|
|
|
261
261
|
});
|
|
262
262
|
|
|
263
263
|
// Look up the action function
|
|
264
|
-
const
|
|
264
|
+
const actions = this.#config.actions ?? {};
|
|
265
|
+
const fn = actions[event.action];
|
|
265
266
|
|
|
266
267
|
if (!fn) {
|
|
267
268
|
throw new Error(
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
|
+
import {
|
|
3
|
+
PATH_WEBSOCKET_BASE,
|
|
4
|
+
PATH_WEBSOCKET_PREFIX,
|
|
5
|
+
} from "@/common/actor-router-consts";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Unit tests for WebSocket path routing logic.
|
|
9
|
+
*
|
|
10
|
+
* These tests verify the path matching behavior in routeWebSocket
|
|
11
|
+
* without needing a full actor setup.
|
|
12
|
+
*
|
|
13
|
+
* NOTE: The driver-file-system end-to-end tests pass because the driver
|
|
14
|
+
* correctly strips query parameters before calling routeWebSocket
|
|
15
|
+
* (see FileSystemManagerDriver.openWebSocket). However, the bug still
|
|
16
|
+
* exists in routeWebSocket itself and could be triggered by other callers
|
|
17
|
+
* (e.g., engine driver's runnerWebSocket which passes requestPath directly).
|
|
18
|
+
*/
|
|
19
|
+
describe("websocket path routing", () => {
|
|
20
|
+
// Helper that replicates the routing logic from routeWebSocket
|
|
21
|
+
// After fix: strips query params before comparing
|
|
22
|
+
function matchesWebSocketPath(requestPath: string): boolean {
|
|
23
|
+
const requestPathWithoutQuery = requestPath.split("?")[0];
|
|
24
|
+
return (
|
|
25
|
+
requestPathWithoutQuery === PATH_WEBSOCKET_BASE ||
|
|
26
|
+
requestPathWithoutQuery.startsWith(PATH_WEBSOCKET_PREFIX)
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
test("should match base websocket path without query", () => {
|
|
31
|
+
expect(matchesWebSocketPath("/websocket")).toBe(true);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
test("should match websocket path with trailing slash", () => {
|
|
35
|
+
expect(matchesWebSocketPath("/websocket/")).toBe(true);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test("should match websocket path with subpath", () => {
|
|
39
|
+
expect(matchesWebSocketPath("/websocket/foo")).toBe(true);
|
|
40
|
+
expect(matchesWebSocketPath("/websocket/foo/bar")).toBe(true);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test("should match websocket path with subpath and query", () => {
|
|
44
|
+
// This works because "/websocket/foo?query" starts with "/websocket/"
|
|
45
|
+
expect(matchesWebSocketPath("/websocket/foo?query=value")).toBe(true);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// FIX: Query parameters are now stripped before routing comparison.
|
|
49
|
+
// This ensures /websocket?query correctly routes to the websocket handler.
|
|
50
|
+
test("should match base websocket path with query parameters", () => {
|
|
51
|
+
expect(matchesWebSocketPath("/websocket?token=abc")).toBe(true);
|
|
52
|
+
expect(matchesWebSocketPath("/websocket?foo=bar&baz=123")).toBe(true);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
@@ -88,10 +88,15 @@ export async function routeWebSocket(
|
|
|
88
88
|
// Promise used to wait for the websocket close in `disconnect`
|
|
89
89
|
const closePromiseResolvers = promiseWithResolvers<void>();
|
|
90
90
|
|
|
91
|
+
// Strip query parameters from requestPath for routing purposes.
|
|
92
|
+
// This handles paths like "/websocket?query=value" which should route
|
|
93
|
+
// to the raw websocket handler.
|
|
94
|
+
const requestPathWithoutQuery = requestPath.split("?")[0];
|
|
95
|
+
|
|
91
96
|
// Route WebSocket & create driver
|
|
92
97
|
let handler: WebSocketHandler;
|
|
93
98
|
let connDriver: ConnDriver;
|
|
94
|
-
if (
|
|
99
|
+
if (requestPathWithoutQuery === PATH_CONNECT) {
|
|
95
100
|
const { driver, setWebSocket } = createWebSocketDriver(
|
|
96
101
|
isHibernatable
|
|
97
102
|
? { gatewayId: gatewayId!, requestId: requestId! }
|
|
@@ -103,8 +108,8 @@ export async function routeWebSocket(
|
|
|
103
108
|
handler = handleWebSocketConnect.bind(undefined, setWebSocket);
|
|
104
109
|
connDriver = driver;
|
|
105
110
|
} else if (
|
|
106
|
-
|
|
107
|
-
|
|
111
|
+
requestPathWithoutQuery === PATH_WEBSOCKET_BASE ||
|
|
112
|
+
requestPathWithoutQuery.startsWith(PATH_WEBSOCKET_PREFIX)
|
|
108
113
|
) {
|
|
109
114
|
const { driver, setWebSocket } = createRawWebSocketDriver(
|
|
110
115
|
isHibernatable
|
|
@@ -114,7 +119,7 @@ export async function routeWebSocket(
|
|
|
114
119
|
);
|
|
115
120
|
handler = handleRawWebSocket.bind(undefined, setWebSocket);
|
|
116
121
|
connDriver = driver;
|
|
117
|
-
} else if (
|
|
122
|
+
} else if (requestPathWithoutQuery === PATH_INSPECTOR_CONNECT) {
|
|
118
123
|
if (!actor.inspectorToken) {
|
|
119
124
|
throw "WebSocket Inspector Unauthorized: actor does not provide inspector access";
|
|
120
125
|
}
|
package/src/common/router.ts
CHANGED
|
@@ -118,6 +118,7 @@ export interface MetadataResponse {
|
|
|
118
118
|
version: string;
|
|
119
119
|
runner?: {
|
|
120
120
|
kind: MetadataRunnerKind;
|
|
121
|
+
version?: number;
|
|
121
122
|
};
|
|
122
123
|
actorNames: ReturnType<typeof buildActorNames>;
|
|
123
124
|
/**
|
|
@@ -153,6 +154,7 @@ export function handleMetadataRequest(
|
|
|
153
154
|
version: VERSION,
|
|
154
155
|
runner: {
|
|
155
156
|
kind: runnerKind,
|
|
157
|
+
version: config.runner.version,
|
|
156
158
|
},
|
|
157
159
|
actorNames: buildActorNames(config),
|
|
158
160
|
clientEndpoint,
|
|
@@ -469,5 +469,45 @@ export function runRawWebSocketTests(driverTestConfig: DriverTestConfig) {
|
|
|
469
469
|
|
|
470
470
|
ws.close();
|
|
471
471
|
});
|
|
472
|
+
|
|
473
|
+
test("should handle query parameters on base websocket path (no subpath)", async (c) => {
|
|
474
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
475
|
+
const actor = client.rawWebSocketActor.getOrCreate([
|
|
476
|
+
"base-path-query-params",
|
|
477
|
+
]);
|
|
478
|
+
|
|
479
|
+
// Test WebSocket with ONLY query parameters on the base path
|
|
480
|
+
// This tests the case where path is "/websocket?foo=bar" without trailing slash
|
|
481
|
+
const ws = await actor.websocket("?token=secret&session=123");
|
|
482
|
+
|
|
483
|
+
await new Promise<void>((resolve, reject) => {
|
|
484
|
+
ws.addEventListener("open", () => resolve(), { once: true });
|
|
485
|
+
ws.addEventListener("error", reject);
|
|
486
|
+
ws.addEventListener("close", (evt: any) => {
|
|
487
|
+
reject(new Error(`WebSocket closed: code=${evt.code} reason=${evt.reason}`));
|
|
488
|
+
});
|
|
489
|
+
});
|
|
490
|
+
|
|
491
|
+
const requestInfoPromise = new Promise<any>((resolve, reject) => {
|
|
492
|
+
ws.addEventListener("message", (event: any) => {
|
|
493
|
+
const data = JSON.parse(event.data as string);
|
|
494
|
+
if (data.type === "requestInfo") {
|
|
495
|
+
resolve(data);
|
|
496
|
+
}
|
|
497
|
+
});
|
|
498
|
+
ws.addEventListener("close", reject);
|
|
499
|
+
});
|
|
500
|
+
|
|
501
|
+
// Send request to get the request info
|
|
502
|
+
ws.send(JSON.stringify({ type: "getRequestInfo" }));
|
|
503
|
+
|
|
504
|
+
const requestInfo = await requestInfoPromise;
|
|
505
|
+
|
|
506
|
+
// Verify query parameters were preserved even on base websocket path
|
|
507
|
+
expect(requestInfo.url).toContain("token=secret");
|
|
508
|
+
expect(requestInfo.url).toContain("session=123");
|
|
509
|
+
|
|
510
|
+
ws.close();
|
|
511
|
+
});
|
|
472
512
|
});
|
|
473
513
|
}
|
|
@@ -96,6 +96,37 @@ export async function ensureEngineProcess(
|
|
|
96
96
|
stdio: ["inherit", "pipe", "pipe"],
|
|
97
97
|
env: {
|
|
98
98
|
...process.env,
|
|
99
|
+
// Development environment overrides for Rivet Engine.
|
|
100
|
+
//
|
|
101
|
+
// NOTE: When modifying these env vars, also update scripts/run/dev-env.sh
|
|
102
|
+
// to keep them in sync for manual engine runs.
|
|
103
|
+
//
|
|
104
|
+
// In development, runners can be terminated without a graceful
|
|
105
|
+
// shutdown (i.e. SIGKILL instead of SIGTERM). This is treated as a
|
|
106
|
+
// crash by Rivet Engine in production and implements a backoff for
|
|
107
|
+
// rescheduling actors in case of a crash loop.
|
|
108
|
+
//
|
|
109
|
+
// This is problematic in development since this will cause actors
|
|
110
|
+
// to become unresponsive if frequently killing your dev server.
|
|
111
|
+
//
|
|
112
|
+
// We reduce the timeouts for resetting a runner as healthy in
|
|
113
|
+
// order to account for this.
|
|
114
|
+
RIVET__PEGBOARD__RETRY_RESET_DURATION: "100",
|
|
115
|
+
RIVET__PEGBOARD__BASE_RETRY_TIMEOUT: "100",
|
|
116
|
+
// Set max exponent to 1 to have a maximum of base_retry_timeout
|
|
117
|
+
RIVET__PEGBOARD__RESCHEDULE_BACKOFF_MAX_EXPONENT: "1",
|
|
118
|
+
// Reduce thresholds for faster development iteration
|
|
119
|
+
//
|
|
120
|
+
// Default ping interval is 3s, this gives a 2s & 4s grace
|
|
121
|
+
RIVET__PEGBOARD__RUNNER_ELIGIBLE_THRESHOLD: "5000",
|
|
122
|
+
RIVET__PEGBOARD__RUNNER_LOST_THRESHOLD: "7000",
|
|
123
|
+
// Allow faster metadata polling for hot-reload in development (in milliseconds)
|
|
124
|
+
RIVET__PEGBOARD__MIN_METADATA_POLL_INTERVAL: "1000",
|
|
125
|
+
// Reduce shutdown durations for faster development iteration (in seconds)
|
|
126
|
+
RIVET__RUNTIME__WORKER_SHUTDOWN_DURATION: "1",
|
|
127
|
+
RIVET__RUNTIME__GUARD_SHUTDOWN_DURATION: "1",
|
|
128
|
+
// Force exit after this duration (must be > worker and guard shutdown durations)
|
|
129
|
+
RIVET__RUNTIME__FORCE_SHUTDOWN_DURATION: "2",
|
|
99
130
|
},
|
|
100
131
|
});
|
|
101
132
|
|
|
@@ -107,7 +138,12 @@ export async function ensureEngineProcess(
|
|
|
107
138
|
if (child.stdout) {
|
|
108
139
|
child.stdout.pipe(stdoutStream);
|
|
109
140
|
}
|
|
141
|
+
// Collect stderr for error detection
|
|
142
|
+
const stderrChunks: Buffer[] = [];
|
|
110
143
|
if (child.stderr) {
|
|
144
|
+
child.stderr.on("data", (chunk: Buffer) => {
|
|
145
|
+
stderrChunks.push(chunk);
|
|
146
|
+
});
|
|
111
147
|
child.stderr.pipe(stderrStream);
|
|
112
148
|
}
|
|
113
149
|
logger().debug({
|
|
@@ -117,13 +153,39 @@ export async function ensureEngineProcess(
|
|
|
117
153
|
});
|
|
118
154
|
|
|
119
155
|
child.once("exit", (code, signal) => {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
156
|
+
const stderrOutput = Buffer.concat(stderrChunks).toString("utf-8");
|
|
157
|
+
|
|
158
|
+
// Check for specific error conditions
|
|
159
|
+
if (stderrOutput.includes("LOCK: Resource temporarily unavailable")) {
|
|
160
|
+
logger().error({
|
|
161
|
+
msg: "another instance of rivet engine is unexpectedly running, this is an internal error",
|
|
162
|
+
code,
|
|
163
|
+
signal,
|
|
164
|
+
stdoutLog: stdoutLogPath,
|
|
165
|
+
stderrLog: stderrLogPath,
|
|
166
|
+
issues: "https://github.com/rivet-dev/rivetkit/issues",
|
|
167
|
+
support: "https://rivet.dev/discord",
|
|
168
|
+
});
|
|
169
|
+
} else if (stderrOutput.includes("Rivet Engine has been rolled back to a previous version")) {
|
|
170
|
+
logger().error({
|
|
171
|
+
msg: "rivet engine version downgrade detected",
|
|
172
|
+
hint: `You attempted to downgrade the RivetKit version in development. To fix this, nuke the database by running: '${binaryPath}' database nuke --yes`,
|
|
173
|
+
code,
|
|
174
|
+
signal,
|
|
175
|
+
stdoutLog: stdoutLogPath,
|
|
176
|
+
stderrLog: stderrLogPath,
|
|
177
|
+
});
|
|
178
|
+
} else {
|
|
179
|
+
logger().warn({
|
|
180
|
+
msg: "engine process exited, please report this error",
|
|
181
|
+
code,
|
|
182
|
+
signal,
|
|
183
|
+
stdoutLog: stdoutLogPath,
|
|
184
|
+
stderrLog: stderrLogPath,
|
|
185
|
+
issues: "https://github.com/rivet-dev/rivetkit/issues",
|
|
186
|
+
support: "https://rivet.dev/discord",
|
|
187
|
+
});
|
|
188
|
+
}
|
|
127
189
|
// Clean up log streams
|
|
128
190
|
stdoutStream.end();
|
|
129
191
|
stderrStream.end();
|
|
@@ -126,6 +126,12 @@ export const RegistryConfigSchema = z
|
|
|
126
126
|
* What port to run the manager on.
|
|
127
127
|
*/
|
|
128
128
|
managerPort: z.number().optional().default(6420),
|
|
129
|
+
/**
|
|
130
|
+
* @experimental
|
|
131
|
+
*
|
|
132
|
+
* What host to bind the manager server to.
|
|
133
|
+
*/
|
|
134
|
+
managerHost: z.string().optional(),
|
|
129
135
|
|
|
130
136
|
/** @experimental */
|
|
131
137
|
inspector: InspectorConfigSchema,
|
|
@@ -289,6 +295,7 @@ export const DocConfigureRunnerPoolSchema = z
|
|
|
289
295
|
runnersMargin: z.number().optional().describe("Buffer margin for scaling runners."),
|
|
290
296
|
slotsPerRunner: z.number().optional().describe("Number of actor slots per runner."),
|
|
291
297
|
metadata: z.record(z.string(), z.unknown()).optional().describe("Additional metadata to pass to the serverless platform."),
|
|
298
|
+
metadataPollInterval: z.number().optional().describe("Interval in milliseconds between metadata polls from the engine. Defaults to 10000 milliseconds (10 seconds)."),
|
|
292
299
|
})
|
|
293
300
|
.optional();
|
|
294
301
|
|
|
@@ -18,6 +18,8 @@ export const ConfigureRunnerPoolSchema = z
|
|
|
18
18
|
runnersMargin: z.number().optional(),
|
|
19
19
|
slotsPerRunner: z.number().optional(),
|
|
20
20
|
metadata: z.record(z.string(), z.unknown()).optional(),
|
|
21
|
+
metadataPollInterval: z.number().optional(),
|
|
22
|
+
drainOnVersionUpgrade: z.boolean().optional(),
|
|
21
23
|
})
|
|
22
24
|
.optional();
|
|
23
25
|
|
package/src/registry/serve.ts
CHANGED
|
@@ -96,8 +96,9 @@ async function serveNode(
|
|
|
96
96
|
|
|
97
97
|
// Start server
|
|
98
98
|
const port = managerPort;
|
|
99
|
-
const
|
|
100
|
-
|
|
99
|
+
const hostname = config.managerHost;
|
|
100
|
+
const server = serve({ fetch: app.fetch, port, hostname }, () =>
|
|
101
|
+
logger().info({ msg: "server listening", port, hostname }),
|
|
101
102
|
);
|
|
102
103
|
injectWebSocket(server);
|
|
103
104
|
|
|
@@ -127,10 +128,11 @@ async function serveDeno(
|
|
|
127
128
|
}
|
|
128
129
|
|
|
129
130
|
const port = config.managerPort;
|
|
131
|
+
const hostname = config.managerHost;
|
|
130
132
|
|
|
131
133
|
// Use Deno.serve
|
|
132
|
-
Deno.serve({ port }, app.fetch);
|
|
133
|
-
logger().info({ msg: "server listening", port });
|
|
134
|
+
Deno.serve({ port, hostname }, app.fetch);
|
|
135
|
+
logger().info({ msg: "server listening", port, hostname });
|
|
134
136
|
|
|
135
137
|
return { upgradeWebSocket };
|
|
136
138
|
}
|
|
@@ -160,15 +162,17 @@ async function serveBun(
|
|
|
160
162
|
const { websocket, upgradeWebSocket } = createBunWebSocket();
|
|
161
163
|
|
|
162
164
|
const port = config.managerPort;
|
|
165
|
+
const hostname = config.managerHost;
|
|
163
166
|
|
|
164
167
|
// Use Bun.serve
|
|
165
168
|
// @ts-expect-error - Bun global
|
|
166
169
|
Bun.serve({
|
|
167
170
|
fetch: app.fetch,
|
|
168
171
|
port,
|
|
172
|
+
hostname,
|
|
169
173
|
websocket,
|
|
170
174
|
});
|
|
171
|
-
logger().info({ msg: "server listening", port });
|
|
175
|
+
logger().info({ msg: "server listening", port, hostname });
|
|
172
176
|
|
|
173
177
|
return { upgradeWebSocket };
|
|
174
178
|
}
|
|
@@ -54,8 +54,11 @@ export async function configureServerlessRunner(
|
|
|
54
54
|
request_lifespan: customConfig.requestLifespan ?? 15 * 60,
|
|
55
55
|
runners_margin: customConfig.runnersMargin ?? 0,
|
|
56
56
|
slots_per_runner: customConfig.slotsPerRunner ?? 1,
|
|
57
|
+
metadata_poll_interval: customConfig.metadataPollInterval ?? 1000,
|
|
57
58
|
},
|
|
58
59
|
metadata: customConfig.metadata ?? {},
|
|
60
|
+
drain_on_version_upgrade: customConfig.drainOnVersionUpgrade ?? true,
|
|
61
|
+
metadataPollInterval: customConfig.metadataPollInterval ?? 1000,
|
|
59
62
|
};
|
|
60
63
|
await updateRunnerConfig(clientConfig, runnerName, {
|
|
61
64
|
datacenters: Object.fromEntries(
|