chainai 0.0.1

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.
Files changed (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/dist/commands/broadcast.d.ts +20 -0
  4. package/dist/commands/broadcast.d.ts.map +1 -0
  5. package/dist/commands/broadcast.js +35 -0
  6. package/dist/commands/broadcast.js.map +1 -0
  7. package/dist/commands/gen-wallet.d.ts +9 -0
  8. package/dist/commands/gen-wallet.d.ts.map +1 -0
  9. package/dist/commands/gen-wallet.js +17 -0
  10. package/dist/commands/gen-wallet.js.map +1 -0
  11. package/dist/commands/get-balance.d.ts +24 -0
  12. package/dist/commands/get-balance.d.ts.map +1 -0
  13. package/dist/commands/get-balance.js +82 -0
  14. package/dist/commands/get-balance.js.map +1 -0
  15. package/dist/commands/send.d.ts +27 -0
  16. package/dist/commands/send.d.ts.map +1 -0
  17. package/dist/commands/send.js +108 -0
  18. package/dist/commands/send.js.map +1 -0
  19. package/dist/commands/sign-message.d.ts +17 -0
  20. package/dist/commands/sign-message.d.ts.map +1 -0
  21. package/dist/commands/sign-message.js +36 -0
  22. package/dist/commands/sign-message.js.map +1 -0
  23. package/dist/commands/sign-transaction.d.ts +22 -0
  24. package/dist/commands/sign-transaction.d.ts.map +1 -0
  25. package/dist/commands/sign-transaction.js +31 -0
  26. package/dist/commands/sign-transaction.js.map +1 -0
  27. package/dist/commands/sign-typed-data.d.ts +22 -0
  28. package/dist/commands/sign-typed-data.d.ts.map +1 -0
  29. package/dist/commands/sign-typed-data.js +35 -0
  30. package/dist/commands/sign-typed-data.js.map +1 -0
  31. package/dist/commands/sign.d.ts +25 -0
  32. package/dist/commands/sign.d.ts.map +1 -0
  33. package/dist/commands/sign.js +36 -0
  34. package/dist/commands/sign.js.map +1 -0
  35. package/dist/commands/swap-order-status.d.ts +23 -0
  36. package/dist/commands/swap-order-status.d.ts.map +1 -0
  37. package/dist/commands/swap-order-status.js +35 -0
  38. package/dist/commands/swap-order-status.js.map +1 -0
  39. package/dist/commands/swap.d.ts +32 -0
  40. package/dist/commands/swap.d.ts.map +1 -0
  41. package/dist/commands/swap.js +119 -0
  42. package/dist/commands/swap.js.map +1 -0
  43. package/dist/commands/tx-status.d.ts +25 -0
  44. package/dist/commands/tx-status.d.ts.map +1 -0
  45. package/dist/commands/tx-status.js +54 -0
  46. package/dist/commands/tx-status.js.map +1 -0
  47. package/dist/commands/who-am-i.d.ts +12 -0
  48. package/dist/commands/who-am-i.d.ts.map +1 -0
  49. package/dist/commands/who-am-i.js +14 -0
  50. package/dist/commands/who-am-i.js.map +1 -0
  51. package/dist/configs.d.ts +99 -0
  52. package/dist/configs.d.ts.map +1 -0
  53. package/dist/configs.js +18 -0
  54. package/dist/configs.js.map +1 -0
  55. package/dist/index.d.ts +3 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +404 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/oneInchFusion/configs.d.ts +3 -0
  60. package/dist/oneInchFusion/configs.d.ts.map +1 -0
  61. package/dist/oneInchFusion/configs.js +6 -0
  62. package/dist/oneInchFusion/configs.js.map +1 -0
  63. package/dist/oneInchFusion/oneInchFusion.d.ts +20 -0
  64. package/dist/oneInchFusion/oneInchFusion.d.ts.map +1 -0
  65. package/dist/oneInchFusion/oneInchFusion.js +164 -0
  66. package/dist/oneInchFusion/oneInchFusion.js.map +1 -0
  67. package/dist/oneInchFusion/oneInchProvider.d.ts +11 -0
  68. package/dist/oneInchFusion/oneInchProvider.d.ts.map +1 -0
  69. package/dist/oneInchFusion/oneInchProvider.js +34 -0
  70. package/dist/oneInchFusion/oneInchProvider.js.map +1 -0
  71. package/dist/oneInchFusion/oneInchTypes.d.ts +26 -0
  72. package/dist/oneInchFusion/oneInchTypes.d.ts.map +1 -0
  73. package/dist/oneInchFusion/oneInchTypes.js +3 -0
  74. package/dist/oneInchFusion/oneInchTypes.js.map +1 -0
  75. package/dist/utils.d.ts +68 -0
  76. package/dist/utils.d.ts.map +1 -0
  77. package/dist/utils.js +119 -0
  78. package/dist/utils.js.map +1 -0
  79. package/package.json +38 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Kosala Hemachandra
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # clawhub-eth-skill
2
+
3
+ Ethereum skill for clawhub
@@ -0,0 +1,20 @@
1
+ import type { Hex } from 'viem';
2
+ export interface BroadcastInput {
3
+ serializedTransaction: Hex;
4
+ network?: string;
5
+ }
6
+ export interface BroadcastResult {
7
+ transactionHash: string;
8
+ network: string;
9
+ explorerUrl: string;
10
+ }
11
+ /**
12
+ * Broadcasts a serialized signed transaction to the network.
13
+ *
14
+ * Takes a hex-encoded RLP-serialized signed transaction (e.g. from `sign-transaction` or `send`)
15
+ * and submits it via `eth_sendRawTransaction`.
16
+ *
17
+ * Returns the transaction hash on success.
18
+ */
19
+ export declare function broadcast(input: BroadcastInput): Promise<BroadcastResult>;
20
+ //# sourceMappingURL=broadcast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../src/commands/broadcast.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAOhC,MAAM,WAAW,cAAc;IAC7B,qBAAqB,EAAE,GAAG,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,eAAe,CAAC,CA2B1B"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.broadcast = broadcast;
4
+ const viem_1 = require("viem");
5
+ const utils_1 = require("../utils");
6
+ /**
7
+ * Broadcasts a serialized signed transaction to the network.
8
+ *
9
+ * Takes a hex-encoded RLP-serialized signed transaction (e.g. from `sign-transaction` or `send`)
10
+ * and submits it via `eth_sendRawTransaction`.
11
+ *
12
+ * Returns the transaction hash on success.
13
+ */
14
+ async function broadcast(input) {
15
+ const { serializedTransaction, network = 'mainnet' } = input;
16
+ if (!serializedTransaction || !(0, viem_1.isHex)(serializedTransaction)) {
17
+ throw new Error('Serialized transaction must be a valid 0x-prefixed hex string');
18
+ }
19
+ const chain = (0, utils_1.resolveNetwork)(network);
20
+ const networkConfig = (0, utils_1.getNetworkConfig)(chain);
21
+ const client = (0, utils_1.createNetworkClient)(chain, networkConfig);
22
+ const transactionHash = await client.sendRawTransaction({
23
+ serializedTransaction,
24
+ });
25
+ const explorerBase = chain.blockExplorers?.default?.url;
26
+ const explorerUrl = explorerBase
27
+ ? `${explorerBase}/tx/${transactionHash}`
28
+ : `https://etherscan.io/tx/${transactionHash}`;
29
+ return {
30
+ transactionHash,
31
+ network: chain.name,
32
+ explorerUrl,
33
+ };
34
+ }
35
+ //# sourceMappingURL=broadcast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../../src/commands/broadcast.ts"],"names":[],"mappings":";;AA2BA,8BA6BC;AAxDD,+BAA6B;AAE7B,oCAIkB;AAalB;;;;;;;GAOG;AACI,KAAK,UAAU,SAAS,CAC7B,KAAqB;IAErB,MAAM,EAAE,qBAAqB,EAAE,OAAO,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;IAE7D,IAAI,CAAC,qBAAqB,IAAI,CAAC,IAAA,YAAK,EAAC,qBAAqB,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,IAAA,sBAAc,EAAC,OAAO,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,IAAA,wBAAgB,EAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAA,2BAAmB,EAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAEzD,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC;QACtD,qBAAqB;KACtB,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,KAAK,CAAC,cAAc,EAAE,OAAO,EAAE,GAAG,CAAC;IACxD,MAAM,WAAW,GAAG,YAAY;QAC9B,CAAC,CAAC,GAAG,YAAY,OAAO,eAAe,EAAE;QACzC,CAAC,CAAC,2BAA2B,eAAe,EAAE,CAAC;IAEjD,OAAO;QACL,eAAe;QACf,OAAO,EAAE,KAAK,CAAC,IAAI;QACnB,WAAW;KACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface GenWalletResult {
2
+ address: string;
3
+ privateKey: string;
4
+ }
5
+ /**
6
+ * Generates a new random wallet (private key + address).
7
+ */
8
+ export declare function genWallet(): GenWalletResult;
9
+ //# sourceMappingURL=gen-wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen-wallet.d.ts","sourceRoot":"","sources":["../../src/commands/gen-wallet.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,eAAe,CAO3C"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.genWallet = genWallet;
4
+ const accounts_1 = require("viem/accounts");
5
+ const accounts_2 = require("viem/accounts");
6
+ /**
7
+ * Generates a new random wallet (private key + address).
8
+ */
9
+ function genWallet() {
10
+ const privateKey = (0, accounts_2.generatePrivateKey)();
11
+ const account = (0, accounts_1.privateKeyToAccount)(privateKey);
12
+ return {
13
+ address: account.address,
14
+ privateKey,
15
+ };
16
+ }
17
+ //# sourceMappingURL=gen-wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gen-wallet.js","sourceRoot":"","sources":["../../src/commands/gen-wallet.ts"],"names":[],"mappings":";;AAWA,8BAOC;AAlBD,4CAAoD;AACpD,4CAAmD;AAOnD;;GAEG;AACH,SAAgB,SAAS;IACvB,MAAM,UAAU,GAAG,IAAA,6BAAkB,GAAE,CAAC;IACxC,MAAM,OAAO,GAAG,IAAA,8BAAmB,EAAC,UAAU,CAAC,CAAC;IAChD,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { Hex } from 'viem';
2
+ export interface GetBalanceInput {
3
+ address: Hex;
4
+ network?: string;
5
+ token?: string;
6
+ all?: boolean;
7
+ }
8
+ export interface GetBalanceResult {
9
+ address: string;
10
+ network: string;
11
+ token: string;
12
+ balance: string;
13
+ rawBalance: string;
14
+ decimals: number;
15
+ contract: string | null;
16
+ }
17
+ /**
18
+ * Fetches the balance of a native token or ERC-20 token for a given address.
19
+ *
20
+ * - For native tokens (ETH, BNB, etc.), uses the node RPC via viem.
21
+ * - For ERC-20 tokens, uses the MEW balances API.
22
+ */
23
+ export declare function getBalance(input: GetBalanceInput): Promise<GetBalanceResult | GetBalanceResult[]>;
24
+ //# sourceMappingURL=get-balance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-balance.d.ts","sourceRoot":"","sources":["../../src/commands/get-balance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAS,MAAM,MAAM,CAAC;AASvC,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,GAAG,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,EAAE,CAAC,CAmEhD"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBalance = getBalance;
4
+ const viem_1 = require("viem");
5
+ const utils_1 = require("../utils");
6
+ /**
7
+ * Fetches the balance of a native token or ERC-20 token for a given address.
8
+ *
9
+ * - For native tokens (ETH, BNB, etc.), uses the node RPC via viem.
10
+ * - For ERC-20 tokens, uses the MEW balances API.
11
+ */
12
+ async function getBalance(input) {
13
+ const { address, network = 'mainnet', token = utils_1.NATIVE_TOKEN_ADDRESS, all = false, } = input;
14
+ if (!address || !address.startsWith('0x')) {
15
+ throw new Error('Address must be a valid 0x-prefixed hex string');
16
+ }
17
+ const chain = (0, utils_1.resolveNetwork)(network);
18
+ const networkConfig = (0, utils_1.getNetworkConfig)(chain);
19
+ if (all) {
20
+ return getAllBalances(address, chain, networkConfig);
21
+ }
22
+ if (!(0, viem_1.isAddress)(token)) {
23
+ throw new Error(`Token must be a valid 0x-prefixed address. Use ${utils_1.NATIVE_TOKEN_ADDRESS} for native token.`);
24
+ }
25
+ const isNative = token.toLowerCase() === utils_1.NATIVE_TOKEN_ADDRESS;
26
+ if (isNative) {
27
+ const client = (0, utils_1.createNetworkClient)(chain, networkConfig);
28
+ const balanceWei = await client.getBalance({ address });
29
+ const formatted = (0, viem_1.formatUnits)(balanceWei, chain.nativeCurrency.decimals);
30
+ return {
31
+ address,
32
+ network: chain.name,
33
+ token: chain.nativeCurrency.symbol,
34
+ balance: formatted,
35
+ rawBalance: balanceWei.toString(),
36
+ decimals: chain.nativeCurrency.decimals,
37
+ contract: utils_1.NATIVE_TOKEN_ADDRESS,
38
+ };
39
+ }
40
+ // ERC-20 token: look up from balances API
41
+ const balances = await (0, utils_1.getTokenBalances)(chain.id, address);
42
+ const tokenLower = token.toLowerCase();
43
+ const found = balances.find((t) => t.contract.toLowerCase() === tokenLower);
44
+ if (!found) {
45
+ throw new Error(`Token "${token}" not found for address ${address} on ${chain.name}. The address may not hold this token.`);
46
+ }
47
+ const rawBalance = BigInt(found.balance);
48
+ const formatted = (0, viem_1.formatUnits)(rawBalance, found.decimals);
49
+ return {
50
+ address,
51
+ network: chain.name,
52
+ token: found.symbol,
53
+ balance: formatted,
54
+ rawBalance: rawBalance.toString(),
55
+ decimals: found.decimals,
56
+ contract: found.contract,
57
+ };
58
+ }
59
+ /**
60
+ * Fetches all token balances (native + ERC-20) for a given address.
61
+ */
62
+ async function getAllBalances(address, chain, networkConfig) {
63
+ const [tokenBalances] = await Promise.all([
64
+ (0, utils_1.getTokenBalances)(chain.id, address),
65
+ ]);
66
+ const results = [];
67
+ // All balances including Native
68
+ for (const t of tokenBalances) {
69
+ const raw = BigInt(t.balance);
70
+ results.push({
71
+ address,
72
+ network: chain.name,
73
+ token: t.symbol,
74
+ balance: (0, viem_1.formatUnits)(raw, t.decimals),
75
+ rawBalance: raw.toString(),
76
+ decimals: t.decimals,
77
+ contract: t.contract,
78
+ });
79
+ }
80
+ return results;
81
+ }
82
+ //# sourceMappingURL=get-balance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-balance.js","sourceRoot":"","sources":["../../src/commands/get-balance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { Hex } from 'viem';
2
+ export interface SendInput {
3
+ privateKey: Hex;
4
+ to: Hex;
5
+ token: string;
6
+ amount: string;
7
+ network?: string;
8
+ }
9
+ export interface SendResult {
10
+ from: string;
11
+ to: string;
12
+ token: string;
13
+ amount: string;
14
+ network: string;
15
+ serializedTransaction: string;
16
+ }
17
+ /**
18
+ * Builds and signs a transaction to send native tokens or ERC-20 tokens.
19
+ *
20
+ * - For native tokens (ETH, BNB), creates a simple value transfer.
21
+ * - For ERC-20 tokens, encodes a `transfer(address, uint256)` call.
22
+ *
23
+ * Fetches nonce, gas estimate, and fee data from the network RPC.
24
+ * Returns the serialized signed transaction ready to broadcast.
25
+ */
26
+ export declare function send(input: SendInput): Promise<SendResult>;
27
+ //# sourceMappingURL=send.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AA6BhC,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,GAAG,CAAC;IAChB,EAAE,EAAE,GAAG,CAAC;IACR,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAsB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CA4FhE"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.send = send;
4
+ const viem_1 = require("viem");
5
+ const utils_1 = require("../utils");
6
+ const ERC20_ABI = [
7
+ {
8
+ name: 'transfer',
9
+ type: 'function',
10
+ inputs: [
11
+ { name: 'to', type: 'address' },
12
+ { name: 'amount', type: 'uint256' },
13
+ ],
14
+ outputs: [{ name: '', type: 'bool' }],
15
+ stateMutability: 'nonpayable',
16
+ },
17
+ {
18
+ name: 'decimals',
19
+ type: 'function',
20
+ inputs: [],
21
+ outputs: [{ name: '', type: 'uint8' }],
22
+ stateMutability: 'view',
23
+ },
24
+ ];
25
+ /**
26
+ * Builds and signs a transaction to send native tokens or ERC-20 tokens.
27
+ *
28
+ * - For native tokens (ETH, BNB), creates a simple value transfer.
29
+ * - For ERC-20 tokens, encodes a `transfer(address, uint256)` call.
30
+ *
31
+ * Fetches nonce, gas estimate, and fee data from the network RPC.
32
+ * Returns the serialized signed transaction ready to broadcast.
33
+ */
34
+ async function send(input) {
35
+ const { privateKey, to, token, amount, network = 'mainnet' } = input;
36
+ const account = (0, utils_1.validateAndCreateAccount)(privateKey);
37
+ if (!(0, viem_1.isAddress)(to)) {
38
+ throw new Error('Recipient "to" must be a valid 0x-prefixed address');
39
+ }
40
+ if (!(0, viem_1.isAddress)(token)) {
41
+ throw new Error(`Token must be a valid 0x-prefixed address. Use ${utils_1.NATIVE_TOKEN_ADDRESS} for native token.`);
42
+ }
43
+ if (!amount || isNaN(Number(amount)) || Number(amount) <= 0) {
44
+ throw new Error('Amount must be a positive number');
45
+ }
46
+ const chain = (0, utils_1.resolveNetwork)(network);
47
+ const networkConfig = (0, utils_1.getNetworkConfig)(chain);
48
+ const client = (0, utils_1.createNetworkClient)(chain, networkConfig);
49
+ const isNative = token.toLowerCase() === utils_1.NATIVE_TOKEN_ADDRESS;
50
+ const nonce = await client.getTransactionCount({ address: account.address });
51
+ const feeData = await client.estimateFeesPerGas();
52
+ let txRequest;
53
+ if (isNative) {
54
+ const value = (0, viem_1.parseUnits)(amount, chain.nativeCurrency.decimals);
55
+ const gas = await client.estimateGas({
56
+ account: account.address,
57
+ to: to,
58
+ value,
59
+ });
60
+ txRequest = {
61
+ to,
62
+ value,
63
+ gas,
64
+ nonce,
65
+ chainId: chain.id,
66
+ maxFeePerGas: feeData.maxFeePerGas,
67
+ maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,
68
+ };
69
+ }
70
+ else {
71
+ // ERC-20: read decimals then encode transfer
72
+ const decimals = await client.readContract({
73
+ address: token,
74
+ abi: ERC20_ABI,
75
+ functionName: 'decimals',
76
+ });
77
+ const rawAmount = (0, viem_1.parseUnits)(amount, decimals);
78
+ const data = (0, viem_1.encodeFunctionData)({
79
+ abi: ERC20_ABI,
80
+ functionName: 'transfer',
81
+ args: [to, rawAmount],
82
+ });
83
+ const gas = await client.estimateGas({
84
+ account: account.address,
85
+ to: token,
86
+ data,
87
+ });
88
+ txRequest = {
89
+ to: token,
90
+ data,
91
+ gas,
92
+ nonce,
93
+ chainId: chain.id,
94
+ maxFeePerGas: feeData.maxFeePerGas,
95
+ maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,
96
+ };
97
+ }
98
+ const serializedTransaction = await account.signTransaction(txRequest);
99
+ return {
100
+ from: account.address,
101
+ to,
102
+ token,
103
+ amount,
104
+ network: chain.name,
105
+ serializedTransaction,
106
+ };
107
+ }
108
+ //# sourceMappingURL=send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { Hex } from 'viem';
2
+ export interface SignMessageInput {
3
+ privateKey: Hex;
4
+ message: string;
5
+ raw?: boolean;
6
+ }
7
+ export interface SignMessageResult {
8
+ address: string;
9
+ message: string;
10
+ signature: string;
11
+ }
12
+ /**
13
+ * Signs a message using the provided private key via viem.
14
+ * Returns the signer address, original message, and resulting signature.
15
+ */
16
+ export declare function signMessage(input: SignMessageInput): Promise<SignMessageResult>;
17
+ //# sourceMappingURL=sign-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign-message.d.ts","sourceRoot":"","sources":["../../src/commands/sign-message.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAGhC,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,GAAG,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAgC5B"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.signMessage = signMessage;
4
+ const viem_1 = require("viem");
5
+ const utils_1 = require("../utils");
6
+ /**
7
+ * Signs a message using the provided private key via viem.
8
+ * Returns the signer address, original message, and resulting signature.
9
+ */
10
+ async function signMessage(input) {
11
+ const { privateKey, message } = input;
12
+ if (!message || message.length === 0) {
13
+ throw new Error('Message must be a non-empty string');
14
+ }
15
+ const account = (0, utils_1.validateAndCreateAccount)(privateKey);
16
+ if (input.raw) {
17
+ if (!(0, viem_1.isHex)(message, { strict: true })) {
18
+ throw new Error('Message must be a valid hex string (0x-prefixed) when using raw mode');
19
+ }
20
+ const signature = await account.signMessage({
21
+ message: { raw: message },
22
+ });
23
+ return {
24
+ address: account.address,
25
+ message,
26
+ signature,
27
+ };
28
+ }
29
+ const signature = await account.signMessage({ message });
30
+ return {
31
+ address: account.address,
32
+ message,
33
+ signature,
34
+ };
35
+ }
36
+ //# sourceMappingURL=sign-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign-message.js","sourceRoot":"","sources":["../../src/commands/sign-message.ts"],"names":[],"mappings":";;AAoBA,kCAkCC;AAtDD,+BAA6B;AAE7B,oCAAoD;AAcpD;;;GAGG;AACI,KAAK,UAAU,WAAW,CAC/B,KAAuB;IAEvB,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAEtC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,gCAAwB,EAAC,UAAU,CAAC,CAAC;IAErD,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,IAAA,YAAK,EAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC;YAC1C,OAAO,EAAE,EAAE,GAAG,EAAE,OAAc,EAAE;SACjC,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO;YACP,SAAS;SACV,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAEzD,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO;QACP,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { Hex, TransactionSerializableEIP1559, TransactionSerializableEIP2930, TransactionSerializableLegacy } from 'viem';
2
+ export type TransactionInput = TransactionSerializableLegacy | TransactionSerializableEIP2930 | TransactionSerializableEIP1559;
3
+ export interface SignTransactionInput {
4
+ privateKey: Hex;
5
+ transaction: TransactionInput;
6
+ }
7
+ export interface SignTransactionResult {
8
+ address: string;
9
+ serializedTransaction: string;
10
+ }
11
+ /**
12
+ * Signs a transaction using the provided private key via viem.
13
+ * Returns the signer address and the serialized signed transaction
14
+ * (RLP-encoded, ready to broadcast).
15
+ *
16
+ * ⚠️ SECURITY NOTE ⚠️
17
+ * This produces a fully signed transaction that can be broadcast to a network.
18
+ * Agents should verify transaction parameters (to, value, data, chainId)
19
+ * before signing.
20
+ */
21
+ export declare function signTransaction(input: SignTransactionInput): Promise<SignTransactionResult>;
22
+ //# sourceMappingURL=sign-transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign-transaction.d.ts","sourceRoot":"","sources":["../../src/commands/sign-transaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,GAAG,EACH,8BAA8B,EAC9B,8BAA8B,EAC9B,6BAA6B,EAC9B,MAAM,MAAM,CAAC;AAGd,MAAM,MAAM,gBAAgB,GACxB,6BAA6B,GAC7B,8BAA8B,GAC9B,8BAA8B,CAAC;AAEnC,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,GAAG,CAAC;IAChB,WAAW,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,CAAC,CAoBhC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.signTransaction = signTransaction;
4
+ const viem_1 = require("viem");
5
+ const utils_1 = require("../utils");
6
+ /**
7
+ * Signs a transaction using the provided private key via viem.
8
+ * Returns the signer address and the serialized signed transaction
9
+ * (RLP-encoded, ready to broadcast).
10
+ *
11
+ * ⚠️ SECURITY NOTE ⚠️
12
+ * This produces a fully signed transaction that can be broadcast to a network.
13
+ * Agents should verify transaction parameters (to, value, data, chainId)
14
+ * before signing.
15
+ */
16
+ async function signTransaction(input) {
17
+ const { privateKey, transaction } = input;
18
+ if (!transaction || typeof transaction !== 'object') {
19
+ throw new Error('Transaction must be a valid transaction object');
20
+ }
21
+ if (transaction.to && !(0, viem_1.isHex)(transaction.to, { strict: true })) {
22
+ throw new Error('Transaction "to" field must be a valid 0x-prefixed hex address');
23
+ }
24
+ const account = (0, utils_1.validateAndCreateAccount)(privateKey);
25
+ const serializedTransaction = await account.signTransaction(transaction);
26
+ return {
27
+ address: account.address,
28
+ serializedTransaction,
29
+ };
30
+ }
31
+ //# sourceMappingURL=sign-transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign-transaction.js","sourceRoot":"","sources":["../../src/commands/sign-transaction.ts"],"names":[],"mappings":";;AAkCA,0CAsBC;AAxDD,+BAA6B;AAO7B,oCAAoD;AAiBpD;;;;;;;;;GASG;AACI,KAAK,UAAU,eAAe,CACnC,KAA2B;IAE3B,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAE1C,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,WAAW,CAAC,EAAE,IAAI,CAAC,IAAA,YAAK,EAAC,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,gCAAwB,EAAC,UAAU,CAAC,CAAC;IACrD,MAAM,qBAAqB,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAEzE,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,qBAAqB;KACtB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { Hex, TypedDataDomain } from 'viem';
2
+ export interface TypedDataField {
3
+ name: string;
4
+ type: string;
5
+ }
6
+ export interface SignTypedDataInput {
7
+ privateKey: Hex;
8
+ domain: TypedDataDomain;
9
+ types: Record<string, TypedDataField[]>;
10
+ primaryType: string;
11
+ message: Record<string, unknown>;
12
+ }
13
+ export interface SignTypedDataResult {
14
+ address: string;
15
+ signature: string;
16
+ }
17
+ /**
18
+ * Signs EIP-712 typed data using the provided private key via viem.
19
+ * Returns the signer address and resulting signature.
20
+ */
21
+ export declare function signTypedData(input: SignTypedDataInput): Promise<SignTypedDataResult>;
22
+ //# sourceMappingURL=sign-typed-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign-typed-data.d.ts","sourceRoot":"","sources":["../../src/commands/sign-typed-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAGjD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,GAAG,CAAC;IAChB,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CA+B9B"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.signTypedData = signTypedData;
4
+ const utils_1 = require("../utils");
5
+ /**
6
+ * Signs EIP-712 typed data using the provided private key via viem.
7
+ * Returns the signer address and resulting signature.
8
+ */
9
+ async function signTypedData(input) {
10
+ const { privateKey, domain, types, primaryType, message } = input;
11
+ if (!domain || typeof domain !== 'object') {
12
+ throw new Error('Domain must be a valid EIP-712 domain object');
13
+ }
14
+ if (!types || typeof types !== 'object' || Object.keys(types).length === 0) {
15
+ throw new Error('Types must be a non-empty object defining EIP-712 types');
16
+ }
17
+ if (!primaryType || typeof primaryType !== 'string') {
18
+ throw new Error('Primary type must be a non-empty string');
19
+ }
20
+ if (!message || typeof message !== 'object') {
21
+ throw new Error('Message must be a valid object');
22
+ }
23
+ const account = (0, utils_1.validateAndCreateAccount)(privateKey);
24
+ const signature = await account.signTypedData({
25
+ domain,
26
+ types,
27
+ primaryType,
28
+ message,
29
+ });
30
+ return {
31
+ address: account.address,
32
+ signature,
33
+ };
34
+ }
35
+ //# sourceMappingURL=sign-typed-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign-typed-data.js","sourceRoot":"","sources":["../../src/commands/sign-typed-data.ts"],"names":[],"mappings":";;AAyBA,sCAiCC;AAzDD,oCAAoD;AAoBpD;;;GAGG;AACI,KAAK,UAAU,aAAa,CACjC,KAAyB;IAEzB,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAElE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,gCAAwB,EAAC,UAAU,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC;QAC5C,MAAM;QACN,KAAK;QACL,WAAW;QACX,OAAO;KACR,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { Hex } from 'viem';
2
+ export interface SignInput {
3
+ privateKey: Hex;
4
+ hash: Hex;
5
+ }
6
+ export interface SignResult {
7
+ address: string;
8
+ hash: string;
9
+ signature: string;
10
+ }
11
+ /**
12
+ * Signs raw data using account.sign (secp256k1 signature over a digest).
13
+ *
14
+ * ⚠️ CRITICAL SECURITY WARNING ⚠️
15
+ * This function signs arbitrary hashes WITHOUT any prefix or envelope.
16
+ * The resulting signature can authorize transactions, token transfers,
17
+ * contract interactions, or any on-chain action — potentially without
18
+ * the user's knowledge or explicit consent.
19
+ *
20
+ * Only use this when absolutely necessary. Prefer `signMessage` (EIP-191)
21
+ * whenever possible, as it applies a human-readable prefix that prevents
22
+ * signed data from being replayed as a transaction.
23
+ */
24
+ export declare function sign(input: SignInput): Promise<SignResult>;
25
+ //# sourceMappingURL=sign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/commands/sign.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAGhC,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,GAAG,CAAC;IAChB,IAAI,EAAE,GAAG,CAAC;CACX;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAoBhE"}