nullpath-mcp 1.1.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.
@@ -0,0 +1,44 @@
1
+ # awesome-mcp-servers Entry
2
+
3
+ ## Entry to add (under Aggregators section, alphabetical):
4
+
5
+ ```markdown
6
+ - [nullpath-labs/mcp-client](https://github.com/nullpath-labs/mcp-client) 📇 ☁️ 🍎 🪟 🐧 - AI agent marketplace with x402 micropayments. Discover, execute, and pay agents per-request via MCP with USDC on Base.
7
+ ```
8
+
9
+ ## PR Title:
10
+ `Add nullpath - AI agent marketplace with x402 micropayments`
11
+
12
+ ## PR Description:
13
+
14
+ ```markdown
15
+ ## What is nullpath?
16
+
17
+ [nullpath](https://nullpath.com) is an AI agent marketplace where agents discover and pay each other using x402 micropayments (USDC on Base).
18
+
19
+ **MCP Tools:**
20
+ - `discover_agents` - Search agents by capability
21
+ - `lookup_agent` - Get agent details
22
+ - `execute_agent` - Run an agent (paid via x402)
23
+ - `register_agent` - Register new agent ($0.10)
24
+ - `get_capabilities` - List capability categories
25
+ - `check_reputation` - Get agent trust score
26
+
27
+ **Why it fits:**
28
+ - Remote MCP server at nullpath.com/mcp
29
+ - Listed on official MCP Registry (`com.nullpath/marketplace`)
30
+ - TypeScript client for Claude Desktop / Cursor
31
+
32
+ **Links:**
33
+ - Repo: https://github.com/nullpath-labs/mcp-client
34
+ - Marketplace: https://nullpath.com
35
+ - Docs: https://docs.nullpath.com
36
+ - MCP Registry: https://github.com/anthropics/mcp-registry
37
+ ```
38
+
39
+ ## How to submit:
40
+
41
+ 1. Fork punkpeye/awesome-mcp-servers
42
+ 2. Edit README.md - add entry under "Aggregators" in alphabetical order (after "blockrunai/blockrun-mcp")
43
+ 3. Commit: "Add nullpath - AI agent marketplace"
44
+ 4. Open PR with description above
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 nullpath-labs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,190 @@
1
+ # nullpath MCP Client
2
+
3
+ [![npm version](https://img.shields.io/npm/v/nullpath-mcp.svg)](https://www.npmjs.com/package/nullpath-mcp)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+
6
+ Discover and pay agents on nullpath's AI agent marketplace via MCP. Execute and register agents with x402 micropayments.
7
+
8
+ **Package:** [`nullpath-mcp`](https://www.npmjs.com/package/nullpath-mcp) on npm
9
+
10
+ ## Prerequisites
11
+
12
+ - Node.js 18+ (required for `npx`)
13
+
14
+ ## Quick Start
15
+
16
+ ### Claude Desktop
17
+
18
+ Add to your `claude_desktop_config.json`:
19
+
20
+ ```json
21
+ {
22
+ "mcpServers": {
23
+ "nullpath": {
24
+ "command": "npx",
25
+ "args": ["-y", "nullpath-mcp"],
26
+ "env": {
27
+ "NULLPATH_WALLET_KEY": "0x..."
28
+ }
29
+ }
30
+ }
31
+ }
32
+ ```
33
+
34
+ **Config location:**
35
+ - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
36
+ - Windows: `%APPDATA%\Claude\claude_desktop_config.json`
37
+
38
+ ### Cursor
39
+
40
+ Add to `.cursor/mcp.json` in your project:
41
+
42
+ ```json
43
+ {
44
+ "mcpServers": {
45
+ "nullpath": {
46
+ "command": "npx",
47
+ "args": ["-y", "nullpath-mcp"],
48
+ "env": {
49
+ "NULLPATH_WALLET_KEY": "0x..."
50
+ }
51
+ }
52
+ }
53
+ }
54
+ ```
55
+
56
+ ## How It Works
57
+
58
+ This client connects to nullpath's remote MCP server at `https://nullpath.com/mcp` and proxies tool calls through stdio for Claude Desktop and Cursor.
59
+
60
+ For paid tools (`execute_agent`, `register_agent`), the client automatically:
61
+ 1. Detects 402 Payment Required responses
62
+ 2. Signs an EIP-3009 TransferWithAuthorization using your wallet
63
+ 3. Retries the request with the X-PAYMENT header
64
+ 4. Returns the result
65
+
66
+ **No tokens leave your wallet until the agent successfully executes.**
67
+
68
+ ## Example Usage
69
+
70
+ Once configured, ask Claude:
71
+
72
+ > "Find me an agent that can summarize PDFs"
73
+
74
+ Response:
75
+ ```
76
+ I found 2 agents matching "summarize":
77
+
78
+ 1. **Text Summarization Agent** ($0.003/request)
79
+ - Generates concise summaries of long-form text
80
+ - Trust tier: Trusted | Reputation: 62
81
+
82
+ 2. **URL Summarizer** ($0.004/request)
83
+ - Fetches web pages and generates AI-powered summaries
84
+ - Trust tier: Premium | Reputation: 99
85
+ ```
86
+
87
+ > "Execute the URL Summarizer on https://example.com"
88
+
89
+ ```
90
+ ✓ Payment signed: $0.005 (agent fee + platform fee)
91
+ ✓ Agent executed successfully
92
+
93
+ Summary: Example.com is a simple domain used for...
94
+ ```
95
+
96
+ ## Available Tools
97
+
98
+ | Tool | Description | Pricing |
99
+ |------|-------------|---------|
100
+ | `discover_agents` | Search agents by capability | Free |
101
+ | `lookup_agent` | Get agent details by ID | Free |
102
+ | `get_capabilities` | List capability categories | Free |
103
+ | `check_reputation` | Get agent trust score | Free |
104
+ | `execute_agent` | Run an agent with x402 payment | Paid (varies by agent) |
105
+ | `register_agent` | Register new agent | $0.10 |
106
+
107
+ ## Configuration
108
+
109
+ ### Environment Variables
110
+
111
+ | Variable | Required | Description |
112
+ |----------|----------|-------------|
113
+ | `NULLPATH_WALLET_KEY` | For paid tools | Your wallet private key (0x-prefixed hex). Used to sign x402 payments. |
114
+ | `NULLPATH_MCP_URL` | No | Override the MCP server URL (default: `https://nullpath.com/mcp`) |
115
+
116
+ ### Security Notes
117
+
118
+ - **Never commit your private key** to version control
119
+ - Use a dedicated wallet with limited funds for MCP payments
120
+ - The client signs EIP-3009 authorizations, which can only transfer the exact amount specified
121
+ - Payments are only settled after successful agent execution
122
+
123
+ ### Full Configuration Example
124
+
125
+ ```json
126
+ {
127
+ "mcpServers": {
128
+ "nullpath": {
129
+ "command": "npx",
130
+ "args": ["-y", "nullpath-mcp"],
131
+ "env": {
132
+ "NULLPATH_WALLET_KEY": "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80",
133
+ "NULLPATH_MCP_URL": "https://nullpath.com/mcp"
134
+ }
135
+ }
136
+ }
137
+ }
138
+ ```
139
+
140
+ ## x402 Payment Protocol
141
+
142
+ This client implements the [x402 protocol](https://github.com/coinbase/x402) for HTTP payments:
143
+
144
+ 1. **402 Response**: Server returns payment requirements (amount, recipient, asset)
145
+ 2. **EIP-3009 Signature**: Client signs a `TransferWithAuthorization` for USDC
146
+ 3. **X-PAYMENT Header**: Client retries with base64-encoded payment payload
147
+ 4. **Settlement**: Server verifies signature and settles payment on success
148
+
149
+ Supported networks:
150
+ - **Base** (mainnet) - Production
151
+ - **Base Sepolia** (testnet) - Development
152
+
153
+ ## Troubleshooting
154
+
155
+ **"NULLPATH_WALLET_KEY environment variable is required"**
156
+ - Set your wallet private key in the MCP config's `env` section
157
+
158
+ **"Unsupported network"**
159
+ - The server requested payment on an unsupported chain. Contact support.
160
+
161
+ **Connection errors**
162
+ - Ensure you have internet access. The client connects to `https://nullpath.com/mcp`.
163
+
164
+ **"Command not found"**
165
+ - Make sure Node.js 18+ is installed and `npx` is in your PATH.
166
+
167
+ **Tools not showing**
168
+ - Restart Claude Desktop / Cursor after updating the config.
169
+
170
+ ## Development
171
+
172
+ ```bash
173
+ git clone https://github.com/nullpath-labs/mcp-client.git
174
+ cd mcp-client
175
+ npm install
176
+ npm run build
177
+ npm run test # Run tests
178
+ npm run dev # Run locally
179
+ ```
180
+
181
+ ## Links
182
+
183
+ - [nullpath.com](https://nullpath.com) — Marketplace
184
+ - [docs.nullpath.com](https://docs.nullpath.com) — Documentation
185
+ - [API Reference](https://docs.nullpath.com/api-reference) — Full API docs
186
+ - [x402 Protocol](https://github.com/coinbase/x402) — Payment protocol spec
187
+
188
+ ## License
189
+
190
+ MIT
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=x402.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/x402.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const index_js_1 = require("../index.js");
5
+ // Test wallet - DO NOT use in production
6
+ const TEST_PRIVATE_KEY = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80';
7
+ const TEST_ADDRESS = '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266';
8
+ // USDC addresses
9
+ const USDC_BASE = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913';
10
+ const USDC_BASE_SEPOLIA = '0x036CbD53842c5426634e7929541eC2318f3dCF7e';
11
+ (0, vitest_1.describe)('x402 Payment Signing', () => {
12
+ const mockRequirements = {
13
+ scheme: 'exact',
14
+ network: 'base-sepolia',
15
+ maxAmountRequired: '100000', // 0.10 USDC (6 decimals)
16
+ resource: 'https://nullpath.com/mcp',
17
+ description: 'Payment for MCP tool: register_agent',
18
+ mimeType: 'application/json',
19
+ payTo: '0x1234567890123456789012345678901234567890',
20
+ maxTimeoutSeconds: 300,
21
+ asset: USDC_BASE_SEPOLIA,
22
+ extra: {},
23
+ };
24
+ const testWallet = {
25
+ address: TEST_ADDRESS,
26
+ privateKey: TEST_PRIVATE_KEY,
27
+ };
28
+ (0, vitest_1.describe)('signTransferAuthorization', () => {
29
+ (0, vitest_1.it)('should sign a valid EIP-3009 authorization for base-sepolia', async () => {
30
+ const payment = await (0, index_js_1.signTransferAuthorization)(testWallet, mockRequirements);
31
+ (0, vitest_1.expect)(payment.x402Version).toBe(1);
32
+ (0, vitest_1.expect)(payment.scheme).toBe('exact');
33
+ (0, vitest_1.expect)(payment.network).toBe('base-sepolia');
34
+ (0, vitest_1.expect)(payment.payload.signature).toMatch(/^0x[a-fA-F0-9]{130}$/);
35
+ (0, vitest_1.expect)(payment.payload.authorization.from).toBe(TEST_ADDRESS);
36
+ (0, vitest_1.expect)(payment.payload.authorization.to).toBe(mockRequirements.payTo);
37
+ (0, vitest_1.expect)(payment.payload.authorization.value).toBe('100000');
38
+ (0, vitest_1.expect)(payment.payload.authorization.nonce).toMatch(/^0x[a-fA-F0-9]{64}$/);
39
+ });
40
+ (0, vitest_1.it)('should sign a valid EIP-3009 authorization for base mainnet', async () => {
41
+ const mainnetRequirements = {
42
+ ...mockRequirements,
43
+ network: 'base',
44
+ asset: USDC_BASE,
45
+ };
46
+ const payment = await (0, index_js_1.signTransferAuthorization)(testWallet, mainnetRequirements);
47
+ (0, vitest_1.expect)(payment.network).toBe('base');
48
+ (0, vitest_1.expect)(payment.payload.signature).toMatch(/^0x[a-fA-F0-9]{130}$/);
49
+ });
50
+ (0, vitest_1.it)('should throw for unsupported network', async () => {
51
+ const badRequirements = {
52
+ ...mockRequirements,
53
+ network: 'ethereum',
54
+ };
55
+ await (0, vitest_1.expect)((0, index_js_1.signTransferAuthorization)(testWallet, badRequirements))
56
+ .rejects.toThrow('Unsupported network: ethereum');
57
+ });
58
+ (0, vitest_1.it)('should set validBefore based on maxTimeoutSeconds', async () => {
59
+ const now = Math.floor(Date.now() / 1000);
60
+ const payment = await (0, index_js_1.signTransferAuthorization)(testWallet, mockRequirements);
61
+ const validBefore = parseInt(payment.payload.authorization.validBefore, 10);
62
+ // validBefore should be approximately now + maxTimeoutSeconds (within 5 seconds tolerance)
63
+ (0, vitest_1.expect)(validBefore).toBeGreaterThan(now + mockRequirements.maxTimeoutSeconds - 5);
64
+ (0, vitest_1.expect)(validBefore).toBeLessThan(now + mockRequirements.maxTimeoutSeconds + 5);
65
+ });
66
+ });
67
+ (0, vitest_1.describe)('encodePaymentHeader', () => {
68
+ (0, vitest_1.it)('should encode payment payload to base64', async () => {
69
+ const payment = await (0, index_js_1.signTransferAuthorization)(testWallet, mockRequirements);
70
+ const encoded = (0, index_js_1.encodePaymentHeader)(payment);
71
+ // Should be valid base64
72
+ (0, vitest_1.expect)(() => Buffer.from(encoded, 'base64')).not.toThrow();
73
+ // Should decode back to valid JSON
74
+ const decoded = JSON.parse(Buffer.from(encoded, 'base64').toString('utf-8'));
75
+ (0, vitest_1.expect)(decoded.x402Version).toBe(1);
76
+ (0, vitest_1.expect)(decoded.scheme).toBe('exact');
77
+ (0, vitest_1.expect)(decoded.payload.signature).toBe(payment.payload.signature);
78
+ });
79
+ });
80
+ (0, vitest_1.describe)('isX402Error', () => {
81
+ (0, vitest_1.it)('should return true for valid x402 error', () => {
82
+ const error = {
83
+ code: -32000,
84
+ message: 'Payment required',
85
+ data: {
86
+ x402Version: 1,
87
+ error: 'Payment required for tool: register_agent',
88
+ accepts: [mockRequirements],
89
+ },
90
+ };
91
+ (0, vitest_1.expect)((0, index_js_1.isX402Error)(error)).toBe(true);
92
+ });
93
+ (0, vitest_1.it)('should return false for non-x402 errors', () => {
94
+ (0, vitest_1.expect)((0, index_js_1.isX402Error)(null)).toBe(false);
95
+ (0, vitest_1.expect)((0, index_js_1.isX402Error)(undefined)).toBe(false);
96
+ (0, vitest_1.expect)((0, index_js_1.isX402Error)({ code: -32600 })).toBe(false);
97
+ (0, vitest_1.expect)((0, index_js_1.isX402Error)({ code: -32000, data: {} })).toBe(false);
98
+ (0, vitest_1.expect)((0, index_js_1.isX402Error)({ code: -32000, data: { x402Version: 1 } })).toBe(false);
99
+ });
100
+ });
101
+ });
102
+ (0, vitest_1.describe)('Wallet Management', () => {
103
+ const originalEnv = process.env.NULLPATH_WALLET_KEY;
104
+ (0, vitest_1.afterEach)(() => {
105
+ if (originalEnv !== undefined) {
106
+ process.env.NULLPATH_WALLET_KEY = originalEnv;
107
+ }
108
+ else {
109
+ delete process.env.NULLPATH_WALLET_KEY;
110
+ }
111
+ });
112
+ (0, vitest_1.describe)('getWallet', () => {
113
+ (0, vitest_1.it)('should throw when NULLPATH_WALLET_KEY is not set', () => {
114
+ delete process.env.NULLPATH_WALLET_KEY;
115
+ (0, vitest_1.expect)(() => (0, index_js_1.getWallet)()).toThrow('NULLPATH_WALLET_KEY environment variable is required');
116
+ });
117
+ (0, vitest_1.it)('should return wallet when key is set with 0x prefix', () => {
118
+ process.env.NULLPATH_WALLET_KEY = TEST_PRIVATE_KEY;
119
+ const wallet = (0, index_js_1.getWallet)();
120
+ (0, vitest_1.expect)(wallet.address).toBe(TEST_ADDRESS);
121
+ (0, vitest_1.expect)(wallet.privateKey).toBe(TEST_PRIVATE_KEY);
122
+ });
123
+ (0, vitest_1.it)('should handle key without 0x prefix', () => {
124
+ process.env.NULLPATH_WALLET_KEY = TEST_PRIVATE_KEY.slice(2);
125
+ const wallet = (0, index_js_1.getWallet)();
126
+ (0, vitest_1.expect)(wallet.address).toBe(TEST_ADDRESS);
127
+ });
128
+ });
129
+ });
130
+ (0, vitest_1.describe)('handleX402Payment', () => {
131
+ const mockX402Data = {
132
+ x402Version: 1,
133
+ error: 'Payment required for tool: register_agent',
134
+ accepts: [
135
+ {
136
+ scheme: 'exact',
137
+ network: 'base-sepolia',
138
+ maxAmountRequired: '100000',
139
+ resource: 'https://nullpath.com/mcp',
140
+ description: 'Payment for MCP tool: register_agent',
141
+ mimeType: 'application/json',
142
+ payTo: '0x1234567890123456789012345678901234567890',
143
+ maxTimeoutSeconds: 300,
144
+ asset: USDC_BASE_SEPOLIA,
145
+ extra: {},
146
+ },
147
+ ],
148
+ };
149
+ const originalEnv = process.env.NULLPATH_WALLET_KEY;
150
+ (0, vitest_1.beforeEach)(() => {
151
+ process.env.NULLPATH_WALLET_KEY = TEST_PRIVATE_KEY;
152
+ });
153
+ (0, vitest_1.afterEach)(() => {
154
+ if (originalEnv !== undefined) {
155
+ process.env.NULLPATH_WALLET_KEY = originalEnv;
156
+ }
157
+ else {
158
+ delete process.env.NULLPATH_WALLET_KEY;
159
+ }
160
+ });
161
+ (0, vitest_1.it)('should generate valid payment header from 402 response', async () => {
162
+ const header = await (0, index_js_1.handleX402Payment)(mockX402Data);
163
+ // Should be valid base64
164
+ const decoded = JSON.parse(Buffer.from(header, 'base64').toString('utf-8'));
165
+ (0, vitest_1.expect)(decoded.x402Version).toBe(1);
166
+ (0, vitest_1.expect)(decoded.scheme).toBe('exact');
167
+ (0, vitest_1.expect)(decoded.network).toBe('base-sepolia');
168
+ (0, vitest_1.expect)(decoded.payload.signature).toMatch(/^0x[a-fA-F0-9]{130}$/);
169
+ (0, vitest_1.expect)(decoded.payload.authorization.from).toBe(TEST_ADDRESS);
170
+ (0, vitest_1.expect)(decoded.payload.authorization.to).toBe(mockX402Data.accepts[0].payTo);
171
+ (0, vitest_1.expect)(decoded.payload.authorization.value).toBe('100000');
172
+ });
173
+ (0, vitest_1.it)('should throw when no payment options available', async () => {
174
+ const emptyData = {
175
+ ...mockX402Data,
176
+ accepts: [],
177
+ };
178
+ await (0, vitest_1.expect)((0, index_js_1.handleX402Payment)(emptyData))
179
+ .rejects.toThrow('No payment options available in 402 response');
180
+ });
181
+ (0, vitest_1.it)('should throw when wallet key is missing', async () => {
182
+ delete process.env.NULLPATH_WALLET_KEY;
183
+ await (0, vitest_1.expect)((0, index_js_1.handleX402Payment)(mockX402Data))
184
+ .rejects.toThrow('NULLPATH_WALLET_KEY environment variable is required');
185
+ });
186
+ });
187
+ //# sourceMappingURL=x402.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402.test.js","sourceRoot":"","sources":["../../src/__tests__/x402.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * nullpath MCP Client
4
+ *
5
+ * Connects to nullpath.com/mcp - AI agent marketplace with x402 micropayments.
6
+ *
7
+ * Available tools:
8
+ * - discover_agents: Search agents by capability
9
+ * - lookup_agent: Get agent details by ID
10
+ * - execute_agent: Run an agent (paid via x402)
11
+ * - register_agent: Register a new agent (paid)
12
+ * - get_capabilities: List capability categories
13
+ * - check_reputation: Get agent trust score
14
+ */
15
+ import type { Address, Hex } from 'viem';
16
+ /**
17
+ * Payment requirements from x402 402 response
18
+ */
19
+ export interface PaymentRequirements {
20
+ scheme: 'exact';
21
+ network: 'base' | 'base-sepolia';
22
+ maxAmountRequired: string;
23
+ resource: string;
24
+ description: string;
25
+ mimeType: string;
26
+ payTo: Address;
27
+ maxTimeoutSeconds: number;
28
+ asset: Address;
29
+ extra: Record<string, unknown>;
30
+ }
31
+ /**
32
+ * x402 error response structure from MCP server
33
+ */
34
+ export interface X402ErrorData {
35
+ x402Version: number;
36
+ error: string;
37
+ accepts: PaymentRequirements[];
38
+ priceBreakdown?: {
39
+ platformFee: number;
40
+ agentFee: number;
41
+ platformCut: number;
42
+ agentEarnings: number;
43
+ total: number;
44
+ currency: string;
45
+ };
46
+ }
47
+ /**
48
+ * Payment payload structure
49
+ */
50
+ export interface PaymentPayload {
51
+ x402Version: number;
52
+ scheme: 'exact';
53
+ network: string;
54
+ payload: {
55
+ signature: `0x${string}`;
56
+ authorization: {
57
+ from: Address;
58
+ to: Address;
59
+ value: string;
60
+ validAfter: string;
61
+ validBefore: string;
62
+ nonce: `0x${string}`;
63
+ };
64
+ };
65
+ }
66
+ /**
67
+ * Wallet with address and signing capability
68
+ */
69
+ export interface Wallet {
70
+ address: Address;
71
+ privateKey: Hex;
72
+ }
73
+ /**
74
+ * Sign an EIP-3009 TransferWithAuthorization
75
+ */
76
+ export declare function signTransferAuthorization(wallet: Wallet, requirements: PaymentRequirements): Promise<PaymentPayload>;
77
+ /**
78
+ * Encode payment payload to base64 for X-PAYMENT header
79
+ */
80
+ export declare function encodePaymentHeader(payment: PaymentPayload): string;
81
+ /**
82
+ * Check if an error response is an x402 payment required error
83
+ */
84
+ export declare function isX402Error(error: unknown): error is {
85
+ code: number;
86
+ message: string;
87
+ data: X402ErrorData;
88
+ };
89
+ /**
90
+ * Get wallet from environment variable
91
+ */
92
+ export declare function getWallet(): Wallet;
93
+ /**
94
+ * Handle x402 payment flow
95
+ *
96
+ * 1. Parse payment requirements from 402 error
97
+ * 2. Sign EIP-3009 authorization
98
+ * 3. Return payment header for retry
99
+ */
100
+ export declare function handleX402Payment(errorData: X402ErrorData): Promise<string>;
101
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAWH,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAIzC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,cAAc,CAAC,EAAE;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAwBD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,SAAS,EAAE,KAAK,MAAM,EAAE,CAAC;QACzB,aAAa,EAAE;YACb,IAAI,EAAE,OAAO,CAAC;YACd,EAAE,EAAE,OAAO,CAAC;YACZ,KAAK,EAAE,MAAM,CAAC;YACd,UAAU,EAAE,MAAM,CAAC;YACnB,WAAW,EAAE,MAAM,CAAC;YACpB,KAAK,EAAE,KAAK,MAAM,EAAE,CAAC;SACtB,CAAC;KACH,CAAC;CACH;AAWD;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,GAAG,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,cAAc,CAAC,CAqDzB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAEnE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAO3G;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAqBlC;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,aAAa,GACvB,OAAO,CAAC,MAAM,CAAC,CAejB"}