diff --git a/engine/sdks/typescript/runner/src/mod.ts b/engine/sdks/typescript/runner/src/mod.ts index 86fdbfa2e8..2a0b4e4bbb 100644 --- a/engine/sdks/typescript/runner/src/mod.ts +++ b/engine/sdks/typescript/runner/src/mod.ts @@ -587,7 +587,7 @@ export class Runner { msg: "error during websocket shutdown:", error, }); - pegboardWebSocket.close(); + pegboardWebSocket.close(1011, "pegboard.shutdown_error"); } } } else { @@ -733,7 +733,7 @@ export class Runner { this.log?.error( "found duplicate pegboardWebSocket, closing previous", ); - this.#pegboardWebSocket.close(1000, "duplicate_websocket"); + this.#pegboardWebSocket.close(1000, "pegboard.duplicate_websocket"); } const ws = new WS(this.pegboardUrl, protocols) as any as WebSocket; diff --git a/engine/sdks/typescript/runner/src/utils.ts b/engine/sdks/typescript/runner/src/utils.ts index a6ba6961b4..4d0038a18f 100644 --- a/engine/sdks/typescript/runner/src/utils.ts +++ b/engine/sdks/typescript/runner/src/utils.ts @@ -57,7 +57,9 @@ export function parseWebSocketCloseReason( const [group, error] = mainPart.split("."); if (!group || !error) { - logger()?.warn({ msg: "failed to parse close reason", reason }); + if (reason) { + logger()?.warn({ msg: "failed to parse close reason", reason }); + } return undefined; } diff --git a/rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift b/rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift index 33b5dbc10a..6177ed229f 100644 --- a/rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift +++ b/rivetkit-swift/Sources/RivetKitClient/ActorConnection.swift @@ -765,7 +765,7 @@ public actor ActorConnection { } else { errorToThrow = ActorError(group: group, code: code, message: "Connection closed: \(reason)", metadata: nil) } - } else { + } else if !reason.isEmpty { logger.warning("failed to parse close reason reason=\(reason, privacy: .public)") } } diff --git a/rivetkit-typescript/packages/rivetkit/src/client/utils.ts b/rivetkit-typescript/packages/rivetkit/src/client/utils.ts index c4d61f02e4..662da3d3e2 100644 --- a/rivetkit-typescript/packages/rivetkit/src/client/utils.ts +++ b/rivetkit-typescript/packages/rivetkit/src/client/utils.ts @@ -42,7 +42,9 @@ export function parseWebSocketCloseReason( const [group, code] = mainPart.split("."); if (!group || !code) { - logger().warn({ msg: "failed to parse close reason", reason }); + if (reason) { + logger().warn({ msg: "failed to parse close reason", reason }); + } return undefined; } diff --git a/rivetkit-typescript/packages/rivetkit/src/remote-manager-driver/ws-proxy.ts b/rivetkit-typescript/packages/rivetkit/src/remote-manager-driver/ws-proxy.ts index c2c01d26f5..267314c1aa 100644 --- a/rivetkit-typescript/packages/rivetkit/src/remote-manager-driver/ws-proxy.ts +++ b/rivetkit-typescript/packages/rivetkit/src/remote-manager-driver/ws-proxy.ts @@ -164,9 +164,9 @@ export async function createWebSocketProxy( if (state.targetWs) { if (state.targetWs.readyState === WebSocket.OPEN) { - state.targetWs.close(1011, "Client WebSocket error"); + state.targetWs.close(1011, "ws.client_error"); } else if (state.targetWs.readyState === WebSocket.CONNECTING) { - state.targetWs.close(); + state.targetWs.close(1011, "ws.client_error"); } } }, diff --git a/rivetkit-typescript/packages/rivetkit/src/sandbox/client.ts b/rivetkit-typescript/packages/rivetkit/src/sandbox/client.ts index 04795e2fd3..40b6050d5e 100644 --- a/rivetkit-typescript/packages/rivetkit/src/sandbox/client.ts +++ b/rivetkit-typescript/packages/rivetkit/src/sandbox/client.ts @@ -382,12 +382,12 @@ class DirectTerminalSession implements TerminalSession { this.closeSignalSent = true; this.sendFrame({ type: "close" }); } - this.socket.close(); + this.socket.close(1000, "sandbox.client_closed"); return; } if (this.socket.readyState !== 3) { - this.socket.close(); + this.socket.close(1000, "sandbox.client_closed"); } }