paytaca-cli 0.2.0 → 0.3.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.
Files changed (41) hide show
  1. package/README.md +63 -2
  2. package/dist/commands/check.d.ts +14 -0
  3. package/dist/commands/check.d.ts.map +1 -0
  4. package/dist/commands/check.js +162 -0
  5. package/dist/commands/check.js.map +1 -0
  6. package/dist/commands/claude.d.ts +9 -0
  7. package/dist/commands/claude.d.ts.map +1 -0
  8. package/dist/commands/claude.js +20 -0
  9. package/dist/commands/claude.js.map +1 -0
  10. package/dist/commands/opencode.d.ts +9 -0
  11. package/dist/commands/opencode.d.ts.map +1 -0
  12. package/dist/commands/opencode.js +20 -0
  13. package/dist/commands/opencode.js.map +1 -0
  14. package/dist/commands/pay.d.ts +17 -0
  15. package/dist/commands/pay.d.ts.map +1 -0
  16. package/dist/commands/pay.js +347 -0
  17. package/dist/commands/pay.js.map +1 -0
  18. package/dist/index.js +8 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/types/x402.d.ts +72 -0
  21. package/dist/types/x402.d.ts.map +1 -0
  22. package/dist/types/x402.js +9 -0
  23. package/dist/types/x402.js.map +1 -0
  24. package/dist/utils/skill.d.ts +17 -0
  25. package/dist/utils/skill.d.ts.map +1 -0
  26. package/dist/utils/skill.js +100 -0
  27. package/dist/utils/skill.js.map +1 -0
  28. package/dist/utils/x402.d.ts +17 -0
  29. package/dist/utils/x402.d.ts.map +1 -0
  30. package/dist/utils/x402.js +119 -0
  31. package/dist/utils/x402.js.map +1 -0
  32. package/dist/utils/x402.test.d.ts +2 -0
  33. package/dist/utils/x402.test.d.ts.map +1 -0
  34. package/dist/utils/x402.test.js +216 -0
  35. package/dist/utils/x402.test.js.map +1 -0
  36. package/dist/wallet/x402.d.ts +29 -0
  37. package/dist/wallet/x402.d.ts.map +1 -0
  38. package/dist/wallet/x402.js +45 -0
  39. package/dist/wallet/x402.js.map +1 -0
  40. package/package.json +7 -2
  41. package/skills/paytaca/SKILL.md +123 -0
package/README.md CHANGED
@@ -13,13 +13,19 @@ Designed to be AI agent-friendly and useful for automation by power users.
13
13
  ## Installation
14
14
 
15
15
  ```bash
16
- git clone <repo-url> && cd paytaca-cli
16
+ npm install -g paytaca-cli
17
+ ```
18
+
19
+ Or install from source:
20
+
21
+ ```bash
22
+ git clone https://github.com/paytaca/paytaca-cli.git && cd paytaca-cli
17
23
  npm install
18
24
  npm run build
19
25
  npm link
20
26
  ```
21
27
 
22
- After linking, the `paytaca` command is available globally.
28
+ After installing, the `paytaca` command is available globally.
23
29
 
24
30
  ## Commands
25
31
 
@@ -92,6 +98,37 @@ paytaca token send <address> <amount> --token <cat> # Send fungible tokens
92
98
  paytaca token send-nft <address> --token <cat> --commitment <hex> # Send an NFT
