@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,109 @@
|
|
|
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.basenameActionProvider = exports.BasenameActionProvider = void 0;
|
|
13
|
+
const viem_1 = require("viem");
|
|
14
|
+
const zod_1 = require("zod");
|
|
15
|
+
const actionProvider_1 = require("../actionProvider");
|
|
16
|
+
const actionDecorator_1 = require("../actionDecorator");
|
|
17
|
+
const constants_1 = require("./constants");
|
|
18
|
+
const schemas_1 = require("./schemas");
|
|
19
|
+
const wallet_providers_1 = require("../../wallet-providers");
|
|
20
|
+
/**
|
|
21
|
+
* Action provider for registering Basenames.
|
|
22
|
+
*/
|
|
23
|
+
class BasenameActionProvider extends actionProvider_1.ActionProvider {
|
|
24
|
+
/**
|
|
25
|
+
* Constructs a new BasenameActionProvider.
|
|
26
|
+
*/
|
|
27
|
+
constructor() {
|
|
28
|
+
super("basename", []);
|
|
29
|
+
/**
|
|
30
|
+
* Checks if the Basename action provider supports the given network.
|
|
31
|
+
*
|
|
32
|
+
* @param network - The network to check.
|
|
33
|
+
* @returns True if the Basename action provider supports the network, false otherwise.
|
|
34
|
+
*/
|
|
35
|
+
this.supportsNetwork = (network) => network.networkId === "base-mainnet" || network.networkId === "base-sepolia";
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Registers a Basename.
|
|
39
|
+
*
|
|
40
|
+
* @param wallet - The wallet to use for the registration.
|
|
41
|
+
* @param args - The arguments for the registration.
|
|
42
|
+
* @returns A string indicating the success or failure of the registration.
|
|
43
|
+
*/
|
|
44
|
+
async register(wallet, args) {
|
|
45
|
+
const address = wallet.getAddress();
|
|
46
|
+
const isMainnet = wallet.getNetwork().networkId === "base-mainnet";
|
|
47
|
+
const suffix = isMainnet ? ".base.eth" : ".basetest.eth";
|
|
48
|
+
if (!args.basename.endsWith(suffix)) {
|
|
49
|
+
args.basename += suffix;
|
|
50
|
+
}
|
|
51
|
+
const l2ResolverAddress = isMainnet ? constants_1.L2_RESOLVER_ADDRESS_MAINNET : constants_1.L2_RESOLVER_ADDRESS_TESTNET;
|
|
52
|
+
const addressData = (0, viem_1.encodeFunctionData)({
|
|
53
|
+
abi: constants_1.L2_RESOLVER_ABI,
|
|
54
|
+
functionName: "setAddr",
|
|
55
|
+
args: [(0, viem_1.namehash)(args.basename), address],
|
|
56
|
+
});
|
|
57
|
+
const nameData = (0, viem_1.encodeFunctionData)({
|
|
58
|
+
abi: constants_1.L2_RESOLVER_ABI,
|
|
59
|
+
functionName: "setName",
|
|
60
|
+
args: [(0, viem_1.namehash)(args.basename), args.basename],
|
|
61
|
+
});
|
|
62
|
+
try {
|
|
63
|
+
const contractAddress = isMainnet
|
|
64
|
+
? constants_1.BASENAMES_REGISTRAR_CONTROLLER_ADDRESS_MAINNET
|
|
65
|
+
: constants_1.BASENAMES_REGISTRAR_CONTROLLER_ADDRESS_TESTNET;
|
|
66
|
+
const hash = await wallet.sendTransaction({
|
|
67
|
+
to: contractAddress,
|
|
68
|
+
data: (0, viem_1.encodeFunctionData)({
|
|
69
|
+
abi: constants_1.REGISTRAR_ABI,
|
|
70
|
+
functionName: "register",
|
|
71
|
+
args: [
|
|
72
|
+
{
|
|
73
|
+
name: args.basename.replace(suffix, ""),
|
|
74
|
+
owner: address,
|
|
75
|
+
duration: constants_1.REGISTRATION_DURATION,
|
|
76
|
+
resolver: l2ResolverAddress,
|
|
77
|
+
data: [addressData, nameData],
|
|
78
|
+
reverseRecord: true,
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
}),
|
|
82
|
+
value: (0, viem_1.parseEther)(args.amount),
|
|
83
|
+
});
|
|
84
|
+
await wallet.waitForTransactionReceipt(hash);
|
|
85
|
+
return `Successfully registered basename ${args.basename} for address ${address}`;
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
return `Error registering basename: Error: ${error}`;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.BasenameActionProvider = BasenameActionProvider;
|
|
93
|
+
__decorate([
|
|
94
|
+
(0, actionDecorator_1.CreateAction)({
|
|
95
|
+
name: "register_basename",
|
|
96
|
+
description: `
|
|
97
|
+
This tool will register a Basename for the agent. The agent should have a wallet associated to register a Basename.
|
|
98
|
+
When your network ID is 'base-mainnet' (also sometimes known simply as 'base'), the name must end with .base.eth, and when your network ID is 'base-sepolia', it must ends with .basetest.eth.
|
|
99
|
+
Do not suggest any alternatives and never try to register a Basename with another postfix. The prefix of the name must be unique so if the registration of the
|
|
100
|
+
Basename fails, you should prompt to try again with a more unique name.
|
|
101
|
+
`,
|
|
102
|
+
schema: schemas_1.RegisterBasenameSchema,
|
|
103
|
+
}),
|
|
104
|
+
__metadata("design:type", Function),
|
|
105
|
+
__metadata("design:paramtypes", [wallet_providers_1.EvmWalletProvider, void 0]),
|
|
106
|
+
__metadata("design:returntype", Promise)
|
|
107
|
+
], BasenameActionProvider.prototype, "register", null);
|
|
108
|
+
const basenameActionProvider = () => new BasenameActionProvider();
|
|
109
|
+
exports.basenameActionProvider = basenameActionProvider;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const viem_1 = require("viem");
|
|
4
|
+
const basenameActionProvider_1 = require("./basenameActionProvider");
|
|
5
|
+
const constants_1 = require("./constants");
|
|
6
|
+
const schemas_1 = require("./schemas");
|
|
7
|
+
const coinbase_sdk_1 = require("@coinbase/coinbase-sdk");
|
|
8
|
+
const MOCK_AMOUNT = "0.123";
|
|
9
|
+
const MOCK_BASENAME = "test-basename";
|
|
10
|
+
describe("Register Basename Input", () => {
|
|
11
|
+
it("should successfully parse valid input", () => {
|
|
12
|
+
const validInput = {
|
|
13
|
+
amount: MOCK_AMOUNT,
|
|
14
|
+
basename: MOCK_BASENAME,
|
|
15
|
+
};
|
|
16
|
+
const result = schemas_1.RegisterBasenameSchema.safeParse(validInput);
|
|
17
|
+
expect(result.success).toBe(true);
|
|
18
|
+
expect(result.data).toEqual(validInput);
|
|
19
|
+
});
|
|
20
|
+
it("should fail parsing empty input", () => {
|
|
21
|
+
const emptyInput = {};
|
|
22
|
+
const result = schemas_1.RegisterBasenameSchema.safeParse(emptyInput);
|
|
23
|
+
expect(result.success).toBe(false);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
describe("Register Basename Action", () => {
|
|
27
|
+
/**
|
|
28
|
+
* This is the default network.
|
|
29
|
+
*/
|
|
30
|
+
const NETWORK_ID = coinbase_sdk_1.Coinbase.networks.BaseMainnet;
|
|
31
|
+
/**
|
|
32
|
+
* This is a 40 character hexadecimal string that requires lowercase alpha characters.
|
|
33
|
+
*/
|
|
34
|
+
const ADDRESS_ID = "0xe6b2af36b3bb8d47206a129ff11d5a2de2a63c83";
|
|
35
|
+
let mockWallet;
|
|
36
|
+
const actionProvider = (0, basenameActionProvider_1.basenameActionProvider)();
|
|
37
|
+
beforeEach(() => {
|
|
38
|
+
mockWallet = {
|
|
39
|
+
getAddress: jest.fn().mockReturnValue(ADDRESS_ID),
|
|
40
|
+
getNetwork: jest.fn().mockReturnValue({ networkId: NETWORK_ID }),
|
|
41
|
+
sendTransaction: jest.fn(),
|
|
42
|
+
waitForTransactionReceipt: jest.fn(),
|
|
43
|
+
};
|
|
44
|
+
mockWallet.sendTransaction.mockResolvedValue("some-hash");
|
|
45
|
+
mockWallet.waitForTransactionReceipt.mockResolvedValue({});
|
|
46
|
+
});
|
|
47
|
+
it(`should Successfully respond with ${MOCK_BASENAME}.base.eth for network: ${coinbase_sdk_1.Coinbase.networks.BaseMainnet}`, async () => {
|
|
48
|
+
const args = {
|
|
49
|
+
amount: MOCK_AMOUNT,
|
|
50
|
+
basename: MOCK_BASENAME,
|
|
51
|
+
};
|
|
52
|
+
const name = `${MOCK_BASENAME}.base.eth`;
|
|
53
|
+
mockWallet.getNetwork.mockReturnValue({
|
|
54
|
+
protocolFamily: "evm",
|
|
55
|
+
networkId: coinbase_sdk_1.Coinbase.networks.BaseMainnet,
|
|
56
|
+
});
|
|
57
|
+
const response = await actionProvider.register(mockWallet, args);
|
|
58
|
+
expect(mockWallet.sendTransaction).toHaveBeenCalledWith({
|
|
59
|
+
to: constants_1.BASENAMES_REGISTRAR_CONTROLLER_ADDRESS_MAINNET,
|
|
60
|
+
data: (0, viem_1.encodeFunctionData)({
|
|
61
|
+
abi: constants_1.REGISTRAR_ABI,
|
|
62
|
+
functionName: "register",
|
|
63
|
+
args: [
|
|
64
|
+
{
|
|
65
|
+
name: MOCK_BASENAME,
|
|
66
|
+
owner: ADDRESS_ID,
|
|
67
|
+
duration: constants_1.REGISTRATION_DURATION,
|
|
68
|
+
resolver: constants_1.L2_RESOLVER_ADDRESS_MAINNET,
|
|
69
|
+
data: [
|
|
70
|
+
(0, viem_1.encodeFunctionData)({
|
|
71
|
+
abi: constants_1.L2_RESOLVER_ABI,
|
|
72
|
+
functionName: "setAddr",
|
|
73
|
+
args: [(0, viem_1.namehash)(name), ADDRESS_ID],
|
|
74
|
+
}),
|
|
75
|
+
(0, viem_1.encodeFunctionData)({
|
|
76
|
+
abi: constants_1.L2_RESOLVER_ABI,
|
|
77
|
+
functionName: "setName",
|
|
78
|
+
args: [(0, viem_1.namehash)(name), name],
|
|
79
|
+
}),
|
|
80
|
+
],
|
|
81
|
+
reverseRecord: true,
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
}),
|
|
85
|
+
value: (0, viem_1.parseEther)(MOCK_AMOUNT),
|
|
86
|
+
});
|
|
87
|
+
expect(mockWallet.waitForTransactionReceipt).toHaveBeenCalledWith("some-hash");
|
|
88
|
+
expect(response).toContain(`Successfully registered basename ${MOCK_BASENAME}.base.eth`);
|
|
89
|
+
expect(response).toContain(`for address ${ADDRESS_ID}`);
|
|
90
|
+
});
|
|
91
|
+
it(`should Successfully respond with ${MOCK_BASENAME}.basetest.eth for any other network`, async () => {
|
|
92
|
+
const args = {
|
|
93
|
+
amount: MOCK_AMOUNT,
|
|
94
|
+
basename: MOCK_BASENAME,
|
|
95
|
+
};
|
|
96
|
+
const name = `${MOCK_BASENAME}.basetest.eth`;
|
|
97
|
+
mockWallet.getNetwork.mockReturnValue({
|
|
98
|
+
protocolFamily: "evm",
|
|
99
|
+
networkId: "anything-else",
|
|
100
|
+
});
|
|
101
|
+
const response = await actionProvider.register(mockWallet, args);
|
|
102
|
+
expect(mockWallet.sendTransaction).toHaveBeenCalledWith({
|
|
103
|
+
to: constants_1.BASENAMES_REGISTRAR_CONTROLLER_ADDRESS_TESTNET,
|
|
104
|
+
data: (0, viem_1.encodeFunctionData)({
|
|
105
|
+
abi: constants_1.REGISTRAR_ABI,
|
|
106
|
+
functionName: "register",
|
|
107
|
+
args: [
|
|
108
|
+
{
|
|
109
|
+
name: MOCK_BASENAME,
|
|
110
|
+
owner: ADDRESS_ID,
|
|
111
|
+
duration: constants_1.REGISTRATION_DURATION,
|
|
112
|
+
resolver: constants_1.L2_RESOLVER_ADDRESS_TESTNET,
|
|
113
|
+
data: [
|
|
114
|
+
(0, viem_1.encodeFunctionData)({
|
|
115
|
+
abi: constants_1.L2_RESOLVER_ABI,
|
|
116
|
+
functionName: "setAddr",
|
|
117
|
+
args: [(0, viem_1.namehash)(name), ADDRESS_ID],
|
|
118
|
+
}),
|
|
119
|
+
(0, viem_1.encodeFunctionData)({
|
|
120
|
+
abi: constants_1.L2_RESOLVER_ABI,
|
|
121
|
+
functionName: "setName",
|
|
122
|
+
args: [(0, viem_1.namehash)(name), name],
|
|
123
|
+
}),
|
|
124
|
+
],
|
|
125
|
+
reverseRecord: true,
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
}),
|
|
129
|
+
value: (0, viem_1.parseEther)(MOCK_AMOUNT),
|
|
130
|
+
});
|
|
131
|
+
expect(mockWallet.waitForTransactionReceipt).toHaveBeenCalledWith("some-hash");
|
|
132
|
+
expect(response).toContain(`Successfully registered basename ${MOCK_BASENAME}.basetest.eth`);
|
|
133
|
+
expect(response).toContain(`for address ${ADDRESS_ID}`);
|
|
134
|
+
});
|
|
135
|
+
it("should fail with an error", async () => {
|
|
136
|
+
const args = {
|
|
137
|
+
amount: MOCK_AMOUNT,
|
|
138
|
+
basename: MOCK_BASENAME,
|
|
139
|
+
};
|
|
140
|
+
const error = new Error("Failed to register basename");
|
|
141
|
+
mockWallet.sendTransaction.mockRejectedValue(error);
|
|
142
|
+
await actionProvider.register(mockWallet, args);
|
|
143
|
+
expect(mockWallet.sendTransaction).toHaveBeenCalled();
|
|
144
|
+
expect(`Error registering basename: ${error}`);
|
|
145
|
+
});
|
|
146
|
+
});
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export declare const BASENAMES_REGISTRAR_CONTROLLER_ADDRESS_MAINNET = "0x4cCb0BB02FCABA27e82a56646E81d8c5bC4119a5";
|
|
2
|
+
export declare const BASENAMES_REGISTRAR_CONTROLLER_ADDRESS_TESTNET = "0x49aE3cC2e3AA768B1e5654f5D3C6002144A59581";
|
|
3
|
+
export declare const L2_RESOLVER_ADDRESS_MAINNET = "0xC6d566A56A1aFf6508b41f6c90ff131615583BCD";
|
|
4
|
+
export declare const L2_RESOLVER_ADDRESS_TESTNET = "0x6533C94869D28fAA8dF77cc63f9e2b2D6Cf77eBA";
|
|
5
|
+
export declare const REGISTRATION_DURATION = 31557600n;
|
|
6
|
+
export declare const L2_RESOLVER_ABI: {
|
|
7
|
+
inputs: {
|
|
8
|
+
internalType: string;
|
|
9
|
+
name: string;
|
|
10
|
+
type: string;
|
|
11
|
+
}[];
|
|
12
|
+
name: string;
|
|
13
|
+
outputs: never[];
|
|
14
|
+
stateMutability: string;
|
|
15
|
+
type: string;
|
|
16
|
+
}[];
|
|
17
|
+
export declare const REGISTRAR_ABI: readonly [{
|
|
18
|
+
readonly inputs: readonly [{
|
|
19
|
+
readonly components: readonly [{
|
|
20
|
+
readonly internalType: "string";
|
|
21
|
+
readonly name: "name";
|
|
22
|
+
readonly type: "string";
|
|
23
|
+
}, {
|
|
24
|
+
readonly internalType: "address";
|
|
25
|
+
readonly name: "owner";
|
|
26
|
+
readonly type: "address";
|
|
27
|
+
}, {
|
|
28
|
+
readonly internalType: "uint256";
|
|
29
|
+
readonly name: "duration";
|
|
30
|
+
readonly type: "uint256";
|
|
31
|
+
}, {
|
|
32
|
+
readonly internalType: "address";
|
|
33
|
+
readonly name: "resolver";
|
|
34
|
+
readonly type: "address";
|
|
35
|
+
}, {
|
|
36
|
+
readonly internalType: "bytes[]";
|
|
37
|
+
readonly name: "data";
|
|
38
|
+
readonly type: "bytes[]";
|
|
39
|
+
}, {
|
|
40
|
+
readonly internalType: "bool";
|
|
41
|
+
readonly name: "reverseRecord";
|
|
42
|
+
readonly type: "bool";
|
|
43
|
+
}];
|
|
44
|
+
readonly internalType: "struct RegistrarController.RegisterRequest";
|
|
45
|
+
readonly name: "request";
|
|
46
|
+
readonly type: "tuple";
|
|
47
|
+
}];
|
|
48
|
+
readonly name: "register";
|
|
49
|
+
readonly outputs: readonly [];
|
|
50
|
+
readonly stateMutability: "payable";
|
|
51
|
+
readonly type: "function";
|
|
52
|
+
}];
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.REGISTRAR_ABI = exports.L2_RESOLVER_ABI = exports.REGISTRATION_DURATION = exports.L2_RESOLVER_ADDRESS_TESTNET = exports.L2_RESOLVER_ADDRESS_MAINNET = exports.BASENAMES_REGISTRAR_CONTROLLER_ADDRESS_TESTNET = exports.BASENAMES_REGISTRAR_CONTROLLER_ADDRESS_MAINNET = void 0;
|
|
4
|
+
// Contract addresses
|
|
5
|
+
exports.BASENAMES_REGISTRAR_CONTROLLER_ADDRESS_MAINNET = "0x4cCb0BB02FCABA27e82a56646E81d8c5bC4119a5";
|
|
6
|
+
exports.BASENAMES_REGISTRAR_CONTROLLER_ADDRESS_TESTNET = "0x49aE3cC2e3AA768B1e5654f5D3C6002144A59581";
|
|
7
|
+
exports.L2_RESOLVER_ADDRESS_MAINNET = "0xC6d566A56A1aFf6508b41f6c90ff131615583BCD";
|
|
8
|
+
exports.L2_RESOLVER_ADDRESS_TESTNET = "0x6533C94869D28fAA8dF77cc63f9e2b2D6Cf77eBA";
|
|
9
|
+
// Default registration duration (1 year in seconds)
|
|
10
|
+
exports.REGISTRATION_DURATION = 31557600n;
|
|
11
|
+
// Relevant ABI for L2 Resolver Contract.
|
|
12
|
+
exports.L2_RESOLVER_ABI = [
|
|
13
|
+
{
|
|
14
|
+
inputs: [
|
|
15
|
+
{ internalType: "bytes32", name: "node", type: "bytes32" },
|
|
16
|
+
{ internalType: "address", name: "a", type: "address" },
|
|
17
|
+
],
|
|
18
|
+
name: "setAddr",
|
|
19
|
+
outputs: [],
|
|
20
|
+
stateMutability: "nonpayable",
|
|
21
|
+
type: "function",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
inputs: [
|
|
25
|
+
{ internalType: "bytes32", name: "node", type: "bytes32" },
|
|
26
|
+
{ internalType: "string", name: "newName", type: "string" },
|
|
27
|
+
],
|
|
28
|
+
name: "setName",
|
|
29
|
+
outputs: [],
|
|
30
|
+
stateMutability: "nonpayable",
|
|
31
|
+
type: "function",
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
// Relevant ABI for Basenames Registrar Controller Contract.
|
|
35
|
+
exports.REGISTRAR_ABI = [
|
|
36
|
+
{
|
|
37
|
+
inputs: [
|
|
38
|
+
{
|
|
39
|
+
components: [
|
|
40
|
+
{
|
|
41
|
+
internalType: "string",
|
|
42
|
+
name: "name",
|
|
43
|
+
type: "string",
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
internalType: "address",
|
|
47
|
+
name: "owner",
|
|
48
|
+
type: "address",
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
internalType: "uint256",
|
|
52
|
+
name: "duration",
|
|
53
|
+
type: "uint256",
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
internalType: "address",
|
|
57
|
+
name: "resolver",
|
|
58
|
+
type: "address",
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
internalType: "bytes[]",
|
|
62
|
+
name: "data",
|
|
63
|
+
type: "bytes[]",
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
internalType: "bool",
|
|
67
|
+
name: "reverseRecord",
|
|
68
|
+
type: "bool",
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
internalType: "struct RegistrarController.RegisterRequest",
|
|
72
|
+
name: "request",
|
|
73
|
+
type: "tuple",
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
name: "register",
|
|
77
|
+
outputs: [],
|
|
78
|
+
stateMutability: "payable",
|
|
79
|
+
type: "function",
|
|
80
|
+
},
|
|
81
|
+
];
|
|
@@ -0,0 +1,18 @@
|
|
|
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("./basenameActionProvider"), exports);
|
|
18
|
+
__exportStar(require("./schemas"), exports);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Input schema for registering a Basename.
|
|
4
|
+
*/
|
|
5
|
+
export declare const RegisterBasenameSchema: z.ZodObject<{
|
|
6
|
+
basename: z.ZodString;
|
|
7
|
+
amount: z.ZodDefault<z.ZodString>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
amount: string;
|
|
10
|
+
basename: string;
|
|
11
|
+
}, {
|
|
12
|
+
basename: string;
|
|
13
|
+
amount?: string | undefined;
|
|
14
|
+
}>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RegisterBasenameSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
/**
|
|
6
|
+
* Input schema for registering a Basename.
|
|
7
|
+
*/
|
|
8
|
+
exports.RegisterBasenameSchema = zod_1.z
|
|
9
|
+
.object({
|
|
10
|
+
basename: zod_1.z.string().describe("The Basename to assign to the agent"),
|
|
11
|
+
amount: zod_1.z.string().default("0.002").describe("The amount of ETH to pay for registration"),
|
|
12
|
+
})
|
|
13
|
+
.strip()
|
|
14
|
+
.describe("Instructions for registering a Basename");
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ActionProvider } from "../actionProvider";
|
|
3
|
+
import { Network } from "../../network";
|
|
4
|
+
import { CdpProviderConfig, EvmWalletProvider } from "../../wallet-providers";
|
|
5
|
+
import { AddressReputationSchema, RequestFaucetFundsSchema } from "./schemas";
|
|
6
|
+
/**
|
|
7
|
+
* CdpApiActionProvider is an action provider for CDP API.
|
|
8
|
+
*
|
|
9
|
+
* This provider is used for any action that uses the CDP API, but does not require a CDP Wallet.
|
|
10
|
+
*/
|
|
11
|
+
export declare class CdpApiActionProvider extends ActionProvider<EvmWalletProvider> {
|
|
12
|
+
/**
|
|
13
|
+
* Constructor for the CdpApiActionProvider class.
|
|
14
|
+
*
|
|
15
|
+
* @param config - The configuration options for the CdpApiActionProvider.
|
|
16
|
+
*/
|
|
17
|
+
constructor(config?: CdpProviderConfig);
|
|
18
|
+
/**
|
|
19
|
+
* Check the reputation of an address.
|
|
20
|
+
*
|
|
21
|
+
* @param args - The input arguments for the action
|
|
22
|
+
* @returns A string containing reputation data or error message
|
|
23
|
+
*/
|
|
24
|
+
addressReputation(args: z.infer<typeof AddressReputationSchema>): Promise<string>;
|
|
25
|
+
/**
|
|
26
|
+
* Requests test tokens from the faucet for the default address in the wallet.
|
|
27
|
+
*
|
|
28
|
+
* @param walletProvider - The wallet provider to request funds from.
|
|
29
|
+
* @param args - The input arguments for the action.
|
|
30
|
+
* @returns A confirmation message with transaction details.
|
|
31
|
+
*/
|
|
32
|
+
faucet(walletProvider: EvmWalletProvider, args: z.infer<typeof RequestFaucetFundsSchema>): Promise<string>;
|
|
33
|
+
/**
|
|
34
|
+
* Checks if the Cdp action provider supports the given network.
|
|
35
|
+
*
|
|
36
|
+
* @param _ - The network to check.
|
|
37
|
+
* @returns True if the Cdp action provider supports the network, false otherwise.
|
|
38
|
+
*/
|
|
39
|
+
supportsNetwork: (_: Network) => boolean;
|
|
40
|
+
}
|
|
41
|
+
export declare const cdpApiActionProvider: (config?: CdpProviderConfig) => CdpApiActionProvider;
|
|
@@ -0,0 +1,111 @@
|
|
|
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.cdpApiActionProvider = exports.CdpApiActionProvider = void 0;
|
|
13
|
+
const coinbase_sdk_1 = require("@coinbase/coinbase-sdk");
|
|
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
|
+
* CdpApiActionProvider is an action provider for CDP API.
|
|
21
|
+
*
|
|
22
|
+
* This provider is used for any action that uses the CDP API, but does not require a CDP Wallet.
|
|
23
|
+
*/
|
|
24
|
+
class CdpApiActionProvider extends actionProvider_1.ActionProvider {
|
|
25
|
+
/**
|
|
26
|
+
* Constructor for the CdpApiActionProvider class.
|
|
27
|
+
*
|
|
28
|
+
* @param config - The configuration options for the CdpApiActionProvider.
|
|
29
|
+
*/
|
|
30
|
+
constructor(config = {}) {
|
|
31
|
+
super("cdp_api", []);
|
|
32
|
+
/**
|
|
33
|
+
* Checks if the Cdp action provider supports the given network.
|
|
34
|
+
*
|
|
35
|
+
* @param _ - The network to check.
|
|
36
|
+
* @returns True if the Cdp action provider supports the network, false otherwise.
|
|
37
|
+
*/
|
|
38
|
+
this.supportsNetwork = (_) => true;
|
|
39
|
+
if (config.apiKeyName && config.apiKeyPrivateKey) {
|
|
40
|
+
coinbase_sdk_1.Coinbase.configure({ apiKeyName: config.apiKeyName, privateKey: config.apiKeyPrivateKey });
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
coinbase_sdk_1.Coinbase.configureFromJson();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check the reputation of an address.
|
|
48
|
+
*
|
|
49
|
+
* @param args - The input arguments for the action
|
|
50
|
+
* @returns A string containing reputation data or error message
|
|
51
|
+
*/
|
|
52
|
+
async addressReputation(args) {
|
|
53
|
+
try {
|
|
54
|
+
const address = new coinbase_sdk_1.ExternalAddress(args.network, args.address);
|
|
55
|
+
const reputation = await address.reputation();
|
|
56
|
+
return reputation.toString();
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
return `Error checking address reputation: ${error}`;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Requests test tokens from the faucet for the default address in the wallet.
|
|
64
|
+
*
|
|
65
|
+
* @param walletProvider - The wallet provider to request funds from.
|
|
66
|
+
* @param args - The input arguments for the action.
|
|
67
|
+
* @returns A confirmation message with transaction details.
|
|
68
|
+
*/
|
|
69
|
+
async faucet(walletProvider, args) {
|
|
70
|
+
try {
|
|
71
|
+
const address = new coinbase_sdk_1.ExternalAddress(walletProvider.getNetwork().networkId, walletProvider.getAddress());
|
|
72
|
+
const faucetTx = await address.faucet(args.assetId || undefined);
|
|
73
|
+
const result = await faucetTx.wait();
|
|
74
|
+
return `Received ${args.assetId || "ETH"} from the faucet. Transaction: ${result.getTransactionLink()}`;
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
return `Error requesting faucet funds: ${error}`;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.CdpApiActionProvider = CdpApiActionProvider;
|
|
82
|
+
__decorate([
|
|
83
|
+
(0, actionDecorator_1.CreateAction)({
|
|
84
|
+
name: "address_reputation",
|
|
85
|
+
description: `
|
|
86
|
+
This tool checks the reputation of an address on a given network. It takes:
|
|
87
|
+
|
|
88
|
+
- network: The network to check the address on (e.g. "base-mainnet")
|
|
89
|
+
- address: The Ethereum address to check
|
|
90
|
+
`,
|
|
91
|
+
schema: schemas_1.AddressReputationSchema,
|
|
92
|
+
}),
|
|
93
|
+
__metadata("design:type", Function),
|
|
94
|
+
__metadata("design:paramtypes", [void 0]),
|
|
95
|
+
__metadata("design:returntype", Promise)
|
|
96
|
+
], CdpApiActionProvider.prototype, "addressReputation", null);
|
|
97
|
+
__decorate([
|
|
98
|
+
(0, actionDecorator_1.CreateAction)({
|
|
99
|
+
name: "request_faucet_funds",
|
|
100
|
+
description: `This tool will request test tokens from the faucet for the default address in the wallet. It takes the wallet and asset ID as input.
|
|
101
|
+
If no asset ID is provided the faucet defaults to ETH. Faucet is only allowed on 'base-sepolia' and can only provide asset ID 'eth' or 'usdc'.
|
|
102
|
+
You are not allowed to faucet with any other network or asset ID. If you are on another network, suggest that the user sends you some ETH
|
|
103
|
+
from another wallet and provide the user with your wallet details.`,
|
|
104
|
+
schema: schemas_1.RequestFaucetFundsSchema,
|
|
105
|
+
}),
|
|
106
|
+
__metadata("design:type", Function),
|
|
107
|
+
__metadata("design:paramtypes", [wallet_providers_1.EvmWalletProvider, void 0]),
|
|
108
|
+
__metadata("design:returntype", Promise)
|
|
109
|
+
], CdpApiActionProvider.prototype, "faucet", null);
|
|
110
|
+
const cdpApiActionProvider = (config = {}) => new CdpApiActionProvider(config);
|
|
111
|
+
exports.cdpApiActionProvider = cdpApiActionProvider;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|