diff --git a/examples/sandbox/Dockerfile b/examples/sandbox/Dockerfile index 48152a1273..ecc8040e47 100644 --- a/examples/sandbox/Dockerfile +++ b/examples/sandbox/Dockerfile @@ -11,10 +11,12 @@ COPY shared/typescript/ ./shared/typescript/ RUN pnpm install --frozen-lockfile RUN mkdir -p rivetkit-openapi rivetkit-asyncapi -RUN pnpm build --filter=sandbox -COPY examples/sandbox/public ./examples/sandbox/dist/public +RUN pnpm build --filter=rivetkit... +RUN pnpm --filter=sandbox run build WORKDIR /app/examples/sandbox EXPOSE 8080 -CMD ["pnpm", "start"] +ENV PORT=8080 + +CMD ["sh", "-c", "if [ \"$SANDBOX_MODE\" = \"serverless\" ]; then srvx dist/server.js; else tsx src/server-runner.ts; fi"] diff --git a/examples/sandbox/package.json b/examples/sandbox/package.json index 026e70e7a4..7650d58acd 100644 --- a/examples/sandbox/package.json +++ b/examples/sandbox/package.json @@ -7,8 +7,8 @@ "scripts": { "dev": "vite", "check-types": "echo 'skipped - workflow history types broken'", - "build": "vite build && vite build --mode server", - "start": "srvx dist/server.js", + "build": "vite build --mode server", + "start": "tsx src/server-runner.ts", "benchmark": "tsx scripts/benchmark.ts", "db:generate": "find src/actors -name drizzle.config.ts -exec drizzle-kit generate --config {} \\;" }, diff --git a/examples/sandbox/src/actors/state/sqlite-drizzle/drizzle/migrations.js b/examples/sandbox/src/actors/state/sqlite-drizzle/drizzle/migrations.js index 23ed81f26d..0ea941b398 100644 --- a/examples/sandbox/src/actors/state/sqlite-drizzle/drizzle/migrations.js +++ b/examples/sandbox/src/actors/state/sqlite-drizzle/drizzle/migrations.js @@ -1,10 +1,15 @@ -import journal from './meta/_journal.json'; -import m0000 from './0000_left_wrecking_crew.sql'; +import journal from './meta/_journal.json' with { type: 'json' }; - export default { - journal, - migrations: { - m0000 - } +const m0000 = `CREATE TABLE \`todos\` ( +\t\`id\` integer PRIMARY KEY AUTOINCREMENT NOT NULL, +\t\`title\` text NOT NULL, +\t\`completed\` integer DEFAULT 0, +\t\`created_at\` integer NOT NULL +);`; + +export default { + journal, + migrations: { + m0000 } - \ No newline at end of file +} diff --git a/examples/sandbox/src/server-runner.ts b/examples/sandbox/src/server-runner.ts new file mode 100644 index 0000000000..8260069847 --- /dev/null +++ b/examples/sandbox/src/server-runner.ts @@ -0,0 +1,3 @@ +import { registry } from "./index.ts"; + +registry.start(); diff --git a/rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts b/rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts index 409c583ecb..feee90b0c4 100644 --- a/rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts +++ b/rivetkit-typescript/packages/rivetkit/src/drivers/engine/actor-driver.ts @@ -1078,7 +1078,10 @@ export class EngineActorDriver implements ActorDriver { requestId: idToStr(requestId), }); if (path === PATH_CONNECT) { - return true; + // Temporarily disable HWS for action/event connections. + // The gateway tunnel ping is not handled for serverless TS + // runners, causing ws.downstream_closed every ~30s. + return false; } else if ( path === PATH_WEBSOCKET_BASE || path.startsWith(PATH_WEBSOCKET_PREFIX)