Next.js `engine process exited, please report this error`
How can I debug this error further?
builder:dev: level=WARN msg="engine process exited, please report this error" code=1 signal= issues=https://github.com/rivet-dev/rivetkit/issues support=https://rivet.dev/discord
builder:dev: (node:5008) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
builder:dev: (Use `node --trace-deprecation ...` to show where the warning was created)
builder:dev: GET /api/rivet/metadata?namespace=default 200 in 212ms
builder:dev: (node:5028) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
builder:dev: (Use `node --trace-deprecation ...` to show where the warning was created)
builder:dev: ○ Compiling /api/trpc/[trpc] ...
builder:dev: ✓ Compiled /api/trpc/[trpc] in 3.2s (10474 modules)
builder:dev: GET /api/trpc/typebot.getTypebot?input=%7B%22json%22%3A%7B%22typebotId%22%3A%22av9ke8yns99ae3e8b7uv57sx%22%2C%22migrateToLatestVersion%22%3Atrue%7D%7D 200 in 3852ms
builder:dev: GET /api/trpc/typebot.getPublishedTypebot?input=%7B%22json%22%3A%7B%22typebotId%22%3A%22av9ke8yns99ae3e8b7uv57sx%22%2C%22migrateToLatestVersion%22%3Atrue%7D%7D 200 in 13ms
builder:dev: GET /api/trpc/analytics.getStats?input=%7B%22json%22%3A%7B%22typebotId%22%3A%22av9ke8yns99ae3e8b7uv57sx%22%2C%22timeFilter%22%3A%22last7Days%22%2C%22timeZone%22%3A%22Europe%2FParis%22%7D%7D 200 in 15ms
builder:dev: GET /api/auth/session 200 in 4632ms
builder:dev: GET /api/auth/session 200 in 4643ms
builder:dev: GET /api/trpc/workspace.listWorkspaces?input=%7B%22json%22%3Anull%2C%22meta%22%3A%7B%22values%22%3A%5B%22undefined%22%5D%7D%7D 200 in 10ms
builder:dev: GET /api/trpc/workspace.getWorkspace?input=%7B%22json%22%3A%7B%22workspaceId%22%3A%22proWorkspace%22%7D%7D 200 in 6ms
builder:dev: GET /api/trpc/getLinkedTypebots?input=%7B%22json%22%3A%7B%22typebotId%22%3A%22av9ke8yns99ae3e8b7uv57sx%22%7D%7D 200 in 9ms
builder:dev: GET /api/trpc/results.getResults?input=%7B%22json%22%3A%7B%22timeZone%22%3A%22Europe%2FParis%22%2C%22timeFilter%22%3A%22last7Days%22%2C%22typebotId%22%3A%22av9ke8yns99ae3e8b7uv57sx%22%2C%22cursor%22%3A0%2C%22direction%22%3A%22forward%22%7D%7D 200 in 15ms
builder:dev: GET /api/auth/session 200 in 209ms
builder:dev: GET /api/auth/session 200 in 211ms
builder:dev: level=ERROR msg="error in onactorstart for actor" runnerId=10wgonwzuodrbvv9esh498hm3nal00 actorId=l3gmx9j9d2a6xgyx54dymmhb6cbl00 err="TypeError: Cannot read properties of undefined (reading 'typebotId')"
builder:dev: Error in onActorStop for actor l3gmx9j9d2a6xgyx54dymmhb6cbl00: [Error: Actor not ready] {
builder:dev: __type: 'ActorError',
builder:dev: public: false,
builder:dev: metadata: undefined,
builder:dev: statusCode: 500,
builder:dev: group: 'actor',
builder:dev: code: 'internal_error'
builder:dev: }
builder:dev: level=WARN msg="engine process exited, please report this error" code=1 signal= issues=https://github.com/rivet-dev/rivetkit/issues support=https://rivet.dev/discord
builder:dev: (node:5008) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
builder:dev: (Use `node --trace-deprecation ...` to show where the warning was created)
builder:dev: GET /api/rivet/metadata?namespace=default 200 in 212ms
builder:dev: (node:5028) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
builder:dev: (Use `node --trace-deprecation ...` to show where the warning was created)
builder:dev: ○ Compiling /api/trpc/[trpc] ...
builder:dev: ✓ Compiled /api/trpc/[trpc] in 3.2s (10474 modules)
builder:dev: GET /api/trpc/typebot.getTypebot?input=%7B%22json%22%3A%7B%22typebotId%22%3A%22av9ke8yns99ae3e8b7uv57sx%22%2C%22migrateToLatestVersion%22%3Atrue%7D%7D 200 in 3852ms
builder:dev: GET /api/trpc/typebot.getPublishedTypebot?input=%7B%22json%22%3A%7B%22typebotId%22%3A%22av9ke8yns99ae3e8b7uv57sx%22%2C%22migrateToLatestVersion%22%3Atrue%7D%7D 200 in 13ms
builder:dev: GET /api/trpc/analytics.getStats?input=%7B%22json%22%3A%7B%22typebotId%22%3A%22av9ke8yns99ae3e8b7uv57sx%22%2C%22timeFilter%22%3A%22last7Days%22%2C%22timeZone%22%3A%22Europe%2FParis%22%7D%7D 200 in 15ms
builder:dev: GET /api/auth/session 200 in 4632ms
builder:dev: GET /api/auth/session 200 in 4643ms
builder:dev: GET /api/trpc/workspace.listWorkspaces?input=%7B%22json%22%3Anull%2C%22meta%22%3A%7B%22values%22%3A%5B%22undefined%22%5D%7D%7D 200 in 10ms
builder:dev: GET /api/trpc/workspace.getWorkspace?input=%7B%22json%22%3A%7B%22workspaceId%22%3A%22proWorkspace%22%7D%7D 200 in 6ms
builder:dev: GET /api/trpc/getLinkedTypebots?input=%7B%22json%22%3A%7B%22typebotId%22%3A%22av9ke8yns99ae3e8b7uv57sx%22%7D%7D 200 in 9ms
builder:dev: GET /api/trpc/results.getResults?input=%7B%22json%22%3A%7B%22timeZone%22%3A%22Europe%2FParis%22%2C%22timeFilter%22%3A%22last7Days%22%2C%22typebotId%22%3A%22av9ke8yns99ae3e8b7uv57sx%22%2C%22cursor%22%3A0%2C%22direction%22%3A%22forward%22%7D%7D 200 in 15ms
builder:dev: GET /api/auth/session 200 in 209ms
builder:dev: GET /api/auth/session 200 in 211ms
builder:dev: level=ERROR msg="error in onactorstart for actor" runnerId=10wgonwzuodrbvv9esh498hm3nal00 actorId=l3gmx9j9d2a6xgyx54dymmhb6cbl00 err="TypeError: Cannot read properties of undefined (reading 'typebotId')"
builder:dev: Error in onActorStop for actor l3gmx9j9d2a6xgyx54dymmhb6cbl00: [Error: Actor not ready] {
builder:dev: __type: 'ActorError',
builder:dev: public: false,
builder:dev: metadata: undefined,
builder:dev: statusCode: 500,
builder:dev: group: 'actor',
builder:dev: code: 'internal_error'
builder:dev: }
import { createRivetKit } from "@rivetkit/next-js/client";
import type { registry } from "@/lib/rivet/registry";
import type { JobUpdatePayload } from "../../exportAllResultsActor";
type Props = {
typebotId: string;
};
const { useActor } = createRivetKit<typeof registry>(
process.env.NEXT_RIVET_ENDPOINT ?? "http://localhost:3000/api/rivet",
);
export const ExportJobProgress = ({ typebotId }: Props) => {
const exportJobActor = useActor({
name: "exportJob",
key: [typebotId],
params: {
typebotId,
},
});
exportJobActor.useEvent("jobUpdate", (event: JobUpdatePayload) => {
console.log(event);
});
return <p>LET'S GO</p>;
};
import { createRivetKit } from "@rivetkit/next-js/client";
import type { registry } from "@/lib/rivet/registry";
import type { JobUpdatePayload } from "../../exportAllResultsActor";
type Props = {
typebotId: string;
};
const { useActor } = createRivetKit<typeof registry>(
process.env.NEXT_RIVET_ENDPOINT ?? "http://localhost:3000/api/rivet",
);
export const ExportJobProgress = ({ typebotId }: Props) => {
const exportJobActor = useActor({
name: "exportJob",
key: [typebotId],
params: {
typebotId,
},
});
exportJobActor.useEvent("jobUpdate", (event: JobUpdatePayload) => {
console.log(event);
});
return <p>LET'S GO</p>;
};
14 Replies
hey! what platform are you on?
MacOS 26.0.1
interesting, let me get back to you in a bit on this
@Baptiste can you run with the
LOG_LEVEL=debug environment variable. for example: LOG_LEVEL=debug npx next devIt seems I don't have the
I am thinking
engine process exited, please report this error log anymore
I can see TypeError: Cannot read properties of undefined (reading 'typebotId'). Maybe I am doing something wrong with my impl
Here is actor:
import { sendEmail } from "@typebot.io/emails/helpers/sendEmail";
import { uploadFileToBucket } from "@typebot.io/lib/s3/uploadFileToBucket";
import { streamAllResultsToCsv } from "@typebot.io/results/streamAllResultsToCsv";
import { readFileSync } from "fs";
import { actor } from "rivetkit";
type Input = {
typebotId: string;
jobId: string;
sendToEmail?: string;
};
type State = {
status: "pending" | "fetching" | "uploading" | "completed" | "failed";
typebotId: string;
sendToEmail?: string;
downloadUrl?: string;
};
export type JobUpdatePayload =
| {
status: "fetching";
progress?: number;
}
| {
status: "completed";
downloadUrl: string;
};
export const exportAllResultsActor = actor({
// onAuth: async (opts) => {
// const { req } = opts;
// // Use Better Auth to validate the session
// const authResult = await auth.api.getSession({
// headers: req.headers,
// });
// if (!authResult) throw new Unauthorized();
// // Return user data to be available in actor
// return {
// user: authResult.user,
// session: authResult.session,
// };
// },
createState: (_c, input: Input): State => {
return {
status: "pending",
typebotId: input.typebotId,
sendToEmail: input.sendToEmail,
};
},
onCreate: async (c) => {
console.log("ON CREATE", c.state);
c.state.status = "fetching";
const result = await streamAllResultsToCsv(c.state.typebotId, {
writeStreamPath: `${c.state.typebotId}.csv`,
onProgressUpdate: (progress) => {
c.state.status = "fetching";
c.broadcast("jobUpdate", {
status: "fetching",
progress,
} satisfies JobUpdatePayload);
},
});
if (result.status === "error") {
c.state.status = "failed";
} else {
c.state.status = "uploading";
const downloadUrl = await uploadFileToBucket({
key: `public/results/${c.state.typebotId}.csv`,
file: readFileSync(`${c.state.typebotId}.csv`),
mimeType: "text/csv",
});
c.state.status = "completed";
c.state.downloadUrl = downloadUrl;
c.broadcast("jobUpdate", {
status: "completed",
downloadUrl,
} satisfies JobUpdatePayload);
if (c.state.sendToEmail)
await sendEmail({
to: c.state.sendToEmail,
subject: "Your results are ready",
text: `Your results are ready. Download them here: ${c.state.downloadUrl}`,
});
}
},
actions: {
setEmail: (c, email: string) => {
c.state.sendToEmail = email;
},
},
});
import { sendEmail } from "@typebot.io/emails/helpers/sendEmail";
import { uploadFileToBucket } from "@typebot.io/lib/s3/uploadFileToBucket";
import { streamAllResultsToCsv } from "@typebot.io/results/streamAllResultsToCsv";
import { readFileSync } from "fs";
import { actor } from "rivetkit";
type Input = {
typebotId: string;
jobId: string;
sendToEmail?: string;
};
type State = {
status: "pending" | "fetching" | "uploading" | "completed" | "failed";
typebotId: string;
sendToEmail?: string;
downloadUrl?: string;
};
export type JobUpdatePayload =
| {
status: "fetching";
progress?: number;
}
| {
status: "completed";
downloadUrl: string;
};
export const exportAllResultsActor = actor({
// onAuth: async (opts) => {
// const { req } = opts;
// // Use Better Auth to validate the session
// const authResult = await auth.api.getSession({
// headers: req.headers,
// });
// if (!authResult) throw new Unauthorized();
// // Return user data to be available in actor
// return {
// user: authResult.user,
// session: authResult.session,
// };
// },
createState: (_c, input: Input): State => {
return {
status: "pending",
typebotId: input.typebotId,
sendToEmail: input.sendToEmail,
};
},
onCreate: async (c) => {
console.log("ON CREATE", c.state);
c.state.status = "fetching";
const result = await streamAllResultsToCsv(c.state.typebotId, {
writeStreamPath: `${c.state.typebotId}.csv`,
onProgressUpdate: (progress) => {
c.state.status = "fetching";
c.broadcast("jobUpdate", {
status: "fetching",
progress,
} satisfies JobUpdatePayload);
},
});
if (result.status === "error") {
c.state.status = "failed";
} else {
c.state.status = "uploading";
const downloadUrl = await uploadFileToBucket({
key: `public/results/${c.state.typebotId}.csv`,
file: readFileSync(`${c.state.typebotId}.csv`),
mimeType: "text/csv",
});
c.state.status = "completed";
c.state.downloadUrl = downloadUrl;
c.broadcast("jobUpdate", {
status: "completed",
downloadUrl,
} satisfies JobUpdatePayload);
if (c.state.sendToEmail)
await sendEmail({
to: c.state.sendToEmail,
subject: "Your results are ready",
text: `Your results are ready. Download them here: ${c.state.downloadUrl}`,
});
}
},
actions: {
setEmail: (c, email: string) => {
c.state.sendToEmail = email;
},
},
});
params is not input then?
Ok I just saw createWithInput in the docs, let me try
This error went away it seems, still the actor is crashing and it's tough to know why, especially because of the retries. I wish it could just crash once in dev
builder:dev: level=INFO msg="starting runner"
builder:dev: level=DEBUG msg="engine runner started" endpoint=http://127.0.0.1:6420/ namespace=default runnerName=default
builder:dev: level=DEBUG msg="http request" method=GET path=/start status=200 dt=1ms reqSize= resSize= userAgent=RivetEngine/25.8.2
builder:dev: level=INFO msg=Connected
builder:dev: level=INFO msg="received init" runnerId=p2a080ap1x78nunx70e5lnlxhdcl00 lastEventIdx=-1 runnerLostThreshold=120000
builder:dev: level=DEBUG msg="runner connected" namespace=default runnerName=default
builder:dev: level=INFO msg="received commands" runnerId=p2a080ap1x78nunx70e5lnlxhdcl00 commandCount=1
builder:dev: level=INFO msg="received command" runnerId=p2a080ap1x78nunx70e5lnlxhdcl00 commandWrapper="[cannot stringify]"
builder:dev: level=INFO msg="sending event to server" runnerId=p2a080ap1x78nunx70e5lnlxhdcl00 index=0 tag=EventActorStateUpdate val="{\"actorId\":\"hkqm2ttd5cwson3nj4ans2sztccl00\",\"generation\":0,\"state\":{\"tag\":\"ActorStateRunning\",\"val\":null}}"
builder:dev: level=DEBUG msg="runner actor starting" actorId=hkqm2ttd5cwson3nj4ans2sztccl00 name=exportJob key=av9ke8yns99ae3e8b7uv57sx generation=0
builder:dev: level=INFO msg="actor creating"
builder:dev: level=INFO msg="actor state initializing"
builder:dev: level=DEBUG msg="writing state"
builder:dev: ON CREATE {
builder:dev: status: 'pending',
builder:dev: typebotId: 'av9ke8yns99ae3e8b7uv57sx',
builder:dev: sendToEmail: undefined
builder:dev: }
builder:dev: FETCHING RESULTS
builder:dev: level=DEBUG msg="runner websocket" actorId=hkqm2ttd5cwson3nj4ans2sztccl00 url=http://localhost/connect/websocket
builder:dev: level=ERROR msg="error in onactorstart for actor" runnerId=p2a080ap1x78nunx70e5lnlxhdcl00 actorId=hkqm2ttd5cwson3nj4ans2sztccl00 err="Actor not ready"
builder:dev: level=DEBUG msg="runner actor stopping" actorId=hkqm2ttd5cwson3nj4ans2sztccl00 generation=0
builder:dev: level=INFO msg="actor stopping"
builder:dev: level=DEBUG msg="no background promises"
builder:dev: Error in onActorStop for actor hkqm2ttd5cwson3nj4ans2sztccl00: [Error: Actor not ready] {
builder:dev: __type: 'ActorError',
builder:dev: public: false,
builder:dev: metadata: undefined,
builder:dev: statusCode: 500,
builder:dev: group: 'actor',
builder:dev: code: 'internal_error'
builder:dev: }
builder:dev: level=INFO msg="sending event to server" runnerId=p2a080ap1x78nunx70e5lnlxhdcl00 index=1 tag=EventActorStateUpdate val="{\"actorId\":\"hkqm2ttd5cwson3nj4ans2sztccl00\",\"generation\":0,\"state\":{\"tag\":\"ActorStateStopped\",\"val\":{\"code\":\"Ok\",\"message\":null}}}"
builder:dev: level=DEBUG msg="runner actor stopping" actorId=hkqm2ttd5cwson3nj4ans2sztccl00 generation=0
builder:dev: level=WARN msg="already stopping actor"
builder:dev: level=DEBUG msg="runner actor stopped" actorId=hkqm2ttd5cwson3nj4ans2sztccl00
builder:dev: level=DEBUG msg="detected development environment, auto-starting engine and auto-configuring serverless"
builder:dev: level=DEBUG msg="disabling health check since using serverless"
builder:dev: level=DEBUG msg="run engine requested" version=25.8.2
builder:dev: level=DEBUG msg="ensuring engine process" version=25.8.2
builder:dev: level=INFO msg="starting runner"
builder:dev: level=DEBUG msg="engine runner started" endpoint=http://127.0.0.1:6420/ namespace=default runnerName=default
builder:dev: level=DEBUG msg="http request" method=GET path=/start status=200 dt=1ms reqSize= resSize= userAgent=RivetEngine/25.8.2
builder:dev: level=INFO msg=Connected
builder:dev: level=INFO msg="received init" runnerId=p2a080ap1x78nunx70e5lnlxhdcl00 lastEventIdx=-1 runnerLostThreshold=120000
builder:dev: level=DEBUG msg="runner connected" namespace=default runnerName=default
builder:dev: level=INFO msg="received commands" runnerId=p2a080ap1x78nunx70e5lnlxhdcl00 commandCount=1
builder:dev: level=INFO msg="received command" runnerId=p2a080ap1x78nunx70e5lnlxhdcl00 commandWrapper="[cannot stringify]"
builder:dev: level=INFO msg="sending event to server" runnerId=p2a080ap1x78nunx70e5lnlxhdcl00 index=0 tag=EventActorStateUpdate val="{\"actorId\":\"hkqm2ttd5cwson3nj4ans2sztccl00\",\"generation\":0,\"state\":{\"tag\":\"ActorStateRunning\",\"val\":null}}"
builder:dev: level=DEBUG msg="runner actor starting" actorId=hkqm2ttd5cwson3nj4ans2sztccl00 name=exportJob key=av9ke8yns99ae3e8b7uv57sx generation=0
builder:dev: level=INFO msg="actor creating"
builder:dev: level=INFO msg="actor state initializing"
builder:dev: level=DEBUG msg="writing state"
builder:dev: ON CREATE {
builder:dev: status: 'pending',
builder:dev: typebotId: 'av9ke8yns99ae3e8b7uv57sx',
builder:dev: sendToEmail: undefined
builder:dev: }
builder:dev: FETCHING RESULTS
builder:dev: level=DEBUG msg="runner websocket" actorId=hkqm2ttd5cwson3nj4ans2sztccl00 url=http://localhost/connect/websocket
builder:dev: level=ERROR msg="error in onactorstart for actor" runnerId=p2a080ap1x78nunx70e5lnlxhdcl00 actorId=hkqm2ttd5cwson3nj4ans2sztccl00 err="Actor not ready"
builder:dev: level=DEBUG msg="runner actor stopping" actorId=hkqm2ttd5cwson3nj4ans2sztccl00 generation=0
builder:dev: level=INFO msg="actor stopping"
builder:dev: level=DEBUG msg="no background promises"
builder:dev: Error in onActorStop for actor hkqm2ttd5cwson3nj4ans2sztccl00: [Error: Actor not ready] {
builder:dev: __type: 'ActorError',
builder:dev: public: false,
builder:dev: metadata: undefined,
builder:dev: statusCode: 500,
builder:dev: group: 'actor',
builder:dev: code: 'internal_error'
builder:dev: }
builder:dev: level=INFO msg="sending event to server" runnerId=p2a080ap1x78nunx70e5lnlxhdcl00 index=1 tag=EventActorStateUpdate val="{\"actorId\":\"hkqm2ttd5cwson3nj4ans2sztccl00\",\"generation\":0,\"state\":{\"tag\":\"ActorStateStopped\",\"val\":{\"code\":\"Ok\",\"message\":null}}}"
builder:dev: level=DEBUG msg="runner actor stopping" actorId=hkqm2ttd5cwson3nj4ans2sztccl00 generation=0
builder:dev: level=WARN msg="already stopping actor"
builder:dev: level=DEBUG msg="runner actor stopped" actorId=hkqm2ttd5cwson3nj4ans2sztccl00
builder:dev: level=DEBUG msg="detected development environment, auto-starting engine and auto-configuring serverless"
builder:dev: level=DEBUG msg="disabling health check since using serverless"
builder:dev: level=DEBUG msg="run engine requested" version=25.8.2
builder:dev: level=DEBUG msg="ensuring engine process" version=25.8.2
Error in onActorStop for actor hkqm2ttd5cwson3nj4ans2sztccl00: [Error: Actor not ready]this may be an error that we already fixed, working on shipping a release today. did the "engine process exited" go away?
Yes it went away, probably cause I restarted my machine? 🤓
will let you know when this is live
Any chance it can be live soon? I really need to try rivet asap 🙏
Maybe a temp release with https://pkg.pr.new
pkg.pr.new
Search repositories on GitHub to list their continuous releases.
i'm sorry we've had a crazy week, it was down my todo list to notify you about this
this went live a couple days ago. let me update the example to fix some bugs, but in the meantime this is what it looks like: https://github.com/rivet-dev/rivet/blob/222dae87e3efccaffa2b503de40ecf8afd4e31eb/examples/cursors-raw-websocket/src/frontend/App.tsx#L93
GitHub
rivet/examples/cursors-raw-websocket/src/frontend/App.tsx at 222dae...
An open-source library for long-lived processes with realtime, persistence, and hibernation - rivet-dev/rivet
Sorry I am not sure what's this?
You say it went live but last package release was a week ago?
ah it hasn't made it in to the oss release yet, i'll get that shipped in a couple. it didn't require a library change so we shipped it to production.
same as other thread – give 2.0.22 a try