mppx 0.13.4 → 0.13.5

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 (40) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/Errors.d.ts +63 -2
  3. package/dist/Errors.js +52 -2
  4. package/dist/Method.d.ts +10 -0
  5. package/dist/cli/cli.js +133 -133
  6. package/dist/cli/plugins/index.js +12 -12
  7. package/dist/client/Mppx.d.ts +2 -0
  8. package/dist/client/Mppx.js +8 -10
  9. package/dist/client/internal/Fetch.js +107 -8
  10. package/dist/client/internal/MethodResponse.d.ts +6 -0
  11. package/dist/client/internal/MethodResponse.js +16 -0
  12. package/dist/client/internal/protocols/Mcp.js +36 -5
  13. package/dist/evm/server/Charge.js +3 -1
  14. package/dist/internal/version.d.ts +2 -2
  15. package/dist/internal/version.js +1 -1
  16. package/dist/internal/warnOnce.d.ts +3 -0
  17. package/dist/internal/warnOnce.js +9 -0
  18. package/dist/server/Mppx.d.ts +5 -0
  19. package/dist/server/Mppx.js +14 -13
  20. package/dist/server/Transport.js +10 -0
  21. package/dist/tempo/Attribution.d.ts +24 -9
  22. package/dist/tempo/Attribution.js +25 -5
  23. package/dist/tempo/client/Charge.d.ts +116 -10
  24. package/dist/tempo/client/Charge.js +116 -22
  25. package/dist/tempo/client/Methods.d.ts +88 -9
  26. package/dist/tempo/index.d.ts +1 -0
  27. package/dist/tempo/index.js +1 -0
  28. package/dist/tempo/internal/fee-payer.js +4 -0
  29. package/dist/tempo/server/Charge.d.ts +11 -0
  30. package/dist/tempo/server/Charge.js +160 -29
  31. package/dist/tempo/server/Methods.js +16 -4
  32. package/dist/tempo/server/Subscription.js +2 -1
  33. package/dist/tempo/server/internal/fallback-store.d.ts +9 -0
  34. package/dist/tempo/server/internal/fallback-store.js +13 -0
  35. package/dist/tempo/server/internal/html.gen.js +1 -1
  36. package/dist/tempo/session/precompile/Chain.d.ts +2 -0
  37. package/dist/tempo/session/precompile/Chain.js +3 -1
  38. package/dist/tempo/session/server/Session.js +10 -11
  39. package/dist/tempo/session/server/Settlement.js +11 -3
  40. package/package.json +1 -1
