From 76d48d045e10c61f1352ea5d954e14267d25149e Mon Sep 17 00:00:00 2001 From: Nathan Flurry Date: Thu, 2 Oct 2025 13:31:56 -0700 Subject: [PATCH] fix(core): fix encoding input for remote manager driver --- .../rivetkit/src/remote-manager-driver/mod.ts | 5 +++-- packages/rivetkit/src/serde.ts | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/rivetkit/src/remote-manager-driver/mod.ts b/packages/rivetkit/src/remote-manager-driver/mod.ts index d876765a5..2821ac325 100644 --- a/packages/rivetkit/src/remote-manager-driver/mod.ts +++ b/packages/rivetkit/src/remote-manager-driver/mod.ts @@ -15,6 +15,7 @@ import type { ManagerDriver, } from "@/driver-helpers/mod"; import type { Encoding, UniversalWebSocket } from "@/mod"; +import { uint8ArrayToBase64 } from "@/serde"; import { combineUrlPath } from "@/utils"; import { sendHttpRequestToActor } from "./actor-http-client"; import { @@ -140,7 +141,7 @@ export class RemoteManagerDriver implements ManagerDriver { key: serializeActorKey(key), runner_name_selector: this.#config.runnerName, input: actorInput - ? cbor.encode(actorInput).toString("base64") + ? uint8ArrayToBase64(cbor.encode(actorInput)) : undefined, crash_policy: "sleep", }); @@ -175,7 +176,7 @@ export class RemoteManagerDriver implements ManagerDriver { name, runner_name_selector: this.#config.runnerName, key: serializeActorKey(key), - input: input ? cbor.encode(input).toString("base64") : null, + input: input ? uint8ArrayToBase64(cbor.encode(input)) : undefined, crash_policy: "sleep", }); const actorId = result.actor.actor_id; diff --git a/packages/rivetkit/src/serde.ts b/packages/rivetkit/src/serde.ts index 79d50fe0e..785abcb79 100644 --- a/packages/rivetkit/src/serde.ts +++ b/packages/rivetkit/src/serde.ts @@ -5,6 +5,21 @@ import type { VersionedDataHandler } from "@/common/versioned-data"; import type { Encoding } from "@/mod"; import { jsonStringifyCompat } from "./actor/protocol/serde"; +export function uint8ArrayToBase64(uint8Array: Uint8Array): string { + // Check if Buffer is available (Node.js) + if (typeof Buffer !== "undefined") { + return Buffer.from(uint8Array).toString("base64"); + } + + // Browser environment - use btoa + let binary = ""; + const len = uint8Array.byteLength; + for (let i = 0; i < len; i++) { + binary += String.fromCharCode(uint8Array[i]); + } + return btoa(binary); +} + export function encodingIsBinary(encoding: Encoding): boolean { if (encoding === "json") { return false;