From 3687d3ed745e71b8d7616c7b719d211150abc408 Mon Sep 17 00:00:00 2001 From: Kujtim Prenku Date: Sun, 15 Sep 2024 09:49:36 +0200 Subject: [PATCH 1/2] Fix wallet-connect to handle transactions of type Unit8Array and Buffer after NAJ update to v4. --- packages/wallet-connect/src/lib/wallet-connect.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/wallet-connect/src/lib/wallet-connect.ts b/packages/wallet-connect/src/lib/wallet-connect.ts index 508649615..424106b73 100644 --- a/packages/wallet-connect/src/lib/wallet-connect.ts +++ b/packages/wallet-connect/src/lib/wallet-connect.ts @@ -354,7 +354,10 @@ const WalletConnect: WalletBehaviourFactory< }, }); - return nearAPI.transactions.SignedTransaction.decode(Buffer.from(result)); + // @ts-ignore + const isBuffer = result?.type === "Buffer"; + const txResult = isBuffer ? result : Object.values(result); + return nearAPI.transactions.SignedTransaction.decode(Buffer.from(txResult)); }; const requestSignTransactions = async (transactions: Array) => { @@ -408,7 +411,12 @@ const WalletConnect: WalletBehaviourFactory< }); return results.map((result) => { - return nearAPI.transactions.SignedTransaction.decode(Buffer.from(result)); + // @ts-ignore + const isBuffer = result?.type === "Buffer"; + const txResult = isBuffer ? result : Object.values(result); + return nearAPI.transactions.SignedTransaction.decode( + Buffer.from(txResult) + ); }); }; From d8fc54e8414e2ca44d87bc2f5883a238b0de235c Mon Sep 17 00:00:00 2001 From: Kujtim Prenku Date: Tue, 17 Sep 2024 19:49:19 +0200 Subject: [PATCH 2/2] Make a helper function to handle the tx result based on review. --- .../wallet-connect/src/lib/wallet-connect.ts | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/packages/wallet-connect/src/lib/wallet-connect.ts b/packages/wallet-connect/src/lib/wallet-connect.ts index 424106b73..023a3cfc7 100644 --- a/packages/wallet-connect/src/lib/wallet-connect.ts +++ b/packages/wallet-connect/src/lib/wallet-connect.ts @@ -149,6 +149,18 @@ const disconnect = async ({ state }: { state: WalletConnectState }) => { }); }; +const getSignatureData = (result: Uint8Array) => { + if (result instanceof Uint8Array) { + return result; + } else if (Array.isArray(result)) { + return new Uint8Array(result); + } else if (typeof result === "object" && result !== null) { + return new Uint8Array(Object.values(result)); + } else { + throw new Error("Unexpected result type from near_signTransaction"); + } +}; + const WalletConnect: WalletBehaviourFactory< BridgeWallet, { params: WalletConnectExtraOptions } @@ -354,10 +366,11 @@ const WalletConnect: WalletBehaviourFactory< }, }); - // @ts-ignore - const isBuffer = result?.type === "Buffer"; - const txResult = isBuffer ? result : Object.values(result); - return nearAPI.transactions.SignedTransaction.decode(Buffer.from(txResult)); + const signatureData = getSignatureData(result); + + return nearAPI.transactions.SignedTransaction.decode( + Buffer.from(signatureData) + ); }; const requestSignTransactions = async (transactions: Array) => { @@ -411,11 +424,10 @@ const WalletConnect: WalletBehaviourFactory< }); return results.map((result) => { - // @ts-ignore - const isBuffer = result?.type === "Buffer"; - const txResult = isBuffer ? result : Object.values(result); + const signatureData = getSignatureData(result); + return nearAPI.transactions.SignedTransaction.decode( - Buffer.from(txResult) + Buffer.from(signatureData) ); }); };