@mcpaid/sdk 2.0.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.
- package/LICENSE +176 -0
- package/NPM_RESTRUCTURE.md +86 -0
- package/OPERATOR-LICENSE.md +18 -0
- package/README.md +380 -0
- package/SELF-HOSTING.md +108 -0
- package/dist/circuit-breaker/circuit-breaker.d.ts +26 -0
- package/dist/circuit-breaker/circuit-breaker.d.ts.map +1 -0
- package/dist/circuit-breaker/circuit-breaker.js +128 -0
- package/dist/circuit-breaker/circuit-breaker.js.map +1 -0
- package/dist/cli.d.ts +21 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1560 -0
- package/dist/cli.js.map +1 -0
- package/dist/contracts/ToolPayRouter.d.ts +288 -0
- package/dist/contracts/ToolPayRouter.d.ts.map +1 -0
- package/dist/contracts/ToolPayRouter.js +370 -0
- package/dist/contracts/ToolPayRouter.js.map +1 -0
- package/dist/contracts/router-registry.d.ts +19 -0
- package/dist/contracts/router-registry.d.ts.map +1 -0
- package/dist/contracts/router-registry.js +28 -0
- package/dist/contracts/router-registry.js.map +1 -0
- package/dist/fee/fee-calculator.d.ts +35 -0
- package/dist/fee/fee-calculator.d.ts.map +1 -0
- package/dist/fee/fee-calculator.js +57 -0
- package/dist/fee/fee-calculator.js.map +1 -0
- package/dist/fee/fee-ledger.d.ts +66 -0
- package/dist/fee/fee-ledger.d.ts.map +1 -0
- package/dist/fee/fee-ledger.js +181 -0
- package/dist/fee/fee-ledger.js.map +1 -0
- package/dist/gateway/config-loader.d.ts +38 -0
- package/dist/gateway/config-loader.d.ts.map +1 -0
- package/dist/gateway/config-loader.js +125 -0
- package/dist/gateway/config-loader.js.map +1 -0
- package/dist/gateway/server-registry.d.ts +25 -0
- package/dist/gateway/server-registry.d.ts.map +1 -0
- package/dist/gateway/server-registry.js +59 -0
- package/dist/gateway/server-registry.js.map +1 -0
- package/dist/gateway/toolpay-gateway.d.ts +57 -0
- package/dist/gateway/toolpay-gateway.d.ts.map +1 -0
- package/dist/gateway/toolpay-gateway.js +320 -0
- package/dist/gateway/toolpay-gateway.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/sdk/client-agent.d.ts +47 -0
- package/dist/sdk/client-agent.d.ts.map +1 -0
- package/dist/sdk/client-agent.js +158 -0
- package/dist/sdk/client-agent.js.map +1 -0
- package/dist/sdk/server-sdk.d.ts +51 -0
- package/dist/sdk/server-sdk.d.ts.map +1 -0
- package/dist/sdk/server-sdk.js +170 -0
- package/dist/sdk/server-sdk.js.map +1 -0
- package/dist/settlement/base-contract-client.d.ts +156 -0
- package/dist/settlement/base-contract-client.d.ts.map +1 -0
- package/dist/settlement/base-contract-client.js +156 -0
- package/dist/settlement/base-contract-client.js.map +1 -0
- package/dist/settlement/nonce-store.d.ts +54 -0
- package/dist/settlement/nonce-store.d.ts.map +1 -0
- package/dist/settlement/nonce-store.js +125 -0
- package/dist/settlement/nonce-store.js.map +1 -0
- package/dist/settlement/onchain-verifier.d.ts +41 -0
- package/dist/settlement/onchain-verifier.d.ts.map +1 -0
- package/dist/settlement/onchain-verifier.js +114 -0
- package/dist/settlement/onchain-verifier.js.map +1 -0
- package/dist/settlement/payment-orchestrator.d.ts +59 -0
- package/dist/settlement/payment-orchestrator.d.ts.map +1 -0
- package/dist/settlement/payment-orchestrator.js +282 -0
- package/dist/settlement/payment-orchestrator.js.map +1 -0
- package/dist/settlement/permit-verifier.d.ts +60 -0
- package/dist/settlement/permit-verifier.d.ts.map +1 -0
- package/dist/settlement/permit-verifier.js +80 -0
- package/dist/settlement/permit-verifier.js.map +1 -0
- package/dist/settlement/session-wallet.d.ts +60 -0
- package/dist/settlement/session-wallet.d.ts.map +1 -0
- package/dist/settlement/session-wallet.js +105 -0
- package/dist/settlement/session-wallet.js.map +1 -0
- package/dist/transports/sse-transport.d.ts +27 -0
- package/dist/transports/sse-transport.d.ts.map +1 -0
- package/dist/transports/sse-transport.js +65 -0
- package/dist/transports/sse-transport.js.map +1 -0
- package/dist/transports/stdio-bridge.d.ts +29 -0
- package/dist/transports/stdio-bridge.d.ts.map +1 -0
- package/dist/transports/stdio-bridge.js +133 -0
- package/dist/transports/stdio-bridge.js.map +1 -0
- package/dist/types/circuit-breaker.d.ts +22 -0
- package/dist/types/circuit-breaker.d.ts.map +1 -0
- package/dist/types/circuit-breaker.js +5 -0
- package/dist/types/circuit-breaker.js.map +1 -0
- package/dist/types/ledger.d.ts +57 -0
- package/dist/types/ledger.d.ts.map +1 -0
- package/dist/types/ledger.js +5 -0
- package/dist/types/ledger.js.map +1 -0
- package/dist/types/mcp.d.ts +67 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +5 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/types/pricing.d.ts +68 -0
- package/dist/types/pricing.d.ts.map +1 -0
- package/dist/types/pricing.js +5 -0
- package/dist/types/pricing.js.map +1 -0
- package/dist/types/x402.d.ts +76 -0
- package/dist/types/x402.d.ts.map +1 -0
- package/dist/types/x402.js +5 -0
- package/dist/types/x402.js.map +1 -0
- package/dist/utils/units.d.ts +45 -0
- package/dist/utils/units.d.ts.map +1 -0
- package/dist/utils/units.js +141 -0
- package/dist/utils/units.js.map +1 -0
- package/package.json +72 -0
- package/src/contracts/ToolPayRouter.json +371 -0
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ToolPay Gateway Engine
|
|
3
|
+
* Reverse proxy interceptor for Model Context Protocol (MCP) JSON-RPC requests.
|
|
4
|
+
*/
|
|
5
|
+
import { usdToMicro, microToUsd } from '../utils/units.js';
|
|
6
|
+
import { canonicalJsonStringify } from '../utils/units.js';
|
|
7
|
+
export class ToolPayGateway {
|
|
8
|
+
registry;
|
|
9
|
+
orchestrator;
|
|
10
|
+
circuitBreaker;
|
|
11
|
+
upstreamHandler;
|
|
12
|
+
// Freemium usage tracking: `${serverId}:${toolName}:${agentWallet}:${periodBucket}` -> callCount
|
|
13
|
+
freemiumUsage = new Map();
|
|
14
|
+
// Scoped Idempotency cache: scopedKey -> cached GatewayResponse
|
|
15
|
+
idempotencyCache = new Map();
|
|
16
|
+
constructor(params) {
|
|
17
|
+
this.registry = params.registry;
|
|
18
|
+
this.orchestrator = params.orchestrator;
|
|
19
|
+
this.circuitBreaker = params.circuitBreaker;
|
|
20
|
+
this.upstreamHandler = params.upstreamHandler;
|
|
21
|
+
if (params.idempotencyCache) {
|
|
22
|
+
this.idempotencyCache = params.idempotencyCache;
|
|
23
|
+
}
|
|
24
|
+
if (params.freemiumUsage) {
|
|
25
|
+
this.freemiumUsage = params.freemiumUsage;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Main entry point to handle an incoming MCP JSON-RPC request.
|
|
30
|
+
*/
|
|
31
|
+
async handleRequest(request, context) {
|
|
32
|
+
const serverConfig = this.registry.getServer(context.serverId);
|
|
33
|
+
if (!serverConfig) {
|
|
34
|
+
return {
|
|
35
|
+
statusCode: 404,
|
|
36
|
+
headers: { 'Content-Type': 'application/json' },
|
|
37
|
+
body: {
|
|
38
|
+
jsonrpc: '2.0',
|
|
39
|
+
id: request.id ?? null,
|
|
40
|
+
error: {
|
|
41
|
+
code: -32000,
|
|
42
|
+
message: `Server "${context.serverId}" not found in ToolPay registry`,
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Scoped idempotency key prevents cross-server / cross-tenant cache poisoning (Finding 7)
|
|
48
|
+
const scopedIdempotencyKey = context.idempotencyKey
|
|
49
|
+
? `${context.serverId}:${context.agentWallet || 'anon'}:${request.method}:${canonicalJsonStringify(request.params || {})}:${context.idempotencyKey}`
|
|
50
|
+
: undefined;
|
|
51
|
+
if (scopedIdempotencyKey && this.idempotencyCache.has(scopedIdempotencyKey)) {
|
|
52
|
+
return this.idempotencyCache.get(scopedIdempotencyKey);
|
|
53
|
+
}
|
|
54
|
+
// 1. Intercept tools/list
|
|
55
|
+
if (request.method === 'tools/list') {
|
|
56
|
+
return this.handleToolsList(request, serverConfig);
|
|
57
|
+
}
|
|
58
|
+
// 2. Intercept tools/call
|
|
59
|
+
if (request.method === 'tools/call') {
|
|
60
|
+
const response = await this.handleToolsCall(request, serverConfig, context);
|
|
61
|
+
if (scopedIdempotencyKey && response.statusCode === 200) {
|
|
62
|
+
if (this.idempotencyCache.size >= 5_000) {
|
|
63
|
+
const iter = this.idempotencyCache.keys();
|
|
64
|
+
for (let i = 0; i < 50; i++) {
|
|
65
|
+
const next = iter.next();
|
|
66
|
+
if (next.done)
|
|
67
|
+
break;
|
|
68
|
+
this.idempotencyCache.delete(next.value);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
this.idempotencyCache.set(scopedIdempotencyKey, response);
|
|
72
|
+
}
|
|
73
|
+
return response;
|
|
74
|
+
}
|
|
75
|
+
// 3. Transparently pass through all other MCP methods (initialize, ping, resources/*, prompts/*)
|
|
76
|
+
const upstreamRes = await this.upstreamHandler(request);
|
|
77
|
+
return {
|
|
78
|
+
statusCode: 200,
|
|
79
|
+
headers: { 'Content-Type': 'application/json' },
|
|
80
|
+
body: upstreamRes,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Handles `tools/list`, enriching tools with payment metadata annotations.
|
|
85
|
+
*/
|
|
86
|
+
async handleToolsList(request, serverConfig) {
|
|
87
|
+
const upstreamRes = await this.upstreamHandler(request);
|
|
88
|
+
if (upstreamRes.result && Array.isArray(upstreamRes.result.tools)) {
|
|
89
|
+
const listResult = upstreamRes.result;
|
|
90
|
+
const enrichedTools = listResult.tools.map((tool) => {
|
|
91
|
+
const rule = this.registry.getToolRule(serverConfig.serverId, tool.name);
|
|
92
|
+
const isPaid = rule?.type === 'fixed' || rule?.type === 'dynamic';
|
|
93
|
+
return {
|
|
94
|
+
...tool,
|
|
95
|
+
annotations: {
|
|
96
|
+
...tool.annotations,
|
|
97
|
+
payment: {
|
|
98
|
+
required: isPaid,
|
|
99
|
+
costUsd: rule?.type === 'fixed' ? rule.priceUsd : undefined,
|
|
100
|
+
currency: serverConfig.currency,
|
|
101
|
+
networks: [serverConfig.network],
|
|
102
|
+
description: rule?.description || (isPaid ? `Pay-per-use tool ($${rule?.priceUsd || 'variable'})` : 'Free tool'),
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
});
|
|
107
|
+
return {
|
|
108
|
+
statusCode: 200,
|
|
109
|
+
headers: { 'Content-Type': 'application/json' },
|
|
110
|
+
body: {
|
|
111
|
+
jsonrpc: '2.0',
|
|
112
|
+
id: request.id ?? null,
|
|
113
|
+
result: {
|
|
114
|
+
...listResult,
|
|
115
|
+
tools: enrichedTools,
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
statusCode: 200,
|
|
122
|
+
headers: { 'Content-Type': 'application/json' },
|
|
123
|
+
body: upstreamRes,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Handles `tools/call`, checking pricing, circuit breakers, and payment verification.
|
|
128
|
+
*/
|
|
129
|
+
async handleToolsCall(request, serverConfig, context) {
|
|
130
|
+
const toolName = request.params?.name;
|
|
131
|
+
if (!toolName) {
|
|
132
|
+
return {
|
|
133
|
+
statusCode: 400,
|
|
134
|
+
headers: { 'Content-Type': 'application/json' },
|
|
135
|
+
body: {
|
|
136
|
+
jsonrpc: '2.0',
|
|
137
|
+
id: request.id ?? null,
|
|
138
|
+
error: { code: -32602, message: 'Missing tool name in tools/call parameters' },
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
const toolRule = this.registry.getToolRule(serverConfig.serverId, toolName);
|
|
143
|
+
// If tool is explicitly free or unconfigured without default pricing
|
|
144
|
+
if (!toolRule || toolRule.type === 'free') {
|
|
145
|
+
const res = await this.upstreamHandler(request);
|
|
146
|
+
return {
|
|
147
|
+
statusCode: 200,
|
|
148
|
+
headers: { 'Content-Type': 'application/json' },
|
|
149
|
+
body: res,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
const agentWallet = context.agentWallet || context.paymentProof?.signerWallet || '0x0000000000000000000000000000000000000000';
|
|
153
|
+
const nowSec = context.nowSec || Math.floor(Date.now() / 1000);
|
|
154
|
+
// Check freemium allowance if configured
|
|
155
|
+
if (toolRule.freemium && agentWallet !== '0x0000000000000000000000000000000000000000') {
|
|
156
|
+
const periodSec = toolRule.freemium.periodSeconds || 86400;
|
|
157
|
+
const periodBucket = Math.floor(nowSec / periodSec);
|
|
158
|
+
const usageKey = `${serverConfig.serverId}:${toolName}:${agentWallet.toLowerCase()}:${periodBucket}`;
|
|
159
|
+
const currentUsage = this.freemiumUsage.get(usageKey) || 0;
|
|
160
|
+
if (currentUsage < toolRule.freemium.freeCallsPerPeriod) {
|
|
161
|
+
this.freemiumUsage.set(usageKey, currentUsage + 1);
|
|
162
|
+
const res = await this.upstreamHandler(request);
|
|
163
|
+
return {
|
|
164
|
+
statusCode: 200,
|
|
165
|
+
headers: {
|
|
166
|
+
'Content-Type': 'application/json',
|
|
167
|
+
'X-Freemium-Remaining': (toolRule.freemium.freeCallsPerPeriod - currentUsage - 1).toString(),
|
|
168
|
+
},
|
|
169
|
+
body: res,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Resolve cost
|
|
174
|
+
let grossMicro;
|
|
175
|
+
if (toolRule.type === 'fixed') {
|
|
176
|
+
if (!toolRule.priceUsd) {
|
|
177
|
+
throw new Error(`Tool "${toolName}" configured as fixed price but missing priceUsd`);
|
|
178
|
+
}
|
|
179
|
+
grossMicro = usdToMicro(toolRule.priceUsd);
|
|
180
|
+
}
|
|
181
|
+
else if (toolRule.type === 'dynamic') {
|
|
182
|
+
if (!toolRule.dynamicPricing) {
|
|
183
|
+
throw new Error(`Tool "${toolName}" configured as dynamic price but missing dynamicPricing function`);
|
|
184
|
+
}
|
|
185
|
+
const dynamicPriceUsd = toolRule.dynamicPricing(request.params?.arguments || {});
|
|
186
|
+
grossMicro = usdToMicro(dynamicPriceUsd);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
grossMicro = 0n;
|
|
190
|
+
}
|
|
191
|
+
// If cost resolved to 0, execute free
|
|
192
|
+
if (grossMicro === 0n) {
|
|
193
|
+
const res = await this.upstreamHandler(request);
|
|
194
|
+
return {
|
|
195
|
+
statusCode: 200,
|
|
196
|
+
headers: { 'Content-Type': 'application/json' },
|
|
197
|
+
body: res,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
// Circuit Breaker Evaluation
|
|
201
|
+
const cbConfig = toolRule.circuitBreaker || serverConfig.globalCircuitBreaker;
|
|
202
|
+
const cbCheck = this.circuitBreaker.check({
|
|
203
|
+
serverId: serverConfig.serverId,
|
|
204
|
+
toolName,
|
|
205
|
+
agentWallet,
|
|
206
|
+
costMicro: grossMicro,
|
|
207
|
+
callArguments: request.params?.arguments,
|
|
208
|
+
timestamp: nowSec * 1000,
|
|
209
|
+
}, cbConfig);
|
|
210
|
+
if (!cbCheck.allowed) {
|
|
211
|
+
const status = cbCheck.statusCode || 429;
|
|
212
|
+
return {
|
|
213
|
+
statusCode: status,
|
|
214
|
+
headers: {
|
|
215
|
+
'Content-Type': 'application/json',
|
|
216
|
+
...(cbCheck.retryAfterSeconds ? { 'Retry-After': cbCheck.retryAfterSeconds.toString() } : {}),
|
|
217
|
+
},
|
|
218
|
+
body: {
|
|
219
|
+
jsonrpc: '2.0',
|
|
220
|
+
id: request.id ?? null,
|
|
221
|
+
error: {
|
|
222
|
+
code: status,
|
|
223
|
+
message: `ToolPay Circuit Breaker: ${cbCheck.reason}`,
|
|
224
|
+
data: cbCheck,
|
|
225
|
+
},
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
// Check for payment proof
|
|
230
|
+
if (!context.paymentProof) {
|
|
231
|
+
// Return HTTP 402 Challenge
|
|
232
|
+
const challenge = this.orchestrator.generateChallenge(serverConfig, toolRule, grossMicro);
|
|
233
|
+
return {
|
|
234
|
+
statusCode: 402,
|
|
235
|
+
headers: challenge.headers,
|
|
236
|
+
body: challenge.errorResponse.body,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
// Settle payment proof with bound tool/price context (Critical 1)
|
|
240
|
+
const settlementResult = await this.orchestrator.verifyAndSettle(context.paymentProof, nowSec, {
|
|
241
|
+
serverId: serverConfig.serverId,
|
|
242
|
+
toolName,
|
|
243
|
+
minAmountMicro: grossMicro,
|
|
244
|
+
});
|
|
245
|
+
if (!settlementResult.success) {
|
|
246
|
+
// Include fresh challenge details so client can recover without dead-ending (High 8)
|
|
247
|
+
const challenge = this.orchestrator.generateChallenge(serverConfig, toolRule, grossMicro);
|
|
248
|
+
return {
|
|
249
|
+
statusCode: 402,
|
|
250
|
+
headers: challenge.headers,
|
|
251
|
+
body: {
|
|
252
|
+
jsonrpc: '2.0',
|
|
253
|
+
id: request.id ?? null,
|
|
254
|
+
error: {
|
|
255
|
+
code: 402,
|
|
256
|
+
message: `Payment Verification Failed: ${settlementResult.error}`,
|
|
257
|
+
data: challenge.errorResponse.body.error.data,
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
// Commit spend to circuit breaker
|
|
263
|
+
this.circuitBreaker.commit({
|
|
264
|
+
serverId: serverConfig.serverId,
|
|
265
|
+
toolName,
|
|
266
|
+
agentWallet,
|
|
267
|
+
costMicro: grossMicro,
|
|
268
|
+
callArguments: request.params?.arguments,
|
|
269
|
+
timestamp: nowSec * 1000,
|
|
270
|
+
});
|
|
271
|
+
// Execute upstream tool call with refund safety (High 10)
|
|
272
|
+
let upstreamRes;
|
|
273
|
+
try {
|
|
274
|
+
upstreamRes = await this.upstreamHandler(request);
|
|
275
|
+
if (upstreamRes && upstreamRes.error && upstreamRes.error.code <= -32600) {
|
|
276
|
+
this.orchestrator.getLedger().refundTransaction(settlementResult.record.transactionId);
|
|
277
|
+
if (context.paymentProof.scheme === 'session-wallet' && context.paymentProof.sessionId) {
|
|
278
|
+
this.orchestrator.sessionWalletManager.refundPayment({
|
|
279
|
+
sessionId: context.paymentProof.sessionId,
|
|
280
|
+
amountMicro: grossMicro,
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
catch (err) {
|
|
286
|
+
this.orchestrator.getLedger().refundTransaction(settlementResult.record.transactionId);
|
|
287
|
+
if (context.paymentProof.scheme === 'session-wallet' && context.paymentProof.sessionId) {
|
|
288
|
+
this.orchestrator.sessionWalletManager.refundPayment({
|
|
289
|
+
sessionId: context.paymentProof.sessionId,
|
|
290
|
+
amountMicro: grossMicro,
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
return {
|
|
294
|
+
statusCode: 502,
|
|
295
|
+
headers: { 'Content-Type': 'application/json' },
|
|
296
|
+
body: {
|
|
297
|
+
jsonrpc: '2.0',
|
|
298
|
+
id: request.id ?? null,
|
|
299
|
+
error: {
|
|
300
|
+
code: -32000,
|
|
301
|
+
message: `Upstream tool execution failed: ${err.message}. Micropayment refunded.`,
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
// Return result with ToolPay settlement metadata in headers
|
|
307
|
+
return {
|
|
308
|
+
statusCode: 200,
|
|
309
|
+
headers: {
|
|
310
|
+
'Content-Type': 'application/json',
|
|
311
|
+
'X-ToolPay-Transaction-Id': settlementResult.record.transactionId,
|
|
312
|
+
'X-ToolPay-Gross-Amount': microToUsd(settlementResult.record.grossAmountMicro),
|
|
313
|
+
'X-ToolPay-Platform-Fee': microToUsd(settlementResult.record.platformFeeMicro),
|
|
314
|
+
'X-ToolPay-Developer-Payout': microToUsd(settlementResult.record.developerPayoutMicro),
|
|
315
|
+
},
|
|
316
|
+
body: upstreamRes,
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=toolpay-gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolpay-gateway.js","sourceRoot":"","sources":["../../src/gateway/toolpay-gateway.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ToolPay: MCP Monetization & Micropayment Infrastructure
|
|
3
|
+
* Public Exports (client-only — see NPM_RESTRUCTURE.md)
|
|
4
|
+
*
|
|
5
|
+
* Operator modules (edge persistence, page renderers, relayer, mail) are
|
|
6
|
+
* intentionally NOT exported here: d1-store, dashboard/landing/docs HTML,
|
|
7
|
+
* withdrawal-relayer, email-service, worker. They remain in-repo for the
|
|
8
|
+
* hosted gateway but are excluded from the published tarball.
|
|
9
|
+
*/
|
|
10
|
+
export * from './types/mcp.js';
|
|
11
|
+
export * from './types/pricing.js';
|
|
12
|
+
export * from './types/x402.js';
|
|
13
|
+
export * from './types/ledger.js';
|
|
14
|
+
export * from './types/circuit-breaker.js';
|
|
15
|
+
export * from './utils/units.js';
|
|
16
|
+
export * from './fee/fee-calculator.js';
|
|
17
|
+
export * from './fee/fee-ledger.js';
|
|
18
|
+
export * from './circuit-breaker/circuit-breaker.js';
|
|
19
|
+
export * from './settlement/nonce-store.js';
|
|
20
|
+
export * from './settlement/permit-verifier.js';
|
|
21
|
+
export * from './settlement/onchain-verifier.js';
|
|
22
|
+
export * from './settlement/base-contract-client.js';
|
|
23
|
+
export * from './settlement/session-wallet.js';
|
|
24
|
+
export * from './settlement/payment-orchestrator.js';
|
|
25
|
+
export * from './contracts/router-registry.js';
|
|
26
|
+
export * from './gateway/server-registry.js';
|
|
27
|
+
export * from './gateway/toolpay-gateway.js';
|
|
28
|
+
export * from './gateway/config-loader.js';
|
|
29
|
+
export * from './transports/sse-transport.js';
|
|
30
|
+
export * from './transports/stdio-bridge.js';
|
|
31
|
+
export * from './sdk/server-sdk.js';
|
|
32
|
+
export * from './sdk/client-agent.js';
|
|
33
|
+
export { ToolPayServer as MCPaidServer, ToolPayServer as McpaidServer, ToolPayServerOptions as MCPaidServerOptions, ToolPayServerOptions as McpaidServerOptions, } from './sdk/server-sdk.js';
|
|
34
|
+
export { ToolPayClientAgent as MCPaidClientAgent, ToolPayClientAgent as McpaidClientAgent, ToolPayClientAgentOptions as MCPaidClientAgentOptions, ToolPayClientAgentOptions as McpaidClientAgentOptions, } from './sdk/client-agent.js';
|
|
35
|
+
export { ToolPayGateway as MCPaidGateway, ToolPayGateway as McpaidGateway, ToolPayGatewayOptions as MCPaidGatewayOptions, ToolPayGatewayOptions as McpaidGatewayOptions, } from './gateway/toolpay-gateway.js';
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAE3C,cAAc,kBAAkB,CAAC;AAEjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,sCAAsC,CAAC;AAErD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAE/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAE7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EACL,aAAa,IAAI,YAAY,EAC7B,aAAa,IAAI,YAAY,EAC7B,oBAAoB,IAAI,mBAAmB,EAC3C,oBAAoB,IAAI,mBAAmB,GAC5C,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,kBAAkB,IAAI,iBAAiB,EACvC,kBAAkB,IAAI,iBAAiB,EACvC,yBAAyB,IAAI,wBAAwB,EACrD,yBAAyB,IAAI,wBAAwB,GACtD,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,cAAc,IAAI,aAAa,EAC/B,cAAc,IAAI,aAAa,EAC/B,qBAAqB,IAAI,oBAAoB,EAC7C,qBAAqB,IAAI,oBAAoB,GAC9C,MAAM,8BAA8B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ToolPay: MCP Monetization & Micropayment Infrastructure
|
|
3
|
+
* Public Exports (client-only — see NPM_RESTRUCTURE.md)
|
|
4
|
+
*
|
|
5
|
+
* Operator modules (edge persistence, page renderers, relayer, mail) are
|
|
6
|
+
* intentionally NOT exported here: d1-store, dashboard/landing/docs HTML,
|
|
7
|
+
* withdrawal-relayer, email-service, worker. They remain in-repo for the
|
|
8
|
+
* hosted gateway but are excluded from the published tarball.
|
|
9
|
+
*/
|
|
10
|
+
export * from './types/mcp.js';
|
|
11
|
+
export * from './types/pricing.js';
|
|
12
|
+
export * from './types/x402.js';
|
|
13
|
+
export * from './types/ledger.js';
|
|
14
|
+
export * from './types/circuit-breaker.js';
|
|
15
|
+
export * from './utils/units.js';
|
|
16
|
+
export * from './fee/fee-calculator.js';
|
|
17
|
+
export * from './fee/fee-ledger.js';
|
|
18
|
+
export * from './circuit-breaker/circuit-breaker.js';
|
|
19
|
+
export * from './settlement/nonce-store.js';
|
|
20
|
+
export * from './settlement/permit-verifier.js';
|
|
21
|
+
export * from './settlement/onchain-verifier.js';
|
|
22
|
+
export * from './settlement/base-contract-client.js';
|
|
23
|
+
export * from './settlement/session-wallet.js';
|
|
24
|
+
export * from './settlement/payment-orchestrator.js';
|
|
25
|
+
export * from './contracts/router-registry.js';
|
|
26
|
+
export * from './gateway/server-registry.js';
|
|
27
|
+
export * from './gateway/toolpay-gateway.js';
|
|
28
|
+
export * from './gateway/config-loader.js';
|
|
29
|
+
export * from './transports/sse-transport.js';
|
|
30
|
+
export * from './transports/stdio-bridge.js';
|
|
31
|
+
export * from './sdk/server-sdk.js';
|
|
32
|
+
export * from './sdk/client-agent.js';
|
|
33
|
+
// MCPaid Brand Aliases
|
|
34
|
+
export { ToolPayServer as MCPaidServer, ToolPayServer as McpaidServer, } from './sdk/server-sdk.js';
|
|
35
|
+
export { ToolPayClientAgent as MCPaidClientAgent, ToolPayClientAgent as McpaidClientAgent, } from './sdk/client-agent.js';
|
|
36
|
+
export { ToolPayGateway as MCPaidGateway, ToolPayGateway as McpaidGateway, } from './gateway/toolpay-gateway.js';
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAE3C,cAAc,kBAAkB,CAAC;AAEjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,sCAAsC,CAAC;AAErD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAE/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAE7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AAEtC,uBAAuB;AACvB,OAAO,EACL,aAAa,IAAI,YAAY,EAC7B,aAAa,IAAI,YAAY,GAG9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,kBAAkB,IAAI,iBAAiB,EACvC,kBAAkB,IAAI,iBAAiB,GAGxC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,cAAc,IAAI,aAAa,EAC/B,cAAc,IAAI,aAAa,GAGhC,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ToolPay Client Agent Adapter
|
|
3
|
+
* Equips autonomous AI agents with automatic x402 challenge negotiation, spend policies, and payment signing.
|
|
4
|
+
*/
|
|
5
|
+
import { type Hex, type Address } from 'viem';
|
|
6
|
+
import { JsonRpcRequest } from '../types/mcp.js';
|
|
7
|
+
import { PaymentProof } from '../types/x402.js';
|
|
8
|
+
import { GatewayResponse } from '../gateway/toolpay-gateway.js';
|
|
9
|
+
export interface AgentSpendPolicy {
|
|
10
|
+
/** Maximum price willing to pay for a single tool call in USD (e.g. "0.05") */
|
|
11
|
+
maxPricePerCallUsd?: string;
|
|
12
|
+
/** Maximum total spend across the agent's lifetime or run */
|
|
13
|
+
maxTotalBudgetUsd?: string;
|
|
14
|
+
/** Auto-approve payments below max price without human intervention */
|
|
15
|
+
autoApprove?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Builds the exact ABI-encoded transaction calldata to pay the ToolPayRouter smart contract on Base.
|
|
19
|
+
*/
|
|
20
|
+
export declare function buildRouterPaymentCalldata(params: {
|
|
21
|
+
developerWallet: Address;
|
|
22
|
+
tokenAddress: Address;
|
|
23
|
+
grossAmountMicro: bigint;
|
|
24
|
+
challengeNonce: string;
|
|
25
|
+
serverId: string;
|
|
26
|
+
toolName: string;
|
|
27
|
+
}): `0x${string}`;
|
|
28
|
+
export interface ToolPayClientAgentOptions {
|
|
29
|
+
privateKey?: Hex;
|
|
30
|
+
walletAddress?: string;
|
|
31
|
+
spendPolicy?: AgentSpendPolicy;
|
|
32
|
+
sessionId?: string;
|
|
33
|
+
}
|
|
34
|
+
export declare class ToolPayClientAgent {
|
|
35
|
+
readonly walletAddress: string;
|
|
36
|
+
private privateKey?;
|
|
37
|
+
private spendPolicy;
|
|
38
|
+
private totalSpentMicro;
|
|
39
|
+
private sessionId?;
|
|
40
|
+
constructor(params: ToolPayClientAgentOptions);
|
|
41
|
+
/**
|
|
42
|
+
* Invokes an MCP tool through a ToolPay gateway, automatically handling 402 challenges.
|
|
43
|
+
*/
|
|
44
|
+
executeToolCall(request: JsonRpcRequest, callerFn: (req: JsonRpcRequest, paymentProof?: PaymentProof) => Promise<GatewayResponse>): Promise<GatewayResponse>;
|
|
45
|
+
getTotalSpentMicro(): bigint;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=client-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-agent.d.ts","sourceRoot":"","sources":["../../src/sdk/client-agent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,OAAO,EAAsB,MAAM,MAAM,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAqB,MAAM,kBAAkB,CAAC;AAGnE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,KAAK,MAAM,EAAE,CAchB;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,kBAAkB;IAC7B,SAAgB,aAAa,EAAE,MAAM,CAAC;IACtC,OAAO,CAAC,UAAU,CAAC,CAAM;IACzB,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,eAAe,CAAc;IACrC,OAAO,CAAC,SAAS,CAAC,CAAS;gBAEf,MAAM,EAAE,yBAAyB;IAmB7C;;OAEG;IACU,eAAe,CAC1B,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,YAAY,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,eAAe,CAAC,GACvF,OAAO,CAAC,eAAe,CAAC;IAwHpB,kBAAkB,IAAI,MAAM;CAGpC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ToolPay Client Agent Adapter
|
|
3
|
+
* Equips autonomous AI agents with automatic x402 challenge negotiation, spend policies, and payment signing.
|
|
4
|
+
*/
|
|
5
|
+
import { privateKeyToAccount } from 'viem/accounts';
|
|
6
|
+
import { encodeFunctionData } from 'viem';
|
|
7
|
+
import { TOOLPAY_PERMIT_DOMAIN, TOOLPAY_PERMIT_TYPES } from '../settlement/permit-verifier.js';
|
|
8
|
+
import { usdToMicro, normalizeNonceToBytes32 } from '../utils/units.js';
|
|
9
|
+
import { TOOLPAY_ROUTER_ABI } from '../contracts/ToolPayRouter.js';
|
|
10
|
+
/**
|
|
11
|
+
* Builds the exact ABI-encoded transaction calldata to pay the ToolPayRouter smart contract on Base.
|
|
12
|
+
*/
|
|
13
|
+
export function buildRouterPaymentCalldata(params) {
|
|
14
|
+
const nonceBytes32 = normalizeNonceToBytes32(params.challengeNonce);
|
|
15
|
+
return encodeFunctionData({
|
|
16
|
+
abi: TOOLPAY_ROUTER_ABI,
|
|
17
|
+
functionName: 'payForTool',
|
|
18
|
+
args: [
|
|
19
|
+
params.tokenAddress,
|
|
20
|
+
params.developerWallet,
|
|
21
|
+
params.grossAmountMicro,
|
|
22
|
+
nonceBytes32,
|
|
23
|
+
params.serverId,
|
|
24
|
+
params.toolName,
|
|
25
|
+
],
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
export class ToolPayClientAgent {
|
|
29
|
+
walletAddress;
|
|
30
|
+
privateKey;
|
|
31
|
+
spendPolicy;
|
|
32
|
+
totalSpentMicro = 0n;
|
|
33
|
+
sessionId;
|
|
34
|
+
constructor(params) {
|
|
35
|
+
this.privateKey = params.privateKey;
|
|
36
|
+
this.spendPolicy = {
|
|
37
|
+
autoApprove: true,
|
|
38
|
+
maxPricePerCallUsd: '0.10',
|
|
39
|
+
...params.spendPolicy,
|
|
40
|
+
};
|
|
41
|
+
this.sessionId = params.sessionId;
|
|
42
|
+
if (this.privateKey) {
|
|
43
|
+
const account = privateKeyToAccount(this.privateKey);
|
|
44
|
+
this.walletAddress = account.address;
|
|
45
|
+
}
|
|
46
|
+
else if (params.walletAddress) {
|
|
47
|
+
this.walletAddress = params.walletAddress.toLowerCase();
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
this.walletAddress = '0x0000000000000000000000000000000000000000';
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Invokes an MCP tool through a ToolPay gateway, automatically handling 402 challenges.
|
|
55
|
+
*/
|
|
56
|
+
async executeToolCall(request, callerFn) {
|
|
57
|
+
// 1. Initial attempt without payment proof to determine tool pricing terms
|
|
58
|
+
const firstAttempt = await callerFn(request, undefined);
|
|
59
|
+
// If call succeeded or errored with non-402, return immediately
|
|
60
|
+
if (firstAttempt.statusCode !== 402) {
|
|
61
|
+
return firstAttempt;
|
|
62
|
+
}
|
|
63
|
+
// 2. Parse 402 Challenge Data
|
|
64
|
+
const challengePayload = firstAttempt.body?.error?.data;
|
|
65
|
+
if (!challengePayload || !challengePayload.challengeNonce) {
|
|
66
|
+
return firstAttempt; // Malformed 402
|
|
67
|
+
}
|
|
68
|
+
const priceUsd = challengePayload.priceUsd;
|
|
69
|
+
const priceMicro = BigInt(challengePayload.amountMicro);
|
|
70
|
+
// Warn (not fail) when the gateway settles through a non-official
|
|
71
|
+
// router. Official hosted traffic uses OFFICIAL_ROUTER_ADDRESS_BASE;
|
|
72
|
+
// self-hosted forks use their own contract and are outside the hosted
|
|
73
|
+
// network / fee enforcement (see OPERATOR-LICENSE.md).
|
|
74
|
+
try {
|
|
75
|
+
const { isOfficialRouter } = await import('../contracts/router-registry.js');
|
|
76
|
+
const routerAddr = challengePayload.verifyingContract || challengePayload.recipientWallet;
|
|
77
|
+
if (routerAddr && !isOfficialRouter(routerAddr, challengePayload.chainId)) {
|
|
78
|
+
console.warn(`[MCPaid] Gateway router ${routerAddr} is not the official hosted router — ` +
|
|
79
|
+
`you are paying a self-hosted gateway outside mcpaid.dev fee/settlement guarantees.`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch { }
|
|
83
|
+
// 3. Spend Policy Checks
|
|
84
|
+
if (this.spendPolicy.autoApprove === false) {
|
|
85
|
+
throw new Error(`Agent Spend Policy Rejected: autoApprove is disabled for paid tool "${challengePayload.toolName}" ($${priceUsd})`);
|
|
86
|
+
}
|
|
87
|
+
if (this.spendPolicy.maxPricePerCallUsd) {
|
|
88
|
+
const maxPriceMicro = usdToMicro(this.spendPolicy.maxPricePerCallUsd);
|
|
89
|
+
if (priceMicro > maxPriceMicro) {
|
|
90
|
+
throw new Error(`Agent Spend Policy Rejected: tool price $${priceUsd} exceeds maximum per-call budget $${this.spendPolicy.maxPricePerCallUsd}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (this.spendPolicy.maxTotalBudgetUsd) {
|
|
94
|
+
const maxTotalMicro = usdToMicro(this.spendPolicy.maxTotalBudgetUsd);
|
|
95
|
+
if (this.totalSpentMicro + priceMicro > maxTotalMicro) {
|
|
96
|
+
throw new Error(`Agent Spend Policy Rejected: cumulative spend with this call would exceed total budget $${this.spendPolicy.maxTotalBudgetUsd}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// 4. Generate and Sign Payment Proof
|
|
100
|
+
let paymentProof;
|
|
101
|
+
if (this.sessionId) {
|
|
102
|
+
// Use Session Wallet
|
|
103
|
+
paymentProof = {
|
|
104
|
+
scheme: 'session-wallet',
|
|
105
|
+
challengeNonce: challengePayload.challengeNonce,
|
|
106
|
+
signerWallet: this.walletAddress,
|
|
107
|
+
sessionId: this.sessionId,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
else if (this.privateKey) {
|
|
111
|
+
// Sign EIP-712 Micro-Voucher
|
|
112
|
+
const account = privateKeyToAccount(this.privateKey);
|
|
113
|
+
const deadline = challengePayload.expiresAt;
|
|
114
|
+
const message = {
|
|
115
|
+
serverId: challengePayload.serverId,
|
|
116
|
+
toolName: challengePayload.toolName,
|
|
117
|
+
challengeNonce: challengePayload.challengeNonce,
|
|
118
|
+
amountMicro: priceMicro,
|
|
119
|
+
recipient: challengePayload.recipientWallet,
|
|
120
|
+
deadline: BigInt(deadline),
|
|
121
|
+
};
|
|
122
|
+
const domain = {
|
|
123
|
+
...TOOLPAY_PERMIT_DOMAIN,
|
|
124
|
+
chainId: challengePayload.chainId || 8453,
|
|
125
|
+
verifyingContract: challengePayload.verifyingContract || TOOLPAY_PERMIT_DOMAIN.verifyingContract,
|
|
126
|
+
};
|
|
127
|
+
const signature = await account.signTypedData({
|
|
128
|
+
domain,
|
|
129
|
+
types: TOOLPAY_PERMIT_TYPES,
|
|
130
|
+
primaryType: 'ToolPayment',
|
|
131
|
+
message,
|
|
132
|
+
});
|
|
133
|
+
paymentProof = {
|
|
134
|
+
scheme: 'eip712-permit',
|
|
135
|
+
challengeNonce: challengePayload.challengeNonce,
|
|
136
|
+
signerWallet: this.walletAddress,
|
|
137
|
+
signature,
|
|
138
|
+
deadline,
|
|
139
|
+
maxAmountMicro: priceMicro,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
throw new Error(`Payment Required: Tool "${challengePayload.toolName}" costs ${challengePayload.priceUsd} ${challengePayload.currency}. ` +
|
|
144
|
+
`No signing key or session wallet is configured for this agent. ` +
|
|
145
|
+
`To authorize payments, set AGENT_PRIVATE_KEY=0x... in your project .env file or pass --key <private-key> to the mcpaid bridge.`);
|
|
146
|
+
}
|
|
147
|
+
// 5. Replay request with Payment Proof
|
|
148
|
+
const secondAttempt = await callerFn(request, paymentProof);
|
|
149
|
+
if (secondAttempt.statusCode === 200) {
|
|
150
|
+
this.totalSpentMicro += priceMicro;
|
|
151
|
+
}
|
|
152
|
+
return secondAttempt;
|
|
153
|
+
}
|
|
154
|
+
getTotalSpentMicro() {
|
|
155
|
+
return this.totalSpentMicro;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=client-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-agent.js","sourceRoot":"","sources":["../../src/sdk/client-agent.ts"],"names":[],"mappings":"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"}
|