facinet 2.3.0 → 2.4.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 +215 -40
- package/dist/browser.js +53 -13
- package/dist/browser.js.map +2 -2
- package/dist/commands/facilitator.d.ts.map +1 -1
- package/dist/commands/facilitator.js +16 -8
- package/dist/commands/facilitator.js.map +1 -1
- package/dist/commands/pay.d.ts.map +1 -1
- package/dist/commands/pay.js +12 -5
- package/dist/commands/pay.js.map +1 -1
- package/dist/index.js +51 -28
- package/dist/index.js.map +2 -2
- package/dist/sdk/Facinet.d.ts +2 -2
- package/dist/sdk/Facinet.d.ts.map +1 -1
- package/dist/sdk/Facinet.js +58 -10
- package/dist/sdk/Facinet.js.map +1 -1
- package/dist/sdk.js +53 -13
- package/dist/sdk.js.map +2 -2
- package/dist/sdk.mjs +53 -13
- package/dist/sdk.mjs.map +2 -2
- package/dist/utils/api.d.ts +6 -2
- package/dist/utils/api.d.ts.map +1 -1
- package/dist/utils/api.js +29 -8
- package/dist/utils/api.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facilitator.d.ts","sourceRoot":"","sources":["../../src/commands/facilitator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH;;GAEG;AACH,iBAAe,MAAM,CAAC,OAAO,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"facilitator.d.ts","sourceRoot":"","sources":["../../src/commands/facilitator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH;;GAEG;AACH,iBAAe,MAAM,CAAC,OAAO,EAAE,GAAG,iBAgGjC;AAED;;GAEG;AACH,iBAAe,IAAI,CAAC,OAAO,EAAE,GAAG,iBAuC/B;AAED;;GAEG;AACH,iBAAe,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,iBA+B7C;AAED;;GAEG;AACH,iBAAe,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,iBAwB9C;AAeD,eAAO,MAAM,kBAAkB;;;;;CAK9B,CAAC"}
|
|
@@ -75,26 +75,27 @@ async function create(options) {
|
|
|
75
75
|
const wallet = new ethers_1.Wallet(config.privateKey);
|
|
76
76
|
const facilitatorWallet = ethers_1.Wallet.createRandom();
|
|
77
77
|
spinner.text = 'Registering facilitator...';
|
|
78
|
-
|
|
78
|
+
// Note: createFacilitator always throws an error directing users to web interface
|
|
79
|
+
// This is intentional - facilitator creation requires payment flow
|
|
80
|
+
await (0, api_1.createFacilitator)(options.url, {
|
|
79
81
|
name,
|
|
80
82
|
facilitatorWallet: facilitatorWallet.address,
|
|
81
83
|
facilitatorPrivateKey: facilitatorWallet.privateKey,
|
|
82
84
|
paymentRecipient: recipient,
|
|
83
85
|
createdBy: wallet.address,
|
|
84
86
|
});
|
|
87
|
+
// This code won't be reached since createFacilitator throws
|
|
85
88
|
spinner.succeed('Facilitator created!');
|
|
86
89
|
console.log(chalk_1.default.green('\n\u2705 Facilitator created successfully!'));
|
|
87
90
|
console.log(chalk_1.default.gray(`\n\uD83D\uDCC4 Details:`));
|
|
88
|
-
console.log(chalk_1.default.gray(` ID: ${result.id}`));
|
|
89
91
|
console.log(chalk_1.default.gray(` Name: ${name}`));
|
|
90
92
|
console.log(chalk_1.default.gray(` Wallet: ${facilitatorWallet.address}`));
|
|
91
|
-
console.log(chalk_1.default.gray(` Status: ${result.status}`));
|
|
92
93
|
console.log(chalk_1.default.yellow(`\n\u26A0\uFE0F IMPORTANT: Save facilitator wallet private key!`));
|
|
93
94
|
console.log(chalk_1.default.gray(` Private Key: ${facilitatorWallet.privateKey}\n`));
|
|
94
95
|
console.log(chalk_1.default.cyan('\uD83D\uDCA1 Next steps:'));
|
|
95
96
|
console.log(chalk_1.default.gray(` 1. Fund facilitator wallet with gas token`));
|
|
96
|
-
console.log(chalk_1.default.gray(` 2.
|
|
97
|
-
console.log(chalk_1.default.gray(` 3.
|
|
97
|
+
console.log(chalk_1.default.gray(` 2. Use the web interface to complete facilitator registration`));
|
|
98
|
+
console.log(chalk_1.default.gray(` 3. Check status: facinet facilitator list\n`));
|
|
98
99
|
}
|
|
99
100
|
catch (error) {
|
|
100
101
|
spinner.fail('Failed to create facilitator');
|
|
@@ -117,12 +118,19 @@ async function list(options) {
|
|
|
117
118
|
}
|
|
118
119
|
console.log(chalk_1.default.gray(`Found ${facilitators.length} active facilitator(s):\n`));
|
|
119
120
|
facilitators.forEach((fac, index) => {
|
|
120
|
-
|
|
121
|
+
const facilitatorName = fac.name || `Facilitator ${fac.id?.slice(0, 8) || 'Unknown'}`;
|
|
122
|
+
console.log(chalk_1.default.cyan(`${index + 1}. ${facilitatorName}`));
|
|
121
123
|
console.log(chalk_1.default.gray(` ID: ${fac.id}`));
|
|
122
124
|
console.log(chalk_1.default.gray(` Wallet: ${fac.facilitatorWallet}`));
|
|
123
125
|
console.log(chalk_1.default.gray(` Status: ${getStatusEmoji(fac.status)} ${fac.status.toUpperCase()}`));
|
|
124
|
-
|
|
125
|
-
|
|
126
|
+
if (fac.network) {
|
|
127
|
+
console.log(chalk_1.default.gray(` Network: ${fac.network}`));
|
|
128
|
+
}
|
|
129
|
+
if (fac.chainId) {
|
|
130
|
+
console.log(chalk_1.default.gray(` Chain ID: ${fac.chainId}`));
|
|
131
|
+
}
|
|
132
|
+
console.log(chalk_1.default.gray(` Payments: ${fac.totalPayments || 0}`));
|
|
133
|
+
console.log(chalk_1.default.gray(` Created by: ${fac.createdBy || 'Unknown'}`));
|
|
126
134
|
console.log('');
|
|
127
135
|
});
|
|
128
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facilitator.js","sourceRoot":"","sources":["../../src/commands/facilitator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"facilitator.js","sourceRoot":"","sources":["../../src/commands/facilitator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pay.d.ts","sourceRoot":"","sources":["../../src/commands/pay.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"pay.d.ts","sourceRoot":"","sources":["../../src/commands/pay.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwCH,wBAAsB,UAAU,CAAC,OAAO,EAAE,GAAG,iBA4J5C"}
|
package/dist/commands/pay.js
CHANGED
|
@@ -21,24 +21,28 @@ const CHAINS = {
|
|
|
21
21
|
rpcUrl: 'https://api.avax-test.network/ext/bc/C/rpc',
|
|
22
22
|
usdcAddress: '0x5425890298aed601595a70AB815c96711a31Bc65',
|
|
23
23
|
chainId: 43113,
|
|
24
|
+
apiUrl: 'https://x402-avalanche-chi.vercel.app',
|
|
24
25
|
},
|
|
25
26
|
ethereum: {
|
|
26
27
|
name: 'Ethereum Sepolia',
|
|
27
28
|
rpcUrl: 'https://ethereum-sepolia-rpc.publicnode.com',
|
|
28
29
|
usdcAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',
|
|
29
30
|
chainId: 11155111,
|
|
31
|
+
apiUrl: 'https://x402-ethereum-chi.vercel.app',
|
|
30
32
|
},
|
|
31
33
|
base: {
|
|
32
34
|
name: 'Base Sepolia',
|
|
33
35
|
rpcUrl: 'https://sepolia.base.org',
|
|
34
36
|
usdcAddress: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',
|
|
35
37
|
chainId: 84532,
|
|
38
|
+
apiUrl: 'https://x402-base-chi.vercel.app',
|
|
36
39
|
},
|
|
37
40
|
polygon: {
|
|
38
41
|
name: 'Polygon Amoy',
|
|
39
42
|
rpcUrl: 'https://rpc-amoy.polygon.technology',
|
|
40
43
|
usdcAddress: '0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582',
|
|
41
44
|
chainId: 80002,
|
|
45
|
+
apiUrl: 'https://x402-polygon-chi.vercel.app',
|
|
42
46
|
},
|
|
43
47
|
};
|
|
44
48
|
async function payCommand(options) {
|
|
@@ -89,8 +93,10 @@ async function payCommand(options) {
|
|
|
89
93
|
}
|
|
90
94
|
let spinner = (0, ora_1.default)('Selecting random facilitator...').start();
|
|
91
95
|
try {
|
|
92
|
-
|
|
93
|
-
|
|
96
|
+
// Use network-specific API URL
|
|
97
|
+
const apiUrl = config.apiUrl || chain.apiUrl || 'https://x402-avalanche-chi.vercel.app';
|
|
98
|
+
const facilitator = await (0, api_1.selectRandomFacilitator)(apiUrl, chain.chainId);
|
|
99
|
+
spinner.succeed(`Selected facilitator: ${chalk_1.default.green(facilitator.name || facilitator.id)}`);
|
|
94
100
|
spinner = (0, ora_1.default)('Preparing transaction...').start();
|
|
95
101
|
const wallet = new ethers_1.Wallet(config.privateKey);
|
|
96
102
|
const provider = new ethers_1.JsonRpcProvider(chain.rpcUrl);
|
|
@@ -140,7 +146,7 @@ async function payCommand(options) {
|
|
|
140
146
|
},
|
|
141
147
|
};
|
|
142
148
|
const axios = require('axios');
|
|
143
|
-
|
|
149
|
+
// Reuse the apiUrl variable defined above
|
|
144
150
|
const response = await axios.post(`${apiUrl}/api/x402/settle-custom`, {
|
|
145
151
|
facilitatorId: facilitator.id,
|
|
146
152
|
paymentPayload,
|
|
@@ -152,10 +158,11 @@ async function payCommand(options) {
|
|
|
152
158
|
const txHash = response.data.txHash;
|
|
153
159
|
console.log(chalk_1.default.green('\n\u2705 Payment processed successfully!'));
|
|
154
160
|
console.log(chalk_1.default.gray(`\n\uD83D\uDCC4 Payment Details:`));
|
|
155
|
-
console.log(chalk_1.default.gray(` Facilitator: ${facilitator.name}`));
|
|
161
|
+
console.log(chalk_1.default.gray(` Facilitator: ${facilitator.name || facilitator.id}`));
|
|
162
|
+
console.log(chalk_1.default.gray(` Facilitator ID: ${facilitator.id}`));
|
|
156
163
|
console.log(chalk_1.default.gray(` Amount: ${options.amount} USDC`));
|
|
157
164
|
console.log(chalk_1.default.gray(` Recipient: ${recipient}`));
|
|
158
|
-
console.log(chalk_1.default.gray(` Chain: ${chain.name}`));
|
|
165
|
+
console.log(chalk_1.default.gray(` Chain: ${chain.name} (Chain ID: ${chain.chainId})`));
|
|
159
166
|
console.log(chalk_1.default.gray(` Transaction: ${txHash}\n`));
|
|
160
167
|
console.log(chalk_1.default.cyan(`\uD83D\uDD17 View on explorer: ${chain.name.includes('Avalanche')
|
|
161
168
|
? `https://testnet.snowtrace.io/tx/${txHash}`
|
package/dist/commands/pay.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pay.js","sourceRoot":"","sources":["../../src/commands/pay.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;
|
|
1
|
+
{"version":3,"file":"pay.js","sourceRoot":"","sources":["../../src/commands/pay.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -66,7 +66,7 @@ function saveConfig(config) {
|
|
|
66
66
|
|
|
67
67
|
// src/utils/api.ts
|
|
68
68
|
var import_axios = __toESM(require("axios"));
|
|
69
|
-
async function listFacilitators(apiUrl) {
|
|
69
|
+
async function listFacilitators(apiUrl, chainId) {
|
|
70
70
|
try {
|
|
71
71
|
const response = await import_axios.default.get(`${apiUrl}/api/facilitator/list`, {
|
|
72
72
|
timeout: 1e4,
|
|
@@ -74,23 +74,38 @@ async function listFacilitators(apiUrl) {
|
|
|
74
74
|
"User-Agent": "Facinet-CLI/2.3.0"
|
|
75
75
|
}
|
|
76
76
|
});
|
|
77
|
-
if (response.data.success) {
|
|
78
|
-
return response.data.facilitators.filter((f) =>
|
|
77
|
+
if (response.data.success && Array.isArray(response.data.facilitators)) {
|
|
78
|
+
return response.data.facilitators.filter((f) => {
|
|
79
|
+
if (f.status !== "active") {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
if (chainId !== void 0 && f.chainId !== void 0) {
|
|
83
|
+
return f.chainId === chainId;
|
|
84
|
+
}
|
|
85
|
+
return true;
|
|
86
|
+
});
|
|
79
87
|
}
|
|
80
88
|
return [];
|
|
81
89
|
} catch (error) {
|
|
82
90
|
throw new Error(
|
|
83
|
-
`Failed to fetch facilitators: ${error.message || error.code || "Unknown error"}`
|
|
91
|
+
`Failed to fetch facilitators from ${apiUrl}: ${error.message || error.code || "Unknown error"}`
|
|
84
92
|
);
|
|
85
93
|
}
|
|
86
94
|
}
|
|
87
|
-
async function selectRandomFacilitator(apiUrl) {
|
|
88
|
-
const facilitators = await listFacilitators(apiUrl);
|
|
95
|
+
async function selectRandomFacilitator(apiUrl, chainId) {
|
|
96
|
+
const facilitators = await listFacilitators(apiUrl, chainId);
|
|
89
97
|
if (facilitators.length === 0) {
|
|
90
|
-
|
|
98
|
+
const networkInfo = chainId ? ` (Chain ID: ${chainId})` : "";
|
|
99
|
+
throw new Error(
|
|
100
|
+
`No active facilitators available${networkInfo}. API URL: ${apiUrl}`
|
|
101
|
+
);
|
|
91
102
|
}
|
|
92
103
|
const randomIndex = Math.floor(Math.random() * facilitators.length);
|
|
93
|
-
|
|
104
|
+
const facilitator2 = facilitators[randomIndex];
|
|
105
|
+
if (!facilitator2.name) {
|
|
106
|
+
facilitator2.name = `Facilitator ${facilitator2.id?.slice(0, 8) || "Unknown"}`;
|
|
107
|
+
}
|
|
108
|
+
return facilitator2;
|
|
94
109
|
}
|
|
95
110
|
async function getFacilitatorById(apiUrl, id) {
|
|
96
111
|
try {
|
|
@@ -144,25 +159,29 @@ var CHAINS = {
|
|
|
144
159
|
name: "Avalanche Fuji",
|
|
145
160
|
rpcUrl: "https://api.avax-test.network/ext/bc/C/rpc",
|
|
146
161
|
usdcAddress: "0x5425890298aed601595a70AB815c96711a31Bc65",
|
|
147
|
-
chainId: 43113
|
|
162
|
+
chainId: 43113,
|
|
163
|
+
apiUrl: "https://x402-avalanche-chi.vercel.app"
|
|
148
164
|
},
|
|
149
165
|
ethereum: {
|
|
150
166
|
name: "Ethereum Sepolia",
|
|
151
167
|
rpcUrl: "https://ethereum-sepolia-rpc.publicnode.com",
|
|
152
168
|
usdcAddress: "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238",
|
|
153
|
-
chainId: 11155111
|
|
169
|
+
chainId: 11155111,
|
|
170
|
+
apiUrl: "https://x402-ethereum-chi.vercel.app"
|
|
154
171
|
},
|
|
155
172
|
base: {
|
|
156
173
|
name: "Base Sepolia",
|
|
157
174
|
rpcUrl: "https://sepolia.base.org",
|
|
158
175
|
usdcAddress: "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
|
|
159
|
-
chainId: 84532
|
|
176
|
+
chainId: 84532,
|
|
177
|
+
apiUrl: "https://x402-base-chi.vercel.app"
|
|
160
178
|
},
|
|
161
179
|
polygon: {
|
|
162
180
|
name: "Polygon Amoy",
|
|
163
181
|
rpcUrl: "https://rpc-amoy.polygon.technology",
|
|
164
182
|
usdcAddress: "0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582",
|
|
165
|
-
chainId: 80002
|
|
183
|
+
chainId: 80002,
|
|
184
|
+
apiUrl: "https://x402-polygon-chi.vercel.app"
|
|
166
185
|
}
|
|
167
186
|
};
|
|
168
187
|
async function payCommand(options) {
|
|
@@ -215,10 +234,9 @@ async function payCommand(options) {
|
|
|
215
234
|
}
|
|
216
235
|
let spinner = (0, import_ora.default)("Selecting random facilitator...").start();
|
|
217
236
|
try {
|
|
218
|
-
const
|
|
219
|
-
|
|
220
|
-
);
|
|
221
|
-
spinner.succeed(`Selected facilitator: ${import_chalk.default.green(facilitator2.name)}`);
|
|
237
|
+
const apiUrl = config.apiUrl || chain.apiUrl || "https://x402-avalanche-chi.vercel.app";
|
|
238
|
+
const facilitator2 = await selectRandomFacilitator(apiUrl, chain.chainId);
|
|
239
|
+
spinner.succeed(`Selected facilitator: ${import_chalk.default.green(facilitator2.name || facilitator2.id)}`);
|
|
222
240
|
spinner = (0, import_ora.default)("Preparing transaction...").start();
|
|
223
241
|
const wallet = new import_ethers.Wallet(config.privateKey);
|
|
224
242
|
const provider = new import_ethers.JsonRpcProvider(chain.rpcUrl);
|
|
@@ -270,7 +288,6 @@ async function payCommand(options) {
|
|
|
270
288
|
}
|
|
271
289
|
};
|
|
272
290
|
const axios2 = require("axios");
|
|
273
|
-
const apiUrl = config.apiUrl || options.network || "https://x402-avalanche-chi.vercel.app";
|
|
274
291
|
const response = await axios2.post(`${apiUrl}/api/x402/settle-custom`, {
|
|
275
292
|
facilitatorId: facilitator2.id,
|
|
276
293
|
paymentPayload
|
|
@@ -283,10 +300,11 @@ async function payCommand(options) {
|
|
|
283
300
|
console.log(import_chalk.default.green("\n\u2705 Payment processed successfully!"));
|
|
284
301
|
console.log(import_chalk.default.gray(`
|
|
285
302
|
\u{1F4C4} Payment Details:`));
|
|
286
|
-
console.log(import_chalk.default.gray(` Facilitator: ${facilitator2.name}`));
|
|
303
|
+
console.log(import_chalk.default.gray(` Facilitator: ${facilitator2.name || facilitator2.id}`));
|
|
304
|
+
console.log(import_chalk.default.gray(` Facilitator ID: ${facilitator2.id}`));
|
|
287
305
|
console.log(import_chalk.default.gray(` Amount: ${options.amount} USDC`));
|
|
288
306
|
console.log(import_chalk.default.gray(` Recipient: ${recipient}`));
|
|
289
|
-
console.log(import_chalk.default.gray(` Chain: ${chain.name}`));
|
|
307
|
+
console.log(import_chalk.default.gray(` Chain: ${chain.name} (Chain ID: ${chain.chainId})`));
|
|
290
308
|
console.log(import_chalk.default.gray(` Transaction: ${txHash}
|
|
291
309
|
`));
|
|
292
310
|
console.log(import_chalk.default.cyan(`\u{1F517} View on explorer: ${chain.name.includes("Avalanche") ? `https://testnet.snowtrace.io/tx/${txHash}` : chain.name.includes("Base") ? `https://sepolia.basescan.org/tx/${txHash}` : chain.name.includes("Polygon") ? `https://amoy.polygonscan.com/tx/${txHash}` : `https://sepolia.etherscan.io/tx/${txHash}`}
|
|
@@ -364,7 +382,7 @@ async function create(options) {
|
|
|
364
382
|
const wallet = new import_ethers2.Wallet(config.privateKey);
|
|
365
383
|
const facilitatorWallet = import_ethers2.Wallet.createRandom();
|
|
366
384
|
spinner.text = "Registering facilitator...";
|
|
367
|
-
|
|
385
|
+
await createFacilitator(options.url, {
|
|
368
386
|
name,
|
|
369
387
|
facilitatorWallet: facilitatorWallet.address,
|
|
370
388
|
facilitatorPrivateKey: facilitatorWallet.privateKey,
|
|
@@ -375,18 +393,16 @@ async function create(options) {
|
|
|
375
393
|
console.log(import_chalk2.default.green("\n\u2705 Facilitator created successfully!"));
|
|
376
394
|
console.log(import_chalk2.default.gray(`
|
|
377
395
|
\u{1F4C4} Details:`));
|
|
378
|
-
console.log(import_chalk2.default.gray(` ID: ${result.id}`));
|
|
379
396
|
console.log(import_chalk2.default.gray(` Name: ${name}`));
|
|
380
397
|
console.log(import_chalk2.default.gray(` Wallet: ${facilitatorWallet.address}`));
|
|
381
|
-
console.log(import_chalk2.default.gray(` Status: ${result.status}`));
|
|
382
398
|
console.log(import_chalk2.default.yellow(`
|
|
383
399
|
\u26A0\uFE0F IMPORTANT: Save facilitator wallet private key!`));
|
|
384
400
|
console.log(import_chalk2.default.gray(` Private Key: ${facilitatorWallet.privateKey}
|
|
385
401
|
`));
|
|
386
402
|
console.log(import_chalk2.default.cyan("\u{1F4A1} Next steps:"));
|
|
387
403
|
console.log(import_chalk2.default.gray(` 1. Fund facilitator wallet with gas token`));
|
|
388
|
-
console.log(import_chalk2.default.gray(` 2.
|
|
389
|
-
console.log(import_chalk2.default.gray(` 3.
|
|
404
|
+
console.log(import_chalk2.default.gray(` 2. Use the web interface to complete facilitator registration`));
|
|
405
|
+
console.log(import_chalk2.default.gray(` 3. Check status: facinet facilitator list
|
|
390
406
|
`));
|
|
391
407
|
} catch (error) {
|
|
392
408
|
spinner.fail("Failed to create facilitator");
|
|
@@ -409,14 +425,21 @@ async function list(options) {
|
|
|
409
425
|
console.log(import_chalk2.default.gray(`Found ${facilitators.length} active facilitator(s):
|
|
410
426
|
`));
|
|
411
427
|
facilitators.forEach((fac, index) => {
|
|
412
|
-
|
|
428
|
+
const facilitatorName = fac.name || `Facilitator ${fac.id?.slice(0, 8) || "Unknown"}`;
|
|
429
|
+
console.log(import_chalk2.default.cyan(`${index + 1}. ${facilitatorName}`));
|
|
413
430
|
console.log(import_chalk2.default.gray(` ID: ${fac.id}`));
|
|
414
431
|
console.log(import_chalk2.default.gray(` Wallet: ${fac.facilitatorWallet}`));
|
|
415
432
|
console.log(
|
|
416
433
|
import_chalk2.default.gray(` Status: ${getStatusEmoji(fac.status)} ${fac.status.toUpperCase()}`)
|
|
417
434
|
);
|
|
418
|
-
|
|
419
|
-
|
|
435
|
+
if (fac.network) {
|
|
436
|
+
console.log(import_chalk2.default.gray(` Network: ${fac.network}`));
|
|
437
|
+
}
|
|
438
|
+
if (fac.chainId) {
|
|
439
|
+
console.log(import_chalk2.default.gray(` Chain ID: ${fac.chainId}`));
|
|
440
|
+
}
|
|
441
|
+
console.log(import_chalk2.default.gray(` Payments: ${fac.totalPayments || 0}`));
|
|
442
|
+
console.log(import_chalk2.default.gray(` Created by: ${fac.createdBy || "Unknown"}`));
|
|
420
443
|
console.log("");
|
|
421
444
|
});
|
|
422
445
|
} catch (error) {
|
|
@@ -595,7 +618,7 @@ console.log(
|
|
|
595
618
|
\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D
|
|
596
619
|
`)
|
|
597
620
|
);
|
|
598
|
-
program.name("facinet").description("CLI tool for x402 Facilitator Network").version("2.
|
|
621
|
+
program.name("facinet").description("CLI tool for x402 Facilitator Network").version("2.4.0");
|
|
599
622
|
program.command("connect").description("Connect your wallet to Facinet").action(connectCommand);
|
|
600
623
|
program.command("pay").description("Make a payment via x402 facilitator network").option("-a, --amount <amount>", "Payment amount in USDC", "1").option("-t, --to <address>", "Recipient address").option("-c, --chain <chain>", "Blockchain network (avalanche, ethereum, base, polygon)", "avalanche").option("-n, --network <url>", "Custom network URL").action(payCommand);
|
|
601
624
|
var facilitator = program.command("facilitator").alias("fac").description("Manage facilitators");
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/commands/pay.ts", "../src/utils/config.ts", "../src/utils/api.ts", "../src/commands/facilitator.ts", "../src/commands/connect.ts"],
|
|
4
|
-
"sourcesContent": ["#!/usr/bin/env node\n/**\n * Facinet CLI - x402 Facilitator Network\n *\n * Command-line tool for making payments and managing facilitators\n * on the x402 payment network.\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { payCommand } from './commands/pay';\nimport { facilitatorCommand } from './commands/facilitator';\nimport { connectCommand } from './commands/connect';\n\nconst program = new Command();\n\n// ASCII Art Banner\nconsole.log(\n chalk.cyan(`\n\\u2554\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2557\n\\u2551 \\u2551\n\\u2551 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2557 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2557 \\u2551\n\\u2551 \\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255D\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255D\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2557 \\u2551\n\\u2551 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2557 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551 \\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2588\\u2588\\u2557 \\u2551\n\\u2551 \\u2588\\u2588\\u2554\\u2550\\u2550\\u255D \\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551 \\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u255A\\u2588\\u2588\\u2557\\u2551\n\\u2551 \\u2588\\u2588\\u2551 \\u2588\\u2588\\u2551 \\u2588\\u2588\\u2551\\u255A\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551 \\u255A\\u2588\\u2588\\u2551\n\\u2551 \\u255A\\u2550\\u255D \\u255A\\u2550\\u255D \\u255A\\u2550\\u255D \\u255A\\u2550\\u2550\\u2550\\u2550\\u2550\\u255D\\u255A\\u2550\\u255D\\u255A\\u2550\\u255D \\u255A\\u2550\\u2551\n\\u2551 \\u2551\n\\u2551 x402 Facilitator Network CLI \\u2551\n\\u2551 \\u2551\n\\u255A\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255D\n`)\n);\n\nprogram\n .name('facinet')\n .description('CLI tool for x402 Facilitator Network')\n .version('2.3.0');\n\n// Connect wallet command\nprogram\n .command('connect')\n .description('Connect your wallet to Facinet')\n .action(connectCommand);\n\n// Pay command\nprogram\n .command('pay')\n .description('Make a payment via x402 facilitator network')\n .option('-a, --amount <amount>', 'Payment amount in USDC', '1')\n .option('-t, --to <address>', 'Recipient address')\n .option('-c, --chain <chain>', 'Blockchain network (avalanche, ethereum, base, polygon)', 'avalanche')\n .option('-n, --network <url>', 'Custom network URL')\n .action(payCommand);\n\n// Facilitator commands\nconst facilitator = program\n .command('facilitator')\n .alias('fac')\n .description('Manage facilitators');\n\nfacilitator\n .command('create')\n .description('Create a new facilitator')\n .option('-n, --name <name>', 'Facilitator name')\n .option('-r, --recipient <address>', 'Payment recipient address')\n .option(\n '-u, --url <url>',\n 'API URL',\n 'https://x402-avalanche-chi.vercel.app'\n )\n .action(facilitatorCommand.create);\n\nfacilitator\n .command('list')\n .description('List all active facilitators')\n .option(\n '-u, --url <url>',\n 'API URL',\n 'https://x402-avalanche-chi.vercel.app'\n )\n .action(facilitatorCommand.list);\n\nfacilitator\n .command('status <id>')\n .description('Check facilitator status')\n .option(\n '-u, --url <url>',\n 'API URL',\n 'https://x402-avalanche-chi.vercel.app'\n )\n .action(facilitatorCommand.status);\n\nfacilitator\n .command('balance <id>')\n .description('Check facilitator gas balance')\n .option(\n '-u, --url <url>',\n 'API URL',\n 'https://x402-avalanche-chi.vercel.app'\n )\n .action(facilitatorCommand.balance);\n\n// Help command\nprogram.on('--help', () => {\n console.log('');\n console.log(chalk.cyan('Examples:'));\n console.log('');\n console.log(' $ facinet connect');\n console.log(' $ facinet pay --amount 1 --to 0x123... --chain base');\n console.log(' $ facinet facilitator create --name \"MyNode\"');\n console.log(' $ facinet facilitator list');\n console.log(' $ facinet facilitator status fac_xyz123');\n console.log('');\n console.log(chalk.cyan('Supported Chains:'));\n console.log(' avalanche - Avalanche Fuji (Testnet)');\n console.log(' ethereum - Ethereum Sepolia (Testnet)');\n console.log(' base - Base Sepolia (Testnet)');\n console.log(' polygon - Polygon Amoy (Testnet)');\n console.log('');\n});\n\nprogram.parse(process.argv);\n\nif (!process.argv.slice(2).length) {\n program.outputHelp();\n}\n", "/**\n * Pay Command\n *\n * Make a payment via x402 facilitator network\n */\n\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { Wallet, JsonRpcProvider } from 'ethers';\nimport { getConfig } from '../utils/config';\nimport { selectRandomFacilitator } from '../utils/api';\n\nconst CHAINS: Record<string, any> = {\n avalanche: {\n name: 'Avalanche Fuji',\n rpcUrl: 'https://api.avax-test.network/ext/bc/C/rpc',\n usdcAddress: '0x5425890298aed601595a70AB815c96711a31Bc65',\n chainId: 43113,\n },\n ethereum: {\n name: 'Ethereum Sepolia',\n rpcUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n usdcAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',\n chainId: 11155111,\n },\n base: {\n name: 'Base Sepolia',\n rpcUrl: 'https://sepolia.base.org',\n usdcAddress: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n chainId: 84532,\n },\n polygon: {\n name: 'Polygon Amoy',\n rpcUrl: 'https://rpc-amoy.polygon.technology',\n usdcAddress: '0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582',\n chainId: 80002,\n },\n};\n\nexport async function payCommand(options: any) {\n console.log(chalk.cyan('\\n\\uD83D\\uDCB3 Make Payment via x402 Network\\n'));\n\n const config = getConfig();\n if (!config.privateKey) {\n console.log(chalk.red('\\u274C No wallet connected. Run `facinet connect` first.'));\n process.exit(1);\n }\n\n let recipient = options.to;\n if (!recipient) {\n const answer = await inquirer.prompt([\n {\n type: 'input',\n name: 'recipient',\n message: 'Recipient address:',\n validate: (input: string) => {\n if (!input.match(/^0x[a-fA-F0-9]{40}$/)) {\n return 'Invalid Ethereum address';\n }\n return true;\n },\n },\n ]);\n recipient = answer.recipient;\n }\n\n const chain = CHAINS[options.chain];\n if (!chain) {\n console.log(chalk.red(`\\u274C Unsupported chain: ${options.chain}. Supported: ${Object.keys(CHAINS).join(', ')}`));\n process.exit(1);\n }\n\n console.log(chalk.gray(`\\n\\uD83D\\uDCCA Payment Details:`));\n console.log(chalk.gray(` Amount: ${options.amount} USDC`));\n console.log(chalk.gray(` To: ${recipient}`));\n console.log(chalk.gray(` Chain: ${chain.name}`));\n console.log(chalk.gray(` Your Address: ${config.address}\\n`));\n\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Proceed with payment?',\n default: true,\n },\n ]);\n\n if (!confirm) {\n console.log(chalk.yellow('Payment cancelled.'));\n process.exit(0);\n }\n\n let spinner = ora('Selecting random facilitator...').start();\n\n try {\n const facilitator = await selectRandomFacilitator(\n config.apiUrl || options.network || 'https://x402-avalanche-chi.vercel.app'\n );\n spinner.succeed(`Selected facilitator: ${chalk.green(facilitator.name)}`);\n\n spinner = ora('Preparing transaction...').start();\n const wallet = new Wallet(config.privateKey);\n const provider = new JsonRpcProvider(chain.rpcUrl);\n const connectedWallet = wallet.connect(provider);\n\n const amount = BigInt(parseFloat(options.amount) * 1000000);\n const validAfter = Math.floor(Date.now() / 1000) - 60;\n const validBefore = validAfter + 3600;\n const nonce =\n '0x' +\n Array.from({ length: 64 }, () =>\n Math.floor(Math.random() * 16).toString(16)\n ).join('');\n\n const domain = {\n name: 'USD Coin',\n version: '2',\n chainId: chain.chainId,\n verifyingContract: chain.usdcAddress,\n };\n\n const types = {\n TransferWithAuthorization: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'validAfter', type: 'uint256' },\n { name: 'validBefore', type: 'uint256' },\n { name: 'nonce', type: 'bytes32' },\n ],\n };\n\n const value = {\n from: wallet.address,\n to: recipient,\n value: amount,\n validAfter,\n validBefore,\n nonce,\n };\n\n spinner.text = 'Signing authorization...';\n const signature = await connectedWallet.signTypedData(domain, types, value);\n spinner.succeed('Authorization signed!');\n\n spinner = ora('Submitting to facilitator...').start();\n\n const paymentPayload = {\n signature,\n authorization: {\n from: wallet.address,\n to: recipient,\n value: amount.toString(),\n validAfter: validAfter.toString(),\n validBefore: validBefore.toString(),\n nonce,\n },\n };\n\n const axios = require('axios');\n const apiUrl =\n config.apiUrl || options.network || 'https://x402-avalanche-chi.vercel.app';\n const response = await axios.post(`${apiUrl}/api/x402/settle-custom`, {\n facilitatorId: facilitator.id,\n paymentPayload,\n });\n\n if (!response.data.success) {\n throw new Error(response.data.error || 'Payment failed');\n }\n\n spinner.succeed('Payment submitted!');\n\n const txHash = response.data.txHash;\n console.log(chalk.green('\\n\\u2705 Payment processed successfully!'));\n console.log(chalk.gray(`\\n\\uD83D\\uDCC4 Payment Details:`));\n console.log(chalk.gray(` Facilitator: ${facilitator.name}`));\n console.log(chalk.gray(` Amount: ${options.amount} USDC`));\n console.log(chalk.gray(` Recipient: ${recipient}`));\n console.log(chalk.gray(` Chain: ${chain.name}`));\n console.log(chalk.gray(` Transaction: ${txHash}\\n`));\n\n console.log(chalk.cyan(`\\uD83D\\uDD17 View on explorer: ${chain.name.includes('Avalanche')\n ? `https://testnet.snowtrace.io/tx/${txHash}`\n : chain.name.includes('Base')\n ? `https://sepolia.basescan.org/tx/${txHash}`\n : chain.name.includes('Polygon')\n ? `https://amoy.polygonscan.com/tx/${txHash}`\n : `https://sepolia.etherscan.io/tx/${txHash}`\n }\\n`));\n } catch (error: any) {\n spinner.fail('Payment failed');\n console.log(chalk.red(`\\n\\u274C Error: ${error.message}\\n`));\n process.exit(1);\n }\n}\n", "/**\n * Configuration Management\n *\n * Save and load user configuration\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport os from 'os';\n\nconst CONFIG_DIR = path.join(os.homedir(), '.facinet');\nconst CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');\n\n/**\n * Get configuration\n */\nexport function getConfig(): Record<string, any> {\n try {\n if (!fs.existsSync(CONFIG_FILE)) {\n return {};\n }\n const data = fs.readFileSync(CONFIG_FILE, 'utf8');\n return JSON.parse(data);\n } catch (error) {\n return {};\n }\n}\n\n/**\n * Save configuration\n */\nexport function saveConfig(config: Record<string, any>): void {\n try {\n if (!fs.existsSync(CONFIG_DIR)) {\n fs.mkdirSync(CONFIG_DIR, { recursive: true });\n }\n const existingConfig = getConfig();\n const newConfig = { ...existingConfig, ...config };\n fs.writeFileSync(CONFIG_FILE, JSON.stringify(newConfig, null, 2), 'utf8');\n } catch (error: any) {\n throw new Error(`Failed to save configuration: ${error.message}`);\n }\n}\n\n/**\n * Clear configuration\n */\nexport function clearConfig(): void {\n try {\n if (fs.existsSync(CONFIG_FILE)) {\n fs.unlinkSync(CONFIG_FILE);\n }\n } catch (error: any) {\n throw new Error(`Failed to clear configuration: ${error.message}`);\n }\n}\n", "/**\n * API Client\n *\n * Interact with x402 backend APIs\n */\n\nimport axios from 'axios';\n\n/**\n * Get all active facilitators\n */\nexport async function listFacilitators(apiUrl: string) {\n try {\n const response = await axios.get(`${apiUrl}/api/facilitator/list`, {\n timeout: 10000,\n headers: {\n 'User-Agent': 'Facinet-CLI/2.3.0',\n },\n });\n\n if (response.data.success) {\n return response.data.facilitators.filter((f: any) => f.status === 'active');\n }\n return [];\n } catch (error: any) {\n throw new Error(\n `Failed to fetch facilitators: ${error.message || error.code || 'Unknown error'}`\n );\n }\n}\n\n/**\n * Select a random active facilitator\n */\nexport async function selectRandomFacilitator(apiUrl: string) {\n const facilitators = await listFacilitators(apiUrl);\n\n if (facilitators.length === 0) {\n throw new Error('No active facilitators available');\n }\n\n const randomIndex = Math.floor(Math.random() * facilitators.length);\n return facilitators[randomIndex];\n}\n\n/**\n * Get facilitator by ID\n */\nexport async function getFacilitatorById(apiUrl: string, id: string) {\n try {\n const response = await axios.get(`${apiUrl}/api/facilitator/list`);\n if (response.data.success) {\n const facilitator = response.data.facilitators.find((f: any) => f.id === id);\n if (!facilitator) {\n throw new Error('Facilitator not found');\n }\n return facilitator;\n }\n throw new Error('Failed to fetch facilitator');\n } catch (error: any) {\n throw new Error(`Failed to get facilitator: ${error.message}`);\n }\n}\n\n/**\n * Get facilitator status\n */\nexport async function getFacilitatorStatus(apiUrl: string, id: string) {\n return getFacilitatorById(apiUrl, id);\n}\n\n/**\n * Get facilitator balance\n */\nexport async function getFacilitatorBalance(apiUrl: string, id: string) {\n try {\n const response = await axios.post(`${apiUrl}/api/facilitator/balance`, {\n facilitatorId: id,\n });\n\n if (response.data.success) {\n return {\n name: response.data.name,\n wallet: response.data.wallet,\n balance: response.data.balance,\n status: response.data.status,\n };\n }\n throw new Error('Failed to fetch balance');\n } catch (error: any) {\n throw new Error(`Failed to get balance: ${error.message}`);\n }\n}\n\n/**\n * Create a new facilitator\n */\nexport async function createFacilitator(apiUrl: string, payload: any) {\n try {\n throw new Error(\n 'Facilitator creation requires payment flow. Please use the web interface at ' +\n apiUrl\n );\n } catch (error: any) {\n throw new Error(`Failed to create facilitator: ${error.message}`);\n }\n}\n\n/**\n * Submit payment to facilitator\n */\nexport async function submitPayment(\n apiUrl: string,\n facilitatorId: string,\n paymentPayload: any\n) {\n try {\n const response = await axios.post(`${apiUrl}/api/x402/settle-custom`, {\n facilitatorId,\n paymentPayload,\n });\n\n if (response.data.success) {\n return {\n txHash: response.data.txHash,\n facilitatorWallet: response.data.facilitatorWallet,\n facilitatorName: response.data.facilitatorName,\n };\n }\n throw new Error('Payment submission failed');\n } catch (error: any) {\n throw new Error(`Failed to submit payment: ${error.message}`);\n }\n}\n", "/**\n * Facilitator Commands\n *\n * Create and manage facilitators\n */\n\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { Wallet } from 'ethers';\nimport { getConfig } from '../utils/config';\nimport {\n listFacilitators,\n createFacilitator,\n getFacilitatorStatus,\n getFacilitatorBalance,\n} from '../utils/api';\n\n/**\n * Create a new facilitator\n */\nasync function create(options: any) {\n console.log(chalk.cyan('\\n\\uD83D\\uDE80 Create New Facilitator\\n'));\n\n const config = getConfig();\n if (!config.privateKey) {\n console.log(chalk.red('\\u274C No wallet connected. Run `facinet connect` first.'));\n process.exit(1);\n }\n\n const answers = await inquirer.prompt([\n {\n type: 'input',\n name: 'name',\n message: 'Facilitator name:',\n when: !options.name,\n validate: (input: string) => {\n if (input.length < 3 || input.length > 50) {\n return 'Name must be between 3 and 50 characters';\n }\n return true;\n },\n },\n {\n type: 'input',\n name: 'recipient',\n message: 'Payment recipient address:',\n when: !options.recipient,\n default: config.address,\n validate: (input: string) => {\n if (!input.match(/^0x[a-fA-F0-9]{40}$/)) {\n return 'Invalid Ethereum address';\n }\n return true;\n },\n },\n ]);\n\n const name = options.name || answers.name;\n const recipient = options.recipient || answers.recipient;\n\n console.log(chalk.gray(`\\n\\uD83D\\uDCCB Facilitator Details:`));\n console.log(chalk.gray(` Name: ${name}`));\n console.log(chalk.gray(` Recipient: ${recipient}`));\n console.log(chalk.gray(` Creator: ${config.address}\\n`));\n\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Create facilitator? (Requires 1 USDC registration fee)',\n default: true,\n },\n ]);\n\n if (!confirm) {\n console.log(chalk.yellow('Cancelled.'));\n process.exit(0);\n }\n\n const spinner = ora('Creating facilitator...').start();\n\n try {\n const wallet = new Wallet(config.privateKey);\n const facilitatorWallet = Wallet.createRandom();\n\n spinner.text = 'Registering facilitator...';\n\n const result = await createFacilitator(options.url, {\n name,\n facilitatorWallet: facilitatorWallet.address,\n facilitatorPrivateKey: facilitatorWallet.privateKey,\n paymentRecipient: recipient,\n createdBy: wallet.address,\n });\n\n spinner.succeed('Facilitator created!');\n\n console.log(chalk.green('\\n\\u2705 Facilitator created successfully!'));\n console.log(chalk.gray(`\\n\\uD83D\\uDCC4 Details:`));\n console.log(chalk.gray(` ID: ${result.id}`));\n console.log(chalk.gray(` Name: ${name}`));\n console.log(chalk.gray(` Wallet: ${facilitatorWallet.address}`));\n console.log(chalk.gray(` Status: ${result.status}`));\n console.log(chalk.yellow(`\\n\\u26A0\\uFE0F IMPORTANT: Save facilitator wallet private key!`));\n console.log(chalk.gray(` Private Key: ${facilitatorWallet.privateKey}\\n`));\n\n console.log(chalk.cyan('\\uD83D\\uDCA1 Next steps:'));\n console.log(chalk.gray(` 1. Fund facilitator wallet with gas token`));\n console.log(chalk.gray(` 2. Check status: facinet facilitator status ${result.id}`));\n console.log(chalk.gray(` 3. Monitor balance: facinet facilitator balance ${result.id}\\n`));\n } catch (error: any) {\n spinner.fail('Failed to create facilitator');\n console.log(chalk.red(`\\n\\u274C Error: ${error.message}\\n`));\n process.exit(1);\n }\n}\n\n/**\n * List all facilitators\n */\nasync function list(options: any) {\n console.log(chalk.cyan('\\n\\uD83D\\uDCCB Active Facilitators\\n'));\n\n const spinner = ora('Loading facilitators...').start();\n\n try {\n const facilitators = await listFacilitators(options.url);\n spinner.stop();\n\n if (facilitators.length === 0) {\n console.log(chalk.yellow('No active facilitators found.\\n'));\n return;\n }\n\n console.log(chalk.gray(`Found ${facilitators.length} active facilitator(s):\\n`));\n\n facilitators.forEach((fac: any, index: number) => {\n console.log(chalk.cyan(`${index + 1}. ${fac.name}`));\n console.log(chalk.gray(` ID: ${fac.id}`));\n console.log(chalk.gray(` Wallet: ${fac.facilitatorWallet}`));\n console.log(\n chalk.gray(` Status: ${getStatusEmoji(fac.status)} ${fac.status.toUpperCase()}`)\n );\n console.log(chalk.gray(` Payments: ${fac.totalPayments}`));\n console.log(chalk.gray(` Created by: ${fac.createdBy}`));\n console.log('');\n });\n } catch (error: any) {\n spinner.fail('Failed to load facilitators');\n console.log(chalk.red(`\\n\\u274C Error: ${error.message}\\n`));\n process.exit(1);\n }\n}\n\n/**\n * Check facilitator status\n */\nasync function status(id: string, options: any) {\n console.log(chalk.cyan(`\\n\\uD83D\\uDCCA Facilitator Status\\n`));\n\n const spinner = ora('Checking status...').start();\n\n try {\n const fac = await getFacilitatorStatus(options.url, id);\n spinner.stop();\n\n console.log(chalk.cyan(`${fac.name}`));\n console.log(chalk.gray(`ID: ${fac.id}\\n`));\n console.log(\n chalk.gray(\n `Status: ${getStatusEmoji(fac.status)} ${chalk.bold(fac.status.toUpperCase())}`\n )\n );\n console.log(chalk.gray(`Wallet: ${fac.facilitatorWallet}`));\n console.log(chalk.gray(`Recipient: ${fac.paymentRecipient}`));\n console.log(chalk.gray(`Total Payments: ${fac.totalPayments}`));\n console.log(chalk.gray(`Gas Balance: ${fac.gasBalance || 'Unknown'}`));\n console.log(chalk.gray(`Created: ${new Date(fac.lastUsed).toLocaleString()}\\n`));\n\n if (fac.status === 'needs_funding') {\n console.log(chalk.yellow('\\u26A0\\uFE0F Facilitator needs gas token for fees'));\n console.log(chalk.gray(` Send gas token to: ${fac.facilitatorWallet}\\n`));\n }\n } catch (error: any) {\n spinner.fail('Failed to get status');\n console.log(chalk.red(`\\n\\u274C Error: ${error.message}\\n`));\n process.exit(1);\n }\n}\n\n/**\n * Check facilitator balance\n */\nasync function balance(id: string, options: any) {\n console.log(chalk.cyan(`\\n\\uD83D\\uDCB0 Facilitator Balance\\n`));\n\n const spinner = ora('Checking balance...').start();\n\n try {\n const result = await getFacilitatorBalance(options.url, id);\n spinner.stop();\n\n console.log(chalk.gray(`Facilitator: ${result.name}`));\n console.log(chalk.gray(`Wallet: ${result.wallet}\\n`));\n console.log(chalk.cyan(`Balance: ${chalk.bold(result.balance)}`));\n console.log(\n chalk.gray(`Status: ${getStatusEmoji(result.status)} ${result.status.toUpperCase()}\\n`)\n );\n\n if (parseFloat(result.balance) < 0.1) {\n console.log(chalk.yellow('\\u26A0\\uFE0F Low balance! Facilitator may become inactive.\\n'));\n }\n } catch (error: any) {\n spinner.fail('Failed to check balance');\n console.log(chalk.red(`\\n\\u274C Error: ${error.message}\\n`));\n process.exit(1);\n }\n}\n\nfunction getStatusEmoji(status: string): string {\n switch (status) {\n case 'active':\n return '\\u2705';\n case 'needs_funding':\n return '\\u26A0\\uFE0F';\n case 'inactive':\n return '\\u274C';\n default:\n return '\\u2753';\n }\n}\n\nexport const facilitatorCommand = {\n create,\n list,\n status,\n balance,\n};\n", "/**\n * Connect Command\n *\n * Connect wallet to Facinet CLI\n */\n\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport { Wallet } from 'ethers';\nimport { getConfig, saveConfig } from '../utils/config';\nimport ora from 'ora';\n\nexport async function connectCommand() {\n console.log(chalk.cyan('\\n\\uD83D\\uDD17 Connect Wallet to Facinet\\n'));\n\n const { method } = await inquirer.prompt([\n {\n type: 'list',\n name: 'method',\n message: 'How would you like to connect?',\n choices: [\n { name: 'Enter Private Key (for testing)', value: 'privateKey' },\n { name: 'Generate New Wallet', value: 'generate' },\n ],\n },\n ]);\n\n if (method === 'privateKey') {\n const { privateKey } = await inquirer.prompt([\n {\n type: 'password',\n name: 'privateKey',\n message: 'Enter your private key:',\n mask: '*',\n },\n ]);\n\n try {\n const wallet = new Wallet(privateKey);\n saveConfig({ privateKey, address: wallet.address });\n console.log(chalk.green('\\n\\u2705 Wallet connected successfully!'));\n console.log(chalk.gray(`Address: ${wallet.address}`));\n } catch (error) {\n console.log(chalk.red('\\n\\u274C Invalid private key'));\n process.exit(1);\n }\n } else {\n const spinner = ora('Generating new wallet...').start();\n const wallet = Wallet.createRandom();\n spinner.succeed('Wallet generated!');\n\n console.log(chalk.green('\\n\\u2705 New wallet created!'));\n console.log(chalk.yellow('\\n\\u26A0\\uFE0F IMPORTANT: Save your private key securely!'));\n console.log(chalk.gray(`\\nAddress: ${wallet.address}`));\n console.log(chalk.gray(`Private Key: ${wallet.privateKey}`));\n console.log(chalk.gray(`Mnemonic: ${wallet.mnemonic?.phrase}\\n`));\n\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Have you saved your private key?',\n default: false,\n },\n ]);\n\n if (!confirm) {\n console.log(chalk.red('\\nPlease save your private key before continuing.'));\n process.exit(0);\n }\n\n saveConfig({ privateKey: wallet.privateKey, address: wallet.address });\n console.log(chalk.green('\\u2705 Configuration saved!'));\n }\n\n const config = getConfig();\n console.log(chalk.cyan('\\n\\uD83D\\uDCE1 Network Configuration:'));\n console.log(chalk.gray(`Network: ${config.network || 'avalanche-fuji'}`));\n console.log(chalk.gray(`API URL: ${config.apiUrl || 'http://localhost:3000'}\\n`));\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["#!/usr/bin/env node\n/**\n * Facinet CLI - x402 Facilitator Network\n *\n * Command-line tool for making payments and managing facilitators\n * on the x402 payment network.\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { payCommand } from './commands/pay';\nimport { facilitatorCommand } from './commands/facilitator';\nimport { connectCommand } from './commands/connect';\n\nconst program = new Command();\n\n// ASCII Art Banner\nconsole.log(\n chalk.cyan(`\n\\u2554\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2557\n\\u2551 \\u2551\n\\u2551 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2557 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2557 \\u2551\n\\u2551 \\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255D\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255D\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2557 \\u2551\n\\u2551 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2557 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551 \\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2588\\u2588\\u2557 \\u2551\n\\u2551 \\u2588\\u2588\\u2554\\u2550\\u2550\\u255D \\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551 \\u2588\\u2588\\u2551\\u2588\\u2588\\u2551\\u255A\\u2588\\u2588\\u2557\\u2551\n\\u2551 \\u2588\\u2588\\u2551 \\u2588\\u2588\\u2551 \\u2588\\u2588\\u2551\\u255A\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551\\u2588\\u2588\\u2551 \\u255A\\u2588\\u2588\\u2551\n\\u2551 \\u255A\\u2550\\u255D \\u255A\\u2550\\u255D \\u255A\\u2550\\u255D \\u255A\\u2550\\u2550\\u2550\\u2550\\u2550\\u255D\\u255A\\u2550\\u255D\\u255A\\u2550\\u255D \\u255A\\u2550\\u2551\n\\u2551 \\u2551\n\\u2551 x402 Facilitator Network CLI \\u2551\n\\u2551 \\u2551\n\\u255A\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255D\n`)\n);\n\nprogram\n .name('facinet')\n .description('CLI tool for x402 Facilitator Network')\n .version('2.4.0');\n\n// Connect wallet command\nprogram\n .command('connect')\n .description('Connect your wallet to Facinet')\n .action(connectCommand);\n\n// Pay command\nprogram\n .command('pay')\n .description('Make a payment via x402 facilitator network')\n .option('-a, --amount <amount>', 'Payment amount in USDC', '1')\n .option('-t, --to <address>', 'Recipient address')\n .option('-c, --chain <chain>', 'Blockchain network (avalanche, ethereum, base, polygon)', 'avalanche')\n .option('-n, --network <url>', 'Custom network URL')\n .action(payCommand);\n\n// Facilitator commands\nconst facilitator = program\n .command('facilitator')\n .alias('fac')\n .description('Manage facilitators');\n\nfacilitator\n .command('create')\n .description('Create a new facilitator')\n .option('-n, --name <name>', 'Facilitator name')\n .option('-r, --recipient <address>', 'Payment recipient address')\n .option(\n '-u, --url <url>',\n 'API URL',\n 'https://x402-avalanche-chi.vercel.app'\n )\n .action(facilitatorCommand.create);\n\nfacilitator\n .command('list')\n .description('List all active facilitators')\n .option(\n '-u, --url <url>',\n 'API URL',\n 'https://x402-avalanche-chi.vercel.app'\n )\n .action(facilitatorCommand.list);\n\nfacilitator\n .command('status <id>')\n .description('Check facilitator status')\n .option(\n '-u, --url <url>',\n 'API URL',\n 'https://x402-avalanche-chi.vercel.app'\n )\n .action(facilitatorCommand.status);\n\nfacilitator\n .command('balance <id>')\n .description('Check facilitator gas balance')\n .option(\n '-u, --url <url>',\n 'API URL',\n 'https://x402-avalanche-chi.vercel.app'\n )\n .action(facilitatorCommand.balance);\n\n// Help command\nprogram.on('--help', () => {\n console.log('');\n console.log(chalk.cyan('Examples:'));\n console.log('');\n console.log(' $ facinet connect');\n console.log(' $ facinet pay --amount 1 --to 0x123... --chain base');\n console.log(' $ facinet facilitator create --name \"MyNode\"');\n console.log(' $ facinet facilitator list');\n console.log(' $ facinet facilitator status fac_xyz123');\n console.log('');\n console.log(chalk.cyan('Supported Chains:'));\n console.log(' avalanche - Avalanche Fuji (Testnet)');\n console.log(' ethereum - Ethereum Sepolia (Testnet)');\n console.log(' base - Base Sepolia (Testnet)');\n console.log(' polygon - Polygon Amoy (Testnet)');\n console.log('');\n});\n\nprogram.parse(process.argv);\n\nif (!process.argv.slice(2).length) {\n program.outputHelp();\n}\n", "/**\n * Pay Command\n *\n * Make a payment via x402 facilitator network\n */\n\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { Wallet, JsonRpcProvider } from 'ethers';\nimport { getConfig } from '../utils/config';\nimport { selectRandomFacilitator } from '../utils/api';\n\nconst CHAINS: Record<string, any> = {\n avalanche: {\n name: 'Avalanche Fuji',\n rpcUrl: 'https://api.avax-test.network/ext/bc/C/rpc',\n usdcAddress: '0x5425890298aed601595a70AB815c96711a31Bc65',\n chainId: 43113,\n apiUrl: 'https://x402-avalanche-chi.vercel.app',\n },\n ethereum: {\n name: 'Ethereum Sepolia',\n rpcUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n usdcAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',\n chainId: 11155111,\n apiUrl: 'https://x402-ethereum-chi.vercel.app',\n },\n base: {\n name: 'Base Sepolia',\n rpcUrl: 'https://sepolia.base.org',\n usdcAddress: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n chainId: 84532,\n apiUrl: 'https://x402-base-chi.vercel.app',\n },\n polygon: {\n name: 'Polygon Amoy',\n rpcUrl: 'https://rpc-amoy.polygon.technology',\n usdcAddress: '0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582',\n chainId: 80002,\n apiUrl: 'https://x402-polygon-chi.vercel.app',\n },\n};\n\nexport async function payCommand(options: any) {\n console.log(chalk.cyan('\\n\\uD83D\\uDCB3 Make Payment via x402 Network\\n'));\n\n const config = getConfig();\n if (!config.privateKey) {\n console.log(chalk.red('\\u274C No wallet connected. Run `facinet connect` first.'));\n process.exit(1);\n }\n\n let recipient = options.to;\n if (!recipient) {\n const answer = await inquirer.prompt([\n {\n type: 'input',\n name: 'recipient',\n message: 'Recipient address:',\n validate: (input: string) => {\n if (!input.match(/^0x[a-fA-F0-9]{40}$/)) {\n return 'Invalid Ethereum address';\n }\n return true;\n },\n },\n ]);\n recipient = answer.recipient;\n }\n\n const chain = CHAINS[options.chain];\n if (!chain) {\n console.log(chalk.red(`\\u274C Unsupported chain: ${options.chain}. Supported: ${Object.keys(CHAINS).join(', ')}`));\n process.exit(1);\n }\n\n console.log(chalk.gray(`\\n\\uD83D\\uDCCA Payment Details:`));\n console.log(chalk.gray(` Amount: ${options.amount} USDC`));\n console.log(chalk.gray(` To: ${recipient}`));\n console.log(chalk.gray(` Chain: ${chain.name}`));\n console.log(chalk.gray(` Your Address: ${config.address}\\n`));\n\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Proceed with payment?',\n default: true,\n },\n ]);\n\n if (!confirm) {\n console.log(chalk.yellow('Payment cancelled.'));\n process.exit(0);\n }\n\n let spinner = ora('Selecting random facilitator...').start();\n\n try {\n // Use network-specific API URL\n const apiUrl = config.apiUrl || chain.apiUrl || 'https://x402-avalanche-chi.vercel.app';\n const facilitator = await selectRandomFacilitator(apiUrl, chain.chainId);\n spinner.succeed(`Selected facilitator: ${chalk.green(facilitator.name || facilitator.id)}`);\n\n spinner = ora('Preparing transaction...').start();\n const wallet = new Wallet(config.privateKey);\n const provider = new JsonRpcProvider(chain.rpcUrl);\n const connectedWallet = wallet.connect(provider);\n\n const amount = BigInt(parseFloat(options.amount) * 1000000);\n const validAfter = Math.floor(Date.now() / 1000) - 60;\n const validBefore = validAfter + 3600;\n const nonce =\n '0x' +\n Array.from({ length: 64 }, () =>\n Math.floor(Math.random() * 16).toString(16)\n ).join('');\n\n const domain = {\n name: 'USD Coin',\n version: '2',\n chainId: chain.chainId,\n verifyingContract: chain.usdcAddress,\n };\n\n const types = {\n TransferWithAuthorization: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'validAfter', type: 'uint256' },\n { name: 'validBefore', type: 'uint256' },\n { name: 'nonce', type: 'bytes32' },\n ],\n };\n\n const value = {\n from: wallet.address,\n to: recipient,\n value: amount,\n validAfter,\n validBefore,\n nonce,\n };\n\n spinner.text = 'Signing authorization...';\n const signature = await connectedWallet.signTypedData(domain, types, value);\n spinner.succeed('Authorization signed!');\n\n spinner = ora('Submitting to facilitator...').start();\n\n const paymentPayload = {\n signature,\n authorization: {\n from: wallet.address,\n to: recipient,\n value: amount.toString(),\n validAfter: validAfter.toString(),\n validBefore: validBefore.toString(),\n nonce,\n },\n };\n\n const axios = require('axios');\n // Reuse the apiUrl variable defined above\n const response = await axios.post(`${apiUrl}/api/x402/settle-custom`, {\n facilitatorId: facilitator.id,\n paymentPayload,\n });\n\n if (!response.data.success) {\n throw new Error(response.data.error || 'Payment failed');\n }\n\n spinner.succeed('Payment submitted!');\n\n const txHash = response.data.txHash;\n console.log(chalk.green('\\n\\u2705 Payment processed successfully!'));\n console.log(chalk.gray(`\\n\\uD83D\\uDCC4 Payment Details:`));\n console.log(chalk.gray(` Facilitator: ${facilitator.name || facilitator.id}`));\n console.log(chalk.gray(` Facilitator ID: ${facilitator.id}`));\n console.log(chalk.gray(` Amount: ${options.amount} USDC`));\n console.log(chalk.gray(` Recipient: ${recipient}`));\n console.log(chalk.gray(` Chain: ${chain.name} (Chain ID: ${chain.chainId})`));\n console.log(chalk.gray(` Transaction: ${txHash}\\n`));\n\n console.log(chalk.cyan(`\\uD83D\\uDD17 View on explorer: ${chain.name.includes('Avalanche')\n ? `https://testnet.snowtrace.io/tx/${txHash}`\n : chain.name.includes('Base')\n ? `https://sepolia.basescan.org/tx/${txHash}`\n : chain.name.includes('Polygon')\n ? `https://amoy.polygonscan.com/tx/${txHash}`\n : `https://sepolia.etherscan.io/tx/${txHash}`\n }\\n`));\n } catch (error: any) {\n spinner.fail('Payment failed');\n console.log(chalk.red(`\\n\\u274C Error: ${error.message}\\n`));\n process.exit(1);\n }\n}\n", "/**\n * Configuration Management\n *\n * Save and load user configuration\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport os from 'os';\n\nconst CONFIG_DIR = path.join(os.homedir(), '.facinet');\nconst CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');\n\n/**\n * Get configuration\n */\nexport function getConfig(): Record<string, any> {\n try {\n if (!fs.existsSync(CONFIG_FILE)) {\n return {};\n }\n const data = fs.readFileSync(CONFIG_FILE, 'utf8');\n return JSON.parse(data);\n } catch (error) {\n return {};\n }\n}\n\n/**\n * Save configuration\n */\nexport function saveConfig(config: Record<string, any>): void {\n try {\n if (!fs.existsSync(CONFIG_DIR)) {\n fs.mkdirSync(CONFIG_DIR, { recursive: true });\n }\n const existingConfig = getConfig();\n const newConfig = { ...existingConfig, ...config };\n fs.writeFileSync(CONFIG_FILE, JSON.stringify(newConfig, null, 2), 'utf8');\n } catch (error: any) {\n throw new Error(`Failed to save configuration: ${error.message}`);\n }\n}\n\n/**\n * Clear configuration\n */\nexport function clearConfig(): void {\n try {\n if (fs.existsSync(CONFIG_FILE)) {\n fs.unlinkSync(CONFIG_FILE);\n }\n } catch (error: any) {\n throw new Error(`Failed to clear configuration: ${error.message}`);\n }\n}\n", "/**\n * API Client\n *\n * Interact with x402 backend APIs\n */\n\nimport axios from 'axios';\n\n/**\n * Get all active facilitators\n * @param apiUrl - API URL for the facilitator network\n * @param chainId - Optional chain ID to filter facilitators by network\n */\nexport async function listFacilitators(apiUrl: string, chainId?: number) {\n try {\n const response = await axios.get(`${apiUrl}/api/facilitator/list`, {\n timeout: 10000,\n headers: {\n 'User-Agent': 'Facinet-CLI/2.3.0',\n },\n });\n\n if (response.data.success && Array.isArray(response.data.facilitators)) {\n return response.data.facilitators.filter((f: any) => {\n // Must be active\n if (f.status !== 'active') {\n return false;\n }\n \n // If chainId is provided, filter by it\n if (chainId !== undefined && f.chainId !== undefined) {\n return f.chainId === chainId;\n }\n \n // If facilitator has network property, it should match (handled by SDK)\n return true;\n });\n }\n return [];\n } catch (error: any) {\n throw new Error(\n `Failed to fetch facilitators from ${apiUrl}: ${error.message || error.code || 'Unknown error'}`\n );\n }\n}\n\n/**\n * Select a random active facilitator\n * @param apiUrl - API URL for the facilitator network\n * @param chainId - Optional chain ID to filter facilitators by network\n */\nexport async function selectRandomFacilitator(apiUrl: string, chainId?: number) {\n const facilitators = await listFacilitators(apiUrl, chainId);\n\n if (facilitators.length === 0) {\n const networkInfo = chainId ? ` (Chain ID: ${chainId})` : '';\n throw new Error(\n `No active facilitators available${networkInfo}. API URL: ${apiUrl}`\n );\n }\n\n const randomIndex = Math.floor(Math.random() * facilitators.length);\n const facilitator = facilitators[randomIndex];\n \n // Ensure facilitator has a name\n if (!facilitator.name) {\n facilitator.name = `Facilitator ${facilitator.id?.slice(0, 8) || 'Unknown'}`;\n }\n \n return facilitator;\n}\n\n/**\n * Get facilitator by ID\n */\nexport async function getFacilitatorById(apiUrl: string, id: string) {\n try {\n const response = await axios.get(`${apiUrl}/api/facilitator/list`);\n if (response.data.success) {\n const facilitator = response.data.facilitators.find((f: any) => f.id === id);\n if (!facilitator) {\n throw new Error('Facilitator not found');\n }\n return facilitator;\n }\n throw new Error('Failed to fetch facilitator');\n } catch (error: any) {\n throw new Error(`Failed to get facilitator: ${error.message}`);\n }\n}\n\n/**\n * Get facilitator status\n */\nexport async function getFacilitatorStatus(apiUrl: string, id: string) {\n return getFacilitatorById(apiUrl, id);\n}\n\n/**\n * Get facilitator balance\n */\nexport async function getFacilitatorBalance(apiUrl: string, id: string) {\n try {\n const response = await axios.post(`${apiUrl}/api/facilitator/balance`, {\n facilitatorId: id,\n });\n\n if (response.data.success) {\n return {\n name: response.data.name,\n wallet: response.data.wallet,\n balance: response.data.balance,\n status: response.data.status,\n };\n }\n throw new Error('Failed to fetch balance');\n } catch (error: any) {\n throw new Error(`Failed to get balance: ${error.message}`);\n }\n}\n\n/**\n * Create a new facilitator\n */\nexport async function createFacilitator(apiUrl: string, payload: any) {\n try {\n throw new Error(\n 'Facilitator creation requires payment flow. Please use the web interface at ' +\n apiUrl\n );\n } catch (error: any) {\n throw new Error(`Failed to create facilitator: ${error.message}`);\n }\n}\n\n/**\n * Submit payment to facilitator\n */\nexport async function submitPayment(\n apiUrl: string,\n facilitatorId: string,\n paymentPayload: any\n) {\n try {\n const response = await axios.post(`${apiUrl}/api/x402/settle-custom`, {\n facilitatorId,\n paymentPayload,\n });\n\n if (response.data.success) {\n return {\n txHash: response.data.txHash,\n facilitatorWallet: response.data.facilitatorWallet,\n facilitatorName: response.data.facilitatorName,\n };\n }\n throw new Error('Payment submission failed');\n } catch (error: any) {\n throw new Error(`Failed to submit payment: ${error.message}`);\n }\n}\n", "/**\n * Facilitator Commands\n *\n * Create and manage facilitators\n */\n\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { Wallet } from 'ethers';\nimport { getConfig } from '../utils/config';\nimport {\n listFacilitators,\n createFacilitator,\n getFacilitatorStatus,\n getFacilitatorBalance,\n} from '../utils/api';\n\n/**\n * Create a new facilitator\n */\nasync function create(options: any) {\n console.log(chalk.cyan('\\n\\uD83D\\uDE80 Create New Facilitator\\n'));\n\n const config = getConfig();\n if (!config.privateKey) {\n console.log(chalk.red('\\u274C No wallet connected. Run `facinet connect` first.'));\n process.exit(1);\n }\n\n const answers = await inquirer.prompt([\n {\n type: 'input',\n name: 'name',\n message: 'Facilitator name:',\n when: !options.name,\n validate: (input: string) => {\n if (input.length < 3 || input.length > 50) {\n return 'Name must be between 3 and 50 characters';\n }\n return true;\n },\n },\n {\n type: 'input',\n name: 'recipient',\n message: 'Payment recipient address:',\n when: !options.recipient,\n default: config.address,\n validate: (input: string) => {\n if (!input.match(/^0x[a-fA-F0-9]{40}$/)) {\n return 'Invalid Ethereum address';\n }\n return true;\n },\n },\n ]);\n\n const name = options.name || answers.name;\n const recipient = options.recipient || answers.recipient;\n\n console.log(chalk.gray(`\\n\\uD83D\\uDCCB Facilitator Details:`));\n console.log(chalk.gray(` Name: ${name}`));\n console.log(chalk.gray(` Recipient: ${recipient}`));\n console.log(chalk.gray(` Creator: ${config.address}\\n`));\n\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Create facilitator? (Requires 1 USDC registration fee)',\n default: true,\n },\n ]);\n\n if (!confirm) {\n console.log(chalk.yellow('Cancelled.'));\n process.exit(0);\n }\n\n const spinner = ora('Creating facilitator...').start();\n\n try {\n const wallet = new Wallet(config.privateKey);\n const facilitatorWallet = Wallet.createRandom();\n\n spinner.text = 'Registering facilitator...';\n\n // Note: createFacilitator always throws an error directing users to web interface\n // This is intentional - facilitator creation requires payment flow\n await createFacilitator(options.url, {\n name,\n facilitatorWallet: facilitatorWallet.address,\n facilitatorPrivateKey: facilitatorWallet.privateKey,\n paymentRecipient: recipient,\n createdBy: wallet.address,\n });\n\n // This code won't be reached since createFacilitator throws\n spinner.succeed('Facilitator created!');\n\n console.log(chalk.green('\\n\\u2705 Facilitator created successfully!'));\n console.log(chalk.gray(`\\n\\uD83D\\uDCC4 Details:`));\n console.log(chalk.gray(` Name: ${name}`));\n console.log(chalk.gray(` Wallet: ${facilitatorWallet.address}`));\n console.log(chalk.yellow(`\\n\\u26A0\\uFE0F IMPORTANT: Save facilitator wallet private key!`));\n console.log(chalk.gray(` Private Key: ${facilitatorWallet.privateKey}\\n`));\n\n console.log(chalk.cyan('\\uD83D\\uDCA1 Next steps:'));\n console.log(chalk.gray(` 1. Fund facilitator wallet with gas token`));\n console.log(chalk.gray(` 2. Use the web interface to complete facilitator registration`));\n console.log(chalk.gray(` 3. Check status: facinet facilitator list\\n`));\n } catch (error: any) {\n spinner.fail('Failed to create facilitator');\n console.log(chalk.red(`\\n\\u274C Error: ${error.message}\\n`));\n process.exit(1);\n }\n}\n\n/**\n * List all facilitators\n */\nasync function list(options: any) {\n console.log(chalk.cyan('\\n\\uD83D\\uDCCB Active Facilitators\\n'));\n\n const spinner = ora('Loading facilitators...').start();\n\n try {\n const facilitators = await listFacilitators(options.url);\n spinner.stop();\n\n if (facilitators.length === 0) {\n console.log(chalk.yellow('No active facilitators found.\\n'));\n return;\n }\n\n console.log(chalk.gray(`Found ${facilitators.length} active facilitator(s):\\n`));\n\n facilitators.forEach((fac: any, index: number) => {\n const facilitatorName = fac.name || `Facilitator ${fac.id?.slice(0, 8) || 'Unknown'}`;\n console.log(chalk.cyan(`${index + 1}. ${facilitatorName}`));\n console.log(chalk.gray(` ID: ${fac.id}`));\n console.log(chalk.gray(` Wallet: ${fac.facilitatorWallet}`));\n console.log(\n chalk.gray(` Status: ${getStatusEmoji(fac.status)} ${fac.status.toUpperCase()}`)\n );\n if (fac.network) {\n console.log(chalk.gray(` Network: ${fac.network}`));\n }\n if (fac.chainId) {\n console.log(chalk.gray(` Chain ID: ${fac.chainId}`));\n }\n console.log(chalk.gray(` Payments: ${fac.totalPayments || 0}`));\n console.log(chalk.gray(` Created by: ${fac.createdBy || 'Unknown'}`));\n console.log('');\n });\n } catch (error: any) {\n spinner.fail('Failed to load facilitators');\n console.log(chalk.red(`\\n\\u274C Error: ${error.message}\\n`));\n process.exit(1);\n }\n}\n\n/**\n * Check facilitator status\n */\nasync function status(id: string, options: any) {\n console.log(chalk.cyan(`\\n\\uD83D\\uDCCA Facilitator Status\\n`));\n\n const spinner = ora('Checking status...').start();\n\n try {\n const fac = await getFacilitatorStatus(options.url, id);\n spinner.stop();\n\n console.log(chalk.cyan(`${fac.name}`));\n console.log(chalk.gray(`ID: ${fac.id}\\n`));\n console.log(\n chalk.gray(\n `Status: ${getStatusEmoji(fac.status)} ${chalk.bold(fac.status.toUpperCase())}`\n )\n );\n console.log(chalk.gray(`Wallet: ${fac.facilitatorWallet}`));\n console.log(chalk.gray(`Recipient: ${fac.paymentRecipient}`));\n console.log(chalk.gray(`Total Payments: ${fac.totalPayments}`));\n console.log(chalk.gray(`Gas Balance: ${fac.gasBalance || 'Unknown'}`));\n console.log(chalk.gray(`Created: ${new Date(fac.lastUsed).toLocaleString()}\\n`));\n\n if (fac.status === 'needs_funding') {\n console.log(chalk.yellow('\\u26A0\\uFE0F Facilitator needs gas token for fees'));\n console.log(chalk.gray(` Send gas token to: ${fac.facilitatorWallet}\\n`));\n }\n } catch (error: any) {\n spinner.fail('Failed to get status');\n console.log(chalk.red(`\\n\\u274C Error: ${error.message}\\n`));\n process.exit(1);\n }\n}\n\n/**\n * Check facilitator balance\n */\nasync function balance(id: string, options: any) {\n console.log(chalk.cyan(`\\n\\uD83D\\uDCB0 Facilitator Balance\\n`));\n\n const spinner = ora('Checking balance...').start();\n\n try {\n const result = await getFacilitatorBalance(options.url, id);\n spinner.stop();\n\n console.log(chalk.gray(`Facilitator: ${result.name}`));\n console.log(chalk.gray(`Wallet: ${result.wallet}\\n`));\n console.log(chalk.cyan(`Balance: ${chalk.bold(result.balance)}`));\n console.log(\n chalk.gray(`Status: ${getStatusEmoji(result.status)} ${result.status.toUpperCase()}\\n`)\n );\n\n if (parseFloat(result.balance) < 0.1) {\n console.log(chalk.yellow('\\u26A0\\uFE0F Low balance! Facilitator may become inactive.\\n'));\n }\n } catch (error: any) {\n spinner.fail('Failed to check balance');\n console.log(chalk.red(`\\n\\u274C Error: ${error.message}\\n`));\n process.exit(1);\n }\n}\n\nfunction getStatusEmoji(status: string): string {\n switch (status) {\n case 'active':\n return '\\u2705';\n case 'needs_funding':\n return '\\u26A0\\uFE0F';\n case 'inactive':\n return '\\u274C';\n default:\n return '\\u2753';\n }\n}\n\nexport const facilitatorCommand = {\n create,\n list,\n status,\n balance,\n};\n", "/**\n * Connect Command\n *\n * Connect wallet to Facinet CLI\n */\n\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport { Wallet } from 'ethers';\nimport { getConfig, saveConfig } from '../utils/config';\nimport ora from 'ora';\n\nexport async function connectCommand() {\n console.log(chalk.cyan('\\n\\uD83D\\uDD17 Connect Wallet to Facinet\\n'));\n\n const { method } = await inquirer.prompt([\n {\n type: 'list',\n name: 'method',\n message: 'How would you like to connect?',\n choices: [\n { name: 'Enter Private Key (for testing)', value: 'privateKey' },\n { name: 'Generate New Wallet', value: 'generate' },\n ],\n },\n ]);\n\n if (method === 'privateKey') {\n const { privateKey } = await inquirer.prompt([\n {\n type: 'password',\n name: 'privateKey',\n message: 'Enter your private key:',\n mask: '*',\n },\n ]);\n\n try {\n const wallet = new Wallet(privateKey);\n saveConfig({ privateKey, address: wallet.address });\n console.log(chalk.green('\\n\\u2705 Wallet connected successfully!'));\n console.log(chalk.gray(`Address: ${wallet.address}`));\n } catch (error) {\n console.log(chalk.red('\\n\\u274C Invalid private key'));\n process.exit(1);\n }\n } else {\n const spinner = ora('Generating new wallet...').start();\n const wallet = Wallet.createRandom();\n spinner.succeed('Wallet generated!');\n\n console.log(chalk.green('\\n\\u2705 New wallet created!'));\n console.log(chalk.yellow('\\n\\u26A0\\uFE0F IMPORTANT: Save your private key securely!'));\n console.log(chalk.gray(`\\nAddress: ${wallet.address}`));\n console.log(chalk.gray(`Private Key: ${wallet.privateKey}`));\n console.log(chalk.gray(`Mnemonic: ${wallet.mnemonic?.phrase}\\n`));\n\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Have you saved your private key?',\n default: false,\n },\n ]);\n\n if (!confirm) {\n console.log(chalk.red('\\nPlease save your private key before continuing.'));\n process.exit(0);\n }\n\n saveConfig({ privateKey: wallet.privateKey, address: wallet.address });\n console.log(chalk.green('\\u2705 Configuration saved!'));\n }\n\n const config = getConfig();\n console.log(chalk.cyan('\\n\\uD83D\\uDCE1 Network Configuration:'));\n console.log(chalk.gray(`Network: ${config.network || 'avalanche-fuji'}`));\n console.log(chalk.gray(`API URL: ${config.apiUrl || 'http://localhost:3000'}\\n`));\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_chalk", "path", "os", "fs", "axios", "facilitator", "chalk", "inquirer", "ora", "facilitator", "axios", "import_inquirer", "import_chalk", "import_ora", "import_ethers", "chalk", "inquirer", "ora", "status", "import_inquirer", "import_chalk", "import_ethers", "import_ora", "chalk", "inquirer", "ora", "chalk"]
|
|
7
7
|
}
|