paytaca-cli 0.2.0 → 0.3.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 +63 -2
- package/dist/commands/check.d.ts +14 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +162 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/claude.d.ts +9 -0
- package/dist/commands/claude.d.ts.map +1 -0
- package/dist/commands/claude.js +20 -0
- package/dist/commands/claude.js.map +1 -0
- package/dist/commands/opencode.d.ts +9 -0
- package/dist/commands/opencode.d.ts.map +1 -0
- package/dist/commands/opencode.js +20 -0
- package/dist/commands/opencode.js.map +1 -0
- package/dist/commands/pay.d.ts +17 -0
- package/dist/commands/pay.d.ts.map +1 -0
- package/dist/commands/pay.js +350 -0
- package/dist/commands/pay.js.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/types/x402.d.ts +72 -0
- package/dist/types/x402.d.ts.map +1 -0
- package/dist/types/x402.js +9 -0
- package/dist/types/x402.js.map +1 -0
- package/dist/utils/skill.d.ts +17 -0
- package/dist/utils/skill.d.ts.map +1 -0
- package/dist/utils/skill.js +100 -0
- package/dist/utils/skill.js.map +1 -0
- package/dist/utils/x402.d.ts +17 -0
- package/dist/utils/x402.d.ts.map +1 -0
- package/dist/utils/x402.js +119 -0
- package/dist/utils/x402.js.map +1 -0
- package/dist/utils/x402.test.d.ts +2 -0
- package/dist/utils/x402.test.d.ts.map +1 -0
- package/dist/utils/x402.test.js +216 -0
- package/dist/utils/x402.test.js.map +1 -0
- package/dist/wallet/x402.d.ts +29 -0
- package/dist/wallet/x402.d.ts.map +1 -0
- package/dist/wallet/x402.js +45 -0
- package/dist/wallet/x402.js.map +1 -0
- package/package.json +7 -2
- package/skills/paytaca/SKILL.md +130 -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
|
-
|
|
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
|
|
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 # Install Paytaca x402 skill for OpenCode AI agents
|
|
127
|
+
paytaca claude install # 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;AA4DnC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwEzD"}
|