@aifinpay/agent 2.0.0-rc.12 → 2.0.0-rc.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,127 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * `npx @aifinpay/agent init` — one command from zero to a paying agent.
4
+ *
5
+ * 1. generates the agent's wallet LOCALLY (key never leaves this machine),
6
+ * writes .env (AGENT_PK) and protects it via .gitignore
7
+ * 2. detects an MCP host (Claude Code / Cursor) and prints the one-liner
8
+ * 3. prints funding instructions + a ready-to-run code snippet
9
+ *
10
+ * npx @aifinpay/agent init # interactive
11
+ * npx @aifinpay/agent init --yes # zero questions, sane defaults
12
+ * npx @aifinpay/agent init --merchant # ALSO register you as a merchant (paywall side)
13
+ */
14
+ import { appendFileSync, existsSync, readFileSync, writeFileSync } from 'node:fs';
15
+ import { homedir } from 'node:os';
16
+ import { join } from 'node:path';
17
+ import { createInterface } from 'node:readline/promises';
18
+ import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';
19
+ const API = process.env.AIFP_API || 'https://api.aifinpay.io';
20
+ const args = process.argv.slice(2);
21
+ const cmd = args.find((a) => !a.startsWith('-')) || 'init';
22
+ const YES = args.includes('--yes') || args.includes('-y');
23
+ const MERCHANT = args.includes('--merchant');
24
+ const c = {
25
+ b: (s) => `\x1b[1m${s}\x1b[0m`,
26
+ dim: (s) => `\x1b[2m${s}\x1b[0m`,
27
+ ok: (s) => `\x1b[32m${s}\x1b[0m`,
28
+ warn: (s) => `\x1b[33m${s}\x1b[0m`,
29
+ code: (s) => `\x1b[36m${s}\x1b[0m`,
30
+ };
31
+ async function ask(q, def) {
32
+ if (YES)
33
+ return def;
34
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
35
+ const a = (await rl.question(`${q} ${c.dim(`(${def})`)} `)).trim();
36
+ rl.close();
37
+ return a || def;
38
+ }
39
+ function upsertEnv(key, value) {
40
+ const envPath = join(process.cwd(), '.env');
41
+ const cur = existsSync(envPath) ? readFileSync(envPath, 'utf8') : '';
42
+ if (new RegExp(`^${key}=`, 'm').test(cur))
43
+ return 'kept';
44
+ appendFileSync(envPath, `${cur.endsWith('\n') || cur === '' ? '' : '\n'}${key}=${value}\n`);
45
+ return 'created';
46
+ }
47
+ function protectEnvInGitignore() {
48
+ const gi = join(process.cwd(), '.gitignore');
49
+ const cur = existsSync(gi) ? readFileSync(gi, 'utf8') : '';
50
+ if (!/^\.env$/m.test(cur))
51
+ writeFileSync(gi, `${cur}${cur && !cur.endsWith('\n') ? '\n' : ''}.env\n`);
52
+ }
53
+ function detectMcpHost() {
54
+ if (existsSync(join(homedir(), '.claude.json')) || existsSync(join(homedir(), '.claude')))
55
+ return 'claude';
56
+ if (existsSync(join(homedir(), '.cursor')))
57
+ return 'cursor';
58
+ return null;
59
+ }
60
+ async function init() {
61
+ console.log(`\n${c.b('◈ AiFinPay')} — set up your agent's wallet\n`);
62
+ // 1. wallet — local generation, or keep the existing key
63
+ const envPath = join(process.cwd(), '.env');
64
+ let pk = '';
65
+ const existing = existsSync(envPath) && readFileSync(envPath, 'utf8').match(/^AGENT_PK=(0x[0-9a-fA-F]{64})$/m);
66
+ if (existing) {
67
+ pk = existing[1];
68
+ console.log(`${c.ok('✓')} found existing AGENT_PK in .env — reusing it`);
69
+ }
70
+ else {
71
+ pk = generatePrivateKey();
72
+ upsertEnv('AGENT_PK', pk);
73
+ console.log(`${c.ok('✓')} wallet generated ${c.dim('locally — the key stays on this machine, saved to .env')}`);
74
+ }
75
+ protectEnvInGitignore();
76
+ console.log(`${c.ok('✓')} .env is covered by .gitignore`);
77
+ const address = privateKeyToAccount(pk).address;
78
+ // 2. MCP host one-liner
79
+ const host = detectMcpHost();
80
+ if (host) {
81
+ console.log(`\n${c.b(`Detected ${host === 'claude' ? 'Claude Code' : 'Cursor'}`)} — give your assistant payment tools:`);
82
+ console.log(` ${c.code('claude mcp add aifinpay -- npx -y @aifinpay/mcp')}`);
83
+ }
84
+ // 3. funding + snippet
85
+ console.log(`\n${c.b('Fund your agent')} ${c.dim("(its own wallet — only you hold the key)")}:`);
86
+ console.log(` address : ${c.code(address)}`);
87
+ console.log(` network : Polygon · send ~1 USDC + ~0.5 POL (gas)`);
88
+ console.log(`\n${c.b('Make your first paid call')}:`);
89
+ console.log(c.code(` import { AiFinPayAgent } from "@aifinpay/agent";\n` +
90
+ ` const agent = await AiFinPayAgent.new({ privateKey: process.env.AGENT_PK });\n` +
91
+ ` const r = await agent.call({ provider: "exa", body: { query: "hello" } });`));
92
+ console.log(`\n docs: https://aifinpay.io/llms.txt · registry: ${API}/registry`);
93
+ // 4. optional merchant registration (the paywall side)
94
+ if (MERCHANT) {
95
+ console.log(`\n${c.b('Merchant registration')} — charge agents for YOUR API:`);
96
+ const name = await ask(' Service name?', 'My Paid API');
97
+ const payout = await ask(' Payout wallet (0x…)?', address);
98
+ const res = await fetch(`${API}/v1/merchants`, {
99
+ method: 'POST',
100
+ headers: { 'content-type': 'application/json' },
101
+ body: JSON.stringify({ name, pay_to: { polygon: payout } }),
102
+ });
103
+ const j = await res.json();
104
+ if (!res.ok) {
105
+ console.log(`${c.warn('✗')} registration failed: ${j.detail || res.status}`);
106
+ }
107
+ else {
108
+ upsertEnv('AIFP_MERCHANT_ID', j.merchant_id);
109
+ upsertEnv('AIFP_MERCHANT_SECRET', j.merchant_secret);
110
+ console.log(`${c.ok('✓')} registered ${c.code(j.merchant_id)} ${c.dim('(id + one-time secret saved to .env)')}`);
111
+ console.log(` agents pay you with: POST ${API}/v1/quote {"merchant_id":"${j.merchant_id}", …}`);
112
+ console.log(` verify receipts against: ${API}/.well-known/jwks.json`);
113
+ }
114
+ }
115
+ console.log(`\n${c.ok('Done.')} Fund the address above and your agent can pay for search, inference and data.\n`);
116
+ }
117
+ if (cmd === 'init') {
118
+ init().catch((e) => {
119
+ console.error(`${c.warn('✗')} ${e.message}`);
120
+ process.exit(1);
121
+ });
122
+ }
123
+ else {
124
+ console.log(`Unknown command "${cmd}". Usage: npx @aifinpay/agent init [--yes] [--merchant]`);
125
+ process.exit(1);
126
+ }
127
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aifinpay/agent",
3
- "version": "2.0.0-rc.12",
3
+ "version": "2.0.0-rc.13",
4
4
  "description": "AiFinPay SDK for global Agent Passport identity and route-verified AIFP-1/AIFP-2 settlement for autonomous AI agents.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",