mppx 0.9.1 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +7 -0
  3. package/dist/cli/cli.d.ts +1 -0
  4. package/dist/cli/cli.js +36 -36
  5. package/dist/cli/internal.js +2 -2
  6. package/dist/cli/plugins/evm.js +2 -0
  7. package/dist/cli/plugins/index.d.ts +1 -0
  8. package/dist/cli/plugins/index.js +3 -3
  9. package/dist/cli/plugins/x402.d.ts +3 -0
  10. package/dist/cli/plugins/x402.js +61 -0
  11. package/dist/middlewares/internal/mppx.js +17 -3
  12. package/dist/stripe/Methods.d.ts +20 -2
  13. package/dist/stripe/client/Charge.d.ts +20 -2
  14. package/dist/stripe/client/Methods.d.ts +20 -2
  15. package/dist/stripe/internal/constants.d.ts +4 -0
  16. package/dist/stripe/internal/constants.js +2 -0
  17. package/dist/stripe/internal/payment-intent.d.ts +10 -1
  18. package/dist/stripe/internal/payment-intent.js +8 -1
  19. package/dist/stripe/internal/types.d.ts +4 -0
  20. package/dist/stripe/server/Charge.d.ts +20 -2
  21. package/dist/stripe/server/Charge.js +27 -11
  22. package/dist/stripe/server/Methods.d.ts +6 -0
  23. package/dist/stripe/server/Methods.js +19 -2
  24. package/dist/stripe/server/internal/hosted-fee-payer.d.ts +10 -0
  25. package/dist/stripe/server/internal/hosted-fee-payer.js +54 -0
  26. package/dist/stripe/server/internal/html.gen.d.ts +1 -1
  27. package/dist/stripe/server/internal/html.gen.js +1 -1
  28. package/dist/stripe/server/internal/record-payment.d.ts +3 -1
  29. package/dist/stripe/server/internal/record-payment.js +33 -5
  30. package/dist/tempo/internal/account.d.ts +1 -0
  31. package/dist/tempo/internal/remote-fee-payer.d.ts +2 -0
  32. package/dist/tempo/server/internal/html.gen.d.ts +1 -1
  33. package/dist/tempo/server/internal/html.gen.js +1 -1
  34. package/dist/viem/Client.js +1 -0
  35. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
1
  import * as fs from 'node:fs';
2
2
  import * as path from 'node:path';
3
3
  import * as AcceptPayment from '../internal/AcceptPayment.js';
