diff --git a/op_crates/websocket/01_websocket.js b/op_crates/websocket/01_websocket.js index 374d174b02..c77af4566a 100644 --- a/op_crates/websocket/01_websocket.js +++ b/op_crates/websocket/01_websocket.js @@ -326,9 +326,9 @@ let data; if (this.binaryType === "blob") { - data = new Blob([new Uint8Array(value)]); + data = new Blob([value]); } else { - data = new Uint8Array(value).buffer; + data = value.buffer; } const event = new MessageEvent("message", { diff --git a/op_crates/websocket/lib.rs b/op_crates/websocket/lib.rs index b81b1701d9..acf823775d 100644 --- a/op_crates/websocket/lib.rs +++ b/op_crates/websocket/lib.rs @@ -289,7 +289,7 @@ pub async fn op_ws_close( #[serde(tag = "kind", content = "value", rename_all = "camelCase")] pub enum NextEventResponse { String(String), - Binary(Vec), + Binary(ZeroCopyBuf), Close { code: u16, reason: String }, Ping, Pong, @@ -313,10 +313,7 @@ pub async fn op_ws_next_event( let val = rx.next().or_cancel(cancel).await?; let res = match val { Some(Ok(Message::Text(text))) => NextEventResponse::String(text), - Some(Ok(Message::Binary(data))) => { - // TODO(ry): don't use json to send binary data. - NextEventResponse::Binary(data) - } + Some(Ok(Message::Binary(data))) => NextEventResponse::Binary(data.into()), Some(Ok(Message::Close(Some(frame)))) => NextEventResponse::Close { code: frame.code.into(), reason: frame.reason.to_string(),