agentcash 0.14.4 → 0.15.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 +41391 -17817
- package/dist/esm/{add-skill-MO4YPAYM.js → add-skill-5HFBHQTQ.js} +10 -10
- package/dist/esm/{bridge-Q4YWH4WW.js → bridge-BOLVXKCD.js} +7 -7
- package/dist/esm/{check-3GPSLBNI.js → check-FEWY37RD.js} +7 -7
- package/dist/esm/{chunk-JKK2XT7N.js → chunk-2C7X7XIG.js} +3 -3
- package/dist/esm/{chunk-UCADMHNP.js → chunk-2E4ZDG2M.js} +2 -2
- package/dist/esm/{chunk-YUPRVVFP.js → chunk-4MCPQDKM.js} +3 -3
- package/dist/esm/{chunk-JX2XE6FD.js → chunk-4TIYIVZF.js} +1 -1
- package/dist/esm/chunk-4TIYIVZF.js.map +1 -0
- package/dist/esm/{chunk-ONGJJBKT.js → chunk-66AVEFTO.js} +4 -4
- package/dist/esm/{chunk-CUZFVI2X.js → chunk-7CV5CENJ.js} +2 -2
- package/dist/esm/{chunk-MSNAPI5G.js → chunk-BIO4Y27B.js} +3 -3
- package/dist/esm/{chunk-WRNDLZ3K.js → chunk-BM5W5OV2.js} +3 -3
- package/dist/esm/{chunk-BNFMFAEF.js → chunk-C7B6LEPE.js} +3 -3
- package/dist/esm/{chunk-JVMJVMWB.js → chunk-EDI77S36.js} +209 -84
- package/dist/esm/chunk-EDI77S36.js.map +1 -0
- package/dist/esm/{chunk-KJCWPVQE.js → chunk-EM6OE6WL.js} +3 -3
- package/dist/esm/chunk-FBGNOXFP.js +102 -0
- package/dist/esm/chunk-FBGNOXFP.js.map +1 -0
- package/dist/esm/{chunk-NPJV7AMV.js → chunk-HTGTKVXB.js} +6 -2
- package/dist/esm/chunk-HTGTKVXB.js.map +1 -0
- package/dist/esm/{chunk-L4U6AJW3.js → chunk-K3WB4R2P.js} +3 -2
- package/dist/esm/{chunk-L4U6AJW3.js.map → chunk-K3WB4R2P.js.map} +1 -1
- package/dist/esm/{chunk-2OKYUR7B.js → chunk-MKA2PTOE.js} +5 -7
- package/dist/esm/chunk-MKA2PTOE.js.map +1 -0
- package/dist/esm/{chunk-2SZ6MZS3.js → chunk-O57QVTLM.js} +2 -2
- package/dist/esm/{chunk-QOMU3YLK.js → chunk-PQXKQJIU.js} +2 -2
- package/dist/esm/{chunk-BFOYXXLG.js → chunk-RAS5DZPQ.js} +15 -1
- package/dist/esm/chunk-RAS5DZPQ.js.map +1 -0
- package/dist/esm/{chunk-7KT6UCTT.js → chunk-SLTRGQ7W.js} +8 -3
- package/dist/esm/{chunk-7KT6UCTT.js.map → chunk-SLTRGQ7W.js.map} +1 -1
- package/dist/esm/chunk-TX7S7QGG.js +146 -0
- package/dist/esm/chunk-TX7S7QGG.js.map +1 -0
- package/dist/esm/{chunk-3PYQIEMA.js → chunk-W37JKCLN.js} +41 -3
- package/dist/esm/chunk-W37JKCLN.js.map +1 -0
- package/dist/esm/{chunk-TTAO2EJK.js → chunk-YPFBBTA2.js} +1 -1
- package/dist/esm/chunk-YPFBBTA2.js.map +1 -0
- package/dist/esm/{discover-TE2BZJMA.js → discover-TXEJNB5A.js} +5 -5
- package/dist/esm/{fetch-ZAECKP5C.js → fetch-AFKCCCHZ.js} +12 -11
- package/dist/esm/{fetch-ZAECKP5C.js.map → fetch-AFKCCCHZ.js.map} +1 -1
- package/dist/esm/{fund-HHL4QEU5.js → fund-FCOUEG7T.js} +5 -5
- package/dist/esm/index.js +70 -34
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/{install-EOF353SY.js → install-LAWJMMPO.js} +8 -8
- package/dist/esm/{onboard-EMUCEMFN.js → onboard-W7CUGJJM.js} +12 -12
- package/dist/esm/{origins-MBWKIWLR.js → origins-EVVF3N4G.js} +6 -6
- package/dist/esm/{register-NSQPYCWI.js → register-5KLJDRG4.js} +62 -21
- package/dist/esm/register-5KLJDRG4.js.map +1 -0
- package/dist/esm/{report-error-7RCKDM2N.js → report-error-HN4YXEOC.js} +5 -5
- package/dist/esm/{search-SYBTWXON.js → search-MEGI3KJW.js} +11 -10
- package/dist/esm/{search-SYBTWXON.js.map → search-MEGI3KJW.js.map} +1 -1
- package/dist/esm/{server-ZIKTGUST.js → server-7QJB55AW.js} +2 -2
- package/dist/esm/{server-NHOKDQHU.js → server-M7SLAGFR.js} +83 -18
- package/dist/esm/server-M7SLAGFR.js.map +1 -0
- package/dist/esm/sessions-NUOSJC6M.js +74 -0
- package/dist/esm/sessions-NUOSJC6M.js.map +1 -0
- package/dist/esm/{settings-RLSKK5RM.js → settings-SBL7WIBQ.js} +2 -2
- package/dist/esm/{try-MXWZSHRS.js → try-4RHB5KHZ.js} +10 -10
- package/dist/esm/try-4RHB5KHZ.js.map +1 -0
- package/dist/esm/{wallet-QOS3FPSF.js → wallet-PY4ZDHNZ.js} +12 -12
- package/package.json +8 -8
- package/dist/esm/chunk-2OKYUR7B.js.map +0 -1
- package/dist/esm/chunk-3PYQIEMA.js.map +0 -1
- package/dist/esm/chunk-BFOYXXLG.js.map +0 -1
- package/dist/esm/chunk-JVMJVMWB.js.map +0 -1
- package/dist/esm/chunk-JX2XE6FD.js.map +0 -1
- package/dist/esm/chunk-NPJV7AMV.js.map +0 -1
- package/dist/esm/chunk-TTAO2EJK.js.map +0 -1
- package/dist/esm/register-NSQPYCWI.js.map +0 -1
- package/dist/esm/server-NHOKDQHU.js.map +0 -1
- package/dist/esm/try-MXWZSHRS.js.map +0 -1
- /package/dist/esm/{add-skill-MO4YPAYM.js.map → add-skill-5HFBHQTQ.js.map} +0 -0
- /package/dist/esm/{bridge-Q4YWH4WW.js.map → bridge-BOLVXKCD.js.map} +0 -0
- /package/dist/esm/{check-3GPSLBNI.js.map → check-FEWY37RD.js.map} +0 -0
- /package/dist/esm/{chunk-JKK2XT7N.js.map → chunk-2C7X7XIG.js.map} +0 -0
- /package/dist/esm/{chunk-UCADMHNP.js.map → chunk-2E4ZDG2M.js.map} +0 -0
- /package/dist/esm/{chunk-YUPRVVFP.js.map → chunk-4MCPQDKM.js.map} +0 -0
- /package/dist/esm/{chunk-ONGJJBKT.js.map → chunk-66AVEFTO.js.map} +0 -0
- /package/dist/esm/{chunk-CUZFVI2X.js.map → chunk-7CV5CENJ.js.map} +0 -0
- /package/dist/esm/{chunk-MSNAPI5G.js.map → chunk-BIO4Y27B.js.map} +0 -0
- /package/dist/esm/{chunk-WRNDLZ3K.js.map → chunk-BM5W5OV2.js.map} +0 -0
- /package/dist/esm/{chunk-BNFMFAEF.js.map → chunk-C7B6LEPE.js.map} +0 -0
- /package/dist/esm/{chunk-KJCWPVQE.js.map → chunk-EM6OE6WL.js.map} +0 -0
- /package/dist/esm/{chunk-2SZ6MZS3.js.map → chunk-O57QVTLM.js.map} +0 -0
- /package/dist/esm/{chunk-QOMU3YLK.js.map → chunk-PQXKQJIU.js.map} +0 -0
- /package/dist/esm/{discover-TE2BZJMA.js.map → discover-TXEJNB5A.js.map} +0 -0
- /package/dist/esm/{fund-HHL4QEU5.js.map → fund-FCOUEG7T.js.map} +0 -0
- /package/dist/esm/{install-EOF353SY.js.map → install-LAWJMMPO.js.map} +0 -0
- /package/dist/esm/{onboard-EMUCEMFN.js.map → onboard-W7CUGJJM.js.map} +0 -0
- /package/dist/esm/{origins-MBWKIWLR.js.map → origins-EVVF3N4G.js.map} +0 -0
- /package/dist/esm/{report-error-7RCKDM2N.js.map → report-error-HN4YXEOC.js.map} +0 -0
- /package/dist/esm/{server-ZIKTGUST.js.map → server-7QJB55AW.js.map} +0 -0
- /package/dist/esm/{settings-RLSKK5RM.js.map → settings-SBL7WIBQ.js.map} +0 -0
- /package/dist/esm/{wallet-QOS3FPSF.js.map → wallet-PY4ZDHNZ.js.map} +0 -0
|
@@ -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/x402/policies.ts","../../src/shared/protocols/detect.ts","../../src/shared/protocols/mpp/handle-payment.ts","../../src/shared/protocols/before-payment.ts","../../src/shared/protocols/mpp/session/handle-session-payment.ts","../../src/shared/protocols/mpp/session/run-request-session.ts","../../src/shared/protocols/mpp/session/run-streaming-session.ts","../../src/shared/protocols/mpp/session/utils.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';\nimport { capUptoDeadline } from './policies';\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 // Read the body from a clone so the caller's Response stays unconsumed.\n // Dual-protocol 402s (x402 header + MPP `WWW-Authenticate`) reuse the same\n // Response downstream, and mppx >=0.6 clones it internally when creating a\n // credential — consuming it here would make that clone throw.\n const probe = response.clone();\n return x402ResultFromPromise(\n surface,\n probe.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 policies: [capUptoDeadline],\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 type { PaymentPolicy } from '@x402/core/client';\n\n/**\n * Maximum deadline (in seconds) we accept for `upto` payment requirements.\n *\n * The `upto` Permit2 signature is bound by `paymentRequirements.maxTimeoutSeconds`,\n * which the SDK passes straight through from the merchant's 402 response with no\n * upper bound. Within that window, the (merchant + facilitator) pair can settle\n * for any amount in `[0, cap]` — and the only on-chain check is the deadline.\n *\n * A long deadline therefore extends the window of facilitator-discretion settlement\n * at the signed cap. 7 days lets a long-running agent keep working without\n * re-signing, but bounds the trust window if a merchant declares an unreasonably\n * large `maxTimeoutSeconds` (accidentally or otherwise).\n *\n * `exact` requirements are unaffected: their amount is fixed in the signature, so\n * a long validity window is just an annoyance, not a discretion surface.\n */\nexport const MAX_UPTO_DEADLINE_SECONDS = 7 * 24 * 60 * 60; // 7 days\n\n/**\n * Caps `maxTimeoutSeconds` on `upto` requirements at {@link MAX_UPTO_DEADLINE_SECONDS}.\n * Leaves `exact` and any other scheme untouched. Pass to `x402Client.fromConfig({ policies })`.\n */\nexport const capUptoDeadline: PaymentPolicy = (_x402Version, requirements) =>\n requirements.map(r =>\n r.scheme === 'upto' && r.maxTimeoutSeconds > MAX_UPTO_DEADLINE_SECONDS\n ? { ...r, maxTimeoutSeconds: MAX_UPTO_DEADLINE_SECONDS }\n : r\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, safeReadResponseText } from '@/shared/neverthrow/fetch';\nimport {\n assertTempoUsdc,\n safeGetMppChallenge,\n safeCreateMppCredential,\n safeGetMppReceipt,\n mppErr,\n mppOk,\n} from '@/shared/protocols/mpp';\n\nimport { PaymentProtocol } from '../types';\nimport { Network } 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';\nimport { handleMppSessionPayment } from './session/handle-session-payment';\n\nexport async function handleMppPayment(params: HandlePaymentParams) {\n const { response, request, options } = params;\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 if (challenge.intent === 'session') {\n return handleMppSessionPayment(challenge, params);\n }\n\n const amount = Number(formatUnits(BigInt(challenge.request.amount), 6));\n const tokenAddress = challenge.request.currency as Address;\n\n const tokenCheck = assertTempoUsdc(surface, tokenAddress);\n if (tokenCheck.isErr()) {\n return tokenCheck;\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 safeReadResponseText(surface, paidResponse).unwrapOr('');\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 { 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 type { Address } from 'viem';\nimport { formatUnits } from 'viem';\n\nimport { tempo as tempoClient } from 'mppx/client';\n\nimport { Network } from '@agentcash/networks';\n\nimport type { ExecuteFetchResult } from '@/operations/fetch/types';\nimport { formatUsd, tokenStringToNumber } from '@/shared/utils';\n\nimport { beforePayment } from '../../before-payment';\nimport type { HandlePaymentParams } from '../../types';\nimport { PaymentProtocol } from '../../types';\nimport {\n assertTempoUsdc,\n createTempoClient,\n mppOk,\n mppResultFromPromise,\n sessionRequestFailedErr,\n} from '../index';\nimport { runRequestSession } from './run-request-session';\nimport { runStreamingSession } from './run-streaming-session';\nimport type { SessionChallenge } from './types';\nimport {\n USDC_DECIMALS,\n bufferRequestForReplay,\n formatDepositCap,\n resolveDepositUsd,\n} from './utils';\n\nexport async function handleMppSessionPayment(\n challenge: SessionChallenge,\n { request, options }: HandlePaymentParams\n) {\n const { surface, wallets } = options;\n\n const tickCostAtomic = BigInt(challenge.request.amount);\n const tickCostUsd = Number(formatUnits(tickCostAtomic, USDC_DECIMALS));\n const tokenAddress = challenge.request.currency as Address;\n\n const tokenCheck = assertTempoUsdc(surface, tokenAddress);\n if (tokenCheck.isErr()) return tokenCheck;\n\n const depositUsd = resolveDepositUsd(\n challenge.request.suggestedDeposit,\n tickCostUsd,\n options\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: depositUsd,\n protocol: PaymentProtocol.MPP,\n });\n if (beforePaymentResult.isErr()) return beforePaymentResult;\n\n const replayInitResult = await mppResultFromPromise(\n surface,\n bufferRequestForReplay(request),\n e =>\n sessionRequestFailedErr(\n e,\n 'Failed to buffer request body for session replay'\n )\n );\n if (replayInitResult.isErr()) return replayInitResult;\n\n const sm = tempoClient.session({\n account: wallets.evm,\n client: createTempoClient(),\n maxDeposit: formatDepositCap(depositUsd),\n decimals: USDC_DECIMALS,\n });\n\n const isStreaming =\n challenge.meta?.streaming === 'true' || options.params.stream === true;\n\n const reuseChannelId = options.params.channelId;\n\n const sessionResult = isStreaming\n ? await runStreamingSession(\n surface,\n sm,\n request.url,\n replayInitResult.value,\n reuseChannelId\n )\n : await runRequestSession(\n surface,\n sm,\n request.url,\n replayInitResult.value,\n reuseChannelId\n );\n if (sessionResult.isErr()) return sessionResult;\n\n const { response: finalResponse, receipt } = sessionResult.value;\n\n const price = receipt\n ? formatUsd(tokenStringToNumber(receipt.spent, USDC_DECIMALS))\n : `from ${formatUsd(tickCostUsd)}/tick`;\n\n return mppOk<ExecuteFetchResult>({\n response: finalResponse,\n paymentInfo: {\n protocol: PaymentProtocol.MPP,\n network: Network.TEMPO,\n price,\n payment: receipt ? { success: true, channelId: receipt.channelId } : null,\n },\n });\n}\n","import { safeReadResponseText } from '@/shared/neverthrow/fetch';\n\nimport {\n mppErr,\n mppOk,\n mppResultFromPromise,\n sessionRequestFailedErr,\n} from '../index';\nimport type { SessionManager, SessionOutcome } from './types';\n\nexport async function runRequestSession(\n surface: string,\n sm: SessionManager,\n url: string,\n init: RequestInit,\n channelId?: string\n) {\n const fetchInit: RequestInit & { context?: { channelId?: string } } = {\n ...init,\n ...(channelId ? { context: { channelId } } : {}),\n };\n const fetchResult = await mppResultFromPromise(\n surface,\n sm.fetch(url, fetchInit),\n e => sessionRequestFailedErr(e)\n );\n if (fetchResult.isErr()) return fetchResult;\n\n const paymentResponse = fetchResult.value;\n\n if (paymentResponse.status === 402) {\n const body = await safeReadResponseText(surface, paymentResponse).unwrapOr(\n ''\n );\n const detail = body ? `: ${body}` : '';\n return mppErr(surface, {\n cause: 'mpp_payment_rejected',\n message: `MPP session payment was rejected by the server (402)${detail}`,\n });\n }\n\n return mppOk<SessionOutcome>({\n response: paymentResponse,\n receipt: paymentResponse.receipt,\n });\n}\n","import { mppErr, mppOk } from '../index';\nimport type { SessionManager, SessionOutcome, SessionReceipt } from './types';\n\nconst MAX_BUFFERED_BYTES = 50 * 1024 * 1024;\n\nexport async function runStreamingSession(\n surface: string,\n sm: SessionManager,\n url: string,\n init: RequestInit,\n channelId?: string\n) {\n let latestReceipt: SessionReceipt | null = null;\n\n const { signal, ...rest } = init;\n const sseResult = await sm.sse(url, {\n ...rest,\n ...(signal ? { signal } : {}),\n ...(channelId ? { context: { channelId } } : {}),\n onReceipt: receipt => {\n latestReceipt = receipt;\n },\n });\n\n const chunks: string[] = [];\n let bytes = 0;\n for await (const chunk of sseResult) {\n bytes += chunk.length;\n chunks.push(chunk);\n if (bytes > MAX_BUFFERED_BYTES) {\n return mppErr(surface, {\n cause: 'mpp_session_response_too_large',\n message: `Streaming response exceeded the ${MAX_BUFFERED_BYTES}-byte buffering cap (got ${bytes} bytes).`,\n });\n }\n }\n\n // mppx's `sm.sse()` yields the `data:` payloads of `message` events\n // (voucher/receipt events are consumed internally), so join with `\\n`\n // to keep object-yielding streams valid NDJSON.\n const response = new Response(chunks.join('\\n'), {\n status: 200,\n headers: {\n 'Content-Type': 'text/plain',\n 'Cache-Control': 'private',\n },\n });\n\n return mppOk<SessionOutcome>({ response, receipt: latestReceipt });\n}\n","import {\n DEFAULT_MAX_AMOUNT,\n type ExecuteFetchOptions,\n} from '@/operations/fetch/types';\nimport { getSettings } from '@/shared/settings';\nimport { tokenStringToNumber } from '@/shared/utils';\n\nexport const USDC_DECIMALS = 6;\nconst DEFAULT_TICK_BUDGET = 10;\n\nexport function resolveDepositUsd(\n suggestedDeposit: string | undefined,\n tickCostUsd: number,\n options: ExecuteFetchOptions\n): number {\n const maxAmount =\n options.params.maxAmount ?? getSettings().maxAmount ?? DEFAULT_MAX_AMOUNT;\n const desired =\n suggestedDeposit !== undefined\n ? tokenStringToNumber(suggestedDeposit, USDC_DECIMALS)\n : tickCostUsd * DEFAULT_TICK_BUDGET;\n return Math.min(desired, maxAmount);\n}\n\n// toFixed rather than toString so very small deposits don't serialize in\n// scientific notation, which viem's parseUnits rejects.\nexport function formatDepositCap(depositUsd: number): string {\n if (!Number.isFinite(depositUsd) || depositUsd <= 0) {\n return '0';\n }\n return depositUsd.toFixed(USDC_DECIMALS);\n}\n\nexport async function bufferRequestForReplay(\n request: Request\n): Promise<RequestInit> {\n const init: RequestInit = {\n method: request.method,\n headers: new Headers(request.headers),\n credentials: request.credentials,\n redirect: request.redirect,\n referrer: request.referrer === '' ? undefined : request.referrer,\n integrity: request.integrity || undefined,\n signal: request.signal,\n };\n\n const hasBody =\n request.method !== 'GET' &&\n request.method !== 'HEAD' &&\n request.body !== null;\n\n if (hasBody) {\n init.body = await request.arrayBuffer();\n }\n\n return init;\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\n// Prefer `upto` over `exact` when a server offers both on the same network.\n// `upto` authorizes a maximum via Permit2 and settles for actual usage, which\n// matches usage-priced endpoints (e.g. per-token LLM inference) better than\n// `exact`, which charges the upper bound regardless. Servers that surface\n// both schemes — like Surplus Intelligence — explicitly recommend preferring\n// `upto`. Falls back to the first match when `upto` isn't offered.\nexport const preferUpto = (\n requirements: PaymentRequirements[]\n): PaymentRequirements | undefined => {\n return requirements.find(pr => pr.scheme === 'upto') ?? requirements[0];\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 preferUpto(paymentRequirements.filter(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 const bestNetwork = requirementsWithBalance.sort(\n (a, b) => b.balance - a.balance\n )[0]!.requirement.network;\n return preferUpto(\n paymentRequirements.filter(pr => pr.network === bestNetwork)\n );\n};\n","import { caip2ToNetwork, Network } from '@agentcash/networks';\n\nimport { choosePaymentRequirement } from './choose-payment-requirement';\n\nimport { safeFetch, safeReadResponseText } 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';\nimport type { BaseX402Error } from './types';\n\nexport const isPermit2AllowanceFailureBody = (body: string): boolean =>\n body.includes('permit2') && body.includes('allowance_required');\n\nexport const buildPermit2AllowanceErrorMessage = (params: {\n walletAddress: string;\n scheme: string;\n}): string => {\n const { walletAddress, scheme } = params;\n return [\n `Payment failed: this endpoint's \\`${scheme}\\` scheme settles via the Permit2 contract, but your agentcash wallet (${walletAddress}) has not approved Permit2 to spend USDC.`,\n '',\n 'The clean fix is server-side. The merchant should adopt the EIP-2612 gas-sponsoring extension — agentcash will then auto-sign an off-chain permit on each call and the facilitator pays the approval gas, with no setup required from the user. See https://docs.x402.org/extensions/eip2612-gas-sponsoring',\n '',\n `Until the merchant adopts that extension, you can do a one-time \\`USDC.approve(0x000000000022D473030F116dDEE9F6B43aC78BA3, MAX_UINT256)\\` on Base from this wallet (requires a small amount of ETH for gas, ~$0.01–0.10). After that, all future Permit2-based payments from this wallet work without further on-chain transactions.`,\n ].join('\\n');\n};\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 const paymentHeaders =\n x402ProbeClient.encodePaymentSignatureHeader(paymentPayload);\n\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 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 const paidResult = await safeFetch(surface, request, timeout);\n if (paidResult.isErr()) {\n return paidResult;\n }\n const paidResponse = paidResult.value;\n\n const permit2Error = await detectPermit2AllowanceError(\n surface,\n paidResponse,\n {\n walletAddress: wallets.evm.address,\n scheme: paymentPayload.accepted.scheme,\n }\n );\n if (permit2Error) {\n return x402Err(surface, permit2Error);\n }\n\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\nasync function detectPermit2AllowanceError(\n surface: string,\n response: Response,\n context: { walletAddress: string; scheme: string }\n): Promise<BaseX402Error | null> {\n if (response.ok) {\n return null;\n }\n const body = await safeReadResponseText(surface, response).unwrapOr('');\n if (!isPermit2AllowanceFailureBody(body)) {\n return null;\n }\n return {\n cause: 'permit2_allowance_required',\n message: buildPermit2AllowanceErrorMessage(context),\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","formatUnits","formatUnits"]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
safeFetchJson
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-RAS5DZPQ.js";
|
|
4
4
|
import {
|
|
5
5
|
ALL_NETWORK_CONFIGS,
|
|
6
6
|
EVM_CONFIGS,
|
|
7
7
|
ethereumAddressSchema,
|
|
8
8
|
networkSchema,
|
|
9
9
|
solanaAddressSchema
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-HTGTKVXB.js";
|
|
11
11
|
import {
|
|
12
12
|
getBaseUrl
|
|
13
13
|
} from "./chunk-U6FRXL3X.js";
|
|
@@ -59,4 +59,4 @@ var getBalance = async (surface, input, flags) => {
|
|
|
59
59
|
export {
|
|
60
60
|
getBalance
|
|
61
61
|
};
|
|
62
|
-
//# sourceMappingURL=chunk-
|
|
62
|
+
//# sourceMappingURL=chunk-EM6OE6WL.js.map
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import {
|
|
2
|
+
EVM_CONFIGS
|
|
3
|
+
} from "./chunk-HTGTKVXB.js";
|
|
4
|
+
import {
|
|
5
|
+
err,
|
|
6
|
+
ok,
|
|
7
|
+
resultFromPromise,
|
|
8
|
+
resultFromThrowable
|
|
9
|
+
} from "./chunk-YWNBUUBR.js";
|
|
10
|
+
|
|
11
|
+
// src/shared/protocols/mpp/index.ts
|
|
12
|
+
import { Challenge, Receipt } from "mppx";
|
|
13
|
+
import { Methods } from "mppx/tempo";
|
|
14
|
+
import { Mppx, tempo as tempoMethod } from "mppx/client";
|
|
15
|
+
import { createClient, http } from "viem";
|
|
16
|
+
var errorType = "mpp";
|
|
17
|
+
var mppOk = (value) => ok(value);
|
|
18
|
+
var mppErr = (surface, error) => err(errorType, surface, error);
|
|
19
|
+
var formatErrMsg = (e, prefix) => {
|
|
20
|
+
const msg = e instanceof Error ? e.message : typeof e === "string" ? e : String(e);
|
|
21
|
+
return prefix ? `${prefix}: ${msg}` : msg;
|
|
22
|
+
};
|
|
23
|
+
var sessionRequestFailedErr = (e, prefix) => ({
|
|
24
|
+
cause: "mpp_session_request_failed",
|
|
25
|
+
message: formatErrMsg(e, prefix)
|
|
26
|
+
});
|
|
27
|
+
var sessionCloseFailedErr = (e, prefix) => ({
|
|
28
|
+
cause: "mpp_session_close_failed",
|
|
29
|
+
message: formatErrMsg(e, prefix)
|
|
30
|
+
});
|
|
31
|
+
var mppResultFromPromise = (surface, promise, error) => resultFromPromise(errorType, surface, promise, error);
|
|
32
|
+
var mppResultFromThrowable = (surface, fn, error) => resultFromThrowable(errorType, surface, fn, error);
|
|
33
|
+
var createTempoClient = () => createClient({
|
|
34
|
+
chain: EVM_CONFIGS["tempo" /* TEMPO */].chain,
|
|
35
|
+
transport: http(EVM_CONFIGS["tempo" /* TEMPO */].rpcUrl)
|
|
36
|
+
});
|
|
37
|
+
var assertTempoUsdc = (surface, tokenAddress) => {
|
|
38
|
+
const expected = EVM_CONFIGS["tempo" /* TEMPO */].usdcAddress;
|
|
39
|
+
if (tokenAddress.toLowerCase() === expected.toLowerCase()) {
|
|
40
|
+
return mppOk(true);
|
|
41
|
+
}
|
|
42
|
+
return mppErr(surface, {
|
|
43
|
+
cause: "unsupported_token",
|
|
44
|
+
message: `Endpoint requires payment in token ${tokenAddress} on Tempo, but agentcash only supports ${expected}. The endpoint may be configured for a different token (e.g. PathUSD vs USDC).`
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
var safeGetMppChallenge = (surface, response) => {
|
|
48
|
+
return mppResultFromThrowable(
|
|
49
|
+
surface,
|
|
50
|
+
() => Challenge.fromResponse(response, {
|
|
51
|
+
methods: [Methods.charge, Methods.session]
|
|
52
|
+
}),
|
|
53
|
+
(error) => ({
|
|
54
|
+
cause: "parse_mpp_challenge",
|
|
55
|
+
message: error instanceof Error ? error.message : "Failed to parse MPP challenge from response"
|
|
56
|
+
})
|
|
57
|
+
);
|
|
58
|
+
};
|
|
59
|
+
var safeCreateMppCredential = (surface, wallets, response) => {
|
|
60
|
+
const client = Mppx.create({
|
|
61
|
+
polyfill: false,
|
|
62
|
+
methods: [
|
|
63
|
+
tempoMethod({
|
|
64
|
+
account: wallets.evm,
|
|
65
|
+
getClient: createTempoClient
|
|
66
|
+
})
|
|
67
|
+
]
|
|
68
|
+
});
|
|
69
|
+
return mppResultFromPromise(
|
|
70
|
+
surface,
|
|
71
|
+
client.createCredential(response),
|
|
72
|
+
(error) => ({
|
|
73
|
+
cause: "create_mpp_credential",
|
|
74
|
+
message: error instanceof Error ? error.message : "Failed to create MPP credential"
|
|
75
|
+
})
|
|
76
|
+
);
|
|
77
|
+
};
|
|
78
|
+
var safeGetMppReceipt = (surface, response) => {
|
|
79
|
+
return mppResultFromThrowable(
|
|
80
|
+
surface,
|
|
81
|
+
() => Receipt.fromResponse(response),
|
|
82
|
+
(error) => ({
|
|
83
|
+
cause: "parse_mpp_receipt",
|
|
84
|
+
message: error instanceof Error ? error.message : "Failed to parse MPP receipt from response"
|
|
85
|
+
})
|
|
86
|
+
);
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
export {
|
|
90
|
+
mppOk,
|
|
91
|
+
mppErr,
|
|
92
|
+
sessionRequestFailedErr,
|
|
93
|
+
sessionCloseFailedErr,
|
|
94
|
+
mppResultFromPromise,
|
|
95
|
+
mppResultFromThrowable,
|
|
96
|
+
createTempoClient,
|
|
97
|
+
assertTempoUsdc,
|
|
98
|
+
safeGetMppChallenge,
|
|
99
|
+
safeCreateMppCredential,
|
|
100
|
+
safeGetMppReceipt
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=chunk-FBGNOXFP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/shared/protocols/mpp/index.ts"],"sourcesContent":["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 { type Address, createClient, http } from 'viem';\n\nimport { EVM_CONFIGS, Network } from '@agentcash/networks';\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 formatErrMsg = (e: unknown, prefix?: string) => {\n const msg =\n e instanceof Error ? e.message : typeof e === 'string' ? e : String(e);\n return prefix ? `${prefix}: ${msg}` : msg;\n};\n\nexport const sessionRequestFailedErr = (e: unknown, prefix?: string) => ({\n cause: 'mpp_session_request_failed' as const,\n message: formatErrMsg(e, prefix),\n});\n\nexport const sessionCloseFailedErr = (e: unknown, prefix?: string) => ({\n cause: 'mpp_session_close_failed' as const,\n message: formatErrMsg(e, prefix),\n});\n\nexport const mppResultFromPromise = <T>(\n surface: string,\n promise: Promise<T>,\n error: (e: unknown) => BaseMppError\n) => resultFromPromise(errorType, surface, promise, error);\n\nexport const mppResultFromThrowable = <T>(\n surface: string,\n fn: () => T,\n error: (e: unknown) => BaseMppError\n) => resultFromThrowable(errorType, surface, fn, error);\n\nexport const createTempoClient = () =>\n createClient({\n chain: EVM_CONFIGS[Network.TEMPO].chain,\n transport: http(EVM_CONFIGS[Network.TEMPO].rpcUrl),\n });\n\nexport const assertTempoUsdc = (surface: string, tokenAddress: Address) => {\n const expected = EVM_CONFIGS[Network.TEMPO].usdcAddress;\n if (tokenAddress.toLowerCase() === expected.toLowerCase()) {\n return mppOk(true);\n }\n return mppErr(surface, {\n cause: 'unsupported_token',\n message: `Endpoint requires payment in token ${tokenAddress} on Tempo, but agentcash only supports ${expected}. The endpoint may be configured for a different token (e.g. PathUSD vs USDC).`,\n });\n};\n\nexport const safeGetMppChallenge = (surface: string, response: Response) => {\n return mppResultFromThrowable(\n surface,\n () =>\n Challenge.fromResponse(response, {\n methods: [Methods.charge, Methods.session],\n }),\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 client = Mppx.create({\n polyfill: false,\n methods: [\n tempoMethod({\n account: wallets.evm,\n getClient: createTempoClient,\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"],"mappings":";;;;;;;;;;;AAAA,SAAS,WAAW,eAAe;AACnC,SAAS,eAAe;AAQxB,SAAS,MAAM,SAAS,mBAAmB;AAE3C,SAAuB,cAAc,YAAY;AAOjD,IAAM,YAAY;AAEX,IAAM,QAAQ,CAAI,UAAa,GAAG,KAAK;AACvC,IAAM,SAAS,CAAC,SAAiB,UACtC,IAAI,WAAW,SAAS,KAAK;AAE/B,IAAM,eAAe,CAAC,GAAY,WAAoB;AACpD,QAAM,MACJ,aAAa,QAAQ,EAAE,UAAU,OAAO,MAAM,WAAW,IAAI,OAAO,CAAC;AACvE,SAAO,SAAS,GAAG,MAAM,KAAK,GAAG,KAAK;AACxC;AAEO,IAAM,0BAA0B,CAAC,GAAY,YAAqB;AAAA,EACvE,OAAO;AAAA,EACP,SAAS,aAAa,GAAG,MAAM;AACjC;AAEO,IAAM,wBAAwB,CAAC,GAAY,YAAqB;AAAA,EACrE,OAAO;AAAA,EACP,SAAS,aAAa,GAAG,MAAM;AACjC;AAEO,IAAM,uBAAuB,CAClC,SACA,SACA,UACG,kBAAkB,WAAW,SAAS,SAAS,KAAK;AAElD,IAAM,yBAAyB,CACpC,SACA,IACA,UACG,oBAAoB,WAAW,SAAS,IAAI,KAAK;AAE/C,IAAM,oBAAoB,MAC/B,aAAa;AAAA,EACX,OAAO,+BAAyB,EAAE;AAAA,EAClC,WAAW,KAAK,+BAAyB,EAAE,MAAM;AACnD,CAAC;AAEI,IAAM,kBAAkB,CAAC,SAAiB,iBAA0B;AACzE,QAAM,WAAW,+BAAyB,EAAE;AAC5C,MAAI,aAAa,YAAY,MAAM,SAAS,YAAY,GAAG;AACzD,WAAO,MAAM,IAAI;AAAA,EACnB;AACA,SAAO,OAAO,SAAS;AAAA,IACrB,OAAO;AAAA,IACP,SAAS,sCAAsC,YAAY,0CAA0C,QAAQ;AAAA,EAC/G,CAAC;AACH;AAEO,IAAM,sBAAsB,CAAC,SAAiB,aAAuB;AAC1E,SAAO;AAAA,IACL;AAAA,IACA,MACE,UAAU,aAAa,UAAU;AAAA,MAC/B,SAAS,CAAC,QAAQ,QAAQ,QAAQ,OAAO;AAAA,IAC3C,CAAC;AAAA,IACH,YAAU;AAAA,MACR,OAAO;AAAA,MACP,SACE,iBAAiB,QACb,MAAM,UACN;AAAA,IACR;AAAA,EACF;AACF;AAEO,IAAM,0BAA0B,CACrC,SACA,SACA,aACG;AACH,QAAM,SAAS,KAAK,OAAO;AAAA,IACzB,UAAU;AAAA,IACV,SAAS;AAAA,MACP,YAAY;AAAA,QACV,SAAS,QAAQ;AAAA,QACjB,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,OAAO,iBAAiB,QAAQ;AAAA,IAChC,YAAU;AAAA,MACR,OAAO;AAAA,MACP,SACE,iBAAiB,QACb,MAAM,UACN;AAAA,IACR;AAAA,EACF;AACF;AAEO,IAAM,oBAAoB,CAAC,SAAiB,aAAuB;AACxE,SAAO;AAAA,IACL;AAAA,IACA,MAAM,QAAQ,aAAa,QAAQ;AAAA,IACnC,YAAU;AAAA,MACR,OAAO;AAAA,MACP,SACE,iBAAiB,QACb,MAAM,UACN;AAAA,IACR;AAAA,EACF;AACF;","names":[]}
|
|
@@ -8,6 +8,9 @@ var Network = /* @__PURE__ */ ((Network2) => {
|
|
|
8
8
|
|
|
9
9
|
// ../../internal/networks/src/configs.ts
|
|
10
10
|
import { base, tempo } from "viem/chains";
|
|
11
|
+
var TEMPO_RPC_URL_FALLBACK = "https://eng:acard-melody-fashion-finish@rpc.mainnet.tempo.xyz";
|
|
12
|
+
var tempoRpcEnvOverride = typeof process !== "undefined" ? process.env?.TEMPO_RPC_URL : void 0;
|
|
13
|
+
var tempoRpcUrl = tempoRpcEnvOverride ?? TEMPO_RPC_URL_FALLBACK;
|
|
11
14
|
var EVM_CONFIGS = {
|
|
12
15
|
["base" /* BASE */]: {
|
|
13
16
|
chain: base,
|
|
@@ -21,7 +24,8 @@ var EVM_CONFIGS = {
|
|
|
21
24
|
}),
|
|
22
25
|
name: "Tempo",
|
|
23
26
|
caip2: "eip155:4217",
|
|
24
|
-
usdcAddress: "0x20c000000000000000000000b9537d11c60e8b50"
|
|
27
|
+
usdcAddress: "0x20c000000000000000000000b9537d11c60e8b50",
|
|
28
|
+
rpcUrl: tempoRpcUrl
|
|
25
29
|
}
|
|
26
30
|
};
|
|
27
31
|
var chainId = (network) => EVM_CONFIGS[network].chain.id;
|
|
@@ -107,4 +111,4 @@ export {
|
|
|
107
111
|
typedAddressSchema,
|
|
108
112
|
usdc
|
|
109
113
|
};
|
|
110
|
-
//# sourceMappingURL=chunk-
|
|
114
|
+
//# sourceMappingURL=chunk-HTGTKVXB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../internal/networks/src/types.ts","../../../../internal/networks/src/configs.ts","../../../../internal/networks/src/schemas.ts","../../../../internal/networks/src/tokens.ts"],"sourcesContent":["import type { Chain, Address as EvmAddress } from 'viem';\nimport type { Address as SolanaAddress } from '@solana/kit';\nimport type { typedAddressSchema } from './schemas';\nimport type z from 'zod';\n\nexport type EthereumAddress = EvmAddress;\nexport { SolanaAddress };\nexport type MixedAddress = EthereumAddress | SolanaAddress;\n\nexport enum Network {\n BASE = 'base',\n TEMPO = 'tempo',\n SOLANA = 'solana',\n}\n\nexport type EvmNetwork = Exclude<Network, Network.SOLANA>;\n\nexport interface BaseNetworkConfig {\n caip2: `${string}:${string}`;\n name: string;\n}\n\nexport interface EvmNetworkConfig extends BaseNetworkConfig {\n chain: Chain;\n usdcAddress: EthereumAddress;\n rpcUrl?: string;\n}\n\nexport interface SolanaNetworkConfig extends BaseNetworkConfig {\n usdcAddress: SolanaAddress;\n}\n\nexport interface NetworkToken {\n symbol: string;\n name: string;\n icon: string;\n address: MixedAddress;\n decimals: number;\n network: Network;\n}\n\nexport type TypedNetworkAddress = z.infer<typeof typedAddressSchema>;\n","import { base, tempo } from 'viem/chains';\n\nimport { Network } from './types';\n\nimport type {\n EvmNetworkConfig,\n EvmNetwork,\n SolanaAddress,\n SolanaNetworkConfig,\n BaseNetworkConfig,\n} from './types';\n\n// Tempo's default RPC requires basic-auth credentials, so we override with\n// a shared engineering credential. Set TEMPO_RPC_URL to use a private RPC.\nconst TEMPO_RPC_URL_FALLBACK =\n 'https://eng:acard-melody-fashion-finish@rpc.mainnet.tempo.xyz';\nconst tempoRpcEnvOverride =\n typeof process !== 'undefined' ? process.env?.TEMPO_RPC_URL : undefined;\nconst tempoRpcUrl = tempoRpcEnvOverride ?? TEMPO_RPC_URL_FALLBACK;\n\nexport const EVM_CONFIGS: Record<EvmNetwork, EvmNetworkConfig> = {\n [Network.BASE]: {\n chain: base,\n name: 'Base',\n caip2: 'eip155:8453',\n usdcAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n },\n [Network.TEMPO]: {\n chain: tempo.extend({\n feeToken: '0x20c000000000000000000000b9537d11c60e8b50',\n }),\n name: 'Tempo',\n caip2: 'eip155:4217',\n usdcAddress: '0x20c000000000000000000000b9537d11c60e8b50',\n rpcUrl: tempoRpcUrl,\n },\n};\n\nexport const chainId = (network: EvmNetwork) => EVM_CONFIGS[network].chain.id;\n\nexport const SOLANA_CONFIG: SolanaNetworkConfig = {\n name: 'Solana',\n caip2: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',\n usdcAddress: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' as SolanaAddress,\n};\n\nexport const ALL_NETWORK_CONFIGS: Record<Network, BaseNetworkConfig> = {\n ...EVM_CONFIGS,\n [Network.SOLANA]: SOLANA_CONFIG,\n};\n\nexport const networkToCaip2 = (network: Network) => {\n if (network === Network.SOLANA) {\n return SOLANA_CONFIG.caip2;\n }\n return EVM_CONFIGS[network].caip2;\n};\n\nexport const TX_EXPLORER_URLS: Record<Network, string> = {\n [Network.BASE]: 'https://basescan.org/tx/',\n [Network.TEMPO]: 'https://testnet.tempo.xyz/tx/',\n [Network.SOLANA]: 'https://solscan.io/tx/',\n};\n\nexport const getTxExplorerUrl = (\n txHash: string,\n network: Network = Network.BASE\n) => `${TX_EXPLORER_URLS[network]}${txHash}`;\n\nexport const caip2ToNetwork = (caip2: `${string}:${string}`) => {\n if (caip2 === SOLANA_CONFIG.caip2) {\n return Network.SOLANA;\n }\n const evmNetwork = Object.entries(EVM_CONFIGS).find(\n ([, config]) => config.caip2 === caip2\n )?.[0];\n if (evmNetwork) {\n return evmNetwork as EvmNetwork;\n }\n return null;\n};\n","import z from 'zod';\n\nimport { Network } from './types';\n\nimport { isAddress } from 'viem';\nimport { isAddress as isSolanaAddress } from '@solana/kit';\n\nimport type { MixedAddress, SolanaAddress, EvmNetwork } from './types';\nimport { EVM_CONFIGS } from './configs';\n\nexport const networkSchema = z.enum(Network);\nexport const optionalNetworkSchema = networkSchema.optional();\n\nexport const evmNetworkSchema = z.enum(\n Object.keys(EVM_CONFIGS) as EvmNetwork[]\n);\n\nexport const ethereumAddressSchema = z\n .string()\n .refine(isAddress, 'Invalid EVM address');\n\nexport const solanaAddressSchema: z.ZodType<SolanaAddress, string> = z\n .string()\n .refine(isSolanaAddress, 'Invalid Solana address');\n\nexport const mixedAddressSchema: z.ZodType<MixedAddress, string> = z\n .union([ethereumAddressSchema, solanaAddressSchema])\n .transform(address => address as MixedAddress);\n\nexport const typedAddressSchema = z.discriminatedUnion('network', [\n z.object({\n address: ethereumAddressSchema,\n network: evmNetworkSchema,\n }),\n z.object({\n address: solanaAddressSchema,\n network: z.literal(Network.SOLANA),\n }),\n]);\n","import { EVM_CONFIGS, SOLANA_CONFIG } from './configs';\nimport { Network } from './types';\n\nimport type { NetworkToken } from './types';\n\nexport const usdc = (network: Network): NetworkToken => ({\n symbol: 'USDC',\n name: 'USD Coin',\n icon: '/usdc.png',\n decimals: 6,\n network,\n address:\n network === Network.SOLANA\n ? SOLANA_CONFIG.usdcAddress\n : EVM_CONFIGS[network].usdcAddress,\n});\n"],"mappings":";AASO,IAAK,UAAL,kBAAKA,aAAL;AACL,EAAAA,SAAA,UAAO;AACP,EAAAA,SAAA,WAAQ;AACR,EAAAA,SAAA,YAAS;AAHC,SAAAA;AAAA,GAAA;;;ACTZ,SAAS,MAAM,aAAa;AAc5B,IAAM,yBACJ;AACF,IAAM,sBACJ,OAAO,YAAY,cAAc,QAAQ,KAAK,gBAAgB;AAChE,IAAM,cAAc,uBAAuB;AAEpC,IAAM,cAAoD;AAAA,EAC/D,kBAAa,GAAG;AAAA,IACd,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,oBAAc,GAAG;AAAA,IACf,OAAO,MAAM,OAAO;AAAA,MAClB,UAAU;AAAA,IACZ,CAAC;AAAA,IACD,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;AACF;AAEO,IAAM,UAAU,CAAC,YAAwB,YAAY,OAAO,EAAE,MAAM;AAEpE,IAAM,gBAAqC;AAAA,EAChD,MAAM;AAAA,EACN,OAAO;AAAA,EACP,aAAa;AACf;AAEO,IAAM,sBAA0D;AAAA,EACrE,GAAG;AAAA,EACH,sBAAe,GAAG;AACpB;AAEO,IAAM,iBAAiB,CAAC,YAAqB;AAClD,MAAI,mCAA4B;AAC9B,WAAO,cAAc;AAAA,EACvB;AACA,SAAO,YAAY,OAAO,EAAE;AAC9B;AAEO,IAAM,mBAA4C;AAAA,EACvD,kBAAa,GAAG;AAAA,EAChB,oBAAc,GAAG;AAAA,EACjB,sBAAe,GAAG;AACpB;AAEO,IAAM,mBAAmB,CAC9B,QACA,gCACG,GAAG,iBAAiB,OAAO,CAAC,GAAG,MAAM;AAEnC,IAAM,iBAAiB,CAAC,UAAiC;AAC9D,MAAI,UAAU,cAAc,OAAO;AACjC;AAAA,EACF;AACA,QAAM,aAAa,OAAO,QAAQ,WAAW,EAAE;AAAA,IAC7C,CAAC,CAAC,EAAE,MAAM,MAAM,OAAO,UAAU;AAAA,EACnC,IAAI,CAAC;AACL,MAAI,YAAY;AACd,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;AChFA,OAAO,OAAO;AAId,SAAS,iBAAiB;AAC1B,SAAS,aAAa,uBAAuB;AAKtC,IAAM,gBAAgB,EAAE,KAAK,OAAO;AACpC,IAAM,wBAAwB,cAAc,SAAS;AAErD,IAAM,mBAAmB,EAAE;AAAA,EAChC,OAAO,KAAK,WAAW;AACzB;AAEO,IAAM,wBAAwB,EAClC,OAAO,EACP,OAAO,WAAW,qBAAqB;AAEnC,IAAM,sBAAwD,EAClE,OAAO,EACP,OAAO,iBAAiB,wBAAwB;AAE5C,IAAM,qBAAsD,EAChE,MAAM,CAAC,uBAAuB,mBAAmB,CAAC,EAClD,UAAU,aAAW,OAAuB;AAExC,IAAM,qBAAqB,EAAE,mBAAmB,WAAW;AAAA,EAChE,EAAE,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,EACX,CAAC;AAAA,EACD,EAAE,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS,EAAE,6BAAsB;AAAA,EACnC,CAAC;AACH,CAAC;;;ACjCM,IAAM,OAAO,CAAC,aAAoC;AAAA,EACvD,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV;AAAA,EACA,SACE,oCACI,cAAc,cACd,YAAY,OAAO,EAAE;AAC7B;","names":["Network"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TOOL_PARAMS
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-W37JKCLN.js";
|
|
4
4
|
import {
|
|
5
5
|
zodUrl
|
|
6
6
|
} from "./chunk-FB5CMO3J.js";
|
|
@@ -83,6 +83,7 @@ async function fetchScanEndpoints(origin, dev) {
|
|
|
83
83
|
found: true,
|
|
84
84
|
origin: data.data.origin,
|
|
85
85
|
source: "scan",
|
|
86
|
+
trustTier: "unverified",
|
|
86
87
|
info: {
|
|
87
88
|
title: data.data.title,
|
|
88
89
|
description: data.data.description
|
|
@@ -106,4 +107,4 @@ export {
|
|
|
106
107
|
discoverResourcesSchema,
|
|
107
108
|
discoverResources
|
|
108
109
|
};
|
|
109
|
-
//# sourceMappingURL=chunk-
|
|
110
|
+
//# sourceMappingURL=chunk-K3WB4R2P.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/operations/discover.ts"],"sourcesContent":["import {\n discoverOriginSchema,\n GuidanceMode,\n type HttpMethod,\n type AuthMode,\n} from '@agentcash/discovery';\n\nimport { log } from '@/shared/log';\nimport z from 'zod';\nimport { TOOL_PARAMS } from '@/shared/descriptions';\nimport { zodUrl } from '@/shared/url';\nimport { getBaseUrl } from '@/shared/utils';\nimport type { GlobalFlags } from '@/types';\n\nexport const discoverResourcesSchema = z.object({\n url: zodUrl.describe(TOOL_PARAMS.discoverApiEndpoints.url),\n includeGuidance: z\n .boolean()\n .optional()\n .describe(TOOL_PARAMS.discoverApiEndpoints.includeGuidance),\n});\n\nexport type DiscoverResourcesInput = z.input<typeof discoverResourcesSchema>;\n\n/**\n * Discover payment-protected resources on an origin.\n * Fetches OpenAPI spec, builds endpoint index, and fetches guidance.\n *\n * Returns DiscoverOriginSchemaSuccess on success, DiscoverOriginSchemaNotFound with cause on failure.\n */\nexport interface DiscoverOptions {\n flags?: GlobalFlags;\n}\n\nexport async function discoverResources(\n surface: string,\n args: DiscoverResourcesInput,\n options?: DiscoverOptions\n) {\n const parsedArgs = discoverResourcesSchema.safeParse(args);\n if (!parsedArgs.success) {\n return {\n found: false as const,\n cause: 'invalid_input' as const,\n message: parsedArgs.error.message,\n };\n }\n\n const { url, includeGuidance } = parsedArgs.data;\n\n const guidance =\n includeGuidance === true\n ? GuidanceMode.Always\n : includeGuidance === false\n ? GuidanceMode.Never\n : GuidanceMode.Auto;\n\n const result = await discoverOriginSchema({ target: url, guidance });\n\n if (result.found) {\n return {\n ...result,\n endpoints: result.endpoints.map(e => ({ ...e })),\n };\n }\n\n // Fallback: check agentcash server for scan-derived endpoints\n const scanResult = await fetchScanEndpoints(\n url,\n options?.flags?.dev ?? false\n );\n if (scanResult) {\n log.info(\n `[discoverResources] scan fallback found ${scanResult.endpoints.length} endpoints for ${url}`\n );\n return scanResult;\n }\n\n log.error(`[discoverResources] failed`, {\n surface,\n url,\n cause: result.cause,\n message: result.message,\n });\n return result;\n}\n\nconst scanEndpointSchema = z.object({\n method: z.string(),\n path: z.string(),\n summary: z.string().optional().default(''),\n authMode: z.string().optional(),\n price: z.string().optional(),\n});\n\nconst scanResponseSchema = z.object({\n origin: z.string(),\n title: z.string().optional().default(''),\n description: z.string().optional().default(''),\n endpoints: z.array(scanEndpointSchema),\n});\n\nasync function fetchScanEndpoints(origin: string, dev: boolean) {\n const baseUrl = getBaseUrl(dev);\n const url = `${baseUrl}/api/discover/scan?origin=${encodeURIComponent(origin)}`;\n\n return fetch(url, {\n signal: AbortSignal.timeout(5_000),\n })\n .then(async res => {\n if (!res.ok) return null;\n\n const data = scanResponseSchema.safeParse(await res.json());\n if (!data.success || data.data.endpoints.length === 0) return null;\n\n return {\n found: true as const,\n origin: data.data.origin,\n source: 'scan' as const,\n info: {\n title: data.data.title,\n description: data.data.description,\n },\n endpoints: data.data.endpoints.map(e => ({\n path: e.path,\n method: (e.method || 'GET').toUpperCase() as HttpMethod,\n summary: e.summary,\n authMode: (e.authMode as AuthMode) ?? undefined,\n protocols: ['x402' as const],\n price: e.price,\n })),\n guidanceAvailable: false,\n guidanceTokens: 0,\n guidance: undefined,\n };\n })\n .catch(() => null);\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/operations/discover.ts"],"sourcesContent":["import {\n discoverOriginSchema,\n GuidanceMode,\n type HttpMethod,\n type AuthMode,\n} from '@agentcash/discovery';\n\nimport { log } from '@/shared/log';\nimport z from 'zod';\nimport { TOOL_PARAMS } from '@/shared/descriptions';\nimport { zodUrl } from '@/shared/url';\nimport { getBaseUrl } from '@/shared/utils';\nimport type { GlobalFlags } from '@/types';\n\nexport const discoverResourcesSchema = z.object({\n url: zodUrl.describe(TOOL_PARAMS.discoverApiEndpoints.url),\n includeGuidance: z\n .boolean()\n .optional()\n .describe(TOOL_PARAMS.discoverApiEndpoints.includeGuidance),\n});\n\nexport type DiscoverResourcesInput = z.input<typeof discoverResourcesSchema>;\n\n/**\n * Discover payment-protected resources on an origin.\n * Fetches OpenAPI spec, builds endpoint index, and fetches guidance.\n *\n * Returns DiscoverOriginSchemaSuccess on success, DiscoverOriginSchemaNotFound with cause on failure.\n */\nexport interface DiscoverOptions {\n flags?: GlobalFlags;\n}\n\nexport async function discoverResources(\n surface: string,\n args: DiscoverResourcesInput,\n options?: DiscoverOptions\n) {\n const parsedArgs = discoverResourcesSchema.safeParse(args);\n if (!parsedArgs.success) {\n return {\n found: false as const,\n cause: 'invalid_input' as const,\n message: parsedArgs.error.message,\n };\n }\n\n const { url, includeGuidance } = parsedArgs.data;\n\n const guidance =\n includeGuidance === true\n ? GuidanceMode.Always\n : includeGuidance === false\n ? GuidanceMode.Never\n : GuidanceMode.Auto;\n\n const result = await discoverOriginSchema({ target: url, guidance });\n\n if (result.found) {\n return {\n ...result,\n endpoints: result.endpoints.map(e => ({ ...e })),\n };\n }\n\n // Fallback: check agentcash server for scan-derived endpoints\n const scanResult = await fetchScanEndpoints(\n url,\n options?.flags?.dev ?? false\n );\n if (scanResult) {\n log.info(\n `[discoverResources] scan fallback found ${scanResult.endpoints.length} endpoints for ${url}`\n );\n return scanResult;\n }\n\n log.error(`[discoverResources] failed`, {\n surface,\n url,\n cause: result.cause,\n message: result.message,\n });\n return result;\n}\n\nconst scanEndpointSchema = z.object({\n method: z.string(),\n path: z.string(),\n summary: z.string().optional().default(''),\n authMode: z.string().optional(),\n price: z.string().optional(),\n});\n\nconst scanResponseSchema = z.object({\n origin: z.string(),\n title: z.string().optional().default(''),\n description: z.string().optional().default(''),\n endpoints: z.array(scanEndpointSchema),\n});\n\nasync function fetchScanEndpoints(origin: string, dev: boolean) {\n const baseUrl = getBaseUrl(dev);\n const url = `${baseUrl}/api/discover/scan?origin=${encodeURIComponent(origin)}`;\n\n return fetch(url, {\n signal: AbortSignal.timeout(5_000),\n })\n .then(async res => {\n if (!res.ok) return null;\n\n const data = scanResponseSchema.safeParse(await res.json());\n if (!data.success || data.data.endpoints.length === 0) return null;\n\n return {\n found: true as const,\n origin: data.data.origin,\n source: 'scan' as const,\n trustTier: 'unverified' as const,\n info: {\n title: data.data.title,\n description: data.data.description,\n },\n endpoints: data.data.endpoints.map(e => ({\n path: e.path,\n method: (e.method || 'GET').toUpperCase() as HttpMethod,\n summary: e.summary,\n authMode: (e.authMode as AuthMode) ?? undefined,\n protocols: ['x402' as const],\n price: e.price,\n })),\n guidanceAvailable: false,\n guidanceTokens: 0,\n guidance: undefined,\n };\n })\n .catch(() => null);\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAGP,OAAO,OAAO;AAMP,IAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,KAAK,OAAO,SAAS,YAAY,qBAAqB,GAAG;AAAA,EACzD,iBAAiB,EACd,QAAQ,EACR,SAAS,EACT,SAAS,YAAY,qBAAqB,eAAe;AAC9D,CAAC;AAcD,eAAsB,kBACpB,SACA,MACA,SACA;AACA,QAAM,aAAa,wBAAwB,UAAU,IAAI;AACzD,MAAI,CAAC,WAAW,SAAS;AACvB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS,WAAW,MAAM;AAAA,IAC5B;AAAA,EACF;AAEA,QAAM,EAAE,KAAK,gBAAgB,IAAI,WAAW;AAE5C,QAAM,WACJ,oBAAoB,OAChB,aAAa,SACb,oBAAoB,QAClB,aAAa,QACb,aAAa;AAErB,QAAM,SAAS,MAAM,qBAAqB,EAAE,QAAQ,KAAK,SAAS,CAAC;AAEnE,MAAI,OAAO,OAAO;AAChB,WAAO;AAAA,MACL,GAAG;AAAA,MACH,WAAW,OAAO,UAAU,IAAI,QAAM,EAAE,GAAG,EAAE,EAAE;AAAA,IACjD;AAAA,EACF;AAGA,QAAM,aAAa,MAAM;AAAA,IACvB;AAAA,IACA,SAAS,OAAO,OAAO;AAAA,EACzB;AACA,MAAI,YAAY;AACd,QAAI;AAAA,MACF,2CAA2C,WAAW,UAAU,MAAM,kBAAkB,GAAG;AAAA,IAC7F;AACA,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,8BAA8B;AAAA,IACtC;AAAA,IACA;AAAA,IACA,OAAO,OAAO;AAAA,IACd,SAAS,OAAO;AAAA,EAClB,CAAC;AACD,SAAO;AACT;AAEA,IAAM,qBAAqB,EAAE,OAAO;AAAA,EAClC,QAAQ,EAAE,OAAO;AAAA,EACjB,MAAM,EAAE,OAAO;AAAA,EACf,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE;AAAA,EACzC,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,OAAO,EAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AAED,IAAM,qBAAqB,EAAE,OAAO;AAAA,EAClC,QAAQ,EAAE,OAAO;AAAA,EACjB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE;AAAA,EACvC,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE;AAAA,EAC7C,WAAW,EAAE,MAAM,kBAAkB;AACvC,CAAC;AAED,eAAe,mBAAmB,QAAgB,KAAc;AAC9D,QAAM,UAAU,WAAW,GAAG;AAC9B,QAAM,MAAM,GAAG,OAAO,6BAA6B,mBAAmB,MAAM,CAAC;AAE7E,SAAO,MAAM,KAAK;AAAA,IAChB,QAAQ,YAAY,QAAQ,GAAK;AAAA,EACnC,CAAC,EACE,KAAK,OAAM,QAAO;AACjB,QAAI,CAAC,IAAI,GAAI,QAAO;AAEpB,UAAM,OAAO,mBAAmB,UAAU,MAAM,IAAI,KAAK,CAAC;AAC1D,QAAI,CAAC,KAAK,WAAW,KAAK,KAAK,UAAU,WAAW,EAAG,QAAO;AAE9D,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ,KAAK,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,MAAM;AAAA,QACJ,OAAO,KAAK,KAAK;AAAA,QACjB,aAAa,KAAK,KAAK;AAAA,MACzB;AAAA,MACA,WAAW,KAAK,KAAK,UAAU,IAAI,QAAM;AAAA,QACvC,MAAM,EAAE;AAAA,QACR,SAAS,EAAE,UAAU,OAAO,YAAY;AAAA,QACxC,SAAS,EAAE;AAAA,QACX,UAAW,EAAE,YAAyB;AAAA,QACtC,WAAW,CAAC,MAAe;AAAA,QAC3B,OAAO,EAAE;AAAA,MACX,EAAE;AAAA,MACF,mBAAmB;AAAA,MACnB,gBAAgB;AAAA,MAChB,UAAU;AAAA,IACZ;AAAA,EACF,CAAC,EACA,MAAM,MAAM,IAAI;AACrB;","names":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TOOL_PARAMS
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-W37JKCLN.js";
|
|
4
4
|
import {
|
|
5
5
|
safeFetchJson
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-RAS5DZPQ.js";
|
|
7
7
|
import {
|
|
8
8
|
EVM_CONFIGS,
|
|
9
9
|
chainId,
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
solanaAddressSchema,
|
|
12
12
|
typedAddressSchema,
|
|
13
13
|
usdc
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-HTGTKVXB.js";
|
|
15
15
|
import {
|
|
16
16
|
getBaseUrl
|
|
17
17
|
} from "./chunk-U6FRXL3X.js";
|
|
@@ -526,9 +526,7 @@ var bridge = async (args, wallets) => {
|
|
|
526
526
|
createWalletClient({
|
|
527
527
|
account: wallets.evm,
|
|
528
528
|
chain: EVM_CONFIGS[from].chain,
|
|
529
|
-
transport: http(
|
|
530
|
-
from === "tempo" /* TEMPO */ ? "https://eng:acard-melody-fashion-finish@rpc.mainnet.tempo.xyz" : void 0
|
|
531
|
-
)
|
|
529
|
+
transport: http(EVM_CONFIGS[from].rpcUrl)
|
|
532
530
|
})
|
|
533
531
|
);
|
|
534
532
|
return executeResult.map(
|
|
@@ -541,4 +539,4 @@ export {
|
|
|
541
539
|
bridgeSchema,
|
|
542
540
|
bridge
|
|
543
541
|
};
|
|
544
|
-
//# sourceMappingURL=chunk-
|
|
542
|
+
//# sourceMappingURL=chunk-MKA2PTOE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/operations/bridge.ts","../../src/shared/network.ts","../../../../internal/bridge/src/quote.ts","../../../../internal/bridge/src/client.ts","../../../../internal/bridge/src/execute.ts","../../../../internal/bridge/src/relay-svm-wallet-adapter.ts","../../src/shared/neverthrow/bridge/index.ts"],"sourcesContent":["import z from 'zod';\n\nimport { createWalletClient, http } from 'viem';\n\nimport { EVM_CONFIGS, Network, networkSchema } from '@agentcash/networks';\n\nimport { toTypedNetworkAddress } from '@/shared/network';\nimport { TOOL_PARAMS } from '@/shared/descriptions';\nimport {\n safeExecuteQuote,\n safeExecuteSolana,\n safeGetBridgeDepositQuote,\n} from '@/shared/neverthrow/bridge';\nimport { safeFetchJson } from '@/shared/neverthrow/fetch';\nimport { getBaseUrl } from '@/shared/utils';\n\nimport type { Wallets } from '@/wallet';\nimport type { Execute } from '@agentcash/bridge';\nimport type { GlobalFlags } from '@/types';\n\nexport const bridgeSchema = z\n .object({\n from: networkSchema.describe(TOOL_PARAMS.bridge.from),\n to: networkSchema.describe(TOOL_PARAMS.bridge.to),\n amount: z.number().positive().describe(TOOL_PARAMS.bridge.amount),\n })\n .refine(({ from, to }) => from !== to, {\n message: 'From and to networks cannot be the same',\n });\n\nexport type BridgeInput = z.input<typeof bridgeSchema>;\n\nexport const bridge = async (\n args: GlobalFlags<z.infer<typeof bridgeSchema>>,\n wallets: Wallets\n) => {\n const { from, to, amount } = args;\n\n if (from === Network.SOLANA) {\n const request = new Request(`${getBaseUrl(args.dev)}/api/bridge/solana`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify({\n fromAddress: wallets.svm.address,\n to: toTypedNetworkAddress(to, wallets),\n amount,\n }),\n });\n const response = await safeFetchJson(\n 'bridge',\n request,\n z.object({\n success: z.literal(true),\n partiallySignedTransaction: z.string(),\n quote: z.custom<Execute>(),\n })\n );\n\n if (response.isErr()) {\n return response;\n }\n\n const { partiallySignedTransaction, quote } = response.value;\n\n const executeResult = await safeExecuteSolana('bridge', {\n quote,\n signer: wallets.svm,\n partiallySignedTransaction,\n });\n\n return executeResult.map(\n result => result.data.details ?? { success: true }\n );\n } else {\n const quote = await safeGetBridgeDepositQuote('bridge', {\n from: toTypedNetworkAddress(from, wallets),\n to: toTypedNetworkAddress(to, wallets),\n amount,\n });\n\n if (quote.isErr()) {\n return quote;\n }\n\n const executeResult = await safeExecuteQuote(\n 'bridge',\n quote.value,\n createWalletClient({\n account: wallets.evm,\n chain: EVM_CONFIGS[from].chain,\n transport: http(EVM_CONFIGS[from].rpcUrl),\n })\n );\n\n return executeResult.map(\n result => result.data.details ?? { success: true }\n );\n }\n};\n","import { Network } from '@agentcash/networks';\n\nimport type { TypedNetworkAddress } from '@agentcash/networks';\nimport type { Wallets } from '@/wallet';\n\nexport const toTypedNetworkAddress = (\n network: Network,\n wallets: Wallets\n): TypedNetworkAddress => {\n if (network === Network.SOLANA) {\n return {\n address: wallets.svm.address,\n network: Network.SOLANA,\n };\n }\n return {\n address: wallets.evm.address,\n network: network,\n };\n};\n","import {\n Network,\n solanaAddressSchema,\n typedAddressSchema,\n usdc,\n} from '@agentcash/networks';\nimport z from 'zod';\n\nimport { relayClient, relayChainId } from './client';\n\nexport const getBridgeDepositQuoteSchema = z.object({\n from: typedAddressSchema,\n to: typedAddressSchema,\n amount: z.number(),\n depositFeePayer: solanaAddressSchema.optional(),\n});\n\nexport const getBridgeDepositQuote = async (\n input: z.input<typeof getBridgeDepositQuoteSchema>\n) => {\n const parseResult = getBridgeDepositQuoteSchema.safeParse(input);\n if (!parseResult.success) {\n throw new Error('Invalid input');\n }\n\n const { from, to, amount, depositFeePayer } = parseResult.data;\n\n const fromCurrency = usdc(from.network);\n const toCurrency = usdc(to.network);\n\n return await relayClient.actions.getQuote({\n chainId: relayChainId(from.network),\n toChainId: relayChainId(to.network),\n currency: fromCurrency.address,\n toCurrency: toCurrency.address,\n tradeType: 'EXACT_INPUT',\n user: from.address,\n recipient: to.address,\n amount: (amount * 10 ** fromCurrency.decimals).toString(),\n options: {\n refundTo: from.address,\n depositFeePayer:\n from.network === Network.SOLANA ? depositFeePayer : undefined,\n usePermit: from.network !== Network.SOLANA,\n },\n });\n};\n","import {\n createClient,\n convertViemChainToRelayChain,\n MAINNET_RELAY_API,\n} from '@relayprotocol/relay-sdk';\n\nimport { Network, chainId, EVM_CONFIGS } from '@agentcash/networks';\n\nimport type { RelayChain } from '@relayprotocol/relay-sdk';\n\nexport const SOLANA_RELAY_CHAIN: RelayChain = {\n id: 792703809,\n name: 'solana',\n displayName: 'Solana',\n httpRpcUrl: 'https://api.mainnet-beta.solana.com',\n wsRpcUrl: '',\n explorerUrl: 'https://solscan.io',\n depositEnabled: true,\n tokenSupport: 'All',\n currency: {\n id: 'sol',\n symbol: 'SOL',\n name: 'Solana',\n address: '11111111111111111111111111111111',\n decimals: 9,\n supportsBridging: true,\n },\n featuredTokens: [\n {\n id: 'sol',\n symbol: 'SOL',\n name: 'Solana',\n address: '11111111111111111111111111111111',\n decimals: 9,\n supportsBridging: true,\n metadata: {\n logoURI:\n 'https://upload.wikimedia.org/wikipedia/en/b/b9/Solana_logo.png',\n },\n },\n {\n id: 'usdc',\n symbol: 'USDC',\n name: 'USD Coin',\n address: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n decimals: 6,\n supportsBridging: true,\n metadata: {\n logoURI:\n 'https://coin-images.coingecko.com/coins/images/6319/large/usdc.png?1696506694',\n },\n },\n {\n id: 'usdt',\n symbol: 'USDT',\n name: 'USDT',\n address: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',\n decimals: 6,\n supportsBridging: true,\n metadata: {\n logoURI:\n 'https://coin-images.coingecko.com/coins/images/325/large/Tether.png?1696501661',\n },\n },\n ],\n erc20Currencies: [\n {\n id: 'pengu',\n symbol: 'PENGU',\n name: 'Pudgy Penguins',\n address: '2zMMhcVQEXDtdE6vsFS7S7D5oUodfJHE8vd1gnBouauv',\n decimals: 6,\n supportsBridging: true,\n withdrawalFee: 25,\n depositFee: 0,\n surgeEnabled: false,\n },\n {\n id: 'usdc',\n symbol: 'USDC',\n name: 'USD Coin',\n address: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n decimals: 6,\n supportsBridging: true,\n supportsPermit: true,\n withdrawalFee: 2.25,\n depositFee: 2,\n surgeEnabled: false,\n },\n {\n id: 'usdt',\n symbol: 'USDT',\n name: 'USDT',\n address: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',\n decimals: 6,\n supportsBridging: true,\n withdrawalFee: 5,\n depositFee: 2,\n surgeEnabled: false,\n },\n {\n id: 'cash',\n symbol: 'CASH',\n name: 'CASH',\n address: 'CASHx9KJUStyftLFWGvEVf59SGeG9sh5FfcnZMVPCASH',\n decimals: 6,\n supportsBridging: true,\n withdrawalFee: 25,\n depositFee: 0,\n surgeEnabled: false,\n },\n {\n id: 'pyusd',\n symbol: 'PYUSD',\n name: 'PayPal USD',\n address: '2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo',\n decimals: 6,\n supportsBridging: true,\n withdrawalFee: 25,\n depositFee: 0,\n surgeEnabled: false,\n },\n ],\n solverCurrencies: [\n {\n id: 'pengu',\n symbol: 'PENGU',\n name: 'Pudgy Penguins',\n address: '2zMMhcVQEXDtdE6vsFS7S7D5oUodfJHE8vd1gnBouauv',\n decimals: 6,\n },\n {\n id: 'usdc',\n symbol: 'USDC',\n name: 'USD Coin',\n address: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n decimals: 6,\n },\n {\n id: 'usdt',\n symbol: 'USDT',\n name: 'USDT',\n address: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',\n decimals: 6,\n },\n {\n id: 'cash',\n symbol: 'CASH',\n name: 'CASH',\n address: 'CASHx9KJUStyftLFWGvEVf59SGeG9sh5FfcnZMVPCASH',\n decimals: 6,\n },\n {\n id: 'pyusd',\n symbol: 'PYUSD',\n name: 'PayPal USD',\n address: '2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo',\n decimals: 6,\n },\n {\n id: 'sol',\n symbol: 'SOL',\n name: 'Solana',\n address: '11111111111111111111111111111111',\n decimals: 9,\n },\n ],\n iconUrl: 'https://assets.relay.link/icons/792703809/light.png',\n vmType: 'svm',\n baseChainId: 1,\n tags: [],\n protocol: {\n v2: {\n chainId: 'solana',\n depository: '99vQwtBwYtrqqD9YSXbdum3KBdxPAVxYTaQ3cfnJSrN2',\n },\n },\n};\n\nexport const relayChainId = (network: Network) => {\n switch (network) {\n case Network.BASE:\n case Network.TEMPO:\n return chainId(network);\n case Network.SOLANA:\n return SOLANA_RELAY_CHAIN.id;\n }\n};\n\nexport const relayClient = createClient({\n baseApiUrl: MAINNET_RELAY_API,\n source: 'https://agentcash.dev',\n chains: [\n ...Object.values(EVM_CONFIGS).map(config =>\n convertViemChainToRelayChain(config.chain)\n ),\n SOLANA_RELAY_CHAIN,\n ],\n});\n","import { adaptViemWallet } from '@relayprotocol/relay-sdk';\n\nimport { relayClient } from './client';\nimport type { AdaptSolanaKitWalletParams } from './relay-svm-wallet-adapter';\nimport { adaptSolanaKitWallet } from './relay-svm-wallet-adapter';\n\nimport type { WalletClient } from 'viem';\nimport type { Execute } from '@relayprotocol/relay-sdk';\n\nexport const executeQuote = async (quote: Execute, account: WalletClient) => {\n return await relayClient.actions.execute({\n wallet: adaptViemWallet(account),\n quote,\n });\n};\n\nexport interface ExecuteSolanaParams extends AdaptSolanaKitWalletParams {\n quote: Execute;\n}\n\nexport const executeSolana = async ({\n quote,\n ...rest\n}: ExecuteSolanaParams) => {\n return await relayClient.actions.execute({\n wallet: adaptSolanaKitWallet(rest),\n quote,\n });\n};\n","import {\n assertIsSendableTransaction,\n assertIsTransactionWithinSizeLimit,\n createSolanaRpc,\n getBase64EncodedWireTransaction,\n getCompiledTransactionMessageDecoder,\n getSignatureFromTransaction,\n getTransactionDecoder,\n getTransactionLifetimeConstraintFromCompiledTransactionMessage,\n isTransactionModifyingSigner,\n isTransactionPartialSigner,\n isTransactionSendingSigner,\n} from '@solana/kit';\nimport { LogLevel, getClient } from '@relayprotocol/relay-sdk';\n\nimport { SOLANA_RELAY_CHAIN } from './client';\n\nimport type { AdaptedWallet } from '@relayprotocol/relay-sdk';\nimport type {\n ClusterUrl,\n Signature,\n Transaction,\n TransactionSigner,\n TransactionWithLifetime,\n TransactionWithinSizeLimit,\n} from '@solana/kit';\n\nconst BASE58_SIGNATURE_REGEX = /^[1-9A-HJ-NP-Za-km-z]+$/;\nconst DEFAULT_CONFIRM_TIMEOUT_MS = 120_000;\nconst DEFAULT_CONFIRM_POLL_MS = 2_000;\n\nexport interface AdaptSolanaKitWalletParams {\n signer: TransactionSigner;\n partiallySignedTransaction: string;\n rpcUrl?: ClusterUrl;\n}\n\ntype SignableTransaction = Transaction &\n TransactionWithLifetime &\n TransactionWithinSizeLimit;\n\nconst assertBase58TransactionSignature = (signature: string | undefined) => {\n if (\n typeof signature !== 'string' ||\n signature.length === 0 ||\n !BASE58_SIGNATURE_REGEX.test(signature)\n ) {\n throw new Error('Invalid Solana signature: expected base58.');\n }\n};\n\nconst sleep = async (ms: number) =>\n await new Promise(resolve => setTimeout(resolve, ms));\n\nasync function decodePartiallySignedTransaction(\n partiallySignedTransaction: string\n): Promise<SignableTransaction> {\n const decodedTransaction = getTransactionDecoder().decode(\n Uint8Array.from(Buffer.from(partiallySignedTransaction, 'base64'))\n );\n const compiledTransactionMessage =\n getCompiledTransactionMessageDecoder().decode(\n decodedTransaction.messageBytes\n );\n const lifetimeConstraint =\n await getTransactionLifetimeConstraintFromCompiledTransactionMessage(\n compiledTransactionMessage\n );\n const transactionWithLifetime = {\n ...decodedTransaction,\n lifetimeConstraint,\n };\n\n assertIsTransactionWithinSizeLimit(transactionWithLifetime);\n\n return transactionWithLifetime;\n}\n\nasync function signTransactionWithSigner(\n transaction: SignableTransaction,\n signer: TransactionSigner\n): Promise<SignableTransaction> {\n if (isTransactionModifyingSigner(signer)) {\n const [signedTransaction] = await signer.modifyAndSignTransactions([\n transaction,\n ]);\n\n if (!signedTransaction) {\n throw new Error('Modifying signer did not return a signed transaction');\n }\n\n return signedTransaction;\n }\n\n if (isTransactionPartialSigner(signer)) {\n const [signatureDictionary] = await signer.signTransactions([transaction]);\n\n if (!signatureDictionary) {\n throw new Error('Transaction signer did not return signatures');\n }\n\n return {\n ...transaction,\n signatures: Object.freeze({\n ...transaction.signatures,\n ...signatureDictionary,\n }),\n };\n }\n\n if (isTransactionSendingSigner(signer)) {\n throw new Error(\n 'TransactionSendingSigner is not supported by Relay Solana adapter'\n );\n }\n\n throw new Error(\n 'Unsupported Solana transaction signer provided to Relay adapter'\n );\n}\n\nexport const adaptSolanaKitWallet = ({\n rpcUrl = SOLANA_RELAY_CHAIN.httpRpcUrl as ClusterUrl,\n signer,\n partiallySignedTransaction,\n}: AdaptSolanaKitWalletParams): AdaptedWallet => {\n const rpc = createSolanaRpc(rpcUrl);\n return {\n vmType: 'svm',\n getChainId: () => Promise.resolve(SOLANA_RELAY_CHAIN.id),\n address: () => Promise.resolve(signer.address),\n handleSignMessageStep: () => {\n throw new Error('Message signing not implemented for Solana');\n },\n handleSendTransactionStep: async () => {\n const client = getClient();\n const decodedTransaction = await decodePartiallySignedTransaction(\n partiallySignedTransaction\n );\n const signedTransaction = await signTransactionWithSigner(\n decodedTransaction,\n signer\n );\n\n assertIsSendableTransaction(signedTransaction);\n const wireTransaction =\n getBase64EncodedWireTransaction(signedTransaction);\n const signature = getSignatureFromTransaction(signedTransaction);\n\n await rpc\n .sendTransaction(wireTransaction, {\n encoding: 'base64',\n skipPreflight: false,\n preflightCommitment: 'confirmed',\n })\n .send();\n\n assertBase58TransactionSignature(signature);\n\n client.log(\n ['Transaction Signature obtained', { signature }],\n LogLevel.Verbose\n );\n\n return signature;\n },\n handleConfirmTransactionStep: async txHash => {\n assertBase58TransactionSignature(txHash);\n\n const deadline = Date.now() + DEFAULT_CONFIRM_TIMEOUT_MS;\n\n while (Date.now() < deadline) {\n const { value: statuses } = await rpc\n .getSignatureStatuses([txHash as Signature])\n .send();\n\n const status = statuses[0];\n\n if (status) {\n if (status.err) {\n throw new Error(\n `Transaction failed: ${JSON.stringify(status.err)}`\n );\n }\n\n if (\n status.confirmationStatus === 'confirmed' ||\n status.confirmationStatus === 'finalized'\n ) {\n return {\n blockHash: status.slot.toString(),\n blockNumber: Number(status.slot),\n txHash,\n };\n }\n }\n\n await sleep(DEFAULT_CONFIRM_POLL_MS);\n }\n\n throw new Error(\n `Transaction not confirmed within ${DEFAULT_CONFIRM_TIMEOUT_MS}ms: ${txHash}`\n );\n },\n switchChain: () => {\n throw new Error('Switching chains not implemented for Solana');\n },\n };\n};\n","import {\n executeQuote,\n executeSolana,\n getBridgeDepositQuote,\n} from '@agentcash/bridge';\nimport { err, resultFromPromise } from '@agentcash/neverthrow';\n\nimport type { BaseBridgeError } from './types';\n\nconst errorType = 'bridge';\n\nexport const bridgeErr = (surface: string, error: BaseBridgeError) =>\n err(errorType, surface, error);\n\nconst bridgeResultFromPromise = <T>(\n surface: string,\n promise: Promise<T>,\n error: (e: unknown) => BaseBridgeError\n) => resultFromPromise(errorType, surface, promise, error);\n\nconst getErrorMessage = (error: unknown, fallback: string) => {\n if (error instanceof Error && error.message) {\n return error.message;\n }\n\n if (typeof error === 'string' && error.length > 0) {\n return error;\n }\n\n return fallback;\n};\n\nexport const safeGetBridgeDepositQuote = (\n surface: string,\n ...args: Parameters<typeof getBridgeDepositQuote>\n) =>\n bridgeResultFromPromise(surface, getBridgeDepositQuote(...args), error => {\n const errorMessage = getErrorMessage(\n error,\n 'Failed to get bridge deposit quote'\n );\n\n return {\n cause: 'get_bridge_deposit_quote',\n errorMessage,\n message: `Failed to get bridge deposit quote: ${errorMessage}`,\n };\n });\n\nexport const safeExecuteQuote = (\n surface: string,\n ...args: Parameters<typeof executeQuote>\n) =>\n bridgeResultFromPromise(surface, executeQuote(...args), error => {\n const errorMessage = getErrorMessage(error, 'Failed to execute quote');\n\n return {\n cause: 'execute_quote',\n errorMessage,\n message: `Failed to execute quote: ${errorMessage}`,\n };\n });\n\nexport const safeExecuteSolana = (\n surface: string,\n ...args: Parameters<typeof executeSolana>\n) =>\n bridgeResultFromPromise(surface, executeSolana(...args), error => {\n const errorMessage = getErrorMessage(\n error,\n 'Failed to execute Solana bridge transaction'\n );\n\n return {\n cause: 'execute_solana',\n errorMessage,\n message: `Failed to execute Solana bridge transaction: ${errorMessage}`,\n };\n });\n"],"mappings":"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","names":["z","z"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
discoverResources
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-K3WB4R2P.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-O57QVTLM.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.
|
|
7
|
+
return "0.15.1";
|
|
8
8
|
}
|
|
9
9
|
const __dirname2 = dirname(fileURLToPath(import.meta.url));
|
|
10
10
|
const pkg = JSON.parse(
|
|
@@ -23,4 +23,4 @@ export {
|
|
|
23
23
|
MCP_VERSION,
|
|
24
24
|
INSTALL_PACKAGE_SPECIFIER
|
|
25
25
|
};
|
|
26
|
-
//# sourceMappingURL=chunk-
|
|
26
|
+
//# sourceMappingURL=chunk-PQXKQJIU.js.map
|
|
@@ -62,6 +62,19 @@ var safeFetchJson = (surface, request, schema, timeout) => {
|
|
|
62
62
|
}));
|
|
63
63
|
}).andThen((data) => safeParse(surface, schema, data));
|
|
64
64
|
};
|
|
65
|
+
var safeReadResponseText = (surface, response) => {
|
|
66
|
+
return resultFromPromise(
|
|
67
|
+
errorType,
|
|
68
|
+
surface,
|
|
69
|
+
(async () => response.clone().text())(),
|
|
70
|
+
() => ({
|
|
71
|
+
cause: "parse",
|
|
72
|
+
message: "Failed to read response body as text",
|
|
73
|
+
statusCode: response.status,
|
|
74
|
+
contentType: response.headers.get("content-type") ?? "Not specified"
|
|
75
|
+
})
|
|
76
|
+
);
|
|
77
|
+
};
|
|
65
78
|
var safeParseResponse = (surface, response) => {
|
|
66
79
|
return resultFromPromise(
|
|
67
80
|
errorType,
|
|
@@ -134,7 +147,8 @@ export {
|
|
|
134
147
|
fetchHttpErr,
|
|
135
148
|
safeFetch,
|
|
136
149
|
safeFetchJson,
|
|
150
|
+
safeReadResponseText,
|
|
137
151
|
safeParseResponse,
|
|
138
152
|
isFetchError
|
|
139
153
|
};
|
|
140
|
-
//# sourceMappingURL=chunk-
|
|
154
|
+
//# sourceMappingURL=chunk-RAS5DZPQ.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 safeReadResponseText = (surface: string, response: Response) => {\n // async IIFE so a sync throw from `.clone()` becomes a rejection alongside\n // any `.text()` rejection — `resultFromPromise` captures both.\n return resultFromPromise(\n errorType,\n surface,\n (async () => response.clone().text())(),\n () => ({\n cause: 'parse' as const,\n message: 'Failed to read response body as text',\n statusCode: response.status,\n contentType: response.headers.get('content-type') ?? 'Not specified',\n })\n );\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":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
REQUEST_FETCH_PARAMS,
|
|
3
3
|
REQUEST_PARAMS
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-W37JKCLN.js";
|
|
5
5
|
import {
|
|
6
6
|
RequestMethod
|
|
7
7
|
} from "./chunk-LNJIXYCU.js";
|
|
@@ -30,7 +30,12 @@ var fetchShape = {
|
|
|
30
30
|
paymentNetwork: z.enum(paymentNetworks).optional().describe(REQUEST_FETCH_PARAMS.paymentNetwork),
|
|
31
31
|
paymentProtocol: z.enum(paymentProtocols).optional().describe(REQUEST_FETCH_PARAMS.paymentProtocol),
|
|
32
32
|
maxAmount: z.number().positive().optional().describe(REQUEST_FETCH_PARAMS.maxAmount),
|
|
33
|
-
timeout: z.number().int().positive().optional().describe(REQUEST_PARAMS.timeout)
|
|
33
|
+
timeout: z.number().int().positive().optional().describe(REQUEST_PARAMS.timeout),
|
|
34
|
+
stream: z.boolean().optional().describe(REQUEST_FETCH_PARAMS.stream),
|
|
35
|
+
channelId: z.string().regex(
|
|
36
|
+
/^0x[0-9a-fA-F]{64}$/,
|
|
37
|
+
"channelId must be a 0x-prefixed 32-byte hex string"
|
|
38
|
+
).optional().describe(REQUEST_FETCH_PARAMS.channelId)
|
|
34
39
|
};
|
|
35
40
|
|
|
36
41
|
export {
|
|
@@ -40,4 +45,4 @@ export {
|
|
|
40
45
|
paymentProtocols,
|
|
41
46
|
fetchShape
|
|
42
47
|
};
|
|
43
|
-
//# sourceMappingURL=chunk-
|
|
48
|
+
//# sourceMappingURL=chunk-SLTRGQ7W.js.map
|