Skip to content

Commit eaf6fdb

Browse files
gregfromstlclaude
andcommitted
[TOOL-3687] Add Universal Buy/Sell bridge functions
This adds a new Universal module to the SDK for bridging assets between chains with automatic routing. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent 1e8d1e4 commit eaf6fdb

File tree

10 files changed

+686
-57
lines changed

10 files changed

+686
-57
lines changed

packages/thirdweb/package.json

Lines changed: 24 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@
4040
"import": "./dist/esm/exports/chains.js",
4141
"default": "./dist/cjs/exports/chains.js"
4242
},
43+
"./universal": {
44+
"types": "./dist/types/exports/universal.d.ts",
45+
"import": "./dist/esm/exports/universal.js",
46+
"default": "./dist/cjs/exports/universal.js"
47+
},
4348
"./contract": {
4449
"types": "./dist/types/exports/contract.d.ts",
4550
"import": "./dist/esm/exports/contract.js",
@@ -132,63 +137,25 @@
132137
},
133138
"typesVersions": {
134139
"*": {
135-
"adapters/*": [
136-
"./dist/types/exports/adapters/*.d.ts"
137-
],
138-
"auth": [
139-
"./dist/types/exports/auth.d.ts"
140-
],
141-
"chains": [
142-
"./dist/types/exports/chains.d.ts"
143-
],
144-
"contract": [
145-
"./dist/types/exports/contract.d.ts"
146-
],
147-
"deploys": [
148-
"./dist/types/exports/deploys.d.ts"
149-
],
150-
"event": [
151-
"./dist/types/exports/event.d.ts"
152-
],
153-
"extensions/*": [
154-
"./dist/types/exports/extensions/*.d.ts"
155-
],
156-
"pay": [
157-
"./dist/types/exports/pay.d.ts"
158-
],
159-
"react": [
160-
"./dist/types/exports/react.d.ts"
161-
],
162-
"react-native": [
163-
"./dist/types/exports/react-native.d.ts"
164-
],
165-
"rpc": [
166-
"./dist/types/exports/rpc.d.ts"
167-
],
168-
"storage": [
169-
"./dist/types/exports/storage.d.ts"
170-
],
171-
"transaction": [
172-
"./dist/types/exports/transaction.d.ts"
173-
],
174-
"utils": [
175-
"./dist/types/exports/utils.d.ts"
176-
],
177-
"wallets": [
178-
"./dist/types/exports/wallets.d.ts"
179-
],
180-
"wallets/*": [
181-
"./dist/types/exports/wallets/*.d.ts"
182-
],
183-
"modules": [
184-
"./dist/types/exports/modules.d.ts"
185-
],
186-
"social": [
187-
"./dist/types/exports/social.d.ts"
188-
],
189-
"ai": [
190-
"./dist/types/exports/ai.d.ts"
191-
]
140+
"adapters/*": ["./dist/types/exports/adapters/*.d.ts"],
141+
"auth": ["./dist/types/exports/auth.d.ts"],
142+
"chains": ["./dist/types/exports/chains.d.ts"],
143+
"contract": ["./dist/types/exports/contract.d.ts"],
144+
"deploys": ["./dist/types/exports/deploys.d.ts"],
145+
"event": ["./dist/types/exports/event.d.ts"],
146+
"extensions/*": ["./dist/types/exports/extensions/*.d.ts"],
147+
"pay": ["./dist/types/exports/pay.d.ts"],
148+
"react": ["./dist/types/exports/react.d.ts"],
149+
"react-native": ["./dist/types/exports/react-native.d.ts"],
150+
"rpc": ["./dist/types/exports/rpc.d.ts"],
151+
"storage": ["./dist/types/exports/storage.d.ts"],
152+
"transaction": ["./dist/types/exports/transaction.d.ts"],
153+
"utils": ["./dist/types/exports/utils.d.ts"],
154+
"wallets": ["./dist/types/exports/wallets.d.ts"],
155+
"wallets/*": ["./dist/types/exports/wallets/*.d.ts"],
156+
"modules": ["./dist/types/exports/modules.d.ts"],
157+
"social": ["./dist/types/exports/social.d.ts"],
158+
"ai": ["./dist/types/exports/ai.d.ts"]
192159
}
193160
},
194161
"browser": {

packages/thirdweb/src/exports/thirdweb.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ export {
7171
type ThirdwebContract,
7272
} from "../contract/contract.js";
7373

74+
/**
75+
* UNIVERSAL BRIDGE
76+
*/
77+
export * as Universal from "../universal/index.js";
78+
7479
/**
7580
* WALLETS
7681
*/
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export * as Buy from "../universal/Buy.js";
2+
export * as Sell from "../universal/Sell.js";
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { describe, expect, it } from "vitest";
2+
import * as Buy from "./Buy.js";
3+
import { TEST_CLIENT } from "~test/test-clients.js";
4+
import { toWei } from "src/utils/units.js";
5+
6+
describe("Universal.Buy.quote", () => {
7+
it("should get a valid quote", async () => {
8+
const quote = await Buy.quote({
9+
originChainId: 1,
10+
originTokenAddress: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
11+
destinationChainId: 10,
12+
destinationTokenAddress: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
13+
buyAmountWei: toWei("0.01"),
14+
client: TEST_CLIENT,
15+
});
16+
17+
expect(quote).toBeDefined();
18+
expect(quote.destinationAmount).toEqual(toWei("0.01"));
19+
expect(quote.intent).toBeDefined();
20+
});
21+
});
22+
23+
describe("Universal.Buy.prepare", () => {
24+
it("should get a valid prepared quote", async () => {
25+
const quote = await Buy.prepare({
26+
originChainId: 1,
27+
originTokenAddress: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
28+
destinationChainId: 10,
29+
destinationTokenAddress: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
30+
buyAmountWei: toWei("0.01"),
31+
sender: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
32+
receiver: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
33+
client: TEST_CLIENT,
34+
});
35+
36+
expect(quote).toBeDefined();
37+
expect(quote.destinationAmount).toEqual(toWei("0.01"));
38+
expect(quote.transactions).toBeDefined();
39+
expect(quote.transactions.length).toBeGreaterThan(0);
40+
expect(quote.intent).toBeDefined();
41+
});
42+
});

0 commit comments

Comments
 (0)