93
99
  ```
94
100
 
101
+ ### x402 Payments
102
+
103
+ The x402 protocol enables HTTP payments via BCH. Some APIs (like nanogpt) require payment to access.
104
+
105
+ ```bash
106
+ paytaca check <url> # Check if URL requires payment, shows estimated cost
107
+ paytaca pay <url> # Make a paid HTTP request (handles 402 automatically)
108
+ paytaca pay <url> --json # JSON output (recommended for AI agents)
109
+ paytaca pay <url> --dry-run # Preview payment without executing
110
+ paytaca pay <url> --method POST # POST request with body
111
+ paytaca pay <url> --body '{"prompt":"hello"}'
112
+ ```
113
+
114
+ **Example workflow:**
115
+ ```bash
116
+ paytaca check https://api.nanogpt.com/v1/complete --json
117
+ # → {"paymentRequired": true, "estimatedCostSats": "100"}
118
+
119
+ paytaca pay https://api.nanogpt.com/v1/complete --method POST --body '{"prompt":"hello"}'
120
+ # → Handles 402 → pays → returns response
121
+ ```
122
+
123
+ ### AI Agent Integration
124
+
125
+ ```bash
126
+ paytaca opencode # Install Paytaca x402 skill for OpenCode AI agents
127
+ paytaca claude # Install Paytaca x402 skill for Claude Code agents
128
+ ```
129
+
130
+ This enables AI agents to autonomously handle HTTP 402 payment responses when calling x402-enabled APIs.
131
+
95
132
  ## Network
96
133
 
97
134
  All commands default to **mainnet**. Pass `--chipnet` for testnet:
@@ -124,15 +161,23 @@ src/
124
161
  history.ts transaction history (BCH and CashTokens)
125
162
  address.ts HD address derivation (standard and z-prefix)
126
163
  token.ts CashToken commands (list, info, send, send-nft)
164
+ pay.ts x402 BCH payment handler for HTTP requests
165
+ check.ts Check if URL requires x402 payment
166
+ opencode.ts Install x402 skill for OpenCode AI agents
167
+ claude.ts Install x402 skill for Claude Code AI agents
127
168
  wallet/
128
169
  index.ts Wallet class, mnemonic gen/import/load
129
170
  bch.ts BchWallet (balance, send, history, CashTokens)
130
171
  keys.ts LibauthHDWallet (HD key derivation, token addresses)
172
+ x402.ts X402Payer (BCH payment signing and verification)
131
173
  storage/
132
174
  keychain.ts OS keychain wrapper (@napi-rs/keyring)
133
175
  utils/
134
176
  crypto.ts pubkey -> CashAddress pipeline
135
177
  network.ts Watchtower URLs, derivation paths
178
+ x402.ts x402 header parsing, payment requirement selection
179
+ types/
180
+ x402.ts x402 payment types (PaymentRequired, PaymentPayload, etc.)
136
181
  ```
137
182
 
138
183
  ## Key Dependencies
@@ -155,6 +200,22 @@ npm run build # One-time build
155
200
  npm run clean # Remove dist/