@@ -1,17 +1,17 @@
1
- import{createClient as e,createTransport as t,custom as n,encodeFunctionData as r,erc20Abi as i,getAddress as a,hashTypedData as o,http as s,isAddress as c,isAddressEqual as l,parseAbi as u,parseUnits as d}from"viem";import{call as f,prepareTransactionRequest as p,readContract as m,sendCallsSync as h,sendTransactionSync as g,signTransaction as _,signTypedData as v}from"viem/actions";import*as y from"viem/chains";import{tempo as b}from"viem/chains";import{AbiParameters as x,Base64 as S,Bytes as C,Hash as w,Hex as T,Json 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{ousd as te,pathusd as ne,usdce as re}from"viem/tokens";import{Abis as ie,Account as ae,Actions as P,Addresses as oe,TokenId as se,Transaction as ce,withFeePayer as le}from"viem/tempo";import{parseAccount as ue,privateKeyToAccount as de}from"viem/accounts";import{createParser as fe}from"eventsource-parser";import{Channel as pe,KeyAuthorization as F,SignatureEnvelope as I,TempoAddress as me,TxEnvelopeTempo as he}from"ox/tempo";var ge=Object.defineProperty,_e=Object.getOwnPropertyDescriptor,ve=Object.getOwnPropertyNames,ye=Object.prototype.hasOwnProperty,be=(e,t)=>{let n={};for(var r in e)ge(n,r,{get:e[r],enumerable:!0});return t||ge(n,Symbol.toStringTag,{value:`Module`}),n},xe=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=ve(t),a=0,o=i.length,s;a<o;a++)s=i[a],!ye.call(e,s)&&s!==n&&ge(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=_e(t,s))||r.enumerable});return e},Se=(e,t,n)=>(xe(e,t,`default`),n&&xe(n,t,`default`));const Ce=Symbol(`mppx.x402.asset`);function L(e){return{[Ce]:!0,address:e.address,decimals:e.decimals,network:e.network,transfer:e.transfer}}function we(e,t){let n=e(t.chainId);return L({address:n.address,decimals:n.decimals,network:Pe(t.chainId),transfer:Ie(t.transfer,n)})}const Te={USDC:L({address:`0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`,decimals:6,network:`eip155:8453`,transfer:{name:`USD Coin`,type:`eip3009`,version:`2`}})},Ee={USDC:L({address:`0x036CbD53842c5426634e7929541eC2318f3dCF7e`,decimals:6,network:`eip155:84532`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}})},De={USDC:L({address:`0xcebA9300f2b948710d2653dD7B07f33A8B32118C`,decimals:6,network:`eip155:42220`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}}),USDT:L({address:`0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e`,decimals:6,network:`eip155:42220`,transfer:{name:`Tether USD`,type:`eip3009`,version:`1`}})},Oe={USDC:L({address:`0x01C5C0122039549AD1493B8220cABEdD739BC44E`,decimals:6,network:`eip155:11142220`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}})};function ke(e){return typeof e!=`object`||!e?!1:e[Ce]===!0}function Ae(e){return typeof e==`function`&&typeof e.addresses==`object`&&typeof e.decimals==`number`}function je(e){return typeof e==`string`}function Me(e,t){if(ke(e))return e.network===t?{address:e.address,decimals:e.decimals,transfer:e.transfer}:void 0;if(Ae(e)){let n=e.addresses[Fe(t)];return n?{address:n,decimals:e.decimals,name:e.name}:void 0}return{address:e}}function Ne(e,t,n){let r=Me(e,n);return r?a(r.address)===a(t):!1}function Pe(e){return`eip155:${e}`}function Fe(e){return Number(e.slice(7))}function Ie(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 Le=be({base:()=>Te,baseSepolia:()=>Ee,celo:()=>De,celoSepolia:()=>Oe,define:()=>L,fromToken:()=>we,isAsset:()=>ke,isRawAddress:()=>je,isToken:()=>Ae,matches:()=>Ne,resolve:()=>Me,toChainId:()=>Fe,toNetwork:()=>Pe}),Re=be({base:()=>ze,baseSepolia:()=>Be,celo:()=>Ve,celoSepolia:()=>He});const ze=8453,Be=84532,Ve=42220,He=11142220,R={acceptPayment:`Accept-Payment`,authorization:`Authorization`,paymentAuthorization:`Payment-Authorization`,paymentReceipt:`Payment-Receipt`,paymentSession:`Payment-Session`,paymentSessionSnapshot:`Payment-Session-Snapshot`,wwwAuthenticate:`WWW-Authenticate`},Ue={payment:`Payment`},We={evm:`evm`,stripe:`stripe`,tempo:`tempo`},Ge={charge:`charge`,session:`session`,subscription:`subscription`},Ke={sessionProtocol:`sessionProtocol`,sessionSnapshot:`sessionSnapshot`},qe={v1:`v1`,v2:`v2`};function Je(e,t){if(!(!e||typeof e!=`object`))return e[t]}function Ye(e){let t=S.toString(e);return JSON.parse(t)}function z(e){let t=E.canonicalize(e);return S.fromString(t,{pad:!1,url:!0})}var B=be({address:()=>H,amount:()=>V,datetime:()=>Ze,datetimeInput:()=>Qe,hash:()=>U,period:()=>tt,signature:()=>W,toDate:()=>$e,toDatetimeString:()=>et,unwrapOptional:()=>nt});import*as Xe from"zod/mini";Se(B,Xe);function V(){return D.string().check(D.regex(/^\d+(\.\d+)?$/,`Invalid amount`))}function Ze(){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 Qe(e=`Invalid ISO 8601 datetime`){return D.pipe(D.union([Ze(),D.custom(e=>e instanceof Date)]),D.transform($e)).check(D.refine(e=>Number.isFinite(e.getTime()),e))}function $e(e){return e instanceof Date?e:new Date(e)}function et(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 tt(){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 nt(e){return e._zod.def.type===`optional`?e._zod.def.innerType:e}const rt=B.object({description:B.optional(B.string()),digest:B.optional(B.string().check(B.regex(/^sha-256=/,`Invalid digest format`))),expires:B.optional(Ze()),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 it(e,t){let{description:n,digest:r,meta:i,method:a,header:o,intent:s,realm:c,request:l,secretKey:u}=e,d=vt(o)?void 0:o,f=e.expires?et(e.expires):void 0,p=e.opaque??(i===void 0?void 0:z(i)),m=u?yt({...e,expires:f,...i!==void 0&&{meta:i},opaque:p},{secretKey:u}):e.id;return rt.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 at(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&&!vt(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)),`${Ue.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 ot(e,t){let n=st(e);if(!n)throw Error(`Missing Payment scheme.`);let{request:r,opaque:i,...a}=ct(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 it({...a,request:Ye(r),...i&&{opaque:i}},t)}function st(e){let t=Ue.payment,[n]=ft(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 ct(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]=lt(e,n);if(n=o,i in t)throw Error(`Duplicate parameter: ${i}`);t[i]=a}return t}function lt(e,t){if(e[t]===`"`)return ut(e,t+1);let n=t;for(;n<e.length&&e[n]!==`,`;)n++;return[e.slice(t,n).trim(),n]}function ut(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 dt(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 ft(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(!dt(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 pt(e,t){if(e.status!==402)throw Error(`Response status is not 402.`);return mt(e.headers,t)}function mt(e,t){let n=e.get(R.wwwAuthenticate);if(!n)throw Error(`Missing ${R.wwwAuthenticate} header.`);return ht(n,t)}function ht(e,t){let n=ft(e,Ue.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 ot(e.slice(r,a).replace(/,\s*$/,``),t)})}function gt(e){let t=[e.realm,e.method,e.intent,z(e.request),e.expires??``,e.digest??``],n=e.header;return n!==void 0&&!vt(n)&&t.push(n),t.push(e.opaque??(e.meta?z(e.meta):``)),t.join(`|`)}function _t(e){return e.header??R.authorization}function vt(e){return e?.toLowerCase()===R.authorization.toLowerCase()}function yt(e,t){let n=gt(e),r=C.fromString(t.secretKey),i=C.fromString(n),a=w.hmac256(r,i,{as:`Bytes`});return S.fromBytes(a,{url:!0,pad:!1})}var bt=class extends Error{name=`MissingPaymentSchemeError`;constructor(){super(`Missing Payment scheme.`)}},xt=class extends Error{name=`InvalidCredentialEncodingError`;constructor(){super(`Invalid base64url or JSON.`)}};function St(e){let t=e.match(RegExp(`^${Ue.payment}\\s+(.+)$`,`i`));if(!t?.[1])throw new bt;try{let e=S.toString(t[1]),n=JSON.parse(e),{opaque:r,request:i,meta:a,...o}=n.challenge,{meta:s,opaque:c}=Ct(r);return{challenge:rt.parse({...o,...s!==void 0&&{meta:s},...c!==void 0&&{opaque:c},request:Ye(i)}),payload:n.payload,...n.source&&{source:n.source}}}catch{throw new xt}}function Ct(e){if(e===void 0)return{};if(typeof e==`string`)return{opaque:e};if(!wt(e))throw Error(`Invalid opaque.`);return{meta:e,opaque:z(e)}}function wt(e){return typeof e!=`object`||!e||Array.isArray(e)?!1:Object.values(e).every(e=>typeof e==`string`)}function Tt(e){let{challenge:t,payload:n,source:r}=e;return{challenge:t,payload:n,...r&&{source:r}}}function Et(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=S.fromString(s,{pad:!1,url:!0});return`${Ue.payment} ${c}`}var Dt=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}}}},Ot=class extends Dt{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}.`)}},K=class extends Dt{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})}},kt=class extends Dt{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 At(e,t){if(!e)throw new Ot({...t&&{id:t},reason:`missing required expires field`});if(Number.isNaN(new Date(e).getTime()))throw new Ot({...t&&{id:t},reason:`malformed expires timestamp`});if(new Date(e)<new Date)throw new kt({expires:e})}function jt(e){return e}function Mt(e,t){let{canHandleChallenge:n,context:r,createCredential:i}=t;return{...e,canHandleChallenge:n,context:r,createCredential:i}}function Nt(e){return{encode(t){return S.fromString(JSON.stringify(e.parse(t)))},decode(t){try{return e.parse(JSON.parse(S.toString(t)))}catch{throw new Pt}}}}var Pt=class extends Error{name=`InvalidJsonHeaderError`;constructor(){super(`Invalid base64 JSON header.`)}};const Ft=[`exact`],It=`PAYMENT-REQUIRED`,Lt=`PAYMENT-SIGNATURE`,Rt=B.string().check(B.minLength(1)),zt=B.number().check(B.refine(e=>e>0,`Must be positive`)),q=B.string().check(B.regex(/^\d+$/,`Invalid atomic amount`)),Bt=H(),Vt=B.string().check(B.regex(RegExp(`^eip155:\\d+$`),`Invalid EVM CAIP-2 network`)),Ht=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:Rt});B.discriminatedUnion(`type`,[B.object({name:Rt,type:B.literal(`eip3009`),version:Rt}),B.object({name:B.optional(B.string()),type:B.literal(`permit2`),version:B.optional(B.string())})]);const Ut=B.object({amount:q,asset:Rt,extra:B.optional(B.record(B.string(),B.unknown())),maxTimeoutSeconds:zt,network:Vt,payTo:Rt,scheme:B.enum(Ft)}),Wt=B.object({info:B.record(B.string(),B.unknown()),schema:B.record(B.string(),B.unknown())}),Gt=B.record(B.string(),Wt),Kt=B.object({accepts:B.array(Ut).check(B.minLength(1)),error:B.optional(B.string()),extensions:B.optional(Gt),resource:Ht,x402Version:B.literal(2)}),qt=B.object({authorization:B.object({from:Bt,nonce:U(),to:Bt,validAfter:q,validBefore:q,value:q}),signature:W()}),Jt=B.object({permit2Authorization:B.object({deadline:q,from:Bt,nonce:q,permitted:B.object({amount:q,token:Bt}),spender:Bt,witness:B.object({to:Bt,validAfter:q})}),signature:W()}),Yt=B.union([qt,Jt]),Xt=B.object({accepted:Ut,extensions:B.optional(Gt),payload:Yt,resource:B.optional(Ht),x402Version:B.literal(2)});B.object({extensions:B.optional(Gt),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 Zt=B.object({amount:B.optional(q),errorMessage:B.optional(B.string()),errorReason:B.optional(B.string()),extensions:B.optional(Gt),extra:B.optional(B.record(B.string(),B.unknown())),network:Rt,payer:B.optional(B.string()),success:B.boolean(),transaction:B.string()});function Qt(e){let{extensions:t,resource:n,...r}=e;return Ut.parse(r)}const $t=Nt(Kt),en=Nt(Xt),tn=Nt(Zt);$t.encode,$t.decode;function nn(e){try{let t=JSON.parse(S.toString(e));return an(t)}catch{throw new Pt}}const rn=en.encode;en.decode,tn.encode,tn.decode;const an=e=>{if(!e||typeof e!=`object`||Array.isArray(e))throw new Pt;let t=e;if(t.x402Version!==2||!Array.isArray(t.accepts))throw new Pt;let n=Ht.parse(t.resource),r=t.extensions===void 0?void 0:Gt.safeParse(t.extensions).data;return{accepts:t.accepts,...r?{extensions:r}:{},resource:n,x402Version:2}};function on(e){let t=[z(e.accepted),z(e.resource),z(e.extensions)].join(`|`);return w.sha256(C.fromString(t),{as:`Hex`})}async function sn(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=Qt(n);if(dn(e.config,r),!n.resource)throw Error(`x402 exact EIP-3009 requires resource information.`);let i=n.extensions?.mppx?pn(n.extensions):n.extensions,o=r.extra?.assetTransferMethod??`eip3009`;if(o!==`eip3009`)throw Error(`x402 exact ${String(o)} 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:a(t.address),nonce:i?.mppx?on({accepted:r,extensions:i,resource:n.resource}):hn(),to:a(r.payTo),validAfter:(l-600).toString(),validBefore:(l+r.maxTimeoutSeconds).toString(),value:r.amount},d=await t.signTypedData({domain:{chainId:un(r.network),name:s,verifyingContract:a(r.asset),version:c},message:{...u,value:BigInt(u.value),validAfter:BigInt(u.validAfter),validBefore:BigInt(u.validBefore)},primaryType:`TransferWithAuthorization`,types:ln});return rn({accepted:r,...i?{extensions:i}:{},payload:{authorization:u,signature:d},...n.resource?{resource:n.resource}:{},x402Version:2})}function cn(e){let t=e.challenge.request,n;try{n=Qt(t),dn(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 ln={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 un(e){return Number(e.slice(7))}function dn(e,t){let n=un(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=>je(e))&&!e.networks?.length)throw Error(`x402 exact raw currency allowlists require networks.`);if(r){let e=a(t.asset);if(!r.some(n=>Ne(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=fn(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 fn(e,t){let n=e.currencies??e.assets,r=a(t.asset),i=n?.find(e=>Ne(e,r,t.network)),o=i?Me(i,t.network):void 0;return o?.decimals===void 0?e.decimals:o.decimals}function pn(e){let t=e.mppx;return t?{...e,mppx:{...t,info:{...t.info,nonce:mn()}}}:e}function mn(){return gn().slice(2)}function hn(){return gn()}function gn(){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 _n=Symbol.for(`mppx.x402.challenge`);function vn(e){return Object.defineProperty(e,_n,{value:!0}),e}function yn(e){return!!e?.[_n]}const bn=[`authorization`],xn=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 Sn=B.object({chainId:B.number(),credentialTypes:B.optional(B.array(B.enum(bn)).check(B.minLength(1))),decimals:B.optional(B.number()),permit2Address:B.optional(H()),splits:B.optional(B.array(B.object({amount:xn,recipient:H()})))});B.object({amount:xn,currency:H(),description:B.optional(B.string()),externalId:B.optional(B.string()),methodDetails:Sn,recipient:H()});const Cn=B.object({amount:V(),chainId:B.number(),currency:H(),credentialTypes:B.optional(B.array(B.enum(bn)).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:xn,recipient:H()})))}),wn=B.object({from:H(),nonce:U(),signature:W(),to:H(),type:B.literal(`authorization`),validAfter:xn,validBefore:xn,value:xn}),Tn={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 En(e){return{chainId:e.chainId,name:e.authorization.name,verifyingContract:e.currency,version:e.authorization.version}}function Dn(e){return w.keccak256(C.fromString(JSON.stringify([e.id,e.realm])),{as:`Hex`})}function On(e){return`eip155:${e}`}function kn(e){return`did:pkh:eip155:${e.chainId}:${e.address}`}const An=jt({name:`evm`,intent:`charge`,schema:{credential:{payload:wn},request:B.pipe(Cn,B.transform(({amount:e,chainId:t,credentialTypes:n=[`authorization`],currency:r,decimals:i,permit2Address:o,recipient:s,splits:c,...l})=>({...l,amount:d(e,i).toString(),currency:a(r),methodDetails:{chainId:t,credentialTypes:n,decimals:i,...o?{permit2Address:a(o)}:{},...c?{splits:c}:{}},recipient:a(s)})))}});function jn(e){return Mt(An,{canHandleChallenge({challenge:t}){return!Mn(t)||cn({challenge:t,config:e})},context:B.object({account:B.optional(B.custom())}),async createCredential({challenge:t,context:n}){if(Mn(t))return sn({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(Nn(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 o=Pn(e,i),s=t.expires?Math.floor(new Date(t.expires).getTime()/1e3).toString():(Math.floor(Date.now()/1e3)+300).toString();return Et(Tt({challenge:t,payload:{from:a(r.address),nonce:Dn(t),signature:await r.signTypedData({domain:En({authorization:o,chainId:i.methodDetails.chainId,currency:i.currency}),message:{from:a(r.address),nonce:Dn(t),to:a(i.recipient),validAfter:0n,validBefore:BigInt(s),value:BigInt(i.amount)},primaryType:`TransferWithAuthorization`,types:Tn}),to:a(i.recipient),type:`authorization`,validAfter:`0`,validBefore:s,value:i.amount},source:kn({address:a(r.address),chainId:i.methodDetails.chainId})}))}})}function Mn(e){return yn(e)&&e.request.scheme===`exact`&&typeof e.request.network==`string`}function Nn(e,t){let n=t.methodDetails.chainId,r=On(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=>je(e))&&!e.networks?.length)throw Error(`EVM raw currency allowlists require networks.`);if(i){let e=a(t.currency);if(!i.some(t=>Ne(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=Fn(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 Pn(e,t){let n=e.currencies??e.assets,r=a(t.currency),i=On(t.methodDetails.chainId),o=n?.find(e=>Ne(e,r,i)),s=o?Me(o,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 Fn(e,t){let n=e.currencies??e.assets,r=a(t.currency),i=On(t.methodDetails.chainId),o=n?.find(e=>Ne(e,r,i)),s=o?Me(o,i):void 0;return s?.decimals===void 0?e.decimals:s.decimals}function In(e){return[In.charge(e)]}(function(e){e.charge=jn,e.assets=Le,e.chains=Re})(In||={});var Ln=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 Rn(this,e)}},J=class extends Ln{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 Rn(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 Y={mainnet:4217,testnet:42431},zn={ousd:te(Y.mainnet).address,usdc:a(re(Y.mainnet).address),pathUsd:ne(Y.mainnet).address},Bn={[Y.mainnet]:zn.usdc,[Y.testnet]:zn.pathUsd},Vn=Object.freeze({[Y.mainnet]:Object.freeze({swap:`0xF72E5107c32C655ffA7539a3C8e97B7C3cE16A3F`,token:`0x20c000000000000000000000f37de3740ADec032`}),[Y.testnet]:Object.freeze({swap:`0xd05f8EdFBB54Da0d765C9fE9b2B3f7d2E3a8C466`,token:`0x20c000000000000000000000f37de3740ADec032`})});Y.mainnet,Y.testnet;const Hn={[Y.mainnet]:`https://rpc.tempo.xyz`,[Y.testnet]:`https://rpc.moderato.tempo.xyz`},X=(()=>{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:X.underline(t)}\x1b]8;;\x07`:t}}})();function Un(e,t){return X.link(e,t)}function Wn(e){return e.startsWith(`tempo:`)}function Gn(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?X.dim(X.link(`${r.explorerUrl}/token/${r.token}`,t,!0)):X.dim(t);return`${a?`${o}.${a}`:o} ${s}`}const Kn={mainnet:Hn[Y.mainnet],testnet:Hn[Y.testnet]};function qn(e,t={}){return e??(t.network?Kn[t.network]:void 0)??(process.env.MPPX_RPC_URL?.trim()||process.env.RPC_URL?.trim()||void 0)}async function Jn(t={}){let n=qn(t.rpcUrl,{network:t.network});if(!n)return N;let{getChainId:r}=await import(`viem/actions`),i=await r(e({transport:s(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 Yn(e){return typeof e==`bigint`?e:e.amount}function Xn(e){return e.id!==N.id}async function Zn(e,t,n,r={}){let{Actions:i}=await import(`viem/tempo`),[a,o]=await Promise.all([i.token.getBalance(e,{account:n,token:t}).then(Yn).catch(()=>0n),i.token.getMetadata(e,{token:t}).catch(e=>{if(r.requireDecimals)throw e;return{symbol:t}})]),s={"0x20c0000000000000000000000000000000000000":`PathUSD`,"0x20C000000000000000000000b9537d11c60E8b50":`USDC`}[t]??o.symbol,c=`decimals`in o&&typeof o.decimals==`number`?o.decimals:6;if(r.requireDecimals&&!(`decimals`in o&&typeof o.decimals==`number`))throw Error(`Token decimals are unavailable.`);return{balance:a,symbol:s,decimals:c,token:t}}function Qn(){let e=Number.parseInt(process.env.MPPX_KEYCHAIN_COMMAND_TIMEOUT_MS??``,10);return Number.isFinite(e)&&e>0?e:1e4}function $n(e,t){return`code`in e&&e.code===`ENOENT`&&e.message.includes(t)}function er(e){return new J({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 tr(e){if(e&&$n(e,`secret-tool`))throw er(e)}function Z(e,t){return new Promise(n=>{O.execFile(e,t,{timeout:Qn()},(e,t,r)=>{n({stdout:t.trim(),stderr:r.trim(),error:e})})})}function nr(){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 rr(e){return e||(process.env.MPPX_ACCOUNT?.trim()?process.env.MPPX_ACCOUNT:nr().get())}function ir(e=`main`){let t=`mppx`;return{async list(){let e=A.platform();if(e===`darwin`){let{stdout:e,error:n}=await Z(`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 Z(`secret-tool`,[`search`,`--all`,`--unlock`,`service`,t]);if(tr(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 Z(`security`,[`find-generic-password`,`-s`,t,`-a`,e,`-w`]);return r?void 0:n}if(n===`linux`){let{stdout:n,error:r}=await Z(`secret-tool`,[`lookup`,`service`,t,`account`,e]);return tr(r),r?void 0:n||void 0}throw Error(`Unsupported platform: ${n}`)},async set(n){let r=A.platform();if(r===`darwin`){await Z(`security`,[`delete-generic-password`,`-s`,t,`-a`,e]);let{error:r}=await Z(`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(),Qn());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($n(e,`secret-tool`)?er(e):e)})})}throw Error(`Unsupported platform: ${r}`)},async delete(){let n=A.platform();if(n===`darwin`){await Z(`security`,[`delete-generic-password`,`-s`,t,`-a`,e]);return}if(n===`linux`){let{error:n}=await Z(`secret-tool`,[`clear`,`service`,t,`account`,e]);tr(n);return}throw Error(`Unsupported platform: ${n}`)}}}async function ar(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=rr(e),i=await ir(r).get();if(i)return{account:t(i),accountName:r,source:`keychain`};throw Error(`Account "${r}" not found.`)}async function or(e){return(await ar(e)).account}function sr(e){return e}function cr(){return sr({method:`evm`,supports:e=>e.method===`evm`&&!yn(e),async setup({challenge:t}){let n=t.request,r=n.methodDetails,a=r?.chainId,o=a?lr(a):void 0,c=n.currency,l=await or(),u=[...Object.values(Te),...Object.values(Ee),...Object.values(De),...Object.values(Oe)],d=c??``;if(o&&c)try{let t=e({chain:o,transport:s()}),n=await m(t,{address:c,abi:i,functionName:`symbol`});n&&(d=n)}catch{}return{tokenSymbol:d,tokenDecimals:r?.decimals??6,explorerUrl:o?.blockExplorers?.default?.url,methods:[...In({account:l,currencies:u})]}}})}function lr(e){return Object.values(y).find(t=>t.id===e)}function ur(e,t){if(!Number.isInteger(t)||t<0)throw RangeError(`Decimals must be a non-negative integer.`);if(!/^-?(?:\d+(?:\.\d*)?|\.\d+)$/.test(e))throw TypeError(`Value \`${e}\` is not a valid decimal number.`);let n=e.startsWith(`-`),[r=`0`,i=``]=(n?e.slice(1):e).split(`.`),a=i.slice(0,t).padEnd(t,`0`),o=BigInt(`${r||`0`}${a}`);return i.length>t&&i[t]>=`5`&&(o+=1n),n?-o:o}const dr=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)))}),fr=B.custom(e=>typeof e==`function`),pr=B.union([dr,fr]),mr=jt({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(pr),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:ur(e,t).toString(),methodDetails:{networkId:r,paymentMethodTypes:a,...n!==void 0&&{metadata:n}}})))}});function hr(e){let{client:t,createToken:n,externalId:r,paymentMethod:i}=e;return Mt(mr,{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 Et({challenge:e,payload:{spt:p,...m===void 0?{}:{externalId:m}}})}})}function gr(e){return[hr(e)]}(function(e){e.charge=hr})(gr||={});function _r(){return sr({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=yr(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 J({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:[gr.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=vr(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 J({code:`STRIPE_ERROR`,message:`Failed to create SPT: ${(await d.json()).error.message}`,exitCode:77})}else throw new J({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&&vr(e)?`/test`:``}/payments/${t}`;return X.link(n,t,!0)}}})}function vr(e){return e.startsWith(`sk_test_`)||e.startsWith(`rk_test_`)}function yr(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 br(e){let t={};for(let n of e){let e=t[n.name]??={};e[n.intent]=Tr(n)}return t}function xr(e,t){let n=br(e),r=Mr(e,n,t),i=e.map((e,t)=>({intent:e.intent,method:e.name,q:r[Tr(e)]??1,index:t}));return{definition:r,entries:i,header:Cr(i),keys:n}}function Sr(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)=>Ar(e,t))}function Cr(e){return e.map(({method:e,intent:t,q:n})=>{let r=`${e}/${t}`;return n===1?r:`${r};q=${Ir(n)}`}).join(`, `)}function wr(e,t,n){let r=new Map;for(let e of t){let t=Tr(e),n=r.get(t);n?n.push(e):r.set(t,[e])}return e.flatMap((e,t)=>{let i=r.get(Tr(e));if(!i)return[];let a=Er(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)=>kr(e.challenge)-kr(t.challenge)||t.match.q-e.match.q||e.index-t.index).map(e=>{let{match:t,...n}=e;return n})}function Tr(e){let t=e.method??e.name;if(!t)throw Error(`Missing payment method name.`);return`${t}/${e.intent}`}function Er(e,t){let n;for(let r of t){if(!Dr(e,r))continue;let t={...r,specificity:Or(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 Dr(e,t){return(t.method===`*`||t.method===e.method)&&(t.intent===`*`||t.intent===e.intent)}function Or(e){return Number(e.method!==`*`)+Number(e.intent!==`*`)}function kr(e){return+!!yn(e)}function Ar(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}`);Lr(r,`method`),Lr(i,`intent`);let a=1;for(let t of jr(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=Pr(i,`Accept-Payment entry "${e}"`))}return{intent:i,method:r,q:a,index:t}}function jr(e){return e?e.split(/\s*;\s*/).filter(Boolean):[]}function Mr(e,t,n){if(!n)return{};let r=typeof n==`function`?n(t):n,i=new Set(e.map(e=>Tr(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]=Nr(t,`payment preference "${e}"`)}return a}function Nr(e,t){if(typeof e!=`number`||Number.isNaN(e)||!Number.isFinite(e))throw Error(`Invalid q-value for ${t}. Expected a finite number.`);return Fr(e,t)}function Pr(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 Fr(Number(e),t)}function Fr(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 Ir(e){return e.toFixed(3).replace(/\.0+$/,``).replace(/(\.\d*?)0+$/,`$1`)}function Lr(e,t){if(e!==`*`&&!/^[a-z0-9-]+$/.test(e))throw Error(`Invalid Accept-Payment ${t}: ${e}`)}const Rr=[R.authorization,It,`PAYMENT-RESPONSE`,Lt];function zr(e,t,n){let r=new Headers(e.headers);for(let e of Rr)e===R.authorization&&!r.get(e)?.startsWith(`Payment `)||r.delete(e);return r.set(t,n),{...e,headers:r}}function Br(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 Vr=new WeakMap;function Hr(e){let t=Br(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 Ur(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 Wr(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=rt.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 Gr(e){if(e)return`error`in e?e.error?.code!==-32042&&e.error?.code!==-32043?void 0:Wr(e.error.data):Wr(e.result?._meta?.[`org.paymentauth/payment-required`])}function Kr(e,t){return!e||e.id!==t?[]:Gr(e)?.challenges??[]}async function qr(e){let t=e.clone().body?.getReader();if(!t)return;let n=new TextDecoder,r=!1,i,a=fe({onEvent(e){if(!(r||!e.data)&&(r=!0,!(e.event&&e.event!==`message`)))try{i=Ur(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 Jr(e){let t=Vr.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(Ur).catch(()=>void 0);if(t.includes(`text/event-stream`))return qr(e)})();return Vr.set(e,n),n}function Yr(){return{getChallenges(e,t){let n=Hr(t);return e.status===402||n===void 0?[]:Jr(e).then(e=>Kr(e,n))},setCredential(e,t){let n=JSON.parse(e.body),r=St(t);return{...e,body:JSON.stringify({...n,params:{...n.params,_meta:{...n.params?._meta,"org.paymentauth/credential":r}}})}}}}function Xr(){return{getChallenges(e){return e.status!==402||!e.headers.has(R.wwwAuthenticate)?[]:pt(e)},setCredential(e,t,n){return zr(e,n?.challenge?_t(n.challenge):R.authorization,t)}}}function Zr(){return{getChallenges(e){if(e.status!==402)return[];let t=e.headers.get(It);if(!t)return[];let n=nn(t);return n.accepts.flatMap((e,t)=>{let r=Ut.safeParse(e);if(!r.success)return[];let i=r.data;return vn(it({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 zr(e,Lt,t)}}}function Qr(e){return e}function $r(){let e=[Xr(),Zr(),Yr()],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 ei=new WeakMap;function ti(e,t){return ei.set(e,t),e}function ni(e){return ei.has(e)}function ri(e,t){return Promise.resolve(ei.get(e)?.(t))}const ii=new WeakMap,ai=new WeakMap;function oi(e,t){return ii.set(e,t),e}function si(e){ii.delete(e)}function ci(e,t,n){ii.has(e)&&ai.set(t,n)}function li(e){return ai.get(e)}function ui(e,t){return Promise.resolve(ii.get(e)?.(t)??t.response)}const di=Symbol.for(`mppx.fetch.wrapper`),fi=new WeakMap;async function pi(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 mi(e){let{acceptPayment:t,acceptPaymentPolicy:n=`always`,fetch:r=globalThis.fetch,maxPaymentRetries:i=3,methods:a,onChallenge:o,orderChallenges:s,transport:c=$r()}=e,l=e.eventDispatcher??hi(),u=t??xr(a),d=Ii(r),f=async(e,t,r)=>{let p=Fi(e,t?.headers),m=p.has(R.acceptPayment),h=Vi(p,u),g=Ni(e,t,p),_=Mi(e,t,p,h.header,m,n),v=await d(Li(_.input),_.init),y=Pi(_.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 Hi(wr(T,a,h.entries),S??s))[0];if(!i){if(await pi(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&&At(w.expires,w.id);let p=qi(v,_.input,_.input),m=D,g=at(u),x=m?.method===i.method&&m?.key===g,O=!1;if(m){let e=await pi(m,{challenges:T,response:v,status:x?`pending`:`rejected`});O=x&&!e}D=O?m:void 0;let k=bi(async n=>{if(n===void 0&&O&&m)return m.promise;O&&m&&(await pi(m,{status:`rejected`}),D=void 0);let r=n??b;if(!ni(i.method))return Bi(u,i.method,r);let a={prepare:()=>ri(i.method,{challenge:u,context:r,fetch:d,input:p,signal:Ri(e,t)})},o=a.prepare().then(()=>Bi(u,i.method,r,a));return D={attempt:a,key:n===void 0?g:void 0,method:i.method,promise:o},o}),A=await l.emit(`challenge.received`,xi({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 pi(j,{status:`rejected`}),D=void 0),zi(A),await l.emit(`credential.created`,Si({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}),redirect:`manual`});let M=await c.isPaymentRequired(v,y);if(M||(await pi(j,{response:v,status:v.status>=300&&v.status<400?`pending`:v.ok?`accepted`:`rejected`}),D=void 0),v.ok&&gi(l,`payment.response`)&&await l.emit(`payment.response`,Ci({challenge:u,credential:A,init:t,input:e,method:i.method,response:v})),!M)return v.ok?ui(i.method,{challenge:u,credential:A,fetch:d,headers:_.headers,input:p,...r?{refetch:()=>f(Li(_.input),t,!1)}:{},response:v,signal:Ri(e,t)}):v}T=void 0;try{T=await c.getChallenges(v,y)}catch{}return await pi(D,{challenges:T,response:v,status:`rejected`}),v}catch(n){throw await pi(D,{challenges:T,response:v,status:`rejected`}),await l.emit(`payment.failed`,wi({challenge:w,challenges:T,error:n,init:t,input:e,method:E,response:v})),n}},p=(e,t)=>f(e,t,!0);return p[di]=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 hi(){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 _i(t,n);if(typeof e==`string`&&e.length>0){r=e;break}}return await yi(e[`*`],t,n),r}case`credential.created`:await vi(e[`credential.created`],n),await yi(e[`*`],t,n);return;case`payment.failed`:await vi(e[`payment.failed`],n),await yi(e[`*`],t,n);return;case`payment.response`:await vi(e[`payment.response`],n),await yi(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 fi.set(t,t=>e[t].size>0||e[`*`].size>0),t}function gi(e,t){return fi.get(e)?.(t)??!0}async function _i(e,t){try{return await e(t)}catch{return}}async function vi(e,t){for(let n of e)try{await n(t)}catch{}}async function yi(e,t,n){await vi(e,Object.freeze({name:t,payload:n}))}function bi(e){let t;return n=>(t??=e(n),t)}function xi(e){return Object.freeze({challenge:ki(e.challenge),challenges:e.challenges.map(e=>ki(e)),createCredential:e.createCredential,init:Ti(e.init),input:Ei(e.input),method:Di(e.method),response:Oi(e.response)})}function Si(e){return Object.freeze({challenge:ki(e.challenge),credential:e.credential,init:Ti(e.init),input:Ei(e.input),method:Di(e.method),...e.response===void 0?{}:{response:Oi(e.response)}})}function Ci(e){return Object.freeze({challenge:ki(e.challenge),credential:e.credential,init:Ti(e.init),input:Ei(e.input),method:Di(e.method),response:Oi(e.response)})}function wi(e){return Object.freeze({...e.challenge?{challenge:ki(e.challenge)}:{},...e.challenges?{challenges:e.challenges.map(e=>ki(e))}:{},error:e.error,init:Ti(e.init),input:Ei(e.input),...e.method?{method:Di(e.method)}:{},...e.response===void 0?{}:{response:Oi(e.response)}})}function Ti(e){if(e)return ji({...e,...e.headers?{headers:new Headers(e.headers)}:{}})}function Ei(e){if(e instanceof Request)try{return e.clone()}catch{return e}return e instanceof URL?new URL(e):e}function Di(e){return ji(Object.assign({},e))}function Oi(e){return e instanceof Response?e.clone():ki(e)}function ki(e){try{return Ai(structuredClone(e))}catch{return ji(e)}}function Ai(e){if(!e||typeof e!=`object`||Object.isFrozen(e))return e;Object.freeze(e);for(let t of Object.values(e))Ai(t);return e}function ji(e){return!e||typeof e!=`object`||Object.isFrozen(e)||Object.freeze(e),e}function Mi(e,t,n,r,i,a){let o=!!r&&!i&&Ui(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 Ni(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 Pi(e,t){return t===void 0?e:{...e,body:t}}function Fi(e,t){return t?new Headers(t):new Headers(e instanceof Request?e.headers:void 0)}function Ii(e){let t=e;for(;t[di];)t=t[di];return t}function Li(e){if(!(e instanceof Request)||!e.body||e.bodyUsed)return e;try{return e.clone()}catch{return e}}function Ri(e,t){if(t?.signal!==null)return t?.signal===void 0?e instanceof Request?e.signal:void 0:t.signal}function zi(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 Bi(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&&ci(t,a,r),t.createCredential(a)}function Vi(e,t){let n=e.get(R.acceptPayment);if(!n)return t;try{return{...t,entries:Sr(n),header:n}}catch{return t}}async function Hi(e,t){return t?t(e):e}function Ui(e,t){if(t===`always`)return!0;if(t===`never`)return!1;let n=Ki(e);return t===`same-origin`?!Gi()||n.origin===globalThis.location.origin:t.origins.some(e=>Wi(n,e))}function Wi(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 Gi(){return globalThis.location!==void 0}function Ki(e){return e instanceof URL?e:e instanceof Request?new URL(e.url):new URL(e,Gi()?globalThis.location.href:void 0)}function qi(e,t,n){if(!e.url)return t;let r=new URL(e.url),i=Ki(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 Ji(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 ue(r)}}function Yi(e){return Object.fromEntries(Object.entries(e.headers??{}).filter(([e])=>e.toLowerCase()!==`content-type`))}const Xi={[N.id]:N,[ee.id]:ee};function Zi(e,t={}){return s(e.url,{fetchFn:e.fetch,fetchOptions:{headers:Yi(e)},...t})}function Qi(r){let{chain:i,getClient:a,remoteFeePayer:o,rpcUrl:c}=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=le(n({request:t=>e(t)},{retryCount:0}),Zi(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,...e.chainId===void 0?{}:{id:e.chainId},...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(!c)throw Error("No `rpcUrl` provided.");let n=t||Number(Object.keys(c)[0]),r=c[n];if(!r)throw Error(`No \`rpcUrl\` configured for \`chainId\` (${n}).`);let a=o?le(s(r),Zi(o)):s(r);return e({chain:Xi[n]??{...i,id:n},transport:a})}}function $i(e,t){if(t!==void 0&&e.chain?.id!==void 0&&e.chain.id!==t)throw Error(`Chain ID mismatch: expected ${t}, got ${e.chain.id}.`)}function ea(e,t){if(e!==void 0&&(t===void 0||!e.includes(t)))throw Error(`Chain ID not allowed: ${t??`unknown`}.`)}const ta=T.slice(w.keccak256(C.fromString(`mpp`),{as:`Hex`}),0,4);function na(e){let t=w.keccak256(C.fromString(e),{as:`Hex`});return T.toBytes(T.slice(t,0,10))}function ra(e){let{serverId:t,clientId:n,challengeId:r}=e,i=new Uint8Array(32);return i.set(T.toBytes(ta),0),i[4]=1,i.set(na(t),5),n&&i.set(na(n),15),i.set(ia(r),25),T.fromBytes(i)}function ia(e){let t=w.keccak256(C.fromString(e),{as:`Hex`});return T.toBytes(T.slice(t,0,7))}function aa(e,t){return me.resolve(e).toLowerCase()===me.resolve(t).toLowerCase()}const oa=[zn.pathUsd,zn.usdc];async function sa(e,t){let{account:n,amountOut:r,tokenOut:i,tokenIn:a,slippage:o}=t,s=a.filter(e=>!aa(e,i)),c=await Promise.allSettled([m(e,P.token.getBalance.call(e,{account:n,token:i})),...s.map(t=>m(e,P.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 P.dex.getBuyQuote(e,{tokenIn:l,tokenOut:i,amountOut:r});if(a>=t){let n=t+t*BigInt(Math.round(o*100))/10000n;return[P.token.approve.call(e,{amount:n,spender:oe.stablecoinDex,token:l}),P.dex.buy.call({tokenIn:l,tokenOut:i,amountOut:r,maxAmountIn:n})]}}catch{}}throw new la({currency:i})}}function ca(e,t){return e?e===!0?{tokenIn:t,slippage:1}:{tokenIn:e.tokenIn?[...e.tokenIn,...t.filter(t=>!e.tokenIn.some(e=>aa(e,t)))]:t,slippage:e.slippage??1}:!1}var la=class extends Error{name=`InsufficientFundsError`;constructor({currency:e}){super(`Insufficient funds: no balance in ${e} and no viable swap route from fallback currencies.`)}};function ua(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 da(e,t,n){t&&(n&&!n.some(e=>aa(e,t))||e.some(e=>aa(e,t))||e.push(t))}async function fa(e,t,n){try{return(await P.token.getBalance(e,{account:t,token:n})).amount>0n}catch{return!1}}function pa(e){let t=e.chain?.feeToken;if(t)return se.toAddress(t);let n=e.chain?.id;return n?Bn[n]:void 0}function ma(e){let t=[];return da(t,zn.pathUsd),da(t,Bn[e]),t}async function ha(e){let{account:t,allowedTokens:n,candidateTokens:r,client:i,prioritizeCandidates:a}=e,o=[];if(a)for(let e of r??[])da(o,e,n);if(da(o,await P.fee.getUserToken(i,{account:t}).then(e=>e?.address).catch(()=>void 0),n),da(o,pa(i),n),!a)for(let e of r??[])da(o,e,n);for(let e of o)if(await fa(i,t,e))return e;return o[0]}const ga=u([`function swapTo(address inputToken,uint256 amount,address targetToken,address recipient,bytes32 memo)`]);function _a(e){if(e!==void 0)return Vn[e]}function va(e){let t=_a(e.chainId);return!!t&&c(e.currency,{strict:!1})&&l(e.currency,t.token)}function ya(e){let t=_a(e.chainId),n=e.transfers.length===1?e.transfers[0]:void 0;if(!t||!n?.memo)return;let i=BigInt(n.amount),a=n.memo;return{calls:[{data:r({abi:ie.tip20,functionName:`approve`,args:[t.swap,i]}),to:t.token},{data:r({abi:ga,functionName:`swapTo`,args:[t.token,i,e.currency,n.recipient,a]}),to:t.swap}],settlementSender:t.swap,transfers:[{amount:i,memo:a,recipient:n.recipient}]}}async function ba(e,t){let n=ya(t);if(n)try{return await m(e,P.token.getBalance.call(e,{account:t.account,token:n.calls[0].to}))<n.transfers[0].amount?void 0:(await f(e,{account:t.account,calls:n.calls}),n)}catch{return}}const xa={Proof:[{name:`account`,type:`address`},{name:`challengeId`,type:`string`},{name:`realm`,type:`string`}]};function Sa(e){return{name:`MPP`,version:`3`,chainId:e}}function Ca(e){let{account:t,challengeId:n,realm:r}=e;return{account:t,challengeId:n,realm:r}}function wa(e){let{account:t,chainId:n,challengeId:r,realm:i}=e;return{domain:Sa(n),types:xa,primaryType:`Proof`,message:Ca({account:t,challengeId:r,realm:i})}}function Ta(e){return`did:pkh:eip155:${e.chainId}:${e.address}`}const Ea=[`push`,`pull`],Da=B.object({amount:V(),memo:B.optional(U()),recipient:B.pipe(B.string(),B.transform(e=>e))}),Oa=(1n<<64n)-1n,ka={dev_second:1n,day:86400n,week:604800n},Aa=B.pipe(H(),B.transform(e=>e.toLowerCase())),ja=B.object({accessKeyAddress:Aa,keyType:B.enum([`p256`,`secp256k1`,`webAuthn`])}),Ma=B.object({accessKey:B.optional(ja),chainId:B.optional(B.number())}),Na=Qe(`subscriptionExpires must be a valid date`).check(B.refine(e=>e.getTime()%1e3==0,`subscriptionExpires must be representable as whole seconds`)),Pa=B.enum([`dev_second`,`day`,`week`]),Fa=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)<=Oa}catch{return!1}},`periodCount exceeds uint64`));function Ia(e){return B.refine(e=>{let{amount:t,decimals:n}=e;return d(t,n)>0n},e)}function La(e){let{periodCount:t,periodUnit:n}=e;try{let e=ka[n];return e!==void 0&&BigInt(t)*e<=Oa}catch{return!1}}const Ra=jt({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({machineTokenEnabled:B.optional(B.boolean()),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(B.never()),recipient:B.optional(B.string()),splits:B.optional(B.array(Da).check(B.minLength(1),B.maxLength(10))),supportedModes:B.optional(B.array(B.enum(Ea)).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(({machineTokenEnabled:e,amount:t,chainId:n,decimals:r,feePayer:i,memo:a,splits:o,supportedModes:s,...c})=>({...c,amount:d(t,r).toString(),...e!==void 0||n!==void 0||i!==void 0||o!==void 0||s!==void 0?{methodDetails:{...e!==void 0&&{machineTokenEnabled:e},...n!==void 0&&{chainId:n},...i!==void 0&&{feePayer:i},...o!==void 0&&{splits:o.map(e=>({...e,amount:d(e.amount,r).toString()}))},...s!==void 0&&{supportedModes:s}}}:{}})))}}),za=jt({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(),closeSignature:W(),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([qe.v2,qe.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&&{[Ke.sessionProtocol]:l},...u!==void 0&&{[Ke.sessionSnapshot]:u}}})))}}),Ba=jt({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(ja),chainId:B.optional(B.number()),currency:Aa,decimals:B.number(),description:B.optional(B.string()),externalId:B.optional(B.string()),methodDetails:B.optional(Ma),periodCount:Fa,periodUnit:Pa,recipient:Aa,subscriptionExpires:Na}).check(Ia(`Subscription amount must be greater than 0`),B.refine(La,`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}:{}}}))}}),Va=B.object({account:B.optional(B.custom()),autoSwap:B.optional(B.custom()),mode:B.optional(B.enum(Ea))});function Ha(e={}){let{clientId:t}=e,n=Qi({chain:N,getClient:e.getClient,rpcUrl:Hn}),r=Ji({account:e.account});return Mt(Ra,{context:Va,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}.`);(o!==void 0||e.allowedChainIds?.length===0)&&ea(e.allowedChainIds,o);let s=o??e.expectedChainId??(e.allowedChainIds?.length===1?e.allowedChainIds[0]:void 0),c=await n({chainId:s});$i(c,s);let l=s??c.chain?.id;if(ea(e.allowedChainIds,l),l===void 0)throw Error("No `chainId` provided. Pass a chain ID in the challenge or client.");let{request:u}=i,{amount:d,methodDetails:f}=u,m=f?.supportedModes??[`pull`,`push`],y=r(c,a),b=async t=>await e.resolveAccount?.({account:y,chainId:l,operation:t})??y;if(e.expectedRecipients){let t=new Set(e.expectedRecipients.map(e=>e.toLowerCase()));if(!u.recipient||!t.has(u.recipient.toLowerCase()))throw Error(`Unexpected primary recipient: ${u.recipient}`);let n=f?.splits;if(n){for(let e of n)if(!t.has(e.recipient.toLowerCase()))throw Error(`Unexpected split recipient: ${e.recipient}`)}}if(BigInt(d)===0n){let e=await b({kind:`signPaymentProof`});return Et({challenge:i,payload:{signature:await v(c,{account:e,...wa({account:e.address,chainId:l,challengeId:i.id,realm:i.realm})}),type:`proof`},source:Ta({address:e.address,chainId:l})})}let x=u.currency,S=va({chainId:l,currency:x}),C=ra({challengeId:i.id,clientId:t,serverId:i.realm}),w=ua({amount:d,methodDetails:{...f,memo:C},recipient:u.recipient}),T=w.map(e=>P.token.transfer.call(c,{amount:BigInt(e.amount),...e.memo&&{memo:e.memo},to:e.recipient,token:x})),E=ca(a?.autoSwap??e.autoSwap,oa),D=f?.machineTokenEnabled===!0?ya({chainId:l,currency:x,transfers:w}):void 0,O=y,k;if(D){let e=await(async()=>{try{return await b({calls:D.calls,kind:`executeCalls`})}catch{return}})();e&&(k=await ba(c,{account:e.address,chainId:l,currency:x,transfers:w}),k&&(O=e))}let A;k||(O=await b({kind:`executeCalls`,...E?{}:{calls:T}}),A=E?await sa(c,{account:O.address,amountOut:BigInt(d),tokenOut:x,tokenIn:E.tokenIn,slippage:E.slippage}):void 0);let j=k?.calls??[...A??[],...T],M=ma(l),N=k||S?await ha({account:O.address,allowedTokens:M,candidateTokens:M,client:c,prioritizeCandidates:!0}):void 0,ee=(()=>{let t=a?.mode??e.mode;if(t){if(!m.includes(t))throw Error(`Challenge does not support ${t} mode.`);return t}let n=O.type===`json-rpc`?`push`:`pull`;return m.includes(n)?n:m[0]})(),te=(()=>{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(ee===`push`){let{receipts:e}=O.type===`local`?{receipts:[await g(c,{account:O,calls:j,...N?{feeToken:N}:{},nonceKey:`expiring`,validBefore:te})]}:await h(c,{account:O,...N?{capabilities:{feeToken:N}}:{},calls:j,experimental_fallback:j.length===1,forceAtomic:j.length>1}),t=e?.[0]?.transactionHash;if(!t)throw Error(`No transaction receipt returned.`);return Et({challenge:i,payload:{hash:t,type:`hash`},source:Ta({address:O.address,chainId:l})})}let ne=await p(c,{account:O,calls:j,...N?{feeToken:N}:{},nonceKey:`expiring`,validBefore:te});if(ne.gas=(ne.gas??0n)+5000n,f?.feePayer){let e=ne;delete e.feePayerSignature,delete e.feeToken,e.feePayer=!0}return Et({challenge:i,payload:{signature:await _(c,ne),type:`transaction`},source:Ta({address:O.address,chainId:l})})}})}const Ua=(1n<<96n)-1n;function Wa(e){return e>=0n&&e<=Ua}function Ga(e){if(!/^\d{1,29}$/.test(e))return;let t=BigInt(e);return Wa(t)?t:void 0}function Ka(e){return qa(e),e}function qa(e){if(!Wa(e))throw Error(`Value ${e} is outside uint96 bounds.`)}const Ja=new Set([`open`,`topUp`,`voucher`,`close`]);function Ya(e){return typeof e==`object`&&!!e}function Xa(e){return typeof e==`string`&&Ja.has(e)}function Za(e){if(typeof e!=`object`||!e)return!1;let t=e;return!(typeof t.channelId!=`string`||t.action!==void 0&&!Xa(t.action))}function Qa(e,t=`No session credential context available.`){if(!Za(e))throw Error(t);return e}function $a(e){let t=e.request.amount;if(typeof t!=`string`)throw Error(`Session challenge is missing amount.`);return BigInt(t)}function eo(e){return Ya(e)?typeof e.channelId==`string`&&typeof e.requiredCumulative==`string`&&typeof e.acceptedCumulative==`string`&&typeof e.deposit==`string`:!1}function to(e){return Ya(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 no(e){let t=S.toString(e),n=JSON.parse(t);if(!to(n))throw Error(`Invalid session receipt.`);return n}function ro(e){return e.headers.get(`content-type`)?.toLowerCase().startsWith(`text/event-stream`)??!1}function io(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,getAddress as a,hashTypedData as o,http as s,isAddress as c,isAddressEqual as l,keccak256 as u,parseAbi as d,parseUnits as f}from"viem";import{call as p,prepareTransactionRequest as m,readContract as h,sendCallsSync as g,sendTransactionSync as _,signTransaction as v,signTypedData as y}from"viem/actions";import*as b from"viem/chains";import{tempo as x}from"viem/chains";import{AbiParameters as S,Base64 as C,Bytes as w,Hash as T,Hex as E,Json as D}from"ox";import{z as O}from"zod/mini";import*as k from"node:child_process";import*as A from"node:fs";import*as j from"node:os";import*as M from"node:path";import{z as N}from"zod";import"node:readline";import{tempo as P,tempoModerato as ee}from"viem/tempo/chains";import{ousd as te,pathusd as ne,usdce as re}from"viem/tokens";import{Abis as ie,Account as ae,Actions as F,Addresses as oe,TokenId as se,Transaction as ce,withFeePayer as le}from"viem/tempo";import{parseAccount as ue,privateKeyToAccount as de}from"viem/accounts";import{createParser as fe}from"eventsource-parser";import{Channel as pe,KeyAuthorization as I,SignatureEnvelope as L,TempoAddress as me,TxEnvelopeTempo as he}from"ox/tempo";var ge=Object.defineProperty,_e=Object.getOwnPropertyDescriptor,ve=Object.getOwnPropertyNames,ye=Object.prototype.hasOwnProperty,be=(e,t)=>{let n={};for(var r in e)ge(n,r,{get:e[r],enumerable:!0});return t||ge(n,Symbol.toStringTag,{value:`Module`}),n},xe=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=ve(t),a=0,o=i.length,s;a<o;a++)s=i[a],!ye.call(e,s)&&s!==n&&ge(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=_e(t,s))||r.enumerable});return e},Se=(e,t,n)=>(xe(e,t,`default`),n&&xe(n,t,`default`));const Ce=Symbol(`mppx.x402.asset`);function we(e){return{[Ce]:!0,address:e.address,decimals:e.decimals,network:e.network,transfer:e.transfer}}function Te(e,t){let n=e(t.chainId);return we({address:n.address,decimals:n.decimals,network:Fe(t.chainId),transfer:Le(t.transfer,n)})}const Ee={USDC:we({address:`0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`,decimals:6,network:`eip155:8453`,transfer:{name:`USD Coin`,type:`eip3009`,version:`2`}})},De={USDC:we({address:`0x036CbD53842c5426634e7929541eC2318f3dCF7e`,decimals:6,network:`eip155:84532`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}})},Oe={USDC:we({address:`0xcebA9300f2b948710d2653dD7B07f33A8B32118C`,decimals:6,network:`eip155:42220`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}}),USDT:we({address:`0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e`,decimals:6,network:`eip155:42220`,transfer:{name:`Tether USD`,type:`eip3009`,version:`1`}})},ke={USDC:we({address:`0x01C5C0122039549AD1493B8220cABEdD739BC44E`,decimals:6,network:`eip155:11142220`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}})};function Ae(e){return typeof e!=`object`||!e?!1:e[Ce]===!0}function je(e){return typeof e==`function`&&typeof e.addresses==`object`&&typeof e.decimals==`number`}function Me(e){return typeof e==`string`}function Ne(e,t){if(Ae(e))return e.network===t?{address:e.address,decimals:e.decimals,transfer:e.transfer}:void 0;if(je(e)){let n=e.addresses[Ie(t)];return n?{address:n,decimals:e.decimals,name:e.name}:void 0}return{address:e}}function Pe(e,t,n){let r=Ne(e,n);return r?a(r.address)===a(t):!1}function Fe(e){return`eip155:${e}`}function Ie(e){return Number(e.slice(7))}function Le(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 Re=be({base:()=>Ee,baseSepolia:()=>De,celo:()=>Oe,celoSepolia:()=>ke,define:()=>we,fromToken:()=>Te,isAsset:()=>Ae,isRawAddress:()=>Me,isToken:()=>je,matches:()=>Pe,resolve:()=>Ne,toChainId:()=>Ie,toNetwork:()=>Fe}),ze=be({base:()=>Be,baseSepolia:()=>Ve,celo:()=>He,celoSepolia:()=>Ue});const Be=8453,Ve=84532,He=42220,Ue=11142220,R={acceptPayment:`Accept-Payment`,authorization:`Authorization`,paymentAuthorization:`Payment-Authorization`,paymentReceipt:`Payment-Receipt`,paymentSession:`Payment-Session`,paymentSessionSnapshot:`Payment-Session-Snapshot`,wwwAuthenticate:`WWW-Authenticate`},We={payment:`Payment`},Ge={evm:`evm`,stripe:`stripe`,tempo:`tempo`},Ke={charge:`charge`,session:`session`,subscription:`subscription`},qe={sessionProtocol:`sessionProtocol`,sessionSnapshot:`sessionSnapshot`},Je={v1:`v1`,v2:`v2`};function Ye(e,t){if(!(!e||typeof e!=`object`))return e[t]}function Xe(e){let t=C.toString(e);return JSON.parse(t)}function z(e){let t=D.canonicalize(e);return C.fromString(t,{pad:!1,url:!0})}var B=be({address:()=>H,amount:()=>V,datetime:()=>Qe,datetimeInput:()=>$e,hash:()=>U,period:()=>nt,signature:()=>W,toDate:()=>et,toDatetimeString:()=>tt,unwrapOptional:()=>rt});import*as Ze from"zod/mini";Se(B,Ze);function V(){return O.string().check(O.regex(/^\d+(\.\d+)?$/,`Invalid amount`))}function Qe(){return O.string().check(O.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 $e(e=`Invalid ISO 8601 datetime`){return O.pipe(O.union([Qe(),O.custom(e=>e instanceof Date)]),O.transform(et)).check(O.refine(e=>Number.isFinite(e.getTime()),e))}function et(e){return e instanceof Date?e:new Date(e)}function tt(e){return e instanceof Date?Number.isFinite(e.getTime())?e.toISOString():`Invalid Date`:e}function H(){return O.string().check(O.regex(/^0x[0-9a-fA-F]{40}$/,`Invalid address`))}function U(){return O.string().check(O.regex(/^0x[0-9a-fA-F]{64}$/,`Invalid hash`))}function nt(){return O.string().check(O.regex(/^(day|week|month|year|\d+)$/,`Invalid period`))}function W(){return O.string().check(O.regex(/^0x[0-9a-fA-F]+$/,`Invalid signature`))}function rt(e){return e._zod.def.type===`optional`?e._zod.def.innerType:e}const it=B.object({description:B.optional(B.string()),digest:B.optional(B.string().check(B.regex(/^sha-256=/,`Invalid digest format`))),expires:B.optional(Qe()),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 at(e,t){let{description:n,digest:r,meta:i,method:a,header:o,intent:s,realm:c,request:l,secretKey:u}=e,d=yt(o)?void 0:o,f=e.expires?tt(e.expires):void 0,p=e.opaque??(i===void 0?void 0:z(i)),m=u?bt({...e,expires:f,...i!==void 0&&{meta:i},opaque:p},{secretKey:u}):e.id;return it.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 ot(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&&!yt(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)),`${We.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 st(e,t){let n=ct(e);if(!n)throw Error(`Missing Payment scheme.`);let{request:r,opaque:i,...a}=lt(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 at({...a,request:Xe(r),...i&&{opaque:i}},t)}function ct(e){let t=We.payment,[n]=pt(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 lt(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]=ut(e,n);if(n=o,i in t)throw Error(`Duplicate parameter: ${i}`);t[i]=a}return t}function ut(e,t){if(e[t]===`"`)return dt(e,t+1);let n=t;for(;n<e.length&&e[n]!==`,`;)n++;return[e.slice(t,n).trim(),n]}function dt(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 ft(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 pt(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(!ft(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 mt(e,t){if(e.status!==402)throw Error(`Response status is not 402.`);return ht(e.headers,t)}function ht(e,t){let n=e.get(R.wwwAuthenticate);if(!n)throw Error(`Missing ${R.wwwAuthenticate} header.`);return gt(n,t)}function gt(e,t){let n=pt(e,We.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 st(e.slice(r,a).replace(/,\s*$/,``),t)})}function _t(e){let t=[e.realm,e.method,e.intent,z(e.request),e.expires??``,e.digest??``],n=e.header;return n!==void 0&&!yt(n)&&t.push(n),t.push(e.opaque??(e.meta?z(e.meta):``)),t.join(`|`)}function vt(e){return e.header??R.authorization}function yt(e){return e?.toLowerCase()===R.authorization.toLowerCase()}function bt(e,t){let n=_t(e),r=w.fromString(t.secretKey),i=w.fromString(n),a=T.hmac256(r,i,{as:`Bytes`});return C.fromBytes(a,{url:!0,pad:!1})}var xt=class extends Error{name=`MissingPaymentSchemeError`;constructor(){super(`Missing Payment scheme.`)}},St=class extends Error{name=`InvalidCredentialEncodingError`;constructor(){super(`Invalid base64url or JSON.`)}};function Ct(e){let t=e.match(RegExp(`^${We.payment}\\s+(.+)$`,`i`));if(!t?.[1])throw new xt;try{let e=C.toString(t[1]),n=JSON.parse(e),{opaque:r,request:i,meta:a,...o}=n.challenge,{meta:s,opaque:c}=wt(r);return{challenge:it.parse({...o,...s!==void 0&&{meta:s},...c!==void 0&&{opaque:c},request:Xe(i)}),payload:n.payload,...n.source&&{source:n.source}}}catch{throw new St}}function wt(e){if(e===void 0)return{};if(typeof e==`string`)return{opaque:e};if(!Tt(e))throw Error(`Invalid opaque.`);return{meta:e,opaque:z(e)}}function Tt(e){return typeof e!=`object`||!e||Array.isArray(e)?!1:Object.values(e).every(e=>typeof e==`string`)}function Et(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=C.fromString(s,{pad:!1,url:!0});return`${We.payment} ${c}`}var Dt=class extends Error{details;status=402;hint;constructor(e,t={}){super(e),this.details=t.details,t.cause!==void 0&&Object.defineProperty(this,"cause",{configurable:!0,value:t.cause,writable:!0})}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}}}},Ot=class extends Dt{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 Dt{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})}},kt=class extends Dt{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.`)}},At=class extends Dt{name=`PaymentOutcomeUnknownError`;title=`Payment Outcome Unknown`;type=`https://paymentauth.org/problems/payment-outcome-unknown`;challenge;credential;transactionHash;constructor(e){let{cause:t,challenge:n,credential:r,transactionHash:i}=e;super(`Payment outcome is unknown after sending a credential for challenge "${n.id}". Do not blindly retry.`,{cause:t}),this.challenge=n,this.credential=r,this.transactionHash=i}};function jt(e,t){if(!e)throw new Ot({...t&&{id:t},reason:`missing required expires field`});if(Number.isNaN(new Date(e).getTime()))throw new Ot({...t&&{id:t},reason:`malformed expires timestamp`});if(new Date(e)<new Date)throw new kt({expires:e})}function Mt(e){return e}function Nt(e,t){let{canHandleChallenge:n,context:r,createCredential:i}=t;return{...e,canHandleChallenge:n,context:r,createCredential:i}}function Pt(e){return{encode(t){return C.fromString(JSON.stringify(e.parse(t)))},decode(t){try{return e.parse(JSON.parse(C.toString(t)))}catch{throw new Ft}}}}var Ft=class extends Error{name=`InvalidJsonHeaderError`;constructor(){super(`Invalid base64 JSON header.`)}};const It=[`exact`],Lt=`PAYMENT-REQUIRED`,Rt=`PAYMENT-SIGNATURE`,zt=B.string().check(B.minLength(1)),Bt=B.number().check(B.refine(e=>e>0,`Must be positive`)),J=B.string().check(B.regex(/^\d+$/,`Invalid atomic amount`)),Vt=H(),Ht=B.string().check(B.regex(RegExp(`^eip155:\\d+$`),`Invalid EVM CAIP-2 network`)),Ut=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:zt});B.discriminatedUnion(`type`,[B.object({name:zt,type:B.literal(`eip3009`),version:zt}),B.object({name:B.optional(B.string()),type:B.literal(`permit2`),version:B.optional(B.string())})]);const Wt=B.object({amount:J,asset:zt,extra:B.optional(B.record(B.string(),B.unknown())),maxTimeoutSeconds:Bt,network:Ht,payTo:zt,scheme:B.enum(It)}),Gt=B.object({info:B.record(B.string(),B.unknown()),schema:B.record(B.string(),B.unknown())}),Kt=B.record(B.string(),Gt),qt=B.object({accepts:B.array(Wt).check(B.minLength(1)),error:B.optional(B.string()),extensions:B.optional(Kt),resource:Ut,x402Version:B.literal(2)}),Jt=B.object({authorization:B.object({from:Vt,nonce:U(),to:Vt,validAfter:J,validBefore:J,value:J}),signature:W()}),Yt=B.object({permit2Authorization:B.object({deadline:J,from:Vt,nonce:J,permitted:B.object({amount:J,token:Vt}),spender:Vt,witness:B.object({to:Vt,validAfter:J})}),signature:W()}),Xt=B.union([Jt,Yt]),Zt=B.object({accepted:Wt,extensions:B.optional(Kt),payload:Xt,resource:B.optional(Ut),x402Version:B.literal(2)});B.object({extensions:B.optional(Kt),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 Qt=B.object({amount:B.optional(J),errorMessage:B.optional(B.string()),errorReason:B.optional(B.string()),extensions:B.optional(Kt),extra:B.optional(B.record(B.string(),B.unknown())),network:zt,payer:B.optional(B.string()),success:B.boolean(),transaction:B.string()});function $t(e){let{extensions:t,resource:n,...r}=e;return Wt.parse(r)}const en=Pt(qt),tn=Pt(Zt),nn=Pt(Qt);en.encode,en.decode;function rn(e){try{let t=JSON.parse(C.toString(e));return on(t)}catch{throw new Ft}}const an=tn.encode;tn.decode,nn.encode,nn.decode;const on=e=>{if(!e||typeof e!=`object`||Array.isArray(e))throw new Ft;let t=e;if(t.x402Version!==2||!Array.isArray(t.accepts))throw new Ft;let n=Ut.parse(t.resource),r=t.extensions===void 0?void 0:Kt.safeParse(t.extensions).data;return{accepts:t.accepts,...r?{extensions:r}:{},resource:n,x402Version:2}};function sn(e){let t=[z(e.accepted),z(e.resource),z(e.extensions)].join(`|`);return T.sha256(w.fromString(t),{as:`Hex`})}async function cn(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=$t(n);if(fn(e.config,r),!n.resource)throw Error(`x402 exact EIP-3009 requires resource information.`);let i=n.extensions?.mppx?mn(n.extensions):n.extensions,o=r.extra?.assetTransferMethod??`eip3009`;if(o!==`eip3009`)throw Error(`x402 exact ${String(o)} 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:a(t.address),nonce:i?.mppx?sn({accepted:r,extensions:i,resource:n.resource}):gn(),to:a(r.payTo),validAfter:(l-600).toString(),validBefore:(l+r.maxTimeoutSeconds).toString(),value:r.amount},d=await t.signTypedData({domain:{chainId:dn(r.network),name:s,verifyingContract:a(r.asset),version:c},message:{...u,value:BigInt(u.value),validAfter:BigInt(u.validAfter),validBefore:BigInt(u.validBefore)},primaryType:`TransferWithAuthorization`,types:un});return an({accepted:r,...i?{extensions:i}:{},payload:{authorization:u,signature:d},...n.resource?{resource:n.resource}:{},x402Version:2})}function ln(e){let t=e.challenge.request,n;try{n=$t(t),fn(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 un={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 dn(e){return Number(e.slice(7))}function fn(e,t){let n=dn(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=>Me(e))&&!e.networks?.length)throw Error(`x402 exact raw currency allowlists require networks.`);if(r){let e=a(t.asset);if(!r.some(n=>Pe(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=pn(e,t);if(n===void 0)throw Error(`x402 exact maxAmount requires currency decimals.`);if(BigInt(t.amount)>f(e.maxAmount,n))throw Error(`x402 exact amount exceeds maxAmount.`)}}function pn(e,t){let n=e.currencies??e.assets,r=a(t.asset),i=n?.find(e=>Pe(e,r,t.network)),o=i?Ne(i,t.network):void 0;return o?.decimals===void 0?e.decimals:o.decimals}function mn(e){let t=e.mppx;return t?{...e,mppx:{...t,info:{...t.info,nonce:hn()}}}:e}function hn(){return _n().slice(2)}function gn(){return _n()}function _n(){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 vn=Symbol.for(`mppx.x402.challenge`);function yn(e){return Object.defineProperty(e,vn,{value:!0}),e}function bn(e){return!!e?.[vn]}const xn=[`authorization`],Sn=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 Cn=B.object({chainId:B.number(),credentialTypes:B.optional(B.array(B.enum(xn)).check(B.minLength(1))),decimals:B.optional(B.number()),permit2Address:B.optional(H()),splits:B.optional(B.array(B.object({amount:Sn,recipient:H()})))});B.object({amount:Sn,currency:H(),description:B.optional(B.string()),externalId:B.optional(B.string()),methodDetails:Cn,recipient:H()});const wn=B.object({amount:V(),chainId:B.number(),currency:H(),credentialTypes:B.optional(B.array(B.enum(xn)).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:Sn,recipient:H()})))}),Tn=B.object({from:H(),nonce:U(),signature:W(),to:H(),type:B.literal(`authorization`),validAfter:Sn,validBefore:Sn,value:Sn}),En={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 Dn(e){return{chainId:e.chainId,name:e.authorization.name,verifyingContract:e.currency,version:e.authorization.version}}function On(e){return T.keccak256(w.fromString(JSON.stringify([e.id,e.realm])),{as:`Hex`})}function kn(e){return`eip155:${e}`}function An(e){return`did:pkh:eip155:${e.chainId}:${e.address}`}const jn=Mt({name:`evm`,intent:`charge`,schema:{credential:{payload:Tn},request:B.pipe(wn,B.transform(({amount:e,chainId:t,credentialTypes:n=[`authorization`],currency:r,decimals:i,permit2Address:o,recipient:s,splits:c,...l})=>({...l,amount:f(e,i).toString(),currency:a(r),methodDetails:{chainId:t,credentialTypes:n,decimals:i,...o?{permit2Address:a(o)}:{},...c?{splits:c}:{}},recipient:a(s)})))}});function Mn(e){return Nt(jn,{canHandleChallenge({challenge:t}){return!Nn(t)||ln({challenge:t,config:e})},context:B.object({account:B.optional(B.custom())}),async createCredential({challenge:t,context:n}){if(Nn(t))return cn({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(Pn(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 o=Fn(e,i),s=t.expires?Math.floor(new Date(t.expires).getTime()/1e3).toString():(Math.floor(Date.now()/1e3)+300).toString();return K(Et({challenge:t,payload:{from:a(r.address),nonce:On(t),signature:await r.signTypedData({domain:Dn({authorization:o,chainId:i.methodDetails.chainId,currency:i.currency}),message:{from:a(r.address),nonce:On(t),to:a(i.recipient),validAfter:0n,validBefore:BigInt(s),value:BigInt(i.amount)},primaryType:`TransferWithAuthorization`,types:En}),to:a(i.recipient),type:`authorization`,validAfter:`0`,validBefore:s,value:i.amount},source:An({address:a(r.address),chainId:i.methodDetails.chainId})}))}})}function Nn(e){return bn(e)&&e.request.scheme===`exact`&&typeof e.request.network==`string`}function Pn(e,t){let n=t.methodDetails.chainId,r=kn(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=>Me(e))&&!e.networks?.length)throw Error(`EVM raw currency allowlists require networks.`);if(i){let e=a(t.currency);if(!i.some(t=>Pe(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=In(e,t);if(n===void 0)throw Error(`EVM charge maxAmount requires currency decimals.`);if(BigInt(t.amount)>f(e.maxAmount,n))throw Error(`EVM charge amount exceeds maxAmount.`)}}function Fn(e,t){let n=e.currencies??e.assets,r=a(t.currency),i=kn(t.methodDetails.chainId),o=n?.find(e=>Pe(e,r,i)),s=o?Ne(o,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 In(e,t){let n=e.currencies??e.assets,r=a(t.currency),i=kn(t.methodDetails.chainId),o=n?.find(e=>Pe(e,r,i)),s=o?Ne(o,i):void 0;return s?.decimals===void 0?e.decimals:s.decimals}function Ln(e){return[Ln.charge(e)]}(function(e){e.charge=Mn,e.assets=Re,e.chains=ze})(Ln||={});var Rn=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 zn(this,e)}},Y=class extends Rn{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 zn(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},Bn={ousd:te(X.mainnet).address,usdc:a(re(X.mainnet).address),pathUsd:ne(X.mainnet).address},Vn={[X.mainnet]:Bn.usdc,[X.testnet]:Bn.pathUsd},Hn=Object.freeze({[X.mainnet]:Object.freeze({swap:`0xF72E5107c32C655ffA7539a3C8e97B7C3cE16A3F`,token:`0x20c000000000000000000000f37de3740ADec032`}),[X.testnet]:Object.freeze({swap:`0xd05f8EdFBB54Da0d765C9fE9b2B3f7d2E3a8C466`,token:`0x20c000000000000000000000f37de3740ADec032`})});X.mainnet,X.testnet;const Un={[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 Wn(e,t){return Z.link(e,t)}function Gn(e){return e.startsWith(`tempo:`)}function Kn(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 qn={mainnet:Un[X.mainnet],testnet:Un[X.testnet]};function Jn(e,t={}){return e??(t.network?qn[t.network]:void 0)??(process.env.MPPX_RPC_URL?.trim()||process.env.RPC_URL?.trim()||void 0)}async function Yn(t={}){let n=Jn(t.rpcUrl,{network:t.network});if(!n)return P;let{getChainId:r}=await import(`viem/actions`),i=await r(e({transport:s(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 Xn(e){return typeof e==`bigint`?e:e.amount}function Zn(e){return e.id!==P.id}async function Qn(e,t,n,r={}){let{Actions:i}=await import(`viem/tempo`),[a,o]=await Promise.all([i.token.getBalance(e,{account:n,token:t}).then(Xn).catch(()=>0n),i.token.getMetadata(e,{token:t}).catch(e=>{if(r.requireDecimals)throw e;return{symbol:t}})]),s={"0x20c0000000000000000000000000000000000000":`PathUSD`,"0x20C000000000000000000000b9537d11c60E8b50":`USDC`}[t]??o.symbol,c=`decimals`in o&&typeof o.decimals==`number`?o.decimals:6;if(r.requireDecimals&&!(`decimals`in o&&typeof o.decimals==`number`))throw Error(`Token decimals are unavailable.`);return{balance:a,symbol:s,decimals:c,token:t}}function $n(){let e=Number.parseInt(process.env.MPPX_KEYCHAIN_COMMAND_TIMEOUT_MS??``,10);return Number.isFinite(e)&&e>0?e:1e4}function er(e,t){return`code`in e&&e.code===`ENOENT`&&e.message.includes(t)}function tr(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 nr(e){if(e&&er(e,`secret-tool`))throw tr(e)}function rr(e,t){return new Promise(n=>{k.execFile(e,t,{timeout:$n()},(e,t,r)=>{n({stdout:t.trim(),stderr:r.trim(),error:e})})})}function ir(){let e=M.join(process.env.XDG_CONFIG_HOME||M.join(j.homedir(),`.config`),`mppx`,`default`);return{get(){try{return A.readFileSync(e,`utf-8`).trim()||`main`}catch{return`main`}},set(t){A.mkdirSync(M.dirname(e),{recursive:!0}),A.writeFileSync(e,t,`utf-8`)},clear(){try{A.unlinkSync(e)}catch{}}}}function ar(e){return e||(process.env.MPPX_ACCOUNT?.trim()?process.env.MPPX_ACCOUNT:ir().get())}function or(e=`main`){let t=`mppx`;return{async list(){let e=j.platform();if(e===`darwin`){let{stdout:e,error:n}=await rr(`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 rr(`secret-tool`,[`search`,`--all`,`--unlock`,`service`,t]);if(nr(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=j.platform();if(n===`darwin`){let{stdout:n,error:r}=await rr(`security`,[`find-generic-password`,`-s`,t,`-a`,e,`-w`]);return r?void 0:n}if(n===`linux`){let{stdout:n,error:r}=await rr(`secret-tool`,[`lookup`,`service`,t,`account`,e]);return nr(r),r?void 0:n||void 0}throw Error(`Unsupported platform: ${n}`)},async set(n){let r=j.platform();if(r===`darwin`){await rr(`security`,[`delete-generic-password`,`-s`,t,`-a`,e]);let{error:r}=await rr(`security`,[`add-generic-password`,`-s`,t,`-a`,e,`-w`,n]);if(r)throw r;return}if(r===`linux`){let r=k.execFile(`secret-tool`,[`store`,`--label`,`${t} ${e}`,`service`,t,`account`,e]),i=setTimeout(()=>r.kill(),$n());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(er(e,`secret-tool`)?tr(e):e)})})}throw Error(`Unsupported platform: ${r}`)},async delete(){let n=j.platform();if(n===`darwin`){await rr(`security`,[`delete-generic-password`,`-s`,t,`-a`,e]);return}if(n===`linux`){let{error:n}=await rr(`secret-tool`,[`clear`,`service`,t,`account`,e]);nr(n);return}throw Error(`Unsupported platform: ${n}`)}}}async function sr(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=ar(e),i=await or(r).get();if(i)return{account:t(i),accountName:r,source:`keychain`};throw Error(`Account "${r}" not found.`)}async function cr(e){return(await sr(e)).account}function lr(e){return e}function ur(){return lr({method:`evm`,supports:e=>e.method===`evm`&&!bn(e),async setup({challenge:t}){let n=t.request,r=n.methodDetails,a=r?.chainId,o=a?dr(a):void 0,c=n.currency,l=await cr(),u=[...Object.values(Ee),...Object.values(De),...Object.values(Oe),...Object.values(ke)],d=c??``;if(o&&c)try{let t=e({chain:o,transport:s()}),n=await h(t,{address:c,abi:i,functionName:`symbol`});n&&(d=n)}catch{}return{tokenSymbol:d,tokenDecimals:r?.decimals??6,explorerUrl:o?.blockExplorers?.default?.url,methods:[...Ln({account:l,currencies:u})]}}})}function dr(e){return Object.values(b).find(t=>t.id===e)}function fr(e,t){if(!Number.isInteger(t)||t<0)throw RangeError(`Decimals must be a non-negative integer.`);if(!/^-?(?:\d+(?:\.\d*)?|\.\d+)$/.test(e))throw TypeError(`Value \`${e}\` is not a valid decimal number.`);let n=e.startsWith(`-`),[r=`0`,i=``]=(n?e.slice(1):e).split(`.`),a=i.slice(0,t).padEnd(t,`0`),o=BigInt(`${r||`0`}${a}`);return i.length>t&&i[t]>=`5`&&(o+=1n),n?-o:o}const pr=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)))}),mr=B.custom(e=>typeof e==`function`),hr=B.union([pr,mr]),gr=Mt({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(hr),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:fr(e,t).toString(),methodDetails:{networkId:r,paymentMethodTypes:a,...n!==void 0&&{metadata:n}}})))}});function _r(e){let{client:t,createToken:n,externalId:r,paymentMethod:i}=e;return Nt(gr,{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 vr(e){return[_r(e)]}(function(e){e.charge=_r})(vr||={});function yr(){return lr({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=xr(N.object({paymentMethod:N.string(),secretKey:N.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:[vr.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=br(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&&br(e)?`/test`:``}/payments/${t}`;return Z.link(n,t,!0)}}})}function br(e){return e.startsWith(`sk_test_`)||e.startsWith(`rk_test_`)}function xr(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 Sr(e){let t={};for(let n of e){let e=t[n.name]??={};e[n.intent]=Dr(n)}return t}function Cr(e,t){let n=Sr(e),r=Pr(e,n,t),i=e.map((e,t)=>({intent:e.intent,method:e.name,q:r[Dr(e)]??1,index:t}));return{definition:r,entries:i,header:Tr(i),keys:n}}function wr(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)=>Mr(e,t))}function Tr(e){return e.map(({method:e,intent:t,q:n})=>{let r=`${e}/${t}`;return n===1?r:`${r};q=${Rr(n)}`}).join(`, `)}function Er(e,t,n){let r=new Map;for(let e of t){let t=Dr(e),n=r.get(t);n?n.push(e):r.set(t,[e])}return e.flatMap((e,t)=>{let i=r.get(Dr(e));if(!i)return[];let a=Or(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)=>jr(e.challenge)-jr(t.challenge)||t.match.q-e.match.q||e.index-t.index).map(e=>{let{match:t,...n}=e;return n})}function Dr(e){let t=e.method??e.name;if(!t)throw Error(`Missing payment method name.`);return`${t}/${e.intent}`}function Or(e,t){let n;for(let r of t){if(!kr(e,r))continue;let t={...r,specificity:Ar(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 kr(e,t){return(t.method===`*`||t.method===e.method)&&(t.intent===`*`||t.intent===e.intent)}function Ar(e){return Number(e.method!==`*`)+Number(e.intent!==`*`)}function jr(e){return+!!bn(e)}function Mr(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}`);zr(r,`method`),zr(i,`intent`);let a=1;for(let t of Nr(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=Ir(i,`Accept-Payment entry "${e}"`))}return{intent:i,method:r,q:a,index:t}}function Nr(e){return e?e.split(/\s*;\s*/).filter(Boolean):[]}function Pr(e,t,n){if(!n)return{};let r=typeof n==`function`?n(t):n,i=new Set(e.map(e=>Dr(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]=Fr(t,`payment preference "${e}"`)}return a}function Fr(e,t){if(typeof e!=`number`||Number.isNaN(e)||!Number.isFinite(e))throw Error(`Invalid q-value for ${t}. Expected a finite number.`);return Lr(e,t)}function Ir(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 Lr(Number(e),t)}function Lr(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 Rr(e){return e.toFixed(3).replace(/\.0+$/,``).replace(/(\.\d*?)0+$/,`$1`)}function zr(e,t){if(e!==`*`&&!/^[a-z0-9-]+$/.test(e))throw Error(`Invalid Accept-Payment ${t}: ${e}`)}const Br=[R.authorization,Lt,`PAYMENT-RESPONSE`,Rt];function Vr(e,t,n){let r=new Headers(e.headers);for(let e of Br)e===R.authorization&&!r.get(e)?.startsWith(`Payment `)||r.delete(e);return r.set(t,n),{...e,headers:r}}function Hr(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 Ur=1048576,Wr=new WeakMap;function Gr(e){let t=Hr(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 Kr(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 qr(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=it.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 Jr(e){if(e)return`error`in e?e.error?.code!==-32042&&e.error?.code!==-32043?void 0:qr(e.error.data):qr(e.result?._meta?.[`org.paymentauth/payment-required`])}function Yr(e,t){return!e||e.id!==t?[]:Jr(e)?.challenges??[]}async function Xr(e){let t=e.clone().body?.getReader();if(!t)return;let n=new TextDecoder,r=0,i=!1,a,o=fe({onEvent(e){if(!(i||!e.data)&&(i=!0,!(e.event&&e.event!==`message`)))try{a=Kr(JSON.parse(e.data))}catch{}}});try{for(;;){if(i)return a;let{done:e,value:s}=await t.read();if(e)return o.feed(n.decode()),o.reset({consume:!0}),a;if(r+=s.byteLength,r>Ur)return;o.feed(n.decode(s,{stream:!0}))}}finally{t.cancel().catch(()=>{})}}async function Zr(e){let t=e.clone().body?.getReader();if(!t)return;let n=new TextDecoder,r=0,i=``;try{for(;;){let{done:e,value:a}=await t.read();if(e)return Kr(JSON.parse(i+n.decode()));if(r+=a.byteLength,r>Ur)return;i+=n.decode(a,{stream:!0})}}catch{return}finally{t.cancel().catch(()=>{})}}function Qr(e){let t=Wr.get(e);if(t)return t;let n=(async()=>{let t=e.headers.get(`content-type`)?.toLowerCase()??``;if(!(Number(e.headers.get(`content-length`))>Ur)){if(t.includes(`application/json`))return Zr(e);if(t.includes(`text/event-stream`))return Xr(e)}})();return Wr.set(e,n),n}function $r(){return{getChallenges(e,t){let n=Gr(t);return e.status===402||n===void 0?[]:Qr(e).then(e=>Yr(e,n))},setCredential(e,t){let n=JSON.parse(e.body),r=Ct(t);return{...e,body:JSON.stringify({...n,params:{...n.params,_meta:{...n.params?._meta,"org.paymentauth/credential":r}}})}}}}function ei(){return{getChallenges(e){return e.status!==402||!e.headers.has(R.wwwAuthenticate)?[]:mt(e)},setCredential(e,t,n){return Vr(e,n?.challenge?vt(n.challenge):R.authorization,t)}}}function ti(){return{getChallenges(e){if(e.status!==402)return[];let t=e.headers.get(Lt);if(!t)return[];let n=rn(t);return n.accepts.flatMap((e,t)=>{let r=Wt.safeParse(e);if(!r.success)return[];let i=r.data;return yn(at({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 Vr(e,Rt,t)}}}function ni(e){return e}function ri(){let e=[ei(),ti(),$r()],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 ni({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 ii=new WeakMap;function ai(e,t){return ii.set(e,t),e}function oi(e){return ii.has(e)}function si(e,t){return Promise.resolve(ii.get(e)?.(t))}const ci=new WeakMap,li=new WeakMap,ui=new WeakMap;function di(e,t){return ci.set(e,t),e}function fi(e){ci.delete(e)}function pi(e,t,n){ci.has(e)&&li.set(t,n)}function mi(e){return li.get(e)}function hi(e,t){return Promise.resolve(ci.get(e)?.(t)??t.response)}function gi(e,t){return ui.set(e,t),e}function _i(e,t){try{return ui.get(e)?.(t)}catch{return}}const vi=Symbol.for(`mppx.fetch.wrapper`),yi=65536,bi=new WeakMap;async function xi(e){if(!e.body)return e;let t=e.clone().body.getReader(),n=[],r=0,i=!1,a=setTimeout(()=>{i=!0,t.cancel().catch(()=>{})},2e3);try{for(;;){let{done:e,value:a}=await t.read();if(e)break;if(n.push(a),r+=a.byteLength,r>yi){i=!0;break}}}finally{clearTimeout(a),t.cancel().catch(()=>{})}if(!i)return e;e.body.cancel().catch(()=>{});let o=new Headers(e.headers);o.delete(`content-length`),o.set(`Mppx-Body-Truncated`,`true`);let s=new Response(new Blob(n).slice(0,yi),{headers:o,status:e.status,statusText:e.statusText});for(let t of[`redirected`,`type`,`url`])Object.defineProperty(s,t,{value:e[t]});return s}async function Si(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 Ci(e){let{acceptPayment:t,acceptPaymentPolicy:n=`always`,fetch:r=globalThis.fetch,maxPaymentRetries:i=3,methods:a,onChallenge:o,orderChallenges:s,transport:c=ri()}=e,l=e.eventDispatcher??wi(),u=t??Cr(a),d=Gi(r),f=async(e,t,r)=>{let p=Wi(e,t?.headers),m=p.has(R.acceptPayment),h=Xi(p,u),g=Hi(e,t,p),_=Vi(e,t,p,h.header,m,n),v=await d(Ki(_.input),_.init),y=Ui(_.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,O;try{for(let n=0;n<i;n++){T=await c.getChallenges(v,y);let i=(await Zi(Er(T,a,h.entries),S??s))[0];if(!i){if(await Si(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&&jt(w.expires,w.id);let p=na(v,_.input,_.input),m=D,g=ot(u),x=m?.method===i.method&&m?.key===g,k=!1;if(m){let e=await Si(m,{challenges:T,response:v,status:x?`pending`:`rejected`});k=x&&!e}D=k?m:void 0;let A=ki(async n=>{if(n===void 0&&k&&m)return m.promise;k&&m&&(await Si(m,{status:`rejected`}),D=void 0);let r=n??b;if(!oi(i.method))return Yi(u,i.method,r);let a={prepare:()=>si(i.method,{challenge:u,context:r,fetch:d,input:p,signal:qi(e,t)})},o=a.prepare().then(()=>Yi(u,i.method,r,a));return D={attempt:a,key:n===void 0?g:void 0,method:i.method,promise:o},o}),j=await l.emit(`challenge.received`,Ai({challenge:u,challenges:T,createCredential:A,init:t,input:e,method:i.method,response:v}))??(o?await o(w,{createCredential:A}):void 0)??await A(),M=D;M&&await M.promise.catch(()=>void 0)!==j&&(await Si(M,{status:`rejected`}),D=void 0),Ji(j),await l.emit(`credential.created`,ji({challenge:u,credential:j,init:t,input:e,method:i.method,response:v}));let N=e=>new At({cause:e,challenge:u,credential:j,transactionHash:_i(i.method,j)});try{v=await d(p,{...c.setCredential({...C,headers:_.headers},j,{challenge:u}),redirect:`manual`})}catch(e){throw O=N(e),e}let P=await c.isPaymentRequired(v,y);if(P||(await Si(M,{response:v,status:v.status>=300&&v.status<400?`pending`:v.ok?`accepted`:`rejected`}),D=void 0),v.ok&&Ti(l,`payment.response`)&&await l.emit(`payment.response`,Mi({challenge:u,credential:j,init:t,input:e,method:i.method,response:v})),!P){if(v.status>=500&&Ti(l,`payment.failed`)){try{v=await xi(v)}catch(e){throw O=N(e),v=new Response(null,{headers:v.headers,status:v.status,statusText:v.statusText}),e}await l.emit(`payment.failed`,Ni({challenge:u,challenges:T,error:N(),init:t,input:e,method:i.method,response:v}))}return v.ok?hi(i.method,{challenge:u,credential:j,fetch:d,headers:_.headers,input:p,...r?{refetch:()=>f(Ki(_.input),t,!1)}:{},response:v,signal:qi(e,t)}):v}}T=void 0;try{T=await c.getChallenges(v,y)}catch{}return await Si(D,{challenges:T,response:v,status:`rejected`}),v}catch(n){throw await Si(D,{challenges:T,response:v,status:`rejected`}),await l.emit(`payment.failed`,Ni({challenge:w,challenges:T,error:O??n,init:t,input:e,method:E,response:v})),n}},p=(e,t)=>f(e,t,!0);return p[vi]=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 wi(){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 Ei(t,n);if(typeof e==`string`&&e.length>0){r=e;break}}return await Oi(e[`*`],t,n),r}case`credential.created`:await Di(e[`credential.created`],n),await Oi(e[`*`],t,n);return;case`payment.failed`:await Di(e[`payment.failed`],n),await Oi(e[`*`],t,n);return;case`payment.response`:await Di(e[`payment.response`],n),await Oi(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 bi.set(t,t=>e[t].size>0||e[`*`].size>0),t}function Ti(e,t){return bi.get(e)?.(t)??!0}async function Ei(e,t){try{return await e(t)}catch{return}}async function Di(e,t){for(let n of e)try{await n(t)}catch{}}async function Oi(e,t,n){await Di(e,Object.freeze({name:t,payload:n}))}function ki(e){let t;return n=>(t??=e(n),t)}function Ai(e){return Object.freeze({challenge:Ri(e.challenge),challenges:e.challenges.map(e=>Ri(e)),createCredential:e.createCredential,init:Pi(e.init),input:Fi(e.input),method:Ii(e.method),response:Li(e.response)})}function ji(e){return Object.freeze({challenge:Ri(e.challenge),credential:e.credential,init:Pi(e.init),input:Fi(e.input),method:Ii(e.method),...e.response===void 0?{}:{response:Li(e.response)}})}function Mi(e){return Object.freeze({challenge:Ri(e.challenge),credential:e.credential,init:Pi(e.init),input:Fi(e.input),method:Ii(e.method),response:Li(e.response)})}function Ni(e){return Object.freeze({...e.challenge?{challenge:Ri(e.challenge)}:{},...e.challenges?{challenges:e.challenges.map(e=>Ri(e))}:{},error:e.error,init:Pi(e.init),input:Fi(e.input),...e.method?{method:Ii(e.method)}:{},...e.response===void 0?{}:{response:Li(e.response)}})}function Pi(e){if(e)return Bi({...e,...e.headers?{headers:new Headers(e.headers)}:{}})}function Fi(e){if(e instanceof Request)try{return e.clone()}catch{return e}return e instanceof URL?new URL(e):e}function Ii(e){return Bi(Object.assign({},e))}function Li(e){return e instanceof Response?e.clone():Ri(e)}function Ri(e){try{return zi(structuredClone(e))}catch{return Bi(e)}}function zi(e){if(!e||typeof e!=`object`||Object.isFrozen(e))return e;Object.freeze(e);for(let t of Object.values(e))zi(t);return e}function Bi(e){return!e||typeof e!=`object`||Object.isFrozen(e)||Object.freeze(e),e}function Vi(e,t,n,r,i,a){let o=!!r&&!i&&Qi(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 Hi(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 Ui(e,t){return t===void 0?e:{...e,body:t}}function Wi(e,t){return t?new Headers(t):new Headers(e instanceof Request?e.headers:void 0)}function Gi(e){let t=e;for(;t[vi];)t=t[vi];return t}function Ki(e){if(!(e instanceof Request)||!e.body||e.bodyUsed)return e;try{return e.clone()}catch{return e}}function qi(e,t){if(t?.signal!==null)return t?.signal===void 0?e instanceof Request?e.signal:void 0:t.signal}function Ji(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 Yi(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&&pi(t,a,r),t.createCredential(a)}function Xi(e,t){let n=e.get(R.acceptPayment);if(!n)return t;try{return{...t,entries:wr(n),header:n}}catch{return t}}async function Zi(e,t){return t?t(e):e}function Qi(e,t){if(t===`always`)return!0;if(t===`never`)return!1;let n=ta(e);return t===`same-origin`?!ea()||n.origin===globalThis.location.origin:t.origins.some(e=>$i(n,e))}function $i(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 ea(){return globalThis.location!==void 0}function ta(e){return e instanceof URL?e:e instanceof Request?new URL(e.url):new URL(e,ea()?globalThis.location.href:void 0)}function na(e,t,n){if(!e.url)return t;let r=new URL(e.url),i=ta(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 ra(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 ue(r)}}function ia(e){return Object.fromEntries(Object.entries(e.headers??{}).filter(([e])=>e.toLowerCase()!==`content-type`))}const aa={[P.id]:P,[ee.id]:ee};function oa(e,t={}){return s(e.url,{fetchFn:e.fetch,fetchOptions:{headers:ia(e)},...t})}function sa(r){let{chain:i,getClient:a,remoteFeePayer:o,rpcUrl:c}=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=le(n({request:t=>e(t)},{retryCount:0}),oa(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,...e.chainId===void 0?{}:{id:e.chainId},...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(!c)throw Error("No `rpcUrl` provided.");let n=t||Number(Object.keys(c)[0]),r=c[n];if(!r)throw Error(`No \`rpcUrl\` configured for \`chainId\` (${n}).`);let a=o?le(s(r),oa(o)):s(r);return e({chain:aa[n]??{...i,id:n},transport:a})}}function ca(e,t){if(t!==void 0&&e.chain?.id!==void 0&&e.chain.id!==t)throw Error(`Chain ID mismatch: expected ${t}, got ${e.chain.id}.`)}function la(e,t){if(e!==void 0&&(t===void 0||!e.includes(t)))throw Error(`Chain ID not allowed: ${t??`unknown`}.`)}const ua=E.slice(T.keccak256(w.fromString(`mpp`),{as:`Hex`}),0,4);function da(e){let t=T.keccak256(w.fromString(e),{as:`Hex`});return E.toBytes(E.slice(t,0,10))}function fa(e){let{serverId:t,clientId:n,challengeId:r}=e,i=new Uint8Array(32);return i.set(E.toBytes(ua),0),i[4]=1,i.set(da(t),5),n&&i.set(da(n),15),i.set(pa(r),25),E.fromBytes(i)}function pa(e){let t=T.keccak256(w.fromString(e),{as:`Hex`});return E.toBytes(E.slice(t,0,7))}function ma(e,t){return me.resolve(e).toLowerCase()===me.resolve(t).toLowerCase()}const ha=[Bn.pathUsd,Bn.usdc];async function ga(e,t){let{account:n,amountOut:r,tokenOut:i,tokenIn:a,slippage:o}=t,s=a.filter(e=>!ma(e,i)),c=await Promise.allSettled([h(e,F.token.getBalance.call(e,{account:n,token:i})),...s.map(t=>h(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:oe.stablecoinDex,token:l}),F.dex.buy.call({tokenIn:l,tokenOut:i,amountOut:r,maxAmountIn:n})]}}catch{}}throw new va({currency:i})}}function _a(e,t){return e?e===!0?{tokenIn:t,slippage:1}:{tokenIn:e.tokenIn?[...e.tokenIn,...t.filter(t=>!e.tokenIn.some(e=>ma(e,t)))]:t,slippage:e.slippage??1}:!1}var va=class extends Error{name=`InsufficientFundsError`;constructor({currency:e}){super(`Insufficient funds: no balance in ${e} and no viable swap route from fallback currencies.`)}};function ya(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 ba(e,t,n){t&&(n&&!n.some(e=>ma(e,t))||e.some(e=>ma(e,t))||e.push(t))}async function xa(e,t,n){try{return(await F.token.getBalance(e,{account:t,token:n})).amount>0n}catch{return!1}}function Sa(e){let t=e.chain?.feeToken;if(t)return se.toAddress(t);let n=e.chain?.id;return n?Vn[n]:void 0}function Ca(e){let t=[];return ba(t,Bn.pathUsd),ba(t,Vn[e]),t}async function wa(e){let{account:t,allowedTokens:n,candidateTokens:r,client:i,prioritizeCandidates:a}=e,o=[];if(a)for(let e of r??[])ba(o,e,n);if(ba(o,await F.fee.getUserToken(i,{account:t}).then(e=>e?.address).catch(()=>void 0),n),ba(o,Sa(i),n),!a)for(let e of r??[])ba(o,e,n);for(let e of o)if(await xa(i,t,e))return e;return o[0]}const Ta=d([`function swapTo(address inputToken,uint256 amount,address targetToken,address recipient,bytes32 memo)`]);function Ea(e){if(e!==void 0)return Hn[e]}function Da(e){let t=Ea(e.chainId);return!!t&&c(e.currency,{strict:!1})&&l(e.currency,t.token)}function Oa(e){let t=Ea(e.chainId),n=e.transfers.length===1?e.transfers[0]:void 0;if(!t||!n?.memo)return;let i=BigInt(n.amount),a=n.memo;return{calls:[{data:r({abi:ie.tip20,functionName:`approve`,args:[t.swap,i]}),to:t.token},{data:r({abi:Ta,functionName:`swapTo`,args:[t.token,i,e.currency,n.recipient,a]}),to:t.swap}],settlementSender:t.swap,transfers:[{amount:i,memo:a,recipient:n.recipient}]}}async function ka(e,t){let n=Oa(t);if(n)try{return await h(e,F.token.getBalance.call(e,{account:t.account,token:n.calls[0].to}))<n.transfers[0].amount?void 0:(await p(e,{account:t.account,calls:n.calls}),n)}catch{return}}const Aa={Proof:[{name:`account`,type:`address`},{name:`challengeId`,type:`string`},{name:`realm`,type:`string`}]};function ja(e){return{name:`MPP`,version:`3`,chainId:e}}function Ma(e){let{account:t,challengeId:n,realm:r}=e;return{account:t,challengeId:n,realm:r}}function Na(e){let{account:t,chainId:n,challengeId:r,realm:i}=e;return{domain:ja(n),types:Aa,primaryType:`Proof`,message:Ma({account:t,challengeId:r,realm:i})}}function Pa(e){return`did:pkh:eip155:${e.chainId}:${e.address}`}const Fa=[`push`,`pull`],Ia=B.object({amount:V(),memo:B.optional(U()),recipient:B.pipe(B.string(),B.transform(e=>e))}),La=(1n<<64n)-1n,Ra={dev_second:1n,day:86400n,week:604800n},za=B.pipe(H(),B.transform(e=>e.toLowerCase())),Ba=B.object({accessKeyAddress:za,keyType:B.enum([`p256`,`secp256k1`,`webAuthn`])}),Va=B.object({accessKey:B.optional(Ba),chainId:B.optional(B.number())}),Ha=$e(`subscriptionExpires must be a valid date`).check(B.refine(e=>e.getTime()%1e3==0,`subscriptionExpires must be representable as whole seconds`)),Ua=B.enum([`dev_second`,`day`,`week`]),Wa=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)<=La}catch{return!1}},`periodCount exceeds uint64`));function Ga(e){return B.refine(e=>{let{amount:t,decimals:n}=e;return f(t,n)>0n},e)}function Ka(e){let{periodCount:t,periodUnit:n}=e;try{let e=Ra[n];return e!==void 0&&BigInt(t)*e<=La}catch{return!1}}const qa=Mt({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({machineTokenEnabled:B.optional(B.boolean()),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(B.never()),recipient:B.optional(B.string()),splits:B.optional(B.array(Ia).check(B.minLength(1),B.maxLength(10))),supportedModes:B.optional(B.array(B.enum(Fa)).check(B.minLength(1)))}).check(B.refine(({amount:e,decimals:t,splits:n})=>{if(!n)return!0;let r=f(e,t),i=n.reduce((e,n)=>e+f(n.amount,t),0n);return n.every(e=>f(e.amount,t)>0n)&&i<r},`Invalid splits`)),B.transform(({machineTokenEnabled:e,amount:t,chainId:n,decimals:r,feePayer:i,memo:a,splits:o,supportedModes:s,...c})=>({...c,amount:f(t,r).toString(),...e!==void 0||n!==void 0||i!==void 0||o!==void 0||s!==void 0?{methodDetails:{...e!==void 0&&{machineTokenEnabled:e},...n!==void 0&&{chainId:n},...i!==void 0&&{feePayer:i},...o!==void 0&&{splits:o.map(e=>({...e,amount:f(e.amount,r).toString()}))},...s!==void 0&&{supportedModes:s}}}:{}})))}}),Ja=Mt({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(),closeSignature:W(),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([Je.v2,Je.v1])),sessionSnapshot:B.optional(B.custom()),suggestedDeposit:B.optional(V()),unitType:B.string()}).check(B.refine(({amount:e,decimals:t})=>f(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:d,...p})=>({...p,amount:f(e,r).toString(),...d?{suggestedDeposit:f(d,r).toString()}:{},methodDetails:{escrowContract:i,...n!==void 0&&{channelId:n},...s!==void 0&&{minVoucherDelta:f(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&&{[qe.sessionProtocol]:l},...u!==void 0&&{[qe.sessionSnapshot]:u}}})))}}),Ya=Mt({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(Ba),chainId:B.optional(B.number()),currency:za,decimals:B.number(),description:B.optional(B.string()),externalId:B.optional(B.string()),methodDetails:B.optional(Va),periodCount:Wa,periodUnit:Ua,recipient:za,subscriptionExpires:Ha}).check(Ga(`Subscription amount must be greater than 0`),B.refine(Ka,`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:f(t,r).toString(),subscriptionExpires:a.toISOString(),...Object.keys(s).length>0?{methodDetails:s}:{}}}))}}),Xa=B.object({account:B.optional(B.custom()),autoSwap:B.optional(B.custom()),mode:B.optional(B.enum(Fa))});function Za(e={}){let{clientId:t}=e;if((e.maxAmount!==void 0||e.maxAtomicAmount!==void 0)&&e.currencies===void 0)throw Error(`Tempo charge maxAmount and maxAtomicAmount require currencies.`);let n={maxAmount:$a(e.maxAmount,e.decimals),maxAtomicAmount:e.maxAtomicAmount===void 0?void 0:BigInt(e.maxAtomicAmount)},r=sa({chain:P,getClient:e.getClient,rpcUrl:Un}),i=ra({account:e.account}),a=Nt(qa,{canHandleChallenge({challenge:t}){try{return eo(e,n,t.request),!0}catch{return!1}},context:Xa,async createCredential({challenge:a,context:o}){eo(e,n,a.request);let s=a.request.methodDetails?.chainId??e.expectedChainId??(e.allowedChainIds?.length===1?e.allowedChainIds[0]:void 0),c=await r({chainId:s});ca(c,s);let l=s??c.chain?.id;if(la(e.allowedChainIds,l),l===void 0)throw Error("No `chainId` provided. Pass a chain ID in the challenge or client.");let{request:u}=a,{amount:d,methodDetails:f}=u,p=f?.supportedModes??[`pull`,`push`],h=i(c,o),b=async t=>await e.resolveAccount?.({account:h,chainId:l,operation:t})??h;if(BigInt(d)===0n){let e=await b({kind:`signPaymentProof`});return K({challenge:a,payload:{signature:await y(c,{account:e,...Na({account:e.address,chainId:l,challengeId:a.id,realm:a.realm})}),type:`proof`},source:Pa({address:e.address,chainId:l})})}let x=u.currency,S=Da({chainId:l,currency:x}),C=fa({challengeId:a.id,clientId:t,serverId:a.realm}),w=ya({amount:d,methodDetails:{...f,memo:C},recipient:u.recipient}),T=w.map(e=>F.token.transfer.call(c,{amount:BigInt(e.amount),...e.memo&&{memo:e.memo},to:e.recipient,token:x})),E=_a(o?.autoSwap??e.autoSwap,ha),D=f?.machineTokenEnabled===!0?Oa({chainId:l,currency:x,transfers:w}):void 0,O=h,k;if(D){let e=await(async()=>{try{return await b({calls:D.calls,kind:`executeCalls`})}catch{return}})();e&&(k=await ka(c,{account:e.address,chainId:l,currency:x,transfers:w}),k&&(O=e))}let A;k||(O=await b({kind:`executeCalls`,...E?{}:{calls:T}}),A=E?await ga(c,{account:O.address,amountOut:BigInt(d),tokenOut:x,tokenIn:E.tokenIn,slippage:E.slippage}):void 0);let j=k?.calls??[...A??[],...T],M=Ca(l),N=k||S?await wa({account:O.address,allowedTokens:M,candidateTokens:M,client:c,prioritizeCandidates:!0}):void 0,P=(()=>{let t=o?.mode??e.mode;if(t){if(!p.includes(t))throw Error(`Challenge does not support ${t} mode.`);return t}let n=O.type===`json-rpc`?`push`:`pull`;return p.includes(n)?n:p[0]})(),ee=(()=>{let e=Math.floor(Date.now()/1e3)+25;if(!a.expires)return e;let t=Math.floor(new Date(a.expires).getTime()/1e3)+1;return Math.min(e,t)})();if(P===`push`){let{receipts:e}=O.type===`local`?{receipts:[await _(c,{account:O,calls:j,...N?{feeToken:N}:{},nonceKey:`expiring`,validBefore:ee})]}:await g(c,{account:O,...N?{capabilities:{feeToken:N}}:{},calls:j,experimental_fallback:j.length===1,forceAtomic:j.length>1}),t=e?.[0]?.transactionHash;if(!t)throw Error(`No transaction receipt returned.`);return K({challenge:a,payload:{hash:t,type:`hash`},source:Pa({address:O.address,chainId:l})})}let te=await m(c,{account:O,calls:j,...N?{feeToken:N}:{},nonceKey:`expiring`,validBefore:ee});if(te.gas=(te.gas??0n)+5000n,f?.feePayer){let e=te;delete e.feePayerSignature,delete e.feeToken,e.feePayer=!0}return K({challenge:a,payload:{signature:await v(c,te),type:`transaction`},source:Pa({address:O.address,chainId:l})})}}),o=new Map,s=async t=>{eo(e,n,t.challenge.request);let r=t.context?.account??e.account,i=`${(typeof r==`string`?r:r?.address)?.toLowerCase()??``}:${t.challenge.id}`,s=o.get(i);return s||(s=a.createCredential(t).finally(()=>o.delete(i)),o.set(i,s)),s};return gi({...a,createCredential:s},Qa)}function Qa(e){let t=qa.schema.credential.payload.safeParse(Ct(e).payload);if(!t.success)return;let n=t.data;if(n.type===`hash`)return n.hash;let r=n.signature;if(n.type!==`transaction`||!r.startsWith(he.serializedType))return;let i=he.deserialize(r);if(!(!i.signature||i.feePayerSignature===null)&&he.serialize(i)===r)return u(r)}function $a(e,t){if(e!==void 0){if(t===void 0)throw Error(`Tempo charge maxAmount requires currency decimals.`);if((e.split(`.`)[1]?.replace(/0+$/,``)??``).length>t)throw Error(`Tempo charge maxAmount ${e} has more fractional digits than ${t} decimals allow.`);return f(e,t)}}function eo(e,t,n){let{amount:r,methodDetails:i,recipient:a}=n,o=i?.chainId;if(e.expectedChainId!==void 0&&o!==void 0&&o!==e.expectedChainId)throw Error(`Chain ID mismatch: expected ${e.expectedChainId}, got ${o}.`);if((o!==void 0||e.allowedChainIds?.length===0)&&la(e.allowedChainIds,o),e.currencies&&!e.currencies.some(e=>e.toLowerCase()===n.currency.toLowerCase()))throw Error(`Tempo charge currency is not allowed: ${n.currency}.`);if(e.expectedRecipients){let t=new Set(e.expectedRecipients.map(e=>e.toLowerCase()));if(!a||!t.has(a.toLowerCase()))throw Error(`Unexpected primary recipient: ${a}`);let n=i?.splits;if(n){for(let e of n)if(!t.has(e.recipient.toLowerCase()))throw Error(`Unexpected split recipient: ${e.recipient}`)}}if(t.maxAtomicAmount!==void 0&&BigInt(r)>t.maxAtomicAmount)throw Error(`Tempo charge amount exceeds maxAtomicAmount.`);if(t.maxAmount!==void 0&&BigInt(r)>t.maxAmount)throw Error(`Tempo charge amount exceeds maxAmount.`)}const to=(1n<<96n)-1n;function no(e){return e>=0n&&e<=to}function ro(e){if(!/^\d{1,29}$/.test(e))return;let t=BigInt(e);return no(t)?t:void 0}function io(e){return ao(e),e}function ao(e){if(!no(e))throw Error(`Value ${e} is outside uint96 bounds.`)}const oo=new Set([`open`,`topUp`,`voucher`,`close`]);function so(e){return typeof e==`object`&&!!e}function co(e){return typeof e==`string`&&oo.has(e)}function lo(e){if(typeof e!=`object`||!e)return!1;let t=e;return!(typeof t.channelId!=`string`||t.action!==void 0&&!co(t.action))}function uo(e,t=`No session credential context available.`){if(!lo(e))throw Error(t);return e}function fo(e){let t=e.request.amount;if(typeof t!=`string`)throw Error(`Session challenge is missing amount.`);return BigInt(t)}function po(e){return so(e)?typeof e.channelId==`string`&&typeof e.requiredCumulative==`string`&&typeof e.acceptedCumulative==`string`&&typeof e.deposit==`string`:!1}function mo(e){return so(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 ho(e){let t=C.toString(e),n=JSON.parse(t);if(!mo(n))throw Error(`Invalid session receipt.`);return n}function go(e){return e.headers.get(`content-type`)?.toLowerCase().startsWith(`text/event-stream`)??!1}function _o(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
- `);switch(t){case`message`:return{type:`message`,data:r};case`payment-need-voucher`:{let e=ao(r);return eo(e)?{type:`payment-need-voucher`,data:e}:null}case`payment-receipt`:{let e=ao(r);return to(e)?{type:`payment-receipt`,data:e}:null}default:return{type:`message`,data:r}}}function ao(e){try{return JSON.parse(e)}catch{return null}}function oo(e){return JSON.stringify({mpp:`authorization`,authorization:e})}function so(){return JSON.stringify({mpp:`payment-close-request`})}function co(e){let t=lo(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`&&to(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`&&eo(t.data)?{mpp:`payment-need-voucher`,data:t.data}:t.mpp===`payment-receipt`&&to(t.data)?{mpp:`payment-receipt`,data:t.data}:null:null}function lo(e){try{let t=JSON.parse(e);return typeof t!=`object`||!t?null:t}catch{return null}}const uo=`0x4d50500000000000000000000000000000000000`;function fo(e){return BigInt(e.authorizedSigner)===0n?e.payer:e.authorizedSigner}function po(e){let t=x.encode(x.from([`address payer`,`address payee`,`address operator`,`address token`,`bytes32 salt`,`address authorizedSigner`,`bytes32 expiringNonceHash`,`address escrow`,`uint256 chainId`]),[e.payer,e.payee,e.operator,e.token,e.salt,e.authorizedSigner,e.expiringNonceHash,e.escrow??`0x4d50500000000000000000000000000000000000`,BigInt(e.chainId)]);return w.keccak256(t)}function mo(e){return he.encodeForSigning(e)}function ho(e){let{feePayer:t,transaction:n}=e;return t?{...n,feePayerSignature:null}:n}function go(e,t){return w.keccak256(T.concat(mo(e),t.sender))}const _o=[{name:`payer`,type:`address`},{name:`payee`,type:`address`},{name:`operator`,type:`address`},{name:`token`,type:`address`},{name:`salt`,type:`bytes32`},{name:`authorizedSigner`,type:`address`},{name:`expiringNonceHash`,type:`bytes32`}],vo=[{name:`settled`,type:`uint96`},{name:`deposit`,type:`uint96`},{name:`closeRequestedAt`,type:`uint32`}],yo={name:`descriptor`,type:`tuple`,components:_o},bo=[{type:`function`,name:`CLOSE_GRACE_PERIOD`,stateMutability:`view`,inputs:[],outputs:[{type:`uint64`}]},{type:`function`,name:`VOUCHER_TYPEHASH`,stateMutability:`view`,inputs:[],outputs:[{type:`bytes32`}]},{type:`function`,name:`open`,stateMutability:`nonpayable`,inputs:[{name:`payee`,type:`address`},{name:`operator`,type:`address`},{name:`token`,type:`address`},{name:`deposit`,type:`uint96`},{name:`salt`,type:`bytes32`},{name:`authorizedSigner`,type:`address`}],outputs:[{name:`channelId`,type:`bytes32`}]},{type:`function`,name:`settle`,stateMutability:`nonpayable`,inputs:[yo,{name:`cumulativeAmount`,type:`uint96`},{name:`signature`,type:`bytes`}],outputs:[]},{type:`function`,name:`topUp`,stateMutability:`nonpayable`,inputs:[yo,{name:`additionalDeposit`,type:`uint96`}],outputs:[]},{type:`function`,name:`close`,stateMutability:`nonpayable`,inputs:[yo,{name:`cumulativeAmount`,type:`uint96`},{name:`captureAmount`,type:`uint96`},{name:`signature`,type:`bytes`}],outputs:[]},{type:`function`,name:`requestClose`,stateMutability:`nonpayable`,inputs:[yo],outputs:[]},{type:`function`,name:`withdraw`,stateMutability:`nonpayable`,inputs:[yo],outputs:[]},{type:`function`,name:`getChannel`,stateMutability:`view`,inputs:[yo],outputs:[{type:`tuple`,components:[{name:`descriptor`,type:`tuple`,components:_o},{name:`state`,type:`tuple`,components:vo}]}]},{type:`function`,name:`getChannelState`,stateMutability:`view`,inputs:[{name:`channelId`,type:`bytes32`}],outputs:[{type:`tuple`,components:vo}]},{type:`function`,name:`getChannelStatesBatch`,stateMutability:`view`,inputs:[{name:`channelIds`,type:`bytes32[]`}],outputs:[{type:`tuple[]`,components:vo}]},{type:`function`,name:`computeChannelId`,stateMutability:`view`,inputs:[{name:`payer`,type:`address`},{name:`payee`,type:`address`},{name:`operator`,type:`address`},{name:`token`,type:`address`},{name:`salt`,type:`bytes32`},{name:`authorizedSigner`,type:`address`},{name:`expiringNonceHash`,type:`bytes32`}],outputs:[{type:`bytes32`}]},{type:`function`,name:`getVoucherDigest`,stateMutability:`view`,inputs:[{name:`channelId`,type:`bytes32`},{name:`cumulativeAmount`,type:`uint96`}],outputs:[{type:`bytes32`}]},{type:`function`,name:`domainSeparator`,stateMutability:`view`,inputs:[],outputs:[{type:`bytes32`}]},{type:`event`,name:`ChannelOpened`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0},{name:`payer`,type:`address`,indexed:!0},{name:`payee`,type:`address`,indexed:!0},{name:`operator`,type:`address`},{name:`token`,type:`address`},{name:`authorizedSigner`,type:`address`},{name:`salt`,type:`bytes32`},{name:`expiringNonceHash`,type:`bytes32`},{name:`deposit`,type:`uint96`}]},{type:`event`,name:`Settled`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0},{name:`payer`,type:`address`,indexed:!0},{name:`payee`,type:`address`,indexed:!0},{name:`cumulativeAmount`,type:`uint96`},{name:`deltaPaid`,type:`uint96`},{name:`newSettled`,type:`uint96`}]},{type:`event`,name:`TopUp`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0},{name:`payer`,type:`address`,indexed:!0},{name:`payee`,type:`address`,indexed:!0},{name:`additionalDeposit`,type:`uint96`},{name:`newDeposit`,type:`uint96`}]},{type:`event`,name:`CloseRequested`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0},{name:`payer`,type:`address`,indexed:!0},{name:`payee`,type:`address`,indexed:!0},{name:`closeGraceEnd`,type:`uint256`}]},{type:`event`,name:`ChannelClosed`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0},{name:`payer`,type:`address`,indexed:!0},{name:`payee`,type:`address`,indexed:!0},{name:`settledToPayee`,type:`uint96`},{name:`refundedToPayer`,type:`uint96`}]},{type:`event`,name:`CloseRequestCancelled`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0},{name:`payer`,type:`address`,indexed:!0},{name:`payee`,type:`address`,indexed:!0}]}];function xo(e,t){return{name:`TIP20 Channel Reserve`,version:`1`,chainId:t,verifyingContract:e}}const So={Voucher:[{name:`channelId`,type:`bytes32`},{name:`cumulativeAmount`,type:`uint96`}]},Co={CloseAuthorization:[{name:`channelId`,type:`bytes32`},{name:`cumulativeAmount`,type:`uint96`}]};function wo(e,t){return pe.getVoucherSignPayload({chainId:e,channelId:t.channelId,cumulativeAmount:t.cumulativeAmount})}function To(e,t,n){return e.toLowerCase()===pe.address.toLowerCase()?wo(t,n):o({domain:xo(e,t),types:So,primaryType:`Voucher`,message:{channelId:n.channelId,cumulativeAmount:n.cumulativeAmount}})}function Eo(e){return e===`secp256k1`||e===`p256`||e===`webAuthn`}function Do(e,t){return ae.signVoucher(e,{chainId:t.chainId,channel:t.channelId,cumulativeAmount:t.cumulativeAmount})}async function Oo(e,t,n,r,i){let a=await(async()=>{if(r.toLowerCase()===pe.address.toLowerCase())try{return await Do(t,{chainId:i,channelId:n.channelId,cumulativeAmount:n.cumulativeAmount})}catch{}return v(e,{account:t,domain:xo(r,i),types:So,primaryType:`Voucher`,message:n})})(),o=I.from(a);if(!Eo(o.type))throw Error(`TIP-1034 vouchers require a TIP-1020 primitive signature; received "${o.type}".`);return I.serialize(o)}async function ko(e,t,n,r,i){let a=await v(e,{account:t,domain:xo(r,i),types:Co,primaryType:`CloseAuthorization`,message:n}),o=I.from(a);if(!Eo(o.type))throw Error(`TIP-1034 close authorizations require a TIP-1020 primitive signature; received "${o.type}".`);return I.serialize(o)}function Ao(e,t,n,r){try{let i=I.from(n.signature);if(!Eo(i.type)||I.serialize(i).toLowerCase()!==n.signature.toLowerCase())return!1;let a=To(e,t,n),o=I.extractAddress({payload:a,signature:i});return I.verify(i,{address:o,payload:a})&&aa(o,r)}catch{return!1}}function jo(e){return typeof e==`object`&&!!e}function Mo(e){return typeof e==`string`&&c(e,{strict:!1})?e:void 0}function No(e){return Mo(e.accessKeyAddress)}function Po(){let e=BigInt(Math.floor(Date.now()/1e3))-60n;return e<=0n?0:Number(BigInt(T.random(8))%e)}function Fo(e){return No(e)??e.address}async function Io(e,t){let{account:n,calls:r,feePayer:i,feeToken:a,validAfter:o}=t;return p(e,{account:n,calls:r,nonceKey:`expiring`,...i?{feePayer:!0}:{},feeToken:a,...o===void 0?{}:{validAfter:o}})}async function Lo(e,t){return await _(e,t)}function Ro(e,t,n=!1){let r=e.request.methodDetails,i=jo(r)?Mo(r.escrowContract)??Mo(r.escrow):void 0,a=t??`0x4d50500000000000000000000000000000000000`;if(i&&!Bo(i,a)&&(!n||t!==void 0))throw Error(`Tempo session escrow ${i} does not match client escrow ${a}.`);return i&&!Bo(i,a)?i:a}function zo(e,t,n,r){return Et({challenge:e,payload:t,source:`did:pkh:eip155:${n}:${r.address}`})}function Bo(e,t){return e.toLowerCase()===t.toLowerCase()}async function Vo(e,t,n,r,i,a=uo){let o=po({...n,chainId:i,escrow:a}),s=Ka(r),c=await Oo(e,t,{channelId:o,cumulativeAmount:s},a,i);return{action:`voucher`,channelId:o,descriptor:n,cumulativeAmount:s.toString(),signature:c}}async function Ho(e,t,n,r,i,a=uo){let o=await Vo(e,t,n,r,i,a),s=await ko(e,t,{channelId:o.channelId,cumulativeAmount:Ka(BigInt(o.cumulativeAmount))},a,i);return{action:`close`,channelId:o.channelId,descriptor:n,cumulativeAmount:o.cumulativeAmount,signature:o.signature,closeSignature:s}}async function Uo(e,t,n){let i=Fo(t),a=n.escrow??`0x4d50500000000000000000000000000000000000`,o=n.operator??`0x0000000000000000000000000000000000000000`,s=T.random(32),c=Ka(n.deposit),l=Ka(n.initialAmount),u=r({abi:bo,functionName:`open`,args:[n.payee,o,n.token,c,s,i]}),d=await Lo(e,await Io(e,{account:t,calls:[...n.prefixCalls??[],{to:a,data:u}],feePayer:n.feePayer,feeToken:n.feeToken??n.token})),f=ce.deserialize(d),p={authorizedSigner:i,expiringNonceHash:go(ho({...n.feePayer?{feePayer:!0}:{},transaction:f}),{sender:t.address}),operator:o,payee:n.payee,payer:t.address,salt:s,token:n.token},m=po({...p,chainId:n.chainId,escrow:a});return{action:`open`,type:`transaction`,channelId:m,transaction:d,signature:await Oo(e,t,{channelId:m,cumulativeAmount:l},a,n.chainId),descriptor:p,cumulativeAmount:l.toString(),authorizedSigner:p.authorizedSigner}}async function Wo(e,t,n,i,a,o,s=uo,c=[],l=n.token){let u=po({...n,chainId:a,escrow:s}),d=Ka(i);return{action:`topUp`,type:`transaction`,channelId:u,transaction:await Lo(e,await Io(e,{account:t,calls:[...c,{to:s,data:r({abi:bo,functionName:`topUp`,args:[n,d]})}],feePayer:o,feeToken:l,validAfter:Po()})),descriptor:n,additionalDeposit:d.toString()}}function Go(e){let{payee:t,token:n,escrow:r,chainId:i}=e;return`${t.toLowerCase()}:${n.toLowerCase()}:${r.toLowerCase()}:${i}`}function Ko(e){return Go({payee:e.descriptor.payee,token:e.descriptor.token,escrow:e.escrow,chainId:e.chainId})}function qo(){let e=new Map;return{get:t=>e.get(t),set(t){e.set(Ko(t),t)},delete(t){e.delete(t)}}}const Jo=2n**96n-1n;function Yo(e){if(e<0n||e>Jo)throw new K({reason:`amount exceeds uint96 range`})}async function Xo(e,t,n=uo,r){return Zo(await m(e,{address:n,abi:bo,functionName:`getChannelState`,args:[t],...r===void 0?{}:{blockNumber:r}}))}function Zo(e){return Yo(e.settled),Yo(e.deposit),{settled:e.settled,deposit:e.deposit,closeRequestedAt:e.closeRequestedAt}}const Qo=B.custom(e=>typeof e==`string`&&c(e,{strict:!1})),$o=B.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]{64}$/.test(e)),es=B.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]+$/.test(e)),ts=B.object({authorizedSigner:Qo,expiringNonceHash:$o,operator:Qo,payee:Qo,payer:Qo,salt:$o,token:Qo}),ns=Nt(B.object({acceptedCumulative:B.string(),chainId:B.number(),channelId:$o,closeRequestedAt:B.optional(B.string()),deposit:B.string(),descriptor:ts,escrow:Qo,highestVoucher:B.optional(B.object({channelId:$o,cumulativeAmount:B.string(),signature:es})),requiredCumulative:B.string(),settled:B.string(),spent:B.string(),units:B.optional(B.number())}));function rs(e){return ns.encode(e)}function is(e){return ns.decode(e)}const as={status:`idle`};function os(e){return{status:`active`,...e}}function ss(e,t){switch(t.type){case`challengeReceived`:return e.status===`closing`||e.status===`closed`?$(e,t):{state:{status:`challenged`,challengeId:t.challengeId},effects:[]};case`challenge`:return e.status!==`idle`&&e.status!==`active`?$(e,t):t.snapshot?{state:{status:`hydrating`,challengeId:t.challengeId,snapshot:t.snapshot},effects:[{type:`hydrate`,snapshot:t.snapshot}]}:{state:{status:`opening`,challengeId:t.challengeId},effects:[{type:`open`}]};case`hydrated`:return e.status===`hydrating`?{state:us(e.challengeId,t.snapshot),effects:[]}:$(e,t);case`activated`:return e.status===`closing`||e.status===`closed`?$(e,t):{state:Cs({challengeId:t.challengeId,entry:t.entry,spent:t.spent,units:t.units??0}),effects:[]};case`opened`:return e.status===`opening`?{state:ds(e.challengeId,t.receipt,t.descriptor,t.deposit),effects:[]}:$(e,t);case`receiptAccepted`:return e.status===`closing`||e.status===`closed`?$(e,t):{state:Es(t.receipt,t.entry),effects:[]};case`needVoucher`:return e.status===`active`?ls({challengeId:e.challengeId,descriptor:t.descriptor,event:t.event}):$(e,t);case`topUpStarted`:return e.status===`voucherNeeded`?{state:{status:`toppingUp`,challengeId:e.challengeId,channelId:e.channelId,descriptor:e.descriptor,deposit:e.deposit},effects:[]}:$(e,t);case`voucherAccepted`:return e.status!==`voucherNeeded`&&e.status!==`toppingUp`?$(e,t):{state:ds(e.challengeId,t.receipt,e.descriptor,t.deposit??e.deposit),effects:[]};case`settleStarted`:return e.status===`active`?{state:{status:`settling`,channelId:e.channelId,descriptor:e.descriptor,deposit:e.deposit},effects:[{type:`settle`,channelId:e.channelId}]}:$(e,t);case`settled`:return e.status===`settling`?{state:ds(t.receipt.challengeId,t.receipt,e.descriptor,t.deposit??e.deposit),effects:[]}:$(e,t);case`closeRequested`:return e.status===`active`?{state:{status:`closeRequested`,channelId:e.channelId,descriptor:e.descriptor},effects:[{type:`requestClose`,channelId:e.channelId}]}:$(e,t);case`withdrawable`:return e.status===`closeRequested`?{state:{status:`withdrawable`,channelId:e.channelId,descriptor:e.descriptor},effects:[{type:`withdraw`,channelId:e.channelId}]}:$(e,t);case`closeStarted`:return e.status!==`active`&&e.status!==`withdrawable`&&e.status!==`closeRequested`?$(e,t):{state:{status:`closing`,channelId:e.channelId,descriptor:e.descriptor},effects:[{type:`close`,channelId:e.channelId}]};case`closed`:return e.status!==`closing`&&e.status!==`withdrawable`?$(e,t):{state:{status:`closed`,channelId:e.channelId,descriptor:e.descriptor},effects:[]}}}function cs(e,t){let n=ss(e.state,t);return e.state=n.state,n}function ls(e){let{challengeId:t,descriptor:n,event:r}=e,i=BigInt(r.requiredCumulative),a=BigInt(r.deposit);return i>a?{state:{status:`toppingUp`,challengeId:t,channelId:r.channelId,descriptor:n,deposit:r.deposit},effects:[{type:`topUp`,channelId:r.channelId,amount:(i-a).toString()}]}:{state:{status:`voucherNeeded`,challengeId:t,channelId:r.channelId,descriptor:n,requiredCumulative:r.requiredCumulative,deposit:r.deposit},effects:[{type:`voucher`}]}}function us(e,t){return os({challengeId:e,channelId:t.channelId,descriptor:t.descriptor,acceptedCumulative:t.acceptedCumulative,deposit:t.deposit,spent:t.spent,units:t.units??0})}function ds(e,t,n,r){return os({challengeId:e,channelId:t.channelId,descriptor:n,acceptedCumulative:t.acceptedCumulative,deposit:r,spent:t.spent,units:t.units??0})}function $(e,t){throw Error(`Invalid session transition: ${e.status} + ${t.type}`)}function fs(e){let{cumulativeAmount:t,maxVoucherCumulative:n}=e;if(n!==null&&!(t<=n))throw Error(`requested voucher amount ${t} exceeds local maxDeposit ${n}`)}function ps(e){let{channel:t,maxVoucherCumulative:n,receipt:r}=e;if(!t||r.channelId!==t.channelId)return;let i=BigInt(r.acceptedCumulative),a=BigInt(r.spent);if(a>i)throw Error(`receipt spent exceeds accepted cumulative voucher amount`);if(i>t.cumulativeAmount)throw Error(`receipt accepted cumulative exceeds local voucher state`);if(a>t.cumulativeAmount)throw Error(`receipt spent exceeds local voucher state`);fs({cumulativeAmount:i,maxVoucherCumulative:n}),fs({cumulativeAmount:a,maxVoucherCumulative:n})}function ms(e){let{channel:t,maxVoucherCumulative:n,receipt:r,spent:i}=e;if(!r||r.channelId!==t?.channelId)return i;ps({channel:t,maxVoucherCumulative:n,receipt:r});let a=BigInt(r.spent);return i>a?i:a}function hs(e,t){return typeof e==`bigint`?e:d(e,t)}function gs(e){let{contextDepositRaw:t,maxDeposit:n,requestAmount:r,suggestedDepositRaw:i}=e;if(vs(r,n),t!==void 0){let e=BigInt(t);if(e<r)throw Error(`opening deposit ${e} below request amount ${r}`);return e}let a=i===void 0?void 0:BigInt(i),o=a!==void 0&&a>r?a:r;return n===void 0||o<n?o:n}function _s(e){let{deposit:t,maxDeposit:n,requiredCumulative:r,suggestedDeposit:i,topUpAmount:a}=e;if(r<=t)return 0n;fs({cumulativeAmount:r,maxVoucherCumulative:n??null});let o=r-t,s=a??i??o,c=s>o?s:o;if(n==null)return c;let l=n-t;return c<l?c:l}function vs(e,t){fs({cumulativeAmount:e,maxVoucherCumulative:t??null})}function ys(e){let{channel:t,currentSocket:n,lastChallenge:r}=e;if(!t?.opened)return;let i=n?.challenge??r,a=n?.channelId??t.channelId;if(!i)throw Error(`Cannot close session: no challenge available. This usually means close() was called on a SessionManager instance that was recreated after the session was opened. Use the same SessionManager instance that opened the session, or make a request first to receive a fresh 402 challenge.`);if(!a)throw Error(`Cannot close session: no channel ID available. The session may not have been fully opened.`);return{challenge:i,channel:t,channelId:a}}function bs(e){let{cumulativeAmount:t,spent:n}=e;return t>n?t:n}function xs(e){let{cumulativeAmount:t,readySpent:n,spent:r}=e;if(!Wa(n))throw Error(`close-ready spent is not a uint96 amount`);if(n<r)throw Error(`close-ready spent is below locally confirmed spend`);if(n>bs({cumulativeAmount:t,spent:r}))throw Error(`close-ready spent exceeds local voucher state`)}function Ss(e){let{challengeId:t,channelId:n,expectedCloseAmount:r,minimumSpent:i=0n,receipt:a}=e,o=Ga(r),s=Ga(a.spent);return o===void 0||s===void 0||!Wa(i)?!1:!!a.txHash&&a.challengeId===t&&a.channelId===n&&a.acceptedCumulative===r&&s>=i&&s<=o}function Cs(e){return os({challengeId:e.challengeId,channelId:e.entry.channelId,descriptor:e.entry.descriptor,acceptedCumulative:e.entry.cumulativeAmount.toString(),deposit:e.entry.deposit.toString(),spent:e.spent,units:e.units})}function ws(){return{channel:null,lastChallenge:null,lastUrl:null,spent:0n,socketSession:null,state:as}}function Ts(e){let{maxVoucherCumulative:t,receipt:n,runtime:r}=e;r.spent=ms({channel:r.channel,maxVoucherCumulative:t,receipt:n,spent:r.spent}),n&&r.channel?.channelId===n.channelId&&cs(r,{type:`receiptAccepted`,receipt:n,entry:r.channel})}function Es(e,t){return os({challengeId:e.challengeId,channelId:e.channelId,descriptor:t.descriptor,acceptedCumulative:e.acceptedCumulative,deposit:t.deposit.toString(),spent:e.spent,units:e.units??0})}function Ds(e){let{challengeId:t,channelId:n,closeReadyReceipt:r,cumulativeAmount:i,deliveredChunks:a=0n,socketChallengeId:o,socketChannelId:s,spent:c,tickCost:l=0n}=e;if(c>i)throw Error(`locally confirmed spend exceeds local voucher state`);if(r&&r.challengeId===t&&r.channelId===n){let e=Ga(r.spent);if(e===void 0)throw Error(`close-ready spent is not a uint96 amount`);return e>c?e:c}if(o===t&&s===n&&l>0n){let e=a*l,t=c>e?c:e;return t>i?i:t}return i}function Os(e){let{channel:t,channelId:n,challengeId:r,cumulativeAmount:i,spent:a,state:o}=e;if(!(!t||t.channelId!==n)&&(t.cumulativeAmount=i,r))return ss(o,{type:`activated`,challengeId:r,entry:t,spent:a.toString(),units:o.status===`active`?o.units:0}).state}function ks(e){return{channel:e.channel===null?null:{entry:e.channel,cumulativeAmount:e.channel.cumulativeAmount,deposit:e.channel.deposit,opened:e.channel.opened},spent:e.spent,state:e.state}}function As(e,t){return e.channel?(e.channel.entry.cumulativeAmount=e.channel.cumulativeAmount,e.channel.entry.deposit=e.channel.deposit,e.channel.entry.opened=e.channel.opened,{channel:e.channel.entry,spent:e.spent,state:e.state}):(t&&(t.opened=!1),{channel:null,spent:e.spent,state:e.state})}async function js(e){let{activeSocket:t,currentSocket:n,target:r}=e,i=n.closeReadyReceipt??await(async()=>(t.send(so()),e.waitForCloseReady()))(),a=BigInt(i.spent);xs({cumulativeAmount:r.channel.cumulativeAmount,readySpent:a,spent:e.spent});let o=await e.createSessionCredential(r.challenge,{action:`close`,channelId:r.channelId,descriptor:r.channel.descriptor,cumulativeAmountRaw:a.toString()}),s=a.toString();n.expectedCloseAmount=s;try{let i=e.waitForReceipt(e=>Ss({challengeId:r.challenge.id,channelId:r.channelId,expectedCloseAmount:s,minimumSpent:a,receipt:e}));t.send(oo(o));let c=await i;return t.close(),n.closeReadyReceipt=null,c}finally{n.expectedCloseAmount=null}}function Ms(e){return`cumulativeAmount`in e}function Ns(e){if(Ms(e))return BigInt(e.cumulativeAmount)}async function Ps(e,t){t.opened?await e.store.set(t):await e.store.delete(Ko(t)),e.notifyUpdate(t)}async function Fs(e,t,n){let r=Ns(n);if(r===void 0)return;let i=await e.store.get(t);i&&i.channelId.toLowerCase()===n.channelId.toLowerCase()&&(i.cumulativeAmount=i.cumulativeAmount>r?i.cumulativeAmount:r,n.action===`close`&&(i.opened=!1),await Ps(e,i))}const Is=B.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]*$/.test(e)),Ls=B.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]{64}$/.test(e)),Rs=B.object({account:B.optional(B.custom()),autoSwap:B.optional(B.custom()),action:B.optional(B.enum([`open`,`topUp`,`voucher`,`close`])),channelId:B.optional(Ls),cumulativeAmount:B.optional(V()),cumulativeAmountRaw:B.optional(B.string()),transaction:B.optional(Is),descriptor:B.optional(B.custom()),additionalDeposit:B.optional(V()),additionalDepositRaw:B.optional(B.string()),depositRaw:B.optional(B.string())});function zs(e){return e?.action!==void 0}function Bs(e){return zs(e)&&e.descriptor!==void 0}function Vs(e,t,n){let r=n===`additionalDeposit`?e.additionalDepositRaw:e.cumulativeAmountRaw,i=n===`additionalDeposit`?e.additionalDeposit:e.cumulativeAmount;if(r)return BigInt(r);if(i)return d(i,t)}function Hs(e,t,n,r){let i=Vs(e,t,n);if(i===void 0)throw Error(`${n} required for ${r} action`);return i}function Us(e){return typeof e==`object`&&!!e}function Ws(e){return typeof e==`string`&&c(e,{strict:!1})?e:void 0}function Gs(e){let t=e.request.methodDetails;return Us(t)?{chainId:typeof t.chainId==`number`?t.chainId:void 0,escrowContract:Ws(t.escrowContract),escrow:Ws(t.escrow),feePayer:typeof t.feePayer==`boolean`?t.feePayer:void 0,feeToken:Ws(t.feeToken),operator:Ws(t.operator),sessionSnapshot:Je(t,Ke.sessionSnapshot)}:{}}function Ks(e,t){if(typeof e==`string`&&c(e,{strict:!1}))return e;throw Error(`tempo session challenge missing ${t}`)}function qs(e){if(typeof e==`string`)return BigInt(e);throw Error(`tempo session challenge missing amount`)}function Js(e){return typeof e==`string`?e:void 0}async function Ys(e){let{allowCustomEscrow:t,challenge:n,escrowOverride:r,allowedChainIds:i,getClient:a}=e,o=Gs(n);(o.chainId!==void 0||i?.length===0)&&ea(i,o.chainId);let s=o.chainId??(i?.length===1?i[0]:void 0),c=await a({chainId:s});$i(c,s);let l=s??c.chain?.id;if(ea(i,l),!l)throw Error(`No chainId configured for TIP-1034 session challenge.`);let u=Ro(n,r,t),d=Ks(n.request.recipient,`recipient`),f=Ks(n.request.currency,`currency`);return{amount:qs(n.request.amount),challenge:n,chainId:l,client:c,escrow:u,feePayer:o.feePayer,feeToken:o.feeToken,key:Go({payee:d,token:f,escrow:u,chainId:l}),operator:o.operator,payee:d,snapshot:o.sessionSnapshot,suggestedDepositRaw:Js(n.request.suggestedDeposit),token:f}}async function Xs(e){let{channelId:t,client:n,descriptor:r,expected:i,readChannelState:a=Xo}=e,o=po({...r,chainId:i.chainId,escrow:i.escrow});Zs({channelId:t,descriptor:r,expectedChannelId:o,payee:i.payee,payer:i.payer,authorizedSigner:i.authorizedSigner,token:i.token});let s=await a(n,o,i.escrow);if(s.deposit===0n)throw Error(`Channel ${o} cannot be reused (closed or not found on-chain).`);if(s.closeRequestedAt!==0)throw Error(`Channel ${o} cannot be reused (pending close request).`);return{channelId:o,state:s}}function Zs(e){let{authorizedSigner:t,channelId:n,descriptor:r,expectedChannelId:i,payee:a,payer:o,token:s}=e;if(n&&n.toLowerCase()!==i.toLowerCase())throw Error(`context channelId does not match descriptor`);if(!Bo(r.payee,a))throw Error(`context descriptor payee does not match challenge`);if(!Bo(r.token,s))throw Error(`context descriptor token does not match challenge`);if(!Bo(r.payer,o))throw Error(`context descriptor payer does not match account`);if(!Bo(fo(r),t))throw Error(`context descriptor authorizedSigner does not match account`)}function Qs(e){let{context:t,snapshot:n}=e,r=t?.descriptor??n?.descriptor;if(r)return{...t,channelId:t?.channelId??n?.channelId,descriptor:r}}function $s(e){let{context:t,decimals:n,requestAmount:r,snapshot:i,settled:a}=e;if(i)return[BigInt(i.acceptedCumulative),BigInt(i.requiredCumulative),BigInt(i.spent)+r,a].reduce((e,t)=>t>e?t:e,0n);let o=Vs(t,n,`cumulativeAmount`);return o===void 0?a+r:o+r}async function ec(e){let{account:t,client:n,readChannelState:r,snapshot:i}=e,a=i.highestVoucher;if(!a)throw Error(`session snapshot is missing its highest signed voucher`);if(a.channelId.toLowerCase()!==i.channelId.toLowerCase())throw Error(`session snapshot voucher channelId does not match snapshot channelId`);let o=BigInt(i.acceptedCumulative),s=BigInt(a.cumulativeAmount),c=BigInt(i.requiredCumulative),l=BigInt(i.deposit),u=BigInt(i.settled),d=BigInt(i.spent);if(s!==o)throw Error(`session snapshot voucher amount does not match acceptedCumulative`);if(d>o)throw Error(`session snapshot spent exceeds acceptedCumulative`);if(u>l)throw Error(`session snapshot settled amount exceeds deposit`);if(!Ao(i.escrow,i.chainId,{channelId:a.channelId,cumulativeAmount:s,signature:a.signature},fo(i.descriptor)))throw Error(`session snapshot highest voucher signature is invalid`);let f=await Xs({channelId:i.channelId,client:n,descriptor:i.descriptor,expected:{chainId:i.chainId,escrow:i.escrow,payee:i.descriptor.payee,payer:t.address,authorizedSigner:Fo(t),token:i.descriptor.token},readChannelState:r}),p=[o,c,f.state.settled].reduce((e,t)=>t>e?t:e,0n);if(p>f.state.deposit)throw Error(`recovered session cumulative amount exceeds on-chain channel deposit`);return{entry:{channelId:f.channelId,cumulativeAmount:p,deposit:f.state.deposit,descriptor:i.descriptor,escrow:i.escrow,chainId:i.chainId,opened:!0},spent:d}}function tc(e,t){return Bo(e.address,t.payer)?Bo(Fo(e),fo(t)):!1}function nc(e){let{account:t,entry:n,context:r,decimals:i,maxDeposit:a,resolved:o}=e;if(zs(r)){if(!Bs(r))throw Error(`descriptor required for TIP-1034 session action`);return{type:`manual`,account:t,context:r,decimals:i,resolved:o}}if(!n&&r?.channelId&&!r.descriptor)throw Error(`descriptor required to reuse TIP-1034 channel`);let s=Qs({context:r,snapshot:o.snapshot});return!n&&s&&tc(t,s.descriptor)?{type:`recover`,account:t,context:s,decimals:i,maxDeposit:a,resolved:o}:n?.opened&&tc(t,n.descriptor)?{type:`voucher`,account:t,entry:n,maxDeposit:a,resolved:o}:{type:`open`,account:t,context:r,maxDeposit:a,resolved:o}}async function rc(e,t,n=!1){switch(e.type){case`open`:return ac(e,t,n);case`recover`:return oc(e,t);case`voucher`:return sc(e,t);case`manual`:return cc(e,t,n)}}async function ic(e,t){if(e)return await sa(t.client,{account:t.account,amountOut:t.amountOut,tokenOut:t.tokenOut,tokenIn:e.tokenIn,slippage:e.slippage})}async function ac(e,t,n){let{account:r,resolved:i}=e,a=gs({contextDepositRaw:e.context?.depositRaw,maxDeposit:e.maxDeposit,requestAmount:i.amount,suggestedDepositRaw:i.suggestedDepositRaw}),o=await Uo(i.client,r,{chainId:i.chainId,deposit:a,escrow:i.escrow,feePayer:i.feePayer,feeToken:i.feeToken,initialAmount:i.amount,operator:i.operator,payee:i.payee,prefixCalls:await ic(n,{account:r.address,amountOut:a,client:i.client,tokenOut:i.token}),token:i.token});return await Ps(t,{channelId:o.channelId,cumulativeAmount:i.amount,deposit:a,descriptor:o.descriptor,escrow:i.escrow,chainId:i.chainId,opened:!0}),o}async function oc(e,t){let{account:n,context:r,decimals:i,maxDeposit:a,resolved:o}=e,{descriptor:s}=r,c=await Xs({channelId:r.channelId,client:o.client,descriptor:s,expected:{chainId:o.chainId,escrow:o.escrow,payee:o.payee,payer:n.address,authorizedSigner:Fo(n),token:o.token}}),l=$s({context:r,decimals:i,requestAmount:o.amount,settled:c.state.settled,snapshot:o.snapshot});if(l>c.state.deposit)throw Error(`recovered voucher amount exceeds on-chain channel deposit`);vs(l,a);let u=await Vo(o.client,n,s,l,o.chainId,o.escrow);return await Ps(t,{channelId:c.channelId,cumulativeAmount:l,deposit:c.state.deposit,descriptor:s,escrow:o.escrow,chainId:o.chainId,opened:!0}),u}async function sc(e,t){let{account:n,entry:r,resolved:i}=e,a=r.cumulativeAmount+i.amount;vs(a,e.maxDeposit);let o=await Vo(i.client,n,r.descriptor,a,i.chainId,i.escrow);return r.cumulativeAmount=a,await Ps(t,r),o}async function cc(e,t,n){let{account:r,context:i,decimals:a,resolved:o}=e,{descriptor:s}=i,c=po({...s,chainId:o.chainId,escrow:o.escrow});Zs({channelId:i.channelId,descriptor:s,expectedChannelId:c,payee:o.payee,payer:r.address,authorizedSigner:Fo(r),token:o.token});let l=await lc({account:r,channelId:c,context:i,decimals:a,descriptor:s,resolved:o},n);return await Fs(t,o.key,l),l}async function lc(e,t){switch(e.context.action){case`open`:return uc(e);case`topUp`:return dc(e,t);case`voucher`:return fc(e);case`close`:return pc(e)}}async function uc(e){let{account:t,channelId:n,context:r,decimals:i,descriptor:a,resolved:o}=e;if(!r.transaction)throw Error(`transaction required for open action`);let s=Hs(r,i,`cumulativeAmount`,`open`),c=await Vo(o.client,t,a,s,o.chainId,o.escrow);return{action:`open`,type:`transaction`,channelId:n,transaction:r.transaction,signature:c.signature,descriptor:a,cumulativeAmount:s.toString(),authorizedSigner:a.authorizedSigner}}async function dc(e,t){let{account:n,channelId:r,context:i,decimals:a,descriptor:o,resolved:s}=e,c=Hs(i,a,`additionalDeposit`,`topUp`);return i.transaction?{action:`topUp`,type:`transaction`,channelId:r,transaction:i.transaction,descriptor:o,additionalDeposit:c.toString()}:Wo(s.client,n,o,c,s.chainId,s.feePayer,s.escrow,await ic(t,{account:n.address,amountOut:c,client:s.client,tokenOut:s.token}),s.feeToken)}function fc(e){let{account:t,context:n,decimals:r,descriptor:i,resolved:a}=e;return Vo(a.client,t,i,Hs(n,r,`cumulativeAmount`,`voucher`),a.chainId,a.escrow)}function pc(e){let{account:t,context:n,decimals:r,descriptor:i,resolved:a}=e;return Ho(a.client,t,i,Hs(n,r,`cumulativeAmount`,`close`),a.chainId,a.escrow)}const mc={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3};function hc(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)};function s(e,a){if(a.type===`close`){if(n)return;n=!0,i=mc.CLOSED,r=null}if(a.type===`open`&&(i=mc.OPEN),a.type===`message`&&r){r.push(a);return}switch(a.type){case`close`:l.onclose?.(a);break;case`error`:l.onerror?.(a);break;case`message`:l.onmessage?.(a);break;case`open`:l.onopen?.(a)}let o=t.get(e);if(o)for(let e of Array.from(o))typeof e.value==`function`?e.value(a):e.value.handleEvent(a),e.once&&o.delete(e)}let c=null,l={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,get onmessage(){return c},set onmessage(e){if(c=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:l}}function gc(e){return{acceptedCumulative:BigInt(e.acceptedCumulative),deposit:BigInt(e.deposit),requiredCumulative:BigInt(e.requiredCumulative)}}function _c(e){let{amount:t,assertVoucherWithinLocalLimit:n,channel:r,decimals:i,lastChallenge:a,lastUrl:o}=e;if(!r?.opened)throw Error(`Cannot top up session: no open channel.`);if(!a)throw Error(`Cannot top up session: no challenge available. Make a request first.`);if(!o)throw Error(`Cannot top up session: no URL available. Call fetch(), sse(), or ws() first.`);let s=hs(t,i);if(s<=0n)throw Error(`Top-up amount must be greater than zero.`);return n(r.cumulativeAmount+s),{additionalDeposit:s,challenge:a,channelId:r.channelId,input:o}}function vc(e){let{additionalDeposit:t,channel:n,channelId:r,challengeId:i,currentState:a,knownDeposit:o,receipt:s,spent:c}=e;if(n?.channelId!==r)return;let l=o!==void 0&&o>n.deposit?o:n.deposit,u={...n,deposit:l+t};return s?{channel:u,state:Es(s,u)}:i?{channel:u,state:Cs({challengeId:i,entry:u,spent:c.toString(),units:a.status===`active`?a.units:0})}:{channel:u}}async function yc(e){if(e.event.channelId!==e.expectedChannelId)return{status:`ignored`,reason:`channel-mismatch`};let t=gc(e.event);e.assertVoucherWithinLocalLimit(t.requiredCumulative),await e.topUpIfNeeded({challenge:e.challenge,input:e.input,channelId:e.expectedChannelId,deposit:t.deposit,requiredCumulative:t.requiredCumulative,...e.signal?{signal:e.signal}:{}});let n=e.getChannel();if(!n||n.channelId!==e.expectedChannelId)return{status:`ignored`,reason:`missing-channel`};let r=n.cumulativeAmount>t.requiredCumulative?n.cumulativeAmount:Ka(t.requiredCumulative);return{status:`ready`,context:{action:`voucher`,channelId:e.expectedChannelId,descriptor:n.descriptor,cumulativeAmountRaw:r.toString()}}}function bc(e){return e.method===We.tempo&&e.intent===Ge.session}function xc(e){return bc(e)&&Je(e.request.methodDetails,Ke.sessionProtocol)===qe.v2}function Sc(e){return Je(e.request.methodDetails,Ke.sessionSnapshot)}function Cc(e,t,n){let r=e instanceof Request?e.headers:void 0;return{...t,headers:{...Q(r),...Q(t?.headers),[R.authorization]:n}}}function wc(e){try{let t=typeof location>`u`?void 0:location.href,n=e instanceof Request?new URL(e.url):e instanceof URL?new URL(e):new URL(String(e),t);return n.hash=``,n}catch{return e}}function Tc(e){let t=new URL(e.toString());return t.protocol===`ws:`&&(t.protocol=`http:`),t.protocol===`wss:`&&(t.protocol=`https:`),t}async function Ec(e){let t=await e.text().catch(()=>``);if(!t)return``;if(!e.headers.get(`Content-Type`)?.includes(`application/problem+json`))return t;try{return JSON.parse(t).detail??t}catch{return t}}async function Dc(e){let{channel:t,channelId:n}=e;if(!t?.descriptor||t.channelId!==n)throw Error(`Cannot top up session: no local channel descriptor available.`);let r=await Oc({challenge:e.challenge,context:{action:`topUp`,channelId:n,descriptor:t.descriptor,additionalDepositRaw:e.additionalDeposit.toString()},createSessionCredential:e.createSessionCredential,fetch:e.fetch,input:e.input,signal:e.signal});if(!r.ok)throw Error(`Top-up POST failed with status ${r.status}`);let i=r.headers.get(R.paymentReceipt);return i?no(i):void 0}async function Oc(e){let t=async t=>e.fetch(wc(e.input),{method:`POST`,...e.signal?{signal:e.signal}:{},headers:{[R.authorization]:await e.createSessionCredential(t,e.context)}}),n=await t(e.challenge);if(n.status!==402)return n;let r=pt(n).find(xc);return r?t(r):n}async function kc(e){let t=Ac({channel:e.getChannel(),response:e.response});if(!t)return;let{channel:n,challenge:r,snapshot:i}=t;e.setChallenge(r);let a=BigInt(i.requiredCumulative),o=n.cumulativeAmount;await e.topUpIfNeeded({challenge:r,input:e.input,channelId:i.channelId,deposit:BigInt(i.deposit),requiredCumulative:a,signal:e.init?.signal??(e.input instanceof Request?e.input.signal:void 0)});let s=e.getChannel();if(!s?.descriptor||s.channelId!==i.channelId)return;let c=s.cumulativeAmount>a?s.cumulativeAmount:a,l=()=>e.restoreCumulative(i.channelId,o),u;try{let t=await e.createSessionCredential(r,{action:`voucher`,channelId:i.channelId,descriptor:s.descriptor,cumulativeAmountRaw:c.toString()});u=await e.fetch(e.input,Cc(e.input,e.init,t))}catch(e){throw await l(),e}return!u.ok&&!u.headers.get(R.paymentReceipt)&&await l(),u}function Ac(e){let t=pt(e.response).find(xc);if(!t)return;let n=Sc(t);if(!n)return;let{channel:r}=e;if(!(!r?.descriptor||r.channelId!==n.channelId))return{channel:r,challenge:t,snapshot:n}}async function jc(e){if(!e.lastUrl)throw Error(`Cannot close session: no URL available. This usually means close() was called on a SessionManager instance that was recreated after the session was opened. Use the same SessionManager instance that opened the session, or call fetch()/sse() before close().`);let t=e.target.challenge,n=e.signedCloseAmount,r=async(r,i=!1)=>{t=r,n=(i?e.resolveSignedCloseAmount?.(r):void 0)??e.signedCloseAmount;let a=await e.createSessionCredential(r,{action:`close`,channelId:e.target.channelId,descriptor:e.target.channel.descriptor,cumulativeAmountRaw:n});return e.fetch(e.lastUrl,{method:`POST`,headers:{[R.authorization]:a}})},i=await r(e.target.challenge);if(i.status===402){let t=pt(i).find(xc);t&&(e.setChallenge?.(t),i=await r(t,!0))}if(!i.ok){let e=await Ec(i),t=i.headers.get(R.wwwAuthenticate)??``;throw Error(`Close request failed with status ${i.status}${e?`: ${e}`:``}${t?` [${R.wwwAuthenticate}: ${t}]`:``}`)}let a=i.headers.get(R.paymentReceipt);if(!a)return;let o=no(a);if(!o.txHash||!T.validate(o.txHash,{strict:!0})||T.size(o.txHash)!==32||!Ss({challengeId:t.id,channelId:e.target.channelId,expectedCloseAmount:n,minimumSpent:e.getMinimumSpent?.()??0n,receipt:o}))throw Error(`Session close response included a mismatched payment receipt.`);return o}async function Mc(e,t,n){let{onReceipt:r,signal:i,...a}=t??{},o=i??(e instanceof Request?e.signal:void 0),s={...a,headers:{...Q(a.headers),Accept:`text/event-stream`},...o?{signal:o}:{}},c=await n.doFetch(e,s);return!ro(c)&&n.getChannel()?.opened&&(c=await n.doFetch(e,s)),Nc(e,c,{onReceipt:r,signal:o},n)}function Nc(e,t,n,r){if(!ro(t))throw Error(`SSE response is not an event stream.`);if(!t.body)throw Error(`Response has no body.`);let i=r.getChallenge();return Pc({onNeedVoucher:t=>zc({challenge:i,driver:r,input:e,signal:n?.signal},t),onReceipt(e){r.acceptReceipt(e),n?.onReceipt?.(e)},response:t,signal:n?.signal})}async function*Pc(e){for await(let t of Fc(e))t.data!==void 0&&(yield t.data)}async function*Fc(e){if(!e.response.body)throw Error(`Response has no body.`);let t=e.response.body.getReader(),n=new TextDecoder,r=``,i=!1,a=()=>{t.cancel(e.signal?.reason).catch(()=>void 0)};e.signal?.addEventListener(`abort`,a,{once:!0}),e.signal?.aborted&&a();try{for(;!e.signal?.aborted;){let{done:a,value:o}=await t.read();for(a?(i=!0,r+=n.decode()):r+=n.decode(o,{stream:!0});;){let t=Ic(r,a);if(!t)break;let n=t.index+t.length,i=r.slice(0,t.index),o=r.slice(0,n);if(r=r.slice(n),!i.trim())continue;let s=io(i.replace(/\r\n|\r/g,`
5
- `));if(!s){yield{raw:o};continue}switch(s.type){case`message`:yield{data:s.data,raw:o};break;case`payment-need-voucher`:await e.onNeedVoucher(s.data,e.signal);break;case`payment-receipt`:e.onReceipt(s.data)}}if(a)break}}finally{e.signal?.removeEventListener(`abort`,a),i||await t.cancel().catch(()=>void 0),t.releaseLock()}}function Ic(e,t){for(let n=0;n<e.length;n++){let r=Lc(e,n,t);if(!r)continue;let i=Lc(e,n+r,t);if(i)return{index:n,length:r+i};n+=r-1}}function Lc(e,t,n){return e[t]===`
4
+ `);switch(t){case`message`:return{type:`message`,data:r};case`payment-need-voucher`:{let e=vo(r);return po(e)?{type:`payment-need-voucher`,data:e}:null}case`payment-receipt`:{let e=vo(r);return mo(e)?{type:`payment-receipt`,data:e}:null}default:return{type:`message`,data:r}}}function vo(e){try{return JSON.parse(e)}catch{return null}}function yo(e){return JSON.stringify({mpp:`authorization`,authorization:e})}function bo(){return JSON.stringify({mpp:`payment-close-request`})}function xo(e){let t=So(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`&&mo(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`&&po(t.data)?{mpp:`payment-need-voucher`,data:t.data}:t.mpp===`payment-receipt`&&mo(t.data)?{mpp:`payment-receipt`,data:t.data}:null:null}function So(e){try{let t=JSON.parse(e);return typeof t!=`object`||!t?null:t}catch{return null}}const Co=`0x4d50500000000000000000000000000000000000`;function wo(e){return BigInt(e.authorizedSigner)===0n?e.payer:e.authorizedSigner}function To(e){let t=S.encode(S.from([`address payer`,`address payee`,`address operator`,`address token`,`bytes32 salt`,`address authorizedSigner`,`bytes32 expiringNonceHash`,`address escrow`,`uint256 chainId`]),[e.payer,e.payee,e.operator,e.token,e.salt,e.authorizedSigner,e.expiringNonceHash,e.escrow??`0x4d50500000000000000000000000000000000000`,BigInt(e.chainId)]);return T.keccak256(t)}function Eo(e){return he.encodeForSigning(e)}function Do(e){let{feePayer:t,transaction:n}=e;return t?{...n,feePayerSignature:null}:n}function Oo(e,t){return T.keccak256(E.concat(Eo(e),t.sender))}const ko=[{name:`payer`,type:`address`},{name:`payee`,type:`address`},{name:`operator`,type:`address`},{name:`token`,type:`address`},{name:`salt`,type:`bytes32`},{name:`authorizedSigner`,type:`address`},{name:`expiringNonceHash`,type:`bytes32`}],Ao=[{name:`settled`,type:`uint96`},{name:`deposit`,type:`uint96`},{name:`closeRequestedAt`,type:`uint32`}],jo={name:`descriptor`,type:`tuple`,components:ko},Mo=[{type:`function`,name:`CLOSE_GRACE_PERIOD`,stateMutability:`view`,inputs:[],outputs:[{type:`uint64`}]},{type:`function`,name:`VOUCHER_TYPEHASH`,stateMutability:`view`,inputs:[],outputs:[{type:`bytes32`}]},{type:`function`,name:`open`,stateMutability:`nonpayable`,inputs:[{name:`payee`,type:`address`},{name:`operator`,type:`address`},{name:`token`,type:`address`},{name:`deposit`,type:`uint96`},{name:`salt`,type:`bytes32`},{name:`authorizedSigner`,type:`address`}],outputs:[{name:`channelId`,type:`bytes32`}]},{type:`function`,name:`settle`,stateMutability:`nonpayable`,inputs:[jo,{name:`cumulativeAmount`,type:`uint96`},{name:`signature`,type:`bytes`}],outputs:[]},{type:`function`,name:`topUp`,stateMutability:`nonpayable`,inputs:[jo,{name:`additionalDeposit`,type:`uint96`}],outputs:[]},{type:`function`,name:`close`,stateMutability:`nonpayable`,inputs:[jo,{name:`cumulativeAmount`,type:`uint96`},{name:`captureAmount`,type:`uint96`},{name:`signature`,type:`bytes`}],outputs:[]},{type:`function`,name:`requestClose`,stateMutability:`nonpayable`,inputs:[jo],outputs:[]},{type:`function`,name:`withdraw`,stateMutability:`nonpayable`,inputs:[jo],outputs:[]},{type:`function`,name:`getChannel`,stateMutability:`view`,inputs:[jo],outputs:[{type:`tuple`,components:[{name:`descriptor`,type:`tuple`,components:ko},{name:`state`,type:`tuple`,components:Ao}]}]},{type:`function`,name:`getChannelState`,stateMutability:`view`,inputs:[{name:`channelId`,type:`bytes32`}],outputs:[{type:`tuple`,components:Ao}]},{type:`function`,name:`getChannelStatesBatch`,stateMutability:`view`,inputs:[{name:`channelIds`,type:`bytes32[]`}],outputs:[{type:`tuple[]`,components:Ao}]},{type:`function`,name:`computeChannelId`,stateMutability:`view`,inputs:[{name:`payer`,type:`address`},{name:`payee`,type:`address`},{name:`operator`,type:`address`},{name:`token`,type:`address`},{name:`salt`,type:`bytes32`},{name:`authorizedSigner`,type:`address`},{name:`expiringNonceHash`,type:`bytes32`}],outputs:[{type:`bytes32`}]},{type:`function`,name:`getVoucherDigest`,stateMutability:`view`,inputs:[{name:`channelId`,type:`bytes32`},{name:`cumulativeAmount`,type:`uint96`}],outputs:[{type:`bytes32`}]},{type:`function`,name:`domainSeparator`,stateMutability:`view`,inputs:[],outputs:[{type:`bytes32`}]},{type:`event`,name:`ChannelOpened`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0},{name:`payer`,type:`address`,indexed:!0},{name:`payee`,type:`address`,indexed:!0},{name:`operator`,type:`address`},{name:`token`,type:`address`},{name:`authorizedSigner`,type:`address`},{name:`salt`,type:`bytes32`},{name:`expiringNonceHash`,type:`bytes32`},{name:`deposit`,type:`uint96`}]},{type:`event`,name:`Settled`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0},{name:`payer`,type:`address`,indexed:!0},{name:`payee`,type:`address`,indexed:!0},{name:`cumulativeAmount`,type:`uint96`},{name:`deltaPaid`,type:`uint96`},{name:`newSettled`,type:`uint96`}]},{type:`event`,name:`TopUp`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0},{name:`payer`,type:`address`,indexed:!0},{name:`payee`,type:`address`,indexed:!0},{name:`additionalDeposit`,type:`uint96`},{name:`newDeposit`,type:`uint96`}]},{type:`event`,name:`CloseRequested`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0},{name:`payer`,type:`address`,indexed:!0},{name:`payee`,type:`address`,indexed:!0},{name:`closeGraceEnd`,type:`uint256`}]},{type:`event`,name:`ChannelClosed`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0},{name:`payer`,type:`address`,indexed:!0},{name:`payee`,type:`address`,indexed:!0},{name:`settledToPayee`,type:`uint96`},{name:`refundedToPayer`,type:`uint96`}]},{type:`event`,name:`CloseRequestCancelled`,inputs:[{name:`channelId`,type:`bytes32`,indexed:!0},{name:`payer`,type:`address`,indexed:!0},{name:`payee`,type:`address`,indexed:!0}]}];function No(e,t){return{name:`TIP20 Channel Reserve`,version:`1`,chainId:t,verifyingContract:e}}const Po={Voucher:[{name:`channelId`,type:`bytes32`},{name:`cumulativeAmount`,type:`uint96`}]},Fo={CloseAuthorization:[{name:`channelId`,type:`bytes32`},{name:`cumulativeAmount`,type:`uint96`}]};function Io(e,t){return pe.getVoucherSignPayload({chainId:e,channelId:t.channelId,cumulativeAmount:t.cumulativeAmount})}function Lo(e,t,n){return e.toLowerCase()===pe.address.toLowerCase()?Io(t,n):o({domain:No(e,t),types:Po,primaryType:`Voucher`,message:{channelId:n.channelId,cumulativeAmount:n.cumulativeAmount}})}function Ro(e){return e===`secp256k1`||e===`p256`||e===`webAuthn`}function zo(e,t){return ae.signVoucher(e,{chainId:t.chainId,channel:t.channelId,cumulativeAmount:t.cumulativeAmount})}async function Bo(e,t,n,r,i){let a=await(async()=>{if(r.toLowerCase()===pe.address.toLowerCase())try{return await zo(t,{chainId:i,channelId:n.channelId,cumulativeAmount:n.cumulativeAmount})}catch{}return y(e,{account:t,domain:No(r,i),types:Po,primaryType:`Voucher`,message:n})})(),o=L.from(a);if(!Ro(o.type))throw Error(`TIP-1034 vouchers require a TIP-1020 primitive signature; received "${o.type}".`);return L.serialize(o)}async function Vo(e,t,n,r,i){let a=await y(e,{account:t,domain:No(r,i),types:Fo,primaryType:`CloseAuthorization`,message:n}),o=L.from(a);if(!Ro(o.type))throw Error(`TIP-1034 close authorizations require a TIP-1020 primitive signature; received "${o.type}".`);return L.serialize(o)}function Ho(e,t,n,r){try{let i=L.from(n.signature);if(!Ro(i.type)||L.serialize(i).toLowerCase()!==n.signature.toLowerCase())return!1;let a=Lo(e,t,n),o=L.extractAddress({payload:a,signature:i});return L.verify(i,{address:o,payload:a})&&ma(o,r)}catch{return!1}}function Uo(e){return typeof e==`object`&&!!e}function Wo(e){return typeof e==`string`&&c(e,{strict:!1})?e:void 0}function Go(e){return Wo(e.accessKeyAddress)}function Ko(){let e=BigInt(Math.floor(Date.now()/1e3))-60n;return e<=0n?0:Number(BigInt(E.random(8))%e)}function qo(e){return Go(e)??e.address}async function Jo(e,t){let{account:n,calls:r,feePayer:i,feeToken:a,validAfter:o}=t;return m(e,{account:n,calls:r,nonceKey:`expiring`,...i?{feePayer:!0}:{},feeToken:a,...o===void 0?{}:{validAfter:o}})}async function Yo(e,t){return await v(e,t)}function Xo(e,t,n=!1){let r=e.request.methodDetails,i=Uo(r)?Wo(r.escrowContract)??Wo(r.escrow):void 0,a=t??`0x4d50500000000000000000000000000000000000`;if(i&&!Qo(i,a)&&(!n||t!==void 0))throw Error(`Tempo session escrow ${i} does not match client escrow ${a}.`);return i&&!Qo(i,a)?i:a}function Zo(e,t,n,r){return K({challenge:e,payload:t,source:`did:pkh:eip155:${n}:${r.address}`})}function Qo(e,t){return e.toLowerCase()===t.toLowerCase()}async function $o(e,t,n,r,i,a=Co){let o=To({...n,chainId:i,escrow:a}),s=io(r),c=await Bo(e,t,{channelId:o,cumulativeAmount:s},a,i);return{action:`voucher`,channelId:o,descriptor:n,cumulativeAmount:s.toString(),signature:c}}async function es(e,t,n,r,i,a=Co){let o=await $o(e,t,n,r,i,a),s=await Vo(e,t,{channelId:o.channelId,cumulativeAmount:io(BigInt(o.cumulativeAmount))},a,i);return{action:`close`,channelId:o.channelId,descriptor:n,cumulativeAmount:o.cumulativeAmount,signature:o.signature,closeSignature:s}}async function ts(e,t,n){let i=qo(t),a=n.escrow??`0x4d50500000000000000000000000000000000000`,o=n.operator??`0x0000000000000000000000000000000000000000`,s=E.random(32),c=io(n.deposit),l=io(n.initialAmount),u=r({abi:Mo,functionName:`open`,args:[n.payee,o,n.token,c,s,i]}),d=await Yo(e,await Jo(e,{account:t,calls:[...n.prefixCalls??[],{to:a,data:u}],feePayer:n.feePayer,feeToken:n.feeToken??n.token})),f=ce.deserialize(d),p={authorizedSigner:i,expiringNonceHash:Oo(Do({...n.feePayer?{feePayer:!0}:{},transaction:f}),{sender:t.address}),operator:o,payee:n.payee,payer:t.address,salt:s,token:n.token},m=To({...p,chainId:n.chainId,escrow:a});return{action:`open`,type:`transaction`,channelId:m,transaction:d,signature:await Bo(e,t,{channelId:m,cumulativeAmount:l},a,n.chainId),descriptor:p,cumulativeAmount:l.toString(),authorizedSigner:p.authorizedSigner}}async function ns(e,t,n,i,a,o,s=Co,c=[],l=n.token){let u=To({...n,chainId:a,escrow:s}),d=io(i);return{action:`topUp`,type:`transaction`,channelId:u,transaction:await Yo(e,await Jo(e,{account:t,calls:[...c,{to:s,data:r({abi:Mo,functionName:`topUp`,args:[n,d]})}],feePayer:o,feeToken:l,validAfter:Ko()})),descriptor:n,additionalDeposit:d.toString()}}function rs(e){let{payee:t,token:n,escrow:r,chainId:i}=e;return`${t.toLowerCase()}:${n.toLowerCase()}:${r.toLowerCase()}:${i}`}function is(e){return rs({payee:e.descriptor.payee,token:e.descriptor.token,escrow:e.escrow,chainId:e.chainId})}function as(){let e=new Map;return{get:t=>e.get(t),set(t){e.set(is(t),t)},delete(t){e.delete(t)}}}const os=2n**96n-1n;function ss(e){if(e<0n||e>os)throw new q({reason:`amount exceeds uint96 range`})}async function cs(e,t,n=Co,r){return ls(await h(e,{address:n,abi:Mo,functionName:`getChannelState`,args:[t],...r===void 0?{}:{blockNumber:r}}))}function ls(e){return ss(e.settled),ss(e.deposit),{settled:e.settled,deposit:e.deposit,closeRequestedAt:e.closeRequestedAt}}const us=B.custom(e=>typeof e==`string`&&c(e,{strict:!1})),ds=B.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]{64}$/.test(e)),fs=B.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]+$/.test(e)),ps=B.object({authorizedSigner:us,expiringNonceHash:ds,operator:us,payee:us,payer:us,salt:ds,token:us}),ms=Pt(B.object({acceptedCumulative:B.string(),chainId:B.number(),channelId:ds,closeRequestedAt:B.optional(B.string()),deposit:B.string(),descriptor:ps,escrow:us,highestVoucher:B.optional(B.object({channelId:ds,cumulativeAmount:B.string(),signature:fs})),requiredCumulative:B.string(),settled:B.string(),spent:B.string(),units:B.optional(B.number())}));function hs(e){return ms.encode(e)}function gs(e){return ms.decode(e)}const _s={status:`idle`};function vs(e){return{status:`active`,...e}}function ys(e,t){switch(t.type){case`challengeReceived`:return e.status===`closing`||e.status===`closed`?$(e,t):{state:{status:`challenged`,challengeId:t.challengeId},effects:[]};case`challenge`:return e.status!==`idle`&&e.status!==`active`?$(e,t):t.snapshot?{state:{status:`hydrating`,challengeId:t.challengeId,snapshot:t.snapshot},effects:[{type:`hydrate`,snapshot:t.snapshot}]}:{state:{status:`opening`,challengeId:t.challengeId},effects:[{type:`open`}]};case`hydrated`:return e.status===`hydrating`?{state:Ss(e.challengeId,t.snapshot),effects:[]}:$(e,t);case`activated`:return e.status===`closing`||e.status===`closed`?$(e,t):{state:Fs({challengeId:t.challengeId,entry:t.entry,spent:t.spent,units:t.units??0}),effects:[]};case`opened`:return e.status===`opening`?{state:Cs(e.challengeId,t.receipt,t.descriptor,t.deposit),effects:[]}:$(e,t);case`receiptAccepted`:return e.status===`closing`||e.status===`closed`?$(e,t):{state:Rs(t.receipt,t.entry),effects:[]};case`needVoucher`:return e.status===`active`?xs({challengeId:e.challengeId,descriptor:t.descriptor,event:t.event}):$(e,t);case`topUpStarted`:return e.status===`voucherNeeded`?{state:{status:`toppingUp`,challengeId:e.challengeId,channelId:e.channelId,descriptor:e.descriptor,deposit:e.deposit},effects:[]}:$(e,t);case`voucherAccepted`:return e.status!==`voucherNeeded`&&e.status!==`toppingUp`?$(e,t):{state:Cs(e.challengeId,t.receipt,e.descriptor,t.deposit??e.deposit),effects:[]};case`settleStarted`:return e.status===`active`?{state:{status:`settling`,channelId:e.channelId,descriptor:e.descriptor,deposit:e.deposit},effects:[{type:`settle`,channelId:e.channelId}]}:$(e,t);case`settled`:return e.status===`settling`?{state:Cs(t.receipt.challengeId,t.receipt,e.descriptor,t.deposit??e.deposit),effects:[]}:$(e,t);case`closeRequested`:return e.status===`active`?{state:{status:`closeRequested`,channelId:e.channelId,descriptor:e.descriptor},effects:[{type:`requestClose`,channelId:e.channelId}]}:$(e,t);case`withdrawable`:return e.status===`closeRequested`?{state:{status:`withdrawable`,channelId:e.channelId,descriptor:e.descriptor},effects:[{type:`withdraw`,channelId:e.channelId}]}:$(e,t);case`closeStarted`:return e.status!==`active`&&e.status!==`withdrawable`&&e.status!==`closeRequested`?$(e,t):{state:{status:`closing`,channelId:e.channelId,descriptor:e.descriptor},effects:[{type:`close`,channelId:e.channelId}]};case`closed`:return e.status!==`closing`&&e.status!==`withdrawable`?$(e,t):{state:{status:`closed`,channelId:e.channelId,descriptor:e.descriptor},effects:[]}}}function bs(e,t){let n=ys(e.state,t);return e.state=n.state,n}function xs(e){let{challengeId:t,descriptor:n,event:r}=e,i=BigInt(r.requiredCumulative),a=BigInt(r.deposit);return i>a?{state:{status:`toppingUp`,challengeId:t,channelId:r.channelId,descriptor:n,deposit:r.deposit},effects:[{type:`topUp`,channelId:r.channelId,amount:(i-a).toString()}]}:{state:{status:`voucherNeeded`,challengeId:t,channelId:r.channelId,descriptor:n,requiredCumulative:r.requiredCumulative,deposit:r.deposit},effects:[{type:`voucher`}]}}function Ss(e,t){return vs({challengeId:e,channelId:t.channelId,descriptor:t.descriptor,acceptedCumulative:t.acceptedCumulative,deposit:t.deposit,spent:t.spent,units:t.units??0})}function Cs(e,t,n,r){return vs({challengeId:e,channelId:t.channelId,descriptor:n,acceptedCumulative:t.acceptedCumulative,deposit:r,spent:t.spent,units:t.units??0})}function $(e,t){throw Error(`Invalid session transition: ${e.status} + ${t.type}`)}function ws(e){let{cumulativeAmount:t,maxVoucherCumulative:n}=e;if(n!==null&&!(t<=n))throw Error(`requested voucher amount ${t} exceeds local maxDeposit ${n}`)}function Ts(e){let{channel:t,maxVoucherCumulative:n,receipt:r}=e;if(!t||r.channelId!==t.channelId)return;let i=BigInt(r.acceptedCumulative),a=BigInt(r.spent);if(a>i)throw Error(`receipt spent exceeds accepted cumulative voucher amount`);if(i>t.cumulativeAmount)throw Error(`receipt accepted cumulative exceeds local voucher state`);if(a>t.cumulativeAmount)throw Error(`receipt spent exceeds local voucher state`);ws({cumulativeAmount:i,maxVoucherCumulative:n}),ws({cumulativeAmount:a,maxVoucherCumulative:n})}function Es(e){let{channel:t,maxVoucherCumulative:n,receipt:r,spent:i}=e;if(!r||r.channelId!==t?.channelId)return i;Ts({channel:t,maxVoucherCumulative:n,receipt:r});let a=BigInt(r.spent);return i>a?i:a}function Ds(e,t){return typeof e==`bigint`?e:f(e,t)}function Os(e){let{contextDepositRaw:t,maxDeposit:n,requestAmount:r,suggestedDepositRaw:i}=e;if(As(r,n),t!==void 0){let e=BigInt(t);if(e<r)throw Error(`opening deposit ${e} below request amount ${r}`);return e}let a=i===void 0?void 0:BigInt(i),o=a!==void 0&&a>r?a:r;return n===void 0||o<n?o:n}function ks(e){let{deposit:t,maxDeposit:n,requiredCumulative:r,suggestedDeposit:i,topUpAmount:a}=e;if(r<=t)return 0n;ws({cumulativeAmount:r,maxVoucherCumulative:n??null});let o=r-t,s=a??i??o,c=s>o?s:o;if(n==null)return c;let l=n-t;return c<l?c:l}function As(e,t){ws({cumulativeAmount:e,maxVoucherCumulative:t??null})}function js(e){let{channel:t,currentSocket:n,lastChallenge:r}=e;if(!t?.opened)return;let i=n?.challenge??r,a=n?.channelId??t.channelId;if(!i)throw Error(`Cannot close session: no challenge available. This usually means close() was called on a SessionManager instance that was recreated after the session was opened. Use the same SessionManager instance that opened the session, or make a request first to receive a fresh 402 challenge.`);if(!a)throw Error(`Cannot close session: no channel ID available. The session may not have been fully opened.`);return{challenge:i,channel:t,channelId:a}}function Ms(e){let{cumulativeAmount:t,spent:n}=e;return t>n?t:n}function Ns(e){let{cumulativeAmount:t,readySpent:n,spent:r}=e;if(!no(n))throw Error(`close-ready spent is not a uint96 amount`);if(n<r)throw Error(`close-ready spent is below locally confirmed spend`);if(n>Ms({cumulativeAmount:t,spent:r}))throw Error(`close-ready spent exceeds local voucher state`)}function Ps(e){let{challengeId:t,channelId:n,expectedCloseAmount:r,minimumSpent:i=0n,receipt:a}=e,o=ro(r),s=ro(a.spent);return o===void 0||s===void 0||!no(i)?!1:!!a.txHash&&a.challengeId===t&&a.channelId===n&&a.acceptedCumulative===r&&s>=i&&s<=o}function Fs(e){return vs({challengeId:e.challengeId,channelId:e.entry.channelId,descriptor:e.entry.descriptor,acceptedCumulative:e.entry.cumulativeAmount.toString(),deposit:e.entry.deposit.toString(),spent:e.spent,units:e.units})}function Is(){return{channel:null,lastChallenge:null,lastUrl:null,spent:0n,socketSession:null,state:_s}}function Ls(e){let{maxVoucherCumulative:t,receipt:n,runtime:r}=e;r.spent=Es({channel:r.channel,maxVoucherCumulative:t,receipt:n,spent:r.spent}),n&&r.channel?.channelId===n.channelId&&bs(r,{type:`receiptAccepted`,receipt:n,entry:r.channel})}function Rs(e,t){return vs({challengeId:e.challengeId,channelId:e.channelId,descriptor:t.descriptor,acceptedCumulative:e.acceptedCumulative,deposit:t.deposit.toString(),spent:e.spent,units:e.units??0})}function zs(e){let{challengeId:t,channelId:n,closeReadyReceipt:r,cumulativeAmount:i,deliveredChunks:a=0n,socketChallengeId:o,socketChannelId:s,spent:c,tickCost:l=0n}=e;if(c>i)throw Error(`locally confirmed spend exceeds local voucher state`);if(r&&r.challengeId===t&&r.channelId===n){let e=ro(r.spent);if(e===void 0)throw Error(`close-ready spent is not a uint96 amount`);return e>c?e:c}if(o===t&&s===n&&l>0n){let e=a*l,t=c>e?c:e;return t>i?i:t}return i}function Bs(e){let{channel:t,channelId:n,challengeId:r,cumulativeAmount:i,spent:a,state:o}=e;if(!(!t||t.channelId!==n)&&(t.cumulativeAmount=i,r))return ys(o,{type:`activated`,challengeId:r,entry:t,spent:a.toString(),units:o.status===`active`?o.units:0}).state}function Vs(e){return{channel:e.channel===null?null:{entry:e.channel,cumulativeAmount:e.channel.cumulativeAmount,deposit:e.channel.deposit,opened:e.channel.opened},spent:e.spent,state:e.state}}function Hs(e,t){return e.channel?(e.channel.entry.cumulativeAmount=e.channel.cumulativeAmount,e.channel.entry.deposit=e.channel.deposit,e.channel.entry.opened=e.channel.opened,{channel:e.channel.entry,spent:e.spent,state:e.state}):(t&&(t.opened=!1),{channel:null,spent:e.spent,state:e.state})}async function Us(e){let{activeSocket:t,currentSocket:n,target:r}=e,i=n.closeReadyReceipt??await(async()=>(t.send(bo()),e.waitForCloseReady()))(),a=BigInt(i.spent);Ns({cumulativeAmount:r.channel.cumulativeAmount,readySpent:a,spent:e.spent});let o=await e.createSessionCredential(r.challenge,{action:`close`,channelId:r.channelId,descriptor:r.channel.descriptor,cumulativeAmountRaw:a.toString()}),s=a.toString();n.expectedCloseAmount=s;try{let i=e.waitForReceipt(e=>Ps({challengeId:r.challenge.id,channelId:r.channelId,expectedCloseAmount:s,minimumSpent:a,receipt:e}));t.send(yo(o));let c=await i;return t.close(),n.closeReadyReceipt=null,c}finally{n.expectedCloseAmount=null}}function Ws(e){return`cumulativeAmount`in e}function Gs(e){if(Ws(e))return BigInt(e.cumulativeAmount)}async function Ks(e,t){t.opened?await e.store.set(t):await e.store.delete(is(t)),e.notifyUpdate(t)}async function qs(e,t,n){let r=Gs(n);if(r===void 0)return;let i=await e.store.get(t);i&&i.channelId.toLowerCase()===n.channelId.toLowerCase()&&(i.cumulativeAmount=i.cumulativeAmount>r?i.cumulativeAmount:r,n.action===`close`&&(i.opened=!1),await Ks(e,i))}const Js=B.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]*$/.test(e)),Ys=B.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]{64}$/.test(e)),Xs=B.object({account:B.optional(B.custom()),autoSwap:B.optional(B.custom()),action:B.optional(B.enum([`open`,`topUp`,`voucher`,`close`])),channelId:B.optional(Ys),cumulativeAmount:B.optional(V()),cumulativeAmountRaw:B.optional(B.string()),transaction:B.optional(Js),descriptor:B.optional(B.custom()),additionalDeposit:B.optional(V()),additionalDepositRaw:B.optional(B.string()),depositRaw:B.optional(B.string())});function Zs(e){return e?.action!==void 0}function Qs(e){return Zs(e)&&e.descriptor!==void 0}function $s(e,t,n){let r=n===`additionalDeposit`?e.additionalDepositRaw:e.cumulativeAmountRaw,i=n===`additionalDeposit`?e.additionalDeposit:e.cumulativeAmount;if(r)return BigInt(r);if(i)return f(i,t)}function ec(e,t,n,r){let i=$s(e,t,n);if(i===void 0)throw Error(`${n} required for ${r} action`);return i}function tc(e){return typeof e==`object`&&!!e}function nc(e){return typeof e==`string`&&c(e,{strict:!1})?e:void 0}function rc(e){let t=e.request.methodDetails;return tc(t)?{chainId:typeof t.chainId==`number`?t.chainId:void 0,escrowContract:nc(t.escrowContract),escrow:nc(t.escrow),feePayer:typeof t.feePayer==`boolean`?t.feePayer:void 0,feeToken:nc(t.feeToken),operator:nc(t.operator),sessionSnapshot:Ye(t,qe.sessionSnapshot)}:{}}function ic(e,t){if(typeof e==`string`&&c(e,{strict:!1}))return e;throw Error(`tempo session challenge missing ${t}`)}function ac(e){if(typeof e==`string`)return BigInt(e);throw Error(`tempo session challenge missing amount`)}function oc(e){return typeof e==`string`?e:void 0}async function sc(e){let{allowCustomEscrow:t,challenge:n,escrowOverride:r,allowedChainIds:i,getClient:a}=e,o=rc(n);(o.chainId!==void 0||i?.length===0)&&la(i,o.chainId);let s=o.chainId??(i?.length===1?i[0]:void 0),c=await a({chainId:s});ca(c,s);let l=s??c.chain?.id;if(la(i,l),!l)throw Error(`No chainId configured for TIP-1034 session challenge.`);let u=Xo(n,r,t),d=ic(n.request.recipient,`recipient`),f=ic(n.request.currency,`currency`);return{amount:ac(n.request.amount),challenge:n,chainId:l,client:c,escrow:u,feePayer:o.feePayer,feeToken:o.feeToken,key:rs({payee:d,token:f,escrow:u,chainId:l}),operator:o.operator,payee:d,snapshot:o.sessionSnapshot,suggestedDepositRaw:oc(n.request.suggestedDeposit),token:f}}async function cc(e){let{channelId:t,client:n,descriptor:r,expected:i,readChannelState:a=cs}=e,o=To({...r,chainId:i.chainId,escrow:i.escrow});lc({channelId:t,descriptor:r,expectedChannelId:o,payee:i.payee,payer:i.payer,authorizedSigner:i.authorizedSigner,token:i.token});let s=await a(n,o,i.escrow);if(s.deposit===0n)throw Error(`Channel ${o} cannot be reused (closed or not found on-chain).`);if(s.closeRequestedAt!==0)throw Error(`Channel ${o} cannot be reused (pending close request).`);return{channelId:o,state:s}}function lc(e){let{authorizedSigner:t,channelId:n,descriptor:r,expectedChannelId:i,payee:a,payer:o,token:s}=e;if(n&&n.toLowerCase()!==i.toLowerCase())throw Error(`context channelId does not match descriptor`);if(!Qo(r.payee,a))throw Error(`context descriptor payee does not match challenge`);if(!Qo(r.token,s))throw Error(`context descriptor token does not match challenge`);if(!Qo(r.payer,o))throw Error(`context descriptor payer does not match account`);if(!Qo(wo(r),t))throw Error(`context descriptor authorizedSigner does not match account`)}function uc(e){let{context:t,snapshot:n}=e,r=t?.descriptor??n?.descriptor;if(r)return{...t,channelId:t?.channelId??n?.channelId,descriptor:r}}function dc(e){let{context:t,decimals:n,requestAmount:r,snapshot:i,settled:a}=e;if(i)return[BigInt(i.acceptedCumulative),BigInt(i.requiredCumulative),BigInt(i.spent)+r,a].reduce((e,t)=>t>e?t:e,0n);let o=$s(t,n,`cumulativeAmount`);return o===void 0?a+r:o+r}async function fc(e){let{account:t,client:n,readChannelState:r,snapshot:i}=e,a=i.highestVoucher;if(!a)throw Error(`session snapshot is missing its highest signed voucher`);if(a.channelId.toLowerCase()!==i.channelId.toLowerCase())throw Error(`session snapshot voucher channelId does not match snapshot channelId`);let o=BigInt(i.acceptedCumulative),s=BigInt(a.cumulativeAmount),c=BigInt(i.requiredCumulative),l=BigInt(i.deposit),u=BigInt(i.settled),d=BigInt(i.spent);if(s!==o)throw Error(`session snapshot voucher amount does not match acceptedCumulative`);if(d>o)throw Error(`session snapshot spent exceeds acceptedCumulative`);if(u>l)throw Error(`session snapshot settled amount exceeds deposit`);if(!Ho(i.escrow,i.chainId,{channelId:a.channelId,cumulativeAmount:s,signature:a.signature},wo(i.descriptor)))throw Error(`session snapshot highest voucher signature is invalid`);let f=await cc({channelId:i.channelId,client:n,descriptor:i.descriptor,expected:{chainId:i.chainId,escrow:i.escrow,payee:i.descriptor.payee,payer:t.address,authorizedSigner:qo(t),token:i.descriptor.token},readChannelState:r}),p=[o,c,f.state.settled].reduce((e,t)=>t>e?t:e,0n);if(p>f.state.deposit)throw Error(`recovered session cumulative amount exceeds on-chain channel deposit`);return{entry:{channelId:f.channelId,cumulativeAmount:p,deposit:f.state.deposit,descriptor:i.descriptor,escrow:i.escrow,chainId:i.chainId,opened:!0},spent:d}}function pc(e,t){return Qo(e.address,t.payer)?Qo(qo(e),wo(t)):!1}function mc(e){let{account:t,entry:n,context:r,decimals:i,maxDeposit:a,resolved:o}=e;if(Zs(r)){if(!Qs(r))throw Error(`descriptor required for TIP-1034 session action`);return{type:`manual`,account:t,context:r,decimals:i,resolved:o}}if(!n&&r?.channelId&&!r.descriptor)throw Error(`descriptor required to reuse TIP-1034 channel`);let s=uc({context:r,snapshot:o.snapshot});return!n&&s&&pc(t,s.descriptor)?{type:`recover`,account:t,context:s,decimals:i,maxDeposit:a,resolved:o}:n?.opened&&pc(t,n.descriptor)?{type:`voucher`,account:t,entry:n,maxDeposit:a,resolved:o}:{type:`open`,account:t,context:r,maxDeposit:a,resolved:o}}async function hc(e,t,n=!1){switch(e.type){case`open`:return _c(e,t,n);case`recover`:return vc(e,t);case`voucher`:return yc(e,t);case`manual`:return bc(e,t,n)}}async function gc(e,t){if(e)return await ga(t.client,{account:t.account,amountOut:t.amountOut,tokenOut:t.tokenOut,tokenIn:e.tokenIn,slippage:e.slippage})}async function _c(e,t,n){let{account:r,resolved:i}=e,a=Os({contextDepositRaw:e.context?.depositRaw,maxDeposit:e.maxDeposit,requestAmount:i.amount,suggestedDepositRaw:i.suggestedDepositRaw}),o=await ts(i.client,r,{chainId:i.chainId,deposit:a,escrow:i.escrow,feePayer:i.feePayer,feeToken:i.feeToken,initialAmount:i.amount,operator:i.operator,payee:i.payee,prefixCalls:await gc(n,{account:r.address,amountOut:a,client:i.client,tokenOut:i.token}),token:i.token});return await Ks(t,{channelId:o.channelId,cumulativeAmount:i.amount,deposit:a,descriptor:o.descriptor,escrow:i.escrow,chainId:i.chainId,opened:!0}),o}async function vc(e,t){let{account:n,context:r,decimals:i,maxDeposit:a,resolved:o}=e,{descriptor:s}=r,c=await cc({channelId:r.channelId,client:o.client,descriptor:s,expected:{chainId:o.chainId,escrow:o.escrow,payee:o.payee,payer:n.address,authorizedSigner:qo(n),token:o.token}}),l=dc({context:r,decimals:i,requestAmount:o.amount,settled:c.state.settled,snapshot:o.snapshot});if(l>c.state.deposit)throw Error(`recovered voucher amount exceeds on-chain channel deposit`);As(l,a);let u=await $o(o.client,n,s,l,o.chainId,o.escrow);return await Ks(t,{channelId:c.channelId,cumulativeAmount:l,deposit:c.state.deposit,descriptor:s,escrow:o.escrow,chainId:o.chainId,opened:!0}),u}async function yc(e,t){let{account:n,entry:r,resolved:i}=e,a=r.cumulativeAmount+i.amount;As(a,e.maxDeposit);let o=await $o(i.client,n,r.descriptor,a,i.chainId,i.escrow);return r.cumulativeAmount=a,await Ks(t,r),o}async function bc(e,t,n){let{account:r,context:i,decimals:a,resolved:o}=e,{descriptor:s}=i,c=To({...s,chainId:o.chainId,escrow:o.escrow});lc({channelId:i.channelId,descriptor:s,expectedChannelId:c,payee:o.payee,payer:r.address,authorizedSigner:qo(r),token:o.token});let l=await xc({account:r,channelId:c,context:i,decimals:a,descriptor:s,resolved:o},n);return await qs(t,o.key,l),l}async function xc(e,t){switch(e.context.action){case`open`:return Sc(e);case`topUp`:return Cc(e,t);case`voucher`:return wc(e);case`close`:return Tc(e)}}async function Sc(e){let{account:t,channelId:n,context:r,decimals:i,descriptor:a,resolved:o}=e;if(!r.transaction)throw Error(`transaction required for open action`);let s=ec(r,i,`cumulativeAmount`,`open`),c=await $o(o.client,t,a,s,o.chainId,o.escrow);return{action:`open`,type:`transaction`,channelId:n,transaction:r.transaction,signature:c.signature,descriptor:a,cumulativeAmount:s.toString(),authorizedSigner:a.authorizedSigner}}async function Cc(e,t){let{account:n,channelId:r,context:i,decimals:a,descriptor:o,resolved:s}=e,c=ec(i,a,`additionalDeposit`,`topUp`);return i.transaction?{action:`topUp`,type:`transaction`,channelId:r,transaction:i.transaction,descriptor:o,additionalDeposit:c.toString()}:ns(s.client,n,o,c,s.chainId,s.feePayer,s.escrow,await gc(t,{account:n.address,amountOut:c,client:s.client,tokenOut:s.token}),s.feeToken)}function wc(e){let{account:t,context:n,decimals:r,descriptor:i,resolved:a}=e;return $o(a.client,t,i,ec(n,r,`cumulativeAmount`,`voucher`),a.chainId,a.escrow)}function Tc(e){let{account:t,context:n,decimals:r,descriptor:i,resolved:a}=e;return es(a.client,t,i,ec(n,r,`cumulativeAmount`,`close`),a.chainId,a.escrow)}const Ec={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3};function Dc(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)};function s(e,a){if(a.type===`close`){if(n)return;n=!0,i=Ec.CLOSED,r=null}if(a.type===`open`&&(i=Ec.OPEN),a.type===`message`&&r){r.push(a);return}switch(a.type){case`close`:l.onclose?.(a);break;case`error`:l.onerror?.(a);break;case`message`:l.onmessage?.(a);break;case`open`:l.onopen?.(a)}let o=t.get(e);if(o)for(let e of Array.from(o))typeof e.value==`function`?e.value(a):e.value.handleEvent(a),e.once&&o.delete(e)}let c=null,l={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,get onmessage(){return c},set onmessage(e){if(c=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:l}}function Oc(e){return{acceptedCumulative:BigInt(e.acceptedCumulative),deposit:BigInt(e.deposit),requiredCumulative:BigInt(e.requiredCumulative)}}function kc(e){let{amount:t,assertVoucherWithinLocalLimit:n,channel:r,decimals:i,lastChallenge:a,lastUrl:o}=e;if(!r?.opened)throw Error(`Cannot top up session: no open channel.`);if(!a)throw Error(`Cannot top up session: no challenge available. Make a request first.`);if(!o)throw Error(`Cannot top up session: no URL available. Call fetch(), sse(), or ws() first.`);let s=Ds(t,i);if(s<=0n)throw Error(`Top-up amount must be greater than zero.`);return n(r.cumulativeAmount+s),{additionalDeposit:s,challenge:a,channelId:r.channelId,input:o}}function Ac(e){let{additionalDeposit:t,channel:n,channelId:r,challengeId:i,currentState:a,knownDeposit:o,receipt:s,spent:c}=e;if(n?.channelId!==r)return;let l=o!==void 0&&o>n.deposit?o:n.deposit,u={...n,deposit:l+t};return s?{channel:u,state:Rs(s,u)}:i?{channel:u,state:Fs({challengeId:i,entry:u,spent:c.toString(),units:a.status===`active`?a.units:0})}:{channel:u}}async function jc(e){if(e.event.channelId!==e.expectedChannelId)return{status:`ignored`,reason:`channel-mismatch`};let t=Oc(e.event);e.assertVoucherWithinLocalLimit(t.requiredCumulative),await e.topUpIfNeeded({challenge:e.challenge,input:e.input,channelId:e.expectedChannelId,deposit:t.deposit,requiredCumulative:t.requiredCumulative,...e.signal?{signal:e.signal}:{}});let n=e.getChannel();if(!n||n.channelId!==e.expectedChannelId)return{status:`ignored`,reason:`missing-channel`};let r=n.cumulativeAmount>t.requiredCumulative?n.cumulativeAmount:io(t.requiredCumulative);return{status:`ready`,context:{action:`voucher`,channelId:e.expectedChannelId,descriptor:n.descriptor,cumulativeAmountRaw:r.toString()}}}function Mc(e){return e.method===Ge.tempo&&e.intent===Ke.session}function Nc(e){return Mc(e)&&Ye(e.request.methodDetails,qe.sessionProtocol)===Je.v2}function Pc(e){return Ye(e.request.methodDetails,qe.sessionSnapshot)}function Fc(e,t,n){let r=e instanceof Request?e.headers:void 0;return{...t,headers:{...Q(r),...Q(t?.headers),[R.authorization]:n}}}function Ic(e){try{let t=typeof location>`u`?void 0:location.href,n=e instanceof Request?new URL(e.url):e instanceof URL?new URL(e):new URL(String(e),t);return n.hash=``,n}catch{return e}}function Lc(e){let t=new URL(e.toString());return t.protocol===`ws:`&&(t.protocol=`http:`),t.protocol===`wss:`&&(t.protocol=`https:`),t}async function Rc(e){let t=await e.text().catch(()=>``);if(!t)return``;if(!e.headers.get(`Content-Type`)?.includes(`application/problem+json`))return t;try{return JSON.parse(t).detail??t}catch{return t}}async function zc(e){let{channel:t,channelId:n}=e;if(!t?.descriptor||t.channelId!==n)throw Error(`Cannot top up session: no local channel descriptor available.`);let r=await Bc({challenge:e.challenge,context:{action:`topUp`,channelId:n,descriptor:t.descriptor,additionalDepositRaw:e.additionalDeposit.toString()},createSessionCredential:e.createSessionCredential,fetch:e.fetch,input:e.input,signal:e.signal});if(!r.ok)throw Error(`Top-up POST failed with status ${r.status}`);let i=r.headers.get(R.paymentReceipt);return i?ho(i):void 0}async function Bc(e){let t=async t=>e.fetch(Ic(e.input),{method:`POST`,...e.signal?{signal:e.signal}:{},headers:{[R.authorization]:await e.createSessionCredential(t,e.context)}}),n=await t(e.challenge);if(n.status!==402)return n;let r=mt(n).find(Nc);return r?t(r):n}async function Vc(e){let t=Hc({channel:e.getChannel(),response:e.response});if(!t)return;let{channel:n,challenge:r,snapshot:i}=t;e.setChallenge(r);let a=BigInt(i.requiredCumulative),o=n.cumulativeAmount;await e.topUpIfNeeded({challenge:r,input:e.input,channelId:i.channelId,deposit:BigInt(i.deposit),requiredCumulative:a,signal:e.init?.signal??(e.input instanceof Request?e.input.signal:void 0)});let s=e.getChannel();if(!s?.descriptor||s.channelId!==i.channelId)return;let c=s.cumulativeAmount>a?s.cumulativeAmount:a,l=()=>e.restoreCumulative(i.channelId,o),u;try{let t=await e.createSessionCredential(r,{action:`voucher`,channelId:i.channelId,descriptor:s.descriptor,cumulativeAmountRaw:c.toString()});u=await e.fetch(e.input,Fc(e.input,e.init,t))}catch(e){throw await l(),e}return!u.ok&&!u.headers.get(R.paymentReceipt)&&await l(),u}function Hc(e){let t=mt(e.response).find(Nc);if(!t)return;let n=Pc(t);if(!n)return;let{channel:r}=e;if(!(!r?.descriptor||r.channelId!==n.channelId))return{channel:r,challenge:t,snapshot:n}}async function Uc(e){if(!e.lastUrl)throw Error(`Cannot close session: no URL available. This usually means close() was called on a SessionManager instance that was recreated after the session was opened. Use the same SessionManager instance that opened the session, or call fetch()/sse() before close().`);let t=e.target.challenge,n=e.signedCloseAmount,r=async(r,i=!1)=>{t=r,n=(i?e.resolveSignedCloseAmount?.(r):void 0)??e.signedCloseAmount;let a=await e.createSessionCredential(r,{action:`close`,channelId:e.target.channelId,descriptor:e.target.channel.descriptor,cumulativeAmountRaw:n});return e.fetch(e.lastUrl,{method:`POST`,headers:{[R.authorization]:a}})},i=await r(e.target.challenge);if(i.status===402){let t=mt(i).find(Nc);t&&(e.setChallenge?.(t),i=await r(t,!0))}if(!i.ok){let e=await Rc(i),t=i.headers.get(R.wwwAuthenticate)??``;throw Error(`Close request failed with status ${i.status}${e?`: ${e}`:``}${t?` [${R.wwwAuthenticate}: ${t}]`:``}`)}let a=i.headers.get(R.paymentReceipt);if(!a)return;let o=ho(a);if(!o.txHash||!E.validate(o.txHash,{strict:!0})||E.size(o.txHash)!==32||!Ps({challengeId:t.id,channelId:e.target.channelId,expectedCloseAmount:n,minimumSpent:e.getMinimumSpent?.()??0n,receipt:o}))throw Error(`Session close response included a mismatched payment receipt.`);return o}async function Wc(e,t,n){let{onReceipt:r,signal:i,...a}=t??{},o=i??(e instanceof Request?e.signal:void 0),s={...a,headers:{...Q(a.headers),Accept:`text/event-stream`},...o?{signal:o}:{}},c=await n.doFetch(e,s);return!go(c)&&n.getChannel()?.opened&&(c=await n.doFetch(e,s)),Gc(e,c,{onReceipt:r,signal:o},n)}function Gc(e,t,n,r){if(!go(t))throw Error(`SSE response is not an event stream.`);if(!t.body)throw Error(`Response has no body.`);let i=r.getChallenge();return Kc({onNeedVoucher:t=>Zc({challenge:i,driver:r,input:e,signal:n?.signal},t),onReceipt(e){r.acceptReceipt(e),n?.onReceipt?.(e)},response:t,signal:n?.signal})}async function*Kc(e){for await(let t of qc(e))t.data!==void 0&&(yield t.data)}async function*qc(e){if(!e.response.body)throw Error(`Response has no body.`);let t=e.response.body.getReader(),n=new TextDecoder,r=``,i=!1,a=()=>{t.cancel(e.signal?.reason).catch(()=>void 0)};e.signal?.addEventListener(`abort`,a,{once:!0}),e.signal?.aborted&&a();try{for(;!e.signal?.aborted;){let{done:a,value:o}=await t.read();for(a?(i=!0,r+=n.decode()):r+=n.decode(o,{stream:!0});;){let t=Jc(r,a);if(!t)break;let n=t.index+t.length,i=r.slice(0,t.index),o=r.slice(0,n);if(r=r.slice(n),!i.trim())continue;let s=_o(i.replace(/\r\n|\r/g,`
5
+ `));if(!s){yield{raw:o};continue}switch(s.type){case`message`:yield{data:s.data,raw:o};break;case`payment-need-voucher`:await e.onNeedVoucher(s.data,e.signal);break;case`payment-receipt`:e.onReceipt(s.data)}}if(a)break}}finally{e.signal?.removeEventListener(`abort`,a),i||await t.cancel().catch(()=>void 0),t.releaseLock()}}function Jc(e,t){for(let n=0;n<e.length;n++){let r=Yc(e,n,t);if(!r)continue;let i=Yc(e,n+r,t);if(i)return{index:n,length:r+i};n+=r-1}}function Yc(e,t,n){return e[t]===`
6
6
  `?1:e[t]===`\r`?e[t+1]===`
7
- `?2:t+1===e.length&&!n?0:1:0}function Rc(e){let t=new AbortController,n=()=>t.abort(e.signal?.reason);e.signal?.addEventListener(`abort`,n,{once:!0}),e.signal?.aborted&&n();let r=Fc({...e,signal:t.signal}),i=new TextEncoder,a=new Headers(e.response.headers);a.delete(`content-length`);let o=()=>e.signal?.removeEventListener(`abort`,n),s=new Response(new ReadableStream({async pull(e){try{let t=await r.next();if(t.done)return o(),e.close();e.enqueue(i.encode(t.value.raw))}catch(e){throw o(),e}},async cancel(){o(),t.abort(),await r.return(void 0)}}),{headers:a,status:e.response.status,statusText:e.response.statusText});for(let t of[`redirected`,`type`,`url`])Object.defineProperty(s,t,{configurable:!0,get:()=>e.response[t]});return s}async function zc(e,t){let n=e.driver.getChannel();if(!n||!e.challenge)return;let r=await yc({assertVoucherWithinLocalLimit:e.driver.assertVoucherWithinLocalLimit,challenge:e.challenge,event:t,expectedChannelId:n.channelId,getChannel:e.driver.getChannel,input:e.input,signal:e.signal,topUpIfNeeded:e.driver.topUpIfNeeded});if(r.status!==`ready`)return;let i=await Oc({challenge:e.challenge,context:r.context,createSessionCredential:e.driver.createSessionCredential,fetch:e.driver.fetch,input:e.input,signal:e.signal});if(!i.ok)throw Error(`Voucher POST failed with status ${i.status}`)}async function Bc(e){let t=new URL(e.input.toString()),n=Tc(t);e.onProbeUrl?.(n);let r=await e.fetch(n,{...e.probeInit,...e.signal?{signal:e.signal}:{}});if(r.status!==402)throw Error(`Expected a 402 payment challenge from ${n}, received ${r.status} instead.`);let i=pt(r).find(xc);if(!i)throw Error(`No payment challenge received from HTTP endpoint for this WebSocket URL. The server may not require payment or did not advertise a challenge.`);return{challenge:i,httpUrl:n,wsUrl:t}}async function Vc(e){e.signal?.throwIfAborted();let t=await Bc(e);e.signal?.throwIfAborted();let n=await e.createSessionCredential(t.challenge,{});return e.signal?.throwIfAborted(),{...t,credential:n}}function Hc(e){let{challenge:t,credential:n,socket:r}=e;return{challenge:t,channelId:St(n).payload.channelId,closeReadyReceipt:null,deliveredChunks:0n,expectedCloseAmount:null,socket:r,tickCost:$a(t)}}function Uc(e){let{challengeId:t,channelId:n,receipt:r}=e;return r.challengeId===t&&r.channelId===n}function Wc(e){if(!Uc(e))return`received mismatched payment-close-ready frame`;let t=Ga(e.receipt.spent);if(t===void 0)return`received invalid payment-close-ready spend`;if(t>e.cumulativeAmount)return`received payment-close-ready beyond local voucher state`}function Gc(e){let{challengeId:t,channelId:n,expectedCloseAmount:r,receipt:i}=e;if(!Uc(e))return`received mismatched payment-receipt frame`;if(r!==null&&i.txHash&&!Ss({challengeId:t,channelId:n,expectedCloseAmount:r,minimumSpent:BigInt(r),receipt:i}))return`received mismatched payment-close receipt frame`}async function Kc(e){let{challenge:t,credential:n,options:r,WebSocket:i,wsUrl:a}=e,o=r?.signal;o?.throwIfAborted();let s=new i(a,r?.protocols),c=Hc({challenge:t,credential:n,socket:s});e.setSocketSession(c);let l=hc(s),u=t=>{e.rejectReceipt(Error(t)),e.rejectCloseReady(Error(t)),(s.readyState===mc.CONNECTING||s.readyState===mc.OPEN)&&s.close(3008,t)},d=()=>{e.rejectReceipt(Error(`WebSocket payment flow aborted.`)),e.rejectCloseReady(Error(`WebSocket payment flow aborted.`)),s.close()};s.addEventListener(`close`,t=>{o?.removeEventListener(`abort`,d),c.socket=null,c.expectedCloseAmount=null,e.rejectReceipt(Error(`WebSocket closed before the payment flow completed.`)),e.rejectCloseReady(Error(`WebSocket closed before the payment flow completed.`)),l.emit(`close`,{code:t.code??1e3,reason:t.reason??``,type:`close`,wasClean:!0})}),s.addEventListener(`error`,()=>{l.emit(`error`,{type:`error`})}),s.addEventListener(`message`,async t=>{let n=typeof t.data==`string`?t.data:void 0;n&&await Jc({driver:e,failSocketFlow:u,managedEmit:l.emit,message:n,rawSocket:s,socketState:c})}),o?.addEventListener(`abort`,d,{once:!0});try{await qc(s,l.emit,a,o),o?.throwIfAborted()}catch(e){throw o?.removeEventListener(`abort`,d),s.close(),e}return s.send(oo(n)),await e.waitForReceipt(),l.socket}function qc(e,t,n,r){return new Promise((i,a)=>{let o=()=>{e.removeEventListener(`open`,s),e.removeEventListener(`error`,c),e.removeEventListener(`close`,c),r?.removeEventListener(`abort`,l)},s=()=>{o(),t(`open`,{type:`open`}),i()},c=()=>{o(),a(Error(`WebSocket connection to ${n} failed to open.`))},l=()=>{o(),a(r?.reason)};e.addEventListener(`open`,s,{once:!0}),e.addEventListener(`error`,c,{once:!0}),e.addEventListener(`close`,c,{once:!0}),r?.addEventListener(`abort`,l,{once:!0}),r?.aborted&&l()})}async function Jc(e){let t=co(e.message);if(!t){e.managedEmit(`message`,{data:e.message,type:`message`});return}switch(t.mpp){case`authorization`:return;case`message`:e.socketState.deliveredChunks+=1n,e.managedEmit(`message`,{data:t.data,type:`message`});return;case`payment-close-ready`:Yc(e,t.data);return;case`payment-error`:e.driver.rejectReceipt(Error(t.message)),e.driver.rejectCloseReady(Error(t.message));return;case`payment-need-voucher`:await Xc(e,t.data);return;case`payment-receipt`:Zc(e,t.data);return}}function Yc(e,t){let n=e.driver.getChannel()?.cumulativeAmount??0n,r=Wc({challengeId:e.driver.challenge.id,channelId:e.socketState.channelId,cumulativeAmount:n,receipt:t});if(r){e.failSocketFlow(r);return}e.driver.acceptReceipt(t),e.driver.options?.onReceipt?.(t),e.driver.settleCloseReady(t),e.managedEmit(`close`,{code:1e3,reason:`stream complete`,type:`close`,wasClean:!0})}async function Xc(e,t){try{let n=e.driver.challenge;n.expires&&new Date(n.expires).getTime()<=Date.now()+5e3&&(n=await e.driver.refreshChallenge(),e.driver.challenge=n,e.socketState.challenge=n);let r=await yc({assertVoucherWithinLocalLimit:e.driver.assertVoucherWithinLocalLimit,challenge:n,event:t,expectedChannelId:e.socketState.channelId,getChannel:e.driver.getChannel,input:e.driver.httpUrl,signal:e.driver.options?.signal,topUpIfNeeded:e.driver.topUpIfNeeded});if(r.status===`ignored`){e.failSocketFlow(r.reason===`channel-mismatch`?`received mismatched payment-need-voucher frame`:`cannot create voucher: no active channel`);return}let i=await e.driver.createSessionCredential(n,r.context);e.rawSocket.send(oo(i))}catch(t){e.failSocketFlow(t instanceof Error?t.message:`failed to create websocket voucher`)}}function Zc(e,t){let n=Gc({challengeId:e.driver.challenge.id,channelId:e.socketState.channelId,expectedCloseAmount:e.socketState.expectedCloseAmount,receipt:t});if(n){e.failSocketFlow(n);return}e.driver.acceptReceipt(t),e.driver.options?.onReceipt?.(t),e.driver.settleReceipt(t)}const Qc=new WeakMap;async function $c(e,t){let n=Qc.get(e)??new Map;Qc.set(e,n);let r=n.get(t),i,a=new Promise(e=>{i=e});return n.set(t,a),await r,()=>{i(),n.get(t)===a&&n.delete(t)}}function el(e,t){try{return t?.channelId.toLowerCase()===e.channelId.toLowerCase()&&BigInt(t.acceptedCumulative)===e.cumulativeAmount}catch{return!1}}function tl(e,t,n){try{let r=e.response?.headers.get(R.paymentReceipt);if(r){let e=no(r);if(e.challengeId===t.id&&el(n,e))return!0}}catch{}return e.challenges?.some(e=>xc(e)?el(n,Sc(e)):!1)??!1}function nl(e={}){let{account:t,allowCustomEscrow:n=!1,autoSwap:r,channelStore:i,decimals:a=6,escrow:o,allowedChainIds:s,getClient:c,maxDeposit:l,topUpAmount:u,onChannelUpdate:f,resolveAccount:p}=e,m=Qi({chain:b,getClient:c,rpcUrl:Hn}),h=Ji({account:t}),g=l===void 0?void 0:d(l,a),_=u===void 0?void 0:d(u,a),v=i??qo(),y={store:v,notifyUpdate:e=>f?.(e)},x=async(e,t,n)=>{let r=h(e.client,t),i=t?.action?t.descriptor:n?.descriptor??Qs({context:t,snapshot:e.snapshot})?.descriptor;return await p?.({account:r,chainId:e.chainId,operation:{kind:`authorizePaymentChannel`,...i?{authority:fo(i)}:{}}})??r},S=async(e,t,n)=>nc({account:await x(e,t,n),entry:n,context:t,decimals:a,maxDeposit:g,resolved:e}),C=Mt(za,{canHandleChallenge:({challenge:e})=>xc(e),context:Rs,async createCredential(e){let{challenge:t,context:i}=e,a=await Ys({allowCustomEscrow:n,challenge:t,escrowOverride:o,allowedChainIds:s,getClient:m}),c=li(e),l=()=>{};try{let e=!zs(i)&&i?.descriptor===void 0;e&&(l=await $c(v,a.key),c&&(await v.get(a.key))?.opened&&await c.prepare());let n=await v.get(a.key),o=await S(a,i,n);if(!e&&c&&o.type===`open`){l=await $c(v,a.key);let e=await v.get(a.key);e?.channelId!==n?.channelId&&(n=e,n?.opened&&(await c.prepare(),n=await v.get(a.key)),o=await S(a,i,n))}let s,u=c&&o.type===`open`?{store:{get:e=>v.get(e),async set(e){s=e},delete:e=>v.delete(e)},notifyUpdate(){}}:y,d=await zo(t,await rc(o,u,ca(i?.autoSwap??r,oa)),a.chainId,o.account);if(c&&s){let e=s;c.settle=async n=>{let r=n.status===`accepted`||tl(n,t,e);if(!r&&n.status===`pending`)return!1;try{if(r){let t=await v.get(a.key);(!t?.opened||t.channelId.toLowerCase()!==e.channelId.toLowerCase())&&(await v.set(e),y.notifyUpdate(e))}return!0}finally{l()}}}else l();return d}catch(e){throw l(),e}}}),w=async({challenge:e,channel:t,deposit:n,fetch:r,input:i,requiredCumulative:a,signal:o})=>{let s=t.deposit>n?t.deposit:n,c=_s({deposit:s,maxDeposit:g,requiredCumulative:a,suggestedDeposit:e.request.suggestedDeposit===void 0?void 0:BigInt(e.request.suggestedDeposit),topUpAmount:_});c>0n&&await Dc({additionalDeposit:c,challenge:e,channel:t,channelId:t.channelId,createSessionCredential:(e,t)=>C.createCredential({challenge:e,context:t}),fetch:r,input:i,signal:o});let l=s+c;if(l===t.deposit)return;let u=await v.get(Ko(t)),d=u?.channelId.toLowerCase()===t.channelId.toLowerCase()?u:t,f={...d,deposit:d.deposit>l?d.deposit:l};await v.set(f),y.notifyUpdate(f)};return ti(C,async({challenge:e,context:t,fetch:r,input:i,signal:a})=>{if(!xc(e))return;let c=t===void 0?void 0:Rs.parse(t);if(zs(c))return;let l=await Ys({allowCustomEscrow:n,challenge:e,escrowOverride:o,allowedChainIds:s,getClient:m}),u=await v.get(l.key);if(!u?.opened)return;let d=l.snapshot?.channelId.toLowerCase()===u.channelId.toLowerCase()?l.snapshot:void 0,f=u.cumulativeAmount+$a(e),p=d?BigInt(d.requiredCumulative):f,h=p>f?p:f,g=d?BigInt(d.deposit):u.deposit,_=g>u.deposit?g:u.deposit;h<=_&&_===u.deposit||!tc(await x(l,c,u),u.descriptor)||await w({challenge:e,channel:u,deposit:_,fetch:r,input:i,requiredCumulative:h,signal:a})}),oi(C,async({challenge:e,credential:t,fetch:r,headers:i,input:a,refetch:c,response:l,signal:u})=>{if(!xc(e))return l;if(!ro(l))return Qa(St(t).payload).action===`open`&&i.get(`accept`)?.toLowerCase().includes(`text/event-stream`)?await c?.()??l:l;let d=(await Ys({allowCustomEscrow:n,challenge:e,escrowOverride:o,allowedChainIds:s,getClient:m})).key,f=await v.get(d),p={assertVoucherWithinLocalLimit:e=>vs(e,g),createSessionCredential:(e,t)=>C.createCredential({challenge:e,context:t}),fetch:r,getChannel:()=>f??null,async topUpIfNeeded({deposit:t,requiredCumulative:n,signal:i}){f&&await w({challenge:e,channel:f,deposit:f.deposit>t?f.deposit:t,fetch:r,input:a,requiredCumulative:n,signal:i})}};return Rc({onNeedVoucher:(t,n)=>zc({challenge:e,driver:p,input:a,signal:n},t),onReceipt(){},response:l,signal:u})})}const rl=new WeakMap;function il(e,t){rl.set(e,t)}function al(e){let t=null;return{wait(n=()=>!0){if(t)throw Error(`${e} wait already in progress`);return new Promise((e,r)=>{t={predicate:n,resolve:e,reject:r}})},settle(e){if(!t||!t.predicate(e))return;let n=t;t=null,n.resolve(e)},reject(e){if(!t)return;let n=t;t=null,n.reject(e)}}}function ol(e){let t=al(`close-ready`),n=al(`receipt`);return{waitForReceipt(e){return n.wait(e)},waitForCloseReady(){let n=e.getSocketSession()?.closeReadyReceipt;return n?Promise.resolve(n):t.wait()},settleReceipt(e){n.settle(e)},settleCloseReady(n){let r=e.getSocketSession();r&&r.challenge.id===n.challengeId&&r.channelId===n.channelId&&(r.closeReadyReceipt=n),t.settle(n)},rejectReceipt(e){n.reject(e)},rejectCloseReady(e){t.reject(e)}}}function sl(e){return e.method===We.tempo&&e.intent===Ge.charge}function cl(e){if(!sl(e)||typeof e.request.amount!=`string`)return!1;try{return BigInt(e.request.amount)===0n}catch{return!1}}function ll(e,t,n){if(!n)return t;let r={...Q(e instanceof Request?e.headers:void 0),...Q(t?.headers)};return Object.keys(r).some(e=>e.toLowerCase()===R.paymentSession.toLowerCase())?t:{...t,headers:{...r,[R.paymentSession]:n}}}function ul(e,t){return e===void 0?t:{...Rs.parse(e),...t}}function dl(e){let t=e.decimals??6,n=e.webSocket??globalThis.WebSocket;return{decimals:t,fetch:e.fetch??globalThis.fetch.bind(globalThis),maxVoucherCumulative:e.maxDeposit===void 0?null:d(e.maxDeposit,t),topUpAmount:e.topUpAmount===void 0?null:d(e.topUpAmount,t),WebSocket:n}}function fl(e){let t=e.client?.chain?.id;(t!==void 0||e.allowedChainIds?.length===0)&&ea(e.allowedChainIds,t);let n=e.allowCustomEscrow??!1,r=dl(e),i=Qi({chain:b,getClient:e.client?()=>e.client:e.getClient,rpcUrl:Hn}),a=Ji({account:e.account}),o=ws(),s=e.credentialContext===void 0?void 0:ul(e.credentialContext,{}),c=ol({getSocketSession:()=>o.socketSession}),l=e.channelStore??qo(),u=new Set,d;async function f(e){let t=await l.get(e);if(t?.opened&&!u.has(t.channelId))return t}let p={async get(e){let t=await f(e);return t&&d&&(d.seenExisting.add(e),!d.committed&&!d.created.has(e)&&(d.resumed??=t)),t},async set(e){let t=Ko(e);e.opened&&u.delete(e.channelId),d?.trackCreates&&!d.seenExisting.has(t)&&d.created.set(t,e),await l.set(e)},delete:e=>l.delete(e)};async function m(e){let t=Ko(e);u.add(e.channelId),d?.seenExisting.delete(t),d?.resumed===e&&(d.resumed=void 0),await Promise.resolve(l.delete(t)).catch(()=>void 0)}async function h(){let e=d;if(e?.created.size){for(let[t,n]of e.created)u.add(n.channelId),await Promise.resolve(l.delete(t)).catch(()=>void 0);e.created.clear(),await re(e.committed??e.previous)}}function g(e){let t=Je(e.request.methodDetails,Ke.sessionSnapshot);if(typeof t?.channelId!=`string`)return!1;let n=d;if(!n?.created.size||!o.channel)return!1;for(let[e,r]of n.created)if(r.channelId.toLowerCase()===t.channelId.toLowerCase()&&o.channel.channelId.toLowerCase()===t.channelId.toLowerCase())return n.created.delete(e),n.committed=ks({channel:o.channel,spent:o.spent,state:o.state}),!0;return!1}function _(e){return cs(o,e)}function v(){let e=o.state.status===`active`?o.state:d?.committed?.state??d?.previous.state;return e?.status===`active`?e.units:0}function y(e){let t=d,n=t?.committed?.channel?.entry??t?.resumed;!t||n?.channelId.toLowerCase()!==e.channelId.toLowerCase()||e.deposit<=n.deposit||(t.resumed=void 0,t.committed=ks({channel:o.channel,spent:o.spent,state:o.state}))}let x=nl({account:e.account,allowCustomEscrow:n,autoSwap:e.autoSwap,getClient:e.client?()=>e.client:e.getClient,resolveAccount:e.resolveAccount,escrow:e.escrow,allowedChainIds:e.allowedChainIds,decimals:r.decimals,maxDeposit:e.maxDeposit,topUpAmount:e.topUpAmount,channelStore:p,onChannelUpdate(e){e.channelId!==o.channel?.channelId&&(o.spent=0n),o.channel=e,o.lastChallenge&&_({type:`activated`,challengeId:o.lastChallenge.id,entry:e,spent:o.spent.toString(),units:v()}),y(e)}});si(x);let S=Ha({allowedChainIds:e.allowedChainIds,account:e.account,getClient:e.client?()=>e.client:e.getClient,resolveAccount:e.resolveAccount}),C=mi({fetch:r.fetch,methods:[x],onChallenge:async(e,t)=>{if(!bc(e))return;let n=d,r=n&&n.challengesReceived>0&&e.id===o.lastChallenge?.id,i=r&&at(e)===at(o.lastChallenge);n&&n.challengesReceived++,!i&&(g(e)||(n?.created.size?await h():r&&await re(n.committed??n.previous)),o.lastChallenge=e,_({type:`challengeReceived`,challengeId:e.id}))}});function w(e,t){return x.createCredential({challenge:e,context:ul(s,t)})}function T(e){Ts({maxVoucherCumulative:r.maxVoucherCumulative,receipt:e,runtime:o})}function E(e=o.state.status===`active`?o.state.units:0){!o.channel||!o.lastChallenge||o.state.status!==`active`&&o.state.status!==`withdrawable`&&o.state.status!==`closeRequested`&&_({type:`activated`,challengeId:o.lastChallenge.id,entry:o.channel,spent:o.spent.toString(),units:e})}async function D(t){let n=t.headers.get(R.paymentSessionSnapshot);if(!n)return;let r=is(n);ea(e.allowedChainIds,r.chainId);let s=await i({chainId:r.chainId});$i(s,r.chainId);let c=a(s),{entry:l,spent:u}=await ec({account:await e.resolveAccount?.({account:c,chainId:r.chainId,operation:{authority:fo(r.descriptor),kind:`authorizePaymentChannel`}})??c,client:s,snapshot:r});return N(l.cumulativeAmount),await Promise.resolve(p.set(l)).catch(()=>void 0),o.channel=l,o.spent=u,l}async function O(t,n){if(!e.bootstrap||o.channel?.opened)return;let i=t instanceof Request?t.headers:void 0,{body:a,method:s,...c}=n??{},l=t instanceof Request?t.url:t,u={...c,method:`HEAD`,headers:{...Q(i),...Q(n?.headers),[R.acceptPayment]:`${We.tempo}/${Ge.charge}`}};try{let e=await r.fetch(l,u);if(e.status!==402)return await D(e);let t=pt(e).find(sl);if(!t||!cl(t))return;let n=await S.createCredential({challenge:t,context:{}}),i=await r.fetch(l,{...u,headers:{...Q(u.headers),[R.authorization]:n}});return i.ok?await D(i):void 0}catch{return}}function k(e,t){let n=o.socketSession;return Ds({challengeId:e.id,channelId:t,closeReadyReceipt:n?.closeReadyReceipt,cumulativeAmount:o.channel?.channelId===t?o.channel.cumulativeAmount:0n,deliveredChunks:n?.deliveredChunks,socketChallengeId:n?.challenge.id,socketChannelId:n?.channelId,spent:o.spent,tickCost:n?.tickCost})}function A(e,t){let n=Sc(t);if(!n)return;if(po({...n.descriptor,chainId:n.chainId,escrow:n.escrow}).toLowerCase()!==n.channelId.toLowerCase())throw Error(`close snapshot descriptor does not match its channel ID`);if(n.channelId.toLowerCase()!==e.channelId.toLowerCase())throw Error(`close snapshot channel ID does not match local session`);if(n.chainId!==e.chainId||n.escrow.toLowerCase()!==e.escrow.toLowerCase())throw Error(`close snapshot payment scope does not match local session`);let r=BigInt(n.acceptedCumulative),i=BigInt(n.spent);if(r<0n||i<0n)throw Error(`close snapshot amounts must not be negative`);if(i>r)throw Error(`close snapshot spent exceeds accepted cumulative amount`);if(r>e.cumulativeAmount)throw Error(`close snapshot accepted cumulative exceeds local voucher state`);return{acceptedCumulative:r,spent:i}}function j(e,t){let n=A(e.channel,t);if(!n)return;let{acceptedCumulative:r,spent:i}=n;if(o.spent>r)throw Error(`close snapshot accepted cumulative is below locally confirmed spend`);return i>o.spent&&(o.spent=i),n}function M(e,t=e.challenge,n=!1){let r=(n?j(e,t):A(e.channel,t))?.acceptedCumulative??k(t,e.channelId);if(r>e.channel.cumulativeAmount)throw Error(`fallback close amount exceeds local voucher state`);return N(r),r.toString()}function N(e){fs({cumulativeAmount:e,maxVoucherCumulative:r.maxVoucherCumulative})}async function ee(e){let{knownDeposit:t,...n}=e,i=await Dc({...n,channel:o.channel,createSessionCredential:w,fetch:r.fetch});T(i);let a=vc({additionalDeposit:e.additionalDeposit,channel:o.channel,channelId:e.channelId,challengeId:o.lastChallenge?.id,currentState:o.state,knownDeposit:t,receipt:i,spent:o.spent});return a?.channel&&o.lastChallenge&&(await p.set(a.channel),_({type:`activated`,challengeId:o.lastChallenge.id,entry:a.channel,spent:o.spent.toString(),units:v()}),y(a.channel)),i}async function te(e){let t=o.channel?.channelId===e.channelId?o.channel.deposit:0n,n=t>e.deposit?t:e.deposit,i=_s({deposit:n,maxDeposit:r.maxVoucherCumulative,requiredCumulative:e.requiredCumulative,suggestedDeposit:e.challenge.request.suggestedDeposit===void 0?void 0:BigInt(e.challenge.request.suggestedDeposit),topUpAmount:r.topUpAmount});i!==0n&&await ee({challenge:e.challenge,input:e.input,channelId:e.channelId,additionalDeposit:i,knownDeposit:n,signal:e.signal})}async function ne(e,t){let n=Os({channel:o.channel,channelId:e,challengeId:o.lastChallenge?.id,cumulativeAmount:t,spent:o.spent,state:o.state});n&&o.channel&&(_({type:`activated`,challengeId:n.challengeId,entry:o.channel,spent:n.spent,units:n.units}),await l.set(o.channel))}async function re(e){let t=As(e,o.channel);o.channel=t.channel,o.spent=t.spent,o.state=t.state,o.channel?.opened&&await l.set(o.channel)}function ie(e){let t=e.headers.get(R.paymentReceipt),n=t?no(t):null;return T(n),Object.assign(e,{receipt:n,challenge:o.lastChallenge,channelId:o.channel?.channelId??null,cumulative:o.channel?.cumulativeAmount??0n})}async function ae(e,t){if(d)throw Error(`SessionManager: a request is already in flight; concurrent requests on one manager are not supported`);o.lastUrl=e;let n=ks({channel:o.channel,spent:o.spent,state:o.state}),i={challengesReceived:0,committed:void 0,created:new Map,previous:n,seenExisting:new Set,resumed:void 0,trackCreates:!1};d=i;try{await O(e,t),i.trackCreates=!0;let a=ll(e,t,o.channel?.opened?o.channel.channelId:void 0);s&&(a={...a,context:s});let c=!n.channel?.opened;async function l(){let n=i.resumed;return!c||!n?!1:(c=!1,await m(n),a=ll(e,t,void 0),!0)}for(;;){let t;try{t=await C(e,a)}catch(e){if(i.created.size?await h():await re(i.committed??n),await l())continue;throw e}let s=ie(t),c=!1;if(s.status===402){let t=await kc({input:e,init:a,response:s,createSessionCredential:w,fetch:r.fetch,getChannel:()=>o.channel,restoreCumulative:ne,setChallenge(e){o.lastChallenge=e},topUpIfNeeded:te});t&&(c=!0,s=ie(t))}if(!c&&!s.ok&&!s.receipt){if(i.created.size?await h():await re(i.committed??n),await l())continue;return s}return s}}finally{d=void 0}}async function P(e){let t=await jc({createSessionCredential:w,fetch:r.fetch,getMinimumSpent:()=>o.spent,lastUrl:o.lastUrl,resolveSignedCloseAmount:t=>M(e,t,!0),signedCloseAmount:M(e),setChallenge(e){o.lastChallenge=e},target:e});return t&&(E(),_({type:`closeStarted`}),_({type:`closed`,receipt:t})),t}let oe={createSessionCredential:w,doFetch:ae,fetch:r.fetch,getChannel:()=>o.channel,getChallenge:()=>o.lastChallenge,assertVoucherWithinLocalLimit:N,acceptReceipt(e){T(e)},topUpIfNeeded:te},se={get channelId(){return o.channel?.channelId},get cumulative(){return o.channel?.cumulativeAmount??0n},get opened(){return o.channel?.opened??!1},get state(){return o.state},fetch:ae,async topUp(e){let t=_c({amount:e,assertVoucherWithinLocalLimit:N,channel:o.channel,decimals:r.decimals,lastChallenge:o.lastChallenge,lastUrl:o.lastUrl});return ee({additionalDeposit:t.additionalDeposit,challenge:t.challenge,channelId:t.channelId,input:t.input})},async sse(e,t){return Mc(e,t,oe)},async ws(e,t){if(!r.WebSocket)throw Error("No WebSocket implementation available. Pass `webSocket` to sessionManager() in this runtime.");let n=Tc(e),i=t?.signal?{signal:t.signal}:void 0;await O(n,i);let a=o.channel?.opened?o.channel.channelId:void 0,{challenge:s,credential:l,httpUrl:u,wsUrl:d}=await Vc({async createSessionCredential(e,i){return o.lastChallenge=e,await ri(x,{challenge:e,context:i,fetch:r.fetch,input:n,signal:t?.signal}),w(e,i)},fetch:r.fetch,input:e,onProbeUrl(e){o.lastUrl=e.toString()},probeInit:ll(n,i,a),signal:t?.signal});return o.lastChallenge=s,Kc({challenge:s,credential:l,httpUrl:u,WebSocket:r.WebSocket,wsUrl:d,options:t,createSessionCredential:w,getChannel:()=>o.channel,setSocketSession(e){o.socketSession=e},async refreshChallenge(){let e=await Bc({fetch:r.fetch,input:u,probeInit:ll(u,i,o.channel?.opened?o.channel.channelId:void 0),signal:t?.signal});return o.lastChallenge=e.challenge,e.challenge},assertVoucherWithinLocalLimit:N,acceptReceipt:T,rejectCloseReady:c.rejectCloseReady,rejectReceipt:c.rejectReceipt,settleCloseReady:c.settleCloseReady,settleReceipt:c.settleReceipt,topUpIfNeeded:te,waitForReceipt:c.waitForReceipt})},async close(){let e=o.socketSession,t=ys({channel:o.channel,currentSocket:e,lastChallenge:o.lastChallenge});if(!t)return;let n=e?.socket;if(e&&n?.readyState===mc.OPEN){let r=await js({activeSocket:n,createSessionCredential:w,currentSocket:e,spent:o.spent,target:t,waitForCloseReady:c.waitForCloseReady,waitForReceipt:c.waitForReceipt});return E(),_({type:`closeStarted`}),_({type:`closed`,receipt:r}),r}return P(t)}};return il(se,{consumeSseResponse(e,t,n){return Nc(e,t,n,oe)},rehydrate({channel:e,challenge:t,input:n,spent:r}){if(!e.opened)throw Error(`Cannot restore a closed session channel.`);if(!bc(t))throw Error(`Cannot restore session: challenge is not tempo/session.`);if(r<0n)throw Error(`Cannot restore session: spent must not be negative.`);if(r>e.cumulativeAmount)throw Error(`Cannot restore session: spent exceeds local voucher state.`);N(e.cumulativeAmount);let i=A(e,t),a=i&&i.spent>r?i.spent:r;o.lastUrl=n,o.lastChallenge=t,o.channel=e,o.spent=a,_({type:`challengeReceived`,challengeId:t.id}),_({type:`activated`,challengeId:t.id,entry:e,spent:a.toString(),units:0})}}),se}(function(e){e.serializeSnapshot=rs,e.deserializeSnapshot=is})(fl||={});const pl=(1n<<64n)-1n,ml={dev_second:1n,day:86400n,week:604800n};function hl(e){return e instanceof Date?e:new Date(e)}function gl(e){let t=e.getTime();if(!Number.isFinite(t))throw new K({reason:`subscriptionExpires is invalid`});if(t%1e3!=0)throw new K({reason:`subscriptionExpires must be representable as whole seconds`});let n=t/1e3;if(n<=0||!Number.isSafeInteger(n))throw new K({reason:`subscriptionExpires cannot be represented in a Tempo key authorization`});return n}function _l(e){if(!/^[1-9]\d*$/.test(e.periodCount))throw new K({reason:`periodCount is invalid`});let t=ml[e.periodUnit];if(t===void 0)throw new K({reason:`periodUnit is invalid`});let n=BigInt(e.periodCount)*t;if(n>pl)throw new K({reason:`subscription period cannot be represented as an unsigned 64-bit integer`});if(n>BigInt(2**53-1))throw new K({reason:`subscription period cannot be represented exactly by this Tempo client`});return Number(n)}function vl(e){let{challengeExpires:t,request:n}=e;_l(n);let r=gl(hl(n.subscriptionExpires));if(t){let e=Math.floor(new Date(t).getTime()/1e3);if(!Number.isFinite(e)||r<=e)throw new K({reason:`subscriptionExpires must be strictly later than challenge expires`})}}function yl(e){return[{address:Ml(e.currency,`currency`),selector:`0x95777d59`,recipients:[Ml(e.recipient,`recipient`)]}]}function bl(e){try{let t=T.fromBytes(S.toBytes(e));if(T.size(t)!==32)throw Error(`invalid challenge id size`);return t}catch{throw new K({reason:`challenge id must encode 32 bytes`})}}async function xl(e){let{accessKey:t,account:n,challengeId:r,chainId:i,request:a}=e;if(typeof n.sign!=`function`)return;let o=Cl({accessKey:t,challengeId:r,chainId:i,request:a}),s=await n.sign({hash:F.getSignPayload(o)}),c=I.from(s);if(c.type===`keychain`||c.type===`multisig`)throw new K({reason:`keyAuthorization must use a primitive signature`});return F.from(o,{signature:s})}function Sl(e){let{accessKey:t,challengeId:n,chainId:r,payload:i,request:a}=e;if(i.type!==`keyAuthorization`)throw new K({reason:`invalid keyAuthorization payload`});let o=wl(i.signature),s=Tl(o);if(El({accessKey:t,authorization:o,chainId:r}),o.witness?.toLowerCase()!==bl(n))throw new K({reason:`keyAuthorization challenge mismatch`});return Dl(o,a),kl(Ol(o),a),Al(o.scopes,a),{authorization:o,source:{address:jl(o,s),chainId:r}}}function Cl(e){let{accessKey:t,challengeId:n,chainId:r,request:i}=e;return F.from({address:Ml(t.accessKeyAddress,`accessKeyAddress`),chainId:BigInt(r),expiry:gl(hl(i.subscriptionExpires)),limits:[{token:Ml(i.currency,`currency`),limit:BigInt(i.amount),period:_l(i)}],scopes:yl(i),type:t.keyType,witness:bl(n)})}function wl(e){try{return F.deserialize(e)}catch(e){throw e instanceof F.InvalidSignatureTypeError?new K({reason:`keyAuthorization must use a primitive signature`}):new K({reason:`invalid keyAuthorization payload`})}}function Tl(e){let t=e.signature;if(!t)throw new K({reason:`keyAuthorization must use a primitive signature`});return t}function El(e){let{accessKey:t,authorization:n,chainId:r}=e;if(n.chainId!==BigInt(r))throw new K({reason:`keyAuthorization chainId mismatch`});if(t){if(!l(n.address,Ml(t.accessKeyAddress,`accessKeyAddress`)))throw new K({reason:`keyAuthorization access key mismatch`});if(n.type!==t.keyType)throw new K({reason:`keyAuthorization key type mismatch`})}}function Dl(e,t){if(vl({request:t}),e.expiry!==gl(hl(t.subscriptionExpires)))throw new K({reason:`keyAuthorization expiry mismatch`})}function Ol(e){let[t]=e.limits??[];if(!t||e.limits?.length!==1)throw new K({reason:`keyAuthorization must contain exactly one token limit`});return t}function kl(e,t){if(!l(e.token,Ml(t.currency,`currency`)))throw new K({reason:`keyAuthorization currency mismatch`});if(e.limit!==BigInt(t.amount))throw new K({reason:`keyAuthorization amount mismatch`});if(e.period!==_l(t))throw new K({reason:`keyAuthorization period mismatch`})}function Al(e,t){if(!e||e.length!==1)throw new K({reason:`keyAuthorization must contain a recipient-scoped transferWithMemo call`});let n=Ml(t.currency,`currency`),r=Ml(t.recipient,`recipient`),i=new Set;for(let t of e){if(!l(t.address,n))throw new K({reason:`keyAuthorization call target mismatch`});let e=Nl(t.selector);if(e!==`0xa9059cbb`&&e!==`0x95777d59`)throw new K({reason:`keyAuthorization selector not allowed`});if(i.has(e))throw new K({reason:`keyAuthorization duplicate selector`});if(i.add(e),t.recipients?.length!==1||!l(t.recipients[0],r))throw new K({reason:`keyAuthorization recipient mismatch`})}if(!i.has(`0x95777d59`))throw new K({reason:`keyAuthorization must allow transferWithMemo`})}function jl(e,t){let n=F.getSignPayload(e);try{let e=I.extractAddress({payload:n,signature:t});if(!I.verify(t,{address:e,payload:n}))throw new K({reason:`keyAuthorization signature is invalid`});return e}catch(e){throw e instanceof K?e:new K({reason:`keyAuthorization signature is invalid`})}}function Ml(e,t){if(!c(e))throw new K({reason:`${t} must be an address`});return e.toLowerCase()}function Nl(e){return typeof e==`string`?e.toLowerCase():``}const Pl=B.object({accessKey:B.optional(B.custom()),account:B.optional(B.custom())});function Fl(e={}){let t=Qi({chain:N,getClient:e.getClient,rpcUrl:Hn}),n=Ji({account:e.account});return Mt(Ba,{context:Pl,async createCredential({challenge:r,context:i}){let a=r.request.methodDetails?.chainId??Y.testnet,o=await t({chainId:a}),s=n(o,i),c=i?.accessKey??e.accessKey??r.request.methodDetails?.accessKey;if(!c)throw Error("No `accessKey` provided. The subscription challenge must include `accessKey`, or the client must pass one to parameters/context.");Ll(r.request),await e.validateRequest?.(r.request);let u=await Il(o,{accessKey:c,account:s,challengeId:r.id,chainId:a,request:r.request}),d=Sl({accessKey:c,challengeId:r.id,chainId:a,payload:{signature:F.serialize(u),type:`keyAuthorization`},request:r.request});if(!l(d.source.address,s.address))throw Error(`keyAuthorization signer does not match the selected account`);return Et({challenge:r,payload:{signature:F.serialize(u),type:`keyAuthorization`},source:`did:pkh:eip155:${a}:${s.address.toLowerCase()}`})}})}async function Il(e,t){let{accessKey:n,account:r,challengeId:i,chainId:a,request:o}=t,s=await xl({accessKey:n,account:r,challengeId:i,chainId:a,request:o});if(s)return s;let c=await e.request({method:`wallet_authorizeAccessKey`,params:[{address:n.accessKeyAddress,expiry:gl(hl(o.subscriptionExpires)),keyType:n.keyType,limits:[{token:o.currency,limit:T.fromNumber(BigInt(o.amount)),period:_l(o)}],scopes:yl(o),witness:bl(i)}]});return F.fromRpc(c.keyAuthorization)}function Ll(e){_l(e),gl(hl(e.subscriptionExpires))}const Rl=Object.assign(nl,{manager:fl});function zl(e={}){let t=e.expectedChainId!==void 0&&(e.allowedChainIds===void 0||e.allowedChainIds.includes(e.expectedChainId)),n=e.expectedChainId===void 0?e:{...e,allowedChainIds:t?[e.expectedChainId]:[]};return[Ha(e),Rl(n)]}(function(e){e.charge=Ha,e.common=zl,e.session=Rl,e.subscription=Fl})(zl||={});const Bl=M.union([M.boolean(),M.literal(`true`).transform(()=>!0),M.literal(`false`).transform(()=>!1)]);async function Vl(e){process.stdout.write(Buffer.from(await e.arrayBuffer()))}const Hl=M.object({allowCustomEscrow:M.optional(Bl),autoSwap:M.optional(Bl),channel:M.optional(M.coerce.string()),deposit:M.optional(M.union([M.string(),M.number()])),payWith:M.optional(M.string()),slippage:M.optional(M.coerce.number()),tokenIn:M.optional(M.string())}),Ul=[`allowCustomEscrow`,`autoSwap`,`channel`,`deposit`,`payWith`,`slippage`,`tokenIn`];function Wl(){let t;return sr({method:`tempo`,supports(e){return e.method===`tempo`&&[`charge`,`session`].includes(e.intent)},async setup({challenge:n,options:r,methodOpts:i}){let a=rr(r.account),o=n.request,c=o.currency,l=Xl(i),u=eu({autoSwap:l.autoSwap??r.autoSwap,payWith:l.payWith??r.payWith,slippage:l.slippage??r.slippage,tokenIn:l.tokenIn}),d=c??``,f=o.decimals??6,p,m,h,g=!1,_=process.env.MPPX_PRIVATE_KEY?.trim()||(Wn(a)?void 0:await ir(a).get());if(!_&&Wn(a)&&lu()){g=!0;let t=su(a);if(t){let i=qn(r.rpcUrl,{network:r.network});h=e({chain:await Jn({network:r.network,rpcUrl:i}),transport:s(i)}),Ql({challenge:n,clientChainId:h.chain?.id}),p=h.chain?.blockExplorers?.default?.url;let a=c?await Zn(h,c,t.wallet_address).catch(()=>void 0):void 0;d=a?.symbol??c??``,f=a?.decimals??o.decimals??6}}else if(_)m=de(_);else{let e=du();if(e){let t=await ir(e).get();t&&(m=de(t))}if(!m)throw r.account?new J({code:`ACCOUNT_NOT_FOUND`,message:`Account "${a}" not found.`,exitCode:69}):new J({code:`ACCOUNT_NOT_FOUND`,message:`No account found.`,exitCode:69})}if(!g&&m){let t=qn(r.rpcUrl,{network:r.network});h=e({chain:await Jn({network:r.network,rpcUrl:t}),transport:s(t)}),Ql({challenge:n,clientChainId:h.chain?.id}),p=h.chain?.blockExplorers?.default?.url;let i=c?await Zn(h,c,m.address).catch(()=>void 0):void 0;d=i?.symbol??c??``,f=i?.decimals??o.decimals??6}if(g)return{tokenSymbol:d,tokenDecimals:f,explorerUrl:p,methods:[],async createCredential(e){let t=e.headers.get(`www-authenticate`);if(!t)throw Error(`No WWW-Authenticate header in 402 response.`);return uu(t)}};if(!m||!h)throw new J({code:`ACCOUNT_NOT_FOUND`,message:`Tempo requires a configured account.`,exitCode:69});let v=zl({account:m,...l.allowCustomEscrow===void 0?{}:{allowCustomEscrow:l.allowCustomEscrow},getClient:()=>h,...u===void 0?{}:{autoSwap:u},maxDeposit:(()=>{if(n.intent!==`session`)return;let e=n.request.suggestedDeposit,t=(l.deposit===void 0?void 0:String(l.deposit))??e??(Xn(h.chain)?`10`:void 0);if(!t)throw new J({code:`MISSING_DEPOSIT`,message:`Session payment requires a deposit. Use -M deposit=<amount> or connect to testnet.`,exitCode:2});return t})()}),y=(()=>{if(!l.channel)return;let e=l.channel,t=nu(e);return{channelId:e,...t!==void 0&&{cumulativeAmountRaw:t.toString()}}})();return t={descriptor:void 0,async signVoucher({channelId:e,cumulativeAmount:r,escrowContract:i,chainId:a,action:o=`voucher`}){let s=t?.descriptor;if(!s)throw Error(`session descriptor not available`);let c={channelId:e,cumulativeAmount:r},l=await Oo(h,m,c,i,a);return Et({challenge:n,payload:{action:o,channelId:e,...o===`close`?{closeSignature:await ko(h,m,c,i,a)}:{},descriptor:s,cumulativeAmount:r.toString(),signature:l},source:`did:pkh:eip155:${a}:${m.address}`})},source:`did:pkh:eip155:${h.chain.id}:${m.address}`},{tokenSymbol:d,tokenDecimals:f,explorerUrl:p,methods:[...v],credentialContext:y}},prepareCredentialRequest({challenge:e,headers:t}){e.intent===`session`&&(t.Accept=`text/event-stream`)},async handleResponse(e){if(e.challenge.intent!==`session`||!t)return!1;let{challenge:n,credential:r,response:i,fetchUrl:a,fetchInit:o,verbose:s}=e,{silent:c,confirmEnabled:l,tokenSymbol:u,tokenDecimals:d,explorerUrl:f,shownKeys:p}=e,m=c?e=>{}:e=>process.stderr.write(e),h=St(r),g=n.request,_=g.methodDetails,v=h.payload.channelId,y=_?.escrowContract??_?.escrow??`0x4d50500000000000000000000000000000000000`,b=_?.chainId??0,x=BigInt(g.amount),C=`cumulativeAmount`in h.payload&&h.payload.cumulativeAmount?BigInt(h.payload.cumulativeAmount):0n;if(`descriptor`in h.payload&&(t.descriptor=h.payload.descriptor),s>=1){if(h.payload.action===`open`){let e=g.suggestedDeposit,t=e?` ${X.dim(`(deposit ${e} ${u})`)}`:``;m(`${l?``:`
8
- `}${X.dim(`Channel opened ${h.payload.channelId}`)}${t}\n`)}else m(`${l?``:`
9
- `}${X.dim(`Channel reused ${h.payload.channelId}`)}\n`)}let w=i;w.ok&&!w.headers.get(`Content-Type`)?.includes(`text/event-stream`)&&h.payload.action===`open`&&`cumulativeAmount`in h.payload&&(C=BigInt(h.payload.cumulativeAmount));let T=w.headers.get(R.paymentReceipt);if(T)try{let e=JSON.parse(S.toString(T));Kl(e,C),typeof e.acceptedCumulative==`string`&&e.acceptedCumulative&&ru(v,C),s>=1&&Gl(e,{info:m,shownKeys:p,tokenSymbol:u,tokenDecimals:d,explorerUrl:f,handler:this,prefix:`
10
- `})}catch{}return(w.headers.get(`Content-Type`)??``).includes(`text/event-stream`)?await ql(w,{challenge:n,channelId:v,escrowContract:y,chainId:b,cumulativeAmount:C,tickCost:x,fetchUrl:a,fetchInit:o,session:t,info:m,verbose:s,shownKeys:p,tokenSymbol:u,tokenDecimals:d,explorerUrl:f,handler:this}):(await Vl(w),v&&y&&b&&(l&&m(`
11
- `),l&&!await e.confirm(`Close channel?`,!0)?s>=1&&m(`${X.dim(`Kept channel open.`)}\n`):await Jl({channelId:v,cumulativeAmount:C,escrowContract:y,chainId:b,fetchUrl:a,fetchInit:o,session:t,info:m,verbose:s,tokenSymbol:u,tokenDecimals:d,explorerUrl:f,confirmEnabled:l}))),!0},formatReceiptField(e,t){(e===`reference`||e===`txHash`)&&typeof t==`string`&&t.startsWith(`0x`)}})}function Gl(e,t){t.info(`${t.prefix??``}${X.bold(X.green(`Payment Receipt`))}\n`);let n=[],r=e.channelId&&e.reference&&e.channelId===e.reference,i=new Set([`acceptedCumulative`,`spent`]);for(let[a,o]of Object.entries(e)){if(o===void 0||t.shownKeys.has(a)||a===`reference`&&r)continue;let e=t.handler.formatReceiptField?.(a,o);e===void 0?i.has(a)&&typeof o==`string`?n.push([a,`${o} ${X.dim(`(${Gn(BigInt(o),t.tokenSymbol,t.tokenDecimals)})`)}`]):(a===`reference`||a===`txHash`)&&typeof o==`string`&&t.explorerUrl?n.push([a,Un(`${t.explorerUrl}/tx/${o}`,o)]):n.push([a,String(o)]):n.push([a,e])}n.sort(([e],[t])=>e.localeCompare(t));let a=Math.max(...n.map(([e])=>e.length));for(let[e,r]of n)t.info(` ${X.dim(e.padEnd(a))} ${r}\n`);t.prefix&&t.info(`
12
- `)}function Kl(e,t){if(typeof e.acceptedCumulative!=`string`)return;let n=BigInt(e.acceptedCumulative),r=typeof e.spent==`string`?BigInt(e.spent):0n;if(r>n)throw Error(`receipt spent exceeds accepted cumulative voucher amount`);if(n>t)throw Error(`receipt accepted cumulative exceeds locally signed voucher amount`);if(r>t)throw Error(`receipt spent exceeds locally signed voucher amount`)}async function ql(e,t){let n=t.cumulativeAmount,r=e.body?.getReader();if(!r)throw Error(`No response body`);let i=new TextDecoder,a=``,o=``,s=t.verbose?await Yl():void 0,c=(()=>{if(!s||!X.isColorSupported)return;let e=e=>Math.max(0,Math.min(255,Math.round(e))),t=.299*s.r+.587*s.g+.114*s.b<128?1:-1,n=n=>r=>`\x1b[48;2;${e(s.r+n*t)};${e(s.g+n*t)};${e(s.b+n*t)}m${r}\x1b[49m`;return[n(12),n(24)]})(),l=0,u=e=>{if(c){let t=c[l%c.length];process.stdout.write(e.replace(/[^\n]+/g,e=>t(e))),l++}else process.stdout.write(e)},d=async e=>{for(let r of e){if(r.startsWith(`event: `)){o=r.slice(7).trim();continue}if(!r.startsWith(`data: `)){r===``&&(o=``);continue}let e=r.slice(6);if(e.trim()!==`[DONE]`){if(o===`payment-need-voucher`&&t.channelId&&t.escrowContract&&t.chainId){try{let r=JSON.parse(e);if(r.channelId!==t.channelId)throw Error(`payment-need-voucher channelId does not match current session`);let i=BigInt(r.requiredCumulative);if(i>n+t.tickCost)throw Error(`payment-need-voucher exceeds next locally billable amount`);n=n>i?n:i;let a=await t.session.signVoucher({channelId:t.channelId,cumulativeAmount:n,escrowContract:t.escrowContract,chainId:t.chainId});await globalThis.fetch(t.fetchUrl,{method:`POST`,headers:{[R.authorization]:a}})}catch(e){t.info(X.dim(X.yellow(` [voucher failed: ${e instanceof Error?e.message:e}]`)))}o=``;continue}if(o===`payment-receipt`){if(t.verbose>=1)try{Gl(JSON.parse(e),{info:t.info,shownKeys:t.shownKeys,tokenSymbol:t.tokenSymbol,tokenDecimals:t.tokenDecimals,explorerUrl:t.explorerUrl,handler:t.handler,prefix:`
7
+ `?2:t+1===e.length&&!n?0:1:0}function Xc(e){let t=new AbortController,n=()=>t.abort(e.signal?.reason);e.signal?.addEventListener(`abort`,n,{once:!0}),e.signal?.aborted&&n();let r=qc({...e,signal:t.signal}),i=new TextEncoder,a=new Headers(e.response.headers);a.delete(`content-length`);let o=()=>e.signal?.removeEventListener(`abort`,n),s=new Response(new ReadableStream({async pull(e){try{let t=await r.next();if(t.done)return o(),e.close();e.enqueue(i.encode(t.value.raw))}catch(e){throw o(),e}},async cancel(){o(),t.abort(),await r.return(void 0)}}),{headers:a,status:e.response.status,statusText:e.response.statusText});for(let t of[`redirected`,`type`,`url`])Object.defineProperty(s,t,{configurable:!0,get:()=>e.response[t]});return s}async function Zc(e,t){let n=e.driver.getChannel();if(!n||!e.challenge)return;let r=await jc({assertVoucherWithinLocalLimit:e.driver.assertVoucherWithinLocalLimit,challenge:e.challenge,event:t,expectedChannelId:n.channelId,getChannel:e.driver.getChannel,input:e.input,signal:e.signal,topUpIfNeeded:e.driver.topUpIfNeeded});if(r.status!==`ready`)return;let i=await Bc({challenge:e.challenge,context:r.context,createSessionCredential:e.driver.createSessionCredential,fetch:e.driver.fetch,input:e.input,signal:e.signal});if(!i.ok)throw Error(`Voucher POST failed with status ${i.status}`)}async function Qc(e){let t=new URL(e.input.toString()),n=Lc(t);e.onProbeUrl?.(n);let r=await e.fetch(n,{...e.probeInit,...e.signal?{signal:e.signal}:{}});if(r.status!==402)throw Error(`Expected a 402 payment challenge from ${n}, received ${r.status} instead.`);let i=mt(r).find(Nc);if(!i)throw Error(`No payment challenge received from HTTP endpoint for this WebSocket URL. The server may not require payment or did not advertise a challenge.`);return{challenge:i,httpUrl:n,wsUrl:t}}async function $c(e){e.signal?.throwIfAborted();let t=await Qc(e);e.signal?.throwIfAborted();let n=await e.createSessionCredential(t.challenge,{});return e.signal?.throwIfAborted(),{...t,credential:n}}function el(e){let{challenge:t,credential:n,socket:r}=e;return{challenge:t,channelId:Ct(n).payload.channelId,closeReadyReceipt:null,deliveredChunks:0n,expectedCloseAmount:null,socket:r,tickCost:fo(t)}}function tl(e){let{challengeId:t,channelId:n,receipt:r}=e;return r.challengeId===t&&r.channelId===n}function nl(e){if(!tl(e))return`received mismatched payment-close-ready frame`;let t=ro(e.receipt.spent);if(t===void 0)return`received invalid payment-close-ready spend`;if(t>e.cumulativeAmount)return`received payment-close-ready beyond local voucher state`}function rl(e){let{challengeId:t,channelId:n,expectedCloseAmount:r,receipt:i}=e;if(!tl(e))return`received mismatched payment-receipt frame`;if(r!==null&&i.txHash&&!Ps({challengeId:t,channelId:n,expectedCloseAmount:r,minimumSpent:BigInt(r),receipt:i}))return`received mismatched payment-close receipt frame`}async function il(e){let{challenge:t,credential:n,options:r,WebSocket:i,wsUrl:a}=e,o=r?.signal;o?.throwIfAborted();let s=new i(a,r?.protocols),c=el({challenge:t,credential:n,socket:s});e.setSocketSession(c);let l=Dc(s),u=t=>{e.rejectReceipt(Error(t)),e.rejectCloseReady(Error(t)),(s.readyState===Ec.CONNECTING||s.readyState===Ec.OPEN)&&s.close(3008,t)},d=()=>{e.rejectReceipt(Error(`WebSocket payment flow aborted.`)),e.rejectCloseReady(Error(`WebSocket payment flow aborted.`)),s.close()};s.addEventListener(`close`,t=>{o?.removeEventListener(`abort`,d),c.socket=null,c.expectedCloseAmount=null,e.rejectReceipt(Error(`WebSocket closed before the payment flow completed.`)),e.rejectCloseReady(Error(`WebSocket closed before the payment flow completed.`)),l.emit(`close`,{code:t.code??1e3,reason:t.reason??``,type:`close`,wasClean:!0})}),s.addEventListener(`error`,()=>{l.emit(`error`,{type:`error`})}),s.addEventListener(`message`,async t=>{let n=typeof t.data==`string`?t.data:void 0;n&&await ol({driver:e,failSocketFlow:u,managedEmit:l.emit,message:n,rawSocket:s,socketState:c})}),o?.addEventListener(`abort`,d,{once:!0});try{await al(s,l.emit,a,o),o?.throwIfAborted()}catch(e){throw o?.removeEventListener(`abort`,d),s.close(),e}return s.send(yo(n)),await e.waitForReceipt(),l.socket}function al(e,t,n,r){return new Promise((i,a)=>{let o=()=>{e.removeEventListener(`open`,s),e.removeEventListener(`error`,c),e.removeEventListener(`close`,c),r?.removeEventListener(`abort`,l)},s=()=>{o(),t(`open`,{type:`open`}),i()},c=()=>{o(),a(Error(`WebSocket connection to ${n} failed to open.`))},l=()=>{o(),a(r?.reason)};e.addEventListener(`open`,s,{once:!0}),e.addEventListener(`error`,c,{once:!0}),e.addEventListener(`close`,c,{once:!0}),r?.addEventListener(`abort`,l,{once:!0}),r?.aborted&&l()})}async function ol(e){let t=xo(e.message);if(!t){e.managedEmit(`message`,{data:e.message,type:`message`});return}switch(t.mpp){case`authorization`:return;case`message`:e.socketState.deliveredChunks+=1n,e.managedEmit(`message`,{data:t.data,type:`message`});return;case`payment-close-ready`:sl(e,t.data);return;case`payment-error`:e.driver.rejectReceipt(Error(t.message)),e.driver.rejectCloseReady(Error(t.message));return;case`payment-need-voucher`:await cl(e,t.data);return;case`payment-receipt`:ll(e,t.data);return}}function sl(e,t){let n=e.driver.getChannel()?.cumulativeAmount??0n,r=nl({challengeId:e.driver.challenge.id,channelId:e.socketState.channelId,cumulativeAmount:n,receipt:t});if(r){e.failSocketFlow(r);return}e.driver.acceptReceipt(t),e.driver.options?.onReceipt?.(t),e.driver.settleCloseReady(t),e.managedEmit(`close`,{code:1e3,reason:`stream complete`,type:`close`,wasClean:!0})}async function cl(e,t){try{let n=e.driver.challenge;n.expires&&new Date(n.expires).getTime()<=Date.now()+5e3&&(n=await e.driver.refreshChallenge(),e.driver.challenge=n,e.socketState.challenge=n);let r=await jc({assertVoucherWithinLocalLimit:e.driver.assertVoucherWithinLocalLimit,challenge:n,event:t,expectedChannelId:e.socketState.channelId,getChannel:e.driver.getChannel,input:e.driver.httpUrl,signal:e.driver.options?.signal,topUpIfNeeded:e.driver.topUpIfNeeded});if(r.status===`ignored`){e.failSocketFlow(r.reason===`channel-mismatch`?`received mismatched payment-need-voucher frame`:`cannot create voucher: no active channel`);return}let i=await e.driver.createSessionCredential(n,r.context);e.rawSocket.send(yo(i))}catch(t){e.failSocketFlow(t instanceof Error?t.message:`failed to create websocket voucher`)}}function ll(e,t){let n=rl({challengeId:e.driver.challenge.id,channelId:e.socketState.channelId,expectedCloseAmount:e.socketState.expectedCloseAmount,receipt:t});if(n){e.failSocketFlow(n);return}e.driver.acceptReceipt(t),e.driver.options?.onReceipt?.(t),e.driver.settleReceipt(t)}const ul=new WeakMap;async function dl(e,t){let n=ul.get(e)??new Map;ul.set(e,n);let r=n.get(t),i,a=new Promise(e=>{i=e});return n.set(t,a),await r,()=>{i(),n.get(t)===a&&n.delete(t)}}function fl(e,t){try{return t?.channelId.toLowerCase()===e.channelId.toLowerCase()&&BigInt(t.acceptedCumulative)===e.cumulativeAmount}catch{return!1}}function pl(e,t,n){try{let r=e.response?.headers.get(R.paymentReceipt);if(r){let e=ho(r);if(e.challengeId===t.id&&fl(n,e))return!0}}catch{}return e.challenges?.some(e=>Nc(e)?fl(n,Pc(e)):!1)??!1}function ml(e={}){let{account:t,allowCustomEscrow:n=!1,autoSwap:r,channelStore:i,decimals:a=6,escrow:o,allowedChainIds:s,getClient:c,maxDeposit:l,topUpAmount:u,onChannelUpdate:d,resolveAccount:p}=e,m=sa({chain:x,getClient:c,rpcUrl:Un}),h=ra({account:t}),g=l===void 0?void 0:f(l,a),_=u===void 0?void 0:f(u,a),v=i??as(),y={store:v,notifyUpdate:e=>d?.(e)},b=async(e,t,n)=>{let r=h(e.client,t),i=t?.action?t.descriptor:n?.descriptor??uc({context:t,snapshot:e.snapshot})?.descriptor;return await p?.({account:r,chainId:e.chainId,operation:{kind:`authorizePaymentChannel`,...i?{authority:wo(i)}:{}}})??r},S=async(e,t,n)=>mc({account:await b(e,t,n),entry:n,context:t,decimals:a,maxDeposit:g,resolved:e}),C=Nt(Ja,{canHandleChallenge:({challenge:e})=>Nc(e),context:Xs,async createCredential(e){let{challenge:t,context:i}=e,a=await sc({allowCustomEscrow:n,challenge:t,escrowOverride:o,allowedChainIds:s,getClient:m}),c=mi(e),l=()=>{};try{let e=!Zs(i)&&i?.descriptor===void 0;e&&(l=await dl(v,a.key),c&&(await v.get(a.key))?.opened&&await c.prepare());let n=await v.get(a.key),o=await S(a,i,n);if(!e&&c&&o.type===`open`){l=await dl(v,a.key);let e=await v.get(a.key);e?.channelId!==n?.channelId&&(n=e,n?.opened&&(await c.prepare(),n=await v.get(a.key)),o=await S(a,i,n))}let s,u=c&&o.type===`open`?{store:{get:e=>v.get(e),async set(e){s=e},delete:e=>v.delete(e)},notifyUpdate(){}}:y,d=await Zo(t,await hc(o,u,_a(i?.autoSwap??r,ha)),a.chainId,o.account);if(c&&s){let e=s;c.settle=async n=>{let r=n.status===`accepted`||pl(n,t,e);if(!r&&n.status===`pending`)return!1;try{if(r){let t=await v.get(a.key);(!t?.opened||t.channelId.toLowerCase()!==e.channelId.toLowerCase())&&(await v.set(e),y.notifyUpdate(e))}return!0}finally{l()}}}else l();return d}catch(e){throw l(),e}}}),w=async({challenge:e,channel:t,deposit:n,fetch:r,input:i,requiredCumulative:a,signal:o})=>{let s=t.deposit>n?t.deposit:n,c=ks({deposit:s,maxDeposit:g,requiredCumulative:a,suggestedDeposit:e.request.suggestedDeposit===void 0?void 0:BigInt(e.request.suggestedDeposit),topUpAmount:_});c>0n&&await zc({additionalDeposit:c,challenge:e,channel:t,channelId:t.channelId,createSessionCredential:(e,t)=>C.createCredential({challenge:e,context:t}),fetch:r,input:i,signal:o});let l=s+c;if(l===t.deposit)return;let u=await v.get(is(t)),d=u?.channelId.toLowerCase()===t.channelId.toLowerCase()?u:t,f={...d,deposit:d.deposit>l?d.deposit:l};await v.set(f),y.notifyUpdate(f)};return ai(C,async({challenge:e,context:t,fetch:r,input:i,signal:a})=>{if(!Nc(e))return;let c=t===void 0?void 0:Xs.parse(t);if(Zs(c))return;let l=await sc({allowCustomEscrow:n,challenge:e,escrowOverride:o,allowedChainIds:s,getClient:m}),u=await v.get(l.key);if(!u?.opened)return;let d=l.snapshot?.channelId.toLowerCase()===u.channelId.toLowerCase()?l.snapshot:void 0,f=u.cumulativeAmount+fo(e),p=d?BigInt(d.requiredCumulative):f,h=p>f?p:f,g=d?BigInt(d.deposit):u.deposit,_=g>u.deposit?g:u.deposit;h<=_&&_===u.deposit||!pc(await b(l,c,u),u.descriptor)||await w({challenge:e,channel:u,deposit:_,fetch:r,input:i,requiredCumulative:h,signal:a})}),di(C,async({challenge:e,credential:t,fetch:r,headers:i,input:a,refetch:c,response:l,signal:u})=>{if(!Nc(e))return l;if(!go(l))return uo(Ct(t).payload).action===`open`&&i.get(`accept`)?.toLowerCase().includes(`text/event-stream`)?await c?.()??l:l;let d=(await sc({allowCustomEscrow:n,challenge:e,escrowOverride:o,allowedChainIds:s,getClient:m})).key,f=await v.get(d),p={assertVoucherWithinLocalLimit:e=>As(e,g),createSessionCredential:(e,t)=>C.createCredential({challenge:e,context:t}),fetch:r,getChannel:()=>f??null,async topUpIfNeeded({deposit:t,requiredCumulative:n,signal:i}){f&&await w({challenge:e,channel:f,deposit:f.deposit>t?f.deposit:t,fetch:r,input:a,requiredCumulative:n,signal:i})}};return Xc({onNeedVoucher:(t,n)=>Zc({challenge:e,driver:p,input:a,signal:n},t),onReceipt(){},response:l,signal:u})})}const hl=new WeakMap;function gl(e,t){hl.set(e,t)}function _l(e){let t=null;return{wait(n=()=>!0){if(t)throw Error(`${e} wait already in progress`);return new Promise((e,r)=>{t={predicate:n,resolve:e,reject:r}})},settle(e){if(!t||!t.predicate(e))return;let n=t;t=null,n.resolve(e)},reject(e){if(!t)return;let n=t;t=null,n.reject(e)}}}function vl(e){let t=_l(`close-ready`),n=_l(`receipt`);return{waitForReceipt(e){return n.wait(e)},waitForCloseReady(){let n=e.getSocketSession()?.closeReadyReceipt;return n?Promise.resolve(n):t.wait()},settleReceipt(e){n.settle(e)},settleCloseReady(n){let r=e.getSocketSession();r&&r.challenge.id===n.challengeId&&r.channelId===n.channelId&&(r.closeReadyReceipt=n),t.settle(n)},rejectReceipt(e){n.reject(e)},rejectCloseReady(e){t.reject(e)}}}function yl(e){return e.method===Ge.tempo&&e.intent===Ke.charge}function bl(e){if(!yl(e)||typeof e.request.amount!=`string`)return!1;try{return BigInt(e.request.amount)===0n}catch{return!1}}function xl(e,t,n){if(!n)return t;let r={...Q(e instanceof Request?e.headers:void 0),...Q(t?.headers)};return Object.keys(r).some(e=>e.toLowerCase()===R.paymentSession.toLowerCase())?t:{...t,headers:{...r,[R.paymentSession]:n}}}function Sl(e,t){return e===void 0?t:{...Xs.parse(e),...t}}function Cl(e){let t=e.decimals??6,n=e.webSocket??globalThis.WebSocket;return{decimals:t,fetch:e.fetch??globalThis.fetch.bind(globalThis),maxVoucherCumulative:e.maxDeposit===void 0?null:f(e.maxDeposit,t),topUpAmount:e.topUpAmount===void 0?null:f(e.topUpAmount,t),WebSocket:n}}function wl(e){let t=e.client?.chain?.id;(t!==void 0||e.allowedChainIds?.length===0)&&la(e.allowedChainIds,t);let n=e.allowCustomEscrow??!1,r=Cl(e),i=sa({chain:x,getClient:e.client?()=>e.client:e.getClient,rpcUrl:Un}),a=ra({account:e.account}),o=Is(),s=e.credentialContext===void 0?void 0:Sl(e.credentialContext,{}),c=vl({getSocketSession:()=>o.socketSession}),l=e.channelStore??as(),u=new Set,d;async function f(e){let t=await l.get(e);if(t?.opened&&!u.has(t.channelId))return t}let p={async get(e){let t=await f(e);return t&&d&&(d.seenExisting.add(e),!d.committed&&!d.created.has(e)&&(d.resumed??=t)),t},async set(e){let t=is(e);e.opened&&u.delete(e.channelId),d?.trackCreates&&!d.seenExisting.has(t)&&d.created.set(t,e),await l.set(e)},delete:e=>l.delete(e)};async function m(e){let t=is(e);u.add(e.channelId),d?.seenExisting.delete(t),d?.resumed===e&&(d.resumed=void 0),await Promise.resolve(l.delete(t)).catch(()=>void 0)}async function h(){let e=d;if(e?.created.size){for(let[t,n]of e.created)u.add(n.channelId),await Promise.resolve(l.delete(t)).catch(()=>void 0);e.created.clear(),await ne(e.committed??e.previous)}}function g(e){let t=Ye(e.request.methodDetails,qe.sessionSnapshot);if(typeof t?.channelId!=`string`)return!1;let n=d;if(!n?.created.size||!o.channel)return!1;for(let[e,r]of n.created)if(r.channelId.toLowerCase()===t.channelId.toLowerCase()&&o.channel.channelId.toLowerCase()===t.channelId.toLowerCase())return n.created.delete(e),n.committed=Vs({channel:o.channel,spent:o.spent,state:o.state}),!0;return!1}function _(e){return bs(o,e)}function v(){let e=o.state.status===`active`?o.state:d?.committed?.state??d?.previous.state;return e?.status===`active`?e.units:0}function y(e){let t=d,n=t?.committed?.channel?.entry??t?.resumed;!t||n?.channelId.toLowerCase()!==e.channelId.toLowerCase()||e.deposit<=n.deposit||(t.resumed=void 0,t.committed=Vs({channel:o.channel,spent:o.spent,state:o.state}))}let b=ml({account:e.account,allowCustomEscrow:n,autoSwap:e.autoSwap,getClient:e.client?()=>e.client:e.getClient,resolveAccount:e.resolveAccount,escrow:e.escrow,allowedChainIds:e.allowedChainIds,decimals:r.decimals,maxDeposit:e.maxDeposit,topUpAmount:e.topUpAmount,channelStore:p,onChannelUpdate(e){e.channelId!==o.channel?.channelId&&(o.spent=0n),o.channel=e,o.lastChallenge&&_({type:`activated`,challengeId:o.lastChallenge.id,entry:e,spent:o.spent.toString(),units:v()}),y(e)}});fi(b);let S=Za({allowedChainIds:e.allowedChainIds,account:e.account,getClient:e.client?()=>e.client:e.getClient,resolveAccount:e.resolveAccount}),C=Ci({fetch:r.fetch,methods:[b],onChallenge:async(e,t)=>{if(!Mc(e))return;let n=d,r=n&&n.challengesReceived>0&&e.id===o.lastChallenge?.id,i=r&&ot(e)===ot(o.lastChallenge);n&&n.challengesReceived++,!i&&(g(e)||(n?.created.size?await h():r&&await ne(n.committed??n.previous)),o.lastChallenge=e,_({type:`challengeReceived`,challengeId:e.id}))}});function w(e,t){return b.createCredential({challenge:e,context:Sl(s,t)})}function T(e){Ls({maxVoucherCumulative:r.maxVoucherCumulative,receipt:e,runtime:o})}function E(e=o.state.status===`active`?o.state.units:0){!o.channel||!o.lastChallenge||o.state.status!==`active`&&o.state.status!==`withdrawable`&&o.state.status!==`closeRequested`&&_({type:`activated`,challengeId:o.lastChallenge.id,entry:o.channel,spent:o.spent.toString(),units:e})}async function D(t){let n=t.headers.get(R.paymentSessionSnapshot);if(!n)return;let r=gs(n);la(e.allowedChainIds,r.chainId);let s=await i({chainId:r.chainId});ca(s,r.chainId);let c=a(s),{entry:l,spent:u}=await fc({account:await e.resolveAccount?.({account:c,chainId:r.chainId,operation:{authority:wo(r.descriptor),kind:`authorizePaymentChannel`}})??c,client:s,snapshot:r});return N(l.cumulativeAmount),await Promise.resolve(p.set(l)).catch(()=>void 0),o.channel=l,o.spent=u,l}async function O(t,n){if(!e.bootstrap||o.channel?.opened)return;let i=t instanceof Request?t.headers:void 0,{body:a,method:s,...c}=n??{},l=t instanceof Request?t.url:t,u={...c,method:`HEAD`,headers:{...Q(i),...Q(n?.headers),[R.acceptPayment]:`${Ge.tempo}/${Ke.charge}`}};try{let e=await r.fetch(l,u);if(e.status!==402)return await D(e);let t=mt(e).find(yl);if(!t||!bl(t))return;let n=await S.createCredential({challenge:t,context:{}}),i=await r.fetch(l,{...u,headers:{...Q(u.headers),[R.authorization]:n}});return i.ok?await D(i):void 0}catch{return}}function k(e,t){let n=o.socketSession;return zs({challengeId:e.id,channelId:t,closeReadyReceipt:n?.closeReadyReceipt,cumulativeAmount:o.channel?.channelId===t?o.channel.cumulativeAmount:0n,deliveredChunks:n?.deliveredChunks,socketChallengeId:n?.challenge.id,socketChannelId:n?.channelId,spent:o.spent,tickCost:n?.tickCost})}function A(e,t){let n=Pc(t);if(!n)return;if(To({...n.descriptor,chainId:n.chainId,escrow:n.escrow}).toLowerCase()!==n.channelId.toLowerCase())throw Error(`close snapshot descriptor does not match its channel ID`);if(n.channelId.toLowerCase()!==e.channelId.toLowerCase())throw Error(`close snapshot channel ID does not match local session`);if(n.chainId!==e.chainId||n.escrow.toLowerCase()!==e.escrow.toLowerCase())throw Error(`close snapshot payment scope does not match local session`);let r=BigInt(n.acceptedCumulative),i=BigInt(n.spent);if(r<0n||i<0n)throw Error(`close snapshot amounts must not be negative`);if(i>r)throw Error(`close snapshot spent exceeds accepted cumulative amount`);if(r>e.cumulativeAmount)throw Error(`close snapshot accepted cumulative exceeds local voucher state`);return{acceptedCumulative:r,spent:i}}function j(e,t){let n=A(e.channel,t);if(!n)return;let{acceptedCumulative:r,spent:i}=n;if(o.spent>r)throw Error(`close snapshot accepted cumulative is below locally confirmed spend`);return i>o.spent&&(o.spent=i),n}function M(e,t=e.challenge,n=!1){let r=(n?j(e,t):A(e.channel,t))?.acceptedCumulative??k(t,e.channelId);if(r>e.channel.cumulativeAmount)throw Error(`fallback close amount exceeds local voucher state`);return N(r),r.toString()}function N(e){ws({cumulativeAmount:e,maxVoucherCumulative:r.maxVoucherCumulative})}async function P(e){let{knownDeposit:t,...n}=e,i=await zc({...n,channel:o.channel,createSessionCredential:w,fetch:r.fetch});T(i);let a=Ac({additionalDeposit:e.additionalDeposit,channel:o.channel,channelId:e.channelId,challengeId:o.lastChallenge?.id,currentState:o.state,knownDeposit:t,receipt:i,spent:o.spent});return a?.channel&&o.lastChallenge&&(await p.set(a.channel),_({type:`activated`,challengeId:o.lastChallenge.id,entry:a.channel,spent:o.spent.toString(),units:v()}),y(a.channel)),i}async function ee(e){let t=o.channel?.channelId===e.channelId?o.channel.deposit:0n,n=t>e.deposit?t:e.deposit,i=ks({deposit:n,maxDeposit:r.maxVoucherCumulative,requiredCumulative:e.requiredCumulative,suggestedDeposit:e.challenge.request.suggestedDeposit===void 0?void 0:BigInt(e.challenge.request.suggestedDeposit),topUpAmount:r.topUpAmount});i!==0n&&await P({challenge:e.challenge,input:e.input,channelId:e.channelId,additionalDeposit:i,knownDeposit:n,signal:e.signal})}async function te(e,t){let n=Bs({channel:o.channel,channelId:e,challengeId:o.lastChallenge?.id,cumulativeAmount:t,spent:o.spent,state:o.state});n&&o.channel&&(_({type:`activated`,challengeId:n.challengeId,entry:o.channel,spent:n.spent,units:n.units}),await l.set(o.channel))}async function ne(e){let t=Hs(e,o.channel);o.channel=t.channel,o.spent=t.spent,o.state=t.state,o.channel?.opened&&await l.set(o.channel)}function re(e){let t=e.headers.get(R.paymentReceipt),n=t?ho(t):null;return T(n),Object.assign(e,{receipt:n,challenge:o.lastChallenge,channelId:o.channel?.channelId??null,cumulative:o.channel?.cumulativeAmount??0n})}async function ie(e,t){if(d)throw Error(`SessionManager: a request is already in flight; concurrent requests on one manager are not supported`);o.lastUrl=e;let n=Vs({channel:o.channel,spent:o.spent,state:o.state}),i={challengesReceived:0,committed:void 0,created:new Map,previous:n,seenExisting:new Set,resumed:void 0,trackCreates:!1};d=i;try{await O(e,t),i.trackCreates=!0;let a=xl(e,t,o.channel?.opened?o.channel.channelId:void 0);s&&(a={...a,context:s});let c=!n.channel?.opened;async function l(){let n=i.resumed;return!c||!n?!1:(c=!1,await m(n),a=xl(e,t,void 0),!0)}for(;;){let t;try{t=await C(e,a)}catch(e){if(i.created.size?await h():await ne(i.committed??n),await l())continue;throw e}let s=re(t),c=!1;if(s.status===402){let t=await Vc({input:e,init:a,response:s,createSessionCredential:w,fetch:r.fetch,getChannel:()=>o.channel,restoreCumulative:te,setChallenge(e){o.lastChallenge=e},topUpIfNeeded:ee});t&&(c=!0,s=re(t))}if(!c&&!s.ok&&!s.receipt){if(i.created.size?await h():await ne(i.committed??n),await l())continue;return s}return s}}finally{d=void 0}}async function ae(e){let t=await Uc({createSessionCredential:w,fetch:r.fetch,getMinimumSpent:()=>o.spent,lastUrl:o.lastUrl,resolveSignedCloseAmount:t=>M(e,t,!0),signedCloseAmount:M(e),setChallenge(e){o.lastChallenge=e},target:e});return t&&(E(),_({type:`closeStarted`}),_({type:`closed`,receipt:t})),t}let F={createSessionCredential:w,doFetch:ie,fetch:r.fetch,getChannel:()=>o.channel,getChallenge:()=>o.lastChallenge,assertVoucherWithinLocalLimit:N,acceptReceipt(e){T(e)},topUpIfNeeded:ee},oe={get channelId(){return o.channel?.channelId},get cumulative(){return o.channel?.cumulativeAmount??0n},get opened(){return o.channel?.opened??!1},get state(){return o.state},fetch:ie,async topUp(e){let t=kc({amount:e,assertVoucherWithinLocalLimit:N,channel:o.channel,decimals:r.decimals,lastChallenge:o.lastChallenge,lastUrl:o.lastUrl});return P({additionalDeposit:t.additionalDeposit,challenge:t.challenge,channelId:t.channelId,input:t.input})},async sse(e,t){return Wc(e,t,F)},async ws(e,t){if(!r.WebSocket)throw Error("No WebSocket implementation available. Pass `webSocket` to sessionManager() in this runtime.");let n=Lc(e),i=t?.signal?{signal:t.signal}:void 0;await O(n,i);let a=o.channel?.opened?o.channel.channelId:void 0,{challenge:s,credential:l,httpUrl:u,wsUrl:d}=await $c({async createSessionCredential(e,i){return o.lastChallenge=e,await si(b,{challenge:e,context:i,fetch:r.fetch,input:n,signal:t?.signal}),w(e,i)},fetch:r.fetch,input:e,onProbeUrl(e){o.lastUrl=e.toString()},probeInit:xl(n,i,a),signal:t?.signal});return o.lastChallenge=s,il({challenge:s,credential:l,httpUrl:u,WebSocket:r.WebSocket,wsUrl:d,options:t,createSessionCredential:w,getChannel:()=>o.channel,setSocketSession(e){o.socketSession=e},async refreshChallenge(){let e=await Qc({fetch:r.fetch,input:u,probeInit:xl(u,i,o.channel?.opened?o.channel.channelId:void 0),signal:t?.signal});return o.lastChallenge=e.challenge,e.challenge},assertVoucherWithinLocalLimit:N,acceptReceipt:T,rejectCloseReady:c.rejectCloseReady,rejectReceipt:c.rejectReceipt,settleCloseReady:c.settleCloseReady,settleReceipt:c.settleReceipt,topUpIfNeeded:ee,waitForReceipt:c.waitForReceipt})},async close(){let e=o.socketSession,t=js({channel:o.channel,currentSocket:e,lastChallenge:o.lastChallenge});if(!t)return;let n=e?.socket;if(e&&n?.readyState===Ec.OPEN){let r=await Us({activeSocket:n,createSessionCredential:w,currentSocket:e,spent:o.spent,target:t,waitForCloseReady:c.waitForCloseReady,waitForReceipt:c.waitForReceipt});return E(),_({type:`closeStarted`}),_({type:`closed`,receipt:r}),r}return ae(t)}};return gl(oe,{consumeSseResponse(e,t,n){return Gc(e,t,n,F)},rehydrate({channel:e,challenge:t,input:n,spent:r}){if(!e.opened)throw Error(`Cannot restore a closed session channel.`);if(!Mc(t))throw Error(`Cannot restore session: challenge is not tempo/session.`);if(r<0n)throw Error(`Cannot restore session: spent must not be negative.`);if(r>e.cumulativeAmount)throw Error(`Cannot restore session: spent exceeds local voucher state.`);N(e.cumulativeAmount);let i=A(e,t),a=i&&i.spent>r?i.spent:r;o.lastUrl=n,o.lastChallenge=t,o.channel=e,o.spent=a,_({type:`challengeReceived`,challengeId:t.id}),_({type:`activated`,challengeId:t.id,entry:e,spent:a.toString(),units:0})}}),oe}(function(e){e.serializeSnapshot=hs,e.deserializeSnapshot=gs})(wl||={});const Tl=(1n<<64n)-1n,El={dev_second:1n,day:86400n,week:604800n};function Dl(e){return e instanceof Date?e:new Date(e)}function Ol(e){let t=e.getTime();if(!Number.isFinite(t))throw new q({reason:`subscriptionExpires is invalid`});if(t%1e3!=0)throw new q({reason:`subscriptionExpires must be representable as whole seconds`});let n=t/1e3;if(n<=0||!Number.isSafeInteger(n))throw new q({reason:`subscriptionExpires cannot be represented in a Tempo key authorization`});return n}function kl(e){if(!/^[1-9]\d*$/.test(e.periodCount))throw new q({reason:`periodCount is invalid`});let t=El[e.periodUnit];if(t===void 0)throw new q({reason:`periodUnit is invalid`});let n=BigInt(e.periodCount)*t;if(n>Tl)throw new q({reason:`subscription period cannot be represented as an unsigned 64-bit integer`});if(n>BigInt(2**53-1))throw new q({reason:`subscription period cannot be represented exactly by this Tempo client`});return Number(n)}function Al(e){let{challengeExpires:t,request:n}=e;kl(n);let r=Ol(Dl(n.subscriptionExpires));if(t){let e=Math.floor(new Date(t).getTime()/1e3);if(!Number.isFinite(e)||r<=e)throw new q({reason:`subscriptionExpires must be strictly later than challenge expires`})}}function jl(e){return[{address:Wl(e.currency,`currency`),selector:`0x95777d59`,recipients:[Wl(e.recipient,`recipient`)]}]}function Ml(e){try{let t=E.fromBytes(C.toBytes(e));if(E.size(t)!==32)throw Error(`invalid challenge id size`);return t}catch{throw new q({reason:`challenge id must encode 32 bytes`})}}async function Nl(e){let{accessKey:t,account:n,challengeId:r,chainId:i,request:a}=e;if(typeof n.sign!=`function`)return;let o=Fl({accessKey:t,challengeId:r,chainId:i,request:a}),s=await n.sign({hash:I.getSignPayload(o)}),c=L.from(s);if(c.type===`keychain`||c.type===`multisig`)throw new q({reason:`keyAuthorization must use a primitive signature`});return I.from(o,{signature:s})}function Pl(e){let{accessKey:t,challengeId:n,chainId:r,payload:i,request:a}=e;if(i.type!==`keyAuthorization`)throw new q({reason:`invalid keyAuthorization payload`});let o=Il(i.signature),s=Ll(o);if(Rl({accessKey:t,authorization:o,chainId:r}),o.witness?.toLowerCase()!==Ml(n))throw new q({reason:`keyAuthorization challenge mismatch`});return zl(o,a),Vl(Bl(o),a),Hl(o.scopes,a),{authorization:o,source:{address:Ul(o,s),chainId:r}}}function Fl(e){let{accessKey:t,challengeId:n,chainId:r,request:i}=e;return I.from({address:Wl(t.accessKeyAddress,`accessKeyAddress`),chainId:BigInt(r),expiry:Ol(Dl(i.subscriptionExpires)),limits:[{token:Wl(i.currency,`currency`),limit:BigInt(i.amount),period:kl(i)}],scopes:jl(i),type:t.keyType,witness:Ml(n)})}function Il(e){try{return I.deserialize(e)}catch(e){throw e instanceof I.InvalidSignatureTypeError?new q({reason:`keyAuthorization must use a primitive signature`}):new q({reason:`invalid keyAuthorization payload`})}}function Ll(e){let t=e.signature;if(!t)throw new q({reason:`keyAuthorization must use a primitive signature`});return t}function Rl(e){let{accessKey:t,authorization:n,chainId:r}=e;if(n.chainId!==BigInt(r))throw new q({reason:`keyAuthorization chainId mismatch`});if(t){if(!l(n.address,Wl(t.accessKeyAddress,`accessKeyAddress`)))throw new q({reason:`keyAuthorization access key mismatch`});if(n.type!==t.keyType)throw new q({reason:`keyAuthorization key type mismatch`})}}function zl(e,t){if(Al({request:t}),e.expiry!==Ol(Dl(t.subscriptionExpires)))throw new q({reason:`keyAuthorization expiry mismatch`})}function Bl(e){let[t]=e.limits??[];if(!t||e.limits?.length!==1)throw new q({reason:`keyAuthorization must contain exactly one token limit`});return t}function Vl(e,t){if(!l(e.token,Wl(t.currency,`currency`)))throw new q({reason:`keyAuthorization currency mismatch`});if(e.limit!==BigInt(t.amount))throw new q({reason:`keyAuthorization amount mismatch`});if(e.period!==kl(t))throw new q({reason:`keyAuthorization period mismatch`})}function Hl(e,t){if(!e||e.length!==1)throw new q({reason:`keyAuthorization must contain a recipient-scoped transferWithMemo call`});let n=Wl(t.currency,`currency`),r=Wl(t.recipient,`recipient`),i=new Set;for(let t of e){if(!l(t.address,n))throw new q({reason:`keyAuthorization call target mismatch`});let e=Gl(t.selector);if(e!==`0xa9059cbb`&&e!==`0x95777d59`)throw new q({reason:`keyAuthorization selector not allowed`});if(i.has(e))throw new q({reason:`keyAuthorization duplicate selector`});if(i.add(e),t.recipients?.length!==1||!l(t.recipients[0],r))throw new q({reason:`keyAuthorization recipient mismatch`})}if(!i.has(`0x95777d59`))throw new q({reason:`keyAuthorization must allow transferWithMemo`})}function Ul(e,t){let n=I.getSignPayload(e);try{let e=L.extractAddress({payload:n,signature:t});if(!L.verify(t,{address:e,payload:n}))throw new q({reason:`keyAuthorization signature is invalid`});return e}catch(e){throw e instanceof q?e:new q({reason:`keyAuthorization signature is invalid`})}}function Wl(e,t){if(!c(e))throw new q({reason:`${t} must be an address`});return e.toLowerCase()}function Gl(e){return typeof e==`string`?e.toLowerCase():``}const Kl=B.object({accessKey:B.optional(B.custom()),account:B.optional(B.custom())});function ql(e={}){let t=sa({chain:P,getClient:e.getClient,rpcUrl:Un}),n=ra({account:e.account});return Nt(Ya,{context:Kl,async createCredential({challenge:r,context:i}){let a=r.request.methodDetails?.chainId??X.testnet,o=await t({chainId:a}),s=n(o,i),c=i?.accessKey??e.accessKey??r.request.methodDetails?.accessKey;if(!c)throw Error("No `accessKey` provided. The subscription challenge must include `accessKey`, or the client must pass one to parameters/context.");Yl(r.request),await e.validateRequest?.(r.request);let u=await Jl(o,{accessKey:c,account:s,challengeId:r.id,chainId:a,request:r.request}),d=Pl({accessKey:c,challengeId:r.id,chainId:a,payload:{signature:I.serialize(u),type:`keyAuthorization`},request:r.request});if(!l(d.source.address,s.address))throw Error(`keyAuthorization signer does not match the selected account`);return K({challenge:r,payload:{signature:I.serialize(u),type:`keyAuthorization`},source:`did:pkh:eip155:${a}:${s.address.toLowerCase()}`})}})}async function Jl(e,t){let{accessKey:n,account:r,challengeId:i,chainId:a,request:o}=t,s=await Nl({accessKey:n,account:r,challengeId:i,chainId:a,request:o});if(s)return s;let c=await e.request({method:`wallet_authorizeAccessKey`,params:[{address:n.accessKeyAddress,expiry:Ol(Dl(o.subscriptionExpires)),keyType:n.keyType,limits:[{token:o.currency,limit:E.fromNumber(BigInt(o.amount)),period:kl(o)}],scopes:jl(o),witness:Ml(i)}]});return I.fromRpc(c.keyAuthorization)}function Yl(e){kl(e),Ol(Dl(e.subscriptionExpires))}const Xl=Object.assign(ml,{manager:wl});function Zl(e={}){let t=e.expectedChainId!==void 0&&(e.allowedChainIds===void 0||e.allowedChainIds.includes(e.expectedChainId)),n=e.expectedChainId===void 0?e:{...e,allowedChainIds:t?[e.expectedChainId]:[]};return[Za(e),Xl(n)]}(function(e){e.charge=Za,e.common=Zl,e.session=Xl,e.subscription=ql})(Zl||={});const Ql=N.union([N.boolean(),N.literal(`true`).transform(()=>!0),N.literal(`false`).transform(()=>!1)]);async function $l(e){process.stdout.write(Buffer.from(await e.arrayBuffer()))}const eu=N.object({allowCustomEscrow:N.optional(Ql),autoSwap:N.optional(Ql),channel:N.optional(N.coerce.string()),deposit:N.optional(N.union([N.string(),N.number()])),payWith:N.optional(N.string()),slippage:N.optional(N.coerce.number()),tokenIn:N.optional(N.string())}),tu=[`allowCustomEscrow`,`autoSwap`,`channel`,`deposit`,`payWith`,`slippage`,`tokenIn`];function nu(){let t;return lr({method:`tempo`,supports(e){return e.method===`tempo`&&[`charge`,`session`].includes(e.intent)},async setup({challenge:n,options:r,methodOpts:i}){let a=ar(r.account),o=n.request,c=o.currency,l=cu(i),u=fu({autoSwap:l.autoSwap??r.autoSwap,payWith:l.payWith??r.payWith,slippage:l.slippage??r.slippage,tokenIn:l.tokenIn}),d=c??``,f=o.decimals??6,p,m,h,g=!1,_=process.env.MPPX_PRIVATE_KEY?.trim()||(Gn(a)?void 0:await or(a).get());if(!_&&Gn(a)&&xu()){g=!0;let t=yu(a);if(t){let i=Jn(r.rpcUrl,{network:r.network});h=e({chain:await Yn({network:r.network,rpcUrl:i}),transport:s(i)}),uu({challenge:n,clientChainId:h.chain?.id}),p=h.chain?.blockExplorers?.default?.url;let a=c?await Qn(h,c,t.wallet_address).catch(()=>void 0):void 0;d=a?.symbol??c??``,f=a?.decimals??o.decimals??6}}else if(_)m=de(_);else{let e=Cu();if(e){let t=await or(e).get();t&&(m=de(t))}if(!m)throw r.account?new Y({code:`ACCOUNT_NOT_FOUND`,message:`Account "${a}" not found.`,exitCode:69}):new Y({code:`ACCOUNT_NOT_FOUND`,message:`No account found.`,exitCode:69})}if(!g&&m){let t=Jn(r.rpcUrl,{network:r.network});h=e({chain:await Yn({network:r.network,rpcUrl:t}),transport:s(t)}),uu({challenge:n,clientChainId:h.chain?.id}),p=h.chain?.blockExplorers?.default?.url;let i=c?await Qn(h,c,m.address).catch(()=>void 0):void 0;d=i?.symbol??c??``,f=i?.decimals??o.decimals??6}if(g)return{tokenSymbol:d,tokenDecimals:f,explorerUrl:p,methods:[],async createCredential(e){let t=e.headers.get(`www-authenticate`);if(!t)throw Error(`No WWW-Authenticate header in 402 response.`);return Su(t)}};if(!m||!h)throw new Y({code:`ACCOUNT_NOT_FOUND`,message:`Tempo requires a configured account.`,exitCode:69});let v=Zl({account:m,...l.allowCustomEscrow===void 0?{}:{allowCustomEscrow:l.allowCustomEscrow},getClient:()=>h,...u===void 0?{}:{autoSwap:u},maxDeposit:(()=>{if(n.intent!==`session`)return;let e=n.request.suggestedDeposit,t=(l.deposit===void 0?void 0:String(l.deposit))??e??(Zn(h.chain)?`10`:void 0);if(!t)throw new Y({code:`MISSING_DEPOSIT`,message:`Session payment requires a deposit. Use -M deposit=<amount> or connect to testnet.`,exitCode:2});return t})()}),y=(()=>{if(!l.channel)return;let e=l.channel,t=mu(e);return{channelId:e,...t!==void 0&&{cumulativeAmountRaw:t.toString()}}})();return t={descriptor:void 0,async signVoucher({channelId:e,cumulativeAmount:r,escrowContract:i,chainId:a,action:o=`voucher`}){let s=t?.descriptor;if(!s)throw Error(`session descriptor not available`);let c={channelId:e,cumulativeAmount:r},l=await Bo(h,m,c,i,a);return K({challenge:n,payload:{action:o,channelId:e,...o===`close`?{closeSignature:await Vo(h,m,c,i,a)}:{},descriptor:s,cumulativeAmount:r.toString(),signature:l},source:`did:pkh:eip155:${a}:${m.address}`})},source:`did:pkh:eip155:${h.chain.id}:${m.address}`},{tokenSymbol:d,tokenDecimals:f,explorerUrl:p,methods:[...v],credentialContext:y}},prepareCredentialRequest({challenge:e,headers:t}){e.intent===`session`&&(t.Accept=`text/event-stream`)},async handleResponse(e){if(e.challenge.intent!==`session`||!t)return!1;let{challenge:n,credential:r,response:i,fetchUrl:a,fetchInit:o,verbose:s}=e,{silent:c,confirmEnabled:l,tokenSymbol:u,tokenDecimals:d,explorerUrl:f,shownKeys:p}=e,m=c?e=>{}:e=>process.stderr.write(e),h=Ct(r),g=n.request,_=g.methodDetails,v=h.payload.channelId,y=_?.escrowContract??_?.escrow??`0x4d50500000000000000000000000000000000000`,b=_?.chainId??0,x=BigInt(g.amount),S=`cumulativeAmount`in h.payload&&h.payload.cumulativeAmount?BigInt(h.payload.cumulativeAmount):0n;if(`descriptor`in h.payload&&(t.descriptor=h.payload.descriptor),s>=1){if(h.payload.action===`open`){let e=g.suggestedDeposit,t=e?` ${Z.dim(`(deposit ${e} ${u})`)}`:``;m(`${l?``:`
8
+ `}${Z.dim(`Channel opened ${h.payload.channelId}`)}${t}\n`)}else m(`${l?``:`
9
+ `}${Z.dim(`Channel reused ${h.payload.channelId}`)}\n`)}let w=i;w.ok&&!w.headers.get(`Content-Type`)?.includes(`text/event-stream`)&&h.payload.action===`open`&&`cumulativeAmount`in h.payload&&(S=BigInt(h.payload.cumulativeAmount));let T=w.headers.get(R.paymentReceipt);if(T)try{let e=JSON.parse(C.toString(T));iu(e,S),typeof e.acceptedCumulative==`string`&&e.acceptedCumulative&&hu(v,S),s>=1&&ru(e,{info:m,shownKeys:p,tokenSymbol:u,tokenDecimals:d,explorerUrl:f,handler:this,prefix:`
10
+ `})}catch{}return(w.headers.get(`Content-Type`)??``).includes(`text/event-stream`)?await au(w,{challenge:n,channelId:v,escrowContract:y,chainId:b,cumulativeAmount:S,tickCost:x,fetchUrl:a,fetchInit:o,session:t,info:m,verbose:s,shownKeys:p,tokenSymbol:u,tokenDecimals:d,explorerUrl:f,handler:this}):(await $l(w),v&&y&&b&&(l&&m(`
11
+ `),l&&!await e.confirm(`Close channel?`,!0)?s>=1&&m(`${Z.dim(`Kept channel open.`)}\n`):await ou({channelId:v,cumulativeAmount:S,escrowContract:y,chainId:b,fetchUrl:a,fetchInit:o,session:t,info:m,verbose:s,tokenSymbol:u,tokenDecimals:d,explorerUrl:f,confirmEnabled:l}))),!0},formatReceiptField(e,t){(e===`reference`||e===`txHash`)&&typeof t==`string`&&t.startsWith(`0x`)}})}function ru(e,t){t.info(`${t.prefix??``}${Z.bold(Z.green(`Payment Receipt`))}\n`);let n=[],r=e.channelId&&e.reference&&e.channelId===e.reference,i=new Set([`acceptedCumulative`,`spent`]);for(let[a,o]of Object.entries(e)){if(o===void 0||t.shownKeys.has(a)||a===`reference`&&r)continue;let e=t.handler.formatReceiptField?.(a,o);e===void 0?i.has(a)&&typeof o==`string`?n.push([a,`${o} ${Z.dim(`(${Kn(BigInt(o),t.tokenSymbol,t.tokenDecimals)})`)}`]):(a===`reference`||a===`txHash`)&&typeof o==`string`&&t.explorerUrl?n.push([a,Wn(`${t.explorerUrl}/tx/${o}`,o)]):n.push([a,String(o)]):n.push([a,e])}n.sort(([e],[t])=>e.localeCompare(t));let a=Math.max(...n.map(([e])=>e.length));for(let[e,r]of n)t.info(` ${Z.dim(e.padEnd(a))} ${r}\n`);t.prefix&&t.info(`
12
+ `)}function iu(e,t){if(typeof e.acceptedCumulative!=`string`)return;let n=BigInt(e.acceptedCumulative),r=typeof e.spent==`string`?BigInt(e.spent):0n;if(r>n)throw Error(`receipt spent exceeds accepted cumulative voucher amount`);if(n>t)throw Error(`receipt accepted cumulative exceeds locally signed voucher amount`);if(r>t)throw Error(`receipt spent exceeds locally signed voucher amount`)}async function au(e,t){let n=t.cumulativeAmount,r=e.body?.getReader();if(!r)throw Error(`No response body`);let i=new TextDecoder,a=``,o=``,s=t.verbose?await su():void 0,c=(()=>{if(!s||!Z.isColorSupported)return;let e=e=>Math.max(0,Math.min(255,Math.round(e))),t=.299*s.r+.587*s.g+.114*s.b<128?1:-1,n=n=>r=>`\x1b[48;2;${e(s.r+n*t)};${e(s.g+n*t)};${e(s.b+n*t)}m${r}\x1b[49m`;return[n(12),n(24)]})(),l=0,u=e=>{if(c){let t=c[l%c.length];process.stdout.write(e.replace(/[^\n]+/g,e=>t(e))),l++}else process.stdout.write(e)},d=async e=>{for(let r of e){if(r.startsWith(`event: `)){o=r.slice(7).trim();continue}if(!r.startsWith(`data: `)){r===``&&(o=``);continue}let e=r.slice(6);if(e.trim()!==`[DONE]`){if(o===`payment-need-voucher`&&t.channelId&&t.escrowContract&&t.chainId){try{let r=JSON.parse(e);if(r.channelId!==t.channelId)throw Error(`payment-need-voucher channelId does not match current session`);let i=BigInt(r.requiredCumulative);if(i>n+t.tickCost)throw Error(`payment-need-voucher exceeds next locally billable amount`);n=n>i?n:i;let a=await t.session.signVoucher({channelId:t.channelId,cumulativeAmount:n,escrowContract:t.escrowContract,chainId:t.chainId});await globalThis.fetch(t.fetchUrl,{method:`POST`,headers:{[R.authorization]:a}})}catch(e){t.info(Z.dim(Z.yellow(` [voucher failed: ${e instanceof Error?e.message:e}]`)))}o=``;continue}if(o===`payment-receipt`){if(t.verbose>=1)try{ru(JSON.parse(e),{info:t.info,shownKeys:t.shownKeys,tokenSymbol:t.tokenSymbol,tokenDecimals:t.tokenDecimals,explorerUrl:t.explorerUrl,handler:t.handler,prefix:`
13
13
 
14
14
  `})}catch{}o=``;continue}if(e.length===0)u(`
15
15
  `);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(`
16
- `);a=n.pop(),await d(n)}a.trim()&&await d([a]),t.channelId&&t.escrowContract&&t.chainId&&await Jl({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 Jl(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(iu(e.channelId),e.verbose>=1){let t=n.headers.get(R.paymentReceipt),r;if(t)try{let e=JSON.parse(S.toString(t));typeof e.txHash==`string`&&(r=e.txHash)}catch{}let i=r&&e.explorerUrl?` ${X.dim(Un(`${e.explorerUrl}/tx/${r}`,r))}`:``;e.info(`${X.dim(`Channel closed.`)} ${X.dim(`Spent ${Gn(e.cumulativeAmount,e.tokenSymbol,e.tokenDecimals)}.`)}${i}\n`)}}else{let t=await n.text().catch(()=>``);e.info(`\n${X.dim(X.yellow(`Channel close failed`))} ${X.dim(`(${n.status})`)}\n`),e.info(`${X.dim(` channelId: ${e.channelId}`)}\n${X.dim(` cumulativeAmount: ${e.cumulativeAmount}`)}\n${X.dim(` escrowContract: ${e.escrowContract}`)}\n${X.dim(` chainId: ${e.chainId}`)}\n${X.dim(` response: ${t||`(empty)`}`)}\n`)}}function Yl(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 Xl(e){return Zl(Hl,e,Ul)}function Zl(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 Ql(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 J({code:`CHAIN_MISMATCH`,message:`Challenge requires chainId ${t}, but RPC is chainId ${e.clientChainId}.${n}`,exitCode:2})}function $l(e){if(e)return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function eu(e){let t=$l(e.tokenIn)??$l(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 tu(){return j.join(process.env.XDG_CONFIG_HOME||j.join(A.homedir(),`.config`),`mppx`,`channels`)}function nu(e){try{let t=k.readFileSync(j.join(tu(),e),`utf-8`).trim();return t?BigInt(t):void 0}catch{return}}function ru(e,t){let n=tu();k.mkdirSync(n,{recursive:!0}),k.writeFileSync(j.join(n,e),t.toString(),`utf-8`)}function iu(e){try{k.unlinkSync(j.join(tu(),e))}catch{}}function au(){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 ou(){try{let e=k.readFileSync(au(),`utf-8`),t=[],n;for(let r of e.split(`
17
- `)){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 su(e){let t=ou();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 cu;function lu(){if(cu!==void 0)return cu;try{O.execFileSync(`which`,[`tempo`],{stdio:`ignore`}),cu=!0}catch{cu=!1}return cu}async function uu(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 du(){let e=nr();if(Wn(e.get())&&!lu()&&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 fu=[...Object.entries(Te),...Object.entries(Ee),...Object.entries(De),...Object.entries(Oe)];function pu(){return sr({method:`evm`,supports:mu,async setup({challenge:e,options:t}){let n=e.request,r=n.network?hu(Fe(n.network)):void 0,i=n.network&&n.asset?fu.find(([,e])=>Ne(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`?L({address:n.asset,decimals:i?.[1].decimals??6,network:n.network,transfer:{name:a,type:`eip3009`,version:o}}):void 0,c=await or(t.account);return{explorerUrl:r?.blockExplorers?.default?.url,methods:[...In({account:c,...s&&{currencies:[s]}})],tokenDecimals:i?.[1].decimals??6,tokenSymbol:i?.[0]??``}}})}function mu(e){if(!yn(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 hu(e){return Object.values(y).find(t=>t.id===e)}export{sr as createPlugin,cr as evm,_r as stripe,Wl as tempo,pu as x402};
16
+ `);a=n.pop(),await d(n)}a.trim()&&await d([a]),t.channelId&&t.escrowContract&&t.chainId&&await ou({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 ou(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(gu(e.channelId),e.verbose>=1){let t=n.headers.get(R.paymentReceipt),r;if(t)try{let e=JSON.parse(C.toString(t));typeof e.txHash==`string`&&(r=e.txHash)}catch{}let i=r&&e.explorerUrl?` ${Z.dim(Wn(`${e.explorerUrl}/tx/${r}`,r))}`:``;e.info(`${Z.dim(`Channel closed.`)} ${Z.dim(`Spent ${Kn(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 su(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 cu(e){return lu(eu,e,tu)}function lu(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 uu(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 du(e){if(e)return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function fu(e){let t=du(e.tokenIn)??du(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 pu(){return M.join(process.env.XDG_CONFIG_HOME||M.join(j.homedir(),`.config`),`mppx`,`channels`)}function mu(e){try{let t=A.readFileSync(M.join(pu(),e),`utf-8`).trim();return t?BigInt(t):void 0}catch{return}}function hu(e,t){let n=pu();A.mkdirSync(n,{recursive:!0}),A.writeFileSync(M.join(n,e),t.toString(),`utf-8`)}function gu(e){try{A.unlinkSync(M.join(pu(),e))}catch{}}function _u(){return j.platform()===`darwin`?M.join(j.homedir(),`Library`,`Application Support`,`tempo`,`wallet`,`keys.toml`):M.join(process.env.XDG_DATA_HOME||M.join(j.homedir(),`.local`,`share`),`tempo`,`wallet`,`keys.toml`)}function vu(){try{let e=A.readFileSync(_u(),`utf-8`),t=[],n;for(let r of e.split(`
17
+ `)){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 yu(e){let t=vu();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 bu;function xu(){if(bu!==void 0)return bu;try{k.execFileSync(`which`,[`tempo`],{stdio:`ignore`}),bu=!0}catch{bu=!1}return bu}async function Su(e){return new Promise((t,n)=>{k.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 Cu(){let e=ir();if(Gn(e.get())&&!xu()&&j.platform()===`darwin`)try{let t=k.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 wu=[...Object.entries(Ee),...Object.entries(De),...Object.entries(Oe),...Object.entries(ke)];function Tu(){return lr({method:`evm`,supports:Eu,async setup({challenge:e,options:t}){let n=e.request,r=n.network?Du(Ie(n.network)):void 0,i=n.network&&n.asset?wu.find(([,e])=>Pe(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`?we({address:n.asset,decimals:i?.[1].decimals??6,network:n.network,transfer:{name:a,type:`eip3009`,version:o}}):void 0,c=await cr(t.account);return{explorerUrl:r?.blockExplorers?.default?.url,methods:[...Ln({account:c,...s&&{currencies:[s]}})],tokenDecimals:i?.[1].decimals??6,tokenSymbol:i?.[0]??``}}})}function Eu(e){if(!bn(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 Du(e){return Object.values(b).find(t=>t.id===e)}export{lr as createPlugin,ur as evm,yr as stripe,nu as tempo,Tu as x402};