agentcash 0.13.7 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/run-server.cjs +46785 -34056
- package/dist/esm/{add-skill-5O3R2PAD.js → add-skill-JHBOH5SG.js} +4 -3
- package/dist/esm/{add-skill-5O3R2PAD.js.map → add-skill-JHBOH5SG.js.map} +1 -1
- package/dist/esm/{bridge-FRFNAJZI.js → bridge-YU2PE54M.js} +4 -3
- package/dist/esm/{bridge-FRFNAJZI.js.map → bridge-YU2PE54M.js.map} +1 -1
- package/dist/esm/{chunk-THSTTUNV.js → chunk-6I5J7IHC.js} +2 -2
- package/dist/esm/{chunk-DYWG67FV.js → chunk-7ZLVTQTS.js} +24 -6
- package/dist/esm/chunk-7ZLVTQTS.js.map +1 -0
- package/dist/esm/{chunk-PBVLTOFS.js → chunk-BFOYXXLG.js} +2 -17
- package/dist/esm/chunk-BFOYXXLG.js.map +1 -0
- package/dist/esm/{chunk-JOIAQY6V.js → chunk-BNFMFAEF.js} +5 -5
- package/dist/esm/{chunk-XFSVC7AW.js → chunk-E52LAD7Z.js} +6 -4
- package/dist/esm/{chunk-XFSVC7AW.js.map → chunk-E52LAD7Z.js.map} +1 -1
- package/dist/esm/{chunk-IPBR36VR.js → chunk-G5FHPXQL.js} +32 -19
- package/dist/esm/chunk-G5FHPXQL.js.map +1 -0
- package/dist/esm/{chunk-MYWE3P7R.js → chunk-KJCWPVQE.js} +5 -3
- package/dist/esm/{chunk-MYWE3P7R.js.map → chunk-KJCWPVQE.js.map} +1 -1
- package/dist/esm/{chunk-AWFBYDYO.js → chunk-MSNAPI5G.js} +5 -3
- package/dist/esm/{chunk-AWFBYDYO.js.map → chunk-MSNAPI5G.js.map} +1 -1
- package/dist/esm/chunk-U6FRXL3X.js +28 -0
- package/dist/esm/chunk-U6FRXL3X.js.map +1 -0
- package/dist/esm/{chunk-OZQBO26R.js → chunk-UCADMHNP.js} +2 -2
- package/dist/esm/{chunk-6TRJQGKT.js → chunk-V3HBA7NZ.js} +3 -3
- package/dist/esm/{chunk-DJY5XAKB.js → chunk-XC5JT2NQ.js} +2 -2
- package/dist/esm/chunk-Y2J274RB.js +109 -0
- package/dist/esm/chunk-Y2J274RB.js.map +1 -0
- package/dist/esm/{chunk-SGSOKWC6.js → chunk-Y4BYJBYU.js} +5 -3
- package/dist/esm/{chunk-SGSOKWC6.js.map → chunk-Y4BYJBYU.js.map} +1 -1
- package/dist/esm/{chunk-KPJJSNZO.js → chunk-YUPRVVFP.js} +6 -6
- package/dist/esm/{discover-PMVCPMAP.js → discover-654M2PZ3.js} +4 -3
- package/dist/esm/discover-654M2PZ3.js.map +1 -0
- package/dist/esm/{fetch-AY3ODEFV.js → fetch-GPYZNSPB.js} +5 -4
- package/dist/esm/{fetch-AY3ODEFV.js.map → fetch-GPYZNSPB.js.map} +1 -1
- package/dist/esm/{fund-YCUI5KVH.js → fund-HHL4QEU5.js} +5 -4
- package/dist/esm/{fund-YCUI5KVH.js.map → fund-HHL4QEU5.js.map} +1 -1
- package/dist/esm/index.js +24 -24
- package/dist/esm/{install-JK23KR2V.js → install-D2IVOSIS.js} +8 -7
- package/dist/esm/{install-JK23KR2V.js.map → install-D2IVOSIS.js.map} +1 -1
- package/dist/esm/{onboard-ROHDJBVZ.js → onboard-5SZ6ZCM5.js} +11 -10
- package/dist/esm/{onboard-ROHDJBVZ.js.map → onboard-5SZ6ZCM5.js.map} +1 -1
- package/dist/esm/{origins-UCEONL2Q.js → origins-JAC2K5A4.js} +4 -3
- package/dist/esm/{origins-UCEONL2Q.js.map → origins-JAC2K5A4.js.map} +1 -1
- package/dist/esm/{register-HP4VTPU7.js → register-AD43YD5O.js} +5 -4
- package/dist/esm/{register-HP4VTPU7.js.map → register-AD43YD5O.js.map} +1 -1
- package/dist/esm/{report-error-7XPLOPZQ.js → report-error-V2J7LNUZ.js} +5 -4
- package/dist/esm/{report-error-7XPLOPZQ.js.map → report-error-V2J7LNUZ.js.map} +1 -1
- package/dist/esm/{search-M436C326.js → search-WV2FO7OG.js} +6 -5
- package/dist/esm/{search-M436C326.js.map → search-WV2FO7OG.js.map} +1 -1
- package/dist/esm/{server-65FGGSXG.js → server-ADTFQX5M.js} +20 -16
- package/dist/esm/server-ADTFQX5M.js.map +1 -0
- package/dist/esm/{server-M6HRWMVZ.js → server-RHVPZZ4R.js} +2 -2
- package/dist/esm/{try-C2WWPJLH.js → try-36SR5JEG.js} +7 -6
- package/dist/esm/try-36SR5JEG.js.map +1 -0
- package/dist/esm/{wallet-NMNG34SO.js → wallet-QOS3FPSF.js} +7 -6
- package/dist/esm/{wallet-NMNG34SO.js.map → wallet-QOS3FPSF.js.map} +1 -1
- package/package.json +7 -7
- package/dist/esm/chunk-CR6PFCYR.js +0 -49
- package/dist/esm/chunk-CR6PFCYR.js.map +0 -1
- package/dist/esm/chunk-DYWG67FV.js.map +0 -1
- package/dist/esm/chunk-IPBR36VR.js.map +0 -1
- package/dist/esm/chunk-PBVLTOFS.js.map +0 -1
- package/dist/esm/discover-PMVCPMAP.js.map +0 -1
- package/dist/esm/server-65FGGSXG.js.map +0 -1
- package/dist/esm/try-C2WWPJLH.js.map +0 -1
- /package/dist/esm/{chunk-THSTTUNV.js.map → chunk-6I5J7IHC.js.map} +0 -0
- /package/dist/esm/{chunk-JOIAQY6V.js.map → chunk-BNFMFAEF.js.map} +0 -0
- /package/dist/esm/{chunk-OZQBO26R.js.map → chunk-UCADMHNP.js.map} +0 -0
- /package/dist/esm/{chunk-6TRJQGKT.js.map → chunk-V3HBA7NZ.js.map} +0 -0
- /package/dist/esm/{chunk-DJY5XAKB.js.map → chunk-XC5JT2NQ.js.map} +0 -0
- /package/dist/esm/{chunk-KPJJSNZO.js.map → chunk-YUPRVVFP.js.map} +0 -0
- /package/dist/esm/{server-M6HRWMVZ.js.map → server-RHVPZZ4R.js.map} +0 -0
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveOrigin
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-6I5J7IHC.js";
|
|
4
4
|
import {
|
|
5
5
|
installSkills
|
|
6
6
|
} from "./chunk-FVVSNDQR.js";
|
|
7
7
|
import {
|
|
8
8
|
addUserOrigin
|
|
9
9
|
} from "./chunk-YIU364NZ.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-Y2J274RB.js";
|
|
11
11
|
import "./chunk-CR2YGI3I.js";
|
|
12
12
|
import "./chunk-KVSTJRSJ.js";
|
|
13
13
|
import "./chunk-FB5CMO3J.js";
|
|
14
|
+
import "./chunk-U6FRXL3X.js";
|
|
14
15
|
import {
|
|
15
16
|
errorResponse,
|
|
16
17
|
outputAndExit,
|
|
@@ -96,4 +97,4 @@ var addSkillCommand = async (input) => {
|
|
|
96
97
|
export {
|
|
97
98
|
addSkillCommand
|
|
98
99
|
};
|
|
99
|
-
//# sourceMappingURL=add-skill-
|
|
100
|
+
//# sourceMappingURL=add-skill-JHBOH5SG.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/shared/skills/origin.ts","../../src/cli/commands/add-skill.ts"],"sourcesContent":["import * as os from 'node:os';\nimport * as path from 'node:path';\n\nimport {\n safeMkdir,\n safeMkdtemp,\n safeRm,\n safeWriteFile,\n} from '@/shared/neverthrow/fs';\nimport { installSkills } from '@/shared/skills/core/install';\n\nimport type { InstallSkillsOptions } from './core/install';\nimport type { ResolvedOrigin } from '@/cli/lib/resolve-origin';\n\nexport async function addOriginSkill(\n origin: ResolvedOrigin,\n surface: string,\n options?: InstallSkillsOptions\n) {\n const tmpDirResult = await safeMkdtemp(\n surface,\n path.join(os.tmpdir(), 'agentcash-skill-add')\n );\n if (tmpDirResult.isErr()) {\n return tmpDirResult;\n }\n\n const tmpDir = tmpDirResult.value;\n\n const skillDir = path.join(tmpDir, originSkillTitle(origin));\n const mkdirResult = await safeMkdir(surface, skillDir, { recursive: true });\n\n if (mkdirResult.isErr()) {\n return mkdirResult;\n }\n\n const writeResult = await safeWriteFile(\n surface,\n path.join(skillDir, 'SKILL.md'),\n originSkillContent(origin)\n );\n\n if (writeResult.isErr()) {\n await safeRm(surface, tmpDir, { recursive: true, force: true });\n return writeResult;\n }\n\n const result = await installSkills(skillDir, options);\n\n await safeRm(surface, tmpDir, { recursive: true, force: true });\n\n return result;\n}\n\nconst originSkillTitle = (origin: ResolvedOrigin) =>\n origin.title.toLowerCase().replace(/[ .]/g, '-');\n\nconst originSkillContent = (origin: ResolvedOrigin) => `---\nname: ${originSkillTitle(origin)}\ndescription: ${origin.description}\ncommand: npx agentcash discover ${origin.url}\n---\nCall \\`npx agentcash discover ${origin.url}\\` to discover how to use ${origin.title}.`;\n","import { successResponse, outputAndExit, errorResponse } from '@/cli/output';\nimport { addUserOrigin } from '@/shared/user-origins';\n\nimport { resolveOrigin } from '../lib/resolve-origin';\nimport { addOriginSkill } from '@/shared/skills/origin';\n\nimport type { Command } from '@/types';\nimport type { DiscoverResourcesInput } from '@/operations/discover';\n\nconst SURFACE = 'cli:add-skill';\n\nexport const addSkillCommand: Command<DiscoverResourcesInput> = async input => {\n const resolved = await resolveOrigin(SURFACE, input);\n if (!resolved.ok) return outputAndExit(resolved.error, input);\n\n const { origin } = resolved;\n addUserOrigin(origin);\n\n const skillResult = await addOriginSkill(origin, SURFACE);\n\n if (!skillResult.isOk()) {\n return outputAndExit(\n errorResponse({\n code: 'GENERAL_ERROR',\n message: skillResult.error.message,\n surface: SURFACE,\n cause: 'skill_install_failed',\n }),\n input\n );\n }\n\n return outputAndExit(\n successResponse({\n ...origin,\n installed: skillResult.value.path,\n linkedAgents: skillResult.value.agents,\n note: 'Restart your MCP server for this origin to appear in the model context.',\n }),\n input\n );\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/shared/skills/origin.ts","../../src/cli/commands/add-skill.ts"],"sourcesContent":["import * as os from 'node:os';\nimport * as path from 'node:path';\n\nimport {\n safeMkdir,\n safeMkdtemp,\n safeRm,\n safeWriteFile,\n} from '@/shared/neverthrow/fs';\nimport { installSkills } from '@/shared/skills/core/install';\n\nimport type { InstallSkillsOptions } from './core/install';\nimport type { ResolvedOrigin } from '@/cli/lib/resolve-origin';\n\nexport async function addOriginSkill(\n origin: ResolvedOrigin,\n surface: string,\n options?: InstallSkillsOptions\n) {\n const tmpDirResult = await safeMkdtemp(\n surface,\n path.join(os.tmpdir(), 'agentcash-skill-add')\n );\n if (tmpDirResult.isErr()) {\n return tmpDirResult;\n }\n\n const tmpDir = tmpDirResult.value;\n\n const skillDir = path.join(tmpDir, originSkillTitle(origin));\n const mkdirResult = await safeMkdir(surface, skillDir, { recursive: true });\n\n if (mkdirResult.isErr()) {\n return mkdirResult;\n }\n\n const writeResult = await safeWriteFile(\n surface,\n path.join(skillDir, 'SKILL.md'),\n originSkillContent(origin)\n );\n\n if (writeResult.isErr()) {\n await safeRm(surface, tmpDir, { recursive: true, force: true });\n return writeResult;\n }\n\n const result = await installSkills(skillDir, options);\n\n await safeRm(surface, tmpDir, { recursive: true, force: true });\n\n return result;\n}\n\nconst originSkillTitle = (origin: ResolvedOrigin) =>\n origin.title.toLowerCase().replace(/[ .]/g, '-');\n\nconst originSkillContent = (origin: ResolvedOrigin) => `---\nname: ${originSkillTitle(origin)}\ndescription: ${origin.description}\ncommand: npx agentcash discover ${origin.url}\n---\nCall \\`npx agentcash discover ${origin.url}\\` to discover how to use ${origin.title}.`;\n","import { successResponse, outputAndExit, errorResponse } from '@/cli/output';\nimport { addUserOrigin } from '@/shared/user-origins';\n\nimport { resolveOrigin } from '../lib/resolve-origin';\nimport { addOriginSkill } from '@/shared/skills/origin';\n\nimport type { Command } from '@/types';\nimport type { DiscoverResourcesInput } from '@/operations/discover';\n\nconst SURFACE = 'cli:add-skill';\n\nexport const addSkillCommand: Command<DiscoverResourcesInput> = async input => {\n const resolved = await resolveOrigin(SURFACE, input);\n if (!resolved.ok) return outputAndExit(resolved.error, input);\n\n const { origin } = resolved;\n addUserOrigin(origin);\n\n const skillResult = await addOriginSkill(origin, SURFACE);\n\n if (!skillResult.isOk()) {\n return outputAndExit(\n errorResponse({\n code: 'GENERAL_ERROR',\n message: skillResult.error.message,\n surface: SURFACE,\n cause: 'skill_install_failed',\n }),\n input\n );\n }\n\n return outputAndExit(\n successResponse({\n ...origin,\n installed: skillResult.value.path,\n linkedAgents: skillResult.value.agents,\n note: 'Restart your MCP server for this origin to appear in the model context.',\n }),\n input\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,YAAY,QAAQ;AACpB,YAAY,UAAU;AAatB,eAAsB,eACpB,QACA,SACA,SACA;AACA,QAAM,eAAe,MAAM;AAAA,IACzB;AAAA,IACK,UAAQ,UAAO,GAAG,qBAAqB;AAAA,EAC9C;AACA,MAAI,aAAa,MAAM,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,aAAa;AAE5B,QAAM,WAAgB,UAAK,QAAQ,iBAAiB,MAAM,CAAC;AAC3D,QAAM,cAAc,MAAM,UAAU,SAAS,UAAU,EAAE,WAAW,KAAK,CAAC;AAE1E,MAAI,YAAY,MAAM,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,MAAM;AAAA,IACxB;AAAA,IACK,UAAK,UAAU,UAAU;AAAA,IAC9B,mBAAmB,MAAM;AAAA,EAC3B;AAEA,MAAI,YAAY,MAAM,GAAG;AACvB,UAAM,OAAO,SAAS,QAAQ,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAC9D,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,MAAM,cAAc,UAAU,OAAO;AAEpD,QAAM,OAAO,SAAS,QAAQ,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAE9D,SAAO;AACT;AAEA,IAAM,mBAAmB,CAAC,WACxB,OAAO,MAAM,YAAY,EAAE,QAAQ,SAAS,GAAG;AAEjD,IAAM,qBAAqB,CAAC,WAA2B;AAAA,QAC/C,iBAAiB,MAAM,CAAC;AAAA,eACjB,OAAO,WAAW;AAAA,kCACC,OAAO,GAAG;AAAA;AAAA,gCAEZ,OAAO,GAAG,6BAA6B,OAAO,KAAK;;;ACrDnF,IAAM,UAAU;AAET,IAAM,kBAAmD,OAAM,UAAS;AAC7E,QAAM,WAAW,MAAM,cAAc,SAAS,KAAK;AACnD,MAAI,CAAC,SAAS,GAAI,QAAO,cAAc,SAAS,OAAO,KAAK;AAE5D,QAAM,EAAE,OAAO,IAAI;AACnB,gBAAc,MAAM;AAEpB,QAAM,cAAc,MAAM,eAAe,QAAQ,OAAO;AAExD,MAAI,CAAC,YAAY,KAAK,GAAG;AACvB,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,YAAY,MAAM;AAAA,QAC3B,SAAS;AAAA,QACT,OAAO;AAAA,MACT,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,gBAAgB;AAAA,MACd,GAAG;AAAA,MACH,WAAW,YAAY,MAAM;AAAA,MAC7B,cAAc,YAAY,MAAM;AAAA,MAChC,MAAM;AAAA,IACR,CAAC;AAAA,IACD;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import {
|
|
2
2
|
bridge,
|
|
3
3
|
bridgeSchema
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-Y4BYJBYU.js";
|
|
5
5
|
import {
|
|
6
6
|
DESCRIPTIONS
|
|
7
7
|
} from "./chunk-CR2YGI3I.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-BFOYXXLG.js";
|
|
9
9
|
import {
|
|
10
10
|
getWalletOrExit
|
|
11
11
|
} from "./chunk-7AT3NXJ2.js";
|
|
12
12
|
import "./chunk-F3KGAMIA.js";
|
|
13
13
|
import "./chunk-NPJV7AMV.js";
|
|
14
14
|
import "./chunk-KVSTJRSJ.js";
|
|
15
|
+
import "./chunk-U6FRXL3X.js";
|
|
15
16
|
import {
|
|
16
17
|
errorResponse,
|
|
17
18
|
fromNeverthrowError,
|
|
@@ -53,4 +54,4 @@ var bridgeCommand = async (args) => {
|
|
|
53
54
|
export {
|
|
54
55
|
bridgeCommand
|
|
55
56
|
};
|
|
56
|
-
//# sourceMappingURL=bridge-
|
|
57
|
+
//# sourceMappingURL=bridge-YU2PE54M.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/commands/bridge.ts"],"sourcesContent":["import {\n successResponse,\n fromNeverthrowError,\n outputAndExit,\n errorResponse,\n} from '@/cli/output';\n\nimport { bridge, bridgeSchema, type BridgeInput } from '@/operations/bridge';\nimport { DESCRIPTIONS } from '@/shared/descriptions';\nimport type { Command } from '@/types';\nimport { getWalletOrExit } from '../lib/get-wallet-or-exit';\n\nconst SURFACE = `cli:${DESCRIPTIONS.bridge.toolNames.cli}`;\n\nexport const bridgeCommand: Command<BridgeInput> = async args => {\n const wallets = await getWalletOrExit(args);\n\n const parsedArgs = bridgeSchema.safeParse(args);\n\n if (!parsedArgs.success) {\n return outputAndExit(\n errorResponse({\n code: 'INVALID_INPUT',\n message: parsedArgs.error.message,\n surface: SURFACE,\n cause: 'validation',\n }),\n args\n );\n }\n\n const bridgeResult = await bridge({ ...args, ...parsedArgs.data }, wallets);\n\n if (bridgeResult.isErr()) {\n return outputAndExit(fromNeverthrowError(bridgeResult), args);\n }\n\n return outputAndExit(\n successResponse({\n success: true,\n }),\n args\n );\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/bridge.ts"],"sourcesContent":["import {\n successResponse,\n fromNeverthrowError,\n outputAndExit,\n errorResponse,\n} from '@/cli/output';\n\nimport { bridge, bridgeSchema, type BridgeInput } from '@/operations/bridge';\nimport { DESCRIPTIONS } from '@/shared/descriptions';\nimport type { Command } from '@/types';\nimport { getWalletOrExit } from '../lib/get-wallet-or-exit';\n\nconst SURFACE = `cli:${DESCRIPTIONS.bridge.toolNames.cli}`;\n\nexport const bridgeCommand: Command<BridgeInput> = async args => {\n const wallets = await getWalletOrExit(args);\n\n const parsedArgs = bridgeSchema.safeParse(args);\n\n if (!parsedArgs.success) {\n return outputAndExit(\n errorResponse({\n code: 'INVALID_INPUT',\n message: parsedArgs.error.message,\n surface: SURFACE,\n cause: 'validation',\n }),\n args\n );\n }\n\n const bridgeResult = await bridge({ ...args, ...parsedArgs.data }, wallets);\n\n if (bridgeResult.isErr()) {\n return outputAndExit(fromNeverthrowError(bridgeResult), args);\n }\n\n return outputAndExit(\n successResponse({\n success: true,\n }),\n args\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,IAAM,UAAU,OAAO,aAAa,OAAO,UAAU,GAAG;AAEjD,IAAM,gBAAsC,OAAM,SAAQ;AAC/D,QAAM,UAAU,MAAM,gBAAgB,IAAI;AAE1C,QAAM,aAAa,aAAa,UAAU,IAAI;AAE9C,MAAI,CAAC,WAAW,SAAS;AACvB,WAAO;AAAA,MACL,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,WAAW,MAAM;AAAA,QAC1B,SAAS;AAAA,QACT,OAAO;AAAA,MACT,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,eAAe,MAAM,OAAO,EAAE,GAAG,MAAM,GAAG,WAAW,KAAK,GAAG,OAAO;AAE1E,MAAI,aAAa,MAAM,GAAG;AACxB,WAAO,cAAc,oBAAoB,YAAY,GAAG,IAAI;AAAA,EAC9D;AAEA,SAAO;AAAA,IACL,gBAAgB;AAAA,MACd,SAAS;AAAA,IACX,CAAC;AAAA,IACD;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
discoverResources
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-Y2J274RB.js";
|
|
4
4
|
import {
|
|
5
5
|
errorResponse
|
|
6
6
|
} from "./chunk-7EBJ4BCH.js";
|
|
@@ -52,4 +52,4 @@ function resolveDescription(result) {
|
|
|
52
52
|
export {
|
|
53
53
|
resolveOrigin
|
|
54
54
|
};
|
|
55
|
-
//# sourceMappingURL=chunk-
|
|
55
|
+
//# sourceMappingURL=chunk-6I5J7IHC.js.map
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "./chunk-27DZCYDB.js";
|
|
7
7
|
import {
|
|
8
8
|
INSTALL_PACKAGE_SPECIFIER
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-XC5JT2NQ.js";
|
|
10
10
|
import {
|
|
11
11
|
log,
|
|
12
12
|
safeReadFile,
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
// src/cli/commands/install/2-add-server/index.ts
|
|
20
20
|
import fs2 from "fs";
|
|
21
21
|
import path3 from "path";
|
|
22
|
+
import { fileURLToPath } from "url";
|
|
22
23
|
import chalk from "chalk";
|
|
23
24
|
import { log as clackLog, confirm, outro, stream } from "@clack/prompts";
|
|
24
25
|
|
|
@@ -295,23 +296,40 @@ var setNestedValue = (obj, path4, value) => {
|
|
|
295
296
|
};
|
|
296
297
|
|
|
297
298
|
// src/cli/commands/install/2-add-server/index.ts
|
|
299
|
+
var getDevPackageRoot = () => {
|
|
300
|
+
let current = path3.dirname(fileURLToPath(import.meta.url));
|
|
301
|
+
while (true) {
|
|
302
|
+
const packageJson = path3.join(current, "package.json");
|
|
303
|
+
const tsconfig = path3.join(current, "tsconfig.json");
|
|
304
|
+
const entrypoint = path3.join(current, "src", "index.ts");
|
|
305
|
+
if (fs2.existsSync(packageJson) && fs2.existsSync(tsconfig) && fs2.existsSync(entrypoint)) {
|
|
306
|
+
return current;
|
|
307
|
+
}
|
|
308
|
+
const parent = path3.dirname(current);
|
|
309
|
+
if (parent === current) {
|
|
310
|
+
break;
|
|
311
|
+
}
|
|
312
|
+
current = parent;
|
|
313
|
+
}
|
|
314
|
+
return process.cwd();
|
|
315
|
+
};
|
|
298
316
|
var getMcpConfig = (globalFlags) => {
|
|
299
317
|
if (globalFlags.dev) {
|
|
300
|
-
const
|
|
318
|
+
const packageRoot = getDevPackageRoot();
|
|
301
319
|
return {
|
|
302
320
|
serverName: "agentcash",
|
|
303
321
|
// MCP clients may launch this from outside the package directory, so
|
|
304
322
|
// pass the package tsconfig explicitly to keep path aliases working.
|
|
305
323
|
command: path3.join(
|
|
306
|
-
|
|
324
|
+
packageRoot,
|
|
307
325
|
"node_modules",
|
|
308
326
|
".bin",
|
|
309
327
|
process.platform === "win32" ? "tsx.cmd" : "tsx"
|
|
310
328
|
),
|
|
311
329
|
args: [
|
|
312
330
|
"--tsconfig",
|
|
313
|
-
path3.join(
|
|
314
|
-
path3.join(
|
|
331
|
+
path3.join(packageRoot, "tsconfig.json"),
|
|
332
|
+
path3.join(packageRoot, "src", "index.ts"),
|
|
315
333
|
"--dev"
|
|
316
334
|
]
|
|
317
335
|
};
|
|
@@ -610,4 +628,4 @@ export {
|
|
|
610
628
|
tryAddServer,
|
|
611
629
|
addServer
|
|
612
630
|
};
|
|
613
|
-
//# sourceMappingURL=chunk-
|
|
631
|
+
//# sourceMappingURL=chunk-7ZLVTQTS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/commands/install/2-add-server/index.ts","../../src/cli/commands/install/2-add-server/lib/client-config-file.ts","../../src/cli/commands/install/2-add-server/lib/platforms.ts","../../src/cli/commands/install/2-add-server/lib/file-types.ts","../../src/cli/commands/install/2-add-server/lib/result.ts","../../src/cli/commands/install/2-add-server/lib/nested-values.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nimport chalk from 'chalk';\n\nimport { log as clackLog, confirm, outro, stream } from '@clack/prompts';\n\nimport { safeWriteFile } from '@/shared/neverthrow/fs';\nimport { log } from '@/shared/log';\n\nimport { clientMetadata, Clients } from '../clients';\nimport {\n FileFormat,\n parseClientConfig,\n serializeClientConfig,\n stringifyObject,\n getClientConfigFile,\n getNestedValue,\n setNestedValue,\n} from './lib';\n\nimport { INSTALL_PACKAGE_SPECIFIER } from '@/shared/version';\n\nimport { wait } from '@/cli/lib/wait';\n\nimport type { ClientConfigObject } from './types';\nimport type { GlobalFlags } from '@/types';\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport type AddServerSuccess = {\n client: Clients;\n name: string;\n path: string;\n};\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport type AddServerFailure = {\n client: Clients;\n name: string;\n path?: string;\n cause: string;\n message: string;\n};\n\ntype AddServerResult =\n | {\n success: true;\n value: AddServerSuccess;\n }\n | {\n success: false;\n error: AddServerFailure;\n };\n\ninterface AddServerOptions {\n silent?: boolean;\n}\n\nconst getDevPackageRoot = () => {\n let current = path.dirname(fileURLToPath(import.meta.url));\n\n while (true) {\n const packageJson = path.join(current, 'package.json');\n const tsconfig = path.join(current, 'tsconfig.json');\n const entrypoint = path.join(current, 'src', 'index.ts');\n\n if (\n fs.existsSync(packageJson) &&\n fs.existsSync(tsconfig) &&\n fs.existsSync(entrypoint)\n ) {\n return current;\n }\n\n const parent = path.dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n\n return process.cwd();\n};\n\nconst getMcpConfig = (globalFlags: GlobalFlags) => {\n if (globalFlags.dev) {\n const packageRoot = getDevPackageRoot();\n return {\n serverName: 'agentcash',\n // MCP clients may launch this from outside the package directory, so\n // pass the package tsconfig explicitly to keep path aliases working.\n command: path.join(\n packageRoot,\n 'node_modules',\n '.bin',\n process.platform === 'win32' ? 'tsx.cmd' : 'tsx'\n ),\n args: [\n '--tsconfig',\n path.join(packageRoot, 'tsconfig.json'),\n path.join(packageRoot, 'src', 'index.ts'),\n '--dev',\n ],\n };\n }\n return {\n serverName: 'agentcash',\n command: 'npx',\n args: ['-y', `agentcash@${INSTALL_PACKAGE_SPECIFIER}`],\n };\n};\n\nexport const tryAddServer = async (\n client: Clients,\n globalFlags: GlobalFlags,\n options: AddServerOptions = {}\n): Promise<AddServerResult> => {\n const { serverName, command, args } = getMcpConfig(globalFlags);\n const { name } = clientMetadata[client];\n\n if (client === Clients.Warp) {\n if (globalFlags.yes || options.silent) {\n return {\n success: false,\n error: {\n client,\n name,\n path: 'no-local-config',\n cause: 'manual_install_required',\n message: 'Warp requires a manual MCP installation through its UI',\n },\n };\n }\n\n clackLog.info(\n chalk.bold.yellow('Warp requires a manual installation through their UI.')\n );\n clackLog.message(\n 'Please copy the following configuration object and add it to your Warp MCP config:'\n );\n console.log();\n console.log(\n JSON.stringify(\n {\n [serverName]: {\n command,\n args,\n working_directory: null,\n start_on_launch: true,\n },\n },\n null,\n 2\n )\n );\n console.log();\n clackLog.message(\n `Read Warp's documentation at https://docs.warp.dev/knowledge-and-collaboration/mcp`\n );\n const addedToWarp = await confirm({\n message: 'Did you add the MCP server to your Warp config?',\n });\n if (!addedToWarp) {\n return {\n success: false,\n error: {\n client,\n name,\n path: 'no-local-config',\n cause: 'warp_mcp_server_not_added',\n message: 'Warp MCP server not added',\n },\n };\n }\n\n return {\n success: true,\n value: {\n client,\n name,\n path: 'no-local-config',\n },\n };\n }\n\n const clientFileTarget = getClientConfigFile(client);\n\n let config: ClientConfigObject = {};\n let content: string | undefined = undefined;\n\n log.info(`Checking if config file exists at: ${clientFileTarget.path}`);\n if (!fs.existsSync(clientFileTarget.path)) {\n log.info('Config file not found, creating default empty config');\n setNestedValue(config, clientFileTarget.configKey, {});\n log.info('Config created successfully');\n if (!globalFlags.yes) {\n await wait({\n startText: 'Locating config file',\n stopText: `No config found, creating default empty config`,\n ms: 1000,\n });\n }\n } else {\n log.info('Config file found, reading config file content');\n const parseResult = await parseClientConfig(clientFileTarget);\n\n if (parseResult.isErr()) {\n return {\n success: false,\n error: {\n client,\n name,\n path: clientFileTarget.path,\n cause: parseResult.error.cause,\n message: `Error reading config: ${parseResult.error.message}`,\n },\n };\n }\n\n const { config: rawConfig, fileContent } = parseResult.value;\n config = rawConfig;\n content = fileContent;\n const existingValue = getNestedValue(rawConfig, clientFileTarget.configKey);\n if (!existingValue) {\n setNestedValue(rawConfig, clientFileTarget.configKey, {});\n }\n if (!globalFlags.yes) {\n await wait({\n startText: `Locating config file`,\n stopText: `Config loaded from ${clientFileTarget.path}`,\n ms: 1000,\n });\n }\n }\n\n const servers = getNestedValue(config, clientFileTarget.configKey);\n if (!servers || typeof servers !== 'object') {\n log.error(`Invalid ${clientFileTarget.configKey} structure in config`);\n return {\n success: false,\n error: {\n client,\n name,\n path: clientFileTarget.path,\n cause: 'invalid_config',\n message: `Invalid ${clientFileTarget.configKey} structure in config`,\n },\n };\n }\n\n if (client === Clients.Goose) {\n servers[serverName] = {\n name: serverName,\n cmd: command,\n args,\n enabled: true,\n envs: {},\n type: 'stdio',\n timeout: 300,\n };\n } else if (client === Clients.Zed) {\n // Zed has a different config structure\n servers[serverName] = {\n source: 'custom',\n command,\n args,\n env: {},\n };\n } else if (client === Clients.OpenCode) {\n servers[serverName] = {\n type: 'local',\n command: [command, ...args],\n enabled: true,\n environment: {},\n };\n } else {\n servers[serverName] = {\n command,\n args,\n };\n }\n\n if (!globalFlags.yes) {\n await new Promise(resolve => setTimeout(resolve, 1000));\n\n clackLog.step(\n `The following will be added to ${chalk.bold.underline(clientFileTarget.path)}`\n );\n }\n\n const configStr = formatDiffByFormat(\n {\n [clientFileTarget.configKey]: {\n [serverName]: servers[serverName] as object,\n },\n },\n clientFileTarget.format\n );\n\n if (!globalFlags.yes) {\n await stream.message(\n (async function* () {\n for (const num of Array.from(\n { length: configStr.length },\n (_, i) => i\n )) {\n const char = configStr[num]!;\n yield char;\n if (!['\\n', ' ', '─', '╮', '╭', '╰', '╯', '│'].includes(char)) {\n await new Promise(resolve => setTimeout(resolve, 5));\n } else {\n await new Promise(resolve => setTimeout(resolve, 2));\n }\n }\n })()\n );\n\n await new Promise(resolve => setTimeout(resolve, 1000));\n }\n\n const isConfirmed = globalFlags.yes\n ? true\n : await confirm({\n message: `Would you like to proceed?`,\n active: 'Install MCP',\n inactive: 'Cancel',\n });\n if (isConfirmed !== true) {\n return {\n success: false,\n error: {\n client,\n name,\n path: clientFileTarget.path,\n cause: 'cancelled',\n message: 'Installation cancelled',\n },\n };\n }\n\n const configContent = serializeClientConfig(\n clientFileTarget,\n config,\n content\n );\n\n const writeResult = await safeWriteFile(\n 'config_file',\n clientFileTarget.path,\n configContent\n );\n\n if (writeResult.isErr()) {\n return {\n success: false,\n error: {\n client,\n name,\n path: clientFileTarget.path,\n cause: writeResult.error.cause,\n message: `Error writing config: ${writeResult.error.message}`,\n },\n };\n }\n\n if (!options.silent) {\n clackLog.success(chalk.bold.green(`Added agentcash MCP to ${name}`));\n }\n\n return {\n success: true,\n value: {\n client,\n name,\n path: clientFileTarget.path,\n },\n };\n};\n\nexport const addServer = async (client: Clients, globalFlags: GlobalFlags) => {\n const result = await tryAddServer(client, globalFlags);\n\n if (result.success) {\n return;\n }\n\n if (result.error.cause === 'cancelled') {\n outro(chalk.bold.red(result.error.message));\n process.exit(0);\n }\n\n clackLog.error(chalk.bold.red(result.error.message));\n outro(chalk.bold.red(`Error adding agentcash MCP to ${result.error.name}`));\n process.exit(1);\n};\n\nconst formatDiffByFormat = (obj: object, format: FileFormat) => {\n const str = stringifyObject(obj, format);\n switch (format) {\n case FileFormat.JSON: {\n const numLines = str.split('\\n').length;\n return str\n .split('\\n')\n .map((line, index) => {\n const diffLines = [0, 1, numLines - 2, numLines - 1];\n const isDiffLine = !diffLines.includes(index);\n if (isDiffLine) {\n return `${chalk.bold.green(`+ ${line.slice(2)}`)}`;\n }\n return line;\n })\n .join('\\n');\n }\n case FileFormat.YAML: {\n return str\n .split('\\n')\n .map((line, index) => {\n const diffLines = [0, 1, str.length - 2, str.length - 1];\n const isDiffLine = !diffLines.includes(index);\n if (isDiffLine) {\n return `${chalk.bold.green(`+ ${line.slice(2)}`)}`;\n }\n return line;\n })\n .join('\\n');\n }\n case FileFormat.TOML: {\n return str\n .split('\\n')\n .filter(line => line.trim() !== '')\n .map(line => {\n return `${chalk.bold.green(`+ ${line.trim()}`)}`;\n })\n .join('\\n');\n }\n }\n};\n","import os from 'os';\nimport path from 'path';\nimport process from 'process';\nimport fs from 'fs';\n\nimport { getPlatformPath } from './platforms';\nimport { log } from '@/shared/log';\n\nimport { Clients } from '../../clients';\n\nimport type { ClientConfigFile } from '../types';\nimport { FileFormat } from './file-types';\n\nexport const getClientConfigFile = (client: Clients): ClientConfigFile => {\n const homeDir = os.homedir();\n const { baseDir, vscodePath } = getPlatformPath();\n\n switch (client) {\n case Clients.Claude:\n return {\n path: path.join(baseDir, 'Claude', 'claude_desktop_config.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Cline:\n return {\n path: path.join(\n baseDir,\n vscodePath,\n 'globalStorage',\n 'saoudrizwan.claude-dev',\n 'settings',\n 'cline_mcp_settings.json'\n ),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Windsurf:\n return {\n path: path.join(homeDir, '.codeium', 'windsurf', 'mcp_config.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Cursor:\n return {\n path: path.join(homeDir, '.cursor', 'mcp.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Warp:\n return {\n path: 'no-local-config', // it's okay this isn't a real path, we never use it\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.GeminiCli:\n return {\n path: path.join(homeDir, '.gemini', 'settings.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.ClaudeCode:\n return {\n path: path.join(homeDir, '.claude.json'),\n configKey: 'mcpServers',\n format: FileFormat.JSON,\n };\n case Clients.Goose:\n return {\n path: path.join(homeDir, '.config', 'goose', 'config.yaml'),\n configKey: 'extensions',\n format: FileFormat.YAML,\n };\n case Clients.Zed:\n return {\n path:\n process.platform === 'win32'\n ? path.join(\n process.env.APPDATA ?? path.join(homeDir, 'AppData', 'Roaming'),\n 'Zed',\n 'settings.json'\n )\n : path.join(homeDir, '.config', 'zed', 'settings.json'),\n configKey: 'context_servers',\n format: FileFormat.JSON,\n };\n case Clients.Codex:\n return {\n path: path.join(\n process.env.CODEX_HOME ?? path.join(homeDir, '.codex'),\n 'config.toml'\n ),\n configKey: 'mcp_servers',\n format: FileFormat.TOML,\n };\n case Clients.OpenCode: {\n const jsonPath = path.join(\n homeDir,\n '.config',\n 'opencode',\n 'opencode.json'\n );\n const jsoncPath = jsonPath.replace('.json', '.jsonc');\n\n // For OpenCode, check if .jsonc exists and prefer it over .json\n if (fs.existsSync(jsoncPath)) {\n log.info(`Found .jsonc file for OpenCode, using: ${jsoncPath}`);\n return {\n path: jsoncPath,\n configKey: 'mcp',\n format: FileFormat.JSON,\n };\n }\n\n return {\n path: jsonPath,\n configKey: 'mcp',\n format: FileFormat.JSON,\n };\n }\n default:\n throw new Error(`Unknown client: ${String(client)}`);\n }\n};\n","import os from 'os';\nimport path from 'path';\nimport process from 'process';\nimport z from 'zod';\n\nenum Platforms {\n Windows = 'win32',\n MacOS = 'darwin',\n Linux = 'linux',\n}\n\nexport const getPlatformPath = () => {\n const platform = z.enum(Platforms).safeParse(process.platform);\n if (!platform.success) {\n throw new Error(`Invalid platform: ${process.platform}`);\n }\n\n const homeDir = os.homedir();\n\n switch (platform.data) {\n case Platforms.Windows:\n return {\n baseDir:\n process.env.APPDATA ?? path.join(homeDir, 'AppData', 'Roaming'),\n vscodePath: path.join('Code', 'User'),\n };\n case Platforms.MacOS:\n return {\n baseDir: path.join(homeDir, 'Library', 'Application Support'),\n vscodePath: path.join('Code', 'User'),\n };\n case Platforms.Linux:\n return {\n baseDir: process.env.XDG_CONFIG_HOME ?? path.join(homeDir, '.config'),\n vscodePath: path.join('Code/User'),\n };\n default:\n throw new Error(`Invalid platform: ${process.platform}`);\n }\n};\n","import * as TOML from '@iarna/toml';\nimport yaml from 'js-yaml';\nimport * as jsonc from 'jsonc-parser';\n\nimport { safeReadFile } from '@/shared/neverthrow/fs';\nimport { configResultFromThrowable } from './result';\n\nimport type { ClientConfigFile, ClientConfigObject } from '../types';\n\nexport enum FileFormat {\n JSON = 'json',\n YAML = 'yaml',\n TOML = 'toml',\n}\n\nconst parseContent = (\n fileContent: string,\n format: FileFormat,\n path: string\n) => {\n return configResultFromThrowable(\n () => {\n let config: ClientConfigObject;\n if (format === FileFormat.YAML) {\n config = yaml.load(fileContent) as ClientConfigObject;\n } else if (format === FileFormat.TOML) {\n config = TOML.parse(fileContent) as ClientConfigObject;\n } else if (path.endsWith('.jsonc')) {\n config = jsonc.parse(fileContent) as ClientConfigObject;\n } else {\n config = JSON.parse(fileContent) as ClientConfigObject;\n }\n return {\n config,\n fileContent,\n };\n },\n e => ({\n cause: 'parse_config',\n message: e instanceof Error ? e.message : 'Failed to parse config file',\n })\n );\n};\n\n/**\n * Parse file content based on format\n */\nexport const parseClientConfig = async ({ format, path }: ClientConfigFile) => {\n const readResult = await safeReadFile('config_file', path);\n\n if (readResult.isErr()) return readResult;\n\n const parseResult = parseContent(readResult.value, format, path);\n\n if (parseResult.isErr()) return parseResult;\n\n return parseResult;\n};\n\nconst serializeJsonc = (\n config: ClientConfigObject,\n originalContent: string\n) => {\n return configResultFromThrowable<string>(\n () => {\n const modifications: jsonc.Edit[] = [];\n\n for (const key of Object.keys(config)) {\n const keyPath = [key];\n const edits = jsonc.modify(originalContent, keyPath, config[key], {\n formattingOptions: { tabSize: 2, insertSpaces: true },\n });\n modifications.push(...edits);\n }\n\n return jsonc.applyEdits(originalContent, modifications);\n },\n e => ({\n cause: 'serialize_config',\n message: e instanceof Error ? e.message : 'Failed to serialize JSONC',\n })\n );\n};\n\nexport const serializeClientConfig = (\n { format, path }: ClientConfigFile,\n config: ClientConfigObject,\n originalContent?: string\n): string => {\n if (format === FileFormat.YAML) {\n return yaml.dump(config, {\n indent: 2,\n lineWidth: -1,\n noRefs: true,\n });\n }\n if (format === FileFormat.TOML) {\n return TOML.stringify(config);\n }\n if (path.endsWith('.jsonc') && originalContent) {\n const result = serializeJsonc(config, originalContent);\n if (result.isOk()) {\n return result.value;\n }\n // Fallback to standard JSON.stringify if edit fails\n console.log(`Error applying JSONC edits: ${result.error.message}`);\n console.log('Falling back to JSON.stringify (comments will be lost)');\n return JSON.stringify(config, null, 2);\n }\n // Default to JSON\n return JSON.stringify(config, null, 2);\n};\n\nexport const stringifyObject = (\n config: ClientConfigObject,\n format: FileFormat\n) => {\n if (format === FileFormat.YAML) {\n return yaml.dump(config, {\n indent: 2,\n lineWidth: -1,\n noRefs: true,\n });\n }\n if (format === FileFormat.TOML) {\n return TOML.stringify(config);\n }\n return JSON.stringify(config, null, 2);\n};\n","import { resultFromThrowable } from '@agentcash/neverthrow';\n\nimport type { BaseConfigError } from '../types';\n\nconst errorType = 'config';\nconst surface = 'config_file';\n\nexport const configResultFromThrowable = <T>(\n fn: () => T,\n error: (e: unknown) => BaseConfigError\n) => resultFromThrowable(errorType, surface, fn, error);\n","import type { ClientConfigObject } from '../types';\n\nexport const getNestedValue = (obj: ClientConfigObject, path: string) => {\n const keys = path.split('.');\n let current: ClientConfigObject | undefined = obj;\n for (const key of keys) {\n if (current && typeof current === 'object' && key in current) {\n current = current[key] as ClientConfigObject;\n } else {\n return undefined;\n }\n }\n return current;\n};\n\nexport const setNestedValue = (\n obj: ClientConfigObject,\n path: string,\n value: ClientConfigObject\n) => {\n const keys = path.split('.');\n const lastKey = keys.pop();\n if (!lastKey) return;\n const target = keys.reduce((current, key) => {\n current[key] ??= {};\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return current[key];\n }, obj);\n target[lastKey] = value;\n};\n"],"mappings":"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","names":["fs","path","os","path","process","process","Platforms","path","os","path","process","path","path","fs"]}
|
|
@@ -128,18 +128,6 @@ var isFetchError = (error) => {
|
|
|
128
128
|
return error.type === errorType;
|
|
129
129
|
};
|
|
130
130
|
|
|
131
|
-
// src/shared/utils.ts
|
|
132
|
-
import { formatUnits } from "viem";
|
|
133
|
-
var getBaseUrl = (dev) => {
|
|
134
|
-
return dev ? "http://localhost:3000" : "https://agentcash.dev";
|
|
135
|
-
};
|
|
136
|
-
var getDepositLink = (address, flags, network) => {
|
|
137
|
-
return `${getBaseUrl(flags.dev)}/deposit/${address}${network ? `?network=${network}` : ""}`;
|
|
138
|
-
};
|
|
139
|
-
var tokenStringToNumber = (amount, decimals = 6) => {
|
|
140
|
-
return Number(formatUnits(BigInt(amount), decimals));
|
|
141
|
-
};
|
|
142
|
-
|
|
143
131
|
export {
|
|
144
132
|
fetchErr,
|
|
145
133
|
fetchOk,
|
|
@@ -147,9 +135,6 @@ export {
|
|
|
147
135
|
safeFetch,
|
|
148
136
|
safeFetchJson,
|
|
149
137
|
safeParseResponse,
|
|
150
|
-
isFetchError
|
|
151
|
-
getBaseUrl,
|
|
152
|
-
getDepositLink,
|
|
153
|
-
tokenStringToNumber
|
|
138
|
+
isFetchError
|
|
154
139
|
};
|
|
155
|
-
//# sourceMappingURL=chunk-
|
|
140
|
+
//# sourceMappingURL=chunk-BFOYXXLG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/shared/neverthrow/fetch/index.ts"],"sourcesContent":["import contentType from 'content-type';\nimport { err, ok, resultFromPromise } from '@agentcash/neverthrow';\n\nimport type z from 'zod';\n\nimport type { BaseError, Error } from '@agentcash/neverthrow/types';\nimport type { BaseFetchError, FetchError, ParsedResponse } from './types';\nimport type { JsonObject } from '../json/types';\nimport { safeParse } from '../parse';\n\nconst DEFAULT_USER_FETCH_TIMEOUT = 30_000;\n\nconst IMAGE_TYPES = new Set([\n 'image/png',\n 'image/jpeg',\n 'image/gif',\n 'image/webp',\n 'image/svg+xml',\n 'image/tiff',\n 'image/bmp',\n 'image/ico',\n]);\n\nconst errorType = 'fetch';\n\nexport const fetchErr = (surface: string, error: BaseFetchError) =>\n err(errorType, surface, error);\nexport const fetchOk = <T>(value: T) => ok(value);\n\nexport const fetchHttpErr = (surface: string, response: Response) =>\n fetchErr(surface, {\n cause: 'http' as const,\n statusCode: response.status,\n message: response.statusText,\n response,\n });\n\nexport const safeFetch = (\n surface: string,\n request: Request,\n timeout = DEFAULT_USER_FETCH_TIMEOUT\n) => {\n const signal = AbortSignal.timeout(timeout);\n\n return resultFromPromise(\n errorType,\n surface,\n fetch(request, ...(signal ? [{ signal }] : [])),\n error => {\n if (\n error instanceof DOMException &&\n (error.name === 'TimeoutError' || error.name === 'AbortError')\n ) {\n return {\n cause: 'timeout',\n message: timeout\n ? `Request timed out after ${timeout}ms. You can increase the timeout by passing a larger value in the 'timeout' parameter.`\n : 'Request was aborted',\n } as BaseFetchError;\n }\n\n return {\n cause: 'network',\n message: error instanceof Error ? error.message : 'Network error',\n } as BaseFetchError;\n }\n );\n};\n\nexport const safeFetchJson = <T>(\n surface: string,\n request: Request,\n schema: z.ZodSchema<T>,\n timeout?: number\n) => {\n return safeFetch(surface, request, timeout)\n .andThen(response => {\n if (!response.ok) {\n return fetchHttpErr(surface, response);\n }\n\n return resultFromPromise(errorType, surface, response.json(), () => ({\n cause: 'parse' as const,\n message: 'Could not parse JSON from response',\n statusCode: response.status,\n contentType: response.headers.get('content-type') ?? 'Not specified',\n }));\n })\n .andThen(data => safeParse(surface, schema, data));\n};\n\nexport const safeParseResponse = (surface: string, response: Response) => {\n return resultFromPromise(\n errorType,\n surface,\n (async (): Promise<ParsedResponse> => {\n const header = response.headers.get('content-type');\n const { type: mimeType } = header\n ? contentType.parse(header)\n : { type: 'application/octet-stream' };\n\n switch (mimeType) {\n case 'application/json':\n return {\n type: 'json' as const,\n data: (await response.json()) as JsonObject,\n };\n case 'application/pdf':\n return {\n type: 'pdf' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n case 'application/octet-stream':\n return {\n type: 'octet-stream' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n case 'multipart/form-data':\n return { type: 'formData' as const, data: await response.formData() };\n }\n\n if (IMAGE_TYPES.has(mimeType)) {\n return {\n type: 'image' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n }\n\n if (mimeType.startsWith('audio/')) {\n return {\n type: 'audio' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n }\n\n if (mimeType.startsWith('video/')) {\n return {\n type: 'video' as const,\n mimeType,\n data: await response.arrayBuffer(),\n };\n }\n\n if (mimeType.startsWith('text/')) {\n return { type: 'text' as const, data: await response.text() };\n }\n\n throw new Error(`Unsupported content type: ${header}`);\n })(),\n e => ({\n cause: 'parse' as const,\n message: e instanceof Error ? e.message : 'Could not parse response',\n statusCode: response.status,\n contentType: response.headers.get('content-type') ?? 'Not specified',\n })\n );\n};\n\nexport const isFetchError = (error: Error<BaseError>): error is FetchError => {\n return error.type === errorType;\n};\n"],"mappings":"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","names":[]}
|
|
@@ -3,14 +3,14 @@ import {
|
|
|
3
3
|
} from "./chunk-DZNSJ2BA.js";
|
|
4
4
|
import {
|
|
5
5
|
redeemInviteCode
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import {
|
|
8
|
-
getDepositLink
|
|
9
|
-
} from "./chunk-PBVLTOFS.js";
|
|
6
|
+
} from "./chunk-MSNAPI5G.js";
|
|
10
7
|
import {
|
|
11
8
|
EVM_CONFIGS,
|
|
12
9
|
getTxExplorerUrl
|
|
13
10
|
} from "./chunk-NPJV7AMV.js";
|
|
11
|
+
import {
|
|
12
|
+
getDepositLink
|
|
13
|
+
} from "./chunk-U6FRXL3X.js";
|
|
14
14
|
|
|
15
15
|
// src/cli/lib/deposit.ts
|
|
16
16
|
import chalk from "chalk";
|
|
@@ -106,4 +106,4 @@ var promptDeposit = async (surface, args, wallets) => {
|
|
|
106
106
|
export {
|
|
107
107
|
promptDeposit
|
|
108
108
|
};
|
|
109
|
-
//# sourceMappingURL=chunk-
|
|
109
|
+
//# sourceMappingURL=chunk-BNFMFAEF.js.map
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MCP_VERSION
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XC5JT2NQ.js";
|
|
4
4
|
import {
|
|
5
|
-
getBaseUrl,
|
|
6
5
|
safeFetchJson
|
|
7
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-BFOYXXLG.js";
|
|
7
|
+
import {
|
|
8
|
+
getBaseUrl
|
|
9
|
+
} from "./chunk-U6FRXL3X.js";
|
|
8
10
|
import {
|
|
9
11
|
ok
|
|
10
12
|
} from "./chunk-YWNBUUBR.js";
|
|
@@ -49,4 +51,4 @@ async function submitErrorReport(surface, input, address, dev) {
|
|
|
49
51
|
export {
|
|
50
52
|
submitErrorReport
|
|
51
53
|
};
|
|
52
|
-
//# sourceMappingURL=chunk-
|
|
54
|
+
//# sourceMappingURL=chunk-E52LAD7Z.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/operations/report-error.ts"],"sourcesContent":["import { z } from 'zod';\nimport { ok } from '@agentcash/neverthrow';\n\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\nimport { getBaseUrl } from '@/shared/utils';\nimport { MCP_VERSION } from '@/shared/version';\n\nimport type { Address } from 'viem';\n\n/**\n * Error report input\n */\nexport interface ErrorReportInput {\n tool: string;\n summary: string;\n errorMessage: string;\n resource?: string;\n stack?: string;\n fullReport?: string;\n}\n\n/**\n * Submit an error report to agentcash telemetry.\n */\nexport async function submitErrorReport(\n surface: string,\n input: ErrorReportInput,\n address: Address,\n dev: boolean\n) {\n const telemetryResult = await safeFetchJson(\n surface,\n new Request(`${getBaseUrl(dev)}/api/telemetry`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n tool: input.tool,\n summary: input.summary,\n errorMessage: input.errorMessage,\n resource: input.resource,\n stack: input.stack,\n fullReport: input.fullReport,\n walletAddress: address,\n mcpVersion: MCP_VERSION,\n reportedAt: new Date().toISOString(),\n }),\n }),\n z.object({\n reportId: z.string(),\n })\n );\n\n if (telemetryResult.isErr()) {\n return telemetryResult;\n }\n\n const { reportId } = telemetryResult.value;\n\n return ok({\n submitted: true,\n reportId,\n message:\n 'Error report submitted successfully. The agentcash team will investigate.',\n });\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/operations/report-error.ts"],"sourcesContent":["import { z } from 'zod';\nimport { ok } from '@agentcash/neverthrow';\n\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\nimport { getBaseUrl } from '@/shared/utils';\nimport { MCP_VERSION } from '@/shared/version';\n\nimport type { Address } from 'viem';\n\n/**\n * Error report input\n */\nexport interface ErrorReportInput {\n tool: string;\n summary: string;\n errorMessage: string;\n resource?: string;\n stack?: string;\n fullReport?: string;\n}\n\n/**\n * Submit an error report to agentcash telemetry.\n */\nexport async function submitErrorReport(\n surface: string,\n input: ErrorReportInput,\n address: Address,\n dev: boolean\n) {\n const telemetryResult = await safeFetchJson(\n surface,\n new Request(`${getBaseUrl(dev)}/api/telemetry`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n tool: input.tool,\n summary: input.summary,\n errorMessage: input.errorMessage,\n resource: input.resource,\n stack: input.stack,\n fullReport: input.fullReport,\n walletAddress: address,\n mcpVersion: MCP_VERSION,\n reportedAt: new Date().toISOString(),\n }),\n }),\n z.object({\n reportId: z.string(),\n })\n );\n\n if (telemetryResult.isErr()) {\n return telemetryResult;\n }\n\n const { reportId } = telemetryResult.value;\n\n return ok({\n submitted: true,\n reportId,\n message:\n 'Error report submitted successfully. The agentcash team will investigate.',\n });\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,SAAS;AAwBlB,eAAsB,kBACpB,SACA,OACA,SACA,KACA;AACA,QAAM,kBAAkB,MAAM;AAAA,IAC5B;AAAA,IACA,IAAI,QAAQ,GAAG,WAAW,GAAG,CAAC,kBAAkB;AAAA,MAC9C,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,MAClB;AAAA,MACA,MAAM,KAAK,UAAU;AAAA,QACnB,MAAM,MAAM;AAAA,QACZ,SAAS,MAAM;AAAA,QACf,cAAc,MAAM;AAAA,QACpB,UAAU,MAAM;AAAA,QAChB,OAAO,MAAM;AAAA,QACb,YAAY,MAAM;AAAA,QAClB,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,MACrC,CAAC;AAAA,IACH,CAAC;AAAA,IACD,EAAE,OAAO;AAAA,MACP,UAAU,EAAE,OAAO;AAAA,IACrB,CAAC;AAAA,EACH;AAEA,MAAI,gBAAgB,MAAM,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,SAAS,IAAI,gBAAgB;AAErC,SAAO,GAAG;AAAA,IACR,WAAW;AAAA,IACX;AAAA,IACA,SACE;AAAA,EACJ,CAAC;AACH;","names":[]}
|
|
@@ -7,19 +7,22 @@ import {
|
|
|
7
7
|
} from "./chunk-IKPLMFAK.js";
|
|
8
8
|
import {
|
|
9
9
|
getBalance
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-KJCWPVQE.js";
|
|
11
11
|
import {
|
|
12
12
|
fetchErr,
|
|
13
13
|
fetchOk,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
tokenStringToNumber
|
|
17
|
-
} from "./chunk-PBVLTOFS.js";
|
|
14
|
+
safeFetch
|
|
15
|
+
} from "./chunk-BFOYXXLG.js";
|
|
18
16
|
import {
|
|
19
17
|
EVM_CONFIGS,
|
|
20
18
|
caip2ToNetwork,
|
|
21
19
|
networkToCaip2
|
|
22
20
|
} from "./chunk-NPJV7AMV.js";
|
|
21
|
+
import {
|
|
22
|
+
formatUsd,
|
|
23
|
+
getDepositLink,
|
|
24
|
+
tokenStringToNumber
|
|
25
|
+
} from "./chunk-U6FRXL3X.js";
|
|
23
26
|
import {
|
|
24
27
|
log
|
|
25
28
|
} from "./chunk-QZCSZB7E.js";
|
|
@@ -41,6 +44,7 @@ import { x402Client, x402HTTPClient } from "@x402/core/client";
|
|
|
41
44
|
import { toClientEvmSigner } from "@x402/evm";
|
|
42
45
|
import { toClientSvmSigner } from "@x402/svm";
|
|
43
46
|
import { ExactEvmScheme } from "@x402/evm/exact/client";
|
|
47
|
+
import { UptoEvmScheme } from "@x402/evm/upto/client";
|
|
44
48
|
|
|
45
49
|
// src/shared/protocols/x402/patched-exact-svm-scheme.ts
|
|
46
50
|
import {
|
|
@@ -252,6 +256,18 @@ var safeCreatePaymentPayload = (surface, wallets, paymentRequired, paymentRequir
|
|
|
252
256
|
)
|
|
253
257
|
)
|
|
254
258
|
},
|
|
259
|
+
{
|
|
260
|
+
network: networkToCaip2("base" /* BASE */),
|
|
261
|
+
client: new UptoEvmScheme(
|
|
262
|
+
toClientEvmSigner(
|
|
263
|
+
wallets.evm,
|
|
264
|
+
createPublicClient({
|
|
265
|
+
chain: base,
|
|
266
|
+
transport: http()
|
|
267
|
+
})
|
|
268
|
+
)
|
|
269
|
+
)
|
|
270
|
+
},
|
|
255
271
|
{
|
|
256
272
|
network: networkToCaip2("solana" /* SOLANA */),
|
|
257
273
|
client: new PatchedExactSvmScheme(toClientSvmSigner(wallets.svm))
|
|
@@ -520,10 +536,7 @@ async function handleMppPayment({
|
|
|
520
536
|
paymentInfo: {
|
|
521
537
|
protocol: "mpp" /* MPP */,
|
|
522
538
|
network: "tempo" /* TEMPO */,
|
|
523
|
-
price: amount
|
|
524
|
-
style: "currency",
|
|
525
|
-
currency: "USD"
|
|
526
|
-
}),
|
|
539
|
+
price: formatUsd(amount),
|
|
527
540
|
payment: receiptResult.isOk() ? {
|
|
528
541
|
success: true,
|
|
529
542
|
transactionHash: receiptResult.value.reference
|
|
@@ -711,20 +724,20 @@ async function handleX402Payment({
|
|
|
711
724
|
);
|
|
712
725
|
return await safeFetch(surface, request, timeout).andThen((paidResponse) => {
|
|
713
726
|
const settlementResult = safeGetPaymentSettlement(surface, paidResponse);
|
|
727
|
+
const settlement = settlementResult.isOk() ? settlementResult.value : null;
|
|
728
|
+
const maxAmount = tokenStringToNumber(paymentPayload.accepted.amount);
|
|
729
|
+
const settledAmount = settlement?.amount ? tokenStringToNumber(settlement.amount) : null;
|
|
730
|
+
const isUpTo = paymentPayload.accepted.scheme === "upto";
|
|
731
|
+
const price = settledAmount != null ? formatUsd(settledAmount) : isUpTo ? `up to ${formatUsd(maxAmount)}` : formatUsd(maxAmount);
|
|
714
732
|
return x402Ok({
|
|
715
733
|
response: paidResponse,
|
|
716
734
|
paymentInfo: {
|
|
717
735
|
protocol: "x402" /* X402 */,
|
|
718
736
|
network: caip2ToNetwork(paymentPayload.accepted.network),
|
|
719
|
-
price
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
currency: "USD"
|
|
724
|
-
}),
|
|
725
|
-
payment: settlementResult.isOk() ? {
|
|
726
|
-
success: settlementResult.value.success,
|
|
727
|
-
transactionHash: settlementResult.value.transaction
|
|
737
|
+
price,
|
|
738
|
+
payment: settlement ? {
|
|
739
|
+
success: settlement.success,
|
|
740
|
+
transactionHash: settlement.transaction
|
|
728
741
|
} : null
|
|
729
742
|
}
|
|
730
743
|
});
|
|
@@ -813,4 +826,4 @@ async function executeFetch(input, options) {
|
|
|
813
826
|
export {
|
|
814
827
|
executeFetch
|
|
815
828
|
};
|
|
816
|
-
//# sourceMappingURL=chunk-
|
|
829
|
+
//# sourceMappingURL=chunk-G5FHPXQL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/operations/fetch/auth.ts","../../src/shared/protocols/x402/index.ts","../../src/shared/protocols/x402/patched-exact-svm-scheme.ts","../../src/shared/protocols/detect.ts","../../src/shared/protocols/mpp/handle-payment.ts","../../src/shared/protocols/mpp/index.ts","../../src/shared/protocols/before-payment.ts","../../src/shared/protocols/pick.ts","../../src/shared/protocols/x402/choose-payment-requirement.ts","../../src/shared/protocols/x402/handle-payment.ts","../../src/operations/fetch/payment.ts","../../src/operations/fetch/index.ts"],"sourcesContent":["import { encodeSIWxHeader } from '@x402/extensions/sign-in-with-x';\n\nimport { fetchOk, safeFetch } from '@/shared/neverthrow/fetch';\nimport {\n getSiwxExtension,\n safeCreateSIWxPayload,\n safeGetPaymentRequired,\n} from '@/shared/protocols/x402';\n\nimport type { ExecuteFetchOptions } from './types';\n\nexport async function attemptSiwxAuth(\n response: Response,\n authRetryRequest: Request,\n paymentRetryRequest: Request,\n options: ExecuteFetchOptions\n) {\n const { surface, wallets } = options;\n const { timeout, paymentNetwork } = options.params;\n\n if (!response.headers.has('payment-required')) {\n return fetchOk({\n response,\n paymentRetryRequest,\n });\n }\n\n const paymentRequiredResult = await safeGetPaymentRequired(surface, response);\n\n if (paymentRequiredResult.isErr()) {\n return paymentRequiredResult;\n }\n\n const siwxExtension = getSiwxExtension(\n paymentRequiredResult.value.extensions,\n paymentNetwork\n );\n\n if (!siwxExtension) {\n return fetchOk({\n response,\n paymentRetryRequest,\n });\n }\n\n const payloadResult = await safeCreateSIWxPayload(\n surface,\n siwxExtension,\n wallets\n );\n\n if (payloadResult.isErr()) {\n return payloadResult;\n }\n\n const siwxHeader = encodeSIWxHeader(payloadResult.value);\n authRetryRequest.headers.set('SIGN-IN-WITH-X', siwxHeader);\n paymentRetryRequest.headers.set('SIGN-IN-WITH-X', siwxHeader);\n\n return (await safeFetch(surface, authRetryRequest, timeout)).andThen(\n authResponse =>\n fetchOk({\n response: authResponse,\n paymentRetryRequest,\n })\n );\n}\n","import {\n err,\n ok,\n resultFromPromise,\n resultFromThrowable,\n} from '@agentcash/neverthrow';\n\nimport type { SelectPaymentRequirements } from '@x402/core/client';\nimport { x402Client, x402HTTPClient } from '@x402/core/client';\n\nimport { toClientEvmSigner } from '@x402/evm';\nimport { toClientSvmSigner } from '@x402/svm';\n\nimport { ExactEvmScheme } from '@x402/evm/exact/client';\nimport { UptoEvmScheme } from '@x402/evm/upto/client';\nimport { PatchedExactSvmScheme } from './patched-exact-svm-scheme';\n\nimport { createSIWxPayload } from '@x402/extensions/sign-in-with-x';\n\nimport type { BaseX402Error } from './types';\nimport type { PaymentRequired } from '@x402/core/types';\nimport type {\n CompleteSIWxInfo,\n SIWxExtensionInfo,\n SolanaSigner,\n SupportedChain,\n} from '@x402/extensions/sign-in-with-x';\nimport type { Wallets } from '@/wallet';\nimport { Network, networkToCaip2 } from '@agentcash/networks';\nimport type { Network as PaymentNetwork } from '@agentcash/networks';\nimport { createPublicClient, http } from 'viem';\nimport { base } from 'viem/chains';\n\nconst errorType = 'x402';\n\nexport const x402Ok = <T>(value: T) => ok(value);\nexport const x402Err = (cause: string, error: BaseX402Error) =>\n err(errorType, cause, error);\n\nconst x402ResultFromPromise = <T>(\n surface: string,\n promise: Promise<T>,\n error: (e: unknown) => BaseX402Error\n) => resultFromPromise(errorType, surface, promise, error);\n\nconst x402ResultFromThrowable = <T>(\n surface: string,\n fn: () => T,\n error: (e: unknown) => BaseX402Error\n) => resultFromThrowable(errorType, surface, fn, error);\n\nexport const x402ProbeClient = new x402HTTPClient(new x402Client());\n\nexport const safeGetPaymentRequired = (surface: string, response: Response) => {\n return x402ResultFromPromise(\n surface,\n response.json().then(\n json =>\n x402ProbeClient.getPaymentRequiredResponse(\n name => response.headers.get(name),\n json\n ),\n () =>\n x402ProbeClient.getPaymentRequiredResponse(name =>\n response.headers.get(name)\n )\n ),\n error => ({\n cause: 'parse_payment_required',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to parse payment required',\n })\n );\n};\n\nexport const getSiwxExtension = (\n extensions: PaymentRequired['extensions'],\n paymentNetwork?: PaymentNetwork\n): CompleteSIWxInfo | undefined => {\n const siwx = extensions?.['sign-in-with-x'] as\n | { info?: SIWxExtensionInfo; supportedChains?: SupportedChain[] }\n | undefined;\n\n if (!siwx?.info) {\n return undefined;\n }\n\n const chain = siwx.supportedChains?.find(c =>\n paymentNetwork\n ? c.chainId === networkToCaip2(paymentNetwork)\n : c.chainId.startsWith('eip155:')\n );\n\n return {\n ...siwx.info,\n chainId: chain?.chainId ?? 'eip155:8453',\n type: chain?.type ?? 'eip191',\n signatureScheme: chain?.signatureScheme,\n };\n};\n\nexport const safeCreatePaymentPayload = (\n surface: string,\n wallets: Wallets,\n paymentRequired: PaymentRequired,\n paymentRequirementsSelector?: SelectPaymentRequirements\n) => {\n const client = new x402HTTPClient(\n x402Client.fromConfig({\n schemes: [\n {\n network: networkToCaip2(Network.BASE),\n client: new ExactEvmScheme(\n toClientEvmSigner(\n wallets.evm,\n createPublicClient({\n chain: base,\n transport: http(),\n })\n )\n ),\n },\n {\n network: networkToCaip2(Network.BASE),\n client: new UptoEvmScheme(\n toClientEvmSigner(\n wallets.evm,\n createPublicClient({\n chain: base,\n transport: http(),\n })\n )\n ),\n },\n {\n network: networkToCaip2(Network.SOLANA),\n client: new PatchedExactSvmScheme(toClientSvmSigner(wallets.svm)),\n },\n ],\n paymentRequirementsSelector,\n })\n );\n return x402ResultFromPromise(\n surface,\n client.createPaymentPayload(paymentRequired),\n error => ({\n cause: 'create_payment_payload',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to create payment payload',\n })\n );\n};\n\nexport const safeGetPaymentSettlement = (\n surface: string,\n response: Response\n) => {\n return x402ResultFromThrowable(\n surface,\n () =>\n x402ProbeClient.getPaymentSettleResponse(name =>\n response.headers.get(name)\n ),\n error => ({\n cause: 'get_payment_settlement',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to get payment settlement',\n })\n );\n};\n\nexport const safeCreateSIWxPayload = (\n surface: string,\n serverInfo: CompleteSIWxInfo,\n wallets: Wallets\n) => {\n return x402ResultFromPromise(\n surface,\n createSIWxPayload(\n serverInfo,\n serverInfo.chainId.startsWith('eip155:')\n ? wallets.evm\n : (wallets.svm as unknown as SolanaSigner)\n ),\n error => ({\n cause: 'create_siwx_payload',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to create SIWX payload',\n })\n );\n};\n","import {\n getSetComputeUnitLimitInstruction,\n setTransactionMessageComputeUnitPrice,\n} from '@solana-program/compute-budget';\nimport { TOKEN_PROGRAM_ADDRESS } from '@solana-program/token';\nimport {\n fetchMint,\n findAssociatedTokenPda,\n getTransferCheckedInstruction,\n TOKEN_2022_PROGRAM_ADDRESS,\n} from '@solana-program/token-2022';\nimport {\n appendTransactionMessageInstructions,\n createTransactionMessage,\n getBase64EncodedWireTransaction,\n partiallySignTransactionMessageWithSigners,\n pipe,\n prependTransactionMessageInstruction,\n setTransactionMessageFeePayer,\n setTransactionMessageLifetimeUsingBlockhash,\n type Address,\n} from '@solana/kit';\n\nimport type {\n PaymentPayload,\n PaymentRequirements,\n SchemeNetworkClient,\n} from '@x402/core/types';\nimport {\n DEFAULT_COMPUTE_UNIT_LIMIT,\n DEFAULT_COMPUTE_UNIT_PRICE_MICROLAMPORTS,\n createRpcClient,\n type ClientSvmConfig,\n type ClientSvmSigner,\n type ExactSvmPayloadV2,\n} from '@x402/svm';\n\ntype BlockhashLifetime = Parameters<\n typeof setTransactionMessageLifetimeUsingBlockhash\n>[0];\n\ninterface PatchedPaymentExtra {\n feePayer?: Address;\n recentBlockhash?:\n | string\n | Partial<{\n blockhash: string;\n lastValidBlockHeight: bigint | number | string;\n }>;\n lastValidBlockHeight?: bigint | number | string;\n}\n\nfunction parseLastValidBlockHeight(\n value: bigint | number | string | undefined\n): bigint | undefined {\n if (typeof value === 'bigint') {\n return value;\n }\n\n if (typeof value === 'number' && Number.isFinite(value)) {\n return BigInt(value);\n }\n\n if (typeof value === 'string' && value.length > 0) {\n return BigInt(value);\n }\n\n return undefined;\n}\n\nfunction asBlockhash(blockhash: string): BlockhashLifetime['blockhash'] {\n return blockhash as BlockhashLifetime['blockhash'];\n}\n\n/**\n * Local compatibility patch for Coinbase ExactSvmScheme.\n *\n * Changes from upstream:\n * - omits the trailing memo instruction\n * - prefers paymentRequirements.extra.recentBlockhash when provided\n */\nexport class PatchedExactSvmScheme implements SchemeNetworkClient {\n readonly scheme = 'exact';\n\n constructor(\n private readonly signer: ClientSvmSigner,\n private readonly config?: ClientSvmConfig\n ) {}\n\n async createPaymentPayload(\n x402Version: number,\n paymentRequirements: PaymentRequirements\n ): Promise<Pick<PaymentPayload, 'x402Version' | 'payload'>> {\n const rpc = createRpcClient(\n paymentRequirements.network,\n this.config?.rpcUrl\n );\n\n const tokenMint = await fetchMint(\n rpc,\n paymentRequirements.asset as Address\n );\n const tokenProgramAddress = tokenMint.programAddress;\n\n if (\n tokenProgramAddress.toString() !== TOKEN_PROGRAM_ADDRESS.toString() &&\n tokenProgramAddress.toString() !== TOKEN_2022_PROGRAM_ADDRESS.toString()\n ) {\n throw new Error('Asset was not created by a known token program');\n }\n\n const [sourceATA] = await findAssociatedTokenPda({\n mint: paymentRequirements.asset as Address,\n owner: this.signer.address,\n tokenProgram: tokenProgramAddress,\n });\n\n const [destinationATA] = await findAssociatedTokenPda({\n mint: paymentRequirements.asset as Address,\n owner: paymentRequirements.payTo as Address,\n tokenProgram: tokenProgramAddress,\n });\n\n const transferIx = getTransferCheckedInstruction(\n {\n source: sourceATA,\n mint: paymentRequirements.asset as Address,\n destination: destinationATA,\n authority: this.signer,\n amount: BigInt(paymentRequirements.amount),\n decimals: tokenMint.data.decimals,\n },\n { programAddress: tokenProgramAddress }\n );\n\n const extra = paymentRequirements.extra as PatchedPaymentExtra;\n const feePayer = extra.feePayer;\n\n if (!feePayer) {\n throw new Error(\n 'feePayer is required in paymentRequirements.extra for SVM transactions'\n );\n }\n\n const latestBlockhash = await this.resolveBlockhashLifetime(rpc, extra);\n\n const tx = pipe(\n createTransactionMessage({ version: 0 }),\n tx =>\n setTransactionMessageComputeUnitPrice(\n DEFAULT_COMPUTE_UNIT_PRICE_MICROLAMPORTS,\n tx\n ),\n tx => setTransactionMessageFeePayer(feePayer, tx),\n tx =>\n prependTransactionMessageInstruction(\n getSetComputeUnitLimitInstruction({\n units: DEFAULT_COMPUTE_UNIT_LIMIT,\n }),\n tx\n ),\n tx => appendTransactionMessageInstructions([transferIx], tx),\n tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx)\n );\n\n const signedTransaction =\n await partiallySignTransactionMessageWithSigners(tx);\n const base64EncodedWireTransaction =\n getBase64EncodedWireTransaction(signedTransaction);\n\n const payload: ExactSvmPayloadV2 = {\n transaction: base64EncodedWireTransaction,\n };\n\n return {\n x402Version,\n payload,\n };\n }\n\n private async resolveBlockhashLifetime(\n rpc: ReturnType<typeof createRpcClient>,\n extra: PatchedPaymentExtra\n ): Promise<BlockhashLifetime> {\n const providedLastValidBlockHeight = parseLastValidBlockHeight(\n extra.lastValidBlockHeight\n );\n\n if (typeof extra.recentBlockhash === 'string') {\n if (providedLastValidBlockHeight !== undefined) {\n return {\n blockhash: asBlockhash(extra.recentBlockhash),\n lastValidBlockHeight: providedLastValidBlockHeight,\n };\n }\n\n const { value } = await rpc.getLatestBlockhash().send();\n return {\n blockhash: asBlockhash(extra.recentBlockhash),\n lastValidBlockHeight: value.lastValidBlockHeight,\n };\n }\n\n if (\n extra.recentBlockhash &&\n typeof extra.recentBlockhash === 'object' &&\n typeof extra.recentBlockhash.blockhash === 'string'\n ) {\n const lastValidBlockHeight =\n parseLastValidBlockHeight(extra.recentBlockhash.lastValidBlockHeight) ??\n providedLastValidBlockHeight;\n\n if (lastValidBlockHeight !== undefined) {\n return {\n blockhash: asBlockhash(extra.recentBlockhash.blockhash),\n lastValidBlockHeight,\n };\n }\n\n const { value } = await rpc.getLatestBlockhash().send();\n return {\n blockhash: asBlockhash(extra.recentBlockhash.blockhash),\n lastValidBlockHeight: value.lastValidBlockHeight,\n };\n }\n\n return (await rpc.getLatestBlockhash().send()).value;\n }\n}\n","import { PaymentProtocol } from './types';\n\nexport function detectPaymentProtocols(response: Response): PaymentProtocol[] {\n const protocols: PaymentProtocol[] = [];\n\n const wwwAuth = response.headers.get('WWW-Authenticate');\n if (wwwAuth?.startsWith('Payment')) {\n protocols.push(PaymentProtocol.MPP);\n }\n\n const paymentRequired = response.headers.get('payment-required');\n if (paymentRequired) {\n protocols.push(PaymentProtocol.X402);\n }\n // If we couldn't detect either explicitly, default to x402\n if (protocols.length === 0) {\n protocols.push(PaymentProtocol.X402);\n }\n return protocols;\n}\n","import type { Address } from 'viem';\nimport { formatUnits } from 'viem';\n\nimport { safeFetch } from '@/shared/neverthrow/fetch';\nimport {\n safeGetMppChallenge,\n safeCreateMppCredential,\n safeGetMppReceipt,\n mppErr,\n mppOk,\n} from '@/shared/protocols/mpp';\n\nimport { PaymentProtocol } from '../types';\nimport { Network, EVM_CONFIGS } from '@agentcash/networks';\nimport { formatUsd } from '@/shared/utils';\n\nimport type { ExecuteFetchResult } from '@/operations/fetch/types';\nimport type { HandlePaymentParams } from '@/shared/protocols/types';\nimport { beforePayment } from '../before-payment';\n\nexport async function handleMppPayment({\n response,\n request,\n options,\n}: HandlePaymentParams) {\n const { surface, wallets } = options;\n const { timeout } = options.params;\n\n // Prevent retry loops\n if (request.headers.has('Authorization')) {\n return mppErr(surface, {\n cause: 'mpp_payment_already_attempted',\n message: 'MPP payment already attempted',\n });\n }\n\n // Parse the challenge from the WWW-Authenticate header\n const challengeResult = safeGetMppChallenge(surface, response);\n\n if (challengeResult.isErr()) {\n return challengeResult;\n }\n\n const challenge = challengeResult.value;\n\n // Extract payment info from challenge request\n const amount = Number(formatUnits(BigInt(challenge.request.amount), 6));\n const tokenAddress = challenge.request.currency as Address;\n\n // Check that the requested token matches what agentcash supports on Tempo\n const expectedToken = EVM_CONFIGS[Network.TEMPO].usdcAddress.toLowerCase();\n if (tokenAddress.toLowerCase() !== expectedToken) {\n return mppErr(surface, {\n cause: 'unsupported_token',\n message: `Endpoint requires payment in token ${tokenAddress} on Tempo, but agentcash only supports ${EVM_CONFIGS[Network.TEMPO].usdcAddress}. The endpoint may be configured for a different token (e.g. PathUSD vs USDC).`,\n });\n }\n\n const beforePaymentResult = await beforePayment({\n options,\n balanceInput: {\n address: wallets.evm.address,\n network: Network.TEMPO,\n tokenAddress,\n },\n amount,\n protocol: PaymentProtocol.MPP,\n });\n\n if (beforePaymentResult.isErr()) {\n return beforePaymentResult;\n }\n\n const credentialResult = await safeCreateMppCredential(\n surface,\n wallets,\n response\n );\n\n if (credentialResult.isErr()) {\n return credentialResult;\n }\n\n const credential = credentialResult.value;\n\n // Set Authorization header on cloned request\n request.headers.set('Authorization', credential);\n\n // Retry the fetch with the credential\n const paidFetchResult = await safeFetch(surface, request, timeout);\n if (paidFetchResult.isErr()) {\n return paidFetchResult;\n }\n\n const paidResponse = paidFetchResult.value;\n\n // If the server still returns 402, the payment was rejected\n if (paidResponse.status === 402) {\n const body = await paidResponse\n .clone()\n .text()\n .catch(() => '');\n const detail = body ? `: ${body}` : '';\n return mppErr(surface, {\n cause: 'mpp_payment_rejected',\n message: `MPP payment was rejected by the server (402)${detail}`,\n });\n }\n\n // Parse the receipt for transaction hash\n const receiptResult = safeGetMppReceipt(surface, paidResponse);\n\n return mppOk<ExecuteFetchResult>({\n response: paidResponse,\n paymentInfo: {\n protocol: PaymentProtocol.MPP,\n network: Network.TEMPO,\n price: formatUsd(amount),\n payment: receiptResult.isOk()\n ? {\n success: true,\n transactionHash: receiptResult.value.reference,\n }\n : null,\n },\n });\n}\n","import { Challenge, Receipt } from 'mppx';\nimport { Methods } from 'mppx/tempo';\nimport {\n err,\n ok,\n resultFromPromise,\n resultFromThrowable,\n} from '@agentcash/neverthrow';\n\nimport { Mppx, tempo as tempoMethod } from 'mppx/client';\n\nimport { createClient, http } from 'viem';\nimport { tempo } from 'viem/chains';\n\nimport type { BaseMppError } from './types';\nimport type { Wallets } from '@/wallet';\n\nconst errorType = 'mpp';\n\nexport const mppOk = <T>(value: T) => ok(value);\nexport const mppErr = (surface: string, error: BaseMppError) =>\n err(errorType, surface, error);\n\nconst mppResultFromPromise = <T>(\n surface: string,\n promise: Promise<T>,\n error: (e: unknown) => BaseMppError\n) => resultFromPromise(errorType, surface, promise, error);\n\nconst mppResultFromThrowable = <T>(\n surface: string,\n fn: () => T,\n error: (e: unknown) => BaseMppError\n) => resultFromThrowable(errorType, surface, fn, error);\n\nexport const safeGetMppChallenge = (surface: string, response: Response) => {\n return mppResultFromThrowable(\n surface,\n () => Challenge.fromResponse(response, { methods: [Methods.charge] }),\n error => ({\n cause: 'parse_mpp_challenge',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to parse MPP challenge from response',\n })\n );\n};\n\nexport const safeCreateMppCredential = (\n surface: string,\n wallets: Wallets,\n response: Response\n) => {\n const TEMPO_RPC_URL =\n 'https://eng:acard-melody-fashion-finish@rpc.mainnet.tempo.xyz';\n\n const client = Mppx.create({\n polyfill: false,\n methods: [\n tempoMethod({\n account: wallets.evm,\n getClient: () =>\n createClient({\n chain: tempo,\n transport: http(TEMPO_RPC_URL),\n }),\n }),\n ],\n });\n\n return mppResultFromPromise(\n surface,\n client.createCredential(response),\n error => ({\n cause: 'create_mpp_credential',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to create MPP credential',\n })\n );\n};\n\nexport const safeGetMppReceipt = (surface: string, response: Response) => {\n return mppResultFromThrowable(\n surface,\n () => Receipt.fromResponse(response),\n error => ({\n cause: 'parse_mpp_receipt',\n message:\n error instanceof Error\n ? error.message\n : 'Failed to parse MPP receipt from response',\n })\n );\n};\n","import { err, ok } from '@agentcash/neverthrow';\n\nimport { getBalance } from '../balance';\nimport { getDepositLink } from '../utils';\nimport { getSettings } from '../settings';\n\nimport { DEFAULT_MAX_AMOUNT } from '@/operations/fetch/types';\n\nimport type { GetBalanceInput } from '@agentcash/balance';\nimport type { ExecuteFetchOptions } from '@/operations/fetch/types';\nimport type { PaymentProtocol } from './types';\n\ninterface BeforePaymentProps {\n options: ExecuteFetchOptions;\n balanceInput: GetBalanceInput;\n protocol: PaymentProtocol;\n amount: number;\n}\n\nexport const beforePayment = async (props: BeforePaymentProps) => {\n const { options, balanceInput, amount } = props;\n const maxAmount =\n options.params.maxAmount ?? getSettings().maxAmount ?? DEFAULT_MAX_AMOUNT;\n if (amount > maxAmount) {\n return err('before_payment', options.surface, {\n cause: 'amount_exceeds_max_amount' as const,\n message: `Endpoint requested $${amount} which exceeds the maximum allowed amount of $${maxAmount}. Pass a higher maxAmount on this call, or use update_settings to raise the default permanently.`,\n });\n }\n\n const balanceResult = await getBalance(\n options.surface,\n balanceInput,\n options.flags\n );\n\n if (balanceResult.isErr()) {\n return balanceResult;\n }\n\n const balance = balanceResult.value.balance;\n\n if (balance < amount) {\n return err('before_payment', options.surface, {\n cause: 'insufficient_balance' as const,\n message: insufficientBalanceErrorMessage(props, balance),\n });\n }\n\n return ok(true);\n};\n\nconst insufficientBalanceErrorMessage = (\n props: BeforePaymentProps,\n balance: number\n) => {\n const { options, balanceInput, amount } = props;\n return [\n `You are attempting to use an endpoint via ${props.protocol} that costs ${amount} USDC on ${balanceInput.network}.`,\n `Your current balance is ${balance} USDC.`,\n `You can bridge between accounts or deposit at ${getDepositLink(balanceInput.address, options.flags, balanceInput.network)} to top up your balance.`,\n `Before bridging, you can check the users account with npx agentcash@latest accounts or if you are within the MCP, you can use the list_accounts tool.`,\n ].join('\\n');\n};\n","import { safeGetMppChallenge } from '@/shared/protocols/mpp';\n\nimport { log } from '@/shared/log';\nimport { getBalance } from '@/shared/balance';\nimport { Network } from '@agentcash/networks';\n\nimport { PaymentProtocol } from './types';\n\nimport type { ExecuteFetchOptions } from '@/operations/fetch/types';\n\n/**\n * Pick the preferred protocol by comparing wallet balances.\n * Falls back to 'mpp' if both balances fail to fetch.\n */\nexport async function pickByBalance(\n response: Response,\n options: ExecuteFetchOptions\n): Promise<PaymentProtocol> {\n const { surface, wallets, flags } = options;\n\n // Get x402 (USDC on Base and Solana) balances in parallel\n const x402Balances = await Promise.all([\n getBalance(\n surface,\n {\n address: wallets.evm.address,\n network: Network.BASE,\n },\n flags\n ),\n getBalance(\n surface,\n {\n address: wallets.svm.address,\n network: Network.SOLANA,\n },\n flags\n ),\n ]);\n\n const x402Balance = x402Balances.reduce(\n (acc, balance) => acc + (balance.isOk() ? balance.value.balance : 0),\n 0\n );\n\n // Get MPP (Tempo) balance — need token address from the challenge\n let mppBalance = 0;\n const challengeResult = safeGetMppChallenge(surface, response);\n if (challengeResult.isOk()) {\n const currency = challengeResult.value.request.currency;\n if (currency) {\n const tempoResult = await getBalance(\n surface,\n {\n address: wallets.evm.address,\n network: Network.TEMPO,\n },\n flags\n );\n if (tempoResult.isOk()) {\n mppBalance = tempoResult.value.balance ?? 0;\n }\n }\n }\n\n log.info(`Protocol selection — x402: $${x402Balance}, mpp: $${mppBalance}`);\n return x402Balance >= mppBalance ? PaymentProtocol.X402 : PaymentProtocol.MPP;\n}\n","import { getBalance } from '@/shared/balance';\nimport { caip2ToNetwork, Network, networkToCaip2 } from '@agentcash/networks';\n\nimport type { PaymentRequirements } from '@x402/core/types';\nimport type { ExecuteFetchOptions } from '@/operations/fetch/types';\n\ninterface ChoosePaymentRequirementParams {\n paymentRequirements: PaymentRequirements[];\n options: ExecuteFetchOptions;\n}\n\nexport const choosePaymentRequirement = async ({\n paymentRequirements,\n options,\n}: ChoosePaymentRequirementParams) => {\n const { surface, wallets, flags } = options;\n const { paymentNetwork } = options.params;\n if (paymentNetwork) {\n const caip2 = networkToCaip2(paymentNetwork);\n return paymentRequirements.find(pr => pr.network === caip2);\n }\n\n const requirementsWithBalance = await Promise.all(\n paymentRequirements.map(async pr => {\n const network = caip2ToNetwork(pr.network);\n if (network === null) {\n return {\n balance: 0,\n requirement: pr,\n };\n }\n if (network === Network.SOLANA) {\n const balanceResult = await getBalance(\n surface,\n {\n address: wallets.svm.address,\n network,\n },\n flags\n );\n return {\n requirement: pr,\n balance: balanceResult.isOk() ? balanceResult.value.balance : 0,\n };\n } else {\n const balanceResult = await getBalance(\n surface,\n {\n address: wallets.evm.address,\n network,\n },\n flags\n );\n return {\n requirement: pr,\n balance: balanceResult.isOk() ? balanceResult.value.balance : 0,\n };\n }\n })\n );\n return requirementsWithBalance.sort((a, b) => b.balance - a.balance)[0]!\n .requirement;\n};\n","import { caip2ToNetwork, Network } from '@agentcash/networks';\n\nimport { choosePaymentRequirement } from './choose-payment-requirement';\n\nimport { safeFetch } from '@/shared/neverthrow/fetch';\nimport {\n safeCreatePaymentPayload,\n safeGetPaymentRequired,\n safeGetPaymentSettlement,\n x402Err,\n x402Ok,\n x402ProbeClient,\n} from '@/shared/protocols/x402';\nimport { tokenStringToNumber, formatUsd } from '@/shared/utils';\n\nimport { beforePayment } from '../before-payment';\n\nimport { PaymentProtocol } from '../types';\n\nimport type { ExecuteFetchResult } from '@/operations/fetch/types';\nimport type { HandlePaymentParams } from '../types';\n\nexport async function handleX402Payment({\n response,\n request,\n options,\n}: HandlePaymentParams) {\n const { surface, wallets } = options;\n const { timeout } = options.params;\n\n const paymentRequiredResult = await safeGetPaymentRequired(surface, response);\n\n if (paymentRequiredResult.isErr()) {\n return paymentRequiredResult;\n }\n\n const paymentRequired = paymentRequiredResult.value;\n\n if (paymentRequired.x402Version === 1) {\n return x402Err(surface, {\n cause: 'parse_payment_required' as const,\n message:\n 'This endpoint uses the x402 v1 format, which is not supported by agentcash. Only x402 v2 servers (with an `accepts` array in the Payment-Required header) are supported.',\n });\n }\n\n if (!paymentRequired.accepts || !Array.isArray(paymentRequired.accepts)) {\n return x402Err(surface, {\n cause: 'parse_payment_required' as const,\n message:\n 'This endpoint has a missing or malformed accepts array in the Payment-Required header.',\n });\n }\n\n // Check amount against maxAmount before any payment logic\n const accept = await choosePaymentRequirement({\n options,\n paymentRequirements: paymentRequired.accepts,\n });\n\n if (accept) {\n const amount = tokenStringToNumber(accept.amount);\n\n const typedNetwork = caip2ToNetwork(accept.network)!;\n if (!typedNetwork) {\n return x402Err(surface, {\n cause: 'parse_payment_required' as const,\n message: `Invalid network: ${accept.network}`,\n });\n }\n\n const beforePaymentResult = await beforePayment({\n options,\n balanceInput:\n typedNetwork === Network.SOLANA\n ? {\n address: wallets.svm.address,\n network: Network.SOLANA,\n }\n : {\n address: wallets.evm.address,\n network: typedNetwork,\n },\n amount,\n protocol: PaymentProtocol.X402,\n });\n\n if (beforePaymentResult.isErr()) {\n return beforePaymentResult;\n }\n }\n\n const paymentPayloadResult = await safeCreatePaymentPayload(\n surface,\n wallets,\n paymentRequired,\n accept ? () => accept : undefined\n );\n\n if (paymentPayloadResult.isErr()) {\n return paymentPayloadResult;\n }\n\n const paymentPayload = paymentPayloadResult.value;\n\n // Encode payment header\n const paymentHeaders =\n x402ProbeClient.encodePaymentSignatureHeader(paymentPayload);\n\n // Check if this is already a retry to prevent infinite loops\n if (\n request.headers.has('PAYMENT-SIGNATURE') ||\n request.headers.has('X-PAYMENT')\n ) {\n return x402Err(surface, {\n cause: 'payment_already_attempted',\n message: 'Payment already attempted',\n });\n }\n\n // Add payment headers to cloned request\n for (const [key, value] of Object.entries(paymentHeaders)) {\n request.headers.set(key, value);\n }\n request.headers.set(\n 'Access-Control-Expose-Headers',\n 'PAYMENT-RESPONSE,X-PAYMENT-RESPONSE'\n );\n\n // Retry the request with payment\n return await safeFetch(surface, request, timeout).andThen(paidResponse => {\n const settlementResult = safeGetPaymentSettlement(surface, paidResponse);\n\n const settlement = settlementResult.isOk() ? settlementResult.value : null;\n\n const maxAmount = tokenStringToNumber(paymentPayload.accepted.amount);\n const settledAmount = settlement?.amount\n ? tokenStringToNumber(settlement.amount)\n : null;\n const isUpTo = paymentPayload.accepted.scheme === 'upto';\n\n const price =\n settledAmount != null\n ? formatUsd(settledAmount)\n : isUpTo\n ? `up to ${formatUsd(maxAmount)}`\n : formatUsd(maxAmount);\n\n return x402Ok<ExecuteFetchResult>({\n response: paidResponse,\n paymentInfo: {\n protocol: PaymentProtocol.X402,\n network: caip2ToNetwork(paymentPayload.accepted.network)!,\n price,\n payment: settlement\n ? {\n success: settlement.success,\n transactionHash: settlement.transaction,\n }\n : null,\n },\n });\n });\n}\n","import { detectPaymentProtocols } from '@/shared/protocols/detect';\nimport { handleMppPayment } from '@/shared/protocols/mpp/handle-payment';\nimport { pickByBalance } from '@/shared/protocols/pick';\nimport { PaymentProtocol } from '@/shared/protocols/types';\nimport { handleX402Payment } from '@/shared/protocols/x402/handle-payment';\n\nimport type { ExecuteFetchOptions } from './types';\n\nexport async function executePayment(\n response: Response,\n request: Request,\n options: ExecuteFetchOptions\n) {\n const { paymentProtocol } = options.params;\n\n const params = {\n response,\n request,\n options,\n };\n\n if (paymentProtocol) {\n return handlerMap[paymentProtocol](params);\n }\n\n const available = detectPaymentProtocols(response);\n const preferred =\n available.length === 1\n ? available[0]!\n : await pickByBalance(response, options);\n const fallback =\n available.length > 1\n ? preferred === PaymentProtocol.MPP\n ? PaymentProtocol.X402\n : PaymentProtocol.MPP\n : null;\n\n const fallbackRetryRequest = fallback ? request.clone() : null;\n const result = await handlerMap[preferred](params);\n\n if (result.isErr() && fallback && fallbackRetryRequest) {\n return handlerMap[fallback]({\n ...params,\n request: fallbackRetryRequest,\n });\n }\n\n return result;\n}\n\nconst handlerMap = {\n [PaymentProtocol.MPP]: handleMppPayment,\n [PaymentProtocol.X402]: handleX402Payment,\n};\n","import { fetchErr, fetchOk, safeFetch } from '@/shared/neverthrow/fetch';\nimport { BLACKLISTED_ORIGINS } from '@/shared/origins';\n\nimport { attemptSiwxAuth } from './auth';\nimport { executePayment } from './payment';\n\nimport type { ExecuteFetchOptions } from './types';\nimport { buildRequest } from '@/shared/request/build';\nimport type { RequestInput } from '@/shared/request/types';\n\n/**\n * Executes a request with automatic SIWX authentication and payment handling.\n *\n * 1. Probe the endpoint\n * 2. If 402 with SIWX challenge, retry with SIGN-IN-WITH-X\n * 3. If still 402, execute payment\n */\nexport async function executeFetch(\n input: RequestInput,\n options: ExecuteFetchOptions\n) {\n const request = buildRequest(input, options);\n\n const { surface } = options;\n const { timeout } = options.params;\n\n const blocked = BLACKLISTED_ORIGINS.find(origin =>\n request.url.startsWith(origin)\n );\n if (blocked) {\n return fetchErr(surface, {\n cause: 'network',\n message: `${blocked} is no longer available. This origin has been deprecated.`,\n });\n }\n\n const authRetryRequest = request.clone();\n const paymentRetryRequest = request.clone();\n\n const probeResult = await safeFetch(surface, request, timeout);\n\n if (probeResult.isErr()) {\n return fetchErr(surface, probeResult.error);\n }\n\n const initialResponse = probeResult.value;\n if (initialResponse.status !== 402) {\n return fetchOk({\n response: initialResponse,\n paymentInfo: null,\n });\n }\n\n const authResult = await attemptSiwxAuth(\n initialResponse,\n authRetryRequest,\n paymentRetryRequest,\n options\n );\n\n if (authResult.isErr()) {\n return authResult;\n }\n\n const latestResponse = authResult.value.response;\n if (latestResponse.status !== 402) {\n return fetchOk({\n response: latestResponse,\n paymentInfo: null,\n });\n }\n\n return executePayment(\n latestResponse,\n authResult.value.paymentRetryRequest,\n options\n );\n}\n"],"mappings":"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","names":["tx","http","errorType"]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
|
-
getBaseUrl,
|
|
3
2
|
safeFetchJson
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-BFOYXXLG.js";
|
|
5
4
|
import {
|
|
6
5
|
ALL_NETWORK_CONFIGS,
|
|
7
6
|
EVM_CONFIGS,
|
|
@@ -9,6 +8,9 @@ import {
|
|
|
9
8
|
networkSchema,
|
|
10
9
|
solanaAddressSchema
|
|
11
10
|
} from "./chunk-NPJV7AMV.js";
|
|
11
|
+
import {
|
|
12
|
+
getBaseUrl
|
|
13
|
+
} from "./chunk-U6FRXL3X.js";
|
|
12
14
|
|
|
13
15
|
// ../../internal/balance/src/index.ts
|
|
14
16
|
import { z } from "zod";
|
|
@@ -57,4 +59,4 @@ var getBalance = async (surface, input, flags) => {
|
|
|
57
59
|
export {
|
|
58
60
|
getBalance
|
|
59
61
|
};
|
|
60
|
-
//# sourceMappingURL=chunk-
|
|
62
|
+
//# sourceMappingURL=chunk-KJCWPVQE.js.map
|