402-mcp 4.2.0 → 4.2.2
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 +17 -8
- package/build/config.d.ts +6 -1
- package/build/config.js +12 -2
- package/build/config.js.map +1 -1
- package/build/fetch/resilient-fetch.d.ts +7 -2
- package/build/fetch/resilient-fetch.js +17 -6
- package/build/fetch/resilient-fetch.js.map +1 -1
- package/build/fetch/socks-proxy.d.ts +25 -0
- package/build/fetch/socks-proxy.js +41 -0
- package/build/fetch/socks-proxy.js.map +1 -0
- package/build/fetch/ssrf-guard.d.ts +10 -0
- package/build/fetch/ssrf-guard.js +17 -1
- package/build/fetch/ssrf-guard.js.map +1 -1
- package/build/index.js +3 -2
- package/build/index.js.map +1 -1
- package/build/l402/bolt11.js +3 -2
- package/build/l402/bolt11.js.map +1 -1
- package/build/store/lnurlcash-notes.d.ts +37 -0
- package/build/store/lnurlcash-notes.js +25 -0
- package/build/store/lnurlcash-notes.js.map +1 -1
- package/build/tools/fetch-preview.js +9 -3
- package/build/tools/fetch-preview.js.map +1 -1
- package/build/tools/fetch.js +26 -0
- package/build/tools/fetch.js.map +1 -1
- package/build/wallet/lnurlcash-ops.d.ts +13 -2
- package/build/wallet/lnurlcash-ops.js +63 -2
- package/build/wallet/lnurlcash-ops.js.map +1 -1
- package/build/wallet/lnurlcash.js +43 -6
- package/build/wallet/lnurlcash.js.map +1 -1
- package/build/wallet/types.d.ts +6 -0
- package/llms-full.txt +2 -1
- package/llms.txt +4 -3
- package/package.json +5 -4
- package/src/widgets/dist/payment-confirmation.html +28 -28
- package/src/widgets/dist/service-directory.html +28 -28
- package/src/widgets/dist/wallet-dashboard.html +28 -28
package/README.md
CHANGED
|
@@ -52,12 +52,12 @@ graph LR
|
|
|
52
52
|
**Example session:**
|
|
53
53
|
|
|
54
54
|
```
|
|
55
|
-
Agent: "I need routing data from routing.
|
|
55
|
+
Agent: "I need routing data from routing.example.com"
|
|
56
56
|
|
|
57
57
|
1. l402-config()
|
|
58
58
|
-> nwcConfigured: true, maxAutoPaySats: 1000
|
|
59
59
|
|
|
60
|
-
2. l402-discover("https://routing.
|
|
60
|
+
2. l402-discover("https://routing.example.com/api/route")
|
|
61
61
|
-> 10 sats/request, toll-booth detected, tiers available
|
|
62
62
|
|
|
63
63
|
3. Agent reasons: "I need ~20 requests. The 500-sat tier
|
|
@@ -66,7 +66,7 @@ Agent: "I need routing data from routing.trotters.cc"
|
|
|
66
66
|
4. l402-buy-credits(url, amountSats=500)
|
|
67
67
|
-> Paid 500 sats, received 555 credits
|
|
68
68
|
|
|
69
|
-
5. l402-fetch("https://routing.
|
|
69
|
+
5. l402-fetch("https://routing.example.com/api/route?from=...&to=...")
|
|
70
70
|
-> 200 OK, route data, 545 credits remaining
|
|
71
71
|
```
|
|
72
72
|
|
|
@@ -84,20 +84,29 @@ For detailed architecture and payment flow diagrams, see [docs/architecture.md](
|
|
|
84
84
|
| `TRANSPORT` | `stdio` | Transport mode: `stdio` or `http` |
|
|
85
85
|
| `PORT` | 3402 | HTTP server port (when `TRANSPORT=http`) |
|
|
86
86
|
| `TRANSPORT_PREFERENCE` | `onion,hns,https,http` | Preferred transport order for multi-URL services (comma-separated) |
|
|
87
|
-
| `TOR_PROXY` | - | SOCKS5 proxy for `.onion` addresses (e.g. `socks5h://127.0.0.1:9050`) |
|
|
88
|
-
| `SOCKS_PROXY` | - |
|
|
87
|
+
| `TOR_PROXY` | - | SOCKS5 proxy for `.onion` addresses only (e.g. `socks5h://127.0.0.1:9050`) |
|
|
88
|
+
| `SOCKS_PROXY` | - | SOCKS5 proxy for every paid-API request (e.g. Tor at `socks5h://127.0.0.1:9050`). Set this or `TOR_PROXY`, not both |
|
|
89
89
|
| `HNS_GATEWAY_URL` | - | HTTP gateway for Handshake (`.hns`) domains (e.g. `https://hns.to`) |
|
|
90
90
|
|
|
91
91
|
### Transport selection and fallback
|
|
92
92
|
|
|
93
93
|
When a kind 31402 event advertises multiple URLs (one per transport), 402-mcp selects the best one based on your configuration:
|
|
94
94
|
|
|
95
|
-
1. **Preference first
|
|
96
|
-
2. **
|
|
97
|
-
3. **
|
|
95
|
+
1. **Preference first**: URLs are tried in `TRANSPORT_PREFERENCE` order, `onion,hns,https,http` by default. Use `onion`, `hns`, `https` and `http` as the values.
|
|
96
|
+
2. **Capability filter**: `.onion` URLs are skipped unless `TOR_PROXY` or `SOCKS_PROXY` is set, so without a proxy the default order starts at HNS and clearnet.
|
|
97
|
+
3. **Availability fallback**: if a transport is unreachable (connection refused, timeout), the next URL is tried.
|
|
98
98
|
|
|
99
99
|
Services can announce multiple endpoints for the **same service** (same pricing, same macaroon key) on different transports. This is purely for censorship resistance; you do not need to re-authenticate when switching transports. To reach Tor or HNS endpoints you must configure the corresponding proxy/gateway env vars above.
|
|
100
100
|
|
|
101
|
+
### Tor and SOCKS5
|
|
102
|
+
|
|
103
|
+
- **`TOR_PROXY`** sends `.onion` requests through the proxy. Everything else connects directly.
|
|
104
|
+
- **`SOCKS_PROXY`** sends every request to a paid API through the proxy, including redirects. Host names are resolved by the proxy, never by this machine, so a Tor proxy hides both your IP and the names you look up. The SSRF guard still refuses private IP literals and local names such as `localhost`; it cannot see what a name resolves to on the far side, which Tor exits refuse for private ranges anyway.
|
|
105
|
+
|
|
106
|
+
Neither setting covers wallet or discovery traffic: NWC relays, Cashu and LNURLcash mints, and the Nostr relays `l402-search` queries still connect directly. Handshake lookups are switched off under `SOCKS_PROXY`, because the DNS-over-HTTPS query would go around the proxy.
|
|
107
|
+
|
|
108
|
+
SOCKS5 support comes from undici's `Socks5ProxyAgent`, which Node marks experimental; expect one `ExperimentalWarning` on stderr when a proxy is configured.
|
|
109
|
+
|
|
101
110
|
## Tools
|
|
102
111
|
|
|
103
112
|
### Core L402 (any server)
|
package/build/config.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ProxyScope } from './fetch/socks-proxy.js';
|
|
1
2
|
export interface L402Config {
|
|
2
3
|
nwcUri: string | undefined;
|
|
3
4
|
cashuTokensPath: string | undefined;
|
|
@@ -16,7 +17,11 @@ export interface L402Config {
|
|
|
16
17
|
corsOrigin: string | false;
|
|
17
18
|
bindAddress: string;
|
|
18
19
|
transportPreference: string[];
|
|
19
|
-
|
|
20
|
+
/** SOCKS5 proxy: `onion` scope from TOR_PROXY, `all` scope from SOCKS_PROXY */
|
|
21
|
+
proxy: {
|
|
22
|
+
url: string;
|
|
23
|
+
scope: ProxyScope;
|
|
24
|
+
} | undefined;
|
|
20
25
|
hnsGatewayUrl: string;
|
|
21
26
|
}
|
|
22
27
|
/** Loads and validates configuration from environment variables, applying defaults. */
|
package/build/config.js
CHANGED
|
@@ -2,6 +2,7 @@ import { resolve } from 'node:path';
|
|
|
2
2
|
import { homedir } from 'node:os';
|
|
3
3
|
import { closeSync, fstatSync, openSync, readSync } from 'node:fs';
|
|
4
4
|
import { inspectNwcConnection } from '@forgesworn/nwc-kit';
|
|
5
|
+
import { parseSocksProxyUrl } from './fetch/socks-proxy.js';
|
|
5
6
|
function assertNonNegativeInt(name, value) {
|
|
6
7
|
if (!Number.isFinite(value) || value < 0 || !Number.isInteger(value)) {
|
|
7
8
|
throw new Error(`${name} must be a positive integer or zero; got ${value}`);
|
|
@@ -74,7 +75,16 @@ export function loadConfig() {
|
|
|
74
75
|
const transportPreference = transportPref
|
|
75
76
|
? transportPref.split(',').map(s => s.trim()).filter(Boolean)
|
|
76
77
|
: ['onion', 'hns', 'https', 'http'];
|
|
77
|
-
const torProxy = process.env.TOR_PROXY ||
|
|
78
|
+
const torProxy = process.env.TOR_PROXY || undefined;
|
|
79
|
+
const socksProxy = process.env.SOCKS_PROXY || undefined;
|
|
80
|
+
if (torProxy && socksProxy) {
|
|
81
|
+
throw new Error('Set TOR_PROXY (only .onion through the proxy) or SOCKS_PROXY (everything through the proxy), not both');
|
|
82
|
+
}
|
|
83
|
+
const proxy = socksProxy
|
|
84
|
+
? { url: parseSocksProxyUrl('SOCKS_PROXY', socksProxy), scope: 'all' }
|
|
85
|
+
: torProxy
|
|
86
|
+
? { url: parseSocksProxyUrl('TOR_PROXY', torProxy), scope: 'onion' }
|
|
87
|
+
: undefined;
|
|
78
88
|
const hnsGatewayUrl = process.env.HNS_GATEWAY_URL || 'https://query.hdns.io/';
|
|
79
89
|
const config = {
|
|
80
90
|
nwcUri,
|
|
@@ -94,7 +104,7 @@ export function loadConfig() {
|
|
|
94
104
|
corsOrigin: process.env.CORS_ORIGIN || false,
|
|
95
105
|
bindAddress: process.env.BIND_ADDRESS ?? '127.0.0.1',
|
|
96
106
|
transportPreference,
|
|
97
|
-
|
|
107
|
+
proxy,
|
|
98
108
|
hnsGatewayUrl,
|
|
99
109
|
};
|
|
100
110
|
assertNonNegativeInt('MAX_AUTO_PAY_SATS', config.maxAutoPaySats);
|
package/build/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ValidateUrlOptions } from './ssrf-guard.js';
|
|
2
|
+
import { type ProxyRoute } from './socks-proxy.js';
|
|
2
3
|
export interface ResilientFetchOptions {
|
|
3
4
|
timeoutMs?: number;
|
|
4
5
|
retries?: number;
|
|
@@ -14,8 +15,12 @@ export interface ResilientFetchConfig {
|
|
|
14
15
|
ssrfAllowPrivate?: boolean;
|
|
15
16
|
/** HNS (Handshake) resolver — called on NXDOMAIN to resolve alternative TLDs */
|
|
16
17
|
resolveHns?: ValidateUrlOptions['resolveHns'];
|
|
17
|
-
/**
|
|
18
|
-
|
|
18
|
+
/**
|
|
19
|
+
* SOCKS5 route. `.onion` hosts (and, with scope `all`, every host) are
|
|
20
|
+
* fetched through `proxy.fetchFn`; the rest use `fetchFn`. Without a
|
|
21
|
+
* route, `.onion` URLs are refused rather than leaked to the local resolver.
|
|
22
|
+
*/
|
|
23
|
+
proxy?: ProxyRoute;
|
|
19
24
|
}
|
|
20
25
|
/**
|
|
21
26
|
* Create a resilient fetch function with SSRF protection, timeout, and retry.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { validateUrl } from './ssrf-guard.js';
|
|
2
|
+
import { usesProxy } from './socks-proxy.js';
|
|
2
3
|
import { SsrfError, TimeoutError, RetryExhaustedError, DowngradeError, ResponseTooLargeError, TransportUnavailableError } from './errors.js';
|
|
3
4
|
const MAX_REDIRECTS = 5;
|
|
4
5
|
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
@@ -57,9 +58,12 @@ export function createResilientFetch(fetchFn, config = {}) {
|
|
|
57
58
|
const globalBackoff = config.backoffMs ?? DEFAULT_BACKOFF_MS;
|
|
58
59
|
const globalMaxResponseBytes = config.maxResponseBytes ?? 0;
|
|
59
60
|
const allowPrivate = config.ssrfAllowPrivate ?? false;
|
|
61
|
+
const proxy = config.proxy;
|
|
60
62
|
const ssrfOptions = {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
+
// Resolving an HNS name would go around a proxy that carries everything.
|
|
64
|
+
resolveHns: proxy?.scope === 'all' ? undefined : config.resolveHns,
|
|
65
|
+
hasTorProxy: proxy !== undefined,
|
|
66
|
+
remoteDns: proxy?.scope === 'all',
|
|
63
67
|
};
|
|
64
68
|
return async function resilientFetch(url, init, options) {
|
|
65
69
|
const timeoutMs = options?.timeoutMs ?? globalTimeout;
|
|
@@ -79,7 +83,7 @@ export function createResilientFetch(fetchFn, config = {}) {
|
|
|
79
83
|
await sleep(delay);
|
|
80
84
|
}
|
|
81
85
|
try {
|
|
82
|
-
let response = await fetchWithTimeoutAndRedirects(fetchFn, urlStr, init, timeoutMs, allowPrivate, urlStr, resolved, ssrfOptions);
|
|
86
|
+
let response = await fetchWithTimeoutAndRedirects(fetchFn, urlStr, init, timeoutMs, allowPrivate, urlStr, resolved, ssrfOptions, proxy);
|
|
83
87
|
// If retryable status and we have retries left, drain body and continue
|
|
84
88
|
if (retryOn(response.status) && attempt < totalAttempts - 1) {
|
|
85
89
|
try {
|
|
@@ -143,7 +147,7 @@ export function createResilientFetch(fetchFn, config = {}) {
|
|
|
143
147
|
throw new RetryExhaustedError(totalAttempts, urlStr, lastError);
|
|
144
148
|
};
|
|
145
149
|
}
|
|
146
|
-
async function fetchWithTimeoutAndRedirects(fetchFn, url, init, timeoutMs, allowPrivate, originalUrl, resolved, ssrfOptions = {}) {
|
|
150
|
+
async function fetchWithTimeoutAndRedirects(fetchFn, url, init, timeoutMs, allowPrivate, originalUrl, resolved, ssrfOptions = {}, proxy) {
|
|
147
151
|
let currentUrl = url;
|
|
148
152
|
let currentInit = init ? { ...init } : {};
|
|
149
153
|
let redirectCount = 0;
|
|
@@ -152,8 +156,15 @@ async function fetchWithTimeoutAndRedirects(fetchFn, url, init, timeoutMs, allow
|
|
|
152
156
|
// a malicious server from stalling each hop for the full timeout.
|
|
153
157
|
const chainStart = Date.now();
|
|
154
158
|
while (true) {
|
|
159
|
+
// Choose per hop: a redirect can move between clearnet and .onion.
|
|
160
|
+
// A proxied hop is never pinned: the proxy resolves the name, and
|
|
161
|
+
// rewriting it to a local lookup's IP would defeat the point.
|
|
162
|
+
const proxied = usesProxy(proxy, new URL(currentUrl).hostname);
|
|
163
|
+
const hopFetch = proxied ? proxy.fetchFn : fetchFn;
|
|
155
164
|
// Pin HTTP URLs to the validated IP to prevent DNS rebinding
|
|
156
|
-
const { pinnedUrl, hostHeader } =
|
|
165
|
+
const { pinnedUrl, hostHeader } = proxied
|
|
166
|
+
? { pinnedUrl: currentUrl, hostHeader: undefined }
|
|
167
|
+
: pinUrlToResolvedIp(currentUrl, currentResolved);
|
|
157
168
|
const elapsed = Date.now() - chainStart;
|
|
158
169
|
const remainingMs = Math.max(0, timeoutMs - elapsed);
|
|
159
170
|
if (remainingMs === 0) {
|
|
@@ -175,7 +186,7 @@ async function fetchWithTimeoutAndRedirects(fetchFn, url, init, timeoutMs, allow
|
|
|
175
186
|
}
|
|
176
187
|
let response;
|
|
177
188
|
try {
|
|
178
|
-
response = await
|
|
189
|
+
response = await hopFetch(pinnedUrl, fetchInit);
|
|
179
190
|
}
|
|
180
191
|
catch (err) {
|
|
181
192
|
clearTimeout(timeoutId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resilient-fetch.js","sourceRoot":"","sources":["../../src/fetch/resilient-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAiD,MAAM,iBAAiB,CAAA;AAC5F,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"resilient-fetch.js","sourceRoot":"","sources":["../../src/fetch/resilient-fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where outbound requests go through a SOCKS5 proxy.
|
|
3
|
+
*
|
|
4
|
+
* - `onion`: only `.onion` hosts use the proxy (TOR_PROXY).
|
|
5
|
+
* - `all`: every request uses the proxy (SOCKS_PROXY), and this process never
|
|
6
|
+
* resolves a target host name itself.
|
|
7
|
+
*/
|
|
8
|
+
export type ProxyScope = 'onion' | 'all';
|
|
9
|
+
export interface ProxyRoute {
|
|
10
|
+
scope: ProxyScope;
|
|
11
|
+
fetchFn: typeof fetch;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Parse and normalise a SOCKS5 proxy URL from configuration.
|
|
15
|
+
*
|
|
16
|
+
* Accepts `socks5://`, `socks5h://` and `socks://`. All three mean the same
|
|
17
|
+
* thing here: host names are always sent to the proxy to resolve, never looked
|
|
18
|
+
* up locally, so `socks5h` needs no special handling. Anything else is refused
|
|
19
|
+
* at startup rather than silently sending traffic around the proxy.
|
|
20
|
+
*/
|
|
21
|
+
export declare function parseSocksProxyUrl(name: string, raw: string): string;
|
|
22
|
+
/** A fetch that tunnels every request through the given SOCKS5 proxy. */
|
|
23
|
+
export declare function createSocksFetch(proxyUrl: string): typeof fetch;
|
|
24
|
+
/** Whether a request to this host goes through the proxy. */
|
|
25
|
+
export declare function usesProxy(route: ProxyRoute | undefined, hostname: string): boolean;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { fetch as undiciFetch, Socks5ProxyAgent } from 'undici';
|
|
2
|
+
/**
|
|
3
|
+
* Parse and normalise a SOCKS5 proxy URL from configuration.
|
|
4
|
+
*
|
|
5
|
+
* Accepts `socks5://`, `socks5h://` and `socks://`. All three mean the same
|
|
6
|
+
* thing here: host names are always sent to the proxy to resolve, never looked
|
|
7
|
+
* up locally, so `socks5h` needs no special handling. Anything else is refused
|
|
8
|
+
* at startup rather than silently sending traffic around the proxy.
|
|
9
|
+
*/
|
|
10
|
+
export function parseSocksProxyUrl(name, raw) {
|
|
11
|
+
let url;
|
|
12
|
+
try {
|
|
13
|
+
url = new URL(raw);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
throw new Error(`${name} must be a SOCKS5 URL such as socks5h://127.0.0.1:9050; got an unparseable value`);
|
|
17
|
+
}
|
|
18
|
+
if (!['socks5:', 'socks5h:', 'socks:'].includes(url.protocol)) {
|
|
19
|
+
throw new Error(`${name} must use socks5://, socks5h:// or socks://; got ${url.protocol}//`);
|
|
20
|
+
}
|
|
21
|
+
if (!url.hostname || !url.port) {
|
|
22
|
+
throw new Error(`${name} must include a host and port, e.g. socks5h://127.0.0.1:9050`);
|
|
23
|
+
}
|
|
24
|
+
if (url.pathname.replace(/\/$/, '') || url.search || url.hash) {
|
|
25
|
+
throw new Error(`${name} must not include a path, query or fragment`);
|
|
26
|
+
}
|
|
27
|
+
const auth = url.username ? `${url.username}${url.password ? `:${url.password}` : ''}@` : '';
|
|
28
|
+
return `socks5://${auth}${url.host}`;
|
|
29
|
+
}
|
|
30
|
+
/** A fetch that tunnels every request through the given SOCKS5 proxy. */
|
|
31
|
+
export function createSocksFetch(proxyUrl) {
|
|
32
|
+
const dispatcher = new Socks5ProxyAgent(proxyUrl);
|
|
33
|
+
return ((input, init) => undiciFetch(input, { ...init, dispatcher }));
|
|
34
|
+
}
|
|
35
|
+
/** Whether a request to this host goes through the proxy. */
|
|
36
|
+
export function usesProxy(route, hostname) {
|
|
37
|
+
if (!route)
|
|
38
|
+
return false;
|
|
39
|
+
return route.scope === 'all' || hostname.toLowerCase().replace(/\.$/, '').endsWith('.onion');
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=socks-proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socks-proxy.js","sourceRoot":"","sources":["../../src/fetch/socks-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAgB/D;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,GAAW;IAC1D,IAAI,GAAQ,CAAA;IACZ,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,kFAAkF,CAAC,CAAA;IAC5G,CAAC;IACD,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,oDAAoD,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAA;IAC9F,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,8DAA8D,CAAC,CAAA;IACxF,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,6CAA6C,CAAC,CAAA;IACvE,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IAC5F,OAAO,YAAY,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;AACtC,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IACjD,OAAO,CAAC,CAAC,KAAmB,EAAE,IAAkB,EAAE,EAAE,CAClD,WAAW,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU,EAAuC,CAAC,CAA4B,CAAA;AAChH,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,SAAS,CAAC,KAA6B,EAAE,QAAgB;IACvE,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IACxB,OAAO,KAAK,CAAC,KAAK,KAAK,KAAK,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC9F,CAAC"}
|
|
@@ -5,6 +5,12 @@ export interface ValidateUrlOptions {
|
|
|
5
5
|
resolveHns?: (hostname: string) => Promise<ResolvedAddress>;
|
|
6
6
|
/** Whether a Tor SOCKS proxy is available — required for .onion URLs */
|
|
7
7
|
hasTorProxy?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Every request goes through a SOCKS proxy that resolves names itself.
|
|
10
|
+
* No local DNS lookup is made (it would leak the host name around the
|
|
11
|
+
* proxy); IP literals and local-only names are still refused.
|
|
12
|
+
*/
|
|
13
|
+
remoteDns?: boolean;
|
|
8
14
|
}
|
|
9
15
|
/**
|
|
10
16
|
* Validate a URL against SSRF rules and return the resolved IP address.
|
|
@@ -23,6 +29,10 @@ export interface ValidateUrlOptions {
|
|
|
23
29
|
* - If `options.hasTorProxy` is true, returns `undefined` (route via SOCKS proxy; skip SSRF).
|
|
24
30
|
* - Otherwise throws `TransportUnavailableError`.
|
|
25
31
|
*
|
|
32
|
+
* With `options.remoteDns` (all traffic via SOCKS), nothing is resolved here:
|
|
33
|
+
* IP literals are checked against the blocked ranges, local-only names are
|
|
34
|
+
* refused, and `undefined` is returned so nothing is pinned.
|
|
35
|
+
*
|
|
26
36
|
* HNS fallback:
|
|
27
37
|
* - If standard DNS fails with NXDOMAIN (ENOTFOUND) and `options.resolveHns` is provided,
|
|
28
38
|
* it is tried as a fallback. The resolved IP still goes through blocked-range checks.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { promises as dns } from 'node:dns';
|
|
2
|
+
import { isIP } from 'node:net';
|
|
2
3
|
import { SsrfError, TransportUnavailableError } from './errors.js';
|
|
3
4
|
function isBlockedIp(address, family) {
|
|
4
5
|
if (family === 6) {
|
|
@@ -89,6 +90,8 @@ function assertNotBlocked(address, family, url) {
|
|
|
89
90
|
throw new SsrfError(reason, url);
|
|
90
91
|
}
|
|
91
92
|
}
|
|
93
|
+
/** Names that only ever mean this machine or its local network. */
|
|
94
|
+
const LOCAL_NAME_RE = /(^|\.)(localhost|local|internal|lan|home\.arpa)$/i;
|
|
92
95
|
/**
|
|
93
96
|
* Validate a URL against SSRF rules and return the resolved IP address.
|
|
94
97
|
*
|
|
@@ -106,6 +109,10 @@ function assertNotBlocked(address, family, url) {
|
|
|
106
109
|
* - If `options.hasTorProxy` is true, returns `undefined` (route via SOCKS proxy; skip SSRF).
|
|
107
110
|
* - Otherwise throws `TransportUnavailableError`.
|
|
108
111
|
*
|
|
112
|
+
* With `options.remoteDns` (all traffic via SOCKS), nothing is resolved here:
|
|
113
|
+
* IP literals are checked against the blocked ranges, local-only names are
|
|
114
|
+
* refused, and `undefined` is returned so nothing is pinned.
|
|
115
|
+
*
|
|
109
116
|
* HNS fallback:
|
|
110
117
|
* - If standard DNS fails with NXDOMAIN (ENOTFOUND) and `options.resolveHns` is provided,
|
|
111
118
|
* it is tried as a fallback. The resolved IP still goes through blocked-range checks.
|
|
@@ -129,11 +136,20 @@ export async function validateUrl(url, allowPrivate = false, options = {}) {
|
|
|
129
136
|
// so the guard is self-contained rather than relying on upstream normalisation.
|
|
130
137
|
const hostname = parsed.hostname.replace(/^\[/, '').replace(/\]$/, '').split('%')[0];
|
|
131
138
|
// .onion: route via Tor SOCKS proxy — never attempt DNS resolution
|
|
132
|
-
|
|
139
|
+
const bareHost = hostname.replace(/\.$/, '');
|
|
140
|
+
if (bareHost.toLowerCase().endsWith('.onion')) {
|
|
133
141
|
if (options.hasTorProxy)
|
|
134
142
|
return undefined;
|
|
135
143
|
throw new TransportUnavailableError(url, 'Tor proxy required for .onion addresses');
|
|
136
144
|
}
|
|
145
|
+
if (options.remoteDns) {
|
|
146
|
+
const family = isIP(bareHost);
|
|
147
|
+
if (family)
|
|
148
|
+
assertNotBlocked(bareHost, family, url);
|
|
149
|
+
else if (LOCAL_NAME_RE.test(bareHost))
|
|
150
|
+
throw new SsrfError('local host name', url);
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
137
153
|
// Resolve ALL addresses to prevent multi-homed bypass where one A/AAAA
|
|
138
154
|
// record is public but another resolves to a private/blocked IP.
|
|
139
155
|
let results;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssrf-guard.js","sourceRoot":"","sources":["../../src/fetch/ssrf-guard.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ssrf-guard.js","sourceRoot":"","sources":["../../src/fetch/ssrf-guard.ts"],"names":[],"mappings":"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"}
|
package/build/index.js
CHANGED
|
@@ -35,6 +35,7 @@ import { attemptLnurlcashPayment } from './xlnurlcash/payment.js';
|
|
|
35
35
|
import { isIETFPaymentChallenge, parseIETFPaymentChallenge } from './ietf-payment/parse.js';
|
|
36
36
|
import { buildIETFPaymentCredential } from './ietf-payment/credential.js';
|
|
37
37
|
import { createResilientFetch, withTransportFallback } from './fetch/resilient-fetch.js';
|
|
38
|
+
import { createSocksFetch } from './fetch/socks-proxy.js';
|
|
38
39
|
import { selectTransports } from './fetch/transport.js';
|
|
39
40
|
import { resolveHns as resolveHnsBase } from './fetch/hns-resolve.js';
|
|
40
41
|
import { SpendTracker } from './spend-tracker.js';
|
|
@@ -49,7 +50,7 @@ const resilientFetch = createResilientFetch(fetch, {
|
|
|
49
50
|
maxResponseBytes: config.fetchMaxResponseBytes,
|
|
50
51
|
ssrfAllowPrivate: config.ssrfAllowPrivate,
|
|
51
52
|
resolveHns,
|
|
52
|
-
|
|
53
|
+
proxy: config.proxy && { scope: config.proxy.scope, fetchFn: createSocksFetch(config.proxy.url) },
|
|
53
54
|
});
|
|
54
55
|
// Shared state
|
|
55
56
|
const credentialStore = new CredentialStore(config.credentialStorePath);
|
|
@@ -192,7 +193,7 @@ registerDiscoverTool(server, {
|
|
|
192
193
|
registerFetchTool(server, {
|
|
193
194
|
credentialStore,
|
|
194
195
|
fetchFn: resilientFetch,
|
|
195
|
-
transportFetch: (urls, init) => withTransportFallback(selectTransports(urls, config.transportPreference, { hasTorProxy:
|
|
196
|
+
transportFetch: (urls, init) => withTransportFallback(selectTransports(urls, config.transportPreference, { hasTorProxy: config.proxy !== undefined }), init, resilientFetch),
|
|
196
197
|
payInvoice,
|
|
197
198
|
maxAutoPaySats: config.maxAutoPaySats,
|
|
198
199
|
maxSpendPerMinuteSats: config.maxSpendPerMinuteSats,
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/build/l402/bolt11.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { tryDecodeBolt11 } from 'farrier-kit/bolt11';
|
|
2
2
|
/** Decodes a BOLT-11 Lightning invoice to extract amount, payment hash, and expiry. */
|
|
3
3
|
export function decodeBolt11(invoice) {
|
|
4
4
|
const decoded = tryDecodeBolt11(invoice);
|
|
@@ -6,7 +6,8 @@ export function decodeBolt11(invoice) {
|
|
|
6
6
|
return { costSats: null, paymentHash: null, expiry: 3600 };
|
|
7
7
|
}
|
|
8
8
|
return {
|
|
9
|
-
|
|
9
|
+
// Rounded up: a spending cap must never see less than the invoice charges.
|
|
10
|
+
costSats: decoded.amountMsats === null ? null : Number((decoded.amountMsats + 999n) / 1000n),
|
|
10
11
|
paymentHash: decoded.paymentHashHex,
|
|
11
12
|
expiry: decoded.expirySeconds,
|
|
12
13
|
};
|
package/build/l402/bolt11.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bolt11.js","sourceRoot":"","sources":["../../src/l402/bolt11.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"bolt11.js","sourceRoot":"","sources":["../../src/l402/bolt11.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAQpD,uFAAuF;AACvF,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;IAC5D,CAAC;IAED,OAAO;QACL,2EAA2E;QAC3E,QAAQ,EAAE,OAAO,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;QAC5F,WAAW,EAAE,OAAO,CAAC,cAAc;QACnC,MAAM,EAAE,OAAO,CAAC,aAAa;KAC9B,CAAA;AACH,CAAC"}
|
|
@@ -20,6 +20,33 @@ export interface StoredNote {
|
|
|
20
20
|
addedAt: string;
|
|
21
21
|
/** For a provisional note, the secret of the note whose split created it. */
|
|
22
22
|
parent?: string;
|
|
23
|
+
/**
|
|
24
|
+
* For a melting note, the mint's LUD-21 verify URL for the invoice being
|
|
25
|
+
* paid, and that invoice's payment hash.
|
|
26
|
+
*
|
|
27
|
+
* Written before the first poll rather than kept in a local variable,
|
|
28
|
+
* because losing it loses the payment. A melt that settles after the
|
|
29
|
+
* client stops waiting still spends the note; without this the only route
|
|
30
|
+
* back to the preimage is gone, and for L402 the preimage is not a
|
|
31
|
+
* receipt, it is the credential being bought. So: sats gone, note gone,
|
|
32
|
+
* no access, and no way to ask again.
|
|
33
|
+
*/
|
|
34
|
+
verifyUrl?: string;
|
|
35
|
+
paymentHashHex?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A melt this wallet paid for, kept after the note itself is gone.
|
|
39
|
+
*
|
|
40
|
+
* The preimage is the thing the payment bought. Reconciling a melt that
|
|
41
|
+
* settled late has to put it somewhere durable, or recovering it and then
|
|
42
|
+
* dropping it on the floor is the same outcome as never recovering it.
|
|
43
|
+
*/
|
|
44
|
+
export interface SettledMelt {
|
|
45
|
+
paymentHashHex: string;
|
|
46
|
+
preimage: string;
|
|
47
|
+
amountMsat: number;
|
|
48
|
+
mint: string;
|
|
49
|
+
settledAt: string;
|
|
23
50
|
}
|
|
24
51
|
/** Encrypted persistent store for LNURLcash bearer notes. */
|
|
25
52
|
export declare class LnurlcashNoteStore {
|
|
@@ -50,6 +77,16 @@ export declare class LnurlcashNoteStore {
|
|
|
50
77
|
/** Promotes a provisional note to spendable with its confirmed value. */
|
|
51
78
|
confirm(secret: string, amountMsat: number): void;
|
|
52
79
|
remove(secret: string): void;
|
|
80
|
+
/** Melts whose preimage was recovered, newest last. */
|
|
81
|
+
settledMelts(): SettledMelt[];
|
|
82
|
+
/**
|
|
83
|
+
* Records a recovered preimage. Idempotent on payment hash: reconcile can
|
|
84
|
+
* run many times over the same late melt, and a duplicate here would look
|
|
85
|
+
* like a second payment.
|
|
86
|
+
*/
|
|
87
|
+
recordSettledMelt(melt: SettledMelt): void;
|
|
88
|
+
/** Attaches the proof a late melt can be recovered with, before polling starts. */
|
|
89
|
+
setMeltProof(secret: string, verifyUrl: string, paymentHashHex: string): void;
|
|
53
90
|
removeMany(secrets: string[]): void;
|
|
54
91
|
private load;
|
|
55
92
|
private save;
|