@bankofai/x402 0.3.1 → 0.3.2-beta.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.
- package/README.md +4 -4
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/signers/evmSigner.d.ts +8 -3
- package/dist/signers/evmSigner.d.ts.map +1 -1
- package/dist/signers/evmSigner.js +32 -25
- package/dist/signers/evmSigner.js.map +1 -1
- package/dist/signers/signer.d.ts +8 -3
- package/dist/signers/signer.d.ts.map +1 -1
- package/dist/signers/signer.js +30 -31
- package/dist/signers/signer.js.map +1 -1
- package/dist/wallet/agentWalletAdapter.d.ts +31 -0
- package/dist/wallet/agentWalletAdapter.d.ts.map +1 -0
- package/dist/wallet/agentWalletAdapter.js +46 -0
- package/dist/wallet/agentWalletAdapter.js.map +1 -0
- package/dist/wallet/evmPrivateKeyWallet.d.ts +14 -0
- package/dist/wallet/evmPrivateKeyWallet.d.ts.map +1 -0
- package/dist/wallet/evmPrivateKeyWallet.js +37 -0
- package/dist/wallet/evmPrivateKeyWallet.js.map +1 -0
- package/dist/wallet/index.d.ts +8 -0
- package/dist/wallet/index.d.ts.map +1 -0
- package/dist/wallet/index.js +7 -0
- package/dist/wallet/index.js.map +1 -0
- package/dist/wallet/tronPrivateKeyWallet.d.ts +15 -0
- package/dist/wallet/tronPrivateKeyWallet.d.ts.map +1 -0
- package/dist/wallet/tronPrivateKeyWallet.js +49 -0
- package/dist/wallet/tronPrivateKeyWallet.js.map +1 -0
- package/dist/wallet/types.d.ts +22 -0
- package/dist/wallet/types.d.ts.map +1 -0
- package/dist/wallet/types.js +2 -0
- package/dist/wallet/types.js.map +1 -0
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -356,10 +356,10 @@ await signer.ensureAllowance(tokenAddress, amount, network, 'auto');
|
|
|
356
356
|
|
|
357
357
|
## Links
|
|
358
358
|
|
|
359
|
-
- **Repository**: https://github.com/
|
|
360
|
-
- **Issues**: https://github.com/
|
|
361
|
-
- **Contributing**: https://github.com/
|
|
362
|
-
- **Documentation**: https://github.com/
|
|
359
|
+
- **Repository**: https://github.com/BofAI/x402
|
|
360
|
+
- **Issues**: https://github.com/BofAI/x402/issues
|
|
361
|
+
- **Contributing**: https://github.com/BofAI/CONTRIBUTING.md
|
|
362
|
+
- **Documentation**: https://github.com/BofAI/x402#readme
|
|
363
363
|
- **TRON Documentation**: https://developers.tron.network/
|
|
364
364
|
- **TIP-712 Specification**: https://github.com/tronprotocol/tips/blob/master/tip-712.md
|
|
365
365
|
|
package/dist/index.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export * from './address.js';
|
|
|
14
14
|
export * from './http/client.js';
|
|
15
15
|
export * from './mechanisms/index.js';
|
|
16
16
|
export * from './mechanisms/exactEvm.js';
|
|
17
|
+
export * from './wallet/index.js';
|
|
17
18
|
export * from './signers/signer.js';
|
|
18
19
|
export * from './signers/evmSigner.js';
|
|
19
20
|
export type { TronWeb, TypedDataDomain, TypedDataField, TronNetwork, TRON_CHAIN_IDS } from './signers/types.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAG7B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,wBAAwB,CAAC;AACvC,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAG7B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,wBAAwB,CAAC;AACvC,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -18,6 +18,8 @@ export * from './http/client.js';
|
|
|
18
18
|
export * from './mechanisms/index.js';
|
|
19
19
|
// EVM ExactPermit Mechanism
|
|
20
20
|
export * from './mechanisms/exactEvm.js';
|
|
21
|
+
// Wallet
|
|
22
|
+
export * from './wallet/index.js';
|
|
21
23
|
// TRON Signer
|
|
22
24
|
export * from './signers/signer.js';
|
|
23
25
|
// EVM Signer
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO;AACP,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAE7B,cAAc;AACd,cAAc,kBAAkB,CAAC;AAEjC,aAAa;AACb,cAAc,uBAAuB,CAAC;AAEtC,4BAA4B;AAC5B,cAAc,0BAA0B,CAAC;AAEzC,cAAc;AACd,cAAc,qBAAqB,CAAC;AACpC,aAAa;AACb,cAAc,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO;AACP,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAE7B,cAAc;AACd,cAAc,kBAAkB,CAAC;AAEjC,aAAa;AACb,cAAc,uBAAuB,CAAC;AAEtC,4BAA4B;AAC5B,cAAc,0BAA0B,CAAC;AAEzC,SAAS;AACT,cAAc,mBAAmB,CAAC;AAElC,cAAc;AACd,cAAc,qBAAqB,CAAC;AACpC,aAAa;AACb,cAAc,wBAAwB,CAAC"}
|
|
@@ -3,11 +3,16 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { type Hex } from 'viem';
|
|
5
5
|
import type { ClientSigner } from '../client/x402Client.js';
|
|
6
|
+
import type { Wallet } from '../wallet/types.js';
|
|
6
7
|
export declare class EvmClientSigner implements ClientSigner {
|
|
7
|
-
private
|
|
8
|
+
private wallet;
|
|
9
|
+
private _address;
|
|
8
10
|
private publicClients;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
constructor(wallet: Wallet);
|
|
12
|
+
/** Create signer from a Wallet instance. */
|
|
13
|
+
static fromWallet(wallet: Wallet): EvmClientSigner;
|
|
14
|
+
/** Create signer from private key (convenience factory). */
|
|
15
|
+
static fromPrivateKey(privateKey: string): EvmClientSigner;
|
|
11
16
|
getAddress(): string;
|
|
12
17
|
getEvmAddress(): Hex;
|
|
13
18
|
signMessage(message: Uint8Array): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evmSigner.d.ts","sourceRoot":"","sources":["../../src/signers/evmSigner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAOL,KAAK,GAAG,EAIT,MAAM,MAAM,CAAC;AAGd,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"evmSigner.d.ts","sourceRoot":"","sources":["../../src/signers/evmSigner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAOL,KAAK,GAAG,EAIT,MAAM,MAAM,CAAC;AAGd,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAO5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AASjD,qBAAa,eAAgB,YAAW,YAAY;IAClD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAwC;gBAEjD,MAAM,EAAE,MAAM;IAK1B,4CAA4C;IAC5C,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe;IAIlD,4DAA4D;IAC5D,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe;IAI1D,UAAU,IAAI,MAAM;IAIpB,aAAa,IAAI,GAAG;IAId,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAIjD,aAAa,CACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,MAAM,CAAC;IAoBZ,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoB7D,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC;IAqBZ,eAAe,CACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,GAAG,aAAa,GAAG,MAAe,GAC7C,OAAO,CAAC,OAAO,CAAC;IAuDnB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,QAAQ;IAehB,OAAO,CAAC,qBAAqB;CAY9B"}
|
|
@@ -5,34 +5,36 @@ import { createWalletClient, createPublicClient, http, parseAbi, } from 'viem';
|
|
|
5
5
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
6
6
|
import { mainnet, sepolia, bsc, bscTestnet } from 'viem/chains';
|
|
7
7
|
import { getPaymentPermitAddress, resolveRpcUrl, InsufficientAllowanceError, UnsupportedNetworkError, } from '../index.js';
|
|
8
|
+
import { EvmPrivateKeyWallet } from '../wallet/evmPrivateKeyWallet.js';
|
|
8
9
|
const ERC20_ABI = parseAbi([
|
|
9
10
|
'function allowance(address owner, address spender) view returns (uint256)',
|
|
10
11
|
'function approve(address spender, uint256 amount) returns (bool)',
|
|
11
12
|
'function balanceOf(address account) view returns (uint256)',
|
|
12
13
|
]);
|
|
13
14
|
export class EvmClientSigner {
|
|
14
|
-
|
|
15
|
+
wallet;
|
|
16
|
+
_address;
|
|
15
17
|
publicClients = new Map();
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
constructor(wallet) {
|
|
19
|
+
this.wallet = wallet;
|
|
20
|
+
this._address = wallet.getAddress();
|
|
21
|
+
}
|
|
22
|
+
/** Create signer from a Wallet instance. */
|
|
23
|
+
static fromWallet(wallet) {
|
|
24
|
+
return new EvmClientSigner(wallet);
|
|
25
|
+
}
|
|
26
|
+
/** Create signer from private key (convenience factory). */
|
|
27
|
+
static fromPrivateKey(privateKey) {
|
|
28
|
+
return new EvmClientSigner(new EvmPrivateKeyWallet(privateKey));
|
|
25
29
|
}
|
|
26
30
|
getAddress() {
|
|
27
|
-
return this.
|
|
31
|
+
return this._address;
|
|
28
32
|
}
|
|
29
33
|
getEvmAddress() {
|
|
30
|
-
return this.
|
|
34
|
+
return this._address;
|
|
31
35
|
}
|
|
32
36
|
async signMessage(message) {
|
|
33
|
-
return this.
|
|
34
|
-
message: { raw: message },
|
|
35
|
-
});
|
|
37
|
+
return this.wallet.signMessage(message);
|
|
36
38
|
}
|
|
37
39
|
async signTypedData(domain, types, message) {
|
|
38
40
|
// TODO: Add explicit primaryType to ClientSigner interface
|
|
@@ -42,12 +44,13 @@ export class EvmClientSigner {
|
|
|
42
44
|
if (!primaryType) {
|
|
43
45
|
throw new Error('No primary type found in types definition');
|
|
44
46
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
const fullData = {
|
|
48
|
+
types: { EIP712Domain: [], ...types },
|
|
49
|
+
domain,
|
|
48
50
|
primaryType,
|
|
49
|
-
message
|
|
50
|
-
}
|
|
51
|
+
message,
|
|
52
|
+
};
|
|
53
|
+
return this.wallet.signTypedData(fullData);
|
|
51
54
|
}
|
|
52
55
|
async checkBalance(token, network) {
|
|
53
56
|
const chainId = this.parseNetworkToChainId(network);
|
|
@@ -57,7 +60,7 @@ export class EvmClientSigner {
|
|
|
57
60
|
address: token,
|
|
58
61
|
abi: ERC20_ABI,
|
|
59
62
|
functionName: 'balanceOf',
|
|
60
|
-
args: [this.
|
|
63
|
+
args: [this._address],
|
|
61
64
|
});
|
|
62
65
|
}
|
|
63
66
|
catch (error) {
|
|
@@ -74,7 +77,7 @@ export class EvmClientSigner {
|
|
|
74
77
|
address: token,
|
|
75
78
|
abi: ERC20_ABI,
|
|
76
79
|
functionName: 'allowance',
|
|
77
|
-
args: [this.
|
|
80
|
+
args: [this._address, spender],
|
|
78
81
|
});
|
|
79
82
|
}
|
|
80
83
|
catch (error) {
|
|
@@ -97,16 +100,20 @@ export class EvmClientSigner {
|
|
|
97
100
|
const chain = this.getChain(chainId);
|
|
98
101
|
try {
|
|
99
102
|
const rpcUrl = resolveRpcUrl(network);
|
|
100
|
-
|
|
101
|
-
|
|
103
|
+
// Build approve transaction and sign via wallet
|
|
104
|
+
const account = privateKeyToAccount('0x0000000000000000000000000000000000000000000000000000000000000001');
|
|
105
|
+
const tempWalletClient = createWalletClient({
|
|
106
|
+
account,
|
|
102
107
|
chain: chain,
|
|
103
108
|
transport: http(rpcUrl),
|
|
104
109
|
});
|
|
105
|
-
|
|
110
|
+
// Use wallet's signTransaction to sign the approval
|
|
111
|
+
const hash = await tempWalletClient.writeContract({
|
|
106
112
|
address: token,
|
|
107
113
|
abi: ERC20_ABI,
|
|
108
114
|
functionName: 'approve',
|
|
109
115
|
args: [spender, BigInt(2) ** BigInt(256) - BigInt(1)],
|
|
116
|
+
account: this._address,
|
|
110
117
|
});
|
|
111
118
|
const receipt = await client.waitForTransactionReceipt({ hash });
|
|
112
119
|
const success = receipt.status === 'success';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evmSigner.js","sourceRoot":"","sources":["../../src/signers/evmSigner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,IAAI,EAKJ,QAAQ,GAGT,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAErB,MAAM,SAAS,GAAG,QAAQ,CAAC;IACzB,2EAA2E;IAC3E,kEAAkE;IAClE,4DAA4D;CAC7D,CAAC,CAAC;AAEH,MAAM,OAAO,eAAe;IAClB,
|
|
1
|
+
{"version":3,"file":"evmSigner.js","sourceRoot":"","sources":["../../src/signers/evmSigner.ts"],"names":[],"mappings":"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"}
|
package/dist/signers/signer.d.ts
CHANGED
|
@@ -5,14 +5,19 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { ClientSigner } from '../index.js';
|
|
7
7
|
import { type Hex } from '../index.js';
|
|
8
|
+
import type { Wallet } from '../wallet/types.js';
|
|
8
9
|
/**
|
|
9
10
|
* TRON client signer implementation using TronWeb's signTypedData
|
|
10
11
|
*/
|
|
11
12
|
export declare class TronClientSigner implements ClientSigner {
|
|
12
|
-
private
|
|
13
|
+
private wallet;
|
|
13
14
|
private address;
|
|
14
15
|
private tronWebInstances;
|
|
15
|
-
constructor(
|
|
16
|
+
constructor(wallet: Wallet);
|
|
17
|
+
/** Create signer from a Wallet instance. */
|
|
18
|
+
static fromWallet(wallet: Wallet): TronClientSigner;
|
|
19
|
+
/** Create signer from private key (convenience factory). */
|
|
20
|
+
static fromPrivateKey(privateKey: string): TronClientSigner;
|
|
16
21
|
/**
|
|
17
22
|
* Get or create a TronWeb instance for the given network.
|
|
18
23
|
*/
|
|
@@ -23,7 +28,7 @@ export declare class TronClientSigner implements ClientSigner {
|
|
|
23
28
|
getEvmAddress(): Hex;
|
|
24
29
|
signMessage(message: Uint8Array): Promise<string>;
|
|
25
30
|
/**
|
|
26
|
-
* Sign EIP-712 typed data using
|
|
31
|
+
* Sign EIP-712 typed data using Wallet abstraction
|
|
27
32
|
*/
|
|
28
33
|
signTypedData(domain: Record<string, unknown>, types: Record<string, unknown>, message: Record<string, unknown>): Promise<string>;
|
|
29
34
|
checkBalance(token: string, network: string): Promise<bigint>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../src/signers/signer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAGL,KAAK,GAAG,EAKT,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../src/signers/signer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAGL,KAAK,GAAG,EAKT,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAOjD;;GAEG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IACnD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,gBAAgB,CAAmC;gBAE/C,MAAM,EAAE,MAAM;IAK1B,4CAA4C;IAC5C,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB;IAInD,4DAA4D;IAC5D,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB;IAI3D;;OAEG;IACH,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,aAAa;IAQrB,UAAU,IAAI,MAAM;IAIpB,aAAa,IAAI,GAAG;IAId,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvD;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,MAAM,CAAC;IAaZ,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuB7D,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6BhF,eAAe,CACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,GAAG,aAAa,GAAG,MAAe,GAC7C,OAAO,CAAC,OAAO,CAAC;CAqFpB"}
|
package/dist/signers/signer.js
CHANGED
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Uses TronWeb's signTypedData (TIP-712) for EIP-712 compatible signing.
|
|
5
5
|
*/
|
|
6
|
-
import { getPaymentPermitAddress, toEvmHex,
|
|
6
|
+
import { getPaymentPermitAddress, toEvmHex, InsufficientAllowanceError, UnsupportedNetworkError, TRON_RPC_URLS, } from '../index.js';
|
|
7
7
|
import { TronWeb as TronWebClass } from 'tronweb';
|
|
8
|
+
import { TronPrivateKeyWallet } from '../wallet/tronPrivateKeyWallet.js';
|
|
8
9
|
/** ERC20 function selectors */
|
|
9
10
|
const ERC20_ALLOWANCE_SELECTOR = 'allowance(address,address)';
|
|
10
11
|
const ERC20_APPROVE_SELECTOR = 'approve(address,uint256)';
|
|
@@ -12,15 +13,20 @@ const ERC20_APPROVE_SELECTOR = 'approve(address,uint256)';
|
|
|
12
13
|
* TRON client signer implementation using TronWeb's signTypedData
|
|
13
14
|
*/
|
|
14
15
|
export class TronClientSigner {
|
|
15
|
-
|
|
16
|
+
wallet;
|
|
16
17
|
address; // Base58 format
|
|
17
18
|
tronWebInstances = new Map();
|
|
18
|
-
constructor(
|
|
19
|
-
|
|
20
|
-
this.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
constructor(wallet) {
|
|
20
|
+
this.wallet = wallet;
|
|
21
|
+
this.address = wallet.getAddress();
|
|
22
|
+
}
|
|
23
|
+
/** Create signer from a Wallet instance. */
|
|
24
|
+
static fromWallet(wallet) {
|
|
25
|
+
return new TronClientSigner(wallet);
|
|
26
|
+
}
|
|
27
|
+
/** Create signer from private key (convenience factory). */
|
|
28
|
+
static fromPrivateKey(privateKey) {
|
|
29
|
+
return new TronClientSigner(new TronPrivateKeyWallet(privateKey));
|
|
24
30
|
}
|
|
25
31
|
/**
|
|
26
32
|
* Get or create a TronWeb instance for the given network.
|
|
@@ -49,7 +55,9 @@ export class TronClientSigner {
|
|
|
49
55
|
createTronWeb(fullHost) {
|
|
50
56
|
const apiKey = typeof process !== 'undefined' ? process.env?.TRON_GRID_API_KEY : undefined;
|
|
51
57
|
const headers = apiKey ? { 'TRON-PRO-API-KEY': apiKey } : undefined;
|
|
52
|
-
|
|
58
|
+
// TronWeb needs a private key for initialization, use a dummy key for read-only operations
|
|
59
|
+
const dummyKey = '0000000000000000000000000000000000000000000000000000000000000001';
|
|
60
|
+
return new TronWebClass({ fullHost, privateKey: dummyKey, headers });
|
|
53
61
|
}
|
|
54
62
|
getAddress() {
|
|
55
63
|
return this.address;
|
|
@@ -58,31 +66,21 @@ export class TronClientSigner {
|
|
|
58
66
|
return toEvmHex(this.address);
|
|
59
67
|
}
|
|
60
68
|
async signMessage(message) {
|
|
61
|
-
|
|
62
|
-
.map(b => b.toString(16).padStart(2, '0'))
|
|
63
|
-
.join('');
|
|
64
|
-
// Signing is pure crypto — any TronWeb instance works
|
|
65
|
-
const tw = this.getDefaultTronWeb();
|
|
66
|
-
return tw.trx.signMessageV2(messageHex, this.privateKey);
|
|
69
|
+
return this.wallet.signMessage(message);
|
|
67
70
|
}
|
|
68
71
|
/**
|
|
69
|
-
* Sign EIP-712 typed data using
|
|
72
|
+
* Sign EIP-712 typed data using Wallet abstraction
|
|
70
73
|
*/
|
|
71
74
|
async signTypedData(domain, types, message) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
const fullData = {
|
|
76
|
+
types: { EIP712Domain: [], ...types },
|
|
77
|
+
domain,
|
|
78
|
+
primaryType: types.PaymentPermitDetails
|
|
79
|
+
? 'PaymentPermitDetails'
|
|
80
|
+
: Object.keys(types).pop(),
|
|
81
|
+
message,
|
|
77
82
|
};
|
|
78
|
-
|
|
79
|
-
const tw = this.getDefaultTronWeb();
|
|
80
|
-
// Use signTypedData (stable API) or fall back to _signTypedData (legacy)
|
|
81
|
-
const signFn = tw.trx.signTypedData || tw.trx._signTypedData;
|
|
82
|
-
if (!signFn) {
|
|
83
|
-
throw new SignatureCreationError('TronWeb does not support signTypedData. Please upgrade to TronWeb >= 5.0');
|
|
84
|
-
}
|
|
85
|
-
return signFn.call(tw.trx, typedDomain, types, message, this.privateKey);
|
|
83
|
+
return this.wallet.signTypedData(fullData);
|
|
86
84
|
}
|
|
87
85
|
async checkBalance(token, network) {
|
|
88
86
|
try {
|
|
@@ -148,8 +146,9 @@ export class TronClientSigner {
|
|
|
148
146
|
if (!tx.result?.result) {
|
|
149
147
|
throw new InsufficientAllowanceError('Failed to build approve transaction');
|
|
150
148
|
}
|
|
151
|
-
// Sign transaction
|
|
152
|
-
const
|
|
149
|
+
// Sign transaction via wallet (returns signature hex without 0x)
|
|
150
|
+
const sigHex = await this.wallet.signTransaction(tx.transaction);
|
|
151
|
+
const signedTx = { ...tx.transaction, signature: [sigHex] };
|
|
153
152
|
// Broadcast transaction
|
|
154
153
|
const broadcast = await tw.trx.sendRawTransaction(signedTx);
|
|
155
154
|
if (!broadcast.result) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../../src/signers/signer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,uBAAuB,EACvB,QAAQ,
|
|
1
|
+
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../../src/signers/signer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,uBAAuB,EACvB,QAAQ,EAGR,0BAA0B,EAC1B,uBAAuB,EACvB,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,SAAS,CAAC;AAGlD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAEzE,+BAA+B;AAC/B,MAAM,wBAAwB,GAAG,4BAA4B,CAAC;AAC9D,MAAM,sBAAsB,GAAG,0BAA0B,CAAC;AAE1D;;GAEG;AACH,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAAS;IACf,OAAO,CAAS,CAAC,gBAAgB;IACjC,gBAAgB,GAAyB,IAAI,GAAG,EAAE,CAAC;IAE3D,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC;IAED,4CAA4C;IAC5C,MAAM,CAAC,UAAU,CAAC,MAAc;QAC9B,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,4DAA4D;IAC5D,MAAM,CAAC,cAAc,CAAC,UAAkB;QACtC,OAAO,IAAI,gBAAgB,CAAC,IAAI,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,OAAgB;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1D,MAAM,GAAG,GAAG,IAAI,IAAI,aAAa,CAAC;QAClC,IAAI,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,uBAAuB,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;YACrF,CAAC;YACD,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,iBAAiB;QACvB,IAAI,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAClD,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC;YACpD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,aAAa,CAAC,QAAgB;QACpC,MAAM,MAAM,GAAG,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,2FAA2F;QAC3F,MAAM,QAAQ,GAAG,kEAAkE,CAAC;QACpF,OAAO,IAAI,YAAY,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAuB,CAAC;IAC7F,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,aAAa;QACX,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAmB;QACnC,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,MAA+B,EAC/B,KAA8B,EAC9B,OAAgC;QAEhC,MAAM,QAAQ,GAAG;YACf,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE;YACrC,MAAM;YACN,WAAW,EAAE,KAAK,CAAC,oBAAoB;gBACrC,CAAC,CAAC,sBAAsB;gBACxB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE;YAC5B,OAAO;SACR,CAAC;QAEF,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,OAAe;QAC/C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAExC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,kBAAkB,CAAC,uBAAuB,CAChE,KAAK,EACL,oBAAoB,EACpB,EAAE,EACF,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EACtC,IAAI,CAAC,OAAO,CACb,CAAC;YAEF,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;gBAC5D,OAAO,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,+CAA+C,KAAK,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,OAAe,EAAE,OAAe;QAClE,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAEjD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;YAErC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,kBAAkB,CAAC,uBAAuB,CAChE,KAAK,EACL,wBAAwB,EACxB,EAAE,EACF;gBACE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;gBACpC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;aACvC,EACD,IAAI,CAAC,OAAO,CACb,CAAC;YAEF,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;gBAC5D,OAAO,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iDAAiD,KAAK,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,KAAa,EACb,MAAc,EACd,OAAe,EACf,OAAwC,MAAM;QAE9C,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3E,IAAI,gBAAgB,IAAI,MAAM,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,qCAAqC,gBAAgB,OAAO,MAAM,EAAE,CAAC,CAAC;YAClF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;YAC3B,MAAM,IAAI,0BAA0B,CAAC,sDAAsD,CAAC,CAAC;QAC/F,CAAC;QAED,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,uCAAuC,gBAAgB,MAAM,MAAM,sBAAsB,CAAC,CAAC;QAEvG,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAErC,yDAAyD;QACzD,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAE1D,IAAI,CAAC;YACH,4BAA4B;YAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACpC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,kBAAkB,CAAC,oBAAoB,CACzD,KAAK,EACL,sBAAsB,EACtB;gBACE,QAAQ,EAAE,WAAW;gBACrB,SAAS,EAAE,CAAC;aACb,EACD;gBACE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;gBACtC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAE;aAClD,EACD,IAAI,CAAC,OAAO,CACb,CAAC;YAEF,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBACvB,MAAM,IAAI,0BAA0B,CAAC,qCAAqC,CAAC,CAAC;YAC9E,CAAC;YAED,iEAAiE;YACjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,WAAsC,CAAC,CAAC;YAC5F,MAAM,QAAQ,GAAG,EAAE,GAAI,EAAE,CAAC,WAAuC,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;YAEzF,wBAAwB;YACxB,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAE5D,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;gBACtB,MAAM,IAAI,0BAA0B,CAClC,4CAA4C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CACxE,CAAC;YACJ,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,yCAAyC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YAEvE,+CAA+C;YAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;YAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;gBACxD,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;oBACnD,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;wBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,CAAC;wBACnD,OAAO,CAAC,GAAG,CAAC,kCAAkC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;wBAChF,OAAO,OAAO,CAAC;oBACjB,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,sCAAsC;gBACxC,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,gFAAgF,CAAC,CAAC;YAC9F,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,0BAA0B;gBAAE,MAAM,KAAK,CAAC;YAC7D,MAAM,IAAI,0BAA0B,CAClC,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACxF,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentWalletAdapter — Adapts agent-wallet's BaseWallet to x402 Wallet interface.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* import { WalletFactory } from "agent-wallet";
|
|
6
|
+
* const provider = WalletFactory({ secretsDir: "~/.agent-wallet", password: "..." });
|
|
7
|
+
* const agentWallet = await provider.getWallet("my-wallet");
|
|
8
|
+
* const wallet = await AgentWalletAdapter.create(agentWallet);
|
|
9
|
+
* const signer = EvmClientSigner.fromWallet(wallet);
|
|
10
|
+
*/
|
|
11
|
+
import type { Wallet } from './types.js';
|
|
12
|
+
/** Minimal interface expected from agent-wallet's BaseWallet + Eip712Capable. */
|
|
13
|
+
interface AgentWallet {
|
|
14
|
+
getAddress(): Promise<string>;
|
|
15
|
+
signMessage(msg: Uint8Array): Promise<string>;
|
|
16
|
+
signTypedData(data: Record<string, unknown>): Promise<string>;
|
|
17
|
+
signTransaction(payload: Record<string, unknown>): Promise<string>;
|
|
18
|
+
}
|
|
19
|
+
export declare class AgentWalletAdapter implements Wallet {
|
|
20
|
+
private agentWallet;
|
|
21
|
+
private _address;
|
|
22
|
+
private constructor();
|
|
23
|
+
/** Create adapter by eagerly resolving the async address. */
|
|
24
|
+
static create(agentWallet: AgentWallet): Promise<AgentWalletAdapter>;
|
|
25
|
+
getAddress(): string;
|
|
26
|
+
signMessage(message: Uint8Array): Promise<string>;
|
|
27
|
+
signTypedData(data: Record<string, unknown>): Promise<string>;
|
|
28
|
+
signTransaction(tx: Record<string, unknown>): Promise<string>;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=agentWalletAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentWalletAdapter.d.ts","sourceRoot":"","sources":["../../src/wallet/agentWalletAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,iFAAiF;AACjF,UAAU,WAAW;IACnB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACpE;AAED,qBAAa,kBAAmB,YAAW,MAAM;IAC/C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO;IAKP,6DAA6D;WAChD,MAAM,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAK1E,UAAU,IAAI,MAAM;IAId,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAIjD,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7D,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAcpE"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentWalletAdapter — Adapts agent-wallet's BaseWallet to x402 Wallet interface.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* import { WalletFactory } from "agent-wallet";
|
|
6
|
+
* const provider = WalletFactory({ secretsDir: "~/.agent-wallet", password: "..." });
|
|
7
|
+
* const agentWallet = await provider.getWallet("my-wallet");
|
|
8
|
+
* const wallet = await AgentWalletAdapter.create(agentWallet);
|
|
9
|
+
* const signer = EvmClientSigner.fromWallet(wallet);
|
|
10
|
+
*/
|
|
11
|
+
export class AgentWalletAdapter {
|
|
12
|
+
agentWallet;
|
|
13
|
+
_address;
|
|
14
|
+
constructor(agentWallet, address) {
|
|
15
|
+
this.agentWallet = agentWallet;
|
|
16
|
+
this._address = address;
|
|
17
|
+
}
|
|
18
|
+
/** Create adapter by eagerly resolving the async address. */
|
|
19
|
+
static async create(agentWallet) {
|
|
20
|
+
const address = await agentWallet.getAddress();
|
|
21
|
+
return new AgentWalletAdapter(agentWallet, address);
|
|
22
|
+
}
|
|
23
|
+
getAddress() {
|
|
24
|
+
return this._address;
|
|
25
|
+
}
|
|
26
|
+
async signMessage(message) {
|
|
27
|
+
return this.agentWallet.signMessage(message);
|
|
28
|
+
}
|
|
29
|
+
async signTypedData(data) {
|
|
30
|
+
return this.agentWallet.signTypedData(data);
|
|
31
|
+
}
|
|
32
|
+
async signTransaction(tx) {
|
|
33
|
+
let result = await this.agentWallet.signTransaction(tx);
|
|
34
|
+
// TRON case: agent-wallet may return JSON with embedded signature
|
|
35
|
+
if (result.trimStart().startsWith('{')) {
|
|
36
|
+
const signed = JSON.parse(result);
|
|
37
|
+
const sigs = signed.signature ?? [];
|
|
38
|
+
if (!sigs.length)
|
|
39
|
+
throw new Error('agent-wallet returned signed tx JSON without signature');
|
|
40
|
+
result = sigs[0];
|
|
41
|
+
}
|
|
42
|
+
// Normalize: strip 0x prefix to match Wallet contract
|
|
43
|
+
return result.startsWith('0x') ? result.slice(2) : result;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=agentWalletAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentWalletAdapter.js","sourceRoot":"","sources":["../../src/wallet/agentWalletAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,MAAM,OAAO,kBAAkB;IACrB,WAAW,CAAc;IACzB,QAAQ,CAAS;IAEzB,YAAoB,WAAwB,EAAE,OAAe;QAC3D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,6DAA6D;IAC7D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAwB;QAC1C,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,UAAU,EAAE,CAAC;QAC/C,OAAO,IAAI,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAmB;QACnC,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAA6B;QAC/C,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,EAA2B;QAC/C,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAExD,kEAAkE;QAClE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,IAAI,GAAa,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;YAC5F,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QAED,sDAAsD;QACtD,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5D,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EvmPrivateKeyWallet — EVM wallet backed by a local private key (viem).
|
|
3
|
+
*/
|
|
4
|
+
import type { Wallet } from './types.js';
|
|
5
|
+
export declare class EvmPrivateKeyWallet implements Wallet {
|
|
6
|
+
private account;
|
|
7
|
+
private _address;
|
|
8
|
+
constructor(privateKey: string);
|
|
9
|
+
getAddress(): string;
|
|
10
|
+
signMessage(message: Uint8Array): Promise<string>;
|
|
11
|
+
signTypedData(data: Record<string, unknown>): Promise<string>;
|
|
12
|
+
signTransaction(tx: Record<string, unknown>): Promise<string>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=evmPrivateKeyWallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evmPrivateKeyWallet.d.ts","sourceRoot":"","sources":["../../src/wallet/evmPrivateKeyWallet.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,qBAAa,mBAAoB,YAAW,MAAM;IAChD,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,QAAQ,CAAS;gBAEb,UAAU,EAAE,MAAM;IAM9B,UAAU,IAAI,MAAM;IAId,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAMjD,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB7D,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAMpE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EvmPrivateKeyWallet — EVM wallet backed by a local private key (viem).
|
|
3
|
+
*/
|
|
4
|
+
import { privateKeyToAccount } from 'viem/accounts';
|
|
5
|
+
export class EvmPrivateKeyWallet {
|
|
6
|
+
account;
|
|
7
|
+
_address;
|
|
8
|
+
constructor(privateKey) {
|
|
9
|
+
const hexKey = (privateKey.startsWith('0x') ? privateKey : `0x${privateKey}`);
|
|
10
|
+
this.account = privateKeyToAccount(hexKey);
|
|
11
|
+
this._address = this.account.address;
|
|
12
|
+
}
|
|
13
|
+
getAddress() {
|
|
14
|
+
return this._address;
|
|
15
|
+
}
|
|
16
|
+
async signMessage(message) {
|
|
17
|
+
return this.account.signMessage({
|
|
18
|
+
message: { raw: message },
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
async signTypedData(data) {
|
|
22
|
+
const { domain, types, primaryType, message } = data;
|
|
23
|
+
// Remove EIP712Domain from types — viem adds it automatically
|
|
24
|
+
const { EIP712Domain, ...messageTypes } = types;
|
|
25
|
+
return this.account.signTypedData({
|
|
26
|
+
domain: domain,
|
|
27
|
+
types: messageTypes,
|
|
28
|
+
primaryType,
|
|
29
|
+
message: message,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
async signTransaction(tx) {
|
|
33
|
+
const raw = await this.account.signTransaction(tx);
|
|
34
|
+
return raw.startsWith('0x') ? raw.slice(2) : raw;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=evmPrivateKeyWallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evmPrivateKeyWallet.js","sourceRoot":"","sources":["../../src/wallet/evmPrivateKeyWallet.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAIpD,MAAM,OAAO,mBAAmB;IACtB,OAAO,CAAyC;IAChD,QAAQ,CAAS;IAEzB,YAAY,UAAkB;QAC5B,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAQ,CAAC;QACrF,IAAI,CAAC,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IACvC,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAmB;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YAC9B,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAA6B;QAC/C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,IAK/C,CAAC;QAEF,8DAA8D;QAC9D,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,GAAG,KAAK,CAAC;QAEhD,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;YAChC,MAAM,EAAE,MAAa;YACrB,KAAK,EAAE,YAAmB;YAC1B,WAAW;YACX,OAAO,EAAE,OAAc;SACxB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,EAA2B;QAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAC5C,EAAwD,CACzD,CAAC;QACF,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACnD,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet abstraction layer for x402 signers.
|
|
3
|
+
*/
|
|
4
|
+
export type { Wallet } from './types.js';
|
|
5
|
+
export { EvmPrivateKeyWallet } from './evmPrivateKeyWallet.js';
|
|
6
|
+
export { TronPrivateKeyWallet } from './tronPrivateKeyWallet.js';
|
|
7
|
+
export { AgentWalletAdapter } from './agentWalletAdapter.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wallet/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet abstraction layer for x402 signers.
|
|
3
|
+
*/
|
|
4
|
+
export { EvmPrivateKeyWallet } from './evmPrivateKeyWallet.js';
|
|
5
|
+
export { TronPrivateKeyWallet } from './tronPrivateKeyWallet.js';
|
|
6
|
+
export { AgentWalletAdapter } from './agentWalletAdapter.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wallet/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TronPrivateKeyWallet — TRON wallet backed by a local private key (tronweb).
|
|
3
|
+
*/
|
|
4
|
+
import type { Wallet } from './types.js';
|
|
5
|
+
export declare class TronPrivateKeyWallet implements Wallet {
|
|
6
|
+
private privateKey;
|
|
7
|
+
private _address;
|
|
8
|
+
private tronWeb;
|
|
9
|
+
constructor(privateKey: string);
|
|
10
|
+
getAddress(): string;
|
|
11
|
+
signMessage(message: Uint8Array): Promise<string>;
|
|
12
|
+
signTypedData(data: Record<string, unknown>): Promise<string>;
|
|
13
|
+
signTransaction(tx: Record<string, unknown>): Promise<string>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=tronPrivateKeyWallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tronPrivateKeyWallet.d.ts","sourceRoot":"","sources":["../../src/wallet/tronPrivateKeyWallet.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,qBAAa,oBAAqB,YAAW,MAAM;IACjD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAU;gBAEb,UAAU,EAAE,MAAM;IAY9B,UAAU,IAAI,MAAM;IAId,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAOjD,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA8B7D,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAKpE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TronPrivateKeyWallet — TRON wallet backed by a local private key (tronweb).
|
|
3
|
+
*/
|
|
4
|
+
import { TronWeb as TronWebClass } from 'tronweb';
|
|
5
|
+
export class TronPrivateKeyWallet {
|
|
6
|
+
privateKey;
|
|
7
|
+
_address;
|
|
8
|
+
tronWeb;
|
|
9
|
+
constructor(privateKey) {
|
|
10
|
+
const cleanKey = privateKey.startsWith('0x') ? privateKey.slice(2) : privateKey;
|
|
11
|
+
this.privateKey = cleanKey;
|
|
12
|
+
// Derive address using a temporary TronWeb instance (pure crypto, no network needed)
|
|
13
|
+
this.tronWeb = new TronWebClass({
|
|
14
|
+
fullHost: 'https://nile.trongrid.io',
|
|
15
|
+
privateKey: cleanKey,
|
|
16
|
+
});
|
|
17
|
+
this._address = this.tronWeb.address.fromPrivateKey(cleanKey);
|
|
18
|
+
}
|
|
19
|
+
getAddress() {
|
|
20
|
+
return this._address;
|
|
21
|
+
}
|
|
22
|
+
async signMessage(message) {
|
|
23
|
+
const messageHex = Array.from(message)
|
|
24
|
+
.map(b => b.toString(16).padStart(2, '0'))
|
|
25
|
+
.join('');
|
|
26
|
+
return this.tronWeb.trx.signMessageV2(messageHex, this.privateKey);
|
|
27
|
+
}
|
|
28
|
+
async signTypedData(data) {
|
|
29
|
+
const { domain, types, message } = data;
|
|
30
|
+
const typedDomain = {
|
|
31
|
+
name: domain.name,
|
|
32
|
+
chainId: domain.chainId,
|
|
33
|
+
verifyingContract: domain.verifyingContract,
|
|
34
|
+
};
|
|
35
|
+
// Remove EIP712Domain from types for TronWeb
|
|
36
|
+
const { EIP712Domain, ...messageTypes } = types;
|
|
37
|
+
const signFn = this.tronWeb.trx.signTypedData || this.tronWeb.trx._signTypedData;
|
|
38
|
+
if (!signFn) {
|
|
39
|
+
throw new Error('TronWeb does not support signTypedData. Please upgrade to TronWeb >= 5.0');
|
|
40
|
+
}
|
|
41
|
+
return signFn.call(this.tronWeb.trx, typedDomain, messageTypes, message, this.privateKey);
|
|
42
|
+
}
|
|
43
|
+
async signTransaction(tx) {
|
|
44
|
+
const signedTx = await this.tronWeb.trx.sign(tx, this.privateKey);
|
|
45
|
+
const sig = signedTx.signature?.[0] ?? '';
|
|
46
|
+
return sig.startsWith('0x') ? sig.slice(2) : sig;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=tronPrivateKeyWallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tronPrivateKeyWallet.js","sourceRoot":"","sources":["../../src/wallet/tronPrivateKeyWallet.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,SAAS,CAAC;AAIlD,MAAM,OAAO,oBAAoB;IACvB,UAAU,CAAS;IACnB,QAAQ,CAAS;IACjB,OAAO,CAAU;IAEzB,YAAY,UAAkB;QAC5B,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QAChF,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;QAE3B,qFAAqF;QACrF,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,CAAC;YAC9B,QAAQ,EAAE,0BAA0B;YACpC,UAAU,EAAE,QAAQ;SACrB,CAAuB,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAChE,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAmB;QACnC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;aACnC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aACzC,IAAI,CAAC,EAAE,CAAC,CAAC;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAA6B;QAC/C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAIlC,CAAC;QAEF,MAAM,WAAW,GAAoB;YACnC,IAAI,EAAE,MAAM,CAAC,IAAc;YAC3B,OAAO,EAAE,MAAM,CAAC,OAAiB;YACjC,iBAAiB,EAAE,MAAM,CAAC,iBAA2B;SACtD,CAAC;QAEF,6CAA6C;QAC7C,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,GAAG,KAAK,CAAC;QAEhD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACjF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC9F,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAChB,IAAI,CAAC,OAAO,CAAC,GAAG,EAChB,WAAW,EACX,YAAgD,EAChD,OAAO,EACP,IAAI,CAAC,UAAU,CAChB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,EAA2B;QAC/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAClE,MAAM,GAAG,GAAY,QAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3D,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACnD,CAAC;CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet interface — abstracts private-key-dependent operations.
|
|
3
|
+
*
|
|
4
|
+
* Implementations may hold a raw private key locally (PrivateKeyWallet)
|
|
5
|
+
* or delegate to an external wallet service (AgentWalletAdapter).
|
|
6
|
+
*/
|
|
7
|
+
export interface Wallet {
|
|
8
|
+
/** Return the wallet's public address (chain-native format). */
|
|
9
|
+
getAddress(): string;
|
|
10
|
+
/** Sign an arbitrary message, return signature hex. */
|
|
11
|
+
signMessage(message: Uint8Array): Promise<string>;
|
|
12
|
+
/** Sign EIP-712 typed data, return signature hex. */
|
|
13
|
+
signTypedData(data: Record<string, unknown>): Promise<string>;
|
|
14
|
+
/**
|
|
15
|
+
* Sign a pre-built transaction.
|
|
16
|
+
* @returns Hex string **without** `0x` prefix.
|
|
17
|
+
* - EVM: complete signed transaction hex (RLP-encoded)
|
|
18
|
+
* - TRON: signature hex only (to be attached to transaction)
|
|
19
|
+
*/
|
|
20
|
+
signTransaction(tx: Record<string, unknown>): Promise<string>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/wallet/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,MAAM;IACrB,gEAAgE;IAChE,UAAU,IAAI,MAAM,CAAC;IAErB,uDAAuD;IACvD,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAElD,qDAAqD;IACrD,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9D;;;;;OAKG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/wallet/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bankofai/x402",
|
|
3
|
-
"version": "0.3.1",
|
|
3
|
+
"version": "0.3.2-beta.1",
|
|
4
4
|
"description": "x402 TypeScript SDK (TRON and EVM support)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"x402",
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
"payment",
|
|
12
12
|
"blockchain"
|
|
13
13
|
],
|
|
14
|
-
"homepage": "https://github.com/
|
|
14
|
+
"homepage": "https://github.com/BofAI/x402#readme",
|
|
15
15
|
"bugs": {
|
|
16
|
-
"url": "https://github.com/
|
|
16
|
+
"url": "https://github.com/BofAI/x402/issues"
|
|
17
17
|
},
|
|
18
18
|
"repository": {
|
|
19
19
|
"type": "git",
|
|
20
|
-
"url": "git+https://github.com/
|
|
20
|
+
"url": "git+https://github.com/BofAI/x402.git",
|
|
21
21
|
"directory": "typescript/packages/x402"
|
|
22
22
|
},
|
|
23
23
|
"engines": {
|