agentcash 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/run-server.cjs +480 -3191
- package/dist/esm/{chunk-WL5N26N4.js → chunk-BTIVASGJ.js} +5 -5
- package/dist/esm/{chunk-Y5BSCN5L.js → chunk-E3MKYUQQ.js} +82 -22
- package/dist/esm/chunk-E3MKYUQQ.js.map +1 -0
- package/dist/esm/{chunk-EDWPR5IJ.js → chunk-VX2WPSZV.js} +28 -80
- package/dist/esm/chunk-VX2WPSZV.js.map +1 -0
- package/dist/esm/chunk-VZL5QWWM.js +363 -0
- package/dist/esm/chunk-VZL5QWWM.js.map +1 -0
- package/dist/esm/chunk-ZVDFFTHM.js +22 -0
- package/dist/esm/chunk-ZVDFFTHM.js.map +1 -0
- package/dist/esm/{commands-XFTEJGGT.js → commands-IANPQPZS.js} +12 -10
- package/dist/esm/{commands-XFTEJGGT.js.map → commands-IANPQPZS.js.map} +1 -1
- package/dist/esm/{fund-56IKTU6D.js → fund-H6QAHY62.js} +4 -4
- package/dist/esm/index.js +9 -9
- package/dist/esm/{install-WZ2WOFCE.js → install-KLEATNEC.js} +7 -7
- package/dist/esm/{server-B4N6JKFY.js → server-XNUVCZTJ.js} +32 -97
- package/dist/esm/server-XNUVCZTJ.js.map +1 -0
- package/dist/esm/shared/operations/index.d.ts +7 -7
- package/dist/esm/shared/operations/index.js +3 -3
- package/package.json +4 -2
- package/dist/esm/chunk-4Z3HKYI5.js +0 -190
- package/dist/esm/chunk-4Z3HKYI5.js.map +0 -1
- package/dist/esm/chunk-EDWPR5IJ.js.map +0 -1
- package/dist/esm/chunk-QO2UZVLV.js +0 -52
- package/dist/esm/chunk-QO2UZVLV.js.map +0 -1
- package/dist/esm/chunk-Y5BSCN5L.js.map +0 -1
- package/dist/esm/server-B4N6JKFY.js.map +0 -1
- /package/dist/esm/{chunk-WL5N26N4.js.map → chunk-BTIVASGJ.js.map} +0 -0
- /package/dist/esm/{fund-56IKTU6D.js.map → fund-H6QAHY62.js.map} +0 -0
- /package/dist/esm/{install-WZ2WOFCE.js.map → install-KLEATNEC.js.map} +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
redeemInviteCode
|
|
3
|
-
} from "./chunk-4Z3HKYI5.js";
|
|
4
1
|
import {
|
|
5
2
|
DEFAULT_NETWORK,
|
|
6
3
|
getChainName,
|
|
4
|
+
redeemInviteCode
|
|
5
|
+
} from "./chunk-VZL5QWWM.js";
|
|
6
|
+
import {
|
|
7
7
|
getDepositLink
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-VX2WPSZV.js";
|
|
9
9
|
|
|
10
10
|
// src/cli/lib/deposit.ts
|
|
11
11
|
import chalk from "chalk";
|
|
@@ -111,4 +111,4 @@ export {
|
|
|
111
111
|
wait,
|
|
112
112
|
promptDeposit
|
|
113
113
|
};
|
|
114
|
-
//# sourceMappingURL=chunk-
|
|
114
|
+
//# sourceMappingURL=chunk-BTIVASGJ.js.map
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
|
-
MCP_VERSION
|
|
3
|
-
|
|
4
|
-
} from "./chunk-QO2UZVLV.js";
|
|
2
|
+
MCP_VERSION
|
|
3
|
+
} from "./chunk-ZVDFFTHM.js";
|
|
5
4
|
import {
|
|
6
|
-
DEFAULT_NETWORK,
|
|
7
5
|
err,
|
|
8
6
|
fetchErr,
|
|
9
7
|
fetchOk,
|
|
8
|
+
getBalance,
|
|
10
9
|
getBaseUrl,
|
|
11
|
-
getChainName,
|
|
12
10
|
getDepositLink,
|
|
13
11
|
log,
|
|
14
12
|
ok,
|
|
@@ -17,7 +15,7 @@ import {
|
|
|
17
15
|
safeFetch,
|
|
18
16
|
safeFetchJson,
|
|
19
17
|
safeParseResponse
|
|
20
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-VX2WPSZV.js";
|
|
21
19
|
|
|
22
20
|
// src/shared/openapi-cache.ts
|
|
23
21
|
var specCache = /* @__PURE__ */ new Map();
|
|
@@ -350,26 +348,84 @@ function createFetchWithPayment(surface, client) {
|
|
|
350
348
|
}
|
|
351
349
|
|
|
352
350
|
// src/shared/operations/wallet-info.ts
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
351
|
+
import { formatUnits } from "viem";
|
|
352
|
+
|
|
353
|
+
// src/shared/tempo.ts
|
|
354
|
+
import { createPublicClient, defineChain, http } from "viem";
|
|
355
|
+
var TEMPO_CHAIN_ID = Number(process.env.TEMPO_CHAIN_ID ?? 42431);
|
|
356
|
+
var TEMPO_RPC_URL = process.env.TEMPO_RPC_URL ?? "https://tempo-moderato.g.alchemy.com/v2/GCnF4KF-qMTaDYNxAOMSC";
|
|
357
|
+
var TEMPO_CHAIN_NAME = process.env.TEMPO_CHAIN_NAME ?? "Tempo";
|
|
358
|
+
var TEMPO_TOKEN_ADDRESS = process.env.TEMPO_TOKEN_ADDRESS ?? "0x20c0000000000000000000000000000000000001";
|
|
359
|
+
function getTempoChainId() {
|
|
360
|
+
return TEMPO_CHAIN_ID;
|
|
361
|
+
}
|
|
362
|
+
function getTempoRpcUrl() {
|
|
363
|
+
return TEMPO_RPC_URL;
|
|
364
|
+
}
|
|
365
|
+
function getTempoChainName() {
|
|
366
|
+
return TEMPO_CHAIN_NAME;
|
|
367
|
+
}
|
|
368
|
+
function getTempoTokenAddress() {
|
|
369
|
+
return TEMPO_TOKEN_ADDRESS;
|
|
370
|
+
}
|
|
371
|
+
var tempoChain = defineChain({
|
|
372
|
+
id: TEMPO_CHAIN_ID,
|
|
373
|
+
name: TEMPO_CHAIN_NAME,
|
|
374
|
+
nativeCurrency: { name: "TEMPO", symbol: "TEMPO", decimals: 18 },
|
|
375
|
+
rpcUrls: {
|
|
376
|
+
default: { http: [TEMPO_RPC_URL] }
|
|
377
|
+
}
|
|
378
|
+
});
|
|
379
|
+
|
|
380
|
+
// src/shared/tempo-balance.ts
|
|
381
|
+
var MPPSCAN_BASE = "https://mppscan.com";
|
|
382
|
+
async function getTempoBalance({
|
|
383
|
+
address,
|
|
384
|
+
tokenAddress
|
|
385
|
+
}) {
|
|
386
|
+
const url = `${MPPSCAN_BASE}/api/balance/${address}`;
|
|
387
|
+
const res = await fetch(url, {
|
|
388
|
+
method: "GET",
|
|
389
|
+
headers: { accept: "application/json" }
|
|
358
390
|
});
|
|
391
|
+
if (!res.ok) {
|
|
392
|
+
throw new Error(`mppscan balance request failed: ${res.status}`);
|
|
393
|
+
}
|
|
394
|
+
const data = await res.json();
|
|
395
|
+
return {
|
|
396
|
+
chainId: getTempoChainId(),
|
|
397
|
+
chainName: getTempoChainName(),
|
|
398
|
+
balance: BigInt(data.balance),
|
|
399
|
+
tokenAddress
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
// src/shared/operations/wallet-info.ts
|
|
404
|
+
async function getWalletInfo(surface, address, flags) {
|
|
405
|
+
const [balanceResult, tempoResult] = await Promise.all([
|
|
406
|
+
getBalance({ address, flags, surface }),
|
|
407
|
+
getTempoBalance({ address, tokenAddress: getTempoTokenAddress() }).then((r) => Number(formatUnits(r.balance, 6))).catch((e) => {
|
|
408
|
+
log.info(`Failed to fetch Tempo balance: ${e}`);
|
|
409
|
+
return null;
|
|
410
|
+
})
|
|
411
|
+
]);
|
|
359
412
|
if (balanceResult.isErr()) {
|
|
360
413
|
return balanceResult;
|
|
361
414
|
}
|
|
362
|
-
const
|
|
415
|
+
const baseBalance = balanceResult.value.balance;
|
|
416
|
+
const tempoBalance = tempoResult ?? 0;
|
|
417
|
+
const totalBalance = baseBalance + tempoBalance;
|
|
418
|
+
const chains = [
|
|
419
|
+
{ chain: "Base", balance: baseBalance },
|
|
420
|
+
{ chain: "Tempo", balance: tempoBalance }
|
|
421
|
+
];
|
|
363
422
|
return ok({
|
|
364
423
|
address,
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
isNewWallet: balance === 0,
|
|
424
|
+
balance: totalBalance,
|
|
425
|
+
chains,
|
|
426
|
+
isNewWallet: totalBalance === 0,
|
|
369
427
|
depositLink: getDepositLink(address, flags),
|
|
370
|
-
...
|
|
371
|
-
message: "Your balance is low. Consider topping it up"
|
|
372
|
-
} : {}
|
|
428
|
+
...totalBalance < 2.5 && totalBalance > 0 ? { message: "Your balance is low. Consider topping it up" } : {}
|
|
373
429
|
});
|
|
374
430
|
}
|
|
375
431
|
|
|
@@ -377,9 +433,9 @@ async function getWalletInfo(surface, address, flags) {
|
|
|
377
433
|
import { x402Client, x402HTTPClient } from "@x402/core/client";
|
|
378
434
|
|
|
379
435
|
// src/shared/token.ts
|
|
380
|
-
import { formatUnits } from "viem";
|
|
436
|
+
import { formatUnits as formatUnits2 } from "viem";
|
|
381
437
|
var tokenStringToNumber = (amount, decimals = 6) => {
|
|
382
|
-
return Number(
|
|
438
|
+
return Number(formatUnits2(BigInt(amount), decimals));
|
|
383
439
|
};
|
|
384
440
|
|
|
385
441
|
// src/server/lib/x402-extensions.ts
|
|
@@ -506,10 +562,14 @@ export {
|
|
|
506
562
|
getIndexEntry,
|
|
507
563
|
discoverResources,
|
|
508
564
|
createFetchWithPayment,
|
|
565
|
+
getTempoChainId,
|
|
566
|
+
getTempoRpcUrl,
|
|
567
|
+
getTempoTokenAddress,
|
|
568
|
+
getTempoBalance,
|
|
509
569
|
getWalletInfo,
|
|
510
570
|
getInputSchema,
|
|
511
571
|
getSiwxExtension,
|
|
512
572
|
checkEndpoint,
|
|
513
573
|
submitErrorReport
|
|
514
574
|
};
|
|
515
|
-
//# sourceMappingURL=chunk-
|
|
575
|
+
//# sourceMappingURL=chunk-E3MKYUQQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/shared/openapi-cache.ts","../../src/shared/operations/discover.ts","../../src/shared/neverthrow/x402/index.ts","../../src/shared/operations/fetch-with-payment.ts","../../src/shared/operations/wallet-info.ts","../../src/shared/tempo.ts","../../src/shared/tempo-balance.ts","../../src/shared/operations/check-endpoint.ts","../../src/shared/token.ts","../../src/server/lib/x402-extensions.ts","../../src/shared/operations/report-error.ts"],"sourcesContent":["import { resultFromPromise } from '@x402scan/neverthrow';\n\nimport { safeFetch } from './neverthrow/fetch';\nimport { log } from './log';\n\nimport type { JsonObject, JsonValue } from './neverthrow/json/types';\n\nexport interface EndpointSummary {\n path: string; // \"/api/apollo/people/search\"\n method: string; // \"POST\"\n summary: string; // \"Search for people by name, email, or domain\"\n price?: string; // \"$0.02\" — from x-payment-info, advisory only\n protocols?: string[]; // [\"x402\", \"mpp\"] — from x-payment-info\n}\n\n/**\n * In-memory cache for OpenAPI specs per origin.\n * Populated during discovery or on-demand when check_endpoint needs schema info.\n */\nconst specCache = new Map<string, JsonObject>();\n\n/**\n * Fetch and cache an OpenAPI spec for an origin.\n * Tries multiple well-known locations in order.\n */\nexport async function fetchOpenApiSpec(\n origin: string\n): Promise<JsonObject | null> {\n const cached = specCache.get(origin);\n if (cached) return cached;\n\n const uniqueUrls = [\n `${origin}/openapi.json`,\n `${origin}/.well-known/openapi.json`,\n `${origin}/.well-known/x402`,\n `${origin}/.well-known/mpp`,\n ];\n\n for (const url of uniqueUrls) {\n log.debug(`Fetching OpenAPI spec from: ${url}`);\n const fetchResult = await safeFetch(\n 'fetchOpenApiSpec',\n new Request(url, { headers: { Accept: 'application/json' } })\n );\n\n if (fetchResult.isErr()) {\n log.debug(`Failed to fetch OpenAPI spec from: ${url}`);\n continue;\n }\n\n const response = fetchResult.value;\n if (!response.ok) continue;\n\n const jsonResult = await resultFromPromise(\n 'json',\n 'fetchOpenApiSpec',\n response.json() as Promise<JsonObject>,\n () => ({\n cause: 'parse' as const,\n message: `Failed to parse JSON from: ${url}`,\n })\n );\n\n if (jsonResult.isErr()) {\n log.debug(`Failed to fetch OpenAPI spec from: ${url}`);\n continue;\n }\n\n const spec = jsonResult.value;\n\n // Basic validation - must have paths\n if (spec && typeof spec === 'object' && spec.paths) {\n specCache.set(origin, spec);\n log.info(`Cached OpenAPI spec for origin: ${origin}`);\n return spec;\n }\n }\n\n log.debug(`No OpenAPI spec found for origin: ${origin}`);\n return null;\n}\n\n/**\n * Resolve a JSON $ref pointer within the spec.\n * Only supports local refs: \"#/components/schemas/Foo\"\n */\nfunction resolveRef(\n spec: JsonObject,\n ref: string,\n seen: Set<string>\n): JsonValue | undefined {\n if (!ref.startsWith('#/')) return undefined;\n if (seen.has(ref)) return { $circular: ref } as unknown as JsonValue;\n seen.add(ref);\n\n const parts = ref.slice(2).split('/');\n let current: JsonValue = spec;\n\n for (const part of parts) {\n if (\n current == null ||\n typeof current !== 'object' ||\n Array.isArray(current)\n )\n return undefined;\n const next: JsonValue | undefined = current[part];\n if (next === undefined) return undefined;\n current = next;\n }\n\n if (\n current != null &&\n typeof current === 'object' &&\n !Array.isArray(current)\n ) {\n return resolveRefs(spec, current, seen);\n }\n return current;\n}\n\n/**\n * Recursively resolve all $ref pointers in a JSON object.\n * Keeps it shallow enough to avoid context bloat - max depth 4.\n */\nfunction resolveRefs(\n spec: JsonObject,\n obj: JsonObject,\n seen: Set<string>,\n depth = 0\n): JsonObject {\n if (depth > 4) return obj;\n\n const result: JsonObject = {};\n\n for (const [key, value] of Object.entries(obj)) {\n if (key === '$ref' && typeof value === 'string') {\n const resolved = resolveRef(spec, value, seen);\n if (\n resolved != null &&\n typeof resolved === 'object' &&\n !Array.isArray(resolved)\n ) {\n Object.assign(result, resolved);\n } else {\n result[key] = value;\n }\n } else if (\n value != null &&\n typeof value === 'object' &&\n !Array.isArray(value)\n ) {\n result[key] = resolveRefs(spec, value, seen, depth + 1);\n } else if (Array.isArray(value)) {\n result[key] = value.map(item => {\n if (item != null && typeof item === 'object' && !Array.isArray(item)) {\n return resolveRefs(spec, item, seen, depth + 1);\n }\n return item;\n });\n } else {\n result[key] = value;\n }\n }\n\n return result;\n}\n\n/**\n * Normalize a URL path for matching against OpenAPI spec paths.\n * e.g. \"https://example.com/api/foo\" -> \"/api/foo\"\n */\nfunction extractPath(url: string, origin: string): string {\n if (url.startsWith(origin)) {\n return url.slice(origin.length) || '/';\n }\n return URL.canParse(url) ? new URL(url).pathname : url;\n}\n\n/**\n * Extract the schema for a specific endpoint from the OpenAPI spec.\n * Returns the operation object with resolved $refs, or null if not found.\n */\nexport async function getEndpointSchema(\n endpointUrl: string,\n method?: string\n): Promise<JsonObject | null> {\n if (!URL.canParse(endpointUrl)) return null;\n const origin = new URL(endpointUrl).origin;\n\n const spec = await fetchOpenApiSpec(origin);\n if (!spec) return null;\n\n const paths = spec.paths as JsonObject | undefined;\n if (!paths) return null;\n\n const path = extractPath(endpointUrl, origin);\n const httpMethod = (method ?? 'post').toLowerCase();\n\n // Try exact match first, then try path patterns\n let pathEntry = paths[path] as JsonObject | undefined;\n\n if (!pathEntry) {\n // Try matching against parameterized paths like /api/foo/{id}\n for (const [specPath, specEntry] of Object.entries(paths)) {\n if (specEntry == null || typeof specEntry !== 'object') continue;\n\n const pattern = specPath.replace(/\\{[^}]+\\}/g, '[^/]+');\n const regex = new RegExp(`^${pattern}$`);\n if (regex.test(path)) {\n pathEntry = specEntry as JsonObject;\n break;\n }\n }\n }\n\n if (!pathEntry) {\n log.debug(`No OpenAPI path entry found for: ${path}`);\n return null;\n }\n\n const operation = pathEntry[httpMethod] as JsonObject | undefined;\n if (!operation) {\n // If method not found, return all operations for this path\n const resolved = resolveRefs(spec, pathEntry, new Set());\n return { path, ...resolved };\n }\n\n const resolved = resolveRefs(spec, operation, new Set());\n return { path, method: httpMethod, ...resolved };\n}\n\n// ── Lightweight Endpoint Index ──\n\nconst indexCache = new Map<string, EndpointSummary[]>();\n\n/**\n * Lazily build a lightweight index for an origin.\n * Fetches the OpenAPI spec if not cached, then extracts\n * path + method + summary + x-payment-info for each operation.\n */\nexport async function getOriginIndex(\n origin: string\n): Promise<EndpointSummary[] | null> {\n const cached = indexCache.get(origin);\n if (cached) return cached;\n\n const spec = await fetchOpenApiSpec(origin);\n if (!spec?.paths) return null;\n\n const endpoints: EndpointSummary[] = [];\n for (const [path, methods] of Object.entries(\n spec.paths as Record<string, JsonObject>\n )) {\n for (const [method, operation] of Object.entries(methods)) {\n if (typeof operation === 'object' && operation !== null) {\n const op = operation as Record<string, unknown>;\n const paymentInfo = op['x-payment-info'] as\n | Record<string, unknown>\n | undefined;\n const entry: EndpointSummary = {\n path,\n method: method.toUpperCase(),\n summary: (op.summary as string) || (op.description as string) || '',\n };\n if (paymentInfo?.price != null) {\n entry.price = `$${paymentInfo.price as number}`;\n }\n if (Array.isArray(paymentInfo?.protocols)) {\n entry.protocols = paymentInfo.protocols as string[];\n }\n endpoints.push(entry);\n }\n }\n }\n\n indexCache.set(origin, endpoints);\n return endpoints;\n}\n\n/**\n * Look up a single endpoint entry from the lightweight index cache.\n * Returns the matching EndpointSummary (with pricing hints) or undefined.\n * Synchronous — only checks what's already cached.\n */\nexport function getIndexEntry(\n origin: string,\n path: string,\n method: string\n): EndpointSummary | undefined {\n const entries = indexCache.get(origin);\n if (!entries) return undefined;\n\n const m = method.toUpperCase();\n return entries.find(e => e.path === path && e.method === m);\n}\n","import { ok, err } from '@x402scan/neverthrow';\nimport type { Result } from '@x402scan/neverthrow/types';\n\nimport { log } from '@/shared/log';\nimport { safeFetch, safeParseResponse } from '@/shared/neverthrow/fetch';\nimport { fetchOpenApiSpec, getOriginIndex } from '@/shared/openapi-cache';\n\ninterface DiscoveredEndpoint {\n path: string;\n summary: string;\n price?: string;\n}\n\n/**\n * Discovery success result\n */\ninterface DiscoverySuccessResult {\n found: true;\n origin: string;\n source: 'openapi';\n endpoints: DiscoveredEndpoint[];\n instructions?: string;\n}\n\n/**\n * Discovery error with origin context\n */\ninterface DiscoveryError {\n cause: 'not_found';\n message: string;\n origin: string;\n}\n\nconst ERROR_TYPE = 'discovery';\n\n/**\n * Fetch llms.txt instructions from an origin (best-effort).\n */\nasync function fetchLlmsTxt(\n surface: string,\n origin: string\n): Promise<string | null> {\n const llmsTxtUrl = `${origin}/llms.txt`;\n log.debug(`Fetching llms.txt from: ${llmsTxtUrl}`);\n\n const result = await safeFetch(\n surface,\n new Request(llmsTxtUrl, { headers: { Accept: 'text/plain' } })\n );\n\n if (result.isErr()) return null;\n\n const parseResult = await safeParseResponse(surface, result.value);\n if (parseResult.isErr() || parseResult.value.type !== 'text') return null;\n\n return parseResult.value.data;\n}\n\n/**\n * Discover x402-protected resources on an origin.\n * Fetches OpenAPI spec, builds endpoint index, and fetches llms.txt instructions.\n */\nexport async function discoverResources(\n surface: string,\n url: string\n): Promise<Result<DiscoverySuccessResult, DiscoveryError>> {\n const origin = URL.canParse(url) ? new URL(url).origin : url;\n\n log.info(`Discovering resources for origin: ${origin}`);\n\n // Fetch OpenAPI spec and llms.txt in parallel\n const [spec, instructions] = await Promise.all([\n fetchOpenApiSpec(origin),\n fetchLlmsTxt(surface, origin),\n ]);\n\n if (!spec?.paths) {\n return err(ERROR_TYPE, surface, {\n cause: 'not_found' as const,\n message: `No OpenAPI spec found for ${origin}. Tried: /openapi.json, /.well-known/openapi.json, /.well-known/x402, /.well-known/mpp`,\n origin,\n });\n }\n\n // Build the lightweight endpoint index\n const endpoints = await getOriginIndex(origin);\n\n if (!endpoints || endpoints.length === 0) {\n return err(ERROR_TYPE, surface, {\n cause: 'not_found' as const,\n message: `OpenAPI spec found for ${origin} but no endpoints extracted`,\n origin,\n });\n }\n\n log.info(`Found ${endpoints.length} endpoints for: ${origin}`);\n\n return ok<DiscoverySuccessResult>({\n found: true,\n origin,\n source: 'openapi',\n endpoints: endpoints.map(({ path, summary, price }) => ({\n path,\n summary,\n ...(price ? { price } : {}),\n })),\n ...(instructions ? { instructions } : {}),\n });\n}\n","import {\n err,\n ok,\n resultFromPromise,\n resultFromThrowable,\n} from '@x402scan/neverthrow';\nimport { createSIWxPayload } from '@x402/extensions/sign-in-with-x';\n\nimport type { BaseX402Error } from './types';\nimport type { x402HTTPClient } from '@x402/core/http';\nimport type { PaymentRequired } from '@x402/core/types';\nimport type { CompleteSIWxInfo } from '@x402/extensions/sign-in-with-x';\nimport type { PrivateKeyAccount } from 'viem';\n\nconst errorType = 'x402';\n\nexport const x402Ok = <T>(value: T) => ok(value);\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: CompleteSIWxInfo,\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 type { x402HTTPClient } from '@x402/core/client';\n\nimport { safeFetch, fetchErr, fetchOk } from '@/shared/neverthrow/fetch';\nimport {\n safeCreatePaymentPayload,\n safeGetPaymentRequired,\n x402Err,\n x402Ok,\n} from '@/shared/neverthrow/x402';\n\n/**\n * Execute a fetch request with automatic x402 payment handling.\n *\n * 1. Makes initial request\n * 2. If 402 response, extracts payment requirements\n * 3. Creates payment payload and signs it\n * 4. Retries request with payment headers\n */\nexport function createFetchWithPayment(\n surface: string,\n client: x402HTTPClient\n) {\n return async (request: Request) => {\n const clonedRequest = request.clone();\n\n const probeResult = await safeFetch(surface, request);\n\n if (probeResult.isErr()) {\n return fetchErr(surface, probeResult.error);\n }\n\n // Not a 402 response - return as-is\n if (probeResult.value.status !== 402) {\n return probeResult.andThen(response =>\n fetchOk({\n response,\n paymentPayload: undefined,\n })\n );\n }\n\n const response = probeResult.value;\n\n // Parse payment requirements from 402 response\n const paymentRequiredResult = await safeGetPaymentRequired(\n surface,\n client,\n response\n );\n\n if (paymentRequiredResult.isErr()) {\n return paymentRequiredResult;\n }\n\n const paymentRequired = paymentRequiredResult.value;\n\n // Create and sign payment payload\n const paymentPayloadResult = await safeCreatePaymentPayload(\n surface,\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(surface, {\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(surface, clonedRequest).andThen(response =>\n x402Ok({\n response,\n paymentPayload,\n })\n );\n };\n}\n","import { formatUnits } from 'viem';\n\nimport { ok } from '@x402scan/neverthrow';\n\nimport { getBalance } from '@/shared/balance';\nimport { getDepositLink } from '@/shared/utils';\nimport { getTempoTokenAddress } from '@/shared/tempo';\nimport { getTempoBalance } from '@/shared/tempo-balance';\nimport { log } from '@/shared/log';\n\nimport type { GlobalFlags } from '@/types';\nimport type { Address } from 'viem';\n\ninterface ChainBalance {\n chain: string;\n balance: number;\n}\n\ninterface WalletInfoResult {\n address: Address;\n balance: number;\n chains: ChainBalance[];\n isNewWallet: boolean;\n depositLink: string;\n message?: string;\n}\n\n/**\n * Get wallet info including balance and deposit link.\n * Returns summed balance across Base and Tempo, with per-chain breakdown.\n */\nexport async function getWalletInfo(\n surface: string,\n address: Address,\n flags: GlobalFlags\n) {\n const [balanceResult, tempoResult] = await Promise.all([\n getBalance({ address, flags, surface }),\n getTempoBalance({ address, tokenAddress: getTempoTokenAddress() })\n .then(r => Number(formatUnits(r.balance, 6)))\n .catch(e => {\n log.info(`Failed to fetch Tempo balance: ${e}`);\n return null;\n }),\n ]);\n\n if (balanceResult.isErr()) {\n return balanceResult;\n }\n\n const baseBalance = balanceResult.value.balance;\n const tempoBalance = tempoResult ?? 0;\n const totalBalance = baseBalance + tempoBalance;\n\n const chains: ChainBalance[] = [\n { chain: 'Base', balance: baseBalance },\n { chain: 'Tempo', balance: tempoBalance },\n ];\n\n return ok<WalletInfoResult>({\n address,\n balance: totalBalance,\n chains,\n isNewWallet: totalBalance === 0,\n depositLink: getDepositLink(address, flags),\n ...(totalBalance < 2.5 && totalBalance > 0\n ? { message: 'Your balance is low. Consider topping it up' }\n : {}),\n });\n}\n","import { createPublicClient, defineChain, http } from 'viem';\n\nimport type { Address } from 'viem';\n\nconst TEMPO_CHAIN_ID = Number(process.env.TEMPO_CHAIN_ID ?? 42431);\nconst TEMPO_RPC_URL =\n process.env.TEMPO_RPC_URL ??\n 'https://tempo-moderato.g.alchemy.com/v2/GCnF4KF-qMTaDYNxAOMSC';\nconst TEMPO_CHAIN_NAME = process.env.TEMPO_CHAIN_NAME ?? 'Tempo';\nconst TEMPO_TOKEN_ADDRESS = (process.env.TEMPO_TOKEN_ADDRESS ??\n '0x20c0000000000000000000000000000000000001') as Address;\n\nexport function getTempoChainId(): number {\n return TEMPO_CHAIN_ID;\n}\n\nexport function getTempoRpcUrl(): string {\n return TEMPO_RPC_URL;\n}\n\nexport function getTempoChainName(): string {\n return TEMPO_CHAIN_NAME;\n}\n\nexport function getTempoTokenAddress(): Address {\n return TEMPO_TOKEN_ADDRESS;\n}\n\nconst tempoChain = defineChain({\n id: TEMPO_CHAIN_ID,\n name: TEMPO_CHAIN_NAME,\n nativeCurrency: { name: 'TEMPO', symbol: 'TEMPO', decimals: 18 },\n rpcUrls: {\n default: { http: [TEMPO_RPC_URL] },\n },\n});\n\nexport function createTempoPublicClient() {\n return createPublicClient({\n chain: tempoChain,\n transport: http(),\n });\n}\n","import { getTempoChainId, getTempoChainName } from './tempo';\n\nimport type { Address } from 'viem';\n\nconst MPPSCAN_BASE = 'https://mppscan.com';\n\ninterface GetTempoBalanceResult {\n chainId: number;\n chainName: string;\n balance: bigint;\n tokenAddress: Address;\n}\n\nexport async function getTempoBalance({\n address,\n tokenAddress,\n}: {\n address: Address;\n tokenAddress: Address;\n}): Promise<GetTempoBalanceResult> {\n const url = `${MPPSCAN_BASE}/api/balance/${address}`;\n\n const res = await fetch(url, {\n method: 'GET',\n headers: { accept: 'application/json' },\n });\n\n if (!res.ok) {\n throw new Error(`mppscan balance request failed: ${res.status}`);\n }\n\n const data = (await res.json()) as { balance: string };\n\n return {\n chainId: getTempoChainId(),\n chainName: getTempoChainName(),\n balance: BigInt(data.balance),\n tokenAddress,\n };\n}\n","import { ok } from '@x402scan/neverthrow';\nimport { x402Client, x402HTTPClient } from '@x402/core/client';\n\nimport { log } from '@/shared/log';\nimport { safeFetch, safeParseResponse } from '@/shared/neverthrow/fetch';\nimport { safeGetPaymentRequired } from '@/shared/neverthrow/x402';\nimport { tokenStringToNumber } from '@/shared/token';\nimport { getInputSchema } from '@/server/lib/x402-extensions';\n\nimport type { JsonObject } from '@/shared/neverthrow/json/types';\nimport type { ParsedResponse } from '@/shared/neverthrow/fetch/types';\n\n/**\n * Check endpoint result for non-402 responses\n */\ninterface CheckEndpointFreeResult {\n requiresPayment: false;\n statusCode: number;\n parsedResponse: ParsedResponse;\n}\n\n/**\n * Check endpoint result for 402 responses\n */\ninterface CheckEndpointPaidResult {\n requiresPayment: true;\n statusCode: number;\n routeDetails: JsonObject;\n}\n\ntype CheckEndpointResult = CheckEndpointFreeResult | CheckEndpointPaidResult;\n\n/**\n * Check if an endpoint is x402-protected and get pricing/schema info.\n * Does not make any payment.\n */\nexport async function checkEndpoint(surface: string, request: Request) {\n log.info('Checking endpoint', request.url);\n\n const responseResult = await safeFetch(surface, request);\n\n if (responseResult.isErr()) {\n return responseResult;\n }\n\n const response = responseResult.value;\n\n // Non-402 error response - return for caller to handle\n if (!response.ok && response.status !== 402) {\n return responseResult;\n }\n\n // Non-402 success response\n if (response.status !== 402) {\n const parseResponseResult = await safeParseResponse(surface, response);\n if (parseResponseResult.isErr()) {\n return parseResponseResult;\n }\n\n return ok<CheckEndpointResult>({\n requiresPayment: false,\n statusCode: response.status,\n parsedResponse: parseResponseResult.value,\n });\n }\n\n // Parse 402 payment required response\n const client = new x402HTTPClient(new x402Client());\n\n const paymentRequiredResult = await safeGetPaymentRequired(\n surface,\n client,\n response\n );\n\n if (paymentRequiredResult.isErr()) {\n return paymentRequiredResult;\n }\n\n const { resource, extensions, accepts } = paymentRequiredResult.value;\n\n // Build routeDetails as a clean JsonObject\n const routeDetails: JsonObject = {\n ...resource,\n schema: getInputSchema(extensions) as JsonObject | null,\n paymentMethods: accepts.map(accept => ({\n price: tokenStringToNumber(accept.amount),\n network: accept.network,\n asset: accept.asset,\n })),\n };\n\n return ok<CheckEndpointResult>({\n requiresPayment: true,\n statusCode: response.status,\n routeDetails,\n });\n}\n","import { formatUnits } from 'viem';\n\nexport const tokenStringToNumber = (amount: string, decimals = 6) => {\n return Number(formatUnits(BigInt(amount), decimals));\n};\n","import type { PaymentRequired } from '@x402/core/types';\nimport type { DiscoveryExtension } from '@x402/extensions/bazaar';\nimport type {\n CompleteSIWxInfo,\n SIWxExtensionInfo,\n SupportedChain,\n} from '@x402/extensions/sign-in-with-x';\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 = (\n extensions: PaymentRequired['extensions']\n): CompleteSIWxInfo | undefined => {\n const siwx = extensions?.['sign-in-with-x'] as\n | { info?: SIWxExtensionInfo; supportedChains?: SupportedChain[] }\n | undefined;\n\n if (!siwx?.info) {\n return undefined;\n }\n\n // Pick the first EVM chain from supportedChains, falling back to defaults\n const chain = siwx.supportedChains?.find(c =>\n c.chainId.startsWith('eip155:')\n );\n\n return {\n ...siwx.info,\n chainId: chain?.chainId ?? 'eip155:8453',\n type: chain?.type ?? 'eip191',\n signatureScheme: chain?.signatureScheme,\n };\n};\n","import { z } from 'zod';\nimport { ok } from '@x402scan/neverthrow';\n\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\nimport { getBaseUrl } from '@/shared/utils';\nimport { MCP_VERSION } from '@/shared/version';\n\nimport type { Address } from 'viem';\n\n/**\n * Error report input\n */\ninterface ErrorReportInput {\n tool: string;\n summary: string;\n errorMessage: string;\n resource?: string;\n stack?: string;\n fullReport?: string;\n}\n\n/**\n * Error report result\n */\ninterface ErrorReportResult {\n submitted: true;\n reportId: string;\n message: string;\n}\n\n/**\n * Submit an error report to agentcash telemetry.\n */\nexport async function submitErrorReport(\n surface: string,\n input: ErrorReportInput,\n address: Address,\n dev: boolean\n) {\n const telemetryResult = await safeFetchJson(\n surface,\n new Request(`${getBaseUrl(dev)}/api/telemetry`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n tool: input.tool,\n summary: input.summary,\n errorMessage: input.errorMessage,\n resource: input.resource,\n stack: input.stack,\n fullReport: input.fullReport,\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 return telemetryResult;\n }\n\n const { reportId } = telemetryResult.value;\n\n return ok<ErrorReportResult>({\n submitted: true,\n reportId,\n message:\n 'Error report submitted successfully. The agentcash team will investigate.',\n });\n}\n"],"mappings":"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","names":["resolved","response","formatUnits"]}
|
|
@@ -536,7 +536,6 @@ var BASE_DIRECTORY = join(homedir(), ".agentcash");
|
|
|
536
536
|
var LEGACY_DIRECTORY = join(homedir(), ".x402scan-mcp");
|
|
537
537
|
function migrateFromLegacy() {
|
|
538
538
|
if (!fs.existsSync(LEGACY_DIRECTORY)) return;
|
|
539
|
-
if (fs.existsSync(join(BASE_DIRECTORY, "wallet.json"))) return;
|
|
540
539
|
const result = resultFromThrowable(
|
|
541
540
|
"migration",
|
|
542
541
|
"fs",
|
|
@@ -599,81 +598,6 @@ var log = {
|
|
|
599
598
|
path: LOG_FILE
|
|
600
599
|
};
|
|
601
600
|
|
|
602
|
-
// src/shared/networks.ts
|
|
603
|
-
import {
|
|
604
|
-
base,
|
|
605
|
-
baseSepolia,
|
|
606
|
-
mainnet,
|
|
607
|
-
sepolia,
|
|
608
|
-
optimism,
|
|
609
|
-
arbitrum,
|
|
610
|
-
polygon
|
|
611
|
-
} from "viem/chains";
|
|
612
|
-
var CHAIN_CONFIGS = {
|
|
613
|
-
"eip155:8453": {
|
|
614
|
-
chain: base,
|
|
615
|
-
caip2: "eip155:8453",
|
|
616
|
-
v1Name: "base",
|
|
617
|
-
usdcAddress: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
|
|
618
|
-
},
|
|
619
|
-
"eip155:84532": {
|
|
620
|
-
chain: baseSepolia,
|
|
621
|
-
caip2: "eip155:84532",
|
|
622
|
-
v1Name: "base-sepolia",
|
|
623
|
-
usdcAddress: "0x036CbD53842c5426634e7929541eC2318f3dCF7e"
|
|
624
|
-
},
|
|
625
|
-
"eip155:1": {
|
|
626
|
-
chain: mainnet,
|
|
627
|
-
caip2: "eip155:1",
|
|
628
|
-
v1Name: "ethereum",
|
|
629
|
-
usdcAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
|
|
630
|
-
},
|
|
631
|
-
"eip155:11155111": {
|
|
632
|
-
chain: sepolia,
|
|
633
|
-
caip2: "eip155:11155111",
|
|
634
|
-
v1Name: "ethereum-sepolia",
|
|
635
|
-
usdcAddress: "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238"
|
|
636
|
-
},
|
|
637
|
-
"eip155:10": {
|
|
638
|
-
chain: optimism,
|
|
639
|
-
caip2: "eip155:10",
|
|
640
|
-
v1Name: "optimism",
|
|
641
|
-
usdcAddress: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85"
|
|
642
|
-
},
|
|
643
|
-
"eip155:42161": {
|
|
644
|
-
chain: arbitrum,
|
|
645
|
-
caip2: "eip155:42161",
|
|
646
|
-
v1Name: "arbitrum",
|
|
647
|
-
usdcAddress: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831"
|
|
648
|
-
},
|
|
649
|
-
"eip155:137": {
|
|
650
|
-
chain: polygon,
|
|
651
|
-
caip2: "eip155:137",
|
|
652
|
-
v1Name: "polygon",
|
|
653
|
-
usdcAddress: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"
|
|
654
|
-
}
|
|
655
|
-
};
|
|
656
|
-
var V1_TO_CAIP2 = {
|
|
657
|
-
base: "eip155:8453",
|
|
658
|
-
"base-sepolia": "eip155:84532",
|
|
659
|
-
ethereum: "eip155:1",
|
|
660
|
-
"ethereum-sepolia": "eip155:11155111",
|
|
661
|
-
optimism: "eip155:10",
|
|
662
|
-
arbitrum: "eip155:42161",
|
|
663
|
-
polygon: "eip155:137"
|
|
664
|
-
};
|
|
665
|
-
var DEFAULT_NETWORK = "eip155:8453";
|
|
666
|
-
function toCaip2(network) {
|
|
667
|
-
if (network.startsWith("eip155:")) return network;
|
|
668
|
-
return V1_TO_CAIP2[network.toLowerCase()] ?? network;
|
|
669
|
-
}
|
|
670
|
-
function getChainConfig(network) {
|
|
671
|
-
return CHAIN_CONFIGS[toCaip2(network)];
|
|
672
|
-
}
|
|
673
|
-
function getChainName(network) {
|
|
674
|
-
return getChainConfig(network)?.chain.name ?? network;
|
|
675
|
-
}
|
|
676
|
-
|
|
677
601
|
// src/shared/neverthrow/parse/index.ts
|
|
678
602
|
import z from "zod";
|
|
679
603
|
var type = "json";
|
|
@@ -814,9 +738,31 @@ var openDepositLink = async (address, flags) => {
|
|
|
814
738
|
await open(depositLink);
|
|
815
739
|
};
|
|
816
740
|
|
|
741
|
+
// src/shared/balance.ts
|
|
742
|
+
import z2 from "zod";
|
|
743
|
+
var getBalance = async ({
|
|
744
|
+
address,
|
|
745
|
+
flags,
|
|
746
|
+
surface
|
|
747
|
+
}) => {
|
|
748
|
+
const url = `${getBaseUrl(flags.dev)}/api/rpc/balance/${address}`;
|
|
749
|
+
const res = await safeFetchJson(
|
|
750
|
+
surface,
|
|
751
|
+
new Request(url, {
|
|
752
|
+
method: "GET",
|
|
753
|
+
headers: {
|
|
754
|
+
accept: "application/json"
|
|
755
|
+
}
|
|
756
|
+
}),
|
|
757
|
+
z2.object({
|
|
758
|
+
chain: z2.number(),
|
|
759
|
+
balance: z2.coerce.number()
|
|
760
|
+
})
|
|
761
|
+
);
|
|
762
|
+
return res;
|
|
763
|
+
};
|
|
764
|
+
|
|
817
765
|
export {
|
|
818
|
-
DEFAULT_NETWORK,
|
|
819
|
-
getChainName,
|
|
820
766
|
resultFromPromise,
|
|
821
767
|
resultFromThrowable,
|
|
822
768
|
ok2 as ok,
|
|
@@ -833,10 +779,12 @@ export {
|
|
|
833
779
|
safeReadFile,
|
|
834
780
|
safeWriteFile,
|
|
835
781
|
safeChmod,
|
|
782
|
+
LEGACY_DIRECTORY,
|
|
836
783
|
configFile,
|
|
837
784
|
log,
|
|
838
785
|
getBaseUrl,
|
|
839
786
|
getDepositLink,
|
|
840
|
-
openDepositLink
|
|
787
|
+
openDepositLink,
|
|
788
|
+
getBalance
|
|
841
789
|
};
|
|
842
|
-
//# sourceMappingURL=chunk-
|
|
790
|
+
//# sourceMappingURL=chunk-VX2WPSZV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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/parse/index.ts","../../src/shared/neverthrow/fetch/index.ts","../../src/shared/utils.ts","../../src/shared/balance.ts"],"sourcesContent":["import { readFile, writeFile, appendFile, chmod } from 'fs/promises';\n\nimport { err, 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, 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, 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, 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, chmod(path, mode), () => ({\n cause: 'file_not_chmodable',\n message: 'Failed to chmod file',\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\nimport { resultFromThrowable } from '@x402scan/neverthrow';\n\nconst BASE_DIRECTORY = join(homedir(), '.agentcash');\nexport const LEGACY_DIRECTORY = join(homedir(), '.x402scan-mcp');\n\n/**\n * Auto-migrate files from ~/.x402scan-mcp/ to ~/.agentcash/\n * Copies wallet.json (and any other config) on first run after upgrade.\n * Only copies files that don't already exist in the new location.\n */\nfunction migrateFromLegacy(): void {\n if (!fs.existsSync(LEGACY_DIRECTORY)) return;\n\n const result = resultFromThrowable(\n 'migration',\n 'fs',\n () => {\n const files = fs.readdirSync(LEGACY_DIRECTORY);\n for (const file of files) {\n // Skip logs — not worth migrating\n if (file.endsWith('.log')) continue;\n\n const src = join(LEGACY_DIRECTORY, file);\n const dest = join(BASE_DIRECTORY, file);\n\n if (!fs.existsSync(dest) && fs.statSync(src).isFile()) {\n fs.copyFileSync(src, dest);\n // Preserve original permissions (wallet.json is 0600)\n const { mode } = fs.statSync(src);\n fs.chmodSync(dest, mode);\n }\n }\n },\n e => ({\n cause: 'migration_failed' as const,\n message: `Failed to migrate: ${e instanceof Error ? e.message : String(e)}`,\n })\n );\n\n if (result.isErr()) {\n console.error(\n `[agentcash] Warning: failed to migrate files from ${LEGACY_DIRECTORY} to ${BASE_DIRECTORY}. ` +\n `Your wallet may still be at ${join(LEGACY_DIRECTORY, 'wallet.json')} — copy it manually to ${join(BASE_DIRECTORY, 'wallet.json')}. ` +\n `Error: ${result.error.message}`\n );\n }\n}\n\nif (!fs.existsSync(BASE_DIRECTORY)) {\n fs.mkdirSync(BASE_DIRECTORY, { recursive: true });\n}\n\nmigrateFromLegacy();\n\nexport const configFile = (name: `${string}.${string}`) => {\n if (!fs.existsSync(BASE_DIRECTORY)) {\n fs.mkdirSync(BASE_DIRECTORY, { recursive: true });\n }\n const filePath = join(BASE_DIRECTORY, name);\n return filePath;\n};\n","import { safeAppendFile } from '@/shared/neverthrow/fs';\n\nimport { configFile } from './fs';\nimport { isVerbose } from './cli-context';\n\nconst LOG_FILE = configFile('mcp.log');\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 (isVerbose()) {\n console.error(`[agentcash] ${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 isVerbose() && write('DEBUG', msg, args),\n path: LOG_FILE,\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 contentType from 'content-type';\nimport { err, ok, resultFromPromise } from '@x402scan/neverthrow';\n\nimport type z from 'zod';\n\nimport type { BaseError, Error } from '@x402scan/neverthrow/types';\nimport type { BaseFetchError, FetchError, ParsedResponse } from './types';\nimport type { JsonObject } from '../json/types';\nimport { safeParse } from '../parse';\n\nconst IMAGE_TYPES = new Set([\n 'image/png',\n 'image/jpeg',\n 'image/gif',\n 'image/webp',\n 'image/svg+xml',\n 'image/tiff',\n 'image/bmp',\n 'image/ico',\n]);\n\nconst errorType = 'fetch';\n\nexport const fetchErr = (surface: string, error: BaseFetchError) =>\n err(errorType, surface, error);\nexport const fetchOk = <T>(value: T) => ok(value);\n\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>(\n surface: string,\n request: Request,\n schema: z.ZodSchema<T>\n) => {\n return safeFetch(surface, request)\n .andThen(response => {\n if (!response.ok) {\n return fetchHttpErr(surface, response);\n }\n\n return resultFromPromise(errorType, surface, response.json(), () => ({\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 .andThen(data => safeParse(surface, schema, data));\n};\n\nexport const safeParseResponse = (surface: string, response: Response) => {\n return resultFromPromise(\n errorType,\n surface,\n (async (): Promise<ParsedResponse> => {\n const header = response.headers.get('content-type');\n const { type: mimeType } = header\n ? contentType.parse(header)\n : { type: 'application/octet-stream' };\n\n switch (mimeType) {\n case 'application/json':\n return {\n type: 'json' as const,\n data: (await response.json()) as JsonObject,\n };\n case 'application/pdf':\n return {\n type: 'pdf' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n case 'application/octet-stream':\n return {\n type: 'octet-stream' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n case 'multipart/form-data':\n return { type: 'formData' as const, data: await response.formData() };\n }\n\n if (IMAGE_TYPES.has(mimeType)) {\n return {\n type: 'image' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n }\n\n if (mimeType.startsWith('audio/')) {\n return {\n type: 'audio' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n }\n\n if (mimeType.startsWith('video/')) {\n return {\n type: 'video' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n }\n\n if (mimeType.startsWith('text/')) {\n return { type: 'text' as const, data: await response.text() };\n }\n\n throw new Error(`Unsupported content type: ${header}`);\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';\n\nimport { getBaseUrl } from '@/shared/utils';\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\n\nimport type { Address } from 'viem';\nimport type { GlobalFlags } from '@/types';\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(\n surface,\n new Request(url, {\n method: 'GET',\n headers: {\n accept: 'application/json',\n },\n }),\n z.object({\n chain: z.number(),\n balance: z.coerce.number(),\n })\n );\n\n return res;\n};\n"],"mappings":"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","names":["v","ok","err","Result","fromThrowable","ok","err","type","ok","err","type","err","err","ok","errorType","err","ok","z","z"]}
|