156
201
  ```
157
202
 
203
+ ## x402 Server
204
+
205
+ A reference x402 server implementation is included for testing:
206
+
207
+ ```bash
208
+ cd x402-server
209
+ npm install
210
+ npm run dev # Start dev server on port 3001
211
+ ```
212
+
213
+ The server implements the x402-bch v2.2 specification and provides:
214
+ - `GET /api/quote` — Returns a quote (requires payment)
215
+ - `POST /api/generate` — Text generation endpoint (requires payment)
216
+
217
+ Useful for testing the `paytaca pay` workflow locally.
218
+
158
219
  ## License
159
220
 
160
221
  Copyright Paytaca Inc. 2021. All rights reserved. See [LICENSE](LICENSE) for details.
@@ -0,0 +1,14 @@
1
+ /**
2
+ * CLI command: check <url>
3
+ *
4
+ * Check if a URL accepts x402-bch v2.2 BCH payments without making the actual request.
5
+ * Useful for AI to determine if payment will be required before committing.
6
+ *
7
+ * Usage:
8
+ * paytaca check https://api.example.com
9
+ * paytaca check https://api.example.com --json
10
+ * paytaca check https://api.example.com --method POST --body '{"query":"hi"}'
11
+ */
12
+ import { Command } from 'commander';
13
+ export declare function registerCheckCommand(program: Command): void;
14
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA8BnC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyF3D"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * CLI command: check <url>
3
+ *
4
+ * Check if a URL accepts x402-bch v2.2 BCH payments without making the actual request.
5
+ * Useful for AI to determine if payment will be required before committing.
6
+ *
7
+ * Usage:
8
+ * paytaca check https://api.example.com
9
+ * paytaca check https://api.example.com --json
10
+ * paytaca check https://api.example.com --method POST --body '{"query":"hi"}'
11
+ */
12
+ import chalk from 'chalk';
13
+ import { loadWallet, loadMnemonic } from '../wallet/index.js';
14
+ import { LibauthHDWallet } from '../wallet/keys.js';
15
+ import { parsePaymentRequiredJson, selectBchPaymentRequirements } from '../utils/x402.js';
16
+ import { BCH_DERIVATION_PATH } from '../utils/network.js';
17
+ export function registerCheckCommand(program) {
18
+ program
19
+ .command('check')
20
+ .description('Check if a URL accepts x402-bch v2.2 BCH payments')
21
+ .argument('<url>', 'URL to check')
22
+ .option('-X, --method <method>', 'HTTP method to test (default: GET)', 'GET')
23
+ .option('-H, --header <header>', 'Add header to request (repeatable)')
24
+ .option('-d, --body <body>', 'Request body for POST/PUT requests')
25
+ .option('--chipnet', 'Use chipnet (testnet) instead of mainnet')
26
+ .option('--json', 'Output results as JSON')
27
+ .action(async (url, opts) => {
28
+ const isChipnet = Boolean(opts.chipnet);
29
+ const isJson = Boolean(opts.json);
30
+ const network = isChipnet ? 'chipnet' : 'mainnet';
31
+ const data = loadMnemonic();
32
+ if (!data) {
33
+ const err = 'No wallet found. Run `paytaca wallet create` or `paytaca wallet import` first.';
34
+ if (isJson) {
35
+ console.log(JSON.stringify({ url, acceptsX402: false, acceptsBch: false, paymentRequired: false, error: err }));
36
+ }
37
+ else {
38
+ console.log(chalk.red(`\n${err}\n`));
39
+ }
40
+ process.exit(1);
41
+ }
42
+ const wallet = loadWallet();
43
+ const bchWallet = wallet.forNetwork(isChipnet);
44
+ const hdWallet = new LibauthHDWallet(data.mnemonic, BCH_DERIVATION_PATH, isChipnet ? 'chipnet' : 'mainnet');
45
+ const headers = {};
46
+ if (opts.header) {
47
+ for (const h of opts.header) {
48
+ const idx = h.indexOf(':');
49
+ if (idx === -1) {
50
+ const err = `Invalid header format: ${h}. Expected "Key: Value"`;
51
+ if (isJson) {
52
+ console.log(JSON.stringify({ url, acceptsX402: false, acceptsBch: false, error: err }));
53
+ }
54
+ else {
55
+ console.log(chalk.red(`\n Error: ${err}\n`));
56
+ }
57
+ process.exit(1);
58
+ }
59
+ const key = h.substring(0, idx).trim();
60
+ const value = h.substring(idx + 1).trim();
61
+ headers[key] = value;
62
+ }
63
+ }
64
+ const method = opts.method?.toUpperCase() || 'GET';
65
+ const body = opts.body;
66
+ if (!isJson) {
67
+ console.log(`\n ${chalk.bold('CHECK')} ${url}`);
68
+ console.log(chalk.dim(` Network: ${chalk.cyan(network)}`));
69
+ console.log(chalk.dim(` Method: ${method}`));
70
+ console.log();
71
+ }
72
+ try {
73
+ const result = await checkUrl(url, method, headers, body, bchWallet, isChipnet);
74
+ if (isJson) {
75
+ console.log(JSON.stringify(result, null, 2));
76
+ }
77
+ else {
78
+ printCheckResult(result);
79
+ }
80
+ }
81
+ catch (err) {
82
+ const errorResult = {
83
+ url,
84
+ acceptsX402: false,
85
+ acceptsBch: false,
86
+ paymentRequired: false,
87
+ error: err.message || String(err),
88
+ };
89
+ if (isJson) {
90
+ console.log(JSON.stringify(errorResult, null, 2));
91
+ }
92
+ else {
93
+ console.log(chalk.red(`\n Error: ${err.message || err}\n`));
94
+ }
95
+ process.exit(1);
96
+ }
97
+ if (!isJson)
98
+ console.log();
99
+ });
100
+ }
101
+ async function checkUrl(url, method, headers, body, bchWallet, isChipnet) {
102
+ const result = {
103
+ url,
104
+ acceptsX402: false,
105
+ acceptsBch: false,
106
+ paymentRequired: false,
107
+ };
108
+ const response = await fetch(url, {
109
+ method,
110
+ headers,
111
+ body: ['POST', 'PUT', 'PATCH'].includes(method) ? body : undefined,
112
+ });
113
+ result.paymentRequired = response.status === 402;
114
+ if (response.status === 402) {
115
+ try {
116
+ const responseBody = await response.json();
117
+ const paymentRequired = parsePaymentRequiredJson(responseBody);
118
+ if (paymentRequired) {
119
+ result.acceptsX402 = paymentRequired.x402Version === 2;
120
+ result.resourceUrl = paymentRequired.resource?.url;
121
+ const bchReqs = selectBchPaymentRequirements(paymentRequired, isChipnet ? 'chipnet' : 'mainnet');
122
+ if (bchReqs) {
123
+ result.acceptsBch = true;
124
+ result.paymentUrl = bchReqs.payTo;
125
+ result.estimatedCostSats = bchReqs.amount;
126
+ result.costInBch = (Number(bchReqs.amount) / 1e8).toFixed(8);
127
+ result.maxTimeoutSeconds = bchReqs.maxTimeoutSeconds;
128
+ }
129
+ }
130
+ }
131
+ catch (e) {
132
+ result.error = 'Failed to parse 402 response body';
133
+ }
134
+ }
135
+ return result;
136
+ }
137
+ function printCheckResult(result) {
138
+ if (result.paymentRequired) {
139
+ console.log(chalk.yellow(' Payment Required'));
140
+ if (result.acceptsX402) {
141
+ console.log(chalk.green(' ✓ Accepts x402-bch v2.2 protocol'));
142
+ if (result.acceptsBch) {
143
+ console.log(chalk.green(` ✓ Accepts BCH payment`));
144
+ console.log(chalk.dim(` Amount: ${result.estimatedCostSats} sats (${result.costInBch} BCH)`));
145
+ console.log(chalk.dim(` Payment URL: ${result.paymentUrl}`));
146
+ console.log(chalk.dim(` Timeout: ${result.maxTimeoutSeconds}s`));
147
+ console.log(chalk.dim(` Resource: ${result.resourceUrl}`));
148
+ }
149
+ else {
150
+ console.log(chalk.red(' ✗ Does not accept BCH'));
151
+ }
152
+ }
153
+ else {
154
+ console.log(chalk.red(' ✗ Unknown payment protocol (not x402-bch v2.2)'));
155
+ }
156
+ }
157
+ else {
158
+ console.log(chalk.green(' ✓ No payment required'));
159
+ console.log(chalk.dim(` Status: ${result.url} is free to access`));
160
+ }
161
+ }
162
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * CLI command: claude
3
+ *
4
+ * Set up paytaca x402 payment handling for Claude Code AI assistant.
5
+ * Installs the paytaca skill so Claude Code knows how to handle 402 responses.
6
+ */
7
+ import { Command } from 'commander';
8
+ export declare function registerClaudeCommand(program: Command): void;
9
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/commands/claude.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAW5D"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * CLI command: claude
3
+ *
4
+ * Set up paytaca x402 payment handling for Claude Code AI assistant.
5
+ * Installs the paytaca skill so Claude Code knows how to handle 402 responses.
6
+ */
7
+ import { SUPPORTED_ASSISTANTS, handleSkillAction } from '../utils/skill.js';
8
+ export function registerClaudeCommand(program) {
9
+ const assistant = SUPPORTED_ASSISTANTS.find(a => a.name === 'Claude Code');
10
+ if (!assistant)
11
+ return;
12
+ program
13
+ .command('claude')
14
+ .description('Set up paytaca x402 payments for Claude Code AI assistant')
15
+ .argument('[action]', 'Action: install, uninstall, status', 'status')
16
+ .action(async (action) => {
17
+ handleSkillAction(assistant, action);
18
+ });
19
+ }
20
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/commands/claude.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE3E,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAA;IAC1E,IAAI,CAAC,SAAS;QAAE,OAAM;IAEtB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2DAA2D,CAAC;SACxE,QAAQ,CAAC,UAAU,EAAE,oCAAoC,EAAE,QAAQ,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE;QAC/B,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * CLI command: opencode
3
+ *
4
+ * Set up paytaca x402 payment handling for opencode AI assistant.
5
+ * Installs the paytaca skill so opencode knows how to handle 402 responses.
6
+ */
7
+ import { Command } from 'commander';
8
+ export declare function registerOpencodeCommand(program: Command): void;
9
+ //# sourceMappingURL=opencode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../src/commands/opencode.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGnC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAW9D"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * CLI command: opencode
3
+ *
4
+ * Set up paytaca x402 payment handling for opencode AI assistant.
5
+ * Installs the paytaca skill so opencode knows how to handle 402 responses.
6
+ */
7
+ import { SUPPORTED_ASSISTANTS, handleSkillAction } from '../utils/skill.js';
8
+ export function registerOpencodeCommand(program) {
9
+ const assistant = SUPPORTED_ASSISTANTS.find(a => a.name === 'opencode');
10
+ if (!assistant)
11
+ return;
12
+ program
13
+ .command('opencode')
14
+ .description('Set up paytaca x402 payments for opencode AI assistant')
15
+ .argument('[action]', 'Action: install, uninstall, status', 'status')
16
+ .action(async (action) => {
17
+ handleSkillAction(assistant, action);
18
+ });
19
+ }
20
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/commands/opencode.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE3E,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAA;IACvE,IAAI,CAAC,SAAS;QAAE,OAAM;IAEtB,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,wDAAwD,CAAC;SACrE,QAAQ,CAAC,UAAU,EAAE,oCAAoC,EAAE,QAAQ,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE;QAC/B,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * CLI command: pay <url>
3
+ *
4
+ * Makes an HTTP request to a URL, handling x402-bch v2.2 payment requirements.
5
+ * If the server returns 402 PAYMENT-REQUIRED, the wallet pays for the request.
6
+ *
7
+ * Flow:
8
+ * 1. Make HTTP request to URL
9
+ * 2. If 402 response, parse PaymentRequired JSON body
10
+ * 3. Build BCH transaction to pay the required amount
11
+ * 4. Broadcast transaction
12
+ * 5. Build PaymentPayload per x402-bch v2.2 spec
13
+ * 6. Retry original request with PAYMENT-SIGNATURE header containing JSON PayloadPayload
14
+ */
15
+ import { Command } from 'commander';
16
+ export declare function registerPayCommand(program: Command): void;
17
+ //# sourceMappingURL=pay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pay.d.ts","sourceRoot":"","sources":["../../src/commands/pay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA2DnC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuEzD"}