mppx 0.14.1 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +1 -1
  3. package/dist/Expires.js +1 -1
  4. package/dist/Store.d.ts +2 -2
  5. package/dist/Store.js +13 -3
  6. package/dist/cli/cli.js +137 -131
  7. package/dist/cli/plugins/index.js +11 -11
  8. package/dist/cli/validate/payment.d.ts +12 -0
  9. package/dist/cli/validate/payment.js +113 -14
  10. package/dist/client/Mppx.d.ts +13 -3
  11. package/dist/client/Mppx.js +47 -22
  12. package/dist/client/internal/Fetch.d.ts +11 -0
  13. package/dist/client/internal/Fetch.js +46 -8
  14. package/dist/client/internal/ProofRealm.d.ts +21 -0
  15. package/dist/client/internal/ProofRealm.js +55 -0
  16. package/dist/{attestation → extensions/identity}/Constants.d.ts +2 -2
  17. package/dist/{attestation → extensions/identity}/Constants.js +2 -2
  18. package/dist/extensions/identity/Types.d.ts +21 -0
  19. package/dist/extensions/identity/index.d.ts +7 -0
  20. package/dist/extensions/identity/index.js +6 -0
  21. package/dist/{attestation → extensions/identity}/internal/HttpMessageSignature.d.ts +3 -3
  22. package/dist/{attestation → extensions/identity}/internal/HttpMessageSignature.js +12 -10
  23. package/dist/extensions/identity/internal/SigningContext.d.ts +6 -0
  24. package/dist/{attestation → extensions/identity}/internal/SigningContext.js +3 -3
  25. package/dist/extensions/identity/internal/Verification.d.ts +9 -0
  26. package/dist/extensions/identity/internal/Verification.js +10 -0
  27. package/dist/{tap → extensions/identity/tap}/Constants.js +1 -1
  28. package/dist/extensions/identity/tap/client/index.d.ts +32 -0
  29. package/dist/{tap → extensions/identity/tap}/client/index.js +13 -9
  30. package/dist/extensions/identity/tap/server/index.d.ts +27 -0
  31. package/dist/{tap → extensions/identity/tap}/server/index.js +12 -4
  32. package/dist/{web-bot-auth → extensions/identity/web-bot-auth}/Constants.js +1 -1
  33. package/dist/{web-bot-auth → extensions/identity/web-bot-auth}/client/index.d.ts +6 -5
  34. package/dist/{web-bot-auth → extensions/identity/web-bot-auth}/client/index.js +5 -5
  35. package/dist/{web-bot-auth → extensions/identity/web-bot-auth}/server/index.d.ts +6 -5
  36. package/dist/{web-bot-auth → extensions/identity/web-bot-auth}/server/index.js +6 -4
  37. package/dist/identity/Client.d.ts +34 -0
  38. package/dist/identity/Client.js +133 -0
  39. package/dist/identity/Server.d.ts +46 -0
  40. package/dist/identity/Server.js +145 -0
  41. package/dist/identity/Types.d.ts +90 -0
  42. package/dist/identity/Types.js +2 -0
  43. package/dist/{attestation → identity}/index.d.ts +2 -2
  44. package/dist/{attestation → identity}/index.js +1 -2
  45. package/dist/identity/internal/SigningContext.d.ts +6 -0
  46. package/dist/identity/internal/SigningContext.js +11 -0
  47. package/dist/integrations/x402/Evm.d.ts +2 -0
  48. package/dist/internal/version.d.ts +2 -2
  49. package/dist/internal/version.js +1 -1
  50. package/dist/mcp/client/McpClient.d.ts +5 -0
  51. package/dist/mcp/client/McpClient.js +2 -0
  52. package/dist/middlewares/express.js +18 -6
  53. package/dist/proxy/Proxy.js +10 -5
  54. package/dist/proxy/Service.d.ts +42 -4
  55. package/dist/proxy/Service.js +21 -5
  56. package/dist/server/Mppx.d.ts +32 -8
  57. package/dist/server/Mppx.js +144 -54
  58. package/dist/stripe/server/internal/html.gen.js +1 -1
  59. package/dist/tempo/Methods.d.ts +5 -0
  60. package/dist/tempo/Methods.js +1 -0
  61. package/dist/tempo/client/Subscription.d.ts +5 -0
  62. package/dist/tempo/internal/charge.js +2 -1
  63. package/dist/tempo/internal/fee-payer.d.ts +0 -2
  64. package/dist/tempo/internal/fee-payer.js +0 -4
  65. package/dist/tempo/server/Charge.js +4 -0
  66. package/dist/tempo/server/Methods.d.ts +26 -0
  67. package/dist/tempo/server/Subscription.d.ts +5 -0
  68. package/dist/tempo/server/Subscription.js +8 -5
  69. package/dist/tempo/server/internal/html.gen.js +1 -1
  70. package/dist/tempo/session/client/Runtime.d.ts +2 -0
  71. package/dist/tempo/session/client/Session.js +1 -1
  72. package/dist/tempo/session/client/SessionManager.d.ts +6 -0
  73. package/dist/tempo/session/client/SessionManager.js +14 -7
  74. package/dist/tempo/session/client/Transports.d.ts +12 -3
  75. package/dist/tempo/session/client/Transports.js +37 -11
  76. package/dist/tempo/session/precompile/Chain.js +0 -3
  77. package/dist/tempo/session/server/Ws.d.ts +5 -2
  78. package/dist/tempo/session/server/Ws.js +11 -2
  79. package/dist/tempo/subscription/Store.d.ts +7 -1
  80. package/dist/tempo/subscription/Store.js +66 -13
  81. package/dist/tempo/subscription/Types.d.ts +2 -0
  82. package/package.json +15 -11
  83. package/dist/attestation/Client.d.ts +0 -17
  84. package/dist/attestation/Client.js +0 -28
  85. package/dist/attestation/Server.d.ts +0 -4
  86. package/dist/attestation/Server.js +0 -8
  87. package/dist/attestation/Types.d.ts +0 -76
  88. package/dist/attestation/internal/SigningContext.d.ts +0 -4
  89. package/dist/tap/client/index.d.ts +0 -26
  90. package/dist/tap/server/index.d.ts +0 -20
  91. /package/dist/{attestation → extensions/identity}/Types.js +0 -0
  92. /package/dist/{tap → extensions/identity/tap}/Constants.d.ts +0 -0
  93. /package/dist/{tap → extensions/identity/tap}/Types.d.ts +0 -0
  94. /package/dist/{tap → extensions/identity/tap}/Types.js +0 -0
  95. /package/dist/{tap → extensions/identity/tap}/index.d.ts +0 -0
  96. /package/dist/{tap → extensions/identity/tap}/index.js +0 -0
  97. /package/dist/{web-bot-auth → extensions/identity/web-bot-auth}/Constants.d.ts +0 -0
  98. /package/dist/{web-bot-auth → extensions/identity/web-bot-auth}/Types.d.ts +0 -0
  99. /package/dist/{web-bot-auth → extensions/identity/web-bot-auth}/Types.js +0 -0
  100. /package/dist/{web-bot-auth → extensions/identity/web-bot-auth}/index.d.ts +0 -0
  101. /package/dist/{web-bot-auth → extensions/identity/web-bot-auth}/index.js +0 -0
  102. /package/dist/{web-bot-auth → extensions/identity/web-bot-auth}/internal/JwkThumbprint.d.ts +0 -0
  103. /package/dist/{web-bot-auth → extensions/identity/web-bot-auth}/internal/JwkThumbprint.js +0 -0
  104. /package/dist/{web-bot-auth → extensions/identity/web-bot-auth}/internal/SignatureAgent.d.ts +0 -0
  105. /package/dist/{web-bot-auth → extensions/identity/web-bot-auth}/internal/SignatureAgent.js +0 -0
