x402-agent-pay 2.2.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 (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +403 -0
  3. package/SKILL.md +125 -0
  4. package/dist/scripts/generate-pdf.d.ts +6 -0
  5. package/dist/scripts/generate-pdf.d.ts.map +1 -0
  6. package/dist/scripts/generate-pdf.js +179 -0
  7. package/dist/scripts/generate-pdf.js.map +1 -0
  8. package/dist/scripts/x402-fetch.d.ts +7 -0
  9. package/dist/scripts/x402-fetch.d.ts.map +1 -0
  10. package/dist/scripts/x402-fetch.js +162 -0
  11. package/dist/scripts/x402-fetch.js.map +1 -0
  12. package/dist/src/balance.d.ts +29 -0
  13. package/dist/src/balance.d.ts.map +1 -0
  14. package/dist/src/balance.js +94 -0
  15. package/dist/src/balance.js.map +1 -0
  16. package/dist/src/client.d.ts +90 -0
  17. package/dist/src/client.d.ts.map +1 -0
  18. package/dist/src/client.js +235 -0
  19. package/dist/src/client.js.map +1 -0
  20. package/dist/src/config.d.ts +91 -0
  21. package/dist/src/config.d.ts.map +1 -0
  22. package/dist/src/config.js +58 -0
  23. package/dist/src/config.js.map +1 -0
  24. package/dist/src/discovery.d.ts +98 -0
  25. package/dist/src/discovery.d.ts.map +1 -0
  26. package/dist/src/discovery.js +156 -0
  27. package/dist/src/discovery.js.map +1 -0
  28. package/dist/src/facilitator.d.ts +30 -0
  29. package/dist/src/facilitator.d.ts.map +1 -0
  30. package/dist/src/facilitator.js +50 -0
  31. package/dist/src/facilitator.js.map +1 -0
  32. package/dist/src/index.d.ts +19 -0
  33. package/dist/src/index.d.ts.map +1 -0
  34. package/dist/src/index.js +52 -0
  35. package/dist/src/index.js.map +1 -0
  36. package/dist/src/mcp-server.d.ts +16 -0
  37. package/dist/src/mcp-server.d.ts.map +1 -0
  38. package/dist/src/mcp-server.js +268 -0
  39. package/dist/src/mcp-server.js.map +1 -0
  40. package/dist/src/policy.d.ts +73 -0
  41. package/dist/src/policy.d.ts.map +1 -0
  42. package/dist/src/policy.js +271 -0
  43. package/dist/src/policy.js.map +1 -0
  44. package/dist/src/receipts.d.ts +52 -0
  45. package/dist/src/receipts.d.ts.map +1 -0
  46. package/dist/src/receipts.js +134 -0
  47. package/dist/src/receipts.js.map +1 -0
  48. package/mcp.json +41 -0
  49. package/package.json +65 -0
  50. package/registry.json +96 -0
@@ -0,0 +1,179 @@
1
+ #!/usr/bin/env npx ts-node
2
+ "use strict";
3
+ /**
4
+ * Generate PDF summary of x402-agent-pay
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ var __importDefault = (this && this.__importDefault) || function (mod) {
40
+ return (mod && mod.__esModule) ? mod : { "default": mod };
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ const pdfkit_1 = __importDefault(require("pdfkit"));
44
+ const fs = __importStar(require("fs"));
45
+ const doc = new pdfkit_1.default({
46
+ size: 'A4',
47
+ margins: { top: 50, bottom: 50, left: 50, right: 50 }
48
+ });
49
+ const outputPath = process.argv[2] || './x402-agent-pay-summary.pdf';
50
+ doc.pipe(fs.createWriteStream(outputPath));
51
+ // Colors
52
+ const blue = '#0066cc';
53
+ const gray = '#666666';
54
+ const darkGray = '#333333';
55
+ // Header
56
+ doc.fontSize(28).fillColor(blue).text('💸 x402-agent-pay', { align: 'center' });
57
+ doc.moveDown(0.3);
58
+ doc.fontSize(14).fillColor(gray).text('Seamless USDC payments for AI agents using the x402 protocol', { align: 'center' });
59
+ doc.moveDown(0.5);
60
+ doc.fontSize(10).fillColor(blue).text('MIT License | x402 Protocol | USDC Hackathon 2026', { align: 'center' });
61
+ doc.moveDown(1);
62
+ // Horizontal line
63
+ doc.moveTo(50, doc.y).lineTo(545, doc.y).strokeColor(blue).lineWidth(2).stroke();
64
+ doc.moveDown(1);
65
+ // Executive Summary
66
+ doc.fontSize(16).fillColor(blue).text('📋 Executive Summary');
67
+ doc.moveDown(0.5);
68
+ doc.fontSize(11).fillColor(darkGray).text('x402-agent-pay is a TypeScript library that enables autonomous AI agents to make USDC payments automatically when encountering paid APIs (HTTP 402 responses). Built on Coinbase\'s official @x402/fetch SDK, it adds critical safety guardrails that prevent wallet drain from bugs, prompt injections, or infinite loops.', { align: 'justify' });
69
+ doc.moveDown(1);
70
+ // Key Value Prop box
71
+ doc.rect(50, doc.y, 495, 50).fillColor('#fff3cd').fill();
72
+ doc.fillColor(darkGray).fontSize(10);
73
+ doc.text('Key Value Proposition: Purpose-built for autonomous OpenClaw agents with spending controls, velocity limits, and full audit trails — the missing safety layer between AI agents and real money.', 60, doc.y - 40, { width: 475 });
74
+ doc.moveDown(1.5);
75
+ // Problem & Solution
76
+ doc.fontSize(16).fillColor(blue).text('🎯 Problem & Solution');
77
+ doc.moveDown(0.5);
78
+ doc.fontSize(12).fillColor(darkGray).text('The Problem:', { continued: false });
79
+ doc.fontSize(11).fillColor(gray);
80
+ doc.list([
81
+ 'Bugs can trigger infinite payment loops',
82
+ 'Prompt injections can redirect payments to attackers',
83
+ 'No visibility into what agents are spending',
84
+ 'No way to set spending limits or control recipients'
85
+ ], { bulletRadius: 2, textIndent: 20 });
86
+ doc.moveDown(0.5);
87
+ doc.fontSize(12).fillColor(darkGray).text('The Solution:', { continued: false });
88
+ doc.fontSize(11).fillColor(gray).text('x402-agent-pay wraps the official Coinbase SDK with policy enforcement that happens before any payment is signed.');
89
+ doc.moveDown(1);
90
+ // Key Features
91
+ doc.fontSize(16).fillColor(blue).text('✨ Key Features');
92
+ doc.moveDown(0.5);
93
+ doc.fontSize(11).fillColor(darkGray);
94
+ doc.text('🛡️ Spending Controls', { continued: true }).fillColor(gray).text(' — Per-transaction, daily, weekly, monthly limits');
95
+ doc.fillColor(darkGray).text('⚡ Velocity Limits', { continued: true }).fillColor(gray).text(' — Max transactions per hour to prevent loops');
96
+ doc.fillColor(darkGray).text('📋 Recipient Controls', { continued: true }).fillColor(gray).text(' — Whitelist + blacklist for approved addresses');
97
+ doc.fillColor(darkGray).text('📜 Audit Trail', { continued: true }).fillColor(gray).text(' — Every payment attempt logged with full details');
98
+ doc.fillColor(darkGray).text('🔌 Official SDK', { continued: true }).fillColor(gray).text(' — Built on Coinbase\'s @x402/fetch');
99
+ doc.moveDown(1);
100
+ // Feature Comparison Table
101
+ doc.fontSize(16).fillColor(blue).text('📊 Feature Comparison');
102
+ doc.moveDown(0.5);
103
+ const tableTop = doc.y;
104
+ const tableLeft = 50;
105
+ const colWidths = [180, 120, 195];
106
+ const rowHeight = 25;
107
+ // Table header
108
+ doc.rect(tableLeft, tableTop, 495, rowHeight).fillColor('#f5f5f5').fill();
109
+ doc.fillColor(darkGray).fontSize(10);
110
+ doc.text('Feature', tableLeft + 5, tableTop + 8);
111
+ doc.text('Raw @x402/fetch', tableLeft + colWidths[0] + 5, tableTop + 8);
112
+ doc.text('x402-agent-pay', tableLeft + colWidths[0] + colWidths[1] + 5, tableTop + 8);
113
+ // Table rows
114
+ const rows = [
115
+ ['Auto-402 handling', '✅', '✅'],
116
+ ['Spending limits', '❌', '✅ Per-tx, daily, weekly, monthly'],
117
+ ['Velocity limits', '❌', '✅ Max tx/hour'],
118
+ ['Recipient controls', '❌', '✅ Whitelist + blacklist'],
119
+ ['Receipt logging', '❌', '✅ Full audit trail'],
120
+ ['Policy enforcement', '❌', '✅ Block before signing'],
121
+ ];
122
+ let yPos = tableTop + rowHeight;
123
+ rows.forEach(row => {
124
+ doc.fillColor(gray).fontSize(9);
125
+ doc.text(row[0], tableLeft + 5, yPos + 8);
126
+ doc.text(row[1], tableLeft + colWidths[0] + 5, yPos + 8);
127
+ doc.text(row[2], tableLeft + colWidths[0] + colWidths[1] + 5, yPos + 8);
128
+ yPos += rowHeight;
129
+ });
130
+ // Draw table borders
131
+ doc.strokeColor('#ddd').lineWidth(0.5);
132
+ for (let i = 0; i <= rows.length + 1; i++) {
133
+ doc.moveTo(tableLeft, tableTop + i * rowHeight).lineTo(tableLeft + 495, tableTop + i * rowHeight).stroke();
134
+ }
135
+ doc.moveTo(tableLeft, tableTop).lineTo(tableLeft, yPos).stroke();
136
+ doc.moveTo(tableLeft + colWidths[0], tableTop).lineTo(tableLeft + colWidths[0], yPos).stroke();
137
+ doc.moveTo(tableLeft + colWidths[0] + colWidths[1], tableTop).lineTo(tableLeft + colWidths[0] + colWidths[1], yPos).stroke();
138
+ doc.moveTo(tableLeft + 495, tableTop).lineTo(tableLeft + 495, yPos).stroke();
139
+ doc.y = yPos + 15;
140
+ doc.moveDown(1);
141
+ // Technical Stack
142
+ doc.fontSize(16).fillColor(blue).text('🔧 Technical Stack');
143
+ doc.moveDown(0.5);
144
+ doc.fontSize(10).fillColor(gray);
145
+ doc.list([
146
+ 'Language: TypeScript',
147
+ 'SDK: @x402/fetch, @x402/evm, @x402/core (official Coinbase)',
148
+ 'Blockchain: viem for Ethereum interactions',
149
+ 'Networks: Base, Ethereum, Arbitrum, Optimism, Polygon + testnets',
150
+ 'Testing: 29 unit tests passing with Vitest'
151
+ ], { bulletRadius: 2, textIndent: 20 });
152
+ doc.moveDown(1);
153
+ // Security
154
+ doc.fontSize(16).fillColor(blue).text('🔐 Security Model');
155
+ doc.moveDown(0.5);
156
+ doc.fontSize(10).fillColor(gray);
157
+ doc.list([
158
+ 'Private keys never logged or transmitted',
159
+ 'Policy enforcement happens before any transaction is signed',
160
+ 'Blacklist checked before whitelist (security priority)',
161
+ 'Full audit trail enables post-hoc review',
162
+ 'Built on audited Coinbase SDK infrastructure'
163
+ ], { bulletRadius: 2, textIndent: 20 });
164
+ doc.moveDown(1);
165
+ // Links
166
+ doc.fontSize(16).fillColor(blue).text('🔗 Links');
167
+ doc.moveDown(0.5);
168
+ doc.fontSize(10).fillColor(blue);
169
+ doc.text('GitHub: https://github.com/Omnivalent/x402-agent-pay');
170
+ doc.text('x402 Protocol: https://x402.org');
171
+ doc.text('Coinbase SDK: https://github.com/coinbase/x402');
172
+ doc.moveDown(1);
173
+ // Footer
174
+ doc.moveTo(50, doc.y).lineTo(545, doc.y).strokeColor('#ddd').lineWidth(1).stroke();
175
+ doc.moveDown(0.5);
176
+ doc.fontSize(10).fillColor(gray).text('Built by ClawMD 🩺 | February 2026 | MIT License', { align: 'center' });
177
+ doc.end();
178
+ console.log(`PDF generated: ${outputPath}`);
179
+ //# sourceMappingURL=generate-pdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-pdf.js","sourceRoot":"","sources":["../../scripts/generate-pdf.ts"],"names":[],"mappings":";;AACA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,oDAAiC;AACjC,uCAAyB;AAEzB,MAAM,GAAG,GAAG,IAAI,gBAAW,CAAC;IAC1B,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;CACtD,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,8BAA8B,CAAC;AACrE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;AAE3C,SAAS;AACT,MAAM,IAAI,GAAG,SAAS,CAAC;AACvB,MAAM,IAAI,GAAG,SAAS,CAAC;AACvB,MAAM,QAAQ,GAAG,SAAS,CAAC;AAE3B,SAAS;AACT,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAChF,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAClB,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,8DAA8D,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC3H,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAClB,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,uDAAuD,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AACpH,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEhB,kBAAkB;AAClB,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AACjF,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEhB,oBAAoB;AACpB,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC9D,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAClB,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CACvC,6TAA6T,EAC7T,EAAE,KAAK,EAAE,SAAS,EAAE,CACrB,CAAC;AACF,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEhB,qBAAqB;AACrB,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;AACzD,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACrC,GAAG,CAAC,IAAI,CAAC,iMAAiM,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAC5O,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAElB,qBAAqB;AACrB,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAC/D,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAClB,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAChF,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACjC,GAAG,CAAC,IAAI,CAAC;IACP,yCAAyC;IACzC,sDAAsD;IACtD,6CAA6C;IAC7C,qDAAqD;CACtD,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;AACxC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAElB,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACjF,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CACnC,mHAAmH,CACpH,CAAC;AACF,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEhB,eAAe;AACf,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACxD,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAClB,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;AACjI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;AAC7I,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;AACnJ,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;AAC9I,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;AACjI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEhB,2BAA2B;AAC3B,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAC/D,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAElB,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC;AACvB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAClC,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,eAAe;AACf,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1E,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACrC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AACjD,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AACxE,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AAEtF,aAAa;AACb,MAAM,IAAI,GAAG;IACX,CAAC,mBAAmB,EAAE,GAAG,EAAE,GAAG,CAAC;IAC/B,CAAC,iBAAiB,EAAE,GAAG,EAAE,kCAAkC,CAAC;IAC5D,CAAC,iBAAiB,EAAE,GAAG,EAAE,eAAe,CAAC;IACzC,CAAC,oBAAoB,EAAE,GAAG,EAAE,yBAAyB,CAAC;IACtD,CAAC,iBAAiB,EAAE,GAAG,EAAE,oBAAoB,CAAC;IAC9C,CAAC,oBAAoB,EAAE,GAAG,EAAE,wBAAwB,CAAC;CACtD,CAAC;AAEF,IAAI,IAAI,GAAG,QAAQ,GAAG,SAAS,CAAC;AAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;IACjB,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;IAC1C,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;IACzD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;IACxE,IAAI,IAAI,SAAS,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,qBAAqB;AACrB,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IAC1C,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,EAAE,QAAQ,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;AAC7G,CAAC;AACD,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;AACjE,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;AAC/F,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;AAC7H,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;AAE7E,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;AAClB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEhB,kBAAkB;AAClB,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC5D,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAClB,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACjC,GAAG,CAAC,IAAI,CAAC;IACP,sBAAsB;IACtB,6DAA6D;IAC7D,4CAA4C;IAC5C,kEAAkE;IAClE,4CAA4C;CAC7C,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;AACxC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEhB,WAAW;AACX,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC3D,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAClB,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACjC,GAAG,CAAC,IAAI,CAAC;IACP,0CAA0C;IAC1C,6DAA6D;IAC7D,wDAAwD;IACxD,0CAA0C;IAC1C,8CAA8C;CAC/C,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;AACxC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEhB,QAAQ;AACR,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAClD,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAClB,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACjC,GAAG,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;AACjE,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;AAC5C,GAAG,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;AAC3D,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEhB,SAAS;AACT,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AACnF,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAClB,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kDAAkD,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AAE/G,GAAG,CAAC,GAAG,EAAE,CAAC;AACV,OAAO,CAAC,GAAG,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env npx ts-node
2
+ /**
3
+ * CLI for x402-agent-pay
4
+ * Make payment-enabled HTTP requests with policy enforcement
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=x402-fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402-fetch.d.ts","sourceRoot":"","sources":["../../scripts/x402-fetch.ts"],"names":[],"mappings":";AACA;;;GAGG"}
@@ -0,0 +1,162 @@
1
+ #!/usr/bin/env npx ts-node
2
+ "use strict";
3
+ /**
4
+ * CLI for x402-agent-pay
5
+ * Make payment-enabled HTTP requests with policy enforcement
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ const client_1 = require("../src/client");
9
+ const balance_1 = require("../src/balance");
10
+ const config_1 = require("../src/config");
11
+ const args = process.argv.slice(2);
12
+ function printUsage() {
13
+ console.log(`
14
+ x402-agent-pay CLI
15
+
16
+ Usage:
17
+ x402-fetch.ts <url> [options] Make a payment-enabled request
18
+ x402-fetch.ts balance <wallet> Check USDC balance
19
+ x402-fetch.ts status Show spending status
20
+ x402-fetch.ts history [limit] Show payment history
21
+
22
+ Options:
23
+ --method <METHOD> HTTP method (default: GET)
24
+ --body <JSON> Request body
25
+ --network <NETWORK> Network: base, ethereum, arbitrum, optimism, polygon, baseSepolia
26
+ --dry-run Show payment details without paying
27
+ --skip-policy Skip policy checks (dangerous!)
28
+ --max-per-tx <USD> Override max per transaction (default: ${config_1.DEFAULT_POLICY.maxPerTransaction})
29
+ --daily-limit <USD> Override daily limit (default: ${config_1.DEFAULT_POLICY.dailyLimit})
30
+
31
+ Environment:
32
+ WALLET_PRIVATE_KEY Required: Your wallet private key (0x...)
33
+
34
+ Examples:
35
+ # Make a paid request
36
+ x402-fetch.ts https://api.example.com/paid-endpoint
37
+
38
+ # Check balance on Base
39
+ x402-fetch.ts balance 0xYourWallet --network base
40
+
41
+ # Custom limits
42
+ x402-fetch.ts https://api.example.com/data --max-per-tx 5 --daily-limit 50
43
+ `);
44
+ }
45
+ async function main() {
46
+ if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
47
+ printUsage();
48
+ process.exit(0);
49
+ }
50
+ const privateKey = process.env.WALLET_PRIVATE_KEY;
51
+ if (!privateKey && args[0] !== 'balance') {
52
+ console.error('Error: WALLET_PRIVATE_KEY environment variable is required');
53
+ process.exit(1);
54
+ }
55
+ const command = args[0];
56
+ // Balance command
57
+ if (command === 'balance') {
58
+ const wallet = args[1];
59
+ if (!wallet) {
60
+ console.error('Error: wallet address required');
61
+ process.exit(1);
62
+ }
63
+ const networkIdx = args.indexOf('--network');
64
+ const network = (networkIdx > -1 ? args[networkIdx + 1] : 'base');
65
+ const result = await (0, balance_1.checkBalance)(wallet, network);
66
+ console.log(`\n💰 Balance for ${wallet} on ${network}:`);
67
+ console.log(` ${result.balanceUsdc} USDC`);
68
+ return;
69
+ }
70
+ // Status command
71
+ if (command === 'status') {
72
+ const client = new client_1.AgentPayClient({ privateKey: privateKey });
73
+ const status = client.getSpendingStatus();
74
+ console.log('\n📊 Spending Status:');
75
+ console.log(` Today: $${status.daily.spent.toFixed(2)} spent (${status.daily.transactions} transactions)`);
76
+ console.log(` Remaining: $${status.daily.remaining.toFixed(2)} of $${status.policy.dailyLimit.toFixed(2)} daily limit`);
77
+ console.log(` Max per tx: $${status.policy.maxPerTransaction.toFixed(2)}`);
78
+ return;
79
+ }
80
+ // History command
81
+ if (command === 'history') {
82
+ const limit = parseInt(args[1]) || 10;
83
+ const client = new client_1.AgentPayClient({ privateKey: privateKey });
84
+ const history = client.getHistory(limit);
85
+ console.log(`\n📜 Last ${limit} payments:`);
86
+ if (history.length === 0) {
87
+ console.log(' No payments recorded yet.');
88
+ }
89
+ else {
90
+ for (const r of history) {
91
+ const status = r.status === 'success' ? '✅' : r.status === 'blocked' ? '🚫' : '⏳';
92
+ console.log(` ${status} ${r.timestamp} | ${r.amount} USDC | ${r.url.substring(0, 50)}...`);
93
+ if (r.txHash)
94
+ console.log(` tx: ${r.txHash}`);
95
+ if (r.blockReason)
96
+ console.log(` reason: ${r.blockReason}`);
97
+ }
98
+ }
99
+ return;
100
+ }
101
+ // Default: fetch URL
102
+ const url = command;
103
+ // Parse options
104
+ const methodIdx = args.indexOf('--method');
105
+ const method = methodIdx > -1 ? args[methodIdx + 1] : 'GET';
106
+ const bodyIdx = args.indexOf('--body');
107
+ const body = bodyIdx > -1 ? args[bodyIdx + 1] : undefined;
108
+ const networkIdx = args.indexOf('--network');
109
+ const network = (networkIdx > -1 ? args[networkIdx + 1] : 'base');
110
+ const dryRun = args.includes('--dry-run');
111
+ const skipPolicy = args.includes('--skip-policy');
112
+ const maxPerTxIdx = args.indexOf('--max-per-tx');
113
+ const maxPerTransaction = maxPerTxIdx > -1 ? parseFloat(args[maxPerTxIdx + 1]) : config_1.DEFAULT_POLICY.maxPerTransaction;
114
+ const dailyLimitIdx = args.indexOf('--daily-limit');
115
+ const dailyLimit = dailyLimitIdx > -1 ? parseFloat(args[dailyLimitIdx + 1]) : config_1.DEFAULT_POLICY.dailyLimit;
116
+ console.log(`[x402] Requesting: ${method} ${url}`);
117
+ console.log(`[x402] Network: ${network}`);
118
+ console.log(`[x402] Policy: max $${maxPerTransaction}/tx, $${dailyLimit}/day`);
119
+ const client = new client_1.AgentPayClient({
120
+ privateKey: privateKey,
121
+ network,
122
+ policy: {
123
+ maxPerTransaction,
124
+ dailyLimit,
125
+ },
126
+ onPayment: (receipt) => {
127
+ console.log(`\n✅ Payment successful!`);
128
+ console.log(` Amount: ${receipt.amount} USDC`);
129
+ console.log(` Recipient: ${receipt.recipient}`);
130
+ if (receipt.txHash)
131
+ console.log(` TX: ${receipt.txHash}`);
132
+ },
133
+ onBlocked: (reason) => {
134
+ console.log(`\n🚫 Payment blocked: ${reason}`);
135
+ },
136
+ });
137
+ try {
138
+ const response = await client.fetch(url, {
139
+ method,
140
+ body,
141
+ headers: body ? { 'Content-Type': 'application/json' } : undefined,
142
+ }, {
143
+ network,
144
+ skipPolicyCheck: skipPolicy,
145
+ });
146
+ console.log(`[x402] Response: ${response.status} ${response.statusText}`);
147
+ const text = await response.text();
148
+ console.log('\n--- Response ---');
149
+ console.log(text.substring(0, 2000));
150
+ if (text.length > 2000)
151
+ console.log('... (truncated)');
152
+ }
153
+ catch (error) {
154
+ if (error.name === 'PaymentBlockedError') {
155
+ console.error(`\n🚫 Payment blocked by policy: ${error.message}`);
156
+ process.exit(1);
157
+ }
158
+ throw error;
159
+ }
160
+ }
161
+ main().catch(console.error);
162
+ //# sourceMappingURL=x402-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402-fetch.js","sourceRoot":"","sources":["../../scripts/x402-fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Balance checking utilities for x402 payments
3
+ */
4
+ import { NetworkName } from './config';
5
+ export interface BalanceResult {
6
+ wallet: string;
7
+ network: NetworkName;
8
+ balanceRaw: bigint;
9
+ balanceUsdc: string;
10
+ sufficient: boolean;
11
+ requiredAmount?: string;
12
+ }
13
+ /**
14
+ * Get USDC address for a network
15
+ */
16
+ export declare function getUsdcAddress(network: NetworkName): `0x${string}`;
17
+ /**
18
+ * Check USDC balance for a wallet on a specific network
19
+ */
20
+ export declare function checkBalance(wallet: string, network?: NetworkName, requiredAmount?: string): Promise<BalanceResult>;
21
+ /**
22
+ * Check if wallet has sufficient balance for a payment
23
+ */
24
+ export declare function hasSufficientBalance(wallet: string, amount: string, network?: NetworkName): Promise<boolean>;
25
+ /**
26
+ * Get balances across all supported networks
27
+ */
28
+ export declare function checkAllBalances(wallet: string): Promise<Record<NetworkName, BalanceResult>>;
29
+ //# sourceMappingURL=balance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/balance.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAA0B,WAAW,EAAE,MAAM,UAAU,CAAC;AAY/D,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,KAAK,MAAM,EAAE,CAMlE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,WAAoB,EAC7B,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,aAAa,CAAC,CAoCxB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,WAAoB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAqB7C"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ /**
3
+ * Balance checking utilities for x402 payments
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getUsdcAddress = getUsdcAddress;
7
+ exports.checkBalance = checkBalance;
8
+ exports.hasSufficientBalance = hasSufficientBalance;
9
+ exports.checkAllBalances = checkAllBalances;
10
+ const viem_1 = require("viem");
11
+ const config_1 = require("./config");
12
+ const ERC20_BALANCE_ABI = [
13
+ {
14
+ inputs: [{ name: 'account', type: 'address' }],
15
+ name: 'balanceOf',
16
+ outputs: [{ name: '', type: 'uint256' }],
17
+ stateMutability: 'view',
18
+ type: 'function',
19
+ },
20
+ ];
21
+ /**
22
+ * Get USDC address for a network
23
+ */
24
+ function getUsdcAddress(network) {
25
+ const address = config_1.USDC_ADDRESSES[network];
26
+ if (!address) {
27
+ throw new Error(`Unsupported network: ${network}`);
28
+ }
29
+ return address;
30
+ }
31
+ /**
32
+ * Check USDC balance for a wallet on a specific network
33
+ */
34
+ async function checkBalance(wallet, network = 'base', requiredAmount) {
35
+ const chain = config_1.CHAINS[network];
36
+ if (!chain) {
37
+ throw new Error(`Unsupported network: ${network}`);
38
+ }
39
+ const client = (0, viem_1.createPublicClient)({
40
+ chain,
41
+ transport: (0, viem_1.http)(),
42
+ });
43
+ const usdcAddress = config_1.USDC_ADDRESSES[network];
44
+ const balanceRaw = await client.readContract({
45
+ address: usdcAddress,
46
+ abi: ERC20_BALANCE_ABI,
47
+ functionName: 'balanceOf',
48
+ args: [wallet],
49
+ });
50
+ const balanceUsdc = (0, viem_1.formatUnits)(balanceRaw, 6); // USDC has 6 decimals
51
+ let sufficient = true;
52
+ if (requiredAmount) {
53
+ const required = BigInt(Math.floor(parseFloat(requiredAmount) * 1e6));
54
+ sufficient = balanceRaw >= required;
55
+ }
56
+ return {
57
+ wallet,
58
+ network,
59
+ balanceRaw,
60
+ balanceUsdc,
61
+ sufficient,
62
+ requiredAmount,
63
+ };
64
+ }
65
+ /**
66
+ * Check if wallet has sufficient balance for a payment
67
+ */
68
+ async function hasSufficientBalance(wallet, amount, network = 'base') {
69
+ const result = await checkBalance(wallet, network, amount);
70
+ return result.sufficient;
71
+ }
72
+ /**
73
+ * Get balances across all supported networks
74
+ */
75
+ async function checkAllBalances(wallet) {
76
+ const networks = ['base', 'ethereum', 'arbitrum', 'optimism', 'polygon'];
77
+ const results = {};
78
+ await Promise.all(networks.map(async (network) => {
79
+ try {
80
+ results[network] = await checkBalance(wallet, network);
81
+ }
82
+ catch (e) {
83
+ results[network] = {
84
+ wallet,
85
+ network,
86
+ balanceRaw: 0n,
87
+ balanceUsdc: '0',
88
+ sufficient: false,
89
+ };
90
+ }
91
+ }));
92
+ return results;
93
+ }
94
+ //# sourceMappingURL=balance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/balance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * x402 Agent Pay Client
3
+ * Wraps official @x402/fetch with spending controls and receipt tracking
4
+ */
5
+ import { AgentPayConfig, PaymentReceipt, NetworkName } from './config';
6
+ export interface PaymentDetails {
7
+ amount: string;
8
+ amountRaw: string;
9
+ recipient: string;
10
+ network: NetworkName;
11
+ }
12
+ /**
13
+ * Agent Pay Client with policy enforcement
14
+ */
15
+ export declare class AgentPayClient {
16
+ private fetchWithPayment;
17
+ private policy;
18
+ private receipts;
19
+ private config;
20
+ private account;
21
+ private protocolFeesEnabled;
22
+ constructor(config: AgentPayConfig);
23
+ /**
24
+ * Transfer protocol fee to x402-agent-pay maintainers
25
+ * Called automatically after each successful payment
26
+ */
27
+ private transferProtocolFee;
28
+ /**
29
+ * Get wallet address
30
+ */
31
+ getAddress(): string;
32
+ /**
33
+ * Make a payment-enabled request with policy enforcement
34
+ */
35
+ fetch(url: string, init?: RequestInit, options?: {
36
+ skipPolicyCheck?: boolean;
37
+ network?: NetworkName;
38
+ }): Promise<Response>;
39
+ /**
40
+ * Get spending status
41
+ */
42
+ getSpendingStatus(): {
43
+ daily: {
44
+ spent: number;
45
+ limit: number;
46
+ remaining: number;
47
+ transactions: number;
48
+ };
49
+ weekly?: {
50
+ spent: number;
51
+ limit: number;
52
+ remaining: number;
53
+ };
54
+ monthly?: {
55
+ spent: number;
56
+ limit: number;
57
+ remaining: number;
58
+ };
59
+ velocity?: {
60
+ count: number;
61
+ limit: number;
62
+ remaining: number;
63
+ };
64
+ policy: import("./config").PaymentPolicy;
65
+ };
66
+ /**
67
+ * Get payment history
68
+ */
69
+ getHistory(limit?: number): PaymentReceipt[];
70
+ /**
71
+ * Get today's receipts
72
+ */
73
+ getTodayReceipts(): PaymentReceipt[];
74
+ /**
75
+ * Export receipts as CSV
76
+ */
77
+ exportReceiptsCsv(): string;
78
+ }
79
+ /**
80
+ * Error thrown when payment is blocked by policy
81
+ */
82
+ export declare class PaymentBlockedError extends Error {
83
+ receipt: PaymentReceipt;
84
+ constructor(reason: string, receipt: PaymentReceipt);
85
+ }
86
+ /**
87
+ * Create a simple wrapped fetch (no policy, direct SDK usage)
88
+ */
89
+ export declare function createSimpleFetch(privateKey: string): typeof fetch;
90
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EACL,cAAc,EACd,cAAc,EACd,WAAW,EAOZ,MAAM,UAAU,CAAC;AAIlB,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,mBAAmB,CAAU;gBAEzB,MAAM,EAAE,cAAc;IAkBlC;;;OAGG;YACW,mBAAmB;IA8DjC;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACG,KAAK,CACT,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,WAAW,CAAA;KAAE,GAC7D,OAAO,CAAC,QAAQ,CAAC;IAoGpB;;OAEG;IACH,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;IAIjB;;OAEG;IACH,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM;IAIzB;;OAEG;IACH,gBAAgB;IAIhB;;OAEG;IACH,iBAAiB,IAAI,MAAM;CAG5B;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IACrC,OAAO,EAAE,cAAc,CAAC;gBAEnB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc;CAKpD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,KAAK,CAWlE"}