4
- import { evm as evmPlugin, stripe as stripePlugin, tempo as tempoPlugin } from './plugins/index.js';
5
- const builtinPlugins = [tempoPlugin(), stripePlugin(), evmPlugin()];
4
+ import { evm as evmPlugin, stripe as stripePlugin, tempo as tempoPlugin, x402 as x402Plugin, } from './plugins/index.js';
5
+ const builtinPlugins = [tempoPlugin(), stripePlugin(), evmPlugin(), x402Plugin()];
6
6
  export function resolvePlugin(challenge, config) {
7
7
  const configPlugin = config?.plugins?.find((p) => supportsPlugin(p, challenge));
8
8
  if (configPlugin)
@@ -2,11 +2,13 @@ import { createClient, erc20Abi, http } from 'viem';
2
2
  import { readContract } from 'viem/actions';
3
3
  import * as viemChains from 'viem/chains';
4
4
  import { evm as evmMethods, assets as evmAssets } from '../../evm/client/index.js';
5
+ import * as x402_ChallengeBrand from '../../x402/internal/ChallengeBrand.js';
5
6
  import { resolveAccount } from '../account.js';
6
7
  import { createPlugin } from './plugin.js';
7
8
  export function evm() {
8
9
  return createPlugin({
9
10
  method: 'evm',
11
+ supports: (challenge) => challenge.method === 'evm' && !x402_ChallengeBrand.is(challenge),
10
12
  async setup({ challenge }) {
11
13
  const request = challenge.request;
12
14
  const methodDetails = request.methodDetails;
@@ -2,4 +2,5 @@ export { evm } from './evm.js';
2
2
  export { createPlugin, type Plugin } from './plugin.js';
3
3
  export { stripe } from './stripe.js';
4
4
  export { tempo } from './tempo.js';
5
+ export { x402 } from './x402.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
- import{createClient as e,createTransport as t,custom as n,encodeFunctionData as r,erc20Abi as i,getAbiItem as a,getAddress as o,hashTypedData as s,http as c,isAddress as l,isAddressEqual as u,parseUnits as d}from"viem";import{prepareTransactionRequest as f,readContract as p,sendCallsSync as m,sendTransactionSync as h,signTransaction as g,signTypedData as _}from"viem/actions";import*as v from"viem/chains";import{tempo as y}from"viem/chains";import{AbiParameters as b,Base64 as x,Bytes as S,Hash as C,Hex as w,Json as T,Signature as E}from"ox";import{z as D}from"zod/mini";import*as O from"node:child_process";import*as k from"node:fs";import*as A from"node:os";import*as j from"node:path";import{z as M}from"zod";import"node:readline";import{tempo as N,tempoModerato as ee}from"viem/tempo/chains";import{Abis as P,Account as te,Actions as F,Addresses as ne,TokenId as re,Transaction as ie,withFeePayer as ae}from"viem/tempo";import{parseAccount as oe,privateKeyToAccount as se}from"viem/accounts";import{createParser as ce}from"eventsource-parser";import{Channel as le,KeyAuthorization as I,SignatureEnvelope as L,TempoAddress as ue,TxEnvelopeTempo as de}from"ox/tempo";import{defineToken as fe}from"viem/tokens";var pe=Object.defineProperty,me=Object.getOwnPropertyDescriptor,he=Object.getOwnPropertyNames,ge=Object.prototype.hasOwnProperty,_e=(e,t)=>{let n={};for(var r in e)pe(n,r,{get:e[r],enumerable:!0});return t||pe(n,Symbol.toStringTag,{value:`Module`}),n},ve=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=he(t),a=0,o=i.length,s;a<o;a++)s=i[a],!ge.call(e,s)&&s!==n&&pe(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=me(t,s))||r.enumerable});return e},ye=(e,t,n)=>(ve(e,t,`default`),n&&ve(n,t,`default`));const be=Symbol(`mppx.x402.asset`);function xe(e){return{[be]:!0,address:e.address,decimals:e.decimals,network:e.network,transfer:e.transfer}}function Se(e,t){let n=e(t.chainId);return xe({address:n.address,decimals:n.decimals,network:Me(t.chainId),transfer:Pe(t.transfer,n)})}const Ce={USDC:xe({address:`0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`,decimals:6,network:`eip155:8453`,transfer:{name:`USD Coin`,type:`eip3009`,version:`2`}})},we={USDC:xe({address:`0x036CbD53842c5426634e7929541eC2318f3dCF7e`,decimals:6,network:`eip155:84532`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}})},Te={USDC:xe({address:`0xcebA9300f2b948710d2653dD7B07f33A8B32118C`,decimals:6,network:`eip155:42220`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}}),USDT:xe({address:`0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e`,decimals:6,network:`eip155:42220`,transfer:{name:`Tether USD`,type:`eip3009`,version:`1`}})},Ee={USDC:xe({address:`0x01C5C0122039549AD1493B8220cABEdD739BC44E`,decimals:6,network:`eip155:11142220`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}})};function De(e){return typeof e!=`object`||!e?!1:e[be]===!0}function Oe(e){return typeof e==`function`&&typeof e.addresses==`object`&&typeof e.decimals==`number`}function ke(e){return typeof e==`string`}function Ae(e,t){if(De(e))return e.network===t?{address:e.address,decimals:e.decimals,transfer:e.transfer}:void 0;if(Oe(e)){let n=e.addresses[Ne(t)];return n?{address:n,decimals:e.decimals,name:e.name}:void 0}return{address:e}}function je(e,t,n){let r=Ae(e,n);return r?o(r.address)===o(t):!1}function Me(e){return`eip155:${e}`}function Ne(e){return Number(e.slice(7))}function Pe(e,t){if(e.type!==`eip3009`)return e;if(e.name)return{...e,name:e.name};if(!t.name)throw Error(`EIP-3009 token assets require a token name.`);return{...e,name:t.name}}var Fe=_e({base:()=>Ce,baseSepolia:()=>we,celo:()=>Te,celoSepolia:()=>Ee,define:()=>xe,fromToken:()=>Se,isAsset:()=>De,isRawAddress:()=>ke,isToken:()=>Oe,matches:()=>je,resolve:()=>Ae,toChainId:()=>Ne,toNetwork:()=>Me}),Ie=_e({base:()=>Le,baseSepolia:()=>Re,celo:()=>ze,celoSepolia:()=>Be});const Le=8453,Re=84532,ze=42220,Be=11142220,R={acceptPayment:`Accept-Payment`,authorization:`Authorization`,paymentAuthorization:`Payment-Authorization`,paymentReceipt:`Payment-Receipt`,paymentSession:`Payment-Session`,paymentSessionSnapshot:`Payment-Session-Snapshot`,wwwAuthenticate:`WWW-Authenticate`},Ve={payment:`Payment`},He={evm:`evm`,stripe:`stripe`,tempo:`tempo`},Ue={charge:`charge`,session:`session`,subscription:`subscription`},We={sessionProtocol:`sessionProtocol`,sessionSnapshot:`sessionSnapshot`},Ge={v1:`v1`,v2:`v2`};function Ke(e,t){if(!(!e||typeof e!=`object`))return e[t]}function qe(e){let t=x.toString(e);return JSON.parse(t)}function z(e){let t=T.canonicalize(e);return x.fromString(t,{pad:!1,url:!0})}var B=_e({address:()=>H,amount:()=>V,datetime:()=>Ye,datetimeInput:()=>Xe,hash:()=>U,period:()=>$e,signature:()=>W,toDate:()=>Ze,toDatetimeString:()=>Qe,unwrapOptional:()=>et});import*as Je from"zod/mini";ye(B,Je);function V(){return D.string().check(D.regex(/^\d+(\.\d+)?$/,`Invalid amount`))}function Ye(){return D.string().check(D.regex(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/,`Invalid ISO 8601 datetime`))}function Xe(e=`Invalid ISO 8601 datetime`){return D.pipe(D.union([Ye(),D.custom(e=>e instanceof Date)]),D.transform(Ze)).check(D.refine(e=>Number.isFinite(e.getTime()),e))}function Ze(e){return e instanceof Date?e:new Date(e)}function Qe(e){return e instanceof Date?Number.isFinite(e.getTime())?e.toISOString():`Invalid Date`:e}function H(){return D.string().check(D.regex(/^0x[0-9a-fA-F]{40}$/,`Invalid address`))}function U(){return D.string().check(D.regex(/^0x[0-9a-fA-F]{64}$/,`Invalid hash`))}function $e(){return D.string().check(D.regex(/^(day|week|month|year|\d+)$/,`Invalid period`))}function W(){return D.string().check(D.regex(/^0x[0-9a-fA-F]+$/,`Invalid signature`))}function et(e){return e._zod.def.type===`optional`?e._zod.def.innerType:e}const tt=B.object({description:B.optional(B.string()),digest:B.optional(B.string().check(B.regex(/^sha-256=/,`Invalid digest format`))),expires:B.optional(Ye()),header:B.optional(B.string().check(B.regex(/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,`Invalid HTTP header name`))),id:B.string().check(B.minLength(1)),intent:B.string(),method:B.string(),meta:B.optional(B.record(B.string(),B.string())),opaque:B.optional(B.string()),realm:B.string(),request:B.record(B.string(),B.unknown())});function nt(e,t){let{description:n,digest:r,meta:i,method:a,header:o,intent:s,realm:c,request:l,secretKey:u}=e,d=gt(o)?void 0:o,f=e.expires?Qe(e.expires):void 0,p=e.opaque??(i===void 0?void 0:z(i)),m=u?_t({...e,expires:f,...i!==void 0&&{meta:i},opaque:p},{secretKey:u}):e.id;return tt.parse({id:m,realm:c,method:a,intent:s,request:l,...n&&{description:n},...r&&{digest:r},...f&&{expires:f},...d!==void 0&&{header:d},...i!==void 0&&{meta:i},...p!==void 0&&{opaque:p}})}function rt(e){let t=[G(`id`,e.id),G(`realm`,e.realm),G(`method`,e.method),G(`intent`,e.intent),G(`request`,z(e.request))];e.description!==void 0&&t.push(G(`description`,e.description)),e.digest!==void 0&&t.push(G(`digest`,e.digest)),e.expires!==void 0&&t.push(G(`expires`,e.expires));let n=e.header;return n!==void 0&&!gt(n)&&t.push(G(`header`,n)),e.opaque===void 0?e.meta!==void 0&&t.push(G(`opaque`,z(e.meta))):t.push(G(`opaque`,e.opaque)),`${Ve.payment} ${t.join(`, `)}`}function G(e,t){if(/[\r\n]/.test(t))throw Error(`Invalid quoted-string value.`);return`${e}="${t.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`).replace(/[\u0100-\uffff]/g,e=>`\\u${e.charCodeAt(0).toString(16).padStart(4,`0`)}`)}"`}function it(e,t){let n=at(e);if(!n)throw Error(`Missing Payment scheme.`);let{request:r,opaque:i,...a}=ot(n);if(!r)throw Error(`Missing request parameter.`);if(r.length>16384)throw Error(`Request parameter too large.`);if(a.method&&!/^[a-z][a-z0-9:_-]*$/.test(a.method))throw Error(`Invalid method: "${a.method}". Must be lowercase per spec.`);return nt({...a,request:qe(r),...i&&{opaque:i}},t)}function at(e){let t=Ve.payment,[n]=ut(e,t);if(n===void 0)return null;let r=n+t.length;for(;r<e.length&&/\s/.test(e[r]??``);)r++;return e.slice(r)}function ot(e){let t=Object.create(null),n=0;for(;n<e.length;){for(;n<e.length&&/[\s,]/.test(e[n]??``);)n++;if(n>=e.length)break;let r=n;for(;n<e.length&&/[A-Za-z0-9_-]/.test(e[n]??``);)n++;let i=e.slice(r,n).toLowerCase();if(!i)throw Error(`Malformed auth-param.`);for(;n<e.length&&/\s/.test(e[n]??``);)n++;if(e[n]!==`=`)break;for(n++;n<e.length&&/\s/.test(e[n]??``);)n++;let[a,o]=st(e,n);if(n=o,i in t)throw Error(`Duplicate parameter: ${i}`);t[i]=a}return t}function st(e,t){if(e[t]===`"`)return ct(e,t+1);let n=t;for(;n<e.length&&e[n]!==`,`;)n++;return[e.slice(t,n).trim(),n]}function ct(e,t){let n=t,r=!1,i=t,a;for(;n<e.length;){let o=e[n];if(n++,r){a??=[];let t=o===`u`?e.slice(n,n+4):void 0;t&&/^[0-9A-Fa-f]{4}$/.test(t)?(a.push(String.fromCharCode(Number.parseInt(t,16))),n+=4):a.push(o),i=n,r=!1;continue}if(o===`\\`){a??=[],a.push(e.slice(i,n-1)),i=n,r=!0;continue}if(o===`"`)return[a?[...a,e.slice(i,n-1)].join(``):e.slice(t,n-1),n]}throw Error(`Unterminated quoted-string.`)}function lt(e,t,n){if(e.slice(t,t+n.length).toLowerCase()!==n.toLowerCase())return!1;let r=e[t+n.length];return!!(r&&/\s/.test(r))}function ut(e,t){let n=[],r=!1,i=!1;for(let a=0;a<e.length;a++){let o=e[a];if(r){i?i=!1:o===`\\`?i=!0:o===`"`&&(r=!1);continue}if(o===`"`){r=!0;continue}if(!lt(e,a,t))continue;let s=a-1;for(;s>=0&&/\s/.test(e[s]??``);)s--;s>=0&&e[s]!==`,`||n.push(a)}return n}function dt(e,t){if(e.status!==402)throw Error(`Response status is not 402.`);return ft(e.headers,t)}function ft(e,t){let n=e.get(R.wwwAuthenticate);if(!n)throw Error(`Missing ${R.wwwAuthenticate} header.`);return pt(n,t)}function pt(e,t){let n=ut(e,Ve.payment);if(n.length===0)throw Error(`No Payment schemes found.`);return n.map((r,i)=>{let a=i+1<n.length?n[i+1]:e.length;return it(e.slice(r,a).replace(/,\s*$/,``),t)})}function mt(e){let t=[e.realm,e.method,e.intent,z(e.request),e.expires??``,e.digest??``],n=e.header;return n!==void 0&&!gt(n)&&t.push(n),t.push(e.opaque??(e.meta?z(e.meta):``)),t.join(`|`)}function ht(e){return e.header??R.authorization}function gt(e){return e?.toLowerCase()===R.authorization.toLowerCase()}function _t(e,t){let n=mt(e),r=S.fromString(t.secretKey),i=S.fromString(n),a=C.hmac256(r,i,{as:`Bytes`});return x.fromBytes(a,{url:!0,pad:!1})}var vt=class extends Error{name=`MissingPaymentSchemeError`;constructor(){super(`Missing Payment scheme.`)}},yt=class extends Error{name=`InvalidCredentialEncodingError`;constructor(){super(`Invalid base64url or JSON.`)}};function bt(e){let t=e.match(RegExp(`^${Ve.payment}\\s+(.+)$`,`i`));if(!t?.[1])throw new vt;try{let e=x.toString(t[1]),n=JSON.parse(e),{opaque:r,request:i,meta:a,...o}=n.challenge,{meta:s,opaque:c}=xt(r);return{challenge:tt.parse({...o,...s!==void 0&&{meta:s},...c!==void 0&&{opaque:c},request:qe(i)}),payload:n.payload,...n.source&&{source:n.source}}}catch{throw new yt}}function xt(e){if(e===void 0)return{};if(typeof e==`string`)return{opaque:e};if(!St(e))throw Error(`Invalid opaque.`);return{meta:e,opaque:z(e)}}function St(e){return typeof e!=`object`||!e||Array.isArray(e)?!1:Object.values(e).every(e=>typeof e==`string`)}function Ct(e){let{challenge:t,payload:n,source:r}=e;return{challenge:t,payload:n,...r&&{source:r}}}function K(e){let{meta:t,opaque:n,request:r,...i}=e.challenge,a=n??(t===void 0?void 0:z(t)),o={challenge:{...i,...a!==void 0&&{opaque:a},request:z(r)},payload:e.payload,...e.source&&{source:e.source}},s=JSON.stringify(o),c=x.fromString(s,{pad:!1,url:!0});return`${Ve.payment} ${c}`}var wt=class extends Error{details;status=402;hint;constructor(e,t={}){super(e),this.details=t.details}toProblemDetails(e){return{type:this.type,title:this.title,status:this.status,detail:this.message,...this.details&&Object.keys(this.details).length>0&&{details:this.details},...this.hint&&{hint:this.hint},...e&&{challengeId:e}}}},Tt=class extends wt{name=`InvalidChallengeError`;title=`Invalid Challenge`;status=402;type=`https://paymentauth.org/problems/invalid-challenge`;constructor(e={}){let{id:t,reason:n}=e,r=t?` "${t}"`:``,i=n?`: ${n}`:``;super(`Challenge${r} is invalid${i}.`)}},q=class extends wt{name=`VerificationFailedError`;title=`Verification Failed`;type=`https://paymentauth.org/problems/verification-failed`;constructor(e={}){let{details:t,reason:n}=e;super(n?`Payment verification failed: ${n}.`:`Payment verification failed.`,{details:t})}},Et=class extends wt{name=`PaymentExpiredError`;title=`Payment Expired`;type=`https://paymentauth.org/problems/payment-expired`;constructor(e={}){let{expires:t}=e;super(t?`Payment expired at ${t}.`:`Payment has expired.`)}};function Dt(e,t){if(!e)throw new Tt({...t&&{id:t},reason:`missing required expires field`});if(Number.isNaN(new Date(e).getTime()))throw new Tt({...t&&{id:t},reason:`malformed expires timestamp`});if(new Date(e)<new Date)throw new Et({expires:e})}function Ot(e){return e}function kt(e,t){let{canHandleChallenge:n,context:r,createCredential:i}=t;return{...e,canHandleChallenge:n,context:r,createCredential:i}}function At(e){return{encode(t){return x.fromString(JSON.stringify(e.parse(t)))},decode(t){try{return e.parse(JSON.parse(x.toString(t)))}catch{throw new jt}}}}var jt=class extends Error{name=`InvalidJsonHeaderError`;constructor(){super(`Invalid base64 JSON header.`)}};const Mt=[`exact`],Nt=`PAYMENT-REQUIRED`,Pt=`PAYMENT-SIGNATURE`,Ft=B.string().check(B.minLength(1)),It=B.number().check(B.refine(e=>e>0,`Must be positive`)),J=B.string().check(B.regex(/^\d+$/,`Invalid atomic amount`)),Lt=H(),Rt=B.string().check(B.regex(RegExp(`^eip155:\\d+$`),`Invalid EVM CAIP-2 network`)),zt=B.object({description:B.optional(B.string()),iconUrl:B.optional(B.string()),mimeType:B.optional(B.string()),serviceName:B.optional(B.string()),tags:B.optional(B.array(B.string())),url:Ft});B.discriminatedUnion(`type`,[B.object({name:Ft,type:B.literal(`eip3009`),version:Ft}),B.object({name:B.optional(B.string()),type:B.literal(`permit2`),version:B.optional(B.string())})]);const Bt=B.object({amount:J,asset:Ft,extra:B.optional(B.record(B.string(),B.unknown())),maxTimeoutSeconds:It,network:Rt,payTo:Ft,scheme:B.enum(Mt)}),Vt=B.object({info:B.record(B.string(),B.unknown()),schema:B.record(B.string(),B.unknown())}),Ht=B.record(B.string(),Vt),Ut=B.object({accepts:B.array(Bt).check(B.minLength(1)),error:B.optional(B.string()),extensions:B.optional(Ht),resource:zt,x402Version:B.literal(2)}),Wt=B.object({authorization:B.object({from:Lt,nonce:U(),to:Lt,validAfter:J,validBefore:J,value:J}),signature:W()}),Gt=B.object({permit2Authorization:B.object({deadline:J,from:Lt,nonce:J,permitted:B.object({amount:J,token:Lt}),spender:Lt,witness:B.object({to:Lt,validAfter:J})}),signature:W()}),Kt=B.union([Wt,Gt]),qt=B.object({accepted:Bt,extensions:B.optional(Ht),payload:Kt,resource:B.optional(zt),x402Version:B.literal(2)});B.object({extensions:B.optional(Ht),extra:B.optional(B.record(B.string(),B.unknown())),invalidMessage:B.optional(B.string()),invalidReason:B.optional(B.string()),isValid:B.boolean(),payer:B.optional(B.string())});const Jt=B.object({amount:B.optional(J),errorMessage:B.optional(B.string()),errorReason:B.optional(B.string()),extensions:B.optional(Ht),extra:B.optional(B.record(B.string(),B.unknown())),network:Ft,payer:B.optional(B.string()),success:B.boolean(),transaction:B.string()});function Yt(e){let{extensions:t,resource:n,...r}=e;return Bt.parse(r)}const Xt=At(Ut),Zt=At(qt),Qt=At(Jt);Xt.encode,Xt.decode;function $t(e){try{let t=JSON.parse(x.toString(e));return tn(t)}catch{throw new jt}}const en=Zt.encode;Zt.decode,Qt.encode,Qt.decode;const tn=e=>{if(!e||typeof e!=`object`||Array.isArray(e))throw new jt;let t=e;if(t.x402Version!==2||!Array.isArray(t.accepts))throw new jt;let n=zt.parse(t.resource),r=t.extensions===void 0?void 0:Ht.safeParse(t.extensions).data;return{accepts:t.accepts,...r?{extensions:r}:{},resource:n,x402Version:2}};function nn(e){let t=[z(e.accepted),z(e.resource),z(e.extensions)].join(`|`);return C.sha256(S.fromString(t),{as:`Hex`})}async function rn(e){let t=e.context?.account??e.config.account;if(!t.signTypedData)throw Error(`x402 exact requires a typed-data signer.`);let n=e.challenge.request,r=Yt(n);if(cn(e.config,r),!n.resource)throw Error(`x402 exact EIP-3009 requires resource information.`);let i=n.extensions?.mppx?un(n.extensions):n.extensions,a=r.extra?.assetTransferMethod??`eip3009`;if(a!==`eip3009`)throw Error(`x402 exact ${String(a)} signing is not implemented yet.`);let s=r.extra?.name,c=r.extra?.version;if(typeof s!=`string`||typeof c!=`string`)throw Error(`x402 exact EIP-3009 requires token name and version.`);let l=Math.floor(Date.now()/1e3),u={from:o(t.address),nonce:i?.mppx?nn({accepted:r,extensions:i,resource:n.resource}):fn(),to:o(r.payTo),validAfter:(l-600).toString(),validBefore:(l+r.maxTimeoutSeconds).toString(),value:r.amount},d=await t.signTypedData({domain:{chainId:sn(r.network),name:s,verifyingContract:o(r.asset),version:c},message:{...u,value:BigInt(u.value),validAfter:BigInt(u.validAfter),validBefore:BigInt(u.validBefore)},primaryType:`TransferWithAuthorization`,types:on});return en({accepted:r,...i?{extensions:i}:{},payload:{authorization:u,signature:d},...n.resource?{resource:n.resource}:{},x402Version:2})}function an(e){let t=e.challenge.request,n;try{n=Yt(t),cn(e.config,n)}catch{return!1}if(!t.resource||(n.extra?.assetTransferMethod??`eip3009`)!==`eip3009`)return!1;let r=n.extra?.name,i=n.extra?.version;return typeof r==`string`&&typeof i==`string`}const on={TransferWithAuthorization:[{name:`from`,type:`address`},{name:`to`,type:`address`},{name:`value`,type:`uint256`},{name:`validAfter`,type:`uint256`},{name:`validBefore`,type:`uint256`},{name:`nonce`,type:`bytes32`}]};function sn(e){return Number(e.slice(7))}function cn(e,t){let n=sn(t.network);if(e.networks&&!e.networks.includes(n))throw Error(`x402 exact chain ID is not allowed: ${n}.`);let r=e.currencies??e.assets;if(r?.some(e=>ke(e))&&!e.networks?.length)throw Error(`x402 exact raw currency allowlists require networks.`);if(r){let e=o(t.asset);if(!r.some(n=>je(n,e,t.network)))throw Error(`x402 exact currency is not allowed: ${e}.`)}if(e.maxAtomicAmount!==void 0&&BigInt(t.amount)>BigInt(e.maxAtomicAmount))throw Error(`x402 exact amount exceeds maxAtomicAmount.`);if(e.maxAmount!==void 0){let n=ln(e,t);if(n===void 0)throw Error(`x402 exact maxAmount requires currency decimals.`);if(BigInt(t.amount)>d(e.maxAmount,n))throw Error(`x402 exact amount exceeds maxAmount.`)}}function ln(e,t){let n=e.currencies??e.assets,r=o(t.asset),i=n?.find(e=>je(e,r,t.network)),a=i?Ae(i,t.network):void 0;return a?.decimals===void 0?e.decimals:a.decimals}function un(e){let t=e.mppx;return t?{...e,mppx:{...t,info:{...t.info,nonce:dn()}}}:e}function dn(){return pn().slice(2)}function fn(){return pn()}function pn(){let e=globalThis.crypto;if(!e?.getRandomValues)throw Error(`x402 exact requires crypto randomness.`);let t=e.getRandomValues(new Uint8Array(32));return`0x${Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``)}`}const mn=Symbol.for(`mppx.x402.challenge`);function hn(e){return Object.defineProperty(e,mn,{value:!0}),e}function gn(e){return!!e?.[mn]}const _n=[`authorization`],vn=B.string().check(B.regex(/^\d+$/,`Invalid atomic amount`));B.object({name:B.string().check(B.minLength(1)),version:B.string().check(B.minLength(1))});const yn=B.object({chainId:B.number(),credentialTypes:B.optional(B.array(B.enum(_n)).check(B.minLength(1))),decimals:B.optional(B.number()),permit2Address:B.optional(H()),splits:B.optional(B.array(B.object({amount:vn,recipient:H()})))});B.object({amount:vn,currency:H(),description:B.optional(B.string()),externalId:B.optional(B.string()),methodDetails:yn,recipient:H()});const bn=B.object({amount:V(),chainId:B.number(),currency:H(),credentialTypes:B.optional(B.array(B.enum(_n)).check(B.minLength(1))),decimals:B.number(),description:B.optional(B.string()),externalId:B.optional(B.string()),permit2Address:B.optional(H()),recipient:H(),splits:B.optional(B.array(B.object({amount:vn,recipient:H()})))}),xn=B.object({from:H(),nonce:U(),signature:W(),to:H(),type:B.literal(`authorization`),validAfter:vn,validBefore:vn,value:vn}),Sn={TransferWithAuthorization:[{name:`from`,type:`address`},{name:`to`,type:`address`},{name:`value`,type:`uint256`},{name:`validAfter`,type:`uint256`},{name:`validBefore`,type:`uint256`},{name:`nonce`,type:`bytes32`}]};function Cn(e){return{chainId:e.chainId,name:e.authorization.name,verifyingContract:e.currency,version:e.authorization.version}}function wn(e){return C.keccak256(S.fromString(`${e.id}${e.realm}`),{as:`Hex`})}function Tn(e){return`eip155:${e}`}function En(e){return`did:pkh:eip155:${e.chainId}:${e.address}`}const Dn=Ot({name:`evm`,intent:`charge`,schema:{credential:{payload:xn},request:B.pipe(bn,B.transform(({amount:e,chainId:t,credentialTypes:n=[`authorization`],currency:r,decimals:i,permit2Address:a,recipient:s,splits:c,...l})=>({...l,amount:d(e,i).toString(),currency:o(r),methodDetails:{chainId:t,credentialTypes:n,decimals:i,...a?{permit2Address:o(a)}:{},...c?{splits:c}:{}},recipient:o(s)})))}});function On(e){return kt(Dn,{canHandleChallenge({challenge:t}){return!kn(t)||an({challenge:t,config:e})},context:B.object({account:B.optional(B.custom())}),async createCredential({challenge:t,context:n}){if(kn(t))return rn({challenge:t,config:e,context:n});let r=n?.account??e.account;if(!r.signTypedData)throw Error(`EVM authorization requires a typed-data signer.`);let i=t.request;if(An(e,i),!i.methodDetails.credentialTypes?.includes(`authorization`))throw Error(`EVM authorization is not accepted by this challenge.`);if(i.methodDetails.splits?.length)throw Error(`EVM authorization does not support payment splits.`);let a=jn(e,i),s=t.expires?Math.floor(new Date(t.expires).getTime()/1e3).toString():(Math.floor(Date.now()/1e3)+300).toString();return K(Ct({challenge:t,payload:{from:o(r.address),nonce:wn(t),signature:await r.signTypedData({domain:Cn({authorization:a,chainId:i.methodDetails.chainId,currency:i.currency}),message:{from:o(r.address),nonce:wn(t),to:o(i.recipient),validAfter:0n,validBefore:BigInt(s),value:BigInt(i.amount)},primaryType:`TransferWithAuthorization`,types:Sn}),to:o(i.recipient),type:`authorization`,validAfter:`0`,validBefore:s,value:i.amount},source:En({address:o(r.address),chainId:i.methodDetails.chainId})}))}})}function kn(e){return gn(e)&&e.request.scheme===`exact`&&typeof e.request.network==`string`}function An(e,t){let n=t.methodDetails.chainId,r=Tn(n);if(e.networks&&!e.networks.includes(n))throw Error(`EVM chain ID is not allowed: ${n}.`);let i=e.currencies??e.assets;if(i?.some(e=>ke(e))&&!e.networks?.length)throw Error(`EVM raw currency allowlists require networks.`);if(i){let e=o(t.currency);if(!i.some(t=>je(t,e,r)))throw Error(`EVM currency is not allowed: ${e}.`)}if(e.maxAtomicAmount!==void 0&&BigInt(t.amount)>BigInt(e.maxAtomicAmount))throw Error(`EVM charge amount exceeds maxAtomicAmount.`);if(e.maxAmount!==void 0){let n=Mn(e,t);if(n===void 0)throw Error(`EVM charge maxAmount requires currency decimals.`);if(BigInt(t.amount)>d(e.maxAmount,n))throw Error(`EVM charge amount exceeds maxAmount.`)}}function jn(e,t){let n=e.currencies??e.assets,r=o(t.currency),i=Tn(t.methodDetails.chainId),a=n?.find(e=>je(e,r,i)),s=a?Ae(a,i):void 0;if(s?.transfer?.type===`eip3009`)return{name:s.transfer.name,version:s.transfer.version};if(e.authorization)return e.authorization;throw Error(`EVM authorization requires token name and version.`)}function Mn(e,t){let n=e.currencies??e.assets,r=o(t.currency),i=Tn(t.methodDetails.chainId),a=n?.find(e=>je(e,r,i)),s=a?Ae(a,i):void 0;return s?.decimals===void 0?e.decimals:s.decimals}function Nn(e){return[Nn.charge(e)]}(function(e){e.charge=On,e.assets=Fe,e.chains=Ie})(Nn||={});var Pn=class extends Error{name=`Incur.BaseError`;shortMessage;details;constructor(e,t={}){let n=t.cause instanceof Error?t.cause.message:void 0,r=n?`${e}\n\nDetails: ${n}`:e;super(r,t.cause?{cause:t.cause}:void 0),this.shortMessage=e,this.details=n}walk(e){return Fn(this,e)}},Y=class extends Pn{name=`Incur.IncurError`;code;hint;retryable;exitCode;constructor(e){super(e.message,e.cause?{cause:e.cause}:void 0),this.code=e.code,this.hint=e.hint,this.retryable=e.retryable??!1,this.exitCode=e.exitCode}};function Fn(e,t){if(t){let n=e?.cause;for(;n;){if(t(n))return n;n=n?.cause}return}let n=e;for(;n?.cause;)n=n.cause;return n}const X={mainnet:4217,testnet:42431},In={usdc:`0x20C000000000000000000000b9537d11c60E8b50`,pathUsd:`0x20c0000000000000000000000000000000000000`},Ln={[X.mainnet]:In.usdc,[X.testnet]:In.pathUsd},Rn={[X.mainnet]:`0x33b901018174DDabE4841042ab76ba85D4e24f25`,[X.testnet]:`0xe1c4d3dce17bc111181ddf716f75bae49e61a336`},zn={[X.mainnet]:`https://rpc.tempo.xyz`,[X.testnet]:`https://rpc.moderato.tempo.xyz`},Z=(()=>{let e=process||{},t=e.argv||[],n=e.env||{},r=!(n.NO_COLOR||t.includes(`--no-color`))&&(!!n.FORCE_COLOR||t.includes(`--color`)||(e.stdout||{}).isTTY&&n.TERM!==`dumb`||!!n.CI),i=(e,t,n,r)=>{let i=``,a=0,o=r;do i+=e.substring(a,o)+n,a=o+t.length,o=e.indexOf(t,a);while(~o);return i+e.substring(a)},a=r?(e,t,n=e)=>r=>{let a=`${r}`,o=a.indexOf(t,e.length);return~o?e+i(a,t,n,o)+t:e+a+t}:()=>String;return{isColorSupported:r,reset:a(`\x1B[0m`,`\x1B[0m`),bold:a(`\x1B[1m`,`\x1B[22m`,`\x1B[22m\x1B[1m`),dim:a(`\x1B[2m`,`\x1B[22m`,`\x1B[22m\x1B[2m`),italic:a(`\x1B[3m`,`\x1B[23m`),underline:a(`\x1B[4m`,`\x1B[24m`),inverse:a(`\x1B[7m`,`\x1B[27m`),hidden:a(`\x1B[8m`,`\x1B[28m`),strikethrough:a(`\x1B[9m`,`\x1B[29m`),black:a(`\x1B[30m`,`\x1B[39m`),red:a(`\x1B[31m`,`\x1B[39m`),green:a(`\x1B[32m`,`\x1B[39m`),yellow:a(`\x1B[33m`,`\x1B[39m`),blue:a(`\x1B[34m`,`\x1B[39m`),magenta:a(`\x1B[35m`,`\x1B[39m`),cyan:a(`\x1B[36m`,`\x1B[39m`),white:a(`\x1B[37m`,`\x1B[39m`),gray:a(`\x1B[90m`,`\x1B[39m`),bgBlack:a(`\x1B[40m`,`\x1B[49m`),bgRed:a(`\x1B[41m`,`\x1B[49m`),bgGreen:a(`\x1B[42m`,`\x1B[49m`),bgYellow:a(`\x1B[43m`,`\x1B[49m`),bgBlue:a(`\x1B[44m`,`\x1B[49m`),bgMagenta:a(`\x1B[45m`,`\x1B[49m`),bgCyan:a(`\x1B[46m`,`\x1B[49m`),bgWhite:a(`\x1B[47m`,`\x1B[49m`),blackBright:a(`\x1B[90m`,`\x1B[39m`),redBright:a(`\x1B[91m`,`\x1B[39m`),greenBright:a(`\x1B[92m`,`\x1B[39m`),yellowBright:a(`\x1B[93m`,`\x1B[39m`),blueBright:a(`\x1B[94m`,`\x1B[39m`),magentaBright:a(`\x1B[95m`,`\x1B[39m`),cyanBright:a(`\x1B[96m`,`\x1B[39m`),whiteBright:a(`\x1B[97m`,`\x1B[39m`),bgBlackBright:a(`\x1B[100m`,`\x1B[49m`),bgRedBright:a(`\x1B[101m`,`\x1B[49m`),bgGreenBright:a(`\x1B[102m`,`\x1B[49m`),bgYellowBright:a(`\x1B[103m`,`\x1B[49m`),bgBlueBright:a(`\x1B[104m`,`\x1B[49m`),bgMagentaBright:a(`\x1B[105m`,`\x1B[49m`),bgCyanBright:a(`\x1B[106m`,`\x1B[49m`),bgWhiteBright:a(`\x1B[107m`,`\x1B[49m`),link(e,t,n){return r?`\x1b]8;;${e}\x07${n?t:Z.underline(t)}\x1b]8;;\x07`:t}}})();function Bn(e,t){return Z.link(e,t)}function Vn(e){return e.startsWith(`tempo:`)}function Hn(e,t,n=6,r){let[i,a]=(Number(e)/10**n).toString().split(`.`),o=i.replace(/\B(?=(\d{3})+(?!\d))/g,`_`),s=r?.explorerUrl&&r.token?Z.dim(Z.link(`${r.explorerUrl}/token/${r.token}`,t,!0)):Z.dim(t);return`${a?`${o}.${a}`:o} ${s}`}const Un={mainnet:zn[X.mainnet],testnet:zn[X.testnet]};function Wn(e,t={}){return e??(t.network?Un[t.network]:void 0)??(process.env.MPPX_RPC_URL?.trim()||process.env.RPC_URL?.trim()||void 0)}async function Gn(t={}){let n=Wn(t.rpcUrl,{network:t.network});if(!n)return N;let{getChainId:r}=await import(`viem/actions`),i=await r(e({transport:c(n)})),a=Object.values(await import(`viem/tempo/chains`)).filter(e=>typeof e==`object`&&!!e&&`id`in e&&e.id===i),o=a.find(e=>`serializers`in e&&e.serializers)??a[0];if(!o)throw Error(`Unknown chain ID ${i} from RPC ${n}`);return o}function Kn(e){return typeof e==`bigint`?e:e.amount}function qn(e){return e.id!==N.id}async function Jn(e,t,n){let{Actions:r}=await import(`viem/tempo`),[i,a]=await Promise.all([r.token.getBalance(e,{account:n,token:t}).then(Kn).catch(()=>0n),r.token.getMetadata(e,{token:t}).catch(()=>({symbol:t}))]);return{balance:i,symbol:{"0x20c0000000000000000000000000000000000000":`PathUSD`,"0x20C000000000000000000000b9537d11c60E8b50":`USDC`}[t]??a.symbol,decimals:`decimals`in a&&typeof a.decimals==`number`?a.decimals:6,token:t}}function Yn(){let e=Number.parseInt(process.env.MPPX_KEYCHAIN_COMMAND_TIMEOUT_MS??``,10);return Number.isFinite(e)&&e>0?e:1e4}function Xn(e,t){return`code`in e&&e.code===`ENOENT`&&e.message.includes(t)}function Zn(e){return new Y({code:`KEYCHAIN_UNAVAILABLE`,message:`Linux keyring requires secret-tool. Install libsecret-tools.`,hint:`On Debian/Ubuntu, run: sudo apt install libsecret-tools gnome-keyring dbus-x11`,exitCode:69,cause:e})}function Qn(e){if(e&&Xn(e,`secret-tool`))throw Zn(e)}function $n(e,t){return new Promise(n=>{O.execFile(e,t,{timeout:Yn()},(e,t,r)=>{n({stdout:t.trim(),stderr:r.trim(),error:e})})})}function er(){let e=j.join(process.env.XDG_CONFIG_HOME||j.join(A.homedir(),`.config`),`mppx`,`default`);return{get(){try{return k.readFileSync(e,`utf-8`).trim()||`main`}catch{return`main`}},set(t){k.mkdirSync(j.dirname(e),{recursive:!0}),k.writeFileSync(e,t,`utf-8`)},clear(){try{k.unlinkSync(e)}catch{}}}}function tr(e){return e||(process.env.MPPX_ACCOUNT?.trim()?process.env.MPPX_ACCOUNT:er().get())}function nr(e=`main`){let t=`mppx`;return{async list(){let e=A.platform();if(e===`darwin`){let{stdout:e,error:n}=await $n(`security`,[`dump-keychain`]);if(n)return[];let r=[],i=e.split(`keychain:`);for(let e of i){let n=e.match(/"svce"<blob>="([^"]*)"/),i=e.match(/"acct"<blob>="([^"]*)"/);n?.[1]===t&&i?.[1]&&r.push(i[1])}return r}if(e===`linux`){let{stdout:e,stderr:n,error:r}=await $n(`secret-tool`,[`search`,`--all`,`--unlock`,`service`,t]);if(Qn(r),r)return[];let i=`${e}\n${n}`,a=[],o=i.matchAll(/\baccount = (.+)/g);for(let e of o)e[1]&&a.push(e[1]);return a}throw Error(`Unsupported platform: ${e}`)},async get(){let n=A.platform();if(n===`darwin`){let{stdout:n,error:r}=await $n(`security`,[`find-generic-password`,`-s`,t,`-a`,e,`-w`]);return r?void 0:n}if(n===`linux`){let{stdout:n,error:r}=await $n(`secret-tool`,[`lookup`,`service`,t,`account`,e]);return Qn(r),r?void 0:n||void 0}throw Error(`Unsupported platform: ${n}`)},async set(n){let r=A.platform();if(r===`darwin`){await $n(`security`,[`delete-generic-password`,`-s`,t,`-a`,e]);let{error:r}=await $n(`security`,[`add-generic-password`,`-s`,t,`-a`,e,`-w`,n]);if(r)throw r;return}if(r===`linux`){let r=O.execFile(`secret-tool`,[`store`,`--label`,`${t} ${e}`,`service`,t,`account`,e]),i=setTimeout(()=>r.kill(),Yn());return r.stdin?.write(n),r.stdin?.end(),new Promise((e,t)=>{r.on(`close`,n=>{clearTimeout(i),n===0?e():t(Error(`secret-tool exited with code ${n}`))}),r.on(`error`,e=>{clearTimeout(i),t(Xn(e,`secret-tool`)?Zn(e):e)})})}throw Error(`Unsupported platform: ${r}`)},async delete(){let n=A.platform();if(n===`darwin`){await $n(`security`,[`delete-generic-password`,`-s`,t,`-a`,e]);return}if(n===`linux`){let{error:n}=await $n(`secret-tool`,[`clear`,`service`,t,`account`,e]);Qn(n);return}throw Error(`Unsupported platform: ${n}`)}}}async function rr(e){let{privateKeyToAccount:t}=await import(`viem/accounts`),n=process.env.MPPX_PRIVATE_KEY?.trim();if(n)return{account:t(n),source:`environment`};let r=tr(e),i=await nr(r).get();if(i)return{account:t(i),accountName:r,source:`keychain`};throw Error(`Account "${r}" not found.`)}async function ir(e){return(await rr(e)).account}function ar(e){return e}function or(){return ar({method:`evm`,async setup({challenge:t}){let n=t.request,r=n.methodDetails,a=r?.chainId,o=a?sr(a):void 0,s=n.currency,l=await ir(),u=[...Object.values(Ce),...Object.values(we),...Object.values(Te),...Object.values(Ee)],d=s??``;if(o&&s)try{let t=e({chain:o,transport:c()}),n=await p(t,{address:s,abi:i,functionName:`symbol`});n&&(d=n)}catch{}return{tokenSymbol:d,tokenDecimals:r?.decimals??6,explorerUrl:o?.blockExplorers?.default?.url,methods:[...Nn({account:l,currencies:u})]}}})}function sr(e){return Object.values(v).find(t=>t.id===e)}const cr=B.object({metadata:B.record(B.string(),B.string())}),lr=Ot({name:`stripe`,intent:`charge`,schema:{credential:{payload:B.object({externalId:B.optional(B.string()),spt:B.string()})},request:B.pipe(B.object({amount:V(),currency:B.string(),decimals:B.number(),description:B.optional(B.string()),externalId:B.optional(B.string()),metadata:B.optional(B.record(B.string(),B.string())),networkId:B.string(),paymentIntentOptions:B.optional(cr),paymentMethodTypes:B.array(B.string()).check(B.minLength(1)),recipient:B.optional(B.string())}),B.transform(({amount:e,decimals:t,metadata:n,networkId:r,paymentIntentOptions:i,paymentMethodTypes:a,...o})=>({...o,amount:d(e,t).toString(),methodDetails:{networkId:r,paymentMethodTypes:a,...n!==void 0&&{metadata:n}}})))}});function ur(e){let{client:t,createToken:n,externalId:r,paymentMethod:i}=e;return kt(lr,{context:B.object({paymentMethod:B.optional(B.string())}),async createCredential({challenge:e,context:a}){let o=a?.paymentMethod??i;if(!o)throw Error(`paymentMethod is required (pass via context or parameters)`);let s=e.request.amount,c=e.request.currency,l=typeof e.request.externalId==`string`?e.request.externalId:void 0,u=e.request.methodDetails?.networkId;if(!u)throw Error(`networkId is required in challenge.methodDetails`);let d=e.request.methodDetails?.metadata;if(d?.externalId)throw Error(`methodDetails.metadata.externalId is reserved; use credential externalId instead`);let f=e.expires?Math.floor(new Date(e.expires).getTime()/1e3):Math.floor(Date.now()/1e3)+3600,p=await n({amount:s,challenge:e,client:t,currency:c,expiresAt:f,metadata:d,networkId:u,paymentMethod:o}),m=l??r;return K({challenge:e,payload:{spt:p,...m===void 0?{}:{externalId:m}}})}})}function dr(e){return[ur(e)]}(function(e){e.charge=ur})(dr||={});function fr(){return ar({method:`stripe`,supports(e){return e.method===`stripe`&&e.intent===`charge`},async setup({challenge:e,methodOpts:t}){let n=e.request,r=n.currency,i=mr(M.object({paymentMethod:M.string(),secretKey:M.string().optional()}),t,[`paymentMethod`,`secretKey`]),a=i.secretKey??process.env.MPPX_STRIPE_SECRET_KEY;if(!a)throw new Y({code:`MISSING_ENV`,message:`MPPX_STRIPE_SECRET_KEY environment variable is required for Stripe payments.`,exitCode:2});return{tokenSymbol:r?.toUpperCase()??``,tokenDecimals:n.decimals??2,methods:[dr.charge({paymentMethod:i.paymentMethod,createToken:async({paymentMethod:e,amount:t,currency:n,networkId:r,expiresAt:i,metadata:o})=>{let s=new URLSearchParams({payment_method:e,"usage_limits[currency]":n,"usage_limits[max_amount]":t,"usage_limits[expires_at]":i.toString()}),c=pr(a),l=process.env.MPPX_STRIPE_SPT_URL?process.env.MPPX_STRIPE_SPT_URL:c?`https://api.stripe.com/v1/test_helpers/shared_payment/granted_tokens`:`https://api.stripe.com/v1/shared_payment/issued_tokens`;if(r){let e=c?`seller_details[network_id]`:`seller_details[network_business_profile]`;s.set(e,r)}if(o)for(let[e,t]of Object.entries(o))s.set(`metadata[${e}]`,t);let u={Authorization:`Basic ${btoa(`${a}:`)}`,"Content-Type":`application/x-www-form-urlencoded`,"Stripe-Version":`2026-07-29.preview`},d=await globalThis.fetch(l,{method:`POST`,headers:u,body:s});if(!d.ok){let a=await d.json();if(c&&(o||r)&&a.error.message.includes(`Received unknown parameter`)){let r=new URLSearchParams({payment_method:e,"usage_limits[currency]":n,"usage_limits[max_amount]":t,"usage_limits[expires_at]":i.toString()});if(d=await globalThis.fetch(l,{method:`POST`,headers:u,body:r}),!d.ok)throw new Y({code:`STRIPE_ERROR`,message:`Failed to create SPT: ${(await d.json()).error.message}`,exitCode:77})}else throw new Y({code:`STRIPE_ERROR`,message:`Failed to create SPT: ${a.error.message}`,exitCode:77})}let{id:f}=await d.json();return f}})]}},formatReceiptField(e,t){if(e===`reference`&&typeof t==`string`&&t.startsWith(`pi_`)){let e=process.env.MPPX_STRIPE_SECRET_KEY,n=`https://dashboard.stripe.com${e!==void 0&&pr(e)?`/test`:``}/payments/${t}`;return Z.link(n,t,!0)}}})}function pr(e){return e.startsWith(`sk_test_`)||e.startsWith(`rk_test_`)}function mr(e,t,n){if(t&&typeof t==`object`&&!Array.isArray(t)){let e=Object.keys(t).filter(e=>!n.includes(e));if(e.length)throw Error(`Unsupported CLI method option(s): ${e.join(`, `)}`)}let r=e.safeParse(t??{});if(r.success)return r.data;let i=r.error.issues.map(e=>`${e.path.length?e.path.join(`.`):`options`}: ${e.message}`).join(`, `);throw Error(`Invalid CLI options (${i})`)}function hr(e){let t={};for(let n of e){let e=t[n.name]??={};e[n.intent]=br(n)}return t}function gr(e,t){let n=hr(e),r=Dr(e,n,t),i=e.map((e,t)=>({intent:e.intent,method:e.name,q:r[br(e)]??1,index:t}));return{definition:r,entries:i,header:vr(i),keys:n}}function _r(e){let t=e.split(/\s*,\s*/).map(e=>e.trim()).filter(Boolean);if(t.length===0)throw Error(`Accept-Payment header is empty.`);return t.map((e,t)=>Tr(e,t))}function vr(e){return e.map(({method:e,intent:t,q:n})=>{let r=`${e}/${t}`;return n===1?r:`${r};q=${jr(n)}`}).join(`, `)}function yr(e,t,n){let r=new Map;for(let e of t){let t=br(e),n=r.get(t);n?n.push(e):r.set(t,[e])}return e.flatMap((e,t)=>{let i=r.get(br(e));if(!i)return[];let a=xr(e,n);return!a||a.q<=0?[]:i.filter(t=>t.canHandleChallenge?.({challenge:e})??!0).map(n=>({challenge:e,index:t,match:a,method:n}))}).sort((e,t)=>wr(e.challenge)-wr(t.challenge)||t.match.q-e.match.q||e.index-t.index).map(e=>{let{match:t,...n}=e;return n})}function br(e){let t=e.method??e.name;if(!t)throw Error(`Missing payment method name.`);return`${t}/${e.intent}`}function xr(e,t){let n;for(let r of t){if(!Sr(e,r))continue;let t={...r,specificity:Cr(r)};(!n||t.specificity>n.specificity||t.specificity===n.specificity&&t.q>n.q||t.specificity===n.specificity&&t.q===n.q&&t.index<n.index)&&(n=t)}return n}function Sr(e,t){return(t.method===`*`||t.method===e.method)&&(t.intent===`*`||t.intent===e.intent)}function Cr(e){return Number(e.method!==`*`)+Number(e.intent!==`*`)}function wr(e){return+!!gn(e)}function Tr(e,t){let n=/^(?<method>[^/;\s]+|\*)\s*\/\s*(?<intent>[^/;\s]+|\*)(?<params>(?:\s*;\s*.+)?)$/u.exec(e),r=n?.groups?.method,i=n?.groups?.intent;if(!r||!i)throw Error(`Invalid Accept-Payment entry: ${e}`);Mr(r,`method`),Mr(i,`intent`);let a=1;for(let t of Er(n.groups?.params)){if(!t)continue;let n=/^(?<name>[A-Za-z0-9_-]+)\s*=\s*(?<value>\S+)$/u.exec(t),r=n?.groups?.name,i=n?.groups?.value;if(!r||!i)throw Error(`Invalid Accept-Payment parameter: ${t}`);r===`q`&&(a=kr(i,`Accept-Payment entry "${e}"`))}return{intent:i,method:r,q:a,index:t}}function Er(e){return e?e.split(/\s*;\s*/).filter(Boolean):[]}function Dr(e,t,n){if(!n)return{};let r=typeof n==`function`?n(t):n,i=new Set(e.map(e=>br(e))),a={};for(let[e,t]of Object.entries(r??{})){if(!i.has(e))throw Error(`Unknown payment preference "${e}". Available: ${[...i].join(`, `)}`);a[e]=Or(t,`payment preference "${e}"`)}return a}function Or(e,t){if(typeof e!=`number`||Number.isNaN(e)||!Number.isFinite(e))throw Error(`Invalid q-value for ${t}. Expected a finite number.`);return Ar(e,t)}function kr(e,t){if(!/^0(?:\.\d{0,3})?$|^1(?:\.0{0,3})?$/.test(e))throw Error(`Invalid q-value for ${t}. Expected an HTTP qvalue.`);return Ar(Number(e),t)}function Ar(e,t){if(e<0||e>1)throw Error(`Invalid q-value for ${t}. Expected a value between 0 and 1.`);let n=Math.round(e*1e3);if(Math.abs(e*1e3-n)>1e-9)throw Error(`Invalid q-value for ${t}. Expected at most 3 decimal places.`);return n/1e3}function jr(e){return e.toFixed(3).replace(/\.0+$/,``).replace(/(\.\d*?)0+$/,`$1`)}function Mr(e,t){if(e!==`*`&&!/^[a-z0-9-]+$/.test(e))throw Error(`Invalid Accept-Payment ${t}: ${e}`)}const Nr=[R.authorization,Nt,`PAYMENT-RESPONSE`,Pt];function Pr(e,t,n){let r=new Headers(e.headers);for(let e of Nr)e===R.authorization&&!r.get(e)?.startsWith(`Payment `)||r.delete(e);return r.set(t,n),{...e,headers:r}}function Fr(e){if(typeof e==`string`)try{let t=JSON.parse(e),n=t?.id;return t?.jsonrpc!==`2.0`||typeof t?.method!=`string`?void 0:typeof n==`string`||typeof n==`number`?n:void 0}catch{return}}const Ir=new WeakMap;function Lr(e){let t=Fr(e?.body);if(t===void 0)return;let n=new Headers(e?.headers);if(n.has(`mcp-method`))return t;let r=n.get(`accept`)?.toLowerCase()??``;return r.includes(`application/json`)&&r.includes(`text/event-stream`)?t:void 0}function Rr(e){if(!e||typeof e!=`object`)return;let t=e,n=t.id;if(t.jsonrpc!==`2.0`||n!==void 0&&typeof n!=`string`&&typeof n!=`number`)return;let r=`error`in t;if(r!==`result`in t)return r?Number.isInteger(t.error?.code)&&typeof t.error?.message==`string`?e:void 0:n!==void 0&&typeof t.result==`object`?e:void 0}function zr(e){if(!e||typeof e!=`object`)return;let t=e?.challenges;if(!Array.isArray(t)||t.length===0)return;let n=[];for(let e of t){let t=tt.safeParse(e);if(!t.success)return;n.push(t.data)}let{httpStatus:r,problem:i}=e;return{challenges:n,...typeof r==`number`?{httpStatus:r}:{},...i===void 0?{}:{problem:i}}}function Br(e){if(e)return`error`in e?e.error?.code!==-32042&&e.error?.code!==-32043?void 0:zr(e.error.data):zr(e.result?._meta?.[`org.paymentauth/payment-required`])}function Vr(e,t){return!e||e.id!==t?[]:Br(e)?.challenges??[]}async function Hr(e){let t=e.clone().body?.getReader();if(!t)return;let n=new TextDecoder,r=!1,i,a=ce({onEvent(e){if(!(r||!e.data)&&(r=!0,!(e.event&&e.event!==`message`)))try{i=Rr(JSON.parse(e.data))}catch{}}});try{for(;;){if(r)return i;let{done:e,value:o}=await t.read();if(e)return a.feed(n.decode()),a.reset({consume:!0}),i;a.feed(n.decode(o,{stream:!0}))}}finally{t.cancel().catch(()=>{})}}function Ur(e){let t=Ir.get(e);if(t)return t;let n=(async()=>{let t=e.headers.get(`content-type`)?.toLowerCase()??``;if(t.includes(`application/json`))return e.clone().json().then(Rr).catch(()=>void 0);if(t.includes(`text/event-stream`))return Hr(e)})();return Ir.set(e,n),n}function Wr(){return{getChallenges(e,t){let n=Lr(t);return e.status===402||n===void 0?[]:Ur(e).then(e=>Vr(e,n))},setCredential(e,t){let n=JSON.parse(e.body),r=bt(t);return{...e,body:JSON.stringify({...n,params:{...n.params,_meta:{...n.params?._meta,"org.paymentauth/credential":r}}})}}}}function Gr(){return{getChallenges(e){return e.status!==402||!e.headers.has(R.wwwAuthenticate)?[]:dt(e)},setCredential(e,t,n){return Pr(e,n?.challenge?ht(n.challenge):R.authorization,t)}}}function Kr(){return{getChallenges(e){if(e.status!==402)return[];let t=e.headers.get(Nt);if(!t)return[];let n=$t(t);if(e.url&&n.resource.url!==e.url)throw Error(`x402 payment-required resource does not match response URL.`);return n.accepts.flatMap((e,t)=>{let r=Bt.safeParse(e);if(!r.success)return[];let i=r.data;return hn(nt({id:`x402:${t}`,intent:`charge`,method:`evm`,realm:new URL(n.resource.url).host,request:{...i,...n.extensions?{extensions:n.extensions}:{},resource:n.resource}}))})},setCredential(e,t){return Pr(e,Pt,t)}}}function qr(e){return e}function Jr(){let e=[Gr(),Kr(),Wr()],t=new WeakMap,n=(e,n)=>{for(let r of n)t.set(r,e);return n},r=(t,r)=>{let i=(a,o)=>{for(let s=a;s<e.length;s++){let a=e[s],c=a.getChallenges(t,r);if(c instanceof Promise)return c.then(e=>i(s+1,[...o,...n(a,e)]));o.push(...n(a,c))}return o};return i(0,[])};return qr({name:`http`,isPaymentRequired(e,t){if(e.status===402)return!0;let n=r(e,t);return n instanceof Promise?n.then(e=>e.length>0):n.length>0},getChallenges(e,t){return r(e,t)},setCredential(n,r,i){let a=i?.challenge?t.get(i.challenge):void 0,o=e[0];if(!a&&!o)throw Error(`No protocol to attach the credential.`);return(a??o).setCredential(n,r,i)}})}const Yr=new WeakMap;function Xr(e,t){return Yr.set(e,t),e}function Zr(e){return Yr.has(e)}function Qr(e,t){return Promise.resolve(Yr.get(e)?.(t))}const $r=new WeakMap,ei=new WeakMap;function ti(e,t){return $r.set(e,t),e}function ni(e){$r.delete(e)}function ri(e,t,n){$r.has(e)&&ei.set(t,n)}function ii(e){return ei.get(e)}function ai(e,t){return Promise.resolve($r.get(e)?.(t)??t.response)}const oi=Symbol.for(`mppx.fetch.wrapper`),si=new WeakMap;async function ci(e,t){let n=e?.attempt.settle;if(!n)return t.status!==`pending`;e.attempt.settle=void 0;let r=await n(t);return r||(e.attempt.settle=n),r}function li(e){let{acceptPayment:t,acceptPaymentPolicy:n=`always`,fetch:r=globalThis.fetch,maxPaymentRetries:i=3,methods:a,onChallenge:o,orderChallenges:s,transport:c=Jr()}=e,l=e.eventDispatcher??ui(),u=t??gr(a),d=ji(r),f=async(e,t,r)=>{let p=Ai(e,t?.headers),m=p.has(R.acceptPayment),h=Ii(p,u),g=Oi(e,t,p),_=Di(e,t,p,h.header,m,n),v=await d(Mi(_.input),_.init),y=ki(_.init,await g);if(!await c.isPaymentRequired(v,y))return v;let b=t?.context,{context:x,orderChallenges:S,...C}=y??{},w,T,E,D;try{for(let n=0;n<i;n++){T=await c.getChallenges(v,y);let i=(await Li(yr(T,a,h.entries),S??s))[0];if(!i){if(await ci(D,{challenges:T,response:v,status:`rejected`}),n>0)return v;throw Error(`No method found for challenges: ${T.map(e=>`${e.method}.${e.intent}`).join(`, `)}. Available: ${a.map(e=>`${e.name}.${e.intent}`).join(`, `)}`)}let u=i.challenge;w=u,E=i.method,w.expires&&Dt(w.expires,w.id);let p=Hi(v,_.input,_.input),m=D,g=rt(u),x=m?.method===i.method&&m?.key===g,O=!1;if(m){let e=await ci(m,{challenges:T,response:v,status:x?`pending`:`rejected`});O=x&&!e}D=O?m:void 0;let k=hi(async e=>{if(e===void 0&&O&&m)return m.promise;O&&m&&(await ci(m,{status:`rejected`}),D=void 0);let t=e??b;if(!Zr(i.method))return Fi(u,i.method,t);let n={prepare:()=>Qr(i.method,{challenge:u,context:t,fetch:d,input:p})},r=n.prepare().then(()=>Fi(u,i.method,t,n));return D={attempt:n,key:e===void 0?g:void 0,method:i.method,promise:r},r}),A=await l.emit(`challenge.received`,gi({challenge:u,challenges:T,createCredential:k,init:t,input:e,method:i.method,response:v}))??(o?await o(w,{createCredential:k}):void 0)??await k(),j=D;j&&await j.promise.catch(()=>void 0)!==A&&(await ci(j,{status:`rejected`}),D=void 0),Pi(A),await l.emit(`credential.created`,_i({challenge:u,credential:A,init:t,input:e,method:i.method,response:v})),v=await d(p,c.setCredential({...C,headers:_.headers},A,{challenge:u}));let M=await c.isPaymentRequired(v,y);if(M||(await ci(j,{response:v,status:v.ok?`accepted`:`rejected`}),D=void 0),v.ok&&di(l,`payment.response`)&&await l.emit(`payment.response`,vi({challenge:u,credential:A,init:t,input:e,method:i.method,response:v})),!M)return v.ok?ai(i.method,{challenge:u,credential:A,fetch:d,headers:_.headers,input:p,...r?{refetch:()=>f(Mi(_.input),t,!1)}:{},response:v,signal:Ni(e,t)}):v}T=void 0;try{T=await c.getChallenges(v,y)}catch{}return await ci(D,{challenges:T,response:v,status:`rejected`}),v}catch(n){throw await ci(D,{challenges:T,response:v,status:`rejected`}),await l.emit(`payment.failed`,yi({challenge:w,challenges:T,error:n,init:t,input:e,method:E,response:v})),n}},p=(e,t)=>f(e,t,!0);return p[oi]=d,p}function Q(e){if(!e)return{};if(e instanceof Headers){let t={};return e.forEach((e,n)=>{t[n]=e}),t}return Array.isArray(e)?Object.fromEntries(e):e}function ui(){let e={"*":new Set,"challenge.received":new Set,"credential.created":new Set,"payment.failed":new Set,"payment.response":new Set},t={async emit(t,n){switch(t){case`challenge.received`:{let r;for(let t of e[`challenge.received`]){let e=await fi(t,n);if(typeof e==`string`&&e.length>0){r=e;break}}return await mi(e[`*`],t,n),r}case`credential.created`:await pi(e[`credential.created`],n),await mi(e[`*`],t,n);return;case`payment.failed`:await pi(e[`payment.failed`],n),await mi(e[`*`],t,n);return;case`payment.response`:await pi(e[`payment.response`],n),await mi(e[`*`],t,n);return}},on:(t,n)=>{switch(t){case`*`:case`challenge.received`:case`credential.created`:case`payment.failed`:case`payment.response`:return e[t].add(n),()=>e[t].delete(n);default:throw Error(`Unknown client event "${String(t)}".`)}}};return si.set(t,t=>e[t].size>0||e[`*`].size>0),t}function di(e,t){return si.get(e)?.(t)??!0}async function fi(e,t){try{return await e(t)}catch{return}}async function pi(e,t){for(let n of e)try{await n(t)}catch{}}async function mi(e,t,n){await pi(e,Object.freeze({name:t,payload:n}))}function hi(e){let t;return n=>(t??=e(n),t)}function gi(e){return Object.freeze({challenge:wi(e.challenge),challenges:e.challenges.map(e=>wi(e)),createCredential:e.createCredential,init:bi(e.init),input:xi(e.input),method:Si(e.method),response:Ci(e.response)})}function _i(e){return Object.freeze({challenge:wi(e.challenge),credential:e.credential,init:bi(e.init),input:xi(e.input),method:Si(e.method),...e.response===void 0?{}:{response:Ci(e.response)}})}function vi(e){return Object.freeze({challenge:wi(e.challenge),credential:e.credential,init:bi(e.init),input:xi(e.input),method:Si(e.method),response:Ci(e.response)})}function yi(e){return Object.freeze({...e.challenge?{challenge:wi(e.challenge)}:{},...e.challenges?{challenges:e.challenges.map(e=>wi(e))}:{},error:e.error,init:bi(e.init),input:xi(e.input),...e.method?{method:Si(e.method)}:{},...e.response===void 0?{}:{response:Ci(e.response)}})}function bi(e){if(e)return Ei({...e,...e.headers?{headers:new Headers(e.headers)}:{}})}function xi(e){if(e instanceof Request)try{return e.clone()}catch{return e}return e instanceof URL?new URL(e):e}function Si(e){return Ei(Object.assign({},e))}function Ci(e){return e instanceof Response?e.clone():wi(e)}function wi(e){try{return Ti(structuredClone(e))}catch{return Ei(e)}}function Ti(e){if(!e||typeof e!=`object`||Object.isFrozen(e))return e;Object.freeze(e);for(let t of Object.values(e))Ti(t);return e}function Ei(e){return!e||typeof e!=`object`||Object.isFrozen(e)||Object.freeze(e),e}function Di(e,t,n,r,i,a){let o=!!r&&!i&&Ri(e,a);if(!o)return{headers:n,init:t,input:e};let s=new Headers(e instanceof Request?e.headers:void 0);return n.forEach((e,t)=>{s.set(t,e)}),s.set(R.acceptPayment,r),t?(t.headers=s,{headers:s,init:t,input:e}):{headers:s,init:o?{headers:s}:void 0,input:e}}function Oi(e,t,n){if(!(!(e instanceof Request)||t?.body!==void 0||!e.body||e.bodyUsed)){if(!n.has(`mcp-method`)){let e=n.get(`accept`)?.toLowerCase()??``;if(!e.includes(`application/json`)||!e.includes(`text/event-stream`))return}try{return e.clone().text().catch(()=>void 0)}catch{return}}}function ki(e,t){return t===void 0?e:{...e,body:t}}function Ai(e,t){return t?new Headers(t):new Headers(e instanceof Request?e.headers:void 0)}function ji(e){let t=e;for(;t[oi];)t=t[oi];return t}function Mi(e){if(!(e instanceof Request)||!e.body||e.bodyUsed)return e;try{return e.clone()}catch{return e}}function Ni(e,t){return t?.signal??(e instanceof Request?e.signal:void 0)}function Pi(e){if(!e.trim())throw Error(`Credential header value must be non-empty`);if(e.includes(`\r`)||e.includes(`
2
- `))throw Error(`Credential header value contains illegal newline characters`)}async function Fi(e,t,n,r){let i=t.context&&n!==void 0?t.context.parse(n):void 0,a=i===void 0?{challenge:e}:{challenge:e,context:i};return r&&ri(t,a,r),t.createCredential(a)}function Ii(e,t){let n=e.get(R.acceptPayment);if(!n)return t;try{return{...t,entries:_r(n),header:n}}catch{return t}}async function Li(e,t){return t?t(e):e}function Ri(e,t){if(t===`always`)return!0;if(t===`never`)return!1;let n=Vi(e);return t===`same-origin`?!Bi()||n.origin===globalThis.location.origin:t.origins.some(e=>zi(n,e))}function zi(e,t){if(t.startsWith(`*.`)){let n=t.slice(1);return e.hostname.endsWith(n)||e.hostname===t.slice(2)}return e.origin===new URL(t).origin}function Bi(){return globalThis.location!==void 0}function Vi(e){return e instanceof URL?e:e instanceof Request?new URL(e.url):new URL(e,Bi()?globalThis.location.href:void 0)}function Hi(e,t,n){if(!e.url)return t;let r=new URL(e.url),i=Vi(n);if(r.origin!==i.origin)throw Error(`Refusing to send payment credential across redirect from ${i.origin} to ${r.origin}`);return e.url}function Ui(e={}){let{account:t}=e;return(e,{account:n}={})=>{let r=n??t;if(!r){if(!e.account)throw Error("No `account` provided. Pass `account` to parameters or context.");return e.account}return oe(r)}}function Wi(e){return Object.fromEntries(Object.entries(e.headers??{}).filter(([e])=>e.toLowerCase()!==`content-type`))}const Gi={[N.id]:N,[ee.id]:ee};function Ki(e,t={}){return c(e.url,{fetchOptions:{headers:Wi(e)},...t})}function qi(r){let{chain:i,getClient:a,remoteFeePayer:o,rpcUrl:s}=r;return a?!i?.serializers&&!o?a:async e=>{let r=await a(e),s=r;if(o&&r.transport.key!==`feePayer`){let e=r.request.bind(r),i=ae(n({request:t=>e(t)},{retryCount:0}),Ki(o,{retryCount:r.transport.retryCount}))({account:r.account,chain:r.chain,pollingInterval:r.pollingInterval,retryCount:0}),a=t({...i.config,retryCount:0},i.value);s=Object.assign({},r,{request:a.request,transport:{...a.config,...a.value}})}return!i?.serializers||s.chain?.serializers?.transaction?s:Object.assign({},s,{chain:{...i,...s.chain,formatters:s.chain?.formatters??i.formatters,prepareTransactionRequest:s.chain?.prepareTransactionRequest??i.prepareTransactionRequest,serializers:s.chain?.serializers?.transaction?s.chain.serializers:i.serializers}})}:({chainId:t})=>{if(!s)throw Error("No `rpcUrl` provided.");let n=t||Number(Object.keys(s)[0]),r=s[n];if(!r)throw Error(`No \`rpcUrl\` configured for \`chainId\` (${n}).`);let a=o?ae(c(r),Ki(o)):c(r);return e({chain:Gi[n]??{...i,id:n},transport:a})}}const Ji=w.slice(C.keccak256(S.fromString(`mpp`),{as:`Hex`}),0,4);function Yi(e){let t=C.keccak256(S.fromString(e),{as:`Hex`});return w.toBytes(w.slice(t,0,10))}function Xi(e){let{serverId:t,clientId:n,challengeId:r}=e,i=new Uint8Array(32);return i.set(w.toBytes(Ji),0),i[4]=1,i.set(Yi(t),5),n&&i.set(Yi(n),15),i.set(Zi(r),25),w.fromBytes(i)}function Zi(e){let t=C.keccak256(S.fromString(e),{as:`Hex`});return w.toBytes(w.slice(t,0,7))}function Qi(e,t){return ue.resolve(e).toLowerCase()===ue.resolve(t).toLowerCase()}const $i=[In.pathUsd,In.usdc];async function ea(e,t){let{account:n,amountOut:r,tokenOut:i,tokenIn:a,slippage:o}=t,s=a.filter(e=>!Qi(e,i)),c=await Promise.allSettled([p(e,F.token.getBalance.call(e,{account:n,token:i})),...s.map(t=>p(e,F.token.getBalance.call(e,{account:n,token:t})))]),l=c[0];if(!(l.status===`fulfilled`&&l.value>=r)){for(let t=0;t<s.length;t++){let n=c[t+1];if(n.status!==`fulfilled`)continue;let a=n.value;if(a<=0n)continue;let l=s[t];try{let t=await F.dex.getBuyQuote(e,{tokenIn:l,tokenOut:i,amountOut:r});if(a>=t){let n=t+t*BigInt(Math.round(o*100))/10000n;return[F.token.approve.call(e,{amount:n,spender:ne.stablecoinDex,token:l}),F.dex.buy.call({tokenIn:l,tokenOut:i,amountOut:r,maxAmountIn:n})]}}catch{}}throw new na({currency:i})}}function ta(e,t){return e?e===!0?{tokenIn:t,slippage:1}:{tokenIn:e.tokenIn?[...e.tokenIn,...t.filter(t=>!e.tokenIn.some(e=>Qi(e,t)))]:t,slippage:e.slippage??1}:!1}var na=class extends Error{name=`InsufficientFundsError`;constructor({currency:e}){super(`Insufficient funds: no balance in ${e} and no viable swap route from fallback currencies.`)}};function ra(e){let t=BigInt(e.amount),n=e.methodDetails?.splits??[],r=n.reduce((e,t)=>e+BigInt(t.amount),0n);if(r>=t)throw Error(`Invalid charge request: split total must be less than total amount.`);let i=t-r;if(i<=0n)throw Error(`Invalid charge request: primary transfer amount must be positive.`);return[{amount:i.toString(),memo:e.methodDetails?.memo,recipient:e.recipient},...n.map(e=>({amount:e.amount,memo:e.memo,recipient:e.recipient}))]}function ia(e,t,n){t&&(n&&!n.some(e=>Qi(e,t))||e.some(e=>Qi(e,t))||e.push(t))}async function aa(e,t,n){try{return(await F.token.getBalance(e,{account:t,token:n})).amount>0n}catch{return!1}}function oa(e){let t=e.chain?.feeToken;if(t)return re.toAddress(t);let n=e.chain?.id;return n?Ln[n]:void 0}function sa(e){let t=[];return ia(t,In.pathUsd),ia(t,Ln[e]),t}async function ca(e){let{account:t,allowedTokens:n,candidateTokens:r,client:i,prioritizeCandidates:a}=e,o=[];if(a)for(let e of r??[])ia(o,e,n);if(ia(o,await F.fee.getUserToken(i,{account:t}).then(e=>e?.address).catch(()=>void 0),n),ia(o,oa(i),n),!a)for(let e of r??[])ia(o,e,n);for(let e of o)if(await aa(i,t,e))return e;return o[0]}const la={Proof:[{name:`account`,type:`address`},{name:`challengeId`,type:`string`},{name:`realm`,type:`string`}]};function ua(e){return{name:`MPP`,version:`3`,chainId:e}}function da(e){let{account:t,challengeId:n,realm:r}=e;return{account:t,challengeId:n,realm:r}}function fa(e){let{account:t,chainId:n,challengeId:r,realm:i}=e;return{domain:ua(n),types:la,primaryType:`Proof`,message:da({account:t,challengeId:r,realm:i})}}function pa(e){return`did:pkh:eip155:${e.chainId}:${e.address}`}const ma=[`push`,`pull`],ha=B.object({amount:V(),memo:B.optional(U()),recipient:B.pipe(B.string(),B.transform(e=>e))}),ga=(1n<<64n)-1n,_a={dev_second:1n,day:86400n,week:604800n},va=B.pipe(H(),B.transform(e=>e.toLowerCase())),ya=B.object({accessKeyAddress:va,keyType:B.enum([`p256`,`secp256k1`,`webAuthn`])}),ba=B.object({accessKey:B.optional(ya),chainId:B.optional(B.number())}),xa=Xe(`subscriptionExpires must be a valid date`).check(B.refine(e=>e.getTime()%1e3==0,`subscriptionExpires must be representable as whole seconds`)),Sa=B.enum([`dev_second`,`day`,`week`]),Ca=B.pipe(B.union([B.string(),B.bigint(),B.custom(e=>typeof e==`number`&&Number.isSafeInteger(e))]),B.transform(e=>e.toString())).check(B.regex(/^[1-9]\d*$/,`Invalid periodCount`),B.refine(e=>{try{return BigInt(e)<=ga}catch{return!1}},`periodCount exceeds uint64`));function wa(e){return B.refine(e=>{let{amount:t,decimals:n}=e;return d(t,n)>0n},e)}function Ta(e){let{periodCount:t,periodUnit:n}=e;try{let e=_a[n];return e!==void 0&&BigInt(t)*e<=ga}catch{return!1}}const Ea=Ot({name:`tempo`,intent:`charge`,schema:{credential:{payload:B.discriminatedUnion(`type`,[B.object({hash:U(),type:B.literal(`hash`)}),B.object({signature:W(),type:B.literal(`transaction`)}),B.object({signature:W(),type:B.literal(`proof`)})])},request:B.pipe(B.object({amount:V(),chainId:B.optional(B.number()),currency:B.string(),decimals:B.number(),description:B.optional(B.string()),externalId:B.optional(B.string()),feePayer:B.optional(B.pipe(B.union([B.boolean(),B.custom()]),B.transform(e=>typeof e==`object`||e))),memo:B.optional(U()),recipient:B.optional(B.string()),splits:B.optional(B.array(ha).check(B.minLength(1),B.maxLength(10))),supportedModes:B.optional(B.array(B.enum(ma)).check(B.minLength(1)))}).check(B.refine(({amount:e,decimals:t,splits:n})=>{if(!n)return!0;let r=d(e,t),i=n.reduce((e,n)=>e+d(n.amount,t),0n);return n.every(e=>d(e.amount,t)>0n)&&i<r},`Invalid splits`)),B.transform(({amount:e,chainId:t,decimals:n,feePayer:r,memo:i,splits:a,supportedModes:o,...s})=>({...s,amount:d(e,n).toString(),...t!==void 0||r!==void 0||i!==void 0||a!==void 0||o!==void 0?{methodDetails:{...t!==void 0&&{chainId:t},...r!==void 0&&{feePayer:r},...i!==void 0&&{memo:i},...a!==void 0&&{splits:a.map(e=>({...e,amount:d(e.amount,n).toString()}))},...o!==void 0&&{supportedModes:o}}}:{}})))}}),Da=Ot({name:`tempo`,intent:`session`,schema:{credential:{payload:B.discriminatedUnion(`action`,[B.object({action:B.literal(`open`),authorizedSigner:B.optional(B.string()),channelId:U(),cumulativeAmount:V(),descriptor:B.optional(B.custom()),signature:W(),transaction:W(),type:B.literal(`transaction`)}),B.object({action:B.literal(`topUp`),additionalDeposit:V(),channelId:U(),descriptor:B.optional(B.custom()),transaction:W(),type:B.literal(`transaction`)}),B.object({action:B.literal(`voucher`),channelId:U(),cumulativeAmount:V(),descriptor:B.optional(B.custom()),signature:W()}),B.object({action:B.literal(`close`),channelId:U(),cumulativeAmount:V(),descriptor:B.optional(B.custom()),signature:W()})])},request:B.pipe(B.object({amount:V(),chainId:B.optional(B.number()),channelId:B.optional(U()),currency:B.string(),decimals:B.number(),escrowContract:B.optional(B.string()),feePayer:B.optional(B.pipe(B.union([B.boolean(),B.custom()]),B.transform(e=>typeof e==`object`||e))),feeToken:B.optional(H()),minVoucherDelta:B.optional(V()),operator:B.optional(H()),recipient:B.optional(B.string()),sessionProtocol:B.optional(B.enum([Ge.v2,Ge.v1])),sessionSnapshot:B.optional(B.custom()),suggestedDeposit:B.optional(V()),unitType:B.string()}).check(B.refine(({amount:e,decimals:t})=>d(e,t)>0n,`Session amount must be greater than 0`)),B.transform(({amount:e,chainId:t,channelId:n,decimals:r,escrowContract:i,feePayer:a,feeToken:o,minVoucherDelta:s,operator:c,sessionProtocol:l,sessionSnapshot:u,suggestedDeposit:f,...p})=>({...p,amount:d(e,r).toString(),...f?{suggestedDeposit:d(f,r).toString()}:{},methodDetails:{escrowContract:i,...n!==void 0&&{channelId:n},...s!==void 0&&{minVoucherDelta:d(s,r).toString()},...t!==void 0&&{chainId:t},...a!==void 0&&{feePayer:a},...o!==void 0&&{feeToken:o},...c!==void 0&&{operator:c},...l!==void 0&&{[We.sessionProtocol]:l},...u!==void 0&&{[We.sessionSnapshot]:u}}})))}}),Oa=Ot({name:`tempo`,intent:`subscription`,schema:{credential:{payload:B.object({signature:W(),type:B.literal(`keyAuthorization`)})},request:B.pipe(B.object({amount:V(),accessKey:B.optional(ya),chainId:B.optional(B.number()),currency:va,decimals:B.number(),description:B.optional(B.string()),externalId:B.optional(B.string()),methodDetails:B.optional(ba),periodCount:Ca,periodUnit:Sa,recipient:va,subscriptionExpires:xa}).check(wa(`Subscription amount must be greater than 0`),B.refine(Ta,`Subscription period exceeds uint64`)),B.transform(({accessKey:e,amount:t,chainId:n,decimals:r,methodDetails:i,subscriptionExpires:a,...o})=>{let s={...i,...e!==void 0&&{accessKey:e},...n!==void 0&&{chainId:n}};return{...o,amount:d(t,r).toString(),subscriptionExpires:a.toISOString(),...Object.keys(s).length>0?{methodDetails:s}:{}}}))}}),ka=fe({addresses:{4217:`0x20c000000000000000000000f37de3740ADec032`,42431:`0x20c000000000000000000000f37de3740ADec032`},currency:`USD`,decimals:6,name:`MACH`,symbol:`MACH`}),Aa=B.object({account:B.optional(B.custom()),autoSwap:B.optional(B.custom()),mode:B.optional(B.enum(ma))});function ja(e={}){let{clientId:t}=e,n=qi({chain:N,getClient:e.getClient,rpcUrl:zn}),r=Ui({account:e.account});return kt(Ea,{context:Aa,async createCredential({challenge:i,context:a}){let o=i.request.methodDetails?.chainId;if(e.expectedChainId!==void 0&&o!==void 0&&o!==e.expectedChainId)throw Error(`Chain ID mismatch: expected ${e.expectedChainId}, got ${o}.`);let s=o??e.expectedChainId,c=await n({chainId:s}),l=s??c.chain?.id;if(l===void 0)throw Error("No `chainId` provided. Pass a chain ID in the challenge or client.");let{request:d}=i,{amount:p,methodDetails:v}=d,y=v?.supportedModes??[`pull`,`push`],b=r(c,a);if(BigInt(p)===0n)return K({challenge:i,payload:{signature:await _(c,{account:b,...fa({account:b.address,chainId:l,challengeId:i.id,realm:i.realm})}),type:`proof`},source:pa({address:b.address,chainId:l})});let x=d.currency;if(e.expectedRecipients){let t=new Set(e.expectedRecipients.map(e=>e.toLowerCase())),n=v?.splits;if(n){for(let e of n)if(!t.has(e.recipient.toLowerCase()))throw Error(`Unexpected split recipient: ${e.recipient}`)}}let S=v?.memo?v.memo:Xi({challengeId:i.id,clientId:t,serverId:i.realm}),C=ra({amount:p,methodDetails:{...v,memo:S},recipient:d.recipient}).map(e=>F.token.transfer.call(c,{amount:BigInt(e.amount),...e.memo&&{memo:e.memo},to:e.recipient,token:x})),w=ta(a?.autoSwap??e.autoSwap,$i),T=await e.resolveAccount?.({account:b,chainId:l,operation:{kind:`executeCalls`,...w?{}:{calls:C}}})??b,E=(()=>{let t=a?.mode??e.mode;if(t){if(!y.includes(t))throw Error(`Challenge does not support ${t} mode.`);return t}let n=T.type===`json-rpc`?`push`:`pull`;return y.includes(n)?n:y[0]})(),D=[...(w?await ea(c,{account:T.address,amountOut:BigInt(p),tokenOut:x,tokenIn:w.tokenIn,slippage:w.slippage}):void 0)??[],...C],O=ka.addresses[l],k=sa(l),A=O&&u(x,O)?await ca({account:T.address,allowedTokens:k,candidateTokens:k,client:c,prioritizeCandidates:!0}):void 0,j=(()=>{let e=Math.floor(Date.now()/1e3)+25;if(!i.expires)return e;let t=Math.floor(new Date(i.expires).getTime()/1e3);return Math.min(e,t)})();if(E===`push`){let{receipts:e}=T.type===`local`?{receipts:[await h(c,{account:T,calls:D,...A?{feeToken:A}:{},nonceKey:`expiring`,validBefore:j})]}:await m(c,{account:T,...A?{capabilities:{feeToken:A}}:{},calls:D,experimental_fallback:D.length===1,forceAtomic:D.length>1}),t=e?.[0]?.transactionHash;if(!t)throw Error(`No transaction receipt returned.`);return K({challenge:i,payload:{hash:t,type:`hash`},source:pa({address:T.address,chainId:l})})}let M=await f(c,{account:T,calls:D,...A?{feeToken:A}:{},nonceKey:`expiring`,validBefore:j});if(M.gas=(M.gas??0n)+5000n,v?.feePayer){let e=M;delete e.feePayerSignature,delete e.feeToken,e.feePayer=!0}return K({challenge:i,payload:{signature:await g(c,M),type:`transaction`},source:pa({address:T.address,chainId:l})})}})}function Ma(e){return`accessKeyAddress`in e}function Na(e){return Ma(e)?e.accessKeyAddress:e.address}function Pa(e,t){return{name:`Tempo Stream Channel`,version:`1`,chainId:t,verifyingContract:e}}const Fa={Voucher:[{name:`channelId`,type:`bytes32`},{name:`cumulativeAmount`,type:`uint128`}]};function Ia(e){return{channelId:e.channelId,cumulativeAmount:e.cumulativeAmount}}function La(e,t,n){return s({domain:Pa(e,t),types:Fa,primaryType:`Voucher`,message:Ia(n)})}async function Ra(e,t,n,r,i){return _(e,{account:t,domain:Pa(r,i),types:Fa,primaryType:`Voucher`,message:Ia(n)})}function za(e){let t=L.from(e);if(t.type===`keychain`){if(t.inner.type!==`secp256k1`)throw Error(`Session vouchers only unwrap secp256k1 keychain signatures; pass a direct voucherSigner for other key types.`);return E.toHex(t.inner.signature)}return L.serialize(t)}function Ba(e){return e.type!==`keychain`&&e.type===`secp256k1`}function Va(e){if(!Ba(e))throw Error(`Session vouchers only support secp256k1 signatures until TIP-1020 voucher verification is enabled.`)}async function Ha(e,t,n,r,i,a){let o=a??t,s=Na(o),c=La(r,i,n),l=za(Ma(o)?await o.sign({hash:c,raw:!0}):await Ra(e,o,n,r,i)),u=L.from(l);if(Va(u),!L.verify(u,{address:s,payload:c}))throw Error(`voucher signature does not match voucher signer`);return l}function Ua(e){let t=b.encode(b.from([`address payer`,`address payee`,`address token`,`bytes32 salt`,`address authorizedSigner`,`address escrowContract`,`uint256 chainId`]),[e.payer,e.payee,e.token,e.salt,e.authorizedSigner,e.escrowContract,BigInt(e.chainId)]);return C.keccak256(t)}const Wa=[{type:`function`,name:`CLOSE_GRACE_PERIOD`,inputs:[],outputs:[{name:``,type:`uint64`,internalType:`uint64`}],stateMutability:`view`},{type:`function`,name:`VOUCHER_TYPEHASH`,inputs:[],outputs:[{name:``,type:`bytes32`,internalType:`bytes32`}],stateMutability:`view`},{type:`function`,name:`channels`,inputs:[{name:``,type:`bytes32`,internalType:`bytes32`}],outputs:[{name:`finalized`,type:`bool`,internalType:`bool`},{name:`closeRequestedAt`,type:`uint64`,internalType:`uint64`},{name:`payer`,type:`address`,internalType:`address`},{name:`payee`,type:`address`,internalType:`address`},{name:`token`,type:`address`,internalType:`address`},{name:`authorizedSigner`,type:`address`,internalType:`address`},{name:`deposit`,type:`uint128`,internalType:`uint128`},{name:`settled`,type:`uint128`,internalType:`uint128`}],stateMutability:`view`},{type:`function`,name:`close`,inputs:[{name:`channelId`,type:`bytes32`,internalType:`bytes32`},{name:`cumulativeAmount`,type:`uint128`,internalType:`uint128`},{name:`signature`,type:`bytes`,internalType:`bytes`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`computeChannelId`,inputs:[{name:`payer`,type:`address`,internalType:`address`},{name:`payee`,type:`address`,internalType:`address`},{name:`token`,type:`address`,internalType:`address`},{name:`salt`,type:`bytes32`,internalType:`bytes32`},{name:`authorizedSigner`,type:`address`,internalType:`address`}],outputs:[{name:``,type:`bytes32`,internalType:`bytes32`}],stateMutability:`view`},{type:`function`,name:`domainSeparator`,inputs:[],outputs:[{name:``,type:`bytes32`,internalType:`bytes32`}],stateMutability:`view`},{type:`function`,name:`eip712Domain`,inputs:[],outputs:[{name:`fields`,type:`bytes1`,internalType:`bytes1`},{name:`name`,type:`string`,internalType:`string`},{name:`version`,type:`string`,internalType:`string`},{name:`chainId`,type:`uint256`,internalType:`uint256`},{name:`verifyingContract`,type:`address`,internalType:`address`},{name:`salt`,type:`bytes32`,internalType:`bytes32`},{name:`extensions`,type:`uint256[]`,internalType:`uint256[]`}],stateMutability:`view`},{type:`function`,name:`getChannel`,inputs:[{name:`channelId`,type:`bytes32`,internalType:`bytes32`}],outputs:[{name:``,type:`tuple`,internalType:`struct TempoStreamChannel.Channel`,components:[{name:`finalized`,type:`bool`,internalType:`bool`},{name:`closeRequestedAt`,type:`uint64`,internalType:`uint64`},{name:`payer`,type:`address`,internalType:`address`},{name:`payee`,type:`address`,internalType:`address`},{name:`token`,type:`address`,internalType:`address`},{name:`authorizedSigner`,type:`address`,internalType:`address`},{name:`deposit`,type:`uint128`,internalType:`uint128`},{name:`settled`,type:`uint128`,internalType:`uint128`}]}],stateMutability:`view`},{type:`function`,name:`getChannelsBatch`,inputs:[{name:`channelIds`,type:`bytes32[]`,internalType:`bytes32[]`}],outputs:[{name:`channelStates`,type:`tuple[]`,internalType:`struct TempoStreamChannel.Channel[]`,components:[{name:`finalized`,type:`bool`,internalType:`bool`},{name:`closeRequestedAt`,type:`uint64`,internalType:`uint64`},{name:`payer`,type:`address`,internalType:`address`},{name:`payee`,type:`address`,internalType:`address`},{name:`token`,type:`address`,internalType:`address`},{name:`authorizedSigner`,type:`address`,internalType:`address`},{name:`deposit`,type:`uint128`,internalType:`uint128`},{name:`settled`,type:`uint128`,internalType:`uint128`}]}],stateMutability:`view`},{type:`function`,name:`getVoucherDigest`,inputs:[{name:`channelId`,type:`bytes32`,internalType:`bytes32`},{name:`cumulativeAmount`,type:`uint128`,internalType:`uint128`}],outputs:[{name:``,type:`bytes32`,internalType:`bytes32`}],stateMutability:`view`},{type:`function`,name:`open`,inputs:[{name:`payee`,type:`address`,internalType:`address`},{name:`token`,type:`address`,internalType:`address`},{name:`deposit`,type:`uint128`,internalType:`uint128`},{name:`salt`,type:`bytes32`,internalType:`bytes32`},{name:`authorizedSigner`,type:`address`,internalType:`address`}],outputs:[{name:`channelId`,type:`bytes32`,internalType:`bytes32`}],stateMutability:`nonpayable`},{type:`function`,name:`requestClose`,inputs:[{name:`channelId`,type:`bytes32`,internalType:`bytes32`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`settle`,inputs:[{name:`channelId`,type:`bytes32`,internalType:`bytes32`},{name:`cumulativeAmount`,type:`uint128`,internalType:`uint128`},{name:`signature`,type:`bytes`,internalType:`bytes`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`topUp`,inputs:[{name:`channelId`,type:`bytes32`,internalType:`bytes32`},{name:`additionalDeposit`,type:`uint256`,internalType:`uint256`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`withdraw`,inputs:[{name:`channelId`,type:`bytes32`,internalType:`bytes32`}],outputs:[],stateMutability:`nonpayable`},{type:`event`,name:`ChannelClosed`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0,internalType:`bytes32`},{name:`payer`,type:`address`,indexed:!0,internalType:`address`},{name:`payee`,type:`address`,indexed:!0,internalType:`address`},{name:`settledToPayee`,type:`uint256`,indexed:!1,internalType:`uint256`},{name:`refundedToPayer`,type:`uint256`,indexed:!1,internalType:`uint256`}],anonymous:!1},{type:`event`,name:`ChannelExpired`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0,internalType:`bytes32`},{name:`payer`,type:`address`,indexed:!0,internalType:`address`},{name:`payee`,type:`address`,indexed:!0,internalType:`address`}],anonymous:!1},{type:`event`,name:`ChannelOpened`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0,internalType:`bytes32`},{name:`payer`,type:`address`,indexed:!0,internalType:`address`},{name:`payee`,type:`address`,indexed:!0,internalType:`address`},{name:`token`,type:`address`,indexed:!1,internalType:`address`},{name:`authorizedSigner`,type:`address`,indexed:!1,internalType:`address`},{name:`salt`,type:`bytes32`,indexed:!1,internalType:`bytes32`},{name:`deposit`,type:`uint256`,indexed:!1,internalType:`uint256`}],anonymous:!1},{type:`event`,name:`CloseRequestCancelled`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0,internalType:`bytes32`},{name:`payer`,type:`address`,indexed:!0,internalType:`address`},{name:`payee`,type:`address`,indexed:!0,internalType:`address`}],anonymous:!1},{type:`event`,name:`CloseRequested`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0,internalType:`bytes32`},{name:`payer`,type:`address`,indexed:!0,internalType:`address`},{name:`payee`,type:`address`,indexed:!0,internalType:`address`},{name:`closeGraceEnd`,type:`uint256`,indexed:!1,internalType:`uint256`}],anonymous:!1},{type:`event`,name:`Settled`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0,internalType:`bytes32`},{name:`payer`,type:`address`,indexed:!0,internalType:`address`},{name:`payee`,type:`address`,indexed:!0,internalType:`address`},{name:`cumulativeAmount`,type:`uint256`,indexed:!1,internalType:`uint256`},{name:`deltaPaid`,type:`uint256`,indexed:!1,internalType:`uint256`},{name:`newSettled`,type:`uint256`,indexed:!1,internalType:`uint256`}],anonymous:!1},{type:`event`,name:`TopUp`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0,internalType:`bytes32`},{name:`payer`,type:`address`,indexed:!0,internalType:`address`},{name:`payee`,type:`address`,indexed:!0,internalType:`address`},{name:`additionalDeposit`,type:`uint256`,indexed:!1,internalType:`uint256`},{name:`newDeposit`,type:`uint256`,indexed:!1,internalType:`uint256`}],anonymous:!1},{type:`error`,name:`AmountExceedsDeposit`,inputs:[]},{type:`error`,name:`AmountNotIncreasing`,inputs:[]},{type:`error`,name:`ChannelAlreadyExists`,inputs:[]},{type:`error`,name:`ChannelFinalized`,inputs:[]},{type:`error`,name:`ChannelNotFound`,inputs:[]},{type:`error`,name:`CloseNotReady`,inputs:[]},{type:`error`,name:`DepositOverflow`,inputs:[]},{type:`error`,name:`InvalidPayee`,inputs:[]},{type:`error`,name:`InvalidSignature`,inputs:[]},{type:`error`,name:`NotPayee`,inputs:[]},{type:`error`,name:`NotPayer`,inputs:[]},{type:`error`,name:`TransferFailed`,inputs:[]}];async function Ga(e,t,n){return p(e,{address:t,abi:Wa,functionName:`getChannel`,args:[n]})}a({abi:Wa,name:`open`}),a({abi:Wa,name:`topUp`});function Ka(e,t){return t??e}function qa(e,t,n,r=!1){let i=e.request.methodDetails?.escrowContract,a=n??Rn[t];if(!a&&!(r&&i))throw Error("No trusted `escrowContract` available. Provide it in client parameters or use a supported chain.");if(i&&a&&i.toLowerCase()!==a.toLowerCase()&&(!r||n!==void 0))throw Error(`Tempo session escrow ${i} does not match client escrow ${a}.`);return i&&(!a||i.toLowerCase()!==a.toLowerCase())?i:a}function Ja(e,t,n,r){return K({challenge:e,payload:t,source:`did:pkh:eip155:${n}:${r.address}`})}async function Ya(e,t,n,r,i,a,o){let s=Ka(t,o),c=await Ha(e,t,{channelId:n,cumulativeAmount:r},i,a,s);return{action:`voucher`,channelId:n,cumulativeAmount:r.toString(),signature:c}}async function Xa(e,t,n){let{escrowContract:i,payee:a,currency:o,deposit:s,initialAmount:c,chainId:l,feePayer:u}=n,d=Ka(t,n.voucherSigner),p=Na(d),m=w.random(32),h=Ua({authorizedSigner:p,chainId:l,escrowContract:i,payee:a,payer:t.address,salt:m,token:o}),_=r({abi:P.tip20,functionName:`approve`,args:[i,s]}),v=r({abi:Wa,functionName:`open`,args:[a,o,s,m,p]}),y=Math.floor(Date.now()/1e3)+25,b=await f(e,{account:t,calls:[{to:o,data:_},{to:i,data:v}],feeToken:o,nonceKey:`expiring`,validBefore:y});b.gas=(b.gas??0n)+5000n,u&&(b.feePayer=!0);let x=await g(e,b),S=await Ha(e,t,{channelId:h,cumulativeAmount:c},i,l,d);return{entry:{authorizedSigner:p,channelId:h,salt:m,cumulativeAmount:c,escrowContract:i,chainId:l,opened:!0},payload:{action:`open`,type:`transaction`,channelId:h,transaction:x,authorizedSigner:p,cumulativeAmount:c.toString(),signature:S}}}async function Za(e,t,n,r){try{let i=await Ga(e,t,n);if(i.deposit>0n&&!i.finalized)return{authorizedSigner:BigInt(i.authorizedSigner)===0n?i.payer:i.authorizedSigner,channelId:n,salt:`0x`,cumulativeAmount:i.settled,escrowContract:t,chainId:r,opened:!0}}catch{}}const Qa=B.object({account:B.optional(B.custom()),action:B.optional(B.enum([`open`,`topUp`,`voucher`,`close`])),channelId:B.optional(B.string()),cumulativeAmount:B.optional(V()),cumulativeAmountRaw:B.optional(B.string()),transaction:B.optional(B.string()),additionalDeposit:B.optional(V()),additionalDepositRaw:B.optional(B.string()),depositRaw:B.optional(B.string())});function $a(e={}){let{allowCustomEscrow:t=!1,decimals:n=6}=e,r=qi({chain:N,getClient:e.getClient,rpcUrl:zn}),i=Ui({account:e.account}),a=e.maxDeposit===void 0?void 0:d(e.maxDeposit,n),o=new Map,s=new Map,c=new Map;function l(t){e.onChannelUpdate?.(t)}function u(e,t,n){return`${e.toLowerCase()}:${t.toLowerCase()}:${n.toLowerCase()}`}function f(n,r,i){if(i){let e=o.get(i);if(e)return qa(n,r,e)}return qa(n,r,e.escrowContract,t)}async function p(t,i,p){let m=t.request.methodDetails,h=m?.chainId??0,g=await r({chainId:h}),_=f(t,h),v=t.request.recipient,y=t.request.currency,b=BigInt(t.request.amount),x=t.request.suggestedDeposit,S=x?BigInt(x):void 0,C=(()=>{if(p?.depositRaw)return BigInt(p.depositRaw);if(e.deposit!==void 0)return d(e.deposit,n);if(S!==void 0&&a!==void 0)return S<a?S:a;if(a!==void 0)return a;if(S!==void 0)return S;throw Error("No deposit amount available. Set `deposit`, `maxDeposit`, or ensure the server challenge includes `suggestedDeposit`.")})(),w=e.voucherSigner??i,T=u(v,y,_),E=s.get(T);if(!E){let e=p?.channelId??m?.channelId;if(e){let t=await Za(g,_,e,h);if(t){let e=p?.cumulativeAmountRaw?BigInt(p.cumulativeAmountRaw):p?.cumulativeAmount?d(p.cumulativeAmount,n):void 0;e!==void 0&&(t.cumulativeAmount=e),s.set(T,t),c.set(t.channelId,T),o.set(t.channelId,_),E=t,l(E)}else if(p?.channelId)throw Error(`Channel ${p.channelId} cannot be reused (closed or not found on-chain).`)}}E?.opened&&E.authorizedSigner.toLowerCase()!==Na(w).toLowerCase()&&(E=void 0);let D;if(E?.opened)E.cumulativeAmount+=b,D=await Ya(g,i,E.channelId,E.cumulativeAmount,_,h,w),l(E);else{let e=await Xa(g,i,{voucherSigner:w,escrowContract:_,payee:v,currency:y,deposit:C,initialAmount:b,chainId:h,feePayer:m?.feePayer});s.set(T,e.entry),c.set(e.entry.channelId,T),o.set(e.entry.channelId,_),D=e.payload,l(e.entry)}return Ja(t,D,h,i)}async function m(t,i,a){let u=t.request.methodDetails?.chainId??0,p=await r({chainId:u}),m=a.action,{channelId:h,transaction:g}=a,_=e.voucherSigner??i,v=h,y=a.cumulativeAmountRaw?BigInt(a.cumulativeAmountRaw):a.cumulativeAmount?d(a.cumulativeAmount,n):void 0,b=a.additionalDepositRaw?BigInt(a.additionalDepositRaw):a.additionalDeposit?d(a.additionalDeposit,n):void 0,x=f(t,u,v);o.set(v,x);let S;switch(m){case`open`:{if(!g)throw Error(`transaction required for open action`);if(y===void 0)throw Error(`cumulativeAmount required for open action`);let e=await Ha(p,i,{channelId:v,cumulativeAmount:y},x,u,_);S={action:`open`,type:`transaction`,channelId:v,transaction:g,authorizedSigner:Na(_),cumulativeAmount:y.toString(),signature:e};break}case`topUp`:if(!g)throw Error(`transaction required for topUp action`);if(b===void 0)throw Error(`additionalDeposit required for topUp action`);S={action:`topUp`,type:`transaction`,channelId:v,transaction:g,additionalDeposit:b.toString()};break;case`voucher`:{if(y===void 0)throw Error(`cumulativeAmount required for voucher action`);S=await Ya(p,i,v,y,x,u,_);let e=c.get(v);if(e){let t=s.get(e);t&&(t.cumulativeAmount=t.cumulativeAmount>y?t.cumulativeAmount:y,l(t))}break}case`close`:{if(y===void 0)throw Error(`cumulativeAmount required for close action`);let e=await Ha(p,i,{channelId:v,cumulativeAmount:y},x,u,_);S={action:`close`,channelId:v,cumulativeAmount:y.toString(),signature:e};let t=c.get(v);if(t){let e=s.get(t);e&&(e.opened=!1,e.cumulativeAmount=e.cumulativeAmount>y?e.cumulativeAmount:y,l(e))}break}}return Ja(t,S,u,i)}return kt(Da,{canHandleChallenge({challenge:e}){let t=Ke(e.request.methodDetails,We.sessionProtocol);return t===void 0||t===Ge.v1},context:Qa,async createCredential({challenge:t,context:n}){let o=t.request.methodDetails?.chainId??0,s=await r({chainId:o}),c=i(s,n);if(!n?.action&&(e.deposit!==void 0||a!==void 0))return p(t,c,n);if(n?.action)return m(t,c,n);throw Error("No `action` in context and no `deposit` or `maxDeposit` configured. Either provide context with action/channelId/cumulativeAmount, or configure `deposit`/`maxDeposit` for auto-management.")}})}const eo=(1n<<96n)-1n;function to(e){return e>=0n&&e<=eo}function no(e){if(!/^\d{1,29}$/.test(e))return;let t=BigInt(e);return to(t)?t:void 0}function ro(e){return io(e),e}function io(e){if(!to(e))throw Error(`Value ${e} is outside uint96 bounds.`)}const ao=new Set([`open`,`topUp`,`voucher`,`close`]);function oo(e){return typeof e==`object`&&!!e}function so(e){return typeof e==`string`&&ao.has(e)}function co(e){if(typeof e!=`object`||!e)return!1;let t=e;return!(typeof t.channelId!=`string`||t.action!==void 0&&!so(t.action))}function lo(e,t=`No session credential context available.`){if(!co(e))throw Error(t);return e}function uo(e){let t=e.request.amount;if(typeof t!=`string`)throw Error(`Session challenge is missing amount.`);return BigInt(t)}function fo(e){return oo(e)?typeof e.channelId==`string`&&typeof e.requiredCumulative==`string`&&typeof e.acceptedCumulative==`string`&&typeof e.deposit==`string`:!1}function po(e){return oo(e)?e.method===`tempo`&&e.intent===`session`&&e.status===`success`&&typeof e.timestamp==`string`&&typeof e.reference==`string`&&typeof e.challengeId==`string`&&typeof e.channelId==`string`&&typeof e.acceptedCumulative==`string`&&typeof e.spent==`string`&&(e.units===void 0||typeof e.units==`number`)&&(e.txHash===void 0||typeof e.txHash==`string`):!1}function mo(e){let t=x.toString(e),n=JSON.parse(t);if(!po(n))throw Error(`Invalid session receipt.`);return n}function ho(e){return e.headers.get(`content-type`)?.toLowerCase().startsWith(`text/event-stream`)??!1}function go(e){let t=`message`,n=[];for(let r of e.split(`
1
+ import{createClient as e,createTransport as t,custom as n,encodeFunctionData as r,erc20Abi as i,getAbiItem as a,getAddress as o,hashTypedData as s,http as c,isAddress as l,isAddressEqual as u,parseUnits as d}from"viem";import{prepareTransactionRequest as f,readContract as p,sendCallsSync as m,sendTransactionSync as h,signTransaction as g,signTypedData as _}from"viem/actions";import*as v from"viem/chains";import{tempo as y}from"viem/chains";import{AbiParameters as b,Base64 as x,Bytes as S,Hash as C,Hex as w,Json as T,Signature as E}from"ox";import{z as D}from"zod/mini";import*as O from"node:child_process";import*as k from"node:fs";import*as A from"node:os";import*as j from"node:path";import{z as M}from"zod";import"node:readline";import{tempo as N,tempoModerato as ee}from"viem/tempo/chains";import{Abis as P,Account as te,Actions as F,Addresses as ne,TokenId as re,Transaction as ie,withFeePayer as ae}from"viem/tempo";import{parseAccount as oe,privateKeyToAccount as se}from"viem/accounts";import{createParser as ce}from"eventsource-parser";import{Channel as le,KeyAuthorization as I,SignatureEnvelope as L,TempoAddress as ue,TxEnvelopeTempo as de}from"ox/tempo";import{defineToken as fe}from"viem/tokens";var pe=Object.defineProperty,me=Object.getOwnPropertyDescriptor,he=Object.getOwnPropertyNames,ge=Object.prototype.hasOwnProperty,_e=(e,t)=>{let n={};for(var r in e)pe(n,r,{get:e[r],enumerable:!0});return t||pe(n,Symbol.toStringTag,{value:`Module`}),n},ve=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=he(t),a=0,o=i.length,s;a<o;a++)s=i[a],!ge.call(e,s)&&s!==n&&pe(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=me(t,s))||r.enumerable});return e},ye=(e,t,n)=>(ve(e,t,`default`),n&&ve(n,t,`default`));const be=Symbol(`mppx.x402.asset`);function xe(e){return{[be]:!0,address:e.address,decimals:e.decimals,network:e.network,transfer:e.transfer}}function Se(e,t){let n=e(t.chainId);return xe({address:n.address,decimals:n.decimals,network:Me(t.chainId),transfer:Pe(t.transfer,n)})}const Ce={USDC:xe({address:`0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`,decimals:6,network:`eip155:8453`,transfer:{name:`USD Coin`,type:`eip3009`,version:`2`}})},we={USDC:xe({address:`0x036CbD53842c5426634e7929541eC2318f3dCF7e`,decimals:6,network:`eip155:84532`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}})},Te={USDC:xe({address:`0xcebA9300f2b948710d2653dD7B07f33A8B32118C`,decimals:6,network:`eip155:42220`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}}),USDT:xe({address:`0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e`,decimals:6,network:`eip155:42220`,transfer:{name:`Tether USD`,type:`eip3009`,version:`1`}})},Ee={USDC:xe({address:`0x01C5C0122039549AD1493B8220cABEdD739BC44E`,decimals:6,network:`eip155:11142220`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}})};function De(e){return typeof e!=`object`||!e?!1:e[be]===!0}function Oe(e){return typeof e==`function`&&typeof e.addresses==`object`&&typeof e.decimals==`number`}function ke(e){return typeof e==`string`}function Ae(e,t){if(De(e))return e.network===t?{address:e.address,decimals:e.decimals,transfer:e.transfer}:void 0;if(Oe(e)){let n=e.addresses[Ne(t)];return n?{address:n,decimals:e.decimals,name:e.name}:void 0}return{address:e}}function je(e,t,n){let r=Ae(e,n);return r?o(r.address)===o(t):!1}function Me(e){return`eip155:${e}`}function Ne(e){return Number(e.slice(7))}function Pe(e,t){if(e.type!==`eip3009`)return e;if(e.name)return{...e,name:e.name};if(!t.name)throw Error(`EIP-3009 token assets require a token name.`);return{...e,name:t.name}}var Fe=_e({base:()=>Ce,baseSepolia:()=>we,celo:()=>Te,celoSepolia:()=>Ee,define:()=>xe,fromToken:()=>Se,isAsset:()=>De,isRawAddress:()=>ke,isToken:()=>Oe,matches:()=>je,resolve:()=>Ae,toChainId:()=>Ne,toNetwork:()=>Me}),Ie=_e({base:()=>Le,baseSepolia:()=>Re,celo:()=>ze,celoSepolia:()=>Be});const Le=8453,Re=84532,ze=42220,Be=11142220,R={acceptPayment:`Accept-Payment`,authorization:`Authorization`,paymentAuthorization:`Payment-Authorization`,paymentReceipt:`Payment-Receipt`,paymentSession:`Payment-Session`,paymentSessionSnapshot:`Payment-Session-Snapshot`,wwwAuthenticate:`WWW-Authenticate`},Ve={payment:`Payment`},He={evm:`evm`,stripe:`stripe`,tempo:`tempo`},Ue={charge:`charge`,session:`session`,subscription:`subscription`},We={sessionProtocol:`sessionProtocol`,sessionSnapshot:`sessionSnapshot`},Ge={v1:`v1`,v2:`v2`};function Ke(e,t){if(!(!e||typeof e!=`object`))return e[t]}function qe(e){let t=x.toString(e);return JSON.parse(t)}function z(e){let t=T.canonicalize(e);return x.fromString(t,{pad:!1,url:!0})}var B=_e({address:()=>H,amount:()=>V,datetime:()=>Ye,datetimeInput:()=>Xe,hash:()=>U,period:()=>$e,signature:()=>W,toDate:()=>Ze,toDatetimeString:()=>Qe,unwrapOptional:()=>et});import*as Je from"zod/mini";ye(B,Je);function V(){return D.string().check(D.regex(/^\d+(\.\d+)?$/,`Invalid amount`))}function Ye(){return D.string().check(D.regex(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/,`Invalid ISO 8601 datetime`))}function Xe(e=`Invalid ISO 8601 datetime`){return D.pipe(D.union([Ye(),D.custom(e=>e instanceof Date)]),D.transform(Ze)).check(D.refine(e=>Number.isFinite(e.getTime()),e))}function Ze(e){return e instanceof Date?e:new Date(e)}function Qe(e){return e instanceof Date?Number.isFinite(e.getTime())?e.toISOString():`Invalid Date`:e}function H(){return D.string().check(D.regex(/^0x[0-9a-fA-F]{40}$/,`Invalid address`))}function U(){return D.string().check(D.regex(/^0x[0-9a-fA-F]{64}$/,`Invalid hash`))}function $e(){return D.string().check(D.regex(/^(day|week|month|year|\d+)$/,`Invalid period`))}function W(){return D.string().check(D.regex(/^0x[0-9a-fA-F]+$/,`Invalid signature`))}function et(e){return e._zod.def.type===`optional`?e._zod.def.innerType:e}const tt=B.object({description:B.optional(B.string()),digest:B.optional(B.string().check(B.regex(/^sha-256=/,`Invalid digest format`))),expires:B.optional(Ye()),header:B.optional(B.string().check(B.regex(/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,`Invalid HTTP header name`))),id:B.string().check(B.minLength(1)),intent:B.string(),method:B.string(),meta:B.optional(B.record(B.string(),B.string())),opaque:B.optional(B.string()),realm:B.string(),request:B.record(B.string(),B.unknown())});function nt(e,t){let{description:n,digest:r,meta:i,method:a,header:o,intent:s,realm:c,request:l,secretKey:u}=e,d=gt(o)?void 0:o,f=e.expires?Qe(e.expires):void 0,p=e.opaque??(i===void 0?void 0:z(i)),m=u?_t({...e,expires:f,...i!==void 0&&{meta:i},opaque:p},{secretKey:u}):e.id;return tt.parse({id:m,realm:c,method:a,intent:s,request:l,...n&&{description:n},...r&&{digest:r},...f&&{expires:f},...d!==void 0&&{header:d},...i!==void 0&&{meta:i},...p!==void 0&&{opaque:p}})}function rt(e){let t=[G(`id`,e.id),G(`realm`,e.realm),G(`method`,e.method),G(`intent`,e.intent),G(`request`,z(e.request))];e.description!==void 0&&t.push(G(`description`,e.description)),e.digest!==void 0&&t.push(G(`digest`,e.digest)),e.expires!==void 0&&t.push(G(`expires`,e.expires));let n=e.header;return n!==void 0&&!gt(n)&&t.push(G(`header`,n)),e.opaque===void 0?e.meta!==void 0&&t.push(G(`opaque`,z(e.meta))):t.push(G(`opaque`,e.opaque)),`${Ve.payment} ${t.join(`, `)}`}function G(e,t){if(/[\r\n]/.test(t))throw Error(`Invalid quoted-string value.`);return`${e}="${t.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`).replace(/[\u0100-\uffff]/g,e=>`\\u${e.charCodeAt(0).toString(16).padStart(4,`0`)}`)}"`}function it(e,t){let n=at(e);if(!n)throw Error(`Missing Payment scheme.`);let{request:r,opaque:i,...a}=ot(n);if(!r)throw Error(`Missing request parameter.`);if(r.length>16384)throw Error(`Request parameter too large.`);if(a.method&&!/^[a-z][a-z0-9:_-]*$/.test(a.method))throw Error(`Invalid method: "${a.method}". Must be lowercase per spec.`);return nt({...a,request:qe(r),...i&&{opaque:i}},t)}function at(e){let t=Ve.payment,[n]=ut(e,t);if(n===void 0)return null;let r=n+t.length;for(;r<e.length&&/\s/.test(e[r]??``);)r++;return e.slice(r)}function ot(e){let t=Object.create(null),n=0;for(;n<e.length;){for(;n<e.length&&/[\s,]/.test(e[n]??``);)n++;if(n>=e.length)break;let r=n;for(;n<e.length&&/[A-Za-z0-9_-]/.test(e[n]??``);)n++;let i=e.slice(r,n).toLowerCase();if(!i)throw Error(`Malformed auth-param.`);for(;n<e.length&&/\s/.test(e[n]??``);)n++;if(e[n]!==`=`)break;for(n++;n<e.length&&/\s/.test(e[n]??``);)n++;let[a,o]=st(e,n);if(n=o,i in t)throw Error(`Duplicate parameter: ${i}`);t[i]=a}return t}function st(e,t){if(e[t]===`"`)return ct(e,t+1);let n=t;for(;n<e.length&&e[n]!==`,`;)n++;return[e.slice(t,n).trim(),n]}function ct(e,t){let n=t,r=!1,i=t,a;for(;n<e.length;){let o=e[n];if(n++,r){a??=[];let t=o===`u`?e.slice(n,n+4):void 0;t&&/^[0-9A-Fa-f]{4}$/.test(t)?(a.push(String.fromCharCode(Number.parseInt(t,16))),n+=4):a.push(o),i=n,r=!1;continue}if(o===`\\`){a??=[],a.push(e.slice(i,n-1)),i=n,r=!0;continue}if(o===`"`)return[a?[...a,e.slice(i,n-1)].join(``):e.slice(t,n-1),n]}throw Error(`Unterminated quoted-string.`)}function lt(e,t,n){if(e.slice(t,t+n.length).toLowerCase()!==n.toLowerCase())return!1;let r=e[t+n.length];return!!(r&&/\s/.test(r))}function ut(e,t){let n=[],r=!1,i=!1;for(let a=0;a<e.length;a++){let o=e[a];if(r){i?i=!1:o===`\\`?i=!0:o===`"`&&(r=!1);continue}if(o===`"`){r=!0;continue}if(!lt(e,a,t))continue;let s=a-1;for(;s>=0&&/\s/.test(e[s]??``);)s--;s>=0&&e[s]!==`,`||n.push(a)}return n}function dt(e,t){if(e.status!==402)throw Error(`Response status is not 402.`);return ft(e.headers,t)}function ft(e,t){let n=e.get(R.wwwAuthenticate);if(!n)throw Error(`Missing ${R.wwwAuthenticate} header.`);return pt(n,t)}function pt(e,t){let n=ut(e,Ve.payment);if(n.length===0)throw Error(`No Payment schemes found.`);return n.map((r,i)=>{let a=i+1<n.length?n[i+1]:e.length;return it(e.slice(r,a).replace(/,\s*$/,``),t)})}function mt(e){let t=[e.realm,e.method,e.intent,z(e.request),e.expires??``,e.digest??``],n=e.header;return n!==void 0&&!gt(n)&&t.push(n),t.push(e.opaque??(e.meta?z(e.meta):``)),t.join(`|`)}function ht(e){return e.header??R.authorization}function gt(e){return e?.toLowerCase()===R.authorization.toLowerCase()}function _t(e,t){let n=mt(e),r=S.fromString(t.secretKey),i=S.fromString(n),a=C.hmac256(r,i,{as:`Bytes`});return x.fromBytes(a,{url:!0,pad:!1})}var vt=class extends Error{name=`MissingPaymentSchemeError`;constructor(){super(`Missing Payment scheme.`)}},yt=class extends Error{name=`InvalidCredentialEncodingError`;constructor(){super(`Invalid base64url or JSON.`)}};function bt(e){let t=e.match(RegExp(`^${Ve.payment}\\s+(.+)$`,`i`));if(!t?.[1])throw new vt;try{let e=x.toString(t[1]),n=JSON.parse(e),{opaque:r,request:i,meta:a,...o}=n.challenge,{meta:s,opaque:c}=xt(r);return{challenge:tt.parse({...o,...s!==void 0&&{meta:s},...c!==void 0&&{opaque:c},request:qe(i)}),payload:n.payload,...n.source&&{source:n.source}}}catch{throw new yt}}function xt(e){if(e===void 0)return{};if(typeof e==`string`)return{opaque:e};if(!St(e))throw Error(`Invalid opaque.`);return{meta:e,opaque:z(e)}}function St(e){return typeof e!=`object`||!e||Array.isArray(e)?!1:Object.values(e).every(e=>typeof e==`string`)}function Ct(e){let{challenge:t,payload:n,source:r}=e;return{challenge:t,payload:n,...r&&{source:r}}}function K(e){let{meta:t,opaque:n,request:r,...i}=e.challenge,a=n??(t===void 0?void 0:z(t)),o={challenge:{...i,...a!==void 0&&{opaque:a},request:z(r)},payload:e.payload,...e.source&&{source:e.source}},s=JSON.stringify(o),c=x.fromString(s,{pad:!1,url:!0});return`${Ve.payment} ${c}`}var wt=class extends Error{details;status=402;hint;constructor(e,t={}){super(e),this.details=t.details}toProblemDetails(e){return{type:this.type,title:this.title,status:this.status,detail:this.message,...this.details&&Object.keys(this.details).length>0&&{details:this.details},...this.hint&&{hint:this.hint},...e&&{challengeId:e}}}},Tt=class extends wt{name=`InvalidChallengeError`;title=`Invalid Challenge`;status=402;type=`https://paymentauth.org/problems/invalid-challenge`;constructor(e={}){let{id:t,reason:n}=e,r=t?` "${t}"`:``,i=n?`: ${n}`:``;super(`Challenge${r} is invalid${i}.`)}},q=class extends wt{name=`VerificationFailedError`;title=`Verification Failed`;type=`https://paymentauth.org/problems/verification-failed`;constructor(e={}){let{details:t,reason:n}=e;super(n?`Payment verification failed: ${n}.`:`Payment verification failed.`,{details:t})}},Et=class extends wt{name=`PaymentExpiredError`;title=`Payment Expired`;type=`https://paymentauth.org/problems/payment-expired`;constructor(e={}){let{expires:t}=e;super(t?`Payment expired at ${t}.`:`Payment has expired.`)}};function Dt(e,t){if(!e)throw new Tt({...t&&{id:t},reason:`missing required expires field`});if(Number.isNaN(new Date(e).getTime()))throw new Tt({...t&&{id:t},reason:`malformed expires timestamp`});if(new Date(e)<new Date)throw new Et({expires:e})}function Ot(e){return e}function kt(e,t){let{canHandleChallenge:n,context:r,createCredential:i}=t;return{...e,canHandleChallenge:n,context:r,createCredential:i}}function At(e){return{encode(t){return x.fromString(JSON.stringify(e.parse(t)))},decode(t){try{return e.parse(JSON.parse(x.toString(t)))}catch{throw new jt}}}}var jt=class extends Error{name=`InvalidJsonHeaderError`;constructor(){super(`Invalid base64 JSON header.`)}};const Mt=[`exact`],Nt=`PAYMENT-REQUIRED`,Pt=`PAYMENT-SIGNATURE`,Ft=B.string().check(B.minLength(1)),It=B.number().check(B.refine(e=>e>0,`Must be positive`)),J=B.string().check(B.regex(/^\d+$/,`Invalid atomic amount`)),Lt=H(),Rt=B.string().check(B.regex(RegExp(`^eip155:\\d+$`),`Invalid EVM CAIP-2 network`)),zt=B.object({description:B.optional(B.string()),iconUrl:B.optional(B.string()),mimeType:B.optional(B.string()),serviceName:B.optional(B.string()),tags:B.optional(B.array(B.string())),url:Ft});B.discriminatedUnion(`type`,[B.object({name:Ft,type:B.literal(`eip3009`),version:Ft}),B.object({name:B.optional(B.string()),type:B.literal(`permit2`),version:B.optional(B.string())})]);const Bt=B.object({amount:J,asset:Ft,extra:B.optional(B.record(B.string(),B.unknown())),maxTimeoutSeconds:It,network:Rt,payTo:Ft,scheme:B.enum(Mt)}),Vt=B.object({info:B.record(B.string(),B.unknown()),schema:B.record(B.string(),B.unknown())}),Ht=B.record(B.string(),Vt),Ut=B.object({accepts:B.array(Bt).check(B.minLength(1)),error:B.optional(B.string()),extensions:B.optional(Ht),resource:zt,x402Version:B.literal(2)}),Wt=B.object({authorization:B.object({from:Lt,nonce:U(),to:Lt,validAfter:J,validBefore:J,value:J}),signature:W()}),Gt=B.object({permit2Authorization:B.object({deadline:J,from:Lt,nonce:J,permitted:B.object({amount:J,token:Lt}),spender:Lt,witness:B.object({to:Lt,validAfter:J})}),signature:W()}),Kt=B.union([Wt,Gt]),qt=B.object({accepted:Bt,extensions:B.optional(Ht),payload:Kt,resource:B.optional(zt),x402Version:B.literal(2)});B.object({extensions:B.optional(Ht),extra:B.optional(B.record(B.string(),B.unknown())),invalidMessage:B.optional(B.string()),invalidReason:B.optional(B.string()),isValid:B.boolean(),payer:B.optional(B.string())});const Jt=B.object({amount:B.optional(J),errorMessage:B.optional(B.string()),errorReason:B.optional(B.string()),extensions:B.optional(Ht),extra:B.optional(B.record(B.string(),B.unknown())),network:Ft,payer:B.optional(B.string()),success:B.boolean(),transaction:B.string()});function Yt(e){let{extensions:t,resource:n,...r}=e;return Bt.parse(r)}const Xt=At(Ut),Zt=At(qt),Qt=At(Jt);Xt.encode,Xt.decode;function $t(e){try{let t=JSON.parse(x.toString(e));return tn(t)}catch{throw new jt}}const en=Zt.encode;Zt.decode,Qt.encode,Qt.decode;const tn=e=>{if(!e||typeof e!=`object`||Array.isArray(e))throw new jt;let t=e;if(t.x402Version!==2||!Array.isArray(t.accepts))throw new jt;let n=zt.parse(t.resource),r=t.extensions===void 0?void 0:Ht.safeParse(t.extensions).data;return{accepts:t.accepts,...r?{extensions:r}:{},resource:n,x402Version:2}};function nn(e){let t=[z(e.accepted),z(e.resource),z(e.extensions)].join(`|`);return C.sha256(S.fromString(t),{as:`Hex`})}async function rn(e){let t=e.context?.account??e.config.account;if(!t.signTypedData)throw Error(`x402 exact requires a typed-data signer.`);let n=e.challenge.request,r=Yt(n);if(cn(e.config,r),!n.resource)throw Error(`x402 exact EIP-3009 requires resource information.`);let i=n.extensions?.mppx?un(n.extensions):n.extensions,a=r.extra?.assetTransferMethod??`eip3009`;if(a!==`eip3009`)throw Error(`x402 exact ${String(a)} signing is not implemented yet.`);let s=r.extra?.name,c=r.extra?.version;if(typeof s!=`string`||typeof c!=`string`)throw Error(`x402 exact EIP-3009 requires token name and version.`);let l=Math.floor(Date.now()/1e3),u={from:o(t.address),nonce:i?.mppx?nn({accepted:r,extensions:i,resource:n.resource}):fn(),to:o(r.payTo),validAfter:(l-600).toString(),validBefore:(l+r.maxTimeoutSeconds).toString(),value:r.amount},d=await t.signTypedData({domain:{chainId:sn(r.network),name:s,verifyingContract:o(r.asset),version:c},message:{...u,value:BigInt(u.value),validAfter:BigInt(u.validAfter),validBefore:BigInt(u.validBefore)},primaryType:`TransferWithAuthorization`,types:on});return en({accepted:r,...i?{extensions:i}:{},payload:{authorization:u,signature:d},...n.resource?{resource:n.resource}:{},x402Version:2})}function an(e){let t=e.challenge.request,n;try{n=Yt(t),cn(e.config,n)}catch{return!1}if(!t.resource||(n.extra?.assetTransferMethod??`eip3009`)!==`eip3009`)return!1;let r=n.extra?.name,i=n.extra?.version;return typeof r==`string`&&typeof i==`string`}const on={TransferWithAuthorization:[{name:`from`,type:`address`},{name:`to`,type:`address`},{name:`value`,type:`uint256`},{name:`validAfter`,type:`uint256`},{name:`validBefore`,type:`uint256`},{name:`nonce`,type:`bytes32`}]};function sn(e){return Number(e.slice(7))}function cn(e,t){let n=sn(t.network);if(e.networks&&!e.networks.includes(n))throw Error(`x402 exact chain ID is not allowed: ${n}.`);let r=e.currencies??e.assets;if(r?.some(e=>ke(e))&&!e.networks?.length)throw Error(`x402 exact raw currency allowlists require networks.`);if(r){let e=o(t.asset);if(!r.some(n=>je(n,e,t.network)))throw Error(`x402 exact currency is not allowed: ${e}.`)}if(e.maxAtomicAmount!==void 0&&BigInt(t.amount)>BigInt(e.maxAtomicAmount))throw Error(`x402 exact amount exceeds maxAtomicAmount.`);if(e.maxAmount!==void 0){let n=ln(e,t);if(n===void 0)throw Error(`x402 exact maxAmount requires currency decimals.`);if(BigInt(t.amount)>d(e.maxAmount,n))throw Error(`x402 exact amount exceeds maxAmount.`)}}function ln(e,t){let n=e.currencies??e.assets,r=o(t.asset),i=n?.find(e=>je(e,r,t.network)),a=i?Ae(i,t.network):void 0;return a?.decimals===void 0?e.decimals:a.decimals}function un(e){let t=e.mppx;return t?{...e,mppx:{...t,info:{...t.info,nonce:dn()}}}:e}function dn(){return pn().slice(2)}function fn(){return pn()}function pn(){let e=globalThis.crypto;if(!e?.getRandomValues)throw Error(`x402 exact requires crypto randomness.`);let t=e.getRandomValues(new Uint8Array(32));return`0x${Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``)}`}const mn=Symbol.for(`mppx.x402.challenge`);function hn(e){return Object.defineProperty(e,mn,{value:!0}),e}function gn(e){return!!e?.[mn]}const _n=[`authorization`],vn=B.string().check(B.regex(/^\d+$/,`Invalid atomic amount`));B.object({name:B.string().check(B.minLength(1)),version:B.string().check(B.minLength(1))});const yn=B.object({chainId:B.number(),credentialTypes:B.optional(B.array(B.enum(_n)).check(B.minLength(1))),decimals:B.optional(B.number()),permit2Address:B.optional(H()),splits:B.optional(B.array(B.object({amount:vn,recipient:H()})))});B.object({amount:vn,currency:H(),description:B.optional(B.string()),externalId:B.optional(B.string()),methodDetails:yn,recipient:H()});const bn=B.object({amount:V(),chainId:B.number(),currency:H(),credentialTypes:B.optional(B.array(B.enum(_n)).check(B.minLength(1))),decimals:B.number(),description:B.optional(B.string()),externalId:B.optional(B.string()),permit2Address:B.optional(H()),recipient:H(),splits:B.optional(B.array(B.object({amount:vn,recipient:H()})))}),xn=B.object({from:H(),nonce:U(),signature:W(),to:H(),type:B.literal(`authorization`),validAfter:vn,validBefore:vn,value:vn}),Sn={TransferWithAuthorization:[{name:`from`,type:`address`},{name:`to`,type:`address`},{name:`value`,type:`uint256`},{name:`validAfter`,type:`uint256`},{name:`validBefore`,type:`uint256`},{name:`nonce`,type:`bytes32`}]};function Cn(e){return{chainId:e.chainId,name:e.authorization.name,verifyingContract:e.currency,version:e.authorization.version}}function wn(e){return C.keccak256(S.fromString(`${e.id}${e.realm}`),{as:`Hex`})}function Tn(e){return`eip155:${e}`}function En(e){return`did:pkh:eip155:${e.chainId}:${e.address}`}const Dn=Ot({name:`evm`,intent:`charge`,schema:{credential:{payload:xn},request:B.pipe(bn,B.transform(({amount:e,chainId:t,credentialTypes:n=[`authorization`],currency:r,decimals:i,permit2Address:a,recipient:s,splits:c,...l})=>({...l,amount:d(e,i).toString(),currency:o(r),methodDetails:{chainId:t,credentialTypes:n,decimals:i,...a?{permit2Address:o(a)}:{},...c?{splits:c}:{}},recipient:o(s)})))}});function On(e){return kt(Dn,{canHandleChallenge({challenge:t}){return!kn(t)||an({challenge:t,config:e})},context:B.object({account:B.optional(B.custom())}),async createCredential({challenge:t,context:n}){if(kn(t))return rn({challenge:t,config:e,context:n});let r=n?.account??e.account;if(!r.signTypedData)throw Error(`EVM authorization requires a typed-data signer.`);let i=t.request;if(An(e,i),!i.methodDetails.credentialTypes?.includes(`authorization`))throw Error(`EVM authorization is not accepted by this challenge.`);if(i.methodDetails.splits?.length)throw Error(`EVM authorization does not support payment splits.`);let a=jn(e,i),s=t.expires?Math.floor(new Date(t.expires).getTime()/1e3).toString():(Math.floor(Date.now()/1e3)+300).toString();return K(Ct({challenge:t,payload:{from:o(r.address),nonce:wn(t),signature:await r.signTypedData({domain:Cn({authorization:a,chainId:i.methodDetails.chainId,currency:i.currency}),message:{from:o(r.address),nonce:wn(t),to:o(i.recipient),validAfter:0n,validBefore:BigInt(s),value:BigInt(i.amount)},primaryType:`TransferWithAuthorization`,types:Sn}),to:o(i.recipient),type:`authorization`,validAfter:`0`,validBefore:s,value:i.amount},source:En({address:o(r.address),chainId:i.methodDetails.chainId})}))}})}function kn(e){return gn(e)&&e.request.scheme===`exact`&&typeof e.request.network==`string`}function An(e,t){let n=t.methodDetails.chainId,r=Tn(n);if(e.networks&&!e.networks.includes(n))throw Error(`EVM chain ID is not allowed: ${n}.`);let i=e.currencies??e.assets;if(i?.some(e=>ke(e))&&!e.networks?.length)throw Error(`EVM raw currency allowlists require networks.`);if(i){let e=o(t.currency);if(!i.some(t=>je(t,e,r)))throw Error(`EVM currency is not allowed: ${e}.`)}if(e.maxAtomicAmount!==void 0&&BigInt(t.amount)>BigInt(e.maxAtomicAmount))throw Error(`EVM charge amount exceeds maxAtomicAmount.`);if(e.maxAmount!==void 0){let n=Mn(e,t);if(n===void 0)throw Error(`EVM charge maxAmount requires currency decimals.`);if(BigInt(t.amount)>d(e.maxAmount,n))throw Error(`EVM charge amount exceeds maxAmount.`)}}function jn(e,t){let n=e.currencies??e.assets,r=o(t.currency),i=Tn(t.methodDetails.chainId),a=n?.find(e=>je(e,r,i)),s=a?Ae(a,i):void 0;if(s?.transfer?.type===`eip3009`)return{name:s.transfer.name,version:s.transfer.version};if(e.authorization)return e.authorization;throw Error(`EVM authorization requires token name and version.`)}function Mn(e,t){let n=e.currencies??e.assets,r=o(t.currency),i=Tn(t.methodDetails.chainId),a=n?.find(e=>je(e,r,i)),s=a?Ae(a,i):void 0;return s?.decimals===void 0?e.decimals:s.decimals}function Nn(e){return[Nn.charge(e)]}(function(e){e.charge=On,e.assets=Fe,e.chains=Ie})(Nn||={});var Pn=class extends Error{name=`Incur.BaseError`;shortMessage;details;constructor(e,t={}){let n=t.cause instanceof Error?t.cause.message:void 0,r=n?`${e}\n\nDetails: ${n}`:e;super(r,t.cause?{cause:t.cause}:void 0),this.shortMessage=e,this.details=n}walk(e){return Fn(this,e)}},Y=class extends Pn{name=`Incur.IncurError`;code;hint;retryable;exitCode;constructor(e){super(e.message,e.cause?{cause:e.cause}:void 0),this.code=e.code,this.hint=e.hint,this.retryable=e.retryable??!1,this.exitCode=e.exitCode}};function Fn(e,t){if(t){let n=e?.cause;for(;n;){if(t(n))return n;n=n?.cause}return}let n=e;for(;n?.cause;)n=n.cause;return n}const X={mainnet:4217,testnet:42431},In={usdc:`0x20C000000000000000000000b9537d11c60E8b50`,pathUsd:`0x20c0000000000000000000000000000000000000`},Ln={[X.mainnet]:In.usdc,[X.testnet]:In.pathUsd},Rn={[X.mainnet]:`0x33b901018174DDabE4841042ab76ba85D4e24f25`,[X.testnet]:`0xe1c4d3dce17bc111181ddf716f75bae49e61a336`},zn={[X.mainnet]:`https://rpc.tempo.xyz`,[X.testnet]:`https://rpc.moderato.tempo.xyz`},Z=(()=>{let e=process||{},t=e.argv||[],n=e.env||{},r=!(n.NO_COLOR||t.includes(`--no-color`))&&(!!n.FORCE_COLOR||t.includes(`--color`)||(e.stdout||{}).isTTY&&n.TERM!==`dumb`||!!n.CI),i=(e,t,n,r)=>{let i=``,a=0,o=r;do i+=e.substring(a,o)+n,a=o+t.length,o=e.indexOf(t,a);while(~o);return i+e.substring(a)},a=r?(e,t,n=e)=>r=>{let a=`${r}`,o=a.indexOf(t,e.length);return~o?e+i(a,t,n,o)+t:e+a+t}:()=>String;return{isColorSupported:r,reset:a(`\x1B[0m`,`\x1B[0m`),bold:a(`\x1B[1m`,`\x1B[22m`,`\x1B[22m\x1B[1m`),dim:a(`\x1B[2m`,`\x1B[22m`,`\x1B[22m\x1B[2m`),italic:a(`\x1B[3m`,`\x1B[23m`),underline:a(`\x1B[4m`,`\x1B[24m`),inverse:a(`\x1B[7m`,`\x1B[27m`),hidden:a(`\x1B[8m`,`\x1B[28m`),strikethrough:a(`\x1B[9m`,`\x1B[29m`),black:a(`\x1B[30m`,`\x1B[39m`),red:a(`\x1B[31m`,`\x1B[39m`),green:a(`\x1B[32m`,`\x1B[39m`),yellow:a(`\x1B[33m`,`\x1B[39m`),blue:a(`\x1B[34m`,`\x1B[39m`),magenta:a(`\x1B[35m`,`\x1B[39m`),cyan:a(`\x1B[36m`,`\x1B[39m`),white:a(`\x1B[37m`,`\x1B[39m`),gray:a(`\x1B[90m`,`\x1B[39m`),bgBlack:a(`\x1B[40m`,`\x1B[49m`),bgRed:a(`\x1B[41m`,`\x1B[49m`),bgGreen:a(`\x1B[42m`,`\x1B[49m`),bgYellow:a(`\x1B[43m`,`\x1B[49m`),bgBlue:a(`\x1B[44m`,`\x1B[49m`),bgMagenta:a(`\x1B[45m`,`\x1B[49m`),bgCyan:a(`\x1B[46m`,`\x1B[49m`),bgWhite:a(`\x1B[47m`,`\x1B[49m`),blackBright:a(`\x1B[90m`,`\x1B[39m`),redBright:a(`\x1B[91m`,`\x1B[39m`),greenBright:a(`\x1B[92m`,`\x1B[39m`),yellowBright:a(`\x1B[93m`,`\x1B[39m`),blueBright:a(`\x1B[94m`,`\x1B[39m`),magentaBright:a(`\x1B[95m`,`\x1B[39m`),cyanBright:a(`\x1B[96m`,`\x1B[39m`),whiteBright:a(`\x1B[97m`,`\x1B[39m`),bgBlackBright:a(`\x1B[100m`,`\x1B[49m`),bgRedBright:a(`\x1B[101m`,`\x1B[49m`),bgGreenBright:a(`\x1B[102m`,`\x1B[49m`),bgYellowBright:a(`\x1B[103m`,`\x1B[49m`),bgBlueBright:a(`\x1B[104m`,`\x1B[49m`),bgMagentaBright:a(`\x1B[105m`,`\x1B[49m`),bgCyanBright:a(`\x1B[106m`,`\x1B[49m`),bgWhiteBright:a(`\x1B[107m`,`\x1B[49m`),link(e,t,n){return r?`\x1b]8;;${e}\x07${n?t:Z.underline(t)}\x1b]8;;\x07`:t}}})();function Bn(e,t){return Z.link(e,t)}function Vn(e){return e.startsWith(`tempo:`)}function Hn(e,t,n=6,r){let[i,a]=(Number(e)/10**n).toString().split(`.`),o=i.replace(/\B(?=(\d{3})+(?!\d))/g,`_`),s=r?.explorerUrl&&r.token?Z.dim(Z.link(`${r.explorerUrl}/token/${r.token}`,t,!0)):Z.dim(t);return`${a?`${o}.${a}`:o} ${s}`}const Un={mainnet:zn[X.mainnet],testnet:zn[X.testnet]};function Wn(e,t={}){return e??(t.network?Un[t.network]:void 0)??(process.env.MPPX_RPC_URL?.trim()||process.env.RPC_URL?.trim()||void 0)}async function Gn(t={}){let n=Wn(t.rpcUrl,{network:t.network});if(!n)return N;let{getChainId:r}=await import(`viem/actions`),i=await r(e({transport:c(n)})),a=Object.values(await import(`viem/tempo/chains`)).filter(e=>typeof e==`object`&&!!e&&`id`in e&&e.id===i),o=a.find(e=>`serializers`in e&&e.serializers)??a[0];if(!o)throw Error(`Unknown chain ID ${i} from RPC ${n}`);return o}function Kn(e){return typeof e==`bigint`?e:e.amount}function qn(e){return e.id!==N.id}async function Jn(e,t,n){let{Actions:r}=await import(`viem/tempo`),[i,a]=await Promise.all([r.token.getBalance(e,{account:n,token:t}).then(Kn).catch(()=>0n),r.token.getMetadata(e,{token:t}).catch(()=>({symbol:t}))]);return{balance:i,symbol:{"0x20c0000000000000000000000000000000000000":`PathUSD`,"0x20C000000000000000000000b9537d11c60E8b50":`USDC`}[t]??a.symbol,decimals:`decimals`in a&&typeof a.decimals==`number`?a.decimals:6,token:t}}function Yn(){let e=Number.parseInt(process.env.MPPX_KEYCHAIN_COMMAND_TIMEOUT_MS??``,10);return Number.isFinite(e)&&e>0?e:1e4}function Xn(e,t){return`code`in e&&e.code===`ENOENT`&&e.message.includes(t)}function Zn(e){return new Y({code:`KEYCHAIN_UNAVAILABLE`,message:`Linux keyring requires secret-tool. Install libsecret-tools.`,hint:`On Debian/Ubuntu, run: sudo apt install libsecret-tools gnome-keyring dbus-x11`,exitCode:69,cause:e})}function Qn(e){if(e&&Xn(e,`secret-tool`))throw Zn(e)}function $n(e,t){return new Promise(n=>{O.execFile(e,t,{timeout:Yn()},(e,t,r)=>{n({stdout:t.trim(),stderr:r.trim(),error:e})})})}function er(){let e=j.join(process.env.XDG_CONFIG_HOME||j.join(A.homedir(),`.config`),`mppx`,`default`);return{get(){try{return k.readFileSync(e,`utf-8`).trim()||`main`}catch{return`main`}},set(t){k.mkdirSync(j.dirname(e),{recursive:!0}),k.writeFileSync(e,t,`utf-8`)},clear(){try{k.unlinkSync(e)}catch{}}}}function tr(e){return e||(process.env.MPPX_ACCOUNT?.trim()?process.env.MPPX_ACCOUNT:er().get())}function nr(e=`main`){let t=`mppx`;return{async list(){let e=A.platform();if(e===`darwin`){let{stdout:e,error:n}=await $n(`security`,[`dump-keychain`]);if(n)return[];let r=[],i=e.split(`keychain:`);for(let e of i){let n=e.match(/"svce"<blob>="([^"]*)"/),i=e.match(/"acct"<blob>="([^"]*)"/);n?.[1]===t&&i?.[1]&&r.push(i[1])}return r}if(e===`linux`){let{stdout:e,stderr:n,error:r}=await $n(`secret-tool`,[`search`,`--all`,`--unlock`,`service`,t]);if(Qn(r),r)return[];let i=`${e}\n${n}`,a=[],o=i.matchAll(/\baccount = (.+)/g);for(let e of o)e[1]&&a.push(e[1]);return a}throw Error(`Unsupported platform: ${e}`)},async get(){let n=A.platform();if(n===`darwin`){let{stdout:n,error:r}=await $n(`security`,[`find-generic-password`,`-s`,t,`-a`,e,`-w`]);return r?void 0:n}if(n===`linux`){let{stdout:n,error:r}=await $n(`secret-tool`,[`lookup`,`service`,t,`account`,e]);return Qn(r),r?void 0:n||void 0}throw Error(`Unsupported platform: ${n}`)},async set(n){let r=A.platform();if(r===`darwin`){await $n(`security`,[`delete-generic-password`,`-s`,t,`-a`,e]);let{error:r}=await $n(`security`,[`add-generic-password`,`-s`,t,`-a`,e,`-w`,n]);if(r)throw r;return}if(r===`linux`){let r=O.execFile(`secret-tool`,[`store`,`--label`,`${t} ${e}`,`service`,t,`account`,e]),i=setTimeout(()=>r.kill(),Yn());return r.stdin?.write(n),r.stdin?.end(),new Promise((e,t)=>{r.on(`close`,n=>{clearTimeout(i),n===0?e():t(Error(`secret-tool exited with code ${n}`))}),r.on(`error`,e=>{clearTimeout(i),t(Xn(e,`secret-tool`)?Zn(e):e)})})}throw Error(`Unsupported platform: ${r}`)},async delete(){let n=A.platform();if(n===`darwin`){await $n(`security`,[`delete-generic-password`,`-s`,t,`-a`,e]);return}if(n===`linux`){let{error:n}=await $n(`secret-tool`,[`clear`,`service`,t,`account`,e]);Qn(n);return}throw Error(`Unsupported platform: ${n}`)}}}async function rr(e){let{privateKeyToAccount:t}=await import(`viem/accounts`),n=process.env.MPPX_PRIVATE_KEY?.trim();if(n)return{account:t(n),source:`environment`};let r=tr(e),i=await nr(r).get();if(i)return{account:t(i),accountName:r,source:`keychain`};throw Error(`Account "${r}" not found.`)}async function ir(e){return(await rr(e)).account}function ar(e){return e}function or(){return ar({method:`evm`,supports:e=>e.method===`evm`&&!gn(e),async setup({challenge:t}){let n=t.request,r=n.methodDetails,a=r?.chainId,o=a?sr(a):void 0,s=n.currency,l=await ir(),u=[...Object.values(Ce),...Object.values(we),...Object.values(Te),...Object.values(Ee)],d=s??``;if(o&&s)try{let t=e({chain:o,transport:c()}),n=await p(t,{address:s,abi:i,functionName:`symbol`});n&&(d=n)}catch{}return{tokenSymbol:d,tokenDecimals:r?.decimals??6,explorerUrl:o?.blockExplorers?.default?.url,methods:[...Nn({account:l,currencies:u})]}}})}function sr(e){return Object.values(v).find(t=>t.id===e)}const cr=B.object({customer:B.optional(B.string().check(B.minLength(1))),hooks:B.optional(B.object({inputs:B.object({tax:B.object({calculation:B.string().check(B.minLength(1))})})})),metadata:B.optional(B.record(B.string(),B.string())),receipt_email:B.optional(B.string().check(B.minLength(1)))}),lr=Ot({name:`stripe`,intent:`charge`,schema:{credential:{payload:B.object({externalId:B.optional(B.string()),spt:B.string()})},request:B.pipe(B.object({amount:V(),currency:B.string(),decimals:B.number(),description:B.optional(B.string()),externalId:B.optional(B.string()),metadata:B.optional(B.record(B.string(),B.string())),networkId:B.string(),paymentIntentOptions:B.optional(cr),paymentMethodTypes:B.array(B.string()).check(B.minLength(1)),recipient:B.optional(B.string())}),B.transform(({amount:e,decimals:t,metadata:n,networkId:r,paymentIntentOptions:i,paymentMethodTypes:a,...o})=>({...o,amount:d(e,t).toString(),methodDetails:{networkId:r,paymentMethodTypes:a,...n!==void 0&&{metadata:n}}})))}});function ur(e){let{client:t,createToken:n,externalId:r,paymentMethod:i}=e;return kt(lr,{context:B.object({paymentMethod:B.optional(B.string())}),async createCredential({challenge:e,context:a}){let o=a?.paymentMethod??i;if(!o)throw Error(`paymentMethod is required (pass via context or parameters)`);let s=e.request.amount,c=e.request.currency,l=typeof e.request.externalId==`string`?e.request.externalId:void 0,u=e.request.methodDetails?.networkId;if(!u)throw Error(`networkId is required in challenge.methodDetails`);let d=e.request.methodDetails?.metadata;if(d?.externalId)throw Error(`methodDetails.metadata.externalId is reserved; use credential externalId instead`);let f=e.expires?Math.floor(new Date(e.expires).getTime()/1e3):Math.floor(Date.now()/1e3)+3600,p=await n({amount:s,challenge:e,client:t,currency:c,expiresAt:f,metadata:d,networkId:u,paymentMethod:o}),m=l??r;return K({challenge:e,payload:{spt:p,...m===void 0?{}:{externalId:m}}})}})}function dr(e){return[ur(e)]}(function(e){e.charge=ur})(dr||={});function fr(){return ar({method:`stripe`,supports(e){return e.method===`stripe`&&e.intent===`charge`},async setup({challenge:e,methodOpts:t}){let n=e.request,r=n.currency,i=mr(M.object({paymentMethod:M.string(),secretKey:M.string().optional()}),t,[`paymentMethod`,`secretKey`]),a=i.secretKey??process.env.MPPX_STRIPE_SECRET_KEY;if(!a)throw new Y({code:`MISSING_ENV`,message:`MPPX_STRIPE_SECRET_KEY environment variable is required for Stripe payments.`,exitCode:2});return{tokenSymbol:r?.toUpperCase()??``,tokenDecimals:n.decimals??2,methods:[dr.charge({paymentMethod:i.paymentMethod,createToken:async({paymentMethod:e,amount:t,currency:n,networkId:r,expiresAt:i,metadata:o})=>{let s=new URLSearchParams({payment_method:e,"usage_limits[currency]":n,"usage_limits[max_amount]":t,"usage_limits[expires_at]":i.toString()}),c=pr(a),l=process.env.MPPX_STRIPE_SPT_URL?process.env.MPPX_STRIPE_SPT_URL:c?`https://api.stripe.com/v1/test_helpers/shared_payment/granted_tokens`:`https://api.stripe.com/v1/shared_payment/issued_tokens`;if(r){let e=c?`seller_details[network_id]`:`seller_details[network_business_profile]`;s.set(e,r)}if(o)for(let[e,t]of Object.entries(o))s.set(`metadata[${e}]`,t);let u={Authorization:`Basic ${btoa(`${a}:`)}`,"Content-Type":`application/x-www-form-urlencoded`,"Stripe-Version":`2026-07-29.preview`},d=await globalThis.fetch(l,{method:`POST`,headers:u,body:s});if(!d.ok){let a=await d.json();if(c&&(o||r)&&a.error.message.includes(`Received unknown parameter`)){let r=new URLSearchParams({payment_method:e,"usage_limits[currency]":n,"usage_limits[max_amount]":t,"usage_limits[expires_at]":i.toString()});if(d=await globalThis.fetch(l,{method:`POST`,headers:u,body:r}),!d.ok)throw new Y({code:`STRIPE_ERROR`,message:`Failed to create SPT: ${(await d.json()).error.message}`,exitCode:77})}else throw new Y({code:`STRIPE_ERROR`,message:`Failed to create SPT: ${a.error.message}`,exitCode:77})}let{id:f}=await d.json();return f}})]}},formatReceiptField(e,t){if(e===`reference`&&typeof t==`string`&&t.startsWith(`pi_`)){let e=process.env.MPPX_STRIPE_SECRET_KEY,n=`https://dashboard.stripe.com${e!==void 0&&pr(e)?`/test`:``}/payments/${t}`;return Z.link(n,t,!0)}}})}function pr(e){return e.startsWith(`sk_test_`)||e.startsWith(`rk_test_`)}function mr(e,t,n){if(t&&typeof t==`object`&&!Array.isArray(t)){let e=Object.keys(t).filter(e=>!n.includes(e));if(e.length)throw Error(`Unsupported CLI method option(s): ${e.join(`, `)}`)}let r=e.safeParse(t??{});if(r.success)return r.data;let i=r.error.issues.map(e=>`${e.path.length?e.path.join(`.`):`options`}: ${e.message}`).join(`, `);throw Error(`Invalid CLI options (${i})`)}function hr(e){let t={};for(let n of e){let e=t[n.name]??={};e[n.intent]=br(n)}return t}function gr(e,t){let n=hr(e),r=Dr(e,n,t),i=e.map((e,t)=>({intent:e.intent,method:e.name,q:r[br(e)]??1,index:t}));return{definition:r,entries:i,header:vr(i),keys:n}}function _r(e){let t=e.split(/\s*,\s*/).map(e=>e.trim()).filter(Boolean);if(t.length===0)throw Error(`Accept-Payment header is empty.`);return t.map((e,t)=>Tr(e,t))}function vr(e){return e.map(({method:e,intent:t,q:n})=>{let r=`${e}/${t}`;return n===1?r:`${r};q=${jr(n)}`}).join(`, `)}function yr(e,t,n){let r=new Map;for(let e of t){let t=br(e),n=r.get(t);n?n.push(e):r.set(t,[e])}return e.flatMap((e,t)=>{let i=r.get(br(e));if(!i)return[];let a=xr(e,n);return!a||a.q<=0?[]:i.filter(t=>t.canHandleChallenge?.({challenge:e})??!0).map(n=>({challenge:e,index:t,match:a,method:n}))}).sort((e,t)=>wr(e.challenge)-wr(t.challenge)||t.match.q-e.match.q||e.index-t.index).map(e=>{let{match:t,...n}=e;return n})}function br(e){let t=e.method??e.name;if(!t)throw Error(`Missing payment method name.`);return`${t}/${e.intent}`}function xr(e,t){let n;for(let r of t){if(!Sr(e,r))continue;let t={...r,specificity:Cr(r)};(!n||t.specificity>n.specificity||t.specificity===n.specificity&&t.q>n.q||t.specificity===n.specificity&&t.q===n.q&&t.index<n.index)&&(n=t)}return n}function Sr(e,t){return(t.method===`*`||t.method===e.method)&&(t.intent===`*`||t.intent===e.intent)}function Cr(e){return Number(e.method!==`*`)+Number(e.intent!==`*`)}function wr(e){return+!!gn(e)}function Tr(e,t){let n=/^(?<method>[^/;\s]+|\*)\s*\/\s*(?<intent>[^/;\s]+|\*)(?<params>(?:\s*;\s*.+)?)$/u.exec(e),r=n?.groups?.method,i=n?.groups?.intent;if(!r||!i)throw Error(`Invalid Accept-Payment entry: ${e}`);Mr(r,`method`),Mr(i,`intent`);let a=1;for(let t of Er(n.groups?.params)){if(!t)continue;let n=/^(?<name>[A-Za-z0-9_-]+)\s*=\s*(?<value>\S+)$/u.exec(t),r=n?.groups?.name,i=n?.groups?.value;if(!r||!i)throw Error(`Invalid Accept-Payment parameter: ${t}`);r===`q`&&(a=kr(i,`Accept-Payment entry "${e}"`))}return{intent:i,method:r,q:a,index:t}}function Er(e){return e?e.split(/\s*;\s*/).filter(Boolean):[]}function Dr(e,t,n){if(!n)return{};let r=typeof n==`function`?n(t):n,i=new Set(e.map(e=>br(e))),a={};for(let[e,t]of Object.entries(r??{})){if(!i.has(e))throw Error(`Unknown payment preference "${e}". Available: ${[...i].join(`, `)}`);a[e]=Or(t,`payment preference "${e}"`)}return a}function Or(e,t){if(typeof e!=`number`||Number.isNaN(e)||!Number.isFinite(e))throw Error(`Invalid q-value for ${t}. Expected a finite number.`);return Ar(e,t)}function kr(e,t){if(!/^0(?:\.\d{0,3})?$|^1(?:\.0{0,3})?$/.test(e))throw Error(`Invalid q-value for ${t}. Expected an HTTP qvalue.`);return Ar(Number(e),t)}function Ar(e,t){if(e<0||e>1)throw Error(`Invalid q-value for ${t}. Expected a value between 0 and 1.`);let n=Math.round(e*1e3);if(Math.abs(e*1e3-n)>1e-9)throw Error(`Invalid q-value for ${t}. Expected at most 3 decimal places.`);return n/1e3}function jr(e){return e.toFixed(3).replace(/\.0+$/,``).replace(/(\.\d*?)0+$/,`$1`)}function Mr(e,t){if(e!==`*`&&!/^[a-z0-9-]+$/.test(e))throw Error(`Invalid Accept-Payment ${t}: ${e}`)}const Nr=[R.authorization,Nt,`PAYMENT-RESPONSE`,Pt];function Pr(e,t,n){let r=new Headers(e.headers);for(let e of Nr)e===R.authorization&&!r.get(e)?.startsWith(`Payment `)||r.delete(e);return r.set(t,n),{...e,headers:r}}function Fr(e){if(typeof e==`string`)try{let t=JSON.parse(e),n=t?.id;return t?.jsonrpc!==`2.0`||typeof t?.method!=`string`?void 0:typeof n==`string`||typeof n==`number`?n:void 0}catch{return}}const Ir=new WeakMap;function Lr(e){let t=Fr(e?.body);if(t===void 0)return;let n=new Headers(e?.headers);if(n.has(`mcp-method`))return t;let r=n.get(`accept`)?.toLowerCase()??``;return r.includes(`application/json`)&&r.includes(`text/event-stream`)?t:void 0}function Rr(e){if(!e||typeof e!=`object`)return;let t=e,n=t.id;if(t.jsonrpc!==`2.0`||n!==void 0&&typeof n!=`string`&&typeof n!=`number`)return;let r=`error`in t;if(r!==`result`in t)return r?Number.isInteger(t.error?.code)&&typeof t.error?.message==`string`?e:void 0:n!==void 0&&typeof t.result==`object`?e:void 0}function zr(e){if(!e||typeof e!=`object`)return;let t=e?.challenges;if(!Array.isArray(t)||t.length===0)return;let n=[];for(let e of t){let t=tt.safeParse(e);if(!t.success)return;n.push(t.data)}let{httpStatus:r,problem:i}=e;return{challenges:n,...typeof r==`number`?{httpStatus:r}:{},...i===void 0?{}:{problem:i}}}function Br(e){if(e)return`error`in e?e.error?.code!==-32042&&e.error?.code!==-32043?void 0:zr(e.error.data):zr(e.result?._meta?.[`org.paymentauth/payment-required`])}function Vr(e,t){return!e||e.id!==t?[]:Br(e)?.challenges??[]}async function Hr(e){let t=e.clone().body?.getReader();if(!t)return;let n=new TextDecoder,r=!1,i,a=ce({onEvent(e){if(!(r||!e.data)&&(r=!0,!(e.event&&e.event!==`message`)))try{i=Rr(JSON.parse(e.data))}catch{}}});try{for(;;){if(r)return i;let{done:e,value:o}=await t.read();if(e)return a.feed(n.decode()),a.reset({consume:!0}),i;a.feed(n.decode(o,{stream:!0}))}}finally{t.cancel().catch(()=>{})}}function Ur(e){let t=Ir.get(e);if(t)return t;let n=(async()=>{let t=e.headers.get(`content-type`)?.toLowerCase()??``;if(t.includes(`application/json`))return e.clone().json().then(Rr).catch(()=>void 0);if(t.includes(`text/event-stream`))return Hr(e)})();return Ir.set(e,n),n}function Wr(){return{getChallenges(e,t){let n=Lr(t);return e.status===402||n===void 0?[]:Ur(e).then(e=>Vr(e,n))},setCredential(e,t){let n=JSON.parse(e.body),r=bt(t);return{...e,body:JSON.stringify({...n,params:{...n.params,_meta:{...n.params?._meta,"org.paymentauth/credential":r}}})}}}}function Gr(){return{getChallenges(e){return e.status!==402||!e.headers.has(R.wwwAuthenticate)?[]:dt(e)},setCredential(e,t,n){return Pr(e,n?.challenge?ht(n.challenge):R.authorization,t)}}}function Kr(){return{getChallenges(e){if(e.status!==402)return[];let t=e.headers.get(Nt);if(!t)return[];let n=$t(t);if(e.url&&n.resource.url!==e.url)throw Error(`x402 payment-required resource does not match response URL.`);return n.accepts.flatMap((e,t)=>{let r=Bt.safeParse(e);if(!r.success)return[];let i=r.data;return hn(nt({id:`x402:${t}`,intent:`charge`,method:`evm`,realm:new URL(n.resource.url).host,request:{...i,...n.extensions?{extensions:n.extensions}:{},resource:n.resource}}))})},setCredential(e,t){return Pr(e,Pt,t)}}}function qr(e){return e}function Jr(){let e=[Gr(),Kr(),Wr()],t=new WeakMap,n=(e,n)=>{for(let r of n)t.set(r,e);return n},r=(t,r)=>{let i=(a,o)=>{for(let s=a;s<e.length;s++){let a=e[s],c=a.getChallenges(t,r);if(c instanceof Promise)return c.then(e=>i(s+1,[...o,...n(a,e)]));o.push(...n(a,c))}return o};return i(0,[])};return qr({name:`http`,isPaymentRequired(e,t){if(e.status===402)return!0;let n=r(e,t);return n instanceof Promise?n.then(e=>e.length>0):n.length>0},getChallenges(e,t){return r(e,t)},setCredential(n,r,i){let a=i?.challenge?t.get(i.challenge):void 0,o=e[0];if(!a&&!o)throw Error(`No protocol to attach the credential.`);return(a??o).setCredential(n,r,i)}})}const Yr=new WeakMap;function Xr(e,t){return Yr.set(e,t),e}function Zr(e){return Yr.has(e)}function Qr(e,t){return Promise.resolve(Yr.get(e)?.(t))}const $r=new WeakMap,ei=new WeakMap;function ti(e,t){return $r.set(e,t),e}function ni(e){$r.delete(e)}function ri(e,t,n){$r.has(e)&&ei.set(t,n)}function ii(e){return ei.get(e)}function ai(e,t){return Promise.resolve($r.get(e)?.(t)??t.response)}const oi=Symbol.for(`mppx.fetch.wrapper`),si=new WeakMap;async function ci(e,t){let n=e?.attempt.settle;if(!n)return t.status!==`pending`;e.attempt.settle=void 0;let r=await n(t);return r||(e.attempt.settle=n),r}function li(e){let{acceptPayment:t,acceptPaymentPolicy:n=`always`,fetch:r=globalThis.fetch,maxPaymentRetries:i=3,methods:a,onChallenge:o,orderChallenges:s,transport:c=Jr()}=e,l=e.eventDispatcher??ui(),u=t??gr(a),d=ji(r),f=async(e,t,r)=>{let p=Ai(e,t?.headers),m=p.has(R.acceptPayment),h=Ii(p,u),g=Oi(e,t,p),_=Di(e,t,p,h.header,m,n),v=await d(Mi(_.input),_.init),y=ki(_.init,await g);if(!await c.isPaymentRequired(v,y))return v;let b=t?.context,{context:x,orderChallenges:S,...C}=y??{},w,T,E,D;try{for(let n=0;n<i;n++){T=await c.getChallenges(v,y);let i=(await Li(yr(T,a,h.entries),S??s))[0];if(!i){if(await ci(D,{challenges:T,response:v,status:`rejected`}),n>0)return v;throw Error(`No method found for challenges: ${T.map(e=>`${e.method}.${e.intent}`).join(`, `)}. Available: ${a.map(e=>`${e.name}.${e.intent}`).join(`, `)}`)}let u=i.challenge;w=u,E=i.method,w.expires&&Dt(w.expires,w.id);let p=Hi(v,_.input,_.input),m=D,g=rt(u),x=m?.method===i.method&&m?.key===g,O=!1;if(m){let e=await ci(m,{challenges:T,response:v,status:x?`pending`:`rejected`});O=x&&!e}D=O?m:void 0;let k=hi(async e=>{if(e===void 0&&O&&m)return m.promise;O&&m&&(await ci(m,{status:`rejected`}),D=void 0);let t=e??b;if(!Zr(i.method))return Fi(u,i.method,t);let n={prepare:()=>Qr(i.method,{challenge:u,context:t,fetch:d,input:p})},r=n.prepare().then(()=>Fi(u,i.method,t,n));return D={attempt:n,key:e===void 0?g:void 0,method:i.method,promise:r},r}),A=await l.emit(`challenge.received`,gi({challenge:u,challenges:T,createCredential:k,init:t,input:e,method:i.method,response:v}))??(o?await o(w,{createCredential:k}):void 0)??await k(),j=D;j&&await j.promise.catch(()=>void 0)!==A&&(await ci(j,{status:`rejected`}),D=void 0),Pi(A),await l.emit(`credential.created`,_i({challenge:u,credential:A,init:t,input:e,method:i.method,response:v})),v=await d(p,c.setCredential({...C,headers:_.headers},A,{challenge:u}));let M=await c.isPaymentRequired(v,y);if(M||(await ci(j,{response:v,status:v.ok?`accepted`:`rejected`}),D=void 0),v.ok&&di(l,`payment.response`)&&await l.emit(`payment.response`,vi({challenge:u,credential:A,init:t,input:e,method:i.method,response:v})),!M)return v.ok?ai(i.method,{challenge:u,credential:A,fetch:d,headers:_.headers,input:p,...r?{refetch:()=>f(Mi(_.input),t,!1)}:{},response:v,signal:Ni(e,t)}):v}T=void 0;try{T=await c.getChallenges(v,y)}catch{}return await ci(D,{challenges:T,response:v,status:`rejected`}),v}catch(n){throw await ci(D,{challenges:T,response:v,status:`rejected`}),await l.emit(`payment.failed`,yi({challenge:w,challenges:T,error:n,init:t,input:e,method:E,response:v})),n}},p=(e,t)=>f(e,t,!0);return p[oi]=d,p}function Q(e){if(!e)return{};if(e instanceof Headers){let t={};return e.forEach((e,n)=>{t[n]=e}),t}return Array.isArray(e)?Object.fromEntries(e):e}function ui(){let e={"*":new Set,"challenge.received":new Set,"credential.created":new Set,"payment.failed":new Set,"payment.response":new Set},t={async emit(t,n){switch(t){case`challenge.received`:{let r;for(let t of e[`challenge.received`]){let e=await fi(t,n);if(typeof e==`string`&&e.length>0){r=e;break}}return await mi(e[`*`],t,n),r}case`credential.created`:await pi(e[`credential.created`],n),await mi(e[`*`],t,n);return;case`payment.failed`:await pi(e[`payment.failed`],n),await mi(e[`*`],t,n);return;case`payment.response`:await pi(e[`payment.response`],n),await mi(e[`*`],t,n);return}},on:(t,n)=>{switch(t){case`*`:case`challenge.received`:case`credential.created`:case`payment.failed`:case`payment.response`:return e[t].add(n),()=>e[t].delete(n);default:throw Error(`Unknown client event "${String(t)}".`)}}};return si.set(t,t=>e[t].size>0||e[`*`].size>0),t}function di(e,t){return si.get(e)?.(t)??!0}async function fi(e,t){try{return await e(t)}catch{return}}async function pi(e,t){for(let n of e)try{await n(t)}catch{}}async function mi(e,t,n){await pi(e,Object.freeze({name:t,payload:n}))}function hi(e){let t;return n=>(t??=e(n),t)}function gi(e){return Object.freeze({challenge:wi(e.challenge),challenges:e.challenges.map(e=>wi(e)),createCredential:e.createCredential,init:bi(e.init),input:xi(e.input),method:Si(e.method),response:Ci(e.response)})}function _i(e){return Object.freeze({challenge:wi(e.challenge),credential:e.credential,init:bi(e.init),input:xi(e.input),method:Si(e.method),...e.response===void 0?{}:{response:Ci(e.response)}})}function vi(e){return Object.freeze({challenge:wi(e.challenge),credential:e.credential,init:bi(e.init),input:xi(e.input),method:Si(e.method),response:Ci(e.response)})}function yi(e){return Object.freeze({...e.challenge?{challenge:wi(e.challenge)}:{},...e.challenges?{challenges:e.challenges.map(e=>wi(e))}:{},error:e.error,init:bi(e.init),input:xi(e.input),...e.method?{method:Si(e.method)}:{},...e.response===void 0?{}:{response:Ci(e.response)}})}function bi(e){if(e)return Ei({...e,...e.headers?{headers:new Headers(e.headers)}:{}})}function xi(e){if(e instanceof Request)try{return e.clone()}catch{return e}return e instanceof URL?new URL(e):e}function Si(e){return Ei(Object.assign({},e))}function Ci(e){return e instanceof Response?e.clone():wi(e)}function wi(e){try{return Ti(structuredClone(e))}catch{return Ei(e)}}function Ti(e){if(!e||typeof e!=`object`||Object.isFrozen(e))return e;Object.freeze(e);for(let t of Object.values(e))Ti(t);return e}function Ei(e){return!e||typeof e!=`object`||Object.isFrozen(e)||Object.freeze(e),e}function Di(e,t,n,r,i,a){let o=!!r&&!i&&Ri(e,a);if(!o)return{headers:n,init:t,input:e};let s=new Headers(e instanceof Request?e.headers:void 0);return n.forEach((e,t)=>{s.set(t,e)}),s.set(R.acceptPayment,r),t?(t.headers=s,{headers:s,init:t,input:e}):{headers:s,init:o?{headers:s}:void 0,input:e}}function Oi(e,t,n){if(!(!(e instanceof Request)||t?.body!==void 0||!e.body||e.bodyUsed)){if(!n.has(`mcp-method`)){let e=n.get(`accept`)?.toLowerCase()??``;if(!e.includes(`application/json`)||!e.includes(`text/event-stream`))return}try{return e.clone().text().catch(()=>void 0)}catch{return}}}function ki(e,t){return t===void 0?e:{...e,body:t}}function Ai(e,t){return t?new Headers(t):new Headers(e instanceof Request?e.headers:void 0)}function ji(e){let t=e;for(;t[oi];)t=t[oi];return t}function Mi(e){if(!(e instanceof Request)||!e.body||e.bodyUsed)return e;try{return e.clone()}catch{return e}}function Ni(e,t){return t?.signal??(e instanceof Request?e.signal:void 0)}function Pi(e){if(!e.trim())throw Error(`Credential header value must be non-empty`);if(e.includes(`\r`)||e.includes(`
2
+ `))throw Error(`Credential header value contains illegal newline characters`)}async function Fi(e,t,n,r){let i=t.context&&n!==void 0?t.context.parse(n):void 0,a=i===void 0?{challenge:e}:{challenge:e,context:i};return r&&ri(t,a,r),t.createCredential(a)}function Ii(e,t){let n=e.get(R.acceptPayment);if(!n)return t;try{return{...t,entries:_r(n),header:n}}catch{return t}}async function Li(e,t){return t?t(e):e}function Ri(e,t){if(t===`always`)return!0;if(t===`never`)return!1;let n=Vi(e);return t===`same-origin`?!Bi()||n.origin===globalThis.location.origin:t.origins.some(e=>zi(n,e))}function zi(e,t){if(t.startsWith(`*.`)){let n=t.slice(1);return e.hostname.endsWith(n)||e.hostname===t.slice(2)}return e.origin===new URL(t).origin}function Bi(){return globalThis.location!==void 0}function Vi(e){return e instanceof URL?e:e instanceof Request?new URL(e.url):new URL(e,Bi()?globalThis.location.href:void 0)}function Hi(e,t,n){if(!e.url)return t;let r=new URL(e.url),i=Vi(n);if(r.origin!==i.origin)throw Error(`Refusing to send payment credential across redirect from ${i.origin} to ${r.origin}`);return e.url}function Ui(e={}){let{account:t}=e;return(e,{account:n}={})=>{let r=n??t;if(!r){if(!e.account)throw Error("No `account` provided. Pass `account` to parameters or context.");return e.account}return oe(r)}}function Wi(e){return Object.fromEntries(Object.entries(e.headers??{}).filter(([e])=>e.toLowerCase()!==`content-type`))}const Gi={[N.id]:N,[ee.id]:ee};function Ki(e,t={}){return c(e.url,{fetchFn:e.fetch,fetchOptions:{headers:Wi(e)},...t})}function qi(r){let{chain:i,getClient:a,remoteFeePayer:o,rpcUrl:s}=r;return a?!i?.serializers&&!o?a:async e=>{let r=await a(e),s=r;if(o&&r.transport.key!==`feePayer`){let e=r.request.bind(r),i=ae(n({request:t=>e(t)},{retryCount:0}),Ki(o,{retryCount:r.transport.retryCount}))({account:r.account,chain:r.chain,pollingInterval:r.pollingInterval,retryCount:0}),a=t({...i.config,retryCount:0},i.value);s=Object.assign({},r,{request:a.request,transport:{...a.config,...a.value}})}return!i?.serializers||s.chain?.serializers?.transaction?s:Object.assign({},s,{chain:{...i,...s.chain,formatters:s.chain?.formatters??i.formatters,prepareTransactionRequest:s.chain?.prepareTransactionRequest??i.prepareTransactionRequest,serializers:s.chain?.serializers?.transaction?s.chain.serializers:i.serializers}})}:({chainId:t})=>{if(!s)throw Error("No `rpcUrl` provided.");let n=t||Number(Object.keys(s)[0]),r=s[n];if(!r)throw Error(`No \`rpcUrl\` configured for \`chainId\` (${n}).`);let a=o?ae(c(r),Ki(o)):c(r);return e({chain:Gi[n]??{...i,id:n},transport:a})}}const Ji=w.slice(C.keccak256(S.fromString(`mpp`),{as:`Hex`}),0,4);function Yi(e){let t=C.keccak256(S.fromString(e),{as:`Hex`});return w.toBytes(w.slice(t,0,10))}function Xi(e){let{serverId:t,clientId:n,challengeId:r}=e,i=new Uint8Array(32);return i.set(w.toBytes(Ji),0),i[4]=1,i.set(Yi(t),5),n&&i.set(Yi(n),15),i.set(Zi(r),25),w.fromBytes(i)}function Zi(e){let t=C.keccak256(S.fromString(e),{as:`Hex`});return w.toBytes(w.slice(t,0,7))}function Qi(e,t){return ue.resolve(e).toLowerCase()===ue.resolve(t).toLowerCase()}const $i=[In.pathUsd,In.usdc];async function ea(e,t){let{account:n,amountOut:r,tokenOut:i,tokenIn:a,slippage:o}=t,s=a.filter(e=>!Qi(e,i)),c=await Promise.allSettled([p(e,F.token.getBalance.call(e,{account:n,token:i})),...s.map(t=>p(e,F.token.getBalance.call(e,{account:n,token:t})))]),l=c[0];if(!(l.status===`fulfilled`&&l.value>=r)){for(let t=0;t<s.length;t++){let n=c[t+1];if(n.status!==`fulfilled`)continue;let a=n.value;if(a<=0n)continue;let l=s[t];try{let t=await F.dex.getBuyQuote(e,{tokenIn:l,tokenOut:i,amountOut:r});if(a>=t){let n=t+t*BigInt(Math.round(o*100))/10000n;return[F.token.approve.call(e,{amount:n,spender:ne.stablecoinDex,token:l}),F.dex.buy.call({tokenIn:l,tokenOut:i,amountOut:r,maxAmountIn:n})]}}catch{}}throw new na({currency:i})}}function ta(e,t){return e?e===!0?{tokenIn:t,slippage:1}:{tokenIn:e.tokenIn?[...e.tokenIn,...t.filter(t=>!e.tokenIn.some(e=>Qi(e,t)))]:t,slippage:e.slippage??1}:!1}var na=class extends Error{name=`InsufficientFundsError`;constructor({currency:e}){super(`Insufficient funds: no balance in ${e} and no viable swap route from fallback currencies.`)}};function ra(e){let t=BigInt(e.amount),n=e.methodDetails?.splits??[],r=n.reduce((e,t)=>e+BigInt(t.amount),0n);if(r>=t)throw Error(`Invalid charge request: split total must be less than total amount.`);let i=t-r;if(i<=0n)throw Error(`Invalid charge request: primary transfer amount must be positive.`);return[{amount:i.toString(),memo:e.methodDetails?.memo,recipient:e.recipient},...n.map(e=>({amount:e.amount,memo:e.memo,recipient:e.recipient}))]}function ia(e,t,n){t&&(n&&!n.some(e=>Qi(e,t))||e.some(e=>Qi(e,t))||e.push(t))}async function aa(e,t,n){try{return(await F.token.getBalance(e,{account:t,token:n})).amount>0n}catch{return!1}}function oa(e){let t=e.chain?.feeToken;if(t)return re.toAddress(t);let n=e.chain?.id;return n?Ln[n]:void 0}function sa(e){let t=[];return ia(t,In.pathUsd),ia(t,Ln[e]),t}async function ca(e){let{account:t,allowedTokens:n,candidateTokens:r,client:i,prioritizeCandidates:a}=e,o=[];if(a)for(let e of r??[])ia(o,e,n);if(ia(o,await F.fee.getUserToken(i,{account:t}).then(e=>e?.address).catch(()=>void 0),n),ia(o,oa(i),n),!a)for(let e of r??[])ia(o,e,n);for(let e of o)if(await aa(i,t,e))return e;return o[0]}const la={Proof:[{name:`account`,type:`address`},{name:`challengeId`,type:`string`},{name:`realm`,type:`string`}]};function ua(e){return{name:`MPP`,version:`3`,chainId:e}}function da(e){let{account:t,challengeId:n,realm:r}=e;return{account:t,challengeId:n,realm:r}}function fa(e){let{account:t,chainId:n,challengeId:r,realm:i}=e;return{domain:ua(n),types:la,primaryType:`Proof`,message:da({account:t,challengeId:r,realm:i})}}function pa(e){return`did:pkh:eip155:${e.chainId}:${e.address}`}const ma=[`push`,`pull`],ha=B.object({amount:V(),memo:B.optional(U()),recipient:B.pipe(B.string(),B.transform(e=>e))}),ga=(1n<<64n)-1n,_a={dev_second:1n,day:86400n,week:604800n},va=B.pipe(H(),B.transform(e=>e.toLowerCase())),ya=B.object({accessKeyAddress:va,keyType:B.enum([`p256`,`secp256k1`,`webAuthn`])}),ba=B.object({accessKey:B.optional(ya),chainId:B.optional(B.number())}),xa=Xe(`subscriptionExpires must be a valid date`).check(B.refine(e=>e.getTime()%1e3==0,`subscriptionExpires must be representable as whole seconds`)),Sa=B.enum([`dev_second`,`day`,`week`]),Ca=B.pipe(B.union([B.string(),B.bigint(),B.custom(e=>typeof e==`number`&&Number.isSafeInteger(e))]),B.transform(e=>e.toString())).check(B.regex(/^[1-9]\d*$/,`Invalid periodCount`),B.refine(e=>{try{return BigInt(e)<=ga}catch{return!1}},`periodCount exceeds uint64`));function wa(e){return B.refine(e=>{let{amount:t,decimals:n}=e;return d(t,n)>0n},e)}function Ta(e){let{periodCount:t,periodUnit:n}=e;try{let e=_a[n];return e!==void 0&&BigInt(t)*e<=ga}catch{return!1}}const Ea=Ot({name:`tempo`,intent:`charge`,schema:{credential:{payload:B.discriminatedUnion(`type`,[B.object({hash:U(),type:B.literal(`hash`)}),B.object({signature:W(),type:B.literal(`transaction`)}),B.object({signature:W(),type:B.literal(`proof`)})])},request:B.pipe(B.object({amount:V(),chainId:B.optional(B.number()),currency:B.string(),decimals:B.number(),description:B.optional(B.string()),externalId:B.optional(B.string()),feePayer:B.optional(B.pipe(B.union([B.boolean(),B.custom()]),B.transform(e=>typeof e==`object`||e))),memo:B.optional(U()),recipient:B.optional(B.string()),splits:B.optional(B.array(ha).check(B.minLength(1),B.maxLength(10))),supportedModes:B.optional(B.array(B.enum(ma)).check(B.minLength(1)))}).check(B.refine(({amount:e,decimals:t,splits:n})=>{if(!n)return!0;let r=d(e,t),i=n.reduce((e,n)=>e+d(n.amount,t),0n);return n.every(e=>d(e.amount,t)>0n)&&i<r},`Invalid splits`)),B.transform(({amount:e,chainId:t,decimals:n,feePayer:r,memo:i,splits:a,supportedModes:o,...s})=>({...s,amount:d(e,n).toString(),...t!==void 0||r!==void 0||i!==void 0||a!==void 0||o!==void 0?{methodDetails:{...t!==void 0&&{chainId:t},...r!==void 0&&{feePayer:r},...i!==void 0&&{memo:i},...a!==void 0&&{splits:a.map(e=>({...e,amount:d(e.amount,n).toString()}))},...o!==void 0&&{supportedModes:o}}}:{}})))}}),Da=Ot({name:`tempo`,intent:`session`,schema:{credential:{payload:B.discriminatedUnion(`action`,[B.object({action:B.literal(`open`),authorizedSigner:B.optional(B.string()),channelId:U(),cumulativeAmount:V(),descriptor:B.optional(B.custom()),signature:W(),transaction:W(),type:B.literal(`transaction`)}),B.object({action:B.literal(`topUp`),additionalDeposit:V(),channelId:U(),descriptor:B.optional(B.custom()),transaction:W(),type:B.literal(`transaction`)}),B.object({action:B.literal(`voucher`),channelId:U(),cumulativeAmount:V(),descriptor:B.optional(B.custom()),signature:W()}),B.object({action:B.literal(`close`),channelId:U(),cumulativeAmount:V(),descriptor:B.optional(B.custom()),signature:W()})])},request:B.pipe(B.object({amount:V(),chainId:B.optional(B.number()),channelId:B.optional(U()),currency:B.string(),decimals:B.number(),escrowContract:B.optional(B.string()),feePayer:B.optional(B.pipe(B.union([B.boolean(),B.custom()]),B.transform(e=>typeof e==`object`||e))),feeToken:B.optional(H()),minVoucherDelta:B.optional(V()),operator:B.optional(H()),recipient:B.optional(B.string()),sessionProtocol:B.optional(B.enum([Ge.v2,Ge.v1])),sessionSnapshot:B.optional(B.custom()),suggestedDeposit:B.optional(V()),unitType:B.string()}).check(B.refine(({amount:e,decimals:t})=>d(e,t)>0n,`Session amount must be greater than 0`)),B.transform(({amount:e,chainId:t,channelId:n,decimals:r,escrowContract:i,feePayer:a,feeToken:o,minVoucherDelta:s,operator:c,sessionProtocol:l,sessionSnapshot:u,suggestedDeposit:f,...p})=>({...p,amount:d(e,r).toString(),...f?{suggestedDeposit:d(f,r).toString()}:{},methodDetails:{escrowContract:i,...n!==void 0&&{channelId:n},...s!==void 0&&{minVoucherDelta:d(s,r).toString()},...t!==void 0&&{chainId:t},...a!==void 0&&{feePayer:a},...o!==void 0&&{feeToken:o},...c!==void 0&&{operator:c},...l!==void 0&&{[We.sessionProtocol]:l},...u!==void 0&&{[We.sessionSnapshot]:u}}})))}}),Oa=Ot({name:`tempo`,intent:`subscription`,schema:{credential:{payload:B.object({signature:W(),type:B.literal(`keyAuthorization`)})},request:B.pipe(B.object({amount:V(),accessKey:B.optional(ya),chainId:B.optional(B.number()),currency:va,decimals:B.number(),description:B.optional(B.string()),externalId:B.optional(B.string()),methodDetails:B.optional(ba),periodCount:Ca,periodUnit:Sa,recipient:va,subscriptionExpires:xa}).check(wa(`Subscription amount must be greater than 0`),B.refine(Ta,`Subscription period exceeds uint64`)),B.transform(({accessKey:e,amount:t,chainId:n,decimals:r,methodDetails:i,subscriptionExpires:a,...o})=>{let s={...i,...e!==void 0&&{accessKey:e},...n!==void 0&&{chainId:n}};return{...o,amount:d(t,r).toString(),subscriptionExpires:a.toISOString(),...Object.keys(s).length>0?{methodDetails:s}:{}}}))}}),ka=fe({addresses:{4217:`0x20c000000000000000000000f37de3740ADec032`,42431:`0x20c000000000000000000000f37de3740ADec032`},currency:`USD`,decimals:6,name:`MACH`,symbol:`MACH`}),Aa=B.object({account:B.optional(B.custom()),autoSwap:B.optional(B.custom()),mode:B.optional(B.enum(ma))});function ja(e={}){let{clientId:t}=e,n=qi({chain:N,getClient:e.getClient,rpcUrl:zn}),r=Ui({account:e.account});return kt(Ea,{context:Aa,async createCredential({challenge:i,context:a}){let o=i.request.methodDetails?.chainId;if(e.expectedChainId!==void 0&&o!==void 0&&o!==e.expectedChainId)throw Error(`Chain ID mismatch: expected ${e.expectedChainId}, got ${o}.`);let s=o??e.expectedChainId,c=await n({chainId:s}),l=s??c.chain?.id;if(l===void 0)throw Error("No `chainId` provided. Pass a chain ID in the challenge or client.");let{request:d}=i,{amount:p,methodDetails:v}=d,y=v?.supportedModes??[`pull`,`push`],b=r(c,a);if(BigInt(p)===0n)return K({challenge:i,payload:{signature:await _(c,{account:b,...fa({account:b.address,chainId:l,challengeId:i.id,realm:i.realm})}),type:`proof`},source:pa({address:b.address,chainId:l})});let x=d.currency;if(e.expectedRecipients){let t=new Set(e.expectedRecipients.map(e=>e.toLowerCase())),n=v?.splits;if(n){for(let e of n)if(!t.has(e.recipient.toLowerCase()))throw Error(`Unexpected split recipient: ${e.recipient}`)}}let S=v?.memo?v.memo:Xi({challengeId:i.id,clientId:t,serverId:i.realm}),C=ra({amount:p,methodDetails:{...v,memo:S},recipient:d.recipient}).map(e=>F.token.transfer.call(c,{amount:BigInt(e.amount),...e.memo&&{memo:e.memo},to:e.recipient,token:x})),w=ta(a?.autoSwap??e.autoSwap,$i),T=await e.resolveAccount?.({account:b,chainId:l,operation:{kind:`executeCalls`,...w?{}:{calls:C}}})??b,E=(()=>{let t=a?.mode??e.mode;if(t){if(!y.includes(t))throw Error(`Challenge does not support ${t} mode.`);return t}let n=T.type===`json-rpc`?`push`:`pull`;return y.includes(n)?n:y[0]})(),D=[...(w?await ea(c,{account:T.address,amountOut:BigInt(p),tokenOut:x,tokenIn:w.tokenIn,slippage:w.slippage}):void 0)??[],...C],O=ka.addresses[l],k=sa(l),A=O&&u(x,O)?await ca({account:T.address,allowedTokens:k,candidateTokens:k,client:c,prioritizeCandidates:!0}):void 0,j=(()=>{let e=Math.floor(Date.now()/1e3)+25;if(!i.expires)return e;let t=Math.floor(new Date(i.expires).getTime()/1e3);return Math.min(e,t)})();if(E===`push`){let{receipts:e}=T.type===`local`?{receipts:[await h(c,{account:T,calls:D,...A?{feeToken:A}:{},nonceKey:`expiring`,validBefore:j})]}:await m(c,{account:T,...A?{capabilities:{feeToken:A}}:{},calls:D,experimental_fallback:D.length===1,forceAtomic:D.length>1}),t=e?.[0]?.transactionHash;if(!t)throw Error(`No transaction receipt returned.`);return K({challenge:i,payload:{hash:t,type:`hash`},source:pa({address:T.address,chainId:l})})}let M=await f(c,{account:T,calls:D,...A?{feeToken:A}:{},nonceKey:`expiring`,validBefore:j});if(M.gas=(M.gas??0n)+5000n,v?.feePayer){let e=M;delete e.feePayerSignature,delete e.feeToken,e.feePayer=!0}return K({challenge:i,payload:{signature:await g(c,M),type:`transaction`},source:pa({address:T.address,chainId:l})})}})}function Ma(e){return`accessKeyAddress`in e}function Na(e){return Ma(e)?e.accessKeyAddress:e.address}function Pa(e,t){return{name:`Tempo Stream Channel`,version:`1`,chainId:t,verifyingContract:e}}const Fa={Voucher:[{name:`channelId`,type:`bytes32`},{name:`cumulativeAmount`,type:`uint128`}]};function Ia(e){return{channelId:e.channelId,cumulativeAmount:e.cumulativeAmount}}function La(e,t,n){return s({domain:Pa(e,t),types:Fa,primaryType:`Voucher`,message:Ia(n)})}async function Ra(e,t,n,r,i){return _(e,{account:t,domain:Pa(r,i),types:Fa,primaryType:`Voucher`,message:Ia(n)})}function za(e){let t=L.from(e);if(t.type===`keychain`){if(t.inner.type!==`secp256k1`)throw Error(`Session vouchers only unwrap secp256k1 keychain signatures; pass a direct voucherSigner for other key types.`);return E.toHex(t.inner.signature)}return L.serialize(t)}function Ba(e){return e.type!==`keychain`&&e.type===`secp256k1`}function Va(e){if(!Ba(e))throw Error(`Session vouchers only support secp256k1 signatures until TIP-1020 voucher verification is enabled.`)}async function Ha(e,t,n,r,i,a){let o=a??t,s=Na(o),c=La(r,i,n),l=za(Ma(o)?await o.sign({hash:c,raw:!0}):await Ra(e,o,n,r,i)),u=L.from(l);if(Va(u),!L.verify(u,{address:s,payload:c}))throw Error(`voucher signature does not match voucher signer`);return l}function Ua(e){let t=b.encode(b.from([`address payer`,`address payee`,`address token`,`bytes32 salt`,`address authorizedSigner`,`address escrowContract`,`uint256 chainId`]),[e.payer,e.payee,e.token,e.salt,e.authorizedSigner,e.escrowContract,BigInt(e.chainId)]);return C.keccak256(t)}const Wa=[{type:`function`,name:`CLOSE_GRACE_PERIOD`,inputs:[],outputs:[{name:``,type:`uint64`,internalType:`uint64`}],stateMutability:`view`},{type:`function`,name:`VOUCHER_TYPEHASH`,inputs:[],outputs:[{name:``,type:`bytes32`,internalType:`bytes32`}],stateMutability:`view`},{type:`function`,name:`channels`,inputs:[{name:``,type:`bytes32`,internalType:`bytes32`}],outputs:[{name:`finalized`,type:`bool`,internalType:`bool`},{name:`closeRequestedAt`,type:`uint64`,internalType:`uint64`},{name:`payer`,type:`address`,internalType:`address`},{name:`payee`,type:`address`,internalType:`address`},{name:`token`,type:`address`,internalType:`address`},{name:`authorizedSigner`,type:`address`,internalType:`address`},{name:`deposit`,type:`uint128`,internalType:`uint128`},{name:`settled`,type:`uint128`,internalType:`uint128`}],stateMutability:`view`},{type:`function`,name:`close`,inputs:[{name:`channelId`,type:`bytes32`,internalType:`bytes32`},{name:`cumulativeAmount`,type:`uint128`,internalType:`uint128`},{name:`signature`,type:`bytes`,internalType:`bytes`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`computeChannelId`,inputs:[{name:`payer`,type:`address`,internalType:`address`},{name:`payee`,type:`address`,internalType:`address`},{name:`token`,type:`address`,internalType:`address`},{name:`salt`,type:`bytes32`,internalType:`bytes32`},{name:`authorizedSigner`,type:`address`,internalType:`address`}],outputs:[{name:``,type:`bytes32`,internalType:`bytes32`}],stateMutability:`view`},{type:`function`,name:`domainSeparator`,inputs:[],outputs:[{name:``,type:`bytes32`,internalType:`bytes32`}],stateMutability:`view`},{type:`function`,name:`eip712Domain`,inputs:[],outputs:[{name:`fields`,type:`bytes1`,internalType:`bytes1`},{name:`name`,type:`string`,internalType:`string`},{name:`version`,type:`string`,internalType:`string`},{name:`chainId`,type:`uint256`,internalType:`uint256`},{name:`verifyingContract`,type:`address`,internalType:`address`},{name:`salt`,type:`bytes32`,internalType:`bytes32`},{name:`extensions`,type:`uint256[]`,internalType:`uint256[]`}],stateMutability:`view`},{type:`function`,name:`getChannel`,inputs:[{name:`channelId`,type:`bytes32`,internalType:`bytes32`}],outputs:[{name:``,type:`tuple`,internalType:`struct TempoStreamChannel.Channel`,components:[{name:`finalized`,type:`bool`,internalType:`bool`},{name:`closeRequestedAt`,type:`uint64`,internalType:`uint64`},{name:`payer`,type:`address`,internalType:`address`},{name:`payee`,type:`address`,internalType:`address`},{name:`token`,type:`address`,internalType:`address`},{name:`authorizedSigner`,type:`address`,internalType:`address`},{name:`deposit`,type:`uint128`,internalType:`uint128`},{name:`settled`,type:`uint128`,internalType:`uint128`}]}],stateMutability:`view`},{type:`function`,name:`getChannelsBatch`,inputs:[{name:`channelIds`,type:`bytes32[]`,internalType:`bytes32[]`}],outputs:[{name:`channelStates`,type:`tuple[]`,internalType:`struct TempoStreamChannel.Channel[]`,components:[{name:`finalized`,type:`bool`,internalType:`bool`},{name:`closeRequestedAt`,type:`uint64`,internalType:`uint64`},{name:`payer`,type:`address`,internalType:`address`},{name:`payee`,type:`address`,internalType:`address`},{name:`token`,type:`address`,internalType:`address`},{name:`authorizedSigner`,type:`address`,internalType:`address`},{name:`deposit`,type:`uint128`,internalType:`uint128`},{name:`settled`,type:`uint128`,internalType:`uint128`}]}],stateMutability:`view`},{type:`function`,name:`getVoucherDigest`,inputs:[{name:`channelId`,type:`bytes32`,internalType:`bytes32`},{name:`cumulativeAmount`,type:`uint128`,internalType:`uint128`}],outputs:[{name:``,type:`bytes32`,internalType:`bytes32`}],stateMutability:`view`},{type:`function`,name:`open`,inputs:[{name:`payee`,type:`address`,internalType:`address`},{name:`token`,type:`address`,internalType:`address`},{name:`deposit`,type:`uint128`,internalType:`uint128`},{name:`salt`,type:`bytes32`,internalType:`bytes32`},{name:`authorizedSigner`,type:`address`,internalType:`address`}],outputs:[{name:`channelId`,type:`bytes32`,internalType:`bytes32`}],stateMutability:`nonpayable`},{type:`function`,name:`requestClose`,inputs:[{name:`channelId`,type:`bytes32`,internalType:`bytes32`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`settle`,inputs:[{name:`channelId`,type:`bytes32`,internalType:`bytes32`},{name:`cumulativeAmount`,type:`uint128`,internalType:`uint128`},{name:`signature`,type:`bytes`,internalType:`bytes`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`topUp`,inputs:[{name:`channelId`,type:`bytes32`,internalType:`bytes32`},{name:`additionalDeposit`,type:`uint256`,internalType:`uint256`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`withdraw`,inputs:[{name:`channelId`,type:`bytes32`,internalType:`bytes32`}],outputs:[],stateMutability:`nonpayable`},{type:`event`,name:`ChannelClosed`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0,internalType:`bytes32`},{name:`payer`,type:`address`,indexed:!0,internalType:`address`},{name:`payee`,type:`address`,indexed:!0,internalType:`address`},{name:`settledToPayee`,type:`uint256`,indexed:!1,internalType:`uint256`},{name:`refundedToPayer`,type:`uint256`,indexed:!1,internalType:`uint256`}],anonymous:!1},{type:`event`,name:`ChannelExpired`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0,internalType:`bytes32`},{name:`payer`,type:`address`,indexed:!0,internalType:`address`},{name:`payee`,type:`address`,indexed:!0,internalType:`address`}],anonymous:!1},{type:`event`,name:`ChannelOpened`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0,internalType:`bytes32`},{name:`payer`,type:`address`,indexed:!0,internalType:`address`},{name:`payee`,type:`address`,indexed:!0,internalType:`address`},{name:`token`,type:`address`,indexed:!1,internalType:`address`},{name:`authorizedSigner`,type:`address`,indexed:!1,internalType:`address`},{name:`salt`,type:`bytes32`,indexed:!1,internalType:`bytes32`},{name:`deposit`,type:`uint256`,indexed:!1,internalType:`uint256`}],anonymous:!1},{type:`event`,name:`CloseRequestCancelled`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0,internalType:`bytes32`},{name:`payer`,type:`address`,indexed:!0,internalType:`address`},{name:`payee`,type:`address`,indexed:!0,internalType:`address`}],anonymous:!1},{type:`event`,name:`CloseRequested`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0,internalType:`bytes32`},{name:`payer`,type:`address`,indexed:!0,internalType:`address`},{name:`payee`,type:`address`,indexed:!0,internalType:`address`},{name:`closeGraceEnd`,type:`uint256`,indexed:!1,internalType:`uint256`}],anonymous:!1},{type:`event`,name:`Settled`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0,internalType:`bytes32`},{name:`payer`,type:`address`,indexed:!0,internalType:`address`},{name:`payee`,type:`address`,indexed:!0,internalType:`address`},{name:`cumulativeAmount`,type:`uint256`,indexed:!1,internalType:`uint256`},{name:`deltaPaid`,type:`uint256`,indexed:!1,internalType:`uint256`},{name:`newSettled`,type:`uint256`,indexed:!1,internalType:`uint256`}],anonymous:!1},{type:`event`,name:`TopUp`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0,internalType:`bytes32`},{name:`payer`,type:`address`,indexed:!0,internalType:`address`},{name:`payee`,type:`address`,indexed:!0,internalType:`address`},{name:`additionalDeposit`,type:`uint256`,indexed:!1,internalType:`uint256`},{name:`newDeposit`,type:`uint256`,indexed:!1,internalType:`uint256`}],anonymous:!1},{type:`error`,name:`AmountExceedsDeposit`,inputs:[]},{type:`error`,name:`AmountNotIncreasing`,inputs:[]},{type:`error`,name:`ChannelAlreadyExists`,inputs:[]},{type:`error`,name:`ChannelFinalized`,inputs:[]},{type:`error`,name:`ChannelNotFound`,inputs:[]},{type:`error`,name:`CloseNotReady`,inputs:[]},{type:`error`,name:`DepositOverflow`,inputs:[]},{type:`error`,name:`InvalidPayee`,inputs:[]},{type:`error`,name:`InvalidSignature`,inputs:[]},{type:`error`,name:`NotPayee`,inputs:[]},{type:`error`,name:`NotPayer`,inputs:[]},{type:`error`,name:`TransferFailed`,inputs:[]}];async function Ga(e,t,n){return p(e,{address:t,abi:Wa,functionName:`getChannel`,args:[n]})}a({abi:Wa,name:`open`}),a({abi:Wa,name:`topUp`});function Ka(e,t){return t??e}function qa(e,t,n,r=!1){let i=e.request.methodDetails?.escrowContract,a=n??Rn[t];if(!a&&!(r&&i))throw Error("No trusted `escrowContract` available. Provide it in client parameters or use a supported chain.");if(i&&a&&i.toLowerCase()!==a.toLowerCase()&&(!r||n!==void 0))throw Error(`Tempo session escrow ${i} does not match client escrow ${a}.`);return i&&(!a||i.toLowerCase()!==a.toLowerCase())?i:a}function Ja(e,t,n,r){return K({challenge:e,payload:t,source:`did:pkh:eip155:${n}:${r.address}`})}async function Ya(e,t,n,r,i,a,o){let s=Ka(t,o),c=await Ha(e,t,{channelId:n,cumulativeAmount:r},i,a,s);return{action:`voucher`,channelId:n,cumulativeAmount:r.toString(),signature:c}}async function Xa(e,t,n){let{escrowContract:i,payee:a,currency:o,deposit:s,initialAmount:c,chainId:l,feePayer:u}=n,d=Ka(t,n.voucherSigner),p=Na(d),m=w.random(32),h=Ua({authorizedSigner:p,chainId:l,escrowContract:i,payee:a,payer:t.address,salt:m,token:o}),_=r({abi:P.tip20,functionName:`approve`,args:[i,s]}),v=r({abi:Wa,functionName:`open`,args:[a,o,s,m,p]}),y=Math.floor(Date.now()/1e3)+25,b=await f(e,{account:t,calls:[{to:o,data:_},{to:i,data:v}],feeToken:o,nonceKey:`expiring`,validBefore:y});b.gas=(b.gas??0n)+5000n,u&&(b.feePayer=!0);let x=await g(e,b),S=await Ha(e,t,{channelId:h,cumulativeAmount:c},i,l,d);return{entry:{authorizedSigner:p,channelId:h,salt:m,cumulativeAmount:c,escrowContract:i,chainId:l,opened:!0},payload:{action:`open`,type:`transaction`,channelId:h,transaction:x,authorizedSigner:p,cumulativeAmount:c.toString(),signature:S}}}async function Za(e,t,n,r){try{let i=await Ga(e,t,n);if(i.deposit>0n&&!i.finalized)return{authorizedSigner:BigInt(i.authorizedSigner)===0n?i.payer:i.authorizedSigner,channelId:n,salt:`0x`,cumulativeAmount:i.settled,escrowContract:t,chainId:r,opened:!0}}catch{}}const Qa=B.object({account:B.optional(B.custom()),action:B.optional(B.enum([`open`,`topUp`,`voucher`,`close`])),channelId:B.optional(B.string()),cumulativeAmount:B.optional(V()),cumulativeAmountRaw:B.optional(B.string()),transaction:B.optional(B.string()),additionalDeposit:B.optional(V()),additionalDepositRaw:B.optional(B.string()),depositRaw:B.optional(B.string())});function $a(e={}){let{allowCustomEscrow:t=!1,decimals:n=6}=e,r=qi({chain:N,getClient:e.getClient,rpcUrl:zn}),i=Ui({account:e.account}),a=e.maxDeposit===void 0?void 0:d(e.maxDeposit,n),o=new Map,s=new Map,c=new Map;function l(t){e.onChannelUpdate?.(t)}function u(e,t,n){return`${e.toLowerCase()}:${t.toLowerCase()}:${n.toLowerCase()}`}function f(n,r,i){if(i){let e=o.get(i);if(e)return qa(n,r,e)}return qa(n,r,e.escrowContract,t)}async function p(t,i,p){let m=t.request.methodDetails,h=m?.chainId??0,g=await r({chainId:h}),_=f(t,h),v=t.request.recipient,y=t.request.currency,b=BigInt(t.request.amount),x=t.request.suggestedDeposit,S=x?BigInt(x):void 0,C=(()=>{if(p?.depositRaw)return BigInt(p.depositRaw);if(e.deposit!==void 0)return d(e.deposit,n);if(S!==void 0&&a!==void 0)return S<a?S:a;if(a!==void 0)return a;if(S!==void 0)return S;throw Error("No deposit amount available. Set `deposit`, `maxDeposit`, or ensure the server challenge includes `suggestedDeposit`.")})(),w=e.voucherSigner??i,T=u(v,y,_),E=s.get(T);if(!E){let e=p?.channelId??m?.channelId;if(e){let t=await Za(g,_,e,h);if(t){let e=p?.cumulativeAmountRaw?BigInt(p.cumulativeAmountRaw):p?.cumulativeAmount?d(p.cumulativeAmount,n):void 0;e!==void 0&&(t.cumulativeAmount=e),s.set(T,t),c.set(t.channelId,T),o.set(t.channelId,_),E=t,l(E)}else if(p?.channelId)throw Error(`Channel ${p.channelId} cannot be reused (closed or not found on-chain).`)}}E?.opened&&E.authorizedSigner.toLowerCase()!==Na(w).toLowerCase()&&(E=void 0);let D;if(E?.opened)E.cumulativeAmount+=b,D=await Ya(g,i,E.channelId,E.cumulativeAmount,_,h,w),l(E);else{let e=await Xa(g,i,{voucherSigner:w,escrowContract:_,payee:v,currency:y,deposit:C,initialAmount:b,chainId:h,feePayer:m?.feePayer});s.set(T,e.entry),c.set(e.entry.channelId,T),o.set(e.entry.channelId,_),D=e.payload,l(e.entry)}return Ja(t,D,h,i)}async function m(t,i,a){let u=t.request.methodDetails?.chainId??0,p=await r({chainId:u}),m=a.action,{channelId:h,transaction:g}=a,_=e.voucherSigner??i,v=h,y=a.cumulativeAmountRaw?BigInt(a.cumulativeAmountRaw):a.cumulativeAmount?d(a.cumulativeAmount,n):void 0,b=a.additionalDepositRaw?BigInt(a.additionalDepositRaw):a.additionalDeposit?d(a.additionalDeposit,n):void 0,x=f(t,u,v);o.set(v,x);let S;switch(m){case`open`:{if(!g)throw Error(`transaction required for open action`);if(y===void 0)throw Error(`cumulativeAmount required for open action`);let e=await Ha(p,i,{channelId:v,cumulativeAmount:y},x,u,_);S={action:`open`,type:`transaction`,channelId:v,transaction:g,authorizedSigner:Na(_),cumulativeAmount:y.toString(),signature:e};break}case`topUp`:if(!g)throw Error(`transaction required for topUp action`);if(b===void 0)throw Error(`additionalDeposit required for topUp action`);S={action:`topUp`,type:`transaction`,channelId:v,transaction:g,additionalDeposit:b.toString()};break;case`voucher`:{if(y===void 0)throw Error(`cumulativeAmount required for voucher action`);S=await Ya(p,i,v,y,x,u,_);let e=c.get(v);if(e){let t=s.get(e);t&&(t.cumulativeAmount=t.cumulativeAmount>y?t.cumulativeAmount:y,l(t))}break}case`close`:{if(y===void 0)throw Error(`cumulativeAmount required for close action`);let e=await Ha(p,i,{channelId:v,cumulativeAmount:y},x,u,_);S={action:`close`,channelId:v,cumulativeAmount:y.toString(),signature:e};let t=c.get(v);if(t){let e=s.get(t);e&&(e.opened=!1,e.cumulativeAmount=e.cumulativeAmount>y?e.cumulativeAmount:y,l(e))}break}}return Ja(t,S,u,i)}return kt(Da,{canHandleChallenge({challenge:e}){let t=Ke(e.request.methodDetails,We.sessionProtocol);return t===void 0||t===Ge.v1},context:Qa,async createCredential({challenge:t,context:n}){let o=t.request.methodDetails?.chainId??0,s=await r({chainId:o}),c=i(s,n);if(!n?.action&&(e.deposit!==void 0||a!==void 0))return p(t,c,n);if(n?.action)return m(t,c,n);throw Error("No `action` in context and no `deposit` or `maxDeposit` configured. Either provide context with action/channelId/cumulativeAmount, or configure `deposit`/`maxDeposit` for auto-management.")}})}const eo=(1n<<96n)-1n;function to(e){return e>=0n&&e<=eo}function no(e){if(!/^\d{1,29}$/.test(e))return;let t=BigInt(e);return to(t)?t:void 0}function ro(e){return io(e),e}function io(e){if(!to(e))throw Error(`Value ${e} is outside uint96 bounds.`)}const ao=new Set([`open`,`topUp`,`voucher`,`close`]);function oo(e){return typeof e==`object`&&!!e}function so(e){return typeof e==`string`&&ao.has(e)}function co(e){if(typeof e!=`object`||!e)return!1;let t=e;return!(typeof t.channelId!=`string`||t.action!==void 0&&!so(t.action))}function lo(e,t=`No session credential context available.`){if(!co(e))throw Error(t);return e}function uo(e){let t=e.request.amount;if(typeof t!=`string`)throw Error(`Session challenge is missing amount.`);return BigInt(t)}function fo(e){return oo(e)?typeof e.channelId==`string`&&typeof e.requiredCumulative==`string`&&typeof e.acceptedCumulative==`string`&&typeof e.deposit==`string`:!1}function po(e){return oo(e)?e.method===`tempo`&&e.intent===`session`&&e.status===`success`&&typeof e.timestamp==`string`&&typeof e.reference==`string`&&typeof e.challengeId==`string`&&typeof e.channelId==`string`&&typeof e.acceptedCumulative==`string`&&typeof e.spent==`string`&&(e.units===void 0||typeof e.units==`number`)&&(e.txHash===void 0||typeof e.txHash==`string`):!1}function mo(e){let t=x.toString(e),n=JSON.parse(t);if(!po(n))throw Error(`Invalid session receipt.`);return n}function ho(e){return e.headers.get(`content-type`)?.toLowerCase().startsWith(`text/event-stream`)??!1}function go(e){let t=`message`,n=[];for(let r of e.split(`
3
3
  `))r.startsWith(`event: `)?t=r.slice(7).trim():r.startsWith(`data: `)?n.push(r.slice(6)):r===`data:`&&n.push(``);if(n.length===0)return null;let r=n.join(`
4
4
  `);switch(t){case`message`:return{type:`message`,data:r};case`payment-need-voucher`:{let e=_o(r);return fo(e)?{type:`payment-need-voucher`,data:e}:null}case`payment-receipt`:{let e=_o(r);return po(e)?{type:`payment-receipt`,data:e}:null}default:return{type:`message`,data:r}}}function _o(e){try{return JSON.parse(e)}catch{return null}}function vo(e){return JSON.stringify({mpp:`authorization`,authorization:e})}function yo(){return JSON.stringify({mpp:`payment-close-request`})}function bo(e){let t=xo(e);return t?t.mpp===`authorization`&&typeof t.authorization==`string`?{mpp:`authorization`,authorization:t.authorization}:t.mpp===`message`&&typeof t.data==`string`?{mpp:`message`,data:t.data}:t.mpp===`payment-close-request`?{mpp:`payment-close-request`}:t.mpp===`payment-close-ready`&&po(t.data)?{mpp:`payment-close-ready`,data:t.data}:t.mpp===`payment-error`&&typeof t.status==`number`&&typeof t.message==`string`?{mpp:`payment-error`,status:t.status,message:t.message}:t.mpp===`payment-need-voucher`&&fo(t.data)?{mpp:`payment-need-voucher`,data:t.data}:t.mpp===`payment-receipt`&&po(t.data)?{mpp:`payment-receipt`,data:t.data}:null:null}function xo(e){try{let t=JSON.parse(e);return typeof t!=`object`||!t?null:t}catch{return null}}const So=`0x4d50500000000000000000000000000000000000`,Co={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3};function wo(e){let t=e.allowCustomEscrow??!1,n=e.fetch??globalThis.fetch,r=e.webSocket??globalThis.WebSocket,i=e.maxDeposit===void 0?null:d(e.maxDeposit,e.decimals??6),a=null,o=null,s=null,c=0n,l=0n,u=null,f=null,p=null,m=null,h=null,g=null,_=null,v=0n,y=0n,b=$a({account:e.account,allowCustomEscrow:t,voucherSigner:e.voucherSigner,getClient:e.client?()=>e.client:e.getClient,escrowContract:e.escrowContract,decimals:e.decimals,maxDeposit:e.maxDeposit,onChannelUpdate(e){e.channelId!==a?.channelId&&(c=0n,l=0n),a=e}}),x=li({fetch:n,methods:[b],onChallenge:async(e,t)=>{o=e},orderChallenges:e.orderChallenges});function S(e){if(!e||e.channelId!==a?.channelId)return;C(e);let t=BigInt(e.acceptedCumulative),n=BigInt(e.spent);c=c>t?c:t,l=l>n?l:n}function C(e){if(!a||e.channelId!==a.channelId)return;let t=BigInt(e.acceptedCumulative),n=BigInt(e.spent);if(n>t)throw Error(`receipt spent exceeds accepted cumulative voucher amount`);if(t>a.cumulativeAmount)throw Error(`receipt accepted cumulative exceeds local voucher state`);if(n>a.cumulativeAmount)throw Error(`receipt spent exceeds local voucher state`);j(t),j(n)}function w(e=()=>!0){if(_)throw Error(`receipt wait already in progress`);return new Promise((t,n)=>{_={predicate:e,resolve:t,reject:n}})}function T(){if(m)return Promise.resolve(m);if(h)throw Error(`close-ready wait already in progress`);return new Promise((e,t)=>{h={resolve:e,reject:t}})}function E(e){if(!_||!_.predicate(e))return;let t=_;_=null,t.resolve(e)}function D(e){if(m=e,!h)return;let t=h;h=null,t.resolve(e)}function O(e){if(!_)return;let t=_;_=null,t.reject(e)}function k(e){if(!h)return;let t=h;h=null,t.reject(e)}function A(e,t){if(m&&m.challengeId===e.id&&m.channelId===t)return m.spent;let n=a?.channelId===t?a.cumulativeAmount:0n;if(y>0n){let e=v*y,t=l>e?l:e;return(t>n?n:t).toString()}return(l>c?l:c).toString()}function j(e){if(i!==null&&!(e<=i))throw Error(`requested voucher amount ${e} exceeds local maxDeposit ${i}`)}function M(e){let t=e.headers.get(R.paymentReceipt),n=t?mo(t):null;return S(n),Object.assign(e,{receipt:n,challenge:o,channelId:a?.channelId??null,cumulative:a?.cumulativeAmount??0n})}async function N(e,t){return s=e,M(await x(e,t))}function ee(e){let t=new Map,n=!1,r=[],i=e.readyState,a=(e,n,i)=>{let a=t.get(e);if(a||(a=new Set,t.set(e,a)),a.add({once:typeof i==`object`&&i.once===!0,value:n}),e===`message`&&r){let e=r;r=null;for(let t of e)s(`message`,t)}},o=(e,n)=>{let r=t.get(e);if(r)for(let e of r)e.value===n&&r.delete(e)},s=(e,a)=>{if(e===`close`){if(n)return;n=!0,i=Co.CLOSED,r=null}if(e===`open`&&(i=Co.OPEN),e===`message`&&r){r.push(a);return}let o=`on${e}`,s=c[o];typeof s==`function`&&s(a);let l=t.get(e);if(l)for(let e of Array.from(l))typeof e.value==`function`?e.value(a):e.value.handleEvent(a),e.once&&l.delete(e)},c={addEventListener:a,close(t,n){e.close(t,n)},get bufferedAmount(){return e.bufferedAmount},get extensions(){return e.extensions},on(e,t){a(e,t)},onclose:null,onerror:null,_onmessage:null,get onmessage(){return c._onmessage},set onmessage(e){if(c._onmessage=e,e&&r){let e=r;r=null;for(let t of e)s(`message`,t)}},onopen:null,off(e,t){o(e,t)},get protocol(){return e.protocol},get readyState(){return i},removeEventListener:o,send(t){e.send(t)},get url(){return e.url}};return{emit:s,socket:c}}return{get channelId(){return a?.channelId},get cumulative(){return a?.cumulativeAmount??0n},get opened(){return a?.opened??!1},async open(e){if(a?.opened)return;if(!o)throw Error(`No challenge available. Make a request first to receive a 402 challenge, or pass a challenge via .fetch()/.sse().`);let t=e?.deposit,r=await b.createCredential({challenge:o,context:{...t!==void 0&&{depositRaw:t.toString()}}});if(!s)throw Error(`No URL available — call fetch() or sse() before open().`);let i=await n(s,{method:`POST`,headers:{[R.authorization]:r}});if(!i.ok){let e=await i.text().catch(()=>``),t=i.headers.get(R.wwwAuthenticate)??``;throw Error(`Open request failed with status ${i.status}${e?`: ${e}`:``}${t?` [${R.wwwAuthenticate}: ${t}]`:``}`)}},fetch:N,async sse(e,t){let{onReceipt:r,signal:i,...s}=t??{},c=await N(e,{...s,headers:{...Q(s.headers),Accept:`text/event-stream`},...i?{signal:i}:{}}),l=o;if(!c.body)throw Error(`Response has no body.`);let u=c.body.getReader(),d=new TextDecoder;async function*f(){let t=``;try{for(;!i?.aborted;){let{done:i,value:o}=await u.read();if(i)break;t+=d.decode(o,{stream:!0});let s=t.split(`
5
5
 
@@ -16,4 +16,4 @@ import{createClient as e,createTransport as t,custom as n,encodeFunctionData as
16
16
  `})}catch{}o=``;continue}if(e.length===0)u(`
17
17
  `);else try{let t=JSON.parse(e);u(t.token??t.choices?.[0]?.delta?.content??e)}catch{u(e)}o=``}}};for(;;){let{done:e,value:t}=await r.read();if(e)break;a+=i.decode(t,{stream:!0});let n=a.split(`
18
18
  `);a=n.pop(),await d(n)}a.trim()&&await d([a]),t.channelId&&t.escrowContract&&t.chainId&&await au({channelId:t.channelId,cumulativeAmount:n,escrowContract:t.escrowContract,chainId:t.chainId,fetchUrl:t.fetchUrl,fetchInit:t.fetchInit,session:t.session,info:t.info,verbose:t.verbose,tokenSymbol:t.tokenSymbol,tokenDecimals:t.tokenDecimals,explorerUrl:t.explorerUrl,confirmEnabled:!1})}async function au(e){let t=await e.session.signVoucher({channelId:e.channelId,cumulativeAmount:e.cumulativeAmount,escrowContract:e.escrowContract,chainId:e.chainId,action:`close`}),n=await globalThis.fetch(e.fetchUrl,{...e.fetchInit,headers:{...Q(e.fetchInit.headers),Authorization:t}});if(n.ok){if(hu(e.channelId),e.verbose>=1){let t=n.headers.get(R.paymentReceipt),r;if(t)try{let e=JSON.parse(x.toString(t));typeof e.txHash==`string`&&(r=e.txHash)}catch{}let i=r&&e.explorerUrl?` ${Z.dim(Bn(`${e.explorerUrl}/tx/${r}`,r))}`:``;e.info(`${Z.dim(`Channel closed.`)} ${Z.dim(`Spent ${Hn(e.cumulativeAmount,e.tokenSymbol,e.tokenDecimals)}.`)}${i}\n`)}}else{let t=await n.text().catch(()=>``);e.info(`\n${Z.dim(Z.yellow(`Channel close failed`))} ${Z.dim(`(${n.status})`)}\n`),e.info(`${Z.dim(` channelId: ${e.channelId}`)}\n${Z.dim(` cumulativeAmount: ${e.cumulativeAmount}`)}\n${Z.dim(` escrowContract: ${e.escrowContract}`)}\n${Z.dim(` chainId: ${e.chainId}`)}\n${Z.dim(` response: ${t||`(empty)`}`)}\n`)}}function ou(e=100){return!process.stdin.isTTY||!process.stdout.isTTY?Promise.resolve(void 0):new Promise(t=>{let n=process.stdin.isRaw,r=``,i=()=>{clearTimeout(a),process.stdin.removeListener(`data`,o),process.stdin.isTTY&&process.stdin.setRawMode(n??!1),process.stdin.pause()},a=setTimeout(()=>{i(),t(void 0)},e),o=e=>{r+=e.toString();let n=r.match(/\x1b\]11;rgb:([0-9a-f]+)\/([0-9a-f]+)\/([0-9a-f]+)/i);if(!n)return;i();let a=e=>Number.parseInt(e.slice(0,2),16);t({r:a(n[1]),g:a(n[2]),b:a(n[3])})};process.stdin.setRawMode(!0),process.stdin.resume(),process.stdin.on(`data`,o),process.stdout.write(`\x1B]11;?\x07`)})}function su(e){return cu($l,e,eu)}function cu(e,t,n){if(t&&typeof t==`object`&&!Array.isArray(t)){let e=Object.keys(t).filter(e=>!n.includes(e));if(e.length)throw Error(`Unsupported CLI method option(s): ${e.join(`, `)}`)}let r=e.safeParse(t??{});if(r.success)return r.data;let i=r.error.issues.map(e=>`${e.path.length?e.path.join(`.`):`options`}: ${e.message}`).join(`, `);throw Error(`Invalid CLI options (${i})`)}function lu(e){let t=e.challenge.request.methodDetails?.chainId;if(!t||!e.clientChainId||t===e.clientChainId)return;let n=t===4217?` Use --network mainnet or --rpc-url https://rpc.tempo.xyz.`:t===42431?` Use --network testnet or --rpc-url https://rpc.moderato.tempo.xyz.`:``;throw new Y({code:`CHAIN_MISMATCH`,message:`Challenge requires chainId ${t}, but RPC is chainId ${e.clientChainId}.${n}`,exitCode:2})}function uu(e){if(e)return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function du(e){let t=uu(e.tokenIn)??uu(e.payWith);if(!(!e.autoSwap&&!t&&e.slippage===void 0)){if(e.autoSwap===!1&&!t&&e.slippage===void 0)return!1;if(e.slippage!==void 0&&(!Number.isFinite(e.slippage)||e.slippage<0))throw Error(`Invalid CLI options (slippage: expected a non-negative number)`);return{...t?{tokenIn:t}:{},...e.slippage===void 0?{}:{slippage:e.slippage}}}}function fu(){return j.join(process.env.XDG_CONFIG_HOME||j.join(A.homedir(),`.config`),`mppx`,`channels`)}function pu(e){try{let t=k.readFileSync(j.join(fu(),e),`utf-8`).trim();return t?BigInt(t):void 0}catch{return}}function mu(e,t){let n=fu();k.mkdirSync(n,{recursive:!0}),k.writeFileSync(j.join(n,e),t.toString(),`utf-8`)}function hu(e){try{k.unlinkSync(j.join(fu(),e))}catch{}}function gu(){return A.platform()===`darwin`?j.join(A.homedir(),`Library`,`Application Support`,`tempo`,`wallet`,`keys.toml`):j.join(process.env.XDG_DATA_HOME||j.join(A.homedir(),`.local`,`share`),`tempo`,`wallet`,`keys.toml`)}function _u(){try{let e=k.readFileSync(gu(),`utf-8`),t=[],n;for(let r of e.split(`
19
- `)){let e=r.trim();if(e===`[[keys]]`){n?.wallet_address&&t.push(n),n={wallet_type:`local`,wallet_address:``,chain_id:0};continue}if(!n)continue;let i=e.match(/^(\w+)\s*=\s*"?([^"]*)"?$/);if(!i)continue;let[,a,o]=i;a===`wallet_type`?n.wallet_type=o:a===`wallet_address`?n.wallet_address=o:a===`chain_id`&&(n.chain_id=Number.parseInt(o,10))}return n?.wallet_address&&t.push(n),t}catch{return[]}}function vu(e){let t=_u();if(t.length===0)return;let n=e.slice(6);if(n==="default"||n===``)return t[0];let r=Number.parseInt(n,10);if(!Number.isNaN(r)&&r>=0&&r<t.length)return t[r]}let yu;function bu(){if(yu!==void 0)return yu;try{O.execFileSync(`which`,[`tempo`],{stdio:`ignore`}),yu=!0}catch{yu=!1}return yu}async function xu(e){return new Promise((t,n)=>{O.execFile(`tempo`,[`mpp`,`sign`,`--challenge`,e],(e,r,i)=>{if(e){let t=i?.trim()||e.message;n(Error(`tempo mpp sign failed: ${t}`));return}let a=r.trim();if(!a){n(Error(`tempo mpp sign returned empty output`));return}t(a)})})}function Su(){let e=er();if(Vn(e.get())&&!bu()&&A.platform()===`darwin`)try{let t=O.execFileSync(`security`,[`dump-keychain`],{encoding:`utf-8`}),n=[];for(let e of t.split(`keychain:`)){let t=e.match(/"svce"<blob>="([^"]*)"/),r=e.match(/"acct"<blob>="([^"]*)"/);t?.[1]===`mppx`&&r?.[1]&&n.push(r[1])}if(n.length>0)return e.set(n[0]),n[0]}catch{}}export{ar as createPlugin,or as evm,fr as stripe,tu as tempo};
19
+ `)){let e=r.trim();if(e===`[[keys]]`){n?.wallet_address&&t.push(n),n={wallet_type:`local`,wallet_address:``,chain_id:0};continue}if(!n)continue;let i=e.match(/^(\w+)\s*=\s*"?([^"]*)"?$/);if(!i)continue;let[,a,o]=i;a===`wallet_type`?n.wallet_type=o:a===`wallet_address`?n.wallet_address=o:a===`chain_id`&&(n.chain_id=Number.parseInt(o,10))}return n?.wallet_address&&t.push(n),t}catch{return[]}}function vu(e){let t=_u();if(t.length===0)return;let n=e.slice(6);if(n==="default"||n===``)return t[0];let r=Number.parseInt(n,10);if(!Number.isNaN(r)&&r>=0&&r<t.length)return t[r]}let yu;function bu(){if(yu!==void 0)return yu;try{O.execFileSync(`which`,[`tempo`],{stdio:`ignore`}),yu=!0}catch{yu=!1}return yu}async function xu(e){return new Promise((t,n)=>{O.execFile(`tempo`,[`mpp`,`sign`,`--challenge`,e],(e,r,i)=>{if(e){let t=i?.trim()||e.message;n(Error(`tempo mpp sign failed: ${t}`));return}let a=r.trim();if(!a){n(Error(`tempo mpp sign returned empty output`));return}t(a)})})}function Su(){let e=er();if(Vn(e.get())&&!bu()&&A.platform()===`darwin`)try{let t=O.execFileSync(`security`,[`dump-keychain`],{encoding:`utf-8`}),n=[];for(let e of t.split(`keychain:`)){let t=e.match(/"svce"<blob>="([^"]*)"/),r=e.match(/"acct"<blob>="([^"]*)"/);t?.[1]===`mppx`&&r?.[1]&&n.push(r[1])}if(n.length>0)return e.set(n[0]),n[0]}catch{}}const Cu=[...Object.entries(Ce),...Object.entries(we),...Object.entries(Te),...Object.entries(Ee)];function wu(){return ar({method:`evm`,supports:Tu,async setup({challenge:e,options:t}){let n=e.request,r=n.network?Eu(Ne(n.network)):void 0,i=n.network&&n.asset?Cu.find(([,e])=>je(e,n.asset,n.network)):void 0,a=n.extra?.name,o=n.extra?.version,s=n.asset&&n.network&&typeof a==`string`&&typeof o==`string`?xe({address:n.asset,decimals:i?.[1].decimals??6,network:n.network,transfer:{name:a,type:`eip3009`,version:o}}):void 0,c=await ir(t.account);return{explorerUrl:r?.blockExplorers?.default?.url,methods:[...Nn({account:c,...s&&{currencies:[s]}})],tokenDecimals:i?.[1].decimals??6,tokenSymbol:i?.[0]??``}}})}function Tu(e){if(!gn(e))return!1;let t=e.request,n=t.extra,r=n?.assetTransferMethod;return t.scheme===`exact`&&typeof t.asset==`string`&&typeof t.network==`string`&&typeof n?.name==`string`&&typeof n?.version==`string`&&(r===void 0||r===`eip3009`)}function Eu(e){return Object.values(v).find(t=>t.id===e)}export{ar as createPlugin,or as evm,fr as stripe,tu as tempo,wu as x402};
@@ -0,0 +1,3 @@
1
+ /** Pays recognized x402 exact EVM challenges with the configured CLI account. */
2
+ export declare function x402(): import("./plugin.js").Plugin;
3
+ //# sourceMappingURL=x402.d.ts.map
@@ -0,0 +1,61 @@
1
+ import * as viemChains from 'viem/chains';
2
+ import { evm as evmMethods, assets as evmAssets } from '../../evm/client/index.js';
3
+ import * as Assets from '../../x402/Assets.js';
4
+ import * as x402_ChallengeBrand from '../../x402/internal/ChallengeBrand.js';
5
+ import { resolveAccount } from '../account.js';
6
+ import { createPlugin } from './plugin.js';
7
+ const knownAssets = [
8
+ ...Object.entries(evmAssets.base),
9
+ ...Object.entries(evmAssets.baseSepolia),
10
+ ...Object.entries(evmAssets.celo),
11
+ ...Object.entries(evmAssets.celoSepolia),
12
+ ];
13
+ /** Pays recognized x402 exact EVM challenges with the configured CLI account. */
14
+ export function x402() {
15
+ return createPlugin({
16
+ method: 'evm',
17
+ supports: isSupportedChallenge,
18
+ async setup({ challenge, options }) {
19
+ const request = challenge.request;
20
+ const chain = request.network ? resolveEvmChain(Assets.toChainId(request.network)) : undefined;
21
+ const known = request.network && request.asset
22
+ ? knownAssets.find(([, asset]) => Assets.matches(asset, request.asset, request.network))
23
+ : undefined;
24
+ const name = request.extra?.name;
25
+ const version = request.extra?.version;
26
+ const currency = request.asset && request.network && typeof name === 'string' && typeof version === 'string'
27
+ ? Assets.define({
28
+ address: request.asset,
29
+ decimals: known?.[1].decimals ?? 6,
30
+ network: request.network,
31
+ transfer: { name, type: 'eip3009', version },
32
+ })
33
+ : undefined;
34
+ const account = await resolveAccount(options.account);
35
+ return {
36
+ explorerUrl: chain?.blockExplorers?.default?.url,
37
+ methods: [...evmMethods({ account, ...(currency && { currencies: [currency] }) })],
38
+ tokenDecimals: known?.[1].decimals ?? 6,
39
+ tokenSymbol: known?.[0] ?? '',
40
+ };
41
+ },
42
+ });
43
+ }
44
+ /** Returns whether the CLI can create an x402 credential for this challenge. */
45
+ function isSupportedChallenge(challenge) {
46
+ if (!x402_ChallengeBrand.is(challenge))
47
+ return false;
48
+ const request = challenge.request;
49
+ const transfer = request.extra;
50
+ const transferMethod = transfer?.assetTransferMethod;
51
+ return (request.scheme === 'exact' &&
52
+ typeof request.asset === 'string' &&
53
+ typeof request.network === 'string' &&
54
+ typeof transfer?.name === 'string' &&
55
+ typeof transfer?.version === 'string' &&
56
+ (transferMethod === undefined || transferMethod === 'eip3009'));
57
+ }
58
+ function resolveEvmChain(chainId) {
59
+ return Object.values(viemChains).find((chain) => chain.id === chainId);
60
+ }
61
+ //# sourceMappingURL=x402.js.map
@@ -21,9 +21,23 @@ export function wrap(mppx, wrapper) {
21
21
  };
22
22
  Object.assign(wrapWithMeta, methodFn);
23
23
  result[key] = wrapWithMeta;
24
- // Also set shorthand intent key if Mppx registered it (no collision)
25
- if (!reservedMppxKeys.has(mi.intent) && mppx[mi.intent])
26
- result[mi.intent] = wrapWithMeta;
24
+ // Also set shorthand intent key, using the core-composed handler on collisions.
25
+ if (!reservedMppxKeys.has(mi.intent) && mppx[mi.intent]) {
26
+ const intentFn = mppx[mi.intent];
27
+ if (intentFn === methodFn)
28
+ result[mi.intent] = wrapWithMeta;
29
+ else {
30
+ const wrapIntentWithMeta = (options) => {
31
+ const configured = intentFn(options);
32
+ const handler = wrapper(intentFn, options);
33
+ if (configured._internal)
34
+ handler._internal = configured._internal;
35
+ return handler;
36
+ };
37
+ Object.assign(wrapIntentWithMeta, intentFn);
38
+ result[mi.intent] = wrapIntentWithMeta;
39
+ }
40
+ }
27
41
  // Build nested handlers: wrapped.tempo.charge(...)
28
42
  if (!result[mi.name] || typeof result[mi.name] !== 'object')
29
43
  result[mi.name] = {};
@@ -23,7 +23,16 @@ export declare const charge: {
23
23
  metadata: z.ZodMiniOptional<z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniString<string>>>;
24
24
  networkId: z.ZodMiniString<string>;
25
25
  paymentIntentOptions: z.ZodMiniOptional<z.ZodMiniObject<{
26
- metadata: z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniString<string>>;
26
+ customer: z.ZodMiniOptional<z.ZodMiniString<string>>;
27
+ hooks: z.ZodMiniOptional<z.ZodMiniObject<{
28
+ inputs: z.ZodMiniObject<{
29
+ tax: z.ZodMiniObject<{
30
+ calculation: z.ZodMiniString<string>;
31
+ }, z.core.$strip>;
32
+ }, z.core.$strip>;
33
+ }, z.core.$strip>>;
34
+ metadata: z.ZodMiniOptional<z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniString<string>>>;
35
+ receipt_email: z.ZodMiniOptional<z.ZodMiniString<string>>;
27
36
  }, z.core.$strip>>;
28
37
  paymentMethodTypes: z.ZodMiniArray<z.ZodMiniString<string>>;
29
38
  recipient: z.ZodMiniOptional<z.ZodMiniString<string>>;
@@ -47,7 +56,16 @@ export declare const charge: {
47
56
  metadata?: Record<string, string> | undefined;
48
57
  networkId: string;
49
58
  paymentIntentOptions?: {
50
- metadata: Record<string, string>;
59
+ customer?: string | undefined;
60
+ hooks?: {
61
+ inputs: {
62
+ tax: {
63
+ calculation: string;
64
+ };
65
+ };
66
+ } | undefined;
67
+ metadata?: Record<string, string> | undefined;
68
+ receipt_email?: string | undefined;
51
69
  } | undefined;
52
70
  paymentMethodTypes: string[];
53
71
  recipient?: string | undefined;