@@ -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,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 F}from"viem/tempo/chains";import{ousd as I,pathusd as ee,usdce as te}from"viem/tokens";import{Abis as ne,Account as re,Actions as L,Addresses as ie,TokenId as ae,Transaction as oe,withFeePayer as se}from"viem/tempo";import{parseAccount as ce,privateKeyToAccount as le}from"viem/accounts";import{createParser as ue}from"eventsource-parser";import{Channel as de,KeyAuthorization as R,SignatureEnvelope as z,TempoAddress as fe,TxEnvelopeTempo as pe}from"ox/tempo";var me=Object.defineProperty,he=Object.getOwnPropertyDescriptor,ge=Object.getOwnPropertyNames,_e=Object.prototype.hasOwnProperty,ve=(e,t)=>{let n={};for(var r in e)me(n,r,{get:e[r],enumerable:!0});return t||me(n,Symbol.toStringTag,{value:`Module`}),n},ye=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=ge(t),a=0,o=i.length,s;a<o;a++)s=i[a],!_e.call(e,s)&&s!==n&&me(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=he(t,s))||r.enumerable});return e},be=(e,t,n)=>(ye(e,t,`default`),n&&ye(n,t,`default`));const xe=Symbol(`mppx.x402.asset`);function Se(e){return{[xe]:!0,address:e.address,decimals:e.decimals,network:e.network,transfer:e.transfer}}function Ce(e,t){let n=e(t.chainId);return Se({address:n.address,decimals:n.decimals,network:Ne(t.chainId),transfer:Fe(t.transfer,n)})}const we={USDC:Se({address:`0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`,decimals:6,network:`eip155:8453`,transfer:{name:`USD Coin`,type:`eip3009`,version:`2`}})},Te={USDC:Se({address:`0x036CbD53842c5426634e7929541eC2318f3dCF7e`,decimals:6,network:`eip155:84532`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}})},Ee={USDC:Se({address:`0xcebA9300f2b948710d2653dD7B07f33A8B32118C`,decimals:6,network:`eip155:42220`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}}),USDT:Se({address:`0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e`,decimals:6,network:`eip155:42220`,transfer:{name:`Tether USD`,type:`eip3009`,version:`1`}})},De={USDC:Se({address:`0x01C5C0122039549AD1493B8220cABEdD739BC44E`,decimals:6,network:`eip155:11142220`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}})};function Oe(e){return typeof e!=`object`||!e?!1:e[xe]===!0}function ke(e){return typeof e==`function`&&typeof e.addresses==`object`&&typeof e.decimals==`number`}function Ae(e){return typeof e==`string`}function je(e,t){if(Oe(e))return e.network===t?{address:e.address,decimals:e.decimals,transfer:e.transfer}:void 0;if(ke(e)){let n=e.addresses[Pe(t)];return n?{address:n,decimals:e.decimals,name:e.name}:void 0}return{address:e}}function Me(e,t,n){let r=je(e,n);return r?a(r.address)===a(t):!1}function Ne(e){return`eip155:${e}`}function Pe(e){return Number(e.slice(7))}function Fe(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 Ie=ve({base:()=>we,baseSepolia:()=>Te,celo:()=>Ee,celoSepolia:()=>De,define:()=>Se,fromToken:()=>Ce,isAsset:()=>Oe,isRawAddress:()=>Ae,isToken:()=>ke,matches:()=>Me,resolve:()=>je,toChainId:()=>Pe,toNetwork:()=>Ne}),Le=ve({base:()=>Re,baseSepolia:()=>ze,celo:()=>Be,celoSepolia:()=>Ve});const Re=8453,ze=84532,Be=42220,Ve=11142220,B={acceptPayment:`Accept-Payment`,authorization:`Authorization`,paymentAuthorization:`Payment-Authorization`,paymentReceipt:`Payment-Receipt`,paymentSession:`Payment-Session`,paymentSessionSnapshot:`Payment-Session-Snapshot`,wwwAuthenticate:`WWW-Authenticate`},He={payment:`Payment`},Ue={evm:`evm`,stripe:`stripe`,tempo:`tempo`},We={charge:`charge`,session:`session`,subscription:`subscription`},Ge={sessionProtocol:`sessionProtocol`,sessionSnapshot:`sessionSnapshot`},Ke={v1:`v1`,v2:`v2`};function qe(e,t){if(!(!e||typeof e!=`object`))return e[t]}function Je(e){let t=C.toString(e);return JSON.parse(t)}function V(e){let t=D.canonicalize(e);return C.fromString(t,{pad:!1,url:!0})}var H=ve({address:()=>W,amount:()=>U,datetime:()=>Xe,datetimeInput:()=>Ze,hash:()=>G,period:()=>et,signature:()=>K,toDate:()=>Qe,toDatetimeString:()=>$e,unwrapOptional:()=>tt});import*as Ye from"zod/mini";be(H,Ye);function U(){return O.string().check(O.regex(/^\d+(\.\d+)?$/,`Invalid amount`))}function Xe(){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 Ze(e=`Invalid ISO 8601 datetime`){return O.pipe(O.union([Xe(),O.custom(e=>e instanceof Date)]),O.transform(Qe)).check(O.refine(e=>Number.isFinite(e.getTime()),e))}function Qe(e){return e instanceof Date?e:new Date(e)}function $e(e){return e instanceof Date?Number.isFinite(e.getTime())?e.toISOString():`Invalid Date`:e}function W(){return O.string().check(O.regex(/^0x[0-9a-fA-F]{40}$/,`Invalid address`))}function G(){return O.string().check(O.regex(/^0x[0-9a-fA-F]{64}$/,`Invalid hash`))}function et(){return O.string().check(O.regex(/^(day|week|month|year|\d+)$/,`Invalid period`))}function K(){return O.string().check(O.regex(/^0x[0-9a-fA-F]+$/,`Invalid signature`))}function tt(e){return e._zod.def.type===`optional`?e._zod.def.innerType:e}const nt=H.object({description:H.optional(H.string()),digest:H.optional(H.string().check(H.regex(/^sha-256=/,`Invalid digest format`))),expires:H.optional(Xe()),header:H.optional(H.string().check(H.regex(/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,`Invalid HTTP header name`))),id:H.string().check(H.minLength(1)),intent:H.string(),method:H.string(),meta:H.optional(H.record(H.string(),H.string())),opaque:H.optional(H.string()),realm:H.string(),request:H.record(H.string(),H.unknown())});function rt(e,t){let{description:n,digest:r,meta:i,method:a,header:o,intent:s,realm:c,request:l,secretKey:u}=e,d=_t(o)?void 0:o,f=e.expires?$e(e.expires):void 0,p=e.opaque??(i===void 0?void 0:V(i)),m=u?vt({...e,expires:f,...i!==void 0&&{meta:i},opaque:p},{secretKey:u}):e.id;return nt.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 it(e){let t=[q(`id`,e.id),q(`realm`,e.realm),q(`method`,e.method),q(`intent`,e.intent),q(`request`,V(e.request))];e.description!==void 0&&t.push(q(`description`,e.description)),e.digest!==void 0&&t.push(q(`digest`,e.digest)),e.expires!==void 0&&t.push(q(`expires`,e.expires));let n=e.header;return n!==void 0&&!_t(n)&&t.push(q(`header`,n)),e.opaque===void 0?e.meta!==void 0&&t.push(q(`opaque`,V(e.meta))):t.push(q(`opaque`,e.opaque)),`${He.payment} ${t.join(`, `)}`}function q(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 at(e,t){let n=ot(e);if(!n)throw Error(`Missing Payment scheme.`);let{request:r,opaque:i,...a}=st(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 rt({...a,request:Je(r),...i&&{opaque:i}},t)}function ot(e){let t=He.payment,[n]=dt(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 st(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]=ct(e,n);if(n=o,i in t)throw Error(`Duplicate parameter: ${i}`);t[i]=a}return t}function ct(e,t){if(e[t]===`"`)return lt(e,t+1);let n=t;for(;n<e.length&&e[n]!==`,`;)n++;return[e.slice(t,n).trim(),n]}function lt(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 ut(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 dt(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(!ut(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 ft(e,t){if(e.status!==402)throw Error(`Response status is not 402.`);return pt(e.headers,t)}function pt(e,t){let n=e.get(B.wwwAuthenticate);if(!n)throw Error(`Missing ${B.wwwAuthenticate} header.`);return mt(n,t)}function mt(e,t){let n=dt(e,He.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 at(e.slice(r,a).replace(/,\s*$/,``),t)})}function ht(e){let t=[e.realm,e.method,e.intent,V(e.request),e.expires??``,e.digest??``],n=e.header;return n!==void 0&&!_t(n)&&t.push(n),t.push(e.opaque??(e.meta?V(e.meta):``)),t.join(`|`)}function gt(e){return e.header??B.authorization}function _t(e){return e?.toLowerCase()===B.authorization.toLowerCase()}function vt(e,t){let n=ht(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 yt=class extends Error{name=`MissingPaymentSchemeError`;constructor(){super(`Missing Payment scheme.`)}},bt=class extends Error{name=`InvalidCredentialEncodingError`;constructor(){super(`Invalid base64url or JSON.`)}};function xt(e){if(e.length>65536)throw new bt;let t=e.match(RegExp(`^${He.payment}\\s+(.+)$`,`i`));if(!t?.[1])throw new yt;try{let e=C.toString(t[1]),n=JSON.parse(e),{opaque:r,request:i,meta:a,...o}=n.challenge,{meta:s,opaque:c}=St(r);return{challenge:nt.parse({...o,...s!==void 0&&{meta:s},...c!==void 0&&{opaque:c},request:Je(i)}),payload:n.payload,...n.source&&{source:n.source}}}catch{throw new bt}}function St(e){if(e===void 0)return{};if(typeof e==`string`)return{opaque:e};if(!Ct(e))throw Error(`Invalid opaque.`);return{meta:e,opaque:V(e)}}function Ct(e){return typeof e!=`object`||!e||Array.isArray(e)?!1:Object.values(e).every(e=>typeof e==`string`)}function wt(e){let{challenge:t,payload:n,source:r}=e;return{challenge:t,payload:n,...r&&{source:r}}}function Tt(e){let{meta:t,opaque:n,request:r,...i}=e.challenge,a=n??(t===void 0?void 0:V(t)),o={challenge:{...i,...a!==void 0&&{opaque:a},request:V(r)},payload:e.payload,...e.source&&{source:e.source}},s=JSON.stringify(o),c=C.fromString(s,{pad:!1,url:!0});return`${He.payment} ${c}`}var Et=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}}}},Dt=class extends Et{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}.`)}},J=class extends Et{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})}},Ot=class extends Et{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.`)}},kt=class extends Et{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 At(e,t){if(!e)throw new Dt({...t&&{id:t},reason:`missing required expires field`});if(Number.isNaN(new Date(e).getTime()))throw new Dt({...t&&{id:t},reason:`malformed expires timestamp`});if(new Date(e)<new Date)throw new Ot({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 C.fromString(JSON.stringify(e.parse(t)))},decode(t){try{return e.parse(JSON.parse(C.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=H.string().check(H.minLength(1)),zt=H.number().check(H.refine(e=>e>0,`Must be positive`)),Y=H.string().check(H.regex(/^\d+$/,`Invalid atomic amount`)),Bt=W(),Vt=H.string().check(H.regex(RegExp(`^eip155:\\d+$`),`Invalid EVM CAIP-2 network`)),Ht=H.object({description:H.optional(H.string()),iconUrl:H.optional(H.string()),mimeType:H.optional(H.string()),serviceName:H.optional(H.string()),tags:H.optional(H.array(H.string())),url:Rt});H.discriminatedUnion(`type`,[H.object({name:Rt,type:H.literal(`eip3009`),version:Rt}),H.object({name:H.optional(H.string()),type:H.literal(`permit2`),version:H.optional(H.string())})]);const Ut=H.object({amount:Y,asset:Rt,extra:H.optional(H.record(H.string(),H.unknown())),maxTimeoutSeconds:zt,network:Vt,payTo:Rt,scheme:H.enum(Ft)}),Wt=H.object({info:H.record(H.string(),H.unknown()),schema:H.record(H.string(),H.unknown())}),Gt=H.record(H.string(),Wt),Kt=H.object({accepts:H.array(Ut).check(H.minLength(1)),error:H.optional(H.string()),extensions:H.optional(Gt),resource:Ht,x402Version:H.literal(2)}),qt=H.object({authorization:H.object({from:Bt,nonce:G(),to:Bt,validAfter:Y,validBefore:Y,value:Y}),signature:K()}),Jt=H.object({permit2Authorization:H.object({deadline:Y,from:Bt,nonce:Y,permitted:H.object({amount:Y,token:Bt}),spender:Bt,witness:H.object({to:Bt,validAfter:Y})}),signature:K()}),Yt=H.union([qt,Jt]),Xt=H.object({accepted:Ut,extensions:H.optional(Gt),payload:Yt,resource:H.optional(Ht),x402Version:H.literal(2)});H.object({extensions:H.optional(Gt),extra:H.optional(H.record(H.string(),H.unknown())),invalidMessage:H.optional(H.string()),invalidReason:H.optional(H.string()),isValid:H.boolean(),payer:H.optional(H.string())});const Zt=H.object({amount:H.optional(Y),errorMessage:H.optional(H.string()),errorReason:H.optional(H.string()),extensions:H.optional(Gt),extra:H.optional(H.record(H.string(),H.unknown())),network:Rt,payer:H.optional(H.string()),success:H.boolean(),transaction:H.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(C.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=[V(e.accepted),V(e.resource),V(e.extensions)].join(`|`);return T.sha256(w.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=>Ae(e))&&!e.networks?.length)throw Error(`x402 exact raw currency allowlists require networks.`);if(r){let e=a(t.asset);if(!r.some(n=>Me(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)>f(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=>Me(e,r,t.network)),o=i?je(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=H.string().check(H.regex(/^\d+$/,`Invalid atomic amount`));H.object({name:H.string().check(H.minLength(1)),version:H.string().check(H.minLength(1))});const Sn=H.object({chainId:H.number(),credentialTypes:H.optional(H.array(H.enum(bn)).check(H.minLength(1))),decimals:H.optional(H.number()),permit2Address:H.optional(W()),splits:H.optional(H.array(H.object({amount:xn,recipient:W()})))});H.object({amount:xn,currency:W(),description:H.optional(H.string()),externalId:H.optional(H.string()),methodDetails:Sn,recipient:W()});const Cn=H.object({amount:U(),chainId:H.number(),currency:W(),credentialTypes:H.optional(H.array(H.enum(bn)).check(H.minLength(1))),decimals:H.number(),description:H.optional(H.string()),externalId:H.optional(H.string()),permit2Address:H.optional(W()),recipient:W(),splits:H.optional(H.array(H.object({amount:xn,recipient:W()})))}),wn=H.object({from:W(),nonce:G(),signature:K(),to:W(),type:H.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 T.keccak256(w.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:H.pipe(Cn,H.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 jn(e){return Mt(An,{canHandleChallenge({challenge:t}){return!Mn(t)||cn({challenge:t,config:e})},context:H.object({account:H.optional(H.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 Tt(wt({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=>Ae(e))&&!e.networks?.length)throw Error(`EVM raw currency allowlists require networks.`);if(i){let e=a(t.currency);if(!i.some(t=>Me(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)>f(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=>Me(e,r,i)),s=o?je(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=>Me(e,r,i)),s=o?je(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=Ie,e.chains=Le})(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 zn(this,e)}},Rn=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 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:I(X.mainnet).address,usdc:a(te(X.mainnet).address),pathUsd:ee(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 Rn({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`&&!yn(e),async setup({challenge:t,options:n}){let r=t.request,a=r.methodDetails,o=a?.chainId,c=o?dr(o):void 0,l=r.currency,u=await cr(n.account),d=[...Object.values(we),...Object.values(Te),...Object.values(Ee),...Object.values(De)],f=l??``;if(c&&l)try{let t=e({chain:c,transport:s()}),n=await h(t,{address:l,abi:i,functionName:`symbol`});n&&(f=n)}catch{}return{tokenSymbol:f,tokenDecimals:a?.decimals??6,explorerUrl:c?.blockExplorers?.default?.url,methods:[...In({account:u,currencies:d})]}}})}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=H.object({customer:H.optional(H.string().check(H.minLength(1))),hooks:H.optional(H.object({inputs:H.object({tax:H.object({calculation:H.string().check(H.minLength(1))})})})),metadata:H.optional(H.record(H.string(),H.string())),receipt_email:H.optional(H.string().check(H.minLength(1)))}),mr=H.custom(e=>typeof e==`function`),hr=H.union([pr,mr]),gr=jt({name:`stripe`,intent:`charge`,schema:{credential:{payload:H.object({externalId:H.optional(H.string()),spt:H.string()})},request:H.pipe(H.object({amount:U(),currency:H.string(),decimals:H.number(),description:H.optional(H.string()),externalId:H.optional(H.string()),metadata:H.optional(H.record(H.string(),H.string())),networkId:H.string(),paymentIntentOptions:H.optional(hr),paymentMethodTypes:H.array(H.string()).check(H.minLength(1)),recipient:H.optional(H.string())}),H.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 Mt(gr,{context:H.object({paymentMethod:H.optional(H.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 Tt({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 Rn({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 Rn({code:`STRIPE_ERROR`,message:`Failed to create SPT: ${(await d.json()).error.message}`,exitCode:77})}else throw new Rn({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+!!yn(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=[B.authorization,It,`PAYMENT-RESPONSE`,Lt];function Vr(e,t,n){let r=new Headers(e.headers);for(let e of Br)e===B.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=nt.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=ue({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=xt(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(B.wwwAuthenticate)?[]:ft(e)},setCredential(e,t,n){return Vr(e,n?.challenge?gt(n.challenge):B.authorization,t)}}}function ti(){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(rt({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,Lt,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))}function ci(e){return ii.get(e)}const li=new WeakMap,ui=new WeakMap,di=new WeakMap;function fi(e,t){return li.set(e,t),e}function pi(e){li.delete(e)}function mi(e,t,n){li.has(e)&&ui.set(t,n)}function hi(e){return ui.get(e)}function gi(e,t){return Promise.resolve(li.get(e)?.(t)??t.response)}function _i(e,t){return di.set(e,t),e}function vi(e,t){try{return di.get(e)?.(t)}catch{return}}const yi=Symbol.for(`mppx.fetch.wrapper`),bi=65536,xi=new WeakMap;async function Si(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>bi){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,bi),{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 Ci(e,t){let n=e?.attempt.settle;if(!n)return t.status!==`pending`;e.attempt.settle=void 0;let r=await n(t);return r||(e.attempt.settle=n),r}function wi(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??Ei(),u=t??Cr(a),d=qi(r),f=async(e,t,r)=>{let p=Ki(e,t?.headers),m=p.has(B.acceptPayment),h=Qi(p,u),g=Wi(e,t,p),_=Ui(e,t,p,h.header,m,n),v=await d(Ji(_.input),_.init),y=Gi(_.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 $i(Er(T,a,h.entries),S??s))[0];if(!i){if(await Ci(D,{challenges:T,response:v,status:`rejected`}),n>0)return v;throw Error(`No method found for challenges: ${T.map(e=>`${e.method}.${e.intent}`).join(`, `)}. Available: ${a.map(e=>`${e.name}.${e.intent}`).join(`, `)}`)}let u=i.challenge;w=u,E=i.method,w.expires&&At(w.expires,w.id);let p=ia(v,_.input,_.input),m=D,g=it(u),x=m?.method===i.method&&m?.key===g,k=!1;if(m){let e=await Ci(m,{challenges:T,response:v,status:x?`pending`:`rejected`});k=x&&!e}D=k?m:void 0;let A=ji(async n=>{if(n===void 0&&k&&m)return m.promise;k&&m&&(await Ci(m,{status:`rejected`}),D=void 0);let r=n??b;if(!oi(i.method))return Zi(u,i.method,r);let a={prepare:()=>si(i.method,{challenge:u,context:r,fetch:d,input:p,signal:Yi(e,t)})},o=a.prepare().then(()=>Zi(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`,Mi({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 Ci(M,{status:`rejected`}),D=void 0),Xi(j),await l.emit(`credential.created`,Ni({challenge:u,credential:j,init:t,input:e,method:i.method,response:v}));let N=e=>new kt({cause:e,challenge:u,credential:j,transactionHash:vi(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 Ci(M,{response:v,status:v.status>=300&&v.status<400?`pending`:v.ok?`accepted`:`rejected`}),D=void 0),v.ok&&Di(l,`payment.response`)&&await l.emit(`payment.response`,Pi({challenge:u,credential:j,init:t,input:e,method:i.method,response:v})),!P){if(v.status>=500&&Di(l,`payment.failed`)){try{v=await Si(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`,Fi({challenge:u,challenges:T,error:N(),init:t,input:e,method:i.method,response:v}))}return v.ok?gi(i.method,{challenge:u,credential:j,fetch:d,headers:_.headers,input:p,...r?{refetch:()=>f(Ji(_.input),t,!1)}:{},response:v,signal:Yi(e,t)}):v}}T=void 0;try{T=await c.getChallenges(v,y)}catch{}return await Ci(D,{challenges:T,response:v,status:`rejected`}),v}catch(n){throw await Ci(D,{challenges:T,response:v,status:`rejected`}),await l.emit(`payment.failed`,Fi({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[yi]=d,p}function Ti(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 Ei(){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 Oi(t,n);if(typeof e==`string`&&e.length>0){r=e;break}}return await Ai(e[`*`],t,n),r}case`credential.created`:await ki(e[`credential.created`],n),await Ai(e[`*`],t,n);return;case`payment.failed`:await ki(e[`payment.failed`],n),await Ai(e[`*`],t,n);return;case`payment.response`:await ki(e[`payment.response`],n),await Ai(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 xi.set(t,t=>e[t].size>0||e[`*`].size>0),t}function Di(e,t){return xi.get(e)?.(t)??!0}async function Oi(e,t){try{return await e(t)}catch{return}}async function ki(e,t){for(let n of e)try{await n(t)}catch{}}async function Ai(e,t,n){await ki(e,Object.freeze({name:t,payload:n}))}function ji(e){let t;return n=>(t??=e(n),t)}function Mi(e){return Object.freeze({challenge:Bi(e.challenge),challenges:e.challenges.map(e=>Bi(e)),createCredential:e.createCredential,init:Ii(e.init),input:Li(e.input),method:Ri(e.method),response:zi(e.response)})}function Ni(e){return Object.freeze({challenge:Bi(e.challenge),credential:e.credential,init:Ii(e.init),input:Li(e.input),method:Ri(e.method),...e.response===void 0?{}:{response:zi(e.response)}})}function Pi(e){return Object.freeze({challenge:Bi(e.challenge),credential:e.credential,init:Ii(e.init),input:Li(e.input),method:Ri(e.method),response:zi(e.response)})}function Fi(e){return Object.freeze({...e.challenge?{challenge:Bi(e.challenge)}:{},...e.challenges?{challenges:e.challenges.map(e=>Bi(e))}:{},error:e.error,init:Ii(e.init),input:Li(e.input),...e.method?{method:Ri(e.method)}:{},...e.response===void 0?{}:{response:zi(e.response)}})}function Ii(e){if(e)return Hi({...e,...e.headers?{headers:new Headers(e.headers)}:{}})}function Li(e){if(e instanceof Request)try{return e.clone()}catch{return e}return e instanceof URL?new URL(e):e}function Ri(e){return Hi(Object.assign({},e))}function zi(e){return e instanceof Response?e.clone():Bi(e)}function Bi(e){try{return Vi(structuredClone(e))}catch{return Hi(e)}}function Vi(e){if(!e||typeof e!=`object`||Object.isFrozen(e))return e;Object.freeze(e);for(let t of Object.values(e))Vi(t);return e}function Hi(e){return!e||typeof e!=`object`||Object.isFrozen(e)||Object.freeze(e),e}function Ui(e,t,n,r,i,a){let o=!!r&&!i&&ea(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(B.acceptPayment,r),t?(t.headers=s,{headers:s,init:t,input:e}):{headers:s,init:o?{headers:s}:void 0,input:e}}function Wi(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 Gi(e,t){return t===void 0?e:{...e,body:t}}function Ki(e,t){return t?new Headers(t):new Headers(e instanceof Request?e.headers:void 0)}function qi(e){let t=e;for(;t[yi];)t=t[yi];return t}function Ji(e){if(!(e instanceof Request)||!e.body||e.bodyUsed)return e;try{return e.clone()}catch{return e}}function Yi(e,t){if(t?.signal!==null)return t?.signal===void 0?e instanceof Request?e.signal:void 0:t.signal}function Xi(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 Zi(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&&mi(t,a,r),t.createCredential(a)}function Qi(e,t){let n=e.get(B.acceptPayment);if(!n)return t;try{return{...t,entries:wr(n),header:n}}catch{return t}}async function $i(e,t){return t?t(e):e}function ea(e,t){if(t===`always`)return!0;if(t===`never`)return!1;let n=ra(e);return t===`same-origin`?!na()||n.origin===globalThis.location.origin:t.origins.some(e=>ta(n,e))}function ta(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 na(){return globalThis.location!==void 0}function ra(e){return e instanceof URL?e:e instanceof Request?new URL(e.url):new URL(e,na()?globalThis.location.href:void 0)}function ia(e,t,n){if(!e.url)return t;let r=new URL(e.url),i=ra(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 aa(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 ce(r)}}function oa(e){return Object.fromEntries(Object.entries(e.headers??{}).filter(([e])=>e.toLowerCase()!==`content-type`))}const sa={[P.id]:P,[F.id]:F};function ca(e,t={}){return s(e.url,{fetchFn:e.fetch,fetchOptions:{headers:oa(e)},...t})}function la(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=se(n({request:t=>e(t)},{retryCount:0}),ca(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?se(s(r),ca(o)):s(r);return e({chain:sa[n]??{...i,id:n},transport:a})}}function ua(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 da(e,t){if(e!==void 0&&(t===void 0||!e.includes(t)))throw Error(`Chain ID not allowed: ${t??`unknown`}.`)}const fa=E.slice(T.keccak256(w.fromString(`mpp`),{as:`Hex`}),0,4);function pa(e){let t=T.keccak256(w.fromString(e),{as:`Hex`});return E.toBytes(E.slice(t,0,10))}function ma(e){let{serverId:t,clientId:n,challengeId:r}=e,i=new Uint8Array(32);return i.set(E.toBytes(fa),0),i[4]=1,i.set(pa(t),5),n&&i.set(pa(n),15),i.set(ha(r),25),E.fromBytes(i)}function ha(e){let t=T.keccak256(w.fromString(e),{as:`Hex`});return E.toBytes(E.slice(t,0,7))}function ga(e,t){return fe.resolve(e).toLowerCase()===fe.resolve(t).toLowerCase()}const _a=10000n,va=[Bn.pathUsd,Bn.usdc,Bn.ousd];async function ya(e,t){let{account:n,amountOut:r,tokenOut:i,tokenIn:a,slippage:o}=t;if(!Number.isFinite(o)||o<0||o>50)throw Error(`Auto-swap slippage must be between 0 and 50 percent.`);if(t.maxAmountIn!==void 0&&t.maxAmountIn<=0n)throw Error(`Auto-swap maxAmountIn must be positive.`);let s=a.filter(e=>!ga(e,i)),c=await Promise.allSettled([h(e,{...L.token.getBalance.call(e,{account:n,token:i}),account:null}),...s.map(t=>h(e,{...L.token.getBalance.call(e,{account:n,token:t}),account:null}))]),l=c[0];if(l.status!==`fulfilled`)throw l.reason;let u=l.value;if(u>=r)return;let d=r-u,f=BigInt(Math.round(o*100)),p=t.maxAmountIn??d+d*f/_a;for(let t=0;t<s.length;t++){let n=c[t+1];if(n.status!==`fulfilled`)continue;let r=n.value;if(r<=0n)continue;let a=s[t];try{let t=await L.dex.getBuyQuote(e,{account:null,tokenIn:a,tokenOut:i,amountOut:d});if(t<=0n||t>p)continue;let n=t+t*f/_a,o=n<p?n:p;if(r>=o)return[L.token.approve.call(e,{amount:o,spender:ie.stablecoinDex,token:a}),L.dex.buy.call({tokenIn:a,tokenOut:i,amountOut:d,maxAmountIn:o})]}catch{}}throw new xa({currency:i})}function ba(e,t){return e?e===!0?{tokenIn:t,slippage:1}:{tokenIn:e.tokenIn?[...e.tokenIn,...e.fallback===!1?[]:t.filter(t=>!e.tokenIn.some(e=>ga(e,t)))]:t,slippage:e.slippage??1,...e.maxAmountIn===void 0?{}:{maxAmountIn:e.maxAmountIn}}:!1}var xa=class extends Error{name=`InsufficientFundsError`;constructor({currency:e}){super(`Insufficient funds: no balance in ${e} and no viable swap route from fallback currencies.`)}};function Sa(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 Ca(e,t,n){t&&(n&&!n.some(e=>ga(e,t))||e.some(e=>ga(e,t))||e.push(t))}async function wa(e,t,n){try{return(await L.token.getBalance(e,{account:t,token:n})).amount>0n}catch{return!1}}function Ta(e){let t=e.chain?.feeToken;if(t)return ae.toAddress(t);let n=e.chain?.id;return n?Vn[n]:void 0}function Ea(e){let t=[];return Ca(t,Bn.pathUsd),Ca(t,Vn[e]),t}async function Da(e){let{account:t,allowedTokens:n,candidateTokens:r,client:i,prioritizeCandidates:a}=e,o=[];if(a)for(let e of r??[])Ca(o,e,n);if(Ca(o,await L.fee.getUserToken(i,{account:t}).then(e=>e?.address).catch(()=>void 0),n),Ca(o,Ta(i),n),!a)for(let e of r??[])Ca(o,e,n);for(let e of o)if(await wa(i,t,e))return e;return o[0]}const Oa=d([`function swapTo(address inputToken,uint256 amount,address targetToken,address recipient,bytes32 memo)`]);function ka(e){if(e!==void 0)return Hn[e]}function Aa(e){let t=ka(e.chainId);return!!t&&c(e.currency,{strict:!1})&&l(e.currency,t.token)}function ja(e){let t=ka(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:ne.tip20,functionName:`approve`,args:[t.swap,i]}),to:t.token},{data:r({abi:Oa,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 Ma(e,t){let n=ja(t);if(n)try{return await h(e,L.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 Na={Proof:[{name:`account`,type:`address`},{name:`challengeId`,type:`string`},{name:`realm`,type:`string`}]};function Pa(e){return{name:`MPP`,version:`3`,chainId:e}}function Fa(e){let{account:t,challengeId:n,realm:r}=e;return{account:t,challengeId:n,realm:r}}function Ia(e){let{account:t,chainId:n,challengeId:r,realm:i}=e;return{domain:Pa(n),types:Na,primaryType:`Proof`,message:Fa({account:t,challengeId:r,realm:i})}}function La(e){return`did:pkh:eip155:${e.chainId}:${e.address}`}const Ra=[`push`,`pull`],za=H.object({amount:U(),memo:H.optional(G()),recipient:H.pipe(H.string(),H.transform(e=>e))}),Ba=(1n<<64n)-1n,Va={dev_second:1n,day:86400n,week:604800n},Ha=H.pipe(W(),H.transform(e=>e.toLowerCase())),Ua=H.object({accessKeyAddress:Ha,keyType:H.enum([`p256`,`secp256k1`,`webAuthn`])}),Wa=H.object({accessKey:H.optional(Ua),chainId:H.optional(H.number())}),Ga=Ze(`subscriptionExpires must be a valid date`).check(H.refine(e=>e.getTime()%1e3==0,`subscriptionExpires must be representable as whole seconds`)),Ka=H.enum([`dev_second`,`day`,`week`]),qa=H.pipe(H.union([H.string(),H.bigint(),H.custom(e=>typeof e==`number`&&Number.isSafeInteger(e))]),H.transform(e=>e.toString())).check(H.regex(/^[1-9]\d*$/,`Invalid periodCount`),H.refine(e=>{try{return BigInt(e)<=Ba}catch{return!1}},`periodCount exceeds uint64`));function Ja(e){return H.refine(e=>{let{amount:t,decimals:n}=e;return f(t,n)>0n},e)}function Ya(e){let{periodCount:t,periodUnit:n}=e;try{let e=Va[n];return e!==void 0&&BigInt(t)*e<=Ba}catch{return!1}}const Xa=jt({name:`tempo`,intent:`charge`,schema:{credential:{payload:H.discriminatedUnion(`type`,[H.object({hash:G(),type:H.literal(`hash`)}),H.object({signature:K(),type:H.literal(`transaction`)}),H.object({signature:K(),type:H.literal(`proof`)})])},request:H.pipe(H.object({machineTokenEnabled:H.optional(H.boolean()),amount:U(),chainId:H.optional(H.number()),currency:H.string(),decimals:H.number(),description:H.optional(H.string()),externalId:H.optional(H.string()),feePayer:H.optional(H.pipe(H.union([H.boolean(),H.custom()]),H.transform(e=>typeof e==`object`||e))),memo:H.optional(H.never()),recipient:H.optional(H.string()),splits:H.optional(H.array(za).check(H.minLength(1),H.maxLength(10))),supportedModes:H.optional(H.array(H.enum(Ra)).check(H.minLength(1)))}).check(H.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`)),H.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}}}:{}})))}}),Za=jt({name:`tempo`,intent:`session`,schema:{credential:{payload:H.discriminatedUnion(`action`,[H.object({action:H.literal(`open`),authorizedSigner:H.optional(H.string()),channelId:G(),cumulativeAmount:U(),descriptor:H.optional(H.custom()),signature:K(),transaction:K(),type:H.literal(`transaction`)}),H.object({action:H.literal(`topUp`),additionalDeposit:U(),channelId:G(),descriptor:H.optional(H.custom()),transaction:K(),type:H.literal(`transaction`)}),H.object({action:H.literal(`voucher`),channelId:G(),cumulativeAmount:U(),descriptor:H.optional(H.custom()),signature:K()}),H.object({action:H.literal(`close`),channelId:G(),closeSignature:K(),cumulativeAmount:U(),descriptor:H.optional(H.custom()),signature:K()})])},request:H.pipe(H.object({amount:U(),chainId:H.optional(H.number()),channelId:H.optional(G()),currency:H.string(),decimals:H.number(),escrowContract:H.optional(H.string()),feePayer:H.optional(H.pipe(H.union([H.boolean(),H.custom()]),H.transform(e=>typeof e==`object`||e))),feeToken:H.optional(W()),minVoucherDelta:H.optional(U()),operator:H.optional(W()),recipient:H.optional(H.string()),sessionProtocol:H.optional(H.enum([Ke.v2,Ke.v1])),sessionSnapshot:H.optional(H.custom()),suggestedDeposit:H.optional(U()),unitType:H.string()}).check(H.refine(({amount:e,decimals:t})=>f(e,t)>0n,`Session amount must be greater than 0`)),H.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&&{[Ge.sessionProtocol]:l},...u!==void 0&&{[Ge.sessionSnapshot]:u}}})))}}),Qa=jt({name:`tempo`,intent:`subscription`,schema:{credential:{payload:H.object({signature:K(),type:H.literal(`keyAuthorization`)})},request:H.pipe(H.object({amount:U(),accessKey:H.optional(Ua),chainId:H.optional(H.number()),currency:Ha,decimals:H.number(),description:H.optional(H.string()),externalId:H.optional(H.string()),methodDetails:H.optional(Wa),periodCount:qa,periodUnit:Ka,recipient:Ha,subscriptionExpires:Ga}).check(Ja(`Subscription amount must be greater than 0`),H.refine(Ya,`Subscription period exceeds uint64`)),H.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}:{}}}))}}),$a=H.object({account:H.optional(H.custom()),autoSwap:H.optional(H.custom()),mode:H.optional(H.enum(Ra))});function eo(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:no(e.maxAmount,e.decimals),maxAtomicAmount:e.maxAtomicAmount===void 0?void 0:BigInt(e.maxAtomicAmount)},r=la({chain:P,getClient:e.getClient,rpcUrl:Un}),i=aa({account:e.account}),a=Mt(Xa,{canHandleChallenge({challenge:t}){try{return ro(e,n,t.request),!0}catch{return!1}},context:$a,async createCredential({challenge:a,context:o}){ro(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});ua(c,s);let l=s??c.chain?.id;if(da(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 Tt({challenge:a,payload:{signature:await y(c,{account:e,...Ia({account:e.address,chainId:l,challengeId:a.id,realm:a.realm})}),type:`proof`},source:La({address:e.address,chainId:l})})}let x=u.currency,S=Aa({chainId:l,currency:x}),C=ma({challengeId:a.id,clientId:t,serverId:a.realm}),w=Sa({amount:d,methodDetails:{...f,memo:C},recipient:u.recipient}),T=w.map(e=>L.token.transfer.call(c,{amount:BigInt(e.amount),...e.memo&&{memo:e.memo},to:e.recipient,token:x})),E=ba(o?.autoSwap??e.autoSwap,va),D=f?.machineTokenEnabled===!0?ja({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 Ma(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 ya(c,{account:O.address,amountOut:BigInt(d),tokenOut:x,tokenIn:E.tokenIn,slippage:E.slippage,maxAmountIn:E.maxAmountIn}):void 0);let j=k?.calls??[...A??[],...T],M=Ea(l),N=k||S?await Da({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]})(),F=(()=>{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:F})]}: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 Tt({challenge:a,payload:{hash:t,type:`hash`},source:La({address:O.address,chainId:l})})}let I=await m(c,{account:O,calls:j,...N?{feeToken:N}:{},nonceKey:`expiring`,validBefore:F});if(I.gas=(I.gas??0n)+5000n,f?.feePayer){let e=I;delete e.feePayerSignature,delete e.feeToken,e.feePayer=!0}return Tt({challenge:a,payload:{signature:await v(c,I),type:`transaction`},source:La({address:O.address,chainId:l})})}}),o=new Map,s=async t=>{ro(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 _i({...a,createCredential:s},to)}function to(e){let t=Xa.schema.credential.payload.safeParse(xt(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(pe.serializedType))return;let i=pe.deserialize(r);if(!(!i.signature||i.feePayerSignature===null)&&pe.serialize(i)===r)return u(r)}function no(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 ro(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)&&da(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 io=(1n<<96n)-1n;function ao(e){return e>=0n&&e<=io}function oo(e){if(!/^\d{1,29}$/.test(e))return;let t=BigInt(e);return ao(t)?t:void 0}function so(e){return co(e),e}function co(e){if(!ao(e))throw Error(`Value ${e} is outside uint96 bounds.`)}const lo=new Set([`open`,`topUp`,`voucher`,`close`]);function uo(e){return typeof e==`object`&&!!e}function fo(e){return typeof e==`string`&&lo.has(e)}function po(e){if(typeof e!=`object`||!e)return!1;let t=e;return!(typeof t.channelId!=`string`||t.action!==void 0&&!fo(t.action))}function mo(e,t=`No session credential context available.`){if(!po(e))throw Error(t);return e}function ho(e){let t=e.request.amount;if(typeof t!=`string`)throw Error(`Session challenge is missing amount.`);return BigInt(t)}function go(e){return uo(e)?typeof e.channelId==`string`&&typeof e.requiredCumulative==`string`&&typeof e.acceptedCumulative==`string`&&typeof e.deposit==`string`:!1}function _o(e){return uo(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 vo(e){let t=C.toString(e),n=JSON.parse(t);if(!_o(n))throw Error(`Invalid session receipt.`);return n}function yo(e){return e.headers.get(`content-type`)?.toLowerCase().startsWith(`text/event-stream`)??!1}function bo(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 F}from"viem/tempo/chains";import{ousd as I,pathusd as ee,usdce as te}from"viem/tokens";import{Abis as ne,Account as re,Actions as L,Addresses as ie,TokenId as ae,Transaction as oe,withFeePayer as se}from"viem/tempo";import{parseAccount as ce,privateKeyToAccount as le}from"viem/accounts";import{createParser as ue}from"eventsource-parser";import{Channel as de,KeyAuthorization as fe,SignatureEnvelope as R,TempoAddress as pe,TxEnvelopeTempo as me}from"ox/tempo";var he=Object.defineProperty,ge=Object.getOwnPropertyDescriptor,_e=Object.getOwnPropertyNames,ve=Object.prototype.hasOwnProperty,ye=(e,t)=>{let n={};for(var r in e)he(n,r,{get:e[r],enumerable:!0});return t||he(n,Symbol.toStringTag,{value:`Module`}),n},be=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=_e(t),a=0,o=i.length,s;a<o;a++)s=i[a],!ve.call(e,s)&&s!==n&&he(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=ge(t,s))||r.enumerable});return e},xe=(e,t,n)=>(be(e,t,`default`),n&&be(n,t,`default`));const Se=Symbol(`mppx.x402.asset`);function Ce(e){return{[Se]:!0,address:e.address,decimals:e.decimals,network:e.network,transfer:e.transfer}}function we(e,t){let n=e(t.chainId);return Ce({address:n.address,decimals:n.decimals,network:Pe(t.chainId),transfer:Ie(t.transfer,n)})}const Te={USDC:Ce({address:`0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`,decimals:6,network:`eip155:8453`,transfer:{name:`USD Coin`,type:`eip3009`,version:`2`}})},Ee={USDC:Ce({address:`0x036CbD53842c5426634e7929541eC2318f3dCF7e`,decimals:6,network:`eip155:84532`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}})},De={USDC:Ce({address:`0xcebA9300f2b948710d2653dD7B07f33A8B32118C`,decimals:6,network:`eip155:42220`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}}),USDT:Ce({address:`0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e`,decimals:6,network:`eip155:42220`,transfer:{name:`Tether USD`,type:`eip3009`,version:`1`}})},Oe={USDC:Ce({address:`0x01C5C0122039549AD1493B8220cABEdD739BC44E`,decimals:6,network:`eip155:11142220`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}})};function ke(e){return typeof e!=`object`||!e?!1:e[Se]===!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=ye({base:()=>Te,baseSepolia:()=>Ee,celo:()=>De,celoSepolia:()=>Oe,define:()=>Ce,fromToken:()=>we,isAsset:()=>ke,isRawAddress:()=>je,isToken:()=>Ae,matches:()=>Ne,resolve:()=>Me,toChainId:()=>Fe,toNetwork:()=>Pe}),Re=ye({base:()=>ze,baseSepolia:()=>Be,celo:()=>Ve,celoSepolia:()=>He});const ze=8453,Be=84532,Ve=42220,He=11142220,z={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=C.toString(e);return JSON.parse(t)}function B(e){let t=D.canonicalize(e);return C.fromString(t,{pad:!1,url:!0})}var V=ye({address:()=>U,amount:()=>H,datetime:()=>Ze,datetimeInput:()=>Qe,hash:()=>W,period:()=>tt,signature:()=>G,toDate:()=>$e,toDatetimeString:()=>et,unwrapOptional:()=>nt});import*as Xe from"zod/mini";xe(V,Xe);function H(){return O.string().check(O.regex(/^\d+(\.\d+)?$/,`Invalid amount`))}function Ze(){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 Qe(e=`Invalid ISO 8601 datetime`){return O.pipe(O.union([Ze(),O.custom(e=>e instanceof Date)]),O.transform($e)).check(O.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 U(){return O.string().check(O.regex(/^0x[0-9a-fA-F]{40}$/,`Invalid address`))}function W(){return O.string().check(O.regex(/^0x[0-9a-fA-F]{64}$/,`Invalid hash`))}function tt(){return O.string().check(O.regex(/^(day|week|month|year|\d+)$/,`Invalid period`))}function G(){return O.string().check(O.regex(/^0x[0-9a-fA-F]+$/,`Invalid signature`))}function nt(e){return e._zod.def.type===`optional`?e._zod.def.innerType:e}const rt=V.object({description:V.optional(V.string()),digest:V.optional(V.string().check(V.regex(/^sha-256=/,`Invalid digest format`))),expires:V.optional(Ze()),header:V.optional(V.string().check(V.regex(/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,`Invalid HTTP header name`))),id:V.string().check(V.minLength(1)),intent:V.string(),method:V.string(),meta:V.optional(V.record(V.string(),V.string())),opaque:V.optional(V.string()),realm:V.string(),request:V.record(V.string(),V.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:B(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=[K(`id`,e.id),K(`realm`,e.realm),K(`method`,e.method),K(`intent`,e.intent),K(`request`,B(e.request))];e.description!==void 0&&t.push(K(`description`,e.description)),e.digest!==void 0&&t.push(K(`digest`,e.digest)),e.expires!==void 0&&t.push(K(`expires`,e.expires));let n=e.header;return n!==void 0&&!vt(n)&&t.push(K(`header`,n)),e.opaque===void 0?e.meta!==void 0&&t.push(K(`opaque`,B(e.meta))):t.push(K(`opaque`,e.opaque)),`${Ue.payment} ${t.join(`, `)}`}function K(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(z.wwwAuthenticate);if(!n)throw Error(`Missing ${z.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,B(e.request),e.expires??``,e.digest??``],n=e.header;return n!==void 0&&!vt(n)&&t.push(n),t.push(e.opaque??(e.meta?B(e.meta):``)),t.join(`|`)}function _t(e){return e.header??z.authorization}function vt(e){return e?.toLowerCase()===z.authorization.toLowerCase()}function yt(e,t){let n=gt(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})}const bt=65536;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){if(e.length>bt)throw new St;let t=e.match(RegExp(`^${Ue.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: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 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:B(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 Dt(e){let{meta:t,opaque:n,request:r,...i}=e.challenge,a=n??(t===void 0?void 0:B(t)),o={challenge:{...i,...a!==void 0&&{opaque:a},request:B(r)},payload:e.payload,...e.source&&{source:e.source}},s=JSON.stringify(o),c=C.fromString(s,{pad:!1,url:!0});return`${Ue.payment} ${c}`}function Ot(e){return e.length>bt?null:e.split(`,`).map(e=>e.trim()).find(e=>RegExp(`^${Ue.payment}\\s+`,`i`).test(e))??null}var kt=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}}}},At=class extends kt{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 kt{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})}},jt=class extends kt{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.`)}},Mt=class extends kt{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 Nt(e,t){if(!e)throw new At({...t&&{id:t},reason:`missing required expires field`});if(Number.isNaN(new Date(e).getTime()))throw new At({...t&&{id:t},reason:`malformed expires timestamp`});if(Date.parse(e)<=Date.now())throw new jt({expires:e})}function Pt(e){return e}function Ft(e,t){let{canHandleChallenge:n,context:r,createCredential:i}=t;return{...e,canHandleChallenge:n,context:r,createCredential:i}}function It(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 Lt}}}}var Lt=class extends Error{name=`InvalidJsonHeaderError`;constructor(){super(`Invalid base64 JSON header.`)}};const Rt=[`exact`],zt=`PAYMENT-REQUIRED`,Bt=`PAYMENT-SIGNATURE`,Vt=V.string().check(V.minLength(1)),Ht=V.number().check(V.refine(e=>e>0,`Must be positive`)),J=V.string().check(V.regex(/^\d+$/,`Invalid atomic amount`)),Ut=U(),Wt=V.string().check(V.regex(RegExp(`^eip155:\\d+$`),`Invalid EVM CAIP-2 network`)),Gt=V.object({description:V.optional(V.string()),iconUrl:V.optional(V.string()),mimeType:V.optional(V.string()),serviceName:V.optional(V.string()),tags:V.optional(V.array(V.string())),url:Vt});V.discriminatedUnion(`type`,[V.object({name:Vt,type:V.literal(`eip3009`),version:Vt}),V.object({name:V.optional(V.string()),type:V.literal(`permit2`),version:V.optional(V.string())})]);const Kt=V.object({amount:J,asset:Vt,extra:V.optional(V.record(V.string(),V.unknown())),maxTimeoutSeconds:Ht,network:Wt,payTo:Vt,scheme:V.enum(Rt)}),qt=V.object({info:V.record(V.string(),V.unknown()),schema:V.record(V.string(),V.unknown())}),Jt=V.record(V.string(),qt),Yt=V.object({accepts:V.array(Kt).check(V.minLength(1)),error:V.optional(V.string()),extensions:V.optional(Jt),resource:Gt,x402Version:V.literal(2)}),Xt=V.object({authorization:V.object({from:Ut,nonce:W(),to:Ut,validAfter:J,validBefore:J,value:J}),signature:G()}),Zt=V.object({permit2Authorization:V.object({deadline:J,from:Ut,nonce:J,permitted:V.object({amount:J,token:Ut}),spender:Ut,witness:V.object({to:Ut,validAfter:J})}),signature:G()}),Qt=V.union([Xt,Zt]),$t=V.object({accepted:Kt,extensions:V.optional(Jt),payload:Qt,resource:V.optional(Gt),x402Version:V.literal(2)});V.object({extensions:V.optional(Jt),extra:V.optional(V.record(V.string(),V.unknown())),invalidMessage:V.optional(V.string()),invalidReason:V.optional(V.string()),isValid:V.boolean(),payer:V.optional(V.string())});const en=V.object({amount:V.optional(J),errorMessage:V.optional(V.string()),errorReason:V.optional(V.string()),extensions:V.optional(Jt),extra:V.optional(V.record(V.string(),V.unknown())),network:Vt,payer:V.optional(V.string()),success:V.boolean(),transaction:V.string()});function tn(e){let{extensions:t,resource:n,...r}=e;return Kt.parse(r)}const nn=It(Yt),rn=It($t),an=It(en);nn.encode,nn.decode;function on(e){try{let t=JSON.parse(C.toString(e));return cn(t)}catch{throw new Lt}}const sn=rn.encode;rn.decode,an.encode,an.decode;const cn=e=>{if(!e||typeof e!=`object`||Array.isArray(e))throw new Lt;let t=e;if(t.x402Version!==2||!Array.isArray(t.accepts))throw new Lt;let n=Gt.parse(t.resource),r=t.extensions===void 0?void 0:Jt.safeParse(t.extensions).data;return{accepts:t.accepts,...r?{extensions:r}:{},resource:n,x402Version:2}};function ln(e){let t=[B(e.accepted),B(e.resource),B(e.extensions)].join(`|`);return T.sha256(w.fromString(t),{as:`Hex`})}async function un(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=tn(n);if(mn(e.config,r),!n.resource)throw Error(`x402 exact EIP-3009 requires resource information.`);let i=n.extensions?.mppx?gn(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?ln({accepted:r,extensions:i,resource:n.resource}):vn(),to:a(r.payTo),validAfter:(l-600).toString(),validBefore:(l+r.maxTimeoutSeconds).toString(),value:r.amount},d=await t.signTypedData({domain:{chainId:pn(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:fn});return sn({accepted:r,...i?{extensions:i}:{},payload:{authorization:u,signature:d},...n.resource?{resource:n.resource}:{},x402Version:2})}function dn(e){let t=e.challenge.request,n;try{n=tn(t),mn(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 fn={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 pn(e){return Number(e.slice(7))}function mn(e,t){let n=pn(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=hn(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 hn(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 gn(e){let t=e.mppx;return t?{...e,mppx:{...t,info:{...t.info,nonce:_n()}}}:e}function _n(){return yn().slice(2)}function vn(){return yn()}function yn(){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 bn=Symbol.for(`mppx.x402.challenge`);function xn(e){return Object.defineProperty(e,bn,{value:!0}),e}function Sn(e){return!!e?.[bn]}const Cn=[`authorization`],wn=V.string().check(V.regex(/^\d+$/,`Invalid atomic amount`));V.object({name:V.string().check(V.minLength(1)),version:V.string().check(V.minLength(1))});const Tn=V.object({chainId:V.number(),credentialTypes:V.optional(V.array(V.enum(Cn)).check(V.minLength(1))),decimals:V.optional(V.number()),permit2Address:V.optional(U()),splits:V.optional(V.array(V.object({amount:wn,recipient:U()})))});V.object({amount:wn,currency:U(),description:V.optional(V.string()),externalId:V.optional(V.string()),methodDetails:Tn,recipient:U()});const En=V.object({amount:H(),chainId:V.number(),currency:U(),credentialTypes:V.optional(V.array(V.enum(Cn)).check(V.minLength(1))),decimals:V.number(),description:V.optional(V.string()),externalId:V.optional(V.string()),permit2Address:V.optional(U()),recipient:U(),splits:V.optional(V.array(V.object({amount:wn,recipient:U()})))}),Dn=V.object({from:U(),nonce:W(),signature:G(),to:U(),type:V.literal(`authorization`),validAfter:wn,validBefore:wn,value:wn}),On={TransferWithAuthorization:[{name:`from`,type:`address`},{name:`to`,type:`address`},{name:`value`,type:`uint256`},{name:`validAfter`,type:`uint256`},{name:`validBefore`,type:`uint256`},{name:`nonce`,type:`bytes32`}]};function kn(e){return{chainId:e.chainId,name:e.authorization.name,verifyingContract:e.currency,version:e.authorization.version}}function An(e){return T.keccak256(w.fromString(JSON.stringify([e.id,e.realm])),{as:`Hex`})}function jn(e){return`eip155:${e}`}function Mn(e){return`did:pkh:eip155:${e.chainId}:${e.address}`}const Nn=Pt({name:`evm`,intent:`charge`,schema:{credential:{payload:Dn},request:V.pipe(En,V.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 Pn(e){return Ft(Nn,{canHandleChallenge({challenge:t}){return!Fn(t)||dn({challenge:t,config:e})},context:V.object({account:V.optional(V.custom())}),async createCredential({challenge:t,context:n}){if(Fn(t))return un({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(In(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=Ln(e,i),s=t.expires?Math.floor(new Date(t.expires).getTime()/1e3).toString():(Math.floor(Date.now()/1e3)+300).toString();return Dt(Et({challenge:t,payload:{from:a(r.address),nonce:An(t),signature:await r.signTypedData({domain:kn({authorization:o,chainId:i.methodDetails.chainId,currency:i.currency}),message:{from:a(r.address),nonce:An(t),to:a(i.recipient),validAfter:0n,validBefore:BigInt(s),value:BigInt(i.amount)},primaryType:`TransferWithAuthorization`,types:On}),to:a(i.recipient),type:`authorization`,validAfter:`0`,validBefore:s,value:i.amount},source:Mn({address:a(r.address),chainId:i.methodDetails.chainId})}))}})}function Fn(e){return Sn(e)&&e.request.scheme===`exact`&&typeof e.request.network==`string`}function In(e,t){let n=t.methodDetails.chainId,r=jn(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=Rn(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 Ln(e,t){let n=e.currencies??e.assets,r=a(t.currency),i=jn(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 Rn(e,t){let n=e.currencies??e.assets,r=a(t.currency),i=jn(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 zn(e){return[zn.charge(e)]}(function(e){e.charge=Pn,e.assets=Le,e.chains=Re})(zn||={});var Bn=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 Vn(this,e)}},Y=class extends Bn{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 Vn(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},Hn={ousd:I(X.mainnet).address,usdc:a(te(X.mainnet).address),pathUsd:ee(X.mainnet).address},Un={[X.mainnet]:Hn.usdc,[X.testnet]:Hn.pathUsd},Wn=Object.freeze({[X.mainnet]:Object.freeze({swap:`0xF72E5107c32C655ffA7539a3C8e97B7C3cE16A3F`,token:`0x20c000000000000000000000f37de3740ADec032`}),[X.testnet]:Object.freeze({swap:`0xd05f8EdFBB54Da0d765C9fE9b2B3f7d2E3a8C466`,token:`0x20c000000000000000000000f37de3740ADec032`})});X.mainnet,X.testnet;const Gn={[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 Kn(e,t){return Z.link(e,t)}function qn(e){return e.startsWith(`tempo:`)}function Jn(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 Yn={mainnet:Gn[X.mainnet],testnet:Gn[X.testnet]};function Xn(e,t={}){return e??(t.network?Yn[t.network]:void 0)??(process.env.MPPX_RPC_URL?.trim()||process.env.RPC_URL?.trim()||void 0)}async function Zn(t={}){let n=Xn(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 Qn(e){return typeof e==`bigint`?e:e.amount}function $n(e){return e.id!==P.id}async function er(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(Qn).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 tr(){let e=Number.parseInt(process.env.MPPX_KEYCHAIN_COMMAND_TIMEOUT_MS??``,10);return Number.isFinite(e)&&e>0?e:1e4}function nr(e,t){return`code`in e&&e.code===`ENOENT`&&e.message.includes(t)}function rr(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 ir(e){if(e&&nr(e,`secret-tool`))throw rr(e)}function ar(e,t){return new Promise(n=>{k.execFile(e,t,{timeout:tr()},(e,t,r)=>{n({stdout:t.trim(),stderr:r.trim(),error:e})})})}function or(){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 sr(e){return e||(process.env.MPPX_ACCOUNT?.trim()?process.env.MPPX_ACCOUNT:or().get())}function cr(e=`main`){let t=`mppx`;return{async list(){let e=j.platform();if(e===`darwin`){let{stdout:e,error:n}=await ar(`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 ar(`secret-tool`,[`search`,`--all`,`--unlock`,`service`,t]);if(ir(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 ar(`security`,[`find-generic-password`,`-s`,t,`-a`,e,`-w`]);return r?void 0:n}if(n===`linux`){let{stdout:n,error:r}=await ar(`secret-tool`,[`lookup`,`service`,t,`account`,e]);return ir(r),r?void 0:n||void 0}throw Error(`Unsupported platform: ${n}`)},async set(n){let r=j.platform();if(r===`darwin`){await ar(`security`,[`delete-generic-password`,`-s`,t,`-a`,e]);let{error:r}=await ar(`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(),tr());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(nr(e,`secret-tool`)?rr(e):e)})})}throw Error(`Unsupported platform: ${r}`)},async delete(){let n=j.platform();if(n===`darwin`){await ar(`security`,[`delete-generic-password`,`-s`,t,`-a`,e]);return}if(n===`linux`){let{error:n}=await ar(`secret-tool`,[`clear`,`service`,t,`account`,e]);ir(n);return}throw Error(`Unsupported platform: ${n}`)}}}async function lr(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=sr(e),i=await cr(r).get();if(i)return{account:t(i),accountName:r,source:`keychain`};throw Error(`Account "${r}" not found.`)}async function ur(e){return(await lr(e)).account}function dr(e){return e}function fr(){return dr({method:`evm`,supports:e=>e.method===`evm`&&!Sn(e),async setup({challenge:t,options:n}){let r=t.request,a=r.methodDetails,o=a?.chainId,c=o?pr(o):void 0,l=r.currency,u=await ur(n.account),d=[...Object.values(Te),...Object.values(Ee),...Object.values(De),...Object.values(Oe)],f=l??``;if(c&&l)try{let t=e({chain:c,transport:s()}),n=await h(t,{address:l,abi:i,functionName:`symbol`});n&&(f=n)}catch{}return{tokenSymbol:f,tokenDecimals:a?.decimals??6,explorerUrl:c?.blockExplorers?.default?.url,methods:[...zn({account:u,currencies:d})]}}})}function pr(e){return Object.values(b).find(t=>t.id===e)}function mr(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 hr=V.object({customer:V.optional(V.string().check(V.minLength(1))),hooks:V.optional(V.object({inputs:V.object({tax:V.object({calculation:V.string().check(V.minLength(1))})})})),metadata:V.optional(V.record(V.string(),V.string())),receipt_email:V.optional(V.string().check(V.minLength(1)))}),gr=V.custom(e=>typeof e==`function`),_r=V.union([hr,gr]),vr=Pt({name:`stripe`,intent:`charge`,schema:{credential:{payload:V.object({externalId:V.optional(V.string()),spt:V.string()})},request:V.pipe(V.object({amount:H(),currency:V.string(),decimals:V.number(),description:V.optional(V.string()),externalId:V.optional(V.string()),metadata:V.optional(V.record(V.string(),V.string())),networkId:V.string(),paymentIntentOptions:V.optional(_r),paymentMethodTypes:V.array(V.string()).check(V.minLength(1)),recipient:V.optional(V.string())}),V.transform(({amount:e,decimals:t,metadata:n,networkId:r,paymentIntentOptions:i,paymentMethodTypes:a,...o})=>({...o,amount:mr(e,t).toString(),methodDetails:{networkId:r,paymentMethodTypes:a,...n!==void 0&&{metadata:n}}})))}});function yr(e){let{client:t,createToken:n,externalId:r,paymentMethod:i}=e;return Ft(vr,{context:V.object({paymentMethod:V.optional(V.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 Dt({challenge:e,payload:{spt:p,...m===void 0?{}:{externalId:m}}})}})}function br(e){return[yr(e)]}(function(e){e.charge=yr})(br||={});function xr(){return dr({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=Cr(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:[br.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=Sr(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&&Sr(e)?`/test`:``}/payments/${t}`;return Z.link(n,t,!0)}}})}function Sr(e){return e.startsWith(`sk_test_`)||e.startsWith(`rk_test_`)}function Cr(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 wr(e,t,n){return async(r,i)=>{let a=new Request(r,i),o=Er(a.headers)??n?.challenge,{response:s}=await t.send(e,a,{...n,challenge:o});if(s.status===402&&o)for(let e of Tr(s))e.method===o.method&&e.intent===o.intent&&await t.challenge(s,{...n,challenge:e},a.url);return s}}function Tr(e){try{return pt(e)}catch{return[]}}function Er(e){for(let[,t]of e){let e=Ot(t);if(e)try{return Ct(e).challenge}catch{}}}function Dr(e){let t={};for(let n of e){let e=t[n.name]??={};e[n.intent]=Mr(n)}return t}function Or(e,t){let n=Dr(e),r=zr(e,n,t),i=e.map((e,t)=>({intent:e.intent,method:e.name,q:r[Mr(e)]??1,index:t}));return{definition:r,entries:i,header:Ar(i),keys:n}}function kr(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)=>Lr(e,t))}function Ar(e){return e.map(({method:e,intent:t,q:n})=>{let r=`${e}/${t}`;return n===1?r:`${r};q=${Ur(n)}`}).join(`, `)}function jr(e,t,n){let r=new Map;for(let e of t){let t=Mr(e),n=r.get(t);n?n.push(e):r.set(t,[e])}return e.flatMap((e,t)=>{let i=r.get(Mr(e));if(!i)return[];let a=Nr(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)=>Ir(e.challenge)-Ir(t.challenge)||t.match.q-e.match.q||e.index-t.index).map(e=>{let{match:t,...n}=e;return n})}function Mr(e){let t=e.method??e.name;if(!t)throw Error(`Missing payment method name.`);return`${t}/${e.intent}`}function Nr(e,t){let n;for(let r of t){if(!Pr(e,r))continue;let t={...r,specificity:Fr(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 Pr(e,t){return(t.method===`*`||t.method===e.method)&&(t.intent===`*`||t.intent===e.intent)}function Fr(e){return Number(e.method!==`*`)+Number(e.intent!==`*`)}function Ir(e){return+!!Sn(e)}function Lr(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}`);Wr(r,`method`),Wr(i,`intent`);let a=1;for(let t of Rr(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=Vr(i,`Accept-Payment entry "${e}"`))}return{intent:i,method:r,q:a,index:t}}function Rr(e){return e?e.split(/\s*;\s*/).filter(Boolean):[]}function zr(e,t,n){if(!n)return{};let r=typeof n==`function`?n(t):n,i=new Set(e.map(e=>Mr(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]=Br(t,`payment preference "${e}"`)}return a}function Br(e,t){if(typeof e!=`number`||Number.isNaN(e)||!Number.isFinite(e))throw Error(`Invalid q-value for ${t}. Expected a finite number.`);return Hr(e,t)}function Vr(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 Hr(Number(e),t)}function Hr(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 Ur(e){return e.toFixed(3).replace(/\.0+$/,``).replace(/(\.\d*?)0+$/,`$1`)}function Wr(e,t){if(e!==`*`&&!/^[a-z0-9-]+$/.test(e))throw Error(`Invalid Accept-Payment ${t}: ${e}`)}const Gr=[z.authorization,zt,`PAYMENT-RESPONSE`,Bt];function Kr(e,t,n){let r=new Headers(e.headers);for(let e of Gr)e===z.authorization&&!r.get(e)?.startsWith(`Payment `)||r.delete(e);return r.set(t,n),{...e,headers:r}}function qr(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 Jr=1048576,Yr=new WeakMap;function Xr(e){let t=qr(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 Zr(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=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 $r(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 ei(e,t){return!e||e.id!==t?[]:$r(e)?.challenges??[]}async function ti(e){let t=e.clone().body?.getReader();if(!t)return;let n=new TextDecoder,r=0,i=!1,a,o=ue({onEvent(e){if(!(i||!e.data)&&(i=!0,!(e.event&&e.event!==`message`)))try{a=Zr(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>Jr)return;o.feed(n.decode(s,{stream:!0}))}}finally{t.cancel().catch(()=>{})}}async function ni(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 Zr(JSON.parse(i+n.decode()));if(r+=a.byteLength,r>Jr)return;i+=n.decode(a,{stream:!0})}}catch{return}finally{t.cancel().catch(()=>{})}}function ri(e){let t=Yr.get(e);if(t)return t;let n=(async()=>{let t=e.headers.get(`content-type`)?.toLowerCase()??``;if(!(Number(e.headers.get(`content-length`))>Jr)){if(t.includes(`application/json`))return ni(e);if(t.includes(`text/event-stream`))return ti(e)}})();return Yr.set(e,n),n}function ii(){return{getChallenges(e,t){let n=Xr(t);return e.status===402||n===void 0?[]:ri(e).then(e=>ei(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 ai(){return{getChallenges(e){return e.status!==402||!e.headers.has(z.wwwAuthenticate)?[]:pt(e)},setCredential(e,t,n){return Kr(e,n?.challenge?_t(n.challenge):z.authorization,t)}}}function oi(){return{getChallenges(e){if(e.status!==402)return[];let t=e.headers.get(zt);if(!t)return[];let n=on(t);return n.accepts.flatMap((e,t)=>{let r=Kt.safeParse(e);if(!r.success)return[];let i=r.data;return xn(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 Kr(e,Bt,t)}}}function si(e){return e}function ci(){let e=[ai(),oi(),ii()],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 si({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 li=new WeakMap;function ui(e,t){return li.set(e,t),e}function di(e){return li.has(e)}function fi(e,t){return Promise.resolve(li.get(e)?.(t))}function pi(e){return li.get(e)}const mi=new WeakMap,hi=new WeakMap,gi=new WeakMap;function _i(e,t){return mi.set(e,t),e}function vi(e){mi.delete(e)}function yi(e,t,n){mi.has(e)&&hi.set(t,n)}function bi(e){return hi.get(e)}function xi(e,t){return Promise.resolve(mi.get(e)?.(t)??t.response)}function Si(e,t){return gi.set(e,t),e}function Ci(e,t){try{return gi.get(e)?.(t)}catch{return}}function wi(e,t,n){if(!Ti(e))return;t=typeof t==`function`?t():t;let{realm:r}=e;if(r.toLowerCase()===t.hostname.toLowerCase())return;let i=t.origin.toLowerCase();for(let[e,t]of Object.entries(n??{}))if(t===r&&Ei(e)===i)return;throw Error(`Refusing to sign Tempo proof for realm ${JSON.stringify(r)} from ${t.origin}. Pin the realm to this origin with \`trustedTempoProofRealms\` if this server is expected to issue it.`)}function Ti(e){if(e.method!==`tempo`||e.intent!==`charge`)return!1;try{return BigInt(e.request.amount)===0n}catch{return!1}}function Ei(e){try{return new URL(e).origin.toLowerCase()}catch{return e.toLowerCase()}}const Di=Symbol.for(`mppx.fetch.wrapper`),Oi=Symbol.for(`mppx.fetch.identity`),ki=65536,Ai=new WeakMap;async function ji(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>ki){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,ki),{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 Mi(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 Ni(e){let{acceptPayment:t,acceptPaymentPolicy:n=`always`,fetch:r=globalThis.fetch,maxPaymentRetries:i=3,methods:a,onChallenge:o,orderChallenges:s,transport:c=ci(),trustedTempoProofRealms:l}=e,u=e.identity??(e.fetch&&na(e.fetch)),d=e.eventDispatcher??Fi(),f=t??Or(a),p=ra(r),m=async(e,t,n)=>u?(await u.send(p,new Request(e,t),n)).response:p(e,t),h=async(e,t,r)=>{let g=ta(e,t?.headers),_=g.has(z.acceptPayment),v=ca(g,f),y=$i(e,t,g),b=Qi(e,t,g,v.header,_,n),x=await m(ia(b.input),b.init),S=ea(b.init,await y);if(!await c.isPaymentRequired(x,S))return x;let C=t?.context,{context:w,orderChallenges:T,...E}=S??{},D,O,k,A,j;try{for(let n=0;n<i;n++){O=await c.getChallenges(x,S);let i=(await la(jr(O,a,v.entries),T??s))[0];if(!i){if(await Mi(A,{challenges:O,response:x,status:`rejected`}),n>0)return x;throw Error(`No method found for challenges: ${O.map(e=>`${e.method}.${e.intent}`).join(`, `)}. Available: ${a.map(e=>`${e.name}.${e.intent}`).join(`, `)}`)}let f=i.challenge;D=f,k=i.method,D.expires&&Nt(D.expires,D.id),await u?.challenge(x,{challenge:f},pa(b.input).href);let g=ma(x,b.input,b.input);wi(f,()=>pa(g),l);let _=A,y=at(f),w=_?.method===i.method&&_?.key===y,M=!1;if(_){let e=await Mi(_,{challenges:O,response:x,status:w?`pending`:`rejected`});M=w&&!e}A=M?_:void 0;let N=Bi(async n=>{if(n===void 0&&M&&_)return _.promise;M&&_&&(await Mi(_,{status:`rejected`}),A=void 0);let r=n??C;if(!di(i.method))return sa(f,i.method,r);let a={prepare:()=>fi(i.method,{challenge:f,context:r,fetch:u?wr(p,u,{challenge:f}):p,input:g,signal:aa(e,t)})},o=a.prepare().then(()=>sa(f,i.method,r,a));return A={attempt:a,key:n===void 0?y:void 0,method:i.method,promise:o},o}),P=await d.emit(`challenge.received`,Vi({challenge:f,challenges:O,createCredential:N,init:t,input:e,method:i.method,response:x}))??(o?await o(D,{createCredential:N}):void 0)??await N(),F=A;F&&await F.promise.catch(()=>void 0)!==P&&(await Mi(F,{status:`rejected`}),A=void 0),oa(P),await d.emit(`credential.created`,Hi({challenge:f,credential:P,init:t,input:e,method:i.method,response:x}));let I=e=>new Mt({cause:e,challenge:f,credential:P,transactionHash:Ci(i.method,P)});try{x=await m(g,{...c.setCredential({...E,headers:b.headers},P,{challenge:f}),redirect:`manual`},{challenge:f})}catch(e){throw j=I(e),e}let ee=await c.isPaymentRequired(x,S);if(ee||(await Mi(F,{response:x,status:x.status>=300&&x.status<400?`pending`:x.ok?`accepted`:`rejected`}),A=void 0),x.ok&&Ii(d,`payment.response`)&&await d.emit(`payment.response`,Ui({challenge:f,credential:P,init:t,input:e,method:i.method,response:x})),!ee){if(x.status>=500&&Ii(d,`payment.failed`)){try{x=await ji(x)}catch(e){throw j=I(e),x=new Response(null,{headers:x.headers,status:x.status,statusText:x.statusText}),e}await d.emit(`payment.failed`,Wi({challenge:f,challenges:O,error:I(),init:t,input:e,method:i.method,response:x}))}return x.ok?xi(i.method,{challenge:f,credential:P,fetch:p,headers:b.headers,input:g,...r?{refetch:()=>h(ia(b.input),t,!1)}:{},response:x,signal:aa(e,t)}):x}}O=void 0;try{O=await c.getChallenges(x,S)}catch{}return await Mi(A,{challenges:O,response:x,status:`rejected`}),x}catch(n){throw await Mi(A,{challenges:O,response:x,status:`rejected`}),await d.emit(`payment.failed`,Wi({challenge:D,challenges:O,error:j??n,init:t,input:e,method:k,response:x})),n}},g=(e,t)=>h(e,t,!0);return g[Di]=p,u&&(g[Oi]=u),g}function Pi(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 Fi(){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 Li(t,n);if(typeof e==`string`&&e.length>0){r=e;break}}return await zi(e[`*`],t,n),r}case`credential.created`:await Ri(e[`credential.created`],n),await zi(e[`*`],t,n);return;case`payment.failed`:await Ri(e[`payment.failed`],n),await zi(e[`*`],t,n);return;case`payment.response`:await Ri(e[`payment.response`],n),await zi(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 Ai.set(t,t=>e[t].size>0||e[`*`].size>0),t}function Ii(e,t){return Ai.get(e)?.(t)??!0}async function Li(e,t){try{return await e(t)}catch{return}}async function Ri(e,t){for(let n of e)try{await n(t)}catch{}}async function zi(e,t,n){await Ri(e,Object.freeze({name:t,payload:n}))}function Bi(e){let t;return n=>(t??=e(n),t)}function Vi(e){return Object.freeze({challenge:Yi(e.challenge),challenges:e.challenges.map(e=>Yi(e)),createCredential:e.createCredential,init:Gi(e.init),input:Ki(e.input),method:qi(e.method),response:Ji(e.response)})}function Hi(e){return Object.freeze({challenge:Yi(e.challenge),credential:e.credential,init:Gi(e.init),input:Ki(e.input),method:qi(e.method),...e.response===void 0?{}:{response:Ji(e.response)}})}function Ui(e){return Object.freeze({challenge:Yi(e.challenge),credential:e.credential,init:Gi(e.init),input:Ki(e.input),method:qi(e.method),response:Ji(e.response)})}function Wi(e){return Object.freeze({...e.challenge?{challenge:Yi(e.challenge)}:{},...e.challenges?{challenges:e.challenges.map(e=>Yi(e))}:{},error:e.error,init:Gi(e.init),input:Ki(e.input),...e.method?{method:qi(e.method)}:{},...e.response===void 0?{}:{response:Ji(e.response)}})}function Gi(e){if(e)return Zi({...e,...e.headers?{headers:new Headers(e.headers)}:{}})}function Ki(e){if(e instanceof Request)try{return e.clone()}catch{return e}return e instanceof URL?new URL(e):e}function qi(e){return Zi(Object.assign({},e))}function Ji(e){if(e instanceof Response)try{return e.clone()}catch{let t=new Response(null,{headers:e.headers,status:e.status,statusText:e.statusText});for(let n of[`redirected`,`type`,`url`])Object.defineProperty(t,n,{value:e[n]});return t}return Yi(e)}function Yi(e){try{return Xi(structuredClone(e))}catch{return Zi(e)}}function Xi(e){if(!e||typeof e!=`object`||Object.isFrozen(e))return e;Object.freeze(e);for(let t of Object.values(e))Xi(t);return e}function Zi(e){return!e||typeof e!=`object`||Object.isFrozen(e)||Object.freeze(e),e}function Qi(e,t,n,r,i,a){let o=!!r&&!i&&ua(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(z.acceptPayment,r),t?(t.headers=s,{headers:s,init:t,input:e}):{headers:s,init:o?{headers:s}:void 0,input:e}}function $i(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 ea(e,t){return t===void 0?e:{...e,body:t}}function ta(e,t){return t?new Headers(t):new Headers(e instanceof Request?e.headers:void 0)}function na(e){return e[Oi]}function ra(e){let t=e;for(;t[Di];)t=t[Di];return t}function ia(e){if(!(e instanceof Request)||!e.body||e.bodyUsed)return e;try{return e.clone()}catch{return e}}function aa(e,t){if(t?.signal!==null)return t?.signal===void 0?e instanceof Request?e.signal:void 0:t.signal}function oa(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 sa(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&&yi(t,a,r),t.createCredential(a)}function ca(e,t){let n=e.get(z.acceptPayment);if(!n)return t;try{return{...t,entries:kr(n),header:n}}catch{return t}}async function la(e,t){return t?t(e):e}function ua(e,t){if(t===`always`)return!0;if(t===`never`)return!1;let n=pa(e);return t===`same-origin`?!fa()||n.origin===globalThis.location.origin:t.origins.some(e=>da(n,e))}function da(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 fa(){return globalThis.location!==void 0}function pa(e){return e instanceof URL?e:e instanceof Request?new URL(e.url):new URL(e,fa()?globalThis.location.href:void 0)}function ma(e,t,n){if(!e.url)return t;let r=new URL(e.url),i=pa(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 ha(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 ce(r)}}function ga(e){return Object.fromEntries(Object.entries(e.headers??{}).filter(([e])=>e.toLowerCase()!==`content-type`))}const _a={[P.id]:P,[F.id]:F};function va(e,t={}){return s(e.url,{fetchFn:e.fetch,fetchOptions:{headers:ga(e)},...t})}function ya(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=se(n({request:t=>e(t)},{retryCount:0}),va(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?se(s(r),va(o)):s(r);return e({chain:_a[n]??{...i,id:n},transport:a})}}function ba(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 xa(e,t){if(e!==void 0&&(t===void 0||!e.includes(t)))throw Error(`Chain ID not allowed: ${t??`unknown`}.`)}const Sa=E.slice(T.keccak256(w.fromString(`mpp`),{as:`Hex`}),0,4);function Ca(e){let t=T.keccak256(w.fromString(e),{as:`Hex`});return E.toBytes(E.slice(t,0,10))}function wa(e){let{serverId:t,clientId:n,challengeId:r}=e,i=new Uint8Array(32);return i.set(E.toBytes(Sa),0),i[4]=1,i.set(Ca(t),5),n&&i.set(Ca(n),15),i.set(Ta(r),25),E.fromBytes(i)}function Ta(e){let t=T.keccak256(w.fromString(e),{as:`Hex`});return E.toBytes(E.slice(t,0,7))}function Ea(e,t){return pe.resolve(e).toLowerCase()===pe.resolve(t).toLowerCase()}const Da=10000n,Oa=[Hn.pathUsd,Hn.usdc,Hn.ousd];async function ka(e,t){let{account:n,amountOut:r,tokenOut:i,tokenIn:a,slippage:o}=t;if(!Number.isFinite(o)||o<0||o>50)throw Error(`Auto-swap slippage must be between 0 and 50 percent.`);if(t.maxAmountIn!==void 0&&t.maxAmountIn<=0n)throw Error(`Auto-swap maxAmountIn must be positive.`);let s=a.filter(e=>!Ea(e,i)),c=await Promise.allSettled([h(e,{...L.token.getBalance.call(e,{account:n,token:i}),account:null}),...s.map(t=>h(e,{...L.token.getBalance.call(e,{account:n,token:t}),account:null}))]),l=c[0];if(l.status!==`fulfilled`)throw l.reason;let u=l.value;if(u>=r)return;let d=r-u,f=BigInt(Math.round(o*100)),p=t.maxAmountIn??d+d*f/Da;for(let t=0;t<s.length;t++){let n=c[t+1];if(n.status!==`fulfilled`)continue;let r=n.value;if(r<=0n)continue;let a=s[t];try{let t=await L.dex.getBuyQuote(e,{account:null,tokenIn:a,tokenOut:i,amountOut:d});if(t<=0n||t>p)continue;let n=t+t*f/Da,o=n<p?n:p;if(r>=o)return[L.token.approve.call(e,{amount:o,spender:ie.stablecoinDex,token:a}),L.dex.buy.call({tokenIn:a,tokenOut:i,amountOut:d,maxAmountIn:o})]}catch{}}throw new ja({currency:i})}function Aa(e,t){return e?e===!0?{tokenIn:t,slippage:1}:{tokenIn:e.tokenIn?[...e.tokenIn,...e.fallback===!1?[]:t.filter(t=>!e.tokenIn.some(e=>Ea(e,t)))]:t,slippage:e.slippage??1,...e.maxAmountIn===void 0?{}:{maxAmountIn:e.maxAmountIn}}:!1}var ja=class extends Error{name=`InsufficientFundsError`;constructor({currency:e}){super(`Insufficient funds: no balance in ${e} and no viable swap route from fallback currencies.`)}};function Ma(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:BigInt(e.amount).toString(),memo:e.memo,recipient:e.recipient}))]}function Na(e,t,n){t&&(n&&!n.some(e=>Ea(e,t))||e.some(e=>Ea(e,t))||e.push(t))}async function Pa(e,t,n){try{return(await L.token.getBalance(e,{account:t,token:n})).amount>0n}catch{return!1}}function Fa(e){let t=e.chain?.feeToken;if(t)return ae.toAddress(t);let n=e.chain?.id;return n?Un[n]:void 0}function Ia(e){let t=[];return Na(t,Hn.pathUsd),Na(t,Un[e]),t}async function La(e){let{account:t,allowedTokens:n,candidateTokens:r,client:i,prioritizeCandidates:a}=e,o=[];if(a)for(let e of r??[])Na(o,e,n);if(Na(o,await L.fee.getUserToken(i,{account:t}).then(e=>e?.address).catch(()=>void 0),n),Na(o,Fa(i),n),!a)for(let e of r??[])Na(o,e,n);for(let e of o)if(await Pa(i,t,e))return e;return o[0]}const Ra=d([`function swapTo(address inputToken,uint256 amount,address targetToken,address recipient,bytes32 memo)`]);function za(e){if(e!==void 0)return Wn[e]}function Ba(e){let t=za(e.chainId);return!!t&&c(e.currency,{strict:!1})&&l(e.currency,t.token)}function Va(e){let t=za(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:ne.tip20,functionName:`approve`,args:[t.swap,i]}),to:t.token},{data:r({abi:Ra,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 Ha(e,t){let n=Va(t);if(n)try{return await h(e,L.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 Ua={Proof:[{name:`account`,type:`address`},{name:`challengeId`,type:`string`},{name:`realm`,type:`string`}]};function Wa(e){return{name:`MPP`,version:`3`,chainId:e}}function Ga(e){let{account:t,challengeId:n,realm:r}=e;return{account:t,challengeId:n,realm:r}}function Ka(e){let{account:t,chainId:n,challengeId:r,realm:i}=e;return{domain:Wa(n),types:Ua,primaryType:`Proof`,message:Ga({account:t,challengeId:r,realm:i})}}function qa(e){return`did:pkh:eip155:${e.chainId}:${e.address}`}const Ja=[`push`,`pull`],Ya=V.object({amount:H(),memo:V.optional(W()),recipient:V.pipe(V.string(),V.transform(e=>e))}),Xa=(1n<<64n)-1n,Za={dev_second:1n,day:86400n,week:604800n},Qa=V.pipe(U(),V.transform(e=>e.toLowerCase())),$a=V.object({accessKeyAddress:Qa,keyType:V.enum([`p256`,`secp256k1`,`webAuthn`]),keyToken:V.optional(V.pipe(V.string().check(V.regex(/^0x[0-9a-fA-F]{120}$/)),V.transform(e=>e)))}),eo=V.object({accessKey:V.optional($a),chainId:V.optional(V.number())}),to=Qe(`subscriptionExpires must be a valid date`).check(V.refine(e=>e.getTime()%1e3==0,`subscriptionExpires must be representable as whole seconds`)),no=V.enum([`dev_second`,`day`,`week`]),ro=V.pipe(V.union([V.string(),V.bigint(),V.custom(e=>typeof e==`number`&&Number.isSafeInteger(e))]),V.transform(e=>e.toString())).check(V.regex(/^[1-9]\d*$/,`Invalid periodCount`),V.refine(e=>{try{return BigInt(e)<=Xa}catch{return!1}},`periodCount exceeds uint64`));function io(e){return V.refine(e=>{let{amount:t,decimals:n}=e;return f(t,n)>0n},e)}function ao(e){let{periodCount:t,periodUnit:n}=e;try{let e=Za[n];return e!==void 0&&BigInt(t)*e<=Xa}catch{return!1}}const oo=Pt({name:`tempo`,intent:`charge`,schema:{credential:{payload:V.discriminatedUnion(`type`,[V.object({hash:W(),type:V.literal(`hash`)}),V.object({signature:G(),type:V.literal(`transaction`)}),V.object({signature:G(),type:V.literal(`proof`)})])},request:V.pipe(V.object({machineTokenEnabled:V.optional(V.boolean()),amount:H(),chainId:V.optional(V.number()),currency:V.string(),decimals:V.number(),description:V.optional(V.string()),externalId:V.optional(V.string()),feePayer:V.optional(V.pipe(V.union([V.boolean(),V.custom()]),V.transform(e=>typeof e==`object`||e))),memo:V.optional(V.never()),recipient:V.optional(V.string()),splits:V.optional(V.array(Ya).check(V.minLength(1),V.maxLength(10))),supportedModes:V.optional(V.array(V.enum(Ja)).check(V.minLength(1)))}).check(V.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`)),V.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}}}:{}})))}}),so=Pt({name:`tempo`,intent:`session`,schema:{credential:{payload:V.discriminatedUnion(`action`,[V.object({action:V.literal(`open`),authorizedSigner:V.optional(V.string()),channelId:W(),cumulativeAmount:H(),descriptor:V.optional(V.custom()),signature:G(),transaction:G(),type:V.literal(`transaction`)}),V.object({action:V.literal(`topUp`),additionalDeposit:H(),channelId:W(),descriptor:V.optional(V.custom()),transaction:G(),type:V.literal(`transaction`)}),V.object({action:V.literal(`voucher`),channelId:W(),cumulativeAmount:H(),descriptor:V.optional(V.custom()),signature:G()}),V.object({action:V.literal(`close`),channelId:W(),closeSignature:G(),cumulativeAmount:H(),descriptor:V.optional(V.custom()),signature:G()})])},request:V.pipe(V.object({amount:H(),chainId:V.optional(V.number()),channelId:V.optional(W()),currency:V.string(),decimals:V.number(),escrowContract:V.optional(V.string()),feePayer:V.optional(V.pipe(V.union([V.boolean(),V.custom()]),V.transform(e=>typeof e==`object`||e))),feeToken:V.optional(U()),minVoucherDelta:V.optional(H()),operator:V.optional(U()),recipient:V.optional(V.string()),sessionProtocol:V.optional(V.enum([qe.v2,qe.v1])),sessionSnapshot:V.optional(V.custom()),suggestedDeposit:V.optional(H()),unitType:V.string()}).check(V.refine(({amount:e,decimals:t})=>f(e,t)>0n,`Session amount must be greater than 0`)),V.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&&{[Ke.sessionProtocol]:l},...u!==void 0&&{[Ke.sessionSnapshot]:u}}})))}}),co=Pt({name:`tempo`,intent:`subscription`,schema:{credential:{payload:V.object({signature:G(),type:V.literal(`keyAuthorization`)})},request:V.pipe(V.object({amount:H(),accessKey:V.optional($a),chainId:V.optional(V.number()),currency:Qa,decimals:V.number(),description:V.optional(V.string()),externalId:V.optional(V.string()),methodDetails:V.optional(eo),periodCount:ro,periodUnit:no,recipient:Qa,subscriptionExpires:to}).check(io(`Subscription amount must be greater than 0`),V.refine(ao,`Subscription period exceeds uint64`)),V.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}:{}}}))}}),lo=V.object({account:V.optional(V.custom()),autoSwap:V.optional(V.custom()),mode:V.optional(V.enum(Ja))});function uo(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:po(e.maxAmount,e.decimals),maxAtomicAmount:e.maxAtomicAmount===void 0?void 0:BigInt(e.maxAtomicAmount)},r=ya({chain:P,getClient:e.getClient,rpcUrl:Gn}),i=ha({account:e.account}),a=Ft(oo,{canHandleChallenge({challenge:t}){try{return mo(e,n,t.request),!0}catch{return!1}},context:lo,async createCredential({challenge:a,context:o}){mo(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});ba(c,s);let l=s??c.chain?.id;if(xa(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 Dt({challenge:a,payload:{signature:await y(c,{account:e,...Ka({account:e.address,chainId:l,challengeId:a.id,realm:a.realm})}),type:`proof`},source:qa({address:e.address,chainId:l})})}let x=u.currency,S=Ba({chainId:l,currency:x}),C=wa({challengeId:a.id,clientId:t,serverId:a.realm}),w=Ma({amount:d,methodDetails:{...f,memo:C},recipient:u.recipient}),T=w.map(e=>L.token.transfer.call(c,{amount:BigInt(e.amount),...e.memo&&{memo:e.memo},to:e.recipient,token:x})),E=Aa(o?.autoSwap??e.autoSwap,Oa),D=f?.machineTokenEnabled===!0?Va({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 Ha(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 ka(c,{account:O.address,amountOut:BigInt(d),tokenOut:x,tokenIn:E.tokenIn,slippage:E.slippage,maxAmountIn:E.maxAmountIn}):void 0);let j=k?.calls??[...A??[],...T],M=Ia(l),N=k||S?await La({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]})(),F=(()=>{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:F})]}: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 Dt({challenge:a,payload:{hash:t,type:`hash`},source:qa({address:O.address,chainId:l})})}let I=await m(c,{account:O,calls:j,...N?{feeToken:N}:{},nonceKey:`expiring`,validBefore:F});if(I.gas=(I.gas??0n)+5000n,f?.feePayer){let e=I;delete e.feePayerSignature,delete e.feeToken,e.feePayer=!0}return Dt({challenge:a,payload:{signature:await v(c,I),type:`transaction`},source:qa({address:O.address,chainId:l})})}}),o=new Map,s=async t=>{mo(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 Si({...a,createCredential:s},fo)}function fo(e){let t=oo.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(me.serializedType))return;let i=me.deserialize(r);if(!(!i.signature||i.feePayerSignature===null)&&me.serialize(i)===r)return u(r)}function po(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 mo(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)&&xa(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 ho=(1n<<96n)-1n;function go(e){return e>=0n&&e<=ho}function _o(e){if(!/^\d{1,29}$/.test(e))return;let t=BigInt(e);return go(t)?t:void 0}function vo(e){return yo(e),e}function yo(e){if(!go(e))throw Error(`Value ${e} is outside uint96 bounds.`)}const bo=new Set([`open`,`topUp`,`voucher`,`close`]);function xo(e){return typeof e==`object`&&!!e}function So(e){return typeof e==`string`&&bo.has(e)}function Co(e){if(typeof e!=`object`||!e)return!1;let t=e;return!(typeof t.channelId!=`string`||t.action!==void 0&&!So(t.action))}function wo(e,t=`No session credential context available.`){if(!Co(e))throw Error(t);return e}function To(e){let t=e.request.amount;if(typeof t!=`string`)throw Error(`Session challenge is missing amount.`);return BigInt(t)}function Eo(e){return xo(e)?typeof e.channelId==`string`&&typeof e.requiredCumulative==`string`&&typeof e.acceptedCumulative==`string`&&typeof e.deposit==`string`:!1}function Do(e){return xo(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 Oo(e){let t=C.toString(e),n=JSON.parse(t);if(!Do(n))throw Error(`Invalid session receipt.`);return n}function ko(e){return e.headers.get(`content-type`)?.toLowerCase().startsWith(`text/event-stream`)??!1}function Ao(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=xo(r);return go(e)?{type:`payment-need-voucher`,data:e}:null}case`payment-receipt`:{let e=xo(r);return _o(e)?{type:`payment-receipt`,data:e}:null}default:return{type:`message`,data:r}}}function xo(e){try{return JSON.parse(e)}catch{return null}}function So(e){return JSON.stringify({mpp:`authorization`,authorization:e})}function Co(){return JSON.stringify({mpp:`payment-close-request`})}function wo(e){let t=To(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`&&_o(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`&&go(t.data)?{mpp:`payment-need-voucher`,data:t.data}:t.mpp===`payment-receipt`&&_o(t.data)?{mpp:`payment-receipt`,data:t.data}:null:null}function To(e){try{let t=JSON.parse(e);return typeof t!=`object`||!t?null:t}catch{return null}}const Eo=`0x4d50500000000000000000000000000000000000`;function Do(e){return BigInt(e.authorizedSigner)===0n?e.payer:e.authorizedSigner}function Oo(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 ko(e){return pe.encodeForSigning(e)}function Ao(e){let{feePayer:t,transaction:n}=e;return t?{...n,feePayerSignature:null}:n}function jo(e,t){return T.keccak256(E.concat(ko(e),t.sender))}const Mo=[{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`}],No=[{name:`settled`,type:`uint96`},{name:`deposit`,type:`uint96`},{name:`closeRequestedAt`,type:`uint32`}],Po={name:`descriptor`,type:`tuple`,components:Mo},Fo=[{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:[Po,{name:`cumulativeAmount`,type:`uint96`},{name:`signature`,type:`bytes`}],outputs:[]},{type:`function`,name:`topUp`,stateMutability:`nonpayable`,inputs:[Po,{name:`additionalDeposit`,type:`uint96`}],outputs:[]},{type:`function`,name:`close`,stateMutability:`nonpayable`,inputs:[Po,{name:`cumulativeAmount`,type:`uint96`},{name:`captureAmount`,type:`uint96`},{name:`signature`,type:`bytes`}],outputs:[]},{type:`function`,name:`requestClose`,stateMutability:`nonpayable`,inputs:[Po],outputs:[]},{type:`function`,name:`withdraw`,stateMutability:`nonpayable`,inputs:[Po],outputs:[]},{type:`function`,name:`getChannel`,stateMutability:`view`,inputs:[Po],outputs:[{type:`tuple`,components:[{name:`descriptor`,type:`tuple`,components:Mo},{name:`state`,type:`tuple`,components:No}]}]},{type:`function`,name:`getChannelState`,stateMutability:`view`,inputs:[{name:`channelId`,type:`bytes32`}],outputs:[{type:`tuple`,components:No}]},{type:`function`,name:`getChannelStatesBatch`,stateMutability:`view`,inputs:[{name:`channelIds`,type:`bytes32[]`}],outputs:[{type:`tuple[]`,components:No}]},{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 Io(e,t){return{name:`TIP20 Channel Reserve`,version:`1`,chainId:t,verifyingContract:e}}const Lo={Voucher:[{name:`channelId`,type:`bytes32`},{name:`cumulativeAmount`,type:`uint96`}]},Ro={CloseAuthorization:[{name:`channelId`,type:`bytes32`},{name:`cumulativeAmount`,type:`uint96`}]};function zo(e,t){return de.getVoucherSignPayload({chainId:e,channelId:t.channelId,cumulativeAmount:t.cumulativeAmount})}function Bo(e,t,n){return e.toLowerCase()===de.address.toLowerCase()?zo(t,n):o({domain:Io(e,t),types:Lo,primaryType:`Voucher`,message:{channelId:n.channelId,cumulativeAmount:n.cumulativeAmount}})}function Vo(e){return e===`secp256k1`||e===`p256`||e===`webAuthn`}function Ho(e,t){return re.signVoucher(e,{chainId:t.chainId,channel:t.channelId,cumulativeAmount:t.cumulativeAmount})}async function Uo(e,t,n,r,i){let a=await(async()=>{if(r.toLowerCase()===de.address.toLowerCase())try{return await Ho(t,{chainId:i,channelId:n.channelId,cumulativeAmount:n.cumulativeAmount})}catch{}return y(e,{account:t,domain:Io(r,i),types:Lo,primaryType:`Voucher`,message:n})})(),o=z.from(a);if(!Vo(o.type))throw Error(`TIP-1034 vouchers require a TIP-1020 primitive signature; received "${o.type}".`);return z.serialize(o)}async function Wo(e,t,n,r,i){let a=await y(e,{account:t,domain:Io(r,i),types:Ro,primaryType:`CloseAuthorization`,message:n}),o=z.from(a);if(!Vo(o.type))throw Error(`TIP-1034 close authorizations require a TIP-1020 primitive signature; received "${o.type}".`);return z.serialize(o)}function Go(e,t,n,r){try{let i=z.from(n.signature);if(!Vo(i.type)||z.serialize(i).toLowerCase()!==n.signature.toLowerCase())return!1;let a=Bo(e,t,n),o=z.extractAddress({payload:a,signature:i});return z.verify(i,{address:o,payload:a})&&ga(o,r)}catch{return!1}}function Ko(e){return typeof e==`object`&&!!e}function qo(e){return typeof e==`string`&&c(e,{strict:!1})?e:void 0}function Jo(e){return qo(e.accessKeyAddress)}function Yo(){let e=BigInt(Math.floor(Date.now()/1e3))-60n;return e<=0n?0:Number(BigInt(E.random(8))%e)}function Xo(e){return Jo(e)??e.address}async function Zo(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 Qo(e,t){return await v(e,t)}function $o(e,t,n=!1){let r=e.request.methodDetails,i=Ko(r)?qo(r.escrowContract)??qo(r.escrow):void 0,a=t??`0x4d50500000000000000000000000000000000000`;if(i&&!ts(i,a)&&(!n||t!==void 0))throw Error(`Tempo session escrow ${i} does not match client escrow ${a}.`);return i&&!ts(i,a)?i:a}function es(e,t,n,r){return Tt({challenge:e,payload:t,source:`did:pkh:eip155:${n}:${r.address}`})}function ts(e,t){return e.toLowerCase()===t.toLowerCase()}async function ns(e,t,n,r,i,a=Eo){let o=Oo({...n,chainId:i,escrow:a}),s=so(r),c=await Uo(e,t,{channelId:o,cumulativeAmount:s},a,i);return{action:`voucher`,channelId:o,descriptor:n,cumulativeAmount:s.toString(),signature:c}}async function rs(e,t,n,r,i,a=Eo){let o=await ns(e,t,n,r,i,a),s=await Wo(e,t,{channelId:o.channelId,cumulativeAmount:so(BigInt(o.cumulativeAmount))},a,i);return{action:`close`,channelId:o.channelId,descriptor:n,cumulativeAmount:o.cumulativeAmount,signature:o.signature,closeSignature:s}}async function is(e,t,n){let i=Xo(t),a=n.escrow??`0x4d50500000000000000000000000000000000000`,o=n.operator??`0x0000000000000000000000000000000000000000`,s=E.random(32),c=so(n.deposit),l=so(n.initialAmount),u=r({abi:Fo,functionName:`open`,args:[n.payee,o,n.token,c,s,i]}),d=await Qo(e,await Zo(e,{account:t,calls:[...n.prefixCalls??[],{to:a,data:u}],feePayer:n.feePayer,feeToken:n.feeToken??n.token})),f=oe.deserialize(d),p={authorizedSigner:i,expiringNonceHash:jo(Ao({...n.feePayer?{feePayer:!0}:{},transaction:f}),{sender:t.address}),operator:o,payee:n.payee,payer:t.address,salt:s,token:n.token},m=Oo({...p,chainId:n.chainId,escrow:a});return{action:`open`,type:`transaction`,channelId:m,transaction:d,signature:await Uo(e,t,{channelId:m,cumulativeAmount:l},a,n.chainId),descriptor:p,cumulativeAmount:l.toString(),authorizedSigner:p.authorizedSigner}}async function as(e,t,n,i,a,o,s=Eo,c=[],l=n.token){let u=Oo({...n,chainId:a,escrow:s}),d=so(i);return{action:`topUp`,type:`transaction`,channelId:u,transaction:await Qo(e,await Zo(e,{account:t,calls:[...c,{to:s,data:r({abi:Fo,functionName:`topUp`,args:[n,d]})}],feePayer:o,feeToken:l,validAfter:Yo()})),descriptor:n,additionalDeposit:d.toString()}}function os(e){let{payee:t,token:n,escrow:r,chainId:i}=e;return`${t.toLowerCase()}:${n.toLowerCase()}:${r.toLowerCase()}:${i}`}function Q(e){return os({payee:e.descriptor.payee,token:e.descriptor.token,escrow:e.escrow,chainId:e.chainId})}function ss(){let e=new Map;return{get:t=>e.get(t),set(t){e.set(Q(t),t)},delete(t){e.delete(t)}}}const cs=new WeakMap,ls=new WeakMap;function us(e,t){ls.set(e,ls.get(t)??t)}async function ds(e,t,n){let r=cs.get(e);r||(r=new Map,cs.set(e,r));let i=(r.get(t)??Promise.resolve()).catch(()=>{}).then(n);r.set(t,i);try{return await i}finally{r.get(t)===i&&r.delete(t)}}function fs(e,t,n){return ds(ls.get(e)??e,`funding:${t}`,n)}async function ps(e,t){await ds(e,`write:${Q(t)}`,async()=>{let n=await e.get(Q(t));if(n?.uncertainTopUp){if(n.channelId!==t.channelId)throw Error(`Session funding outcome is unknown; reconcile the pending payment before replacing the channel.`);t.uncertainTopUp=!0}await e.set(t)})}async function ms(e,t){await ds(e,`write:${t}`,async()=>{(await e.get(t))?.uncertainTopUp||await e.delete(t)})}const hs=2n**96n-1n;function gs(e){if(e<0n||e>hs)throw new J({reason:`amount exceeds uint96 range`})}async function _s(e,t,n=Eo,r){return vs(await h(e,{address:n,abi:Fo,functionName:`getChannelState`,args:[t],...r===void 0?{}:{blockNumber:r}}))}function vs(e){return gs(e.settled),gs(e.deposit),{settled:e.settled,deposit:e.deposit,closeRequestedAt:e.closeRequestedAt}}const ys=H.custom(e=>typeof e==`string`&&c(e,{strict:!1})),bs=H.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]{64}$/.test(e)),xs=H.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]+$/.test(e)),Ss=H.object({authorizedSigner:ys,expiringNonceHash:bs,operator:ys,payee:ys,payer:ys,salt:bs,token:ys}),Cs=Nt(H.object({acceptedCumulative:H.string(),chainId:H.number(),channelId:bs,closeRequestedAt:H.optional(H.string()),deposit:H.string(),descriptor:Ss,escrow:ys,highestVoucher:H.optional(H.object({channelId:bs,cumulativeAmount:H.string(),signature:xs})),requiredCumulative:H.string(),settled:H.string(),spent:H.string(),units:H.optional(H.number())}));function ws(e){return Cs.encode(e)}function Ts(e){return Cs.decode(e)}const Es={status:`idle`};function Ds(e){return{status:`active`,...e}}function Os(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:js(e.challengeId,t.snapshot),effects:[]}:$(e,t);case`activated`:return e.status===`closing`||e.status===`closed`?$(e,t):{state:Ws({challengeId:t.challengeId,entry:t.entry,spent:t.spent,units:t.units??0}),effects:[]};case`opened`:return e.status===`opening`?{state:Ms(e.challengeId,t.receipt,t.descriptor,t.deposit),effects:[]}:$(e,t);case`receiptAccepted`:return e.status===`closing`||e.status===`closed`?$(e,t):{state:qs(t.receipt,t.entry),effects:[]};case`needVoucher`:return e.status===`active`?As({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:Ms(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:Ms(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 ks(e,t){let n=Os(e.state,t);return e.state=n.state,n}function As(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 js(e,t){return Ds({challengeId:e,channelId:t.channelId,descriptor:t.descriptor,acceptedCumulative:t.acceptedCumulative,deposit:t.deposit,spent:t.spent,units:t.units??0})}function Ms(e,t,n,r){return Ds({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 Ns(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`);Ns({cumulativeAmount:i,maxVoucherCumulative:n}),Ns({cumulativeAmount:a,maxVoucherCumulative:n})}function Fs(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 Is(e,t){return typeof e==`bigint`?e:f(e,t)}function Ls(e){let{contextDepositRaw:t,maxDeposit:n,requestAmount:r,suggestedDepositRaw:i}=e;if(zs(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 Rs(e){let{deposit:t,maxDeposit:n,requiredCumulative:r,suggestedDeposit:i,topUpAmount:a}=e;if(r<=t)return 0n;Ns({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 zs(e,t){Ns({cumulativeAmount:e,maxVoucherCumulative:t??null})}function Bs(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 Vs(e){let{cumulativeAmount:t,spent:n}=e;return t>n?t:n}function Hs(e){let{cumulativeAmount:t,readySpent:n,spent:r}=e;if(!ao(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>Vs({cumulativeAmount:t,spent:r}))throw Error(`close-ready spent exceeds local voucher state`)}function Us(e){let{challengeId:t,channelId:n,expectedCloseAmount:r,minimumSpent:i=0n,receipt:a}=e,o=oo(r),s=oo(a.spent);return o===void 0||s===void 0||!ao(i)?!1:!!a.txHash&&a.challengeId===t&&a.channelId===n&&a.acceptedCumulative===r&&s>=i&&s<=o}function Ws(e){return Ds({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 Gs(){return{channel:null,lastChallenge:null,lastUrl:null,spent:0n,socketSession:null,state:Es}}function Ks(e){let{maxVoucherCumulative:t,receipt:n,runtime:r}=e;r.spent=Fs({channel:r.channel,maxVoucherCumulative:t,receipt:n,spent:r.spent}),n&&r.channel?.channelId===n.channelId&&ks(r,{type:`receiptAccepted`,receipt:n,entry:r.channel})}function qs(e,t){return Ds({challengeId:e.challengeId,channelId:e.channelId,descriptor:t.descriptor,acceptedCumulative:e.acceptedCumulative,deposit:t.deposit.toString(),spent:e.spent,units:e.units??0})}function Js(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=oo(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 Ys(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 Os(o,{type:`activated`,challengeId:r,entry:t,spent:a.toString(),units:o.status===`active`?o.units:0}).state}function Xs(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 Zs(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 Qs(e){let{activeSocket:t,currentSocket:n,target:r}=e,i=n.closeReadyReceipt??await(async()=>(t.send(Co()),e.waitForCloseReady()))(),a=BigInt(i.spent);Hs({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=>Us({challengeId:r.challenge.id,channelId:r.channelId,expectedCloseAmount:s,minimumSpent:a,receipt:e}));t.send(So(o));let c=await i;return t.close(),n.closeReadyReceipt=null,c}finally{n.expectedCloseAmount=null}}function $s(e){return`cumulativeAmount`in e}function ec(e){if($s(e))return BigInt(e.cumulativeAmount)}async function tc(e,t){t.opened?await ps(e.store,t):await ms(e.store,Q(t)),e.notifyUpdate(t)}async function nc(e,t,n){let r=ec(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 tc(e,i))}const rc=H.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]*$/.test(e)),ic=H.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]{64}$/.test(e)),ac=H.object({account:H.optional(H.custom()),autoSwap:H.optional(H.custom()),action:H.optional(H.enum([`open`,`topUp`,`voucher`,`close`])),channelId:H.optional(ic),cumulativeAmount:H.optional(U()),cumulativeAmountRaw:H.optional(H.string()),transaction:H.optional(rc),descriptor:H.optional(H.custom()),additionalDeposit:H.optional(U()),additionalDepositRaw:H.optional(H.string()),depositRaw:H.optional(H.string())});function oc(e){return e?.action!==void 0}function sc(e){return oc(e)&&e.descriptor!==void 0}function cc(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 lc(e,t,n,r){let i=cc(e,t,n);if(i===void 0)throw Error(`${n} required for ${r} action`);return i}function uc(e){return typeof e==`object`&&!!e}function dc(e){return typeof e==`string`&&c(e,{strict:!1})?e:void 0}function fc(e){let t=e.request.methodDetails;return uc(t)?{chainId:typeof t.chainId==`number`?t.chainId:void 0,escrowContract:dc(t.escrowContract),escrow:dc(t.escrow),feePayer:typeof t.feePayer==`boolean`?t.feePayer:void 0,feeToken:dc(t.feeToken),operator:dc(t.operator),sessionSnapshot:qe(t,Ge.sessionSnapshot)}:{}}function pc(e,t){if(typeof e==`string`&&c(e,{strict:!1}))return e;throw Error(`tempo session challenge missing ${t}`)}function mc(e){if(typeof e==`string`)return BigInt(e);throw Error(`tempo session challenge missing amount`)}function hc(e){return typeof e==`string`?e:void 0}async function gc(e){let{allowCustomEscrow:t,challenge:n,escrowOverride:r,allowedChainIds:i,getClient:a}=e,o=fc(n);(o.chainId!==void 0||i?.length===0)&&da(i,o.chainId);let s=o.chainId??(i?.length===1?i[0]:void 0),c=await a({chainId:s});ua(c,s);let l=s??c.chain?.id;if(da(i,l),!l)throw Error(`No chainId configured for TIP-1034 session challenge.`);let u=$o(n,r,t),d=pc(n.request.recipient,`recipient`),f=pc(n.request.currency,`currency`);return{amount:mc(n.request.amount),challenge:n,chainId:l,client:c,escrow:u,feePayer:o.feePayer,feeToken:o.feeToken,key:os({payee:d,token:f,escrow:u,chainId:l}),operator:o.operator,payee:d,snapshot:o.sessionSnapshot,suggestedDepositRaw:hc(n.request.suggestedDeposit),token:f}}async function _c(e){let{channelId:t,client:n,descriptor:r,expected:i,readChannelState:a=_s}=e,o=Oo({...r,chainId:i.chainId,escrow:i.escrow});vc({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 vc(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(!ts(r.payee,a))throw Error(`context descriptor payee does not match challenge`);if(!ts(r.token,s))throw Error(`context descriptor token does not match challenge`);if(!ts(r.payer,o))throw Error(`context descriptor payer does not match account`);if(!ts(Do(r),t))throw Error(`context descriptor authorizedSigner does not match account`)}function yc(e){let{context:t,snapshot:n}=e,r=t?.descriptor??n?.descriptor;if(r)return{...t,channelId:t?.channelId??n?.channelId,descriptor:r}}function bc(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=cc(t,n,`cumulativeAmount`);return o===void 0?a+r:o+r}async function xc(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(!Go(i.escrow,i.chainId,{channelId:a.channelId,cumulativeAmount:s,signature:a.signature},Do(i.descriptor)))throw Error(`session snapshot highest voucher signature is invalid`);let f=await _c({channelId:i.channelId,client:n,descriptor:i.descriptor,expected:{chainId:i.chainId,escrow:i.escrow,payee:i.descriptor.payee,payer:t.address,authorizedSigner:Xo(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 Sc(e,t){return ts(e.address,t.payer)?ts(Xo(e),Do(t)):!1}function Cc(e){let{account:t,entry:n,context:r,decimals:i,maxDeposit:a,resolved:o}=e;if(oc(r)){if(!sc(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=yc({context:r,snapshot:o.snapshot});return!n&&s&&Sc(t,s.descriptor)?{type:`recover`,account:t,context:s,decimals:i,maxDeposit:a,resolved:o}:n?.opened&&Sc(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 wc(e,t,n=!1){switch(e.type){case`open`:return Ec(e,t,n);case`recover`:return Dc(e,t);case`voucher`:return Oc(e,t);case`manual`:return kc(e,t,n)}}async function Tc(e,t){if(e)return await ya(t.client,{account:t.account,amountOut:t.amountOut,tokenOut:t.tokenOut,tokenIn:e.tokenIn,slippage:e.slippage,maxAmountIn:e.maxAmountIn})}async function Ec(e,t,n){let{account:r,resolved:i}=e,a=Ls({contextDepositRaw:e.context?.depositRaw,maxDeposit:e.maxDeposit,requestAmount:i.amount,suggestedDepositRaw:i.suggestedDepositRaw}),o=await is(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 Tc(n,{account:r.address,amountOut:a,client:i.client,tokenOut:i.token}),token:i.token});return await tc(t,{channelId:o.channelId,cumulativeAmount:i.amount,deposit:a,descriptor:o.descriptor,escrow:i.escrow,chainId:i.chainId,opened:!0}),o}async function Dc(e,t){let{account:n,context:r,decimals:i,maxDeposit:a,resolved:o}=e,{descriptor:s}=r,c=await _c({channelId:r.channelId,client:o.client,descriptor:s,expected:{chainId:o.chainId,escrow:o.escrow,payee:o.payee,payer:n.address,authorizedSigner:Xo(n),token:o.token}}),l=bc({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`);zs(l,a);let u=await ns(o.client,n,s,l,o.chainId,o.escrow),d=await t.store.get(o.key);return await tc(t,{...d?.channelId===c.channelId&&d.uncertainTopUp?{uncertainTopUp:!0}:{},channelId:c.channelId,cumulativeAmount:l,deposit:c.state.deposit,descriptor:s,escrow:o.escrow,chainId:o.chainId,opened:!0}),u}async function Oc(e,t){let{account:n,entry:r,resolved:i}=e,a=r.cumulativeAmount+i.amount;zs(a,e.maxDeposit);let o=await ns(i.client,n,r.descriptor,a,i.chainId,i.escrow);return r.cumulativeAmount=a,await tc(t,r),o}async function kc(e,t,n){let{account:r,context:i,decimals:a,resolved:o}=e,{descriptor:s}=i,c=Oo({...s,chainId:o.chainId,escrow:o.escrow});vc({channelId:i.channelId,descriptor:s,expectedChannelId:c,payee:o.payee,payer:r.address,authorizedSigner:Xo(r),token:o.token});let l=await Ac({account:r,channelId:c,context:i,decimals:a,descriptor:s,resolved:o},n);return await nc(t,o.key,l),l}async function Ac(e,t){switch(e.context.action){case`open`:return jc(e);case`topUp`:return Mc(e,t);case`voucher`:return Nc(e);case`close`:return Pc(e)}}async function jc(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=lc(r,i,`cumulativeAmount`,`open`),c=await ns(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 Mc(e,t){let{account:n,channelId:r,context:i,decimals:a,descriptor:o,resolved:s}=e,c=lc(i,a,`additionalDeposit`,`topUp`);return i.transaction?{action:`topUp`,type:`transaction`,channelId:r,transaction:i.transaction,descriptor:o,additionalDeposit:c.toString()}:as(s.client,n,o,c,s.chainId,s.feePayer,s.escrow,await Tc(t,{account:n.address,amountOut:c,client:s.client,tokenOut:s.token}),s.feeToken)}function Nc(e){let{account:t,context:n,decimals:r,descriptor:i,resolved:a}=e;return ns(a.client,t,i,lc(n,r,`cumulativeAmount`,`voucher`),a.chainId,a.escrow)}function Pc(e){let{account:t,context:n,decimals:r,descriptor:i,resolved:a}=e;return rs(a.client,t,i,lc(n,r,`cumulativeAmount`,`close`),a.chainId,a.escrow)}const Fc={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3};function Ic(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=Fc.CLOSED,r=null}if(a.type===`open`&&(i=Fc.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 Lc(e){return{acceptedCumulative:BigInt(e.acceptedCumulative),deposit:BigInt(e.deposit),requiredCumulative:BigInt(e.requiredCumulative)}}function Rc(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=Is(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 zc(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:qs(s,u)}:i?{channel:u,state:Ws({challengeId:i,entry:u,spent:c.toString(),units:a.status===`active`?a.units:0})}:{channel:u}}async function Bc(e){if(e.event.channelId!==e.expectedChannelId)return{status:`ignored`,reason:`channel-mismatch`};let t=Lc(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:so(t.requiredCumulative);return{status:`ready`,context:{action:`voucher`,channelId:e.expectedChannelId,descriptor:n.descriptor,cumulativeAmountRaw:r.toString()}}}function Vc(e){return e.method===Ue.tempo&&e.intent===We.session}function Hc(e){return Vc(e)&&qe(e.request.methodDetails,Ge.sessionProtocol)===Ke.v2}function Uc(e){return qe(e.request.methodDetails,Ge.sessionSnapshot)}function Wc(e,t,n){let r=e instanceof Request?e.headers:void 0;return{...t,headers:{...Ti(r),...Ti(t?.headers),[B.authorization]:n}}}function Gc(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 Kc(e){let t=new URL(e.toString());return t.protocol===`ws:`&&(t.protocol=`http:`),t.protocol===`wss:`&&(t.protocol=`https:`),t}async function qc(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}}var Jc=class extends Error{constructor(e){let t=e instanceof Error||e instanceof DOMException?e.message:String(e);super(`${t}; payment outcome unknown`),this.name=`UncertainFundingError`}};async function Yc(e){let{channel:t,channelId:n}=e;if(!t?.descriptor||t.channelId!==n)throw Error(`Cannot top up session: no local channel descriptor available.`);if(t.uncertainTopUp)throw Error(`Session funding outcome is unknown; reconcile the pending payment before another top-up.`);let r=await Xc({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}).catch(async n=>{throw n instanceof Jc&&(t.uncertainTopUp=!0,await e.onUncertainFunding?.(t)),n});if(!r.ok)throw Error(`Top-up POST failed with status ${r.status}`);let i=r.headers.get(B.paymentReceipt);return i?vo(i):void 0}async function Xc(e){let t=async t=>{e.signal?.throwIfAborted();let n=await e.createSessionCredential(t,e.context);e.signal?.throwIfAborted();let r=new AbortController,i=()=>r.abort(e.signal?.reason);e.signal?.addEventListener(`abort`,i,{once:!0});let a=setTimeout(()=>r.abort(new DOMException(`Session management request timed out; payment outcome unknown`,`TimeoutError`)),3e4),o,s=new Promise((e,t)=>{o=()=>t(r.signal.reason),r.signal.addEventListener(`abort`,o,{once:!0})});try{return await Promise.race([e.fetch(Gc(e.input),{method:`POST`,signal:r.signal,headers:{[B.authorization]:n}}),s])}catch(t){throw e.context.action===`topUp`?new Jc(t):t}finally{clearTimeout(a),e.signal?.removeEventListener(`abort`,i),r.signal.removeEventListener(`abort`,o)}},n=await t(e.challenge);if(n.status!==402)return n;let r=ft(n).find(Hc);return r?t(r):n}async function Zc(e){let t=Qc({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,Wc(e.input,e.init,t))}catch(e){throw await l(),e}return!u.ok&&!u.headers.get(B.paymentReceipt)&&await l(),u}function Qc(e){let t=ft(e.response).find(Hc);if(!t)return;let n=Uc(t);if(!n)return;let{channel:r}=e;if(!(!r?.descriptor||r.channelId!==n.channelId))return{channel:r,challenge:t,snapshot:n}}async function $c(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:{[B.authorization]:a}})},i=await r(e.target.challenge);if(i.status===402){let t=ft(i).find(Hc);t&&(e.setChallenge?.(t),i=await r(t,!0))}if(!i.ok){let e=await qc(i),t=i.headers.get(B.wwwAuthenticate)??``;throw Error(`Close request failed with status ${i.status}${e?`: ${e}`:``}${t?` [${B.wwwAuthenticate}: ${t}]`:``}`)}let a=i.headers.get(B.paymentReceipt);if(!a)return;let o=vo(a);if(!o.txHash||!E.validate(o.txHash,{strict:!0})||E.size(o.txHash)!==32||!Us({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 el(e,t,n){let{onReceipt:r,signal:i,...a}=t??{},o=i??(e instanceof Request?e.signal:void 0),s={...a,headers:{...Ti(a.headers),Accept:`text/event-stream`},...o?{signal:o}:{}},c=await n.doFetch(e,s);return!yo(c)&&n.getChannel()?.opened&&(c=await n.doFetch(e,s)),tl(e,c,{onReceipt:r,signal:o},n)}function tl(e,t,n,r){if(!yo(t))throw Error(`SSE response is not an event stream.`);if(!t.body)throw Error(`Response has no body.`);let i=r.getChallenge();return nl({onNeedVoucher:t=>sl({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*nl(e){for await(let t of rl(e))t.data!==void 0&&(yield t.data)}async function*rl(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=il(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=bo(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 il(e,t){for(let n=0;n<e.length;n++){let r=al(e,n,t);if(!r)continue;let i=al(e,n+r,t);if(i)return{index:n,length:r+i};n+=r-1}}function al(e,t,n){return e[t]===`
4
+ `);switch(t){case`message`:return{type:`message`,data:r};case`payment-need-voucher`:{let e=jo(r);return Eo(e)?{type:`payment-need-voucher`,data:e}:null}case`payment-receipt`:{let e=jo(r);return Do(e)?{type:`payment-receipt`,data:e}:null}default:return{type:`message`,data:r}}}function jo(e){try{return JSON.parse(e)}catch{return null}}function Mo(e){return JSON.stringify({mpp:`authorization`,authorization:e})}function No(){return JSON.stringify({mpp:`payment-close-request`})}function Po(e){let t=Fo(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`&&Do(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`&&Do(t.data)?{mpp:`payment-receipt`,data:t.data}:null:null}function Fo(e){try{let t=JSON.parse(e);return typeof t!=`object`||!t?null:t}catch{return null}}const Io=`0x4d50500000000000000000000000000000000000`;function Lo(e){return BigInt(e.authorizedSigner)===0n?e.payer:e.authorizedSigner}function Ro(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 zo(e){return me.encodeForSigning(e)}function Bo(e){let{feePayer:t,transaction:n}=e;return t?{...n,feePayerSignature:null}:n}function Vo(e,t){return T.keccak256(E.concat(zo(e),t.sender))}const Ho=[{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`}],Uo=[{name:`settled`,type:`uint96`},{name:`deposit`,type:`uint96`},{name:`closeRequestedAt`,type:`uint32`}],Wo={name:`descriptor`,type:`tuple`,components:Ho},Go=[{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:[Wo,{name:`cumulativeAmount`,type:`uint96`},{name:`signature`,type:`bytes`}],outputs:[]},{type:`function`,name:`topUp`,stateMutability:`nonpayable`,inputs:[Wo,{name:`additionalDeposit`,type:`uint96`}],outputs:[]},{type:`function`,name:`close`,stateMutability:`nonpayable`,inputs:[Wo,{name:`cumulativeAmount`,type:`uint96`},{name:`captureAmount`,type:`uint96`},{name:`signature`,type:`bytes`}],outputs:[]},{type:`function`,name:`requestClose`,stateMutability:`nonpayable`,inputs:[Wo],outputs:[]},{type:`function`,name:`withdraw`,stateMutability:`nonpayable`,inputs:[Wo],outputs:[]},{type:`function`,name:`getChannel`,stateMutability:`view`,inputs:[Wo],outputs:[{type:`tuple`,components:[{name:`descriptor`,type:`tuple`,components:Ho},{name:`state`,type:`tuple`,components:Uo}]}]},{type:`function`,name:`getChannelState`,stateMutability:`view`,inputs:[{name:`channelId`,type:`bytes32`}],outputs:[{type:`tuple`,components:Uo}]},{type:`function`,name:`getChannelStatesBatch`,stateMutability:`view`,inputs:[{name:`channelIds`,type:`bytes32[]`}],outputs:[{type:`tuple[]`,components:Uo}]},{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 Ko(e,t){return{name:`TIP20 Channel Reserve`,version:`1`,chainId:t,verifyingContract:e}}const qo={Voucher:[{name:`channelId`,type:`bytes32`},{name:`cumulativeAmount`,type:`uint96`}]},Jo={CloseAuthorization:[{name:`channelId`,type:`bytes32`},{name:`cumulativeAmount`,type:`uint96`}]};function Yo(e,t){return de.getVoucherSignPayload({chainId:e,channelId:t.channelId,cumulativeAmount:t.cumulativeAmount})}function Xo(e,t,n){return e.toLowerCase()===de.address.toLowerCase()?Yo(t,n):o({domain:Ko(e,t),types:qo,primaryType:`Voucher`,message:{channelId:n.channelId,cumulativeAmount:n.cumulativeAmount}})}function Zo(e){return e===`secp256k1`||e===`p256`||e===`webAuthn`}function Qo(e,t){return re.signVoucher(e,{chainId:t.chainId,channel:t.channelId,cumulativeAmount:t.cumulativeAmount})}async function $o(e,t,n,r,i){let a=await(async()=>{if(r.toLowerCase()===de.address.toLowerCase())try{return await Qo(t,{chainId:i,channelId:n.channelId,cumulativeAmount:n.cumulativeAmount})}catch{}return y(e,{account:t,domain:Ko(r,i),types:qo,primaryType:`Voucher`,message:n})})(),o=R.from(a);if(!Zo(o.type))throw Error(`TIP-1034 vouchers require a TIP-1020 primitive signature; received "${o.type}".`);return R.serialize(o)}async function es(e,t,n,r,i){let a=await y(e,{account:t,domain:Ko(r,i),types:Jo,primaryType:`CloseAuthorization`,message:n}),o=R.from(a);if(!Zo(o.type))throw Error(`TIP-1034 close authorizations require a TIP-1020 primitive signature; received "${o.type}".`);return R.serialize(o)}function ts(e,t,n,r){try{let i=R.from(n.signature);if(!Zo(i.type)||R.serialize(i).toLowerCase()!==n.signature.toLowerCase())return!1;let a=Xo(e,t,n),o=R.extractAddress({payload:a,signature:i});return R.verify(i,{address:o,payload:a})&&Ea(o,r)}catch{return!1}}function ns(e){return typeof e==`object`&&!!e}function rs(e){return typeof e==`string`&&c(e,{strict:!1})?e:void 0}function is(e){return rs(e.accessKeyAddress)}function as(){let e=BigInt(Math.floor(Date.now()/1e3))-60n;return e<=0n?0:Number(BigInt(E.random(8))%e)}function os(e){return is(e)??e.address}async function ss(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 cs(e,t){return await v(e,t)}function ls(e,t,n=!1){let r=e.request.methodDetails,i=ns(r)?rs(r.escrowContract)??rs(r.escrow):void 0,a=t??`0x4d50500000000000000000000000000000000000`;if(i&&!ds(i,a)&&(!n||t!==void 0))throw Error(`Tempo session escrow ${i} does not match client escrow ${a}.`);return i&&!ds(i,a)?i:a}function us(e,t,n,r){return Dt({challenge:e,payload:t,source:`did:pkh:eip155:${n}:${r.address}`})}function ds(e,t){return e.toLowerCase()===t.toLowerCase()}async function fs(e,t,n,r,i,a=Io){let o=Ro({...n,chainId:i,escrow:a}),s=vo(r),c=await $o(e,t,{channelId:o,cumulativeAmount:s},a,i);return{action:`voucher`,channelId:o,descriptor:n,cumulativeAmount:s.toString(),signature:c}}async function ps(e,t,n,r,i,a=Io){let o=await fs(e,t,n,r,i,a),s=await es(e,t,{channelId:o.channelId,cumulativeAmount:vo(BigInt(o.cumulativeAmount))},a,i);return{action:`close`,channelId:o.channelId,descriptor:n,cumulativeAmount:o.cumulativeAmount,signature:o.signature,closeSignature:s}}async function ms(e,t,n){let i=os(t),a=n.escrow??`0x4d50500000000000000000000000000000000000`,o=n.operator??`0x0000000000000000000000000000000000000000`,s=E.random(32),c=vo(n.deposit),l=vo(n.initialAmount),u=r({abi:Go,functionName:`open`,args:[n.payee,o,n.token,c,s,i]}),d=await cs(e,await ss(e,{account:t,calls:[...n.prefixCalls??[],{to:a,data:u}],feePayer:n.feePayer,feeToken:n.feeToken??n.token})),f=oe.deserialize(d),p={authorizedSigner:i,expiringNonceHash:Vo(Bo({...n.feePayer?{feePayer:!0}:{},transaction:f}),{sender:t.address}),operator:o,payee:n.payee,payer:t.address,salt:s,token:n.token},m=Ro({...p,chainId:n.chainId,escrow:a});return{action:`open`,type:`transaction`,channelId:m,transaction:d,signature:await $o(e,t,{channelId:m,cumulativeAmount:l},a,n.chainId),descriptor:p,cumulativeAmount:l.toString(),authorizedSigner:p.authorizedSigner}}async function hs(e,t,n,i,a,o,s=Io,c=[],l=n.token){let u=Ro({...n,chainId:a,escrow:s}),d=vo(i);return{action:`topUp`,type:`transaction`,channelId:u,transaction:await cs(e,await ss(e,{account:t,calls:[...c,{to:s,data:r({abi:Go,functionName:`topUp`,args:[n,d]})}],feePayer:o,feeToken:l,validAfter:as()})),descriptor:n,additionalDeposit:d.toString()}}function gs(e){let{payee:t,token:n,escrow:r,chainId:i}=e;return`${t.toLowerCase()}:${n.toLowerCase()}:${r.toLowerCase()}:${i}`}function Q(e){return gs({payee:e.descriptor.payee,token:e.descriptor.token,escrow:e.escrow,chainId:e.chainId})}function _s(){let e=new Map;return{get:t=>e.get(t),set(t){e.set(Q(t),t)},delete(t){e.delete(t)}}}const vs=new WeakMap,ys=new WeakMap;function bs(e,t){ys.set(e,ys.get(t)??t)}async function xs(e,t,n){let r=vs.get(e);r||(r=new Map,vs.set(e,r));let i=(r.get(t)??Promise.resolve()).catch(()=>{}).then(n);r.set(t,i);try{return await i}finally{r.get(t)===i&&r.delete(t)}}function Ss(e,t,n){return xs(ys.get(e)??e,`funding:${t}`,n)}async function Cs(e,t){await xs(e,`write:${Q(t)}`,async()=>{let n=await e.get(Q(t));if(n?.uncertainTopUp){if(n.channelId!==t.channelId)throw Error(`Session funding outcome is unknown; reconcile the pending payment before replacing the channel.`);t.uncertainTopUp=!0}await e.set(t)})}async function ws(e,t){await xs(e,`write:${t}`,async()=>{(await e.get(t))?.uncertainTopUp||await e.delete(t)})}const Ts=2n**96n-1n;function Es(e){if(e<0n||e>Ts)throw new q({reason:`amount exceeds uint96 range`})}async function Ds(e,t,n=Io,r){return Os(await h(e,{address:n,abi:Go,functionName:`getChannelState`,args:[t],...r===void 0?{}:{blockNumber:r}}))}function Os(e){return Es(e.settled),Es(e.deposit),{settled:e.settled,deposit:e.deposit,closeRequestedAt:e.closeRequestedAt}}const ks=V.custom(e=>typeof e==`string`&&c(e,{strict:!1})),As=V.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]{64}$/.test(e)),js=V.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]+$/.test(e)),Ms=V.object({authorizedSigner:ks,expiringNonceHash:As,operator:ks,payee:ks,payer:ks,salt:As,token:ks}),Ns=It(V.object({acceptedCumulative:V.string(),chainId:V.number(),channelId:As,closeRequestedAt:V.optional(V.string()),deposit:V.string(),descriptor:Ms,escrow:ks,highestVoucher:V.optional(V.object({channelId:As,cumulativeAmount:V.string(),signature:js})),requiredCumulative:V.string(),settled:V.string(),spent:V.string(),units:V.optional(V.number())}));function Ps(e){return Ns.encode(e)}function Fs(e){return Ns.decode(e)}const Is={status:`idle`};function Ls(e){return{status:`active`,...e}}function Rs(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:Vs(e.challengeId,t.snapshot),effects:[]}:$(e,t);case`activated`:return e.status===`closing`||e.status===`closed`?$(e,t):{state:ec({challengeId:t.challengeId,entry:t.entry,spent:t.spent,units:t.units??0}),effects:[]};case`opened`:return e.status===`opening`?{state:Hs(e.challengeId,t.receipt,t.descriptor,t.deposit),effects:[]}:$(e,t);case`receiptAccepted`:return e.status===`closing`||e.status===`closed`?$(e,t):{state:rc(t.receipt,t.entry),effects:[]};case`needVoucher`:return e.status===`active`?Bs({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:Hs(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:Hs(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 zs(e,t){let n=Rs(e.state,t);return e.state=n.state,n}function Bs(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 Vs(e,t){return Ls({challengeId:e,channelId:t.channelId,descriptor:t.descriptor,acceptedCumulative:t.acceptedCumulative,deposit:t.deposit,spent:t.spent,units:t.units??0})}function Hs(e,t,n,r){return Ls({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 Us(e){let{cumulativeAmount:t,maxVoucherCumulative:n}=e;if(n!==null&&!(t<=n))throw Error(`requested voucher amount ${t} exceeds local maxDeposit ${n}`)}function Ws(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`);Us({cumulativeAmount:i,maxVoucherCumulative:n}),Us({cumulativeAmount:a,maxVoucherCumulative:n})}function Gs(e){let{channel:t,maxVoucherCumulative:n,receipt:r,spent:i}=e;if(!r||r.channelId!==t?.channelId)return i;Ws({channel:t,maxVoucherCumulative:n,receipt:r});let a=BigInt(r.spent);return i>a?i:a}function Ks(e,t){return typeof e==`bigint`?e:f(e,t)}function qs(e){let{contextDepositRaw:t,maxDeposit:n,requestAmount:r,suggestedDepositRaw:i}=e;if(Ys(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 Js(e){let{deposit:t,maxDeposit:n,requiredCumulative:r,suggestedDeposit:i,topUpAmount:a}=e;if(r<=t)return 0n;Us({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 Ys(e,t){Us({cumulativeAmount:e,maxVoucherCumulative:t??null})}function Xs(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 Zs(e){let{cumulativeAmount:t,spent:n}=e;return t>n?t:n}function Qs(e){let{cumulativeAmount:t,readySpent:n,spent:r}=e;if(!go(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>Zs({cumulativeAmount:t,spent:r}))throw Error(`close-ready spent exceeds local voucher state`)}function $s(e){let{challengeId:t,channelId:n,expectedCloseAmount:r,minimumSpent:i=0n,receipt:a}=e,o=_o(r),s=_o(a.spent);return o===void 0||s===void 0||!go(i)?!1:!!a.txHash&&a.challengeId===t&&a.channelId===n&&a.acceptedCumulative===r&&s>=i&&s<=o}function ec(e){return Ls({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 tc(){return{channel:null,lastChallenge:null,lastUrl:null,spent:0n,socketSession:null,state:Is}}function nc(e){let{maxVoucherCumulative:t,receipt:n,runtime:r}=e;r.spent=Gs({channel:r.channel,maxVoucherCumulative:t,receipt:n,spent:r.spent}),n&&r.channel?.channelId===n.channelId&&zs(r,{type:`receiptAccepted`,receipt:n,entry:r.channel})}function rc(e,t){return Ls({challengeId:e.challengeId,channelId:e.channelId,descriptor:t.descriptor,acceptedCumulative:e.acceptedCumulative,deposit:t.deposit.toString(),spent:e.spent,units:e.units??0})}function ic(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=_o(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 ac(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 Rs(o,{type:`activated`,challengeId:r,entry:t,spent:a.toString(),units:o.status===`active`?o.units:0}).state}function oc(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 sc(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 cc(e){let{activeSocket:t,currentSocket:n,target:r}=e,i=n.closeReadyReceipt??await(async()=>(t.send(No()),e.waitForCloseReady()))(),a=BigInt(i.spent);Qs({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=>$s({challengeId:r.challenge.id,channelId:r.channelId,expectedCloseAmount:s,minimumSpent:a,receipt:e}));t.send(Mo(o));let c=await i;return t.close(),n.closeReadyReceipt=null,c}finally{n.expectedCloseAmount=null}}function lc(e){return`cumulativeAmount`in e}function uc(e){if(lc(e))return BigInt(e.cumulativeAmount)}async function dc(e,t){t.opened?await Cs(e.store,t):await ws(e.store,Q(t)),e.notifyUpdate(t)}async function fc(e,t,n){let r=uc(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 dc(e,i))}const pc=V.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]*$/.test(e)),mc=V.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]{64}$/.test(e)),hc=V.object({account:V.optional(V.custom()),autoSwap:V.optional(V.custom()),action:V.optional(V.enum([`open`,`topUp`,`voucher`,`close`])),channelId:V.optional(mc),cumulativeAmount:V.optional(H()),cumulativeAmountRaw:V.optional(V.string()),transaction:V.optional(pc),descriptor:V.optional(V.custom()),additionalDeposit:V.optional(H()),additionalDepositRaw:V.optional(V.string()),depositRaw:V.optional(V.string())});function gc(e){return e?.action!==void 0}function _c(e){return gc(e)&&e.descriptor!==void 0}function vc(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 yc(e,t,n,r){let i=vc(e,t,n);if(i===void 0)throw Error(`${n} required for ${r} action`);return i}function bc(e){return typeof e==`object`&&!!e}function xc(e){return typeof e==`string`&&c(e,{strict:!1})?e:void 0}function Sc(e){let t=e.request.methodDetails;return bc(t)?{chainId:typeof t.chainId==`number`?t.chainId:void 0,escrowContract:xc(t.escrowContract),escrow:xc(t.escrow),feePayer:typeof t.feePayer==`boolean`?t.feePayer:void 0,feeToken:xc(t.feeToken),operator:xc(t.operator),sessionSnapshot:Je(t,Ke.sessionSnapshot)}:{}}function Cc(e,t){if(typeof e==`string`&&c(e,{strict:!1}))return e;throw Error(`tempo session challenge missing ${t}`)}function wc(e){if(typeof e==`string`)return BigInt(e);throw Error(`tempo session challenge missing amount`)}function Tc(e){return typeof e==`string`?e:void 0}async function Ec(e){let{allowCustomEscrow:t,challenge:n,escrowOverride:r,allowedChainIds:i,getClient:a}=e,o=Sc(n);(o.chainId!==void 0||i?.length===0)&&xa(i,o.chainId);let s=o.chainId??(i?.length===1?i[0]:void 0),c=await a({chainId:s});ba(c,s);let l=s??c.chain?.id;if(xa(i,l),!l)throw Error(`No chainId configured for TIP-1034 session challenge.`);let u=ls(n,r,t),d=Cc(n.request.recipient,`recipient`),f=Cc(n.request.currency,`currency`);return{amount:wc(n.request.amount),challenge:n,chainId:l,client:c,escrow:u,feePayer:o.feePayer,feeToken:o.feeToken,key:gs({payee:d,token:f,escrow:u,chainId:l}),operator:o.operator,payee:d,snapshot:o.sessionSnapshot,suggestedDepositRaw:Tc(n.request.suggestedDeposit),token:f}}async function Dc(e){let{channelId:t,client:n,descriptor:r,expected:i,readChannelState:a=Ds}=e,o=Ro({...r,chainId:i.chainId,escrow:i.escrow});Oc({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 Oc(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(!ds(r.payee,a))throw Error(`context descriptor payee does not match challenge`);if(!ds(r.token,s))throw Error(`context descriptor token does not match challenge`);if(!ds(r.payer,o))throw Error(`context descriptor payer does not match account`);if(!ds(Lo(r),t))throw Error(`context descriptor authorizedSigner does not match account`)}function kc(e){let{context:t,snapshot:n}=e,r=t?.descriptor??n?.descriptor;if(r)return{...t,channelId:t?.channelId??n?.channelId,descriptor:r}}function Ac(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=vc(t,n,`cumulativeAmount`);return o===void 0?a+r:o+r}async function jc(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(!ts(i.escrow,i.chainId,{channelId:a.channelId,cumulativeAmount:s,signature:a.signature},Lo(i.descriptor)))throw Error(`session snapshot highest voucher signature is invalid`);let f=await Dc({channelId:i.channelId,client:n,descriptor:i.descriptor,expected:{chainId:i.chainId,escrow:i.escrow,payee:i.descriptor.payee,payer:t.address,authorizedSigner:os(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 Mc(e,t){return ds(e.address,t.payer)?ds(os(e),Lo(t)):!1}function Nc(e){let{account:t,entry:n,context:r,decimals:i,maxDeposit:a,resolved:o}=e;if(gc(r)){if(!_c(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=kc({context:r,snapshot:o.snapshot});return!n&&s&&Mc(t,s.descriptor)?{type:`recover`,account:t,context:s,decimals:i,maxDeposit:a,resolved:o}:n?.opened&&Mc(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 Pc(e,t,n=!1){switch(e.type){case`open`:return Ic(e,t,n);case`recover`:return Lc(e,t);case`voucher`:return Rc(e,t);case`manual`:return zc(e,t,n)}}async function Fc(e,t){if(e)return await ka(t.client,{account:t.account,amountOut:t.amountOut,tokenOut:t.tokenOut,tokenIn:e.tokenIn,slippage:e.slippage,maxAmountIn:e.maxAmountIn})}async function Ic(e,t,n){let{account:r,resolved:i}=e,a=qs({contextDepositRaw:e.context?.depositRaw,maxDeposit:e.maxDeposit,requestAmount:i.amount,suggestedDepositRaw:i.suggestedDepositRaw}),o=await ms(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 Fc(n,{account:r.address,amountOut:a,client:i.client,tokenOut:i.token}),token:i.token});return await dc(t,{channelId:o.channelId,cumulativeAmount:i.amount,deposit:a,descriptor:o.descriptor,escrow:i.escrow,chainId:i.chainId,opened:!0}),o}async function Lc(e,t){let{account:n,context:r,decimals:i,maxDeposit:a,resolved:o}=e,{descriptor:s}=r,c=await Dc({channelId:r.channelId,client:o.client,descriptor:s,expected:{chainId:o.chainId,escrow:o.escrow,payee:o.payee,payer:n.address,authorizedSigner:os(n),token:o.token}}),l=Ac({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`);Ys(l,a);let u=await fs(o.client,n,s,l,o.chainId,o.escrow),d=await t.store.get(o.key);return await dc(t,{...d?.channelId===c.channelId&&d.uncertainTopUp?{uncertainTopUp:!0}:{},channelId:c.channelId,cumulativeAmount:l,deposit:c.state.deposit,descriptor:s,escrow:o.escrow,chainId:o.chainId,opened:!0}),u}async function Rc(e,t){let{account:n,entry:r,resolved:i}=e,a=r.cumulativeAmount+i.amount;Ys(a,e.maxDeposit);let o=await fs(i.client,n,r.descriptor,a,i.chainId,i.escrow);return r.cumulativeAmount=a,await dc(t,r),o}async function zc(e,t,n){let{account:r,context:i,decimals:a,resolved:o}=e,{descriptor:s}=i,c=Ro({...s,chainId:o.chainId,escrow:o.escrow});Oc({channelId:i.channelId,descriptor:s,expectedChannelId:c,payee:o.payee,payer:r.address,authorizedSigner:os(r),token:o.token});let l=await Bc({account:r,channelId:c,context:i,decimals:a,descriptor:s,resolved:o},n);return await fc(t,o.key,l),l}async function Bc(e,t){switch(e.context.action){case`open`:return Vc(e);case`topUp`:return Hc(e,t);case`voucher`:return Uc(e);case`close`:return Wc(e)}}async function Vc(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=yc(r,i,`cumulativeAmount`,`open`),c=await fs(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 Hc(e,t){let{account:n,channelId:r,context:i,decimals:a,descriptor:o,resolved:s}=e,c=yc(i,a,`additionalDeposit`,`topUp`);return i.transaction?{action:`topUp`,type:`transaction`,channelId:r,transaction:i.transaction,descriptor:o,additionalDeposit:c.toString()}:hs(s.client,n,o,c,s.chainId,s.feePayer,s.escrow,await Fc(t,{account:n.address,amountOut:c,client:s.client,tokenOut:s.token}),s.feeToken)}function Uc(e){let{account:t,context:n,decimals:r,descriptor:i,resolved:a}=e;return fs(a.client,t,i,yc(n,r,`cumulativeAmount`,`voucher`),a.chainId,a.escrow)}function Wc(e){let{account:t,context:n,decimals:r,descriptor:i,resolved:a}=e;return ps(a.client,t,i,yc(n,r,`cumulativeAmount`,`close`),a.chainId,a.escrow)}const Gc={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3};function Kc(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=Gc.CLOSED,r=null}if(a.type===`open`&&(i=Gc.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 qc(e){return{acceptedCumulative:BigInt(e.acceptedCumulative),deposit:BigInt(e.deposit),requiredCumulative:BigInt(e.requiredCumulative)}}function Jc(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=Ks(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 Yc(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:rc(s,u)}:i?{channel:u,state:ec({challengeId:i,entry:u,spent:c.toString(),units:a.status===`active`?a.units:0})}:{channel:u}}async function Xc(e){if(e.event.channelId!==e.expectedChannelId)return{status:`ignored`,reason:`channel-mismatch`};let t=qc(e.event);e.assertVoucherWithinLocalLimit(t.requiredCumulative),await e.topUpIfNeeded({challenge:e.challenge,input:e.input,headers:e.headers,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:vo(t.requiredCumulative);return{status:`ready`,context:{action:`voucher`,channelId:e.expectedChannelId,descriptor:n.descriptor,cumulativeAmountRaw:r.toString()}}}function Zc(e){return e.method===We.tempo&&e.intent===Ge.session}function Qc(e){return Zc(e)&&Je(e.request.methodDetails,Ke.sessionProtocol)===qe.v2}function $c(e){return Je(e.request.methodDetails,Ke.sessionSnapshot)}function el(e,t,n,r){let i=e instanceof Request?e.headers:void 0;return Kr({...t,redirect:`manual`,headers:{...Pi(i),...Pi(t?.headers)}},_t(r),n)}function tl(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 nl(e){let t=new URL(e.toString());return t.protocol===`ws:`&&(t.protocol=`http:`),t.protocol===`wss:`&&(t.protocol=`https:`),t}async function rl(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}}var il=class extends Error{constructor(e){let t=e instanceof Error||e instanceof DOMException?e.message:String(e);super(`${t}; payment outcome unknown`),this.name=`UncertainFundingError`}};async function al(e){let{channel:t,channelId:n}=e;if(!t?.descriptor||t.channelId!==n)throw Error(`Cannot top up session: no local channel descriptor available.`);if(t.uncertainTopUp)throw Error(`Session funding outcome is unknown; reconcile the pending payment before another top-up.`);let r=await ol({challenge:e.challenge,context:{action:`topUp`,channelId:n,descriptor:t.descriptor,additionalDepositRaw:e.additionalDeposit.toString()},createSessionCredential:e.createSessionCredential,fetch:e.fetch,headers:e.headers,input:e.input,signal:e.signal}).catch(async n=>{throw n instanceof il&&(t.uncertainTopUp=!0,await e.onUncertainFunding?.(t)),n});if(!r.ok)throw Error(`Top-up POST failed with status ${r.status}`);let i=r.headers.get(z.paymentReceipt);return i?Oo(i):void 0}async function ol(e){let t=async t=>{e.signal?.throwIfAborted();let n=await e.createSessionCredential(t,e.context);e.signal?.throwIfAborted();let r=new AbortController,i=()=>r.abort(e.signal?.reason);e.signal?.addEventListener(`abort`,i,{once:!0});let a=setTimeout(()=>r.abort(new DOMException(`Session management request timed out; payment outcome unknown`,`TimeoutError`)),3e4),o,s=new Promise((e,t)=>{o=()=>t(r.signal.reason),r.signal.addEventListener(`abort`,o,{once:!0})});try{return await Promise.race([e.fetch(tl(e.input),{method:`POST`,signal:r.signal,redirect:`manual`,headers:Al(t,n,e.input,e.headers)}),s])}catch(t){throw e.context.action===`topUp`?new il(t):t}finally{clearTimeout(a),e.signal?.removeEventListener(`abort`,i),r.signal.removeEventListener(`abort`,o)}},n=await t(e.challenge);if(n.status!==402)return n;let r=pt(n).find(Qc);return r?t(r):n}async function sl(e){let t=cl({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,headers:e.init?.headers,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,el(e.input,e.init,t,r))}catch(e){throw await l(),e}return!u.ok&&!u.headers.get(z.paymentReceipt)&&await l(),u}function cl(e){let t=pt(e.response).find(Qc);if(!t)return;let n=$c(t);if(!n)return;let{channel:r}=e;if(!(!r?.descriptor||r.channelId!==n.channelId))return{channel:r,challenge:t,snapshot:n}}async function ll(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`,redirect:`manual`,headers:Al(r,a,e.lastUrl,e.headers)})},i=await r(e.target.challenge);if(i.status===402){let t=pt(i).find(Qc);t&&(e.setChallenge?.(t),i=await r(t,!0))}if(!i.ok){let e=await rl(i),t=i.headers.get(z.wwwAuthenticate)??``;throw Error(`Close request failed with status ${i.status}${e?`: ${e}`:``}${t?` [${z.wwwAuthenticate}: ${t}]`:``}`)}let a=i.headers.get(z.paymentReceipt);if(!a)return;let o=Oo(a);if(!o.txHash||!E.validate(o.txHash,{strict:!0})||E.size(o.txHash)!==32||!$s({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 ul(e,t,n){let{onReceipt:r,signal:i,...a}=t??{},o=i??(e instanceof Request?e.signal:void 0),s={...a,headers:{...Pi(a.headers),Accept:`text/event-stream`},...o?{signal:o}:{}},c=await n.doFetch(e,s);return!ko(c)&&n.getChannel()?.opened&&(c=await n.doFetch(e,s)),dl(e,c,{onReceipt:r,signal:o},n,s.headers)}function dl(e,t,n,r,i){if(!ko(t))throw Error(`SSE response is not an event stream.`);if(!t.body)throw Error(`Response has no body.`);let a=r.getChallenge();return fl({onNeedVoucher:t=>_l({challenge:a,driver:r,headers:i,input:e,signal:n?.signal},t),onReceipt(e){r.acceptReceipt(e),n?.onReceipt?.(e)},response:t,signal:n?.signal})}async function*fl(e){for await(let t of pl(e))t.data!==void 0&&(yield t.data)}async function*pl(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=ml(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=Ao(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 ml(e,t){for(let n=0;n<e.length;n++){let r=hl(e,n,t);if(!r)continue;let i=hl(e,n+r,t);if(i)return{index:n,length:r+i};n+=r-1}}function hl(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 ol(e){let t=new AbortController,n=()=>t.abort(e.signal?.reason);e.signal?.addEventListener(`abort`,n,{once:!0}),e.signal?.aborted&&n();let r=rl({...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 sl(e,t){let n=e.driver.getChannel();if(!n||!e.challenge)return;let r=await Bc({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 Xc({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 cl(e){let t=new URL(e.input.toString()),n=Kc(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=ft(r).find(Hc);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 ll(e){e.signal?.throwIfAborted();let t=await cl(e);e.signal?.throwIfAborted();let n=await e.createSessionCredential(t.challenge,{});return e.signal?.throwIfAborted(),{...t,credential:n}}function ul(e){let{challenge:t,credential:n,socket:r}=e;return{challenge:t,channelId:xt(n).payload.channelId,closeReadyReceipt:null,deliveredChunks:0n,expectedCloseAmount:null,socket:r,tickCost:ho(t)}}function dl(e){let{challengeId:t,channelId:n,receipt:r}=e;return r.challengeId===t&&r.channelId===n}function fl(e){if(!dl(e))return`received mismatched payment-close-ready frame`;let t=oo(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 pl(e){let{challengeId:t,channelId:n,expectedCloseAmount:r,receipt:i}=e;if(!dl(e))return`received mismatched payment-receipt frame`;if(r!==null&&i.txHash&&!Us({challengeId:t,channelId:n,expectedCloseAmount:r,minimumSpent:BigInt(r),receipt:i}))return`received mismatched payment-close receipt frame`}async function ml(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=ul({challenge:t,credential:n,socket:s});e.setSocketSession(c);let l=Ic(s),u=t=>{e.rejectReceipt(Error(t)),e.rejectCloseReady(Error(t)),(s.readyState===Fc.CONNECTING||s.readyState===Fc.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 gl({driver:e,failSocketFlow:u,managedEmit:l.emit,message:n,rawSocket:s,socketState:c})}),o?.addEventListener(`abort`,d,{once:!0});try{await hl(s,l.emit,a,o),o?.throwIfAborted()}catch(e){throw o?.removeEventListener(`abort`,d),s.close(),e}return s.send(So(n)),await e.waitForReceipt(),l.socket}function hl(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 gl(e){let t=wo(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`:_l(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 vl(e,t.data);return;case`payment-receipt`:yl(e,t.data);return}}function _l(e,t){let n=e.driver.getChannel()?.cumulativeAmount??0n,r=fl({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 vl(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 Bc({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(So(i))}catch(t){e.failSocketFlow(t instanceof Error?t.message:`failed to create websocket voucher`)}}function yl(e,t){let n=pl({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 bl=new WeakMap;async function xl(e,t){let n=bl.get(e)??new Map;bl.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 Sl(e,t){try{return t?.channelId.toLowerCase()===e.channelId.toLowerCase()&&BigInt(t.acceptedCumulative)===e.cumulativeAmount}catch{return!1}}function Cl(e,t,n){try{let r=e.response?.headers.get(B.paymentReceipt);if(r){let e=vo(r);if(e.challengeId===t.id&&Sl(n,e))return!0}}catch{}return e.challenges?.some(e=>Hc(e)?Sl(n,Uc(e)):!1)??!1}function wl(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=la({chain:x,getClient:c,rpcUrl:Un}),h=aa({account:t}),g=l===void 0?void 0:f(l,a),_=u===void 0?void 0:f(u,a),v=i??ss(),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??yc({context:t,snapshot:e.snapshot})?.descriptor;return await p?.({account:r,chainId:e.chainId,operation:{kind:`authorizePaymentChannel`,...i?{authority:Do(i)}:{}}})??r},S=async(e,t,n)=>Cc({account:await b(e,t,n),entry:n,context:t,decimals:a,maxDeposit:g,resolved:e}),C=Mt(Za,{canHandleChallenge:({challenge:e})=>Hc(e),context:ac,async createCredential(e){let{challenge:t,context:i}=e,a=await gc({allowCustomEscrow:n,challenge:t,escrowOverride:o,allowedChainIds:s,getClient:m}),c=hi(e),l=()=>{};try{let e=!oc(i)&&i?.descriptor===void 0;e&&(l=await xl(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 xl(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 es(t,await wc(o,u,ba(i?.autoSwap??r,va)),a.chainId,o.account);if(c&&s){let e=s;c.settle=async n=>{let r=n.status===`accepted`||Cl(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 ps(v,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})=>fs(v,Q(t),async()=>{o?.throwIfAborted();let s=await v.get(Q(t));if(s?.channelId===t.channelId&&(t=s),t.uncertainTopUp)throw Error(`Session funding outcome is unknown; reconcile the pending payment before another top-up.`);let c=t.deposit>n?t.deposit:n,l=Rs({deposit:c,maxDeposit:g,requiredCumulative:a,suggestedDeposit:e.request.suggestedDeposit===void 0?void 0:BigInt(e.request.suggestedDeposit),topUpAmount:_});l>0n&&await Yc({additionalDeposit:l,challenge:e,channel:t,channelId:t.channelId,createSessionCredential:(e,t)=>C.createCredential({challenge:e,context:t}),onUncertainFunding:async e=>{let t=await v.get(Q(e)),n={...t?.channelId===e.channelId?t:e,uncertainTopUp:!0};await ps(v,n),y.notifyUpdate(n)},fetch:r,input:i,signal:o});let u=c+l;if(u===t.deposit)return;let d=await v.get(Q(t)),f=d?.channelId.toLowerCase()===t.channelId.toLowerCase()?d:t,p={...f,deposit:f.deposit>u?f.deposit:u};await ps(v,p),y.notifyUpdate(p)});return ai(C,async({challenge:e,context:t,fetch:r,input:i,signal:a})=>{if(!Hc(e))return;let c=t===void 0?void 0:ac.parse(t);if(oc(c))return;let l=await gc({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+ho(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||!Sc(await b(l,c,u),u.descriptor)||await w({challenge:e,channel:u,deposit:_,fetch:r,input:i,requiredCumulative:h,signal:a})}),fi(C,async({challenge:e,credential:t,fetch:r,headers:i,input:a,refetch:c,response:l,signal:u})=>{if(!Hc(e))return l;if(!yo(l))return mo(xt(t).payload).action===`open`&&i.get(`accept`)?.toLowerCase().includes(`text/event-stream`)?await c?.()??l:l;let d=(await gc({allowCustomEscrow:n,challenge:e,escrowOverride:o,allowedChainIds:s,getClient:m})).key,f=await v.get(d),p={assertVoucherWithinLocalLimit:e=>zs(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 ol({onNeedVoucher:(t,n)=>sl({challenge:e,driver:p,input:a,signal:n},t),onReceipt(){},response:l,signal:u})})}const Tl=new WeakMap;function El(e,t){Tl.set(e,t)}function Dl(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=Dl(`close-ready`),n=Dl(`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 kl(e){return e.method===Ue.tempo&&e.intent===We.charge}function Al(e){if(!kl(e)||typeof e.request.amount!=`string`)return!1;try{return BigInt(e.request.amount)===0n}catch{return!1}}function jl(e,t,n){if(!n)return t;let r={...Ti(e instanceof Request?e.headers:void 0),...Ti(t?.headers)};return Object.keys(r).some(e=>e.toLowerCase()===B.paymentSession.toLowerCase())?t:{...t,headers:{...r,[B.paymentSession]:n}}}function Ml(e,t){return e===void 0?t:{...ac.parse(e),...t}}function Nl(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 Pl(e){let t=e.client?.chain?.id;(t!==void 0||e.allowedChainIds?.length===0)&&da(e.allowedChainIds,t);let n=e.allowCustomEscrow??!1,r=Nl(e),i=la({chain:x,getClient:e.client?()=>e.client:e.getClient,rpcUrl:Un}),a=aa({account:e.account}),o=Gs(),s=e.credentialContext===void 0?void 0:Ml(e.credentialContext,{}),c=Ol({getSocketSession:()=>o.socketSession}),l=e.channelStore??ss(),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=e=>ps(l,e),m={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=Q(e);e.opened&&u.delete(e.channelId),d?.trackCreates&&!d.seenExisting.has(t)&&d.created.set(t,e),await p(e)},delete:e=>ms(l,e)};us(m,l);async function h(e){let t=Q(e),n=await l.get(t);if(e.uncertainTopUp||n?.uncertainTopUp)throw Error(`Session funding outcome is unknown; reconcile the pending payment before replacing the channel.`);u.add(e.channelId),d?.seenExisting.delete(t),d?.resumed===e&&(d.resumed=void 0),await Promise.resolve(ms(l,t)).catch(()=>void 0)}async function g(){let e=d;if(e?.created.size){for(let[t,n]of e.created){let e=await l.get(t);if(n.uncertainTopUp||e?.channelId===n.channelId&&e.uncertainTopUp)throw Error(`Session funding outcome is unknown; reconcile the pending payment before discarding the channel.`);u.add(n.channelId),await Promise.resolve(ms(l,t)).catch(()=>void 0)}e.created.clear(),await ie(e.committed??e.previous)}}function _(e){let t=qe(e.request.methodDetails,Ge.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=Xs({channel:o.channel,spent:o.spent,state:o.state}),!0;return!1}function v(e){return ks(o,e)}function y(){let e=o.state.status===`active`?o.state:d?.committed?.state??d?.previous.state;return e?.status===`active`?e.units:0}function b(e){let t=d,n=t?.committed?.channel?.entry??t?.resumed;!t||n?.channelId.toLowerCase()!==e.channelId.toLowerCase()||e.deposit<=n.deposit&&!e.uncertainTopUp||(t.resumed=void 0,t.committed=Xs({channel:o.channel,spent:o.spent,state:o.state}))}let S=wl({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:m,onChannelUpdate(e){e.channelId!==o.channel?.channelId&&(o.spent=0n),o.channel=e,o.lastChallenge&&v({type:`activated`,challengeId:o.lastChallenge.id,entry:e,spent:o.spent.toString(),units:y()}),b(e)}}),C=ci(S);C&&ai(S,e=>te(()=>Promise.resolve(C(e)),e.signal)),pi(S);let w=eo({allowedChainIds:e.allowedChainIds,account:e.account,getClient:e.client?()=>e.client:e.getClient,resolveAccount:e.resolveAccount}),T=wi({fetch:r.fetch,methods:[S],onChallenge:async(e,t)=>{if(!Vc(e))return;let n=d,r=n&&n.challengesReceived>0&&e.id===o.lastChallenge?.id,i=r&&it(e)===it(o.lastChallenge);n&&n.challengesReceived++,!i&&(_(e)||(n?.created.size?await g():r&&await ie(n.committed??n.previous)),o.lastChallenge=e,v({type:`challengeReceived`,challengeId:e.id}))}});function E(e,t){return S.createCredential({challenge:e,context:Ml(s,t)})}function D(e){Ks({maxVoucherCumulative:r.maxVoucherCumulative,receipt:e,runtime:o})}function O(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`&&v({type:`activated`,challengeId:o.lastChallenge.id,entry:o.channel,spent:o.spent.toString(),units:e})}async function k(t){let n=t.headers.get(B.paymentSessionSnapshot);if(!n)return;let r=Ts(n);da(e.allowedChainIds,r.chainId);let s=await i({chainId:r.chainId});ua(s,r.chainId);let c=a(s),{entry:l,spent:u}=await xc({account:await e.resolveAccount?.({account:c,chainId:r.chainId,operation:{authority:Do(r.descriptor),kind:`authorizePaymentChannel`}})??c,client:s,snapshot:r});return F(l.cumulativeAmount),await Promise.resolve(m.set(l)).catch(()=>void 0),o.channel=l,o.spent=u,l}async function A(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:{...Ti(i),...Ti(n?.headers),[B.acceptPayment]:`${Ue.tempo}/${We.charge}`}};try{let e=await r.fetch(l,u);if(e.status!==402)return await k(e);let t=ft(e).find(kl);if(!t||!Al(t))return;let n=await w.createCredential({challenge:t,context:{}}),i=await r.fetch(l,{...u,headers:{...Ti(u.headers),[B.authorization]:n}});return i.ok?await k(i):void 0}catch{return}}function j(e,t){let n=o.socketSession;return Js({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 M(e,t){let n=Uc(t);if(!n)return;if(Oo({...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 N(e,t){let n=M(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 P(e,t=e.challenge,n=!1){let r=(n?N(e,t):M(e.channel,t))?.acceptedCumulative??j(t,e.channelId);if(r>e.channel.cumulativeAmount)throw Error(`fallback close amount exceeds local voucher state`);return F(r),r.toString()}function F(e){Ns({cumulativeAmount:e,maxVoucherCumulative:r.maxVoucherCumulative})}let I,ee;async function te(e,t){if(ee)throw ee;for(;;){let e=I;if(!e)break;if(!t)await e;else{t.throwIfAborted();let n;try{await Promise.race([e,new Promise((e,r)=>{n=()=>r(t.reason),t.addEventListener(`abort`,n,{once:!0})})])}finally{t.removeEventListener(`abort`,n)}}}if(t?.throwIfAborted(),ee)throw ee;let n=e();I=n;try{return await n}catch(e){throw e instanceof Jc&&(ee=Error(`Session funding outcome is unknown; reconcile the pending payment before creating a new session manager.`)),e}finally{I===n&&(I=void 0)}}async function ne(e){if(!o.channel)throw Error(`Cannot top up session: no active channel`);return fs(l,Q(o.channel),async()=>{let{knownDeposit:t,...n}=e,i=o.channel?await m.get(Q(o.channel)):void 0;if(i?.channelId===e.channelId&&i.uncertainTopUp)throw Error(`Session funding outcome is unknown; reconcile the pending payment before another top-up.`);let a=await Yc({...n,channel:o.channel,createSessionCredential:E,fetch:r.fetch,onUncertainFunding:async e=>{let t=await m.get(Q(e)),n={...t?.channelId===e.channelId?t:e,uncertainTopUp:!0};o.channel?.channelId===e.channelId&&(o.channel=n),await m.set(n),b(n)}});D(a);let s=o.channel,c=zc({additionalDeposit:e.additionalDeposit,channel:o.channel,channelId:e.channelId,challengeId:o.lastChallenge?.id,currentState:o.state,knownDeposit:t,receipt:a,spent:o.spent});if(c?.channel&&o.lastChallenge){let e=c.channel;for(;;){await m.set(e);let t=o.channel;if(t===s)break;if(!t)return a;let n=c.channel;e=t.channelId===n.channelId?{...t,deposit:t.deposit>n.deposit?t.deposit:n.deposit,cumulativeAmount:t.cumulativeAmount>n.cumulativeAmount?t.cumulativeAmount:n.cumulativeAmount}:t,s=t}if(e.channelId!==c.channel.channelId)return a;o.channel=e,v({type:`activated`,challengeId:o.lastChallenge.id,entry:e,spent:o.spent.toString(),units:y()}),b(e)}return a})}async function re(e){return te(async()=>{e.signal?.throwIfAborted();let t=o.channel?.channelId===e.channelId?o.channel.deposit:0n,n=t>e.deposit?t:e.deposit,i=Rs({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 ne({challenge:e.challenge,input:e.input,channelId:e.channelId,additionalDeposit:i,knownDeposit:n,signal:e.signal})},e.signal)}async function L(e,t){let n=Ys({channel:o.channel,channelId:e,challengeId:o.lastChallenge?.id,cumulativeAmount:t,spent:o.spent,state:o.state});n&&o.channel&&(v({type:`activated`,challengeId:n.challengeId,entry:o.channel,spent:n.spent,units:n.units}),await p(o.channel))}async function ie(e){let t=Zs(e,o.channel);o.channel=t.channel,o.spent=t.spent,o.state=t.state,o.channel?.opened&&await p(o.channel)}function ae(e){let t=e.headers.get(B.paymentReceipt),n=t?vo(t):null;return D(n),Object.assign(e,{receipt:n,challenge:o.lastChallenge,channelId:o.channel?.channelId??null,cumulative:o.channel?.cumulativeAmount??0n})}async function oe(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=Xs({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 A(e,t),i.trackCreates=!0;let a=jl(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 h(n),a=jl(e,t,void 0),!0)}for(;;){let t;try{t=await T(e,a)}catch(e){if(i.created.size?await g():await ie(i.committed??n),await l())continue;throw e}let s=ae(t),c=!1;if(s.status===402){let t=await Zc({input:e,init:a,response:s,createSessionCredential:E,fetch:r.fetch,getChannel:()=>o.channel,restoreCumulative:L,setChallenge(e){o.lastChallenge=e},topUpIfNeeded:re});t&&(c=!0,s=ae(t))}if(!c&&!s.ok&&!s.receipt){if(i.created.size?await g():await ie(i.committed??n),await l())continue;return s}return s}}finally{d=void 0}}async function se(e){let t=await $c({createSessionCredential:E,fetch:r.fetch,getMinimumSpent:()=>o.spent,lastUrl:o.lastUrl,resolveSignedCloseAmount:t=>P(e,t,!0),signedCloseAmount:P(e),setChallenge(e){o.lastChallenge=e},target:e});return t&&(O(),v({type:`closeStarted`}),v({type:`closed`,receipt:t})),t}let ce={createSessionCredential:E,doFetch:oe,fetch:r.fetch,getChannel:()=>o.channel,getChallenge:()=>o.lastChallenge,assertVoucherWithinLocalLimit:F,acceptReceipt(e){D(e)},topUpIfNeeded:re},le={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:oe,async topUp(e){let t=Rc({amount:e,assertVoucherWithinLocalLimit:F,channel:o.channel,decimals:r.decimals,lastChallenge:o.lastChallenge,lastUrl:o.lastUrl});return te(async()=>{if(o.channel?.channelId!==t.channelId||o.lastChallenge!==t.challenge||o.lastUrl!==t.input)throw Error(`Session changed while waiting to top up`);let n=Rc({amount:e,assertVoucherWithinLocalLimit:F,channel:o.channel,decimals:r.decimals,lastChallenge:t.challenge,lastUrl:t.input});return ne({additionalDeposit:n.additionalDeposit,challenge:n.challenge,channelId:n.channelId,input:n.input})})},async sse(e,t){return el(e,t,ce)},async ws(e,t){if(!r.WebSocket)throw Error("No WebSocket implementation available. Pass `webSocket` to sessionManager() in this runtime.");let n=Kc(e),i=t?.signal?{signal:t.signal}:void 0;await A(n,i);let a=o.channel?.opened?o.channel.channelId:void 0,{challenge:s,credential:l,httpUrl:u,wsUrl:d}=await ll({async createSessionCredential(e,i){return o.lastChallenge=e,await si(S,{challenge:e,context:i,fetch:r.fetch,input:n,signal:t?.signal}),E(e,i)},fetch:r.fetch,input:e,onProbeUrl(e){o.lastUrl=e.toString()},probeInit:jl(n,i,a),signal:t?.signal});return o.lastChallenge=s,ml({challenge:s,credential:l,httpUrl:u,WebSocket:r.WebSocket,wsUrl:d,options:t,createSessionCredential:E,getChannel:()=>o.channel,setSocketSession(e){o.socketSession=e},async refreshChallenge(){let e=await cl({fetch:r.fetch,input:u,probeInit:jl(u,i,o.channel?.opened?o.channel.channelId:void 0),signal:t?.signal});return o.lastChallenge=e.challenge,e.challenge},assertVoucherWithinLocalLimit:F,acceptReceipt:D,rejectCloseReady:c.rejectCloseReady,rejectReceipt:c.rejectReceipt,settleCloseReady:c.settleCloseReady,settleReceipt:c.settleReceipt,topUpIfNeeded:re,waitForReceipt:c.waitForReceipt})},async close(){let e=o.socketSession,t=Bs({channel:o.channel,currentSocket:e,lastChallenge:o.lastChallenge});if(!t)return;let n=e?.socket;if(e&&n?.readyState===Fc.OPEN){let r=await Qs({activeSocket:n,createSessionCredential:E,currentSocket:e,spent:o.spent,target:t,waitForCloseReady:c.waitForCloseReady,waitForReceipt:c.waitForReceipt});return O(),v({type:`closeStarted`}),v({type:`closed`,receipt:r}),r}return se(t)}};return El(le,{consumeSseResponse(e,t,n){return tl(e,t,n,ce)},rehydrate({channel:e,challenge:t,input:n,spent:r}){if(!e.opened)throw Error(`Cannot restore a closed session channel.`);if(!Vc(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.`);F(e.cumulativeAmount);let i=M(e,t),a=i&&i.spent>r?i.spent:r;o.lastUrl=n,o.lastChallenge=t,o.channel=e,o.spent=a,v({type:`challengeReceived`,challengeId:t.id}),v({type:`activated`,challengeId:t.id,entry:e,spent:a.toString(),units:0})}}),le}(function(e){e.serializeSnapshot=ws,e.deserializeSnapshot=Ts})(Pl||={});const Fl=(1n<<64n)-1n,Il={dev_second:1n,day:86400n,week:604800n};function Ll(e){return e instanceof Date?e:new Date(e)}function Rl(e){let t=e.getTime();if(!Number.isFinite(t))throw new J({reason:`subscriptionExpires is invalid`});if(t%1e3!=0)throw new J({reason:`subscriptionExpires must be representable as whole seconds`});let n=t/1e3;if(n<=0||!Number.isSafeInteger(n))throw new J({reason:`subscriptionExpires cannot be represented in a Tempo key authorization`});return n}function zl(e){if(!/^[1-9]\d*$/.test(e.periodCount))throw new J({reason:`periodCount is invalid`});let t=Il[e.periodUnit];if(t===void 0)throw new J({reason:`periodUnit is invalid`});let n=BigInt(e.periodCount)*t;if(n>Fl)throw new J({reason:`subscription period cannot be represented as an unsigned 64-bit integer`});if(n>BigInt(2**53-1))throw new J({reason:`subscription period cannot be represented exactly by this Tempo client`});return Number(n)}function Bl(e){let{challengeExpires:t,request:n}=e;zl(n);let r=Rl(Ll(n.subscriptionExpires));if(t){let e=Math.floor(new Date(t).getTime()/1e3);if(!Number.isFinite(e)||r<=e)throw new J({reason:`subscriptionExpires must be strictly later than challenge expires`})}}function Vl(e){return[{address:eu(e.currency,`currency`),selector:`0x95777d59`,recipients:[eu(e.recipient,`recipient`)]}]}function Hl(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 J({reason:`challenge id must encode 32 bytes`})}}async function Ul(e){let{accessKey:t,account:n,challengeId:r,chainId:i,request:a}=e;if(typeof n.sign!=`function`)return;let o=Gl({accessKey:t,challengeId:r,chainId:i,request:a}),s=await n.sign({hash:R.getSignPayload(o)}),c=z.from(s);if(c.type===`keychain`||c.type===`multisig`)throw new J({reason:`keyAuthorization must use a primitive signature`});return R.from(o,{signature:s})}function Wl(e){let{accessKey:t,challengeId:n,chainId:r,payload:i,request:a}=e;if(i.type!==`keyAuthorization`)throw new J({reason:`invalid keyAuthorization payload`});let o=Kl(i.signature),s=ql(o);if(Jl({accessKey:t,authorization:o,chainId:r}),o.witness?.toLowerCase()!==Hl(n))throw new J({reason:`keyAuthorization challenge mismatch`});return Yl(o,a),Zl(Xl(o),a),Ql(o.scopes,a),{authorization:o,source:{address:$l(o,s),chainId:r}}}function Gl(e){let{accessKey:t,challengeId:n,chainId:r,request:i}=e;return R.from({address:eu(t.accessKeyAddress,`accessKeyAddress`),chainId:BigInt(r),expiry:Rl(Ll(i.subscriptionExpires)),limits:[{token:eu(i.currency,`currency`),limit:BigInt(i.amount),period:zl(i)}],scopes:Vl(i),type:t.keyType,witness:Hl(n)})}function Kl(e){try{return R.deserialize(e)}catch(e){throw e instanceof R.InvalidSignatureTypeError?new J({reason:`keyAuthorization must use a primitive signature`}):new J({reason:`invalid keyAuthorization payload`})}}function ql(e){let t=e.signature;if(!t)throw new J({reason:`keyAuthorization must use a primitive signature`});return t}function Jl(e){let{accessKey:t,authorization:n,chainId:r}=e;if(n.chainId!==BigInt(r))throw new J({reason:`keyAuthorization chainId mismatch`});if(t){if(!l(n.address,eu(t.accessKeyAddress,`accessKeyAddress`)))throw new J({reason:`keyAuthorization access key mismatch`});if(n.type!==t.keyType)throw new J({reason:`keyAuthorization key type mismatch`})}}function Yl(e,t){if(Bl({request:t}),e.expiry!==Rl(Ll(t.subscriptionExpires)))throw new J({reason:`keyAuthorization expiry mismatch`})}function Xl(e){let[t]=e.limits??[];if(!t||e.limits?.length!==1)throw new J({reason:`keyAuthorization must contain exactly one token limit`});return t}function Zl(e,t){if(!l(e.token,eu(t.currency,`currency`)))throw new J({reason:`keyAuthorization currency mismatch`});if(e.limit!==BigInt(t.amount))throw new J({reason:`keyAuthorization amount mismatch`});if(e.period!==zl(t))throw new J({reason:`keyAuthorization period mismatch`})}function Ql(e,t){if(!e||e.length!==1)throw new J({reason:`keyAuthorization must contain a recipient-scoped transferWithMemo call`});let n=eu(t.currency,`currency`),r=eu(t.recipient,`recipient`),i=new Set;for(let t of e){if(!l(t.address,n))throw new J({reason:`keyAuthorization call target mismatch`});let e=tu(t.selector);if(e!==`0xa9059cbb`&&e!==`0x95777d59`)throw new J({reason:`keyAuthorization selector not allowed`});if(i.has(e))throw new J({reason:`keyAuthorization duplicate selector`});if(i.add(e),t.recipients?.length!==1||!l(t.recipients[0],r))throw new J({reason:`keyAuthorization recipient mismatch`})}if(!i.has(`0x95777d59`))throw new J({reason:`keyAuthorization must allow transferWithMemo`})}function $l(e,t){let n=R.getSignPayload(e);try{let e=z.extractAddress({payload:n,signature:t});if(!z.verify(t,{address:e,payload:n}))throw new J({reason:`keyAuthorization signature is invalid`});return e}catch(e){throw e instanceof J?e:new J({reason:`keyAuthorization signature is invalid`})}}function eu(e,t){if(!c(e))throw new J({reason:`${t} must be an address`});return e.toLowerCase()}function tu(e){return typeof e==`string`?e.toLowerCase():``}const nu=H.object({accessKey:H.optional(H.custom()),account:H.optional(H.custom())});function ru(e={}){let t=la({chain:P,getClient:e.getClient,rpcUrl:Un}),n=aa({account:e.account});return Mt(Qa,{context:nu,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.");au(r.request),await e.validateRequest?.(r.request);let u=await iu(o,{accessKey:c,account:s,challengeId:r.id,chainId:a,request:r.request}),d=Wl({accessKey:c,challengeId:r.id,chainId:a,payload:{signature:R.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 Tt({challenge:r,payload:{signature:R.serialize(u),type:`keyAuthorization`},source:`did:pkh:eip155:${a}:${s.address.toLowerCase()}`})}})}async function iu(e,t){let{accessKey:n,account:r,challengeId:i,chainId:a,request:o}=t,s=await Ul({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:Rl(Ll(o.subscriptionExpires)),keyType:n.keyType,limits:[{token:o.currency,limit:E.fromNumber(BigInt(o.amount)),period:zl(o)}],scopes:Vl(o),witness:Hl(i)}]});return R.fromRpc(c.keyAuthorization)}function au(e){zl(e),Rl(Ll(e.subscriptionExpires))}const ou=Object.assign(wl,{manager:Pl});function su(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[eo(e),ou(n)]}(function(e){e.charge=eo,e.common=su,e.session=ou,e.subscription=ru})(su||={});const cu=N.union([N.boolean(),N.literal(`true`).transform(()=>!0),N.literal(`false`).transform(()=>!1)]);async function lu(e){process.stdout.write(Buffer.from(await e.arrayBuffer()))}const uu=N.object({allowCustomEscrow:N.optional(cu),autoSwap:N.optional(cu),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())}),du=[`allowCustomEscrow`,`autoSwap`,`channel`,`deposit`,`payWith`,`slippage`,`tokenIn`];function fu(){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=vu(i),u=Su({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)&&ju()){g=!0;let t=ku(a);if(t){let i=Jn(r.rpcUrl,{network:r.network});h=e({chain:await Yn({network:r.network,rpcUrl:i}),transport:s(i)}),bu({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=le(_);else{let e=Nu();if(e){let t=await or(e).get();t&&(m=le(t))}if(!m)throw r.account?new Rn({code:`ACCOUNT_NOT_FOUND`,message:`Account "${a}" not found.`,exitCode:69}):new Rn({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)}),bu({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 Mu(t)}};if(!m||!h)throw new Rn({code:`ACCOUNT_NOT_FOUND`,message:`Tempo requires a configured account.`,exitCode:69});let v=su({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 Rn({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=wu(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 Uo(h,m,c,i,a);return Tt({challenge:n,payload:{action:o,channelId:e,...o===`close`?{closeSignature:await Wo(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=xt(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?``:`
7
+ `?2:t+1===e.length&&!n?0:1:0}function gl(e){let t=new AbortController,n=()=>t.abort(e.signal?.reason);e.signal?.addEventListener(`abort`,n,{once:!0}),e.signal?.aborted&&n();let r=pl({...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 _l(e,t){let n=e.driver.getChannel();if(!n||!e.challenge)return;let r=await Xc({assertVoucherWithinLocalLimit:e.driver.assertVoucherWithinLocalLimit,challenge:e.challenge,event:t,expectedChannelId:n.channelId,getChannel:e.driver.getChannel,headers:e.headers,input:e.input,signal:e.signal,topUpIfNeeded:e.driver.topUpIfNeeded});if(r.status!==`ready`)return;let i=await ol({challenge:e.challenge,context:r.context,createSessionCredential:e.driver.createSessionCredential,fetch:e.driver.fetch,headers:e.headers,input:e.input,signal:e.signal});if(!i.ok)throw Error(`Voucher POST failed with status ${i.status}`)}async function vl(e){let t=new URL(e.input.toString()),n=nl(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(Qc);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 yl(e){e.signal?.throwIfAborted();let t=await vl(e);e.signal?.throwIfAborted();let n=await e.createSessionCredential(t.challenge,{});return e.signal?.throwIfAborted(),{...t,credential:n}}function bl(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:To(t)}}function xl(e){let{challengeId:t,channelId:n,receipt:r}=e;return r.challengeId===t&&r.channelId===n}function Sl(e){if(!xl(e))return`received mismatched payment-close-ready frame`;let t=_o(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 Cl(e){let{challengeId:t,channelId:n,expectedCloseAmount:r,receipt:i}=e;if(!xl(e))return`received mismatched payment-receipt frame`;if(r!==null&&i.txHash&&!$s({challengeId:t,channelId:n,expectedCloseAmount:r,minimumSpent:BigInt(r),receipt:i}))return`received mismatched payment-close receipt frame`}async function wl(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=bl({challenge:t,credential:n,socket:s});e.setSocketSession(c);let l=Kc(s),u=t=>{e.rejectReceipt(Error(t)),e.rejectCloseReady(Error(t)),(s.readyState===Gc.CONNECTING||s.readyState===Gc.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 El({driver:e,failSocketFlow:u,managedEmit:l.emit,message:n,rawSocket:s,socketState:c})}),o?.addEventListener(`abort`,d,{once:!0});try{await Tl(s,l.emit,a,o),o?.throwIfAborted()}catch(e){throw o?.removeEventListener(`abort`,d),s.close(),e}return s.send(Mo(n)),await e.waitForReceipt(),l.socket}function Tl(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 El(e){let t=Po(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`:Dl(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 Ol(e,t.data);return;case`payment-receipt`:kl(e,t.data);return}}function Dl(e,t){let n=e.driver.getChannel()?.cumulativeAmount??0n,r=Sl({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 Ol(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 Xc({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(Mo(i))}catch(t){e.failSocketFlow(t instanceof Error?t.message:`failed to create websocket voucher`)}}function kl(e,t){let n=Cl({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)}function Al(e,t,n,r){let i=_t(e),a=new Headers;if(i.toLowerCase()!==z.authorization.toLowerCase()){let e=new Headers(r).get(z.authorization)??(n instanceof Request?n.headers.get(z.authorization):null);e&&!e.startsWith(`${Ue.payment} `)&&a.set(z.authorization,e)}return a.set(i,t),a}const jl=new WeakMap;async function Ml(e,t){let n=jl.get(e)??new Map;jl.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 Nl(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(z.paymentReceipt);if(r){let e=Oo(r);if(e.challengeId===t.id&&Nl(n,e))return!0}}catch{}return e.challenges?.some(e=>Qc(e)?Nl(n,$c(e)):!1)??!1}function Fl(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=ya({chain:x,getClient:c,rpcUrl:Gn}),h=ha({account:t}),g=l===void 0?void 0:f(l,a),_=u===void 0?void 0:f(u,a),v=i??_s(),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??kc({context:t,snapshot:e.snapshot})?.descriptor;return await p?.({account:r,chainId:e.chainId,operation:{kind:`authorizePaymentChannel`,...i?{authority:Lo(i)}:{}}})??r},S=async(e,t,n)=>Nc({account:await b(e,t,n),entry:n,context:t,decimals:a,maxDeposit:g,resolved:e}),C=Ft(so,{canHandleChallenge:({challenge:e})=>Qc(e),context:hc,async createCredential(e){let{challenge:t,context:i}=e,a=await Ec({allowCustomEscrow:n,challenge:t,escrowOverride:o,allowedChainIds:s,getClient:m}),c=bi(e),l=()=>{};try{let e=!gc(i)&&i?.descriptor===void 0;e&&(l=await Ml(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 Ml(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 us(t,await Pc(o,u,Aa(i?.autoSwap??r,Oa)),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 Cs(v,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})=>Ss(v,Q(t),async()=>{o?.throwIfAborted();let s=await v.get(Q(t));if(s?.channelId===t.channelId&&(t=s),t.uncertainTopUp)throw Error(`Session funding outcome is unknown; reconcile the pending payment before another top-up.`);let c=t.deposit>n?t.deposit:n,l=Js({deposit:c,maxDeposit:g,requiredCumulative:a,suggestedDeposit:e.request.suggestedDeposit===void 0?void 0:BigInt(e.request.suggestedDeposit),topUpAmount:_});l>0n&&await al({additionalDeposit:l,challenge:e,channel:t,channelId:t.channelId,createSessionCredential:(e,t)=>C.createCredential({challenge:e,context:t}),onUncertainFunding:async e=>{let t=await v.get(Q(e)),n={...t?.channelId===e.channelId?t:e,uncertainTopUp:!0};await Cs(v,n),y.notifyUpdate(n)},fetch:r,input:i,signal:o});let u=c+l;if(u===t.deposit)return;let d=await v.get(Q(t)),f=d?.channelId.toLowerCase()===t.channelId.toLowerCase()?d:t,p={...f,deposit:f.deposit>u?f.deposit:u};await Cs(v,p),y.notifyUpdate(p)});return ui(C,async({challenge:e,context:t,fetch:r,input:i,signal:a})=>{if(!Qc(e))return;let c=t===void 0?void 0:hc.parse(t);if(gc(c))return;let l=await Ec({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+To(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||!Mc(await b(l,c,u),u.descriptor)||await w({challenge:e,channel:u,deposit:_,fetch:r,input:i,requiredCumulative:h,signal:a})}),_i(C,async({challenge:e,credential:t,fetch:r,headers:i,input:a,refetch:c,response:l,signal:u})=>{if(!Qc(e))return l;if(!ko(l))return wo(Ct(t).payload).action===`open`&&i.get(`accept`)?.toLowerCase().includes(`text/event-stream`)?await c?.()??l:l;let d=(await Ec({allowCustomEscrow:n,challenge:e,escrowOverride:o,allowedChainIds:s,getClient:m})).key,f=await v.get(d),p={assertVoucherWithinLocalLimit:e=>Ys(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 gl({onNeedVoucher:(t,n)=>_l({challenge:e,driver:p,headers:i,input:a,signal:n},t),onReceipt(){},response:l,signal:u})})}const Il=new WeakMap;function Ll(e,t){Il.set(e,t)}function Rl(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 zl(e){let t=Rl(`close-ready`),n=Rl(`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 Bl(e){return e.method===We.tempo&&e.intent===Ge.charge}function Vl(e){if(!Bl(e)||typeof e.request.amount!=`string`)return!1;try{return BigInt(e.request.amount)===0n}catch{return!1}}function Hl(e,t,n){if(!n)return t;let r={...Pi(e instanceof Request?e.headers:void 0),...Pi(t?.headers)};return Object.keys(r).some(e=>e.toLowerCase()===z.paymentSession.toLowerCase())?t:{...t,headers:{...r,[z.paymentSession]:n}}}function Ul(e,t){return e===void 0?t:{...hc.parse(e),...t}}function Wl(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 Gl(e){let t=e.client?.chain?.id;(t!==void 0||e.allowedChainIds?.length===0)&&xa(e.allowedChainIds,t);let n=e.allowCustomEscrow??!1,r=Wl(e),i=ya({chain:x,getClient:e.client?()=>e.client:e.getClient,rpcUrl:Gn}),a=ha({account:e.account}),o=tc(),s=e.credentialContext===void 0?void 0:Ul(e.credentialContext,{}),c=zl({getSocketSession:()=>o.socketSession}),l=e.channelStore??_s(),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=e=>Cs(l,e),m={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=Q(e);e.opened&&u.delete(e.channelId),d?.trackCreates&&!d.seenExisting.has(t)&&d.created.set(t,e),await p(e)},delete:e=>ws(l,e)};bs(m,l);async function h(e){let t=Q(e),n=await l.get(t);if(e.uncertainTopUp||n?.uncertainTopUp)throw Error(`Session funding outcome is unknown; reconcile the pending payment before replacing the channel.`);u.add(e.channelId),d?.seenExisting.delete(t),d?.resumed===e&&(d.resumed=void 0),await Promise.resolve(ws(l,t)).catch(()=>void 0)}async function g(){let e=d;if(e?.created.size){for(let[t,n]of e.created){let e=await l.get(t);if(n.uncertainTopUp||e?.channelId===n.channelId&&e.uncertainTopUp)throw Error(`Session funding outcome is unknown; reconcile the pending payment before discarding the channel.`);u.add(n.channelId),await Promise.resolve(ws(l,t)).catch(()=>void 0)}e.created.clear(),await ie(e.committed??e.previous)}}function _(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=oc({channel:o.channel,spent:o.spent,state:o.state}),!0;return!1}function v(e){return zs(o,e)}function y(){let e=o.state.status===`active`?o.state:d?.committed?.state??d?.previous.state;return e?.status===`active`?e.units:0}function b(e){let t=d,n=t?.committed?.channel?.entry??t?.resumed;!t||n?.channelId.toLowerCase()!==e.channelId.toLowerCase()||e.deposit<=n.deposit&&!e.uncertainTopUp||(t.resumed=void 0,t.committed=oc({channel:o.channel,spent:o.spent,state:o.state}))}let S=Fl({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:m,onChannelUpdate(e){e.channelId!==o.channel?.channelId&&(o.spent=0n),o.channel=e,o.lastChallenge&&v({type:`activated`,challengeId:o.lastChallenge.id,entry:e,spent:o.spent.toString(),units:y()}),b(e)}}),C=pi(S);C&&ui(S,e=>te(()=>Promise.resolve(C(e)),e.signal)),vi(S);let w=uo({allowedChainIds:e.allowedChainIds,account:e.account,getClient:e.client?()=>e.client:e.getClient,resolveAccount:e.resolveAccount}),T=Ni({fetch:r.fetch,methods:[S],onChallenge:async(e,t)=>{if(!Zc(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&&(_(e)||(n?.created.size?await g():r&&await ie(n.committed??n.previous)),o.lastChallenge=e,v({type:`challengeReceived`,challengeId:e.id}))}});function E(e,t){return S.createCredential({challenge:e,context:Ul(s,t)})}function D(e){nc({maxVoucherCumulative:r.maxVoucherCumulative,receipt:e,runtime:o})}function O(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`&&v({type:`activated`,challengeId:o.lastChallenge.id,entry:o.channel,spent:o.spent.toString(),units:e})}async function k(t){let n=t.headers.get(z.paymentSessionSnapshot);if(!n)return;let r=Fs(n);xa(e.allowedChainIds,r.chainId);let s=await i({chainId:r.chainId});ba(s,r.chainId);let c=a(s),{entry:l,spent:u}=await jc({account:await e.resolveAccount?.({account:c,chainId:r.chainId,operation:{authority:Lo(r.descriptor),kind:`authorizePaymentChannel`}})??c,client:s,snapshot:r});return F(l.cumulativeAmount),await Promise.resolve(m.set(l)).catch(()=>void 0),o.channel=l,o.spent=u,l}async function A(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:{...Pi(i),...Pi(n?.headers),[z.acceptPayment]:`${We.tempo}/${Ge.charge}`}};try{let t=await r.fetch(l,u);if(t.status!==402)return await k(t);let n=pt(t).find(Bl);if(!n||!Vl(n))return;let i=new URL(String(l),typeof location<`u`?location.href:void 0);if(t.url&&new URL(t.url).origin!==i.origin)return;wi(n,i,e.trustedTempoProofRealms);let a=await w.createCredential({challenge:n,context:{}}),o=await r.fetch(l,Kr({...u,redirect:`manual`},_t(n),a));return o.ok?await k(o):void 0}catch{return}}function j(e,t){let n=o.socketSession;return ic({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 M(e,t){let n=$c(t);if(!n)return;if(Ro({...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 N(e,t){let n=M(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 P(e,t=e.challenge,n=!1){let r=(n?N(e,t):M(e.channel,t))?.acceptedCumulative??j(t,e.channelId);if(r>e.channel.cumulativeAmount)throw Error(`fallback close amount exceeds local voucher state`);return F(r),r.toString()}function F(e){Us({cumulativeAmount:e,maxVoucherCumulative:r.maxVoucherCumulative})}let I,ee;async function te(e,t){if(ee)throw ee;for(;;){let e=I;if(!e)break;if(!t)await e;else{t.throwIfAborted();let n;try{await Promise.race([e,new Promise((e,r)=>{n=()=>r(t.reason),t.addEventListener(`abort`,n,{once:!0})})])}finally{t.removeEventListener(`abort`,n)}}}if(t?.throwIfAborted(),ee)throw ee;let n=e();I=n;try{return await n}catch(e){throw e instanceof il&&(ee=Error(`Session funding outcome is unknown; reconcile the pending payment before creating a new session manager.`)),e}finally{I===n&&(I=void 0)}}async function ne(e){if(!o.channel)throw Error(`Cannot top up session: no active channel`);return Ss(l,Q(o.channel),async()=>{let{knownDeposit:t,...n}=e,i=o.channel?await m.get(Q(o.channel)):void 0;if(i?.channelId===e.channelId&&i.uncertainTopUp)throw Error(`Session funding outcome is unknown; reconcile the pending payment before another top-up.`);let a=await al({...n,channel:o.channel,createSessionCredential:E,fetch:r.fetch,onUncertainFunding:async e=>{let t=await m.get(Q(e)),n={...t?.channelId===e.channelId?t:e,uncertainTopUp:!0};o.channel?.channelId===e.channelId&&(o.channel=n),await m.set(n),b(n)}});D(a);let s=o.channel,c=Yc({additionalDeposit:e.additionalDeposit,channel:o.channel,channelId:e.channelId,challengeId:o.lastChallenge?.id,currentState:o.state,knownDeposit:t,receipt:a,spent:o.spent});if(c?.channel&&o.lastChallenge){let e=c.channel;for(;;){await m.set(e);let t=o.channel;if(t===s)break;if(!t)return a;let n=c.channel;e=t.channelId===n.channelId?{...t,deposit:t.deposit>n.deposit?t.deposit:n.deposit,cumulativeAmount:t.cumulativeAmount>n.cumulativeAmount?t.cumulativeAmount:n.cumulativeAmount}:t,s=t}if(e.channelId!==c.channel.channelId)return a;o.channel=e,v({type:`activated`,challengeId:o.lastChallenge.id,entry:e,spent:o.spent.toString(),units:y()}),b(e)}return a})}async function re(e){return te(async()=>{e.signal?.throwIfAborted();let t=o.channel?.channelId===e.channelId?o.channel.deposit:0n,n=t>e.deposit?t:e.deposit,i=Js({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 ne({challenge:e.challenge,input:e.input,channelId:e.channelId,additionalDeposit:i,knownDeposit:n,signal:e.signal})},e.signal)}async function L(e,t){let n=ac({channel:o.channel,channelId:e,challengeId:o.lastChallenge?.id,cumulativeAmount:t,spent:o.spent,state:o.state});n&&o.channel&&(v({type:`activated`,challengeId:n.challengeId,entry:o.channel,spent:n.spent,units:n.units}),await p(o.channel))}async function ie(e){let t=sc(e,o.channel);o.channel=t.channel,o.spent=t.spent,o.state=t.state,o.channel?.opened&&await p(o.channel)}function ae(e){let t=e.headers.get(z.paymentReceipt),n=t?Oo(t):null;return D(n),Object.assign(e,{receipt:n,challenge:o.lastChallenge,channelId:o.channel?.channelId??null,cumulative:o.channel?.cumulativeAmount??0n})}async function oe(e,t){if(d)throw Error(`SessionManager: a request is already in flight; concurrent requests on one manager are not supported`);o.lastUrl=e,o.lastHeaders=t?.headers;let n=oc({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 A(e,t),i.trackCreates=!0;let a=Hl(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 h(n),a=Hl(e,t,void 0),!0)}for(;;){let t;try{t=await T(e,a)}catch(e){if(i.created.size?await g():await ie(i.committed??n),await l())continue;throw e}let s=ae(t),c=!1;if(s.status===402){let t=await sl({input:e,init:a,response:s,createSessionCredential:E,fetch:r.fetch,getChannel:()=>o.channel,restoreCumulative:L,setChallenge(e){o.lastChallenge=e},topUpIfNeeded:re});t&&(c=!0,s=ae(t))}if(!c&&!s.ok&&!s.receipt){if(i.created.size?await g():await ie(i.committed??n),await l())continue;return s}return s}}finally{d=void 0}}async function se(e){let t=await ll({createSessionCredential:E,fetch:r.fetch,getMinimumSpent:()=>o.spent,headers:o.lastHeaders,lastUrl:o.lastUrl,resolveSignedCloseAmount:t=>P(e,t,!0),signedCloseAmount:P(e),setChallenge(e){o.lastChallenge=e},target:e});return t&&(O(),v({type:`closeStarted`}),v({type:`closed`,receipt:t})),t}let ce={createSessionCredential:E,doFetch:oe,fetch:r.fetch,getChannel:()=>o.channel,getChallenge:()=>o.lastChallenge,assertVoucherWithinLocalLimit:F,acceptReceipt(e){D(e)},topUpIfNeeded:re},le={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:oe,async topUp(e){let t=Jc({amount:e,assertVoucherWithinLocalLimit:F,channel:o.channel,decimals:r.decimals,lastChallenge:o.lastChallenge,lastUrl:o.lastUrl});return te(async()=>{if(o.channel?.channelId!==t.channelId||o.lastChallenge!==t.challenge||o.lastUrl!==t.input)throw Error(`Session changed while waiting to top up`);let n=Jc({amount:e,assertVoucherWithinLocalLimit:F,channel:o.channel,decimals:r.decimals,lastChallenge:t.challenge,lastUrl:t.input});return ne({additionalDeposit:n.additionalDeposit,challenge:n.challenge,channelId:n.channelId,headers:o.lastHeaders,input:n.input})})},async sse(e,t){return ul(e,t,ce)},async ws(e,t){if(!r.WebSocket)throw Error("No WebSocket implementation available. Pass `webSocket` to sessionManager() in this runtime.");let n=nl(e),i=t?.signal?{signal:t.signal}:void 0;await A(n,i);let a=o.channel?.opened?o.channel.channelId:void 0,{challenge:s,credential:l,httpUrl:u,wsUrl:d}=await yl({async createSessionCredential(e,i){return o.lastChallenge=e,await fi(S,{challenge:e,context:i,fetch:r.fetch,input:n,signal:t?.signal}),E(e,i)},fetch:r.fetch,input:e,onProbeUrl(e){o.lastUrl=e.toString()},probeInit:Hl(n,i,a),signal:t?.signal});return o.lastChallenge=s,wl({challenge:s,credential:l,httpUrl:u,WebSocket:r.WebSocket,wsUrl:d,options:t,createSessionCredential:E,getChannel:()=>o.channel,setSocketSession(e){o.socketSession=e},async refreshChallenge(){let e=await vl({fetch:r.fetch,input:u,probeInit:Hl(u,i,o.channel?.opened?o.channel.channelId:void 0),signal:t?.signal});return o.lastChallenge=e.challenge,e.challenge},assertVoucherWithinLocalLimit:F,acceptReceipt:D,rejectCloseReady:c.rejectCloseReady,rejectReceipt:c.rejectReceipt,settleCloseReady:c.settleCloseReady,settleReceipt:c.settleReceipt,topUpIfNeeded:re,waitForReceipt:c.waitForReceipt})},async close(){let e=o.socketSession,t=Xs({channel:o.channel,currentSocket:e,lastChallenge:o.lastChallenge});if(!t)return;let n=e?.socket;if(e&&n?.readyState===Gc.OPEN){let r=await cc({activeSocket:n,createSessionCredential:E,currentSocket:e,spent:o.spent,target:t,waitForCloseReady:c.waitForCloseReady,waitForReceipt:c.waitForReceipt});return O(),v({type:`closeStarted`}),v({type:`closed`,receipt:r}),r}return se(t)}};return Ll(le,{consumeSseResponse(e,t,n){return dl(e,t,n,ce)},rehydrate({channel:e,challenge:t,input:n,spent:r}){if(!e.opened)throw Error(`Cannot restore a closed session channel.`);if(!Zc(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.`);F(e.cumulativeAmount);let i=M(e,t),a=i&&i.spent>r?i.spent:r;o.lastUrl=n,o.lastChallenge=t,o.channel=e,o.spent=a,v({type:`challengeReceived`,challengeId:t.id}),v({type:`activated`,challengeId:t.id,entry:e,spent:a.toString(),units:0})}}),le}(function(e){e.serializeSnapshot=Ps,e.deserializeSnapshot=Fs})(Gl||={});const Kl=(1n<<64n)-1n,ql={dev_second:1n,day:86400n,week:604800n};function Jl(e){return e instanceof Date?e:new Date(e)}function Yl(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 Xl(e){if(!/^[1-9]\d*$/.test(e.periodCount))throw new q({reason:`periodCount is invalid`});let t=ql[e.periodUnit];if(t===void 0)throw new q({reason:`periodUnit is invalid`});let n=BigInt(e.periodCount)*t;if(n>Kl)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 Zl(e){let{challengeExpires:t,request:n}=e;Xl(n);let r=Yl(Jl(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 Ql(e){return[{address:du(e.currency,`currency`),selector:`0x95777d59`,recipients:[du(e.recipient,`recipient`)]}]}function $l(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 eu(e){let{accessKey:t,account:n,challengeId:r,chainId:i,request:a}=e;if(typeof n.sign!=`function`)return;let o=nu({accessKey:t,challengeId:r,chainId:i,request:a}),s=await n.sign({hash:fe.getSignPayload(o)}),c=R.from(s);if(c.type===`keychain`||c.type===`multisig`)throw new q({reason:`keyAuthorization must use a primitive signature`});return fe.from(o,{signature:s})}function tu(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=ru(i.signature),s=iu(o);if(au({accessKey:t,authorization:o,chainId:r}),o.witness?.toLowerCase()!==$l(n))throw new q({reason:`keyAuthorization challenge mismatch`});return ou(o,a),cu(su(o),a),lu(o.scopes,a),{authorization:o,source:{address:uu(o,s),chainId:r}}}function nu(e){let{accessKey:t,challengeId:n,chainId:r,request:i}=e;return fe.from({address:du(t.accessKeyAddress,`accessKeyAddress`),chainId:BigInt(r),expiry:Yl(Jl(i.subscriptionExpires)),limits:[{token:du(i.currency,`currency`),limit:BigInt(i.amount),period:Xl(i)}],scopes:Ql(i),type:t.keyType,witness:$l(n)})}function ru(e){try{return fe.deserialize(e)}catch(e){throw e instanceof fe.InvalidSignatureTypeError?new q({reason:`keyAuthorization must use a primitive signature`}):new q({reason:`invalid keyAuthorization payload`})}}function iu(e){let t=e.signature;if(!t)throw new q({reason:`keyAuthorization must use a primitive signature`});return t}function au(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,du(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 ou(e,t){if(Zl({request:t}),e.expiry!==Yl(Jl(t.subscriptionExpires)))throw new q({reason:`keyAuthorization expiry mismatch`})}function su(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 cu(e,t){if(!l(e.token,du(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!==Xl(t))throw new q({reason:`keyAuthorization period mismatch`})}function lu(e,t){if(!e||e.length!==1)throw new q({reason:`keyAuthorization must contain a recipient-scoped transferWithMemo call`});let n=du(t.currency,`currency`),r=du(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=fu(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 uu(e,t){let n=fe.getSignPayload(e);try{let e=R.extractAddress({payload:n,signature:t});if(!R.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 du(e,t){if(!c(e))throw new q({reason:`${t} must be an address`});return e.toLowerCase()}function fu(e){return typeof e==`string`?e.toLowerCase():``}const pu=V.object({accessKey:V.optional(V.custom()),account:V.optional(V.custom())});function mu(e={}){let t=ya({chain:P,getClient:e.getClient,rpcUrl:Gn}),n=ha({account:e.account});return Ft(co,{context:pu,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.");gu(r.request),await e.validateRequest?.(r.request);let u=await hu(o,{accessKey:c,account:s,challengeId:r.id,chainId:a,request:r.request}),d=tu({accessKey:c,challengeId:r.id,chainId:a,payload:{signature:fe.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 Dt({challenge:r,payload:{signature:fe.serialize(u),type:`keyAuthorization`},source:`did:pkh:eip155:${a}:${s.address.toLowerCase()}`})}})}async function hu(e,t){let{accessKey:n,account:r,challengeId:i,chainId:a,request:o}=t,s=await eu({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:Yl(Jl(o.subscriptionExpires)),keyType:n.keyType,limits:[{token:o.currency,limit:E.fromNumber(BigInt(o.amount)),period:Xl(o)}],scopes:Ql(o),witness:$l(i)}]});return fe.fromRpc(c.keyAuthorization)}function gu(e){Xl(e),Yl(Jl(e.subscriptionExpires))}const _u=Object.assign(Fl,{manager:Gl});function vu(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[uo(e),_u(n)]}(function(e){e.charge=uo,e.common=vu,e.session=_u,e.subscription=mu})(vu||={});const yu=N.union([N.boolean(),N.literal(`true`).transform(()=>!0),N.literal(`false`).transform(()=>!1)]);async function bu(e){process.stdout.write(Buffer.from(await e.arrayBuffer()))}const xu=N.object({allowCustomEscrow:N.optional(yu),autoSwap:N.optional(yu),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())}),Su=[`allowCustomEscrow`,`autoSwap`,`channel`,`deposit`,`payWith`,`slippage`,`tokenIn`];function Cu(){let t;return dr({method:`tempo`,supports(e){return e.method===`tempo`&&[`charge`,`session`].includes(e.intent)},async setup({challenge:n,options:r,methodOpts:i}){let a=sr(r.account),o=n.request,c=o.currency,l=ku(i),u=Nu({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()||(qn(a)?void 0:await cr(a).get());if(!_&&qn(a)&&Hu()){g=!0;let t=Bu(a);if(t){let i=Xn(r.rpcUrl,{network:r.network});h=e({chain:await Zn({network:r.network,rpcUrl:i}),transport:s(i)}),ju({challenge:n,clientChainId:h.chain?.id}),p=h.chain?.blockExplorers?.default?.url;let a=c?await er(h,c,t.wallet_address).catch(()=>void 0):void 0;d=a?.symbol??c??``,f=a?.decimals??o.decimals??6}}else if(_)m=le(_);else{let e=Wu();if(e){let t=await cr(e).get();t&&(m=le(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=Xn(r.rpcUrl,{network:r.network});h=e({chain:await Zn({network:r.network,rpcUrl:t}),transport:s(t)}),ju({challenge:n,clientChainId:h.chain?.id}),p=h.chain?.blockExplorers?.default?.url;let i=c?await er(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 Y({code:`ACCOUNT_NOT_FOUND`,message:`Tempo requires a configured account.`,exitCode:69});let v=vu({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??($n(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=Fu(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 $o(h,m,c,i,a);return Dt({challenge:n,payload:{action:o,channelId:e,...o===`close`?{closeSignature:await es(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
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(B.paymentReceipt);if(T)try{let e=JSON.parse(C.toString(T));mu(e,S),typeof e.acceptedCumulative==`string`&&e.acceptedCumulative&&Tu(v,S),s>=1&&pu(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 hu(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 lu(w),v&&y&&b&&(l&&m(`
11
- `),l&&!await e.confirm(`Close channel?`,!0)?s>=1&&m(`${Z.dim(`Kept channel open.`)}\n`):await gu({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 pu(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 mu(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 hu(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 _u():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:{[B.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{pu(JSON.parse(e),{info:t.info,shownKeys:t.shownKeys,tokenSymbol:t.tokenSymbol,tokenDecimals:t.tokenDecimals,explorerUrl:t.explorerUrl,handler:t.handler,prefix:`
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(z.paymentReceipt);if(T)try{let e=JSON.parse(C.toString(T));Tu(e,S),typeof e.acceptedCumulative==`string`&&e.acceptedCumulative&&Iu(v,S),s>=1&&wu(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 Eu(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 bu(w),v&&y&&b&&(l&&m(`
11
+ `),l&&!await e.confirm(`Close channel?`,!0)?s>=1&&m(`${Z.dim(`Kept channel open.`)}\n`):await Du({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 wu(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(`(${Jn(BigInt(o),t.tokenSymbol,t.tokenDecimals)})`)}`]):(a===`reference`||a===`txHash`)&&typeof o==`string`&&t.explorerUrl?n.push([a,Kn(`${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 Tu(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 Eu(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 Ou():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:{[z.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{wu(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 gu({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 gu(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:{...Ti(e.fetchInit.headers),Authorization:t}});if(n.ok){if(Eu(e.channelId),e.verbose>=1){let t=n.headers.get(B.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 _u(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 vu(e){return yu(uu,e,du)}function yu(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 bu(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 Rn({code:`CHAIN_MISMATCH`,message:`Challenge requires chainId ${t}, but RPC is chainId ${e.clientChainId}.${n}`,exitCode:2})}function xu(e){if(e)return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function Su(e){let t=xu(e.tokenIn)??xu(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 Cu(){return M.join(process.env.XDG_CONFIG_HOME||M.join(j.homedir(),`.config`),`mppx`,`channels`)}function wu(e){try{let t=A.readFileSync(M.join(Cu(),e),`utf-8`).trim();return t?BigInt(t):void 0}catch{return}}function Tu(e,t){let n=Cu();A.mkdirSync(n,{recursive:!0}),A.writeFileSync(M.join(n,e),t.toString(),`utf-8`)}function Eu(e){try{A.unlinkSync(M.join(Cu(),e))}catch{}}function Du(){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 Ou(){try{let e=A.readFileSync(Du(),`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 ku(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 Au;function ju(){if(Au!==void 0)return Au;try{k.execFileSync(`which`,[`tempo`],{stdio:`ignore`}),Au=!0}catch{Au=!1}return Au}async function Mu(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 Nu(){let e=ir();if(Gn(e.get())&&!ju()&&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 Pu=[...Object.entries(we),...Object.entries(Te),...Object.entries(Ee),...Object.entries(De)];function Fu(){return lr({method:`evm`,supports:Iu,async setup({challenge:e,options:t}){let n=e.request,r=n.network?Lu(Pe(n.network)):void 0,i=n.network&&n.asset?Pu.find(([,e])=>Me(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`?Se({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:[...In({account:c,...s&&{currencies:[s]}})],tokenDecimals:i?.[1].decimals??6,tokenSymbol:i?.[0]??``}}})}function Iu(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 Lu(e){return Object.values(b).find(t=>t.id===e)}export{lr as createPlugin,ur as evm,yr as stripe,fu as tempo,Fu as x402};
16
+ `);a=n.pop(),await d(n)}a.trim()&&await d([a]),t.channelId&&t.escrowContract&&t.chainId&&await Du({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 Du(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:{...Pi(e.fetchInit.headers),Authorization:t}});if(n.ok){if(Lu(e.channelId),e.verbose>=1){let t=n.headers.get(z.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(Kn(`${e.explorerUrl}/tx/${r}`,r))}`:``;e.info(`${Z.dim(`Channel closed.`)} ${Z.dim(`Spent ${Jn(e.cumulativeAmount,e.tokenSymbol,e.tokenDecimals)}.`)}${i}\n`)}}else{let t=await n.text().catch(()=>``);e.info(`\n${Z.dim(Z.yellow(`Channel close failed`))} ${Z.dim(`(${n.status})`)}\n`),e.info(`${Z.dim(` channelId: ${e.channelId}`)}\n${Z.dim(` cumulativeAmount: ${e.cumulativeAmount}`)}\n${Z.dim(` escrowContract: ${e.escrowContract}`)}\n${Z.dim(` chainId: ${e.chainId}`)}\n${Z.dim(` response: ${t||`(empty)`}`)}\n`)}}function Ou(e=100){return!process.stdin.isTTY||!process.stdout.isTTY?Promise.resolve(void 0):new Promise(t=>{let n=process.stdin.isRaw,r=``,i=()=>{clearTimeout(a),process.stdin.removeListener(`data`,o),process.stdin.isTTY&&process.stdin.setRawMode(n??!1),process.stdin.pause()},a=setTimeout(()=>{i(),t(void 0)},e),o=e=>{r+=e.toString();let n=r.match(/\x1b\]11;rgb:([0-9a-f]+)\/([0-9a-f]+)\/([0-9a-f]+)/i);if(!n)return;i();let a=e=>Number.parseInt(e.slice(0,2),16);t({r:a(n[1]),g:a(n[2]),b:a(n[3])})};process.stdin.setRawMode(!0),process.stdin.resume(),process.stdin.on(`data`,o),process.stdout.write(`\x1B]11;?\x07`)})}function ku(e){return Au(xu,e,Su)}function Au(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 ju(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 Mu(e){if(e)return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function Nu(e){let t=Mu(e.tokenIn)??Mu(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 Fu(e){try{let t=A.readFileSync(M.join(Pu(),e),`utf-8`).trim();return t?BigInt(t):void 0}catch{return}}function Iu(e,t){let n=Pu();A.mkdirSync(n,{recursive:!0}),A.writeFileSync(M.join(n,e),t.toString(),`utf-8`)}function Lu(e){try{A.unlinkSync(M.join(Pu(),e))}catch{}}function Ru(){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 zu(){try{let e=A.readFileSync(Ru(),`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 Bu(e){let t=zu();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 Vu;function Hu(){if(Vu!==void 0)return Vu;try{k.execFileSync(`which`,[`tempo`],{stdio:`ignore`}),Vu=!0}catch{Vu=!1}return Vu}async function Uu(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 Wu(){let e=or();if(qn(e.get())&&!Hu()&&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 Gu=[...Object.entries(Te),...Object.entries(Ee),...Object.entries(De),...Object.entries(Oe)];function Ku(){return dr({method:`evm`,supports:qu,async setup({challenge:e,options:t}){let n=e.request,r=n.network?Ju(Fe(n.network)):void 0,i=n.network&&n.asset?Gu.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`?Ce({address:n.asset,decimals:i?.[1].decimals??6,network:n.network,transfer:{name:a,type:`eip3009`,version:o}}):void 0,c=await ur(t.account);return{explorerUrl:r?.blockExplorers?.default?.url,methods:[...zn({account:c,...s&&{currencies:[s]}})],tokenDecimals:i?.[1].decimals??6,tokenSymbol:i?.[0]??``}}})}function qu(e){if(!Sn(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 Ju(e){return Object.values(b).find(t=>t.id===e)}export{dr as createPlugin,fr as evm,xr as stripe,Cu as tempo,Ku as x402};