@bankofai/x402 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -89
- package/dist/abi.d.ts +20 -4
- package/dist/abi.d.ts.map +1 -1
- package/dist/abi.js +13 -4
- package/dist/abi.js.map +1 -1
- package/dist/client/policies.d.ts +13 -3
- package/dist/client/policies.d.ts.map +1 -1
- package/dist/client/policies.js +28 -4
- package/dist/client/policies.js.map +1 -1
- package/dist/client/x402Client.d.ts +19 -6
- package/dist/client/x402Client.d.ts.map +1 -1
- package/dist/client/x402Client.js +22 -1
- package/dist/client/x402Client.js.map +1 -1
- package/dist/config.d.ts +35 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +85 -0
- package/dist/config.js.map +1 -1
- package/dist/mechanisms/exact.d.ts.map +1 -1
- package/dist/mechanisms/exact.js +2 -2
- package/dist/mechanisms/exact.js.map +1 -1
- package/dist/mechanisms/exactEvm.d.ts.map +1 -1
- package/dist/mechanisms/exactEvm.js +2 -2
- package/dist/mechanisms/exactEvm.js.map +1 -1
- package/dist/mechanisms/exactGasfree.d.ts +11 -0
- package/dist/mechanisms/exactGasfree.d.ts.map +1 -0
- package/dist/mechanisms/exactGasfree.js +136 -0
- package/dist/mechanisms/exactGasfree.js.map +1 -0
- 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/mechanisms/index.d.ts +1 -0
- package/dist/mechanisms/index.d.ts.map +1 -1
- package/dist/mechanisms/index.js +2 -0
- package/dist/mechanisms/index.js.map +1 -1
- package/dist/mechanisms/nativeExactEvm.d.ts.map +1 -1
- package/dist/mechanisms/nativeExactEvm.js +2 -2
- package/dist/mechanisms/nativeExactEvm.js.map +1 -1
- package/dist/mechanisms/nativeExactTron.d.ts.map +1 -1
- package/dist/mechanisms/nativeExactTron.js +2 -2
- package/dist/mechanisms/nativeExactTron.js.map +1 -1
- package/dist/signers/evmSigner.d.ts +3 -4
- package/dist/signers/evmSigner.d.ts.map +1 -1
- package/dist/signers/evmSigner.js +15 -21
- package/dist/signers/evmSigner.js.map +1 -1
- package/dist/signers/signer.d.ts +8 -12
- package/dist/signers/signer.d.ts.map +1 -1
- package/dist/signers/signer.js +56 -54
- package/dist/signers/signer.js.map +1 -1
- package/dist/utils/gasfree.d.ts +123 -0
- package/dist/utils/gasfree.d.ts.map +1 -0
- package/dist/utils/gasfree.js +228 -0
- package/dist/utils/gasfree.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +15 -14
package/README.md
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# @bankofai/x402
|
|
2
2
|
|
|
3
|
-
TypeScript
|
|
3
|
+
TypeScript SDK for the x402 payment protocol. Supports TRON and EVM (BSC) networks with automatic HTTP 402 payment handling.
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
7
|
- 🔐 **Automatic Payment Handling** - Transparently handles HTTP 402 Payment Required responses
|
|
8
|
-
- ⛓️ **
|
|
9
|
-
- 🔑 **TIP-712 Signing** - Secure cryptographic signatures
|
|
10
|
-
- 💰 **
|
|
8
|
+
- ⛓️ **Multi-Chain** - TRON (Mainnet, Nile, Shasta) and EVM/BSC (Mainnet, Testnet)
|
|
9
|
+
- 🔑 **TIP-712 / EIP-712 Signing** - Secure cryptographic signatures
|
|
10
|
+
- 💰 **GasFree Support** - Pay with USDT/USDD on TRON without holding TRX for gas
|
|
11
11
|
- 🚀 **Simple Integration** - Just 3 lines of code to get started
|
|
12
|
-
- 📦 **
|
|
12
|
+
- 📦 **Lightweight** - Minimal dependencies (`tronweb` for TRON, `viem` for EVM)
|
|
13
13
|
|
|
14
14
|
## Installation
|
|
15
15
|
|
|
@@ -20,28 +20,21 @@ npm i @bankofai/x402 tronweb
|
|
|
20
20
|
## Quick Start
|
|
21
21
|
|
|
22
22
|
```typescript
|
|
23
|
-
import TronWeb from 'tronweb';
|
|
24
23
|
import {
|
|
25
24
|
X402Client,
|
|
26
25
|
X402FetchClient,
|
|
27
|
-
|
|
26
|
+
ExactPermitTronClientMechanism,
|
|
28
27
|
TronClientSigner,
|
|
29
28
|
} from '@bankofai/x402';
|
|
30
29
|
|
|
31
|
-
// 1.
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
privateKey: 'your_private_key_here',
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
// 2. Create signer and register payment mechanism
|
|
38
|
-
const signer = TronClientSigner.withPrivateKey(tronWeb, 'your_private_key_here', 'nile');
|
|
39
|
-
const x402Client = new X402Client().register('tron:*', new ExactTronClientMechanism(signer));
|
|
30
|
+
// 1. Create signer and register payment mechanism
|
|
31
|
+
const signer = new TronClientSigner(process.env.TRON_PRIVATE_KEY);
|
|
32
|
+
const x402Client = new X402Client().register('tron:*', new ExactPermitTronClientMechanism(signer));
|
|
40
33
|
|
|
41
|
-
//
|
|
34
|
+
// 2. Create HTTP client with automatic 402 handling
|
|
42
35
|
const client = new X402FetchClient(x402Client);
|
|
43
36
|
|
|
44
|
-
//
|
|
37
|
+
// 3. Make requests - payments are handled automatically!
|
|
45
38
|
const response = await client.get('https://api.example.com/premium-data');
|
|
46
39
|
const data = await response.json();
|
|
47
40
|
console.log(data);
|
|
@@ -63,8 +56,9 @@ When you make a request to a protected resource:
|
|
|
63
56
|
|
|
64
57
|
- **`X402Client`** - Core payment client that manages payment mechanisms
|
|
65
58
|
- **`X402FetchClient`** - HTTP client wrapper with automatic 402 handling
|
|
66
|
-
- **`TronClientSigner`** -
|
|
67
|
-
- **`
|
|
59
|
+
- **`TronClientSigner`** / **`EvmClientSigner`** - Sign payment permits using TIP-712 / EIP-712
|
|
60
|
+
- **`ExactPermitTronClientMechanism`** - Implements the "exact_permit" payment scheme for TRON
|
|
61
|
+
- **`ExactGasFreeClientMechanism`** - Implements the "exact_gasfree" scheme (no TRX gas needed)
|
|
68
62
|
|
|
69
63
|
## API Reference
|
|
70
64
|
|
|
@@ -83,8 +77,8 @@ const x402Client = new X402Client();
|
|
|
83
77
|
Register a payment mechanism for a network pattern.
|
|
84
78
|
|
|
85
79
|
```typescript
|
|
86
|
-
x402Client.register('tron:*', new
|
|
87
|
-
x402Client.register('tron:nile', new
|
|
80
|
+
x402Client.register('tron:*', new ExactPermitTronClientMechanism(signer));
|
|
81
|
+
x402Client.register('tron:nile', new ExactPermitTronClientMechanism(nileSigner));
|
|
88
82
|
```
|
|
89
83
|
|
|
90
84
|
##### `selectPaymentRequirements(accepts: PaymentRequirements[], filters?: PaymentRequirementsFilter): PaymentRequirements`
|
|
@@ -147,22 +141,8 @@ const response = await client.request('https://api.example.com/data', {
|
|
|
147
141
|
|
|
148
142
|
Signer for creating payment permits using TIP-712.
|
|
149
143
|
|
|
150
|
-
#### Static Methods
|
|
151
|
-
|
|
152
|
-
##### `withPrivateKey(tronWeb: TronWeb, privateKey: string, network?: TronNetwork): TronClientSigner`
|
|
153
|
-
|
|
154
|
-
Create a signer with an explicit private key.
|
|
155
|
-
|
|
156
|
-
```typescript
|
|
157
|
-
const signer = TronClientSigner.withPrivateKey(tronWeb, '0x...', 'nile');
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
##### `fromTronWeb(tronWeb: TronWeb, network?: TronNetwork): TronClientSigner`
|
|
161
|
-
|
|
162
|
-
Create a signer from a TronWeb instance (uses default private key).
|
|
163
|
-
|
|
164
144
|
```typescript
|
|
165
|
-
const signer = TronClientSigner
|
|
145
|
+
const signer = new TronClientSigner(privateKey);
|
|
166
146
|
```
|
|
167
147
|
|
|
168
148
|
#### Instance Methods
|
|
@@ -191,12 +171,28 @@ Ensure sufficient token allowance, approving if necessary.
|
|
|
191
171
|
await signer.ensureAllowance(tokenAddress, BigInt(1000000), 'tron:nile', 'auto');
|
|
192
172
|
```
|
|
193
173
|
|
|
194
|
-
###
|
|
174
|
+
### EvmClientSigner
|
|
175
|
+
|
|
176
|
+
Signer for creating payment permits using EIP-712 (BSC and other EVM networks).
|
|
177
|
+
|
|
178
|
+
```typescript
|
|
179
|
+
const signer = new EvmClientSigner(privateKey);
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### ExactPermitTronClientMechanism
|
|
183
|
+
|
|
184
|
+
Payment mechanism implementing the "exact_permit" scheme for TRON.
|
|
185
|
+
|
|
186
|
+
```typescript
|
|
187
|
+
const mechanism = new ExactPermitTronClientMechanism(signer);
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### ExactGasFreeClientMechanism
|
|
195
191
|
|
|
196
|
-
Payment mechanism implementing the "
|
|
192
|
+
Payment mechanism implementing the "exact_gasfree" scheme for TRON (no TRX gas needed).
|
|
197
193
|
|
|
198
194
|
```typescript
|
|
199
|
-
const mechanism = new
|
|
195
|
+
const mechanism = new ExactGasFreeClientMechanism(signer);
|
|
200
196
|
```
|
|
201
197
|
|
|
202
198
|
## Usage Examples
|
|
@@ -204,16 +200,10 @@ const mechanism = new ExactTronClientMechanism(signer);
|
|
|
204
200
|
### Basic Usage with Automatic Payment
|
|
205
201
|
|
|
206
202
|
```typescript
|
|
207
|
-
import
|
|
208
|
-
import { X402Client, X402FetchClient, ExactTronClientMechanism, TronClientSigner } from '@bankofai/x402';
|
|
203
|
+
import { X402Client, X402FetchClient, ExactPermitTronClientMechanism, TronClientSigner } from '@bankofai/x402';
|
|
209
204
|
|
|
210
|
-
const
|
|
211
|
-
|
|
212
|
-
privateKey: process.env.TRON_PRIVATE_KEY,
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
const signer = TronClientSigner.withPrivateKey(tronWeb, process.env.TRON_PRIVATE_KEY, 'nile');
|
|
216
|
-
const x402Client = new X402Client().register('tron:*', new ExactTronClientMechanism(signer));
|
|
205
|
+
const signer = new TronClientSigner(process.env.TRON_PRIVATE_KEY);
|
|
206
|
+
const x402Client = new X402Client().register('tron:*', new ExactPermitTronClientMechanism(signer));
|
|
217
207
|
const client = new X402FetchClient(x402Client);
|
|
218
208
|
|
|
219
209
|
// Automatic payment handling
|
|
@@ -225,12 +215,10 @@ console.log(weather);
|
|
|
225
215
|
### Manual Payment Handling
|
|
226
216
|
|
|
227
217
|
```typescript
|
|
228
|
-
import
|
|
229
|
-
import { X402Client, ExactTronClientMechanism, TronClientSigner, encodePaymentPayload } from '@bankofai/x402';
|
|
218
|
+
import { X402Client, ExactPermitTronClientMechanism, TronClientSigner, encodePaymentPayload } from '@bankofai/x402';
|
|
230
219
|
|
|
231
|
-
const
|
|
232
|
-
const
|
|
233
|
-
const x402Client = new X402Client().register('tron:*', new ExactTronClientMechanism(signer));
|
|
220
|
+
const signer = new TronClientSigner(process.env.TRON_PRIVATE_KEY);
|
|
221
|
+
const x402Client = new X402Client().register('tron:*', new ExactPermitTronClientMechanism(signer));
|
|
234
222
|
|
|
235
223
|
// First request
|
|
236
224
|
const response = await fetch('https://api.example.com/data');
|
|
@@ -261,7 +249,7 @@ if (response.status === 402) {
|
|
|
261
249
|
### Custom Payment Selection
|
|
262
250
|
|
|
263
251
|
```typescript
|
|
264
|
-
import { X402Client, X402FetchClient,
|
|
252
|
+
import { X402Client, X402FetchClient, ExactPermitTronClientMechanism, TronClientSigner } from '@bankofai/x402';
|
|
265
253
|
|
|
266
254
|
// Custom selector function
|
|
267
255
|
const selector = (requirements) => {
|
|
@@ -273,23 +261,16 @@ const client = new X402FetchClient(x402Client, selector);
|
|
|
273
261
|
const response = await client.get('https://api.example.com/data');
|
|
274
262
|
```
|
|
275
263
|
|
|
276
|
-
###
|
|
264
|
+
### GasFree Usage (No TRX Gas Needed)
|
|
277
265
|
|
|
278
266
|
```typescript
|
|
279
|
-
|
|
280
|
-
import { X402Client, X402FetchClient, ExactTronClientMechanism, TronClientSigner } from '@bankofai/x402';
|
|
281
|
-
|
|
282
|
-
// Wait for TronLink
|
|
283
|
-
const tronWeb = window.tronWeb;
|
|
284
|
-
if (!tronWeb) {
|
|
285
|
-
throw new Error('TronLink not found');
|
|
286
|
-
}
|
|
267
|
+
import { X402Client, X402FetchClient, ExactGasFreeClientMechanism, TronClientSigner } from '@bankofai/x402';
|
|
287
268
|
|
|
288
|
-
const signer = TronClientSigner.
|
|
289
|
-
const x402Client = new X402Client().register('tron:*', new
|
|
269
|
+
const signer = new TronClientSigner(process.env.TRON_PRIVATE_KEY);
|
|
270
|
+
const x402Client = new X402Client().register('tron:*', new ExactGasFreeClientMechanism(signer));
|
|
290
271
|
const client = new X402FetchClient(x402Client);
|
|
291
272
|
|
|
292
|
-
//
|
|
273
|
+
// Pay with USDT/USDD without holding TRX
|
|
293
274
|
const response = await client.get('https://api.example.com/premium-content');
|
|
294
275
|
```
|
|
295
276
|
|
|
@@ -298,9 +279,9 @@ const response = await client.get('https://api.example.com/premium-content');
|
|
|
298
279
|
```typescript
|
|
299
280
|
// Support multiple TRON networks
|
|
300
281
|
const nileClient = new X402Client()
|
|
301
|
-
.register('tron:nile', new
|
|
302
|
-
.register('tron:shasta', new
|
|
303
|
-
.register('tron:mainnet', new
|
|
282
|
+
.register('tron:nile', new ExactPermitTronClientMechanism(nileSigner))
|
|
283
|
+
.register('tron:shasta', new ExactPermitTronClientMechanism(shastaSigner))
|
|
284
|
+
.register('tron:mainnet', new ExactPermitTronClientMechanism(mainnetSigner));
|
|
304
285
|
```
|
|
305
286
|
|
|
306
287
|
## Supported Networks
|
|
@@ -308,18 +289,26 @@ const nileClient = new X402Client()
|
|
|
308
289
|
- **TRON Mainnet** - `tron:mainnet`
|
|
309
290
|
- **TRON Shasta Testnet** - `tron:shasta`
|
|
310
291
|
- **TRON Nile Testnet** - `tron:nile`
|
|
292
|
+
- **BSC Mainnet** - `eip155:56`
|
|
293
|
+
- **BSC Testnet** - `eip155:97`
|
|
311
294
|
|
|
312
295
|
## Payment Schemes
|
|
313
296
|
|
|
314
|
-
### Exact Scheme
|
|
297
|
+
### Exact Permit Scheme (`exact_permit`)
|
|
315
298
|
|
|
316
|
-
The
|
|
299
|
+
The standard x402 payment scheme using TIP-712/EIP-712 permits. Requires a pre-deployed `PaymentPermit` contract on the network.
|
|
317
300
|
|
|
318
|
-
|
|
319
|
-
- Fixed-price resources
|
|
320
|
-
- Predictable pricing for API calls
|
|
301
|
+
### GasFree Scheme (`exact_gasfree`)
|
|
321
302
|
|
|
322
|
-
|
|
303
|
+
Allows users to pay using TRC-20 tokens (USDT/USDD) without holding any TRX for gas.
|
|
304
|
+
|
|
305
|
+
- **Accountless**: Uses the official GasFree HTTP Proxy for settlement.
|
|
306
|
+
- **Dynamic**: Automatically discovers available service providers.
|
|
307
|
+
- **Status Tracking**: Built-in polling for transaction confirmation.
|
|
308
|
+
|
|
309
|
+
### Exact Scheme (`exact`)
|
|
310
|
+
|
|
311
|
+
Direct payment scheme using ERC-3009 (`TransferWithAuthorization`) where supported by the token contract (primarily for EVM networks like BSC).
|
|
323
312
|
|
|
324
313
|
## Security
|
|
325
314
|
|
|
@@ -343,23 +332,15 @@ npm i tronweb@latest
|
|
|
343
332
|
Ensure you've registered a mechanism for the network:
|
|
344
333
|
|
|
345
334
|
```typescript
|
|
346
|
-
x402Client.register('tron:nile', new
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
### "Insufficient allowance"
|
|
350
|
-
|
|
351
|
-
The SDK automatically handles token approvals in `auto` mode. If you're using `skip` mode, manually approve tokens:
|
|
352
|
-
|
|
353
|
-
```typescript
|
|
354
|
-
await signer.ensureAllowance(tokenAddress, amount, network, 'auto');
|
|
335
|
+
x402Client.register('tron:nile', new ExactPermitTronClientMechanism(signer));
|
|
355
336
|
```
|
|
356
337
|
|
|
357
338
|
## Links
|
|
358
339
|
|
|
359
|
-
- **Repository**: https://github.com/
|
|
360
|
-
- **Issues**: https://github.com/
|
|
361
|
-
- **Contributing**: https://github.com/
|
|
362
|
-
- **Documentation**: https://
|
|
340
|
+
- **Repository**: https://github.com/BofAI/x402
|
|
341
|
+
- **Issues**: https://github.com/BofAI/x402/issues
|
|
342
|
+
- **Contributing**: https://github.com/BofAI/CONTRIBUTING.md
|
|
343
|
+
- **Documentation**: https://docs.bankofai.io/
|
|
363
344
|
- **TRON Documentation**: https://developers.tron.network/
|
|
364
345
|
- **TIP-712 Specification**: https://github.com/tronprotocol/tips/blob/master/tip-712.md
|
|
365
346
|
|
package/dist/abi.d.ts
CHANGED
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
import type { DeliveryKind } from './types/payment.js';
|
|
6
6
|
/** EIP-712 Primary Type for PaymentPermit */
|
|
7
7
|
export declare const PAYMENT_PERMIT_PRIMARY_TYPE = "PaymentPermitDetails";
|
|
8
|
+
/** EIP-712 Primary Type for GasFree */
|
|
9
|
+
export declare const GASFREE_PRIMARY_TYPE = "PermitTransfer";
|
|
8
10
|
/**
|
|
9
|
-
* EIP-712 Domain Type
|
|
10
|
-
* Based on contract: keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)")
|
|
11
|
-
* Note: NO version field!
|
|
11
|
+
* EIP-712 Domain Type for PaymentPermit
|
|
12
12
|
*/
|
|
13
|
-
export declare const
|
|
13
|
+
export declare const PAYMENT_PERMIT_EIP712_DOMAIN_TYPE: readonly [{
|
|
14
14
|
readonly name: "name";
|
|
15
15
|
readonly type: "string";
|
|
16
16
|
}, {
|
|
@@ -20,6 +20,22 @@ export declare const EIP712_DOMAIN_TYPE: readonly [{
|
|
|
20
20
|
readonly name: "verifyingContract";
|
|
21
21
|
readonly type: "address";
|
|
22
22
|
}];
|
|
23
|
+
/**
|
|
24
|
+
* EIP-712 Domain Type for GasFree
|
|
25
|
+
*/
|
|
26
|
+
export declare const GASFREE_DOMAIN_TYPE: readonly [{
|
|
27
|
+
readonly name: "name";
|
|
28
|
+
readonly type: "string";
|
|
29
|
+
}, {
|
|
30
|
+
readonly name: "version";
|
|
31
|
+
readonly type: "string";
|
|
32
|
+
}, {
|
|
33
|
+
readonly name: "chainId";
|
|
34
|
+
readonly type: "uint256";
|
|
35
|
+
}, {
|
|
36
|
+
readonly name: "verifyingContract";
|
|
37
|
+
readonly type: "address";
|
|
38
|
+
}];
|
|
23
39
|
/**
|
|
24
40
|
* EIP-712 type definitions for PaymentPermit
|
|
25
41
|
* Based on PermitHash.sol from the contract
|
package/dist/abi.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abi.d.ts","sourceRoot":"","sources":["../src/abi.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,6CAA6C;AAC7C,eAAO,MAAM,2BAA2B,yBAAyB,CAAC;AAElE
|
|
1
|
+
{"version":3,"file":"abi.d.ts","sourceRoot":"","sources":["../src/abi.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,6CAA6C;AAC7C,eAAO,MAAM,2BAA2B,yBAAyB,CAAC;AAElE,uCAAuC;AACvC,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,iCAAiC;;;;;;;;;EAIpC,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;EAKtB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwBvB,CAAC;AAEX,mDAAmD;AACnD,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAEjD,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBZ,CAAC"}
|
package/dist/abi.js
CHANGED
|
@@ -4,16 +4,25 @@
|
|
|
4
4
|
*/
|
|
5
5
|
/** EIP-712 Primary Type for PaymentPermit */
|
|
6
6
|
export const PAYMENT_PERMIT_PRIMARY_TYPE = 'PaymentPermitDetails';
|
|
7
|
+
/** EIP-712 Primary Type for GasFree */
|
|
8
|
+
export const GASFREE_PRIMARY_TYPE = 'PermitTransfer';
|
|
7
9
|
/**
|
|
8
|
-
* EIP-712 Domain Type
|
|
9
|
-
* Based on contract: keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)")
|
|
10
|
-
* Note: NO version field!
|
|
10
|
+
* EIP-712 Domain Type for PaymentPermit
|
|
11
11
|
*/
|
|
12
|
-
export const
|
|
12
|
+
export const PAYMENT_PERMIT_EIP712_DOMAIN_TYPE = [
|
|
13
13
|
{ name: 'name', type: 'string' },
|
|
14
14
|
{ name: 'chainId', type: 'uint256' },
|
|
15
15
|
{ name: 'verifyingContract', type: 'address' },
|
|
16
16
|
];
|
|
17
|
+
/**
|
|
18
|
+
* EIP-712 Domain Type for GasFree
|
|
19
|
+
*/
|
|
20
|
+
export const GASFREE_DOMAIN_TYPE = [
|
|
21
|
+
{ name: 'name', type: 'string' },
|
|
22
|
+
{ name: 'version', type: 'string' },
|
|
23
|
+
{ name: 'chainId', type: 'uint256' },
|
|
24
|
+
{ name: 'verifyingContract', type: 'address' },
|
|
25
|
+
];
|
|
17
26
|
/**
|
|
18
27
|
* EIP-712 type definitions for PaymentPermit
|
|
19
28
|
* Based on PermitHash.sol from the contract
|
package/dist/abi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abi.js","sourceRoot":"","sources":["../src/abi.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,6CAA6C;AAC7C,MAAM,CAAC,MAAM,2BAA2B,GAAG,sBAAsB,CAAC;AAElE
|
|
1
|
+
{"version":3,"file":"abi.js","sourceRoot":"","sources":["../src/abi.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* Policies are applied in order after mechanism filtering and before token selection.
|
|
5
5
|
*/
|
|
6
6
|
import type { PaymentRequirements } from '../types/index.js';
|
|
7
|
-
import type {
|
|
7
|
+
import type { PaymentPolicy } from './x402Client.js';
|
|
8
|
+
import type { X402Client } from './x402Client.js';
|
|
8
9
|
/**
|
|
9
10
|
* Policy that filters out requirements with insufficient balance.
|
|
10
11
|
*
|
|
@@ -12,12 +13,21 @@ import type { ClientSigner, PaymentPolicy } from './x402Client.js';
|
|
|
12
13
|
* this policy checks the user's on-chain balance for each option
|
|
13
14
|
* and removes requirements the user cannot afford.
|
|
14
15
|
*
|
|
16
|
+
* Signers are auto-resolved from registered mechanisms via the
|
|
17
|
+
* X402Client instance passed at construction time.
|
|
18
|
+
*
|
|
19
|
+
* Usage:
|
|
20
|
+
* x402.registerPolicy(SufficientBalancePolicy);
|
|
21
|
+
*
|
|
22
|
+
* Requirements whose network has no matching signer are kept as-is
|
|
23
|
+
* (not filtered out), so downstream mechanism matching can still work.
|
|
24
|
+
*
|
|
15
25
|
* If all requirements are unaffordable, returns an empty array so the
|
|
16
26
|
* caller can raise an appropriate error.
|
|
17
27
|
*/
|
|
18
28
|
export declare class SufficientBalancePolicy implements PaymentPolicy {
|
|
19
|
-
private
|
|
20
|
-
constructor(
|
|
29
|
+
private client;
|
|
30
|
+
constructor(client: X402Client);
|
|
21
31
|
apply(requirements: PaymentRequirements[]): Promise<PaymentRequirements[]>;
|
|
22
32
|
}
|
|
23
33
|
//# sourceMappingURL=policies.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policies.d.ts","sourceRoot":"","sources":["../../src/client/policies.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"policies.d.ts","sourceRoot":"","sources":["../../src/client/policies.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAOlD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,uBAAwB,YAAW,aAAa;IAC3D,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,UAAU;IAIxB,KAAK,CAAC,YAAY,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;CA8CjF"}
|
package/dist/client/policies.js
CHANGED
|
@@ -15,18 +15,42 @@ function getDecimals(req) {
|
|
|
15
15
|
* this policy checks the user's on-chain balance for each option
|
|
16
16
|
* and removes requirements the user cannot afford.
|
|
17
17
|
*
|
|
18
|
+
* Signers are auto-resolved from registered mechanisms via the
|
|
19
|
+
* X402Client instance passed at construction time.
|
|
20
|
+
*
|
|
21
|
+
* Usage:
|
|
22
|
+
* x402.registerPolicy(SufficientBalancePolicy);
|
|
23
|
+
*
|
|
24
|
+
* Requirements whose network has no matching signer are kept as-is
|
|
25
|
+
* (not filtered out), so downstream mechanism matching can still work.
|
|
26
|
+
*
|
|
18
27
|
* If all requirements are unaffordable, returns an empty array so the
|
|
19
28
|
* caller can raise an appropriate error.
|
|
20
29
|
*/
|
|
21
30
|
export class SufficientBalancePolicy {
|
|
22
|
-
|
|
23
|
-
constructor(
|
|
24
|
-
this.
|
|
31
|
+
client;
|
|
32
|
+
constructor(client) {
|
|
33
|
+
this.client = client;
|
|
25
34
|
}
|
|
26
35
|
async apply(requirements) {
|
|
27
36
|
const affordable = [];
|
|
28
37
|
for (const req of requirements) {
|
|
29
|
-
const
|
|
38
|
+
const signer = this.client.resolveSigner(req.scheme, req.network);
|
|
39
|
+
if (!signer) {
|
|
40
|
+
// No signer for this network — keep the requirement so mechanism
|
|
41
|
+
// matching can still select it (balance check is best-effort).
|
|
42
|
+
affordable.push(req);
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
let balance;
|
|
46
|
+
try {
|
|
47
|
+
balance = await signer.checkBalance(req.asset, req.network);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Signer cannot query this network; keep the requirement.
|
|
51
|
+
affordable.push(req);
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
30
54
|
let needed = BigInt(req.amount);
|
|
31
55
|
if (req.extra?.fee?.feeAmount) {
|
|
32
56
|
needed += BigInt(req.extra.fee.feeAmount);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policies.js","sourceRoot":"","sources":["../../src/client/policies.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"policies.js","sourceRoot":"","sources":["../../src/client/policies.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAK7C,SAAS,WAAW,CAAC,GAAwB;IAC3C,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,KAAK,EAAE,QAAQ,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,uBAAuB;IAC1B,MAAM,CAAa;IAE3B,YAAY,MAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,YAAmC;QAC7C,MAAM,UAAU,GAA0B,EAAE,CAAC;QAC7C,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,iEAAiE;gBACjE,+DAA+D;gBAC/D,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrB,SAAS;YACX,CAAC;YAED,IAAI,OAAe,CAAC;YACpB,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9D,CAAC;YAAC,MAAM,CAAC;gBACP,0DAA0D;gBAC1D,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrB,SAAS;YACX,CAAC;YAED,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;gBAC9B,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC5C,CAAC;YACD,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,EAAE,IAAI,QAAQ,CAAC;YAC/B,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/D,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC7D,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CACT,UAAU,MAAM,OAAO,GAAG,CAAC,OAAO,aAAa,QAAQ,cAAc,OAAO,OAAO,CACpF,CAAC;gBACF,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CACT,UAAU,MAAM,OAAO,GAAG,CAAC,OAAO,aAAa,QAAQ,aAAa,OAAO,YAAY,CACxF,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Manages payment mechanism registry and coordinates payment flows.
|
|
5
5
|
*/
|
|
6
|
+
import { GasFreeAPIClient } from '../utils/gasfree.js';
|
|
6
7
|
import type { PaymentRequirements, PaymentPayload, PaymentPermitContext } from '../types/index.js';
|
|
7
8
|
import type { TokenSelectionStrategy } from './tokenSelection.js';
|
|
8
9
|
/** Client mechanism interface */
|
|
@@ -26,9 +27,9 @@ export interface ClientSigner {
|
|
|
26
27
|
/** Sign raw message */
|
|
27
28
|
signMessage(message: Uint8Array): Promise<string>;
|
|
28
29
|
/** Sign typed data (EIP-712) */
|
|
29
|
-
signTypedData(domain: Record<string, unknown>, types: Record<string, unknown>, message: Record<string, unknown
|
|
30
|
+
signTypedData(domain: Record<string, unknown>, types: Record<string, unknown>, message: Record<string, unknown>, primaryType: string): Promise<string>;
|
|
30
31
|
/** Check token balance */
|
|
31
|
-
checkBalance(token: string, network: string): Promise<bigint>;
|
|
32
|
+
checkBalance(token: string, network: string, address?: string): Promise<bigint>;
|
|
32
33
|
/** Check token allowance */
|
|
33
34
|
checkAllowance(token: string, amount: bigint, network: string): Promise<bigint>;
|
|
34
35
|
/** Ensure sufficient allowance */
|
|
@@ -72,7 +73,13 @@ export declare class X402Client {
|
|
|
72
73
|
* @param policy - Function that filters/reorders payment requirements
|
|
73
74
|
* @returns this for method chaining
|
|
74
75
|
*/
|
|
75
|
-
registerPolicy(policy: PaymentPolicy
|
|
76
|
+
registerPolicy(policy: PaymentPolicy | {
|
|
77
|
+
new (client: X402Client): PaymentPolicy;
|
|
78
|
+
}): X402Client;
|
|
79
|
+
/**
|
|
80
|
+
* Resolve a signer from registered mechanisms for the given scheme+network.
|
|
81
|
+
*/
|
|
82
|
+
resolveSigner(scheme: string, network: string): ClientSigner | null;
|
|
76
83
|
/**
|
|
77
84
|
* Register payment mechanism for network pattern
|
|
78
85
|
*
|
|
@@ -81,6 +88,14 @@ export declare class X402Client {
|
|
|
81
88
|
* @returns this for method chaining
|
|
82
89
|
*/
|
|
83
90
|
register(networkPattern: string, mechanism: ClientMechanism): X402Client;
|
|
91
|
+
/**
|
|
92
|
+
* Register built-in GasFree mechanism for TRON
|
|
93
|
+
*
|
|
94
|
+
* @param signer - Client signer instance
|
|
95
|
+
* @param clients - Optional GasFree API clients per network
|
|
96
|
+
* @returns this for method chaining
|
|
97
|
+
*/
|
|
98
|
+
registerGasFree(signer: ClientSigner, clients?: Record<string, GasFreeAPIClient>): X402Client;
|
|
84
99
|
/**
|
|
85
100
|
* Select payment requirements from available options
|
|
86
101
|
*
|
|
@@ -109,9 +124,7 @@ export declare class X402Client {
|
|
|
109
124
|
* @param selector - Optional custom selector
|
|
110
125
|
* @returns Payment payload
|
|
111
126
|
*/
|
|
112
|
-
handlePayment(accepts: PaymentRequirements[], resource: string, extensions?:
|
|
113
|
-
paymentPermitContext?: PaymentPermitContext;
|
|
114
|
-
}, selector?: PaymentRequirementsSelector): Promise<PaymentPayload>;
|
|
127
|
+
handlePayment(accepts: PaymentRequirements[], resource: string, extensions?: Record<string, unknown>, selector?: PaymentRequirementsSelector): Promise<PaymentPayload>;
|
|
115
128
|
/**
|
|
116
129
|
* Find mechanism for scheme and network
|
|
117
130
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x402Client.d.ts","sourceRoot":"","sources":["../../src/client/x402Client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"x402Client.d.ts","sourceRoot":"","sources":["../../src/client/x402Client.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Manages payment mechanism registry and coordinates payment flows.
|
|
5
5
|
*/
|
|
6
|
+
import { ExactGasFreeClientMechanism } from '../mechanisms/exactGasfree.js';
|
|
6
7
|
import { DefaultTokenSelectionStrategy } from './tokenSelection.js';
|
|
7
8
|
import { UnsupportedNetworkError } from '../errors.js';
|
|
8
9
|
/**
|
|
@@ -27,9 +28,19 @@ export class X402Client {
|
|
|
27
28
|
* @returns this for method chaining
|
|
28
29
|
*/
|
|
29
30
|
registerPolicy(policy) {
|
|
30
|
-
|
|
31
|
+
const instance = typeof policy === 'function'
|
|
32
|
+
? new policy(this)
|
|
33
|
+
: policy;
|
|
34
|
+
this.policies.push(instance);
|
|
31
35
|
return this;
|
|
32
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Resolve a signer from registered mechanisms for the given scheme+network.
|
|
39
|
+
*/
|
|
40
|
+
resolveSigner(scheme, network) {
|
|
41
|
+
const mechanism = this.findMechanism(scheme, network);
|
|
42
|
+
return mechanism?.getSigner?.() ?? null;
|
|
43
|
+
}
|
|
33
44
|
/**
|
|
34
45
|
* Register payment mechanism for network pattern
|
|
35
46
|
*
|
|
@@ -47,6 +58,16 @@ export class X402Client {
|
|
|
47
58
|
this.mechanisms.sort((a, b) => b.priority - a.priority);
|
|
48
59
|
return this;
|
|
49
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Register built-in GasFree mechanism for TRON
|
|
63
|
+
*
|
|
64
|
+
* @param signer - Client signer instance
|
|
65
|
+
* @param clients - Optional GasFree API clients per network
|
|
66
|
+
* @returns this for method chaining
|
|
67
|
+
*/
|
|
68
|
+
registerGasFree(signer, clients = {}) {
|
|
69
|
+
return this.register('tron:*', new ExactGasFreeClientMechanism(signer, clients));
|
|
70
|
+
}
|
|
50
71
|
/**
|
|
51
72
|
* Select payment requirements from available options
|
|
52
73
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x402Client.js","sourceRoot":"","sources":["../../src/client/x402Client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"x402Client.js","sourceRoot":"","sources":["../../src/client/x402Client.ts"],"names":[],"mappings":"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"}
|