@coinbase/agentkit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +305 -0
- package/dist/action-providers/actionDecorator.d.ts +69 -0
- package/dist/action-providers/actionDecorator.js +96 -0
- package/dist/action-providers/actionProvider.d.ts +48 -0
- package/dist/action-providers/actionProvider.js +62 -0
- package/dist/action-providers/basename/basenameActionProvider.d.ts +30 -0
- package/dist/action-providers/basename/basenameActionProvider.js +109 -0
- package/dist/action-providers/basename/basenameActionProvider.test.d.ts +1 -0
- package/dist/action-providers/basename/basenameActionProvider.test.js +146 -0
- package/dist/action-providers/basename/constants.d.ts +52 -0
- package/dist/action-providers/basename/constants.js +81 -0
- package/dist/action-providers/basename/index.d.ts +2 -0
- package/dist/action-providers/basename/index.js +18 -0
- package/dist/action-providers/basename/schemas.d.ts +14 -0
- package/dist/action-providers/basename/schemas.js +14 -0
- package/dist/action-providers/cdp/cdpApiActionProvider.d.ts +41 -0
- package/dist/action-providers/cdp/cdpApiActionProvider.js +111 -0
- package/dist/action-providers/cdp/cdpApiActionProvider.test.d.ts +1 -0
- package/dist/action-providers/cdp/cdpApiActionProvider.test.js +134 -0
- package/dist/action-providers/cdp/cdpWalletActionProvider.d.ts +58 -0
- package/dist/action-providers/cdp/cdpWalletActionProvider.js +218 -0
- package/dist/action-providers/cdp/cdpWalletActionProvider.test.d.ts +1 -0
- package/dist/action-providers/cdp/cdpWalletActionProvider.test.js +259 -0
- package/dist/action-providers/cdp/constants.d.ts +31 -0
- package/dist/action-providers/cdp/constants.js +34 -0
- package/dist/action-providers/cdp/index.d.ts +3 -0
- package/dist/action-providers/cdp/index.js +19 -0
- package/dist/action-providers/cdp/schemas.d.ts +91 -0
- package/dist/action-providers/cdp/schemas.js +77 -0
- package/dist/action-providers/customActionProvider.d.ts +30 -0
- package/dist/action-providers/customActionProvider.js +66 -0
- package/dist/action-providers/erc20/constants.d.ts +135 -0
- package/dist/action-providers/erc20/constants.js +191 -0
- package/dist/action-providers/erc20/erc20ActionProvider.d.ts +38 -0
- package/dist/action-providers/erc20/erc20ActionProvider.js +118 -0
- package/dist/action-providers/erc20/erc20ActionProvider.test.d.ts +1 -0
- package/dist/action-providers/erc20/erc20ActionProvider.test.js +117 -0
- package/dist/action-providers/erc20/index.d.ts +1 -0
- package/dist/action-providers/erc20/index.js +17 -0
- package/dist/action-providers/erc20/schemas.d.ts +27 -0
- package/dist/action-providers/erc20/schemas.js +26 -0
- package/dist/action-providers/erc721/constants.d.ts +236 -0
- package/dist/action-providers/erc721/constants.js +301 -0
- package/dist/action-providers/erc721/erc721ActionProvider.d.ts +46 -0
- package/dist/action-providers/erc721/erc721ActionProvider.js +164 -0
- package/dist/action-providers/erc721/erc721ActionProvider.test.d.ts +1 -0
- package/dist/action-providers/erc721/erc721ActionProvider.test.js +137 -0
- package/dist/action-providers/erc721/index.d.ts +1 -0
- package/dist/action-providers/erc721/index.js +17 -0
- package/dist/action-providers/erc721/schemas.d.ts +46 -0
- package/dist/action-providers/erc721/schemas.js +44 -0
- package/dist/action-providers/farcaster/farcasterActionProvider.d.ts +57 -0
- package/dist/action-providers/farcaster/farcasterActionProvider.js +142 -0
- package/dist/action-providers/farcaster/farcasterActionProvider.test.d.ts +1 -0
- package/dist/action-providers/farcaster/farcasterActionProvider.test.js +143 -0
- package/dist/action-providers/farcaster/index.d.ts +2 -0
- package/dist/action-providers/farcaster/index.js +18 -0
- package/dist/action-providers/farcaster/schemas.d.ts +15 -0
- package/dist/action-providers/farcaster/schemas.js +20 -0
- package/dist/action-providers/index.d.ts +13 -0
- package/dist/action-providers/index.js +29 -0
- package/dist/action-providers/morpho/constants.d.ts +16 -0
- package/dist/action-providers/morpho/constants.js +27 -0
- package/dist/action-providers/morpho/index.d.ts +2 -0
- package/dist/action-providers/morpho/index.js +18 -0
- package/dist/action-providers/morpho/morphoActionProvider.d.ts +39 -0
- package/dist/action-providers/morpho/morphoActionProvider.js +147 -0
- package/dist/action-providers/morpho/morphoActionProvider.test.d.ts +1 -0
- package/dist/action-providers/morpho/morphoActionProvider.test.js +126 -0
- package/dist/action-providers/morpho/schemas.d.ts +36 -0
- package/dist/action-providers/morpho/schemas.js +47 -0
- package/dist/action-providers/pyth/index.d.ts +2 -0
- package/dist/action-providers/pyth/index.js +18 -0
- package/dist/action-providers/pyth/pythActionProvider.d.ts +33 -0
- package/dist/action-providers/pyth/pythActionProvider.js +121 -0
- package/dist/action-providers/pyth/schemas.d.ts +21 -0
- package/dist/action-providers/pyth/schemas.js +20 -0
- package/dist/action-providers/twitter/index.d.ts +2 -0
- package/dist/action-providers/twitter/index.js +18 -0
- package/dist/action-providers/twitter/schemas.d.ts +38 -0
- package/dist/action-providers/twitter/schemas.js +44 -0
- package/dist/action-providers/twitter/twitterActionProvider.d.ts +82 -0
- package/dist/action-providers/twitter/twitterActionProvider.js +204 -0
- package/dist/action-providers/twitter/twitterActionProvider.test.d.ts +1 -0
- package/dist/action-providers/twitter/twitterActionProvider.test.js +185 -0
- package/dist/action-providers/wallet/index.d.ts +1 -0
- package/dist/action-providers/wallet/index.js +17 -0
- package/dist/action-providers/wallet/schemas.d.ts +19 -0
- package/dist/action-providers/wallet/schemas.js +19 -0
- package/dist/action-providers/wallet/walletActionProvider.d.ts +44 -0
- package/dist/action-providers/wallet/walletActionProvider.js +127 -0
- package/dist/action-providers/wallet/walletActionProvider.test.d.ts +1 -0
- package/dist/action-providers/wallet/walletActionProvider.test.js +116 -0
- package/dist/action-providers/weth/constants.d.ts +19 -0
- package/dist/action-providers/weth/constants.js +29 -0
- package/dist/action-providers/weth/index.d.ts +1 -0
- package/dist/action-providers/weth/index.js +17 -0
- package/dist/action-providers/weth/schemas.d.ts +8 -0
- package/dist/action-providers/weth/schemas.js +10 -0
- package/dist/action-providers/weth/wethActionProvider.d.ts +30 -0
- package/dist/action-providers/weth/wethActionProvider.js +89 -0
- package/dist/action-providers/weth/wethActionProvider.test.d.ts +1 -0
- package/dist/action-providers/weth/wethActionProvider.test.js +92 -0
- package/dist/action-providers/wow/constants.d.ts +15 -0
- package/dist/action-providers/wow/constants.js +844 -0
- package/dist/action-providers/wow/index.d.ts +2 -0
- package/dist/action-providers/wow/index.js +18 -0
- package/dist/action-providers/wow/schemas.d.ts +43 -0
- package/dist/action-providers/wow/schemas.js +47 -0
- package/dist/action-providers/wow/uniswap/constants.d.ts +3 -0
- package/dist/action-providers/wow/uniswap/constants.js +100 -0
- package/dist/action-providers/wow/uniswap/utils.d.ts +82 -0
- package/dist/action-providers/wow/uniswap/utils.js +226 -0
- package/dist/action-providers/wow/utils.d.ts +27 -0
- package/dist/action-providers/wow/utils.js +63 -0
- package/dist/action-providers/wow/wowActionProvider.d.ts +46 -0
- package/dist/action-providers/wow/wowActionProvider.js +223 -0
- package/dist/action-providers/wow/wowActionProvider.test.d.ts +1 -0
- package/dist/action-providers/wow/wowActionProvider.test.js +287 -0
- package/dist/agentkit.d.ts +45 -0
- package/dist/agentkit.js +60 -0
- package/dist/analytics/index.d.ts +1 -0
- package/dist/analytics/index.js +17 -0
- package/dist/analytics/sendAnalyticsEvent.d.ts +31 -0
- package/dist/analytics/sendAnalyticsEvent.js +51 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +22 -0
- package/dist/network/index.d.ts +1 -0
- package/dist/network/index.js +17 -0
- package/dist/network/network.d.ts +13 -0
- package/dist/network/network.js +41 -0
- package/dist/network/types.d.ts +17 -0
- package/dist/network/types.js +2 -0
- package/dist/utils.d.ts +11 -0
- package/dist/utils.js +43 -0
- package/dist/utils.test.d.ts +1 -0
- package/dist/utils.test.js +50 -0
- package/dist/wallet-providers/cdpWalletProvider.d.ts +218 -0
- package/dist/wallet-providers/cdpWalletProvider.js +362 -0
- package/dist/wallet-providers/evmWalletProvider.d.ts +51 -0
- package/dist/wallet-providers/evmWalletProvider.js +14 -0
- package/dist/wallet-providers/index.d.ts +4 -0
- package/dist/wallet-providers/index.js +20 -0
- package/dist/wallet-providers/viemWalletProvider.d.ts +89 -0
- package/dist/wallet-providers/viemWalletProvider.js +187 -0
- package/dist/wallet-providers/walletProvider.d.ts +48 -0
- package/dist/wallet-providers/walletProvider.js +41 -0
- package/package.json +65 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.walletActionProvider = exports.WalletActionProvider = void 0;
|
|
13
|
+
const decimal_js_1 = require("decimal.js");
|
|
14
|
+
const zod_1 = require("zod");
|
|
15
|
+
const actionDecorator_1 = require("../actionDecorator");
|
|
16
|
+
const actionProvider_1 = require("../actionProvider");
|
|
17
|
+
const wallet_providers_1 = require("../../wallet-providers");
|
|
18
|
+
const schemas_1 = require("./schemas");
|
|
19
|
+
/**
|
|
20
|
+
* WalletActionProvider provides actions for getting basic wallet information.
|
|
21
|
+
*/
|
|
22
|
+
class WalletActionProvider extends actionProvider_1.ActionProvider {
|
|
23
|
+
/**
|
|
24
|
+
* Constructor for the WalletActionProvider.
|
|
25
|
+
*/
|
|
26
|
+
constructor() {
|
|
27
|
+
super("wallet", []);
|
|
28
|
+
/**
|
|
29
|
+
* Checks if the wallet action provider supports the given network.
|
|
30
|
+
* Since wallet actions are network-agnostic, this always returns true.
|
|
31
|
+
*
|
|
32
|
+
* @param _ - The network to check.
|
|
33
|
+
* @returns True, as wallet actions are supported on all networks.
|
|
34
|
+
*/
|
|
35
|
+
this.supportsNetwork = (_) => true;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Gets the details of the connected wallet including address, network, and balance.
|
|
39
|
+
*
|
|
40
|
+
* @param walletProvider - The wallet provider to get the details from.
|
|
41
|
+
* @param _ - Empty args object (not used).
|
|
42
|
+
* @returns A formatted string containing the wallet details.
|
|
43
|
+
*/
|
|
44
|
+
async getWalletDetails(walletProvider, _) {
|
|
45
|
+
try {
|
|
46
|
+
const address = walletProvider.getAddress();
|
|
47
|
+
const network = walletProvider.getNetwork();
|
|
48
|
+
const balance = await walletProvider.getBalance();
|
|
49
|
+
const name = walletProvider.getName();
|
|
50
|
+
// Convert balance from Wei to ETH using Decimal for precision
|
|
51
|
+
const ethBalance = new decimal_js_1.Decimal(balance.toString()).div(new decimal_js_1.Decimal(10).pow(18));
|
|
52
|
+
return `Wallet Details:
|
|
53
|
+
- Provider: ${name}
|
|
54
|
+
- Address: ${address}
|
|
55
|
+
- Network:
|
|
56
|
+
* Protocol Family: ${network.protocolFamily}
|
|
57
|
+
* Network ID: ${network.networkId || "N/A"}
|
|
58
|
+
* Chain ID: ${network.chainId || "N/A"}
|
|
59
|
+
- ETH Balance: ${ethBalance.toFixed(6)} ETH
|
|
60
|
+
- Native Balance: ${balance.toString()} WEI`;
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
return `Error getting wallet details: ${error}`;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Transfers a specified amount of an asset to a destination onchain.
|
|
68
|
+
*
|
|
69
|
+
* @param walletProvider - The wallet provider to transfer from.
|
|
70
|
+
* @param args - The input arguments for the action.
|
|
71
|
+
* @returns A message containing the transfer details.
|
|
72
|
+
*/
|
|
73
|
+
async nativeTransfer(walletProvider, args) {
|
|
74
|
+
try {
|
|
75
|
+
const result = await walletProvider.nativeTransfer(args.to, args.value);
|
|
76
|
+
return `Transferred ${args.value} ETH to ${args.to}.\nTransaction hash: ${result}`;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
return `Error transferring the asset: ${error}`;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.WalletActionProvider = WalletActionProvider;
|
|
84
|
+
__decorate([
|
|
85
|
+
(0, actionDecorator_1.CreateAction)({
|
|
86
|
+
name: "get_wallet_details",
|
|
87
|
+
description: `
|
|
88
|
+
This tool will return the details of the connected wallet including:
|
|
89
|
+
- Wallet address
|
|
90
|
+
- Network information (protocol family, network ID, chain ID)
|
|
91
|
+
- ETH token balance
|
|
92
|
+
- Native token balance
|
|
93
|
+
- Wallet provider name
|
|
94
|
+
`,
|
|
95
|
+
schema: schemas_1.GetWalletDetailsSchema,
|
|
96
|
+
}),
|
|
97
|
+
__metadata("design:type", Function),
|
|
98
|
+
__metadata("design:paramtypes", [wallet_providers_1.WalletProvider, void 0]),
|
|
99
|
+
__metadata("design:returntype", Promise)
|
|
100
|
+
], WalletActionProvider.prototype, "getWalletDetails", null);
|
|
101
|
+
__decorate([
|
|
102
|
+
(0, actionDecorator_1.CreateAction)({
|
|
103
|
+
name: "native_transfer",
|
|
104
|
+
description: `
|
|
105
|
+
This tool will transfer native tokens from the wallet to another onchain address.
|
|
106
|
+
|
|
107
|
+
It takes the following inputs:
|
|
108
|
+
- amount: The amount to transfer in whole units e.g. 1 ETH or 0.00001 ETH
|
|
109
|
+
- destination: The address to receive the funds
|
|
110
|
+
|
|
111
|
+
Important notes:
|
|
112
|
+
- Ensure sufficient balance of the input asset before transferring
|
|
113
|
+
- Ensure there is sufficient native token balance for gas fees
|
|
114
|
+
`,
|
|
115
|
+
schema: schemas_1.NativeTransferSchema,
|
|
116
|
+
}),
|
|
117
|
+
__metadata("design:type", Function),
|
|
118
|
+
__metadata("design:paramtypes", [wallet_providers_1.WalletProvider, void 0]),
|
|
119
|
+
__metadata("design:returntype", Promise)
|
|
120
|
+
], WalletActionProvider.prototype, "nativeTransfer", null);
|
|
121
|
+
/**
|
|
122
|
+
* Factory function to create a new WalletActionProvider instance.
|
|
123
|
+
*
|
|
124
|
+
* @returns A new WalletActionProvider instance.
|
|
125
|
+
*/
|
|
126
|
+
const walletActionProvider = () => new WalletActionProvider();
|
|
127
|
+
exports.walletActionProvider = walletActionProvider;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const walletActionProvider_1 = require("./walletActionProvider");
|
|
4
|
+
const schemas_1 = require("./schemas");
|
|
5
|
+
describe("Wallet Action Provider", () => {
|
|
6
|
+
const MOCK_ADDRESS = "0xe6b2af36b3bb8d47206a129ff11d5a2de2a63c83";
|
|
7
|
+
const MOCK_BALANCE = 1000000000000000000n; // 1 ETH in wei
|
|
8
|
+
const MOCK_NETWORK = {
|
|
9
|
+
protocolFamily: "evm",
|
|
10
|
+
networkId: "base-sepolia",
|
|
11
|
+
chainId: "123",
|
|
12
|
+
};
|
|
13
|
+
const MOCK_PROVIDER_NAME = "TestWallet";
|
|
14
|
+
const MOCK_TRANSACTION_HASH = "0xghijkl987654321";
|
|
15
|
+
let mockWallet;
|
|
16
|
+
const actionProvider = (0, walletActionProvider_1.walletActionProvider)();
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
mockWallet = {
|
|
19
|
+
getAddress: jest.fn().mockReturnValue(MOCK_ADDRESS),
|
|
20
|
+
getNetwork: jest.fn().mockReturnValue(MOCK_NETWORK),
|
|
21
|
+
getBalance: jest.fn().mockResolvedValue(MOCK_BALANCE),
|
|
22
|
+
getName: jest.fn().mockReturnValue(MOCK_PROVIDER_NAME),
|
|
23
|
+
nativeTransfer: jest.fn().mockResolvedValue(MOCK_TRANSACTION_HASH),
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
describe("getWalletDetails", () => {
|
|
27
|
+
it("should successfully get wallet details", async () => {
|
|
28
|
+
const response = await actionProvider.getWalletDetails(mockWallet, {});
|
|
29
|
+
expect(mockWallet.getAddress).toHaveBeenCalled();
|
|
30
|
+
expect(mockWallet.getNetwork).toHaveBeenCalled();
|
|
31
|
+
expect(mockWallet.getBalance).toHaveBeenCalled();
|
|
32
|
+
expect(mockWallet.getName).toHaveBeenCalled();
|
|
33
|
+
const expectedResponse = `Wallet Details:
|
|
34
|
+
- Provider: ${MOCK_PROVIDER_NAME}
|
|
35
|
+
- Address: ${MOCK_ADDRESS}
|
|
36
|
+
- Network:
|
|
37
|
+
* Protocol Family: ${MOCK_NETWORK.protocolFamily}
|
|
38
|
+
* Network ID: ${MOCK_NETWORK.networkId}
|
|
39
|
+
* Chain ID: ${MOCK_NETWORK.chainId}
|
|
40
|
+
- ETH Balance: 1.000000 ETH
|
|
41
|
+
- Native Balance: ${MOCK_BALANCE.toString()} WEI`;
|
|
42
|
+
expect(response).toBe(expectedResponse);
|
|
43
|
+
});
|
|
44
|
+
it("should handle missing network IDs gracefully", async () => {
|
|
45
|
+
mockWallet.getNetwork.mockReturnValue({
|
|
46
|
+
protocolFamily: "evm",
|
|
47
|
+
});
|
|
48
|
+
const response = await actionProvider.getWalletDetails(mockWallet, {});
|
|
49
|
+
expect(response).toContain("Network ID: N/A");
|
|
50
|
+
expect(response).toContain("Chain ID: N/A");
|
|
51
|
+
});
|
|
52
|
+
it("should handle errors when getting wallet details", async () => {
|
|
53
|
+
const error = new Error("Failed to get wallet details");
|
|
54
|
+
mockWallet.getBalance.mockRejectedValue(error);
|
|
55
|
+
const response = await actionProvider.getWalletDetails(mockWallet, {});
|
|
56
|
+
expect(response).toBe(`Error getting wallet details: ${error}`);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
describe("Native Transfer", () => {
|
|
60
|
+
const MOCK_AMOUNT = "1.5"; // 1.5 ETH
|
|
61
|
+
const MOCK_DESTINATION = "0x321";
|
|
62
|
+
it("should successfully parse valid input", () => {
|
|
63
|
+
const validInput = {
|
|
64
|
+
to: MOCK_DESTINATION,
|
|
65
|
+
value: MOCK_AMOUNT,
|
|
66
|
+
};
|
|
67
|
+
const result = schemas_1.NativeTransferSchema.safeParse(validInput);
|
|
68
|
+
expect(result.success).toBe(true);
|
|
69
|
+
if (result.success) {
|
|
70
|
+
expect(result.data).toEqual(validInput);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
it("should fail parsing empty input", () => {
|
|
74
|
+
const emptyInput = {};
|
|
75
|
+
const result = schemas_1.NativeTransferSchema.safeParse(emptyInput);
|
|
76
|
+
expect(result.success).toBe(false);
|
|
77
|
+
});
|
|
78
|
+
it("should successfully transfer assets", async () => {
|
|
79
|
+
const args = {
|
|
80
|
+
to: MOCK_DESTINATION,
|
|
81
|
+
value: MOCK_AMOUNT,
|
|
82
|
+
};
|
|
83
|
+
const response = await actionProvider.nativeTransfer(mockWallet, args);
|
|
84
|
+
expect(mockWallet.nativeTransfer).toHaveBeenCalledWith(MOCK_DESTINATION, MOCK_AMOUNT);
|
|
85
|
+
expect(response).toBe(`Transferred ${MOCK_AMOUNT} ETH to ${MOCK_DESTINATION}.\nTransaction hash: ${MOCK_TRANSACTION_HASH}`);
|
|
86
|
+
});
|
|
87
|
+
it("should handle transfer errors", async () => {
|
|
88
|
+
const args = {
|
|
89
|
+
to: MOCK_DESTINATION,
|
|
90
|
+
value: MOCK_AMOUNT,
|
|
91
|
+
};
|
|
92
|
+
const error = new Error("Failed to execute transfer");
|
|
93
|
+
mockWallet.nativeTransfer.mockRejectedValue(error);
|
|
94
|
+
const response = await actionProvider.nativeTransfer(mockWallet, args);
|
|
95
|
+
expect(response).toBe(`Error transferring the asset: ${error}`);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
describe("supportsNetwork", () => {
|
|
99
|
+
it("should return true for any network", () => {
|
|
100
|
+
const evmNetwork = { protocolFamily: "evm", networkId: "base-sepolia" };
|
|
101
|
+
const solanaNetwork = { protocolFamily: "solana", networkId: "mainnet" };
|
|
102
|
+
const bitcoinNetwork = { protocolFamily: "bitcoin", networkId: "mainnet" };
|
|
103
|
+
expect(actionProvider.supportsNetwork(evmNetwork)).toBe(true);
|
|
104
|
+
expect(actionProvider.supportsNetwork(solanaNetwork)).toBe(true);
|
|
105
|
+
expect(actionProvider.supportsNetwork(bitcoinNetwork)).toBe(true);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
describe("action provider setup", () => {
|
|
109
|
+
it("should have the correct name", () => {
|
|
110
|
+
expect(actionProvider.name).toBe("wallet");
|
|
111
|
+
});
|
|
112
|
+
it("should have empty actionProviders array", () => {
|
|
113
|
+
expect(actionProvider.actionProviders).toEqual([]);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const WETH_ADDRESS = "0x4200000000000000000000000000000000000006";
|
|
2
|
+
export declare const WETH_ABI: readonly [{
|
|
3
|
+
readonly inputs: readonly [];
|
|
4
|
+
readonly name: "deposit";
|
|
5
|
+
readonly outputs: readonly [];
|
|
6
|
+
readonly stateMutability: "payable";
|
|
7
|
+
readonly type: "function";
|
|
8
|
+
}, {
|
|
9
|
+
readonly inputs: readonly [{
|
|
10
|
+
readonly name: "account";
|
|
11
|
+
readonly type: "address";
|
|
12
|
+
}];
|
|
13
|
+
readonly name: "balanceOf";
|
|
14
|
+
readonly outputs: readonly [{
|
|
15
|
+
readonly type: "uint256";
|
|
16
|
+
}];
|
|
17
|
+
readonly stateMutability: "view";
|
|
18
|
+
readonly type: "function";
|
|
19
|
+
}];
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WETH_ABI = exports.WETH_ADDRESS = void 0;
|
|
4
|
+
exports.WETH_ADDRESS = "0x4200000000000000000000000000000000000006";
|
|
5
|
+
exports.WETH_ABI = [
|
|
6
|
+
{
|
|
7
|
+
inputs: [],
|
|
8
|
+
name: "deposit",
|
|
9
|
+
outputs: [],
|
|
10
|
+
stateMutability: "payable",
|
|
11
|
+
type: "function",
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
inputs: [
|
|
15
|
+
{
|
|
16
|
+
name: "account",
|
|
17
|
+
type: "address",
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
name: "balanceOf",
|
|
21
|
+
outputs: [
|
|
22
|
+
{
|
|
23
|
+
type: "uint256",
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
stateMutability: "view",
|
|
27
|
+
type: "function",
|
|
28
|
+
},
|
|
29
|
+
];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./wethActionProvider";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./wethActionProvider"), exports);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WrapEthSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
exports.WrapEthSchema = zod_1.z
|
|
6
|
+
.object({
|
|
7
|
+
amountToWrap: zod_1.z.string().describe("Amount of ETH to wrap in wei"),
|
|
8
|
+
})
|
|
9
|
+
.strip()
|
|
10
|
+
.describe("Instructions for wrapping ETH to WETH");
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ActionProvider } from "../actionProvider";
|
|
3
|
+
import { Network } from "../../network";
|
|
4
|
+
import { WrapEthSchema } from "./schemas";
|
|
5
|
+
import { EvmWalletProvider } from "../../wallet-providers";
|
|
6
|
+
/**
|
|
7
|
+
* WethActionProvider is an action provider for WETH.
|
|
8
|
+
*/
|
|
9
|
+
export declare class WethActionProvider extends ActionProvider {
|
|
10
|
+
/**
|
|
11
|
+
* Constructor for the WethActionProvider.
|
|
12
|
+
*/
|
|
13
|
+
constructor();
|
|
14
|
+
/**
|
|
15
|
+
* Wraps ETH to WETH.
|
|
16
|
+
*
|
|
17
|
+
* @param walletProvider - The wallet provider to use for the action.
|
|
18
|
+
* @param args - The input arguments for the action.
|
|
19
|
+
* @returns A message containing the transaction hash.
|
|
20
|
+
*/
|
|
21
|
+
wrapEth(walletProvider: EvmWalletProvider, args: z.infer<typeof WrapEthSchema>): Promise<string>;
|
|
22
|
+
/**
|
|
23
|
+
* Checks if the Weth action provider supports the given network.
|
|
24
|
+
*
|
|
25
|
+
* @param network - The network to check.
|
|
26
|
+
* @returns True if the Weth action provider supports the network, false otherwise.
|
|
27
|
+
*/
|
|
28
|
+
supportsNetwork: (network: Network) => boolean;
|
|
29
|
+
}
|
|
30
|
+
export declare const wethActionProvider: () => WethActionProvider;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.wethActionProvider = exports.WethActionProvider = void 0;
|
|
13
|
+
const zod_1 = require("zod");
|
|
14
|
+
const actionProvider_1 = require("../actionProvider");
|
|
15
|
+
const actionDecorator_1 = require("../actionDecorator");
|
|
16
|
+
const schemas_1 = require("./schemas");
|
|
17
|
+
const constants_1 = require("./constants");
|
|
18
|
+
const viem_1 = require("viem");
|
|
19
|
+
const wallet_providers_1 = require("../../wallet-providers");
|
|
20
|
+
/**
|
|
21
|
+
* WethActionProvider is an action provider for WETH.
|
|
22
|
+
*/
|
|
23
|
+
class WethActionProvider extends actionProvider_1.ActionProvider {
|
|
24
|
+
/**
|
|
25
|
+
* Constructor for the WethActionProvider.
|
|
26
|
+
*/
|
|
27
|
+
constructor() {
|
|
28
|
+
super("weth", []);
|
|
29
|
+
/**
|
|
30
|
+
* Checks if the Weth action provider supports the given network.
|
|
31
|
+
*
|
|
32
|
+
* @param network - The network to check.
|
|
33
|
+
* @returns True if the Weth action provider supports the network, false otherwise.
|
|
34
|
+
*/
|
|
35
|
+
this.supportsNetwork = (network) => network.networkId === "base-mainnet" || network.networkId === "base-sepolia";
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Wraps ETH to WETH.
|
|
39
|
+
*
|
|
40
|
+
* @param walletProvider - The wallet provider to use for the action.
|
|
41
|
+
* @param args - The input arguments for the action.
|
|
42
|
+
* @returns A message containing the transaction hash.
|
|
43
|
+
*/
|
|
44
|
+
async wrapEth(walletProvider, args) {
|
|
45
|
+
try {
|
|
46
|
+
const hash = await walletProvider.sendTransaction({
|
|
47
|
+
to: constants_1.WETH_ADDRESS,
|
|
48
|
+
data: (0, viem_1.encodeFunctionData)({
|
|
49
|
+
abi: constants_1.WETH_ABI,
|
|
50
|
+
functionName: "deposit",
|
|
51
|
+
}),
|
|
52
|
+
value: BigInt(args.amountToWrap),
|
|
53
|
+
});
|
|
54
|
+
await walletProvider.waitForTransactionReceipt(hash);
|
|
55
|
+
return `Wrapped ETH with transaction hash: ${hash}`;
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
return `Error wrapping ETH: ${error}`;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.WethActionProvider = WethActionProvider;
|
|
63
|
+
__decorate([
|
|
64
|
+
(0, actionDecorator_1.CreateAction)({
|
|
65
|
+
name: "wrap_eth",
|
|
66
|
+
description: `
|
|
67
|
+
This tool can only be used to wrap ETH to WETH.
|
|
68
|
+
Do not use this tool for any other purpose, or trading other assets.
|
|
69
|
+
|
|
70
|
+
Inputs:
|
|
71
|
+
- Amount of ETH to wrap.
|
|
72
|
+
|
|
73
|
+
Important notes:
|
|
74
|
+
- The amount is a string and cannot have any decimal points, since the unit of measurement is wei.
|
|
75
|
+
- Make sure to use the exact amount provided, and if there's any doubt, check by getting more information before continuing with the action.
|
|
76
|
+
- 1 wei = 0.000000000000000001 WETH
|
|
77
|
+
- Minimum purchase amount is 100000000000000 wei (0.0000001 WETH)
|
|
78
|
+
- Only supported on the following networks:
|
|
79
|
+
- Base Sepolia (ie, 'base-sepolia')
|
|
80
|
+
- Base Mainnet (ie, 'base', 'base-mainnet')
|
|
81
|
+
`,
|
|
82
|
+
schema: schemas_1.WrapEthSchema,
|
|
83
|
+
}),
|
|
84
|
+
__metadata("design:type", Function),
|
|
85
|
+
__metadata("design:paramtypes", [wallet_providers_1.EvmWalletProvider, void 0]),
|
|
86
|
+
__metadata("design:returntype", Promise)
|
|
87
|
+
], WethActionProvider.prototype, "wrapEth", null);
|
|
88
|
+
const wethActionProvider = () => new WethActionProvider();
|
|
89
|
+
exports.wethActionProvider = wethActionProvider;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const schemas_1 = require("./schemas");
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
const constants_1 = require("./constants");
|
|
6
|
+
const wethActionProvider_1 = require("./wethActionProvider");
|
|
7
|
+
const MOCK_AMOUNT = "15";
|
|
8
|
+
const MOCK_ADDRESS = "0x1234567890123456789012345678901234543210";
|
|
9
|
+
describe("Wrap Eth Schema", () => {
|
|
10
|
+
it("should successfully parse valid input", () => {
|
|
11
|
+
const validInput = {
|
|
12
|
+
amountToWrap: MOCK_AMOUNT,
|
|
13
|
+
};
|
|
14
|
+
const result = schemas_1.WrapEthSchema.safeParse(validInput);
|
|
15
|
+
expect(result.success).toBe(true);
|
|
16
|
+
expect(result.data).toEqual(validInput);
|
|
17
|
+
});
|
|
18
|
+
it("should fail parsing empty input", () => {
|
|
19
|
+
const emptyInput = {};
|
|
20
|
+
const result = schemas_1.WrapEthSchema.safeParse(emptyInput);
|
|
21
|
+
expect(result.success).toBe(false);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
describe("Wrap Eth Action", () => {
|
|
25
|
+
let mockWallet;
|
|
26
|
+
const actionProvider = (0, wethActionProvider_1.wethActionProvider)();
|
|
27
|
+
beforeEach(async () => {
|
|
28
|
+
mockWallet = {
|
|
29
|
+
getAddress: jest.fn().mockReturnValue(MOCK_ADDRESS),
|
|
30
|
+
sendTransaction: jest.fn(),
|
|
31
|
+
waitForTransactionReceipt: jest.fn(),
|
|
32
|
+
};
|
|
33
|
+
});
|
|
34
|
+
it("should successfully respond", async () => {
|
|
35
|
+
const args = {
|
|
36
|
+
amountToWrap: MOCK_AMOUNT,
|
|
37
|
+
};
|
|
38
|
+
const hash = "0x1234567890123456789012345678901234567890";
|
|
39
|
+
mockWallet.sendTransaction.mockResolvedValue(hash);
|
|
40
|
+
const response = await actionProvider.wrapEth(mockWallet, args);
|
|
41
|
+
expect(mockWallet.sendTransaction).toHaveBeenCalledWith({
|
|
42
|
+
to: constants_1.WETH_ADDRESS,
|
|
43
|
+
data: (0, viem_1.encodeFunctionData)({
|
|
44
|
+
abi: constants_1.WETH_ABI,
|
|
45
|
+
functionName: "deposit",
|
|
46
|
+
}),
|
|
47
|
+
value: BigInt(MOCK_AMOUNT),
|
|
48
|
+
});
|
|
49
|
+
expect(response).toContain(`Wrapped ETH with transaction hash: ${hash}`);
|
|
50
|
+
});
|
|
51
|
+
it("should fail with an error", async () => {
|
|
52
|
+
const args = {
|
|
53
|
+
amountToWrap: MOCK_AMOUNT,
|
|
54
|
+
};
|
|
55
|
+
const error = new Error("Failed to wrap ETH");
|
|
56
|
+
mockWallet.sendTransaction.mockRejectedValue(error);
|
|
57
|
+
const response = await actionProvider.wrapEth(mockWallet, args);
|
|
58
|
+
expect(mockWallet.sendTransaction).toHaveBeenCalledWith({
|
|
59
|
+
to: constants_1.WETH_ADDRESS,
|
|
60
|
+
data: (0, viem_1.encodeFunctionData)({
|
|
61
|
+
abi: constants_1.WETH_ABI,
|
|
62
|
+
functionName: "deposit",
|
|
63
|
+
}),
|
|
64
|
+
value: BigInt(MOCK_AMOUNT),
|
|
65
|
+
});
|
|
66
|
+
expect(response).toContain(`Error wrapping ETH: ${error}`);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe("supportsNetwork", () => {
|
|
70
|
+
const actionProvider = (0, wethActionProvider_1.wethActionProvider)();
|
|
71
|
+
it("should return true for base-mainnet", () => {
|
|
72
|
+
const result = actionProvider.supportsNetwork({
|
|
73
|
+
protocolFamily: "evm",
|
|
74
|
+
networkId: "base-mainnet",
|
|
75
|
+
});
|
|
76
|
+
expect(result).toBe(true);
|
|
77
|
+
});
|
|
78
|
+
it("should return true for base-sepolia", () => {
|
|
79
|
+
const result = actionProvider.supportsNetwork({
|
|
80
|
+
protocolFamily: "evm",
|
|
81
|
+
networkId: "base-sepolia",
|
|
82
|
+
});
|
|
83
|
+
expect(result).toBe(true);
|
|
84
|
+
});
|
|
85
|
+
it("should return false for non-base networks", () => {
|
|
86
|
+
const result = actionProvider.supportsNetwork({
|
|
87
|
+
protocolFamily: "evm",
|
|
88
|
+
networkId: "ethereum-mainnet",
|
|
89
|
+
});
|
|
90
|
+
expect(result).toBe(false);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Abi } from "abitype";
|
|
2
|
+
export declare const SUPPORTED_NETWORKS: string[];
|
|
3
|
+
export declare const WOW_FACTORY_ABI: Abi;
|
|
4
|
+
export declare const WOW_ABI: Abi;
|
|
5
|
+
export declare const WOW_FACTORY_CONTRACT_ADDRESSES: Record<string, string>;
|
|
6
|
+
export declare const ADDRESSES: Record<string, Record<string, string>>;
|
|
7
|
+
export declare const GENERIC_TOKEN_METADATA_URI = "ipfs://QmY1GqprFYvojCcUEKgqHeDj9uhZD9jmYGrQTfA9vAE78J";
|
|
8
|
+
/**
|
|
9
|
+
* Gets the Zora Wow ERC20 Factory contract address for the specified network.
|
|
10
|
+
*
|
|
11
|
+
* @param network - The network ID to get the contract address for
|
|
12
|
+
* @returns The contract address for the specified network
|
|
13
|
+
* @throws Error if the specified network is not supported
|
|
14
|
+
*/
|
|
15
|
+
export declare function getFactoryAddress(network: string): string;
|