402-mcp 4.2.2 → 4.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 +45 -16
- package/build/config.d.ts +6 -0
- package/build/config.js +41 -10
- package/build/config.js.map +1 -1
- package/build/fetch/resilient-fetch.js +15 -4
- package/build/fetch/resilient-fetch.js.map +1 -1
- package/build/fetch/transport.d.ts +1 -0
- package/build/fetch/transport.js +37 -14
- package/build/fetch/transport.js.map +1 -1
- package/build/http-security.d.ts +13 -0
- package/build/http-security.js +38 -0
- package/build/http-security.js.map +1 -0
- package/build/index.js +184 -119
- package/build/index.js.map +1 -1
- package/build/spend-tracker.d.ts +31 -4
- package/build/spend-tracker.js +102 -17
- package/build/spend-tracker.js.map +1 -1
- package/build/store/cashu-tokens.d.ts +19 -0
- package/build/store/cashu-tokens.js +32 -0
- package/build/store/cashu-tokens.js.map +1 -1
- package/build/store/credentials.d.ts +5 -0
- package/build/store/credentials.js +1 -0
- package/build/store/credentials.js.map +1 -1
- package/build/store/pending-payments.d.ts +36 -0
- package/build/store/pending-payments.js +88 -0
- package/build/store/pending-payments.js.map +1 -0
- package/build/tools/buy-credits.d.ts +9 -0
- package/build/tools/buy-credits.js +40 -3
- package/build/tools/buy-credits.js.map +1 -1
- package/build/tools/config.d.ts +5 -0
- package/build/tools/config.js.map +1 -1
- package/build/tools/confirm.d.ts +12 -0
- package/build/tools/confirm.js +27 -0
- package/build/tools/confirm.js.map +1 -0
- package/build/tools/fetch.d.ts +7 -1
- package/build/tools/fetch.js +255 -140
- package/build/tools/fetch.js.map +1 -1
- package/build/tools/nostr-subscribe.d.ts +5 -2
- package/build/tools/nostr-subscribe.js +0 -2
- package/build/tools/nostr-subscribe.js.map +1 -1
- package/build/tools/pay.d.ts +9 -0
- package/build/tools/pay.js +65 -8
- package/build/tools/pay.js.map +1 -1
- package/build/tools/reconcile.d.ts +33 -0
- package/build/tools/reconcile.js +111 -0
- package/build/tools/reconcile.js.map +1 -0
- package/build/tools/redeem-cashu.js +1 -1
- package/build/tools/redeem-cashu.js.map +1 -1
- package/build/tools/register-widgets.js +5 -5
- package/build/tools/register-widgets.js.map +1 -1
- package/build/tools/search.js +25 -7
- package/build/tools/search.js.map +1 -1
- package/build/tools/untrusted.d.ts +3 -0
- package/build/tools/untrusted.js +18 -0
- package/build/tools/untrusted.js.map +1 -0
- package/build/wallet/cashu.js +101 -21
- package/build/wallet/cashu.js.map +1 -1
- package/build/wallet/lnurlcash.js +25 -7
- package/build/wallet/lnurlcash.js.map +1 -1
- package/build/wallet/nwc.js +51 -3
- package/build/wallet/nwc.js.map +1 -1
- package/build/wallet/types.d.ts +17 -0
- package/build/widgets/index.js +2 -1
- package/build/widgets/index.js.map +1 -1
- package/build/widgets/paths.d.ts +7 -0
- package/build/widgets/paths.js +11 -0
- package/build/widgets/paths.js.map +1 -0
- package/build/x402/parse.d.ts +15 -3
- package/build/x402/parse.js +23 -9
- package/build/x402/parse.js.map +1 -1
- package/build/x402/payment.js +11 -6
- package/build/x402/payment.js.map +1 -1
- package/llms-full.txt +72 -34
- package/llms.txt +49 -22
- package/package.json +3 -3
- package/src/widgets/dist/service-directory.html +11 -2
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import type { SearchDeps } from './search.js';
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Optional tag filters to pass to relays, reducing bandwidth by filtering
|
|
4
|
+
* server-side. Relays index single-letter tags only; a multi-letter tag
|
|
5
|
+
* filter such as #pmi is rejected, so filter those after the query.
|
|
6
|
+
*/
|
|
3
7
|
export interface SubscribeFilters {
|
|
4
8
|
'#t'?: string[];
|
|
5
|
-
'#pmi'?: string[];
|
|
6
9
|
}
|
|
7
10
|
/** Creates a Nostr relay subscriber that connects, subscribes to event kinds, and collects events within a timeout. */
|
|
8
11
|
export declare function createNostrSubscriber(ssrfAllowPrivate?: boolean): SearchDeps['subscribeEvents'];
|
|
@@ -43,8 +43,6 @@ export function createNostrSubscriber(ssrfAllowPrivate = false) {
|
|
|
43
43
|
const filter = { kinds };
|
|
44
44
|
if (filters?.['#t']?.length)
|
|
45
45
|
filter['#t'] = filters['#t'];
|
|
46
|
-
if (filters?.['#pmi']?.length)
|
|
47
|
-
filter['#pmi'] = filters['#pmi'];
|
|
48
46
|
const sub = relay.subscribe([filter], {
|
|
49
47
|
onevent: (event) => {
|
|
50
48
|
if (events.length < MAX_EVENTS && verifyEvent(event)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nostr-subscribe.js","sourceRoot":"","sources":["../../src/tools/nostr-subscribe.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpD,MAAM,UAAU,GAAG,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"nostr-subscribe.js","sourceRoot":"","sources":["../../src/tools/nostr-subscribe.ts"],"names":[],"mappings":"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"}
|
package/build/tools/pay.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ import type { WalletMethod, WalletProvider } from '../wallet/types.js';
|
|
|
4
4
|
import type { ResilientFetchOptions } from '../fetch/resilient-fetch.js';
|
|
5
5
|
import type { DecodedInvoice } from '../l402/bolt11.js';
|
|
6
6
|
import type { SpendTracker } from '../spend-tracker.js';
|
|
7
|
+
import type { PendingPayment } from '../store/pending-payments.js';
|
|
8
|
+
import type { ConfirmWithHuman } from './confirm.js';
|
|
7
9
|
export interface PayDeps {
|
|
8
10
|
cache: ChallengeCache;
|
|
9
11
|
resolveWallet: (method?: WalletMethod) => WalletProvider | undefined;
|
|
@@ -13,6 +15,13 @@ export interface PayDeps {
|
|
|
13
15
|
spendTracker: SpendTracker;
|
|
14
16
|
decodeBolt11: (invoice: string) => DecodedInvoice;
|
|
15
17
|
fetchFn: (url: string | URL, init?: RequestInit, options?: ResilientFetchOptions) => Promise<Response>;
|
|
18
|
+
/** Asks the human directly (MCP elicitation) to approve an invoice no challenge produced. */
|
|
19
|
+
confirmWithHuman: ConfirmWithHuman;
|
|
20
|
+
/** Ledger of unknown-outcome payments; any entry for a service pauses payment to it. */
|
|
21
|
+
pendingPayments: {
|
|
22
|
+
add(entry: PendingPayment): void;
|
|
23
|
+
unresolvedFor(origins: string[], pubkey?: string): PendingPayment[];
|
|
24
|
+
};
|
|
16
25
|
}
|
|
17
26
|
/** Pays a Lightning invoice using the configured wallet priority (NWC, Cashu, human). */
|
|
18
27
|
export declare function handlePay(args: {
|
package/build/tools/pay.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { safeErrorMessage } from './safe-error.js';
|
|
3
|
+
const RECONCILE_HINT = 'Call l402-reconcile with this paymentHash before paying this service again.';
|
|
3
4
|
/** Pays a Lightning invoice using the configured wallet priority (NWC, Cashu, human). */
|
|
4
5
|
export async function handlePay(args, deps) {
|
|
5
6
|
// Resolve invoice and macaroon from cache if paymentHash provided
|
|
@@ -8,9 +9,14 @@ export async function handlePay(args, deps) {
|
|
|
8
9
|
const paymentHash = args.paymentHash;
|
|
9
10
|
let cachedUrl;
|
|
10
11
|
let cachedPaymentUrl;
|
|
12
|
+
// True only when the invoice is one a server actually sent this process in
|
|
13
|
+
// a 402 challenge. Any other invoice is the agent's to supply, which is the
|
|
14
|
+
// prompt-injection route to the wallet, so it needs the human's approval.
|
|
15
|
+
let fromChallenge = false;
|
|
11
16
|
if (paymentHash) {
|
|
12
17
|
const cached = deps.cache.get(paymentHash);
|
|
13
18
|
if (cached) {
|
|
19
|
+
fromChallenge = args.invoice === undefined || args.invoice === cached.invoice;
|
|
14
20
|
invoice = invoice ?? cached.invoice;
|
|
15
21
|
macaroon = macaroon ?? cached.macaroon;
|
|
16
22
|
cachedUrl = cached.url;
|
|
@@ -67,18 +73,64 @@ export async function handlePay(args, deps) {
|
|
|
67
73
|
isError: true,
|
|
68
74
|
};
|
|
69
75
|
}
|
|
76
|
+
if (!fromChallenge && wallet.method !== 'human') {
|
|
77
|
+
const answer = await deps.confirmWithHuman(`An agent asks to pay a ${costSats} sat Lightning invoice that did not come from a payment challenge this server received. Approve only if you asked for this payment.`);
|
|
78
|
+
if (answer !== 'accepted') {
|
|
79
|
+
return {
|
|
80
|
+
content: [{
|
|
81
|
+
type: 'text',
|
|
82
|
+
text: JSON.stringify({
|
|
83
|
+
paid: false,
|
|
84
|
+
reason: answer === 'unsupported'
|
|
85
|
+
? 'l402-pay only pays invoices from payment challenges this server received (via l402-fetch or l402-discover, using their paymentHash). Paying any other invoice needs the human to approve it, and this client cannot ask them.'
|
|
86
|
+
: 'The human did not approve this payment.',
|
|
87
|
+
}),
|
|
88
|
+
}],
|
|
89
|
+
isError: true,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const origin = cachedUrl ? new URL(cachedUrl).origin : undefined;
|
|
94
|
+
const unresolved = origin ? deps.pendingPayments.unresolvedFor([origin]) : [];
|
|
95
|
+
if (unresolved.length > 0 && wallet.method !== 'human') {
|
|
96
|
+
return {
|
|
97
|
+
content: [{
|
|
98
|
+
type: 'text',
|
|
99
|
+
text: JSON.stringify({
|
|
100
|
+
paid: false,
|
|
101
|
+
paymentState: 'blocked',
|
|
102
|
+
unresolvedPayments: unresolved.map(p => p.paymentHash),
|
|
103
|
+
reason: `Payment to this service is paused: ${unresolved.length} earlier payment(s) to it have an unknown outcome. Call l402-reconcile with each paymentHash first.`,
|
|
104
|
+
}),
|
|
105
|
+
}],
|
|
106
|
+
isError: true,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const recordUnknown = (method) => {
|
|
110
|
+
if (!decoded.paymentHash)
|
|
111
|
+
return;
|
|
112
|
+
deps.pendingPayments.add({
|
|
113
|
+
paymentHash: decoded.paymentHash,
|
|
114
|
+
origins: origin ? [origin] : [],
|
|
115
|
+
invoice,
|
|
116
|
+
costSats,
|
|
117
|
+
protocol: 'l402',
|
|
118
|
+
method,
|
|
119
|
+
macaroon,
|
|
120
|
+
createdAt: new Date().toISOString(),
|
|
121
|
+
});
|
|
122
|
+
};
|
|
70
123
|
// Atomic spend-limit check before payment
|
|
71
124
|
if (!deps.spendTracker.tryRecord(costSats, deps.maxSpendPerMinuteSats)) {
|
|
72
125
|
return {
|
|
73
126
|
content: [{
|
|
74
127
|
type: 'text',
|
|
75
|
-
text: JSON.stringify({ paid: false, reason: '
|
|
128
|
+
text: JSON.stringify({ paid: false, reason: deps.spendTracker.refusal(costSats, deps.maxSpendPerMinuteSats) ?? 'Spend limit reached.' }),
|
|
76
129
|
}],
|
|
77
130
|
isError: true,
|
|
78
131
|
};
|
|
79
132
|
}
|
|
80
133
|
try {
|
|
81
|
-
const origin = cachedUrl ? new URL(cachedUrl).origin : undefined;
|
|
82
134
|
// If we have a payment page URL (toll-booth), poll it directly for settlement.
|
|
83
135
|
// This avoids the human wallet's long timeout — the user already paid via the page.
|
|
84
136
|
if (cachedPaymentUrl && wallet.method === 'human') {
|
|
@@ -129,7 +181,7 @@ export async function handlePay(args, deps) {
|
|
|
129
181
|
text: JSON.stringify({
|
|
130
182
|
paid: false,
|
|
131
183
|
paymentState: 'unknown',
|
|
132
|
-
reason: 'Payment not confirmed after 120s. It may still have settled
|
|
184
|
+
reason: 'Payment not confirmed after 120s. It may still have settled: call l402-pay again with the same paymentHash to keep checking. If you selected a different tier on the payment page, store the L402 token it shows with l402-store-token.',
|
|
133
185
|
paymentUrl: cachedPaymentUrl,
|
|
134
186
|
}),
|
|
135
187
|
}],
|
|
@@ -141,6 +193,9 @@ export async function handlePay(args, deps) {
|
|
|
141
193
|
if (!result.paid && result.outcome !== 'unknown') {
|
|
142
194
|
deps.spendTracker.unrecord(costSats);
|
|
143
195
|
}
|
|
196
|
+
if (result.outcome === 'unknown' || (result.paid && !result.preimage)) {
|
|
197
|
+
recordUnknown(result.method);
|
|
198
|
+
}
|
|
144
199
|
if (result.paid && !result.preimage) {
|
|
145
200
|
return {
|
|
146
201
|
content: [{
|
|
@@ -150,7 +205,7 @@ export async function handlePay(args, deps) {
|
|
|
150
205
|
paymentState: 'unknown',
|
|
151
206
|
credentialsStored: false,
|
|
152
207
|
method: result.method,
|
|
153
|
-
reason:
|
|
208
|
+
reason: `The wallet reported payment without a settlement preimage. ${RECONCILE_HINT}`,
|
|
154
209
|
}, null, 2),
|
|
155
210
|
}],
|
|
156
211
|
isError: true,
|
|
@@ -181,13 +236,15 @@ export async function handlePay(args, deps) {
|
|
|
181
236
|
};
|
|
182
237
|
}
|
|
183
238
|
catch (err) {
|
|
239
|
+
recordUnknown(wallet.method);
|
|
184
240
|
return {
|
|
185
241
|
content: [{
|
|
186
242
|
type: 'text',
|
|
187
243
|
text: JSON.stringify({
|
|
188
244
|
error: safeErrorMessage(err),
|
|
189
245
|
paymentState: 'unknown',
|
|
190
|
-
|
|
246
|
+
paymentHash: decoded.paymentHash,
|
|
247
|
+
message: `The payment attempt threw after budget reservation. ${RECONCILE_HINT}`,
|
|
191
248
|
}),
|
|
192
249
|
}],
|
|
193
250
|
isError: true,
|
|
@@ -197,12 +254,12 @@ export async function handlePay(args, deps) {
|
|
|
197
254
|
/** Registers the l402-pay tool with the MCP server. */
|
|
198
255
|
export function registerPayTool(server, deps) {
|
|
199
256
|
server.registerTool('l402-pay', {
|
|
200
|
-
description: '
|
|
257
|
+
description: 'Pay a challenge that l402-fetch or l402-discover returned, by its paymentHash, and store the credential so the next l402-fetch succeeds. For human wallets, polls the payment page for settlement for up to 120s; call it straight after showing the payment URL to the user. An invoice that did not come from such a challenge is paid only if the human approves it in the client.',
|
|
201
258
|
annotations: { destructiveHint: true, openWorldHint: true },
|
|
202
259
|
inputSchema: {
|
|
203
|
-
invoice: z.string().max(20_000).optional().describe('BOLT-11 invoice
|
|
260
|
+
invoice: z.string().max(20_000).optional().describe('BOLT-11 invoice. Leave out when paying a challenge by paymentHash; any other invoice needs the human to approve it.'),
|
|
204
261
|
macaroon: z.string().max(10_000).optional().describe('Macaroon from the L402 challenge. Optional if paymentHash matches a cached challenge.'),
|
|
205
|
-
paymentHash: z.string().max(128).optional().describe('Payment hash
|
|
262
|
+
paymentHash: z.string().max(128).optional().describe('Payment hash of a challenge from l402-fetch or l402-discover.'),
|
|
206
263
|
method: z.enum(['nwc', 'cashu', 'lnurlcash', 'human']).optional().describe('Payment method override. Defaults to wallet priority: NWC > Cashu > LNURLcash > human.'),
|
|
207
264
|
},
|
|
208
265
|
}, async (args) => handlePay(args, deps));
|
package/build/tools/pay.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pay.js","sourceRoot":"","sources":["../../src/tools/pay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"pay.js","sourceRoot":"","sources":["../../src/tools/pay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AASvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAElD,MAAM,cAAc,GAAG,6EAA6E,CAAA;AAoBpG,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAKC,EACD,IAAa;IAEb,kEAAkE;IAClE,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;IAC1B,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;IAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;IACpC,IAAI,SAA6B,CAAA;IAEjC,IAAI,gBAAoC,CAAA;IACxC,2EAA2E;IAC3E,4EAA4E;IAC5E,0EAA0E;IAC1E,IAAI,aAAa,GAAG,KAAK,CAAA;IAEzB,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAC1C,IAAI,MAAM,EAAE,CAAC;YACX,aAAa,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAA;YAC7E,OAAO,GAAG,OAAO,IAAI,MAAM,CAAC,OAAO,CAAA;YACnC,QAAQ,GAAG,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAA;YACtC,SAAS,GAAG,MAAM,CAAC,GAAG,CAAA;YACtB,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAA;QACtC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,0DAA0D,EAAE,CAAC;iBAC1G,CAAC;YACF,OAAO,EAAE,IAAa;SACvB,CAAA;IACH,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,2DAA2D,EAAE,CAAC;iBAC3G,CAAC;YACF,OAAO,EAAE,IAAa;SACvB,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,sDAAsD,EAAE,CAAC;iBACtG,CAAC;YACF,OAAO,EAAE,IAAa;SACvB,CAAA;IACH,CAAC;IAED,4EAA4E;IAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IAEjC,gFAAgF;IAChF,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,sHAAsH,EAAE,CAAC;iBACtK,CAAC;YACF,OAAO,EAAE,IAAa;SACvB,CAAA;IACH,CAAC;IAED,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACnC,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,QAAQ,kCAAkC,IAAI,CAAC,cAAc,QAAQ,EAAE,CAAC;iBACtI,CAAC;YACF,OAAO,EAAE,IAAa;SACvB,CAAA;IACH,CAAC;IAED,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CACxC,0BAA0B,QAAQ,qIAAqI,CACxK,CAAA;QACD,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1B,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,IAAI,EAAE,KAAK;4BACX,MAAM,EAAE,MAAM,KAAK,aAAa;gCAC9B,CAAC,CAAC,+NAA+N;gCACjO,CAAC,CAAC,yCAAyC;yBAC9C,CAAC;qBACH,CAAC;gBACF,OAAO,EAAE,IAAa;aACvB,CAAA;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;IAChE,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC7E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QACvD,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,IAAI,EAAE,KAAK;wBACX,YAAY,EAAE,SAAS;wBACvB,kBAAkB,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;wBACtD,MAAM,EAAE,sCAAsC,UAAU,CAAC,MAAM,qGAAqG;qBACrK,CAAC;iBACH,CAAC;YACF,OAAO,EAAE,IAAa;SACvB,CAAA;IACH,CAAC;IAED,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,EAAE;QACvC,IAAI,CAAC,OAAO,CAAC,WAAW;YAAE,OAAM;QAChC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YACvB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YAC/B,OAAO;YACP,QAAQ;YACR,QAAQ,EAAE,MAAM;YAChB,MAAM;YACN,QAAQ;YACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,0CAA0C;IAC1C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,sBAAsB,EAAE,CAAC;iBACzI,CAAC;YACF,OAAO,EAAE,IAAa;SACvB,CAAA;IACH,CAAC;IAED,IAAI,CAAC;QACH,+EAA+E;QAC/E,oFAAoF;QACpF,IAAI,gBAAgB,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAA,CAAC,uDAAuD;YAC7F,IAAI,UAAU,GAAG,IAAI,CAAA;YAErB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;gBAC7B,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;wBAC/C,OAAO,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE;qBAC1C,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;oBAElB,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;wBACX,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA6B,CAAA;wBACxD,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;4BACvB,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;4BAC9E,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAA;4BACzF,MAAM,MAAM,GAAG,QAAQ,IAAI,WAAW,CAAA;4BAEtC,IAAI,iBAAiB,GAAG,KAAK,CAAA;4BAC7B,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;gCACrB,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,IAAI,EAAE,EAAE,YAAY,CAAC,CAAA;4BACrG,CAAC;4BAED,IAAI,WAAW;gCAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;4BAE/C,OAAO;gCACL,OAAO,EAAE,CAAC;wCACR,IAAI,EAAE,MAAe;wCACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4CACnB,IAAI,EAAE,IAAI;4CACV,iBAAiB;4CACjB,MAAM,EAAE,OAAO;yCAChB,EAAE,IAAI,EAAE,CAAC,CAAC;qCACZ,CAAC;6BACH,CAAA;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,sBAAsB;gBACxB,CAAC;gBAED,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;gBACvC,IAAI,SAAS,IAAI,CAAC;oBAAE,MAAK;gBACzB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;gBAClF,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,IAAI,CAAC,CAAA;YAC/C,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,IAAI,EAAE,KAAK;4BACX,YAAY,EAAE,SAAS;4BACvB,MAAM,EAAE,yOAAyO;4BACjP,UAAU,EAAE,gBAAgB;yBAC7B,CAAC;qBACH,CAAC;gBACF,OAAO,EAAE,IAAa;aACvB,CAAA;QACH,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAA;QAEzE,sDAAsD;QACtD,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACjD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACtC,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC9B,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpC,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,IAAI,EAAE,KAAK;4BACX,YAAY,EAAE,SAAS;4BACvB,iBAAiB,EAAE,KAAK;4BACxB,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,MAAM,EAAE,8DAA8D,cAAc,EAAE;yBACvF,EAAE,IAAI,EAAE,CAAC,CAAC;qBACZ,CAAC;gBACF,OAAO,EAAE,IAAa;aACvB,CAAA;QACH,CAAC;QAED,IAAI,iBAAiB,GAAG,KAAK,CAAA;QAC7B,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;YAC9D,IAAI,WAAW,EAAE,CAAC;gBAChB,iBAAiB,GAAG,IAAI,CAAC,eAAe,CACtC,WAAW,EACX,QAAQ,EACR,MAAM,CAAC,QAAQ,EACf,WAAW,IAAI,EAAE,EACjB,IAAI,CACL,CAAA;YACH,CAAC;YAED,oBAAoB;YACpB,IAAI,WAAW;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QACjD,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,YAAY,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;wBACjE,iBAAiB;wBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACpD,EAAE,IAAI,EAAE,CAAC,CAAC;iBACZ,CAAC;YACF,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpE,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC5B,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC;wBAC5B,YAAY,EAAE,SAAS;wBACvB,WAAW,EAAE,OAAO,CAAC,WAAW;wBAChC,OAAO,EAAE,uDAAuD,cAAc,EAAE;qBACjF,CAAC;iBACH,CAAC;YACF,OAAO,EAAE,IAAa;SACvB,CAAA;IACH,CAAC;AACH,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,IAAa;IAC9D,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,WAAW,EAAE,uXAAuX;QACpY,WAAW,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;QAC3D,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qHAAqH,CAAC;YAC1K,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uFAAuF,CAAC;YAC7I,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;YACrH,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wFAAwF,CAAC;SACrK;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CACtC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { PendingPayment } from '../store/pending-payments.js';
|
|
3
|
+
import type { PaymentLookup } from '../wallet/types.js';
|
|
4
|
+
import type { ConfirmWithHuman } from './confirm.js';
|
|
5
|
+
export interface ReconcileDeps {
|
|
6
|
+
pendingPayments: {
|
|
7
|
+
get(paymentHash: string): PendingPayment | undefined;
|
|
8
|
+
remove(paymentHash: string): boolean;
|
|
9
|
+
list(): PendingPayment[];
|
|
10
|
+
};
|
|
11
|
+
/** Asks the wallet that attempted the payment what became of it. */
|
|
12
|
+
lookupPayment: (entry: PendingPayment) => Promise<PaymentLookup>;
|
|
13
|
+
storeCredential: (origin: string, macaroon: string, preimage: string, paymentHash: string, server: 'toll-booth' | null) => boolean;
|
|
14
|
+
confirmWithHuman: ConfirmWithHuman;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Resolves a payment whose outcome was unknown. Settled (with a preimage that
|
|
18
|
+
* hashes to the payment hash) or definitely failed clears it and lifts the
|
|
19
|
+
* auto-pay block on its service; anything else leaves it in place.
|
|
20
|
+
*/
|
|
21
|
+
export declare function handleReconcile(args: {
|
|
22
|
+
paymentHash?: string;
|
|
23
|
+
preimage?: string;
|
|
24
|
+
abandon?: boolean;
|
|
25
|
+
}, deps: ReconcileDeps): Promise<{
|
|
26
|
+
isError?: true | undefined;
|
|
27
|
+
content: {
|
|
28
|
+
type: "text";
|
|
29
|
+
text: string;
|
|
30
|
+
}[];
|
|
31
|
+
}>;
|
|
32
|
+
/** Registers the l402-reconcile tool with the MCP server. */
|
|
33
|
+
export declare function registerReconcileTool(server: McpServer, deps: ReconcileDeps): void;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { verifyPreimage } from 'farrier-kit';
|
|
3
|
+
import { safeErrorMessage } from './safe-error.js';
|
|
4
|
+
function summary(p) {
|
|
5
|
+
return { paymentHash: p.paymentHash, origins: p.origins, costSats: p.costSats, protocol: p.protocol, method: p.method, createdAt: p.createdAt };
|
|
6
|
+
}
|
|
7
|
+
function reply(body, isError = false) {
|
|
8
|
+
return {
|
|
9
|
+
content: [{ type: 'text', text: JSON.stringify(body, null, 2) }],
|
|
10
|
+
...(isError ? { isError: true } : {}),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Resolves a payment whose outcome was unknown. Settled (with a preimage that
|
|
15
|
+
* hashes to the payment hash) or definitely failed clears it and lifts the
|
|
16
|
+
* auto-pay block on its service; anything else leaves it in place.
|
|
17
|
+
*/
|
|
18
|
+
export async function handleReconcile(args, deps) {
|
|
19
|
+
try {
|
|
20
|
+
if (!args.paymentHash) {
|
|
21
|
+
const pending = deps.pendingPayments.list().map(summary);
|
|
22
|
+
return reply({
|
|
23
|
+
unresolved: pending,
|
|
24
|
+
message: pending.length === 0
|
|
25
|
+
? 'No payments have an unknown outcome.'
|
|
26
|
+
: 'Call l402-reconcile with each paymentHash to resolve it. Auto-pay to these services is paused until then.',
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
const paymentHash = args.paymentHash.toLowerCase();
|
|
30
|
+
const entry = deps.pendingPayments.get(paymentHash);
|
|
31
|
+
if (!entry) {
|
|
32
|
+
return reply({ paymentHash, resolved: false, message: 'No unresolved payment has this payment hash.' }, true);
|
|
33
|
+
}
|
|
34
|
+
let lookup;
|
|
35
|
+
if (args.preimage !== undefined) {
|
|
36
|
+
if (!verifyPreimage(args.preimage, paymentHash)) {
|
|
37
|
+
return reply({ paymentHash, resolved: false, message: 'That preimage does not hash to this payment hash.' }, true);
|
|
38
|
+
}
|
|
39
|
+
lookup = { state: 'settled', preimage: args.preimage.toLowerCase() };
|
|
40
|
+
}
|
|
41
|
+
else if (args.abandon) {
|
|
42
|
+
const answer = await deps.confirmWithHuman(`Stop tracking the ${entry.costSats ?? 'unknown'} sat payment to ${entry.origins.join(', ') || 'an unknown service'} (hash ${paymentHash.slice(0, 12)}…)? ` +
|
|
43
|
+
'Only approve once you have checked your wallet and this payment did not go out: auto-pay to this service resumes.');
|
|
44
|
+
if (answer !== 'accepted') {
|
|
45
|
+
return reply({
|
|
46
|
+
paymentHash,
|
|
47
|
+
resolved: false,
|
|
48
|
+
message: answer === 'unsupported'
|
|
49
|
+
? 'Abandoning an unresolved payment needs the human to approve it, and this client cannot ask them. Resolve it with a preimage, or wait for the wallet to report it.'
|
|
50
|
+
: 'The human did not approve abandoning this payment.',
|
|
51
|
+
}, true);
|
|
52
|
+
}
|
|
53
|
+
deps.pendingPayments.remove(paymentHash);
|
|
54
|
+
return reply({ paymentHash, resolved: true, state: 'abandoned', message: 'No longer tracked. Auto-pay to this service is allowed again.' });
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
lookup = await deps.lookupPayment(entry);
|
|
58
|
+
}
|
|
59
|
+
if (lookup.state === 'settled') {
|
|
60
|
+
// A wallet's report is checked here too: only a matching preimage clears it.
|
|
61
|
+
if (!verifyPreimage(lookup.preimage, paymentHash)) {
|
|
62
|
+
return reply({ paymentHash, resolved: false, state: 'pending', message: 'The wallet returned a preimage that does not match this payment.' }, true);
|
|
63
|
+
}
|
|
64
|
+
let credentialsStored = false;
|
|
65
|
+
if (entry.protocol === 'l402' && entry.macaroon && entry.origins[0]) {
|
|
66
|
+
credentialsStored = deps.storeCredential(entry.origins[0], entry.macaroon, lookup.preimage, paymentHash, null);
|
|
67
|
+
}
|
|
68
|
+
deps.pendingPayments.remove(paymentHash);
|
|
69
|
+
return reply({
|
|
70
|
+
paymentHash,
|
|
71
|
+
resolved: true,
|
|
72
|
+
state: 'settled',
|
|
73
|
+
credentialsStored,
|
|
74
|
+
message: credentialsStored
|
|
75
|
+
? 'The payment settled and its credential is stored; l402-fetch will use it.'
|
|
76
|
+
: 'The payment settled. Auto-pay to this service is allowed again.',
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
if (lookup.state === 'failed') {
|
|
80
|
+
deps.pendingPayments.remove(paymentHash);
|
|
81
|
+
return reply({
|
|
82
|
+
paymentHash,
|
|
83
|
+
resolved: true,
|
|
84
|
+
state: 'failed',
|
|
85
|
+
message: `${lookup.reason ?? 'The payment failed.'} No money moved, and auto-pay to this service is allowed again.`,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return reply({
|
|
89
|
+
paymentHash,
|
|
90
|
+
resolved: false,
|
|
91
|
+
state: 'pending',
|
|
92
|
+
message: `${lookup.reason ?? 'The outcome is still unknown.'} Auto-pay to this service stays paused.`,
|
|
93
|
+
}, true);
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
return reply({ error: safeErrorMessage(err) }, true);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/** Registers the l402-reconcile tool with the MCP server. */
|
|
100
|
+
export function registerReconcileTool(server, deps) {
|
|
101
|
+
server.registerTool('l402-reconcile', {
|
|
102
|
+
description: 'Resolve a payment whose outcome is unknown. While one is unresolved, auto-pay to that service is paused. Call with no arguments to list them, or with a paymentHash to ask the wallet (NWC lookup_invoice, or the Cashu mint for a reserved melt). A settled payment stores its credential when it can; a failed one is cleared. A preimage that hashes to the payment hash also settles it. abandon: true asks the human to confirm that the payment did not go out.',
|
|
103
|
+
annotations: { destructiveHint: false, openWorldHint: true },
|
|
104
|
+
inputSchema: {
|
|
105
|
+
paymentHash: z.string().regex(/^[0-9a-fA-F]{64}$/).optional().describe('Payment hash from an unknown-outcome payment. Omit to list unresolved payments.'),
|
|
106
|
+
preimage: z.string().regex(/^[0-9a-fA-F]{64}$/).optional().describe('Settlement preimage, if the human has one from their wallet'),
|
|
107
|
+
abandon: z.boolean().optional().describe('Stop tracking the payment. Requires the human to approve through the client.'),
|
|
108
|
+
},
|
|
109
|
+
}, async (args) => handleReconcile(args, deps));
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=reconcile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/tools/reconcile.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,7 +49,7 @@ export async function handleRedeemCashu(args, deps) {
|
|
|
49
49
|
return {
|
|
50
50
|
content: [{
|
|
51
51
|
type: 'text',
|
|
52
|
-
text: JSON.stringify({ error: '
|
|
52
|
+
text: JSON.stringify({ error: deps.spendTracker.refusal(tokenSats, deps.maxSpendPerMinuteSats) ?? 'Spend limit reached.' }),
|
|
53
53
|
}],
|
|
54
54
|
isError: true,
|
|
55
55
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redeem-cashu.js","sourceRoot":"","sources":["../../src/tools/redeem-cashu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAElD,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACxC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;IACvC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;CAClC,CAAC,CAAA;AAEF,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACxC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAA;AAYF,wGAAwG;AACxG,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAoC,EACpC,IAAqB;IAErB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAA;IAEvC,+DAA+D;IAC/D,IAAI,SAAiB,CAAA;IACrB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5C,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC;iBAChE,CAAC;YACF,OAAO,EAAE,IAAa;SACvB,CAAA;IACH,CAAC;IAED,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;iBAC5D,CAAC;YACF,OAAO,EAAE,IAAa;SACvB,CAAA;IACH,CAAC;IAED,IAAI,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACpC,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,gBAAgB,SAAS,qCAAqC,IAAI,CAAC,cAAc,+CAA+C,EAAE,CAAC;iBAClK,CAAC;YACF,OAAO,EAAE,IAAa;SACvB,CAAA;IACH,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACxE,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"redeem-cashu.js","sourceRoot":"","sources":["../../src/tools/redeem-cashu.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ export function registerWidgets(server) {
|
|
|
9
9
|
// ── Payment Confirmation ──────────────────────────────────────────
|
|
10
10
|
// Paired with l402-fetch-preview: the widget renders a confirm/cancel
|
|
11
11
|
// dialog driven by the preview result.
|
|
12
|
-
registerAppResource(server, 'Payment Confirmation', 'ui://402-mcp/payment-confirmation.html', { description: 'Payment confirmation dialog for L402/x402/xcashu services' },
|
|
12
|
+
registerAppResource(server, 'Payment Confirmation', 'ui://402-mcp/payment-confirmation.html', { description: 'Payment confirmation dialog for L402/x402/xcashu services' }, () => ({
|
|
13
13
|
contents: [{
|
|
14
14
|
uri: 'ui://402-mcp/payment-confirmation.html',
|
|
15
15
|
mimeType: RESOURCE_MIME_TYPE,
|
|
@@ -28,7 +28,7 @@ export function registerWidgets(server) {
|
|
|
28
28
|
_meta: {
|
|
29
29
|
ui: { resourceUri: 'ui://402-mcp/service-directory.html' },
|
|
30
30
|
},
|
|
31
|
-
},
|
|
31
|
+
}, () => ({
|
|
32
32
|
content: [{
|
|
33
33
|
type: 'text',
|
|
34
34
|
text: JSON.stringify({
|
|
@@ -37,7 +37,7 @@ export function registerWidgets(server) {
|
|
|
37
37
|
}),
|
|
38
38
|
}],
|
|
39
39
|
}));
|
|
40
|
-
registerAppResource(server, 'Service Directory', 'ui://402-mcp/service-directory.html', { description: 'Searchable directory of paid API services' },
|
|
40
|
+
registerAppResource(server, 'Service Directory', 'ui://402-mcp/service-directory.html', { description: 'Searchable directory of paid API services' }, () => ({
|
|
41
41
|
contents: [{
|
|
42
42
|
uri: 'ui://402-mcp/service-directory.html',
|
|
43
43
|
mimeType: RESOURCE_MIME_TYPE,
|
|
@@ -54,7 +54,7 @@ export function registerWidgets(server) {
|
|
|
54
54
|
_meta: {
|
|
55
55
|
ui: { resourceUri: 'ui://402-mcp/wallet-dashboard.html' },
|
|
56
56
|
},
|
|
57
|
-
},
|
|
57
|
+
}, () => ({
|
|
58
58
|
content: [{
|
|
59
59
|
type: 'text',
|
|
60
60
|
text: JSON.stringify({
|
|
@@ -63,7 +63,7 @@ export function registerWidgets(server) {
|
|
|
63
63
|
}),
|
|
64
64
|
}],
|
|
65
65
|
}));
|
|
66
|
-
registerAppResource(server, 'Wallet Dashboard', 'ui://402-mcp/wallet-dashboard.html', { description: 'Wallet status dashboard with credentials and balances' },
|
|
66
|
+
registerAppResource(server, 'Wallet Dashboard', 'ui://402-mcp/wallet-dashboard.html', { description: 'Wallet status dashboard with credentials and balances' }, () => ({
|
|
67
67
|
contents: [{
|
|
68
68
|
uri: 'ui://402-mcp/wallet-dashboard.html',
|
|
69
69
|
mimeType: RESOURCE_MIME_TYPE,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-widgets.js","sourceRoot":"","sources":["../../src/tools/register-widgets.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,qBAAqB,CAAA;AAE5B;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,qEAAqE;IACrE,sEAAsE;IACtE,uCAAuC;IAEvC,mBAAmB,CACjB,MAAM,EACN,sBAAsB,EACtB,wCAAwC,EACxC,EAAE,WAAW,EAAE,2DAA2D,EAAE,EAC5E,
|
|
1
|
+
{"version":3,"file":"register-widgets.js","sourceRoot":"","sources":["../../src/tools/register-widgets.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,qBAAqB,CAAA;AAE5B;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,qEAAqE;IACrE,sEAAsE;IACtE,uCAAuC;IAEvC,mBAAmB,CACjB,MAAM,EACN,sBAAsB,EACtB,wCAAwC,EACxC,EAAE,WAAW,EAAE,2DAA2D,EAAE,EAC5E,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ,EAAE,CAAC;gBACT,GAAG,EAAE,wCAAwC;gBAC7C,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,uBAAuB;aAC9B,CAAC;KACH,CAAC,CACH,CAAA;IAED,0EAA0E;IAC1E,6EAA6E;IAE7E,qEAAqE;IACrE,iEAAiE;IAEjE,eAAe,CACb,MAAM,EACN,wBAAwB,EACxB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,8IAA8I;QAC3J,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;QACxD,WAAW,EAAE,EAAE;QACf,KAAK,EAAE;YACL,EAAE,EAAE,EAAE,WAAW,EAAE,qCAAqC,EAAE;SAC3D;KACF,EACD,GAAG,EAAE,CAAC,CAAC;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,UAAU,EAAE,mBAAmB;oBAC/B,OAAO,EAAE,0EAA0E;iBACpF,CAAC;aACH,CAAC;KACH,CAAC,CACH,CAAA;IAED,mBAAmB,CACjB,MAAM,EACN,mBAAmB,EACnB,qCAAqC,EACrC,EAAE,WAAW,EAAE,2CAA2C,EAAE,EAC5D,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ,EAAE,CAAC;gBACT,GAAG,EAAE,qCAAqC;gBAC1C,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,oBAAoB;aAC3B,CAAC;KACH,CAAC,CACH,CAAA;IAED,qEAAqE;IACrE,uEAAuE;IAEvE,eAAe,CACb,MAAM,EACN,uBAAuB,EACvB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,kKAAkK;QAC/K,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,WAAW,EAAE,EAAE;QACf,KAAK,EAAE;YACL,EAAE,EAAE,EAAE,WAAW,EAAE,oCAAoC,EAAE;SAC1D;KACF,EACD,GAAG,EAAE,CAAC,CAAC;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,UAAU,EAAE,kBAAkB;oBAC9B,OAAO,EAAE,2FAA2F;iBACrG,CAAC;aACH,CAAC;KACH,CAAC,CACH,CAAA;IAED,mBAAmB,CACjB,MAAM,EACN,kBAAkB,EAClB,oCAAoC,EACpC,EAAE,WAAW,EAAE,uDAAuD,EAAE,EACxE,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ,EAAE,CAAC;gBACT,GAAG,EAAE,oCAAoC;gBACzC,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,mBAAmB;aAC1B,CAAC;KACH,CAAC,CACH,CAAA;AACH,CAAC"}
|
package/build/tools/search.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { safeErrorMessage } from './safe-error.js';
|
|
3
|
+
import { untrusted } from './untrusted.js';
|
|
3
4
|
const DEFAULT_RELAYS = [
|
|
4
5
|
'wss://relay.damus.io',
|
|
5
6
|
'wss://relay.primal.net',
|
|
@@ -59,12 +60,12 @@ export async function handleSearch(args, deps) {
|
|
|
59
60
|
const timeout = args.timeout ?? 5000;
|
|
60
61
|
const maxResults = args.maxResults ?? 20;
|
|
61
62
|
const queryLower = args.query.toLowerCase();
|
|
62
|
-
//
|
|
63
|
+
// Relays index single-letter tags only, so topics (#t) filter at the relay.
|
|
64
|
+
// Public relays reject a #pmi filter outright ("unindexed tag filter"), so
|
|
65
|
+
// payment methods are matched here instead.
|
|
63
66
|
const relayFilters = {};
|
|
64
67
|
if (args.topics?.length)
|
|
65
68
|
relayFilters['#t'] = args.topics;
|
|
66
|
-
if (args.paymentMethod)
|
|
67
|
-
relayFilters['#pmi'] = [args.paymentMethod];
|
|
68
69
|
const rawEvents = await deps.subscribeEvents(relays, [KIND_L402_ANNOUNCE], timeout, relayFilters);
|
|
69
70
|
// NIP-33 dedup: keep only the newest event per pubkey + d tag
|
|
70
71
|
const replaceableMap = new Map();
|
|
@@ -77,6 +78,10 @@ export async function handleSearch(args, deps) {
|
|
|
77
78
|
}
|
|
78
79
|
}
|
|
79
80
|
let services = [...replaceableMap.values()].map(parseAnnounceEvent);
|
|
81
|
+
if (args.paymentMethod) {
|
|
82
|
+
const method = args.paymentMethod.toLowerCase();
|
|
83
|
+
services = services.filter(svc => svc.paymentMethods.some(pm => pm.toLowerCase() === method));
|
|
84
|
+
}
|
|
80
85
|
// Filter by query text — relays cannot do substring search so this remains client-side
|
|
81
86
|
if (queryLower) {
|
|
82
87
|
services = services.filter(svc => {
|
|
@@ -89,8 +94,21 @@ export async function handleSearch(args, deps) {
|
|
|
89
94
|
return searchable.includes(queryLower);
|
|
90
95
|
});
|
|
91
96
|
}
|
|
92
|
-
// Limit results
|
|
93
|
-
|
|
97
|
+
// Limit results. Announcement text is written by whoever signed the
|
|
98
|
+
// event, so its free-text fields are delimited as untrusted.
|
|
99
|
+
const results = services.slice(0, maxResults).map(svc => {
|
|
100
|
+
const source = `Nostr announcement by ${svc.pubkey.slice(0, 16)}`;
|
|
101
|
+
return {
|
|
102
|
+
...svc,
|
|
103
|
+
name: svc.name === undefined ? undefined : untrusted(svc.name, source),
|
|
104
|
+
about: svc.about === undefined ? undefined : untrusted(svc.about, source),
|
|
105
|
+
capabilities: svc.capabilities.map(c => ({
|
|
106
|
+
...c,
|
|
107
|
+
name: untrusted(c.name, source),
|
|
108
|
+
description: untrusted(c.description, source),
|
|
109
|
+
})),
|
|
110
|
+
};
|
|
111
|
+
});
|
|
94
112
|
return {
|
|
95
113
|
content: [{ type: 'text', text: JSON.stringify(results, null, 2) }],
|
|
96
114
|
};
|
|
@@ -108,13 +126,13 @@ export async function handleSearch(args, deps) {
|
|
|
108
126
|
/** Registers the l402-search tool with the MCP server. */
|
|
109
127
|
export function registerSearchTool(server, deps) {
|
|
110
128
|
server.registerTool('l402-search', {
|
|
111
|
-
description: 'Search for paid
|
|
129
|
+
description: 'Search Nostr relays for paid API announcements (kind 31402) and return their URLs, pricing and capabilities. Topic filters are sent to the relays; the payment method and query text are matched locally. Announcement text is written by whoever published it and is marked as untrusted content.',
|
|
112
130
|
annotations: { readOnlyHint: true, openWorldHint: true },
|
|
113
131
|
inputSchema: {
|
|
114
132
|
query: z.string().max(200).describe('Search query to match against service names, descriptions, and capabilities'),
|
|
115
133
|
relays: z.array(z.url()).max(10).optional().describe('Nostr relay URLs to query (defaults to popular public relays)'),
|
|
116
134
|
topics: z.array(z.string().max(50)).max(10).optional().describe('Filter by topic tags (e.g. ["ai", "data"])'),
|
|
117
|
-
paymentMethod: z.string().max(100).optional().describe('Filter by payment
|
|
135
|
+
paymentMethod: z.string().max(100).optional().describe('Filter by payment rail, the first value of an announcement\'s pmi tag (e.g. "l402", "cashu", "xcashu", "lnurlcash", "x402", "payment"). A Cashu service may list "cashu", "xcashu" or both'),
|
|
118
136
|
maxResults: z.int().min(1).max(100).optional().describe('Maximum number of results to return (default 20)'),
|
|
119
137
|
timeout: z.int().min(1000).max(30000).optional().describe('Relay subscription timeout in milliseconds (default 5000)'),
|
|
120
138
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
|