@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.
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  MCP_VERSION,
3
3
  getBalance
4
- } from "./chunk-2UP5W5MC.js";
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-JXXC6FYE.js";
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 = (input) => {
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(buildRequest(input));
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 (input, init) => {
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 = ({ server, account }) => {
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(toolName2, buildRequest(input));
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(input);
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 = ({ server }) => {
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(toolName4, buildRequest(input));
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
- const parsed = discoveryDocumentSchema.safeParse(wellKnownResult.value);
714
- if (parsed.success) {
715
- return mcpSuccessJson({
716
- found: true,
717
- origin,
718
- source: "well-known",
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-IOVNYPTB.js.map
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.7-beta.4",
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/eslint-config": "0.0.0",
40
+ "@x402scan/neverthrow": "1.0.0",
39
41
  "@x402scan/typescript-config": "0.0.0",
40
- "@x402scan/neverthrow": "1.0.0"
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"]}