diff --git a/rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs b/rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs index df67d6044b..97a2404c0d 100644 --- a/rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs +++ b/rivetkit-typescript/packages/rivetkit-napi/src/actor_factory.rs @@ -979,7 +979,7 @@ fn parse_bridge_rivet_error(reason: &str) -> Option { return None; } }; - tracing::warn!( + tracing::debug!( group = %payload.group.as_str(), code = %payload.code.as_str(), message = %payload.message.as_str(), diff --git a/rivetkit-typescript/packages/rivetkit/src/registry/index.ts b/rivetkit-typescript/packages/rivetkit/src/registry/index.ts index 96e2e73c7c..2080ab14b0 100644 --- a/rivetkit-typescript/packages/rivetkit/src/registry/index.ts +++ b/rivetkit-typescript/packages/rivetkit/src/registry/index.ts @@ -118,11 +118,16 @@ export class Registry { } const cancelToken = runtime.createCancellationToken(); + // Metadata polls are synchronous GETs that complete immediately. + // Skip abort listener wiring to avoid per-poll event listener churn. + const needsAbortListener = !isMetadataRequest || isEngineMetadataRequest; const abort = () => runtime.cancelCancellationToken(cancelToken); - if (request.signal.aborted) { - abort(); - } else { - request.signal.addEventListener("abort", abort, { once: true }); + if (needsAbortListener) { + if (request.signal.aborted) { + abort(); + } else { + request.signal.addEventListener("abort", abort, { once: true }); + } } const requestBody = await request.arrayBuffer(); diff --git a/rivetkit-typescript/packages/rivetkit/src/registry/native.ts b/rivetkit-typescript/packages/rivetkit/src/registry/native.ts index e64321b38e..7726c5cf4b 100644 --- a/rivetkit-typescript/packages/rivetkit/src/registry/native.ts +++ b/rivetkit-typescript/packages/rivetkit/src/registry/native.ts @@ -2814,10 +2814,24 @@ export class ActorContextHandleAdapter { let registered = false; const trackedPromise = Promise.resolve(promise) .catch((error) => { - logger().warn({ - msg: "keepAwake promise rejected", - error: stringifyError(error), - }); + // Queue timeouts and actor aborts are expected during graceful + // shutdown or normal polling loops. Only warn on unexpected errors. + const isBenign = + isRivetErrorLike(error) && + ((error.group === "queue" && error.code === "timed_out") || + (error.group === "actor" && error.code === "aborted")); + if (isBenign) { + logger().debug({ + msg: "keepAwake promise rejected (benign)", + group: error.group, + code: error.code, + }); + } else { + logger().warn({ + msg: "keepAwake promise rejected", + error: stringifyError(error), + }); + } }) .finally(async () => { if (!registered) {