facinet 1.0.0 → 2.0.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 +181 -8
- package/dist/commands/pay.js +1 -1
- package/dist/commands/pay.js.map +1 -1
- package/dist/sdk/Facinet.d.ts +51 -0
- package/dist/sdk/Facinet.d.ts.map +1 -0
- package/dist/sdk/Facinet.js +239 -0
- package/dist/sdk/Facinet.js.map +1 -0
- package/dist/sdk/types.d.ts +86 -0
- package/dist/sdk/types.d.ts.map +1 -0
- package/dist/sdk/types.js +6 -0
- package/dist/sdk/types.js.map +1 -0
- package/dist/sdk.d.ts +21 -0
- package/dist/sdk.d.ts.map +1 -0
- package/dist/sdk.js +26 -0
- package/dist/sdk.js.map +1 -0
- package/dist/utils/api.d.ts.map +1 -1
- package/dist/utils/api.js +16 -2
- package/dist/utils/api.js.map +1 -1
- package/package.json +29 -5
- package/src/commands/connect.ts +0 -84
- package/src/commands/facilitator.ts +0 -256
- package/src/commands/pay.ts +0 -179
- package/src/index.ts +0 -108
- package/src/utils/api.ts +0 -164
- package/src/utils/config.ts +0 -67
- package/tsconfig.json +0 -20
package/README.md
CHANGED
|
@@ -1,25 +1,193 @@
|
|
|
1
|
-
# Facinet
|
|
1
|
+
# Facinet
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> JavaScript SDK and CLI tool for the x402 Facilitator Network
|
|
4
4
|
|
|
5
|
-
Make payments and manage facilitators on the x402 decentralized payment network powered by Avalanche.
|
|
5
|
+
Make gasless USDC payments and manage facilitators on the x402 decentralized payment network powered by Avalanche.
|
|
6
6
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
9
|
-
- 💳 **Make Payments** -
|
|
9
|
+
- 💳 **Make Payments** - Gasless USDC transfers via ERC-3009
|
|
10
10
|
- 🎲 **Random Facilitator Selection** - Fair distribution across network
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
11
|
+
- 🌐 **Multi-Platform** - Works in browser (MetaMask) and Node.js
|
|
12
|
+
- 🚀 **Easy Integration** - Simple SDK for developers
|
|
13
|
+
- 📊 **CLI Tool** - Command-line interface for payments and management
|
|
14
|
+
- 🔐 **Secure** - Wallet management with encryption
|
|
14
15
|
- ⚡ **Fast** - Built on Avalanche for sub-second finality
|
|
15
16
|
|
|
16
17
|
## Installation
|
|
17
18
|
|
|
19
|
+
### As a Library (SDK)
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm install facinet
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### As a CLI Tool
|
|
26
|
+
|
|
18
27
|
```bash
|
|
19
28
|
npm install -g facinet
|
|
20
29
|
```
|
|
21
30
|
|
|
22
|
-
##
|
|
31
|
+
## SDK Usage
|
|
32
|
+
|
|
33
|
+
### Browser (with MetaMask)
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
import { Facinet } from 'facinet';
|
|
37
|
+
|
|
38
|
+
// Initialize SDK
|
|
39
|
+
const facinet = new Facinet({
|
|
40
|
+
network: 'avalanche', // or 'ethereum', 'polygon'
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// Make a payment (MetaMask will prompt for signature)
|
|
44
|
+
const result = await facinet.pay({
|
|
45
|
+
amount: '1', // Amount in USDC
|
|
46
|
+
recipient: '0xYourMerchantAddress', // Where you want to receive payment
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
console.log('Payment successful!', result.txHash);
|
|
50
|
+
console.log('Processed by:', result.facilitator.name);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Node.js (with Private Key)
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
import { Facinet } from 'facinet';
|
|
57
|
+
|
|
58
|
+
// Initialize with private key
|
|
59
|
+
const facinet = new Facinet({
|
|
60
|
+
privateKey: process.env.PRIVATE_KEY,
|
|
61
|
+
network: 'avalanche',
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// Make a payment
|
|
65
|
+
const result = await facinet.pay({
|
|
66
|
+
amount: '5',
|
|
67
|
+
recipient: '0xYourMerchantAddress',
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
console.log('Transaction:', result.txHash);
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Quick One-Liner
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
import { Facinet } from 'facinet';
|
|
77
|
+
|
|
78
|
+
// Quick payment without creating instance
|
|
79
|
+
await Facinet.quickPay({
|
|
80
|
+
amount: '1',
|
|
81
|
+
recipient: '0xMerchantAddress',
|
|
82
|
+
privateKey: process.env.PRIVATE_KEY,
|
|
83
|
+
});
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Get Available Facilitators
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
const facinet = new Facinet();
|
|
90
|
+
|
|
91
|
+
// Get all active facilitators
|
|
92
|
+
const facilitators = await facinet.getFacilitators();
|
|
93
|
+
console.log(`${facilitators.length} active facilitators`);
|
|
94
|
+
|
|
95
|
+
// Get a random facilitator
|
|
96
|
+
const randomFacilitator = await facinet.selectRandomFacilitator();
|
|
97
|
+
console.log('Selected:', randomFacilitator.name);
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### SDK Configuration Options
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
interface FacinetConfig {
|
|
104
|
+
apiUrl?: string; // Default: 'https://x402-avalanche-chi.vercel.app'
|
|
105
|
+
privateKey?: string; // For Node.js (not needed in browser)
|
|
106
|
+
network?: 'avalanche' | 'ethereum' | 'polygon'; // Default: 'avalanche'
|
|
107
|
+
rpcUrl?: string; // Custom RPC URL (optional)
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### TypeScript Support
|
|
112
|
+
|
|
113
|
+
Facinet is written in TypeScript and includes full type definitions:
|
|
114
|
+
|
|
115
|
+
```typescript
|
|
116
|
+
import type {
|
|
117
|
+
FacinetConfig,
|
|
118
|
+
PaymentParams,
|
|
119
|
+
PaymentResult,
|
|
120
|
+
Facilitator
|
|
121
|
+
} from 'facinet';
|
|
122
|
+
|
|
123
|
+
const config: FacinetConfig = {
|
|
124
|
+
network: 'avalanche',
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
const params: PaymentParams = {
|
|
128
|
+
amount: '1',
|
|
129
|
+
recipient: '0x...',
|
|
130
|
+
};
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### React Example
|
|
134
|
+
|
|
135
|
+
```tsx
|
|
136
|
+
import { useState } from 'react';
|
|
137
|
+
import { Facinet } from 'facinet';
|
|
138
|
+
|
|
139
|
+
function PaymentButton() {
|
|
140
|
+
const [loading, setLoading] = useState(false);
|
|
141
|
+
const [txHash, setTxHash] = useState('');
|
|
142
|
+
|
|
143
|
+
const handlePayment = async () => {
|
|
144
|
+
setLoading(true);
|
|
145
|
+
try {
|
|
146
|
+
const facinet = new Facinet({ network: 'avalanche' });
|
|
147
|
+
|
|
148
|
+
const result = await facinet.pay({
|
|
149
|
+
amount: '1',
|
|
150
|
+
recipient: '0xYourMerchantAddress',
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
setTxHash(result.txHash);
|
|
154
|
+
alert('Payment successful!');
|
|
155
|
+
} catch (error) {
|
|
156
|
+
console.error('Payment failed:', error);
|
|
157
|
+
alert('Payment failed');
|
|
158
|
+
} finally {
|
|
159
|
+
setLoading(false);
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
return (
|
|
164
|
+
<div>
|
|
165
|
+
<button onClick={handlePayment} disabled={loading}>
|
|
166
|
+
{loading ? 'Processing...' : 'Pay 1 USDC'}
|
|
167
|
+
</button>
|
|
168
|
+
{txHash && (
|
|
169
|
+
<p>Transaction: <a href={`https://testnet.snowtrace.io/tx/${txHash}`} target="_blank">
|
|
170
|
+
{txHash.slice(0, 10)}...
|
|
171
|
+
</a></p>
|
|
172
|
+
)}
|
|
173
|
+
</div>
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### How SDK Payments Work
|
|
179
|
+
|
|
180
|
+
1. **Initialize SDK** - Create Facinet instance with your config
|
|
181
|
+
2. **Random Facilitator** - SDK automatically picks random active facilitator
|
|
182
|
+
3. **Sign Authorization** - User signs ERC-3009 authorization (gasless!)
|
|
183
|
+
4. **Facilitator Executes** - Facilitator submits transaction and pays gas
|
|
184
|
+
5. **Payment Complete** - USDC transferred to YOUR merchant address
|
|
185
|
+
|
|
186
|
+
**Key Point:** The `recipient` you specify in `pay()` is where YOU receive payment. The SDK automatically handles facilitator selection and gas payment.
|
|
187
|
+
|
|
188
|
+
## CLI Usage
|
|
189
|
+
|
|
190
|
+
### Quick Start
|
|
23
191
|
|
|
24
192
|
### 1. Connect Your Wallet
|
|
25
193
|
|
|
@@ -219,6 +387,9 @@ facinet --help
|
|
|
219
387
|
```
|
|
220
388
|
facinet/
|
|
221
389
|
├── src/
|
|
390
|
+
│ ├── sdk/
|
|
391
|
+
│ │ ├── Facinet.ts # Main SDK class
|
|
392
|
+
│ │ └── types.ts # TypeScript types
|
|
222
393
|
│ ├── commands/
|
|
223
394
|
│ │ ├── connect.ts # Wallet connection
|
|
224
395
|
│ │ ├── pay.ts # Payment processing
|
|
@@ -226,7 +397,9 @@ facinet/
|
|
|
226
397
|
│ ├── utils/
|
|
227
398
|
│ │ ├── config.ts # Configuration management
|
|
228
399
|
│ │ └── api.ts # API client
|
|
400
|
+
│ ├── sdk.ts # SDK exports
|
|
229
401
|
│ └── index.ts # CLI entry point
|
|
402
|
+
├── dist/ # Compiled JavaScript
|
|
230
403
|
├── package.json
|
|
231
404
|
├── tsconfig.json
|
|
232
405
|
└── README.md
|
package/dist/commands/pay.js
CHANGED
|
@@ -83,7 +83,7 @@ async function payCommand(options) {
|
|
|
83
83
|
let spinner = (0, ora_1.default)('Selecting random facilitator...').start();
|
|
84
84
|
try {
|
|
85
85
|
// Get random facilitator
|
|
86
|
-
const facilitator = await (0, api_1.selectRandomFacilitator)(config.apiUrl || '
|
|
86
|
+
const facilitator = await (0, api_1.selectRandomFacilitator)(config.apiUrl || options.network || 'https://x402-avalanche-chi.vercel.app');
|
|
87
87
|
spinner.succeed(`Selected facilitator: ${chalk_1.default.green(facilitator.name)}`);
|
|
88
88
|
// Initialize wallet and provider
|
|
89
89
|
spinner = (0, ora_1.default)('Preparing transaction...').start();
|
package/dist/commands/pay.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pay.js","sourceRoot":"","sources":["../../src/commands/pay.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pay.js","sourceRoot":"","sources":["../../src/commands/pay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Facinet SDK - Main Class
|
|
3
|
+
*
|
|
4
|
+
* JavaScript/TypeScript SDK for integrating x402 payments
|
|
5
|
+
*/
|
|
6
|
+
import type { FacinetConfig, PaymentParams, PaymentResult, Facilitator } from './types';
|
|
7
|
+
export declare class Facinet {
|
|
8
|
+
private config;
|
|
9
|
+
private chain;
|
|
10
|
+
private wallet?;
|
|
11
|
+
constructor(config?: FacinetConfig);
|
|
12
|
+
/**
|
|
13
|
+
* Make a payment via x402 facilitator network
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const facinet = new Facinet();
|
|
18
|
+
* const result = await facinet.pay({
|
|
19
|
+
* amount: '1',
|
|
20
|
+
* recipient: '0xMerchantAddress',
|
|
21
|
+
* payerAddress: '0xCustomerAddress'
|
|
22
|
+
* });
|
|
23
|
+
* console.log('Payment successful!', result.txHash);
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
pay(params: PaymentParams): Promise<PaymentResult>;
|
|
27
|
+
/**
|
|
28
|
+
* Get all active facilitators
|
|
29
|
+
*/
|
|
30
|
+
getFacilitators(): Promise<Facilitator[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Select a random active facilitator
|
|
33
|
+
*/
|
|
34
|
+
selectRandomFacilitator(): Promise<Facilitator>;
|
|
35
|
+
/**
|
|
36
|
+
* Quick payment helper (static method)
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* await Facinet.quickPay({
|
|
41
|
+
* amount: '1',
|
|
42
|
+
* recipient: '0xMerchantAddress',
|
|
43
|
+
* privateKey: process.env.PRIVATE_KEY
|
|
44
|
+
* });
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
static quickPay(params: PaymentParams & {
|
|
48
|
+
privateKey?: string;
|
|
49
|
+
}): Promise<PaymentResult>;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=Facinet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Facinet.d.ts","sourceRoot":"","sources":["../../src/sdk/Facinet.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACb,WAAW,EAEZ,MAAM,SAAS,CAAC;AAiCjB,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,MAAM,GAAE,aAAkB;IAsBtC;;;;;;;;;;;;;OAaG;IACG,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAyIxD;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAc/C;;OAEG;IACG,uBAAuB,IAAI,OAAO,CAAC,WAAW,CAAC;IAWrD;;;;;;;;;;;OAWG;WACU,QAAQ,CACnB,MAAM,EAAE,aAAa,GAAG;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9C,OAAO,CAAC,aAAa,CAAC;CAW1B"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Facinet SDK - Main Class
|
|
4
|
+
*
|
|
5
|
+
* JavaScript/TypeScript SDK for integrating x402 payments
|
|
6
|
+
*/
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.Facinet = void 0;
|
|
12
|
+
const axios_1 = __importDefault(require("axios"));
|
|
13
|
+
const ethers_1 = require("ethers");
|
|
14
|
+
const CHAINS = {
|
|
15
|
+
avalanche: {
|
|
16
|
+
name: 'Avalanche Fuji',
|
|
17
|
+
chainId: 43113,
|
|
18
|
+
rpcUrl: 'https://api.avax-test.network/ext/bc/C/rpc',
|
|
19
|
+
usdcAddress: '0x5425890298aed601595a70AB815c96711a31Bc65',
|
|
20
|
+
gasToken: 'AVAX',
|
|
21
|
+
blockExplorer: 'https://testnet.snowtrace.io',
|
|
22
|
+
},
|
|
23
|
+
ethereum: {
|
|
24
|
+
name: 'Ethereum Sepolia',
|
|
25
|
+
chainId: 11155111,
|
|
26
|
+
rpcUrl: 'https://rpc.sepolia.org',
|
|
27
|
+
usdcAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',
|
|
28
|
+
gasToken: 'ETH',
|
|
29
|
+
blockExplorer: 'https://sepolia.etherscan.io',
|
|
30
|
+
},
|
|
31
|
+
polygon: {
|
|
32
|
+
name: 'Polygon Mumbai',
|
|
33
|
+
chainId: 80001,
|
|
34
|
+
rpcUrl: 'https://rpc-mumbai.maticvigil.com',
|
|
35
|
+
usdcAddress: '0x9999f7Fea5938fD3b1E26A12c3f2fb024e194f97',
|
|
36
|
+
gasToken: 'MATIC',
|
|
37
|
+
blockExplorer: 'https://mumbai.polygonscan.com',
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
const ERC3009_ABI = [
|
|
41
|
+
'function transferWithAuthorization(address from, address to, uint256 value, uint256 validAfter, uint256 validBefore, bytes32 nonce, uint8 v, bytes32 r, bytes32 s) external',
|
|
42
|
+
];
|
|
43
|
+
class Facinet {
|
|
44
|
+
constructor(config = {}) {
|
|
45
|
+
this.config = {
|
|
46
|
+
apiUrl: config.apiUrl || 'https://x402-avalanche-chi.vercel.app',
|
|
47
|
+
privateKey: config.privateKey || '',
|
|
48
|
+
network: config.network || 'avalanche',
|
|
49
|
+
rpcUrl: config.rpcUrl || '',
|
|
50
|
+
};
|
|
51
|
+
this.chain = CHAINS[this.config.network];
|
|
52
|
+
if (!this.chain) {
|
|
53
|
+
throw new Error(`Unsupported network: ${this.config.network}`);
|
|
54
|
+
}
|
|
55
|
+
// Initialize wallet if private key provided (Node.js)
|
|
56
|
+
if (this.config.privateKey) {
|
|
57
|
+
const provider = new ethers_1.JsonRpcProvider(this.config.rpcUrl || this.chain.rpcUrl);
|
|
58
|
+
this.wallet = new ethers_1.Wallet(this.config.privateKey, provider);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Make a payment via x402 facilitator network
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const facinet = new Facinet();
|
|
67
|
+
* const result = await facinet.pay({
|
|
68
|
+
* amount: '1',
|
|
69
|
+
* recipient: '0xMerchantAddress',
|
|
70
|
+
* payerAddress: '0xCustomerAddress'
|
|
71
|
+
* });
|
|
72
|
+
* console.log('Payment successful!', result.txHash);
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
async pay(params) {
|
|
76
|
+
// Validate parameters
|
|
77
|
+
if (!params.amount || parseFloat(params.amount) <= 0) {
|
|
78
|
+
throw new Error('Invalid amount');
|
|
79
|
+
}
|
|
80
|
+
if (!params.recipient.match(/^0x[a-fA-F0-9]{40}$/)) {
|
|
81
|
+
throw new Error('Invalid recipient address');
|
|
82
|
+
}
|
|
83
|
+
// Get payer address
|
|
84
|
+
let payerAddress = params.payerAddress || '';
|
|
85
|
+
if (!payerAddress) {
|
|
86
|
+
if (this.wallet) {
|
|
87
|
+
payerAddress = this.wallet.address;
|
|
88
|
+
}
|
|
89
|
+
else if (typeof window !== 'undefined' && window.ethereum) {
|
|
90
|
+
// Browser - get from MetaMask
|
|
91
|
+
const accounts = await window.ethereum.request({
|
|
92
|
+
method: 'eth_requestAccounts',
|
|
93
|
+
});
|
|
94
|
+
payerAddress = accounts[0];
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
throw new Error('No payer address provided and no wallet available. Provide payerAddress or privateKey in config.');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Select random facilitator
|
|
101
|
+
const facilitator = await this.selectRandomFacilitator();
|
|
102
|
+
// Create ERC-3009 authorization
|
|
103
|
+
const amount = BigInt(parseFloat(params.amount) * 1000000); // 6 decimals
|
|
104
|
+
const validAfter = Math.floor(Date.now() / 1000) - 60;
|
|
105
|
+
const validBefore = validAfter + 3600; // 1 hour
|
|
106
|
+
const nonce = '0x' +
|
|
107
|
+
Array.from({ length: 64 }, () => Math.floor(Math.random() * 16).toString(16)).join('');
|
|
108
|
+
// EIP-712 Domain
|
|
109
|
+
const domain = {
|
|
110
|
+
name: 'USD Coin',
|
|
111
|
+
version: '2',
|
|
112
|
+
chainId: this.chain.chainId,
|
|
113
|
+
verifyingContract: this.chain.usdcAddress,
|
|
114
|
+
};
|
|
115
|
+
const types = {
|
|
116
|
+
TransferWithAuthorization: [
|
|
117
|
+
{ name: 'from', type: 'address' },
|
|
118
|
+
{ name: 'to', type: 'address' },
|
|
119
|
+
{ name: 'value', type: 'uint256' },
|
|
120
|
+
{ name: 'validAfter', type: 'uint256' },
|
|
121
|
+
{ name: 'validBefore', type: 'uint256' },
|
|
122
|
+
{ name: 'nonce', type: 'bytes32' },
|
|
123
|
+
],
|
|
124
|
+
};
|
|
125
|
+
const value = {
|
|
126
|
+
from: payerAddress,
|
|
127
|
+
to: params.recipient, // Payment goes to merchant's address!
|
|
128
|
+
value: amount,
|
|
129
|
+
validAfter: validAfter,
|
|
130
|
+
validBefore: validBefore,
|
|
131
|
+
nonce: nonce,
|
|
132
|
+
};
|
|
133
|
+
// Sign authorization
|
|
134
|
+
let signature;
|
|
135
|
+
if (this.wallet) {
|
|
136
|
+
// Node.js - sign with wallet
|
|
137
|
+
signature = await this.wallet.signTypedData(domain, types, value);
|
|
138
|
+
}
|
|
139
|
+
else if (typeof window !== 'undefined' && window.ethereum) {
|
|
140
|
+
// Browser - sign with MetaMask
|
|
141
|
+
signature = await window.ethereum.request({
|
|
142
|
+
method: 'eth_signTypedData_v4',
|
|
143
|
+
params: [
|
|
144
|
+
payerAddress,
|
|
145
|
+
JSON.stringify({
|
|
146
|
+
domain,
|
|
147
|
+
types,
|
|
148
|
+
primaryType: 'TransferWithAuthorization',
|
|
149
|
+
message: value,
|
|
150
|
+
}),
|
|
151
|
+
],
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
throw new Error('No signing method available');
|
|
156
|
+
}
|
|
157
|
+
// Submit to facilitator
|
|
158
|
+
const paymentPayload = {
|
|
159
|
+
signature,
|
|
160
|
+
authorization: {
|
|
161
|
+
from: payerAddress,
|
|
162
|
+
to: params.recipient,
|
|
163
|
+
value: amount.toString(),
|
|
164
|
+
validAfter: validAfter.toString(),
|
|
165
|
+
validBefore: validBefore.toString(),
|
|
166
|
+
nonce: nonce,
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
const response = await axios_1.default.post(`${this.config.apiUrl}/api/x402/settle-custom`, {
|
|
170
|
+
facilitatorId: facilitator.id,
|
|
171
|
+
paymentPayload: {
|
|
172
|
+
payload: paymentPayload,
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
if (!response.data.success) {
|
|
176
|
+
throw new Error('Payment failed: ' + (response.data.error || 'Unknown error'));
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
success: true,
|
|
180
|
+
txHash: response.data.txHash,
|
|
181
|
+
facilitator: {
|
|
182
|
+
id: facilitator.id,
|
|
183
|
+
name: facilitator.name,
|
|
184
|
+
wallet: facilitator.facilitatorWallet,
|
|
185
|
+
},
|
|
186
|
+
payment: {
|
|
187
|
+
from: payerAddress,
|
|
188
|
+
to: params.recipient,
|
|
189
|
+
amount: params.amount,
|
|
190
|
+
network: this.config.network,
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Get all active facilitators
|
|
196
|
+
*/
|
|
197
|
+
async getFacilitators() {
|
|
198
|
+
const response = await axios_1.default.get(`${this.config.apiUrl}/api/facilitator/list`);
|
|
199
|
+
if (response.data.success) {
|
|
200
|
+
return response.data.facilitators.filter((f) => f.status === 'active');
|
|
201
|
+
}
|
|
202
|
+
return [];
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Select a random active facilitator
|
|
206
|
+
*/
|
|
207
|
+
async selectRandomFacilitator() {
|
|
208
|
+
const facilitators = await this.getFacilitators();
|
|
209
|
+
if (facilitators.length === 0) {
|
|
210
|
+
throw new Error('No active facilitators available');
|
|
211
|
+
}
|
|
212
|
+
const randomIndex = Math.floor(Math.random() * facilitators.length);
|
|
213
|
+
return facilitators[randomIndex];
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Quick payment helper (static method)
|
|
217
|
+
*
|
|
218
|
+
* @example
|
|
219
|
+
* ```typescript
|
|
220
|
+
* await Facinet.quickPay({
|
|
221
|
+
* amount: '1',
|
|
222
|
+
* recipient: '0xMerchantAddress',
|
|
223
|
+
* privateKey: process.env.PRIVATE_KEY
|
|
224
|
+
* });
|
|
225
|
+
* ```
|
|
226
|
+
*/
|
|
227
|
+
static async quickPay(params) {
|
|
228
|
+
const facinet = new Facinet({
|
|
229
|
+
privateKey: params.privateKey,
|
|
230
|
+
});
|
|
231
|
+
return facinet.pay({
|
|
232
|
+
amount: params.amount,
|
|
233
|
+
recipient: params.recipient,
|
|
234
|
+
payerAddress: params.payerAddress,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
exports.Facinet = Facinet;
|
|
239
|
+
//# sourceMappingURL=Facinet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Facinet.js","sourceRoot":"","sources":["../../src/sdk/Facinet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK Type Definitions
|
|
3
|
+
*/
|
|
4
|
+
export interface FacinetConfig {
|
|
5
|
+
/**
|
|
6
|
+
* API URL for x402 facilitator network
|
|
7
|
+
* @default 'https://x402-avalanche-chi.vercel.app'
|
|
8
|
+
*/
|
|
9
|
+
apiUrl?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Private key for signing transactions (Node.js only)
|
|
12
|
+
* Not needed for browser - uses window.ethereum
|
|
13
|
+
*/
|
|
14
|
+
privateKey?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Network to use
|
|
17
|
+
* @default 'avalanche'
|
|
18
|
+
*/
|
|
19
|
+
network?: 'avalanche' | 'ethereum' | 'polygon';
|
|
20
|
+
/**
|
|
21
|
+
* Custom RPC URL (optional)
|
|
22
|
+
*/
|
|
23
|
+
rpcUrl?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface PaymentParams {
|
|
26
|
+
/**
|
|
27
|
+
* Payment amount in USDC
|
|
28
|
+
* @example '1'
|
|
29
|
+
*/
|
|
30
|
+
amount: string;
|
|
31
|
+
/**
|
|
32
|
+
* Recipient address (where USDC goes)
|
|
33
|
+
* This is YOUR merchant address
|
|
34
|
+
*/
|
|
35
|
+
recipient: `0x${string}`;
|
|
36
|
+
/**
|
|
37
|
+
* Payer address (customer wallet)
|
|
38
|
+
* Optional - if not provided, uses connected wallet or privateKey
|
|
39
|
+
*/
|
|
40
|
+
payerAddress?: `0x${string}`;
|
|
41
|
+
}
|
|
42
|
+
export interface PaymentResult {
|
|
43
|
+
/**
|
|
44
|
+
* Whether payment was successful
|
|
45
|
+
*/
|
|
46
|
+
success: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Transaction hash
|
|
49
|
+
*/
|
|
50
|
+
txHash: string;
|
|
51
|
+
/**
|
|
52
|
+
* Facilitator that processed the payment
|
|
53
|
+
*/
|
|
54
|
+
facilitator: {
|
|
55
|
+
id: string;
|
|
56
|
+
name: string;
|
|
57
|
+
wallet: string;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Payment details
|
|
61
|
+
*/
|
|
62
|
+
payment: {
|
|
63
|
+
from: string;
|
|
64
|
+
to: string;
|
|
65
|
+
amount: string;
|
|
66
|
+
network: string;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export interface Facilitator {
|
|
70
|
+
id: string;
|
|
71
|
+
name: string;
|
|
72
|
+
facilitatorWallet: string;
|
|
73
|
+
paymentRecipient: string;
|
|
74
|
+
status: 'active' | 'inactive' | 'needs_funding';
|
|
75
|
+
totalPayments: number;
|
|
76
|
+
gasBalance?: string;
|
|
77
|
+
}
|
|
78
|
+
export interface ChainConfig {
|
|
79
|
+
name: string;
|
|
80
|
+
chainId: number;
|
|
81
|
+
rpcUrl: string;
|
|
82
|
+
usdcAddress: `0x${string}`;
|
|
83
|
+
gasToken: string;
|
|
84
|
+
blockExplorer: string;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;IAE/C;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,SAAS,EAAE,KAAK,MAAM,EAAE,CAAC;IAEzB;;;OAGG;IACH,YAAY,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,WAAW,EAAE;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAEF;;OAEG;IACH,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,eAAe,CAAC;IAChD,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|