facinet 1.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 +318 -0
- package/dist/commands/connect.d.ts +7 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +80 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/facilitator.d.ts +40 -0
- package/dist/commands/facilitator.d.ts.map +1 -0
- package/dist/commands/facilitator.js +208 -0
- package/dist/commands/facilitator.js.map +1 -0
- package/dist/commands/pay.d.ts +14 -0
- package/dist/commands/pay.d.ts.map +1 -0
- package/dist/commands/pay.js +155 -0
- package/dist/commands/pay.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +99 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/api.d.ts +42 -0
- package/dist/utils/api.d.ts.map +1 -0
- package/dist/utils/api.js +145 -0
- package/dist/utils/api.js.map +1 -0
- package/dist/utils/config.d.ts +25 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +64 -0
- package/dist/utils/config.js.map +1 -0
- package/package.json +43 -0
- package/src/commands/connect.ts +84 -0
- package/src/commands/facilitator.ts +256 -0
- package/src/commands/pay.ts +179 -0
- package/src/index.ts +108 -0
- package/src/utils/api.ts +164 -0
- package/src/utils/config.ts +67 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pay Command
|
|
3
|
+
*
|
|
4
|
+
* Make a payment via x402 facilitator network
|
|
5
|
+
*/
|
|
6
|
+
interface PayOptions {
|
|
7
|
+
amount: string;
|
|
8
|
+
to?: string;
|
|
9
|
+
chain: string;
|
|
10
|
+
network?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function payCommand(options: PayOptions): Promise<void>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=pay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pay.d.ts","sourceRoot":"","sources":["../../src/commands/pay.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAqBD,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,iBA2InD"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Pay Command
|
|
4
|
+
*
|
|
5
|
+
* Make a payment via x402 facilitator network
|
|
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.payCommand = payCommand;
|
|
12
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
13
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
14
|
+
const ora_1 = __importDefault(require("ora"));
|
|
15
|
+
const ethers_1 = require("ethers");
|
|
16
|
+
const config_1 = require("../utils/config");
|
|
17
|
+
const api_1 = require("../utils/api");
|
|
18
|
+
const CHAINS = {
|
|
19
|
+
avalanche: {
|
|
20
|
+
name: 'Avalanche Fuji',
|
|
21
|
+
rpcUrl: 'https://api.avax-test.network/ext/bc/C/rpc',
|
|
22
|
+
usdcAddress: '0x5425890298aed601595a70AB815c96711a31Bc65',
|
|
23
|
+
chainId: 43113,
|
|
24
|
+
},
|
|
25
|
+
ethereum: {
|
|
26
|
+
name: 'Ethereum Sepolia',
|
|
27
|
+
rpcUrl: 'https://rpc.sepolia.org',
|
|
28
|
+
usdcAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',
|
|
29
|
+
chainId: 11155111,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
const ERC3009_ABI = [
|
|
33
|
+
'function transferWithAuthorization(address from, address to, uint256 value, uint256 validAfter, uint256 validBefore, bytes32 nonce, uint8 v, bytes32 r, bytes32 s) external',
|
|
34
|
+
];
|
|
35
|
+
async function payCommand(options) {
|
|
36
|
+
console.log(chalk_1.default.cyan('\nš³ Make Payment via x402 Network\n'));
|
|
37
|
+
// Check if wallet is connected
|
|
38
|
+
const config = (0, config_1.getConfig)();
|
|
39
|
+
if (!config.privateKey) {
|
|
40
|
+
console.log(chalk_1.default.red('ā No wallet connected. Run `facinet connect` first.'));
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
// Get recipient if not provided
|
|
44
|
+
let recipient = options.to;
|
|
45
|
+
if (!recipient) {
|
|
46
|
+
const answer = await inquirer_1.default.prompt([
|
|
47
|
+
{
|
|
48
|
+
type: 'input',
|
|
49
|
+
name: 'recipient',
|
|
50
|
+
message: 'Recipient address:',
|
|
51
|
+
validate: (input) => {
|
|
52
|
+
if (!input.match(/^0x[a-fA-F0-9]{40}$/)) {
|
|
53
|
+
return 'Invalid Ethereum address';
|
|
54
|
+
}
|
|
55
|
+
return true;
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
]);
|
|
59
|
+
recipient = answer.recipient;
|
|
60
|
+
}
|
|
61
|
+
const chain = CHAINS[options.chain];
|
|
62
|
+
if (!chain) {
|
|
63
|
+
console.log(chalk_1.default.red(`ā Unsupported chain: ${options.chain}`));
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
console.log(chalk_1.default.gray(`\nš Payment Details:`));
|
|
67
|
+
console.log(chalk_1.default.gray(` Amount: ${options.amount} USDC`));
|
|
68
|
+
console.log(chalk_1.default.gray(` To: ${recipient}`));
|
|
69
|
+
console.log(chalk_1.default.gray(` Chain: ${chain.name}`));
|
|
70
|
+
console.log(chalk_1.default.gray(` Your Address: ${config.address}\n`));
|
|
71
|
+
const { confirm } = await inquirer_1.default.prompt([
|
|
72
|
+
{
|
|
73
|
+
type: 'confirm',
|
|
74
|
+
name: 'confirm',
|
|
75
|
+
message: 'Proceed with payment?',
|
|
76
|
+
default: true,
|
|
77
|
+
},
|
|
78
|
+
]);
|
|
79
|
+
if (!confirm) {
|
|
80
|
+
console.log(chalk_1.default.yellow('Payment cancelled.'));
|
|
81
|
+
process.exit(0);
|
|
82
|
+
}
|
|
83
|
+
let spinner = (0, ora_1.default)('Selecting random facilitator...').start();
|
|
84
|
+
try {
|
|
85
|
+
// Get random facilitator
|
|
86
|
+
const facilitator = await (0, api_1.selectRandomFacilitator)(config.apiUrl || 'http://localhost:3000');
|
|
87
|
+
spinner.succeed(`Selected facilitator: ${chalk_1.default.green(facilitator.name)}`);
|
|
88
|
+
// Initialize wallet and provider
|
|
89
|
+
spinner = (0, ora_1.default)('Preparing transaction...').start();
|
|
90
|
+
const wallet = new ethers_1.Wallet(config.privateKey);
|
|
91
|
+
const provider = new ethers_1.JsonRpcProvider(chain.rpcUrl);
|
|
92
|
+
const connectedWallet = wallet.connect(provider);
|
|
93
|
+
// Create ERC-3009 authorization
|
|
94
|
+
const amount = BigInt(parseFloat(options.amount) * 1000000); // 6 decimals for USDC
|
|
95
|
+
const validAfter = Math.floor(Date.now() / 1000) - 60;
|
|
96
|
+
const validBefore = validAfter + 3600; // 1 hour validity
|
|
97
|
+
const nonce = '0x' + Array.from({ length: 64 }, () => Math.floor(Math.random() * 16).toString(16)).join('');
|
|
98
|
+
// EIP-712 Domain
|
|
99
|
+
const domain = {
|
|
100
|
+
name: 'USD Coin',
|
|
101
|
+
version: '2',
|
|
102
|
+
chainId: chain.chainId,
|
|
103
|
+
verifyingContract: chain.usdcAddress,
|
|
104
|
+
};
|
|
105
|
+
const types = {
|
|
106
|
+
TransferWithAuthorization: [
|
|
107
|
+
{ name: 'from', type: 'address' },
|
|
108
|
+
{ name: 'to', type: 'address' },
|
|
109
|
+
{ name: 'value', type: 'uint256' },
|
|
110
|
+
{ name: 'validAfter', type: 'uint256' },
|
|
111
|
+
{ name: 'validBefore', type: 'uint256' },
|
|
112
|
+
{ name: 'nonce', type: 'bytes32' },
|
|
113
|
+
],
|
|
114
|
+
};
|
|
115
|
+
const value = {
|
|
116
|
+
from: wallet.address,
|
|
117
|
+
to: recipient,
|
|
118
|
+
value: amount,
|
|
119
|
+
validAfter: validAfter,
|
|
120
|
+
validBefore: validBefore,
|
|
121
|
+
nonce: nonce,
|
|
122
|
+
};
|
|
123
|
+
spinner.text = 'Signing authorization...';
|
|
124
|
+
const signature = await connectedWallet.signTypedData(domain, types, value);
|
|
125
|
+
spinner.succeed('Authorization signed!');
|
|
126
|
+
// Send to facilitator for execution
|
|
127
|
+
spinner = (0, ora_1.default)('Submitting to facilitator...').start();
|
|
128
|
+
// In real implementation, call your API here
|
|
129
|
+
const paymentPayload = {
|
|
130
|
+
signature,
|
|
131
|
+
authorization: {
|
|
132
|
+
from: wallet.address,
|
|
133
|
+
to: recipient,
|
|
134
|
+
value: amount.toString(),
|
|
135
|
+
validAfter: validAfter.toString(),
|
|
136
|
+
validBefore: validBefore.toString(),
|
|
137
|
+
nonce: nonce,
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
spinner.succeed('Payment submitted!');
|
|
141
|
+
console.log(chalk_1.default.green('\nā
Payment processed successfully!'));
|
|
142
|
+
console.log(chalk_1.default.gray(`\nš Payment Details:`));
|
|
143
|
+
console.log(chalk_1.default.gray(` Facilitator: ${facilitator.name}`));
|
|
144
|
+
console.log(chalk_1.default.gray(` Amount: ${options.amount} USDC`));
|
|
145
|
+
console.log(chalk_1.default.gray(` Recipient: ${recipient}`));
|
|
146
|
+
console.log(chalk_1.default.gray(` Chain: ${chain.name}\n`));
|
|
147
|
+
console.log(chalk_1.default.cyan('š” Tip: View transaction on block explorer'));
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
spinner.fail('Payment failed');
|
|
151
|
+
console.log(chalk_1.default.red(`\nā Error: ${error.message}\n`));
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=pay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pay.js","sourceRoot":"","sources":["../../src/commands/pay.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Facinet CLI - x402 Facilitator Network
|
|
5
|
+
*
|
|
6
|
+
* Command-line tool for making payments and managing facilitators
|
|
7
|
+
* on the x402 payment network.
|
|
8
|
+
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
const commander_1 = require("commander");
|
|
14
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
15
|
+
const pay_1 = require("./commands/pay");
|
|
16
|
+
const facilitator_1 = require("./commands/facilitator");
|
|
17
|
+
const connect_1 = require("./commands/connect");
|
|
18
|
+
const program = new commander_1.Command();
|
|
19
|
+
// ASCII Art Banner
|
|
20
|
+
console.log(chalk_1.default.cyan(`
|
|
21
|
+
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
22
|
+
ā ā
|
|
23
|
+
ā āāāāāāāā āāāāāā āāāāāāāāāāāāāā ā
|
|
24
|
+
ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā
|
|
25
|
+
ā āāāāāā āāāāāāāāāāā āāāāāāāāā ā
|
|
26
|
+
ā āāāāāā āāāāāāāāāāā āāāāāāāāāāā
|
|
27
|
+
ā āāā āāā āāāāāāāāāāāāāāāāā āāāā
|
|
28
|
+
ā āāā āāā āāā āāāāāāāāāāāāā āāā
|
|
29
|
+
ā ā
|
|
30
|
+
ā x402 Facilitator Network CLI ā
|
|
31
|
+
ā ā
|
|
32
|
+
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
33
|
+
`));
|
|
34
|
+
program
|
|
35
|
+
.name('facinet')
|
|
36
|
+
.description('CLI tool for x402 Facilitator Network')
|
|
37
|
+
.version('1.0.0');
|
|
38
|
+
// Connect wallet command
|
|
39
|
+
program
|
|
40
|
+
.command('connect')
|
|
41
|
+
.description('Connect your wallet to Facinet')
|
|
42
|
+
.action(connect_1.connectCommand);
|
|
43
|
+
// Pay command
|
|
44
|
+
program
|
|
45
|
+
.command('pay')
|
|
46
|
+
.description('Make a payment via x402 facilitator network')
|
|
47
|
+
.option('-a, --amount <amount>', 'Payment amount in USDC', '1')
|
|
48
|
+
.option('-t, --to <address>', 'Recipient address')
|
|
49
|
+
.option('-c, --chain <chain>', 'Blockchain network', 'avalanche')
|
|
50
|
+
.option('-n, --network <url>', 'Custom network URL')
|
|
51
|
+
.action(pay_1.payCommand);
|
|
52
|
+
// Facilitator commands
|
|
53
|
+
const facilitator = program
|
|
54
|
+
.command('facilitator')
|
|
55
|
+
.alias('fac')
|
|
56
|
+
.description('Manage facilitators');
|
|
57
|
+
facilitator
|
|
58
|
+
.command('create')
|
|
59
|
+
.description('Create a new facilitator')
|
|
60
|
+
.option('-n, --name <name>', 'Facilitator name')
|
|
61
|
+
.option('-r, --recipient <address>', 'Payment recipient address')
|
|
62
|
+
.option('-u, --url <url>', 'API URL', 'https://x402-avalanche-chi.vercel.app')
|
|
63
|
+
.action(facilitator_1.facilitatorCommand.create);
|
|
64
|
+
facilitator
|
|
65
|
+
.command('list')
|
|
66
|
+
.description('List all active facilitators')
|
|
67
|
+
.option('-u, --url <url>', 'API URL', 'https://x402-avalanche-chi.vercel.app')
|
|
68
|
+
.action(facilitator_1.facilitatorCommand.list);
|
|
69
|
+
facilitator
|
|
70
|
+
.command('status <id>')
|
|
71
|
+
.description('Check facilitator status')
|
|
72
|
+
.option('-u, --url <url>', 'API URL', 'https://x402-avalanche-chi.vercel.app')
|
|
73
|
+
.action(facilitator_1.facilitatorCommand.status);
|
|
74
|
+
facilitator
|
|
75
|
+
.command('balance <id>')
|
|
76
|
+
.description('Check facilitator gas balance')
|
|
77
|
+
.option('-u, --url <url>', 'API URL', 'https://x402-avalanche-chi.vercel.app')
|
|
78
|
+
.action(facilitator_1.facilitatorCommand.balance);
|
|
79
|
+
// Help command
|
|
80
|
+
program.on('--help', () => {
|
|
81
|
+
console.log('');
|
|
82
|
+
console.log(chalk_1.default.cyan('Examples:'));
|
|
83
|
+
console.log('');
|
|
84
|
+
console.log(' $ facinet connect');
|
|
85
|
+
console.log(' $ facinet pay --amount 1 --to 0x123...');
|
|
86
|
+
console.log(' $ facinet facilitator create --name "MyNode"');
|
|
87
|
+
console.log(' $ facinet facilitator list');
|
|
88
|
+
console.log(' $ facinet facilitator status fac_xyz123');
|
|
89
|
+
console.log('');
|
|
90
|
+
console.log(chalk_1.default.cyan('Documentation:'));
|
|
91
|
+
console.log(' https://github.com/your-repo/facinet');
|
|
92
|
+
console.log('');
|
|
93
|
+
});
|
|
94
|
+
program.parse(process.argv);
|
|
95
|
+
// Show help if no command provided
|
|
96
|
+
if (!process.argv.slice(2).length) {
|
|
97
|
+
program.outputHelp();
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Client
|
|
3
|
+
*
|
|
4
|
+
* Interact with x402 backend APIs
|
|
5
|
+
*/
|
|
6
|
+
interface FacilitatorCreatePayload {
|
|
7
|
+
name: string;
|
|
8
|
+
facilitatorWallet: string;
|
|
9
|
+
facilitatorPrivateKey: string;
|
|
10
|
+
paymentRecipient: string;
|
|
11
|
+
createdBy: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Get all active facilitators
|
|
15
|
+
*/
|
|
16
|
+
export declare function listFacilitators(apiUrl: string): Promise<any[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Select a random active facilitator
|
|
19
|
+
*/
|
|
20
|
+
export declare function selectRandomFacilitator(apiUrl: string): Promise<any>;
|
|
21
|
+
/**
|
|
22
|
+
* Get facilitator by ID
|
|
23
|
+
*/
|
|
24
|
+
export declare function getFacilitatorById(apiUrl: string, id: string): Promise<any>;
|
|
25
|
+
/**
|
|
26
|
+
* Get facilitator status
|
|
27
|
+
*/
|
|
28
|
+
export declare function getFacilitatorStatus(apiUrl: string, id: string): Promise<any>;
|
|
29
|
+
/**
|
|
30
|
+
* Get facilitator balance
|
|
31
|
+
*/
|
|
32
|
+
export declare function getFacilitatorBalance(apiUrl: string, id: string): Promise<any>;
|
|
33
|
+
/**
|
|
34
|
+
* Create a new facilitator
|
|
35
|
+
*/
|
|
36
|
+
export declare function createFacilitator(apiUrl: string, payload: FacilitatorCreatePayload): Promise<any>;
|
|
37
|
+
/**
|
|
38
|
+
* Submit payment to facilitator
|
|
39
|
+
*/
|
|
40
|
+
export declare function submitPayment(apiUrl: string, facilitatorId: string, paymentPayload: any): Promise<any>;
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,UAAU,wBAAwB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAarE;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAS1E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAgBjF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAEnF;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAmBpF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,GAAG,CAAC,CA6Bd;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,GAAG,GAClB,OAAO,CAAC,GAAG,CAAC,CAmBd"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* API Client
|
|
4
|
+
*
|
|
5
|
+
* Interact with x402 backend APIs
|
|
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.listFacilitators = listFacilitators;
|
|
12
|
+
exports.selectRandomFacilitator = selectRandomFacilitator;
|
|
13
|
+
exports.getFacilitatorById = getFacilitatorById;
|
|
14
|
+
exports.getFacilitatorStatus = getFacilitatorStatus;
|
|
15
|
+
exports.getFacilitatorBalance = getFacilitatorBalance;
|
|
16
|
+
exports.createFacilitator = createFacilitator;
|
|
17
|
+
exports.submitPayment = submitPayment;
|
|
18
|
+
const axios_1 = __importDefault(require("axios"));
|
|
19
|
+
/**
|
|
20
|
+
* Get all active facilitators
|
|
21
|
+
*/
|
|
22
|
+
async function listFacilitators(apiUrl) {
|
|
23
|
+
try {
|
|
24
|
+
const response = await axios_1.default.get(`${apiUrl}/api/facilitator/list`);
|
|
25
|
+
if (response.data.success) {
|
|
26
|
+
// Filter only active facilitators
|
|
27
|
+
return response.data.facilitators.filter((f) => f.status === 'active');
|
|
28
|
+
}
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
throw new Error(`Failed to fetch facilitators: ${error.message}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Select a random active facilitator
|
|
37
|
+
*/
|
|
38
|
+
async function selectRandomFacilitator(apiUrl) {
|
|
39
|
+
const facilitators = await listFacilitators(apiUrl);
|
|
40
|
+
if (facilitators.length === 0) {
|
|
41
|
+
throw new Error('No active facilitators available');
|
|
42
|
+
}
|
|
43
|
+
const randomIndex = Math.floor(Math.random() * facilitators.length);
|
|
44
|
+
return facilitators[randomIndex];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get facilitator by ID
|
|
48
|
+
*/
|
|
49
|
+
async function getFacilitatorById(apiUrl, id) {
|
|
50
|
+
try {
|
|
51
|
+
const response = await axios_1.default.get(`${apiUrl}/api/facilitator/list`);
|
|
52
|
+
if (response.data.success) {
|
|
53
|
+
const facilitator = response.data.facilitators.find((f) => f.id === id);
|
|
54
|
+
if (!facilitator) {
|
|
55
|
+
throw new Error('Facilitator not found');
|
|
56
|
+
}
|
|
57
|
+
return facilitator;
|
|
58
|
+
}
|
|
59
|
+
throw new Error('Failed to fetch facilitator');
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
throw new Error(`Failed to get facilitator: ${error.message}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get facilitator status
|
|
67
|
+
*/
|
|
68
|
+
async function getFacilitatorStatus(apiUrl, id) {
|
|
69
|
+
return getFacilitatorById(apiUrl, id);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get facilitator balance
|
|
73
|
+
*/
|
|
74
|
+
async function getFacilitatorBalance(apiUrl, id) {
|
|
75
|
+
try {
|
|
76
|
+
const response = await axios_1.default.post(`${apiUrl}/api/facilitator/balance`, {
|
|
77
|
+
facilitatorId: id,
|
|
78
|
+
});
|
|
79
|
+
if (response.data.success) {
|
|
80
|
+
return {
|
|
81
|
+
name: response.data.name,
|
|
82
|
+
wallet: response.data.wallet,
|
|
83
|
+
balance: response.data.balance,
|
|
84
|
+
status: response.data.status,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
throw new Error('Failed to fetch balance');
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
throw new Error(`Failed to get balance: ${error.message}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Create a new facilitator
|
|
95
|
+
*/
|
|
96
|
+
async function createFacilitator(apiUrl, payload) {
|
|
97
|
+
try {
|
|
98
|
+
// Note: In real implementation, this would:
|
|
99
|
+
// 1. Encrypt private key with user password
|
|
100
|
+
// 2. Call payment API to pay registration fee
|
|
101
|
+
// 3. Submit facilitator creation request
|
|
102
|
+
// For CLI demo, we'll just show what would happen
|
|
103
|
+
throw new Error('Facilitator creation requires payment flow. Please use the web interface at ' + apiUrl);
|
|
104
|
+
// Actual implementation would be:
|
|
105
|
+
/*
|
|
106
|
+
const response = await axios.post(`${apiUrl}/api/facilitator/create`, {
|
|
107
|
+
name: payload.name,
|
|
108
|
+
encryptedPrivateKey: 'encrypted_key',
|
|
109
|
+
systemEncryptedKey: 'system_encrypted_key',
|
|
110
|
+
facilitatorWallet: payload.facilitatorWallet,
|
|
111
|
+
paymentRecipient: payload.paymentRecipient,
|
|
112
|
+
createdBy: payload.createdBy,
|
|
113
|
+
registrationTxHash: 'tx_hash_from_payment',
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
return response.data;
|
|
117
|
+
*/
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
throw new Error(`Failed to create facilitator: ${error.message}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Submit payment to facilitator
|
|
125
|
+
*/
|
|
126
|
+
async function submitPayment(apiUrl, facilitatorId, paymentPayload) {
|
|
127
|
+
try {
|
|
128
|
+
const response = await axios_1.default.post(`${apiUrl}/api/x402/settle-custom`, {
|
|
129
|
+
facilitatorId,
|
|
130
|
+
paymentPayload,
|
|
131
|
+
});
|
|
132
|
+
if (response.data.success) {
|
|
133
|
+
return {
|
|
134
|
+
txHash: response.data.txHash,
|
|
135
|
+
facilitatorWallet: response.data.facilitatorWallet,
|
|
136
|
+
facilitatorName: response.data.facilitatorName,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
throw new Error('Payment submission failed');
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
throw new Error(`Failed to submit payment: ${error.message}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Management
|
|
3
|
+
*
|
|
4
|
+
* Save and load user configuration
|
|
5
|
+
*/
|
|
6
|
+
interface Config {
|
|
7
|
+
privateKey?: string;
|
|
8
|
+
address?: string;
|
|
9
|
+
network?: string;
|
|
10
|
+
apiUrl?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Get configuration
|
|
14
|
+
*/
|
|
15
|
+
export declare function getConfig(): Config;
|
|
16
|
+
/**
|
|
17
|
+
* Save configuration
|
|
18
|
+
*/
|
|
19
|
+
export declare function saveConfig(config: Partial<Config>): void;
|
|
20
|
+
/**
|
|
21
|
+
* Clear configuration
|
|
22
|
+
*/
|
|
23
|
+
export declare function clearConfig(): void;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,UAAU,MAAM;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAWlC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAcxD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAQlC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration Management
|
|
4
|
+
*
|
|
5
|
+
* Save and load user configuration
|
|
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.getConfig = getConfig;
|
|
12
|
+
exports.saveConfig = saveConfig;
|
|
13
|
+
exports.clearConfig = clearConfig;
|
|
14
|
+
const fs_1 = __importDefault(require("fs"));
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const os_1 = __importDefault(require("os"));
|
|
17
|
+
const CONFIG_DIR = path_1.default.join(os_1.default.homedir(), '.facinet');
|
|
18
|
+
const CONFIG_FILE = path_1.default.join(CONFIG_DIR, 'config.json');
|
|
19
|
+
/**
|
|
20
|
+
* Get configuration
|
|
21
|
+
*/
|
|
22
|
+
function getConfig() {
|
|
23
|
+
try {
|
|
24
|
+
if (!fs_1.default.existsSync(CONFIG_FILE)) {
|
|
25
|
+
return {};
|
|
26
|
+
}
|
|
27
|
+
const data = fs_1.default.readFileSync(CONFIG_FILE, 'utf8');
|
|
28
|
+
return JSON.parse(data);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
return {};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Save configuration
|
|
36
|
+
*/
|
|
37
|
+
function saveConfig(config) {
|
|
38
|
+
try {
|
|
39
|
+
// Create config directory if it doesn't exist
|
|
40
|
+
if (!fs_1.default.existsSync(CONFIG_DIR)) {
|
|
41
|
+
fs_1.default.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
42
|
+
}
|
|
43
|
+
const existingConfig = getConfig();
|
|
44
|
+
const newConfig = { ...existingConfig, ...config };
|
|
45
|
+
fs_1.default.writeFileSync(CONFIG_FILE, JSON.stringify(newConfig, null, 2), 'utf8');
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
throw new Error(`Failed to save configuration: ${error.message}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Clear configuration
|
|
53
|
+
*/
|
|
54
|
+
function clearConfig() {
|
|
55
|
+
try {
|
|
56
|
+
if (fs_1.default.existsSync(CONFIG_FILE)) {
|
|
57
|
+
fs_1.default.unlinkSync(CONFIG_FILE);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
throw new Error(`Failed to clear configuration: ${error.message}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;AAmBH,8BAWC;AAKD,gCAcC;AAKD,kCAQC;AA5DD,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AASpB,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AACvD,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEzD;;GAEG;AACH,SAAgB,SAAS;IACvB,IAAI,CAAC;QACH,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,IAAI,GAAG,YAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,MAAuB;IAChD,IAAI,CAAC;QACH,8CAA8C;QAC9C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,YAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,cAAc,GAAG,SAAS,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAEnD,YAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW;IACzB,IAAI,CAAC;QACH,IAAI,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACrE,CAAC;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "facinet",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "CLI tool for x402 Facilitator Network - Make payments and manage facilitators",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"facinet": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsc",
|
|
11
|
+
"dev": "tsc --watch",
|
|
12
|
+
"prepublishOnly": "npm run build"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"x402",
|
|
16
|
+
"payment",
|
|
17
|
+
"facilitator",
|
|
18
|
+
"avalanche",
|
|
19
|
+
"crypto",
|
|
20
|
+
"cli",
|
|
21
|
+
"usdc",
|
|
22
|
+
"blockchain"
|
|
23
|
+
],
|
|
24
|
+
"author": "x402 Team",
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"commander": "^12.1.0",
|
|
28
|
+
"ethers": "^6.15.0",
|
|
29
|
+
"chalk": "^4.1.2",
|
|
30
|
+
"ora": "^5.4.1",
|
|
31
|
+
"inquirer": "^8.2.6",
|
|
32
|
+
"axios": "^1.7.9",
|
|
33
|
+
"dotenv": "^16.4.7"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/node": "^24.10.1",
|
|
37
|
+
"@types/inquirer": "^8.2.10",
|
|
38
|
+
"typescript": "^5.9.3"
|
|
39
|
+
},
|
|
40
|
+
"engines": {
|
|
41
|
+
"node": ">=18.0.0"
|
|
42
|
+
}
|
|
43
|
+
}
|