Skip to content

Commit e8a172a

Browse files
[thirdweb] Ensure bigints are stringified before usage with server wallets
1 parent 916ecf4 commit e8a172a

File tree

5 files changed

+45
-17
lines changed

5 files changed

+45
-17
lines changed

.changeset/whole-pears-stay.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"thirdweb": patch
3+
---
4+
5+
Ensure bigints are stringified before usage with server wallets

packages/engine/src/configure.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,25 @@ export function configure(
1414
...(options.clientId && { "x-client-id": options.clientId }),
1515
...(options.secretKey && { "x-secret-key": options.secretKey }),
1616
},
17+
bodySerializer: stringify,
1718
...(options.override ?? {}),
1819
});
1920
}
21+
22+
function stringify(
23+
// biome-ignore lint/suspicious/noExplicitAny: JSON.stringify signature
24+
value: any,
25+
// biome-ignore lint/suspicious/noExplicitAny: JSON.stringify signature
26+
replacer?: ((this: any, key: string, value: any) => any) | null,
27+
space?: string | number,
28+
) {
29+
const res = JSON.stringify(
30+
value,
31+
(key, value_) => {
32+
const value__ = typeof value_ === "bigint" ? value_.toString() : value_;
33+
return typeof replacer === "function" ? replacer(key, value__) : value__;
34+
},
35+
space,
36+
);
37+
return res;
38+
}

packages/thirdweb/src/engine/get-status.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ export async function getTransactionStatus(args: {
7979
const { client, transactionId } = args;
8080
const searchResult = await searchTransactions({
8181
baseUrl: getThirdwebBaseUrl("engineCloud"),
82+
bodySerializer: stringify,
8283
fetch: getClientFetch(client),
8384
body: {
8485
filters: [

packages/thirdweb/src/engine/server-wallet.test.ts

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@ import { TEST_CLIENT } from "../../test/src/test-clients.js";
33
import { TEST_ACCOUNT_B } from "../../test/src/test-wallets.js";
44
import { typedData } from "../../test/src/typed-data.js";
55
import { arbitrumSepolia } from "../chains/chain-definitions/arbitrum-sepolia.js";
6+
import { baseSepolia } from "../chains/chain-definitions/base-sepolia.js";
67
import { sepolia } from "../chains/chain-definitions/sepolia.js";
78
import { getContract } from "../contract/contract.js";
89
import { setContractURI } from "../extensions/common/__generated__/IContractMetadata/write/setContractURI.js";
10+
import { mintTo } from "../extensions/erc20/write/mintTo.js";
911
import { claimTo } from "../extensions/erc1155/drops/write/claimTo.js";
1012
import { getAllActiveSigners } from "../extensions/erc4337/__generated__/IAccountPermissions/read/getAllActiveSigners.js";
1113
import { sendTransaction } from "../transaction/actions/send-transaction.js";
12-
import { setThirdwebDomains } from "../utils/domains.js";
1314
import {
1415
DEFAULT_ACCOUNT_FACTORY_V0_6,
1516
ENTRYPOINT_ADDRESS_v0_6,
@@ -32,12 +33,12 @@ describe.runIf(
3233
let serverWallet: Engine.ServerWallet;
3334

3435
beforeAll(async () => {
35-
setThirdwebDomains({
36-
rpc: "rpc.thirdweb-dev.com",
37-
storage: "storage.thirdweb-dev.com",
38-
bundler: "bundler.thirdweb-dev.com",
39-
engineCloud: "engine.thirdweb-dev.com",
40-
});
36+
// setThirdwebDomains({
37+
// rpc: "rpc.thirdweb-dev.com",
38+
// storage: "storage.thirdweb-dev.com",
39+
// bundler: "bundler.thirdweb-dev.com",
40+
// engineCloud: "engine.thirdweb-dev.com",
41+
// });
4142
serverWallet = Engine.serverWallet({
4243
client: TEST_CLIENT,
4344
vaultAccessToken: process.env.VAULT_TOKEN as string,
@@ -81,7 +82,7 @@ describe.runIf(
8182
});
8283
const claimTx = claimTo({
8384
contract: nftContract,
84-
to: TEST_ACCOUNT_B.address,
85+
to: serverWallet.address,
8586
tokenId: 0n,
8687
quantity: 1n,
8788
});
@@ -97,16 +98,15 @@ describe.runIf(
9798
});
9899

99100
it("should send a extension tx", async () => {
100-
const nftContract = getContract({
101+
const tokenContract = getContract({
101102
client: TEST_CLIENT,
102-
chain: sepolia,
103-
address: "0xe2cb0eb5147b42095c2FfA6F7ec953bb0bE347D8",
103+
chain: baseSepolia,
104+
address: "0x87C52295891f208459F334975a3beE198fE75244",
104105
});
105-
const claimTx = claimTo({
106-
contract: nftContract,
107-
to: TEST_ACCOUNT_B.address,
108-
tokenId: 0n,
109-
quantity: 1n,
106+
const claimTx = mintTo({
107+
contract: tokenContract,
108+
to: serverWallet.address,
109+
amount: "0.001",
110110
});
111111
const tx = await sendTransaction({
112112
account: serverWallet,

packages/thirdweb/src/engine/server-wallet.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,13 +144,14 @@ export function serverWallet(options: ServerWalletOptions): ServerWallet {
144144

145145
const result = await sendTransaction({
146146
baseUrl: getThirdwebBaseUrl("engineCloud"),
147+
bodySerializer: stringify,
147148
fetch: getClientFetch(client),
148149
headers,
149150
body,
150151
});
151152

152153
if (result.error) {
153-
throw new Error(`Error sending transaction: ${result.error}`);
154+
throw new Error(`Error sending transaction: ${stringify(result.error)}`);
154155
}
155156

156157
const data = result.data?.result;
@@ -220,6 +221,7 @@ export function serverWallet(options: ServerWalletOptions): ServerWallet {
220221

221222
const signResult = await signMessage({
222223
baseUrl: getThirdwebBaseUrl("engineCloud"),
224+
bodySerializer: stringify,
223225
fetch: getClientFetch(client),
224226
headers,
225227
body: {
@@ -256,6 +258,7 @@ export function serverWallet(options: ServerWalletOptions): ServerWallet {
256258

257259
const signResult = await signTypedData({
258260
baseUrl: getThirdwebBaseUrl("engineCloud"),
261+
bodySerializer: stringify,
259262
fetch: getClientFetch(client),
260263
headers,
261264
body: {

0 commit comments

Comments
 (0)