@bankofai/x402 0.5.0 → 0.5.1-beta.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/dist/mechanisms/exactGasfree.d.ts.map +1 -1
- package/dist/mechanisms/exactGasfree.js +14 -1
- package/dist/mechanisms/exactGasfree.js.map +1 -1
- package/dist/mechanisms/gasfree.d.ts +8 -0
- package/dist/mechanisms/gasfree.d.ts.map +1 -0
- package/dist/mechanisms/gasfree.js +125 -0
- package/dist/mechanisms/gasfree.js.map +1 -0
- 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 +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exactGasfree.d.ts","sourceRoot":"","sources":["../../src/mechanisms/exactGasfree.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,mBAAmB,EAGnB,eAAe,EACf,YAAY,EAIb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAiB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"exactGasfree.d.ts","sourceRoot":"","sources":["../../src/mechanisms/exactGasfree.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,mBAAmB,EAGnB,eAAe,EACf,YAAY,EAIb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAiB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAItE,qBAAa,2BAA4B,YAAW,eAAe;IACjE,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,OAAO,CAAmC;gBAEtC,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAM;IAKhF,OAAO,CAAC,YAAY;IAQpB,MAAM,IAAI,MAAM;IAIV,oBAAoB,CACxB,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,cAAc,CAAC;CAsJ3B"}
|
|
@@ -2,6 +2,7 @@ import gasFreeSDK from '@gasfree/gasfree-sdk';
|
|
|
2
2
|
const { TronGasFree } = gasFreeSDK;
|
|
3
3
|
import { GASFREE_PRIMARY_TYPE, getChainId, } from '../index.js';
|
|
4
4
|
import { findByAddress } from '../tokens.js';
|
|
5
|
+
import { TronAddressConverter } from '../address.js';
|
|
5
6
|
export class ExactGasFreeClientMechanism {
|
|
6
7
|
signer;
|
|
7
8
|
clients;
|
|
@@ -89,6 +90,7 @@ export class ExactGasFreeClientMechanism {
|
|
|
89
90
|
}
|
|
90
91
|
const deadline = extensions?.paymentPermitContext?.meta?.validBefore || Math.floor(Date.now() / 1000) + 3600;
|
|
91
92
|
const gasFree = new TronGasFree({ chainId });
|
|
93
|
+
const addressConverter = new TronAddressConverter();
|
|
92
94
|
// 5. Sign TIP-712 typed data
|
|
93
95
|
const { domain, types, message } = gasFree.assembleGasFreeTransactionJson({
|
|
94
96
|
token: requirements.asset,
|
|
@@ -101,7 +103,18 @@ export class ExactGasFreeClientMechanism {
|
|
|
101
103
|
version: '1',
|
|
102
104
|
nonce: accountInfo.nonce.toString(),
|
|
103
105
|
});
|
|
104
|
-
const
|
|
106
|
+
const signingDomain = {
|
|
107
|
+
...domain,
|
|
108
|
+
verifyingContract: addressConverter.toEvmFormat(String(domain.verifyingContract)),
|
|
109
|
+
};
|
|
110
|
+
const signingMessage = {
|
|
111
|
+
...message,
|
|
112
|
+
token: addressConverter.toEvmFormat(String(message.token)),
|
|
113
|
+
serviceProvider: addressConverter.toEvmFormat(String(message.serviceProvider)),
|
|
114
|
+
user: addressConverter.toEvmFormat(String(message.user)),
|
|
115
|
+
receiver: addressConverter.toEvmFormat(String(message.receiver)),
|
|
116
|
+
};
|
|
117
|
+
const signature = await this.signer.signTypedData(signingDomain, types, signingMessage, GASFREE_PRIMARY_TYPE);
|
|
105
118
|
// 6. Build PaymentPermit structure
|
|
106
119
|
const paymentPermit = {
|
|
107
120
|
meta: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exactGasfree.js","sourceRoot":"","sources":["../../src/mechanisms/exactGasfree.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAC9C,MAAM,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC;AACnC,OAAO,EAOL,oBAAoB,EACpB,UAAU,GAEX,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"exactGasfree.js","sourceRoot":"","sources":["../../src/mechanisms/exactGasfree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PaymentPayload, PaymentRequirements, ClientMechanism, ClientSigner } from '../index.js';
|
|
2
|
+
export declare class ExactGasFreeClientMechanism implements ClientMechanism {
|
|
3
|
+
private signer;
|
|
4
|
+
constructor(signer: ClientSigner);
|
|
5
|
+
scheme(): string;
|
|
6
|
+
createPaymentPayload(requirements: PaymentRequirements, resource: string, extensions?: Record<string, unknown>): Promise<PaymentPayload>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=gasfree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gasfree.d.ts","sourceRoot":"","sources":["../../src/mechanisms/gasfree.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,mBAAmB,EAGnB,eAAe,EACf,YAAY,EAOb,MAAM,aAAa,CAAC;AAIrB,qBAAa,0BAA2B,YAAW,eAAe;IAChE,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAIhC,MAAM,IAAI,MAAM;IAIV,oBAAoB,CACxB,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,cAAc,CAAC;CA4H3B"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { TronGasFree } from '@gasfree/gasfree-sdk';
|
|
2
|
+
import { GASFREE_PRIMARY_TYPE, getChainId, getGasFreeApiBaseUrl, getGasFreeApiKey, getGasFreeApiSecret, } from '../index.js';
|
|
3
|
+
import { GasFreeAPIClient } from '../utils/gasfree.js';
|
|
4
|
+
import { findByAddress } from '../tokens.js';
|
|
5
|
+
export class GasFreeTronClientMechanism {
|
|
6
|
+
signer;
|
|
7
|
+
constructor(signer) {
|
|
8
|
+
this.signer = signer;
|
|
9
|
+
}
|
|
10
|
+
scheme() {
|
|
11
|
+
return 'gasfree_exact';
|
|
12
|
+
}
|
|
13
|
+
async createPaymentPayload(requirements, resource, extensions) {
|
|
14
|
+
const chainId = getChainId(requirements.network);
|
|
15
|
+
const apiBaseUrl = getGasFreeApiBaseUrl(requirements.network);
|
|
16
|
+
const apiKey = getGasFreeApiKey();
|
|
17
|
+
const apiSecret = getGasFreeApiSecret();
|
|
18
|
+
const userAddress = await this.signer.getAddress();
|
|
19
|
+
const apiClient = new GasFreeAPIClient(apiBaseUrl, apiKey, apiSecret);
|
|
20
|
+
// 1. Fetch account info
|
|
21
|
+
console.debug(`Fetching account info for ${userAddress} from GasFree API...`);
|
|
22
|
+
const accountInfo = await apiClient.getAddressInfo(userAddress);
|
|
23
|
+
const gasfreeAddress = accountInfo.gasFreeAddress;
|
|
24
|
+
if (!gasfreeAddress) {
|
|
25
|
+
throw new Error(`Could not retrieve GasFree address for ${userAddress}`);
|
|
26
|
+
}
|
|
27
|
+
// 2. Check activation status
|
|
28
|
+
const allowSubmit = accountInfo.allowSubmit || false;
|
|
29
|
+
if (!accountInfo.active && !allowSubmit) {
|
|
30
|
+
throw new Error(`GasFree account for ${userAddress} (${gasfreeAddress}) is not activated.`);
|
|
31
|
+
}
|
|
32
|
+
// 3. Prepare maxFee and providers
|
|
33
|
+
const providers = await apiClient.getProviders();
|
|
34
|
+
if (!providers || providers.length === 0) {
|
|
35
|
+
throw new Error('No GasFree service providers available');
|
|
36
|
+
}
|
|
37
|
+
const serviceProviderAddr = providers[Math.floor(Math.random() * providers.length)].address;
|
|
38
|
+
console.debug(`Selected GasFree provider: ${serviceProviderAddr}`);
|
|
39
|
+
const asset = accountInfo.assets.find((a) => a.tokenAddress === requirements.asset);
|
|
40
|
+
const transferFee = BigInt(asset?.transferFee || '0');
|
|
41
|
+
let maxFee = requirements.extra?.fee?.feeAmount;
|
|
42
|
+
if (!maxFee) {
|
|
43
|
+
// Default to transferFee from API, or 1.0 token units as a safe fallback
|
|
44
|
+
if (transferFee > 0n) {
|
|
45
|
+
maxFee = transferFee.toString();
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const tokenInfo = findByAddress(requirements.network, requirements.asset);
|
|
49
|
+
const decimals = tokenInfo?.decimals ?? 6;
|
|
50
|
+
maxFee = (10 ** decimals).toString();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
let maxFeeBig = BigInt(maxFee);
|
|
54
|
+
if (maxFeeBig < transferFee) {
|
|
55
|
+
console.debug(`Increasing maxFee to ${transferFee} to meet protocol requirement`);
|
|
56
|
+
maxFeeBig = transferFee;
|
|
57
|
+
maxFee = maxFeeBig.toString();
|
|
58
|
+
}
|
|
59
|
+
// 4. Balance verification
|
|
60
|
+
const skipBalanceCheck = extensions?.skipBalanceCheck || false;
|
|
61
|
+
if (!skipBalanceCheck) {
|
|
62
|
+
if (asset) {
|
|
63
|
+
const assetBalance = BigInt(asset.balance || '0');
|
|
64
|
+
const requiredTotal = BigInt(requirements.amount) + maxFeeBig;
|
|
65
|
+
if (assetBalance < requiredTotal) {
|
|
66
|
+
throw new Error(`Insufficient balance in GasFree wallet ${gasfreeAddress}.`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
throw new Error(`Asset ${requirements.asset} not found in GasFree account ${gasfreeAddress}.`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const deadline = extensions?.paymentPermitContext?.meta?.validBefore || Math.floor(Date.now() / 1000) + 3600;
|
|
74
|
+
const gasFree = new TronGasFree({ chainId });
|
|
75
|
+
// 5. Sign TIP-712 typed data
|
|
76
|
+
const { domain, types, message } = gasFree.assembleGasFreeTransactionJson({
|
|
77
|
+
token: requirements.asset,
|
|
78
|
+
serviceProvider: serviceProviderAddr,
|
|
79
|
+
user: userAddress,
|
|
80
|
+
receiver: requirements.payTo,
|
|
81
|
+
value: requirements.amount,
|
|
82
|
+
maxFee: maxFee,
|
|
83
|
+
deadline: deadline.toString(),
|
|
84
|
+
version: '1',
|
|
85
|
+
nonce: accountInfo.nonce.toString(),
|
|
86
|
+
});
|
|
87
|
+
const signature = await this.signer.signTypedData(domain, types, message, GASFREE_PRIMARY_TYPE);
|
|
88
|
+
// 6. Build PaymentPermit structure
|
|
89
|
+
const paymentPermit = {
|
|
90
|
+
meta: {
|
|
91
|
+
kind: 'PAYMENT_ONLY',
|
|
92
|
+
paymentId: extensions?.paymentPermitContext?.meta?.paymentId || '',
|
|
93
|
+
nonce: accountInfo.nonce.toString(),
|
|
94
|
+
validAfter: extensions?.paymentPermitContext?.meta?.validAfter || 0,
|
|
95
|
+
validBefore: Number(deadline),
|
|
96
|
+
},
|
|
97
|
+
buyer: userAddress,
|
|
98
|
+
caller: serviceProviderAddr,
|
|
99
|
+
payment: {
|
|
100
|
+
payToken: requirements.asset,
|
|
101
|
+
payAmount: requirements.amount,
|
|
102
|
+
payTo: requirements.payTo,
|
|
103
|
+
},
|
|
104
|
+
fee: {
|
|
105
|
+
feeTo: serviceProviderAddr,
|
|
106
|
+
feeAmount: maxFee,
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
return {
|
|
110
|
+
x402Version: 2,
|
|
111
|
+
resource: { url: resource },
|
|
112
|
+
accepted: requirements,
|
|
113
|
+
payload: {
|
|
114
|
+
signature,
|
|
115
|
+
paymentPermit,
|
|
116
|
+
},
|
|
117
|
+
extensions: {
|
|
118
|
+
...extensions,
|
|
119
|
+
gasfreeAddress,
|
|
120
|
+
scheme: 'gasfree_exact',
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=gasfree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gasfree.js","sourceRoot":"","sources":["../../src/mechanisms/gasfree.ts"],"names":[],"mappings":"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"}
|
|
@@ -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.5.0",
|
|
3
|
+
"version": "0.5.1-beta.0",
|
|
4
4
|
"description": "x402 TypeScript SDK (TRON and EVM support)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"x402",
|
|
@@ -42,6 +42,11 @@
|
|
|
42
42
|
"dist",
|
|
43
43
|
"README.md"
|
|
44
44
|
],
|
|
45
|
+
"scripts": {
|
|
46
|
+
"build": "tsc",
|
|
47
|
+
"clean": "rm -rf dist",
|
|
48
|
+
"test": "vitest run"
|
|
49
|
+
},
|
|
45
50
|
"peerDependencies": {
|
|
46
51
|
"tronweb": "^5.0.0 || ^6.0.0"
|
|
47
52
|
},
|
|
@@ -53,10 +58,5 @@
|
|
|
53
58
|
"publishConfig": {
|
|
54
59
|
"access": "public"
|
|
55
60
|
},
|
|
56
|
-
"license": "MIT"
|
|
57
|
-
|
|
58
|
-
"build": "tsc",
|
|
59
|
-
"clean": "rm -rf dist",
|
|
60
|
-
"test": "vitest run"
|
|
61
|
-
}
|
|
62
|
-
}
|
|
61
|
+
"license": "MIT"
|
|
62
|
+
}
|