agentcash 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/run-server.cjs +8 -4
- package/dist/esm/{chunk-VC5CLABO.js → chunk-4Q7QFS3O.js} +2 -2
- package/dist/esm/{chunk-EW25ERKW.js → chunk-P7WFI336.js} +2 -2
- package/dist/esm/chunk-SF3JWCTJ.js +7 -0
- package/dist/esm/{chunk-6RYCEJR7.js → chunk-UVO3ZZGC.js} +2 -2
- package/dist/esm/{chunk-YC3QM3JN.js → chunk-VBQYLC7F.js} +2 -2
- package/dist/esm/{chunk-M7G7WGN7.js → chunk-WROGRZ4L.js} +2 -2
- package/dist/esm/{fetch-VUI7TYUI.js → fetch-IQ6WDIU7.js} +4 -4
- package/dist/esm/index.js +13 -13
- package/dist/esm/{install-NNR5PKP2.js → install-ZGLLK225.js} +3 -3
- package/dist/esm/{onboard-ACBXF5EZ.js → onboard-KORBDJEE.js} +5 -5
- package/dist/esm/{report-error-4R6Z2DGD.js → report-error-352HDKYW.js} +3 -3
- package/dist/esm/{server-7EZORMAF.js → server-45ZQGODV.js} +12 -8
- package/dist/esm/server-45ZQGODV.js.map +1 -0
- package/dist/esm/{server-ANESRI52.js → server-UAIAMGJS.js} +2 -2
- package/dist/esm/{settings-LUYHCU5T.js → settings-NIG3JCWL.js} +3 -3
- package/dist/esm/{try-HRKABFHO.js → try-IH77VUTC.js} +3 -3
- package/dist/esm/{wallet-DNW6DBSU.js → wallet-RXHBDJED.js} +3 -3
- package/package.json +3 -3
- package/dist/esm/chunk-JM7J5ZIS.js +0 -7
- package/dist/esm/server-7EZORMAF.js.map +0 -1
- /package/dist/esm/{chunk-VC5CLABO.js.map → chunk-4Q7QFS3O.js.map} +0 -0
- /package/dist/esm/{chunk-EW25ERKW.js.map → chunk-P7WFI336.js.map} +0 -0
- /package/dist/esm/{chunk-JM7J5ZIS.js.map → chunk-SF3JWCTJ.js.map} +0 -0
- /package/dist/esm/{chunk-6RYCEJR7.js.map → chunk-UVO3ZZGC.js.map} +0 -0
- /package/dist/esm/{chunk-YC3QM3JN.js.map → chunk-VBQYLC7F.js.map} +0 -0
- /package/dist/esm/{chunk-M7G7WGN7.js.map → chunk-WROGRZ4L.js.map} +0 -0
- /package/dist/esm/{fetch-VUI7TYUI.js.map → fetch-IQ6WDIU7.js.map} +0 -0
- /package/dist/esm/{install-NNR5PKP2.js.map → install-ZGLLK225.js.map} +0 -0
- /package/dist/esm/{onboard-ACBXF5EZ.js.map → onboard-KORBDJEE.js.map} +0 -0
- /package/dist/esm/{report-error-4R6Z2DGD.js.map → report-error-352HDKYW.js.map} +0 -0
- /package/dist/esm/{server-ANESRI52.js.map → server-UAIAMGJS.js.map} +0 -0
- /package/dist/esm/{settings-LUYHCU5T.js.map → settings-NIG3JCWL.js.map} +0 -0
- /package/dist/esm/{try-HRKABFHO.js.map → try-IH77VUTC.js.map} +0 -0
- /package/dist/esm/{wallet-DNW6DBSU.js.map → wallet-RXHBDJED.js.map} +0 -0
package/dist/cjs/run-server.cjs
CHANGED
|
@@ -95225,7 +95225,7 @@ var import_path2 = require("path");
|
|
|
95225
95225
|
var import_url = require("url");
|
|
95226
95226
|
function getVersion() {
|
|
95227
95227
|
if (true) {
|
|
95228
|
-
return "0.9.
|
|
95228
|
+
return "0.9.1";
|
|
95229
95229
|
}
|
|
95230
95230
|
const __dirname3 = (0, import_path2.dirname)((0, import_url.fileURLToPath)(importMetaUrl));
|
|
95231
95231
|
const pkg2 = JSON.parse(
|
|
@@ -95378,7 +95378,7 @@ var isFetchError = (error48) => {
|
|
|
95378
95378
|
|
|
95379
95379
|
// src/shared/mpp-enabled.ts
|
|
95380
95380
|
init_cjs_shims();
|
|
95381
|
-
var isMppEnabled = () => "0.9.
|
|
95381
|
+
var isMppEnabled = () => "0.9.1".includes("-mpp");
|
|
95382
95382
|
|
|
95383
95383
|
// src/operations/fetch-with-payment.ts
|
|
95384
95384
|
init_cjs_shims();
|
|
@@ -121569,10 +121569,12 @@ var registerWalletTools = ({
|
|
|
121569
121569
|
description: DESCRIPTIONS.getWalletInfo.mcp,
|
|
121570
121570
|
outputSchema: external_exports3.object({
|
|
121571
121571
|
address: external_exports3.string().describe(TOOL_PARAMS.getWalletInfo.output.address),
|
|
121572
|
+
solanaAddress: external_exports3.string().describe(TOOL_PARAMS.getWalletInfo.output.address),
|
|
121572
121573
|
balance: external_exports3.number().describe(TOOL_PARAMS.getWalletInfo.output.balance),
|
|
121573
121574
|
chains: external_exports3.array(chainBalanceSchema).describe(TOOL_PARAMS.getWalletInfo.output.chains),
|
|
121574
121575
|
isNewWallet: external_exports3.boolean().describe(TOOL_PARAMS.getWalletInfo.output.isNewWallet),
|
|
121575
121576
|
depositLink: external_exports3.string().url().describe(TOOL_PARAMS.getWalletInfo.output.depositLink),
|
|
121577
|
+
solanaDepositLink: external_exports3.string().url().describe(TOOL_PARAMS.getWalletInfo.output.depositLink),
|
|
121576
121578
|
onboardingCta: external_exports3.object({
|
|
121577
121579
|
onboardLink: external_exports3.string().url().describe(
|
|
121578
121580
|
TOOL_PARAMS.getWalletInfo.output.onboardingCtaOnboardLink
|
|
@@ -121598,10 +121600,12 @@ var registerWalletTools = ({
|
|
|
121598
121600
|
}
|
|
121599
121601
|
return mcpSuccessStructuredJson({
|
|
121600
121602
|
address: result.value.address,
|
|
121603
|
+
solanaAddress: result.value.solanaAddress,
|
|
121601
121604
|
balance: result.value.balance,
|
|
121602
|
-
chains: result.value.chains
|
|
121605
|
+
chains: result.value.chains,
|
|
121603
121606
|
isNewWallet: result.value.isNewWallet,
|
|
121604
121607
|
depositLink: result.value.depositLink,
|
|
121608
|
+
solanaDepositLink: result.value.solanaDepositLink,
|
|
121605
121609
|
...result.value.onboardingCta ? {
|
|
121606
121610
|
onboardingCta: {
|
|
121607
121611
|
onboardLink: result.value.onboardingCta.onboardLink,
|
|
@@ -123026,7 +123030,7 @@ var import_path3 = require("path");
|
|
|
123026
123030
|
var import_url2 = require("url");
|
|
123027
123031
|
function getVersion3() {
|
|
123028
123032
|
if (true) {
|
|
123029
|
-
return "0.9.
|
|
123033
|
+
return "0.9.1";
|
|
123030
123034
|
}
|
|
123031
123035
|
const __dirname3 = (0, import_path3.dirname)((0, import_url2.fileURLToPath)(importMetaUrl));
|
|
123032
123036
|
const pkg2 = JSON.parse(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MCP_VERSION
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WROGRZ4L.js";
|
|
4
4
|
import {
|
|
5
5
|
getBaseUrl
|
|
6
6
|
} from "./chunk-OKHBFFZP.js";
|
|
@@ -51,4 +51,4 @@ async function submitErrorReport(surface, input, address, dev) {
|
|
|
51
51
|
export {
|
|
52
52
|
submitErrorReport
|
|
53
53
|
};
|
|
54
|
-
//# sourceMappingURL=chunk-
|
|
54
|
+
//# sourceMappingURL=chunk-4Q7QFS3O.js.map
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
} from "./chunk-OKHBFFZP.js";
|
|
11
11
|
import {
|
|
12
12
|
isMppEnabled
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-SF3JWCTJ.js";
|
|
14
14
|
import {
|
|
15
15
|
EVM_CONFIGS,
|
|
16
16
|
SOLANA_CONFIG,
|
|
@@ -109,4 +109,4 @@ export {
|
|
|
109
109
|
getOnboardingCta,
|
|
110
110
|
getWalletInfo
|
|
111
111
|
};
|
|
112
|
-
//# sourceMappingURL=chunk-
|
|
112
|
+
//# sourceMappingURL=chunk-P7WFI336.js.map
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from "./chunk-OKHBFFZP.js";
|
|
15
15
|
import {
|
|
16
16
|
isMppEnabled
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-SF3JWCTJ.js";
|
|
18
18
|
import {
|
|
19
19
|
networkSchema
|
|
20
20
|
} from "./chunk-G3AVBW3H.js";
|
|
@@ -488,4 +488,4 @@ export {
|
|
|
488
488
|
DEFAULT_MAX_AMOUNT,
|
|
489
489
|
createFetchWithPayment
|
|
490
490
|
};
|
|
491
|
-
//# sourceMappingURL=chunk-
|
|
491
|
+
//# sourceMappingURL=chunk-UVO3ZZGC.js.map
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "./chunk-RBEVKU3U.js";
|
|
7
7
|
import {
|
|
8
8
|
DIST_TAG
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-WROGRZ4L.js";
|
|
10
10
|
import {
|
|
11
11
|
log,
|
|
12
12
|
safeReadFile,
|
|
@@ -596,4 +596,4 @@ export {
|
|
|
596
596
|
tryAddServer,
|
|
597
597
|
addServer
|
|
598
598
|
};
|
|
599
|
-
//# sourceMappingURL=chunk-
|
|
599
|
+
//# sourceMappingURL=chunk-VBQYLC7F.js.map
|
|
@@ -4,7 +4,7 @@ import { dirname, join } from "path";
|
|
|
4
4
|
import { fileURLToPath } from "url";
|
|
5
5
|
function getVersion() {
|
|
6
6
|
if (true) {
|
|
7
|
-
return "0.9.
|
|
7
|
+
return "0.9.1";
|
|
8
8
|
}
|
|
9
9
|
const __dirname2 = dirname(fileURLToPath(import.meta.url));
|
|
10
10
|
const pkg = JSON.parse(
|
|
@@ -19,4 +19,4 @@ export {
|
|
|
19
19
|
MCP_VERSION,
|
|
20
20
|
DIST_TAG
|
|
21
21
|
};
|
|
22
|
-
//# sourceMappingURL=chunk-
|
|
22
|
+
//# sourceMappingURL=chunk-WROGRZ4L.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createFetchWithPayment
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-UVO3ZZGC.js";
|
|
4
4
|
import {
|
|
5
5
|
MCP_VERSION
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-WROGRZ4L.js";
|
|
7
7
|
import "./chunk-6FEDQ4HI.js";
|
|
8
8
|
import "./chunk-RAFN7MFS.js";
|
|
9
9
|
import "./chunk-OKHBFFZP.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-SF3JWCTJ.js";
|
|
11
11
|
import "./chunk-G3AVBW3H.js";
|
|
12
12
|
import {
|
|
13
13
|
getWalletOrExit,
|
|
@@ -115,4 +115,4 @@ function extractJsonErrorMessage(body) {
|
|
|
115
115
|
export {
|
|
116
116
|
fetchCommand
|
|
117
117
|
};
|
|
118
|
-
//# sourceMappingURL=fetch-
|
|
118
|
+
//# sourceMappingURL=fetch-IQ6WDIU7.js.map
|
package/dist/esm/index.js
CHANGED
|
@@ -5,10 +5,10 @@ import {
|
|
|
5
5
|
} from "./chunk-O2AS5QAF.js";
|
|
6
6
|
import {
|
|
7
7
|
MCP_VERSION
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-WROGRZ4L.js";
|
|
9
9
|
import {
|
|
10
10
|
isMppEnabled
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-SF3JWCTJ.js";
|
|
12
12
|
import "./chunk-G3AVBW3H.js";
|
|
13
13
|
import {
|
|
14
14
|
DESCRIPTIONS,
|
|
@@ -98,7 +98,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
98
98
|
description: "Maximum amount (USD) to pay per request. Aborts if the endpoint requests more. Defaults to $5."
|
|
99
99
|
}).epilogue(DESCRIPTIONS.fetch.epilogue),
|
|
100
100
|
async (args) => {
|
|
101
|
-
const { fetchCommand } = await import("./fetch-
|
|
101
|
+
const { fetchCommand } = await import("./fetch-IQ6WDIU7.js");
|
|
102
102
|
await fetchCommand(
|
|
103
103
|
{
|
|
104
104
|
...args,
|
|
@@ -189,7 +189,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
189
189
|
demandOption: true
|
|
190
190
|
}),
|
|
191
191
|
async (args) => {
|
|
192
|
-
const { tryCommand } = await import("./try-
|
|
192
|
+
const { tryCommand } = await import("./try-IH77VUTC.js");
|
|
193
193
|
await tryCommand({ url: args.url }, args);
|
|
194
194
|
}
|
|
195
195
|
).command(
|
|
@@ -280,7 +280,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
280
280
|
description: "The invite code to redeem (optional)"
|
|
281
281
|
}),
|
|
282
282
|
async (args) => {
|
|
283
|
-
const { onboardCommand } = await import("./onboard-
|
|
283
|
+
const { onboardCommand } = await import("./onboard-KORBDJEE.js");
|
|
284
284
|
await onboardCommand({ code: args.code ?? args.invite }, args);
|
|
285
285
|
}
|
|
286
286
|
).command(
|
|
@@ -291,7 +291,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
291
291
|
DESCRIPTIONS.getWalletInfo.cli,
|
|
292
292
|
(yargs3) => yargs3,
|
|
293
293
|
async (args) => {
|
|
294
|
-
const { walletInfoCommand } = await import("./wallet-
|
|
294
|
+
const { walletInfoCommand } = await import("./wallet-RXHBDJED.js");
|
|
295
295
|
await walletInfoCommand({}, args);
|
|
296
296
|
}
|
|
297
297
|
).command(
|
|
@@ -303,7 +303,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
303
303
|
demandOption: true
|
|
304
304
|
}),
|
|
305
305
|
async (args) => {
|
|
306
|
-
const { walletRedeemCommand } = await import("./wallet-
|
|
306
|
+
const { walletRedeemCommand } = await import("./wallet-RXHBDJED.js");
|
|
307
307
|
await walletRedeemCommand({ code: args.code }, args);
|
|
308
308
|
}
|
|
309
309
|
).command(
|
|
@@ -311,7 +311,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
311
311
|
"Get wallet address",
|
|
312
312
|
(yargs3) => yargs3,
|
|
313
313
|
async (args) => {
|
|
314
|
-
const { walletAddressCommand } = await import("./wallet-
|
|
314
|
+
const { walletAddressCommand } = await import("./wallet-RXHBDJED.js");
|
|
315
315
|
await walletAddressCommand({}, args);
|
|
316
316
|
}
|
|
317
317
|
).demandCommand(1, "You must specify a wallet subcommand").strict(),
|
|
@@ -325,7 +325,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
325
325
|
"Show current settings",
|
|
326
326
|
(yargs3) => yargs3,
|
|
327
327
|
async (args) => {
|
|
328
|
-
const { settingsGetCommand } = await import("./settings-
|
|
328
|
+
const { settingsGetCommand } = await import("./settings-NIG3JCWL.js");
|
|
329
329
|
settingsGetCommand({}, args);
|
|
330
330
|
}
|
|
331
331
|
).command(
|
|
@@ -341,7 +341,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
341
341
|
demandOption: true
|
|
342
342
|
}),
|
|
343
343
|
async (args) => {
|
|
344
|
-
const { settingsSetCommand } = await import("./settings-
|
|
344
|
+
const { settingsSetCommand } = await import("./settings-NIG3JCWL.js");
|
|
345
345
|
settingsSetCommand({ key: args.key, value: args.value }, args);
|
|
346
346
|
}
|
|
347
347
|
).demandCommand(1, "You must specify a settings subcommand").strict(),
|
|
@@ -373,7 +373,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
373
373
|
description: "Detailed report with context and repro steps"
|
|
374
374
|
}),
|
|
375
375
|
async (args) => {
|
|
376
|
-
const { reportErrorCommand } = await import("./report-error-
|
|
376
|
+
const { reportErrorCommand } = await import("./report-error-352HDKYW.js");
|
|
377
377
|
await reportErrorCommand(
|
|
378
378
|
{
|
|
379
379
|
tool: args.tool,
|
|
@@ -391,7 +391,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
391
391
|
"Start the MCP server (default when no command specified)",
|
|
392
392
|
(yargs2) => yargs2,
|
|
393
393
|
async (args) => {
|
|
394
|
-
const { serverCommand } = await import("./server-
|
|
394
|
+
const { serverCommand } = await import("./server-UAIAMGJS.js");
|
|
395
395
|
await serverCommand(args);
|
|
396
396
|
}
|
|
397
397
|
).command(
|
|
@@ -404,7 +404,7 @@ void yargs(hideBin(process.argv)).scriptName("agentcash").usage("$0 [command] [o
|
|
|
404
404
|
default: isClaudeCode ? "claude-code" /* ClaudeCode */ : void 0
|
|
405
405
|
}),
|
|
406
406
|
async (args) => {
|
|
407
|
-
const { installMcpServer } = await import("./install-
|
|
407
|
+
const { installMcpServer } = await import("./install-ZGLLK225.js");
|
|
408
408
|
await installMcpServer(args);
|
|
409
409
|
}
|
|
410
410
|
).command(
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-ST5ITYIM.js";
|
|
4
4
|
import {
|
|
5
5
|
addServer
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-VBQYLC7F.js";
|
|
7
7
|
import {
|
|
8
8
|
wait
|
|
9
9
|
} from "./chunk-DZNSJ2BA.js";
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
Clients,
|
|
15
15
|
clientMetadata
|
|
16
16
|
} from "./chunk-RBEVKU3U.js";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-WROGRZ4L.js";
|
|
18
18
|
import "./chunk-6XGAIMNK.js";
|
|
19
19
|
import {
|
|
20
20
|
getBalance
|
|
@@ -189,4 +189,4 @@ var installMcpServer = async (flags) => {
|
|
|
189
189
|
export {
|
|
190
190
|
installMcpServer
|
|
191
191
|
};
|
|
192
|
-
//# sourceMappingURL=install-
|
|
192
|
+
//# sourceMappingURL=install-ZGLLK225.js.map
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getPlatformPath,
|
|
3
3
|
tryAddServer
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-VBQYLC7F.js";
|
|
5
5
|
import "./chunk-DZNSJ2BA.js";
|
|
6
6
|
import {
|
|
7
7
|
redeemInviteCode
|
|
8
8
|
} from "./chunk-CM6NIM6K.js";
|
|
9
9
|
import "./chunk-RBEVKU3U.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-WROGRZ4L.js";
|
|
11
11
|
import {
|
|
12
12
|
getOnboardingCta,
|
|
13
13
|
getWalletInfo
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-P7WFI336.js";
|
|
15
15
|
import "./chunk-6XGAIMNK.js";
|
|
16
16
|
import "./chunk-RAFN7MFS.js";
|
|
17
17
|
import {
|
|
18
18
|
getBaseUrl,
|
|
19
19
|
getDepositLink
|
|
20
20
|
} from "./chunk-OKHBFFZP.js";
|
|
21
|
-
import "./chunk-
|
|
21
|
+
import "./chunk-SF3JWCTJ.js";
|
|
22
22
|
import "./chunk-G3AVBW3H.js";
|
|
23
23
|
import {
|
|
24
24
|
detect,
|
|
@@ -565,4 +565,4 @@ async function onboardCommand(args, flags) {
|
|
|
565
565
|
export {
|
|
566
566
|
onboardCommand
|
|
567
567
|
};
|
|
568
|
-
//# sourceMappingURL=onboard-
|
|
568
|
+
//# sourceMappingURL=onboard-KORBDJEE.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
submitErrorReport
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-4Q7QFS3O.js";
|
|
4
|
+
import "./chunk-WROGRZ4L.js";
|
|
5
5
|
import "./chunk-OKHBFFZP.js";
|
|
6
6
|
import {
|
|
7
7
|
getWalletOrExit
|
|
@@ -60,4 +60,4 @@ async function reportErrorCommand(args, flags) {
|
|
|
60
60
|
export {
|
|
61
61
|
reportErrorCommand
|
|
62
62
|
};
|
|
63
|
-
//# sourceMappingURL=report-error-
|
|
63
|
+
//# sourceMappingURL=report-error-352HDKYW.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-CM6NIM6K.js";
|
|
4
4
|
import {
|
|
5
5
|
submitErrorReport
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-4Q7QFS3O.js";
|
|
7
7
|
import {
|
|
8
8
|
loadUserOrigins
|
|
9
9
|
} from "./chunk-O2AS5QAF.js";
|
|
@@ -12,10 +12,10 @@ import {
|
|
|
12
12
|
createFetchWithPayment,
|
|
13
13
|
getSettings,
|
|
14
14
|
setSettings
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-UVO3ZZGC.js";
|
|
16
16
|
import {
|
|
17
17
|
MCP_VERSION
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-WROGRZ4L.js";
|
|
19
19
|
import {
|
|
20
20
|
createFetchWithAuth
|
|
21
21
|
} from "./chunk-U2I7LBH4.js";
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
} from "./chunk-2OX7YBGR.js";
|
|
26
26
|
import {
|
|
27
27
|
getWalletInfo
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-P7WFI336.js";
|
|
29
29
|
import "./chunk-6XGAIMNK.js";
|
|
30
30
|
import {
|
|
31
31
|
getBalance
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
} from "./chunk-OKHBFFZP.js";
|
|
37
37
|
import {
|
|
38
38
|
isMppEnabled
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-SF3JWCTJ.js";
|
|
40
40
|
import "./chunk-G3AVBW3H.js";
|
|
41
41
|
import {
|
|
42
42
|
buildRequest,
|
|
@@ -418,10 +418,12 @@ var registerWalletTools = ({
|
|
|
418
418
|
description: DESCRIPTIONS.getWalletInfo.mcp,
|
|
419
419
|
outputSchema: z3.object({
|
|
420
420
|
address: z3.string().describe(TOOL_PARAMS.getWalletInfo.output.address),
|
|
421
|
+
solanaAddress: z3.string().describe(TOOL_PARAMS.getWalletInfo.output.address),
|
|
421
422
|
balance: z3.number().describe(TOOL_PARAMS.getWalletInfo.output.balance),
|
|
422
423
|
chains: z3.array(chainBalanceSchema).describe(TOOL_PARAMS.getWalletInfo.output.chains),
|
|
423
424
|
isNewWallet: z3.boolean().describe(TOOL_PARAMS.getWalletInfo.output.isNewWallet),
|
|
424
425
|
depositLink: z3.string().url().describe(TOOL_PARAMS.getWalletInfo.output.depositLink),
|
|
426
|
+
solanaDepositLink: z3.string().url().describe(TOOL_PARAMS.getWalletInfo.output.depositLink),
|
|
425
427
|
onboardingCta: z3.object({
|
|
426
428
|
onboardLink: z3.string().url().describe(
|
|
427
429
|
TOOL_PARAMS.getWalletInfo.output.onboardingCtaOnboardLink
|
|
@@ -447,10 +449,12 @@ var registerWalletTools = ({
|
|
|
447
449
|
}
|
|
448
450
|
return mcpSuccessStructuredJson({
|
|
449
451
|
address: result.value.address,
|
|
452
|
+
solanaAddress: result.value.solanaAddress,
|
|
450
453
|
balance: result.value.balance,
|
|
451
|
-
chains: result.value.chains
|
|
454
|
+
chains: result.value.chains,
|
|
452
455
|
isNewWallet: result.value.isNewWallet,
|
|
453
456
|
depositLink: result.value.depositLink,
|
|
457
|
+
solanaDepositLink: result.value.solanaDepositLink,
|
|
454
458
|
...result.value.onboardingCta ? {
|
|
455
459
|
onboardingCta: {
|
|
456
460
|
onboardLink: result.value.onboardingCta.onboardLink,
|
|
@@ -789,7 +793,7 @@ import { dirname, join } from "path";
|
|
|
789
793
|
import { fileURLToPath } from "url";
|
|
790
794
|
function getVersion() {
|
|
791
795
|
if (true) {
|
|
792
|
-
return "0.9.
|
|
796
|
+
return "0.9.1";
|
|
793
797
|
}
|
|
794
798
|
const __dirname2 = dirname(fileURLToPath(import.meta.url));
|
|
795
799
|
const pkg = JSON.parse(
|
|
@@ -870,4 +874,4 @@ var startServer = async (flags) => {
|
|
|
870
874
|
export {
|
|
871
875
|
startServer
|
|
872
876
|
};
|
|
873
|
-
//# sourceMappingURL=server-
|
|
877
|
+
//# sourceMappingURL=server-45ZQGODV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/server/index.ts","../../src/server/tools/fetch.ts","../../src/server/tools/response/lib.ts","../../src/server/tools/response/error.ts","../../src/server/tools/response/success.ts","../../src/server/tools/response/safe-handler.ts","../../src/server/tools/lib/check-balance.ts","../../src/server/tools/auth-fetch.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/tools/settings.ts","../../src/server/lib/version.ts"],"sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { randomBytes } from 'crypto';\n\nimport { registerFetchTool } from './tools/fetch';\nimport { registerAuthTools } from './tools/auth-fetch';\nimport { registerWalletTools } from './tools/wallet';\nimport { registerCheckEndpointTool } from './tools/check-endpoint';\nimport { registerRedeemInviteTool } from './tools/redeem-invite';\nimport { registerTelemetryTools } from './tools/telemetry';\nimport { registerDiscoveryTools } from './tools/discover-resources';\nimport { registerSettingsTools } from './tools/settings';\n\nimport { MCP_VERSION } from './lib/version';\n\nimport { log } from '@/shared/log';\nimport { redeemInviteCode } from '@/shared/redeem-invite';\n\nimport type { Command } from '@/types';\nimport { buildServerInstructions } from '@/shared/descriptions';\nimport { loadUserOrigins } from '@/shared/user-origins';\nimport { getWallet } from '@/wallet';\n\nexport const startServer: Command = async flags => {\n log.info('Starting agentcash...');\n\n const { invite } = flags;\n let { sessionId } = flags;\n // Generate a random session ID if not provided\n sessionId ??= randomBytes(16).toString('hex');\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 wallets = walletResult.value;\n\n const code = invite ?? process.env.INVITE_CODE;\n\n if (code) {\n await redeemInviteCode({\n code,\n address: wallets.evmAccount.account.address,\n surface: 'startServer',\n });\n }\n\n const serverInstructions = buildServerInstructions(loadUserOrigins());\n\n const server = new McpServer(\n {\n name: 'agentcash',\n title: 'AgentCash',\n version: MCP_VERSION,\n websiteUrl: 'https://agentcash.dev',\n icons: [{ src: 'https://agentcash.dev/favicon.svg' }],\n description: serverInstructions,\n },\n {\n capabilities: {\n resources: {\n subscribe: true,\n listChanged: true,\n },\n prompts: {\n listChanged: true,\n },\n },\n instructions: serverInstructions,\n }\n );\n\n const props = {\n server,\n wallets,\n flags,\n sessionId,\n };\n\n registerFetchTool(props);\n registerAuthTools(props);\n registerWalletTools(props);\n registerCheckEndpointTool(props);\n registerRedeemInviteTool(props);\n registerDiscoveryTools(server);\n registerTelemetryTools(props);\n registerSettingsTools(props);\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 { z } from 'zod';\n\nimport type { Address } from 'viem';\n\nimport { MCP_VERSION } from '@/shared/version';\nimport {\n DEFAULT_USER_FETCH_TIMEOUT,\n safeParseResponse,\n} from '@/shared/neverthrow/fetch';\nimport { isMppEnabled } from '@/shared/mpp-enabled';\nimport {\n createFetchWithPayment,\n type BeforePaymentHook,\n} from '@/operations/fetch-with-payment';\n\nimport {\n mcpError,\n mcpErrorFetch,\n mcpSuccessResponse,\n safeHandler,\n} from './response';\nimport { requestSchema, buildRequest } from './lib/request';\nimport { checkBalance } from './lib/check-balance';\nimport { DESCRIPTIONS, TOOL_PARAMS } from '@/shared/descriptions';\n\nimport type { RegisterTools } from '@/server/types';\nimport type { JsonObject } from '@/shared/neverthrow/json/types';\nimport { Network } from '@agentcash/networks';\n\nconst toolName = 'fetch';\n\nconst paymentMethodEnum = isMppEnabled()\n ? z.enum(['x402', 'mpp'])\n : z.enum(['x402']);\n\nconst fetchInputSchema = requestSchema.extend({\n paymentMethod: paymentMethodEnum\n .optional()\n .describe(TOOL_PARAMS.fetch.paymentMethod),\n paymentNetwork: z.enum([Network.BASE, Network.SOLANA]).optional(),\n maxAmount: z\n .number()\n .positive()\n .optional()\n .describe(TOOL_PARAMS.fetch.maxAmount),\n});\n\nexport const registerFetchTool: RegisterTools = ({\n server,\n wallets,\n flags,\n sessionId,\n}) => {\n server.registerTool(\n toolName,\n {\n title: 'Fetch',\n description: DESCRIPTIONS.fetch.mcp,\n inputSchema: fetchInputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n safeHandler(async input => {\n // Balance check hook — throws to abort\n const beforePayment: BeforePaymentHook = async ctx => {\n if (ctx.protocol === 'x402') {\n await checkBalance({\n surface: toolName,\n server,\n input:\n ctx.network === Network.SOLANA\n ? {\n address: wallets.svmAccount.account.address,\n network: Network.SOLANA,\n }\n : {\n address: wallets.evmAccount.account.address,\n network: Network.BASE,\n },\n amountNeeded: ctx.amount,\n message: balance =>\n `This request costs ${ctx.amount} USDC. Your current balance is ${balance} USDC.`,\n flags,\n });\n } else if (isMppEnabled()) {\n await checkBalance({\n surface: toolName,\n server,\n input: {\n address: wallets.evmAccount.account.address,\n network: Network.TEMPO,\n tokenAddress: ctx.currency as Address,\n },\n flags,\n amountNeeded: ctx.amount,\n message: balance =>\n `This request costs ${ctx.amount} tokens. Your current Tempo balance is ${balance}.`,\n });\n }\n };\n\n const provider = flags.provider ?? `agentcash@${MCP_VERSION}`;\n\n const request = buildRequest({\n input,\n wallets,\n sessionId,\n provider,\n });\n\n const fetchResult = await createFetchWithPayment({\n surface: toolName,\n wallets,\n paymentMethod: input.paymentMethod,\n paymentNetwork: input.paymentNetwork,\n flags,\n beforePayment,\n timeout: input.timeout ?? DEFAULT_USER_FETCH_TIMEOUT,\n maxAmount: input.maxAmount,\n })(request);\n\n if (fetchResult.isErr()) {\n return mcpError(fetchResult);\n }\n\n const { response, paymentInfo } = 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 return mcpSuccessResponse(\n parseResponseResult.value,\n paymentInfo as unknown as JsonObject | undefined\n );\n })\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),\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 '@agentcash/neverthrow/types';\nimport type { BaseX402Error } from '@/shared/protocols/x402/types';\nimport type { BaseMppError } from '@/shared/protocols/mpp/types';\nimport type { BaseFetchError } from '@/shared/neverthrow/fetch/types';\n\nconst buildMcpError = (\n content: CallToolResult['content'],\n options?: { isError?: boolean }\n): CallToolResult => {\n return {\n content,\n // Default: omit isError so siblings survive parallel calls.\n // Tools with outputSchema MUST pass isError: true so the SDK\n // skips output validation on error paths.\n ...(options?.isError ? { isError: true as const } : {}),\n };\n};\n\nexport const mcpErrorJson = (\n error: JsonObject,\n options?: { isError?: boolean }\n): CallToolResult => {\n return safeStringifyJson('mcp-error-json', error).match(\n success =>\n buildMcpError([{ type: 'text' as const, text: success }], options),\n error =>\n buildMcpError(\n [{ type: 'text' as const, text: JSON.stringify(error, null, 2) }],\n options\n )\n );\n};\n\nexport const mcpError = async (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n err: Err<any, BaseX402Error | BaseMppError | BaseFetchError | BaseError>,\n options?: { isError?: boolean }\n) => {\n const { error } = err;\n if (isFetchError(error)) {\n switch (error.cause) {\n case 'network':\n case 'parse':\n return mcpErrorJson({ ...error }, options);\n case 'http':\n const { response, ...rest } = error;\n const parseResponseResult = await safeParseResponse(\n 'mcp-error-fetch-parse-response',\n response\n );\n const httpContent: CallToolResult['content'] = [\n { type: 'text' as const, text: JSON.stringify(rest, null, 2) },\n ...parseResponseResult.match(\n success => [parsedResponseToToolContentPart(success)],\n () => []\n ),\n ];\n return buildMcpError(httpContent, options);\n }\n }\n return mcpErrorJson({ ...error }, options);\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 mcpSuccessStructuredJson = (data: JsonObject): CallToolResult => {\n return safeStringifyJson('mcp-success-structured', data).match(\n success => ({\n content: [{ type: 'text' as const, text: success }],\n structuredContent: data,\n }),\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 { log } from '@/shared/log';\nimport { mcpErrorJson } from './error';\n\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Wraps an MCP tool handler so uncaught exceptions never propagate.\n * Returns error info as normal content (isError omitted) for any unhandled throw.\n *\n * This prevents sibling parallel tool calls from failing when one\n * tool encounters an unexpected error.\n */\nexport function safeHandler<T>(\n handler: (input: T) => Promise<CallToolResult>\n): (input: T) => Promise<CallToolResult> {\n return async (input: T) => {\n // eslint-disable-next-line no-restricted-syntax -- intentional last-resort catch to prevent sibling tool call failures\n try {\n return await handler(input);\n } catch (e) {\n log.error('Unhandled tool error', e);\n return mcpErrorJson({\n error: e instanceof Error ? e.message : String(e),\n cause: 'unhandled_exception',\n });\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 { GlobalFlags } from '@/types';\nimport type { GetBalanceInput } from '@agentcash/balance';\n\ninterface CheckBalanceProps {\n server: McpServer;\n amountNeeded: number;\n message: (balance: number) => string;\n flags: GlobalFlags;\n surface: string;\n input: GetBalanceInput;\n}\n\nexport const checkBalance = async ({\n server,\n input,\n amountNeeded,\n message,\n flags,\n surface,\n}: CheckBalanceProps) => {\n const balanceResult = await getBalance(surface, input, flags);\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(input.address, flags, input.network)}`\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(input.address, flags, input.network);\n }\n }\n\n return balance.balance;\n};\n","import {\n DEFAULT_USER_FETCH_TIMEOUT,\n safeParseResponse,\n} from '@/shared/neverthrow/fetch';\nimport { createFetchWithAuth } from '@/operations/fetch-with-auth';\n\nimport {\n mcpError,\n mcpSuccessJson,\n mcpSuccessResponse,\n mcpErrorFetch,\n safeHandler,\n} from './response';\n\nimport { requestSchema, buildRequest } from './lib/request';\nimport { DESCRIPTIONS } from '@/shared/descriptions';\n\nimport type { RegisterTools } from '@/server/types';\nimport { Network } from '@agentcash/networks';\nimport z from 'zod';\n\nconst toolName = 'fetch_with_auth';\n\nexport const registerAuthTools: RegisterTools = ({\n server,\n wallets,\n sessionId,\n}) => {\n server.registerTool(\n toolName,\n {\n title: 'Fetch with Authentication',\n description: DESCRIPTIONS.fetchWithAuth.mcp,\n inputSchema: requestSchema.extend({\n paymentNetwork: z.enum([Network.BASE, Network.SOLANA]).optional(),\n }),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n safeHandler(async input => {\n const result = await createFetchWithAuth({\n surface: toolName,\n wallets,\n timeout: input.timeout ?? DEFAULT_USER_FETCH_TIMEOUT,\n paymentNetwork: input.paymentNetwork,\n })(\n buildRequest({\n input,\n wallets,\n sessionId,\n })\n );\n\n if (result.isErr()) {\n return mcpError(result);\n }\n\n const value = result.value;\n\n if (value.outcome === 'no_siwx_extension') {\n return mcpSuccessJson({\n error: 'Endpoint returned 402 but no sign-in-with-x extension found',\n statusCode: 402,\n hint: 'This endpoint may require payment instead of authentication. Use execute_call for paid requests.',\n });\n }\n\n const { response } = 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 return mcpSuccessResponse(parseResponseResult.value);\n })\n );\n};\n","import { z } from 'zod';\n\nimport { getWalletInfo } from '@/operations/wallet-info';\n\nimport { mcpSuccessStructuredJson, mcpError } from './response';\nimport { DESCRIPTIONS, TOOL_PARAMS } from '@/shared/descriptions';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst chainBalanceSchema = z.object({\n chain: z.string().describe(TOOL_PARAMS.getWalletInfo.output.chain),\n balance: z.number().describe(TOOL_PARAMS.getWalletInfo.output.chainBalance),\n});\n\nexport const registerWalletTools: RegisterTools = ({\n server,\n wallets,\n flags,\n}) => {\n server.registerTool(\n 'get_wallet_info',\n {\n title: 'Get Wallet Info',\n description: DESCRIPTIONS.getWalletInfo.mcp,\n outputSchema: z.object({\n address: z.string().describe(TOOL_PARAMS.getWalletInfo.output.address),\n solanaAddress: z\n .string()\n .describe(TOOL_PARAMS.getWalletInfo.output.address),\n balance: z.number().describe(TOOL_PARAMS.getWalletInfo.output.balance),\n chains: z\n .array(chainBalanceSchema)\n .describe(TOOL_PARAMS.getWalletInfo.output.chains),\n isNewWallet: z\n .boolean()\n .describe(TOOL_PARAMS.getWalletInfo.output.isNewWallet),\n depositLink: z\n .string()\n .url()\n .describe(TOOL_PARAMS.getWalletInfo.output.depositLink),\n solanaDepositLink: z\n .string()\n .url()\n .describe(TOOL_PARAMS.getWalletInfo.output.depositLink),\n onboardingCta: z\n .object({\n onboardLink: z\n .string()\n .url()\n .describe(\n TOOL_PARAMS.getWalletInfo.output.onboardingCtaOnboardLink\n ),\n depositLink: z\n .string()\n .url()\n .describe(\n TOOL_PARAMS.getWalletInfo.output.onboardingCtaDepositLink\n ),\n message: z\n .string()\n .describe(TOOL_PARAMS.getWalletInfo.output.onboardingCtaMessage),\n })\n .optional()\n .describe(TOOL_PARAMS.getWalletInfo.output.onboardingCta),\n message: z\n .string()\n .optional()\n .describe(TOOL_PARAMS.getWalletInfo.output.message),\n }),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n async () => {\n const result = await getWalletInfo('get_wallet_info', wallets, flags);\n\n if (result.isErr()) {\n return mcpError(result, { isError: true });\n }\n\n return mcpSuccessStructuredJson({\n address: result.value.address,\n solanaAddress: result.value.solanaAddress,\n balance: result.value.balance,\n chains: result.value.chains,\n isNewWallet: result.value.isNewWallet,\n depositLink: result.value.depositLink,\n solanaDepositLink: result.value.solanaDepositLink,\n ...(result.value.onboardingCta\n ? {\n onboardingCta: {\n onboardLink: result.value.onboardingCta.onboardLink,\n depositLink: result.value.onboardingCta.depositLink,\n message: result.value.onboardingCta.message,\n },\n }\n : {}),\n ...(result.value.message ? { message: result.value.message } : {}),\n });\n }\n );\n};\n","import z from 'zod';\n\nimport { mcpSuccessJson, safeHandler } from './response';\n\nimport { log } from '@/shared/log';\nimport { toJsonObject } from '@/shared/neverthrow/json';\nimport { checkEndpoint } from '@/operations/check-endpoint';\nimport { DESCRIPTIONS, TOOL_PARAMS } from '@/shared/descriptions';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst toolName = 'check_endpoint_schema';\n\nexport const registerCheckEndpointTool: RegisterTools = ({\n server,\n wallets,\n sessionId,\n}) => {\n server.registerTool(\n toolName,\n {\n title: 'Check Endpoint Schema',\n description: DESCRIPTIONS.checkEndpointSchema.mcp,\n inputSchema: z.object({\n url: z.string().describe(TOOL_PARAMS.checkEndpointSchema.url),\n method: z\n .enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH'])\n .optional()\n .describe(TOOL_PARAMS.checkEndpointSchema.method),\n sample_input_body: z\n .record(z.string(), z.unknown())\n .optional()\n .describe(TOOL_PARAMS.checkEndpointSchema.sampleInputBody),\n headers: z\n .record(z.string(), z.string())\n .optional()\n .describe(TOOL_PARAMS.checkEndpointSchema.headers)\n .default({}),\n }),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n safeHandler(async input => {\n log.info('Querying endpoint', {\n url: input.url,\n method: input.method,\n hasSampleInputBody: !!input.sample_input_body,\n });\n\n const result = await checkEndpoint(\n toolName,\n input.url,\n input.method ? [input.method] : undefined,\n input.sample_input_body,\n {\n ...input.headers,\n 'X-Wallet-Address': wallets.evmAccount.account.address,\n ...(sessionId ? { 'X-Session-ID': sessionId } : {}),\n }\n );\n\n if (!result.found) {\n log.error('[checkEndpoint] failed', {\n surface: toolName,\n url: input.url,\n cause: result.cause,\n message: result.message,\n });\n return mcpSuccessJson({\n message: 'No endpoint schema found for this URL.',\n url: input.url,\n });\n }\n\n if (result.advisories.length === 0) {\n return mcpSuccessJson({\n message: 'No endpoint schema found for this URL.',\n url: input.url,\n });\n }\n\n const results = result.advisories.map(a => ({\n ...a,\n requiresPayment: a.authMode === 'paid' || a.authMode === 'apiKey+paid',\n }));\n\n return mcpSuccessJson(toJsonObject({ url: input.url, results }));\n })\n );\n};\n","import z from 'zod';\nimport { mcpError, mcpSuccessStructuredJson } from './response';\n\nimport { redeemInviteCode } from '@/shared/redeem-invite';\nimport { DESCRIPTIONS, TOOL_PARAMS } from '@/shared/descriptions';\n\nimport type { RegisterTools } from '@/server/types';\n\nexport const registerRedeemInviteTool: RegisterTools = ({\n server,\n wallets,\n}) => {\n server.registerTool(\n 'redeem_invite',\n {\n title: 'Redeem Invite',\n description: DESCRIPTIONS.redeemInvite.mcp,\n inputSchema: z.object({\n code: z.string().min(1).describe(TOOL_PARAMS.redeemInvite.code),\n }),\n outputSchema: z.object({\n redeemed: z.literal(true),\n amount: z.string().describe(TOOL_PARAMS.redeemInvite.output.amount),\n txHash: z.string().describe(TOOL_PARAMS.redeemInvite.output.txHash),\n }),\n annotations: {\n readOnlyHint: false, // Modifies wallet balance\n destructiveHint: false, // Additive (adds funds), not destructive\n idempotentHint: false, // Same code can't be redeemed twice - second attempt fails\n openWorldHint: true,\n },\n },\n async ({ code }) => {\n const result = await redeemInviteCode({\n code,\n address: wallets.evmAccount.account.address,\n surface: 'redeem_invite',\n dev: false,\n });\n\n if (result.isErr()) {\n return mcpError(result, { isError: true });\n }\n\n const { amount, txHash } = result.value;\n\n return mcpSuccessStructuredJson({\n redeemed: true,\n amount: `${amount} USDC`,\n txHash,\n });\n }\n );\n};\n","import z from 'zod';\n\nimport { log } from '@/shared/log';\nimport { submitErrorReport } from '@/operations/report-error';\nimport { mcpError, mcpSuccessStructuredJson } from './response';\nimport { DESCRIPTIONS, TOOL_PARAMS } from '@/shared/descriptions';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst toolName = 'report_error';\n\nexport const registerTelemetryTools: RegisterTools = ({\n server,\n wallets,\n flags,\n}) => {\n server.registerTool(\n toolName,\n {\n title: 'Report Error',\n description: DESCRIPTIONS.reportError.mcp,\n inputSchema: z.object({\n tool: z.string().describe(TOOL_PARAMS.reportError.tool),\n resource: z\n .string()\n .optional()\n .describe(TOOL_PARAMS.reportError.resource),\n summary: z.string().describe(TOOL_PARAMS.reportError.summary),\n errorMessage: z.string().describe(TOOL_PARAMS.reportError.errorMessage),\n stack: z.string().optional().describe(TOOL_PARAMS.reportError.stack),\n fullReport: z\n .string()\n .optional()\n .describe(TOOL_PARAMS.reportError.fullReport),\n }),\n outputSchema: z.object({\n submitted: z.literal(true),\n reportId: z.string().describe(TOOL_PARAMS.reportError.output.reportId),\n message: z.string().describe(TOOL_PARAMS.reportError.output.message),\n }),\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: true,\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 result = await submitErrorReport(\n toolName,\n {\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 },\n wallets.evmAccount.account.address,\n flags.dev\n );\n\n if (result.isErr()) {\n log.error('Failed to submit error report', result.error);\n return mcpError(result, { isError: true });\n }\n\n log.info('Error report submitted successfully', {\n reportId: result.value.reportId,\n });\n\n return mcpSuccessStructuredJson({\n submitted: result.value.submitted,\n reportId: result.value.reportId,\n message: result.value.message,\n });\n }\n );\n};\n","import { z } from 'zod';\n\nimport { resultFromPromise } from '@agentcash/neverthrow';\n\nimport { log } from '@/shared/log';\nimport { discoverResources } from '@/operations/discover';\nimport { DESCRIPTIONS, TOOL_PARAMS } from '@/shared/descriptions';\n\nimport {\n mcpError,\n mcpErrorJson,\n mcpSuccessJson,\n safeHandler,\n} from './response';\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { JsonObject } from '@/shared/neverthrow/json/types';\n\nconst toolName = 'discover_api_endpoints';\nconst OPENAPI_TRIED_PATHS = '/openapi.json, /.well-known/x402';\n\nexport function registerDiscoveryTools(server: McpServer): void {\n server.registerTool(\n toolName,\n {\n title: 'Discover API Endpoints',\n description: DESCRIPTIONS.discoverApiEndpoints.mcp,\n inputSchema: z.object({\n url: z.string().describe(TOOL_PARAMS.discoverApiEndpoints.url),\n include_guidance: z\n .boolean()\n .optional()\n .describe(TOOL_PARAMS.discoverApiEndpoints.includeGuidance),\n }),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n safeHandler(async ({ url, include_guidance }) => {\n if (!URL.canParse(url)) {\n return mcpErrorJson({\n error: 'Invalid URL',\n url,\n hint: 'Provide a fully-formed URL like https://example.com',\n });\n }\n\n log.info(`Discovering resources for: ${url}`);\n\n const discoverResult = await resultFromPromise(\n 'discover',\n toolName,\n discoverResources(toolName, url, {\n includeGuidance: include_guidance,\n }),\n e => ({\n cause: 'discover' as const,\n message: e instanceof Error ? e.message : String(e),\n })\n );\n\n if (discoverResult.isErr()) {\n return mcpError(discoverResult);\n }\n\n const result = discoverResult.value;\n\n if ('endpoints' in result) {\n return mcpSuccessJson({\n found: true,\n origin: result.origin,\n ...(result.info\n ? { info: result.info as unknown as JsonObject }\n : {}),\n guidanceAvailable: result.guidanceAvailable,\n ...(result.guidanceTokens != null\n ? { guidanceTokens: result.guidanceTokens }\n : {}),\n ...(result.guidance ? { guidance: result.guidance } : {}),\n endpoints: result.endpoints.map(\n e => ({ ...e }) as unknown as JsonObject\n ),\n } as JsonObject);\n }\n\n // Discovery failed — surface the real cause\n const origin = URL.canParse(url) ? new URL(url).origin : url;\n\n if (result.cause === 'not_found') {\n return mcpSuccessJson({\n found: false,\n origin,\n error: `No OpenAPI spec found. Tried: ${OPENAPI_TRIED_PATHS}`,\n });\n }\n\n return mcpSuccessJson({\n found: false,\n origin,\n cause: result.cause,\n error:\n result.message ?? `Failed to fetch OpenAPI spec (${result.cause})`,\n hint:\n result.cause === 'timeout'\n ? 'The server may be slow or unreachable. Try again later.'\n : result.cause === 'network'\n ? 'Could not reach the server. Check the network connection and try again.'\n : `The server returned an unparseable response. Tried: ${OPENAPI_TRIED_PATHS}`,\n });\n })\n );\n}\n","import { z } from 'zod';\n\nimport { getSettings, setSettings } from '@/shared/settings';\nimport { DEFAULT_MAX_AMOUNT } from '@/operations/fetch-with-payment';\n\nimport { mcpSuccessStructuredJson, safeHandler } from './response';\nimport { DESCRIPTIONS } from '@/shared/descriptions';\n\nimport type { RegisterTools } from '@/server/types';\n\nexport const registerSettingsTools: RegisterTools = ({ server }) => {\n server.registerTool(\n 'update_settings',\n {\n title: 'Update Settings',\n description: DESCRIPTIONS.updateSettings.mcp,\n inputSchema: z.object({\n maxAmount: z\n .number()\n .positive()\n .optional()\n .describe(\n `Maximum amount (USD) to pay per fetch request. Current default: $${DEFAULT_MAX_AMOUNT}.`\n ),\n }),\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n safeHandler(input => {\n if (input.maxAmount !== undefined) {\n setSettings({ maxAmount: input.maxAmount });\n }\n\n const settings = getSettings();\n\n return Promise.resolve(\n mcpSuccessStructuredJson({\n maxAmount: settings.maxAmount ?? DEFAULT_MAX_AMOUNT,\n })\n );\n })\n );\n\n server.registerTool(\n 'get_settings',\n {\n title: 'Get Settings',\n description: DESCRIPTIONS.getSettings.mcp,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n safeHandler(() => {\n const settings = getSettings();\n\n return Promise.resolve(\n mcpSuccessStructuredJson({\n maxAmount: settings.maxAmount ?? DEFAULT_MAX_AMOUNT,\n })\n );\n })\n );\n};\n","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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,iBAAiB;AAC1B,SAAS,4BAA4B;AACrC,SAAS,mBAAmB;;;ACF5B,SAAS,SAAS;;;ACGX,IAAM,kCAAkC,CAC7C,SACsC;AACtC,UAAQ,KAAK,MAAM;AAAA,IACjB,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,KAAK,UAAU,KAAK,IAAI;AAAA,MAChC;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,KAAK;AAAA,QACf,MAAM,OAAO,KAAK,KAAK,IAAI,EAAE,SAAS,QAAQ;AAAA,MAChD;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,KAAK;AAAA,QACf,MAAM,OAAO,KAAK,KAAK,IAAI,EAAE,SAAS,QAAQ;AAAA,MAChD;AAAA,IACF,KAAK;AACH,aAAO,EAAE,MAAM,QAAiB,MAAM,KAAK,KAAK;AAAA,IAClD;AACE,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,8BAA8B,KAAK,IAAI;AAAA,MAC/C;AAAA,EACJ;AACF;;;AChBA,IAAM,gBAAgB,CACpB,SACA,YACmB;AACnB,SAAO;AAAA,IACL;AAAA;AAAA;AAAA;AAAA,IAIA,GAAI,SAAS,UAAU,EAAE,SAAS,KAAc,IAAI,CAAC;AAAA,EACvD;AACF;AAEO,IAAM,eAAe,CAC1B,OACA,YACmB;AACnB,SAAO,kBAAkB,kBAAkB,KAAK,EAAE;AAAA,IAChD,aACE,cAAc,CAAC,EAAE,MAAM,QAAiB,MAAM,QAAQ,CAAC,GAAG,OAAO;AAAA,IACnE,CAAAA,WACE;AAAA,MACE,CAAC,EAAE,MAAM,QAAiB,MAAM,KAAK,UAAUA,QAAO,MAAM,CAAC,EAAE,CAAC;AAAA,MAChE;AAAA,IACF;AAAA,EACJ;AACF;AAEO,IAAM,WAAW,OAEtB,KACA,YACG;AACH,QAAM,EAAE,MAAM,IAAI;AAClB,MAAI,aAAa,KAAK,GAAG;AACvB,YAAQ,MAAM,OAAO;AAAA,MACnB,KAAK;AAAA,MACL,KAAK;AACH,eAAO,aAAa,EAAE,GAAG,MAAM,GAAG,OAAO;AAAA,MAC3C,KAAK;AACH,cAAM,EAAE,UAAU,GAAG,KAAK,IAAI;AAC9B,cAAM,sBAAsB,MAAM;AAAA,UAChC;AAAA,UACA;AAAA,QACF;AACA,cAAM,cAAyC;AAAA,UAC7C,EAAE,MAAM,QAAiB,MAAM,KAAK,UAAU,MAAM,MAAM,CAAC,EAAE;AAAA,UAC7D,GAAG,oBAAoB;AAAA,YACrB,aAAW,CAAC,gCAAgC,OAAO,CAAC;AAAA,YACpD,MAAM,CAAC;AAAA,UACT;AAAA,QACF;AACA,eAAO,cAAc,aAAa,OAAO;AAAA,IAC7C;AAAA,EACF;AACA,SAAO,aAAa,EAAE,GAAG,MAAM,GAAG,OAAO;AAC3C;AAEO,IAAM,gBAAgB,OAAO,SAAiB,aAAuB;AAC1E,SAAO,SAAS,aAAa,SAAS,QAAQ,CAAC;AACjD;;;ACnEA,IAAM,kBAAkB,CACtB,YACmB;AACnB,SAAO;AAAA,IACL;AAAA,EACF;AACF;AAEO,IAAM,iBAAiB,CAAC,SAAqC;AAClE,SAAO,kBAAkB,oBAAoB,IAAI,EAAE;AAAA,IACjD,aAAW,gBAAgB,CAAC,EAAE,MAAM,QAAiB,MAAM,QAAQ,CAAC,CAAC;AAAA,IACrE,WAAS,aAAa,KAAK;AAAA,EAC7B;AACF;AAEO,IAAM,2BAA2B,CAAC,SAAqC;AAC5E,SAAO,kBAAkB,0BAA0B,IAAI,EAAE;AAAA,IACvD,cAAY;AAAA,MACV,SAAS,CAAC,EAAE,MAAM,QAAiB,MAAM,QAAQ,CAAC;AAAA,MAClD,mBAAmB;AAAA,IACrB;AAAA,IACA,WAAS,aAAa,KAAK;AAAA,EAC7B;AACF;AAEO,IAAM,qBAAqB,CAChC,MACA,UACmB;AACnB,QAAM,cAAc,QAChB,kBAAkB,qBAAqB,KAAK,EAAE;AAAA,IAC5C,aAAW;AAAA,IACX,MAAM;AAAA,EACR,IACA;AAEJ,SAAO,gBAAgB;AAAA,IACrB,gCAAgC,IAAI;AAAA,IACpC,GAAI,cAAc,CAAC,EAAE,MAAM,QAAiB,MAAM,YAAY,CAAC,IAAI,CAAC;AAAA,EACtE,CAAC;AACH;;;ACrCO,SAAS,YACd,SACuC;AACvC,SAAO,OAAO,UAAa;AAEzB,QAAI;AACF,aAAO,MAAM,QAAQ,KAAK;AAAA,IAC5B,SAAS,GAAG;AACV,UAAI,MAAM,wBAAwB,CAAC;AACnC,aAAO,aAAa;AAAA,QAClB,OAAO,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AAAA,QAChD,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;ACVO,IAAM,eAAe,OAAO;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAyB;AACvB,QAAM,gBAAgB,MAAM,WAAW,SAAS,OAAO,KAAK;AAE5D,MAAI,cAAc,MAAM,GAAG;AACzB,QAAI,MAAM,KAAK,UAAU,cAAc,OAAO,MAAM,CAAC,CAAC;AACtD;AAAA,EACF;AAEA,QAAM,UAAU,cAAc;AAE9B,MAAI,QAAQ,UAAU,cAAc;AAClC,UAAM,eAAe,OAAO,OAAO,sBAAsB;AACzD,QAAI,CAAC,cAAc,aAAa;AAC9B,YAAM,IAAI;AAAA,QACR,GAAG,QAAQ,QAAQ,OAAO,CAAC;AAAA;AAAA,0BAA+B,eAAe,MAAM,SAAS,OAAO,MAAM,OAAO,CAAC;AAAA,MAC/G;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,OAAO,OAAO,YAAY;AAAA,MAC7C,MAAM;AAAA,MACN,SAAS,QAAQ,QAAQ,OAAO;AAAA,MAChC,iBAAiB;AAAA,QACf,MAAM;AAAA,QACN,YAAY,CAAC;AAAA,MACf;AAAA,IACF,CAAC;AAED,QAAI,OAAO,WAAW,UAAU;AAC9B,YAAM,gBAAgB,MAAM,SAAS,OAAO,MAAM,OAAO;AAAA,IAC3D;AAAA,EACF;AAEA,SAAO,QAAQ;AACjB;;;AL5BA,IAAM,WAAW;AAEjB,IAAM,oBAAoB,aAAa,IACnC,EAAE,KAAK,CAAC,QAAQ,KAAK,CAAC,IACtB,EAAE,KAAK,CAAC,MAAM,CAAC;AAEnB,IAAM,mBAAmB,cAAc,OAAO;AAAA,EAC5C,eAAe,kBACZ,SAAS,EACT,SAAS,YAAY,MAAM,aAAa;AAAA,EAC3C,gBAAgB,EAAE,KAAK,iFAA6B,CAAC,EAAE,SAAS;AAAA,EAChE,WAAW,EACR,OAAO,EACP,SAAS,EACT,SAAS,EACT,SAAS,YAAY,MAAM,SAAS;AACzC,CAAC;AAEM,IAAM,oBAAmC,CAAC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,aAAa,aAAa,MAAM;AAAA,MAChC,aAAa;AAAA,MACb,aAAa;AAAA,QACX,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,IACA,YAAY,OAAM,UAAS;AAEzB,YAAM,gBAAmC,OAAM,QAAO;AACpD,YAAI,IAAI,aAAa,QAAQ;AAC3B,gBAAM,aAAa;AAAA,YACjB,SAAS;AAAA,YACT;AAAA,YACA,OACE,IAAI,qEACA;AAAA,cACE,SAAS,QAAQ,WAAW,QAAQ;AAAA,cACpC;AAAA,YACF,IACA;AAAA,cACE,SAAS,QAAQ,WAAW,QAAQ;AAAA,cACpC;AAAA,YACF;AAAA,YACN,cAAc,IAAI;AAAA,YAClB,SAAS,aACP,sBAAsB,IAAI,MAAM,kCAAkC,OAAO;AAAA,YAC3E;AAAA,UACF,CAAC;AAAA,QACH,WAAW,aAAa,GAAG;AACzB,gBAAM,aAAa;AAAA,YACjB,SAAS;AAAA,YACT;AAAA,YACA,OAAO;AAAA,cACL,SAAS,QAAQ,WAAW,QAAQ;AAAA,cACpC;AAAA,cACA,cAAc,IAAI;AAAA,YACpB;AAAA,YACA;AAAA,YACA,cAAc,IAAI;AAAA,YAClB,SAAS,aACP,sBAAsB,IAAI,MAAM,0CAA0C,OAAO;AAAA,UACrF,CAAC;AAAA,QACH;AAAA,MACF;AAEA,YAAM,WAAW,MAAM,YAAY,aAAa,WAAW;AAE3D,YAAM,UAAU,aAAa;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAED,YAAM,cAAc,MAAM,uBAAuB;AAAA,QAC/C,SAAS;AAAA,QACT;AAAA,QACA,eAAe,MAAM;AAAA,QACrB,gBAAgB,MAAM;AAAA,QACtB;AAAA,QACA;AAAA,QACA,SAAS,MAAM,WAAW;AAAA,QAC1B,WAAW,MAAM;AAAA,MACnB,CAAC,EAAE,OAAO;AAEV,UAAI,YAAY,MAAM,GAAG;AACvB,eAAO,SAAS,WAAW;AAAA,MAC7B;AAEA,YAAM,EAAE,UAAU,YAAY,IAAI,YAAY;AAE9C,UAAI,CAAC,SAAS,IAAI;AAChB,eAAO,cAAc,UAAU,QAAQ;AAAA,MACzC;AAEA,YAAM,sBAAsB,MAAM,kBAAkB,UAAU,QAAQ;AAEtE,UAAI,oBAAoB,MAAM,GAAG;AAC/B,eAAO,SAAS,mBAAmB;AAAA,MACrC;AAEA,aAAO;AAAA,QACL,oBAAoB;AAAA,QACpB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AMhIA,OAAOC,QAAO;AAEd,IAAMC,YAAW;AAEV,IAAM,oBAAmC,CAAC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,SAAO;AAAA,IACLA;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,aAAa,aAAa,cAAc;AAAA,MACxC,aAAa,cAAc,OAAO;AAAA,QAChC,gBAAgBD,GAAE,KAAK,iFAA6B,CAAC,EAAE,SAAS;AAAA,MAClE,CAAC;AAAA,MACD,aAAa;AAAA,QACX,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,IACA,YAAY,OAAM,UAAS;AACzB,YAAM,SAAS,MAAM,oBAAoB;AAAA,QACvC,SAASC;AAAA,QACT;AAAA,QACA,SAAS,MAAM,WAAW;AAAA,QAC1B,gBAAgB,MAAM;AAAA,MACxB,CAAC;AAAA,QACC,aAAa;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAEA,UAAI,OAAO,MAAM,GAAG;AAClB,eAAO,SAAS,MAAM;AAAA,MACxB;AAEA,YAAM,QAAQ,OAAO;AAErB,UAAI,MAAM,YAAY,qBAAqB;AACzC,eAAO,eAAe;AAAA,UACpB,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAEA,YAAM,EAAE,SAAS,IAAI;AAErB,UAAI,CAAC,SAAS,IAAI;AAChB,eAAO,cAAcA,WAAU,QAAQ;AAAA,MACzC;AAEA,YAAM,sBAAsB,MAAM,kBAAkBA,WAAU,QAAQ;AAEtE,UAAI,oBAAoB,MAAM,GAAG;AAC/B,eAAO,SAAS,mBAAmB;AAAA,MACrC;AAEA,aAAO,mBAAmB,oBAAoB,KAAK;AAAA,IACrD,CAAC;AAAA,EACH;AACF;;;ACtFA,SAAS,KAAAC,UAAS;AASlB,IAAM,qBAAqBC,GAAE,OAAO;AAAA,EAClC,OAAOA,GAAE,OAAO,EAAE,SAAS,YAAY,cAAc,OAAO,KAAK;AAAA,EACjE,SAASA,GAAE,OAAO,EAAE,SAAS,YAAY,cAAc,OAAO,YAAY;AAC5E,CAAC;AAEM,IAAM,sBAAqC,CAAC;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,aAAa,aAAa,cAAc;AAAA,MACxC,cAAcA,GAAE,OAAO;AAAA,QACrB,SAASA,GAAE,OAAO,EAAE,SAAS,YAAY,cAAc,OAAO,OAAO;AAAA,QACrE,eAAeA,GACZ,OAAO,EACP,SAAS,YAAY,cAAc,OAAO,OAAO;AAAA,QACpD,SAASA,GAAE,OAAO,EAAE,SAAS,YAAY,cAAc,OAAO,OAAO;AAAA,QACrE,QAAQA,GACL,MAAM,kBAAkB,EACxB,SAAS,YAAY,cAAc,OAAO,MAAM;AAAA,QACnD,aAAaA,GACV,QAAQ,EACR,SAAS,YAAY,cAAc,OAAO,WAAW;AAAA,QACxD,aAAaA,GACV,OAAO,EACP,IAAI,EACJ,SAAS,YAAY,cAAc,OAAO,WAAW;AAAA,QACxD,mBAAmBA,GAChB,OAAO,EACP,IAAI,EACJ,SAAS,YAAY,cAAc,OAAO,WAAW;AAAA,QACxD,eAAeA,GACZ,OAAO;AAAA,UACN,aAAaA,GACV,OAAO,EACP,IAAI,EACJ;AAAA,YACC,YAAY,cAAc,OAAO;AAAA,UACnC;AAAA,UACF,aAAaA,GACV,OAAO,EACP,IAAI,EACJ;AAAA,YACC,YAAY,cAAc,OAAO;AAAA,UACnC;AAAA,UACF,SAASA,GACN,OAAO,EACP,SAAS,YAAY,cAAc,OAAO,oBAAoB;AAAA,QACnE,CAAC,EACA,SAAS,EACT,SAAS,YAAY,cAAc,OAAO,aAAa;AAAA,QAC1D,SAASA,GACN,OAAO,EACP,SAAS,EACT,SAAS,YAAY,cAAc,OAAO,OAAO;AAAA,MACtD,CAAC;AAAA,MACD,aAAa;AAAA,QACX,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,IACA,YAAY;AACV,YAAM,SAAS,MAAM,cAAc,mBAAmB,SAAS,KAAK;AAEpE,UAAI,OAAO,MAAM,GAAG;AAClB,eAAO,SAAS,QAAQ,EAAE,SAAS,KAAK,CAAC;AAAA,MAC3C;AAEA,aAAO,yBAAyB;AAAA,QAC9B,SAAS,OAAO,MAAM;AAAA,QACtB,eAAe,OAAO,MAAM;AAAA,QAC5B,SAAS,OAAO,MAAM;AAAA,QACtB,QAAQ,OAAO,MAAM;AAAA,QACrB,aAAa,OAAO,MAAM;AAAA,QAC1B,aAAa,OAAO,MAAM;AAAA,QAC1B,mBAAmB,OAAO,MAAM;AAAA,QAChC,GAAI,OAAO,MAAM,gBACb;AAAA,UACE,eAAe;AAAA,YACb,aAAa,OAAO,MAAM,cAAc;AAAA,YACxC,aAAa,OAAO,MAAM,cAAc;AAAA,YACxC,SAAS,OAAO,MAAM,cAAc;AAAA,UACtC;AAAA,QACF,IACA,CAAC;AAAA,QACL,GAAI,OAAO,MAAM,UAAU,EAAE,SAAS,OAAO,MAAM,QAAQ,IAAI,CAAC;AAAA,MAClE,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;ACxGA,OAAOC,QAAO;AAWd,IAAMC,YAAW;AAEV,IAAM,4BAA2C,CAAC;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,SAAO;AAAA,IACLA;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,aAAa,aAAa,oBAAoB;AAAA,MAC9C,aAAaC,GAAE,OAAO;AAAA,QACpB,KAAKA,GAAE,OAAO,EAAE,SAAS,YAAY,oBAAoB,GAAG;AAAA,QAC5D,QAAQA,GACL,KAAK,CAAC,OAAO,QAAQ,OAAO,UAAU,OAAO,CAAC,EAC9C,SAAS,EACT,SAAS,YAAY,oBAAoB,MAAM;AAAA,QAClD,mBAAmBA,GAChB,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,EAC9B,SAAS,EACT,SAAS,YAAY,oBAAoB,eAAe;AAAA,QAC3D,SAASA,GACN,OAAOA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC,EAC7B,SAAS,EACT,SAAS,YAAY,oBAAoB,OAAO,EAChD,QAAQ,CAAC,CAAC;AAAA,MACf,CAAC;AAAA,MACD,aAAa;AAAA,QACX,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,IACA,YAAY,OAAM,UAAS;AACzB,UAAI,KAAK,qBAAqB;AAAA,QAC5B,KAAK,MAAM;AAAA,QACX,QAAQ,MAAM;AAAA,QACd,oBAAoB,CAAC,CAAC,MAAM;AAAA,MAC9B,CAAC;AAED,YAAM,SAAS,MAAM;AAAA,QACnBD;AAAA,QACA,MAAM;AAAA,QACN,MAAM,SAAS,CAAC,MAAM,MAAM,IAAI;AAAA,QAChC,MAAM;AAAA,QACN;AAAA,UACE,GAAG,MAAM;AAAA,UACT,oBAAoB,QAAQ,WAAW,QAAQ;AAAA,UAC/C,GAAI,YAAY,EAAE,gBAAgB,UAAU,IAAI,CAAC;AAAA,QACnD;AAAA,MACF;AAEA,UAAI,CAAC,OAAO,OAAO;AACjB,YAAI,MAAM,0BAA0B;AAAA,UAClC,SAASA;AAAA,UACT,KAAK,MAAM;AAAA,UACX,OAAO,OAAO;AAAA,UACd,SAAS,OAAO;AAAA,QAClB,CAAC;AACD,eAAO,eAAe;AAAA,UACpB,SAAS;AAAA,UACT,KAAK,MAAM;AAAA,QACb,CAAC;AAAA,MACH;AAEA,UAAI,OAAO,WAAW,WAAW,GAAG;AAClC,eAAO,eAAe;AAAA,UACpB,SAAS;AAAA,UACT,KAAK,MAAM;AAAA,QACb,CAAC;AAAA,MACH;AAEA,YAAM,UAAU,OAAO,WAAW,IAAI,QAAM;AAAA,QAC1C,GAAG;AAAA,QACH,iBAAiB,EAAE,aAAa,UAAU,EAAE,aAAa;AAAA,MAC3D,EAAE;AAEF,aAAO,eAAe,aAAa,EAAE,KAAK,MAAM,KAAK,QAAQ,CAAC,CAAC;AAAA,IACjE,CAAC;AAAA,EACH;AACF;;;AC7FA,OAAOE,QAAO;AAQP,IAAM,2BAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AACF,MAAM;AACJ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,aAAa,aAAa,aAAa;AAAA,MACvC,aAAaC,GAAE,OAAO;AAAA,QACpB,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,YAAY,aAAa,IAAI;AAAA,MAChE,CAAC;AAAA,MACD,cAAcA,GAAE,OAAO;AAAA,QACrB,UAAUA,GAAE,QAAQ,IAAI;AAAA,QACxB,QAAQA,GAAE,OAAO,EAAE,SAAS,YAAY,aAAa,OAAO,MAAM;AAAA,QAClE,QAAQA,GAAE,OAAO,EAAE,SAAS,YAAY,aAAa,OAAO,MAAM;AAAA,MACpE,CAAC;AAAA,MACD,aAAa;AAAA,QACX,cAAc;AAAA;AAAA,QACd,iBAAiB;AAAA;AAAA,QACjB,gBAAgB;AAAA;AAAA,QAChB,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,IACA,OAAO,EAAE,KAAK,MAAM;AAClB,YAAM,SAAS,MAAM,iBAAiB;AAAA,QACpC;AAAA,QACA,SAAS,QAAQ,WAAW,QAAQ;AAAA,QACpC,SAAS;AAAA,QACT,KAAK;AAAA,MACP,CAAC;AAED,UAAI,OAAO,MAAM,GAAG;AAClB,eAAO,SAAS,QAAQ,EAAE,SAAS,KAAK,CAAC;AAAA,MAC3C;AAEA,YAAM,EAAE,QAAQ,OAAO,IAAI,OAAO;AAElC,aAAO,yBAAyB;AAAA,QAC9B,UAAU;AAAA,QACV,QAAQ,GAAG,MAAM;AAAA,QACjB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;ACrDA,OAAOC,QAAO;AASd,IAAMC,YAAW;AAEV,IAAM,yBAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,SAAO;AAAA,IACLA;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,aAAa,aAAa,YAAY;AAAA,MACtC,aAAaC,GAAE,OAAO;AAAA,QACpB,MAAMA,GAAE,OAAO,EAAE,SAAS,YAAY,YAAY,IAAI;AAAA,QACtD,UAAUA,GACP,OAAO,EACP,SAAS,EACT,SAAS,YAAY,YAAY,QAAQ;AAAA,QAC5C,SAASA,GAAE,OAAO,EAAE,SAAS,YAAY,YAAY,OAAO;AAAA,QAC5D,cAAcA,GAAE,OAAO,EAAE,SAAS,YAAY,YAAY,YAAY;AAAA,QACtE,OAAOA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,YAAY,YAAY,KAAK;AAAA,QACnE,YAAYA,GACT,OAAO,EACP,SAAS,EACT,SAAS,YAAY,YAAY,UAAU;AAAA,MAChD,CAAC;AAAA,MACD,cAAcA,GAAE,OAAO;AAAA,QACrB,WAAWA,GAAE,QAAQ,IAAI;AAAA,QACzB,UAAUA,GAAE,OAAO,EAAE,SAAS,YAAY,YAAY,OAAO,QAAQ;AAAA,QACrE,SAASA,GAAE,OAAO,EAAE,SAAS,YAAY,YAAY,OAAO,OAAO;AAAA,MACrE,CAAC;AAAA,MACD,aAAa;AAAA,QACX,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,IACA,OAAM,UAAS;AACb,UAAI,KAAK,2BAA2B;AAAA,QAClC,MAAM,MAAM;AAAA,QACZ,UAAU,MAAM;AAAA,QAChB,SAAS,MAAM;AAAA,MACjB,CAAC;AAED,YAAM,SAAS,MAAM;AAAA,QACnBD;AAAA,QACA;AAAA,UACE,MAAM,MAAM;AAAA,UACZ,SAAS,MAAM;AAAA,UACf,cAAc,MAAM;AAAA,UACpB,UAAU,MAAM;AAAA,UAChB,OAAO,MAAM;AAAA,UACb,YAAY,MAAM;AAAA,QACpB;AAAA,QACA,QAAQ,WAAW,QAAQ;AAAA,QAC3B,MAAM;AAAA,MACR;AAEA,UAAI,OAAO,MAAM,GAAG;AAClB,YAAI,MAAM,iCAAiC,OAAO,KAAK;AACvD,eAAO,SAAS,QAAQ,EAAE,SAAS,KAAK,CAAC;AAAA,MAC3C;AAEA,UAAI,KAAK,uCAAuC;AAAA,QAC9C,UAAU,OAAO,MAAM;AAAA,MACzB,CAAC;AAED,aAAO,yBAAyB;AAAA,QAC9B,WAAW,OAAO,MAAM;AAAA,QACxB,UAAU,OAAO,MAAM;AAAA,QACvB,SAAS,OAAO,MAAM;AAAA,MACxB,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;ACpFA,SAAS,KAAAE,UAAS;AAkBlB,IAAMC,YAAW;AACjB,IAAM,sBAAsB;AAErB,SAAS,uBAAuB,QAAyB;AAC9D,SAAO;AAAA,IACLA;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,aAAa,aAAa,qBAAqB;AAAA,MAC/C,aAAaC,GAAE,OAAO;AAAA,QACpB,KAAKA,GAAE,OAAO,EAAE,SAAS,YAAY,qBAAqB,GAAG;AAAA,QAC7D,kBAAkBA,GACf,QAAQ,EACR,SAAS,EACT,SAAS,YAAY,qBAAqB,eAAe;AAAA,MAC9D,CAAC;AAAA,MACD,aAAa;AAAA,QACX,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,IACA,YAAY,OAAO,EAAE,KAAK,iBAAiB,MAAM;AAC/C,UAAI,CAAC,IAAI,SAAS,GAAG,GAAG;AACtB,eAAO,aAAa;AAAA,UAClB,OAAO;AAAA,UACP;AAAA,UACA,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAEA,UAAI,KAAK,8BAA8B,GAAG,EAAE;AAE5C,YAAM,iBAAiB,MAAM;AAAA,QAC3B;AAAA,QACAD;AAAA,QACA,kBAAkBA,WAAU,KAAK;AAAA,UAC/B,iBAAiB;AAAA,QACnB,CAAC;AAAA,QACD,QAAM;AAAA,UACJ,OAAO;AAAA,UACP,SAAS,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC;AAAA,QACpD;AAAA,MACF;AAEA,UAAI,eAAe,MAAM,GAAG;AAC1B,eAAO,SAAS,cAAc;AAAA,MAChC;AAEA,YAAM,SAAS,eAAe;AAE9B,UAAI,eAAe,QAAQ;AACzB,eAAO,eAAe;AAAA,UACpB,OAAO;AAAA,UACP,QAAQ,OAAO;AAAA,UACf,GAAI,OAAO,OACP,EAAE,MAAM,OAAO,KAA8B,IAC7C,CAAC;AAAA,UACL,mBAAmB,OAAO;AAAA,UAC1B,GAAI,OAAO,kBAAkB,OACzB,EAAE,gBAAgB,OAAO,eAAe,IACxC,CAAC;AAAA,UACL,GAAI,OAAO,WAAW,EAAE,UAAU,OAAO,SAAS,IAAI,CAAC;AAAA,UACvD,WAAW,OAAO,UAAU;AAAA,YAC1B,QAAM,EAAE,GAAG,EAAE;AAAA,UACf;AAAA,QACF,CAAe;AAAA,MACjB;AAGA,YAAM,SAAS,IAAI,SAAS,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE,SAAS;AAEzD,UAAI,OAAO,UAAU,aAAa;AAChC,eAAO,eAAe;AAAA,UACpB,OAAO;AAAA,UACP;AAAA,UACA,OAAO,iCAAiC,mBAAmB;AAAA,QAC7D,CAAC;AAAA,MACH;AAEA,aAAO,eAAe;AAAA,QACpB,OAAO;AAAA,QACP;AAAA,QACA,OAAO,OAAO;AAAA,QACd,OACE,OAAO,WAAW,iCAAiC,OAAO,KAAK;AAAA,QACjE,MACE,OAAO,UAAU,YACb,4DACA,OAAO,UAAU,YACf,4EACA,uDAAuD,mBAAmB;AAAA,MACpF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;;;AClHA,SAAS,KAAAE,UAAS;AAUX,IAAM,wBAAuC,CAAC,EAAE,OAAO,MAAM;AAClE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,aAAa,aAAa,eAAe;AAAA,MACzC,aAAaC,GAAE,OAAO;AAAA,QACpB,WAAWA,GACR,OAAO,EACP,SAAS,EACT,SAAS,EACT;AAAA,UACC,oEAAoE,kBAAkB;AAAA,QACxF;AAAA,MACJ,CAAC;AAAA,MACD,aAAa;AAAA,QACX,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,IACA,YAAY,WAAS;AACnB,UAAI,MAAM,cAAc,QAAW;AACjC,oBAAY,EAAE,WAAW,MAAM,UAAU,CAAC;AAAA,MAC5C;AAEA,YAAM,WAAW,YAAY;AAE7B,aAAO,QAAQ;AAAA,QACb,yBAAyB;AAAA,UACvB,WAAW,SAAS,aAAa;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,aAAa,aAAa,YAAY;AAAA,MACtC,aAAa;AAAA,QACX,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,IACA,YAAY,MAAM;AAChB,YAAM,WAAW,YAAY;AAE7B,aAAO,QAAQ;AAAA,QACb,yBAAyB;AAAA,UACvB,WAAW,SAAS,aAAa;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACrEA,SAAS,oBAAoB;AAC7B,SAAS,SAAS,YAAY;AAC9B,SAAS,qBAAqB;AAI9B,SAAS,aAAqB;AAC5B,MAAI,MAAwC;AAC1C,WAAO;AAAA,EACT;AAEA,QAAMC,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,IAAMC,eAAc,WAAW;;;AdK/B,IAAM,cAAuB,OAAM,UAAS;AACjD,MAAI,KAAK,uBAAuB;AAEhC,QAAM,EAAE,OAAO,IAAI;AACnB,MAAI,EAAE,UAAU,IAAI;AAEpB,gBAAc,YAAY,EAAE,EAAE,SAAS,KAAK;AAE5C,QAAM,eAAe,MAAM,UAAU;AAErC,MAAI,aAAa,MAAM,GAAG;AACxB,QAAI,MAAM,KAAK,UAAU,aAAa,OAAO,MAAM,CAAC,CAAC;AACrD,YAAQ,MAAM,aAAa,KAAK;AAChC,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,UAAU,aAAa;AAE7B,QAAM,OAAO,UAAU,QAAQ,IAAI;AAEnC,MAAI,MAAM;AACR,UAAM,iBAAiB;AAAA,MACrB;AAAA,MACA,SAAS,QAAQ,WAAW,QAAQ;AAAA,MACpC,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,QAAM,qBAAqB,wBAAwB,gBAAgB,CAAC;AAEpE,QAAM,SAAS,IAAI;AAAA,IACjB;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,SAASC;AAAA,MACT,YAAY;AAAA,MACZ,OAAO,CAAC,EAAE,KAAK,oCAAoC,CAAC;AAAA,MACpD,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,cAAc;AAAA,QACZ,WAAW;AAAA,UACT,WAAW;AAAA,UACX,aAAa;AAAA,QACf;AAAA,QACA,SAAS;AAAA,UACP,aAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,oBAAkB,KAAK;AACvB,oBAAkB,KAAK;AACvB,sBAAoB,KAAK;AACzB,4BAA0B,KAAK;AAC/B,2BAAyB,KAAK;AAC9B,yBAAuB,MAAM;AAC7B,yBAAuB,KAAK;AAC5B,wBAAsB,KAAK;AAE3B,QAAM,YAAY,IAAI,qBAAqB;AAC3C,QAAM,OAAO,QAAQ,SAAS;AAE9B,QAAM,WAAW,YAAY;AAC3B,QAAI,KAAK,kBAAkB;AAC3B,UAAM,OAAO,MAAM;AACnB,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,UAAQ,GAAG,UAAU,MAAM,KAAK,SAAS,CAAC;AAC1C,UAAQ,GAAG,WAAW,MAAM,KAAK,SAAS,CAAC;AAC7C;","names":["error","z","toolName","z","z","z","toolName","z","z","z","z","toolName","z","z","toolName","z","z","z","__dirname","MCP_VERSION","MCP_VERSION"]}
|
|
@@ -5,10 +5,10 @@ async function serverCommand(flags) {
|
|
|
5
5
|
"MCP server started. If you meant to explore the CLI, run: npx agentcash --help\n"
|
|
6
6
|
);
|
|
7
7
|
}
|
|
8
|
-
const { startServer } = await import("./server-
|
|
8
|
+
const { startServer } = await import("./server-45ZQGODV.js");
|
|
9
9
|
await startServer(flags);
|
|
10
10
|
}
|
|
11
11
|
export {
|
|
12
12
|
serverCommand
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=server-
|
|
14
|
+
//# sourceMappingURL=server-UAIAMGJS.js.map
|
|
@@ -2,11 +2,11 @@ import {
|
|
|
2
2
|
DEFAULT_MAX_AMOUNT,
|
|
3
3
|
getSettings,
|
|
4
4
|
setSettings
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-UVO3ZZGC.js";
|
|
6
6
|
import "./chunk-6FEDQ4HI.js";
|
|
7
7
|
import "./chunk-RAFN7MFS.js";
|
|
8
8
|
import "./chunk-OKHBFFZP.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-SF3JWCTJ.js";
|
|
10
10
|
import "./chunk-G3AVBW3H.js";
|
|
11
11
|
import "./chunk-M6OXSG34.js";
|
|
12
12
|
import "./chunk-VDBUUHJF.js";
|
|
@@ -58,4 +58,4 @@ export {
|
|
|
58
58
|
settingsGetCommand,
|
|
59
59
|
settingsSetCommand
|
|
60
60
|
};
|
|
61
|
-
//# sourceMappingURL=settings-
|
|
61
|
+
//# sourceMappingURL=settings-NIG3JCWL.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getWalletInfo
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-P7WFI336.js";
|
|
4
4
|
import "./chunk-6XGAIMNK.js";
|
|
5
5
|
import "./chunk-RAFN7MFS.js";
|
|
6
6
|
import "./chunk-OKHBFFZP.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-SF3JWCTJ.js";
|
|
8
8
|
import "./chunk-G3AVBW3H.js";
|
|
9
9
|
import {
|
|
10
10
|
getWalletOrExit
|
|
@@ -102,4 +102,4 @@ async function tryCommand(args, flags) {
|
|
|
102
102
|
export {
|
|
103
103
|
tryCommand
|
|
104
104
|
};
|
|
105
|
-
//# sourceMappingURL=try-
|
|
105
|
+
//# sourceMappingURL=try-IH77VUTC.js.map
|
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
} from "./chunk-CM6NIM6K.js";
|
|
4
4
|
import {
|
|
5
5
|
getWalletInfo
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-P7WFI336.js";
|
|
7
7
|
import "./chunk-6XGAIMNK.js";
|
|
8
8
|
import "./chunk-RAFN7MFS.js";
|
|
9
9
|
import "./chunk-OKHBFFZP.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-SF3JWCTJ.js";
|
|
11
11
|
import "./chunk-G3AVBW3H.js";
|
|
12
12
|
import {
|
|
13
13
|
getWalletOrExit
|
|
@@ -98,4 +98,4 @@ export {
|
|
|
98
98
|
walletInfoCommand,
|
|
99
99
|
walletRedeemCommand
|
|
100
100
|
};
|
|
101
|
-
//# sourceMappingURL=wallet-
|
|
101
|
+
//# sourceMappingURL=wallet-RXHBDJED.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentcash",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.1",
|
|
4
4
|
"description": "Generic MCP server for calling x402-protected APIs with automatic payment handling",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/esm/lib.js",
|
|
@@ -45,11 +45,11 @@
|
|
|
45
45
|
"tsx": "^4.21.0",
|
|
46
46
|
"typescript": "^5.9.3",
|
|
47
47
|
"vitest": "^4.0.18",
|
|
48
|
-
"@agentcash/balance": "0.0.1",
|
|
49
48
|
"@agentcash/eslint-config": "0.0.1",
|
|
50
49
|
"@agentcash/networks": "0.0.1",
|
|
50
|
+
"@agentcash/typescript-config": "0.0.1",
|
|
51
51
|
"@agentcash/neverthrow": "1.0.1",
|
|
52
|
-
"@agentcash/
|
|
52
|
+
"@agentcash/balance": "0.0.1"
|
|
53
53
|
},
|
|
54
54
|
"engines": {
|
|
55
55
|
"node": ">=20"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server/index.ts","../../src/server/tools/fetch.ts","../../src/server/tools/response/lib.ts","../../src/server/tools/response/error.ts","../../src/server/tools/response/success.ts","../../src/server/tools/response/safe-handler.ts","../../src/server/tools/lib/check-balance.ts","../../src/server/tools/auth-fetch.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/tools/settings.ts","../../src/server/lib/version.ts"],"sourcesContent":["import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { randomBytes } from 'crypto';\n\nimport { registerFetchTool } from './tools/fetch';\nimport { registerAuthTools } from './tools/auth-fetch';\nimport { registerWalletTools } from './tools/wallet';\nimport { registerCheckEndpointTool } from './tools/check-endpoint';\nimport { registerRedeemInviteTool } from './tools/redeem-invite';\nimport { registerTelemetryTools } from './tools/telemetry';\nimport { registerDiscoveryTools } from './tools/discover-resources';\nimport { registerSettingsTools } from './tools/settings';\n\nimport { MCP_VERSION } from './lib/version';\n\nimport { log } from '@/shared/log';\nimport { redeemInviteCode } from '@/shared/redeem-invite';\n\nimport type { Command } from '@/types';\nimport { buildServerInstructions } from '@/shared/descriptions';\nimport { loadUserOrigins } from '@/shared/user-origins';\nimport { getWallet } from '@/wallet';\n\nexport const startServer: Command = async flags => {\n log.info('Starting agentcash...');\n\n const { invite } = flags;\n let { sessionId } = flags;\n // Generate a random session ID if not provided\n sessionId ??= randomBytes(16).toString('hex');\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 wallets = walletResult.value;\n\n const code = invite ?? process.env.INVITE_CODE;\n\n if (code) {\n await redeemInviteCode({\n code,\n address: wallets.evmAccount.account.address,\n surface: 'startServer',\n });\n }\n\n const serverInstructions = buildServerInstructions(loadUserOrigins());\n\n const server = new McpServer(\n {\n name: 'agentcash',\n title: 'AgentCash',\n version: MCP_VERSION,\n websiteUrl: 'https://agentcash.dev',\n icons: [{ src: 'https://agentcash.dev/favicon.svg' }],\n description: serverInstructions,\n },\n {\n capabilities: {\n resources: {\n subscribe: true,\n listChanged: true,\n },\n prompts: {\n listChanged: true,\n },\n },\n instructions: serverInstructions,\n }\n );\n\n const props = {\n server,\n wallets,\n flags,\n sessionId,\n };\n\n registerFetchTool(props);\n registerAuthTools(props);\n registerWalletTools(props);\n registerCheckEndpointTool(props);\n registerRedeemInviteTool(props);\n registerDiscoveryTools(server);\n registerTelemetryTools(props);\n registerSettingsTools(props);\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 { z } from 'zod';\n\nimport type { Address } from 'viem';\n\nimport { MCP_VERSION } from '@/shared/version';\nimport {\n DEFAULT_USER_FETCH_TIMEOUT,\n safeParseResponse,\n} from '@/shared/neverthrow/fetch';\nimport { isMppEnabled } from '@/shared/mpp-enabled';\nimport {\n createFetchWithPayment,\n type BeforePaymentHook,\n} from '@/operations/fetch-with-payment';\n\nimport {\n mcpError,\n mcpErrorFetch,\n mcpSuccessResponse,\n safeHandler,\n} from './response';\nimport { requestSchema, buildRequest } from './lib/request';\nimport { checkBalance } from './lib/check-balance';\nimport { DESCRIPTIONS, TOOL_PARAMS } from '@/shared/descriptions';\n\nimport type { RegisterTools } from '@/server/types';\nimport type { JsonObject } from '@/shared/neverthrow/json/types';\nimport { Network } from '@agentcash/networks';\n\nconst toolName = 'fetch';\n\nconst paymentMethodEnum = isMppEnabled()\n ? z.enum(['x402', 'mpp'])\n : z.enum(['x402']);\n\nconst fetchInputSchema = requestSchema.extend({\n paymentMethod: paymentMethodEnum\n .optional()\n .describe(TOOL_PARAMS.fetch.paymentMethod),\n paymentNetwork: z.enum([Network.BASE, Network.SOLANA]).optional(),\n maxAmount: z\n .number()\n .positive()\n .optional()\n .describe(TOOL_PARAMS.fetch.maxAmount),\n});\n\nexport const registerFetchTool: RegisterTools = ({\n server,\n wallets,\n flags,\n sessionId,\n}) => {\n server.registerTool(\n toolName,\n {\n title: 'Fetch',\n description: DESCRIPTIONS.fetch.mcp,\n inputSchema: fetchInputSchema,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n safeHandler(async input => {\n // Balance check hook — throws to abort\n const beforePayment: BeforePaymentHook = async ctx => {\n if (ctx.protocol === 'x402') {\n await checkBalance({\n surface: toolName,\n server,\n input:\n ctx.network === Network.SOLANA\n ? {\n address: wallets.svmAccount.account.address,\n network: Network.SOLANA,\n }\n : {\n address: wallets.evmAccount.account.address,\n network: Network.BASE,\n },\n amountNeeded: ctx.amount,\n message: balance =>\n `This request costs ${ctx.amount} USDC. Your current balance is ${balance} USDC.`,\n flags,\n });\n } else if (isMppEnabled()) {\n await checkBalance({\n surface: toolName,\n server,\n input: {\n address: wallets.evmAccount.account.address,\n network: Network.TEMPO,\n tokenAddress: ctx.currency as Address,\n },\n flags,\n amountNeeded: ctx.amount,\n message: balance =>\n `This request costs ${ctx.amount} tokens. Your current Tempo balance is ${balance}.`,\n });\n }\n };\n\n const provider = flags.provider ?? `agentcash@${MCP_VERSION}`;\n\n const request = buildRequest({\n input,\n wallets,\n sessionId,\n provider,\n });\n\n const fetchResult = await createFetchWithPayment({\n surface: toolName,\n wallets,\n paymentMethod: input.paymentMethod,\n paymentNetwork: input.paymentNetwork,\n flags,\n beforePayment,\n timeout: input.timeout ?? DEFAULT_USER_FETCH_TIMEOUT,\n maxAmount: input.maxAmount,\n })(request);\n\n if (fetchResult.isErr()) {\n return mcpError(fetchResult);\n }\n\n const { response, paymentInfo } = 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 return mcpSuccessResponse(\n parseResponseResult.value,\n paymentInfo as unknown as JsonObject | undefined\n );\n })\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),\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 '@agentcash/neverthrow/types';\nimport type { BaseX402Error } from '@/shared/protocols/x402/types';\nimport type { BaseMppError } from '@/shared/protocols/mpp/types';\nimport type { BaseFetchError } from '@/shared/neverthrow/fetch/types';\n\nconst buildMcpError = (\n content: CallToolResult['content'],\n options?: { isError?: boolean }\n): CallToolResult => {\n return {\n content,\n // Default: omit isError so siblings survive parallel calls.\n // Tools with outputSchema MUST pass isError: true so the SDK\n // skips output validation on error paths.\n ...(options?.isError ? { isError: true as const } : {}),\n };\n};\n\nexport const mcpErrorJson = (\n error: JsonObject,\n options?: { isError?: boolean }\n): CallToolResult => {\n return safeStringifyJson('mcp-error-json', error).match(\n success =>\n buildMcpError([{ type: 'text' as const, text: success }], options),\n error =>\n buildMcpError(\n [{ type: 'text' as const, text: JSON.stringify(error, null, 2) }],\n options\n )\n );\n};\n\nexport const mcpError = async (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n err: Err<any, BaseX402Error | BaseMppError | BaseFetchError | BaseError>,\n options?: { isError?: boolean }\n) => {\n const { error } = err;\n if (isFetchError(error)) {\n switch (error.cause) {\n case 'network':\n case 'parse':\n return mcpErrorJson({ ...error }, options);\n case 'http':\n const { response, ...rest } = error;\n const parseResponseResult = await safeParseResponse(\n 'mcp-error-fetch-parse-response',\n response\n );\n const httpContent: CallToolResult['content'] = [\n { type: 'text' as const, text: JSON.stringify(rest, null, 2) },\n ...parseResponseResult.match(\n success => [parsedResponseToToolContentPart(success)],\n () => []\n ),\n ];\n return buildMcpError(httpContent, options);\n }\n }\n return mcpErrorJson({ ...error }, options);\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 mcpSuccessStructuredJson = (data: JsonObject): CallToolResult => {\n return safeStringifyJson('mcp-success-structured', data).match(\n success => ({\n content: [{ type: 'text' as const, text: success }],\n structuredContent: data,\n }),\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 { log } from '@/shared/log';\nimport { mcpErrorJson } from './error';\n\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Wraps an MCP tool handler so uncaught exceptions never propagate.\n * Returns error info as normal content (isError omitted) for any unhandled throw.\n *\n * This prevents sibling parallel tool calls from failing when one\n * tool encounters an unexpected error.\n */\nexport function safeHandler<T>(\n handler: (input: T) => Promise<CallToolResult>\n): (input: T) => Promise<CallToolResult> {\n return async (input: T) => {\n // eslint-disable-next-line no-restricted-syntax -- intentional last-resort catch to prevent sibling tool call failures\n try {\n return await handler(input);\n } catch (e) {\n log.error('Unhandled tool error', e);\n return mcpErrorJson({\n error: e instanceof Error ? e.message : String(e),\n cause: 'unhandled_exception',\n });\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 { GlobalFlags } from '@/types';\nimport type { GetBalanceInput } from '@agentcash/balance';\n\ninterface CheckBalanceProps {\n server: McpServer;\n amountNeeded: number;\n message: (balance: number) => string;\n flags: GlobalFlags;\n surface: string;\n input: GetBalanceInput;\n}\n\nexport const checkBalance = async ({\n server,\n input,\n amountNeeded,\n message,\n flags,\n surface,\n}: CheckBalanceProps) => {\n const balanceResult = await getBalance(surface, input, flags);\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(input.address, flags, input.network)}`\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(input.address, flags, input.network);\n }\n }\n\n return balance.balance;\n};\n","import {\n DEFAULT_USER_FETCH_TIMEOUT,\n safeParseResponse,\n} from '@/shared/neverthrow/fetch';\nimport { createFetchWithAuth } from '@/operations/fetch-with-auth';\n\nimport {\n mcpError,\n mcpSuccessJson,\n mcpSuccessResponse,\n mcpErrorFetch,\n safeHandler,\n} from './response';\n\nimport { requestSchema, buildRequest } from './lib/request';\nimport { DESCRIPTIONS } from '@/shared/descriptions';\n\nimport type { RegisterTools } from '@/server/types';\nimport { Network } from '@agentcash/networks';\nimport z from 'zod';\n\nconst toolName = 'fetch_with_auth';\n\nexport const registerAuthTools: RegisterTools = ({\n server,\n wallets,\n sessionId,\n}) => {\n server.registerTool(\n toolName,\n {\n title: 'Fetch with Authentication',\n description: DESCRIPTIONS.fetchWithAuth.mcp,\n inputSchema: requestSchema.extend({\n paymentNetwork: z.enum([Network.BASE, Network.SOLANA]).optional(),\n }),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n safeHandler(async input => {\n const result = await createFetchWithAuth({\n surface: toolName,\n wallets,\n timeout: input.timeout ?? DEFAULT_USER_FETCH_TIMEOUT,\n paymentNetwork: input.paymentNetwork,\n })(\n buildRequest({\n input,\n wallets,\n sessionId,\n })\n );\n\n if (result.isErr()) {\n return mcpError(result);\n }\n\n const value = result.value;\n\n if (value.outcome === 'no_siwx_extension') {\n return mcpSuccessJson({\n error: 'Endpoint returned 402 but no sign-in-with-x extension found',\n statusCode: 402,\n hint: 'This endpoint may require payment instead of authentication. Use execute_call for paid requests.',\n });\n }\n\n const { response } = 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 return mcpSuccessResponse(parseResponseResult.value);\n })\n );\n};\n","import { z } from 'zod';\n\nimport { getWalletInfo } from '@/operations/wallet-info';\n\nimport { mcpSuccessStructuredJson, mcpError } from './response';\nimport { DESCRIPTIONS, TOOL_PARAMS } from '@/shared/descriptions';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst chainBalanceSchema = z.object({\n chain: z.string().describe(TOOL_PARAMS.getWalletInfo.output.chain),\n balance: z.number().describe(TOOL_PARAMS.getWalletInfo.output.chainBalance),\n});\n\nexport const registerWalletTools: RegisterTools = ({\n server,\n wallets,\n flags,\n}) => {\n server.registerTool(\n 'get_wallet_info',\n {\n title: 'Get Wallet Info',\n description: DESCRIPTIONS.getWalletInfo.mcp,\n outputSchema: z.object({\n address: z.string().describe(TOOL_PARAMS.getWalletInfo.output.address),\n balance: z.number().describe(TOOL_PARAMS.getWalletInfo.output.balance),\n chains: z\n .array(chainBalanceSchema)\n .describe(TOOL_PARAMS.getWalletInfo.output.chains),\n isNewWallet: z\n .boolean()\n .describe(TOOL_PARAMS.getWalletInfo.output.isNewWallet),\n depositLink: z\n .string()\n .url()\n .describe(TOOL_PARAMS.getWalletInfo.output.depositLink),\n onboardingCta: z\n .object({\n onboardLink: z\n .string()\n .url()\n .describe(\n TOOL_PARAMS.getWalletInfo.output.onboardingCtaOnboardLink\n ),\n depositLink: z\n .string()\n .url()\n .describe(\n TOOL_PARAMS.getWalletInfo.output.onboardingCtaDepositLink\n ),\n message: z\n .string()\n .describe(TOOL_PARAMS.getWalletInfo.output.onboardingCtaMessage),\n })\n .optional()\n .describe(TOOL_PARAMS.getWalletInfo.output.onboardingCta),\n message: z\n .string()\n .optional()\n .describe(TOOL_PARAMS.getWalletInfo.output.message),\n }),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n async () => {\n const result = await getWalletInfo('get_wallet_info', wallets, flags);\n\n if (result.isErr()) {\n return mcpError(result, { isError: true });\n }\n\n return mcpSuccessStructuredJson({\n address: result.value.address,\n balance: result.value.balance,\n chains: result.value.chains.map(c => ({ ...c })),\n isNewWallet: result.value.isNewWallet,\n depositLink: result.value.depositLink,\n ...(result.value.onboardingCta\n ? {\n onboardingCta: {\n onboardLink: result.value.onboardingCta.onboardLink,\n depositLink: result.value.onboardingCta.depositLink,\n message: result.value.onboardingCta.message,\n },\n }\n : {}),\n ...(result.value.message ? { message: result.value.message } : {}),\n });\n }\n );\n};\n","import z from 'zod';\n\nimport { mcpSuccessJson, safeHandler } from './response';\n\nimport { log } from '@/shared/log';\nimport { toJsonObject } from '@/shared/neverthrow/json';\nimport { checkEndpoint } from '@/operations/check-endpoint';\nimport { DESCRIPTIONS, TOOL_PARAMS } from '@/shared/descriptions';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst toolName = 'check_endpoint_schema';\n\nexport const registerCheckEndpointTool: RegisterTools = ({\n server,\n wallets,\n sessionId,\n}) => {\n server.registerTool(\n toolName,\n {\n title: 'Check Endpoint Schema',\n description: DESCRIPTIONS.checkEndpointSchema.mcp,\n inputSchema: z.object({\n url: z.string().describe(TOOL_PARAMS.checkEndpointSchema.url),\n method: z\n .enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH'])\n .optional()\n .describe(TOOL_PARAMS.checkEndpointSchema.method),\n sample_input_body: z\n .record(z.string(), z.unknown())\n .optional()\n .describe(TOOL_PARAMS.checkEndpointSchema.sampleInputBody),\n headers: z\n .record(z.string(), z.string())\n .optional()\n .describe(TOOL_PARAMS.checkEndpointSchema.headers)\n .default({}),\n }),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n safeHandler(async input => {\n log.info('Querying endpoint', {\n url: input.url,\n method: input.method,\n hasSampleInputBody: !!input.sample_input_body,\n });\n\n const result = await checkEndpoint(\n toolName,\n input.url,\n input.method ? [input.method] : undefined,\n input.sample_input_body,\n {\n ...input.headers,\n 'X-Wallet-Address': wallets.evmAccount.account.address,\n ...(sessionId ? { 'X-Session-ID': sessionId } : {}),\n }\n );\n\n if (!result.found) {\n log.error('[checkEndpoint] failed', {\n surface: toolName,\n url: input.url,\n cause: result.cause,\n message: result.message,\n });\n return mcpSuccessJson({\n message: 'No endpoint schema found for this URL.',\n url: input.url,\n });\n }\n\n if (result.advisories.length === 0) {\n return mcpSuccessJson({\n message: 'No endpoint schema found for this URL.',\n url: input.url,\n });\n }\n\n const results = result.advisories.map(a => ({\n ...a,\n requiresPayment: a.authMode === 'paid' || a.authMode === 'apiKey+paid',\n }));\n\n return mcpSuccessJson(toJsonObject({ url: input.url, results }));\n })\n );\n};\n","import z from 'zod';\nimport { mcpError, mcpSuccessStructuredJson } from './response';\n\nimport { redeemInviteCode } from '@/shared/redeem-invite';\nimport { DESCRIPTIONS, TOOL_PARAMS } from '@/shared/descriptions';\n\nimport type { RegisterTools } from '@/server/types';\n\nexport const registerRedeemInviteTool: RegisterTools = ({\n server,\n wallets,\n}) => {\n server.registerTool(\n 'redeem_invite',\n {\n title: 'Redeem Invite',\n description: DESCRIPTIONS.redeemInvite.mcp,\n inputSchema: z.object({\n code: z.string().min(1).describe(TOOL_PARAMS.redeemInvite.code),\n }),\n outputSchema: z.object({\n redeemed: z.literal(true),\n amount: z.string().describe(TOOL_PARAMS.redeemInvite.output.amount),\n txHash: z.string().describe(TOOL_PARAMS.redeemInvite.output.txHash),\n }),\n annotations: {\n readOnlyHint: false, // Modifies wallet balance\n destructiveHint: false, // Additive (adds funds), not destructive\n idempotentHint: false, // Same code can't be redeemed twice - second attempt fails\n openWorldHint: true,\n },\n },\n async ({ code }) => {\n const result = await redeemInviteCode({\n code,\n address: wallets.evmAccount.account.address,\n surface: 'redeem_invite',\n dev: false,\n });\n\n if (result.isErr()) {\n return mcpError(result, { isError: true });\n }\n\n const { amount, txHash } = result.value;\n\n return mcpSuccessStructuredJson({\n redeemed: true,\n amount: `${amount} USDC`,\n txHash,\n });\n }\n );\n};\n","import z from 'zod';\n\nimport { log } from '@/shared/log';\nimport { submitErrorReport } from '@/operations/report-error';\nimport { mcpError, mcpSuccessStructuredJson } from './response';\nimport { DESCRIPTIONS, TOOL_PARAMS } from '@/shared/descriptions';\n\nimport type { RegisterTools } from '@/server/types';\n\nconst toolName = 'report_error';\n\nexport const registerTelemetryTools: RegisterTools = ({\n server,\n wallets,\n flags,\n}) => {\n server.registerTool(\n toolName,\n {\n title: 'Report Error',\n description: DESCRIPTIONS.reportError.mcp,\n inputSchema: z.object({\n tool: z.string().describe(TOOL_PARAMS.reportError.tool),\n resource: z\n .string()\n .optional()\n .describe(TOOL_PARAMS.reportError.resource),\n summary: z.string().describe(TOOL_PARAMS.reportError.summary),\n errorMessage: z.string().describe(TOOL_PARAMS.reportError.errorMessage),\n stack: z.string().optional().describe(TOOL_PARAMS.reportError.stack),\n fullReport: z\n .string()\n .optional()\n .describe(TOOL_PARAMS.reportError.fullReport),\n }),\n outputSchema: z.object({\n submitted: z.literal(true),\n reportId: z.string().describe(TOOL_PARAMS.reportError.output.reportId),\n message: z.string().describe(TOOL_PARAMS.reportError.output.message),\n }),\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: true,\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 result = await submitErrorReport(\n toolName,\n {\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 },\n wallets.evmAccount.account.address,\n flags.dev\n );\n\n if (result.isErr()) {\n log.error('Failed to submit error report', result.error);\n return mcpError(result, { isError: true });\n }\n\n log.info('Error report submitted successfully', {\n reportId: result.value.reportId,\n });\n\n return mcpSuccessStructuredJson({\n submitted: result.value.submitted,\n reportId: result.value.reportId,\n message: result.value.message,\n });\n }\n );\n};\n","import { z } from 'zod';\n\nimport { resultFromPromise } from '@agentcash/neverthrow';\n\nimport { log } from '@/shared/log';\nimport { discoverResources } from '@/operations/discover';\nimport { DESCRIPTIONS, TOOL_PARAMS } from '@/shared/descriptions';\n\nimport {\n mcpError,\n mcpErrorJson,\n mcpSuccessJson,\n safeHandler,\n} from './response';\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { JsonObject } from '@/shared/neverthrow/json/types';\n\nconst toolName = 'discover_api_endpoints';\nconst OPENAPI_TRIED_PATHS = '/openapi.json, /.well-known/x402';\n\nexport function registerDiscoveryTools(server: McpServer): void {\n server.registerTool(\n toolName,\n {\n title: 'Discover API Endpoints',\n description: DESCRIPTIONS.discoverApiEndpoints.mcp,\n inputSchema: z.object({\n url: z.string().describe(TOOL_PARAMS.discoverApiEndpoints.url),\n include_guidance: z\n .boolean()\n .optional()\n .describe(TOOL_PARAMS.discoverApiEndpoints.includeGuidance),\n }),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n safeHandler(async ({ url, include_guidance }) => {\n if (!URL.canParse(url)) {\n return mcpErrorJson({\n error: 'Invalid URL',\n url,\n hint: 'Provide a fully-formed URL like https://example.com',\n });\n }\n\n log.info(`Discovering resources for: ${url}`);\n\n const discoverResult = await resultFromPromise(\n 'discover',\n toolName,\n discoverResources(toolName, url, {\n includeGuidance: include_guidance,\n }),\n e => ({\n cause: 'discover' as const,\n message: e instanceof Error ? e.message : String(e),\n })\n );\n\n if (discoverResult.isErr()) {\n return mcpError(discoverResult);\n }\n\n const result = discoverResult.value;\n\n if ('endpoints' in result) {\n return mcpSuccessJson({\n found: true,\n origin: result.origin,\n ...(result.info\n ? { info: result.info as unknown as JsonObject }\n : {}),\n guidanceAvailable: result.guidanceAvailable,\n ...(result.guidanceTokens != null\n ? { guidanceTokens: result.guidanceTokens }\n : {}),\n ...(result.guidance ? { guidance: result.guidance } : {}),\n endpoints: result.endpoints.map(\n e => ({ ...e }) as unknown as JsonObject\n ),\n } as JsonObject);\n }\n\n // Discovery failed — surface the real cause\n const origin = URL.canParse(url) ? new URL(url).origin : url;\n\n if (result.cause === 'not_found') {\n return mcpSuccessJson({\n found: false,\n origin,\n error: `No OpenAPI spec found. Tried: ${OPENAPI_TRIED_PATHS}`,\n });\n }\n\n return mcpSuccessJson({\n found: false,\n origin,\n cause: result.cause,\n error:\n result.message ?? `Failed to fetch OpenAPI spec (${result.cause})`,\n hint:\n result.cause === 'timeout'\n ? 'The server may be slow or unreachable. Try again later.'\n : result.cause === 'network'\n ? 'Could not reach the server. Check the network connection and try again.'\n : `The server returned an unparseable response. Tried: ${OPENAPI_TRIED_PATHS}`,\n });\n })\n );\n}\n","import { z } from 'zod';\n\nimport { getSettings, setSettings } from '@/shared/settings';\nimport { DEFAULT_MAX_AMOUNT } from '@/operations/fetch-with-payment';\n\nimport { mcpSuccessStructuredJson, safeHandler } from './response';\nimport { DESCRIPTIONS } from '@/shared/descriptions';\n\nimport type { RegisterTools } from '@/server/types';\n\nexport const registerSettingsTools: RegisterTools = ({ server }) => {\n server.registerTool(\n 'update_settings',\n {\n title: 'Update Settings',\n description: DESCRIPTIONS.updateSettings.mcp,\n inputSchema: z.object({\n maxAmount: z\n .number()\n .positive()\n .optional()\n .describe(\n `Maximum amount (USD) to pay per fetch request. Current default: $${DEFAULT_MAX_AMOUNT}.`\n ),\n }),\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n safeHandler(input => {\n if (input.maxAmount !== undefined) {\n setSettings({ maxAmount: input.maxAmount });\n }\n\n const settings = getSettings();\n\n return Promise.resolve(\n mcpSuccessStructuredJson({\n maxAmount: settings.maxAmount ?? DEFAULT_MAX_AMOUNT,\n })\n );\n })\n );\n\n server.registerTool(\n 'get_settings',\n {\n title: 'Get Settings',\n description: DESCRIPTIONS.getSettings.mcp,\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n safeHandler(() => {\n const settings = getSettings();\n\n return Promise.resolve(\n mcpSuccessStructuredJson({\n maxAmount: settings.maxAmount ?? DEFAULT_MAX_AMOUNT,\n })\n );\n })\n );\n};\n","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"],"mappings":"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","names":["error","z","toolName","z","z","z","toolName","z","z","z","z","toolName","z","z","toolName","z","z","z","__dirname","MCP_VERSION","MCP_VERSION"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|