@x402scan/mcp 0.0.7-beta.4 → 0.0.8-beta.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/dist/cjs/run-server.cjs +184 -148
- package/dist/esm/{chunk-RZYTNVC6.js → chunk-5LYTFZ22.js} +2 -2
- package/dist/esm/{chunk-JXXC6FYE.js → chunk-7BI7Y3ZF.js} +64 -71
- package/dist/esm/chunk-7BI7Y3ZF.js.map +1 -0
- package/dist/esm/{chunk-Q2QVXJFE.js → chunk-KPEJO3KV.js} +2 -2
- package/dist/esm/chunk-KPEJO3KV.js.map +1 -0
- package/dist/esm/{chunk-2UP5W5MC.js → chunk-KT473PSW.js} +8 -3
- package/dist/esm/chunk-KT473PSW.js.map +1 -0
- package/dist/esm/{fund-ANZCZU5C.js → fund-DD27Z7JW.js} +3 -3
- package/dist/esm/index.js +4 -4
- package/dist/esm/{install-BBOI4D6I.js → install-EHBSKOIZ.js} +5 -5
- package/dist/esm/{server-IOVNYPTB.js → server-3JKXWW6W.js} +65 -27
- package/dist/esm/server-3JKXWW6W.js.map +1 -0
- package/package.json +5 -3
- package/dist/esm/chunk-2UP5W5MC.js.map +0 -1
- package/dist/esm/chunk-JXXC6FYE.js.map +0 -1
- package/dist/esm/chunk-Q2QVXJFE.js.map +0 -1
- package/dist/esm/server-IOVNYPTB.js.map +0 -1
- /package/dist/esm/{chunk-RZYTNVC6.js.map → chunk-5LYTFZ22.js.map} +0 -0
- /package/dist/esm/{fund-ANZCZU5C.js.map → fund-DD27Z7JW.js.map} +0 -0
- /package/dist/esm/{install-BBOI4D6I.js.map → install-EHBSKOIZ.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MCP_VERSION,
|
|
3
3
|
getBalance
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-KT473PSW.js";
|
|
5
5
|
import {
|
|
6
6
|
DEFAULT_NETWORK,
|
|
7
7
|
err,
|
|
@@ -21,11 +21,12 @@ import {
|
|
|
21
21
|
safeFetchJson,
|
|
22
22
|
safeParseResponse,
|
|
23
23
|
safeStringifyJson
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-7BI7Y3ZF.js";
|
|
25
25
|
|
|
26
26
|
// src/server/index.ts
|
|
27
27
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
28
28
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
29
|
+
import { randomBytes } from "crypto";
|
|
29
30
|
|
|
30
31
|
// src/server/tools/x402-fetch.ts
|
|
31
32
|
import { x402Client, x402HTTPClient } from "@x402/core/client";
|
|
@@ -135,13 +136,19 @@ var requestSchema = z.object({
|
|
|
135
136
|
body: z.unknown().optional().describe("Request body for POST/PUT/PATCH methods"),
|
|
136
137
|
headers: z.record(z.string(), z.string()).optional().describe("Additional headers to include").default({})
|
|
137
138
|
});
|
|
138
|
-
var buildRequest = (
|
|
139
|
+
var buildRequest = ({
|
|
140
|
+
input,
|
|
141
|
+
address,
|
|
142
|
+
sessionId
|
|
143
|
+
}) => {
|
|
139
144
|
return new Request(input.url, {
|
|
140
145
|
method: input.method,
|
|
141
146
|
body: input.body ? typeof input.body === "string" ? input.body : JSON.stringify(input.body) : void 0,
|
|
142
147
|
headers: {
|
|
143
148
|
...input.body ? { "Content-Type": "application/json" } : {},
|
|
144
|
-
...input.headers
|
|
149
|
+
...input.headers,
|
|
150
|
+
...address ? { "X-Wallet-Address": address, "X-Client-ID": address } : {},
|
|
151
|
+
...sessionId ? { "X-Session-ID": sessionId } : {}
|
|
145
152
|
}
|
|
146
153
|
});
|
|
147
154
|
};
|
|
@@ -249,7 +256,8 @@ var toolName = "fetch";
|
|
|
249
256
|
var registerFetchX402ResourceTool = ({
|
|
250
257
|
server,
|
|
251
258
|
account,
|
|
252
|
-
flags
|
|
259
|
+
flags,
|
|
260
|
+
sessionId
|
|
253
261
|
}) => {
|
|
254
262
|
server.registerTool(
|
|
255
263
|
toolName,
|
|
@@ -276,7 +284,9 @@ var registerFetchX402ResourceTool = ({
|
|
|
276
284
|
});
|
|
277
285
|
const client = new x402HTTPClient(coreClient);
|
|
278
286
|
const fetchWithPay = safeWrapFetchWithPayment(client);
|
|
279
|
-
const fetchResult = await fetchWithPay(
|
|
287
|
+
const fetchResult = await fetchWithPay(
|
|
288
|
+
buildRequest({ input, address: account.address, sessionId })
|
|
289
|
+
);
|
|
280
290
|
if (fetchResult.isErr()) {
|
|
281
291
|
return mcpError(fetchResult);
|
|
282
292
|
}
|
|
@@ -301,8 +311,7 @@ var registerFetchX402ResourceTool = ({
|
|
|
301
311
|
);
|
|
302
312
|
};
|
|
303
313
|
function safeWrapFetchWithPayment(client) {
|
|
304
|
-
return async (
|
|
305
|
-
const request = new Request(input, init);
|
|
314
|
+
return async (request) => {
|
|
306
315
|
const clonedRequest = request.clone();
|
|
307
316
|
const probeResult = await safeFetch(toolName, request);
|
|
308
317
|
if (probeResult.isErr()) {
|
|
@@ -371,7 +380,11 @@ var getSiwxExtension = (extensions) => {
|
|
|
371
380
|
|
|
372
381
|
// src/server/tools/auth-fetch.ts
|
|
373
382
|
var toolName2 = "fetchWithAuth";
|
|
374
|
-
var registerAuthTools = ({
|
|
383
|
+
var registerAuthTools = ({
|
|
384
|
+
server,
|
|
385
|
+
account,
|
|
386
|
+
sessionId
|
|
387
|
+
}) => {
|
|
375
388
|
server.registerTool(
|
|
376
389
|
toolName2,
|
|
377
390
|
{
|
|
@@ -380,7 +393,10 @@ var registerAuthTools = ({ server, account }) => {
|
|
|
380
393
|
},
|
|
381
394
|
async (input) => {
|
|
382
395
|
const httpClient = new x402HTTPClient2(new x402Client2());
|
|
383
|
-
const firstResult = await safeFetch(
|
|
396
|
+
const firstResult = await safeFetch(
|
|
397
|
+
toolName2,
|
|
398
|
+
buildRequest({ input, address: account.address, sessionId })
|
|
399
|
+
);
|
|
384
400
|
if (firstResult.isErr()) {
|
|
385
401
|
return mcpError(firstResult);
|
|
386
402
|
}
|
|
@@ -451,7 +467,11 @@ var registerAuthTools = ({ server, account }) => {
|
|
|
451
467
|
return mcpError(payloadResult);
|
|
452
468
|
}
|
|
453
469
|
const siwxHeader = encodeSIWxHeader(payloadResult.value);
|
|
454
|
-
const authedRequest = buildRequest(
|
|
470
|
+
const authedRequest = buildRequest({
|
|
471
|
+
input,
|
|
472
|
+
address: account.address,
|
|
473
|
+
sessionId
|
|
474
|
+
});
|
|
455
475
|
authedRequest.headers.set("SIGN-IN-WITH-X", siwxHeader);
|
|
456
476
|
const authedResult = await safeFetch(toolName2, authedRequest);
|
|
457
477
|
if (authedResult.isErr()) {
|
|
@@ -519,7 +539,11 @@ var registerWalletTools = ({
|
|
|
519
539
|
// src/server/tools/check-endpoint.ts
|
|
520
540
|
import { x402Client as x402Client3, x402HTTPClient as x402HTTPClient3 } from "@x402/core/client";
|
|
521
541
|
var toolName4 = "checkEndpointSchema";
|
|
522
|
-
var registerCheckX402EndpointTool = ({
|
|
542
|
+
var registerCheckX402EndpointTool = ({
|
|
543
|
+
server,
|
|
544
|
+
account,
|
|
545
|
+
sessionId
|
|
546
|
+
}) => {
|
|
523
547
|
server.registerTool(
|
|
524
548
|
toolName4,
|
|
525
549
|
{
|
|
@@ -528,7 +552,10 @@ var registerCheckX402EndpointTool = ({ server }) => {
|
|
|
528
552
|
},
|
|
529
553
|
async (input) => {
|
|
530
554
|
log.info("Querying endpoint", input);
|
|
531
|
-
const responseResult = await safeFetch(
|
|
555
|
+
const responseResult = await safeFetch(
|
|
556
|
+
toolName4,
|
|
557
|
+
buildRequest({ input, address: account.address, sessionId })
|
|
558
|
+
);
|
|
532
559
|
if (responseResult.isErr()) {
|
|
533
560
|
return mcpError(responseResult);
|
|
534
561
|
}
|
|
@@ -648,6 +675,9 @@ var registerTelemetryTools = ({
|
|
|
648
675
|
mcpVersion: MCP_VERSION,
|
|
649
676
|
reportedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
650
677
|
})
|
|
678
|
+
}),
|
|
679
|
+
z3.object({
|
|
680
|
+
reportId: z3.string()
|
|
651
681
|
})
|
|
652
682
|
);
|
|
653
683
|
if (telemetryResult.isErr()) {
|
|
@@ -707,18 +737,16 @@ function registerDiscoveryTools(server) {
|
|
|
707
737
|
log.debug(`Fetching discovery document from: ${wellKnownUrl}`);
|
|
708
738
|
const wellKnownResult = await safeFetchJson(
|
|
709
739
|
toolName7,
|
|
710
|
-
new Request(wellKnownUrl, { headers: { Accept: "application/json" } })
|
|
740
|
+
new Request(wellKnownUrl, { headers: { Accept: "application/json" } }),
|
|
741
|
+
discoveryDocumentSchema
|
|
711
742
|
);
|
|
712
743
|
if (wellKnownResult.isOk()) {
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
data: parsed.data
|
|
720
|
-
});
|
|
721
|
-
}
|
|
744
|
+
return mcpSuccessJson({
|
|
745
|
+
found: true,
|
|
746
|
+
origin,
|
|
747
|
+
source: "well-known",
|
|
748
|
+
data: wellKnownResult.value
|
|
749
|
+
});
|
|
722
750
|
} else {
|
|
723
751
|
log.info(
|
|
724
752
|
`No well-known x402 discovery document found at ${wellKnownUrl}`
|
|
@@ -731,14 +759,22 @@ function registerDiscoveryTools(server) {
|
|
|
731
759
|
new Request(
|
|
732
760
|
`https://cloudflare-dns.com/dns-query?name=${encodeURIComponent(dnsQuery)}&type=TXT`,
|
|
733
761
|
{ headers: { Accept: "application/dns-json" } }
|
|
734
|
-
)
|
|
762
|
+
),
|
|
763
|
+
z4.object({
|
|
764
|
+
Answer: z4.array(
|
|
765
|
+
z4.object({
|
|
766
|
+
data: z4.string()
|
|
767
|
+
})
|
|
768
|
+
).optional()
|
|
769
|
+
})
|
|
735
770
|
);
|
|
736
771
|
if (dnsResult.isOk() && dnsResult.value.Answer && dnsResult.value.Answer.length > 0) {
|
|
737
772
|
const dnsUrl = dnsResult.value.Answer[0].data.replace(/^"|"$/g, "");
|
|
738
773
|
if (URL.canParse(dnsUrl)) {
|
|
739
774
|
const dnsDocResult = await safeFetchJson(
|
|
740
775
|
toolName7,
|
|
741
|
-
new Request(dnsUrl, { headers: { Accept: "application/json" } })
|
|
776
|
+
new Request(dnsUrl, { headers: { Accept: "application/json" } }),
|
|
777
|
+
discoveryDocumentSchema
|
|
742
778
|
);
|
|
743
779
|
if (dnsDocResult.isOk()) {
|
|
744
780
|
const parsed = discoveryDocumentSchema.safeParse(
|
|
@@ -923,6 +959,7 @@ var startServer = async (flags) => {
|
|
|
923
959
|
}
|
|
924
960
|
const { account } = walletResult.value;
|
|
925
961
|
const code = invite ?? process.env.INVITE_CODE;
|
|
962
|
+
const sessionId = randomBytes(16).toString("hex");
|
|
926
963
|
if (code) {
|
|
927
964
|
await redeemInviteCode({
|
|
928
965
|
code,
|
|
@@ -950,7 +987,8 @@ var startServer = async (flags) => {
|
|
|
950
987
|
const props = {
|
|
951
988
|
server,
|
|
952
989
|
account,
|
|
953
|
-
flags
|
|
990
|
+
flags,
|
|
991
|
+
sessionId
|
|
954
992
|
};
|
|
955
993
|
registerFetchX402ResourceTool(props);
|
|
956
994
|
registerAuthTools(props);
|
|
@@ -973,4 +1011,4 @@ var startServer = async (flags) => {
|
|
|
973
1011
|
export {
|
|
974
1012
|
startServer
|
|
975
1013
|
};
|
|
976
|
-
//# sourceMappingURL=server-
|
|
1014
|
+
//# sourceMappingURL=server-3JKXWW6W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/server/index.ts","../../src/server/tools/x402-fetch.ts","../../src/server/tools/response/lib.ts","../../src/server/tools/response/error.ts","../../src/server/tools/response/success.ts","../../src/server/tools/lib/request.ts","../../src/server/tools/lib/check-balance.ts","../../src/shared/token.ts","../../src/shared/neverthrow/x402/index.ts","../../src/server/tools/auth-fetch.ts","../../src/server/lib/x402-extensions.ts","../../src/server/tools/wallet.ts","../../src/server/tools/check-endpoint.ts","../../src/server/tools/redeem-invite.ts","../../src/server/tools/telemetry.ts","../../src/server/tools/discover-resources.ts","../../src/server/resources/origins.ts","../../src/server/resources/_lib.ts"],"sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { randomBytes } from 'crypto';\n\nimport { registerFetchX402ResourceTool } from './tools/x402-fetch';\nimport { registerAuthTools } from './tools/auth-fetch';\nimport { registerWalletTools } from './tools/wallet';\nimport { registerCheckX402EndpointTool } from './tools/check-endpoint';\nimport { registerRedeemInviteTool } from './tools/redeem-invite';\nimport { registerTelemetryTools } from './tools/telemetry';\nimport { registerDiscoveryTools } from './tools/discover-resources';\n\nimport { registerOrigins } from './resources/origins';\n\nimport { MCP_VERSION } from './lib/version';\n\nimport { log } from '@/shared/log';\nimport { getWallet } from '@/shared/wallet';\nimport { redeemInviteCode } from '@/shared/redeem-invite';\n\nimport type { Command } from '@/types';\n\nexport const startServer: Command = async flags => {\n log.info('Starting x402scan-mcp...');\n\n const { dev, invite } = flags;\n\n const walletResult = await getWallet();\n\n if (walletResult.isErr()) {\n log.error(JSON.stringify(walletResult.error, null, 2));\n console.error(walletResult.error);\n process.exit(1);\n }\n\n const { account } = walletResult.value;\n\n const code = invite ?? process.env.INVITE_CODE;\n\n const sessionId = randomBytes(16).toString('hex');\n\n if (code) {\n await redeemInviteCode({\n code,\n dev,\n address: account.address,\n surface: 'startServer',\n });\n }\n\n const server = new McpServer(\n {\n name: '@x402scan/mcp',\n version: MCP_VERSION,\n websiteUrl: 'https://x402scan.com/mcp',\n icons: [{ src: 'https://x402scan.com/logo.svg' }],\n },\n {\n capabilities: {\n resources: {\n subscribe: true,\n listChanged: true,\n },\n },\n }\n );\n\n const props = {\n server,\n account,\n flags,\n sessionId,\n };\n\n registerFetchX402ResourceTool(props);\n registerAuthTools(props);\n registerWalletTools(props);\n registerCheckX402EndpointTool(props);\n registerRedeemInviteTool(props);\n registerDiscoveryTools(server);\n registerTelemetryTools(props);\n\n await registerOrigins({ server, flags });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n const shutdown = async () => {\n log.info('Shutting down...');\n await server.close();\n process.exit(0);\n };\n\n process.on('SIGINT', () => void shutdown());\n process.on('SIGTERM', () => void shutdown());\n};\n","import { safeFetch, safeParseResponse } from '@/shared/neverthrow/fetch';\n\nimport { x402Client, x402HTTPClient } from '@x402/core/client';\nimport { ExactEvmScheme } from '@x402/evm/exact/client';\n\nimport { mcpError, mcpErrorFetch, mcpSuccessResponse } from './response';\n\nimport { requestSchema, buildRequest } from './lib/request';\nimport { checkBalance } from './lib/check-balance';\n\nimport { DEFAULT_NETWORK } from '@/shared/networks';\nimport { tokenStringToNumber } from '@/shared/token';\nimport {\n safeCreatePaymentPayload,\n safeGetPaymentRequired,\n safeGetPaymentSettlement,\n x402Err,\n} from '@/shared/neverthrow/x402';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst toolName = 'fetch';\n\nexport const registerFetchX402ResourceTool: RegisterTools = ({\n server,\n account,\n flags,\n sessionId,\n}) => {\n server.registerTool(\n toolName,\n {\n description:\n 'Makes an http fetch request. If the request is to an x402-protected resource, it will handle payment automatically.',\n inputSchema: requestSchema,\n },\n async input => {\n const coreClient = x402Client.fromConfig({\n schemes: [\n { network: DEFAULT_NETWORK, client: new ExactEvmScheme(account) },\n ],\n });\n\n coreClient.onBeforePaymentCreation(async ({ selectedRequirements }) => {\n const amount = tokenStringToNumber(selectedRequirements.amount);\n await checkBalance({\n surface: toolName,\n server,\n address: account.address,\n amountNeeded: amount,\n message: balance =>\n `This request costs ${amount} USDC. Your current balance is ${balance} USDC.`,\n flags,\n });\n });\n\n const client = new x402HTTPClient(coreClient);\n\n const fetchWithPay = safeWrapFetchWithPayment(client);\n\n const fetchResult = await fetchWithPay(\n buildRequest({ input, address: account.address, sessionId })\n );\n\n if (fetchResult.isErr()) {\n return mcpError(fetchResult);\n }\n\n const response = fetchResult.value;\n\n if (!response.ok) {\n return mcpErrorFetch(toolName, response);\n }\n\n const parseResponseResult = await safeParseResponse(toolName, response);\n\n if (parseResponseResult.isErr()) {\n return mcpError(parseResponseResult);\n }\n\n const settlementResult = safeGetPaymentSettlement(\n toolName,\n client,\n response\n );\n\n return mcpSuccessResponse(\n parseResponseResult.value,\n settlementResult.isOk()\n ? { payment: settlementResult.value }\n : undefined\n );\n }\n );\n};\n\nfunction safeWrapFetchWithPayment(client: x402HTTPClient) {\n return async (request: Request) => {\n const clonedRequest = request.clone();\n\n const probeResult = await safeFetch(toolName, request);\n\n if (probeResult.isErr()) {\n return probeResult;\n }\n\n if (probeResult.value.status !== 402) {\n return probeResult;\n }\n\n const response = probeResult.value;\n\n const paymentRequiredResult = await safeGetPaymentRequired(\n toolName,\n client,\n response\n );\n\n if (paymentRequiredResult.isErr()) {\n return paymentRequiredResult;\n }\n\n const paymentRequired = paymentRequiredResult.value;\n\n const paymentPayloadResult = await safeCreatePaymentPayload(\n toolName,\n client,\n paymentRequired\n );\n\n if (paymentPayloadResult.isErr()) {\n return paymentPayloadResult;\n }\n\n const paymentPayload = paymentPayloadResult.value;\n\n // Encode payment header\n const paymentHeaders = client.encodePaymentSignatureHeader(paymentPayload);\n\n // Check if this is already a retry to prevent infinite loops\n if (\n clonedRequest.headers.has('PAYMENT-SIGNATURE') ||\n clonedRequest.headers.has('X-PAYMENT')\n ) {\n return x402Err(toolName, {\n cause: 'payment_already_attempted',\n message: 'Payment already attempted',\n });\n }\n\n // Add payment headers to cloned request\n for (const [key, value] of Object.entries(paymentHeaders)) {\n clonedRequest.headers.set(key, value);\n }\n clonedRequest.headers.set(\n 'Access-Control-Expose-Headers',\n 'PAYMENT-RESPONSE,X-PAYMENT-RESPONSE'\n );\n\n // Retry the request with payment\n return await safeFetch(toolName, clonedRequest);\n };\n}\n","import type { ParsedResponse } from '@/shared/neverthrow/fetch/types';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\n\nexport const parsedResponseToToolContentPart = (\n data: ParsedResponse\n): CallToolResult['content'][number] => {\n switch (data.type) {\n case 'json':\n return {\n type: 'text' as const,\n text: JSON.stringify(data.data, null, 2),\n };\n case 'image':\n return {\n type: 'image' as const,\n mimeType: data.mimeType,\n data: Buffer.from(data.data).toString('base64'),\n };\n case 'audio':\n return {\n type: 'audio' as const,\n mimeType: data.mimeType,\n data: Buffer.from(data.data).toString('base64'),\n };\n case 'text':\n return { type: 'text' as const, text: data.data };\n default:\n return {\n type: 'text' as const,\n text: `Unsupported response type: ${data.type}`,\n };\n }\n};\n","import { safeStringifyJson } from '@/shared/neverthrow/json';\n\nimport { parsedResponseToToolContentPart } from './lib';\nimport {\n fetchHttpErr,\n isFetchError,\n safeParseResponse,\n} from '@/shared/neverthrow/fetch';\n\nimport type { JsonObject } from '@/shared/neverthrow/json/types';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport type { BaseError, Err } from '@x402scan/neverthrow/types';\nimport type { BaseX402Error } from '@/shared/neverthrow/x402/types';\nimport type { BaseFetchError } from '@/shared/neverthrow/fetch/types';\n\nconst buildMcpError = (content: CallToolResult['content']): CallToolResult => {\n return {\n content,\n isError: true as const,\n };\n};\n\nexport const mcpErrorJson = (error: JsonObject): CallToolResult => {\n return safeStringifyJson('mcp-error-json', error).match(\n success => buildMcpError([{ type: 'text' as const, text: success }]),\n error =>\n buildMcpError([\n { type: 'text' as const, text: JSON.stringify(error, null, 2) },\n ])\n );\n};\n\nexport const mcpError = async (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n err: Err<any, BaseX402Error | BaseFetchError | BaseError>\n) => {\n const { error } = err;\n if (isFetchError(error)) {\n switch (error.cause) {\n case 'network':\n case 'parse':\n return mcpErrorJson({ ...error });\n case 'http':\n const { response, ...rest } = error;\n const parseResponseResult = await safeParseResponse(\n 'mcp-error-fetch-parse-response',\n response\n );\n return buildMcpError([\n { type: 'text' as const, text: JSON.stringify(rest, null, 2) },\n ...parseResponseResult.match(\n success => [parsedResponseToToolContentPart(success)],\n () => []\n ),\n ]);\n }\n }\n return mcpErrorJson({ ...error });\n};\n\nexport const mcpErrorFetch = async (surface: string, response: Response) => {\n return mcpError(fetchHttpErr(surface, response));\n};\n","import { safeStringifyJson } from '@/shared/neverthrow/json';\n\nimport { mcpErrorJson } from './error';\n\nimport type { JsonObject } from '@/shared/neverthrow/json/types';\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\nimport type { ParsedResponse } from '@/shared/neverthrow/fetch/types';\nimport { parsedResponseToToolContentPart } from './lib';\n\nconst buildMcpSuccess = (\n content: CallToolResult['content']\n): CallToolResult => {\n return {\n content,\n };\n};\n\nexport const mcpSuccessJson = (data: JsonObject): CallToolResult => {\n return safeStringifyJson('mcp-success-text', data).match(\n success => buildMcpSuccess([{ type: 'text' as const, text: success }]),\n error => mcpErrorJson(error)\n );\n};\n\nexport const mcpSuccessResponse = (\n data: ParsedResponse,\n extra?: JsonObject\n): CallToolResult => {\n const parsedExtra = extra\n ? safeStringifyJson('mcp-success-extra', extra).match(\n success => success,\n () => undefined\n )\n : undefined;\n\n return buildMcpSuccess([\n parsedResponseToToolContentPart(data),\n ...(parsedExtra ? [{ type: 'text' as const, text: parsedExtra }] : []),\n ]);\n};\n","import z from 'zod';\n\nimport type { Address } from 'viem';\n\nexport const requestSchema = z.object({\n url: z.url().describe('The endpoint URL'),\n method: z\n .enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH'])\n .default('GET')\n .describe('HTTP method'),\n body: z\n .unknown()\n .optional()\n .describe('Request body for POST/PUT/PATCH methods'),\n headers: z\n .record(z.string(), z.string())\n .optional()\n .describe('Additional headers to include')\n .default({}),\n});\n\ninterface BuildRequestProps {\n input: z.infer<typeof requestSchema>;\n address?: Address;\n sessionId?: string;\n}\n\nexport const buildRequest = ({\n input,\n address,\n sessionId,\n}: BuildRequestProps) => {\n return new Request(input.url, {\n method: input.method,\n body: input.body\n ? typeof input.body === 'string'\n ? input.body\n : JSON.stringify(input.body)\n : undefined,\n headers: {\n ...(input.body ? { 'Content-Type': 'application/json' } : {}),\n ...input.headers,\n ...(address\n ? { 'X-Wallet-Address': address, 'X-Client-ID': address }\n : {}),\n ...(sessionId ? { 'X-Session-ID': sessionId } : {}),\n },\n });\n};\n","import { getBalance } from '@/shared/balance';\nimport { getDepositLink, openDepositLink } from '@/shared/utils';\nimport { log } from '@/shared/log';\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Address } from 'viem';\nimport type { GlobalFlags } from '@/types';\n\ninterface CheckBalanceProps {\n server: McpServer;\n address: Address;\n amountNeeded: number;\n message: (balance: number) => string;\n flags: GlobalFlags;\n surface: string;\n}\n\nexport const checkBalance = async ({\n server,\n address,\n amountNeeded,\n message,\n flags,\n surface,\n}: CheckBalanceProps) => {\n const balanceResult = await getBalance({ address, flags, surface });\n\n if (balanceResult.isErr()) {\n log.error(JSON.stringify(balanceResult.error, null, 2));\n return;\n }\n\n const balance = balanceResult.value;\n\n if (balance.balance < amountNeeded) {\n const capabilities = server.server.getClientCapabilities();\n if (!capabilities?.elicitation) {\n throw new Error(\n `${message(balance.balance)}\\n\\nYou can deposit USDC at ${getDepositLink(address, flags)}`\n );\n }\n\n const result = await server.server.elicitInput({\n mode: 'form',\n message: message(balance.balance),\n requestedSchema: {\n type: 'object',\n properties: {},\n },\n });\n\n if (result.action === 'accept') {\n await openDepositLink(address, flags);\n }\n }\n\n return balance.balance;\n};\n","import { formatUnits } from 'viem';\n\nexport const tokenStringToNumber = (amount: string, decimals = 6) => {\n return Number(formatUnits(BigInt(amount), decimals));\n};\n","import {\n err,\n resultFromPromise,\n resultFromThrowable,\n} from '@x402scan/neverthrow';\nimport { createSIWxPayload } from '@x402scan/siwx';\n\nimport type { BaseX402Error } from './types';\nimport type { x402HTTPClient } from '@x402/core/http';\nimport type { PaymentRequired } from '@x402/core/types';\nimport type { SIWxExtensionInfo } from '@x402scan/siwx/types';\nimport type { PrivateKeyAccount } from 'viem';\n\nconst errorType = 'x402';\n\nexport const x402Err = (cause: string, error: BaseX402Error) =>\n err(errorType, cause, error);\n\nconst x402ResultFromPromise = <T>(\n surface: string,\n promise: Promise<T>,\n error: (e: unknown) => BaseX402Error\n) => resultFromPromise(errorType, surface, promise, error);\n\nconst x402ResultFromThrowable = <T>(\n surface: string,\n fn: () => T,\n error: (e: unknown) => BaseX402Error\n) => resultFromThrowable(errorType, surface, fn, error);\n\nexport const safeGetPaymentRequired = (\n surface: string,\n client: x402HTTPClient,\n response: Response\n) => {\n return x402ResultFromPromise(\n surface,\n response.json().then(\n json =>\n client.getPaymentRequiredResponse(\n name => response.headers.get(name),\n json\n ),\n () =>\n client.getPaymentRequiredResponse(name => response.headers.get(name))\n ),\n error => ({\n cause: 'parse_payment_required',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to parse payment required',\n })\n );\n};\n\nexport const safeCreatePaymentPayload = (\n surface: string,\n client: x402HTTPClient,\n paymentRequired: PaymentRequired\n) => {\n return x402ResultFromPromise(\n surface,\n client.createPaymentPayload(paymentRequired),\n error => ({\n cause: 'create_payment_payload',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to create payment payload',\n })\n );\n};\n\nexport const safeGetPaymentSettlement = (\n surface: string,\n client: x402HTTPClient,\n response: Response\n) => {\n return x402ResultFromThrowable(\n surface,\n () => client.getPaymentSettleResponse(name => response.headers.get(name)),\n error => ({\n cause: 'get_payment_settlement',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to get payment settlement',\n })\n );\n};\n\nexport const safeCreateSIWxPayload = (\n surface: string,\n serverInfo: SIWxExtensionInfo,\n signer: PrivateKeyAccount\n) => {\n return x402ResultFromPromise(\n surface,\n createSIWxPayload(serverInfo, signer),\n error => ({\n cause: 'create_siwx_payload',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to create SIWX payload',\n })\n );\n};\n","import { x402Client, x402HTTPClient } from '@x402/core/client';\nimport { encodeSIWxHeader } from '@x402scan/siwx';\n\nimport { safeFetch, safeParseResponse } from '@/shared/neverthrow/fetch';\nimport {\n safeCreateSIWxPayload,\n safeGetPaymentRequired,\n} from '@/shared/neverthrow/x402';\n\nimport {\n mcpErrorJson,\n mcpError,\n mcpSuccessResponse,\n mcpErrorFetch,\n} from './response';\n\nimport { requestSchema, buildRequest } from './lib/request';\n\nimport type { SIWxExtensionInfo } from '@x402scan/siwx/types';\nimport type { RegisterTools } from '@/server/types';\nimport { getSiwxExtension } from '../lib/x402-extensions';\n\nconst toolName = 'fetchWithAuth';\n\nexport const registerAuthTools: RegisterTools = ({\n server,\n account,\n sessionId,\n}) => {\n server.registerTool(\n toolName,\n {\n description:\n 'Make a request to a SIWX-protected endpoint. Handles auth flow automatically: detects SIWX requirement from 402 response, signs proof with server-provided challenge, retries.',\n inputSchema: requestSchema,\n },\n async input => {\n const httpClient = new x402HTTPClient(new x402Client());\n\n // Step 1: Make initial request\n const firstResult = await safeFetch(\n toolName,\n buildRequest({ input, address: account.address, sessionId })\n );\n\n if (firstResult.isErr()) {\n return mcpError(firstResult);\n }\n\n const firstResponse = firstResult.value;\n\n if (firstResponse.status !== 402) {\n if (!firstResponse.ok) {\n return mcpErrorFetch(toolName, firstResponse);\n }\n\n const parseResponseResult = await safeParseResponse(\n toolName,\n firstResponse\n );\n\n if (parseResponseResult.isErr()) {\n return mcpError(parseResponseResult);\n }\n\n return mcpSuccessResponse(parseResponseResult.value);\n }\n\n const getPaymentRequiredResult = await safeGetPaymentRequired(\n toolName,\n httpClient,\n firstResponse\n );\n\n if (getPaymentRequiredResult.isErr()) {\n return mcpError(getPaymentRequiredResult);\n }\n\n const paymentRequired = getPaymentRequiredResult.value;\n\n const siwxExtension = getSiwxExtension(paymentRequired.extensions);\n\n if (!siwxExtension) {\n return mcpErrorJson({\n message:\n 'Endpoint returned 402 but no sign-in-with-x extension found',\n statusCode: 402,\n extensions: Object.keys(paymentRequired.extensions ?? {}),\n hint: 'This endpoint may require payment instead of authentication. Use execute_call for paid requests.',\n });\n }\n\n const serverInfo = siwxExtension;\n\n // Validate required fields\n const requiredFields = [\n 'domain',\n 'uri',\n 'version',\n 'chainId',\n 'nonce',\n 'issuedAt',\n ];\n const missingFields = requiredFields.filter(\n f => !serverInfo[f as keyof SIWxExtensionInfo]\n );\n if (missingFields.length > 0) {\n return mcpErrorJson({\n message: 'Invalid sign-in-with-x extension: missing required fields',\n missingFields,\n receivedInfo: { ...serverInfo },\n });\n }\n\n // Step 4: Check for unsupported chain types\n if (serverInfo.chainId.startsWith('solana:')) {\n return mcpErrorJson({\n message: 'Solana authentication not supported',\n chainId: serverInfo.chainId,\n hint: 'This endpoint requires a Solana wallet. The MCP server currently only supports EVM wallets.',\n });\n }\n\n // Step 5: Create signed proof using server-provided challenge\n const payloadResult = await safeCreateSIWxPayload(\n toolName,\n serverInfo,\n account\n );\n\n if (payloadResult.isErr()) {\n return mcpError(payloadResult);\n }\n\n const siwxHeader = encodeSIWxHeader(payloadResult.value);\n\n // Step 6: Retry with SIGN-IN-WITH-X header\n const authedRequest = buildRequest({\n input,\n address: account.address,\n sessionId,\n });\n authedRequest.headers.set('SIGN-IN-WITH-X', siwxHeader);\n\n const authedResult = await safeFetch(toolName, authedRequest);\n\n if (authedResult.isErr()) {\n return mcpError(authedResult);\n }\n\n const authedResponse = authedResult.value;\n\n if (!authedResponse.ok) {\n return mcpErrorFetch(toolName, authedResponse);\n }\n\n const parseResponseResult = await safeParseResponse(\n toolName,\n authedResponse\n );\n\n if (parseResponseResult.isErr()) {\n return mcpError(parseResponseResult);\n }\n\n return mcpSuccessResponse(parseResponseResult.value, {\n authentication: {\n address: account.address,\n domain: serverInfo.domain,\n chainId: serverInfo.chainId,\n },\n });\n }\n );\n};\n","import type { PaymentRequired } from '@x402/core/types';\nimport type { DiscoveryExtension } from '@x402/extensions/bazaar';\nimport type { SIWxExtensionInfo } from '@x402scan/siwx/types';\n\nconst getBazaarExtension = (extensions: PaymentRequired['extensions']) => {\n const { bazaar } = extensions ?? {};\n\n if (!bazaar) {\n return undefined;\n }\n\n return bazaar as DiscoveryExtension;\n};\n\nexport const getInputSchema = (extensions: PaymentRequired['extensions']) =>\n getBazaarExtension(extensions)?.schema.properties.input;\n\nexport const getSiwxExtension = (extensions: PaymentRequired['extensions']) => {\n const siwx = extensions?.['sign-in-with-x'] as\n | { info?: SIWxExtensionInfo }\n | undefined;\n\n if (!siwx?.info) {\n return undefined;\n }\n\n return siwx.info;\n};\n","import { getBalance } from '@/shared/balance';\nimport { DEFAULT_NETWORK, getChainName } from '@/shared/networks';\nimport { getDepositLink } from '@/shared/utils';\n\nimport { mcpSuccessJson, mcpError } from './response';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst toolName = 'getWalletInfo';\n\nexport const registerWalletTools: RegisterTools = ({\n server,\n account: { address },\n flags,\n}) => {\n server.registerTool(\n toolName,\n {\n description:\n 'Check wallet address and USDC balance. Creates wallet if needed.',\n },\n async () => {\n const balanceResult = await getBalance({\n address,\n flags,\n surface: toolName,\n });\n\n if (balanceResult.isErr()) {\n return mcpError(balanceResult);\n }\n\n const { balance } = balanceResult.value;\n\n return mcpSuccessJson({\n address,\n network: DEFAULT_NETWORK,\n networkName: getChainName(DEFAULT_NETWORK),\n usdcBalance: balance,\n isNewWallet: balance === 0,\n depositLink: getDepositLink(address, flags),\n ...(balance < 2.5\n ? {\n message: `Your balance is low. Consider topping it up`,\n }\n : {}),\n });\n }\n );\n};\n","import { x402Client, x402HTTPClient } from '@x402/core/client';\n\nimport { safeFetch, safeParseResponse } from '@/shared/neverthrow/fetch';\n\nimport {\n mcpError,\n mcpErrorFetch,\n mcpSuccessJson,\n mcpSuccessResponse,\n} from './response';\n\nimport { log } from '@/shared/log';\nimport { tokenStringToNumber } from '@/shared/token';\nimport { safeGetPaymentRequired } from '@/shared/neverthrow/x402';\n\nimport { getInputSchema } from '../lib/x402-extensions';\nimport { requestSchema, buildRequest } from './lib/request';\n\nimport type { RegisterTools } from '@/server/types';\nimport type { JsonObject } from '@/shared/neverthrow/json/types';\n\nconst toolName = 'checkEndpointSchema';\n\nexport const registerCheckX402EndpointTool: RegisterTools = ({\n server,\n account,\n sessionId,\n}) => {\n server.registerTool(\n toolName,\n {\n description:\n 'Check if an endpoint is x402-protected and get pricing options, schema, and auth requirements (if applicable).',\n inputSchema: requestSchema,\n },\n async input => {\n log.info('Querying endpoint', input);\n\n const responseResult = await safeFetch(\n toolName,\n buildRequest({ input, address: account.address, sessionId })\n );\n\n if (responseResult.isErr()) {\n return mcpError(responseResult);\n }\n\n const response = responseResult.value;\n\n if (response.status !== 402) {\n if (!response.ok) {\n return mcpErrorFetch(toolName, response);\n }\n\n const parseResponseResult = await safeParseResponse(toolName, response);\n if (parseResponseResult.isErr()) {\n return mcpError(parseResponseResult);\n }\n return mcpSuccessResponse(parseResponseResult.value, {\n requiresPayment: false,\n });\n }\n\n const client = new x402HTTPClient(new x402Client());\n\n const paymentRequiredResult = await safeGetPaymentRequired(\n toolName,\n client,\n response\n );\n\n if (paymentRequiredResult.isErr()) {\n return mcpError(paymentRequiredResult);\n }\n\n const { resource, extensions, accepts } = paymentRequiredResult.value;\n\n return mcpSuccessJson({\n requiresPayment: true,\n statusCode: response.status,\n routeDetails: {\n ...resource,\n schema: getInputSchema(extensions) as JsonObject,\n paymentMethods: accepts.map(accept => ({\n price: tokenStringToNumber(accept.amount),\n network: accept.network,\n asset: accept.asset,\n })),\n },\n });\n }\n );\n};\n","import z from 'zod';\nimport { mcpError, mcpSuccessJson } from './response';\n\nimport { redeemInviteCode } from '@/shared/redeem-invite';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst toolName = 'redeemInvite';\n\nexport const registerRedeemInviteTool: RegisterTools = ({\n server,\n account: { address },\n flags,\n}) => {\n server.registerTool(\n toolName,\n {\n description: 'Redeem an invite code to receive USDC.',\n inputSchema: z.object({\n code: z.string().min(1).describe('The invite code'),\n }),\n },\n async ({ code }) => {\n const result = await redeemInviteCode({\n code,\n dev: flags.dev,\n address,\n surface: toolName,\n });\n\n if (result.isErr()) {\n return mcpError(result);\n }\n\n const { amount, txHash } = result.value;\n\n return mcpSuccessJson({\n redeemed: true,\n amount: `${amount} USDC`,\n txHash,\n });\n }\n );\n};\n","import z from 'zod';\n\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\n\nimport { log } from '@/shared/log';\nimport { getBaseUrl } from '@/shared/utils';\n\nimport { MCP_VERSION } from '../lib/version';\n\nimport { mcpError, mcpSuccessJson } from './response';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst toolName = 'reportError';\n\nexport const registerTelemetryTools: RegisterTools = ({\n server,\n account: { address },\n flags,\n}) => {\n server.registerTool(\n toolName,\n {\n description:\n 'EMERGENCY ONLY. Report critical MCP tool bugs. Do NOT use for normal errors (balance, network, 4xx) - those are recoverable.',\n inputSchema: z.object({\n tool: z.string().describe('MCP tool name'),\n resource: z.string().optional().describe('x402 resource URL'),\n summary: z.string().describe('1-2 sentence summary'),\n errorMessage: z.string().describe('Error message'),\n stack: z.string().optional().describe('Stack trace'),\n fullReport: z\n .string()\n .optional()\n .describe('Detailed report with context, logs, repro steps'),\n }),\n },\n async input => {\n log.info('Submitting error report', {\n tool: input.tool,\n resource: input.resource,\n summary: input.summary,\n });\n\n const telemetryResult = await safeFetchJson(\n toolName,\n new Request(`${getBaseUrl(flags.dev)}/api/telemetry`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n ...input,\n walletAddress: address,\n mcpVersion: MCP_VERSION,\n reportedAt: new Date().toISOString(),\n }),\n }),\n z.object({\n reportId: z.string(),\n })\n );\n\n if (telemetryResult.isErr()) {\n log.error('Failed to submit error report', telemetryResult.error);\n return mcpError(telemetryResult);\n }\n\n const { reportId } = telemetryResult.value;\n\n log.info('Error report submitted successfully', {\n reportId,\n });\n\n return mcpSuccessJson({\n submitted: true,\n reportId,\n message:\n 'Error report submitted successfully. The x402scan team will investigate.',\n });\n }\n );\n};\n","import { z } from 'zod';\n\nimport { log } from '@/shared/log';\nimport {\n safeFetch,\n safeFetchJson,\n safeParseResponse,\n} from '@/shared/neverthrow/fetch';\n\nimport { mcpErrorJson, mcpSuccessJson } from './response';\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n\nconst toolName = 'discoverResources';\n\nconst discoveryDocumentSchema = z.object({\n version: z.number().refine(v => v === 1, { message: 'version must be 1' }),\n resources: z.array(z.url()),\n ownershipProofs: z.array(z.string()).optional(),\n instructions: z.string().optional(),\n});\n\nexport function registerDiscoveryTools(server: McpServer): void {\n server.registerTool(\n 'discover_resources',\n {\n description: `Discover x402-protected resources on an origin. Returns a list of resource URLs.\n Use check_x402_endpoint separately to get detailed pricing/schema info for specific resources.\n\n Known default origins with resource packs. Discover if more needed:\n - https://enrichx402.com ->\n People + Org search\n Google Maps (places + locations)\n Grok twitter search\n Exa web search\n Clado linkedin data\n Firecrawl web scrape\n - https://stablestudio.io -> generate images / videos\n `,\n inputSchema: {\n url: z\n .url()\n .describe(\n 'The origin URL or any URL on the origin to discover resources from'\n ),\n },\n },\n async ({ url }) => {\n const origin = URL.canParse(url) ? new URL(url).origin : url;\n const hostname = URL.canParse(origin) ? new URL(origin).hostname : origin;\n log.info(`Discovering resources for origin: ${origin}`);\n\n // ============================================================\n // Step 1: Try .well-known/x402\n // ============================================================\n const wellKnownUrl = `${origin}/.well-known/x402`;\n log.debug(`Fetching discovery document from: ${wellKnownUrl}`);\n\n const wellKnownResult = await safeFetchJson(\n toolName,\n new Request(wellKnownUrl, { headers: { Accept: 'application/json' } }),\n discoveryDocumentSchema\n );\n\n if (wellKnownResult.isOk()) {\n return mcpSuccessJson({\n found: true,\n origin,\n source: 'well-known',\n data: wellKnownResult.value,\n });\n } else {\n log.info(\n `No well-known x402 discovery document found at ${wellKnownUrl}`\n );\n }\n\n // ============================================================\n // Step 2: Try DNS TXT record _x402.hostname\n // ============================================================\n const dnsQuery = `_x402.${hostname}`;\n log.debug(`Looking up DNS TXT record: ${dnsQuery}`);\n\n const dnsResult = await safeFetchJson(\n toolName,\n new Request(\n `https://cloudflare-dns.com/dns-query?name=${encodeURIComponent(dnsQuery)}&type=TXT`,\n { headers: { Accept: 'application/dns-json' } }\n ),\n z.object({\n Answer: z\n .array(\n z.object({\n data: z.string(),\n })\n )\n .optional(),\n })\n );\n\n if (\n dnsResult.isOk() &&\n dnsResult.value.Answer &&\n dnsResult.value.Answer.length > 0\n ) {\n const dnsUrl = dnsResult.value.Answer[0]!.data.replace(/^\"|\"$/g, '');\n if (URL.canParse(dnsUrl)) {\n const dnsDocResult = await safeFetchJson(\n toolName,\n new Request(dnsUrl, { headers: { Accept: 'application/json' } }),\n discoveryDocumentSchema\n );\n\n if (dnsDocResult.isOk()) {\n const parsed = discoveryDocumentSchema.safeParse(\n dnsDocResult.value\n );\n\n if (parsed.success) {\n return mcpSuccessJson({\n found: true,\n origin,\n source: 'dns-txt',\n data: parsed.data,\n });\n }\n }\n } else {\n log.debug(`DNS TXT value is not a valid URL: ${dnsUrl}`);\n }\n } else {\n log.info(`No DNS TXT record found for ${dnsQuery}`);\n }\n\n // ============================================================\n // Step 3: Try llms.txt as last resort\n // ============================================================\n const llmsTxtUrl = `${origin}/llms.txt`;\n log.debug(`Fetching llms.txt from: ${llmsTxtUrl}`);\n\n const llmsResult = await safeFetch(\n toolName,\n new Request(llmsTxtUrl, { headers: { Accept: 'text/plain' } })\n );\n\n if (llmsResult.isOk()) {\n const parseResult = await safeParseResponse(toolName, llmsResult.value);\n if (parseResult.isOk() && parseResult.value.type === 'text') {\n return mcpSuccessJson({\n found: true,\n origin,\n source: 'llms-txt',\n usage:\n 'Found llms.txt but no structured x402 discovery document. The content below may contain information about x402 resources. Parse it to find relevant endpoints.',\n data: parseResult.value,\n });\n }\n }\n\n return mcpErrorJson({\n found: false,\n origin,\n error:\n 'No discovery document found. Tried: .well-known/x402, DNS TXT record, llms.txt',\n });\n }\n );\n}\n","import { x402HTTPClient } from '@x402/core/client';\nimport { x402Client } from '@x402/core/client';\n\nimport { getWebPageMetadata } from './_lib';\n\nimport { getInputSchema } from '../lib/x402-extensions';\n\nimport type { RegisterResources } from './types';\n\nconst origins = ['enrichx402.com'];\n\nexport const registerOrigins: RegisterResources = async ({ server }) => {\n await Promise.all(\n origins.map(async origin => {\n const metadataResult = await getWebPageMetadata(`https://${origin}`);\n const metadata = metadataResult.isOk() ? metadataResult.value : null;\n server.registerResource(\n origin,\n `api://${origin}`,\n {\n title: metadata?.title ?? origin,\n description: metadata?.description ?? '',\n mimeType: 'application/json',\n },\n async uri => {\n const response = (await fetch(\n `${uri.toString().replace('api://', 'https://')}/.well-known/x402`\n ).then(response => response.json())) as { resources: string[] };\n const resources = await Promise.all(\n response.resources.map(async resource => {\n const resourceResponse = await getResourceResponse(\n resource,\n await fetch(resource, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n })\n );\n if (resourceResponse) {\n return resourceResponse;\n }\n const getResponse = await getResourceResponse(\n resource,\n await fetch(resource, {\n method: 'GET',\n })\n );\n if (getResponse) {\n return getResponse;\n }\n console.error(`Failed to get resource response for ${resource}`);\n return null;\n })\n );\n return {\n contents: [\n {\n uri: origin,\n text: JSON.stringify({\n server: origin,\n name: metadata?.title,\n description: metadata?.description,\n resources: resources.filter(Boolean).map(resource => {\n if (!resource) return null;\n const schema = getInputSchema(\n resource.paymentRequired?.extensions\n );\n\n return {\n url: resource.resource,\n schema,\n mimeType: resource.paymentRequired.resource.mimeType,\n };\n }),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n );\n })\n );\n};\n\nconst getResourceResponse = async (resource: string, response: Response) => {\n const client = new x402HTTPClient(new x402Client());\n if (response.status === 402) {\n const paymentRequired = client.getPaymentRequiredResponse(\n name => response.headers.get(name),\n JSON.parse(await response.text())\n );\n return {\n paymentRequired,\n resource,\n };\n }\n return null;\n};\n","import { err, ok } from '@x402scan/neverthrow';\nimport { safeFetch, safeParseResponse } from '@/shared/neverthrow/fetch';\n\nconst surface = 'getWebPageMetadata';\n\ninterface WebPageMetadata {\n title: string | null;\n description: string | null;\n}\n\nexport const getWebPageMetadata = (url: string) => {\n return safeFetch(surface, new Request(url))\n .andThen(response => safeParseResponse(surface, response))\n .andThen(parsedResponse => {\n if (parsedResponse.type === 'text') {\n return ok(parseMetadataFromResponse(parsedResponse.data));\n }\n return err('user', surface, {\n cause: 'invalid_response_type',\n message: 'Invalid response type',\n });\n });\n};\n\nconst parseMetadataFromResponse = (html: string): WebPageMetadata => {\n // Extract title\n const titleMatch = /<title[^>]*>([\\s\\S]*?)<\\/title>/i.exec(html);\n const title = titleMatch ? titleMatch[1]!.trim().replace(/\\s+/g, ' ') : null;\n\n // Extract description from meta tags\n // Try standard meta description first\n let descriptionMatch =\n /<meta\\s+name=[\"']description[\"']\\s+content=[\"']([^\"']*)[\"']/i.exec(html);\n\n // If not found, try og:description\n descriptionMatch ??=\n /<meta\\s+property=[\"']og:description[\"']\\s+content=[\"']([^\"']*)[\"']/i.exec(\n html\n );\n\n // Also check for reversed attribute order\n descriptionMatch ??=\n /<meta\\s+content=[\"']([^\"']*)[\"']\\s+name=[\"']description[\"']/i.exec(html);\n\n descriptionMatch ??=\n /<meta\\s+content=[\"']([^\"']*)[\"']\\s+property=[\"']og:description[\"']/i.exec(\n html\n );\n\n const description = descriptionMatch\n ? descriptionMatch[1]!.trim().replace(/\\s+/g, ' ')\n : null;\n\n return {\n title,\n description,\n };\n};\n"],"mappings":"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","names":["error","err","surface","surface","surface","x402Client","x402HTTPClient","toolName","x402HTTPClient","x402Client","parseResponseResult","toolName","x402Client","x402HTTPClient","toolName","x402HTTPClient","x402Client","z","toolName","z","z","toolName","z","z","toolName","z","x402HTTPClient","x402Client","response","x402HTTPClient","x402Client"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@x402scan/mcp",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8-beta.0",
|
|
4
4
|
"description": "Generic MCP server for calling x402-protected APIs with automatic payment handling",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/esm/index.js",
|
|
@@ -26,18 +26,20 @@
|
|
|
26
26
|
"@x402scan/siwx": "0.0.1"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
+
"@anthropic-ai/claude-agent-sdk": "^0.2.17",
|
|
29
30
|
"@types/js-yaml": "^4.0.9",
|
|
30
31
|
"@types/node": "^20.19.27",
|
|
31
32
|
"@types/yargs": "^17.0.35",
|
|
32
33
|
"@x402/extensions": "^2.2.0",
|
|
33
34
|
"eslint": "^9.39.2",
|
|
35
|
+
"promptfoo": "^0.120.17",
|
|
34
36
|
"tsup": "^8.5.1",
|
|
35
37
|
"tsx": "^4.21.0",
|
|
36
38
|
"typescript": "^5.9.3",
|
|
37
39
|
"vitest": "^4.0.16",
|
|
38
|
-
"@x402scan/
|
|
40
|
+
"@x402scan/neverthrow": "1.0.0",
|
|
39
41
|
"@x402scan/typescript-config": "0.0.0",
|
|
40
|
-
"@x402scan/
|
|
42
|
+
"@x402scan/eslint-config": "0.0.0"
|
|
41
43
|
},
|
|
42
44
|
"engines": {
|
|
43
45
|
"node": ">=20"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server/lib/version.ts","../../src/shared/balance.ts"],"sourcesContent":["import { readFileSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { fileURLToPath } from 'url';\n\ndeclare const __MCP_VERSION__: string | undefined;\n\nfunction getVersion(): string {\n if (typeof __MCP_VERSION__ !== 'undefined') {\n return __MCP_VERSION__;\n }\n // Fallback for dev mode (tsx)\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const pkg = JSON.parse(\n readFileSync(join(__dirname, '../../../package.json'), 'utf-8')\n ) as { version: string };\n return pkg.version;\n}\n\nexport const MCP_VERSION = getVersion();\n\nexport const DIST_TAG = MCP_VERSION.includes('-beta') ? 'beta' : 'latest';\n","import { getBaseUrl } from '@/shared/utils';\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\n\nimport type { Address } from 'viem';\nimport type { GlobalFlags } from '@/types';\n\ninterface BalanceApiResponse {\n chain: number;\n balance: number;\n}\n\ninterface GetBalanceProps {\n address: Address;\n flags: GlobalFlags;\n surface: string;\n}\n\nexport const getBalance = async ({\n address,\n flags,\n surface,\n}: GetBalanceProps) => {\n const url = `${getBaseUrl(flags.dev)}/api/rpc/balance/${address}`;\n\n const res = await safeFetchJson<BalanceApiResponse>(\n surface,\n new Request(url, {\n method: 'GET',\n headers: {\n accept: 'application/json',\n },\n })\n );\n\n return res;\n};\n"],"mappings":";;;;;;AAAA,SAAS,oBAAoB;AAC7B,SAAS,SAAS,YAAY;AAC9B,SAAS,qBAAqB;AAI9B,SAAS,aAAqB;AAC5B,MAAI,MAAwC;AAC1C,WAAO;AAAA,EACT;AAEA,QAAMA,aAAY,QAAQ,cAAc,YAAY,GAAG,CAAC;AACxD,QAAM,MAAM,KAAK;AAAA,IACf,aAAa,KAAKA,YAAW,uBAAuB,GAAG,OAAO;AAAA,EAChE;AACA,SAAO,IAAI;AACb;AAEO,IAAM,cAAc,WAAW;AAE/B,IAAM,WAAW,YAAY,SAAS,OAAO,IAAI,SAAS;;;ACH1D,IAAM,aAAa,OAAO;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AACF,MAAuB;AACrB,QAAM,MAAM,GAAG,WAAW,MAAM,GAAG,CAAC,oBAAoB,OAAO;AAE/D,QAAM,MAAM,MAAM;AAAA,IAChB;AAAA,IACA,IAAI,QAAQ,KAAK;AAAA,MACf,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,QAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":["__dirname"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/shared/neverthrow/fs/index.ts","../../../../../node_modules/.pnpm/neverthrow@8.2.0/node_modules/neverthrow/dist/index.es.js","../../../../internal/neverthrow/src/index.ts","../../src/shared/fs.ts","../../src/shared/log.ts","../../src/shared/neverthrow/fetch/index.ts","../../src/shared/utils.ts","../../src/shared/state.ts","../../src/shared/redeem-invite.ts","../../src/shared/wallet.ts","../../src/shared/neverthrow/json/index.ts","../../src/shared/neverthrow/parse/index.ts","../../src/shared/networks.ts"],"sourcesContent":["import * as fs from 'fs/promises';\nimport { existsSync } from 'fs';\n\nimport { err, ok, resultFromPromise } from '@x402scan/neverthrow';\n\nimport type { BaseFileSystemError } from './types';\n\nconst errorType = 'fs';\n\nexport const fsErr = (surface: string, error: BaseFileSystemError) =>\n err(errorType, surface, error);\n\nconst fsResultFromPromise = <T>(\n surface: string,\n promise: Promise<T>,\n error: (e: unknown) => BaseFileSystemError\n) => resultFromPromise(errorType, surface, promise, error);\n\nexport const safeReadFile = (surface: string, path: string) =>\n fsResultFromPromise(surface, fs.readFile(path, 'utf-8'), () => ({\n cause: 'file_not_readable',\n message: 'Failed to read file',\n }));\n\nexport const safeWriteFile = (surface: string, path: string, data: string) =>\n fsResultFromPromise(surface, fs.writeFile(path, data), () => ({\n cause: 'file_not_writable',\n message: 'Failed to write file',\n }));\n\nexport const safeAppendFile = (surface: string, path: string, data: string) =>\n fsResultFromPromise(surface, fs.appendFile(path, data), () => ({\n cause: 'file_not_writable',\n message: 'Failed to append file',\n }));\n\nexport const safeChmod = (surface: string, path: string, mode: number) =>\n fsResultFromPromise(surface, fs.chmod(path, mode), () => ({\n cause: 'file_not_chmodable',\n message: 'Failed to chmod file',\n }));\n\nexport const safeFileExists = (surface: string, path: string) => {\n const fileExists = existsSync(path);\n if (fileExists) {\n return ok(true);\n }\n return err(errorType, surface, {\n cause: 'file_not_found',\n message: 'File not found',\n });\n};\n","const defaultErrorConfig = {\r\n withStackTrace: false,\r\n};\r\n// Custom error object\r\n// Context / discussion: https://github.com/supermacro/neverthrow/pull/215\r\nconst createNeverThrowError = (message, result, config = defaultErrorConfig) => {\r\n const data = result.isOk()\r\n ? { type: 'Ok', value: result.value }\r\n : { type: 'Err', value: result.error };\r\n const maybeStack = config.withStackTrace ? new Error().stack : undefined;\r\n return {\r\n data,\r\n message,\r\n stack: maybeStack,\r\n };\r\n};\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nfunction __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nfunction __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nfunction __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nfunction __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nclass ResultAsync {\r\n constructor(res) {\r\n this._promise = res;\r\n }\r\n static fromSafePromise(promise) {\r\n const newPromise = promise.then((value) => new Ok(value));\r\n return new ResultAsync(newPromise);\r\n }\r\n static fromPromise(promise, errorFn) {\r\n const newPromise = promise\r\n .then((value) => new Ok(value))\r\n .catch((e) => new Err(errorFn(e)));\r\n return new ResultAsync(newPromise);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n static fromThrowable(fn, errorFn) {\r\n return (...args) => {\r\n return new ResultAsync((() => __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n return new Ok(yield fn(...args));\r\n }\r\n catch (error) {\r\n return new Err(errorFn ? errorFn(error) : error);\r\n }\r\n }))());\r\n };\r\n }\r\n static combine(asyncResultList) {\r\n return combineResultAsyncList(asyncResultList);\r\n }\r\n static combineWithAllErrors(asyncResultList) {\r\n return combineResultAsyncListWithAllErrors(asyncResultList);\r\n }\r\n map(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isErr()) {\r\n return new Err(res.error);\r\n }\r\n return new Ok(yield f(res.value));\r\n })));\r\n }\r\n andThrough(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isErr()) {\r\n return new Err(res.error);\r\n }\r\n const newRes = yield f(res.value);\r\n if (newRes.isErr()) {\r\n return new Err(newRes.error);\r\n }\r\n return new Ok(res.value);\r\n })));\r\n }\r\n andTee(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isErr()) {\r\n return new Err(res.error);\r\n }\r\n try {\r\n yield f(res.value);\r\n }\r\n catch (e) {\r\n // Tee does not care about the error\r\n }\r\n return new Ok(res.value);\r\n })));\r\n }\r\n orTee(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isOk()) {\r\n return new Ok(res.value);\r\n }\r\n try {\r\n yield f(res.error);\r\n }\r\n catch (e) {\r\n // Tee does not care about the error\r\n }\r\n return new Err(res.error);\r\n })));\r\n }\r\n mapErr(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isOk()) {\r\n return new Ok(res.value);\r\n }\r\n return new Err(yield f(res.error));\r\n })));\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n andThen(f) {\r\n return new ResultAsync(this._promise.then((res) => {\r\n if (res.isErr()) {\r\n return new Err(res.error);\r\n }\r\n const newValue = f(res.value);\r\n return newValue instanceof ResultAsync ? newValue._promise : newValue;\r\n }));\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n orElse(f) {\r\n return new ResultAsync(this._promise.then((res) => __awaiter(this, void 0, void 0, function* () {\r\n if (res.isErr()) {\r\n return f(res.error);\r\n }\r\n return new Ok(res.value);\r\n })));\r\n }\r\n match(ok, _err) {\r\n return this._promise.then((res) => res.match(ok, _err));\r\n }\r\n unwrapOr(t) {\r\n return this._promise.then((res) => res.unwrapOr(t));\r\n }\r\n /**\r\n * @deprecated will be removed in 9.0.0.\r\n *\r\n * You can use `safeTry` without this method.\r\n * @example\r\n * ```typescript\r\n * safeTry(async function* () {\r\n * const okValue = yield* yourResult\r\n * })\r\n * ```\r\n * Emulates Rust's `?` operator in `safeTry`'s body. See also `safeTry`.\r\n */\r\n safeUnwrap() {\r\n return __asyncGenerator(this, arguments, function* safeUnwrap_1() {\r\n return yield __await(yield __await(yield* __asyncDelegator(__asyncValues(yield __await(this._promise.then((res) => res.safeUnwrap()))))));\r\n });\r\n }\r\n // Makes ResultAsync implement PromiseLike<Result>\r\n then(successCallback, failureCallback) {\r\n return this._promise.then(successCallback, failureCallback);\r\n }\r\n [Symbol.asyncIterator]() {\r\n return __asyncGenerator(this, arguments, function* _a() {\r\n const result = yield __await(this._promise);\r\n if (result.isErr()) {\r\n // @ts-expect-error -- This is structurally equivalent and safe\r\n yield yield __await(errAsync(result.error));\r\n }\r\n // @ts-expect-error -- This is structurally equivalent and safe\r\n return yield __await(result.value);\r\n });\r\n }\r\n}\r\nfunction okAsync(value) {\r\n return new ResultAsync(Promise.resolve(new Ok(value)));\r\n}\r\nfunction errAsync(err) {\r\n return new ResultAsync(Promise.resolve(new Err(err)));\r\n}\r\nconst fromPromise = ResultAsync.fromPromise;\r\nconst fromSafePromise = ResultAsync.fromSafePromise;\r\nconst fromAsyncThrowable = ResultAsync.fromThrowable;\n\n/**\r\n * Short circuits on the FIRST Err value that we find\r\n */\r\nconst combineResultList = (resultList) => {\r\n let acc = ok([]);\r\n for (const result of resultList) {\r\n if (result.isErr()) {\r\n acc = err(result.error);\r\n break;\r\n }\r\n else {\r\n acc.map((list) => list.push(result.value));\r\n }\r\n }\r\n return acc;\r\n};\r\n/* This is the typesafe version of Promise.all\r\n *\r\n * Takes a list of ResultAsync<T, E> and success if all inner results are Ok values\r\n * or fails if one (or more) of the inner results are Err values\r\n */\r\nconst combineResultAsyncList = (asyncResultList) => ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(combineResultList);\r\n/**\r\n * Give a list of all the errors we find\r\n */\r\nconst combineResultListWithAllErrors = (resultList) => {\r\n let acc = ok([]);\r\n for (const result of resultList) {\r\n if (result.isErr() && acc.isErr()) {\r\n acc.error.push(result.error);\r\n }\r\n else if (result.isErr() && acc.isOk()) {\r\n acc = err([result.error]);\r\n }\r\n else if (result.isOk() && acc.isOk()) {\r\n acc.value.push(result.value);\r\n }\r\n // do nothing when result.isOk() && acc.isErr()\r\n }\r\n return acc;\r\n};\r\nconst combineResultAsyncListWithAllErrors = (asyncResultList) => ResultAsync.fromSafePromise(Promise.all(asyncResultList)).andThen(combineResultListWithAllErrors);\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\r\nvar Result;\r\n(function (Result) {\r\n /**\r\n * Wraps a function with a try catch, creating a new function with the same\r\n * arguments but returning `Ok` if successful, `Err` if the function throws\r\n *\r\n * @param fn function to wrap with ok on success or err on failure\r\n * @param errorFn when an error is thrown, this will wrap the error result if provided\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n function fromThrowable(fn, errorFn) {\r\n return (...args) => {\r\n try {\r\n const result = fn(...args);\r\n return ok(result);\r\n }\r\n catch (e) {\r\n return err(errorFn ? errorFn(e) : e);\r\n }\r\n };\r\n }\r\n Result.fromThrowable = fromThrowable;\r\n function combine(resultList) {\r\n return combineResultList(resultList);\r\n }\r\n Result.combine = combine;\r\n function combineWithAllErrors(resultList) {\r\n return combineResultListWithAllErrors(resultList);\r\n }\r\n Result.combineWithAllErrors = combineWithAllErrors;\r\n})(Result || (Result = {}));\r\nfunction ok(value) {\r\n return new Ok(value);\r\n}\r\nfunction err(err) {\r\n return new Err(err);\r\n}\r\nfunction safeTry(body) {\r\n const n = body().next();\r\n if (n instanceof Promise) {\r\n return new ResultAsync(n.then((r) => r.value));\r\n }\r\n return n.value;\r\n}\r\nclass Ok {\r\n constructor(value) {\r\n this.value = value;\r\n }\r\n isOk() {\r\n return true;\r\n }\r\n isErr() {\r\n return !this.isOk();\r\n }\r\n map(f) {\r\n return ok(f(this.value));\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n mapErr(_f) {\r\n return ok(this.value);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n andThen(f) {\r\n return f(this.value);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n andThrough(f) {\r\n return f(this.value).map((_value) => this.value);\r\n }\r\n andTee(f) {\r\n try {\r\n f(this.value);\r\n }\r\n catch (e) {\r\n // Tee doesn't care about the error\r\n }\r\n return ok(this.value);\r\n }\r\n orTee(_f) {\r\n return ok(this.value);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n orElse(_f) {\r\n return ok(this.value);\r\n }\r\n asyncAndThen(f) {\r\n return f(this.value);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n asyncAndThrough(f) {\r\n return f(this.value).map(() => this.value);\r\n }\r\n asyncMap(f) {\r\n return ResultAsync.fromSafePromise(f(this.value));\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n unwrapOr(_v) {\r\n return this.value;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n match(ok, _err) {\r\n return ok(this.value);\r\n }\r\n safeUnwrap() {\r\n const value = this.value;\r\n /* eslint-disable-next-line require-yield */\r\n return (function* () {\r\n return value;\r\n })();\r\n }\r\n _unsafeUnwrap(_) {\r\n return this.value;\r\n }\r\n _unsafeUnwrapErr(config) {\r\n throw createNeverThrowError('Called `_unsafeUnwrapErr` on an Ok', this, config);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias, require-yield\r\n *[Symbol.iterator]() {\r\n return this.value;\r\n }\r\n}\r\nclass Err {\r\n constructor(error) {\r\n this.error = error;\r\n }\r\n isOk() {\r\n return false;\r\n }\r\n isErr() {\r\n return !this.isOk();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n map(_f) {\r\n return err(this.error);\r\n }\r\n mapErr(f) {\r\n return err(f(this.error));\r\n }\r\n andThrough(_f) {\r\n return err(this.error);\r\n }\r\n andTee(_f) {\r\n return err(this.error);\r\n }\r\n orTee(f) {\r\n try {\r\n f(this.error);\r\n }\r\n catch (e) {\r\n // Tee doesn't care about the error\r\n }\r\n return err(this.error);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n andThen(_f) {\r\n return err(this.error);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\r\n orElse(f) {\r\n return f(this.error);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n asyncAndThen(_f) {\r\n return errAsync(this.error);\r\n }\r\n asyncAndThrough(_f) {\r\n return errAsync(this.error);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n asyncMap(_f) {\r\n return errAsync(this.error);\r\n }\r\n unwrapOr(v) {\r\n return v;\r\n }\r\n match(_ok, err) {\r\n return err(this.error);\r\n }\r\n safeUnwrap() {\r\n const error = this.error;\r\n return (function* () {\r\n yield err(error);\r\n throw new Error('Do not use this generator out of `safeTry`');\r\n })();\r\n }\r\n _unsafeUnwrap(config) {\r\n throw createNeverThrowError('Called `_unsafeUnwrap` on an Err', this, config);\r\n }\r\n _unsafeUnwrapErr(_) {\r\n return this.error;\r\n }\r\n *[Symbol.iterator]() {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const self = this;\r\n // @ts-expect-error -- This is structurally equivalent and safe\r\n yield self;\r\n // @ts-expect-error -- This is structurally equivalent and safe\r\n return self;\r\n }\r\n}\r\nconst fromThrowable = Result.fromThrowable;\r\n//#endregion\n\nexport { Err, Ok, Result, ResultAsync, err, errAsync, fromAsyncThrowable, fromPromise, fromSafePromise, fromThrowable, ok, okAsync, safeTry };\n","import {\n ResultAsync as NeverthrowResultAsync,\n Result as NeverthrowResult,\n ok as neverthrowOk,\n err as neverthrowErr,\n okAsync as neverthrowOkAsync,\n errAsync as neverthrowErrAsync,\n} from 'neverthrow';\n\nimport type { ResultAsync, BaseError, Error, Result } from './types';\n\nexport function resultFromPromise<E extends BaseError, T = unknown>(\n type: string,\n surface: string,\n promise: Promise<T>,\n error: (e: unknown) => E\n): ResultAsync<T, E> {\n return NeverthrowResultAsync.fromPromise(promise, e => ({\n ...error(e),\n type,\n surface,\n }));\n}\n\nexport function resultFromThrowable<E extends BaseError, T = unknown>(\n type: string,\n surface: string,\n fn: () => T,\n error: (e: unknown) => E\n): Result<T, E> {\n return NeverthrowResult.fromThrowable(fn, e => ({\n ...error(e),\n type,\n surface,\n }))();\n}\n\nexport function resultFromSafePromise<E extends BaseError, T = unknown>(\n promise: Promise<T>\n): ResultAsync<T, E> {\n return NeverthrowResultAsync.fromSafePromise(promise);\n}\n\nexport function ok<T>(data: T) {\n return neverthrowOk(data);\n}\n\nexport function err<BE extends BaseError>(\n type: string,\n surface: string,\n error: BE\n) {\n return neverthrowErr<never, Error<BE>>({\n ...error,\n type,\n surface,\n });\n}\n\nexport function okAsync<T>(data: T): ResultAsync<T, never> {\n return neverthrowOkAsync(data);\n}\n\nexport function errAsync<E extends BaseError>(surface: string, error: E) {\n return neverthrowErrAsync({\n ...error,\n surface,\n });\n}\n","import { join } from 'path';\nimport { homedir } from 'os';\nimport * as fs from 'fs';\n\nconst BASE_DIRECTORY = join(homedir(), '.x402scan-mcp');\n\nif (!fs.existsSync(BASE_DIRECTORY)) {\n fs.mkdirSync(BASE_DIRECTORY, { recursive: true });\n}\n\nexport const configFile = (\n name: `${string}.${string}`,\n defaultValue: string\n) => {\n if (!fs.existsSync(BASE_DIRECTORY)) {\n fs.mkdirSync(BASE_DIRECTORY, { recursive: true });\n }\n const filePath = join(BASE_DIRECTORY, name);\n if (!fs.existsSync(filePath)) {\n fs.writeFileSync(filePath, defaultValue);\n }\n return filePath;\n};\n","import { safeAppendFile } from '@/shared/neverthrow/fs';\n\nimport { configFile } from './fs';\n\nconst LOG_FILE = configFile('mcp.log', '');\nconst DEBUG = process.env.X402_DEBUG === 'true';\n\nfunction format(args: unknown[]): string {\n return args\n .map(a =>\n typeof a === 'object' && a !== null ? JSON.stringify(a) : String(a)\n )\n .join(' ');\n}\n\nfunction write(level: string, msg: string, args: unknown[]): void {\n const formatted = args.length ? `${msg} ${format(args)}` : msg;\n const line = `[${new Date().toISOString()}] [${level}] ${formatted}\\n`;\n safeAppendFile('log', LOG_FILE, line);\n if (process.env.X402_DEBUG === 'true') {\n console.error(`[x402scan] ${formatted}`);\n }\n}\n\nexport const log = {\n info: (msg: string, ...args: unknown[]) => write('INFO', msg, args),\n error: (msg: string, ...args: unknown[]) => write('ERROR', msg, args),\n debug: (msg: string, ...args: unknown[]) =>\n DEBUG && write('DEBUG', msg, args),\n path: LOG_FILE,\n};\n","import { err, resultFromPromise } from '@x402scan/neverthrow';\n\nimport type { BaseError, Error } from '@x402scan/neverthrow/types';\nimport type { BaseFetchError, FetchError, ParsedResponse } from './types';\nimport type { JsonObject } from '../json/types';\n\nconst errorType = 'fetch';\n\nconst fetchErr = (surface: string, error: BaseFetchError) =>\n err(errorType, surface, error);\nexport const fetchHttpErr = (surface: string, response: Response) =>\n fetchErr(surface, {\n cause: 'http' as const,\n statusCode: response.status,\n message: response.statusText,\n response,\n });\n\nexport const safeFetch = (surface: string, request: Request) => {\n return resultFromPromise(\n errorType,\n surface,\n fetch(request),\n error =>\n ({\n cause: 'network',\n message: error instanceof Error ? error.message : 'Network error',\n }) as BaseFetchError\n );\n};\n\nexport const safeFetchJson = <T>(surface: string, request: Request) => {\n return safeFetch(surface, request).andThen(response => {\n if (!response.ok) {\n return fetchHttpErr(surface, response);\n }\n\n return resultFromPromise(\n errorType,\n surface,\n response.json() as Promise<T>,\n () => ({\n cause: 'parse' as const,\n message: 'Could not parse JSON from response',\n statusCode: response.status,\n contentType: response.headers.get('content-type') ?? 'Not specified',\n })\n );\n });\n};\n\nexport const safeParseResponse = (surface: string, response: Response) => {\n return resultFromPromise(\n errorType,\n surface,\n (async (): Promise<ParsedResponse> => {\n const contentType = response.headers.get('content-type') ?? '';\n\n switch (contentType) {\n case 'application/json':\n return {\n type: 'json' as const,\n data: (await response.json()) as JsonObject,\n };\n case 'image/png':\n case 'image/jpeg':\n case 'image/gif':\n case 'image/webp':\n case 'image/svg+xml':\n case 'image/tiff':\n case 'image/bmp':\n case 'image/ico':\n return {\n type: 'image' as const,\n mimeType: contentType,\n data: await response.arrayBuffer(),\n };\n case 'audio/':\n return {\n type: 'audio' as const,\n mimeType: contentType,\n data: await response.arrayBuffer(),\n };\n case 'video/':\n return {\n type: 'video' as const,\n mimeType: contentType,\n data: await response.arrayBuffer(),\n };\n case 'application/pdf':\n return {\n type: 'pdf' as const,\n mimeType: contentType,\n data: await response.arrayBuffer(),\n };\n case 'application/octet-stream':\n return {\n type: 'octet-stream' as const,\n mimeType: contentType,\n data: await response.arrayBuffer(),\n };\n case 'multipart/form-data':\n return { type: 'formData' as const, data: await response.formData() };\n case 'text/':\n return { type: 'text' as const, data: await response.text() };\n default:\n throw new Error(`Unsupported content type: ${contentType}`);\n }\n })(),\n e => ({\n cause: 'parse' as const,\n message: e instanceof Error ? e.message : 'Could not parse response',\n statusCode: response.status,\n contentType: response.headers.get('content-type') ?? 'Not specified',\n })\n );\n};\n\nexport const isFetchError = (error: Error<BaseError>): error is FetchError => {\n return error.type === errorType;\n};\n","import open from 'open';\n\nimport type { GlobalFlags } from '@/types';\n\nexport const getBaseUrl = (dev: boolean) => {\n return dev ? 'http://localhost:3000' : 'https://x402scan.com';\n};\n\nexport const getDepositLink = (address: string, flags: GlobalFlags) => {\n return `${getBaseUrl(flags.dev)}/mcp/deposit/${address}`;\n};\n\nexport const openDepositLink = async (address: string, flags: GlobalFlags) => {\n const depositLink = getDepositLink(address, flags);\n await open(depositLink);\n};\n","import z from 'zod';\nimport fs from 'fs';\n\nimport { configFile } from './fs';\nimport { log } from './log';\n\nconst STATE_FILE = configFile('state.json', '{}');\n\nconst stateSchema = z\n .looseObject({\n redeemedCodes: z.array(z.string()),\n })\n .partial();\n\nexport const getState = () => {\n const result = stateSchema.safeParse(\n JSON.parse(fs.readFileSync(STATE_FILE, 'utf-8'))\n );\n if (!result.success) {\n log.error('Failed to parse state', { error: result.error });\n return {};\n }\n return result.data;\n};\n\nexport const setState = (state: z.infer<typeof stateSchema>) => {\n const existing = getState();\n const newState = stateSchema.parse({ ...existing, ...state });\n fs.writeFileSync(STATE_FILE, JSON.stringify(newState, null, 2));\n};\n","import { safeFetchJson } from '@/shared/neverthrow/fetch';\nimport { err } from '@x402scan/neverthrow';\n\nimport { getBaseUrl } from './utils';\nimport { getState, setState } from './state';\n\nimport type { Address } from 'viem';\n\nexport interface RedeemInviteProps {\n code: string;\n dev: boolean;\n address: Address;\n surface: string;\n}\n\ninterface RedeemResponse {\n redemptionId: string;\n txHash: string;\n amount: string;\n}\n\nexport const redeemInviteCode = async ({\n code,\n dev,\n address,\n surface,\n}: RedeemInviteProps) => {\n const state = getState();\n\n if (state.redeemedCodes?.includes(code)) {\n return err('user', surface, {\n cause: 'conflict',\n message: 'This invite code has already been redeemed',\n });\n }\n\n const result = await safeFetchJson<RedeemResponse>(\n surface,\n new Request(`${getBaseUrl(dev)}/api/invite/redeem`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n code,\n recipientAddr: address,\n }),\n })\n );\n\n if (result.isOk()) {\n setState({\n redeemedCodes: [...(state.redeemedCodes ?? []), code],\n });\n }\n\n return result;\n};\n","import { getAddress } from 'viem';\nimport { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';\n\nimport z from 'zod';\n\nimport { ok } from '@x402scan/neverthrow';\nimport {\n fsErr,\n safeChmod,\n safeFileExists,\n safeReadFile,\n safeWriteFile,\n} from '@/shared/neverthrow/fs';\nimport { jsonErr, safeParseJson } from '@/shared/neverthrow/json';\nimport { safeParse } from '@/shared/neverthrow/parse';\n\nimport { log } from './log';\nimport { configFile } from './fs';\n\nimport type { Hex } from 'viem';\n\nconst WALLET_FILE = configFile('wallet.json', '');\n\nconst storedWalletSchema = z.object({\n privateKey: z\n .string()\n .regex(/^0x[a-fA-F0-9]{64}$/, 'Invalid Ethereum private key')\n .transform(privateKey => privateKey as Hex),\n address: z\n .string()\n .regex(/^0x[a-fA-F0-9]{40}$/, 'Invalid Ethereum address')\n .transform(address => getAddress(address)),\n createdAt: z.string(),\n});\n\nconst walletSurface = 'wallet';\n\nexport async function getWallet() {\n if (process.env.X402_PRIVATE_KEY) {\n const account = privateKeyToAccount(process.env.X402_PRIVATE_KEY as Hex);\n log.info(`Using wallet from env: ${account.address}`);\n return ok({ account, isNew: false });\n }\n\n const readFileResult = await safeReadFile(walletSurface, WALLET_FILE);\n\n if (!readFileResult.isOk()) {\n const fileExistsResult = safeFileExists(walletSurface, WALLET_FILE);\n // file exists but is not readable\n if (fileExistsResult.isOk()) {\n return fsErr(walletSurface, {\n cause: 'file_not_readable',\n message: `The file exists but is not readable. Fix corrupted state file: ${WALLET_FILE}`,\n });\n }\n }\n\n if (readFileResult.isOk()) {\n const data = readFileResult.value;\n const jsonParseResult = safeParseJson(walletSurface, data);\n\n // file exists but is not valid JSON\n if (jsonParseResult.isErr()) {\n return jsonErr(walletSurface, {\n cause: 'parse',\n message: `The data in ${WALLET_FILE} is not valid JSON`,\n });\n }\n\n const parseResult = safeParse(\n walletSurface,\n storedWalletSchema,\n jsonParseResult.value\n );\n\n // file has valid JSON but is not a valid wallet configuration\n if (parseResult.isErr()) {\n return parseResult;\n }\n\n const account = privateKeyToAccount(parseResult.value.privateKey);\n log.info(`Loaded wallet: ${account.address}`);\n return ok({ account, isNew: false });\n }\n\n // Generate new\n const privateKey = generatePrivateKey();\n const account = privateKeyToAccount(privateKey);\n const stored = {\n privateKey,\n address: account.address,\n createdAt: new Date().toISOString(),\n };\n\n const saveResult = await safeWriteFile(\n walletSurface,\n WALLET_FILE,\n JSON.stringify(stored, null, 2)\n ).andThen(() => safeChmod(walletSurface, WALLET_FILE, 0o600));\n\n if (saveResult.isErr()) {\n return saveResult;\n }\n\n log.info(`Created wallet: ${account.address}`);\n log.info(`Saved to: ${WALLET_FILE}`);\n\n return ok({ account, isNew: true });\n}\n","import { err, resultFromThrowable } from '@x402scan/neverthrow';\n\nimport type { BaseJsonError, JsonObject } from './types';\n\nconst type = 'json';\n\nexport const jsonErr = (surface: string, error: BaseJsonError) => {\n return err(type, surface, error);\n};\n\nexport const safeStringifyJson = (surface: string, value: JsonObject) => {\n return resultFromThrowable(\n type,\n surface,\n () => JSON.stringify(value),\n () => ({\n cause: 'stringify' as const,\n message: 'Could not stringify JSON',\n })\n );\n};\n\nexport const safeParseJson = (surface: string, value: string) => {\n return resultFromThrowable(\n type,\n surface,\n () => JSON.parse(value) as JsonObject,\n e => ({\n cause: 'parse' as const,\n message: e instanceof Error ? e.message : 'Could not parse JSON',\n })\n );\n};\n","import z from 'zod';\n\nimport { err, ok } from '@x402scan/neverthrow';\n\nimport type { BaseParseError } from './types';\n\nconst type = 'json';\n\nconst parseErr = (surface: string, error: BaseParseError) =>\n err(type, surface, error);\n\nexport const safeParse = <T>(\n surface: string,\n schema: z.ZodSchema<T>,\n value: unknown\n) => {\n const parseResult = schema.safeParse(value);\n if (!parseResult.success) {\n return parseErr(surface, {\n cause: 'invalid_data',\n message: JSON.stringify(z.treeifyError(parseResult.error), null, 2),\n error: parseResult.error,\n });\n }\n return ok(parseResult.data);\n};\n","import {\n base,\n baseSepolia,\n mainnet,\n sepolia,\n optimism,\n arbitrum,\n polygon,\n} from 'viem/chains';\n\nimport type { Chain } from 'viem';\n\nexport interface ChainConfig {\n chain: Chain;\n caip2: string;\n v1Name: string;\n usdcAddress: `0x${string}`;\n}\n\nconst CHAIN_CONFIGS: Record<string, ChainConfig> = {\n 'eip155:8453': {\n chain: base,\n caip2: 'eip155:8453',\n v1Name: 'base',\n usdcAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n },\n 'eip155:84532': {\n chain: baseSepolia,\n caip2: 'eip155:84532',\n v1Name: 'base-sepolia',\n usdcAddress: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n },\n 'eip155:1': {\n chain: mainnet,\n caip2: 'eip155:1',\n v1Name: 'ethereum',\n usdcAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n },\n 'eip155:11155111': {\n chain: sepolia,\n caip2: 'eip155:11155111',\n v1Name: 'ethereum-sepolia',\n usdcAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',\n },\n 'eip155:10': {\n chain: optimism,\n caip2: 'eip155:10',\n v1Name: 'optimism',\n usdcAddress: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',\n },\n 'eip155:42161': {\n chain: arbitrum,\n caip2: 'eip155:42161',\n v1Name: 'arbitrum',\n usdcAddress: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n },\n 'eip155:137': {\n chain: polygon,\n caip2: 'eip155:137',\n v1Name: 'polygon',\n usdcAddress: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',\n },\n};\n\nconst V1_TO_CAIP2: Record<string, string> = {\n base: 'eip155:8453',\n 'base-sepolia': 'eip155:84532',\n ethereum: 'eip155:1',\n 'ethereum-sepolia': 'eip155:11155111',\n optimism: 'eip155:10',\n arbitrum: 'eip155:42161',\n polygon: 'eip155:137',\n};\n\nexport const DEFAULT_NETWORK = 'eip155:8453';\n\n/** Convert any network identifier to CAIP-2 format */\nexport function toCaip2(network: string): string {\n if (network.startsWith('eip155:')) return network;\n return V1_TO_CAIP2[network.toLowerCase()] ?? network;\n}\n\n/** Get chain config from network identifier */\nexport function getChainConfig(network: string): ChainConfig | undefined {\n return CHAIN_CONFIGS[toCaip2(network)];\n}\n\n/** Get USDC address for a network */\nexport function getUSDCAddress(network: string): `0x${string}` | undefined {\n return getChainConfig(network)?.usdcAddress;\n}\n\n/** Extract chain ID from CAIP-2 identifier */\nexport function getChainId(network: string): number | undefined {\n const caip2 = toCaip2(network);\n const match = /^eip155:(\\d+)$/.exec(caip2);\n return match ? parseInt(match[1]!, 10) : undefined;\n}\n\n/** Get human-readable chain name */\nexport function getChainName(network: string): string {\n return getChainConfig(network)?.chain.name ?? network;\n}\n\n/** Check if network is a testnet */\nexport function isTestnet(network: string): boolean {\n return getChainConfig(network)?.chain.testnet === true;\n}\n"],"mappings":"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","names":["v","ok","err","Result","fromThrowable","ok","err","type","ok","err","type","err","ok","fs","errorType","err","fs","fs","err","z","err","z","type","err","z","ok","z","account","ok"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/install/clients.ts"],"sourcesContent":["export enum Clients {\n ClaudeCode = 'claude-code',\n Cursor = 'cursor',\n Claude = 'claude',\n Codex = 'codex',\n Vscode = 'vscode',\n Cline = 'cline',\n RooCline = 'roo-cline',\n Windsurf = 'windsurf',\n Warp = 'warp',\n GeminiCli = 'gemini-cli',\n Goose = 'goose',\n Zed = 'zed',\n Opencode = 'opencode',\n}\n\ninterface ClientMetadata {\n name: string;\n description: string;\n website: string;\n}\n\nexport const clientMetadata: Record<Clients, ClientMetadata> = {\n [Clients.ClaudeCode]: {\n name: 'Claude Code',\n description: 'Claude Code is a code editor that uses the Claude API.',\n website: 'https://claude.com',\n },\n [Clients.Cursor]: {\n name: 'Cursor',\n description: 'Cursor is a code editor that uses the Cursor API.',\n website: 'https://cursor.com',\n },\n [Clients.Claude]: {\n name: 'Claude',\n description: 'Claude is a code editor that uses the Claude API.',\n website: 'https://claude.com',\n },\n [Clients.Codex]: {\n name: 'Codex',\n description: 'Codex is a code editor that uses the Codex API.',\n website: 'https://codex.com',\n },\n [Clients.Vscode]: {\n name: 'VSCode',\n description: 'VSCode is a code editor that uses the VSCode API.',\n website: 'https://vscode.com',\n },\n [Clients.Cline]: {\n name: 'Cline',\n description: 'Cline is a code editor that uses the Cline API.',\n website: 'https://cline.com',\n },\n [Clients.RooCline]: {\n name: 'RooCline',\n description: 'RooCline is a code editor that uses the RooCline API.',\n website: 'https://roo-cline.com',\n },\n [Clients.Windsurf]: {\n name: 'Windsurf',\n description: 'Windsurf is a code editor that uses the Windsurf API.',\n website: 'https://windsurf.com',\n },\n [Clients.Warp]: {\n name: 'Warp',\n description: 'Warp is a code editor that uses the Warp API.',\n website: 'https://warp.com',\n },\n [Clients.GeminiCli]: {\n name: 'Gemini CLI',\n description: 'Gemini CLI is a code editor that uses the Gemini CLI API.',\n website: 'https://gemini-cli.com',\n },\n [Clients.Goose]: {\n name: 'Goose',\n description: 'Goose is a code editor that uses the Goose API.',\n website: 'https://goose.com',\n },\n [Clients.Zed]: {\n name: 'Zed',\n description: 'Zed is a code editor that uses the Zed API.',\n website: 'https://zed.com',\n },\n [Clients.Opencode]: {\n name: 'Opencode',\n description: 'Opencode is a code editor that uses the Opencode API.',\n website: 'https://opencode.com',\n },\n};\n"],"mappings":";AAAO,IAAK,UAAL,kBAAKA,aAAL;AACL,EAAAA,SAAA,gBAAa;AACb,EAAAA,SAAA,YAAS;AACT,EAAAA,SAAA,YAAS;AACT,EAAAA,SAAA,WAAQ;AACR,EAAAA,SAAA,YAAS;AACT,EAAAA,SAAA,WAAQ;AACR,EAAAA,SAAA,cAAW;AACX,EAAAA,SAAA,cAAW;AACX,EAAAA,SAAA,UAAO;AACP,EAAAA,SAAA,eAAY;AACZ,EAAAA,SAAA,WAAQ;AACR,EAAAA,SAAA,SAAM;AACN,EAAAA,SAAA,cAAW;AAbD,SAAAA;AAAA,GAAA;AAsBL,IAAM,iBAAkD;AAAA,EAC7D,CAAC,8BAAkB,GAAG;AAAA,IACpB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,qBAAc,GAAG;AAAA,IAChB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,qBAAc,GAAG;AAAA,IAChB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,mBAAa,GAAG;AAAA,IACf,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,qBAAc,GAAG;AAAA,IAChB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,mBAAa,GAAG;AAAA,IACf,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,0BAAgB,GAAG;AAAA,IAClB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,yBAAgB,GAAG;AAAA,IAClB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,iBAAY,GAAG;AAAA,IACd,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,4BAAiB,GAAG;AAAA,IACnB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,mBAAa,GAAG;AAAA,IACf,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,eAAW,GAAG;AAAA,IACb,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,CAAC,yBAAgB,GAAG;AAAA,IAClB,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AACF;","names":["Clients"]}
|