mppx 0.16.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/dist/Challenge.d.ts +6 -0
- package/dist/Challenge.js +12 -0
- package/dist/Method.d.ts +2 -0
- package/dist/cli/cli.js +31 -25
- package/dist/cli/plugins/index.js +11 -11
- package/dist/cli/validate/payment.js +39 -15
- package/dist/client/internal/protocols/Mpp.js +4 -1
- package/dist/identity/Client.js +3 -3
- package/dist/identity/Server.d.ts +13 -0
- package/dist/identity/Server.js +50 -1
- package/dist/identity/Types.d.ts +32 -10
- package/dist/internal/version.d.ts +2 -2
- package/dist/internal/version.js +1 -1
- package/dist/server/Mppx.d.ts +2 -2
- package/dist/server/Mppx.js +49 -24
- package/dist/server/internal/challengeMeta.d.ts +6 -0
- package/dist/server/internal/challengeMeta.js +17 -1
- package/dist/tempo/client/Charge.d.ts +11 -0
- package/dist/tempo/client/Charge.js +30 -1
- package/dist/tempo/internal/defaults.d.ts +9 -0
- package/dist/tempo/internal/defaults.js +9 -0
- package/dist/tempo/internal/fee-payer.js +2 -2
- package/dist/tempo/server/Charge.js +12 -1
- package/dist/tempo/server/internal/html.gen.js +1 -1
- package/package.json +1 -1
package/dist/cli/cli.js
CHANGED
|
@@ -220,45 +220,51 @@ $&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,`$1$2`).replace(/\
|
|
|
220
220
|
`)),a.close()}}});return new Response(s,{status:200,headers:{"content-type":`application/x-ndjson`}})}if(!d.ok){let t=_u(o.name??e,d.cta);return s({ok:!1,error:{code:d.error.code,message:d.error.message,...d.error.retryable===void 0?void 0:{retryable:d.error.retryable},...d.error.fieldErrors?{fieldErrors:d.error.fieldErrors}:void 0},meta:{command:e,duration:f,...t?{cta:t}:void 0}},d.error.code===`VALIDATION_ERROR`?400:500)}let p=_u(o.name??e,d.cta);return s({ok:!0,data:d.data,meta:{command:e,duration:f,...p?{cta:p}:void 0}},200)}function hb(e,t,n,r,i,a){let o=[];for(let e of r.fieldErrors){let t=(()=>{let t=gb(n,e.path);return e.missing?`Error: missing required ${t.kind} ${t.label}`:t.kind===`environment variable`?`Error: invalid value for environment variable ${t.label}: ${e.message}`:`Error: invalid value for ${t.label}: ${e.message}`})();o.push(t)}return o.push(`See below for usage.`),o.push(``),o.push(iu(t===e?e:`${e} ${t}`,{alias:n.alias,configFlag:a,description:n.description,args:n.args,env:n.env,envSource:i,hint:n.hint,options:n.options,examples:lx(n.examples),usage:n.usage})),o.join(`
|
|
221
221
|
`)}function gb(e,t){let[n,...r]=t.split(`.`);if(!n)return{kind:`argument`,label:`input`};if(e.options?.shape[n]){let e=r.length>0?`.${r.join(`.`)}`:``;return{kind:`option`,label:`--${an(n)}${e}`}}return e.env?.shape[n]?{kind:`environment variable`,label:`${n}${r.length>0?`.${r.join(`.`)}`:``}`}:{kind:`argument`,label:`<${t}>`}}function _b(e,t){let[n,...r]=t;if(!n||!e.has(n))return{error:n??`(none)`,path:``,commands:e,rest:r};let i=Kb(e,e.get(n)),a=[n],o=r,s,c=[];if(Wb(i)){let e=i.outputPolicy??s;return{fetchGateway:i,middlewares:c,path:a.join(` `),rest:o,...e?{outputPolicy:e}:void 0}}for(;Ub(i);){i.outputPolicy&&(s=i.outputPolicy),i.middlewares&&c.push(...i.middlewares);let e=o[0];if(!e&&i.root){let e=i.root.outputPolicy??s;return{command:i.root,commands:i.commands,middlewares:c,path:a.join(` `),rest:o,...e?{outputPolicy:e}:void 0}}if(!e)return{help:!0,path:a.join(` `),description:i.description,commands:i.commands};let t=i.commands.get(e);if(!t){if(i.root&&!sn(e,i.commands.keys())){let e=i.root.outputPolicy??s;return{command:i.root,commands:i.commands,middlewares:c,path:a.join(` `),rest:o,...e?{outputPolicy:e}:void 0}}return{error:e,path:a.join(` `),commands:i.commands,rest:o.slice(1)}}let n=Kb(i.commands,t);if(a.push(e),o=o.slice(1),i=n,Wb(i)){let e=i.outputPolicy??s;return{fetchGateway:i,middlewares:c,path:a.join(` `),rest:o,...e?{outputPolicy:e}:void 0}}}let l=i.outputPolicy??s;return{command:i,middlewares:c,path:a.join(` `),rest:o,...l?{outputPolicy:l}:void 0}}function vb(e,t={}){let n=!1,r=!1,i=!1,a=!1,o=!1,s=!1,c=!1,l=!1,u=!1,d=`toon`,f=!1,p,m=!1,h,g,_,v=!1,y=[],b=t.configFlag?`--${t.configFlag}`:void 0,x=t.configFlag?`--${t.configFlag}=`:void 0,S=t.configFlag?`--no-${t.configFlag}`:void 0;for(let t=0;t<e.length;t++){let C=e[t];if(C===`--full-output`)n=!0;else if(C===`--llms`)r=!0;else if(C===`--llms-full`)i=!0;else if(C===`--mcp`)a=!0;else if(C===`--help`||C===`-h`)o=!0;else if(C===`--update`)s=!0;else if(C===`--incur-update-check`)c=!0;else if(C===`--version`&&(e[t+1]===void 0||e[t+1].startsWith(`-`)))l=!0;else if(C===`--schema`)u=!0;else if(C===`--json`)d=`json`,f=!0;else if(C===`--format`&&e[t+1]){if(!gx.has(e[t+1]))throw new En({message:`Invalid format: "${e[t+1]}". Expected one of: ${[...gx].join(`, `)}`});d=e[t+1],f=!0,t++}else if(b&&C===b){let n=e[t+1];if(n===void 0)throw new En({message:`Missing value for flag: ${b}`});p=n,m=!1,t++}else if(x&&C.startsWith(x)){let e=C.slice(x.length);if(e.length===0)throw new En({message:`Missing value for flag: ${b}`});p=e,m=!1}else if(S&&C===S)p=void 0,m=!0;else if(C===`--filter-output`&&e[t+1])h=e[t+1],t++;else if(C===`--token-limit`&&e[t+1]){let n=Number(e[t+1]);if(!Number.isFinite(n)||e[t+1].trim()===``)throw new En({message:`Invalid value for --token-limit: "${e[t+1]}"`});g=n,t++}else if(C===`--token-offset`&&e[t+1]){let n=Number(e[t+1]);if(!Number.isFinite(n)||e[t+1].trim()===``)throw new En({message:`Invalid value for --token-offset: "${e[t+1]}"`});_=n,t++}else C===`--token-count`?v=!0:y.push(C)}return{fullOutput:n,format:d,formatExplicit:f,configPath:p,configDisabled:m,filterOutput:h,tokenLimit:g,tokenOffset:_,tokenCount:v,llms:r,llmsFull:i,mcp:a,help:o,update:s,updateCheck:c,version:l,schema:u,rest:y}}async function yb(e,t,n={}){if(n.configDisabled)return;let{loader:r}=n,i;i=n.configPath?bb(n.configPath):await xb(n.files??[`${e}.json`]);let a;if(r){let e=await r(i);if(e===void 0)return;if(!rn(e))throw new En({message:`Config loader must return a plain object or undefined`});a=e}else{if(!i)return;let e=await Sb(i,!!n.configPath);if(!e)return;a=e}return Cb(a,e,t)}function bb(e){return e.startsWith(`~/`)||e===`~`?c.join(b.homedir(),e.slice(1)):c.resolve(process.cwd(),e)}async function xb(e){for(let t of e){let e=bb(t);try{return await C.access(e,C.constants.R_OK),e}catch{}}}async function Sb(e,t){let n;try{n=await C.readFile(e,`utf8`)}catch(n){if(n.code===`ENOENT`){if(t)throw new En({message:`Config file not found: ${e}`});return}throw n}let r;try{r=JSON.parse(n)}catch(t){throw new En({message:`Invalid JSON config file: ${e}`,cause:t instanceof Error?t:void 0})}if(!rn(r))throw new En({message:`Invalid config file: expected a top-level object in ${e}`});return r}function Cb(e,t,n){let r=n===t?[]:n.split(` `),i=e;for(let e of r){if(!rn(i))return;let t=i.commands;if(!rn(t)||(i=t[e],i===void 0))return}if(!rn(i))throw new En({message:`Invalid config section for '${n}': expected an object`});let a=i.options;if(a!==void 0){if(!rn(a))throw new En({message:`Invalid config 'options' for '${n}': expected an object`});return Object.keys(a).length>0?a:void 0}}function wb(e){let t=[];for(let[n,r]of e)Gb(r)||t.push({name:n,description:r.description});return t.sort((e,t)=>e.name.localeCompare(t.name))}function Tb(e,t,n){return Zl(e[0])?.name===n?0:e[0]===t&&Zl(e[1])?.name===n?1:-1}function Eb(e,t){return ru(`${e} ${t.name}`,{aliases:t.aliases,description:t.description,commands:t.subcommands?.map(e=>({name:e.name,description:e.description}))})}function Db(e,t,n){let r=Ql(t,n);return iu(`${e} ${t.name} ${n}`,{alias:r?.alias,aliases:r?.aliases,description:r?.description,hideGlobalOptions:!0,options:r?.options})}async function Ob(e,t,n){let r=[],i=[],a=new T,o=new T,s=[];o.on(`data`,e=>s.push(e.toString()));let c,l=L_(n.mcp?.name??e,n.version??`0.0.0`,t,{input:a,output:o,middlewares:n.middlewares,env:n.envSchema,vars:n.vars,version:n.version,...n.mcp?.instructions?{instructions:n.mcp.instructions}:void 0,...n.mcp?.title?{title:n.mcp.title}:void 0,tools:{...n.mcp?.tools,discovery:`direct`}}).catch(e=>{c=e}),u=!1;if(l.finally(()=>{u=!0}),a.write(`${Rr({jsonrpc:`2.0`,id:1,method:`initialize`,params:{protocolVersion:`2024-11-05`,capabilities:{},clientInfo:{name:`incur-doctor`,version:`1.0.0`}}})}\n`),a.write(`${Rr({jsonrpc:`2.0`,id:2,method:`tools/list`,params:{}})}\n`),await kb(s,()=>u),a.end(),await l,c)return{ok:!1,toolCount:0,tools:[],warnings:r,errors:[{code:`MCP_SERVER_FAILED`,message:jb(c)}]};let d;try{d=Ab(s)}catch(e){return{ok:!1,toolCount:0,tools:[],warnings:r,errors:[{code:`MCP_RESPONSE_PARSE_FAILED`,message:jb(e)}]}}let f=d.find(e=>e.id===1);f?f.error&&i.push({code:`MCP_INITIALIZE_FAILED`,message:Mb(f.error)}):i.push({code:`MCP_INITIALIZE_MISSING`,message:`Missing initialize response.`});let p=d.find(e=>e.id===2),m=[];return p?p.error?i.push({code:`MCP_TOOLS_LIST_FAILED`,message:Mb(p.error)}):!rn(p.result)||!Array.isArray(p.result.tools)?i.push({code:`MCP_TOOLS_LIST_INVALID`,message:`tools/list did not return a tools array.`}):m=p.result.tools.filter(rn).map(e=>({name:typeof e.name==`string`?e.name:``,...typeof e.description==`string`?{description:e.description}:void 0})).filter(e=>e.name):i.push({code:`MCP_TOOLS_LIST_MISSING`,message:`Missing tools/list response.`}),i.length===0&&m.length===0&&r.push(`No MCP tools exposed.`),{ok:i.length===0,toolCount:m.length,tools:m,warnings:r,errors:i}}async function kb(e,t){let n=Date.now();for(;!t()&&(e.join(``).match(/\n/g)?.length??0)<2;){if(Date.now()-n>=1e3)return;await new Promise(e=>setTimeout(e,5))}}function Ab(e){let t=[];for(let n of e.join(``).split(/\r?\n/)){let e=n.trim();if(!e)continue;let r=JSON.parse(e);if(!rn(r))throw Error(`Expected JSON-RPC response object.`);t.push(r)}return t}function jb(e){return e instanceof Error?e.message:String(e)}function Mb(e){return rn(e)&&typeof e.message==`string`?e.message:Rr(e)}function Nb(e,t){let n=[];return t?n.push(`${e} — ${t}`):n.push(e),n.push(``),n.push(`Usage: ${e} <path> [options]`),n.push(``),n.push(`Path segments are joined into the request URL path.`),n.push(``),n.push(`Options:`),n.push(` -X, --method <METHOD> HTTP method (default: GET, POST if body present)`),n.push(` -H, --header "Key: Val" Set a request header (repeatable)`),n.push(` -d, --data <json> Request body (implies POST)`),n.push(` --body <json> Request body (implies POST)`),n.push(` --<key> <value> Query string parameter`),n.join(`
|
|
222
222
|
`)}async function Pb(e){if(e)return{directory:ee(e)};let t=process.argv[1];if(!t)throw Error("Could not infer the filesystem command directory without an executed entrypoint. Pass a directory URL to `fs()`.");let n=c.resolve(t);try{let e=await C.realpath(n);return{directory:c.dirname(e),exclude:e}}catch(e){if(e.code!==`ENOENT`)throw e;return{directory:c.dirname(n),exclude:n}}}async function Fb(e){let t=await xu(e.directory,{exclude:e.exclude});return Promise.all(t.map(async e=>({...e,command:(await import(te(e.file).href)).default})))}function Ib(e){return typeof e==`object`&&!!e&&e[hx]===!0}function Lb(e,t,n,r,i){let a=e;for(let[e,o]of t.entries()){let s=e===t.length-1,c=a.get(o);if(s){if(!c)a.set(o,n);else if(Ub(c)&&!c.root)c.root=n,c.description??=n.description;else throw Rb(t,r);qb(t.join(` `),n,i);for(let e of n.aliases??[]){if(a.has(e))throw Rb([...t.slice(0,-1),e],r);a.set(e,{_alias:!0,target:o})}return}if(!c){let e={_group:!0,commands:new Map};a.set(o,e),a=e.commands;continue}if(Gb(c)||Wb(c))throw Rb(t,r);if(Ub(c)){a=c.commands;continue}let l={_group:!0,commands:new Map,description:c.description,root:c};a.set(o,l),a=l.commands}}function Rb(e,t){return Error(`Filesystem command '${e.join(` `)}' from '${t}' conflicts with an existing command or alias.`)}function zb(e){if(typeof e==`function`)return!0;if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.fetch==`function`&&t.url instanceof URL}function Bb(e){if(typeof e!=`object`||!e||!(`mcp`in e))return!1;let t=e.mcp;return typeof t==`string`||t instanceof URL||typeof t==`object`&&!!t&&`url`in t}function Vb(e){return typeof e==`function`?e:e.fetch}function Hb(e){return typeof e==`function`?void 0:e.url}function Ub(e){return`_group`in e}function Wb(e){return`_fetch`in e}function Gb(e){return`_alias`in e}function Kb(e,t){return Gb(t)?e.get(t.target):t}function qb(e,t,n){if(!(!n||Wb(t)||Gb(t))){if(Ub(t)){t.root&&qb(e,t.root,n);for(let[r,i]of t.commands)qb(`${e} ${r}`,i,n);return}if(t.options){let r=Object.keys(n.schema.shape),i=Object.keys(t.options.shape);for(let t of i)if(r.includes(t))throw Error(`Command '${e}' option '${t}' conflicts with a global option. Choose a different name.`)}if(n.alias&&t.alias){let r=new Set(Object.values(n.alias));for(let[n,i]of Object.entries(t.alias))if(i&&r.has(i))throw Error(`Command '${e}' alias '-${i}' for '${n}' conflicts with a global alias. Choose a different alias.`)}}}function Jb(e){let t=`${e.code===`UNKNOWN`||e.code===`COMMAND_NOT_FOUND`?`Error`:`Error (${e.code})`}: ${e.message}`;if(e.fieldErrors)for(let n of e.fieldErrors)t+=`\n ${n.path}: ${n.message}`;return t}function Yb(e){let t=[``,e.description],n=Math.max(...e.commands.map(e=>e.command.length));for(let r of e.commands){let e=r.description?` ${``.padEnd(n-r.command.length)}# ${r.description}`:``;t.push(` ${r.command}${e}`)}return t.join(`
|
|
223
|
-
`)}function Xb(...e){let t=e.filter(e=>e!==void 0);if(t.length!==0)return{description:t[0].description,commands:t.flatMap(e=>e.commands)}}function Zb(e){return Object.values(e.shape).some(e=>e._zod.optout!==`optional`)}function Qb(e){return typeof e==`object`&&!!e&&Ex in e}async function $b(e,t){let n=t.format===`jsonl`;if(n||!t.formatExplicit&&t.format===`toon`)try{let r;for(;;){let{value:i,done:a}=await e.next();if(a){r=i;break}if(Qb(i)){let e=i;if(e[Ex]===`error`){n?t.writeln(JSON.stringify({type:`error`,ok:!1,error:{code:e.code,message:e.message,...e.retryable===void 0?void 0:{retryable:e.retryable}}})):t.writeln(Jb({code:e.code,message:e.message})),t.exit(e.exitCode??1);return}}n?t.writeln(Rr({type:`chunk`,data:i})):t.renderOutput&&t.writeln(t.truncate(bl(i,t.format)).text)}if(Qb(r)&&r[Ex]===`error`){let e=r;n?t.writeln(JSON.stringify({type:`error`,ok:!1,error:{code:e.code,message:e.message,...e.retryable===void 0?void 0:{retryable:e.retryable}}})):t.writeln(Jb({code:e.code,message:e.message})),t.exit(e.exitCode??1);return}let i=Qb(r)&&r[Ex]===`ok`?_u(t.name,r.cta):void 0;n?t.writeln(JSON.stringify({type:`done`,ok:!0,meta:{command:t.path,duration:`${Math.round(performance.now()-t.start)}ms`,...i?{cta:i}:void 0}})):i&&t.writeln(Yb(i))}catch(e){n?t.writeln(JSON.stringify({type:`error`,ok:!1,error:{code:e instanceof I?e.code:`UNKNOWN`,message:e instanceof Error?e.message:String(e),...e instanceof I?{retryable:e.retryable}:void 0}})):t.writeln(Jb({code:`UNKNOWN`,message:e instanceof Error?e.message:String(e)})),t.exit(e instanceof I?e.exitCode??1:1)}else{let n=[];try{let r;for(;;){let{value:i,done:a}=await e.next();if(a){r=i;break}if(Qb(i)){let e=i;if(e[Ex]===`error`){t.write({ok:!1,error:{code:e.code,message:e.message,...e.retryable===void 0?void 0:{retryable:e.retryable}},meta:{command:t.path,duration:`${Math.round(performance.now()-t.start)}ms`}}),t.exit(e.exitCode??1);return}}n.push(i)}if(Qb(r)&&r[Ex]===`error`){let e=r;t.write({ok:!1,error:{code:e.code,message:e.message,...e.retryable===void 0?void 0:{retryable:e.retryable}},meta:{command:t.path,duration:`${Math.round(performance.now()-t.start)}ms`}}),t.exit(e.exitCode??1);return}let i=Qb(r)&&r[Ex]===`ok`?_u(t.name,r.cta):void 0;t.write({ok:!0,data:n,meta:{command:t.path,duration:`${Math.round(performance.now()-t.start)}ms`,...i?{cta:i}:void 0}})}catch(e){t.write({ok:!1,error:{code:e instanceof I?e.code:`UNKNOWN`,message:e instanceof Error?e.message:String(e),...e instanceof I?{retryable:e.retryable}:void 0},meta:{command:t.path,duration:`${Math.round(performance.now()-t.start)}ms`}}),t.exit(e instanceof I?e.exitCode??1:1)}}}function ex(e,t=[],n,r){let i=tx(e,t);return r&&t.length>0&&i.push({name:t.join(` `),...r.description?{description:r.description}:void 0}),{version:`incur.v1`,commands:i.sort((e,t)=>e.name.localeCompare(t.name)),...n?{globals:ku(n)}:void 0}}function tx(e,t){let n=[];for(let[r,i]of e){if(Gb(i))continue;let e=[...t,r];if(Ub(i)){if(i.root){let t={name:e.join(` `)};i.root.description&&(t.description=i.root.description),n.push(t)}n.push(...tx(i.commands,e))}else{let t={name:e.join(` `)};Wb(i),i.description&&(t.description=i.description),n.push(t)}}return n}function nx(e,t=[],n,r){let i=rx(e,t);return r&&t.length>0&&i.push(ix(t,r)),{version:`incur.v1`,commands:i.sort((e,t)=>e.name.localeCompare(t.name)),...n?{globals:ku(n)}:void 0}}function rx(e,t){let n=[];for(let[r,i]of e){if(Gb(i))continue;let e=[...t,r];if(Wb(i)){let t={name:e.join(` `)};i.description&&(t.description=i.description),n.push(t)}else Ub(i)?(i.root&&n.push(ix(e,i.root)),n.push(...rx(i.commands,e))):n.push(ix(e,i))}return n}function ix(e,t){let n={name:e.join(` `)};t.description&&(n.description=t.description);let r=dx(t.args,t.env,t.options),i=t.output?ku(t.output):void 0;(r||i)&&(n.schema={},r?.args&&(n.schema.args=r.args),r?.env&&(n.schema.env=r.env),r?.options&&(n.schema.options=r.options),i&&(n.schema.output=i));let a=lx(t.examples);if(a){let t=e.join(` `);n.examples=a.map(e=>({...e,command:e.command?`${t} ${e.command}`:t}))}return n}function ax(e,t,n,r){let i=[];if(r){let e={};r.description&&(e.description=r.description),r.args&&(e.args=r.args),r.env&&(e.env=r.env),r.hint&&(e.hint=r.hint),sx(r)&&(e.hint=cx(e.hint)),r.options&&(e.options=r.options),r.output&&(e.output=r.output);let t=lx(r.examples);t&&(e.examples=t),i.push(e)}for(let[r,a]of e){if(Gb(a))continue;let e=[...t,r];if(Wb(a)){let t={name:e.join(` `)};a.description&&(t.description=a.description),t.hint=`Fetch gateway. Pass path segments and curl-style flags (-X, -H, -d, --key value).`,i.push(t)}else Ub(a)?(a.description&&n.set(e.join(` `),a.description),a.root&&i.push(ox(e,a.root)),i.push(...ax(a.commands,e,n))):i.push(ox(e,a))}return i.sort((e,t)=>(e.name??``).localeCompare(t.name??``))}function ox(e,t){let n={name:e.join(` `)};t.description&&(n.description=t.description),t.args&&(n.args=t.args),t.env&&(n.env=t.env),t.hint&&(n.hint=t.hint),sx(t)&&(n.hint=cx(n.hint)),t.options&&(n.options=t.options),t.output&&(n.output=t.output);let r=lx(t.examples);if(r){let t=e.join(` `);n.examples=r.map(e=>({...e,command:e.command?`${t} ${e.command}`:t}))}return n}function sx(e){return e.destructive===!0||e.mcp!==!1&&e.mcp?.annotations?.destructiveHint===!0}function cx(e){return e?e.includes(mx)?e:`${e} ${mx}`:mx}function lx(e){if(!(!e||e.length===0))return e.map(e=>{let t=[];if(e.args)for(let n of Object.values(e.args))t.push(String(n));if(e.options)for(let[n,r]of Object.entries(e.options))t.push(`--${n} ${r}`);let n={command:t.join(` `)};return e.description&&(n.description=e.description),n})}function ux(e){let t=e.match(/^---\r?\n([\s\S]*?)\r?\n---/);if(!t)return{};let n=_l().parse(t[1]);return!n||typeof n!=`object`?{}:n}function dx(e,t,n){if(!e&&!t&&!n)return;let r={};return e&&(r.args=ku(e)),t&&(r.env=ku(t)),n&&(r.options=ku(n)),r}function fx(e,t,n){if(!t)return;let r=t.shape,i=new Set,a=new Map;for(let e of Object.keys(r))if(r[e]?.meta?.()?.deprecated){let t=e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`);i.add(t),n?.[e]&&a.set(n[e],t)}if(i.size!==0){for(let t of e)if(t.startsWith(`--`)){let e=t.split(`=`)[0].slice(2),n=!i.has(e)&&e.startsWith(`no-`)?e.slice(3):e;i.has(n)&&process.stderr.write(`Warning: --${n} is deprecated\n`)}else if(t.startsWith(`-`)&&t.length>=2)for(let e of t.slice(1))a.has(e)&&process.stderr.write(`Warning: --${a.get(e)} is deprecated\n`)}}function px(e,t){let n=process.argv[1];if(!n)return e;let r=c.basename(n);return r===e?e:t?.includes(r)?r:e}var mx,hx,gx,_x,vx,yx,bx,xx,Sx,Cx,wx,Tx,Ex,Dx=F((()=>{nn(),Bt(),Sn(),Dn(),Fn(),zn(),Ol(),gu(),nu(),bu(),Ou(),cn(),Br(),it(),wt(),yl(),cv(),_y(),ry(),Gl(),Au(),Oy(),Ry(),sb(),mx=`Confirm with the user before executing this destructive command.`,hx=Symbol.for(`incur.fileCommand`),gx=new Set([`toon`,`json`,`yaml`,`md`,`jsonl`]),_x=new WeakMap,vx=new WeakMap,yx=new WeakMap,bx=new WeakMap,xx=new WeakMap,Sx=new WeakMap,Cx=new WeakMap,wx=new WeakMap,Tx=new WeakMap,Ex=Symbol.for(`incur.sentinel`)})),Ox=F((()=>{Bt(),Dx(),Sn(),Dn(),Ol(),gu(),cv(),Fn(),ry(),Gl(),Au(),Oy(),yl(),Ry(),sb()}));function kx(e,t){if(!(!e||typeof e!=`object`))return e[t]}var q,Ax,jx,Mx,Nx,Px,Fx=F((()=>{q={acceptPayment:`Accept-Payment`,authorization:`Authorization`,paymentAuthorization:`Payment-Authorization`,paymentReceipt:`Payment-Receipt`,paymentSession:`Payment-Session`,paymentSessionSnapshot:`Payment-Session-Snapshot`,wwwAuthenticate:`WWW-Authenticate`},Ax={payment:`Payment`},jx={evm:`evm`,stripe:`stripe`,tempo:`tempo`},Mx={charge:`charge`,session:`session`,subscription:`subscription`},Nx={sessionProtocol:`sessionProtocol`,sessionSnapshot:`sessionSnapshot`},Px={v1:`v1`,v2:`v2`}}));function Ix(e){let t=D.toString(e);return JSON.parse(t)}function Lx(e,t){return e.schema.request.parse(t)}function Rx(e){let t=A.canonicalize(e);return D.fromString(t,{pad:!1,url:!0})}var zx=F((()=>{})),J=Qe({address:()=>Kx,amount:()=>Vx,datetime:()=>Hx,datetimeInput:()=>Ux,hash:()=>qx,period:()=>Jx,signature:()=>Yx,toDate:()=>Wx,toDatetimeString:()=>Gx,unwrapOptional:()=>Xx});import*as Bx from"zod/mini";et(J,Bx);function Vx(){return xe.string().check(xe.regex(/^\d+(\.\d+)?$/,`Invalid amount`))}function Hx(){return xe.string().check(xe.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 Ux(e=`Invalid ISO 8601 datetime`){return xe.pipe(xe.union([Hx(),xe.custom(e=>e instanceof Date)]),xe.transform(Wx)).check(xe.refine(e=>Number.isFinite(e.getTime()),e))}function Wx(e){return e instanceof Date?e:new Date(e)}function Gx(e){return e instanceof Date?Number.isFinite(e.getTime())?e.toISOString():`Invalid Date`:e}function Kx(){return xe.string().check(xe.regex(/^0x[0-9a-fA-F]{40}$/,`Invalid address`))}function qx(){return xe.string().check(xe.regex(/^0x[0-9a-fA-F]{64}$/,`Invalid hash`))}function Jx(){return xe.string().check(xe.regex(/^(day|week|month|year|\d+)$/,`Invalid period`))}function Yx(){return xe.string().check(xe.regex(/^0x[0-9a-fA-F]+$/,`Invalid signature`))}function Xx(e){return e._zod.def.type===`optional`?e._zod.def.innerType:e}var Zx=F((()=>{}));function Qx(e,t){let{description:n,digest:r,meta:i,method:a,header:o,intent:s,realm:c,request:l,secretKey:u}=e,d=pS(o)?void 0:o,f=e.expires?Gx(e.expires):void 0,p=e.opaque??(i===void 0?void 0:Rx(i)),m=u?mS({...e,expires:f,...i!==void 0&&{meta:i},opaque:p},{secretKey:u}):e.id;return gS.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 $x(e){let t=[eS(`id`,e.id),eS(`realm`,e.realm),eS(`method`,e.method),eS(`intent`,e.intent),eS(`request`,Rx(e.request))];e.description!==void 0&&t.push(eS(`description`,e.description)),e.digest!==void 0&&t.push(eS(`digest`,e.digest)),e.expires!==void 0&&t.push(eS(`expires`,e.expires));let n=e.header;return n!==void 0&&!pS(n)&&t.push(eS(`header`,n)),e.opaque===void 0?e.meta!==void 0&&t.push(eS(`opaque`,Rx(e.meta))):t.push(eS(`opaque`,e.opaque)),`${Ax.payment} ${t.join(`, `)}`}function eS(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 tS(e,t){let n=nS(e);if(!n)throw Error(`Missing Payment scheme.`);let{request:r,opaque:i,...a}=rS(n);if(!r)throw Error(`Missing request parameter.`);if(r.length>hS)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 Qx({...a,request:Ix(r),...i&&{opaque:i}},t)}function nS(e){let t=Ax.payment,[n]=sS(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 rS(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]=iS(e,n);if(n=o,i in t)throw Error(`Duplicate parameter: ${i}`);t[i]=a}return t}function iS(e,t){if(e[t]===`"`)return aS(e,t+1);let n=t;for(;n<e.length&&e[n]!==`,`;)n++;return[e.slice(t,n).trim(),n]}function aS(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 oS(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 sS(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(!oS(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 cS(e,t){if(e.status!==402)throw Error(`Response status is not 402.`);return lS(e.headers,t)}function lS(e,t){let n=e.get(q.wwwAuthenticate);if(!n)throw Error(`Missing ${q.wwwAuthenticate} header.`);return uS(n,t)}function uS(e,t){let n=sS(e,Ax.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 tS(e.slice(r,a).replace(/,\s*$/,``),t)})}function dS(e){let t=[e.realm,e.method,e.intent,Rx(e.request),e.expires??``,e.digest??``],n=e.header;return n!==void 0&&!pS(n)&&t.push(n),t.push(e.opaque??(e.meta?Rx(e.meta):``)),t.join(`|`)}function fS(e){return e.header??q.authorization}function pS(e){return e?.toLowerCase()===q.authorization.toLowerCase()}function mS(e,t){let n=dS(e),r=O.fromString(t.secretKey),i=O.fromString(n),a=re.hmac256(r,i,{as:`Bytes`});return D.fromBytes(a,{url:!0,pad:!1})}var hS,gS,_S=F((()=>{Fx(),zx(),Zx(),hS=16384,gS=J.object({description:J.optional(J.string()),digest:J.optional(J.string().check(J.regex(/^sha-256=/,`Invalid digest format`))),expires:J.optional(Hx()),header:J.optional(J.string().check(J.regex(/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,`Invalid HTTP header name`))),id:J.string().check(J.minLength(1)),intent:J.string(),method:J.string(),meta:J.optional(J.record(J.string(),J.string())),opaque:J.optional(J.string()),realm:J.string(),request:J.record(J.string(),J.unknown())})})),vS,yS,Y,bS,xS,SS=F((()=>{vS=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}}}},yS=class extends vS{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}.`)}},Y=class extends vS{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})}},bS=class extends vS{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.`)}},xS=class extends vS{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 CS(e,t){if(!e)throw new yS({...t&&{id:t},reason:`missing required expires field`});if(Number.isNaN(new Date(e).getTime()))throw new yS({...t&&{id:t},reason:`malformed expires timestamp`});if(Date.parse(e)<=Date.now())throw new bS({expires:e})}var wS=F((()=>{SS()}));function TS(e){if(e.length>jS)throw new NS;let t=e.match(RegExp(`^${Ax.payment}\\s+(.+)$`,`i`));if(!t?.[1])throw new MS;try{let e=D.toString(t[1]),n=JSON.parse(e),{opaque:r,request:i,meta:a,...o}=n.challenge,{meta:s,opaque:c}=ES(r);return{challenge:gS.parse({...o,...s!==void 0&&{meta:s},...c!==void 0&&{opaque:c},request:Ix(i)}),payload:n.payload,...n.source&&{source:n.source}}}catch{throw new NS}}function ES(e){if(e===void 0)return{};if(typeof e==`string`)return{opaque:e};if(!DS(e))throw Error(`Invalid opaque.`);return{meta:e,opaque:Rx(e)}}function DS(e){return typeof e!=`object`||!e||Array.isArray(e)?!1:Object.values(e).every(e=>typeof e==`string`)}function OS(e){let{challenge:t,payload:n,source:r}=e;return{challenge:t,payload:n,...r&&{source:r}}}function kS(e){let{meta:t,opaque:n,request:r,...i}=e.challenge,a=n??(t===void 0?void 0:Rx(t)),o={challenge:{...i,...a!==void 0&&{opaque:a},request:Rx(r)},payload:e.payload,...e.source&&{source:e.source}},s=JSON.stringify(o),c=D.fromString(s,{pad:!1,url:!0});return`${Ax.payment} ${c}`}function AS(e){return e.length>jS?null:e.split(`,`).map(e=>e.trim()).find(e=>RegExp(`^${Ax.payment}\\s+`,`i`).test(e))??null}var jS,MS,NS,PS=F((()=>{_S(),Fx(),zx(),jS=65536,MS=class extends Error{name=`MissingPaymentSchemeError`;constructor(){super(`Missing Payment scheme.`)}},NS=class extends Error{name=`InvalidCredentialEncodingError`;constructor(){super(`Invalid base64url or JSON.`)}}}));function FS(){let e=new Uint8Array(64);return crypto.getRandomValues(e),{created:Math.floor(Date.now()/1e3),nonce:D.fromBytes(e,{pad:!1,url:!0})}}var IS=F((()=>{}));function LS(e){if(e.length===0)throw TypeError(`Mppx client identity must configure at least one prover.`);for(let t of e)if(t.scope!==`*`&&!Array.isArray(t.scope))throw TypeError(`Identity prover scope must be "*" or an array of origins.`);let t=t=>{let n=new URL(t).origin;return e.filter(e=>e.scope===`*`||e.scope.includes(n))};async function n(e,n,r,i){let a=i?n.clone():n,o=t(n.url);if(o.length===0)return{request:a,response:await e(a)};let s=Object.freeze({...r,...FS()}),c=new Request(a,{redirect:n.redirect===`follow`?`error`:n.redirect});for(let e of o)c=await e.prove(c,s);return{request:c,response:await e(c)}}return{async send(e,r,i={}){let a=!(i.challenge!==void 0||HS.some(e=>r.headers.has(e))||[...r.headers.values()].some(e=>AS(e)!==null))&&t(r.url).some(e=>e.retry),o=await n(e,r,i,a),{response:s}=o;if(!a||s.status<400||s.status===402)return o;let c=[],l=!1;for(let e of t(r.url)){if(!e.retry)continue;let t=s.clone();c.push(t),await e.retry(t,i)&&(l=!0)}return l?(RS([s,...c]),n(e,r,i,!1)):(RS(c),o)},async challenge(e,n,r){for(let i of t(r)){if(!i.retry)continue;let t=e.clone();try{await i.retry(t,n)}finally{RS([t])}}}}}function RS(e){for(let t of e)t.bodyUsed||t.body?.cancel().catch(()=>{})}function zS(e,t,n){return async(r,i)=>{let a=new Request(r,i),o=VS(a.headers)??n?.challenge,{response:s}=await t.send(e,a,{...n,challenge:o});if(s.status===402&&o)for(let e of BS(s))e.method===o.method&&e.intent===o.intent&&await t.challenge(s,{...n,challenge:e},a.url);return s}}function BS(e){try{return cS(e)}catch{return[]}}function VS(e){for(let[,t]of e){let e=AS(t);if(e)try{return TS(e).challenge}catch{}}}var HS,US=F((()=>{_S(),PS(),IS(),HS=[`payment-signature`,`x-payment`]}));function WS(e){return Object.defineProperty(e,KS,{value:!0}),e}function GS(e){return!!e?.[KS]}var KS,qS=F((()=>{KS=Symbol.for(`mppx.x402.challenge`)}));function JS(e){let t={};for(let n of e){let e=t[n.name]??={};e[n.intent]=eC(n)}return t}function YS(e,t){let n=JS(e),r=sC(e,n,t),i=e.map((e,t)=>({intent:e.intent,method:e.name,q:r[eC(e)]??1,index:t}));return{definition:r,entries:i,header:ZS(i),keys:n}}function XS(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)=>aC(e,t))}function ZS(e){return e.map(({method:e,intent:t,q:n})=>{let r=`${e}/${t}`;return n===1?r:`${r};q=${dC(n)}`}).join(`, `)}function QS(e,t,n){let r=$S(e,t,n)[0];if(r)return{challenge:r.challenge,method:r.method}}function $S(e,t,n){let r=new Map;for(let e of t){let t=eC(e),n=r.get(t);n?n.push(e):r.set(t,[e])}return e.flatMap((e,t)=>{let i=r.get(eC(e));if(!i)return[];let a=tC(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)=>iC(e.challenge)-iC(t.challenge)||t.match.q-e.match.q||e.index-t.index).map(e=>{let{match:t,...n}=e;return n})}function eC(e){let t=e.method??e.name;if(!t)throw Error(`Missing payment method name.`);return`${t}/${e.intent}`}function tC(e,t){let n;for(let r of t){if(!nC(e,r))continue;let t={...r,specificity:rC(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 nC(e,t){return(t.method===`*`||t.method===e.method)&&(t.intent===`*`||t.intent===e.intent)}function rC(e){return Number(e.method!==`*`)+Number(e.intent!==`*`)}function iC(e){return+!!GS(e)}function aC(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}`);fC(r,`method`),fC(i,`intent`);let a=1;for(let t of oC(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=lC(i,`Accept-Payment entry "${e}"`))}return{intent:i,method:r,q:a,index:t}}function oC(e){return e?e.split(/\s*;\s*/).filter(Boolean):[]}function sC(e,t,n){if(!n)return{};let r=typeof n==`function`?n(t):n,i=new Set(e.map(e=>eC(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]=cC(t,`payment preference "${e}"`)}return a}function cC(e,t){if(typeof e!=`number`||Number.isNaN(e)||!Number.isFinite(e))throw Error(`Invalid q-value for ${t}. Expected a finite number.`);return uC(e,t)}function lC(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 uC(Number(e),t)}function uC(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 dC(e){return e.toFixed(3).replace(/\.0+$/,``).replace(/(\.\d*?)0+$/,`$1`)}function fC(e,t){if(e!==`*`&&!/^[a-z0-9-]+$/.test(e))throw Error(`Invalid Accept-Payment ${t}: ${e}`)}var pC=F((()=>{qS()})),mC,hC,gC=F((()=>{mC=`org.paymentauth/credential`,hC=`org.paymentauth/payment-required`}));function _C(e){let{extensions:t,resource:n,...r}=e;return jC.parse(r)}var vC,yC,bC,xC,SC,CC,wC,TC,EC,DC,OC,kC,AC,jC,MC,NC,PC,FC,IC,LC,RC,zC,BC=F((()=>{Zx(),vC=`charge`,yC=[`exact`],bC=`eip155:`,xC=`x402:`,SC=`PAYMENT-REQUIRED`,CC=`PAYMENT-SIGNATURE`,wC=`PAYMENT-RESPONSE`,TC=J.string().check(J.minLength(1)),EC=J.number().check(J.refine(e=>e>0,`Must be positive`)),DC=J.string().check(J.regex(/^\d+$/,`Invalid atomic amount`)),OC=Kx(),kC=J.string().check(J.regex(RegExp(`^${bC}\\d+$`),`Invalid EVM CAIP-2 network`)),AC=J.object({description:J.optional(J.string()),iconUrl:J.optional(J.string()),mimeType:J.optional(J.string()),serviceName:J.optional(J.string()),tags:J.optional(J.array(J.string())),url:TC}),J.discriminatedUnion(`type`,[J.object({name:TC,type:J.literal(`eip3009`),version:TC}),J.object({name:J.optional(J.string()),type:J.literal(`permit2`),version:J.optional(J.string())})]),jC=J.object({amount:DC,asset:TC,extra:J.optional(J.record(J.string(),J.unknown())),maxTimeoutSeconds:EC,network:kC,payTo:TC,scheme:J.enum(yC)}),MC=J.object({info:J.record(J.string(),J.unknown()),schema:J.record(J.string(),J.unknown())}),NC=J.record(J.string(),MC),PC=J.object({accepts:J.array(jC).check(J.minLength(1)),error:J.optional(J.string()),extensions:J.optional(NC),resource:AC,x402Version:J.literal(2)}),FC=J.object({authorization:J.object({from:OC,nonce:qx(),to:OC,validAfter:DC,validBefore:DC,value:DC}),signature:Yx()}),IC=J.object({permit2Authorization:J.object({deadline:DC,from:OC,nonce:DC,permitted:J.object({amount:DC,token:OC}),spender:OC,witness:J.object({to:OC,validAfter:DC})}),signature:Yx()}),LC=J.union([FC,IC]),RC=J.object({accepted:jC,extensions:J.optional(NC),payload:LC,resource:J.optional(AC),x402Version:J.literal(2)}),J.object({extensions:J.optional(NC),extra:J.optional(J.record(J.string(),J.unknown())),invalidMessage:J.optional(J.string()),invalidReason:J.optional(J.string()),isValid:J.boolean(),payer:J.optional(J.string())}),zC=J.object({amount:J.optional(DC),errorMessage:J.optional(J.string()),errorReason:J.optional(J.string()),extensions:J.optional(NC),extra:J.optional(J.record(J.string(),J.unknown())),network:TC,payer:J.optional(J.string()),success:J.boolean(),transaction:J.string()})}));function VC(e,t,n){let r=new Headers(e.headers);for(let e of HC)e===q.authorization&&!r.get(e)?.startsWith(`Payment `)||r.delete(e);return r.set(t,n),{...e,headers:r}}var HC,UC=F((()=>{Fx(),BC(),HC=[q.authorization,SC,wC,CC]}));function WC(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}}function GC(e){let t=WC(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 KC(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 qC(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=gS.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 JC(e){if(e)return`error`in e?e.error?.code!==-32042&&e.error?.code!==-32043?void 0:qC(e.error.data):qC(e.result?._meta?.[hC])}function YC(e,t){return!e||e.id!==t?[]:JC(e)?.challenges??[]}async function XC(e){let t=e.clone().body?.getReader();if(!t)return;let n=new TextDecoder,r=0,i=!1,a,o=P({onEvent(e){if(!(i||!e.data)&&(i=!0,!(e.event&&e.event!==`message`)))try{a=KC(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>ew)return;o.feed(n.decode(s,{stream:!0}))}}finally{t.cancel().catch(()=>{})}}async function ZC(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 KC(JSON.parse(i+n.decode()));if(r+=a.byteLength,r>ew)return;i+=n.decode(a,{stream:!0})}}catch{return}finally{t.cancel().catch(()=>{})}}function QC(e){let t=tw.get(e);if(t)return t;let n=(async()=>{let t=e.headers.get(`content-type`)?.toLowerCase()??``;if(!(Number(e.headers.get(`content-length`))>ew)){if(t.includes(`application/json`))return ZC(e);if(t.includes(`text/event-stream`))return XC(e)}})();return tw.set(e,n),n}function $C(){return{getChallenges(e,t){let n=GC(t);return e.status===402||n===void 0?[]:QC(e).then(e=>YC(e,n))},setCredential(e,t){let n=JSON.parse(e.body),r=TS(t);return{...e,body:JSON.stringify({...n,params:{...n.params,_meta:{...n.params?._meta,[mC]:r}}})}}}}var ew,tw,nw=F((()=>{_S(),PS(),gC(),UC(),ew=1048576,tw=new WeakMap}));function rw(){return{getChallenges(e){return e.status!==402||!e.headers.has(q.wwwAuthenticate)?[]:cS(e)},setCredential(e,t,n){return VC(e,n?.challenge?fS(n.challenge):q.authorization,t)}}}var iw=F((()=>{_S(),Fx(),UC()}));function aw(e){return{encode(t){return D.fromString(JSON.stringify(e.parse(t)))},decode(t){try{return e.parse(JSON.parse(D.toString(t)))}catch{throw new ow}}}}var ow,sw=F((()=>{ow=class extends Error{name=`InvalidJsonHeaderError`;constructor(){super(`Invalid base64 JSON header.`)}}}));function cw(e){try{let t=JSON.parse(D.toString(e));return mw(t)}catch{throw new ow}}var lw,uw,dw,fw,pw,mw,hw=F((()=>{sw(),BC(),lw=aw(PC),uw=aw(RC),dw=aw(zC),fw=lw.encode,lw.decode,pw=uw.encode,uw.decode,dw.encode,dw.decode,mw=e=>{if(!e||typeof e!=`object`||Array.isArray(e))throw new ow;let t=e;if(t.x402Version!==2||!Array.isArray(t.accepts))throw new ow;let n=AC.parse(t.resource),r=t.extensions===void 0?void 0:NC.safeParse(t.extensions).data;return{accepts:t.accepts,...r?{extensions:r}:{},resource:n,x402Version:2}}}));function gw(){return{getChallenges(e){if(e.status!==402)return[];let t=e.headers.get(SC);if(!t)return[];let n=cw(t);return n.accepts.flatMap((e,t)=>{let r=jC.safeParse(e);if(!r.success)return[];let i=r.data;return WS(Qx({id:`${xC}${t}`,intent:vC,method:`evm`,realm:new URL(n.resource.url).host,request:{...i,...n.extensions?{extensions:n.extensions}:{},resource:n.resource}}))})},setCredential(e,t){return VC(e,CC,t)}}}var _w=F((()=>{_S(),hw(),qS(),BC(),UC()}));function vw(e){return e}function yw(){let e=[rw(),gw(),$C()],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 vw({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)}})}var bw=F((()=>{nw(),iw(),UC(),_w()}));function xw(e,t){return Tw.set(e,t),e}function Sw(e){return Tw.has(e)}function Cw(e,t){return Promise.resolve(Tw.get(e)?.(t))}function ww(e){return Tw.get(e)}var Tw,Ew=F((()=>{Tw=new WeakMap}));function Dw(e,t){return Pw.set(e,t),e}function Ow(e){Pw.delete(e)}function kw(e,t,n){Pw.has(e)&&Fw.set(t,n)}function Aw(e){return Fw.get(e)}function jw(e,t){return Promise.resolve(Pw.get(e)?.(t)??t.response)}function Mw(e,t){return Iw.set(e,t),e}function Nw(e,t){try{return Iw.get(e)?.(t)}catch{return}}var Pw,Fw,Iw,Lw=F((()=>{Pw=new WeakMap,Fw=new WeakMap,Iw=new WeakMap}));function Rw(e,t,n){if(!Bw(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&&Vw(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 zw(e,t){if(Bw(e)&&!t?.includes(e.realm))throw Error(`Refusing to sign Tempo proof for untrusted realm ${JSON.stringify(e.realm)}. Add it to \`trustedTempoProofRealms\` if this server is expected to issue it.`)}function Bw(e){if(e.method!==`tempo`||e.intent!==`charge`)return!1;try{return BigInt(e.request.amount)===0n}catch{return!1}}function Vw(e){try{return new URL(e).origin.toLowerCase()}catch{return e.toLowerCase()}}var Hw=F((()=>{}));async function Uw(e){if(!e.body)return e;let t=e.clone().body.getReader(),n=[],r=0,i=!1,a=setTimeout(()=>{i=!0,t.cancel().catch(()=>{})},MT);try{for(;;){let{done:e,value:a}=await t.read();if(e)break;if(n.push(a),r+=a.byteLength,r>jT){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(NT,`true`);let s=new Response(new Blob(n).slice(0,jT),{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 Ww(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 Gw(e){let{acceptPayment:t,acceptPaymentPolicy:n=`always`,fetch:r=globalThis.fetch,maxPaymentRetries:i=AT,methods:a,onChallenge:o,orderChallenges:s,transport:c=yw(),trustedTempoProofRealms:l}=e,u=e.identity??(e.fetch&&hT(e.fetch)),d=e.eventDispatcher??Jw(),f=t??YS(a),p=gT(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=mT(e,t?.headers),_=g.has(q.acceptPayment),v=xT(g,f),y=fT(e,t,g),b=dT(e,t,g,v.header,_,n),x=await m(_T(b.input),b.init),S=pT(b.init,await y);if(!await c.isPaymentRequired(x,S))return x;let C=t?.context,{context:w,orderChallenges:T,...ee}=S??{},te,E,ne,D,O;try{for(let n=0;n<i;n++){E=await c.getChallenges(x,S);let i=(await ST($S(E,a,v.entries),T??s))[0];if(!i){if(await Ww(D,{challenges:E,response:x,status:`rejected`}),n>0)return x;throw Error(`No method found for challenges: ${E.map(e=>`${e.method}.${e.intent}`).join(`, `)}. Available: ${a.map(e=>`${e.name}.${e.intent}`).join(`, `)}`)}let f=i.challenge;te=f,ne=i.method,te.expires&&CS(te.expires,te.id),await u?.challenge(x,{challenge:f},ET(b.input).href);let g=DT(x,b.input,b.input);Rw(f,()=>ET(g),l);let _=D,y=$x(f),w=_?.method===i.method&&_?.key===y,re=!1;if(_){let e=await Ww(_,{challenges:E,response:x,status:w?`pending`:`rejected`});re=w&&!e}D=re?_:void 0;let k=$w(async n=>{if(n===void 0&&re&&_)return _.promise;re&&_&&(await Ww(_,{status:`rejected`}),D=void 0);let r=n??C;if(!Sw(i.method))return bT(f,i.method,r);let a={prepare:()=>Cw(i.method,{challenge:f,context:r,fetch:u?zS(p,u,{challenge:f}):p,input:g,signal:vT(e,t)})},o=a.prepare().then(()=>bT(f,i.method,r,a));return D={attempt:a,key:n===void 0?y:void 0,method:i.method,promise:o},o}),A=await d.emit(`challenge.received`,eT({challenge:f,challenges:E,createCredential:k,init:t,input:e,method:i.method,response:x}))??(o?await o(te,{createCredential:k}):void 0)??await k(),j=D;j&&await j.promise.catch(()=>void 0)!==A&&(await Ww(j,{status:`rejected`}),D=void 0),yT(A),await d.emit(`credential.created`,tT({challenge:f,credential:A,init:t,input:e,method:i.method,response:x}));let ie=e=>new xS({cause:e,challenge:f,credential:A,transactionHash:Nw(i.method,A)});try{x=await m(g,{...c.setCredential({...ee,headers:b.headers},A,{challenge:f}),redirect:`manual`},{challenge:f})}catch(e){throw O=ie(e),e}let ae=await c.isPaymentRequired(x,S);if(ae||(await Ww(j,{response:x,status:x.status>=300&&x.status<400?`pending`:x.ok?`accepted`:`rejected`}),D=void 0),x.ok&&Yw(d,`payment.response`)&&await d.emit(`payment.response`,nT({challenge:f,credential:A,init:t,input:e,method:i.method,response:x})),!ae){if(x.status>=500&&Yw(d,`payment.failed`)){try{x=await Uw(x)}catch(e){throw O=ie(e),x=new Response(null,{headers:x.headers,status:x.status,statusText:x.statusText}),e}await d.emit(`payment.failed`,rT({challenge:f,challenges:E,error:ie(),init:t,input:e,method:i.method,response:x}))}return x.ok?jw(i.method,{challenge:f,credential:A,fetch:p,headers:b.headers,input:g,...r?{refetch:()=>h(_T(b.input),t,!1)}:{},response:x,signal:vT(e,t)}):x}}E=void 0;try{E=await c.getChallenges(x,S)}catch{}return await Ww(D,{challenges:E,response:x,status:`rejected`}),x}catch(n){throw await Ww(D,{challenges:E,response:x,status:`rejected`}),await d.emit(`payment.failed`,rT({challenge:te,challenges:E,error:O??n,init:t,input:e,method:ne,response:x})),n}},g=(e,t)=>h(e,t,!0);return g[OT]=p,u&&(g[kT]=u),g}function Kw(e){let t=Object.getOwnPropertyDescriptor(globalThis,`fetch`);if(!t||!t.writable&&!t.set)throw Error(`globalThis.fetch is not writable`);PT||=globalThis.fetch,globalThis.fetch=Gw({...e,acceptPaymentPolicy:e.acceptPaymentPolicy??(TT()?`same-origin`:`always`),fetch:gT(globalThis.fetch)})}function qw(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 Jw(){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 Xw(t,n);if(typeof e==`string`&&e.length>0){r=e;break}}return await Qw(e[`*`],t,n),r}case`credential.created`:await Zw(e[`credential.created`],n),await Qw(e[`*`],t,n);return;case`payment.failed`:await Zw(e[`payment.failed`],n),await Qw(e[`*`],t,n);return;case`payment.response`:await Zw(e[`payment.response`],n),await Qw(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 FT.set(t,t=>e[t].size>0||e[`*`].size>0),t}function Yw(e,t){return FT.get(e)?.(t)??!0}async function Xw(e,t){try{return await e(t)}catch{return}}async function Zw(e,t){for(let n of e)try{await n(t)}catch{}}async function Qw(e,t,n){await Zw(e,Object.freeze({name:t,payload:n}))}function $w(e){let t;return n=>(t??=e(n),t)}function eT(e){return Object.freeze({challenge:cT(e.challenge),challenges:e.challenges.map(e=>cT(e)),createCredential:e.createCredential,init:iT(e.init),input:aT(e.input),method:oT(e.method),response:sT(e.response)})}function tT(e){return Object.freeze({challenge:cT(e.challenge),credential:e.credential,init:iT(e.init),input:aT(e.input),method:oT(e.method),...e.response===void 0?{}:{response:sT(e.response)}})}function nT(e){return Object.freeze({challenge:cT(e.challenge),credential:e.credential,init:iT(e.init),input:aT(e.input),method:oT(e.method),response:sT(e.response)})}function rT(e){return Object.freeze({...e.challenge?{challenge:cT(e.challenge)}:{},...e.challenges?{challenges:e.challenges.map(e=>cT(e))}:{},error:e.error,init:iT(e.init),input:aT(e.input),...e.method?{method:oT(e.method)}:{},...e.response===void 0?{}:{response:sT(e.response)}})}function iT(e){if(e)return uT({...e,...e.headers?{headers:new Headers(e.headers)}:{}})}function aT(e){if(e instanceof Request)try{return e.clone()}catch{return e}return e instanceof URL?new URL(e):e}function oT(e){return uT(Object.assign({},e))}function sT(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 cT(e)}function cT(e){try{return lT(structuredClone(e))}catch{return uT(e)}}function lT(e){if(!e||typeof e!=`object`||Object.isFrozen(e))return e;Object.freeze(e);for(let t of Object.values(e))lT(t);return e}function uT(e){return!e||typeof e!=`object`||Object.isFrozen(e)||Object.freeze(e),e}function dT(e,t,n,r,i,a){let o=!!r&&!i&&CT(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(q.acceptPayment,r),t?(t.headers=s,{headers:s,init:t,input:e}):{headers:s,init:o?{headers:s}:void 0,input:e}}function fT(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 pT(e,t){return t===void 0?e:{...e,body:t}}function mT(e,t){return t?new Headers(t):new Headers(e instanceof Request?e.headers:void 0)}function hT(e){return e[kT]}function gT(e){let t=e;for(;t[OT];)t=t[OT];return t}function _T(e){if(!(e instanceof Request)||!e.body||e.bodyUsed)return e;try{return e.clone()}catch{return e}}function vT(e,t){if(t?.signal!==null)return t?.signal===void 0?e instanceof Request?e.signal:void 0:t.signal}function yT(e){if(!e.trim())throw Error(`Credential header value must be non-empty`);if(e.includes(`\r`)||e.includes(`
|
|
224
|
-
`))throw Error(`Credential header value contains illegal newline characters`)}async function bT(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&&kw(t,a,r),t.createCredential(a)}function xT(e,t){let n=e.get(q.acceptPayment);if(!n)return t;try{return{...t,entries:XS(n),header:n}}catch{return t}}async function ST(e,t){return t?t(e):e}function CT(e,t){if(t===`always`)return!0;if(t===`never`)return!1;let n=ET(e);return t===`same-origin`?!TT()||n.origin===globalThis.location.origin:t.origins.some(e=>wT(n,e))}function wT(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 TT(){return globalThis.location!==void 0}function ET(e){return e instanceof URL?e:e instanceof Request?new URL(e.url):new URL(e,TT()?globalThis.location.href:void 0)}function DT(e,t,n){if(!e.url)return t;let r=new URL(e.url),i=ET(n);if(r.origin!==i.origin)throw Error(`Refusing to send payment credential across redirect from ${i.origin} to ${r.origin}`);return e.url}var OT,kT,AT,jT,MT,NT,PT,FT,IT=F((()=>{_S(),Fx(),SS(),wS(),US(),pC(),bw(),Ew(),Lw(),Hw(),OT=Symbol.for(`mppx.fetch.wrapper`),kT=Symbol.for(`mppx.fetch.identity`),AT=3,jT=65536,MT=2e3,NT=`Mppx-Body-Truncated`,FT=new WeakMap}));Ox(),Fx(),wS(),US(),pC(),IT(),Ew(),Hw(),bw();const LT=new WeakMap;function RT(e){let{identity:t,maxPaymentRetries:n,onChallenge:r,orderChallenges:i,polyfill:a=!0,acceptPaymentPolicy:o=a&&globalThis.location!==void 0?`same-origin`:`always`,transport:s=yw(),trustedTempoProofRealms:c}=e;if(`attestation`in e)throw TypeError("Mppx client `attestation` was replaced by `identity: [prover]`.");let l=gT(e.fetch??globalThis.fetch),u=t?LS(t):e.fetch&&hT(e.fetch),d=e.methods.flat(),f=YS(d,e.paymentPreferences),p=Jw(),m=r,h={acceptPayment:f,acceptPaymentPolicy:o,...e.fetch&&{fetch:l},...u&&{identity:u},eventDispatcher:p,...n!==void 0&&{maxPaymentRetries:n},...m&&{onChallenge:m},...i&&{orderChallenges:i},methods:d,transport:s,...c&&{trustedTempoProofRealms:c}},g=Gw(h);a&&Kw(h);function _(e){return p.on(`challenge.received`,e)}function v(e){return p.on(`credential.created`,e)}function y(e){return p.on(`payment.failed`,e)}function b(e){return p.on(`payment.response`,e)}async function x(e,t){let n=QT(e),r=await s.getChallenges(e,t?.request),a=Object.freeze(r.map(e=>$T(e))),o=nE(f.entries,t?.acceptPayment),l,u;try{let f=(await rE($S(r,d,o),t?.orderChallenges??i))[0];if(!f)throw Error(`No method found for challenges: ${r.map(e=>`${e.method}.${e.intent}`).join(`, `)}. Available: ${d.map(e=>`${e.name}.${e.intent}`).join(`, `)}`);let m=f.challenge;l=a[f.index],u=f.method,l.expires&&CS(l.expires,l.id);let h=aE(e);h?Rw(l,h,c):s.name===`mcp`&&zw(l,c&&Object.values(c));let g=l,_=u,v=qT(async e=>{try{g.expires&&CS(g.expires,g.id);let t=qT(t=>iE(g,_,t??e)),i=await p.emit(`challenge.received`,JT({challenge:g,challenges:r,createCredential:t,method:_,response:n}))??await t();return yT(i),await p.emit(`credential.created`,YT({challenge:g,credential:i,method:_,response:n})),i}catch(e){throw await p.emit(`payment.failed`,XT({challenge:g,challenges:r,error:e,method:_,response:n})),e}}),y=Object.freeze({challenge:g,challenges:a,createCredential:v,method:ZT(_),setCredential(e,t){return yT(t),s.setCredential(e,t,{challenge:m})}});return LT.set(y,_),y}catch(e){throw await p.emit(`payment.failed`,XT({challenge:l,challenges:r,error:e,method:u,response:n})),e}}async function S(e,t,n){let{maxRedirects:r=20,requirePayment:i=!1,...a}=n??{},d=await HT({acceptPayment:f.header,acceptPaymentPolicy:o,fetch:l,init:t,input:e,maxRedirects:r,identity:u}),p=UT(d.replayRequest,d.body);if(!await s.isPaymentRequired(d.response,p)){if(i)throw Error(`Response does not require payment.`);return Object.freeze({payment:void 0,request:d.request,response:d.response,redirects:d.redirects})}let m=await x(d.response,{...a,request:p});Rw(m.challenge,new URL(d.replayRequest.url),c);let h=LT.get(m)??m.method,g=qT(async e=>(await u?.challenge(d.response,{challenge:m.challenge},d.replayRequest.url),Sw(h)&&await Cw(h,{challenge:m.challenge,context:e,fetch:u?zS(l,u,{challenge:m.challenge}):l,input:d.replayRequest,signal:d.replayRequest.signal}),m.createCredential(e))),_=Object.freeze({...m,createCredential:g,async pay(e){let t=await g(e),n=m.setCredential(UT(d.replayRequest,d.body),t),r=new Request(d.replayRequest.url,{...n,redirect:`manual`});if(!u)return l(r);let{response:i}=await u.send(l,r,{challenge:m.challenge});return i}});return Object.freeze({payment:_,request:d.request,response:d.response,redirects:d.redirects})}return{fetch:g,rawFetch:l,methods:d,transport:s,on:p.on,onChallengeReceived:_,onCredentialCreated:v,onPaymentFailed:y,onPaymentResponse:b,preparePayment:x,prepareRequest:S,async createCredential(e,t,n){return(await x(e,n)).createCredential(t)}}}const zT=new Set([301,302,303,307,308]),BT=[`content-encoding`,`content-language`,`content-length`,`content-location`,`content-type`,`transfer-encoding`],VT=[`authorization`,`cookie`,`cookie2`,`host`,`payment-authorization`,`payment-signature`,`proxy-authorization`,`x-payment`];async function HT(e){let{acceptPayment:t,acceptPaymentPolicy:n,fetch:r,identity:i,init:a,input:o,maxRedirects:s}=e;if(!Number.isInteger(s)||s<0)throw TypeError(`maxRedirects must be a non-negative integer.`);let c=new Request(o,{...a,redirect:`manual`}),l=c.headers.has(q.acceptPayment),u=await WT(c,a?.body),d=[];for(;;){c=GT(c,t,l,n);let{request:e,response:a}=await(async()=>{if(i)return i.send(r,c.clone());let e=c.clone();return{request:e,response:await r(e)}})();if(a.type===`opaqueredirect`||a.status===0)throw Error(`prepareRequest requires a runtime that exposes manual redirect responses.`);if(!zT.has(a.status))return{body:u,replayRequest:c,request:e,response:a,redirects:Object.freeze(d)};let o=a.headers.get(`location`);if(!o)return{body:u,replayRequest:c,request:e,response:a,redirects:Object.freeze(d)};if(d.length>=s)throw await a.body?.cancel(),Error(`Payment request exceeded ${s} redirects.`);let f=new URL(c.url),p=new URL(o,f);if(f.protocol===`https:`&&p.protocol!==`https:`)throw await a.body?.cancel(),Error(`Payment request refused HTTPS downgrade redirect to ${p.href}`);let m=new Headers(c.headers),h=c.method;if((a.status===301||a.status===302)&&h===`POST`||a.status===303&&h!==`GET`&&h!==`HEAD`){h=`GET`,u=void 0;for(let e of BT)m.delete(e)}if(f.origin!==p.origin)for(let e of[...m.keys()]){let t=m.get(e)??``;(VT.includes(e)||t.startsWith(`Payment `))&&m.delete(e)}d.push(Object.freeze({from:f.href,status:a.status,to:p.href})),await a.body?.cancel(),c=new Request(p,KT(c,m,h,u))}}function UT(e,t){return KT(e,new Headers(e.headers),e.method,t)}async function WT(e,t){if(typeof t==`string`)return t;if(!e.body)return;let n=e.headers.get(`accept`)?.toLowerCase()??``;return e.headers.has(`mcp-method`)||n.includes(`application/json`)&&n.includes(`text/event-stream`)?e.clone().text():e.clone().arrayBuffer()}function GT(e,t,n,r){if(n)return e;let i=new Headers(e.headers);return i.delete(q.acceptPayment),t&&CT(e,r)&&i.set(q.acceptPayment,t),new Request(e,{headers:i})}function KT(e,t,n,r){return{...r?{body:r}:{},cache:e.cache,credentials:e.credentials,headers:t,integrity:e.integrity,keepalive:e.keepalive,method:n,mode:e.mode,redirect:`manual`,referrer:e.referrer,referrerPolicy:e.referrerPolicy,signal:e.signal}}function qT(e){let t;return n=>(t??=e(n),t)}function JT(e){return Object.freeze({challenge:$T(e.challenge),challenges:e.challenges.map(e=>$T(e)),createCredential:e.createCredential,method:ZT(e.method),response:QT(e.response)})}function YT(e){return Object.freeze({challenge:$T(e.challenge),credential:e.credential,method:ZT(e.method),response:QT(e.response)})}function XT(e){return Object.freeze({...e.challenge?{challenge:$T(e.challenge)}:{},...e.challenges?{challenges:e.challenges.map(e=>$T(e))}:{},error:e.error,...e.method?{method:ZT(e.method)}:{},response:QT(e.response)})}function ZT(e){return tE(Object.assign({},e))}function QT(e){return e instanceof Response?e.body===null?e.clone():new Response(null,{headers:e.headers,status:e.status,statusText:e.statusText}):$T(e)}function $T(e){try{let t=structuredClone(e);if(e&&t&&typeof e==`object`&&typeof t==`object`)for(let n of Object.getOwnPropertySymbols(e)){let r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}return eE(t)}catch{return tE(e)}}function eE(e){if(!e||typeof e!=`object`||Object.isFrozen(e))return e;Object.freeze(e);for(let t of Object.values(e))eE(t);return e}function tE(e){return!e||typeof e!=`object`||Object.isFrozen(e)||Object.freeze(e),e}function nE(e,t){return t?typeof t==`string`?XS(t):t:e}async function rE(e,t){return t?t(e):e}async function iE(e,t,n){let r=t.context&&n!==void 0?t.context.parse(n):void 0;return t.createCredential(r===void 0?{challenge:e}:{challenge:e,context:r})}function aE(e){if(typeof Response<`u`&&e instanceof Response&&e.url)return new URL(e.url)}function oE(){return J.string().check(J.regex(sE,`Invalid URI or path`))}var sE,cE,lE,uE,dE,fE,pE,mE,hE,gE=F((()=>{Zx(),sE=/^([a-zA-Z][a-zA-Z\d+.-]*:\/\/\S+|\/\S*)$/,cE=new Set([`amount`,`currency`,`description`,`intent`,`method`]),lE=J.looseObject({amount:J.optional(J.union([J.null(),J.string().check(J.regex(/^(0|[1-9][0-9]*)$/,`Invalid amount`))])),currency:J.optional(J.string()),description:J.optional(J.string()),intent:J.optional(J.string()),method:J.optional(J.string())}),uE=J.pipe(J.looseObject({amount:J.optional(J.union([J.null(),J.string().check(J.regex(/^(0|[1-9][0-9]*)$/,`Invalid amount`))])),currency:J.optional(J.string()),description:J.optional(J.string()),intent:J.optional(J.string()),method:J.optional(J.string()),offers:J.optional(J.array(lE).check(J.minLength(1)))}).check(J.refine(e=>e.offers===void 0||Object.keys(e).every(e=>e===`offers`||!cE.has(e)),`Cannot mix offers with flat payment info fields`)),J.transform(e=>{if(e.offers)return{offers:e.offers};let t={};for(let[n,r]of Object.entries(e))n!==`offers`&&(cE.has(n)||r!==void 0)&&(t[n]=r);return{offers:[t]}})),dE=J.looseObject({apiReference:J.optional(oE()),homepage:J.optional(oE()),llms:J.optional(oE())}),fE=J.looseObject({categories:J.optional(J.array(J.string())),docs:J.optional(dE)}),pE=J.looseObject({"x-payment-info":J.optional(uE),requestBody:J.optional(J.unknown()),responses:J.optional(J.record(J.string(),J.unknown())),summary:J.optional(J.string())}),mE=J.looseObject({delete:J.optional(pE),get:J.optional(pE),head:J.optional(pE),options:J.optional(pE),patch:J.optional(pE),post:J.optional(pE),put:J.optional(pE),trace:J.optional(pE)}),hE=J.looseObject({openapi:J.string(),info:J.looseObject({title:J.string(),version:J.string()}),"x-service-info":J.optional(fE),paths:J.optional(J.record(J.string(),mE))})}));gE();function _E(e){let t=[],n=hE.safeParse(e);if(!n.success){for(let e of n.error.issues)t.push({message:e.message,path:e.path.map(String).join(`.`)||`(root)`,severity:`error`});return t}let r=n.data.paths;if(!r)return t;for(let[e,n]of Object.entries(r))for(let[r,i]of Object.entries(n)){if(!i||typeof i!=`object`||Array.isArray(i))continue;let n=i,a=`paths.${e}.${r}`,o=n[`x-payment-info`];if(!o)continue;let s=uE.safeParse(o);if(!s.success){for(let e of s.error.issues){let n=e.path.length>0?`.${e.path.map(String).join(`.`)}`:``;t.push({message:e.message,path:`${a}.x-payment-info${n}`,severity:`error`})}continue}let c=n.responses;(!c||!(`402`in c))&&t.push({message:`Operation with x-payment-info MUST have a 402 response`,path:`${a}.responses`,severity:`error`});let l=r.toUpperCase();!n.requestBody&&(l===`POST`||l===`PUT`||l===`PATCH`)&&t.push({message:`Operation with x-payment-info has no requestBody`,path:a,severity:`warning`})}return t}function vE(e){return e}function yE(e,t){let{canHandleChallenge:n,context:r,createCredential:i}=t;return{...e,canHandleChallenge:n,context:r,createCredential:i}}var bE=F((()=>{}));function xE(e){return J.refine(e=>{let{amount:t,decimals:n}=e;return N(t,n)>0n},e)}function SE(e){let{periodCount:t,periodUnit:n}=e;try{let e=EE[n];return e!==void 0&&BigInt(t)*e<=TE}catch{return!1}}var CE,wE,TE,EE,DE,OE,kE,AE,jE,ME,NE,PE,FE,IE=F((()=>{Fx(),bE(),Zx(),CE=[`push`,`pull`],wE=J.object({amount:Vx(),memo:J.optional(qx()),recipient:J.pipe(J.string(),J.transform(e=>e))}),TE=(1n<<64n)-1n,EE={dev_second:1n,day:86400n,week:604800n},DE=J.pipe(Kx(),J.transform(e=>e.toLowerCase())),OE=J.object({accessKeyAddress:DE,keyType:J.enum([`p256`,`secp256k1`,`webAuthn`]),keyToken:J.optional(J.pipe(J.string().check(J.regex(/^0x[0-9a-fA-F]{120}$/)),J.transform(e=>e)))}),kE=J.object({accessKey:J.optional(OE),chainId:J.optional(J.number())}),AE=Ux(`subscriptionExpires must be a valid date`).check(J.refine(e=>e.getTime()%1e3==0,`subscriptionExpires must be representable as whole seconds`)),jE=J.enum([`dev_second`,`day`,`week`]),ME=J.pipe(J.union([J.string(),J.bigint(),J.custom(e=>typeof e==`number`&&Number.isSafeInteger(e))]),J.transform(e=>e.toString())).check(J.regex(/^[1-9]\d*$/,`Invalid periodCount`),J.refine(e=>{try{return BigInt(e)<=TE}catch{return!1}},`periodCount exceeds uint64`)),NE=vE({name:`tempo`,intent:`charge`,schema:{credential:{payload:J.discriminatedUnion(`type`,[J.object({hash:qx(),type:J.literal(`hash`)}),J.object({signature:Yx(),type:J.literal(`transaction`)}),J.object({signature:Yx(),type:J.literal(`proof`)})])},request:J.pipe(J.object({machineTokenEnabled:J.optional(J.boolean()),amount:Vx(),chainId:J.optional(J.number()),currency:J.string(),decimals:J.number(),description:J.optional(J.string()),externalId:J.optional(J.string()),feePayer:J.optional(J.pipe(J.union([J.boolean(),J.custom()]),J.transform(e=>typeof e==`object`||e))),memo:J.optional(J.never()),recipient:J.optional(J.string()),splits:J.optional(J.array(wE).check(J.minLength(1),J.maxLength(10))),supportedModes:J.optional(J.array(J.enum(CE)).check(J.minLength(1)))}).check(J.refine(({amount:e,decimals:t,splits:n})=>{if(!n)return!0;let r=N(e,t),i=n.reduce((e,n)=>e+N(n.amount,t),0n);return n.every(e=>N(e.amount,t)>0n)&&i<r},`Invalid splits`)),J.transform(({machineTokenEnabled:e,amount:t,chainId:n,decimals:r,feePayer:i,memo:a,splits:o,supportedModes:s,...c})=>({...c,amount:N(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:N(e.amount,r).toString()}))},...s!==void 0&&{supportedModes:s}}}:{}})))}}),PE=vE({name:`tempo`,intent:`session`,schema:{credential:{payload:J.discriminatedUnion(`action`,[J.object({action:J.literal(`open`),authorizedSigner:J.optional(J.string()),channelId:qx(),cumulativeAmount:Vx(),descriptor:J.optional(J.custom()),signature:Yx(),transaction:Yx(),type:J.literal(`transaction`)}),J.object({action:J.literal(`topUp`),additionalDeposit:Vx(),channelId:qx(),descriptor:J.optional(J.custom()),transaction:Yx(),type:J.literal(`transaction`)}),J.object({action:J.literal(`voucher`),channelId:qx(),cumulativeAmount:Vx(),descriptor:J.optional(J.custom()),signature:Yx()}),J.object({action:J.literal(`close`),channelId:qx(),closeSignature:Yx(),cumulativeAmount:Vx(),descriptor:J.optional(J.custom()),signature:Yx()})])},request:J.pipe(J.object({amount:Vx(),chainId:J.optional(J.number()),channelId:J.optional(qx()),currency:J.string(),decimals:J.number(),escrowContract:J.optional(J.string()),feePayer:J.optional(J.pipe(J.union([J.boolean(),J.custom()]),J.transform(e=>typeof e==`object`||e))),feeToken:J.optional(Kx()),minVoucherDelta:J.optional(Vx()),operator:J.optional(Kx()),recipient:J.optional(J.string()),sessionProtocol:J.optional(J.enum([Px.v2,Px.v1])),sessionSnapshot:J.optional(J.custom()),suggestedDeposit:J.optional(Vx()),unitType:J.string()}).check(J.refine(({amount:e,decimals:t})=>N(e,t)>0n,`Session amount must be greater than 0`)),J.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,...f})=>({...f,amount:N(e,r).toString(),...d?{suggestedDeposit:N(d,r).toString()}:{},methodDetails:{escrowContract:i,...n!==void 0&&{channelId:n},...s!==void 0&&{minVoucherDelta:N(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&&{[Nx.sessionProtocol]:l},...u!==void 0&&{[Nx.sessionSnapshot]:u}}})))}}),FE=vE({name:`tempo`,intent:`subscription`,schema:{credential:{payload:J.object({signature:Yx(),type:J.literal(`keyAuthorization`)})},request:J.pipe(J.object({amount:Vx(),accessKey:J.optional(OE),chainId:J.optional(J.number()),currency:DE,decimals:J.number(),description:J.optional(J.string()),externalId:J.optional(J.string()),methodDetails:J.optional(kE),periodCount:ME,periodUnit:jE,recipient:DE,subscriptionExpires:AE}).check(xE(`Subscription amount must be greater than 0`),J.refine(SE,`Subscription period exceeds uint64`)),J.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:N(t,r).toString(),subscriptionExpires:a.toISOString(),...Object.keys(s).length>0?{methodDetails:s}:{}}}))}})}));function LE(e){return e>=0n&&e<=nD}function RE(e){if(!/^\d{1,29}$/.test(e))return;let t=BigInt(e);return LE(t)?t:void 0}function zE(e){return BE(e),e}function BE(e){if(!LE(e))throw Error(`Value ${e} is outside uint96 bounds.`)}function VE(e){return typeof e==`object`&&!!e}function HE(e){return typeof e==`string`&&rD.has(e)}function UE(e){if(typeof e!=`object`||!e)return!1;let t=e;return!(typeof t.channelId!=`string`||t.action!==void 0&&!HE(t.action))}function WE(e,t=`No session credential context available.`){if(!UE(e))throw Error(t);return e}function GE(e){let t=e.request.amount;if(typeof t!=`string`)throw Error(`Session challenge is missing amount.`);return BigInt(t)}function KE(e){return VE(e)?typeof e.channelId==`string`&&typeof e.requiredCumulative==`string`&&typeof e.acceptedCumulative==`string`&&typeof e.deposit==`string`:!1}function qE(e){return VE(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 JE(e){let t=D.toString(e),n=JSON.parse(t);if(!qE(n))throw Error(`Invalid session receipt.`);return n}function YE(e){return e.headers.get(`content-type`)?.toLowerCase().startsWith(`text/event-stream`)??!1}function XE(e){let t=`message`,n=[];for(let r of e.split(`
|
|
223
|
+
`)}function Xb(...e){let t=e.filter(e=>e!==void 0);if(t.length!==0)return{description:t[0].description,commands:t.flatMap(e=>e.commands)}}function Zb(e){return Object.values(e.shape).some(e=>e._zod.optout!==`optional`)}function Qb(e){return typeof e==`object`&&!!e&&Ex in e}async function $b(e,t){let n=t.format===`jsonl`;if(n||!t.formatExplicit&&t.format===`toon`)try{let r;for(;;){let{value:i,done:a}=await e.next();if(a){r=i;break}if(Qb(i)){let e=i;if(e[Ex]===`error`){n?t.writeln(JSON.stringify({type:`error`,ok:!1,error:{code:e.code,message:e.message,...e.retryable===void 0?void 0:{retryable:e.retryable}}})):t.writeln(Jb({code:e.code,message:e.message})),t.exit(e.exitCode??1);return}}n?t.writeln(Rr({type:`chunk`,data:i})):t.renderOutput&&t.writeln(t.truncate(bl(i,t.format)).text)}if(Qb(r)&&r[Ex]===`error`){let e=r;n?t.writeln(JSON.stringify({type:`error`,ok:!1,error:{code:e.code,message:e.message,...e.retryable===void 0?void 0:{retryable:e.retryable}}})):t.writeln(Jb({code:e.code,message:e.message})),t.exit(e.exitCode??1);return}let i=Qb(r)&&r[Ex]===`ok`?_u(t.name,r.cta):void 0;n?t.writeln(JSON.stringify({type:`done`,ok:!0,meta:{command:t.path,duration:`${Math.round(performance.now()-t.start)}ms`,...i?{cta:i}:void 0}})):i&&t.writeln(Yb(i))}catch(e){n?t.writeln(JSON.stringify({type:`error`,ok:!1,error:{code:e instanceof I?e.code:`UNKNOWN`,message:e instanceof Error?e.message:String(e),...e instanceof I?{retryable:e.retryable}:void 0}})):t.writeln(Jb({code:`UNKNOWN`,message:e instanceof Error?e.message:String(e)})),t.exit(e instanceof I?e.exitCode??1:1)}else{let n=[];try{let r;for(;;){let{value:i,done:a}=await e.next();if(a){r=i;break}if(Qb(i)){let e=i;if(e[Ex]===`error`){t.write({ok:!1,error:{code:e.code,message:e.message,...e.retryable===void 0?void 0:{retryable:e.retryable}},meta:{command:t.path,duration:`${Math.round(performance.now()-t.start)}ms`}}),t.exit(e.exitCode??1);return}}n.push(i)}if(Qb(r)&&r[Ex]===`error`){let e=r;t.write({ok:!1,error:{code:e.code,message:e.message,...e.retryable===void 0?void 0:{retryable:e.retryable}},meta:{command:t.path,duration:`${Math.round(performance.now()-t.start)}ms`}}),t.exit(e.exitCode??1);return}let i=Qb(r)&&r[Ex]===`ok`?_u(t.name,r.cta):void 0;t.write({ok:!0,data:n,meta:{command:t.path,duration:`${Math.round(performance.now()-t.start)}ms`,...i?{cta:i}:void 0}})}catch(e){t.write({ok:!1,error:{code:e instanceof I?e.code:`UNKNOWN`,message:e instanceof Error?e.message:String(e),...e instanceof I?{retryable:e.retryable}:void 0},meta:{command:t.path,duration:`${Math.round(performance.now()-t.start)}ms`}}),t.exit(e instanceof I?e.exitCode??1:1)}}}function ex(e,t=[],n,r){let i=tx(e,t);return r&&t.length>0&&i.push({name:t.join(` `),...r.description?{description:r.description}:void 0}),{version:`incur.v1`,commands:i.sort((e,t)=>e.name.localeCompare(t.name)),...n?{globals:ku(n)}:void 0}}function tx(e,t){let n=[];for(let[r,i]of e){if(Gb(i))continue;let e=[...t,r];if(Ub(i)){if(i.root){let t={name:e.join(` `)};i.root.description&&(t.description=i.root.description),n.push(t)}n.push(...tx(i.commands,e))}else{let t={name:e.join(` `)};Wb(i),i.description&&(t.description=i.description),n.push(t)}}return n}function nx(e,t=[],n,r){let i=rx(e,t);return r&&t.length>0&&i.push(ix(t,r)),{version:`incur.v1`,commands:i.sort((e,t)=>e.name.localeCompare(t.name)),...n?{globals:ku(n)}:void 0}}function rx(e,t){let n=[];for(let[r,i]of e){if(Gb(i))continue;let e=[...t,r];if(Wb(i)){let t={name:e.join(` `)};i.description&&(t.description=i.description),n.push(t)}else Ub(i)?(i.root&&n.push(ix(e,i.root)),n.push(...rx(i.commands,e))):n.push(ix(e,i))}return n}function ix(e,t){let n={name:e.join(` `)};t.description&&(n.description=t.description);let r=dx(t.args,t.env,t.options),i=t.output?ku(t.output):void 0;(r||i)&&(n.schema={},r?.args&&(n.schema.args=r.args),r?.env&&(n.schema.env=r.env),r?.options&&(n.schema.options=r.options),i&&(n.schema.output=i));let a=lx(t.examples);if(a){let t=e.join(` `);n.examples=a.map(e=>({...e,command:e.command?`${t} ${e.command}`:t}))}return n}function ax(e,t,n,r){let i=[];if(r){let e={};r.description&&(e.description=r.description),r.args&&(e.args=r.args),r.env&&(e.env=r.env),r.hint&&(e.hint=r.hint),sx(r)&&(e.hint=cx(e.hint)),r.options&&(e.options=r.options),r.output&&(e.output=r.output);let t=lx(r.examples);t&&(e.examples=t),i.push(e)}for(let[r,a]of e){if(Gb(a))continue;let e=[...t,r];if(Wb(a)){let t={name:e.join(` `)};a.description&&(t.description=a.description),t.hint=`Fetch gateway. Pass path segments and curl-style flags (-X, -H, -d, --key value).`,i.push(t)}else Ub(a)?(a.description&&n.set(e.join(` `),a.description),a.root&&i.push(ox(e,a.root)),i.push(...ax(a.commands,e,n))):i.push(ox(e,a))}return i.sort((e,t)=>(e.name??``).localeCompare(t.name??``))}function ox(e,t){let n={name:e.join(` `)};t.description&&(n.description=t.description),t.args&&(n.args=t.args),t.env&&(n.env=t.env),t.hint&&(n.hint=t.hint),sx(t)&&(n.hint=cx(n.hint)),t.options&&(n.options=t.options),t.output&&(n.output=t.output);let r=lx(t.examples);if(r){let t=e.join(` `);n.examples=r.map(e=>({...e,command:e.command?`${t} ${e.command}`:t}))}return n}function sx(e){return e.destructive===!0||e.mcp!==!1&&e.mcp?.annotations?.destructiveHint===!0}function cx(e){return e?e.includes(mx)?e:`${e} ${mx}`:mx}function lx(e){if(!(!e||e.length===0))return e.map(e=>{let t=[];if(e.args)for(let n of Object.values(e.args))t.push(String(n));if(e.options)for(let[n,r]of Object.entries(e.options))t.push(`--${n} ${r}`);let n={command:t.join(` `)};return e.description&&(n.description=e.description),n})}function ux(e){let t=e.match(/^---\r?\n([\s\S]*?)\r?\n---/);if(!t)return{};let n=_l().parse(t[1]);return!n||typeof n!=`object`?{}:n}function dx(e,t,n){if(!e&&!t&&!n)return;let r={};return e&&(r.args=ku(e)),t&&(r.env=ku(t)),n&&(r.options=ku(n)),r}function fx(e,t,n){if(!t)return;let r=t.shape,i=new Set,a=new Map;for(let e of Object.keys(r))if(r[e]?.meta?.()?.deprecated){let t=e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`);i.add(t),n?.[e]&&a.set(n[e],t)}if(i.size!==0){for(let t of e)if(t.startsWith(`--`)){let e=t.split(`=`)[0].slice(2),n=!i.has(e)&&e.startsWith(`no-`)?e.slice(3):e;i.has(n)&&process.stderr.write(`Warning: --${n} is deprecated\n`)}else if(t.startsWith(`-`)&&t.length>=2)for(let e of t.slice(1))a.has(e)&&process.stderr.write(`Warning: --${a.get(e)} is deprecated\n`)}}function px(e,t){let n=process.argv[1];if(!n)return e;let r=c.basename(n);return r===e?e:t?.includes(r)?r:e}var mx,hx,gx,_x,vx,yx,bx,xx,Sx,Cx,wx,Tx,Ex,Dx=F((()=>{nn(),Bt(),Sn(),Dn(),Fn(),zn(),Ol(),gu(),nu(),bu(),Ou(),cn(),Br(),it(),wt(),yl(),cv(),_y(),ry(),Gl(),Au(),Oy(),Ry(),sb(),mx=`Confirm with the user before executing this destructive command.`,hx=Symbol.for(`incur.fileCommand`),gx=new Set([`toon`,`json`,`yaml`,`md`,`jsonl`]),_x=new WeakMap,vx=new WeakMap,yx=new WeakMap,bx=new WeakMap,xx=new WeakMap,Sx=new WeakMap,Cx=new WeakMap,wx=new WeakMap,Tx=new WeakMap,Ex=Symbol.for(`incur.sentinel`)})),Ox=F((()=>{Bt(),Dx(),Sn(),Dn(),Ol(),gu(),cv(),Fn(),ry(),Gl(),Au(),Oy(),yl(),Ry(),sb()}));function kx(e,t){if(!(!e||typeof e!=`object`))return e[t]}var q,Ax,jx,Mx,Nx,Px,Fx=F((()=>{q={acceptPayment:`Accept-Payment`,authorization:`Authorization`,paymentAuthorization:`Payment-Authorization`,paymentReceipt:`Payment-Receipt`,paymentSession:`Payment-Session`,paymentSessionSnapshot:`Payment-Session-Snapshot`,wwwAuthenticate:`WWW-Authenticate`},Ax={payment:`Payment`},jx={evm:`evm`,stripe:`stripe`,tempo:`tempo`},Mx={charge:`charge`,session:`session`,subscription:`subscription`},Nx={sessionProtocol:`sessionProtocol`,sessionSnapshot:`sessionSnapshot`},Px={v1:`v1`,v2:`v2`}}));function Ix(e){let t=D.toString(e);return JSON.parse(t)}function Lx(e,t){return e.schema.request.parse(t)}function Rx(e){let t=A.canonicalize(e);return D.fromString(t,{pad:!1,url:!0})}var zx=F((()=>{})),J=Qe({address:()=>Kx,amount:()=>Vx,datetime:()=>Hx,datetimeInput:()=>Ux,hash:()=>qx,period:()=>Jx,signature:()=>Yx,toDate:()=>Wx,toDatetimeString:()=>Gx,unwrapOptional:()=>Xx});import*as Bx from"zod/mini";et(J,Bx);function Vx(){return xe.string().check(xe.regex(/^\d+(\.\d+)?$/,`Invalid amount`))}function Hx(){return xe.string().check(xe.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 Ux(e=`Invalid ISO 8601 datetime`){return xe.pipe(xe.union([Hx(),xe.custom(e=>e instanceof Date)]),xe.transform(Wx)).check(xe.refine(e=>Number.isFinite(e.getTime()),e))}function Wx(e){return e instanceof Date?e:new Date(e)}function Gx(e){return e instanceof Date?Number.isFinite(e.getTime())?e.toISOString():`Invalid Date`:e}function Kx(){return xe.string().check(xe.regex(/^0x[0-9a-fA-F]{40}$/,`Invalid address`))}function qx(){return xe.string().check(xe.regex(/^0x[0-9a-fA-F]{64}$/,`Invalid hash`))}function Jx(){return xe.string().check(xe.regex(/^(day|week|month|year|\d+)$/,`Invalid period`))}function Yx(){return xe.string().check(xe.regex(/^0x[0-9a-fA-F]+$/,`Invalid signature`))}function Xx(e){return e._zod.def.type===`optional`?e._zod.def.innerType:e}var Zx=F((()=>{}));function Qx(e,t){let{description:n,digest:r,meta:i,method:a,header:o,intent:s,realm:c,request:l,secretKey:u}=e,d=mS(o)?void 0:o,f=e.expires?Gx(e.expires):void 0,p=e.opaque??(i===void 0?void 0:Rx(i)),m=u?hS({...e,expires:f,...i!==void 0&&{meta:i},opaque:p},{secretKey:u}):e.id;return _S.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 $x(e){let t=[eS(`id`,e.id),eS(`realm`,e.realm),eS(`method`,e.method),eS(`intent`,e.intent),eS(`request`,Rx(e.request))];e.description!==void 0&&t.push(eS(`description`,e.description)),e.digest!==void 0&&t.push(eS(`digest`,e.digest)),e.expires!==void 0&&t.push(eS(`expires`,e.expires));let n=e.header;return n!==void 0&&!mS(n)&&t.push(eS(`header`,n)),e.opaque===void 0?e.meta!==void 0&&t.push(eS(`opaque`,Rx(e.meta))):t.push(eS(`opaque`,e.opaque)),`${Ax.payment} ${t.join(`, `)}`}function eS(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 tS(e,t){let n=nS(e);if(!n)throw Error(`Missing Payment scheme.`);let{request:r,opaque:i,...a}=rS(n);if(!r)throw Error(`Missing request parameter.`);if(r.length>gS)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 Qx({...a,request:Ix(r),...i&&{opaque:i}},t)}function nS(e){let t=Ax.payment,[n]=cS(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 rS(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]=iS(e,n);if(n=o,i in t)throw Error(`Duplicate parameter: ${i}`);t[i]=a}return t}function iS(e,t){if(e[t]===`"`)return aS(e,t+1);let n=t;for(;n<e.length&&e[n]!==`,`;)n++;return[e.slice(t,n).trim(),n]}function aS(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 oS(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 sS(e){return cS(e,Ax.payment).length>0||e.split(`,`).some(e=>e.trim().toLowerCase()===Ax.payment.toLowerCase())}function cS(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(!oS(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 lS(e,t){if(e.status!==402)throw Error(`Response status is not 402.`);return uS(e.headers,t)}function uS(e,t){let n=e.get(q.wwwAuthenticate);if(!n)throw Error(`Missing ${q.wwwAuthenticate} header.`);return dS(n,t)}function dS(e,t){let n=cS(e,Ax.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 tS(e.slice(r,a).replace(/,\s*$/,``),t)})}function fS(e){let t=[e.realm,e.method,e.intent,Rx(e.request),e.expires??``,e.digest??``],n=e.header;return n!==void 0&&!mS(n)&&t.push(n),t.push(e.opaque??(e.meta?Rx(e.meta):``)),t.join(`|`)}function pS(e){return e.header??q.authorization}function mS(e){return e?.toLowerCase()===q.authorization.toLowerCase()}function hS(e,t){let n=fS(e),r=O.fromString(t.secretKey),i=O.fromString(n),a=re.hmac256(r,i,{as:`Bytes`});return D.fromBytes(a,{url:!0,pad:!1})}var gS,_S,vS=F((()=>{Fx(),zx(),Zx(),gS=16384,_S=J.object({description:J.optional(J.string()),digest:J.optional(J.string().check(J.regex(/^sha-256=/,`Invalid digest format`))),expires:J.optional(Hx()),header:J.optional(J.string().check(J.regex(/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,`Invalid HTTP header name`))),id:J.string().check(J.minLength(1)),intent:J.string(),method:J.string(),meta:J.optional(J.record(J.string(),J.string())),opaque:J.optional(J.string()),realm:J.string(),request:J.record(J.string(),J.unknown())})})),yS,bS,Y,xS,SS,CS=F((()=>{yS=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}}}},bS=class extends yS{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}.`)}},Y=class extends yS{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})}},xS=class extends yS{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.`)}},SS=class extends yS{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 wS(e,t){if(!e)throw new bS({...t&&{id:t},reason:`missing required expires field`});if(Number.isNaN(new Date(e).getTime()))throw new bS({...t&&{id:t},reason:`malformed expires timestamp`});if(Date.parse(e)<=Date.now())throw new xS({expires:e})}var TS=F((()=>{CS()}));function ES(e){if(e.length>MS)throw new PS;let t=e.match(RegExp(`^${Ax.payment}\\s+(.+)$`,`i`));if(!t?.[1])throw new NS;try{let e=D.toString(t[1]),n=JSON.parse(e),{opaque:r,request:i,meta:a,...o}=n.challenge,{meta:s,opaque:c}=DS(r);return{challenge:_S.parse({...o,...s!==void 0&&{meta:s},...c!==void 0&&{opaque:c},request:Ix(i)}),payload:n.payload,...n.source&&{source:n.source}}}catch{throw new PS}}function DS(e){if(e===void 0)return{};if(typeof e==`string`)return{opaque:e};if(!OS(e))throw Error(`Invalid opaque.`);return{meta:e,opaque:Rx(e)}}function OS(e){return typeof e!=`object`||!e||Array.isArray(e)?!1:Object.values(e).every(e=>typeof e==`string`)}function kS(e){let{challenge:t,payload:n,source:r}=e;return{challenge:t,payload:n,...r&&{source:r}}}function AS(e){let{meta:t,opaque:n,request:r,...i}=e.challenge,a=n??(t===void 0?void 0:Rx(t)),o={challenge:{...i,...a!==void 0&&{opaque:a},request:Rx(r)},payload:e.payload,...e.source&&{source:e.source}},s=JSON.stringify(o),c=D.fromString(s,{pad:!1,url:!0});return`${Ax.payment} ${c}`}function jS(e){return e.length>MS?null:e.split(`,`).map(e=>e.trim()).find(e=>RegExp(`^${Ax.payment}\\s+`,`i`).test(e))??null}var MS,NS,PS,FS=F((()=>{vS(),Fx(),zx(),MS=65536,NS=class extends Error{name=`MissingPaymentSchemeError`;constructor(){super(`Missing Payment scheme.`)}},PS=class extends Error{name=`InvalidCredentialEncodingError`;constructor(){super(`Invalid base64url or JSON.`)}}}));function IS(){let e=new Uint8Array(64);return crypto.getRandomValues(e),{created:Math.floor(Date.now()/1e3),nonce:D.fromBytes(e,{pad:!1,url:!0})}}var LS=F((()=>{}));function RS(e){if(e.length===0)throw TypeError(`Mppx client identity must configure at least one prover.`);for(let t of e)if(t.scope!==`*`&&!Array.isArray(t.scope))throw TypeError(`Identity prover scope must be "*" or an array of origins.`);let t=t=>{let n=new URL(t).origin;return e.filter(e=>e.scope===`*`||e.scope.includes(n))};async function n(e,n,r,i){let a=i?n.clone():n,o=t(n.url);if(o.length===0)return{request:a,response:await e(a)};let s=Object.freeze({...r,...IS()}),c=new Request(a,{redirect:n.redirect===`follow`?`error`:n.redirect});for(let e of o)c=await e.prove(c,s);return{request:c,response:await e(c)}}return{async send(e,r,i={}){let a=!(i.challenge!==void 0||US.some(e=>r.headers.has(e))||[...r.headers.values()].some(e=>jS(e)!==null))&&t(r.url).some(e=>e.retry),o=await n(e,r,i,a),{response:s}=o;if(!a||s.status<400||s.status===402)return o;let c=[],l=!1;for(let e of t(r.url)){if(!e.retry)continue;let t=s.clone();c.push(t),await e.retry(t)&&(l=!0)}return l?(zS([s,...c]),n(e,r,i,!1)):(zS(c),o)},async challenge(e,n,r){for(let i of t(r)){if(!i.prepare)continue;let t=e.clone();try{await i.prepare(t,n)}finally{zS([t])}}}}}function zS(e){for(let t of e)t.bodyUsed||t.body?.cancel().catch(()=>{})}function BS(e,t,n){return async(r,i)=>{let a=new Request(r,i),o=HS(a.headers)??n?.challenge,{response:s}=await t.send(e,a,{...n,challenge:o});if(s.status===402&&o)for(let e of VS(s))e.method===o.method&&e.intent===o.intent&&await t.challenge(s,{...n,challenge:e},a.url);return s}}function VS(e){try{return lS(e)}catch{return[]}}function HS(e){for(let[,t]of e){let e=jS(t);if(e)try{return ES(e).challenge}catch{}}}var US,WS=F((()=>{vS(),FS(),LS(),US=[`payment-signature`,`x-payment`]}));function GS(e){return Object.defineProperty(e,qS,{value:!0}),e}function KS(e){return!!e?.[qS]}var qS,JS=F((()=>{qS=Symbol.for(`mppx.x402.challenge`)}));function YS(e){let t={};for(let n of e){let e=t[n.name]??={};e[n.intent]=tC(n)}return t}function XS(e,t){let n=YS(e),r=cC(e,n,t),i=e.map((e,t)=>({intent:e.intent,method:e.name,q:r[tC(e)]??1,index:t}));return{definition:r,entries:i,header:QS(i),keys:n}}function ZS(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)=>oC(e,t))}function QS(e){return e.map(({method:e,intent:t,q:n})=>{let r=`${e}/${t}`;return n===1?r:`${r};q=${fC(n)}`}).join(`, `)}function $S(e,t,n){let r=eC(e,t,n)[0];if(r)return{challenge:r.challenge,method:r.method}}function eC(e,t,n){let r=new Map;for(let e of t){let t=tC(e),n=r.get(t);n?n.push(e):r.set(t,[e])}return e.flatMap((e,t)=>{let i=r.get(tC(e));if(!i)return[];let a=nC(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)=>aC(e.challenge)-aC(t.challenge)||t.match.q-e.match.q||e.index-t.index).map(e=>{let{match:t,...n}=e;return n})}function tC(e){let t=e.method??e.name;if(!t)throw Error(`Missing payment method name.`);return`${t}/${e.intent}`}function nC(e,t){let n;for(let r of t){if(!rC(e,r))continue;let t={...r,specificity:iC(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 rC(e,t){return(t.method===`*`||t.method===e.method)&&(t.intent===`*`||t.intent===e.intent)}function iC(e){return Number(e.method!==`*`)+Number(e.intent!==`*`)}function aC(e){return+!!KS(e)}function oC(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}`);pC(r,`method`),pC(i,`intent`);let a=1;for(let t of sC(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=uC(i,`Accept-Payment entry "${e}"`))}return{intent:i,method:r,q:a,index:t}}function sC(e){return e?e.split(/\s*;\s*/).filter(Boolean):[]}function cC(e,t,n){if(!n)return{};let r=typeof n==`function`?n(t):n,i=new Set(e.map(e=>tC(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]=lC(t,`payment preference "${e}"`)}return a}function lC(e,t){if(typeof e!=`number`||Number.isNaN(e)||!Number.isFinite(e))throw Error(`Invalid q-value for ${t}. Expected a finite number.`);return dC(e,t)}function uC(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 dC(Number(e),t)}function dC(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 fC(e){return e.toFixed(3).replace(/\.0+$/,``).replace(/(\.\d*?)0+$/,`$1`)}function pC(e,t){if(e!==`*`&&!/^[a-z0-9-]+$/.test(e))throw Error(`Invalid Accept-Payment ${t}: ${e}`)}var mC=F((()=>{JS()})),hC,gC,_C=F((()=>{hC=`org.paymentauth/credential`,gC=`org.paymentauth/payment-required`}));function vC(e){let{extensions:t,resource:n,...r}=e;return MC.parse(r)}var yC,bC,xC,SC,CC,wC,TC,EC,DC,OC,kC,AC,jC,MC,NC,PC,FC,IC,LC,RC,zC,BC,VC=F((()=>{Zx(),yC=`charge`,bC=[`exact`],xC=`eip155:`,SC=`x402:`,CC=`PAYMENT-REQUIRED`,wC=`PAYMENT-SIGNATURE`,TC=`PAYMENT-RESPONSE`,EC=J.string().check(J.minLength(1)),DC=J.number().check(J.refine(e=>e>0,`Must be positive`)),OC=J.string().check(J.regex(/^\d+$/,`Invalid atomic amount`)),kC=Kx(),AC=J.string().check(J.regex(RegExp(`^${xC}\\d+$`),`Invalid EVM CAIP-2 network`)),jC=J.object({description:J.optional(J.string()),iconUrl:J.optional(J.string()),mimeType:J.optional(J.string()),serviceName:J.optional(J.string()),tags:J.optional(J.array(J.string())),url:EC}),J.discriminatedUnion(`type`,[J.object({name:EC,type:J.literal(`eip3009`),version:EC}),J.object({name:J.optional(J.string()),type:J.literal(`permit2`),version:J.optional(J.string())})]),MC=J.object({amount:OC,asset:EC,extra:J.optional(J.record(J.string(),J.unknown())),maxTimeoutSeconds:DC,network:AC,payTo:EC,scheme:J.enum(bC)}),NC=J.object({info:J.record(J.string(),J.unknown()),schema:J.record(J.string(),J.unknown())}),PC=J.record(J.string(),NC),FC=J.object({accepts:J.array(MC).check(J.minLength(1)),error:J.optional(J.string()),extensions:J.optional(PC),resource:jC,x402Version:J.literal(2)}),IC=J.object({authorization:J.object({from:kC,nonce:qx(),to:kC,validAfter:OC,validBefore:OC,value:OC}),signature:Yx()}),LC=J.object({permit2Authorization:J.object({deadline:OC,from:kC,nonce:OC,permitted:J.object({amount:OC,token:kC}),spender:kC,witness:J.object({to:kC,validAfter:OC})}),signature:Yx()}),RC=J.union([IC,LC]),zC=J.object({accepted:MC,extensions:J.optional(PC),payload:RC,resource:J.optional(jC),x402Version:J.literal(2)}),J.object({extensions:J.optional(PC),extra:J.optional(J.record(J.string(),J.unknown())),invalidMessage:J.optional(J.string()),invalidReason:J.optional(J.string()),isValid:J.boolean(),payer:J.optional(J.string())}),BC=J.object({amount:J.optional(OC),errorMessage:J.optional(J.string()),errorReason:J.optional(J.string()),extensions:J.optional(PC),extra:J.optional(J.record(J.string(),J.unknown())),network:EC,payer:J.optional(J.string()),success:J.boolean(),transaction:J.string()})}));function HC(e,t,n){let r=new Headers(e.headers);for(let e of UC)e===q.authorization&&!r.get(e)?.startsWith(`Payment `)||r.delete(e);return r.set(t,n),{...e,headers:r}}var UC,WC=F((()=>{Fx(),VC(),UC=[q.authorization,CC,TC,wC]}));function GC(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}}function KC(e){let t=GC(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 qC(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 JC(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=_S.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 YC(e){if(e)return`error`in e?e.error?.code!==-32042&&e.error?.code!==-32043?void 0:JC(e.error.data):JC(e.result?._meta?.[gC])}function XC(e,t){return!e||e.id!==t?[]:YC(e)?.challenges??[]}async function ZC(e){let t=e.clone().body?.getReader();if(!t)return;let n=new TextDecoder,r=0,i=!1,a,o=P({onEvent(e){if(!(i||!e.data)&&(i=!0,!(e.event&&e.event!==`message`)))try{a=qC(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>tw)return;o.feed(n.decode(s,{stream:!0}))}}finally{t.cancel().catch(()=>{})}}async function QC(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 qC(JSON.parse(i+n.decode()));if(r+=a.byteLength,r>tw)return;i+=n.decode(a,{stream:!0})}}catch{return}finally{t.cancel().catch(()=>{})}}function $C(e){let t=nw.get(e);if(t)return t;let n=(async()=>{let t=e.headers.get(`content-type`)?.toLowerCase()??``;if(!(Number(e.headers.get(`content-length`))>tw)){if(t.includes(`application/json`))return QC(e);if(t.includes(`text/event-stream`))return ZC(e)}})();return nw.set(e,n),n}function ew(){return{getChallenges(e,t){let n=KC(t);return e.status===402||n===void 0?[]:$C(e).then(e=>XC(e,n))},setCredential(e,t){let n=JSON.parse(e.body),r=ES(t);return{...e,body:JSON.stringify({...n,params:{...n.params,_meta:{...n.params?._meta,[hC]:r}}})}}}}var tw,nw,rw=F((()=>{vS(),FS(),_C(),WC(),tw=1048576,nw=new WeakMap}));function iw(){return{getChallenges(e){let t=e.headers.get(q.wwwAuthenticate);return e.status!==402||!t||!sS(t)?[]:lS(e)},setCredential(e,t,n){return HC(e,n?.challenge?pS(n.challenge):q.authorization,t)}}}var aw=F((()=>{vS(),Fx(),WC()}));function ow(e){return{encode(t){return D.fromString(JSON.stringify(e.parse(t)))},decode(t){try{return e.parse(JSON.parse(D.toString(t)))}catch{throw new sw}}}}var sw,cw=F((()=>{sw=class extends Error{name=`InvalidJsonHeaderError`;constructor(){super(`Invalid base64 JSON header.`)}}}));function lw(e){try{let t=JSON.parse(D.toString(e));return hw(t)}catch{throw new sw}}var uw,dw,fw,pw,mw,hw,gw=F((()=>{cw(),VC(),uw=ow(FC),dw=ow(zC),fw=ow(BC),pw=uw.encode,uw.decode,mw=dw.encode,dw.decode,fw.encode,fw.decode,hw=e=>{if(!e||typeof e!=`object`||Array.isArray(e))throw new sw;let t=e;if(t.x402Version!==2||!Array.isArray(t.accepts))throw new sw;let n=jC.parse(t.resource),r=t.extensions===void 0?void 0:PC.safeParse(t.extensions).data;return{accepts:t.accepts,...r?{extensions:r}:{},resource:n,x402Version:2}}}));function _w(){return{getChallenges(e){if(e.status!==402)return[];let t=e.headers.get(CC);if(!t)return[];let n=lw(t);return n.accepts.flatMap((e,t)=>{let r=MC.safeParse(e);if(!r.success)return[];let i=r.data;return GS(Qx({id:`${SC}${t}`,intent:yC,method:`evm`,realm:new URL(n.resource.url).host,request:{...i,...n.extensions?{extensions:n.extensions}:{},resource:n.resource}}))})},setCredential(e,t){return HC(e,wC,t)}}}var vw=F((()=>{vS(),gw(),JS(),VC(),WC()}));function yw(e){return e}function bw(){let e=[iw(),_w(),ew()],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 yw({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)}})}var xw=F((()=>{rw(),aw(),WC(),vw()}));function Sw(e,t){return Ew.set(e,t),e}function Cw(e){return Ew.has(e)}function ww(e,t){return Promise.resolve(Ew.get(e)?.(t))}function Tw(e){return Ew.get(e)}var Ew,Dw=F((()=>{Ew=new WeakMap}));function Ow(e,t){return Fw.set(e,t),e}function kw(e){Fw.delete(e)}function Aw(e,t,n){Fw.has(e)&&Iw.set(t,n)}function jw(e){return Iw.get(e)}function Mw(e,t){return Promise.resolve(Fw.get(e)?.(t)??t.response)}function Nw(e,t){return Lw.set(e,t),e}function Pw(e,t){try{return Lw.get(e)?.(t)}catch{return}}var Fw,Iw,Lw,Rw=F((()=>{Fw=new WeakMap,Iw=new WeakMap,Lw=new WeakMap}));function zw(e,t,n){if(!Vw(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&&Hw(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 Bw(e,t){if(Vw(e)&&!t?.includes(e.realm))throw Error(`Refusing to sign Tempo proof for untrusted realm ${JSON.stringify(e.realm)}. Add it to \`trustedTempoProofRealms\` if this server is expected to issue it.`)}function Vw(e){if(e.method!==`tempo`||e.intent!==`charge`)return!1;try{return BigInt(e.request.amount)===0n}catch{return!1}}function Hw(e){try{return new URL(e).origin.toLowerCase()}catch{return e.toLowerCase()}}var Uw=F((()=>{}));async function Ww(e){if(!e.body)return e;let t=e.clone().body.getReader(),n=[],r=0,i=!1,a=setTimeout(()=>{i=!0,t.cancel().catch(()=>{})},NT);try{for(;;){let{done:e,value:a}=await t.read();if(e)break;if(n.push(a),r+=a.byteLength,r>MT){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(PT,`true`);let s=new Response(new Blob(n).slice(0,MT),{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 Gw(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 Kw(e){let{acceptPayment:t,acceptPaymentPolicy:n=`always`,fetch:r=globalThis.fetch,maxPaymentRetries:i=jT,methods:a,onChallenge:o,orderChallenges:s,transport:c=bw(),trustedTempoProofRealms:l}=e,u=e.identity??(e.fetch&&gT(e.fetch)),d=e.eventDispatcher??Yw(),f=t??XS(a),p=_T(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=hT(e,t?.headers),_=g.has(q.acceptPayment),v=ST(g,f),y=pT(e,t,g),b=fT(e,t,g,v.header,_,n),x=await m(vT(b.input),b.init),S=mT(b.init,await y);if(!await c.isPaymentRequired(x,S))return x;let C=t?.context,{context:w,orderChallenges:T,...ee}=S??{},te,E,ne,D,O;try{for(let n=0;n<i;n++){E=await c.getChallenges(x,S);let i=(await CT(eC(E,a,v.entries),T??s))[0];if(!i){if(await Gw(D,{challenges:E,response:x,status:`rejected`}),n>0)return x;throw Error(`No method found for challenges: ${E.map(e=>`${e.method}.${e.intent}`).join(`, `)}. Available: ${a.map(e=>`${e.name}.${e.intent}`).join(`, `)}`)}let f=i.challenge;te=f,ne=i.method,te.expires&&wS(te.expires,te.id),await u?.challenge(x,{challenge:f},DT(b.input).href);let g=OT(x,b.input,b.input);zw(f,()=>DT(g),l);let _=D,y=$x(f),w=_?.method===i.method&&_?.key===y,re=!1;if(_){let e=await Gw(_,{challenges:E,response:x,status:w?`pending`:`rejected`});re=w&&!e}D=re?_:void 0;let k=eT(async n=>{if(n===void 0&&re&&_)return _.promise;re&&_&&(await Gw(_,{status:`rejected`}),D=void 0);let r=n??C;if(!Cw(i.method))return xT(f,i.method,r);let a={prepare:()=>ww(i.method,{challenge:f,context:r,fetch:u?BS(p,u,{challenge:f}):p,input:g,signal:yT(e,t)})},o=a.prepare().then(()=>xT(f,i.method,r,a));return D={attempt:a,key:n===void 0?y:void 0,method:i.method,promise:o},o}),A=await d.emit(`challenge.received`,tT({challenge:f,challenges:E,createCredential:k,init:t,input:e,method:i.method,response:x}))??(o?await o(te,{createCredential:k}):void 0)??await k(),j=D;j&&await j.promise.catch(()=>void 0)!==A&&(await Gw(j,{status:`rejected`}),D=void 0),bT(A),await d.emit(`credential.created`,nT({challenge:f,credential:A,init:t,input:e,method:i.method,response:x}));let ie=e=>new SS({cause:e,challenge:f,credential:A,transactionHash:Pw(i.method,A)});try{x=await m(g,{...c.setCredential({...ee,headers:b.headers},A,{challenge:f}),redirect:`manual`},{challenge:f})}catch(e){throw O=ie(e),e}let ae=await c.isPaymentRequired(x,S);if(ae||(await Gw(j,{response:x,status:x.status>=300&&x.status<400?`pending`:x.ok?`accepted`:`rejected`}),D=void 0),x.ok&&Xw(d,`payment.response`)&&await d.emit(`payment.response`,rT({challenge:f,credential:A,init:t,input:e,method:i.method,response:x})),!ae){if(x.status>=500&&Xw(d,`payment.failed`)){try{x=await Ww(x)}catch(e){throw O=ie(e),x=new Response(null,{headers:x.headers,status:x.status,statusText:x.statusText}),e}await d.emit(`payment.failed`,iT({challenge:f,challenges:E,error:ie(),init:t,input:e,method:i.method,response:x}))}return x.ok?Mw(i.method,{challenge:f,credential:A,fetch:p,headers:b.headers,input:g,...r?{refetch:()=>h(vT(b.input),t,!1)}:{},response:x,signal:yT(e,t)}):x}}E=void 0;try{E=await c.getChallenges(x,S)}catch{}return await Gw(D,{challenges:E,response:x,status:`rejected`}),x}catch(n){throw await Gw(D,{challenges:E,response:x,status:`rejected`}),await d.emit(`payment.failed`,iT({challenge:te,challenges:E,error:O??n,init:t,input:e,method:ne,response:x})),n}},g=(e,t)=>h(e,t,!0);return g[kT]=p,u&&(g[AT]=u),g}function qw(e){let t=Object.getOwnPropertyDescriptor(globalThis,`fetch`);if(!t||!t.writable&&!t.set)throw Error(`globalThis.fetch is not writable`);FT||=globalThis.fetch,globalThis.fetch=Kw({...e,acceptPaymentPolicy:e.acceptPaymentPolicy??(ET()?`same-origin`:`always`),fetch:_T(globalThis.fetch)})}function Jw(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 Yw(){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 Zw(t,n);if(typeof e==`string`&&e.length>0){r=e;break}}return await $w(e[`*`],t,n),r}case`credential.created`:await Qw(e[`credential.created`],n),await $w(e[`*`],t,n);return;case`payment.failed`:await Qw(e[`payment.failed`],n),await $w(e[`*`],t,n);return;case`payment.response`:await Qw(e[`payment.response`],n),await $w(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 IT.set(t,t=>e[t].size>0||e[`*`].size>0),t}function Xw(e,t){return IT.get(e)?.(t)??!0}async function Zw(e,t){try{return await e(t)}catch{return}}async function Qw(e,t){for(let n of e)try{await n(t)}catch{}}async function $w(e,t,n){await Qw(e,Object.freeze({name:t,payload:n}))}function eT(e){let t;return n=>(t??=e(n),t)}function tT(e){return Object.freeze({challenge:lT(e.challenge),challenges:e.challenges.map(e=>lT(e)),createCredential:e.createCredential,init:aT(e.init),input:oT(e.input),method:sT(e.method),response:cT(e.response)})}function nT(e){return Object.freeze({challenge:lT(e.challenge),credential:e.credential,init:aT(e.init),input:oT(e.input),method:sT(e.method),...e.response===void 0?{}:{response:cT(e.response)}})}function rT(e){return Object.freeze({challenge:lT(e.challenge),credential:e.credential,init:aT(e.init),input:oT(e.input),method:sT(e.method),response:cT(e.response)})}function iT(e){return Object.freeze({...e.challenge?{challenge:lT(e.challenge)}:{},...e.challenges?{challenges:e.challenges.map(e=>lT(e))}:{},error:e.error,init:aT(e.init),input:oT(e.input),...e.method?{method:sT(e.method)}:{},...e.response===void 0?{}:{response:cT(e.response)}})}function aT(e){if(e)return dT({...e,...e.headers?{headers:new Headers(e.headers)}:{}})}function oT(e){if(e instanceof Request)try{return e.clone()}catch{return e}return e instanceof URL?new URL(e):e}function sT(e){return dT(Object.assign({},e))}function cT(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 lT(e)}function lT(e){try{return uT(structuredClone(e))}catch{return dT(e)}}function uT(e){if(!e||typeof e!=`object`||Object.isFrozen(e))return e;Object.freeze(e);for(let t of Object.values(e))uT(t);return e}function dT(e){return!e||typeof e!=`object`||Object.isFrozen(e)||Object.freeze(e),e}function fT(e,t,n,r,i,a){let o=!!r&&!i&&wT(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(q.acceptPayment,r),t?(t.headers=s,{headers:s,init:t,input:e}):{headers:s,init:o?{headers:s}:void 0,input:e}}function pT(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 mT(e,t){return t===void 0?e:{...e,body:t}}function hT(e,t){return t?new Headers(t):new Headers(e instanceof Request?e.headers:void 0)}function gT(e){return e[AT]}function _T(e){let t=e;for(;t[kT];)t=t[kT];return t}function vT(e){if(!(e instanceof Request)||!e.body||e.bodyUsed)return e;try{return e.clone()}catch{return e}}function yT(e,t){if(t?.signal!==null)return t?.signal===void 0?e instanceof Request?e.signal:void 0:t.signal}function bT(e){if(!e.trim())throw Error(`Credential header value must be non-empty`);if(e.includes(`\r`)||e.includes(`
|
|
224
|
+
`))throw Error(`Credential header value contains illegal newline characters`)}async function xT(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&&Aw(t,a,r),t.createCredential(a)}function ST(e,t){let n=e.get(q.acceptPayment);if(!n)return t;try{return{...t,entries:ZS(n),header:n}}catch{return t}}async function CT(e,t){return t?t(e):e}function wT(e,t){if(t===`always`)return!0;if(t===`never`)return!1;let n=DT(e);return t===`same-origin`?!ET()||n.origin===globalThis.location.origin:t.origins.some(e=>TT(n,e))}function TT(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 ET(){return globalThis.location!==void 0}function DT(e){return e instanceof URL?e:e instanceof Request?new URL(e.url):new URL(e,ET()?globalThis.location.href:void 0)}function OT(e,t,n){if(!e.url)return t;let r=new URL(e.url),i=DT(n);if(r.origin!==i.origin)throw Error(`Refusing to send payment credential across redirect from ${i.origin} to ${r.origin}`);return e.url}var kT,AT,jT,MT,NT,PT,FT,IT,LT=F((()=>{vS(),Fx(),CS(),TS(),WS(),mC(),xw(),Dw(),Rw(),Uw(),kT=Symbol.for(`mppx.fetch.wrapper`),AT=Symbol.for(`mppx.fetch.identity`),jT=3,MT=65536,NT=2e3,PT=`Mppx-Body-Truncated`,IT=new WeakMap}));Ox(),Fx(),TS(),WS(),mC(),LT(),Dw(),Uw(),xw();const RT=new WeakMap;function zT(e){let{identity:t,maxPaymentRetries:n,onChallenge:r,orderChallenges:i,polyfill:a=!0,acceptPaymentPolicy:o=a&&globalThis.location!==void 0?`same-origin`:`always`,transport:s=bw(),trustedTempoProofRealms:c}=e;if(`attestation`in e)throw TypeError("Mppx client `attestation` was replaced by `identity: [prover]`.");let l=_T(e.fetch??globalThis.fetch),u=t?RS(t):e.fetch&&gT(e.fetch),d=e.methods.flat(),f=XS(d,e.paymentPreferences),p=Yw(),m=r,h={acceptPayment:f,acceptPaymentPolicy:o,...e.fetch&&{fetch:l},...u&&{identity:u},eventDispatcher:p,...n!==void 0&&{maxPaymentRetries:n},...m&&{onChallenge:m},...i&&{orderChallenges:i},methods:d,transport:s,...c&&{trustedTempoProofRealms:c}},g=Kw(h);a&&qw(h);function _(e){return p.on(`challenge.received`,e)}function v(e){return p.on(`credential.created`,e)}function y(e){return p.on(`payment.failed`,e)}function b(e){return p.on(`payment.response`,e)}async function x(e,t){let n=$T(e),r=await s.getChallenges(e,t?.request),a=Object.freeze(r.map(e=>eE(e))),o=rE(f.entries,t?.acceptPayment),l,u;try{let f=(await iE(eC(r,d,o),t?.orderChallenges??i))[0];if(!f)throw Error(`No method found for challenges: ${r.map(e=>`${e.method}.${e.intent}`).join(`, `)}. Available: ${d.map(e=>`${e.name}.${e.intent}`).join(`, `)}`);let m=f.challenge;l=a[f.index],u=f.method,l.expires&&wS(l.expires,l.id);let h=oE(e);h?zw(l,h,c):s.name===`mcp`&&Bw(l,c&&Object.values(c));let g=l,_=u,v=JT(async e=>{try{g.expires&&wS(g.expires,g.id);let t=JT(t=>aE(g,_,t??e)),i=await p.emit(`challenge.received`,YT({challenge:g,challenges:r,createCredential:t,method:_,response:n}))??await t();return bT(i),await p.emit(`credential.created`,XT({challenge:g,credential:i,method:_,response:n})),i}catch(e){throw await p.emit(`payment.failed`,ZT({challenge:g,challenges:r,error:e,method:_,response:n})),e}}),y=Object.freeze({challenge:g,challenges:a,createCredential:v,method:QT(_),setCredential(e,t){return bT(t),s.setCredential(e,t,{challenge:m})}});return RT.set(y,_),y}catch(e){throw await p.emit(`payment.failed`,ZT({challenge:l,challenges:r,error:e,method:u,response:n})),e}}async function S(e,t,n){let{maxRedirects:r=20,requirePayment:i=!1,...a}=n??{},d=await UT({acceptPayment:f.header,acceptPaymentPolicy:o,fetch:l,init:t,input:e,maxRedirects:r,identity:u}),p=WT(d.replayRequest,d.body);if(!await s.isPaymentRequired(d.response,p)){if(i)throw Error(`Response does not require payment.`);return Object.freeze({payment:void 0,request:d.request,response:d.response,redirects:d.redirects})}let m=await x(d.response,{...a,request:p});zw(m.challenge,new URL(d.replayRequest.url),c);let h=RT.get(m)??m.method,g=JT(async e=>(await u?.challenge(d.response,{challenge:m.challenge},d.replayRequest.url),Cw(h)&&await ww(h,{challenge:m.challenge,context:e,fetch:u?BS(l,u,{challenge:m.challenge}):l,input:d.replayRequest,signal:d.replayRequest.signal}),m.createCredential(e))),_=Object.freeze({...m,createCredential:g,async pay(e){let t=await g(e),n=m.setCredential(WT(d.replayRequest,d.body),t),r=new Request(d.replayRequest.url,{...n,redirect:`manual`});if(!u)return l(r);let{response:i}=await u.send(l,r,{challenge:m.challenge});return i}});return Object.freeze({payment:_,request:d.request,response:d.response,redirects:d.redirects})}return{fetch:g,rawFetch:l,methods:d,transport:s,on:p.on,onChallengeReceived:_,onCredentialCreated:v,onPaymentFailed:y,onPaymentResponse:b,preparePayment:x,prepareRequest:S,async createCredential(e,t,n){return(await x(e,n)).createCredential(t)}}}const BT=new Set([301,302,303,307,308]),VT=[`content-encoding`,`content-language`,`content-length`,`content-location`,`content-type`,`transfer-encoding`],HT=[`authorization`,`cookie`,`cookie2`,`host`,`payment-authorization`,`payment-signature`,`proxy-authorization`,`x-payment`];async function UT(e){let{acceptPayment:t,acceptPaymentPolicy:n,fetch:r,identity:i,init:a,input:o,maxRedirects:s}=e;if(!Number.isInteger(s)||s<0)throw TypeError(`maxRedirects must be a non-negative integer.`);let c=new Request(o,{...a,redirect:`manual`}),l=c.headers.has(q.acceptPayment),u=await GT(c,a?.body),d=[];for(;;){c=KT(c,t,l,n);let{request:e,response:a}=await(async()=>{if(i)return i.send(r,c.clone());let e=c.clone();return{request:e,response:await r(e)}})();if(a.type===`opaqueredirect`||a.status===0)throw Error(`prepareRequest requires a runtime that exposes manual redirect responses.`);if(!BT.has(a.status))return{body:u,replayRequest:c,request:e,response:a,redirects:Object.freeze(d)};let o=a.headers.get(`location`);if(!o)return{body:u,replayRequest:c,request:e,response:a,redirects:Object.freeze(d)};if(d.length>=s)throw await a.body?.cancel(),Error(`Payment request exceeded ${s} redirects.`);let f=new URL(c.url),p=new URL(o,f);if(f.protocol===`https:`&&p.protocol!==`https:`)throw await a.body?.cancel(),Error(`Payment request refused HTTPS downgrade redirect to ${p.href}`);let m=new Headers(c.headers),h=c.method;if((a.status===301||a.status===302)&&h===`POST`||a.status===303&&h!==`GET`&&h!==`HEAD`){h=`GET`,u=void 0;for(let e of VT)m.delete(e)}if(f.origin!==p.origin)for(let e of[...m.keys()]){let t=m.get(e)??``;(HT.includes(e)||t.startsWith(`Payment `))&&m.delete(e)}d.push(Object.freeze({from:f.href,status:a.status,to:p.href})),await a.body?.cancel(),c=new Request(p,qT(c,m,h,u))}}function WT(e,t){return qT(e,new Headers(e.headers),e.method,t)}async function GT(e,t){if(typeof t==`string`)return t;if(!e.body)return;let n=e.headers.get(`accept`)?.toLowerCase()??``;return e.headers.has(`mcp-method`)||n.includes(`application/json`)&&n.includes(`text/event-stream`)?e.clone().text():e.clone().arrayBuffer()}function KT(e,t,n,r){if(n)return e;let i=new Headers(e.headers);return i.delete(q.acceptPayment),t&&wT(e,r)&&i.set(q.acceptPayment,t),new Request(e,{headers:i})}function qT(e,t,n,r){return{...r?{body:r}:{},cache:e.cache,credentials:e.credentials,headers:t,integrity:e.integrity,keepalive:e.keepalive,method:n,mode:e.mode,redirect:`manual`,referrer:e.referrer,referrerPolicy:e.referrerPolicy,signal:e.signal}}function JT(e){let t;return n=>(t??=e(n),t)}function YT(e){return Object.freeze({challenge:eE(e.challenge),challenges:e.challenges.map(e=>eE(e)),createCredential:e.createCredential,method:QT(e.method),response:$T(e.response)})}function XT(e){return Object.freeze({challenge:eE(e.challenge),credential:e.credential,method:QT(e.method),response:$T(e.response)})}function ZT(e){return Object.freeze({...e.challenge?{challenge:eE(e.challenge)}:{},...e.challenges?{challenges:e.challenges.map(e=>eE(e))}:{},error:e.error,...e.method?{method:QT(e.method)}:{},response:$T(e.response)})}function QT(e){return nE(Object.assign({},e))}function $T(e){return e instanceof Response?e.body===null?e.clone():new Response(null,{headers:e.headers,status:e.status,statusText:e.statusText}):eE(e)}function eE(e){try{let t=structuredClone(e);if(e&&t&&typeof e==`object`&&typeof t==`object`)for(let n of Object.getOwnPropertySymbols(e)){let r=Object.getOwnPropertyDescriptor(e,n);r&&Object.defineProperty(t,n,r)}return tE(t)}catch{return nE(e)}}function tE(e){if(!e||typeof e!=`object`||Object.isFrozen(e))return e;Object.freeze(e);for(let t of Object.values(e))tE(t);return e}function nE(e){return!e||typeof e!=`object`||Object.isFrozen(e)||Object.freeze(e),e}function rE(e,t){return t?typeof t==`string`?ZS(t):t:e}async function iE(e,t){return t?t(e):e}async function aE(e,t,n){let r=t.context&&n!==void 0?t.context.parse(n):void 0;return t.createCredential(r===void 0?{challenge:e}:{challenge:e,context:r})}function oE(e){if(typeof Response<`u`&&e instanceof Response&&e.url)return new URL(e.url)}function sE(){return J.string().check(J.regex(cE,`Invalid URI or path`))}var cE,lE,uE,dE,fE,pE,mE,hE,gE,_E=F((()=>{Zx(),cE=/^([a-zA-Z][a-zA-Z\d+.-]*:\/\/\S+|\/\S*)$/,lE=new Set([`amount`,`currency`,`description`,`intent`,`method`]),uE=J.looseObject({amount:J.optional(J.union([J.null(),J.string().check(J.regex(/^(0|[1-9][0-9]*)$/,`Invalid amount`))])),currency:J.optional(J.string()),description:J.optional(J.string()),intent:J.optional(J.string()),method:J.optional(J.string())}),dE=J.pipe(J.looseObject({amount:J.optional(J.union([J.null(),J.string().check(J.regex(/^(0|[1-9][0-9]*)$/,`Invalid amount`))])),currency:J.optional(J.string()),description:J.optional(J.string()),intent:J.optional(J.string()),method:J.optional(J.string()),offers:J.optional(J.array(uE).check(J.minLength(1)))}).check(J.refine(e=>e.offers===void 0||Object.keys(e).every(e=>e===`offers`||!lE.has(e)),`Cannot mix offers with flat payment info fields`)),J.transform(e=>{if(e.offers)return{offers:e.offers};let t={};for(let[n,r]of Object.entries(e))n!==`offers`&&(lE.has(n)||r!==void 0)&&(t[n]=r);return{offers:[t]}})),fE=J.looseObject({apiReference:J.optional(sE()),homepage:J.optional(sE()),llms:J.optional(sE())}),pE=J.looseObject({categories:J.optional(J.array(J.string())),docs:J.optional(fE)}),mE=J.looseObject({"x-payment-info":J.optional(dE),requestBody:J.optional(J.unknown()),responses:J.optional(J.record(J.string(),J.unknown())),summary:J.optional(J.string())}),hE=J.looseObject({delete:J.optional(mE),get:J.optional(mE),head:J.optional(mE),options:J.optional(mE),patch:J.optional(mE),post:J.optional(mE),put:J.optional(mE),trace:J.optional(mE)}),gE=J.looseObject({openapi:J.string(),info:J.looseObject({title:J.string(),version:J.string()}),"x-service-info":J.optional(pE),paths:J.optional(J.record(J.string(),hE))})}));_E();function vE(e){let t=[],n=gE.safeParse(e);if(!n.success){for(let e of n.error.issues)t.push({message:e.message,path:e.path.map(String).join(`.`)||`(root)`,severity:`error`});return t}let r=n.data.paths;if(!r)return t;for(let[e,n]of Object.entries(r))for(let[r,i]of Object.entries(n)){if(!i||typeof i!=`object`||Array.isArray(i))continue;let n=i,a=`paths.${e}.${r}`,o=n[`x-payment-info`];if(!o)continue;let s=dE.safeParse(o);if(!s.success){for(let e of s.error.issues){let n=e.path.length>0?`.${e.path.map(String).join(`.`)}`:``;t.push({message:e.message,path:`${a}.x-payment-info${n}`,severity:`error`})}continue}let c=n.responses;(!c||!(`402`in c))&&t.push({message:`Operation with x-payment-info MUST have a 402 response`,path:`${a}.responses`,severity:`error`});let l=r.toUpperCase();!n.requestBody&&(l===`POST`||l===`PUT`||l===`PATCH`)&&t.push({message:`Operation with x-payment-info has no requestBody`,path:a,severity:`warning`})}return t}function yE(e){return e}function bE(e,t){let{canHandleChallenge:n,context:r,createCredential:i}=t;return{...e,canHandleChallenge:n,context:r,createCredential:i}}var xE=F((()=>{}));function SE(e){return J.refine(e=>{let{amount:t,decimals:n}=e;return N(t,n)>0n},e)}function CE(e){let{periodCount:t,periodUnit:n}=e;try{let e=DE[n];return e!==void 0&&BigInt(t)*e<=EE}catch{return!1}}var wE,TE,EE,DE,OE,kE,AE,jE,ME,NE,PE,FE,IE,LE=F((()=>{Fx(),xE(),Zx(),wE=[`push`,`pull`],TE=J.object({amount:Vx(),memo:J.optional(qx()),recipient:J.pipe(J.string(),J.transform(e=>e))}),EE=(1n<<64n)-1n,DE={dev_second:1n,day:86400n,week:604800n},OE=J.pipe(Kx(),J.transform(e=>e.toLowerCase())),kE=J.object({accessKeyAddress:OE,keyType:J.enum([`p256`,`secp256k1`,`webAuthn`]),keyToken:J.optional(J.pipe(J.string().check(J.regex(/^0x[0-9a-fA-F]{120}$/)),J.transform(e=>e)))}),AE=J.object({accessKey:J.optional(kE),chainId:J.optional(J.number())}),jE=Ux(`subscriptionExpires must be a valid date`).check(J.refine(e=>e.getTime()%1e3==0,`subscriptionExpires must be representable as whole seconds`)),ME=J.enum([`dev_second`,`day`,`week`]),NE=J.pipe(J.union([J.string(),J.bigint(),J.custom(e=>typeof e==`number`&&Number.isSafeInteger(e))]),J.transform(e=>e.toString())).check(J.regex(/^[1-9]\d*$/,`Invalid periodCount`),J.refine(e=>{try{return BigInt(e)<=EE}catch{return!1}},`periodCount exceeds uint64`)),PE=yE({name:`tempo`,intent:`charge`,schema:{credential:{payload:J.discriminatedUnion(`type`,[J.object({hash:qx(),type:J.literal(`hash`)}),J.object({signature:Yx(),type:J.literal(`transaction`)}),J.object({signature:Yx(),type:J.literal(`proof`)})])},request:J.pipe(J.object({machineTokenEnabled:J.optional(J.boolean()),amount:Vx(),chainId:J.optional(J.number()),currency:J.string(),decimals:J.number(),description:J.optional(J.string()),externalId:J.optional(J.string()),feePayer:J.optional(J.pipe(J.union([J.boolean(),J.custom()]),J.transform(e=>typeof e==`object`||e))),memo:J.optional(J.never()),recipient:J.optional(J.string()),splits:J.optional(J.array(TE).check(J.minLength(1),J.maxLength(10))),supportedModes:J.optional(J.array(J.enum(wE)).check(J.minLength(1)))}).check(J.refine(({amount:e,decimals:t,splits:n})=>{if(!n)return!0;let r=N(e,t),i=n.reduce((e,n)=>e+N(n.amount,t),0n);return n.every(e=>N(e.amount,t)>0n)&&i<r},`Invalid splits`)),J.transform(({machineTokenEnabled:e,amount:t,chainId:n,decimals:r,feePayer:i,memo:a,splits:o,supportedModes:s,...c})=>({...c,amount:N(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:N(e.amount,r).toString()}))},...s!==void 0&&{supportedModes:s}}}:{}})))}}),FE=yE({name:`tempo`,intent:`session`,schema:{credential:{payload:J.discriminatedUnion(`action`,[J.object({action:J.literal(`open`),authorizedSigner:J.optional(J.string()),channelId:qx(),cumulativeAmount:Vx(),descriptor:J.optional(J.custom()),signature:Yx(),transaction:Yx(),type:J.literal(`transaction`)}),J.object({action:J.literal(`topUp`),additionalDeposit:Vx(),channelId:qx(),descriptor:J.optional(J.custom()),transaction:Yx(),type:J.literal(`transaction`)}),J.object({action:J.literal(`voucher`),channelId:qx(),cumulativeAmount:Vx(),descriptor:J.optional(J.custom()),signature:Yx()}),J.object({action:J.literal(`close`),channelId:qx(),closeSignature:Yx(),cumulativeAmount:Vx(),descriptor:J.optional(J.custom()),signature:Yx()})])},request:J.pipe(J.object({amount:Vx(),chainId:J.optional(J.number()),channelId:J.optional(qx()),currency:J.string(),decimals:J.number(),escrowContract:J.optional(J.string()),feePayer:J.optional(J.pipe(J.union([J.boolean(),J.custom()]),J.transform(e=>typeof e==`object`||e))),feeToken:J.optional(Kx()),minVoucherDelta:J.optional(Vx()),operator:J.optional(Kx()),recipient:J.optional(J.string()),sessionProtocol:J.optional(J.enum([Px.v2,Px.v1])),sessionSnapshot:J.optional(J.custom()),suggestedDeposit:J.optional(Vx()),unitType:J.string()}).check(J.refine(({amount:e,decimals:t})=>N(e,t)>0n,`Session amount must be greater than 0`)),J.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,...f})=>({...f,amount:N(e,r).toString(),...d?{suggestedDeposit:N(d,r).toString()}:{},methodDetails:{escrowContract:i,...n!==void 0&&{channelId:n},...s!==void 0&&{minVoucherDelta:N(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&&{[Nx.sessionProtocol]:l},...u!==void 0&&{[Nx.sessionSnapshot]:u}}})))}}),IE=yE({name:`tempo`,intent:`subscription`,schema:{credential:{payload:J.object({signature:Yx(),type:J.literal(`keyAuthorization`)})},request:J.pipe(J.object({amount:Vx(),accessKey:J.optional(kE),chainId:J.optional(J.number()),currency:OE,decimals:J.number(),description:J.optional(J.string()),externalId:J.optional(J.string()),methodDetails:J.optional(AE),periodCount:NE,periodUnit:ME,recipient:OE,subscriptionExpires:jE}).check(SE(`Subscription amount must be greater than 0`),J.refine(CE,`Subscription period exceeds uint64`)),J.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:N(t,r).toString(),subscriptionExpires:a.toISOString(),...Object.keys(s).length>0?{methodDetails:s}:{}}}))}})}));function RE(e){return e>=0n&&e<=rD}function zE(e){if(!/^\d{1,29}$/.test(e))return;let t=BigInt(e);return RE(t)?t:void 0}function BE(e){return VE(e),e}function VE(e){if(!RE(e))throw Error(`Value ${e} is outside uint96 bounds.`)}function HE(e){return typeof e==`object`&&!!e}function UE(e){return typeof e==`string`&&iD.has(e)}function WE(e){if(typeof e!=`object`||!e)return!1;let t=e;return!(typeof t.channelId!=`string`||t.action!==void 0&&!UE(t.action))}function GE(e,t=`No session credential context available.`){if(!WE(e))throw Error(t);return e}function KE(e){let t=e.request.amount;if(typeof t!=`string`)throw Error(`Session challenge is missing amount.`);return BigInt(t)}function qE(e){return HE(e)?typeof e.channelId==`string`&&typeof e.requiredCumulative==`string`&&typeof e.acceptedCumulative==`string`&&typeof e.deposit==`string`:!1}function JE(e){return HE(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 YE(e){let t=D.toString(e),n=JSON.parse(t);if(!JE(n))throw Error(`Invalid session receipt.`);return n}function XE(e){return e.headers.get(`content-type`)?.toLowerCase().startsWith(`text/event-stream`)??!1}function ZE(e){let t=`message`,n=[];for(let r of e.split(`
|
|
225
225
|
`))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(`
|
|
226
|
-
`);switch(t){case`message`:return{type:`message`,data:r};case`payment-need-voucher`:{let e=ZE(r);return KE(e)?{type:`payment-need-voucher`,data:e}:null}case`payment-receipt`:{let e=ZE(r);return qE(e)?{type:`payment-receipt`,data:e}:null}default:return{type:`message`,data:r}}}function ZE(e){try{return JSON.parse(e)}catch{return null}}function QE(e){return JSON.stringify({mpp:`authorization`,authorization:e})}function $E(){return JSON.stringify({mpp:`payment-close-request`})}function eD(e){let t=tD(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`&&qE(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`&&KE(t.data)?{mpp:`payment-need-voucher`,data:t.data}:t.mpp===`payment-receipt`&&qE(t.data)?{mpp:`payment-receipt`,data:t.data}:null:null}function tD(e){try{let t=JSON.parse(e);return typeof t!=`object`||!t?null:t}catch{return null}}var nD,rD,iD,aD=F((()=>{nD=(1n<<96n)-1n,rD=new Set([`open`,`topUp`,`voucher`,`close`]),iD=`0x4d50500000000000000000000000000000000000`}));function oD(e){return pD.encode(e)}function sD(e){return pD.decode(e)}var cD,lD,uD,dD,fD,pD,mD=F((()=>{sw(),Zx(),cD=J.custom(e=>typeof e==`string`&&de(e,{strict:!1})),lD=J.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]{64}$/.test(e)),uD=J.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]+$/.test(e)),dD=J.object({authorizedSigner:cD,expiringNonceHash:lD,operator:cD,payee:cD,payer:cD,salt:lD,token:cD}),fD=J.object({acceptedCumulative:J.string(),chainId:J.number(),channelId:lD,closeRequestedAt:J.optional(J.string()),deposit:J.string(),descriptor:dD,escrow:cD,highestVoucher:J.optional(J.object({channelId:lD,cumulativeAmount:J.string(),signature:uD})),requiredCumulative:J.string(),settled:J.string(),spent:J.string(),units:J.optional(J.number())}),pD=aw(fD)}));function hD(e){return{status:`active`,...e}}function gD(e,t){switch(t.type){case`challengeReceived`:return e.status===`closing`||e.status===`closed`?xD(e,t):{state:{status:`challenged`,challengeId:t.challengeId},effects:[]};case`challenge`:return e.status!==`idle`&&e.status!==`active`?xD(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:yD(e.challengeId,t.snapshot),effects:[]}:xD(e,t);case`activated`:return e.status===`closing`||e.status===`closed`?xD(e,t):{state:ND({challengeId:t.challengeId,entry:t.entry,spent:t.spent,units:t.units??0}),effects:[]};case`opened`:return e.status===`opening`?{state:bD(e.challengeId,t.receipt,t.descriptor,t.deposit),effects:[]}:xD(e,t);case`receiptAccepted`:return e.status===`closing`||e.status===`closed`?xD(e,t):{state:ID(t.receipt,t.entry),effects:[]};case`needVoucher`:return e.status===`active`?vD({challengeId:e.challengeId,descriptor:t.descriptor,event:t.event}):xD(e,t);case`topUpStarted`:return e.status===`voucherNeeded`?{state:{status:`toppingUp`,challengeId:e.challengeId,channelId:e.channelId,descriptor:e.descriptor,deposit:e.deposit},effects:[]}:xD(e,t);case`voucherAccepted`:return e.status!==`voucherNeeded`&&e.status!==`toppingUp`?xD(e,t):{state:bD(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}]}:xD(e,t);case`settled`:return e.status===`settling`?{state:bD(t.receipt.challengeId,t.receipt,e.descriptor,t.deposit??e.deposit),effects:[]}:xD(e,t);case`closeRequested`:return e.status===`active`?{state:{status:`closeRequested`,channelId:e.channelId,descriptor:e.descriptor},effects:[{type:`requestClose`,channelId:e.channelId}]}:xD(e,t);case`withdrawable`:return e.status===`closeRequested`?{state:{status:`withdrawable`,channelId:e.channelId,descriptor:e.descriptor},effects:[{type:`withdraw`,channelId:e.channelId}]}:xD(e,t);case`closeStarted`:return e.status!==`active`&&e.status!==`withdrawable`&&e.status!==`closeRequested`?xD(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`?xD(e,t):{state:{status:`closed`,channelId:e.channelId,descriptor:e.descriptor},effects:[]}}}function _D(e,t){let n=gD(e.state,t);return e.state=n.state,n}function vD(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 yD(e,t){return hD({challengeId:e,channelId:t.channelId,descriptor:t.descriptor,acceptedCumulative:t.acceptedCumulative,deposit:t.deposit,spent:t.spent,units:t.units??0})}function bD(e,t,n,r){return hD({challengeId:e,channelId:t.channelId,descriptor:n,acceptedCumulative:t.acceptedCumulative,deposit:r,spent:t.spent,units:t.units??0})}function xD(e,t){throw Error(`Invalid session transition: ${e.status} + ${t.type}`)}function SD(e){let{cumulativeAmount:t,maxVoucherCumulative:n}=e;if(n!==null&&!(t<=n))throw Error(`requested voucher amount ${t} exceeds local maxDeposit ${n}`)}function CD(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`);SD({cumulativeAmount:i,maxVoucherCumulative:n}),SD({cumulativeAmount:a,maxVoucherCumulative:n})}function wD(e){let{channel:t,maxVoucherCumulative:n,receipt:r,spent:i}=e;if(!r||r.channelId!==t?.channelId)return i;CD({channel:t,maxVoucherCumulative:n,receipt:r});let a=BigInt(r.spent);return i>a?i:a}function TD(e,t){return typeof e==`bigint`?e:N(e,t)}function ED(e){let{contextDepositRaw:t,maxDeposit:n,requestAmount:r,suggestedDepositRaw:i}=e;if(OD(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 DD(e){let{deposit:t,maxDeposit:n,requiredCumulative:r,suggestedDeposit:i,topUpAmount:a}=e;if(r<=t)return 0n;SD({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 OD(e,t){SD({cumulativeAmount:e,maxVoucherCumulative:t??null})}function kD(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 AD(e){let{cumulativeAmount:t,spent:n}=e;return t>n?t:n}function jD(e){let{cumulativeAmount:t,readySpent:n,spent:r}=e;if(!LE(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>AD({cumulativeAmount:t,spent:r}))throw Error(`close-ready spent exceeds local voucher state`)}function MD(e){let{challengeId:t,channelId:n,expectedCloseAmount:r,minimumSpent:i=0n,receipt:a}=e,o=RE(r),s=RE(a.spent);return o===void 0||s===void 0||!LE(i)?!1:!!a.txHash&&a.challengeId===t&&a.channelId===n&&a.acceptedCumulative===r&&s>=i&&s<=o}function ND(e){return hD({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 PD(){return{channel:null,lastChallenge:null,lastUrl:null,spent:0n,socketSession:null,state:HD}}function FD(e){let{maxVoucherCumulative:t,receipt:n,runtime:r}=e;r.spent=wD({channel:r.channel,maxVoucherCumulative:t,receipt:n,spent:r.spent}),n&&r.channel?.channelId===n.channelId&&_D(r,{type:`receiptAccepted`,receipt:n,entry:r.channel})}function ID(e,t){return hD({challengeId:e.challengeId,channelId:e.channelId,descriptor:t.descriptor,acceptedCumulative:e.acceptedCumulative,deposit:t.deposit.toString(),spent:e.spent,units:e.units??0})}function LD(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=RE(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 RD(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 gD(o,{type:`activated`,challengeId:r,entry:t,spent:a.toString(),units:o.status===`active`?o.units:0}).state}function zD(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 BD(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 VD(e){let{activeSocket:t,currentSocket:n,target:r}=e,i=n.closeReadyReceipt??await(async()=>(t.send($E()),e.waitForCloseReady()))(),a=BigInt(i.spent);jD({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=>MD({challengeId:r.challenge.id,channelId:r.channelId,expectedCloseAmount:s,minimumSpent:a,receipt:e}));t.send(QE(o));let c=await i;return t.close(),n.closeReadyReceipt=null,c}finally{n.expectedCloseAmount=null}}var HD,UD=F((()=>{aD(),mD(),HD={status:`idle`}}));function WD(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=OO.CLOSED,r=null}if(a.type===`open`&&(i=OO.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 GD(e){return{acceptedCumulative:BigInt(e.acceptedCumulative),deposit:BigInt(e.deposit),requiredCumulative:BigInt(e.requiredCumulative)}}function KD(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=TD(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 qD(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:ID(s,u)}:i?{channel:u,state:ND({challengeId:i,entry:u,spent:c.toString(),units:a.status===`active`?a.units:0})}:{channel:u}}async function JD(e){if(e.event.channelId!==e.expectedChannelId)return{status:`ignored`,reason:`channel-mismatch`};let t=GD(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:zE(t.requiredCumulative);return{status:`ready`,context:{action:`voucher`,channelId:e.expectedChannelId,descriptor:n.descriptor,cumulativeAmountRaw:r.toString()}}}function YD(e){return e.method===jx.tempo&&e.intent===Mx.session}function XD(e){return YD(e)&&kx(e.request.methodDetails,Nx.sessionProtocol)===Px.v2}function ZD(e){return kx(e.request.methodDetails,Nx.sessionSnapshot)}function QD(e,t,n,r){let i=e instanceof Request?e.headers:void 0;return VC({...t,redirect:`manual`,headers:{...qw(i),...qw(t?.headers)}},fS(r),n)}function $D(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 eO(e){let t=new URL(e.toString());return t.protocol===`ws:`&&(t.protocol=`http:`),t.protocol===`wss:`&&(t.protocol=`https:`),t}async function tO(e){let t=await e.text().catch(()=>``);if(!t)return``;if(!e.headers.get(`Content-Type`)?.includes(`application/problem+json`))return t;try{return JSON.parse(t).detail??t}catch{return t}}async function nO(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 rO({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 jO&&(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(q.paymentReceipt);return i?JE(i):void 0}async function rO(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($D(e.input),{method:`POST`,signal:r.signal,redirect:`manual`,headers:DO(t,n,e.input,e.headers)}),s])}catch(t){throw e.context.action===`topUp`?new jO(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=cS(n).find(XD);return r?t(r):n}async function iO(e){let t=aO({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,QD(e.input,e.init,t,r))}catch(e){throw await l(),e}return!u.ok&&!u.headers.get(q.paymentReceipt)&&await l(),u}function aO(e){let t=cS(e.response).find(XD);if(!t)return;let n=ZD(t);if(!n)return;let{channel:r}=e;if(!(!r?.descriptor||r.channelId!==n.channelId))return{channel:r,challenge:t,snapshot:n}}async function oO(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:DO(r,a,e.lastUrl,e.headers)})},i=await r(e.target.challenge);if(i.status===402){let t=cS(i).find(XD);t&&(e.setChallenge?.(t),i=await r(t,!0))}if(!i.ok){let e=await tO(i),t=i.headers.get(q.wwwAuthenticate)??``;throw Error(`Close request failed with status ${i.status}${e?`: ${e}`:``}${t?` [${q.wwwAuthenticate}: ${t}]`:``}`)}let a=i.headers.get(q.paymentReceipt);if(!a)return;let o=JE(a);if(!o.txHash||!k.validate(o.txHash,{strict:!0})||k.size(o.txHash)!==32||!MD({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 sO(e,t,n){let{onReceipt:r,signal:i,...a}=t??{},o=i??(e instanceof Request?e.signal:void 0),s={...a,headers:{...qw(a.headers),Accept:`text/event-stream`},...o?{signal:o}:{}},c=await n.doFetch(e,s);return!YE(c)&&n.getChannel()?.opened&&(c=await n.doFetch(e,s)),cO(e,c,{onReceipt:r,signal:o},n,s.headers)}function cO(e,t,n,r,i){if(!YE(t))throw Error(`SSE response is not an event stream.`);if(!t.body)throw Error(`Response has no body.`);let a=r.getChallenge();return lO({onNeedVoucher:t=>mO({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*lO(e){for await(let t of uO(e))t.data!==void 0&&(yield t.data)}async function*uO(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=dO(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=XE(i.replace(/\r\n|\r/g,`
|
|
227
|
-
`));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
|
|
226
|
+
`);switch(t){case`message`:return{type:`message`,data:r};case`payment-need-voucher`:{let e=QE(r);return qE(e)?{type:`payment-need-voucher`,data:e}:null}case`payment-receipt`:{let e=QE(r);return JE(e)?{type:`payment-receipt`,data:e}:null}default:return{type:`message`,data:r}}}function QE(e){try{return JSON.parse(e)}catch{return null}}function $E(e){return JSON.stringify({mpp:`authorization`,authorization:e})}function eD(){return JSON.stringify({mpp:`payment-close-request`})}function tD(e){let t=nD(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`&&JE(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`&&qE(t.data)?{mpp:`payment-need-voucher`,data:t.data}:t.mpp===`payment-receipt`&&JE(t.data)?{mpp:`payment-receipt`,data:t.data}:null:null}function nD(e){try{let t=JSON.parse(e);return typeof t!=`object`||!t?null:t}catch{return null}}var rD,iD,aD,oD=F((()=>{rD=(1n<<96n)-1n,iD=new Set([`open`,`topUp`,`voucher`,`close`]),aD=`0x4d50500000000000000000000000000000000000`}));function sD(e){return mD.encode(e)}function cD(e){return mD.decode(e)}var lD,uD,dD,fD,pD,mD,hD=F((()=>{cw(),Zx(),lD=J.custom(e=>typeof e==`string`&&de(e,{strict:!1})),uD=J.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]{64}$/.test(e)),dD=J.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]+$/.test(e)),fD=J.object({authorizedSigner:lD,expiringNonceHash:uD,operator:lD,payee:lD,payer:lD,salt:uD,token:lD}),pD=J.object({acceptedCumulative:J.string(),chainId:J.number(),channelId:uD,closeRequestedAt:J.optional(J.string()),deposit:J.string(),descriptor:fD,escrow:lD,highestVoucher:J.optional(J.object({channelId:uD,cumulativeAmount:J.string(),signature:dD})),requiredCumulative:J.string(),settled:J.string(),spent:J.string(),units:J.optional(J.number())}),mD=ow(pD)}));function gD(e){return{status:`active`,...e}}function _D(e,t){switch(t.type){case`challengeReceived`:return e.status===`closing`||e.status===`closed`?SD(e,t):{state:{status:`challenged`,challengeId:t.challengeId},effects:[]};case`challenge`:return e.status!==`idle`&&e.status!==`active`?SD(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:bD(e.challengeId,t.snapshot),effects:[]}:SD(e,t);case`activated`:return e.status===`closing`||e.status===`closed`?SD(e,t):{state:PD({challengeId:t.challengeId,entry:t.entry,spent:t.spent,units:t.units??0}),effects:[]};case`opened`:return e.status===`opening`?{state:xD(e.challengeId,t.receipt,t.descriptor,t.deposit),effects:[]}:SD(e,t);case`receiptAccepted`:return e.status===`closing`||e.status===`closed`?SD(e,t):{state:LD(t.receipt,t.entry),effects:[]};case`needVoucher`:return e.status===`active`?yD({challengeId:e.challengeId,descriptor:t.descriptor,event:t.event}):SD(e,t);case`topUpStarted`:return e.status===`voucherNeeded`?{state:{status:`toppingUp`,challengeId:e.challengeId,channelId:e.channelId,descriptor:e.descriptor,deposit:e.deposit},effects:[]}:SD(e,t);case`voucherAccepted`:return e.status!==`voucherNeeded`&&e.status!==`toppingUp`?SD(e,t):{state:xD(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}]}:SD(e,t);case`settled`:return e.status===`settling`?{state:xD(t.receipt.challengeId,t.receipt,e.descriptor,t.deposit??e.deposit),effects:[]}:SD(e,t);case`closeRequested`:return e.status===`active`?{state:{status:`closeRequested`,channelId:e.channelId,descriptor:e.descriptor},effects:[{type:`requestClose`,channelId:e.channelId}]}:SD(e,t);case`withdrawable`:return e.status===`closeRequested`?{state:{status:`withdrawable`,channelId:e.channelId,descriptor:e.descriptor},effects:[{type:`withdraw`,channelId:e.channelId}]}:SD(e,t);case`closeStarted`:return e.status!==`active`&&e.status!==`withdrawable`&&e.status!==`closeRequested`?SD(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`?SD(e,t):{state:{status:`closed`,channelId:e.channelId,descriptor:e.descriptor},effects:[]}}}function vD(e,t){let n=_D(e.state,t);return e.state=n.state,n}function yD(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 bD(e,t){return gD({challengeId:e,channelId:t.channelId,descriptor:t.descriptor,acceptedCumulative:t.acceptedCumulative,deposit:t.deposit,spent:t.spent,units:t.units??0})}function xD(e,t,n,r){return gD({challengeId:e,channelId:t.channelId,descriptor:n,acceptedCumulative:t.acceptedCumulative,deposit:r,spent:t.spent,units:t.units??0})}function SD(e,t){throw Error(`Invalid session transition: ${e.status} + ${t.type}`)}function CD(e){let{cumulativeAmount:t,maxVoucherCumulative:n}=e;if(n!==null&&!(t<=n))throw Error(`requested voucher amount ${t} exceeds local maxDeposit ${n}`)}function wD(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`);CD({cumulativeAmount:i,maxVoucherCumulative:n}),CD({cumulativeAmount:a,maxVoucherCumulative:n})}function TD(e){let{channel:t,maxVoucherCumulative:n,receipt:r,spent:i}=e;if(!r||r.channelId!==t?.channelId)return i;wD({channel:t,maxVoucherCumulative:n,receipt:r});let a=BigInt(r.spent);return i>a?i:a}function ED(e,t){return typeof e==`bigint`?e:N(e,t)}function DD(e){let{contextDepositRaw:t,maxDeposit:n,requestAmount:r,suggestedDepositRaw:i}=e;if(kD(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 OD(e){let{deposit:t,maxDeposit:n,requiredCumulative:r,suggestedDeposit:i,topUpAmount:a}=e;if(r<=t)return 0n;CD({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 kD(e,t){CD({cumulativeAmount:e,maxVoucherCumulative:t??null})}function AD(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 jD(e){let{cumulativeAmount:t,spent:n}=e;return t>n?t:n}function MD(e){let{cumulativeAmount:t,readySpent:n,spent:r}=e;if(!RE(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>jD({cumulativeAmount:t,spent:r}))throw Error(`close-ready spent exceeds local voucher state`)}function ND(e){let{challengeId:t,channelId:n,expectedCloseAmount:r,minimumSpent:i=0n,receipt:a}=e,o=zE(r),s=zE(a.spent);return o===void 0||s===void 0||!RE(i)?!1:!!a.txHash&&a.challengeId===t&&a.channelId===n&&a.acceptedCumulative===r&&s>=i&&s<=o}function PD(e){return gD({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 FD(){return{channel:null,lastChallenge:null,lastUrl:null,spent:0n,socketSession:null,state:UD}}function ID(e){let{maxVoucherCumulative:t,receipt:n,runtime:r}=e;r.spent=TD({channel:r.channel,maxVoucherCumulative:t,receipt:n,spent:r.spent}),n&&r.channel?.channelId===n.channelId&&vD(r,{type:`receiptAccepted`,receipt:n,entry:r.channel})}function LD(e,t){return gD({challengeId:e.challengeId,channelId:e.channelId,descriptor:t.descriptor,acceptedCumulative:e.acceptedCumulative,deposit:t.deposit.toString(),spent:e.spent,units:e.units??0})}function RD(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=zE(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 zD(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 _D(o,{type:`activated`,challengeId:r,entry:t,spent:a.toString(),units:o.status===`active`?o.units:0}).state}function BD(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 VD(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 HD(e){let{activeSocket:t,currentSocket:n,target:r}=e,i=n.closeReadyReceipt??await(async()=>(t.send(eD()),e.waitForCloseReady()))(),a=BigInt(i.spent);MD({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=>ND({challengeId:r.challenge.id,channelId:r.channelId,expectedCloseAmount:s,minimumSpent:a,receipt:e}));t.send($E(o));let c=await i;return t.close(),n.closeReadyReceipt=null,c}finally{n.expectedCloseAmount=null}}var UD,WD=F((()=>{oD(),hD(),UD={status:`idle`}}));function GD(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=kO.CLOSED,r=null}if(a.type===`open`&&(i=kO.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 KD(e){return{acceptedCumulative:BigInt(e.acceptedCumulative),deposit:BigInt(e.deposit),requiredCumulative:BigInt(e.requiredCumulative)}}function qD(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=ED(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 JD(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:LD(s,u)}:i?{channel:u,state:PD({challengeId:i,entry:u,spent:c.toString(),units:a.status===`active`?a.units:0})}:{channel:u}}async function YD(e){if(e.event.channelId!==e.expectedChannelId)return{status:`ignored`,reason:`channel-mismatch`};let t=KD(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:BE(t.requiredCumulative);return{status:`ready`,context:{action:`voucher`,channelId:e.expectedChannelId,descriptor:n.descriptor,cumulativeAmountRaw:r.toString()}}}function XD(e){return e.method===jx.tempo&&e.intent===Mx.session}function ZD(e){return XD(e)&&kx(e.request.methodDetails,Nx.sessionProtocol)===Px.v2}function QD(e){return kx(e.request.methodDetails,Nx.sessionSnapshot)}function $D(e,t,n,r){let i=e instanceof Request?e.headers:void 0;return HC({...t,redirect:`manual`,headers:{...Jw(i),...Jw(t?.headers)}},pS(r),n)}function eO(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 tO(e){let t=new URL(e.toString());return t.protocol===`ws:`&&(t.protocol=`http:`),t.protocol===`wss:`&&(t.protocol=`https:`),t}async function nO(e){let t=await e.text().catch(()=>``);if(!t)return``;if(!e.headers.get(`Content-Type`)?.includes(`application/problem+json`))return t;try{return JSON.parse(t).detail??t}catch{return t}}async function rO(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 iO({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 MO&&(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(q.paymentReceipt);return i?YE(i):void 0}async function iO(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(eO(e.input),{method:`POST`,signal:r.signal,redirect:`manual`,headers:OO(t,n,e.input,e.headers)}),s])}catch(t){throw e.context.action===`topUp`?new MO(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=lS(n).find(ZD);return r?t(r):n}async function aO(e){let t=oO({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,$D(e.input,e.init,t,r))}catch(e){throw await l(),e}return!u.ok&&!u.headers.get(q.paymentReceipt)&&await l(),u}function oO(e){let t=lS(e.response).find(ZD);if(!t)return;let n=QD(t);if(!n)return;let{channel:r}=e;if(!(!r?.descriptor||r.channelId!==n.channelId))return{channel:r,challenge:t,snapshot:n}}async function sO(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:OO(r,a,e.lastUrl,e.headers)})},i=await r(e.target.challenge);if(i.status===402){let t=lS(i).find(ZD);t&&(e.setChallenge?.(t),i=await r(t,!0))}if(!i.ok){let e=await nO(i),t=i.headers.get(q.wwwAuthenticate)??``;throw Error(`Close request failed with status ${i.status}${e?`: ${e}`:``}${t?` [${q.wwwAuthenticate}: ${t}]`:``}`)}let a=i.headers.get(q.paymentReceipt);if(!a)return;let o=YE(a);if(!o.txHash||!k.validate(o.txHash,{strict:!0})||k.size(o.txHash)!==32||!ND({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 cO(e,t,n){let{onReceipt:r,signal:i,...a}=t??{},o=i??(e instanceof Request?e.signal:void 0),s={...a,headers:{...Jw(a.headers),Accept:`text/event-stream`},...o?{signal:o}:{}},c=await n.doFetch(e,s);return!XE(c)&&n.getChannel()?.opened&&(c=await n.doFetch(e,s)),lO(e,c,{onReceipt:r,signal:o},n,s.headers)}function lO(e,t,n,r,i){if(!XE(t))throw Error(`SSE response is not an event stream.`);if(!t.body)throw Error(`Response has no body.`);let a=r.getChallenge();return uO({onNeedVoucher:t=>hO({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*uO(e){for await(let t of dO(e))t.data!==void 0&&(yield t.data)}async function*dO(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=fO(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=ZE(i.replace(/\r\n|\r/g,`
|
|
227
|
+
`));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 fO(e,t){for(let n=0;n<e.length;n++){let r=pO(e,n,t);if(!r)continue;let i=pO(e,n+r,t);if(i)return{index:n,length:r+i};n+=r-1}}function pO(e,t,n){return e[t]===`
|
|
228
228
|
`?1:e[t]===`\r`?e[t+1]===`
|
|
229
|
-
`?2:t+1===e.length&&!n?0:1:0}function
|
|
230
|
-
`)}function
|
|
229
|
+
`?2:t+1===e.length&&!n?0:1:0}function mO(e){let t=new AbortController,n=()=>t.abort(e.signal?.reason);e.signal?.addEventListener(`abort`,n,{once:!0}),e.signal?.aborted&&n();let r=dO({...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 hO(e,t){let n=e.driver.getChannel();if(!n||!e.challenge)return;let r=await YD({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 iO({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 gO(e){let t=new URL(e.input.toString()),n=tO(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=lS(r).find(ZD);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 _O(e){e.signal?.throwIfAborted();let t=await gO(e);e.signal?.throwIfAborted();let n=await e.createSessionCredential(t.challenge,{});return e.signal?.throwIfAborted(),{...t,credential:n}}function vO(e){let{challenge:t,credential:n,socket:r}=e;return{challenge:t,channelId:ES(n).payload.channelId,closeReadyReceipt:null,deliveredChunks:0n,expectedCloseAmount:null,socket:r,tickCost:KE(t)}}function yO(e){let{challengeId:t,channelId:n,receipt:r}=e;return r.challengeId===t&&r.channelId===n}function bO(e){if(!yO(e))return`received mismatched payment-close-ready frame`;let t=zE(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 xO(e){let{challengeId:t,channelId:n,expectedCloseAmount:r,receipt:i}=e;if(!yO(e))return`received mismatched payment-receipt frame`;if(r!==null&&i.txHash&&!ND({challengeId:t,channelId:n,expectedCloseAmount:r,minimumSpent:BigInt(r),receipt:i}))return`received mismatched payment-close receipt frame`}async function SO(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=vO({challenge:t,credential:n,socket:s});e.setSocketSession(c);let l=GD(s),u=t=>{e.rejectReceipt(Error(t)),e.rejectCloseReady(Error(t)),(s.readyState===kO.CONNECTING||s.readyState===kO.OPEN)&&s.close(AO,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 wO({driver:e,failSocketFlow:u,managedEmit:l.emit,message:n,rawSocket:s,socketState:c})}),o?.addEventListener(`abort`,d,{once:!0});try{await CO(s,l.emit,a,o),o?.throwIfAborted()}catch(e){throw o?.removeEventListener(`abort`,d),s.close(),e}return s.send($E(n)),await e.waitForReceipt(),l.socket}function CO(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 wO(e){let t=tD(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`:TO(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 EO(e,t.data);return;case`payment-receipt`:DO(e,t.data);return}}function TO(e,t){let n=e.driver.getChannel()?.cumulativeAmount??0n,r=bO({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 EO(e,t){try{let n=e.driver.challenge;n.expires&&new Date(n.expires).getTime()<=Date.now()+jO&&(n=await e.driver.refreshChallenge(),e.driver.challenge=n,e.socketState.challenge=n);let r=await YD({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($E(i))}catch(t){e.failSocketFlow(t instanceof Error?t.message:`failed to create websocket voucher`)}}function DO(e,t){let n=xO({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 OO(e,t,n,r){let i=pS(e),a=new Headers;if(i.toLowerCase()!==q.authorization.toLowerCase()){let e=new Headers(r).get(q.authorization)??(n instanceof Request?n.headers.get(q.authorization):null);e&&!e.startsWith(`${Ax.payment} `)&&a.set(q.authorization,e)}return a.set(i,t),a}var kO,AO,jO,MO,NO=F((()=>{vS(),LT(),WC(),Fx(),FS(),oD(),WD(),kO={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3},AO=3008,jO=5e3,MO=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`}}})),PO,FO,IO,LO,RO,zO=F((()=>{PO={mainnet:4217,testnet:42431},FO={ousd:Ce(PO.mainnet).address,usdc:M(Te(PO.mainnet).address),pathUsd:we(PO.mainnet).address},IO={[PO.mainnet]:FO.usdc,[PO.testnet]:FO.pathUsd},LO=Object.freeze({[PO.mainnet]:Object.freeze({swap:`0xF72E5107c32C655ffA7539a3C8e97B7C3cE16A3F`,token:`0x20c000000000000000000000f37de3740ADec032`}),[PO.testnet]:Object.freeze({swap:`0xd05f8EdFBB54Da0d765C9fE9b2B3f7d2E3a8C466`,token:`0x20c000000000000000000000f37de3740ADec032`})}),PO.mainnet,PO.testnet,RO={[PO.mainnet]:`https://rpc.tempo.xyz`,[PO.testnet]:`https://rpc.moderato.tempo.xyz`}})),BO=Qe({chainName:()=>nk,confirm:()=>ZO,decodeMemo:()=>WO,fetchBalanceLines:()=>ok,fetchTokenInfo:()=>ak,fmtBalance:()=>QO,fmtChallengeValue:()=>GO,fmtRequestValue:()=>UO,isAgentEnvironment:()=>JO,isTempoAccount:()=>YO,isTestnet:()=>ik,link:()=>KO,mainnetTokens:()=>dk,networkRpcUrls:()=>ck,parseMethodOpts:()=>qO,pathUsd:()=>lk,pc:()=>X,printRequestHeaders:()=>VO,printResponseHeaders:()=>HO,prompt:()=>XO,resolveChain:()=>tk,resolveFundingNetwork:()=>ek,resolveRpcUrl:()=>$O,testnetTokens:()=>fk,usdc:()=>uk});function VO(e,t,n){let{pathname:r,host:i}=new URL(e);n(`> ${(t.method??`GET`).toUpperCase()} ${r} HTTP/1.1\n`),n(`> Host: ${i}\n`);for(let[e,r]of Object.entries(t.headers??{}))n(`> ${e}: ${r}\n`);n(`>
|
|
230
|
+
`)}function HO(e,t){if(!t.include&&t.verbose<2||t.silent)return;let n=`HTTP/1.1 ${e.status} ${e.statusText}`,r=t.verbose>=2?process.stderr:process.stdout,i=t.verbose>=2?`< `:``;r.write(`${i}${n}\n`);for(let[t,n]of e.headers)r.write(`${i}${t}: ${n}\n`);r.write(t.verbose>=2?`<
|
|
231
231
|
`:`
|
|
232
|
-
`)}function HO(e,t,n){if(ok.has(e)&&typeof t==`string`)return`${t} ${X.dim(`(${ZO(BigInt(t),n.tokenSymbol,n.tokenDecimals)})`)}`;if(e===`chainId`&&typeof t==`number`){let e=tk({id:t,name:``});return e?`${t} ${X.dim(`(${e})`)}`:String(t)}return typeof t==`string`&&/^0x[0-9a-fA-F]{40}$/.test(t)?n.explorerUrl?GO(`${n.explorerUrl}/address/${t}`,t):t:typeof t==`string`&&/^https?:\/\//.test(t)?X.link(t,t):String(t)}function UO(e){try{let t=e.replace(/^0x0*/,``);if(!t)return;let n=Uint8Array.from(t.match(/.{1,2}/g).map(e=>Number.parseInt(e,16))),r=new TextDecoder().decode(n);return/^[\x20-\x7e]+$/.test(r)?r:void 0}catch{return}}function WO(e,t){if(e===`realm`&&typeof t==`string`)try{let e=new URL(t.includes(`://`)?t:`https://${t}`);return X.link(e.href,t)}catch{}return String(t)}function GO(e,t){return X.link(e,t)}function KO(e){if(!e)return{};let t=Array.isArray(e)?e:[e],n={};for(let e of t){let t=e.indexOf(`=`);if(t===-1)throw Error(`Invalid method option format: ${e} (expected key=value)`);n[e.slice(0,t)]=e.slice(t+1)}return n}function qO(e=process.env){if(e.CLAUDECODE)return!0;for(let[t,n]of Object.entries(e))if(n&&(t===`CODEX`||t.startsWith(`CODEX_`)))return!0;return!1}function JO(e){return e.startsWith(`tempo:`)}function YO(e){let t=Se.createInterface({input:process.stdin,output:process.stderr});return new Promise(n=>{t.on(`close`,()=>n(void 0)),t.question(`${X.bold(`▸ ${e}:`)} `,e=>{t.close(),n(e.trim()||void 0)})})}function XO(e,t=!1){let n=Se.createInterface({input:process.stdin,output:process.stderr});return new Promise(r=>{let i=t?`(Y/n)`:`(y/N)`;n.question(`${X.bold(`▸ ${e}`)} ${X.dim(i)} `,e=>{n.close();let i=e.trim().toLowerCase();r(i===``?t:i===`y`)})})}function ZO(e,t,n=6,r){let[i,a]=(Number(e)/10**n).toString().split(`.`),o=i.replace(/\B(?=(\d{3})+(?!\d))/g,`_`),s=r?.explorerUrl&&r.token?X.dim(X.link(`${r.explorerUrl}/token/${r.token}`,t,!0)):X.dim(t);return`${a?`${o}.${a}`:o} ${s}`}function QO(e,t={}){return e??(t.network?sk[t.network]:void 0)??(process.env.MPPX_RPC_URL?.trim()||process.env.RPC_URL?.trim()||void 0)}function $O(e={}){if(e.network)return e.network;if(!e.rpcUrl&&!(process.env.MPPX_RPC_URL?.trim()||process.env.RPC_URL?.trim()))return`testnet`}async function ek(e={}){let t=QO(e.rpcUrl,{network:e.network});if(!t)return ye;let{getChainId:n}=await import(`viem/actions`),r=await n(j({transport:ue(t)})),i=Object.values(await import(`viem/tempo/chains`)).filter(e=>typeof e==`object`&&!!e&&`id`in e&&e.id===r),a=i.find(e=>`serializers`in e&&e.serializers)??i[0];if(!a)throw Error(`Unknown chain ID ${r} from RPC ${t}`);return a}function tk(e){return{[ye.id]:`mainnet`,[be.id]:`testnet`}[e.id]??e.name}function nk(e){return typeof e==`bigint`?e:e.amount}function rk(e){return e.id!==ye.id}async function ik(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(nk).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}}async function ak(e,t){if(t?.chain){let n=j({chain:t.chain,transport:ue(t.rpcUrl)}),r=t.chain.blockExplorers?.default?.url,i=X.dim(`(${tk(t.chain)})`);return rk(t.chain)?(await Promise.all(dk.map(t=>ik(n,t,e)))).filter(e=>e.balance>0n).map(e=>`${ZO(e.balance,e.symbol,e.decimals,{explorerUrl:r,token:e.token})} ${i}`):(await Promise.all(uk.map(t=>ik(n,t,e)))).map(e=>`${ZO(e.balance,e.symbol,e.decimals,{explorerUrl:r,token:e.token})} ${i}`)}let n=j({chain:ye,transport:ue(QO())}),r=ye.blockExplorers?.default?.url,i=(await Promise.all(uk.map(t=>ik(n,t,e)))).map(e=>ZO(e.balance,e.symbol,e.decimals,{explorerUrl:r,token:e.token}));if(t?.includeTestnet!==!1){let t=j({chain:be,transport:ue()}),n=be.blockExplorers?.default?.url,r=await Promise.all(dk.map(n=>ik(t,n,e)));for(let e of r)e.balance>0n&&i.push(`${ZO(e.balance,e.symbol,e.decimals,{explorerUrl:n,token:e.token})} ${X.dim(`(testnet)`)}`)}return i}var X,ok,sk,ck,lk,uk,dk,fk=F((()=>{RO(),X=(()=>{let e=process||{},t=e.argv||[],n=e.env||{},r=!(n.NO_COLOR||t.includes(`--no-color`))&&(!!n.FORCE_COLOR||t.includes(`--color`)||(e.stdout||{}).isTTY&&n.TERM!==`dumb`||!!n.CI),i=(e,t,n,r)=>{let i=``,a=0,o=r;do i+=e.substring(a,o)+n,a=o+t.length,o=e.indexOf(t,a);while(~o);return i+e.substring(a)},a=r?(e,t,n=e)=>r=>{let a=`${r}`,o=a.indexOf(t,e.length);return~o?e+i(a,t,n,o)+t:e+a+t}:()=>String;return{isColorSupported:r,reset:a(`\x1B[0m`,`\x1B[0m`),bold:a(`\x1B[1m`,`\x1B[22m`,`\x1B[22m\x1B[1m`),dim:a(`\x1B[2m`,`\x1B[22m`,`\x1B[22m\x1B[2m`),italic:a(`\x1B[3m`,`\x1B[23m`),underline:a(`\x1B[4m`,`\x1B[24m`),inverse:a(`\x1B[7m`,`\x1B[27m`),hidden:a(`\x1B[8m`,`\x1B[28m`),strikethrough:a(`\x1B[9m`,`\x1B[29m`),black:a(`\x1B[30m`,`\x1B[39m`),red:a(`\x1B[31m`,`\x1B[39m`),green:a(`\x1B[32m`,`\x1B[39m`),yellow:a(`\x1B[33m`,`\x1B[39m`),blue:a(`\x1B[34m`,`\x1B[39m`),magenta:a(`\x1B[35m`,`\x1B[39m`),cyan:a(`\x1B[36m`,`\x1B[39m`),white:a(`\x1B[37m`,`\x1B[39m`),gray:a(`\x1B[90m`,`\x1B[39m`),bgBlack:a(`\x1B[40m`,`\x1B[49m`),bgRed:a(`\x1B[41m`,`\x1B[49m`),bgGreen:a(`\x1B[42m`,`\x1B[49m`),bgYellow:a(`\x1B[43m`,`\x1B[49m`),bgBlue:a(`\x1B[44m`,`\x1B[49m`),bgMagenta:a(`\x1B[45m`,`\x1B[49m`),bgCyan:a(`\x1B[46m`,`\x1B[49m`),bgWhite:a(`\x1B[47m`,`\x1B[49m`),blackBright:a(`\x1B[90m`,`\x1B[39m`),redBright:a(`\x1B[91m`,`\x1B[39m`),greenBright:a(`\x1B[92m`,`\x1B[39m`),yellowBright:a(`\x1B[93m`,`\x1B[39m`),blueBright:a(`\x1B[94m`,`\x1B[39m`),magentaBright:a(`\x1B[95m`,`\x1B[39m`),cyanBright:a(`\x1B[96m`,`\x1B[39m`),whiteBright:a(`\x1B[97m`,`\x1B[39m`),bgBlackBright:a(`\x1B[100m`,`\x1B[49m`),bgRedBright:a(`\x1B[101m`,`\x1B[49m`),bgGreenBright:a(`\x1B[102m`,`\x1B[49m`),bgYellowBright:a(`\x1B[103m`,`\x1B[49m`),bgBlueBright:a(`\x1B[104m`,`\x1B[49m`),bgMagentaBright:a(`\x1B[105m`,`\x1B[49m`),bgCyanBright:a(`\x1B[106m`,`\x1B[49m`),bgWhiteBright:a(`\x1B[107m`,`\x1B[49m`),link(e,t,n){return r?`\x1b]8;;${e}\x07${n?t:X.underline(t)}\x1b]8;;\x07`:t}}})(),ok=new Set([`amount`,`suggestedDeposit`,`minVoucherDelta`]),sk={mainnet:LO[NO.mainnet],testnet:LO[NO.testnet]},ck=`0x20c0000000000000000000000000000000000000`,lk=`0x20C000000000000000000000b9537d11c60E8b50`,uk=[ck,lk],dk=[`0x20c0000000000000000000000000000000000000`,`0x20c0000000000000000000000000000000000001`,`0x20c0000000000000000000000000000000000002`,`0x20c0000000000000000000000000000000000003`]}));function pk(){let e=Number.parseInt(process.env.MPPX_KEYCHAIN_COMMAND_TIMEOUT_MS??``,10);return Number.isFinite(e)&&e>0?e:Tk}function mk(e,t){return`code`in e&&e.code===`ENOENT`&&e.message.includes(t)}function hk(e){return new I({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 gk(e){if(e&&mk(e,`secret-tool`))throw hk(e)}function _k(e,t){return new Promise(n=>{m.execFile(e,t,{timeout:pk()},(e,t,r)=>{n({stdout:t.trim(),stderr:r.trim(),error:e})})})}function vk(){let e=c.join(process.env.XDG_CONFIG_HOME||c.join(b.homedir(),`.config`),`mppx`,`default`);return{get(){try{return t.readFileSync(e,`utf-8`).trim()||`main`}catch{return`main`}},set(n){t.mkdirSync(c.dirname(e),{recursive:!0}),t.writeFileSync(e,n,`utf-8`)},clear(){try{t.unlinkSync(e)}catch{}}}}function yk(e){return e||(process.env.MPPX_ACCOUNT?.trim()?process.env.MPPX_ACCOUNT:vk().get())}function bk(e=`main`){let t=wk;return{async list(){let e=b.platform();if(e===`darwin`){let{stdout:e,error:n}=await _k(`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 _k(`secret-tool`,[`search`,`--all`,`--unlock`,`service`,t]);if(gk(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=b.platform();if(n===`darwin`){let{stdout:n,error:r}=await _k(`security`,[`find-generic-password`,`-s`,t,`-a`,e,`-w`]);return r?void 0:n}if(n===`linux`){let{stdout:n,error:r}=await _k(`secret-tool`,[`lookup`,`service`,t,`account`,e]);return gk(r),r?void 0:n||void 0}throw Error(`Unsupported platform: ${n}`)},async set(n){let r=b.platform();if(r===`darwin`){await _k(`security`,[`delete-generic-password`,`-s`,t,`-a`,e]);let{error:r}=await _k(`security`,[`add-generic-password`,`-s`,t,`-a`,e,`-w`,n]);if(r)throw r;return}if(r===`linux`){let r=m.execFile(`secret-tool`,[`store`,`--label`,`${t} ${e}`,`service`,t,`account`,e]),i=setTimeout(()=>r.kill(),pk());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(mk(e,`secret-tool`)?hk(e):e)})})}throw Error(`Unsupported platform: ${r}`)},async delete(){let n=b.platform();if(n===`darwin`){await _k(`security`,[`delete-generic-password`,`-s`,t,`-a`,e]);return}if(n===`linux`){let{error:n}=await _k(`secret-tool`,[`clear`,`service`,t,`account`,e]);gk(n);return}throw Error(`Unsupported platform: ${n}`)}}}async function xk(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=yk(e),i=await bk(r).get();if(i)return{account:t(i),accountName:r,source:`keychain`};throw Error(`Account "${r}" not found.`)}async function Sk(e){let t=yk(e);if(!process.env.MPPX_PRIVATE_KEY?.trim()&&JO(t))throw new I({code:`UNSUPPORTED_ACCOUNT`,message:`Persistent sessions require an mppx account or MPPX_PRIVATE_KEY.`,exitCode:2});return xk(e).catch(e=>{throw new I({code:`ACCOUNT_NOT_FOUND`,message:e instanceof Error?e.message:`No account found.`,exitCode:69,...e instanceof Error&&{cause:e}})})}async function Ck(e){return(await xk(e)).account}var wk,Tk,Ek=F((()=>{fk(),wk=`mppx`,Tk=1e4}));MO(),Ek();const Dk=[[`ANTIGRAVITY_CLI_ALIAS`,`antigravity`],[`CLAUDECODE`,`claude_code`],[`CLINE_ACTIVE`,`cline`],[`CODEX_SANDBOX`,`codex_cli`],[`CODEX_THREAD_ID`,`codex_cli`],[`CODEX_SANDBOX_NETWORK_DISABLED`,`codex_cli`],[`CODEX_CI`,`codex_cli`],[`CURSOR_AGENT`,`cursor`],[`GEMINI_CLI`,`gemini_cli`],[`OPENCODE`,`open_code`],[`OPENCLAW_SHELL`,`openclaw`],[`CLAUDE_CODE_ENTRYPOINT`,`claude_code`],[`CODEX_INTERNAL_ORIGINATOR_OVERRIDE`,`codex_cli`]];function Ok(e=process.env){return Dk.find(([t])=>e[t])?.[1]}const kk=Symbol(`mppx.x402.asset`);function Ak(e){return{[kk]:!0,address:e.address,decimals:e.decimals,network:e.network,transfer:e.transfer}}function jk(e,t){let n=e(t.chainId);return Ak({address:n.address,decimals:n.decimals,network:Vk(t.chainId),transfer:Uk(t.transfer,n)})}const Mk={USDC:Ak({address:`0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`,decimals:6,network:`eip155:8453`,transfer:{name:`USD Coin`,type:`eip3009`,version:`2`}})},Nk={USDC:Ak({address:`0x036CbD53842c5426634e7929541eC2318f3dCF7e`,decimals:6,network:`eip155:84532`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}})},Pk={USDC:Ak({address:`0xcebA9300f2b948710d2653dD7B07f33A8B32118C`,decimals:6,network:`eip155:42220`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}}),USDT:Ak({address:`0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e`,decimals:6,network:`eip155:42220`,transfer:{name:`Tether USD`,type:`eip3009`,version:`1`}})},Fk={USDC:Ak({address:`0x01C5C0122039549AD1493B8220cABEdD739BC44E`,decimals:6,network:`eip155:11142220`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}})};function Ik(e){return typeof e!=`object`||!e?!1:e[kk]===!0}function Lk(e){return typeof e==`function`&&typeof e.addresses==`object`&&typeof e.decimals==`number`}function Rk(e){return typeof e==`string`}function zk(e,t){if(Ik(e))return e.network===t?{address:e.address,decimals:e.decimals,transfer:e.transfer}:void 0;if(Lk(e)){let n=e.addresses[Hk(t)];return n?{address:n,decimals:e.decimals,name:e.name}:void 0}return{address:e}}function Bk(e,t,n){let r=zk(e,n);return r?M(r.address)===M(t):!1}function Vk(e){return`eip155:${e}`}function Hk(e){return Number(e.slice(7))}function Uk(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 Wk=Qe({base:()=>Mk,baseSepolia:()=>Nk,celo:()=>Pk,celoSepolia:()=>Fk,define:()=>Ak,fromToken:()=>jk,isAsset:()=>Ik,isRawAddress:()=>Rk,isToken:()=>Lk,matches:()=>Bk,resolve:()=>zk,toChainId:()=>Hk,toNetwork:()=>Vk}),Gk=Qe({base:()=>Kk,baseSepolia:()=>qk,celo:()=>Jk,celoSepolia:()=>Yk});const Kk=8453,qk=84532,Jk=42220,Yk=11142220;zx();function Xk(e){let t=[Rx(e.accepted),Rx(e.resource),Rx(e.extensions)].join(`|`);return re.sha256(O.fromString(t),{as:`Hex`})}hw(),BC();async function Zk(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=_C(n);if(tA(e.config,r),!n.resource)throw Error(`x402 exact EIP-3009 requires resource information.`);let i=n.extensions?.mppx?rA(n.extensions):n.extensions,a=r.extra?.assetTransferMethod??`eip3009`;if(a!==`eip3009`)throw Error(`x402 exact ${String(a)} signing is not implemented yet.`);let o=r.extra?.name,s=r.extra?.version;if(typeof o!=`string`||typeof s!=`string`)throw Error(`x402 exact EIP-3009 requires token name and version.`);let c=Math.floor(Date.now()/1e3),l={from:M(t.address),nonce:i?.mppx?Xk({accepted:r,extensions:i,resource:n.resource}):aA(),to:M(r.payTo),validAfter:(c-600).toString(),validBefore:(c+r.maxTimeoutSeconds).toString(),value:r.amount},u=await t.signTypedData({domain:{chainId:eA(r.network),name:o,verifyingContract:M(r.asset),version:s},message:{...l,value:BigInt(l.value),validAfter:BigInt(l.validAfter),validBefore:BigInt(l.validBefore)},primaryType:`TransferWithAuthorization`,types:$k});return pw({accepted:r,...i?{extensions:i}:{},payload:{authorization:l,signature:u},...n.resource?{resource:n.resource}:{},x402Version:2})}function Qk(e){let t=e.challenge.request,n;try{n=_C(t),tA(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 $k={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 eA(e){return Number(e.slice(bC.length))}function tA(e,t){let n=eA(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=>Rk(e))&&!e.networks?.length)throw Error(`x402 exact raw currency allowlists require networks.`);if(r){let e=M(t.asset);if(!r.some(n=>Bk(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=nA(e,t);if(n===void 0)throw Error(`x402 exact maxAmount requires currency decimals.`);if(BigInt(t.amount)>N(e.maxAmount,n))throw Error(`x402 exact amount exceeds maxAmount.`)}}function nA(e,t){let n=e.currencies??e.assets,r=M(t.asset),i=n?.find(e=>Bk(e,r,t.network)),a=i?zk(i,t.network):void 0;return a?.decimals===void 0?e.decimals:a.decimals}function rA(e){let t=e.mppx;return t?{...e,mppx:{...t,info:{...t.info,nonce:iA()}}}:e}function iA(){return oA().slice(2)}function aA(){return oA()}function oA(){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(``)}`}Zx();const sA=[`authorization`],cA=J.string().check(J.regex(/^\d+$/,`Invalid atomic amount`));J.object({name:J.string().check(J.minLength(1)),version:J.string().check(J.minLength(1))});const lA=J.object({chainId:J.number(),credentialTypes:J.optional(J.array(J.enum(sA)).check(J.minLength(1))),decimals:J.optional(J.number()),permit2Address:J.optional(Kx()),splits:J.optional(J.array(J.object({amount:cA,recipient:Kx()})))});J.object({amount:cA,currency:Kx(),description:J.optional(J.string()),externalId:J.optional(J.string()),methodDetails:lA,recipient:Kx()});const uA=J.object({amount:Vx(),chainId:J.number(),currency:Kx(),credentialTypes:J.optional(J.array(J.enum(sA)).check(J.minLength(1))),decimals:J.number(),description:J.optional(J.string()),externalId:J.optional(J.string()),permit2Address:J.optional(Kx()),recipient:Kx(),splits:J.optional(J.array(J.object({amount:cA,recipient:Kx()})))}),dA=J.object({from:Kx(),nonce:qx(),signature:Yx(),to:Kx(),type:J.literal(`authorization`),validAfter:cA,validBefore:cA,value:cA}),fA={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 pA(e){return{chainId:e.chainId,name:e.authorization.name,verifyingContract:e.currency,version:e.authorization.version}}function mA(e){return re.keccak256(O.fromString(JSON.stringify([e.id,e.realm])),{as:`Hex`})}function hA(e){return`eip155:${e}`}function gA(e){return`did:pkh:eip155:${e.chainId}:${e.address}`}bE(),Zx();const _A=vE({name:`evm`,intent:`charge`,schema:{credential:{payload:dA},request:J.pipe(uA,J.transform(({amount:e,chainId:t,credentialTypes:n=[`authorization`],currency:r,decimals:i,permit2Address:a,recipient:o,splits:s,...c})=>({...c,amount:N(e,i).toString(),currency:M(r),methodDetails:{chainId:t,credentialTypes:n,decimals:i,...a?{permit2Address:M(a)}:{},...s?{splits:s}:{}},recipient:M(o)})))}});PS(),bE(),qS(),Zx();function vA(e){return yE(_A,{canHandleChallenge({challenge:t}){return!yA(t)||Qk({challenge:t,config:e})},context:J.object({account:J.optional(J.custom())}),async createCredential({challenge:t,context:n}){if(yA(t))return Zk({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(bA(e,i),!i.methodDetails.credentialTypes?.includes(`authorization`))throw Error(`EVM authorization is not accepted by this challenge.`);if(i.methodDetails.splits?.length)throw Error(`EVM authorization does not support payment splits.`);let a=xA(e,i),o=t.expires?Math.floor(new Date(t.expires).getTime()/1e3).toString():(Math.floor(Date.now()/1e3)+300).toString();return kS(OS({challenge:t,payload:{from:M(r.address),nonce:mA(t),signature:await r.signTypedData({domain:pA({authorization:a,chainId:i.methodDetails.chainId,currency:i.currency}),message:{from:M(r.address),nonce:mA(t),to:M(i.recipient),validAfter:0n,validBefore:BigInt(o),value:BigInt(i.amount)},primaryType:`TransferWithAuthorization`,types:fA}),to:M(i.recipient),type:`authorization`,validAfter:`0`,validBefore:o,value:i.amount},source:gA({address:M(r.address),chainId:i.methodDetails.chainId})}))}})}function yA(e){return GS(e)&&e.request.scheme===`exact`&&typeof e.request.network==`string`}function bA(e,t){let n=t.methodDetails.chainId,r=hA(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=>Rk(e))&&!e.networks?.length)throw Error(`EVM raw currency allowlists require networks.`);if(i){let e=M(t.currency);if(!i.some(t=>Bk(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=SA(e,t);if(n===void 0)throw Error(`EVM charge maxAmount requires currency decimals.`);if(BigInt(t.amount)>N(e.maxAmount,n))throw Error(`EVM charge amount exceeds maxAmount.`)}}function xA(e,t){let n=e.currencies??e.assets,r=M(t.currency),i=hA(t.methodDetails.chainId),a=n?.find(e=>Bk(e,r,i)),o=a?zk(a,i):void 0;if(o?.transfer?.type===`eip3009`)return{name:o.transfer.name,version:o.transfer.version};if(e.authorization)return e.authorization;throw Error(`EVM authorization requires token name and version.`)}function SA(e,t){let n=e.currencies??e.assets,r=M(t.currency),i=hA(t.methodDetails.chainId),a=n?.find(e=>Bk(e,r,i)),o=a?zk(a,i):void 0;return o?.decimals===void 0?e.decimals:o.decimals}function CA(e){return[CA.charge(e)]}(function(e){e.charge=vA,e.assets=Wk,e.chains=Gk})(CA||={});function wA(e){return e}var TA=F((()=>{}));qS(),TA();function EA(){return wA({method:`evm`,supports:e=>e.method===`evm`&&!GS(e),async setup({challenge:e,options:t}){let n=e.request,r=n.methodDetails,i=r?.chainId,a=i?DA(i):void 0,o=n.currency,s=await Ck(t.account),c=[...Object.values(Mk),...Object.values(Nk),...Object.values(Pk),...Object.values(Fk)],l=o??``;if(a&&o)try{let e=j({chain:a,transport:ue()}),t=await Oe(e,{address:o,abi:se,functionName:`symbol`});t&&(l=t)}catch{}return{tokenSymbol:l,tokenDecimals:r?.decimals??6,explorerUrl:a?.blockExplorers?.default?.url,methods:[...CA({account:s,currencies:c})]}}})}function DA(e){return Object.values(Ve).find(t=>t.id===e)}function OA(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}Zx();const kA=J.object({customer:J.optional(J.string().check(J.minLength(1))),hooks:J.optional(J.object({inputs:J.object({tax:J.object({calculation:J.string().check(J.minLength(1))})})})),metadata:J.optional(J.record(J.string(),J.string())),receipt_email:J.optional(J.string().check(J.minLength(1)))}),AA=J.custom(e=>typeof e==`function`),jA=J.union([kA,AA]);bE(),Zx();const MA=vE({name:`stripe`,intent:`charge`,schema:{credential:{payload:J.object({externalId:J.optional(J.string()),spt:J.string()})},request:J.pipe(J.object({amount:Vx(),currency:J.string(),decimals:J.number(),description:J.optional(J.string()),externalId:J.optional(J.string()),metadata:J.optional(J.record(J.string(),J.string())),networkId:J.string(),paymentIntentOptions:J.optional(jA),paymentMethodTypes:J.array(J.string()).check(J.minLength(1)),recipient:J.optional(J.string())}),J.transform(({amount:e,decimals:t,metadata:n,networkId:r,paymentIntentOptions:i,paymentMethodTypes:a,...o})=>({...o,amount:OA(e,t).toString(),methodDetails:{networkId:r,paymentMethodTypes:a,...n!==void 0&&{metadata:n}}})))}});PS(),bE(),Zx();function NA(e){let{client:t,createToken:n,externalId:r,paymentMethod:i}=e;return yE(MA,{context:J.object({paymentMethod:J.optional(J.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 kS({challenge:e,payload:{spt:p,...m===void 0?{}:{externalId:m}}})}})}function PA(e){return[NA(e)]}(function(e){e.charge=NA})(PA||={}),Ox(),fk(),TA();function FA(){return wA({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=LA(p.object({paymentMethod:p.string(),secretKey:p.string().optional()}),t,[`paymentMethod`,`secretKey`]),a=i.secretKey??process.env.MPPX_STRIPE_SECRET_KEY;if(!a)throw new I({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:[PA.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=IA(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){let e=await d.json();throw new I({code:`STRIPE_ERROR`,message:`Failed to create SPT: ${e.error.message}`,exitCode:77})}}else throw new I({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&&IA(e)?`/test`:``}/payments/${t}`;return X.link(n,t,!0)}}})}function IA(e){return e.startsWith(`sk_test_`)||e.startsWith(`rk_test_`)}function LA(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 RA(e={}){let{account:t}=e;return(e,{account:n}={})=>{let r=n??t;if(!r){if(!e.account)throw Error("No `account` provided. Pass `account` to parameters or context.");return e.account}return _e(r)}}var zA=F((()=>{}));function BA(e){return Object.fromEntries(Object.entries(e.headers??{}).filter(([e])=>e.toLowerCase()!==`content-type`))}var VA=F((()=>{}));function HA(e,t={}){return ue(e.url,{fetchFn:e.fetch,fetchOptions:{headers:BA(e)},...t})}function UA(e){let{chain:t,getClient:n,remoteFeePayer:r,rpcUrl:i}=e;return n?!t?.serializers&&!r?n:async e=>{let i=await n(e),a=i;if(r&&i.transport.key!==`feePayer`){let e=i.request.bind(i),t=Be(ae({request:t=>e(t)},{retryCount:0}),HA(r,{retryCount:i.transport.retryCount}))({account:i.account,chain:i.chain,pollingInterval:i.pollingInterval,retryCount:0}),n=ie({...t.config,retryCount:0},t.value);a=Object.assign({},i,{request:n.request,transport:{...n.config,...n.value}})}return!t?.serializers||a.chain?.serializers?.transaction?a:Object.assign({},a,{chain:{...t,...e.chainId===void 0?{}:{id:e.chainId},...a.chain,formatters:a.chain?.formatters??t.formatters,prepareTransactionRequest:a.chain?.prepareTransactionRequest??t.prepareTransactionRequest,serializers:a.chain?.serializers?.transaction?a.chain.serializers:t.serializers}})}:({chainId:e})=>{if(!i)throw Error("No `rpcUrl` provided.");let n=e||Number(Object.keys(i)[0]),a=i[n];if(!a)throw Error(`No \`rpcUrl\` configured for \`chainId\` (${n}).`);let o=r?Be(ue(a),HA(r)):ue(a);return j({chain:KA[n]??{...t,id:n},transport:o})}}function WA(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 GA(e,t){if(e!==void 0&&(t===void 0||!e.includes(t)))throw Error(`Chain ID not allowed: ${t??`unknown`}.`)}var KA,qA=F((()=>{VA(),KA={[ye.id]:ye,[be.id]:be}}));function JA(e){let t=re.keccak256(O.fromString(e),{as:`Hex`});return k.toBytes(k.slice(t,0,10))}function YA(e){let{serverId:t,clientId:n,challengeId:r}=e,i=new Uint8Array(32);return i.set(k.toBytes(ZA),0),i[4]=QA,i.set(JA(t),5),n&&i.set(JA(n),15),i.set(XA(r),25),k.fromBytes(i)}function XA(e){let t=re.keccak256(O.fromString(e),{as:`Hex`});return k.toBytes(k.slice(t,0,7))}var ZA,QA,$A=F((()=>{ZA=k.slice(re.keccak256(O.fromString(`mpp`),{as:`Hex`}),0,4),QA=1}));function ej(e,t){return Ke.resolve(e).toLowerCase()===Ke.resolve(t).toLowerCase()}var tj=F((()=>{}));async function nj(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=>!ej(e,i)),c=await Promise.allSettled([Oe(e,{...Ie.token.getBalance.call(e,{account:n,token:i}),account:null}),...s.map(t=>Oe(e,{...Ie.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/ij;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 Ie.dex.getBuyQuote(e,{account:null,tokenIn:a,tokenOut:i,amountOut:d});if(t<=0n||t>p)continue;let n=t+t*f/ij,o=n<p?n:p;if(r>=o)return[Ie.token.approve.call(e,{amount:o,spender:Le.stablecoinDex,token:a}),Ie.dex.buy.call({tokenIn:a,tokenOut:i,amountOut:d,maxAmountIn:o})]}catch{}}throw new oj({currency:i})}function rj(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=>ej(e,t)))]:t,slippage:e.slippage??1,...e.maxAmountIn===void 0?{}:{maxAmountIn:e.maxAmountIn}}:!1}var ij,aj,oj,sj=F((()=>{tj(),RO(),ij=10000n,aj=[PO.pathUsd,PO.usdc,PO.ousd],oj=class extends Error{name=`InsufficientFundsError`;constructor({currency:e}){super(`Insufficient funds: no balance in ${e} and no viable swap route from fallback currencies.`)}}}));function cj(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}))]}var lj=F((()=>{}));function uj(e,t,n){t&&(n&&!n.some(e=>ej(e,t))||e.some(e=>ej(e,t))||e.push(t))}async function dj(e,t,n){try{return(await Ie.token.getBalance(e,{account:t,token:n})).amount>0n}catch{return!1}}function fj(e){let t=e.chain?.feeToken;if(t)return Re.toAddress(t);let n=e.chain?.id;return n?FO[n]:void 0}function pj(e){let t=[];return uj(t,PO.pathUsd),uj(t,FO[e]),t}async function mj(e){let{account:t,allowedTokens:n,candidateTokens:r,client:i,prioritizeCandidates:a}=e,o=[];if(a)for(let e of r??[])uj(o,e,n);if(uj(o,await Ie.fee.getUserToken(i,{account:t}).then(e=>e?.address).catch(()=>void 0),n),uj(o,fj(i),n),!a)for(let e of r??[])uj(o,e,n);for(let e of o)if(await dj(i,t,e))return e;return o[0]}var hj=F((()=>{tj(),RO()}));function gj(e){if(e!==void 0)return IO[e]}function _j(e){let t=gj(e.chainId);return!!t&&de(e.currency,{strict:!1})&&fe(e.currency,t.token)}function vj(e){let t=gj(e.chainId),n=e.transfers.length===1?e.transfers[0]:void 0;if(!t||!n?.memo)return;let r=BigInt(n.amount),i=n.memo;return{calls:[{data:oe({abi:Pe.tip20,functionName:`approve`,args:[t.swap,r]}),to:t.token},{data:oe({abi:bj,functionName:`swapTo`,args:[t.token,r,e.currency,n.recipient,i]}),to:t.swap}],settlementSender:t.swap,transfers:[{amount:r,memo:i,recipient:n.recipient}]}}async function yj(e,t){let n=vj(t);if(n)try{return await Oe(e,Ie.token.getBalance.call(e,{account:t.account,token:n.calls[0].to}))<n.transfers[0].amount?void 0:(await Ee(e,{account:t.account,calls:n.calls}),n)}catch{return}}var bj,xj=F((()=>{RO(),bj=me([`function swapTo(address inputToken,uint256 amount,address targetToken,address recipient,bytes32 memo)`])}));function Sj(e){return{name:`MPP`,version:`3`,chainId:e}}function Cj(e){let{account:t,challengeId:n,realm:r}=e;return{account:t,challengeId:n,realm:r}}function wj(e){let{account:t,chainId:n,challengeId:r,realm:i}=e;return{domain:Sj(n),types:Dj,primaryType:Ej,message:Cj({account:t,challengeId:r,realm:i})}}function Tj(e){return`did:pkh:eip155:${e.chainId}:${e.address}`}var Ej,Dj,Oj=F((()=>{Ej=`Proof`,Dj={Proof:[{name:`account`,type:`address`},{name:`challengeId`,type:`string`},{name:`realm`,type:`string`}]}}));function kj(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:jj(e.maxAmount,e.decimals),maxAtomicAmount:e.maxAtomicAmount===void 0?void 0:BigInt(e.maxAtomicAmount)},r=UA({chain:ye,getClient:e.getClient,rpcUrl:LO}),i=RA({account:e.account}),a=yE(NE,{canHandleChallenge({challenge:t}){try{return Mj(e,n,t.request),!0}catch{return!1}},context:Nj,async createCredential({challenge:a,context:o}){Mj(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});WA(c,s);let l=s??c.chain?.id;if(GA(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`],m=i(c,o),h=async t=>await e.resolveAccount?.({account:m,chainId:l,operation:t})??m;if(BigInt(d)===0n){let e=await h({kind:`signPaymentProof`});return kS({challenge:a,payload:{signature:await Me(c,{account:e,...wj({account:e.address,chainId:l,challengeId:a.id,realm:a.realm})}),type:`proof`},source:Tj({address:e.address,chainId:l})})}let g=u.currency,_=_j({chainId:l,currency:g}),v=YA({challengeId:a.id,clientId:t,serverId:a.realm}),y=cj({amount:d,methodDetails:{...f,memo:v},recipient:u.recipient}),b=y.map(e=>Ie.token.transfer.call(c,{amount:BigInt(e.amount),...e.memo&&{memo:e.memo},to:e.recipient,token:g})),x=rj(o?.autoSwap??e.autoSwap,aj),S=f?.machineTokenEnabled===!0?vj({chainId:l,currency:g,transfers:y}):void 0,C=m,w;if(S){let e=await(async()=>{try{return await h({calls:S.calls,kind:`executeCalls`})}catch{return}})();e&&(w=await yj(c,{account:e.address,chainId:l,currency:g,transfers:y}),w&&(C=e))}let T;w||(C=await h({kind:`executeCalls`,...x?{}:{calls:b}}),T=x?await nj(c,{account:C.address,amountOut:BigInt(d),tokenOut:g,tokenIn:x.tokenIn,slippage:x.slippage,maxAmountIn:x.maxAmountIn}):void 0);let ee=w?.calls??[...T??[],...b],te=pj(l),E=w||_?await mj({account:C.address,allowedTokens:te,candidateTokens:te,client:c,prioritizeCandidates:!0}):void 0,ne=(()=>{let t=o?.mode??e.mode;if(t){if(!p.includes(t))throw Error(`Challenge does not support ${t} mode.`);return t}let n=C.type===`json-rpc`?`push`:`pull`;return p.includes(n)?n:p[0]})(),D=(()=>{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(ne===`push`){let{receipts:e}=C.type===`local`?{receipts:[await Ae(c,{account:C,calls:ee,...E?{feeToken:E}:{},nonceKey:`expiring`,validBefore:D})]}:await ke(c,{account:C,...E?{capabilities:{feeToken:E}}:{},calls:ee,experimental_fallback:ee.length===1,forceAtomic:ee.length>1}),t=e?.[0]?.transactionHash;if(!t)throw Error(`No transaction receipt returned.`);return kS({challenge:a,payload:{hash:t,type:`hash`},source:Tj({address:C.address,chainId:l})})}let O=await De(c,{account:C,calls:ee,...E?{feeToken:E}:{},nonceKey:`expiring`,validBefore:D});if(O.gas=(O.gas??0n)+5000n,f?.feePayer){let e=O;delete e.feePayerSignature,delete e.feeToken,e.feePayer=!0}return kS({challenge:a,payload:{signature:await je(c,O),type:`transaction`},source:Tj({address:C.address,chainId:l})})}}),o=new Map,s=async t=>{Mj(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 Mw({...a,createCredential:s},Aj)}function Aj(e){let t=NE.schema.credential.payload.safeParse(TS(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(qe.serializedType))return;let i=qe.deserialize(r);if(!(!i.signature||i.feePayerSignature===null)&&qe.serialize(i)===r)return pe(r)}function jj(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 N(e,t)}}function Mj(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)&&GA(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.`)}var Nj,Pj=F((()=>{Lw(),PS(),bE(),zA(),qA(),Zx(),$A(),sj(),lj(),RO(),hj(),xj(),Oj(),IE(),Nj=J.object({account:J.optional(J.custom()),autoSwap:J.optional(J.custom()),mode:J.optional(J.enum(CE))})}));function Fj(e){return BigInt(e.authorizedSigner)===0n?e.payer:e.authorizedSigner}function Ij(e){let t=ne.encode(ne.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 re.keccak256(t)}function Lj(e){return qe.encodeForSigning(e)}function Rj(e){let{feePayer:t,transaction:n}=e;return t?{...n,feePayerSignature:null}:n}function zj(e,t){return re.keccak256(k.concat(Lj(e),t.sender))}var Bj=F((()=>{aD()})),Vj,Hj,Uj,Wj,Gj=F((()=>{Vj=[{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`}],Hj=[{name:`settled`,type:`uint96`},{name:`deposit`,type:`uint96`},{name:`closeRequestedAt`,type:`uint32`}],Uj={name:`descriptor`,type:`tuple`,components:Vj},Wj=[{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:[Uj,{name:`cumulativeAmount`,type:`uint96`},{name:`signature`,type:`bytes`}],outputs:[]},{type:`function`,name:`topUp`,stateMutability:`nonpayable`,inputs:[Uj,{name:`additionalDeposit`,type:`uint96`}],outputs:[]},{type:`function`,name:`close`,stateMutability:`nonpayable`,inputs:[Uj,{name:`cumulativeAmount`,type:`uint96`},{name:`captureAmount`,type:`uint96`},{name:`signature`,type:`bytes`}],outputs:[]},{type:`function`,name:`requestClose`,stateMutability:`nonpayable`,inputs:[Uj],outputs:[]},{type:`function`,name:`withdraw`,stateMutability:`nonpayable`,inputs:[Uj],outputs:[]},{type:`function`,name:`getChannel`,stateMutability:`view`,inputs:[Uj],outputs:[{type:`tuple`,components:[{name:`descriptor`,type:`tuple`,components:Vj},{name:`state`,type:`tuple`,components:Hj}]}]},{type:`function`,name:`getChannelState`,stateMutability:`view`,inputs:[{name:`channelId`,type:`bytes32`}],outputs:[{type:`tuple`,components:Hj}]},{type:`function`,name:`getChannelStatesBatch`,stateMutability:`view`,inputs:[{name:`channelIds`,type:`bytes32[]`}],outputs:[{type:`tuple[]`,components:Hj}]},{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 Kj(e,t){return{name:eM,version:tM,chainId:t,verifyingContract:e}}function qj(e,t){return Ue.getVoucherSignPayload({chainId:e,channelId:t.channelId,cumulativeAmount:t.cumulativeAmount})}function Jj(e,t,n){return e.toLowerCase()===Ue.address.toLowerCase()?qj(t,n):le({domain:Kj(e,t),types:nM,primaryType:`Voucher`,message:{channelId:n.channelId,cumulativeAmount:n.cumulativeAmount}})}function Yj(e){return e===`secp256k1`||e===`p256`||e===`webAuthn`}function Xj(e,t){return Fe.signVoucher(e,{chainId:t.chainId,channel:t.channelId,cumulativeAmount:t.cumulativeAmount})}async function Zj(e,t,n,r,i){let a=await(async()=>{if(r.toLowerCase()===Ue.address.toLowerCase())try{return await Xj(t,{chainId:i,channelId:n.channelId,cumulativeAmount:n.cumulativeAmount})}catch{}return Me(e,{account:t,domain:Kj(r,i),types:nM,primaryType:`Voucher`,message:n})})(),o=Ge.from(a);if(!Yj(o.type))throw Error(`TIP-1034 vouchers require a TIP-1020 primitive signature; received "${o.type}".`);return Ge.serialize(o)}async function Qj(e,t,n,r,i){let a=await Me(e,{account:t,domain:Kj(r,i),types:rM,primaryType:`CloseAuthorization`,message:n}),o=Ge.from(a);if(!Yj(o.type))throw Error(`TIP-1034 close authorizations require a TIP-1020 primitive signature; received "${o.type}".`);return Ge.serialize(o)}function $j(e,t,n,r){try{let i=Ge.from(n.signature);if(!Yj(i.type)||Ge.serialize(i).toLowerCase()!==n.signature.toLowerCase())return!1;let a=Jj(e,t,n),o=Ge.extractAddress({payload:a,signature:i});return Ge.verify(i,{address:o,payload:a})&&ej(o,r)}catch{return!1}}var eM,tM,nM,rM,iM=F((()=>{tj(),eM=`TIP20 Channel Reserve`,tM=`1`,nM={Voucher:[{name:`channelId`,type:`bytes32`},{name:`cumulativeAmount`,type:`uint96`}]},rM={CloseAuthorization:[{name:`channelId`,type:`bytes32`},{name:`cumulativeAmount`,type:`uint96`}]}}));function aM(e){return typeof e==`object`&&!!e}function oM(e){return typeof e==`string`&&de(e,{strict:!1})?e:void 0}function sM(e){return oM(e.accessKeyAddress)}function cM(){let e=BigInt(Math.floor(Date.now()/1e3))-60n;return e<=0n?0:Number(BigInt(k.random(8))%e)}function lM(e){return sM(e)??e.address}async function uM(e,t){let{account:n,calls:r,feePayer:i,feeToken:a,validAfter:o}=t;return De(e,{account:n,calls:r,nonceKey:`expiring`,...i?{feePayer:!0}:{},feeToken:a,...o===void 0?{}:{validAfter:o}})}async function dM(e,t){return await je(e,t)}function fM(e,t,n=!1){let r=e.request.methodDetails,i=aM(r)?oM(r.escrowContract)??oM(r.escrow):void 0,a=t??`0x4d50500000000000000000000000000000000000`;if(i&&!mM(i,a)&&(!n||t!==void 0))throw Error(`Tempo session escrow ${i} does not match client escrow ${a}.`);return i&&!mM(i,a)?i:a}function pM(e,t,n,r){return kS({challenge:e,payload:t,source:`did:pkh:eip155:${n}:${r.address}`})}function mM(e,t){return e.toLowerCase()===t.toLowerCase()}async function hM(e,t,n,r,i,a=iD){let o=Ij({...n,chainId:i,escrow:a}),s=zE(r),c=await Zj(e,t,{channelId:o,cumulativeAmount:s},a,i);return{action:`voucher`,channelId:o,descriptor:n,cumulativeAmount:s.toString(),signature:c}}async function gM(e,t,n,r,i,a=iD){let o=await hM(e,t,n,r,i,a),s=await Qj(e,t,{channelId:o.channelId,cumulativeAmount:zE(BigInt(o.cumulativeAmount))},a,i);return{action:`close`,channelId:o.channelId,descriptor:n,cumulativeAmount:o.cumulativeAmount,signature:o.signature,closeSignature:s}}async function _M(e,t,n){let r=lM(t),i=n.escrow??`0x4d50500000000000000000000000000000000000`,a=n.operator??`0x0000000000000000000000000000000000000000`,o=k.random(32),s=zE(n.deposit),c=zE(n.initialAmount),l=oe({abi:Wj,functionName:`open`,args:[n.payee,a,n.token,s,o,r]}),u=await dM(e,await uM(e,{account:t,calls:[...n.prefixCalls??[],{to:i,data:l}],feePayer:n.feePayer,feeToken:n.feeToken??n.token})),d=ze.deserialize(u),f={authorizedSigner:r,expiringNonceHash:zj(Rj({...n.feePayer?{feePayer:!0}:{},transaction:d}),{sender:t.address}),operator:a,payee:n.payee,payer:t.address,salt:o,token:n.token},p=Ij({...f,chainId:n.chainId,escrow:i});return{action:`open`,type:`transaction`,channelId:p,transaction:u,signature:await Zj(e,t,{channelId:p,cumulativeAmount:c},i,n.chainId),descriptor:f,cumulativeAmount:c.toString(),authorizedSigner:f.authorizedSigner}}async function vM(e,t,n,r,i,a,o=iD,s=[],c=n.token){let l=Ij({...n,chainId:i,escrow:o}),u=zE(r);return{action:`topUp`,type:`transaction`,channelId:l,transaction:await dM(e,await uM(e,{account:t,calls:[...s,{to:o,data:oe({abi:Wj,functionName:`topUp`,args:[n,u]})}],feePayer:a,feeToken:c,validAfter:cM()})),descriptor:n,additionalDeposit:u.toString()}}var yM=F((()=>{PS(),Bj(),Gj(),aD(),iM()}));function bM(e){let{payee:t,token:n,escrow:r,chainId:i}=e;return`${t.toLowerCase()}:${n.toLowerCase()}:${r.toLowerCase()}:${i}`}function xM(e){return bM({payee:e.descriptor.payee,token:e.descriptor.token,escrow:e.escrow,chainId:e.chainId})}function SM(){let e=new Map;return{get:t=>e.get(t),set(t){e.set(xM(t),t)},delete(t){e.delete(t)}}}function CM(e){return{...e,cumulativeAmount:e.cumulativeAmount.toString(),deposit:e.deposit.toString()}}function wM(e){return{...e,cumulativeAmount:BigInt(e.cumulativeAmount),deposit:BigInt(e.deposit)}}function TM(e,t){jM.set(e,jM.get(t)??t)}async function EM(e,t,n){let r=AM.get(e);r||(r=new Map,AM.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 DM(e,t,n){return EM(jM.get(e)??e,`funding:${t}`,n)}async function OM(e,t){await EM(e,`write:${xM(t)}`,async()=>{let n=await e.get(xM(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 kM(e,t){await EM(e,`write:${t}`,async()=>{(await e.get(t))?.uncertainTopUp||await e.delete(t)})}var AM,jM,MM=F((()=>{AM=new WeakMap,jM=new WeakMap}));function NM(e){if(e<0n||e>IM)throw new Y({reason:`amount exceeds uint96 range`})}async function PM(e,t,n=iD,r){return FM(await Oe(e,{address:n,abi:Wj,functionName:`getChannelState`,args:[t],...r===void 0?{}:{blockNumber:r}}))}function FM(e){return NM(e.settled),NM(e.deposit),{settled:e.settled,deposit:e.deposit,closeRequestedAt:e.closeRequestedAt}}var IM,LM=F((()=>{SS(),Gj(),aD(),IM=2n**96n-1n}));function RM(e){return`cumulativeAmount`in e}function zM(e){if(RM(e))return BigInt(e.cumulativeAmount)}async function BM(e,t){t.opened?await OM(e.store,t):await kM(e.store,xM(t)),e.notifyUpdate(t)}async function VM(e,t,n){let r=zM(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 BM(e,i))}function HM(e){return e?.action!==void 0}function UM(e){return HM(e)&&e.descriptor!==void 0}function WM(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 N(i,t)}function GM(e,t,n,r){let i=WM(e,t,n);if(i===void 0)throw Error(`${n} required for ${r} action`);return i}function KM(e){return typeof e==`object`&&!!e}function qM(e){return typeof e==`string`&&de(e,{strict:!1})?e:void 0}function JM(e){let t=e.request.methodDetails;return KM(t)?{chainId:typeof t.chainId==`number`?t.chainId:void 0,escrowContract:qM(t.escrowContract),escrow:qM(t.escrow),feePayer:typeof t.feePayer==`boolean`?t.feePayer:void 0,feeToken:qM(t.feeToken),operator:qM(t.operator),sessionSnapshot:kx(t,Nx.sessionSnapshot)}:{}}function YM(e,t){if(typeof e==`string`&&de(e,{strict:!1}))return e;throw Error(`tempo session challenge missing ${t}`)}function XM(e){if(typeof e==`string`)return BigInt(e);throw Error(`tempo session challenge missing amount`)}function ZM(e){return typeof e==`string`?e:void 0}async function QM(e){let{allowCustomEscrow:t,challenge:n,escrowOverride:r,allowedChainIds:i,getClient:a}=e,o=JM(n);(o.chainId!==void 0||i?.length===0)&&GA(i,o.chainId);let s=o.chainId??(i?.length===1?i[0]:void 0),c=await a({chainId:s});WA(c,s);let l=s??c.chain?.id;if(GA(i,l),!l)throw Error(`No chainId configured for TIP-1034 session challenge.`);let u=fM(n,r,t),d=YM(n.request.recipient,`recipient`),f=YM(n.request.currency,`currency`);return{amount:XM(n.request.amount),challenge:n,chainId:l,client:c,escrow:u,feePayer:o.feePayer,feeToken:o.feeToken,key:bM({payee:d,token:f,escrow:u,chainId:l}),operator:o.operator,payee:d,snapshot:o.sessionSnapshot,suggestedDepositRaw:ZM(n.request.suggestedDeposit),token:f}}async function $M(e){let{channelId:t,client:n,descriptor:r,expected:i,readChannelState:a=PM}=e,o=Ij({...r,chainId:i.chainId,escrow:i.escrow});eN({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 eN(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(!mM(r.payee,a))throw Error(`context descriptor payee does not match challenge`);if(!mM(r.token,s))throw Error(`context descriptor token does not match challenge`);if(!mM(r.payer,o))throw Error(`context descriptor payer does not match account`);if(!mM(Fj(r),t))throw Error(`context descriptor authorizedSigner does not match account`)}function tN(e){let{context:t,snapshot:n}=e,r=t?.descriptor??n?.descriptor;if(r)return{...t,channelId:t?.channelId??n?.channelId,descriptor:r}}function nN(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=WM(t,n,`cumulativeAmount`);return o===void 0?a+r:o+r}async function rN(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(!$j(i.escrow,i.chainId,{channelId:a.channelId,cumulativeAmount:s,signature:a.signature},Fj(i.descriptor)))throw Error(`session snapshot highest voucher signature is invalid`);let f=await $M({channelId:i.channelId,client:n,descriptor:i.descriptor,expected:{chainId:i.chainId,escrow:i.escrow,payee:i.descriptor.payee,payer:t.address,authorizedSigner:lM(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 iN(e,t){return mM(e.address,t.payer)?mM(lM(e),Fj(t)):!1}function aN(e){let{account:t,entry:n,context:r,decimals:i,maxDeposit:a,resolved:o}=e;if(HM(r)){if(!UM(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=tN({context:r,snapshot:o.snapshot});return!n&&s&&iN(t,s.descriptor)?{type:`recover`,account:t,context:s,decimals:i,maxDeposit:a,resolved:o}:n?.opened&&iN(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 oN(e,t,n=!1){switch(e.type){case`open`:return cN(e,t,n);case`recover`:return lN(e,t);case`voucher`:return uN(e,t);case`manual`:return dN(e,t,n)}}async function sN(e,t){if(e)return await nj(t.client,{account:t.account,amountOut:t.amountOut,tokenOut:t.tokenOut,tokenIn:e.tokenIn,slippage:e.slippage,maxAmountIn:e.maxAmountIn})}async function cN(e,t,n){let{account:r,resolved:i}=e,a=ED({contextDepositRaw:e.context?.depositRaw,maxDeposit:e.maxDeposit,requestAmount:i.amount,suggestedDepositRaw:i.suggestedDepositRaw}),o=await _M(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 sN(n,{account:r.address,amountOut:a,client:i.client,tokenOut:i.token}),token:i.token});return await BM(t,{channelId:o.channelId,cumulativeAmount:i.amount,deposit:a,descriptor:o.descriptor,escrow:i.escrow,chainId:i.chainId,opened:!0}),o}async function lN(e,t){let{account:n,context:r,decimals:i,maxDeposit:a,resolved:o}=e,{descriptor:s}=r,c=await $M({channelId:r.channelId,client:o.client,descriptor:s,expected:{chainId:o.chainId,escrow:o.escrow,payee:o.payee,payer:n.address,authorizedSigner:lM(n),token:o.token}}),l=nN({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`);OD(l,a);let u=await hM(o.client,n,s,l,o.chainId,o.escrow),d=await t.store.get(o.key);return await BM(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 uN(e,t){let{account:n,entry:r,resolved:i}=e,a=r.cumulativeAmount+i.amount;OD(a,e.maxDeposit);let o=await hM(i.client,n,r.descriptor,a,i.chainId,i.escrow);return r.cumulativeAmount=a,await BM(t,r),o}async function dN(e,t,n){let{account:r,context:i,decimals:a,resolved:o}=e,{descriptor:s}=i,c=Ij({...s,chainId:o.chainId,escrow:o.escrow});eN({channelId:i.channelId,descriptor:s,expectedChannelId:c,payee:o.payee,payer:r.address,authorizedSigner:lM(r),token:o.token});let l=await fN({account:r,channelId:c,context:i,decimals:a,descriptor:s,resolved:o},n);return await VM(t,o.key,l),l}async function fN(e,t){switch(e.context.action){case`open`:return pN(e);case`topUp`:return mN(e,t);case`voucher`:return hN(e);case`close`:return gN(e)}}async function pN(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=GM(r,i,`cumulativeAmount`,`open`),c=await hM(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 mN(e,t){let{account:n,channelId:r,context:i,decimals:a,descriptor:o,resolved:s}=e,c=GM(i,a,`additionalDeposit`,`topUp`);return i.transaction?{action:`topUp`,type:`transaction`,channelId:r,transaction:i.transaction,descriptor:o,additionalDeposit:c.toString()}:vM(s.client,n,o,c,s.chainId,s.feePayer,s.escrow,await sN(t,{account:n.address,amountOut:c,client:s.client,tokenOut:s.token}),s.feeToken)}function hN(e){let{account:t,context:n,decimals:r,descriptor:i,resolved:a}=e;return hM(a.client,t,i,GM(n,r,`cumulativeAmount`,`voucher`),a.chainId,a.escrow)}function gN(e){let{account:t,context:n,decimals:r,descriptor:i,resolved:a}=e;return gM(a.client,t,i,GM(n,r,`cumulativeAmount`,`close`),a.chainId,a.escrow)}var _N,vN,yN,bN=F((()=>{Fx(),qA(),Zx(),sj(),LM(),Bj(),iM(),yM(),MM(),UD(),_N=J.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]*$/.test(e)),vN=J.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]{64}$/.test(e)),yN=J.object({account:J.optional(J.custom()),autoSwap:J.optional(J.custom()),action:J.optional(J.enum([`open`,`topUp`,`voucher`,`close`])),channelId:J.optional(vN),cumulativeAmount:J.optional(Vx()),cumulativeAmountRaw:J.optional(J.string()),transaction:J.optional(_N),descriptor:J.optional(J.custom()),additionalDeposit:J.optional(Vx()),additionalDepositRaw:J.optional(J.string()),depositRaw:J.optional(J.string())})}));async function xN(e,t){let n=TN.get(e)??new Map;TN.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 SN(e,t){try{return t?.channelId.toLowerCase()===e.channelId.toLowerCase()&&BigInt(t.acceptedCumulative)===e.cumulativeAmount}catch{return!1}}function CN(e,t,n){try{let r=e.response?.headers.get(q.paymentReceipt);if(r){let e=JE(r);if(e.challengeId===t.id&&SN(n,e))return!0}}catch{}return e.challenges?.some(e=>XD(e)?SN(n,ZD(e)):!1)??!1}function wN(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:f}=e,p=UA({chain:He,getClient:c,rpcUrl:LO}),m=RA({account:t}),h=l===void 0?void 0:N(l,a),g=u===void 0?void 0:N(u,a),_=i??SM(),v={store:_,notifyUpdate:e=>d?.(e)},y=async(e,t,n)=>{let r=m(e.client,t),i=t?.action?t.descriptor:n?.descriptor??tN({context:t,snapshot:e.snapshot})?.descriptor;return await f?.({account:r,chainId:e.chainId,operation:{kind:`authorizePaymentChannel`,...i?{authority:Fj(i)}:{}}})??r},b=async(e,t,n)=>aN({account:await y(e,t,n),entry:n,context:t,decimals:a,maxDeposit:h,resolved:e}),x=yE(PE,{canHandleChallenge:({challenge:e})=>XD(e),context:yN,async createCredential(e){let{challenge:t,context:i}=e,a=await QM({allowCustomEscrow:n,challenge:t,escrowOverride:o,allowedChainIds:s,getClient:p}),c=Aw(e),l=()=>{};try{let e=!HM(i)&&i?.descriptor===void 0;e&&(l=await xN(_,a.key),c&&(await _.get(a.key))?.opened&&await c.prepare());let n=await _.get(a.key),o=await b(a,i,n);if(!e&&c&&o.type===`open`){l=await xN(_,a.key);let e=await _.get(a.key);e?.channelId!==n?.channelId&&(n=e,n?.opened&&(await c.prepare(),n=await _.get(a.key)),o=await b(a,i,n))}let s,u=c&&o.type===`open`?{store:{get:e=>_.get(e),async set(e){s=e},delete:e=>_.delete(e)},notifyUpdate(){}}:v,d=await pM(t,await oN(o,u,rj(i?.autoSwap??r,aj)),a.chainId,o.account);if(c&&s){let e=s;c.settle=async n=>{let r=n.status===`accepted`||CN(n,t,e);if(!r&&n.status===`pending`)return!1;try{if(r){let t=await _.get(a.key);(!t?.opened||t.channelId.toLowerCase()!==e.channelId.toLowerCase())&&(await OM(_,e),v.notifyUpdate(e))}return!0}finally{l()}}}else l();return d}catch(e){throw l(),e}}}),S=async({challenge:e,channel:t,deposit:n,fetch:r,input:i,requiredCumulative:a,signal:o})=>DM(_,xM(t),async()=>{o?.throwIfAborted();let s=await _.get(xM(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=DD({deposit:c,maxDeposit:h,requiredCumulative:a,suggestedDeposit:e.request.suggestedDeposit===void 0?void 0:BigInt(e.request.suggestedDeposit),topUpAmount:g});l>0n&&await nO({additionalDeposit:l,challenge:e,channel:t,channelId:t.channelId,createSessionCredential:(e,t)=>x.createCredential({challenge:e,context:t}),onUncertainFunding:async e=>{let t=await _.get(xM(e)),n={...t?.channelId===e.channelId?t:e,uncertainTopUp:!0};await OM(_,n),v.notifyUpdate(n)},fetch:r,input:i,signal:o});let u=c+l;if(u===t.deposit)return;let d=await _.get(xM(t)),f=d?.channelId.toLowerCase()===t.channelId.toLowerCase()?d:t,p={...f,deposit:f.deposit>u?f.deposit:u};await OM(_,p),v.notifyUpdate(p)});return xw(x,async({challenge:e,context:t,fetch:r,input:i,signal:a})=>{if(!XD(e))return;let c=t===void 0?void 0:yN.parse(t);if(HM(c))return;let l=await QM({allowCustomEscrow:n,challenge:e,escrowOverride:o,allowedChainIds:s,getClient:p}),u=await _.get(l.key);if(!u?.opened)return;let d=l.snapshot?.channelId.toLowerCase()===u.channelId.toLowerCase()?l.snapshot:void 0,f=u.cumulativeAmount+GE(e),m=d?BigInt(d.requiredCumulative):f,h=m>f?m:f,g=d?BigInt(d.deposit):u.deposit,v=g>u.deposit?g:u.deposit;h<=v&&v===u.deposit||!iN(await y(l,c,u),u.descriptor)||await S({challenge:e,channel:u,deposit:v,fetch:r,input:i,requiredCumulative:h,signal:a})}),Dw(x,async({challenge:e,credential:t,fetch:r,headers:i,input:a,refetch:c,response:l,signal:u})=>{if(!XD(e))return l;if(!YE(l))return WE(TS(t).payload).action===`open`&&i.get(`accept`)?.toLowerCase().includes(`text/event-stream`)?await c?.()??l:l;let d=(await QM({allowCustomEscrow:n,challenge:e,escrowOverride:o,allowedChainIds:s,getClient:p})).key,f=await _.get(d),m={assertVoucherWithinLocalLimit:e=>OD(e,h),createSessionCredential:(e,t)=>x.createCredential({challenge:e,context:t}),fetch:r,getChannel:()=>f??null,async topUpIfNeeded({deposit:t,requiredCumulative:n,signal:i}){f&&await S({challenge:e,channel:f,deposit:f.deposit>t?f.deposit:t,fetch:r,input:a,requiredCumulative:n,signal:i})}};return pO({onNeedVoucher:(t,n)=>mO({challenge:e,driver:m,headers:i,input:a,signal:n},t),onReceipt(){},response:l,signal:u})})}var TN,EN=F((()=>{Ew(),Lw(),Fx(),PS(),bE(),zA(),qA(),sj(),RO(),IE(),Bj(),aD(),yM(),MM(),bN(),UD(),TN=new WeakMap}));function DN(e,t){kN.set(e,t)}function ON(e){let t=kN.get(e);if(!t)throw Error(`Session manager internals are unavailable.`);return t}var kN,AN=F((()=>{kN=new WeakMap}));function jN(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 MN(e){let t=jN(`close-ready`),n=jN(`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)}}}var NN=F((()=>{}));function PN(e){return e.method===jx.tempo&&e.intent===Mx.charge}function FN(e){if(!PN(e)||typeof e.request.amount!=`string`)return!1;try{return BigInt(e.request.amount)===0n}catch{return!1}}function IN(e,t,n){if(!n)return t;let r={...qw(e instanceof Request?e.headers:void 0),...qw(t?.headers)};return Object.keys(r).some(e=>e.toLowerCase()===q.paymentSession.toLowerCase())?t:{...t,headers:{...r,[q.paymentSession]:n}}}function LN(e,t){return e===void 0?t:{...yN.parse(e),...t}}function RN(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:N(e.maxDeposit,t),topUpAmount:e.topUpAmount===void 0?null:N(e.topUpAmount,t),WebSocket:n}}function zN(e){let t=e.client?.chain?.id;(t!==void 0||e.allowedChainIds?.length===0)&&GA(e.allowedChainIds,t);let n=e.allowCustomEscrow??!1,r=RN(e),i=UA({chain:He,getClient:e.client?()=>e.client:e.getClient,rpcUrl:LO}),a=RA({account:e.account}),o=PD(),s=e.credentialContext===void 0?void 0:LN(e.credentialContext,{}),c=MN({getSocketSession:()=>o.socketSession}),l=e.channelStore??SM(),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=>OM(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=xM(e);e.opened&&u.delete(e.channelId),d?.trackCreates&&!d.seenExisting.has(t)&&d.created.set(t,e),await p(e)},delete:e=>kM(l,e)};TM(m,l);async function h(e){let t=xM(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(kM(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(kM(l,t)).catch(()=>void 0)}e.created.clear(),await M(e.committed??e.previous)}}function _(e){let t=kx(e.request.methodDetails,Nx.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=zD({channel:o.channel,spent:o.spent,state:o.state}),!0;return!1}function v(e){return _D(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=zD({channel:o.channel,spent:o.spent,state:o.state}))}let x=wN({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)}}),S=ww(x);S&&xw(x,e=>ae(()=>Promise.resolve(S(e)),e.signal)),Ow(x);let C=kj({allowedChainIds:e.allowedChainIds,account:e.account,getClient:e.client?()=>e.client:e.getClient,resolveAccount:e.resolveAccount}),w=Gw({fetch:r.fetch,methods:[x],onChallenge:async(e,t)=>{if(!YD(e))return;let n=d,r=n&&n.challengesReceived>0&&e.id===o.lastChallenge?.id,i=r&&$x(e)===$x(o.lastChallenge);n&&n.challengesReceived++,!i&&(_(e)||(n?.created.size?await g():r&&await M(n.committed??n.previous)),o.lastChallenge=e,v({type:`challengeReceived`,challengeId:e.id}))}});function T(e,t){return x.createCredential({challenge:e,context:LN(s,t)})}function ee(e){FD({maxVoucherCumulative:r.maxVoucherCumulative,receipt:e,runtime:o})}function te(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 E(t){let n=t.headers.get(q.paymentSessionSnapshot);if(!n)return;let r=sD(n);GA(e.allowedChainIds,r.chainId);let s=await i({chainId:r.chainId});WA(s,r.chainId);let c=a(s),{entry:l,spent:u}=await rN({account:await e.resolveAccount?.({account:c,chainId:r.chainId,operation:{authority:Fj(r.descriptor),kind:`authorizePaymentChannel`}})??c,client:s,snapshot:r});return A(l.cumulativeAmount),await Promise.resolve(m.set(l)).catch(()=>void 0),o.channel=l,o.spent=u,l}async function ne(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:{...qw(i),...qw(n?.headers),[q.acceptPayment]:`${jx.tempo}/${Mx.charge}`}};try{let t=await r.fetch(l,u);if(t.status!==402)return await E(t);let n=cS(t).find(PN);if(!n||!FN(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;Rw(n,i,e.trustedTempoProofRealms);let a=await C.createCredential({challenge:n,context:{}}),o=await r.fetch(l,VC({...u,redirect:`manual`},fS(n),a));return o.ok?await E(o):void 0}catch{return}}function D(e,t){let n=o.socketSession;return LD({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 O(e,t){let n=ZD(t);if(!n)return;if(Ij({...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 re(e,t){let n=O(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 k(e,t=e.challenge,n=!1){let r=(n?re(e,t):O(e.channel,t))?.acceptedCumulative??D(t,e.channelId);if(r>e.channel.cumulativeAmount)throw Error(`fallback close amount exceeds local voucher state`);return A(r),r.toString()}function A(e){SD({cumulativeAmount:e,maxVoucherCumulative:r.maxVoucherCumulative})}let j,ie;async function ae(e,t){if(ie)throw ie;for(;;){let e=j;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(),ie)throw ie;let n=e();j=n;try{return await n}catch(e){throw e instanceof jO&&(ie=Error(`Session funding outcome is unknown; reconcile the pending payment before creating a new session manager.`)),e}finally{j===n&&(j=void 0)}}async function oe(e){if(!o.channel)throw Error(`Cannot top up session: no active channel`);return DM(l,xM(o.channel),async()=>{let{knownDeposit:t,...n}=e,i=o.channel?await m.get(xM(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 nO({...n,channel:o.channel,createSessionCredential:T,fetch:r.fetch,onUncertainFunding:async e=>{let t=await m.get(xM(e)),n={...t?.channelId===e.channelId?t:e,uncertainTopUp:!0};o.channel?.channelId===e.channelId&&(o.channel=n),await m.set(n),b(n)}});ee(a);let s=o.channel,c=qD({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 se(e){return ae(async()=>{e.signal?.throwIfAborted();let t=o.channel?.channelId===e.channelId?o.channel.deposit:0n,n=t>e.deposit?t:e.deposit,i=DD({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 oe({challenge:e.challenge,input:e.input,channelId:e.channelId,additionalDeposit:i,knownDeposit:n,signal:e.signal})},e.signal)}async function ce(e,t){let n=RD({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 M(e){let t=BD(e,o.channel);o.channel=t.channel,o.spent=t.spent,o.state=t.state,o.channel?.opened&&await p(o.channel)}function le(e){let t=e.headers.get(q.paymentReceipt),n=t?JE(t):null;return ee(n),Object.assign(e,{receipt:n,challenge:o.lastChallenge,channelId:o.channel?.channelId??null,cumulative:o.channel?.cumulativeAmount??0n})}async function ue(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=zD({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 ne(e,t),i.trackCreates=!0;let a=IN(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=IN(e,t,void 0),!0)}for(;;){let t;try{t=await w(e,a)}catch(e){if(i.created.size?await g():await M(i.committed??n),await l())continue;throw e}let s=le(t),c=!1;if(s.status===402){let t=await iO({input:e,init:a,response:s,createSessionCredential:T,fetch:r.fetch,getChannel:()=>o.channel,restoreCumulative:ce,setChallenge(e){o.lastChallenge=e},topUpIfNeeded:se});t&&(c=!0,s=le(t))}if(!c&&!s.ok&&!s.receipt){if(i.created.size?await g():await M(i.committed??n),await l())continue;return s}return s}}finally{d=void 0}}async function de(e){let t=await oO({createSessionCredential:T,fetch:r.fetch,getMinimumSpent:()=>o.spent,headers:o.lastHeaders,lastUrl:o.lastUrl,resolveSignedCloseAmount:t=>k(e,t,!0),signedCloseAmount:k(e),setChallenge(e){o.lastChallenge=e},target:e});return t&&(te(),v({type:`closeStarted`}),v({type:`closed`,receipt:t})),t}let fe={createSessionCredential:T,doFetch:ue,fetch:r.fetch,getChannel:()=>o.channel,getChallenge:()=>o.lastChallenge,assertVoucherWithinLocalLimit:A,acceptReceipt(e){ee(e)},topUpIfNeeded:se},pe={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:ue,async topUp(e){let t=KD({amount:e,assertVoucherWithinLocalLimit:A,channel:o.channel,decimals:r.decimals,lastChallenge:o.lastChallenge,lastUrl:o.lastUrl});return ae(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=KD({amount:e,assertVoucherWithinLocalLimit:A,channel:o.channel,decimals:r.decimals,lastChallenge:t.challenge,lastUrl:t.input});return oe({additionalDeposit:n.additionalDeposit,challenge:n.challenge,channelId:n.channelId,headers:o.lastHeaders,input:n.input})})},async sse(e,t){return sO(e,t,fe)},async ws(e,t){if(!r.WebSocket)throw Error("No WebSocket implementation available. Pass `webSocket` to sessionManager() in this runtime.");let n=eO(e),i=t?.signal?{signal:t.signal}:void 0;await ne(n,i);let a=o.channel?.opened?o.channel.channelId:void 0,{challenge:s,credential:l,httpUrl:u,wsUrl:d}=await gO({async createSessionCredential(e,i){return o.lastChallenge=e,await Cw(x,{challenge:e,context:i,fetch:r.fetch,input:n,signal:t?.signal}),T(e,i)},fetch:r.fetch,input:e,onProbeUrl(e){o.lastUrl=e.toString()},probeInit:IN(n,i,a),signal:t?.signal});return o.lastChallenge=s,xO({challenge:s,credential:l,httpUrl:u,WebSocket:r.WebSocket,wsUrl:d,options:t,createSessionCredential:T,getChannel:()=>o.channel,setSocketSession(e){o.socketSession=e},async refreshChallenge(){let e=await hO({fetch:r.fetch,input:u,probeInit:IN(u,i,o.channel?.opened?o.channel.channelId:void 0),signal:t?.signal});return o.lastChallenge=e.challenge,e.challenge},assertVoucherWithinLocalLimit:A,acceptReceipt:ee,rejectCloseReady:c.rejectCloseReady,rejectReceipt:c.rejectReceipt,settleCloseReady:c.settleCloseReady,settleReceipt:c.settleReceipt,topUpIfNeeded:se,waitForReceipt:c.waitForReceipt})},async close(){let e=o.socketSession,t=kD({channel:o.channel,currentSocket:e,lastChallenge:o.lastChallenge});if(!t)return;let n=e?.socket;if(e&&n?.readyState===OO.OPEN){let r=await VD({activeSocket:n,createSessionCredential:T,currentSocket:e,spent:o.spent,target:t,waitForCloseReady:c.waitForCloseReady,waitForReceipt:c.waitForReceipt});return te(),v({type:`closeStarted`}),v({type:`closed`,receipt:r}),r}return de(t)}};return DN(pe,{consumeSseResponse(e,t,n){return cO(e,t,n,fe)},rehydrate({channel:e,challenge:t,input:n,spent:r}){if(!e.opened)throw Error(`Cannot restore a closed session channel.`);if(!YD(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.`);A(e.cumulativeAmount);let i=O(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})}}),pe}var BN=F((()=>{_S(),IT(),Ew(),Lw(),Hw(),UC(),Fx(),zA(),qA(),Pj(),RO(),MM(),bN(),EN(),Bj(),aD(),mD(),AN(),NN(),UD(),MO(),(function(e){e.serializeSnapshot=oD,e.deserializeSnapshot=sD})(zN||={})}));function VN(e){return e instanceof Date?e:new Date(e)}function HN(e){let t=e.getTime();if(!Number.isFinite(t))throw new Y({reason:`subscriptionExpires is invalid`});if(t%1e3!=0)throw new Y({reason:`subscriptionExpires must be representable as whole seconds`});let n=t/1e3;if(n<=0||!Number.isSafeInteger(n))throw new Y({reason:`subscriptionExpires cannot be represented in a Tempo key authorization`});return n}function UN(e){if(!/^[1-9]\d*$/.test(e.periodCount))throw new Y({reason:`periodCount is invalid`});let t=cP[e.periodUnit];if(t===void 0)throw new Y({reason:`periodUnit is invalid`});let n=BigInt(e.periodCount)*t;if(n>sP)throw new Y({reason:`subscription period cannot be represented as an unsigned 64-bit integer`});if(n>BigInt(2**53-1))throw new Y({reason:`subscription period cannot be represented exactly by this Tempo client`});return Number(n)}function WN(e){let{challengeExpires:t,request:n}=e;UN(n);let r=HN(VN(n.subscriptionExpires));if(t){let e=Math.floor(new Date(t).getTime()/1e3);if(!Number.isFinite(e)||r<=e)throw new Y({reason:`subscriptionExpires must be strictly later than challenge expires`})}}function GN(e){let t=iP(e.currency,`currency`),n=iP(e.recipient,`recipient`);return[{address:t,selector:oP,recipients:[n]}]}function KN(e){try{let t=k.fromBytes(D.toBytes(e));if(k.size(t)!==32)throw Error(`invalid challenge id size`);return t}catch{throw new Y({reason:`challenge id must encode 32 bytes`})}}async function qN(e){let{accessKey:t,account:n,challengeId:r,chainId:i,request:a}=e;if(typeof n.sign!=`function`)return;let o=YN({accessKey:t,challengeId:r,chainId:i,request:a}),s=await n.sign({hash:We.getSignPayload(o)}),c=Ge.from(s);if(c.type===`keychain`||c.type===`multisig`)throw new Y({reason:`keyAuthorization must use a primitive signature`});return We.from(o,{signature:s})}function JN(e){let{accessKey:t,challengeId:n,chainId:r,payload:i,request:a}=e;if(i.type!==`keyAuthorization`)throw new Y({reason:`invalid keyAuthorization payload`});let o=XN(i.signature),s=ZN(o);if(QN({accessKey:t,authorization:o,chainId:r}),o.witness?.toLowerCase()!==KN(n))throw new Y({reason:`keyAuthorization challenge mismatch`});return $N(o,a),tP(eP(o),a),nP(o.scopes,a),{authorization:o,source:{address:rP(o,s),chainId:r}}}function YN(e){let{accessKey:t,challengeId:n,chainId:r,request:i}=e;return We.from({address:iP(t.accessKeyAddress,`accessKeyAddress`),chainId:BigInt(r),expiry:HN(VN(i.subscriptionExpires)),limits:[{token:iP(i.currency,`currency`),limit:BigInt(i.amount),period:UN(i)}],scopes:GN(i),type:t.keyType,witness:KN(n)})}function XN(e){try{return We.deserialize(e)}catch(e){throw e instanceof We.InvalidSignatureTypeError?new Y({reason:`keyAuthorization must use a primitive signature`}):new Y({reason:`invalid keyAuthorization payload`})}}function ZN(e){let t=e.signature;if(!t)throw new Y({reason:`keyAuthorization must use a primitive signature`});return t}function QN(e){let{accessKey:t,authorization:n,chainId:r}=e;if(n.chainId!==BigInt(r))throw new Y({reason:`keyAuthorization chainId mismatch`});if(t){if(!fe(n.address,iP(t.accessKeyAddress,`accessKeyAddress`)))throw new Y({reason:`keyAuthorization access key mismatch`});if(n.type!==t.keyType)throw new Y({reason:`keyAuthorization key type mismatch`})}}function $N(e,t){if(WN({request:t}),e.expiry!==HN(VN(t.subscriptionExpires)))throw new Y({reason:`keyAuthorization expiry mismatch`})}function eP(e){let[t]=e.limits??[];if(!t||e.limits?.length!==1)throw new Y({reason:`keyAuthorization must contain exactly one token limit`});return t}function tP(e,t){if(!fe(e.token,iP(t.currency,`currency`)))throw new Y({reason:`keyAuthorization currency mismatch`});if(e.limit!==BigInt(t.amount))throw new Y({reason:`keyAuthorization amount mismatch`});if(e.period!==UN(t))throw new Y({reason:`keyAuthorization period mismatch`})}function nP(e,t){if(!e||e.length!==1)throw new Y({reason:`keyAuthorization must contain a recipient-scoped transferWithMemo call`});let n=iP(t.currency,`currency`),r=iP(t.recipient,`recipient`),i=new Set;for(let t of e){if(!fe(t.address,n))throw new Y({reason:`keyAuthorization call target mismatch`});let e=aP(t.selector);if(e!==`0xa9059cbb`&&e!==`0x95777d59`)throw new Y({reason:`keyAuthorization selector not allowed`});if(i.has(e))throw new Y({reason:`keyAuthorization duplicate selector`});if(i.add(e),t.recipients?.length!==1||!fe(t.recipients[0],r))throw new Y({reason:`keyAuthorization recipient mismatch`})}if(!i.has(`0x95777d59`))throw new Y({reason:`keyAuthorization must allow transferWithMemo`})}function rP(e,t){let n=We.getSignPayload(e);try{let e=Ge.extractAddress({payload:n,signature:t});if(!Ge.verify(t,{address:e,payload:n}))throw new Y({reason:`keyAuthorization signature is invalid`});return e}catch(e){throw e instanceof Y?e:new Y({reason:`keyAuthorization signature is invalid`})}}function iP(e,t){if(!de(e))throw new Y({reason:`${t} must be an address`});return e.toLowerCase()}function aP(e){return typeof e==`string`?e.toLowerCase():``}var oP,sP,cP,lP=F((()=>{SS(),oP=`0x95777d59`,sP=(1n<<64n)-1n,cP={dev_second:1n,day:86400n,week:604800n}}));function uP(e={}){let t=UA({chain:ye,getClient:e.getClient,rpcUrl:LO}),n=RA({account:e.account});return yE(FE,{context:pP,async createCredential({challenge:r,context:i}){let a=r.request.methodDetails?.chainId??NO.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.");fP(r.request),await e.validateRequest?.(r.request);let l=await dP(o,{accessKey:c,account:s,challengeId:r.id,chainId:a,request:r.request}),u=JN({accessKey:c,challengeId:r.id,chainId:a,payload:{signature:We.serialize(l),type:`keyAuthorization`},request:r.request});if(!fe(u.source.address,s.address))throw Error(`keyAuthorization signer does not match the selected account`);return kS({challenge:r,payload:{signature:We.serialize(l),type:`keyAuthorization`},source:`did:pkh:eip155:${a}:${s.address.toLowerCase()}`})}})}async function dP(e,t){let{accessKey:n,account:r,challengeId:i,chainId:a,request:o}=t,s=await qN({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:HN(VN(o.subscriptionExpires)),keyType:n.keyType,limits:[{token:o.currency,limit:k.fromNumber(BigInt(o.amount)),period:UN(o)}],scopes:GN(o),witness:KN(i)}]});return We.fromRpc(c.keyAuthorization)}function fP(e){UN(e),HN(VN(e.subscriptionExpires))}var pP,mP=F((()=>{PS(),bE(),zA(),qA(),Zx(),RO(),IE(),lP(),pP=J.object({accessKey:J.optional(J.custom()),account:J.optional(J.custom())})}));function hP(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[kj(e),gP(n)]}var gP,_P=F((()=>{EN(),BN(),Pj(),mP(),gP=Object.assign(wN,{manager:zN}),(function(e){e.charge=kj,e.common=hP,e.session=gP,e.subscription=uP})(hP||={})})),vP=F((()=>{Pj(),_P(),mP(),EN(),BN()})),yP=Qe({orderTempoChargeChallengesByBalance:()=>xP,readTempoKeystore:()=>VP,resolveTempoAccount:()=>HP,tempo:()=>SP});async function bP(e){process.stdout.write(Buffer.from(await e.arrayBuffer()))}async function xP(e,t){let n=[],r=[];for(let[t,i]of e.entries())kP(i)&&(n.push(t),r.push(i));if(r.length<2)return[...e];let i=await AP(t).catch(()=>void 0);if(!i)return[...e];let a=await Promise.all(r.map(async(e,t)=>({challenge:e,index:t,score:await jP(e,i)})));a.sort((e,t)=>XP.indexOf(e.score)-XP.indexOf(t.score)||e.index-t.index);let o=[...e];for(let[e,t]of n.entries())o[t]=a[e].challenge;return o}function SP(){let e;return wA({method:`tempo`,supports(e){return e.method===`tempo`&&[`charge`,`session`].includes(e.intent)},async setup({challenge:t,options:n,methodOpts:r}){let i=yk(n.account),a=t.request,o=a.currency,s=OP(r),c=FP({autoSwap:s.autoSwap??n.autoSwap,payWith:s.payWith??n.payWith,slippage:s.slippage??n.slippage,tokenIn:s.tokenIn}),l=o??``,u=a.decimals??6,d,f,p,m=!1,h=process.env.MPPX_PRIVATE_KEY?.trim()||(JO(i)?void 0:await bk(i).get());if(!h&&JO(i)&&UP()){m=!0;let e=HP(i);if(e){let r=QO(n.rpcUrl,{network:n.network});p=j({chain:await ek({network:n.network,rpcUrl:r}),transport:ue(r)}),NP({challenge:t,clientChainId:p.chain?.id}),d=p.chain?.blockExplorers?.default?.url;let i=o?await ik(p,o,e.wallet_address).catch(()=>void 0):void 0;l=i?.symbol??o??``,u=i?.decimals??a.decimals??6}}else if(h)f=ve(h);else{let e=GP();if(e){let t=await bk(e).get();t&&(f=ve(t))}if(!f)throw n.account?new I({code:`ACCOUNT_NOT_FOUND`,message:`Account "${i}" not found.`,exitCode:69}):new I({code:`ACCOUNT_NOT_FOUND`,message:`No account found.`,exitCode:69})}if(!m&&f){let e=QO(n.rpcUrl,{network:n.network});p=j({chain:await ek({network:n.network,rpcUrl:e}),transport:ue(e)}),NP({challenge:t,clientChainId:p.chain?.id}),d=p.chain?.blockExplorers?.default?.url;let r=o?await ik(p,o,f.address).catch(()=>void 0):void 0;l=r?.symbol??o??``,u=r?.decimals??a.decimals??6}if(m)return{tokenSymbol:l,tokenDecimals:u,explorerUrl:d,methods:[],async createCredential(e){let t=e.headers.get(`www-authenticate`);if(!t)throw Error(`No WWW-Authenticate header in 402 response.`);return WP(t)}};if(!f||!p)throw new I({code:`ACCOUNT_NOT_FOUND`,message:`Tempo requires a configured account.`,exitCode:69});let g=hP({account:f,...s.allowCustomEscrow===void 0?{}:{allowCustomEscrow:s.allowCustomEscrow},getClient:()=>p,...c===void 0?{}:{autoSwap:c},maxDeposit:(()=>{if(t.intent!==`session`)return;let e=t.request.suggestedDeposit,n=(s.deposit===void 0?void 0:String(s.deposit))??e??(rk(p.chain)?`10`:void 0);if(!n)throw new I({code:`MISSING_DEPOSIT`,message:`Session payment requires a deposit. Use -M deposit=<amount> or connect to testnet.`,exitCode:2});return n})()}),_=(()=>{if(!s.channel)return;let e=s.channel,t=LP(e);return{channelId:e,...t!==void 0&&{cumulativeAmountRaw:t.toString()}}})();return e={descriptor:void 0,async signVoucher({channelId:n,cumulativeAmount:r,escrowContract:i,chainId:a,action:o=`voucher`}){let s=e?.descriptor;if(!s)throw Error(`session descriptor not available`);let c={channelId:n,cumulativeAmount:r},l=await Zj(p,f,c,i,a);return kS({challenge:t,payload:{action:o,channelId:n,...o===`close`?{closeSignature:await Qj(p,f,c,i,a)}:{},descriptor:s,cumulativeAmount:r.toString(),signature:l},source:`did:pkh:eip155:${a}:${f.address}`})},source:`did:pkh:eip155:${p.chain.id}:${f.address}`},{tokenSymbol:l,tokenDecimals:u,explorerUrl:d,methods:[...g],credentialContext:_}},prepareCredentialRequest({challenge:e,headers:t}){e.intent===`session`&&(t.Accept=`text/event-stream`)},async handleResponse(t){if(t.challenge.intent!==`session`||!e)return!1;let{challenge:n,credential:r,response:i,fetchUrl:a,fetchInit:o,verbose:s}=t,{silent:c,confirmEnabled:l,tokenSymbol:u,tokenDecimals:d,explorerUrl:f,shownKeys:p}=t,m=c?e=>{}:e=>process.stderr.write(e),h=TS(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&&(e.descriptor=h.payload.descriptor),s>=1){if(h.payload.action===`open`){let e=g.suggestedDeposit,t=e?` ${X.dim(`(deposit ${e} ${u})`)}`:``;m(`${l?``:`
|
|
232
|
+
`)}function UO(e,t,n){if(sk.has(e)&&typeof t==`string`)return`${t} ${X.dim(`(${QO(BigInt(t),n.tokenSymbol,n.tokenDecimals)})`)}`;if(e===`chainId`&&typeof t==`number`){let e=nk({id:t,name:``});return e?`${t} ${X.dim(`(${e})`)}`:String(t)}return typeof t==`string`&&/^0x[0-9a-fA-F]{40}$/.test(t)?n.explorerUrl?KO(`${n.explorerUrl}/address/${t}`,t):t:typeof t==`string`&&/^https?:\/\//.test(t)?X.link(t,t):String(t)}function WO(e){try{let t=e.replace(/^0x0*/,``);if(!t)return;let n=Uint8Array.from(t.match(/.{1,2}/g).map(e=>Number.parseInt(e,16))),r=new TextDecoder().decode(n);return/^[\x20-\x7e]+$/.test(r)?r:void 0}catch{return}}function GO(e,t){if(e===`realm`&&typeof t==`string`)try{let e=new URL(t.includes(`://`)?t:`https://${t}`);return X.link(e.href,t)}catch{}return String(t)}function KO(e,t){return X.link(e,t)}function qO(e){if(!e)return{};let t=Array.isArray(e)?e:[e],n={};for(let e of t){let t=e.indexOf(`=`);if(t===-1)throw Error(`Invalid method option format: ${e} (expected key=value)`);n[e.slice(0,t)]=e.slice(t+1)}return n}function JO(e=process.env){if(e.CLAUDECODE)return!0;for(let[t,n]of Object.entries(e))if(n&&(t===`CODEX`||t.startsWith(`CODEX_`)))return!0;return!1}function YO(e){return e.startsWith(`tempo:`)}function XO(e){let t=Se.createInterface({input:process.stdin,output:process.stderr});return new Promise(n=>{t.on(`close`,()=>n(void 0)),t.question(`${X.bold(`▸ ${e}:`)} `,e=>{t.close(),n(e.trim()||void 0)})})}function ZO(e,t=!1){let n=Se.createInterface({input:process.stdin,output:process.stderr});return new Promise(r=>{let i=t?`(Y/n)`:`(y/N)`;n.question(`${X.bold(`▸ ${e}`)} ${X.dim(i)} `,e=>{n.close();let i=e.trim().toLowerCase();r(i===``?t:i===`y`)})})}function QO(e,t,n=6,r){let[i,a]=(Number(e)/10**n).toString().split(`.`),o=i.replace(/\B(?=(\d{3})+(?!\d))/g,`_`),s=r?.explorerUrl&&r.token?X.dim(X.link(`${r.explorerUrl}/token/${r.token}`,t,!0)):X.dim(t);return`${a?`${o}.${a}`:o} ${s}`}function $O(e,t={}){return e??(t.network?ck[t.network]:void 0)??(process.env.MPPX_RPC_URL?.trim()||process.env.RPC_URL?.trim()||void 0)}function ek(e={}){if(e.network)return e.network;if(!e.rpcUrl&&!(process.env.MPPX_RPC_URL?.trim()||process.env.RPC_URL?.trim()))return`testnet`}async function tk(e={}){let t=$O(e.rpcUrl,{network:e.network});if(!t)return ye;let{getChainId:n}=await import(`viem/actions`),r=await n(j({transport:ue(t)})),i=Object.values(await import(`viem/tempo/chains`)).filter(e=>typeof e==`object`&&!!e&&`id`in e&&e.id===r),a=i.find(e=>`serializers`in e&&e.serializers)??i[0];if(!a)throw Error(`Unknown chain ID ${r} from RPC ${t}`);return a}function nk(e){return{[ye.id]:`mainnet`,[be.id]:`testnet`}[e.id]??e.name}function rk(e){return typeof e==`bigint`?e:e.amount}function ik(e){return e.id!==ye.id}async function ak(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(rk).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}}async function ok(e,t){if(t?.chain){let n=j({chain:t.chain,transport:ue(t.rpcUrl)}),r=t.chain.blockExplorers?.default?.url,i=X.dim(`(${nk(t.chain)})`);return ik(t.chain)?(await Promise.all(fk.map(t=>ak(n,t,e)))).filter(e=>e.balance>0n).map(e=>`${QO(e.balance,e.symbol,e.decimals,{explorerUrl:r,token:e.token})} ${i}`):(await Promise.all(dk.map(t=>ak(n,t,e)))).map(e=>`${QO(e.balance,e.symbol,e.decimals,{explorerUrl:r,token:e.token})} ${i}`)}let n=j({chain:ye,transport:ue($O())}),r=ye.blockExplorers?.default?.url,i=(await Promise.all(dk.map(t=>ak(n,t,e)))).map(e=>QO(e.balance,e.symbol,e.decimals,{explorerUrl:r,token:e.token}));if(t?.includeTestnet!==!1){let t=j({chain:be,transport:ue()}),n=be.blockExplorers?.default?.url,r=await Promise.all(fk.map(n=>ak(t,n,e)));for(let e of r)e.balance>0n&&i.push(`${QO(e.balance,e.symbol,e.decimals,{explorerUrl:n,token:e.token})} ${X.dim(`(testnet)`)}`)}return i}var X,sk,ck,lk,uk,dk,fk,pk=F((()=>{zO(),X=(()=>{let e=process||{},t=e.argv||[],n=e.env||{},r=!(n.NO_COLOR||t.includes(`--no-color`))&&(!!n.FORCE_COLOR||t.includes(`--color`)||(e.stdout||{}).isTTY&&n.TERM!==`dumb`||!!n.CI),i=(e,t,n,r)=>{let i=``,a=0,o=r;do i+=e.substring(a,o)+n,a=o+t.length,o=e.indexOf(t,a);while(~o);return i+e.substring(a)},a=r?(e,t,n=e)=>r=>{let a=`${r}`,o=a.indexOf(t,e.length);return~o?e+i(a,t,n,o)+t:e+a+t}:()=>String;return{isColorSupported:r,reset:a(`\x1B[0m`,`\x1B[0m`),bold:a(`\x1B[1m`,`\x1B[22m`,`\x1B[22m\x1B[1m`),dim:a(`\x1B[2m`,`\x1B[22m`,`\x1B[22m\x1B[2m`),italic:a(`\x1B[3m`,`\x1B[23m`),underline:a(`\x1B[4m`,`\x1B[24m`),inverse:a(`\x1B[7m`,`\x1B[27m`),hidden:a(`\x1B[8m`,`\x1B[28m`),strikethrough:a(`\x1B[9m`,`\x1B[29m`),black:a(`\x1B[30m`,`\x1B[39m`),red:a(`\x1B[31m`,`\x1B[39m`),green:a(`\x1B[32m`,`\x1B[39m`),yellow:a(`\x1B[33m`,`\x1B[39m`),blue:a(`\x1B[34m`,`\x1B[39m`),magenta:a(`\x1B[35m`,`\x1B[39m`),cyan:a(`\x1B[36m`,`\x1B[39m`),white:a(`\x1B[37m`,`\x1B[39m`),gray:a(`\x1B[90m`,`\x1B[39m`),bgBlack:a(`\x1B[40m`,`\x1B[49m`),bgRed:a(`\x1B[41m`,`\x1B[49m`),bgGreen:a(`\x1B[42m`,`\x1B[49m`),bgYellow:a(`\x1B[43m`,`\x1B[49m`),bgBlue:a(`\x1B[44m`,`\x1B[49m`),bgMagenta:a(`\x1B[45m`,`\x1B[49m`),bgCyan:a(`\x1B[46m`,`\x1B[49m`),bgWhite:a(`\x1B[47m`,`\x1B[49m`),blackBright:a(`\x1B[90m`,`\x1B[39m`),redBright:a(`\x1B[91m`,`\x1B[39m`),greenBright:a(`\x1B[92m`,`\x1B[39m`),yellowBright:a(`\x1B[93m`,`\x1B[39m`),blueBright:a(`\x1B[94m`,`\x1B[39m`),magentaBright:a(`\x1B[95m`,`\x1B[39m`),cyanBright:a(`\x1B[96m`,`\x1B[39m`),whiteBright:a(`\x1B[97m`,`\x1B[39m`),bgBlackBright:a(`\x1B[100m`,`\x1B[49m`),bgRedBright:a(`\x1B[101m`,`\x1B[49m`),bgGreenBright:a(`\x1B[102m`,`\x1B[49m`),bgYellowBright:a(`\x1B[103m`,`\x1B[49m`),bgBlueBright:a(`\x1B[104m`,`\x1B[49m`),bgMagentaBright:a(`\x1B[105m`,`\x1B[49m`),bgCyanBright:a(`\x1B[106m`,`\x1B[49m`),bgWhiteBright:a(`\x1B[107m`,`\x1B[49m`),link(e,t,n){return r?`\x1b]8;;${e}\x07${n?t:X.underline(t)}\x1b]8;;\x07`:t}}})(),sk=new Set([`amount`,`suggestedDeposit`,`minVoucherDelta`]),ck={mainnet:RO[PO.mainnet],testnet:RO[PO.testnet]},lk=`0x20c0000000000000000000000000000000000000`,uk=`0x20C000000000000000000000b9537d11c60E8b50`,dk=[lk,uk],fk=[`0x20c0000000000000000000000000000000000000`,`0x20c0000000000000000000000000000000000001`,`0x20c0000000000000000000000000000000000002`,`0x20c0000000000000000000000000000000000003`]}));function mk(){let e=Number.parseInt(process.env.MPPX_KEYCHAIN_COMMAND_TIMEOUT_MS??``,10);return Number.isFinite(e)&&e>0?e:Ek}function hk(e,t){return`code`in e&&e.code===`ENOENT`&&e.message.includes(t)}function gk(e){return new I({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 _k(e){if(e&&hk(e,`secret-tool`))throw gk(e)}function vk(e,t){return new Promise(n=>{m.execFile(e,t,{timeout:mk()},(e,t,r)=>{n({stdout:t.trim(),stderr:r.trim(),error:e})})})}function yk(){let e=c.join(process.env.XDG_CONFIG_HOME||c.join(b.homedir(),`.config`),`mppx`,`default`);return{get(){try{return t.readFileSync(e,`utf-8`).trim()||`main`}catch{return`main`}},set(n){t.mkdirSync(c.dirname(e),{recursive:!0}),t.writeFileSync(e,n,`utf-8`)},clear(){try{t.unlinkSync(e)}catch{}}}}function bk(e){return e||(process.env.MPPX_ACCOUNT?.trim()?process.env.MPPX_ACCOUNT:yk().get())}function xk(e=`main`){let t=Tk;return{async list(){let e=b.platform();if(e===`darwin`){let{stdout:e,error:n}=await vk(`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 vk(`secret-tool`,[`search`,`--all`,`--unlock`,`service`,t]);if(_k(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=b.platform();if(n===`darwin`){let{stdout:n,error:r}=await vk(`security`,[`find-generic-password`,`-s`,t,`-a`,e,`-w`]);return r?void 0:n}if(n===`linux`){let{stdout:n,error:r}=await vk(`secret-tool`,[`lookup`,`service`,t,`account`,e]);return _k(r),r?void 0:n||void 0}throw Error(`Unsupported platform: ${n}`)},async set(n){let r=b.platform();if(r===`darwin`){await vk(`security`,[`delete-generic-password`,`-s`,t,`-a`,e]);let{error:r}=await vk(`security`,[`add-generic-password`,`-s`,t,`-a`,e,`-w`,n]);if(r)throw r;return}if(r===`linux`){let r=m.execFile(`secret-tool`,[`store`,`--label`,`${t} ${e}`,`service`,t,`account`,e]),i=setTimeout(()=>r.kill(),mk());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(hk(e,`secret-tool`)?gk(e):e)})})}throw Error(`Unsupported platform: ${r}`)},async delete(){let n=b.platform();if(n===`darwin`){await vk(`security`,[`delete-generic-password`,`-s`,t,`-a`,e]);return}if(n===`linux`){let{error:n}=await vk(`secret-tool`,[`clear`,`service`,t,`account`,e]);_k(n);return}throw Error(`Unsupported platform: ${n}`)}}}async function Sk(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=bk(e),i=await xk(r).get();if(i)return{account:t(i),accountName:r,source:`keychain`};throw Error(`Account "${r}" not found.`)}async function Ck(e){let t=bk(e);if(!process.env.MPPX_PRIVATE_KEY?.trim()&&YO(t))throw new I({code:`UNSUPPORTED_ACCOUNT`,message:`Persistent sessions require an mppx account or MPPX_PRIVATE_KEY.`,exitCode:2});return Sk(e).catch(e=>{throw new I({code:`ACCOUNT_NOT_FOUND`,message:e instanceof Error?e.message:`No account found.`,exitCode:69,...e instanceof Error&&{cause:e}})})}async function wk(e){return(await Sk(e)).account}var Tk,Ek,Dk=F((()=>{pk(),Tk=`mppx`,Ek=1e4}));NO(),Dk();const Ok=[[`ANTIGRAVITY_CLI_ALIAS`,`antigravity`],[`CLAUDECODE`,`claude_code`],[`CLINE_ACTIVE`,`cline`],[`CODEX_SANDBOX`,`codex_cli`],[`CODEX_THREAD_ID`,`codex_cli`],[`CODEX_SANDBOX_NETWORK_DISABLED`,`codex_cli`],[`CODEX_CI`,`codex_cli`],[`CURSOR_AGENT`,`cursor`],[`GEMINI_CLI`,`gemini_cli`],[`OPENCODE`,`open_code`],[`OPENCLAW_SHELL`,`openclaw`],[`CLAUDE_CODE_ENTRYPOINT`,`claude_code`],[`CODEX_INTERNAL_ORIGINATOR_OVERRIDE`,`codex_cli`]];function kk(e=process.env){return Ok.find(([t])=>e[t])?.[1]}const Ak=Symbol(`mppx.x402.asset`);function jk(e){return{[Ak]:!0,address:e.address,decimals:e.decimals,network:e.network,transfer:e.transfer}}function Mk(e,t){let n=e(t.chainId);return jk({address:n.address,decimals:n.decimals,network:Hk(t.chainId),transfer:Wk(t.transfer,n)})}const Nk={USDC:jk({address:`0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`,decimals:6,network:`eip155:8453`,transfer:{name:`USD Coin`,type:`eip3009`,version:`2`}})},Pk={USDC:jk({address:`0x036CbD53842c5426634e7929541eC2318f3dCF7e`,decimals:6,network:`eip155:84532`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}})},Fk={USDC:jk({address:`0xcebA9300f2b948710d2653dD7B07f33A8B32118C`,decimals:6,network:`eip155:42220`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}}),USDT:jk({address:`0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e`,decimals:6,network:`eip155:42220`,transfer:{name:`Tether USD`,type:`eip3009`,version:`1`}})},Ik={USDC:jk({address:`0x01C5C0122039549AD1493B8220cABEdD739BC44E`,decimals:6,network:`eip155:11142220`,transfer:{name:`USDC`,type:`eip3009`,version:`2`}})};function Lk(e){return typeof e!=`object`||!e?!1:e[Ak]===!0}function Rk(e){return typeof e==`function`&&typeof e.addresses==`object`&&typeof e.decimals==`number`}function zk(e){return typeof e==`string`}function Bk(e,t){if(Lk(e))return e.network===t?{address:e.address,decimals:e.decimals,transfer:e.transfer}:void 0;if(Rk(e)){let n=e.addresses[Uk(t)];return n?{address:n,decimals:e.decimals,name:e.name}:void 0}return{address:e}}function Vk(e,t,n){let r=Bk(e,n);return r?M(r.address)===M(t):!1}function Hk(e){return`eip155:${e}`}function Uk(e){return Number(e.slice(7))}function Wk(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 Gk=Qe({base:()=>Nk,baseSepolia:()=>Pk,celo:()=>Fk,celoSepolia:()=>Ik,define:()=>jk,fromToken:()=>Mk,isAsset:()=>Lk,isRawAddress:()=>zk,isToken:()=>Rk,matches:()=>Vk,resolve:()=>Bk,toChainId:()=>Uk,toNetwork:()=>Hk}),Kk=Qe({base:()=>qk,baseSepolia:()=>Jk,celo:()=>Yk,celoSepolia:()=>Xk});const qk=8453,Jk=84532,Yk=42220,Xk=11142220;zx();function Zk(e){let t=[Rx(e.accepted),Rx(e.resource),Rx(e.extensions)].join(`|`);return re.sha256(O.fromString(t),{as:`Hex`})}gw(),VC();async function Qk(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=vC(n);if(nA(e.config,r),!n.resource)throw Error(`x402 exact EIP-3009 requires resource information.`);let i=n.extensions?.mppx?iA(n.extensions):n.extensions,a=r.extra?.assetTransferMethod??`eip3009`;if(a!==`eip3009`)throw Error(`x402 exact ${String(a)} signing is not implemented yet.`);let o=r.extra?.name,s=r.extra?.version;if(typeof o!=`string`||typeof s!=`string`)throw Error(`x402 exact EIP-3009 requires token name and version.`);let c=Math.floor(Date.now()/1e3),l={from:M(t.address),nonce:i?.mppx?Zk({accepted:r,extensions:i,resource:n.resource}):oA(),to:M(r.payTo),validAfter:(c-600).toString(),validBefore:(c+r.maxTimeoutSeconds).toString(),value:r.amount},u=await t.signTypedData({domain:{chainId:tA(r.network),name:o,verifyingContract:M(r.asset),version:s},message:{...l,value:BigInt(l.value),validAfter:BigInt(l.validAfter),validBefore:BigInt(l.validBefore)},primaryType:`TransferWithAuthorization`,types:eA});return mw({accepted:r,...i?{extensions:i}:{},payload:{authorization:l,signature:u},...n.resource?{resource:n.resource}:{},x402Version:2})}function $k(e){let t=e.challenge.request,n;try{n=vC(t),nA(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 eA={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 tA(e){return Number(e.slice(xC.length))}function nA(e,t){let n=tA(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=>zk(e))&&!e.networks?.length)throw Error(`x402 exact raw currency allowlists require networks.`);if(r){let e=M(t.asset);if(!r.some(n=>Vk(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=rA(e,t);if(n===void 0)throw Error(`x402 exact maxAmount requires currency decimals.`);if(BigInt(t.amount)>N(e.maxAmount,n))throw Error(`x402 exact amount exceeds maxAmount.`)}}function rA(e,t){let n=e.currencies??e.assets,r=M(t.asset),i=n?.find(e=>Vk(e,r,t.network)),a=i?Bk(i,t.network):void 0;return a?.decimals===void 0?e.decimals:a.decimals}function iA(e){let t=e.mppx;return t?{...e,mppx:{...t,info:{...t.info,nonce:aA()}}}:e}function aA(){return sA().slice(2)}function oA(){return sA()}function sA(){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(``)}`}Zx();const cA=[`authorization`],lA=J.string().check(J.regex(/^\d+$/,`Invalid atomic amount`));J.object({name:J.string().check(J.minLength(1)),version:J.string().check(J.minLength(1))});const uA=J.object({chainId:J.number(),credentialTypes:J.optional(J.array(J.enum(cA)).check(J.minLength(1))),decimals:J.optional(J.number()),permit2Address:J.optional(Kx()),splits:J.optional(J.array(J.object({amount:lA,recipient:Kx()})))});J.object({amount:lA,currency:Kx(),description:J.optional(J.string()),externalId:J.optional(J.string()),methodDetails:uA,recipient:Kx()});const dA=J.object({amount:Vx(),chainId:J.number(),currency:Kx(),credentialTypes:J.optional(J.array(J.enum(cA)).check(J.minLength(1))),decimals:J.number(),description:J.optional(J.string()),externalId:J.optional(J.string()),permit2Address:J.optional(Kx()),recipient:Kx(),splits:J.optional(J.array(J.object({amount:lA,recipient:Kx()})))}),fA=J.object({from:Kx(),nonce:qx(),signature:Yx(),to:Kx(),type:J.literal(`authorization`),validAfter:lA,validBefore:lA,value:lA}),pA={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 mA(e){return{chainId:e.chainId,name:e.authorization.name,verifyingContract:e.currency,version:e.authorization.version}}function hA(e){return re.keccak256(O.fromString(JSON.stringify([e.id,e.realm])),{as:`Hex`})}function gA(e){return`eip155:${e}`}function _A(e){return`did:pkh:eip155:${e.chainId}:${e.address}`}xE(),Zx();const vA=yE({name:`evm`,intent:`charge`,schema:{credential:{payload:fA},request:J.pipe(dA,J.transform(({amount:e,chainId:t,credentialTypes:n=[`authorization`],currency:r,decimals:i,permit2Address:a,recipient:o,splits:s,...c})=>({...c,amount:N(e,i).toString(),currency:M(r),methodDetails:{chainId:t,credentialTypes:n,decimals:i,...a?{permit2Address:M(a)}:{},...s?{splits:s}:{}},recipient:M(o)})))}});FS(),xE(),JS(),Zx();function yA(e){return bE(vA,{canHandleChallenge({challenge:t}){return!bA(t)||$k({challenge:t,config:e})},context:J.object({account:J.optional(J.custom())}),async createCredential({challenge:t,context:n}){if(bA(t))return Qk({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(xA(e,i),!i.methodDetails.credentialTypes?.includes(`authorization`))throw Error(`EVM authorization is not accepted by this challenge.`);if(i.methodDetails.splits?.length)throw Error(`EVM authorization does not support payment splits.`);let a=SA(e,i),o=t.expires?Math.floor(new Date(t.expires).getTime()/1e3).toString():(Math.floor(Date.now()/1e3)+300).toString();return AS(kS({challenge:t,payload:{from:M(r.address),nonce:hA(t),signature:await r.signTypedData({domain:mA({authorization:a,chainId:i.methodDetails.chainId,currency:i.currency}),message:{from:M(r.address),nonce:hA(t),to:M(i.recipient),validAfter:0n,validBefore:BigInt(o),value:BigInt(i.amount)},primaryType:`TransferWithAuthorization`,types:pA}),to:M(i.recipient),type:`authorization`,validAfter:`0`,validBefore:o,value:i.amount},source:_A({address:M(r.address),chainId:i.methodDetails.chainId})}))}})}function bA(e){return KS(e)&&e.request.scheme===`exact`&&typeof e.request.network==`string`}function xA(e,t){let n=t.methodDetails.chainId,r=gA(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=>zk(e))&&!e.networks?.length)throw Error(`EVM raw currency allowlists require networks.`);if(i){let e=M(t.currency);if(!i.some(t=>Vk(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=CA(e,t);if(n===void 0)throw Error(`EVM charge maxAmount requires currency decimals.`);if(BigInt(t.amount)>N(e.maxAmount,n))throw Error(`EVM charge amount exceeds maxAmount.`)}}function SA(e,t){let n=e.currencies??e.assets,r=M(t.currency),i=gA(t.methodDetails.chainId),a=n?.find(e=>Vk(e,r,i)),o=a?Bk(a,i):void 0;if(o?.transfer?.type===`eip3009`)return{name:o.transfer.name,version:o.transfer.version};if(e.authorization)return e.authorization;throw Error(`EVM authorization requires token name and version.`)}function CA(e,t){let n=e.currencies??e.assets,r=M(t.currency),i=gA(t.methodDetails.chainId),a=n?.find(e=>Vk(e,r,i)),o=a?Bk(a,i):void 0;return o?.decimals===void 0?e.decimals:o.decimals}function wA(e){return[wA.charge(e)]}(function(e){e.charge=yA,e.assets=Gk,e.chains=Kk})(wA||={});function TA(e){return e}var EA=F((()=>{}));JS(),EA();function DA(){return TA({method:`evm`,supports:e=>e.method===`evm`&&!KS(e),async setup({challenge:e,options:t}){let n=e.request,r=n.methodDetails,i=r?.chainId,a=i?OA(i):void 0,o=n.currency,s=await wk(t.account),c=[...Object.values(Nk),...Object.values(Pk),...Object.values(Fk),...Object.values(Ik)],l=o??``;if(a&&o)try{let e=j({chain:a,transport:ue()}),t=await Oe(e,{address:o,abi:se,functionName:`symbol`});t&&(l=t)}catch{}return{tokenSymbol:l,tokenDecimals:r?.decimals??6,explorerUrl:a?.blockExplorers?.default?.url,methods:[...wA({account:s,currencies:c})]}}})}function OA(e){return Object.values(Ve).find(t=>t.id===e)}function kA(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}Zx();const AA=J.object({customer:J.optional(J.string().check(J.minLength(1))),hooks:J.optional(J.object({inputs:J.object({tax:J.object({calculation:J.string().check(J.minLength(1))})})})),metadata:J.optional(J.record(J.string(),J.string())),receipt_email:J.optional(J.string().check(J.minLength(1)))}),jA=J.custom(e=>typeof e==`function`),MA=J.union([AA,jA]);xE(),Zx();const NA=yE({name:`stripe`,intent:`charge`,schema:{credential:{payload:J.object({externalId:J.optional(J.string()),spt:J.string()})},request:J.pipe(J.object({amount:Vx(),currency:J.string(),decimals:J.number(),description:J.optional(J.string()),externalId:J.optional(J.string()),metadata:J.optional(J.record(J.string(),J.string())),networkId:J.string(),paymentIntentOptions:J.optional(MA),paymentMethodTypes:J.array(J.string()).check(J.minLength(1)),recipient:J.optional(J.string())}),J.transform(({amount:e,decimals:t,metadata:n,networkId:r,paymentIntentOptions:i,paymentMethodTypes:a,...o})=>({...o,amount:kA(e,t).toString(),methodDetails:{networkId:r,paymentMethodTypes:a,...n!==void 0&&{metadata:n}}})))}});FS(),xE(),Zx();function PA(e){let{client:t,createToken:n,externalId:r,paymentMethod:i}=e;return bE(NA,{context:J.object({paymentMethod:J.optional(J.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 AS({challenge:e,payload:{spt:p,...m===void 0?{}:{externalId:m}}})}})}function FA(e){return[PA(e)]}(function(e){e.charge=PA})(FA||={}),Ox(),pk(),EA();function IA(){return TA({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=RA(p.object({paymentMethod:p.string(),secretKey:p.string().optional()}),t,[`paymentMethod`,`secretKey`]),a=i.secretKey??process.env.MPPX_STRIPE_SECRET_KEY;if(!a)throw new I({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:[FA.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=LA(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){let e=await d.json();throw new I({code:`STRIPE_ERROR`,message:`Failed to create SPT: ${e.error.message}`,exitCode:77})}}else throw new I({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&&LA(e)?`/test`:``}/payments/${t}`;return X.link(n,t,!0)}}})}function LA(e){return e.startsWith(`sk_test_`)||e.startsWith(`rk_test_`)}function RA(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 zA(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 _e(r)}}var BA=F((()=>{}));function VA(e){return Object.fromEntries(Object.entries(e.headers??{}).filter(([e])=>e.toLowerCase()!==`content-type`))}var HA=F((()=>{}));function UA(e,t={}){return ue(e.url,{fetchFn:e.fetch,fetchOptions:{headers:VA(e)},...t})}function WA(e){let{chain:t,getClient:n,remoteFeePayer:r,rpcUrl:i}=e;return n?!t?.serializers&&!r?n:async e=>{let i=await n(e),a=i;if(r&&i.transport.key!==`feePayer`){let e=i.request.bind(i),t=Be(ae({request:t=>e(t)},{retryCount:0}),UA(r,{retryCount:i.transport.retryCount}))({account:i.account,chain:i.chain,pollingInterval:i.pollingInterval,retryCount:0}),n=ie({...t.config,retryCount:0},t.value);a=Object.assign({},i,{request:n.request,transport:{...n.config,...n.value}})}return!t?.serializers||a.chain?.serializers?.transaction?a:Object.assign({},a,{chain:{...t,...e.chainId===void 0?{}:{id:e.chainId},...a.chain,formatters:a.chain?.formatters??t.formatters,prepareTransactionRequest:a.chain?.prepareTransactionRequest??t.prepareTransactionRequest,serializers:a.chain?.serializers?.transaction?a.chain.serializers:t.serializers}})}:({chainId:e})=>{if(!i)throw Error("No `rpcUrl` provided.");let n=e||Number(Object.keys(i)[0]),a=i[n];if(!a)throw Error(`No \`rpcUrl\` configured for \`chainId\` (${n}).`);let o=r?Be(ue(a),UA(r)):ue(a);return j({chain:qA[n]??{...t,id:n},transport:o})}}function GA(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 KA(e,t){if(e!==void 0&&(t===void 0||!e.includes(t)))throw Error(`Chain ID not allowed: ${t??`unknown`}.`)}var qA,JA=F((()=>{HA(),qA={[ye.id]:ye,[be.id]:be}}));function YA(e){let t=re.keccak256(O.fromString(e),{as:`Hex`});return k.toBytes(k.slice(t,0,10))}function XA(e){let{serverId:t,clientId:n,challengeId:r}=e,i=new Uint8Array(32);return i.set(k.toBytes(QA),0),i[4]=$A,i.set(YA(t),5),n&&i.set(YA(n),15),i.set(ZA(r),25),k.fromBytes(i)}function ZA(e){let t=re.keccak256(O.fromString(e),{as:`Hex`});return k.toBytes(k.slice(t,0,7))}var QA,$A,ej=F((()=>{QA=k.slice(re.keccak256(O.fromString(`mpp`),{as:`Hex`}),0,4),$A=1}));function tj(e,t){return Ke.resolve(e).toLowerCase()===Ke.resolve(t).toLowerCase()}var nj=F((()=>{}));async function rj(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=>!tj(e,i)),c=await Promise.allSettled([Oe(e,{...Ie.token.getBalance.call(e,{account:n,token:i}),account:null}),...s.map(t=>Oe(e,{...Ie.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/aj;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 Ie.dex.getBuyQuote(e,{account:null,tokenIn:a,tokenOut:i,amountOut:d});if(t<=0n||t>p)continue;let n=t+t*f/aj,o=n<p?n:p;if(r>=o)return[Ie.token.approve.call(e,{amount:o,spender:Le.stablecoinDex,token:a}),Ie.dex.buy.call({tokenIn:a,tokenOut:i,amountOut:d,maxAmountIn:o})]}catch{}}throw new sj({currency:i})}function ij(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=>tj(e,t)))]:t,slippage:e.slippage??1,...e.maxAmountIn===void 0?{}:{maxAmountIn:e.maxAmountIn}}:!1}var aj,oj,sj,cj=F((()=>{nj(),zO(),aj=10000n,oj=[FO.pathUsd,FO.usdc,FO.ousd],sj=class extends Error{name=`InsufficientFundsError`;constructor({currency:e}){super(`Insufficient funds: no balance in ${e} and no viable swap route from fallback currencies.`)}}}));function lj(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}))]}var uj=F((()=>{}));function dj(e,t,n){t&&(n&&!n.some(e=>tj(e,t))||e.some(e=>tj(e,t))||e.push(t))}async function fj(e,t,n){try{return(await Ie.token.getBalance(e,{account:t,token:n})).amount>0n}catch{return!1}}function pj(e){let t=e.chain?.feeToken;if(t)return Re.toAddress(t);let n=e.chain?.id;return n?IO[n]:void 0}function mj(e){let t=[];return dj(t,FO.pathUsd),dj(t,IO[e]),t}async function hj(e){let{account:t,allowedTokens:n,candidateTokens:r,client:i,prioritizeCandidates:a}=e,o=[];if(a)for(let e of r??[])dj(o,e,n);if(dj(o,await Ie.fee.getUserToken(i,{account:t}).then(e=>e?.address).catch(()=>void 0),n),dj(o,pj(i),n),!a)for(let e of r??[])dj(o,e,n);for(let e of o)if(await fj(i,t,e))return e;return o[0]}var gj=F((()=>{nj(),zO()}));function _j(e){if(e!==void 0)return LO[e]}function vj(e){let t=_j(e.chainId);return!!t&&de(e.currency,{strict:!1})&&fe(e.currency,t.token)}function yj(e){let t=_j(e.chainId),n=e.transfers.length===1?e.transfers[0]:void 0;if(!t||!n?.memo)return;let r=BigInt(n.amount),i=n.memo;return{calls:[{data:oe({abi:Pe.tip20,functionName:`approve`,args:[t.swap,r]}),to:t.token},{data:oe({abi:xj,functionName:`swapTo`,args:[t.token,r,e.currency,n.recipient,i]}),to:t.swap}],settlementSender:t.swap,transfers:[{amount:r,memo:i,recipient:n.recipient}]}}async function bj(e,t){let n=yj(t);if(n)try{return await Oe(e,Ie.token.getBalance.call(e,{account:t.account,token:n.calls[0].to}))<n.transfers[0].amount?void 0:(await Ee(e,{account:t.account,calls:n.calls}),n)}catch{return}}var xj,Sj=F((()=>{zO(),xj=me([`function swapTo(address inputToken,uint256 amount,address targetToken,address recipient,bytes32 memo)`])}));function Cj(e){return{name:`MPP`,version:`3`,chainId:e}}function wj(e){let{account:t,challengeId:n,realm:r}=e;return{account:t,challengeId:n,realm:r}}function Tj(e){let{account:t,chainId:n,challengeId:r,realm:i}=e;return{domain:Cj(n),types:Oj,primaryType:Dj,message:wj({account:t,challengeId:r,realm:i})}}function Ej(e){return`did:pkh:eip155:${e.chainId}:${e.address}`}var Dj,Oj,kj=F((()=>{Dj=`Proof`,Oj={Proof:[{name:`account`,type:`address`},{name:`challengeId`,type:`string`},{name:`realm`,type:`string`}]}}));function Aj(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:Mj(e.maxAmount,e.decimals),maxAtomicAmount:e.maxAtomicAmount===void 0?void 0:BigInt(e.maxAtomicAmount)},r=WA({chain:ye,getClient:e.getClient,rpcUrl:RO}),i=zA({account:e.account}),a=bE(PE,{canHandleChallenge({challenge:t}){try{return Nj(e,n,t.request),!0}catch{return!1}},context:Pj,async createCredential({challenge:a,context:o}){Nj(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});GA(c,s);let l=s??c.chain?.id;if(KA(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`],m=i(c,o),h=async t=>await e.resolveAccount?.({account:m,chainId:l,operation:t})??m;if(BigInt(d)===0n){let e=await h({kind:`signPaymentProof`});return AS({challenge:a,payload:{signature:await Me(c,{account:e,...Tj({account:e.address,chainId:l,challengeId:a.id,realm:a.realm})}),type:`proof`},source:Ej({address:e.address,chainId:l})})}let g=u.currency,_=vj({chainId:l,currency:g}),v=XA({challengeId:a.id,clientId:t,serverId:a.realm}),y=lj({amount:d,methodDetails:{...f,memo:v},recipient:u.recipient}),b=y.map(e=>Ie.token.transfer.call(c,{amount:BigInt(e.amount),...e.memo&&{memo:e.memo},to:e.recipient,token:g})),x=ij(o?.autoSwap??e.autoSwap,oj),S=f?.machineTokenEnabled===!0?yj({chainId:l,currency:g,transfers:y}):void 0,C=m,w;if(S){let e=await(async()=>{try{return await h({calls:S.calls,kind:`executeCalls`})}catch{return}})();e&&(w=await bj(c,{account:e.address,chainId:l,currency:g,transfers:y}),w&&(C=e))}let T;w||(C=await h({kind:`executeCalls`,...x?{}:{calls:b}}),T=x?await rj(c,{account:C.address,amountOut:BigInt(d),tokenOut:g,tokenIn:x.tokenIn,slippage:x.slippage,maxAmountIn:x.maxAmountIn}):void 0);let ee=w?.calls??[...T??[],...b],te=mj(l),E=w||_?await hj({account:C.address,allowedTokens:te,candidateTokens:te,client:c,prioritizeCandidates:!0}):void 0,ne=(()=>{let t=o?.mode??e.mode;if(t){if(!p.includes(t))throw Error(`Challenge does not support ${t} mode.`);return t}let n=C.type===`json-rpc`?`push`:`pull`;return p.includes(n)?n:p[0]})(),D=(()=>{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(ne===`push`){let{receipts:e}=C.type===`local`?{receipts:[await Ae(c,{account:C,calls:ee,...E?{feeToken:E}:{},nonceKey:`expiring`,validBefore:D})]}:await ke(c,{account:C,...E?{capabilities:{feeToken:E}}:{},calls:ee,experimental_fallback:ee.length===1,forceAtomic:ee.length>1}),t=e?.[0]?.transactionHash;if(!t)throw Error(`No transaction receipt returned.`);return AS({challenge:a,payload:{hash:t,type:`hash`},source:Ej({address:C.address,chainId:l})})}let O=()=>{if(f?.feePayer!==!0)return;let e=15e3,t=a.expires?new Date(a.expires).getTime():1/0,n=Date.now();if(!(t-n>=e))throw Error(`Sponsored challenge expires in less than 15 seconds; the fee payer would reject the transaction. Request a new challenge.`);if(!(D*1e3-n>=e))throw Error(`Sponsored transaction preparation took too long: less than 15 seconds of its validity window remain, so the fee payer would reject it.`)};O();let re=await De(c,{account:C,calls:ee,...E?{feeToken:E}:{},nonceKey:`expiring`,validBefore:D});if(re.gas=(re.gas??0n)+5000n,f?.feePayer){let e=re;delete e.feePayerSignature,delete e.feeToken,e.feePayer=!0}return O(),AS({challenge:a,payload:{signature:await je(c,re),type:`transaction`},source:Ej({address:C.address,chainId:l})})}}),o=new Map,s=async t=>{Nj(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 Nw({...a,createCredential:s},jj)}function jj(e){let t=PE.schema.credential.payload.safeParse(ES(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(qe.serializedType))return;let i=qe.deserialize(r);if(!(!i.signature||i.feePayerSignature===null)&&qe.serialize(i)===r)return pe(r)}function Mj(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 N(e,t)}}function Nj(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)&&KA(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.`)}var Pj,Fj=F((()=>{Rw(),FS(),xE(),BA(),JA(),Zx(),ej(),cj(),uj(),zO(),gj(),Sj(),kj(),LE(),Pj=J.object({account:J.optional(J.custom()),autoSwap:J.optional(J.custom()),mode:J.optional(J.enum(wE))})}));function Ij(e){return BigInt(e.authorizedSigner)===0n?e.payer:e.authorizedSigner}function Lj(e){let t=ne.encode(ne.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 re.keccak256(t)}function Rj(e){return qe.encodeForSigning(e)}function zj(e){let{feePayer:t,transaction:n}=e;return t?{...n,feePayerSignature:null}:n}function Bj(e,t){return re.keccak256(k.concat(Rj(e),t.sender))}var Vj=F((()=>{oD()})),Hj,Uj,Wj,Gj,Kj=F((()=>{Hj=[{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`}],Uj=[{name:`settled`,type:`uint96`},{name:`deposit`,type:`uint96`},{name:`closeRequestedAt`,type:`uint32`}],Wj={name:`descriptor`,type:`tuple`,components:Hj},Gj=[{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:[Wj,{name:`cumulativeAmount`,type:`uint96`},{name:`signature`,type:`bytes`}],outputs:[]},{type:`function`,name:`topUp`,stateMutability:`nonpayable`,inputs:[Wj,{name:`additionalDeposit`,type:`uint96`}],outputs:[]},{type:`function`,name:`close`,stateMutability:`nonpayable`,inputs:[Wj,{name:`cumulativeAmount`,type:`uint96`},{name:`captureAmount`,type:`uint96`},{name:`signature`,type:`bytes`}],outputs:[]},{type:`function`,name:`requestClose`,stateMutability:`nonpayable`,inputs:[Wj],outputs:[]},{type:`function`,name:`withdraw`,stateMutability:`nonpayable`,inputs:[Wj],outputs:[]},{type:`function`,name:`getChannel`,stateMutability:`view`,inputs:[Wj],outputs:[{type:`tuple`,components:[{name:`descriptor`,type:`tuple`,components:Hj},{name:`state`,type:`tuple`,components:Uj}]}]},{type:`function`,name:`getChannelState`,stateMutability:`view`,inputs:[{name:`channelId`,type:`bytes32`}],outputs:[{type:`tuple`,components:Uj}]},{type:`function`,name:`getChannelStatesBatch`,stateMutability:`view`,inputs:[{name:`channelIds`,type:`bytes32[]`}],outputs:[{type:`tuple[]`,components:Uj}]},{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 qj(e,t){return{name:tM,version:nM,chainId:t,verifyingContract:e}}function Jj(e,t){return Ue.getVoucherSignPayload({chainId:e,channelId:t.channelId,cumulativeAmount:t.cumulativeAmount})}function Yj(e,t,n){return e.toLowerCase()===Ue.address.toLowerCase()?Jj(t,n):le({domain:qj(e,t),types:rM,primaryType:`Voucher`,message:{channelId:n.channelId,cumulativeAmount:n.cumulativeAmount}})}function Xj(e){return e===`secp256k1`||e===`p256`||e===`webAuthn`}function Zj(e,t){return Fe.signVoucher(e,{chainId:t.chainId,channel:t.channelId,cumulativeAmount:t.cumulativeAmount})}async function Qj(e,t,n,r,i){let a=await(async()=>{if(r.toLowerCase()===Ue.address.toLowerCase())try{return await Zj(t,{chainId:i,channelId:n.channelId,cumulativeAmount:n.cumulativeAmount})}catch{}return Me(e,{account:t,domain:qj(r,i),types:rM,primaryType:`Voucher`,message:n})})(),o=Ge.from(a);if(!Xj(o.type))throw Error(`TIP-1034 vouchers require a TIP-1020 primitive signature; received "${o.type}".`);return Ge.serialize(o)}async function $j(e,t,n,r,i){let a=await Me(e,{account:t,domain:qj(r,i),types:iM,primaryType:`CloseAuthorization`,message:n}),o=Ge.from(a);if(!Xj(o.type))throw Error(`TIP-1034 close authorizations require a TIP-1020 primitive signature; received "${o.type}".`);return Ge.serialize(o)}function eM(e,t,n,r){try{let i=Ge.from(n.signature);if(!Xj(i.type)||Ge.serialize(i).toLowerCase()!==n.signature.toLowerCase())return!1;let a=Yj(e,t,n),o=Ge.extractAddress({payload:a,signature:i});return Ge.verify(i,{address:o,payload:a})&&tj(o,r)}catch{return!1}}var tM,nM,rM,iM,aM=F((()=>{nj(),tM=`TIP20 Channel Reserve`,nM=`1`,rM={Voucher:[{name:`channelId`,type:`bytes32`},{name:`cumulativeAmount`,type:`uint96`}]},iM={CloseAuthorization:[{name:`channelId`,type:`bytes32`},{name:`cumulativeAmount`,type:`uint96`}]}}));function oM(e){return typeof e==`object`&&!!e}function sM(e){return typeof e==`string`&&de(e,{strict:!1})?e:void 0}function cM(e){return sM(e.accessKeyAddress)}function lM(){let e=BigInt(Math.floor(Date.now()/1e3))-60n;return e<=0n?0:Number(BigInt(k.random(8))%e)}function uM(e){return cM(e)??e.address}async function dM(e,t){let{account:n,calls:r,feePayer:i,feeToken:a,validAfter:o}=t;return De(e,{account:n,calls:r,nonceKey:`expiring`,...i?{feePayer:!0}:{},feeToken:a,...o===void 0?{}:{validAfter:o}})}async function fM(e,t){return await je(e,t)}function pM(e,t,n=!1){let r=e.request.methodDetails,i=oM(r)?sM(r.escrowContract)??sM(r.escrow):void 0,a=t??`0x4d50500000000000000000000000000000000000`;if(i&&!hM(i,a)&&(!n||t!==void 0))throw Error(`Tempo session escrow ${i} does not match client escrow ${a}.`);return i&&!hM(i,a)?i:a}function mM(e,t,n,r){return AS({challenge:e,payload:t,source:`did:pkh:eip155:${n}:${r.address}`})}function hM(e,t){return e.toLowerCase()===t.toLowerCase()}async function gM(e,t,n,r,i,a=aD){let o=Lj({...n,chainId:i,escrow:a}),s=BE(r),c=await Qj(e,t,{channelId:o,cumulativeAmount:s},a,i);return{action:`voucher`,channelId:o,descriptor:n,cumulativeAmount:s.toString(),signature:c}}async function _M(e,t,n,r,i,a=aD){let o=await gM(e,t,n,r,i,a),s=await $j(e,t,{channelId:o.channelId,cumulativeAmount:BE(BigInt(o.cumulativeAmount))},a,i);return{action:`close`,channelId:o.channelId,descriptor:n,cumulativeAmount:o.cumulativeAmount,signature:o.signature,closeSignature:s}}async function vM(e,t,n){let r=uM(t),i=n.escrow??`0x4d50500000000000000000000000000000000000`,a=n.operator??`0x0000000000000000000000000000000000000000`,o=k.random(32),s=BE(n.deposit),c=BE(n.initialAmount),l=oe({abi:Gj,functionName:`open`,args:[n.payee,a,n.token,s,o,r]}),u=await fM(e,await dM(e,{account:t,calls:[...n.prefixCalls??[],{to:i,data:l}],feePayer:n.feePayer,feeToken:n.feeToken??n.token})),d=ze.deserialize(u),f={authorizedSigner:r,expiringNonceHash:Bj(zj({...n.feePayer?{feePayer:!0}:{},transaction:d}),{sender:t.address}),operator:a,payee:n.payee,payer:t.address,salt:o,token:n.token},p=Lj({...f,chainId:n.chainId,escrow:i});return{action:`open`,type:`transaction`,channelId:p,transaction:u,signature:await Qj(e,t,{channelId:p,cumulativeAmount:c},i,n.chainId),descriptor:f,cumulativeAmount:c.toString(),authorizedSigner:f.authorizedSigner}}async function yM(e,t,n,r,i,a,o=aD,s=[],c=n.token){let l=Lj({...n,chainId:i,escrow:o}),u=BE(r);return{action:`topUp`,type:`transaction`,channelId:l,transaction:await fM(e,await dM(e,{account:t,calls:[...s,{to:o,data:oe({abi:Gj,functionName:`topUp`,args:[n,u]})}],feePayer:a,feeToken:c,validAfter:lM()})),descriptor:n,additionalDeposit:u.toString()}}var bM=F((()=>{FS(),Vj(),Kj(),oD(),aM()}));function xM(e){let{payee:t,token:n,escrow:r,chainId:i}=e;return`${t.toLowerCase()}:${n.toLowerCase()}:${r.toLowerCase()}:${i}`}function SM(e){return xM({payee:e.descriptor.payee,token:e.descriptor.token,escrow:e.escrow,chainId:e.chainId})}function CM(){let e=new Map;return{get:t=>e.get(t),set(t){e.set(SM(t),t)},delete(t){e.delete(t)}}}function wM(e){return{...e,cumulativeAmount:e.cumulativeAmount.toString(),deposit:e.deposit.toString()}}function TM(e){return{...e,cumulativeAmount:BigInt(e.cumulativeAmount),deposit:BigInt(e.deposit)}}function EM(e,t){MM.set(e,MM.get(t)??t)}async function DM(e,t,n){let r=jM.get(e);r||(r=new Map,jM.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 OM(e,t,n){return DM(MM.get(e)??e,`funding:${t}`,n)}async function kM(e,t){await DM(e,`write:${SM(t)}`,async()=>{let n=await e.get(SM(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 AM(e,t){await DM(e,`write:${t}`,async()=>{(await e.get(t))?.uncertainTopUp||await e.delete(t)})}var jM,MM,NM=F((()=>{jM=new WeakMap,MM=new WeakMap}));function PM(e){if(e<0n||e>LM)throw new Y({reason:`amount exceeds uint96 range`})}async function FM(e,t,n=aD,r){return IM(await Oe(e,{address:n,abi:Gj,functionName:`getChannelState`,args:[t],...r===void 0?{}:{blockNumber:r}}))}function IM(e){return PM(e.settled),PM(e.deposit),{settled:e.settled,deposit:e.deposit,closeRequestedAt:e.closeRequestedAt}}var LM,RM=F((()=>{CS(),Kj(),oD(),LM=2n**96n-1n}));function zM(e){return`cumulativeAmount`in e}function BM(e){if(zM(e))return BigInt(e.cumulativeAmount)}async function VM(e,t){t.opened?await kM(e.store,t):await AM(e.store,SM(t)),e.notifyUpdate(t)}async function HM(e,t,n){let r=BM(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 VM(e,i))}function UM(e){return e?.action!==void 0}function WM(e){return UM(e)&&e.descriptor!==void 0}function GM(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 N(i,t)}function KM(e,t,n,r){let i=GM(e,t,n);if(i===void 0)throw Error(`${n} required for ${r} action`);return i}function qM(e){return typeof e==`object`&&!!e}function JM(e){return typeof e==`string`&&de(e,{strict:!1})?e:void 0}function YM(e){let t=e.request.methodDetails;return qM(t)?{chainId:typeof t.chainId==`number`?t.chainId:void 0,escrowContract:JM(t.escrowContract),escrow:JM(t.escrow),feePayer:typeof t.feePayer==`boolean`?t.feePayer:void 0,feeToken:JM(t.feeToken),operator:JM(t.operator),sessionSnapshot:kx(t,Nx.sessionSnapshot)}:{}}function XM(e,t){if(typeof e==`string`&&de(e,{strict:!1}))return e;throw Error(`tempo session challenge missing ${t}`)}function ZM(e){if(typeof e==`string`)return BigInt(e);throw Error(`tempo session challenge missing amount`)}function QM(e){return typeof e==`string`?e:void 0}async function $M(e){let{allowCustomEscrow:t,challenge:n,escrowOverride:r,allowedChainIds:i,getClient:a}=e,o=YM(n);(o.chainId!==void 0||i?.length===0)&&KA(i,o.chainId);let s=o.chainId??(i?.length===1?i[0]:void 0),c=await a({chainId:s});GA(c,s);let l=s??c.chain?.id;if(KA(i,l),!l)throw Error(`No chainId configured for TIP-1034 session challenge.`);let u=pM(n,r,t),d=XM(n.request.recipient,`recipient`),f=XM(n.request.currency,`currency`);return{amount:ZM(n.request.amount),challenge:n,chainId:l,client:c,escrow:u,feePayer:o.feePayer,feeToken:o.feeToken,key:xM({payee:d,token:f,escrow:u,chainId:l}),operator:o.operator,payee:d,snapshot:o.sessionSnapshot,suggestedDepositRaw:QM(n.request.suggestedDeposit),token:f}}async function eN(e){let{channelId:t,client:n,descriptor:r,expected:i,readChannelState:a=FM}=e,o=Lj({...r,chainId:i.chainId,escrow:i.escrow});tN({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 tN(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(!hM(r.payee,a))throw Error(`context descriptor payee does not match challenge`);if(!hM(r.token,s))throw Error(`context descriptor token does not match challenge`);if(!hM(r.payer,o))throw Error(`context descriptor payer does not match account`);if(!hM(Ij(r),t))throw Error(`context descriptor authorizedSigner does not match account`)}function nN(e){let{context:t,snapshot:n}=e,r=t?.descriptor??n?.descriptor;if(r)return{...t,channelId:t?.channelId??n?.channelId,descriptor:r}}function rN(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=GM(t,n,`cumulativeAmount`);return o===void 0?a+r:o+r}async function iN(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(!eM(i.escrow,i.chainId,{channelId:a.channelId,cumulativeAmount:s,signature:a.signature},Ij(i.descriptor)))throw Error(`session snapshot highest voucher signature is invalid`);let f=await eN({channelId:i.channelId,client:n,descriptor:i.descriptor,expected:{chainId:i.chainId,escrow:i.escrow,payee:i.descriptor.payee,payer:t.address,authorizedSigner:uM(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 aN(e,t){return hM(e.address,t.payer)?hM(uM(e),Ij(t)):!1}function oN(e){let{account:t,entry:n,context:r,decimals:i,maxDeposit:a,resolved:o}=e;if(UM(r)){if(!WM(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=nN({context:r,snapshot:o.snapshot});return!n&&s&&aN(t,s.descriptor)?{type:`recover`,account:t,context:s,decimals:i,maxDeposit:a,resolved:o}:n?.opened&&aN(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 sN(e,t,n=!1){switch(e.type){case`open`:return lN(e,t,n);case`recover`:return uN(e,t);case`voucher`:return dN(e,t);case`manual`:return fN(e,t,n)}}async function cN(e,t){if(e)return await rj(t.client,{account:t.account,amountOut:t.amountOut,tokenOut:t.tokenOut,tokenIn:e.tokenIn,slippage:e.slippage,maxAmountIn:e.maxAmountIn})}async function lN(e,t,n){let{account:r,resolved:i}=e,a=DD({contextDepositRaw:e.context?.depositRaw,maxDeposit:e.maxDeposit,requestAmount:i.amount,suggestedDepositRaw:i.suggestedDepositRaw}),o=await vM(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 cN(n,{account:r.address,amountOut:a,client:i.client,tokenOut:i.token}),token:i.token});return await VM(t,{channelId:o.channelId,cumulativeAmount:i.amount,deposit:a,descriptor:o.descriptor,escrow:i.escrow,chainId:i.chainId,opened:!0}),o}async function uN(e,t){let{account:n,context:r,decimals:i,maxDeposit:a,resolved:o}=e,{descriptor:s}=r,c=await eN({channelId:r.channelId,client:o.client,descriptor:s,expected:{chainId:o.chainId,escrow:o.escrow,payee:o.payee,payer:n.address,authorizedSigner:uM(n),token:o.token}}),l=rN({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`);kD(l,a);let u=await gM(o.client,n,s,l,o.chainId,o.escrow),d=await t.store.get(o.key);return await VM(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 dN(e,t){let{account:n,entry:r,resolved:i}=e,a=r.cumulativeAmount+i.amount;kD(a,e.maxDeposit);let o=await gM(i.client,n,r.descriptor,a,i.chainId,i.escrow);return r.cumulativeAmount=a,await VM(t,r),o}async function fN(e,t,n){let{account:r,context:i,decimals:a,resolved:o}=e,{descriptor:s}=i,c=Lj({...s,chainId:o.chainId,escrow:o.escrow});tN({channelId:i.channelId,descriptor:s,expectedChannelId:c,payee:o.payee,payer:r.address,authorizedSigner:uM(r),token:o.token});let l=await pN({account:r,channelId:c,context:i,decimals:a,descriptor:s,resolved:o},n);return await HM(t,o.key,l),l}async function pN(e,t){switch(e.context.action){case`open`:return mN(e);case`topUp`:return hN(e,t);case`voucher`:return gN(e);case`close`:return _N(e)}}async function mN(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=KM(r,i,`cumulativeAmount`,`open`),c=await gM(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 hN(e,t){let{account:n,channelId:r,context:i,decimals:a,descriptor:o,resolved:s}=e,c=KM(i,a,`additionalDeposit`,`topUp`);return i.transaction?{action:`topUp`,type:`transaction`,channelId:r,transaction:i.transaction,descriptor:o,additionalDeposit:c.toString()}:yM(s.client,n,o,c,s.chainId,s.feePayer,s.escrow,await cN(t,{account:n.address,amountOut:c,client:s.client,tokenOut:s.token}),s.feeToken)}function gN(e){let{account:t,context:n,decimals:r,descriptor:i,resolved:a}=e;return gM(a.client,t,i,KM(n,r,`cumulativeAmount`,`voucher`),a.chainId,a.escrow)}function _N(e){let{account:t,context:n,decimals:r,descriptor:i,resolved:a}=e;return _M(a.client,t,i,KM(n,r,`cumulativeAmount`,`close`),a.chainId,a.escrow)}var vN,yN,bN,xN=F((()=>{Fx(),JA(),Zx(),cj(),RM(),Vj(),aM(),bM(),NM(),WD(),vN=J.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]*$/.test(e)),yN=J.custom(e=>typeof e==`string`&&/^0x[0-9a-fA-F]{64}$/.test(e)),bN=J.object({account:J.optional(J.custom()),autoSwap:J.optional(J.custom()),action:J.optional(J.enum([`open`,`topUp`,`voucher`,`close`])),channelId:J.optional(yN),cumulativeAmount:J.optional(Vx()),cumulativeAmountRaw:J.optional(J.string()),transaction:J.optional(vN),descriptor:J.optional(J.custom()),additionalDeposit:J.optional(Vx()),additionalDepositRaw:J.optional(J.string()),depositRaw:J.optional(J.string())})}));async function SN(e,t){let n=EN.get(e)??new Map;EN.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 CN(e,t){try{return t?.channelId.toLowerCase()===e.channelId.toLowerCase()&&BigInt(t.acceptedCumulative)===e.cumulativeAmount}catch{return!1}}function wN(e,t,n){try{let r=e.response?.headers.get(q.paymentReceipt);if(r){let e=YE(r);if(e.challengeId===t.id&&CN(n,e))return!0}}catch{}return e.challenges?.some(e=>ZD(e)?CN(n,QD(e)):!1)??!1}function TN(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:f}=e,p=WA({chain:He,getClient:c,rpcUrl:RO}),m=zA({account:t}),h=l===void 0?void 0:N(l,a),g=u===void 0?void 0:N(u,a),_=i??CM(),v={store:_,notifyUpdate:e=>d?.(e)},y=async(e,t,n)=>{let r=m(e.client,t),i=t?.action?t.descriptor:n?.descriptor??nN({context:t,snapshot:e.snapshot})?.descriptor;return await f?.({account:r,chainId:e.chainId,operation:{kind:`authorizePaymentChannel`,...i?{authority:Ij(i)}:{}}})??r},b=async(e,t,n)=>oN({account:await y(e,t,n),entry:n,context:t,decimals:a,maxDeposit:h,resolved:e}),x=bE(FE,{canHandleChallenge:({challenge:e})=>ZD(e),context:bN,async createCredential(e){let{challenge:t,context:i}=e,a=await $M({allowCustomEscrow:n,challenge:t,escrowOverride:o,allowedChainIds:s,getClient:p}),c=jw(e),l=()=>{};try{let e=!UM(i)&&i?.descriptor===void 0;e&&(l=await SN(_,a.key),c&&(await _.get(a.key))?.opened&&await c.prepare());let n=await _.get(a.key),o=await b(a,i,n);if(!e&&c&&o.type===`open`){l=await SN(_,a.key);let e=await _.get(a.key);e?.channelId!==n?.channelId&&(n=e,n?.opened&&(await c.prepare(),n=await _.get(a.key)),o=await b(a,i,n))}let s,u=c&&o.type===`open`?{store:{get:e=>_.get(e),async set(e){s=e},delete:e=>_.delete(e)},notifyUpdate(){}}:v,d=await mM(t,await sN(o,u,ij(i?.autoSwap??r,oj)),a.chainId,o.account);if(c&&s){let e=s;c.settle=async n=>{let r=n.status===`accepted`||wN(n,t,e);if(!r&&n.status===`pending`)return!1;try{if(r){let t=await _.get(a.key);(!t?.opened||t.channelId.toLowerCase()!==e.channelId.toLowerCase())&&(await kM(_,e),v.notifyUpdate(e))}return!0}finally{l()}}}else l();return d}catch(e){throw l(),e}}}),S=async({challenge:e,channel:t,deposit:n,fetch:r,input:i,requiredCumulative:a,signal:o})=>OM(_,SM(t),async()=>{o?.throwIfAborted();let s=await _.get(SM(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=OD({deposit:c,maxDeposit:h,requiredCumulative:a,suggestedDeposit:e.request.suggestedDeposit===void 0?void 0:BigInt(e.request.suggestedDeposit),topUpAmount:g});l>0n&&await rO({additionalDeposit:l,challenge:e,channel:t,channelId:t.channelId,createSessionCredential:(e,t)=>x.createCredential({challenge:e,context:t}),onUncertainFunding:async e=>{let t=await _.get(SM(e)),n={...t?.channelId===e.channelId?t:e,uncertainTopUp:!0};await kM(_,n),v.notifyUpdate(n)},fetch:r,input:i,signal:o});let u=c+l;if(u===t.deposit)return;let d=await _.get(SM(t)),f=d?.channelId.toLowerCase()===t.channelId.toLowerCase()?d:t,p={...f,deposit:f.deposit>u?f.deposit:u};await kM(_,p),v.notifyUpdate(p)});return Sw(x,async({challenge:e,context:t,fetch:r,input:i,signal:a})=>{if(!ZD(e))return;let c=t===void 0?void 0:bN.parse(t);if(UM(c))return;let l=await $M({allowCustomEscrow:n,challenge:e,escrowOverride:o,allowedChainIds:s,getClient:p}),u=await _.get(l.key);if(!u?.opened)return;let d=l.snapshot?.channelId.toLowerCase()===u.channelId.toLowerCase()?l.snapshot:void 0,f=u.cumulativeAmount+KE(e),m=d?BigInt(d.requiredCumulative):f,h=m>f?m:f,g=d?BigInt(d.deposit):u.deposit,v=g>u.deposit?g:u.deposit;h<=v&&v===u.deposit||!aN(await y(l,c,u),u.descriptor)||await S({challenge:e,channel:u,deposit:v,fetch:r,input:i,requiredCumulative:h,signal:a})}),Ow(x,async({challenge:e,credential:t,fetch:r,headers:i,input:a,refetch:c,response:l,signal:u})=>{if(!ZD(e))return l;if(!XE(l))return GE(ES(t).payload).action===`open`&&i.get(`accept`)?.toLowerCase().includes(`text/event-stream`)?await c?.()??l:l;let d=(await $M({allowCustomEscrow:n,challenge:e,escrowOverride:o,allowedChainIds:s,getClient:p})).key,f=await _.get(d),m={assertVoucherWithinLocalLimit:e=>kD(e,h),createSessionCredential:(e,t)=>x.createCredential({challenge:e,context:t}),fetch:r,getChannel:()=>f??null,async topUpIfNeeded({deposit:t,requiredCumulative:n,signal:i}){f&&await S({challenge:e,channel:f,deposit:f.deposit>t?f.deposit:t,fetch:r,input:a,requiredCumulative:n,signal:i})}};return mO({onNeedVoucher:(t,n)=>hO({challenge:e,driver:m,headers:i,input:a,signal:n},t),onReceipt(){},response:l,signal:u})})}var EN,DN=F((()=>{Dw(),Rw(),Fx(),FS(),xE(),BA(),JA(),cj(),zO(),LE(),Vj(),oD(),bM(),NM(),xN(),WD(),EN=new WeakMap}));function ON(e,t){AN.set(e,t)}function kN(e){let t=AN.get(e);if(!t)throw Error(`Session manager internals are unavailable.`);return t}var AN,jN=F((()=>{AN=new WeakMap}));function MN(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 NN(e){let t=MN(`close-ready`),n=MN(`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)}}}var PN=F((()=>{}));function FN(e){return e.method===jx.tempo&&e.intent===Mx.charge}function IN(e){if(!FN(e)||typeof e.request.amount!=`string`)return!1;try{return BigInt(e.request.amount)===0n}catch{return!1}}function LN(e,t,n){if(!n)return t;let r={...Jw(e instanceof Request?e.headers:void 0),...Jw(t?.headers)};return Object.keys(r).some(e=>e.toLowerCase()===q.paymentSession.toLowerCase())?t:{...t,headers:{...r,[q.paymentSession]:n}}}function RN(e,t){return e===void 0?t:{...bN.parse(e),...t}}function zN(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:N(e.maxDeposit,t),topUpAmount:e.topUpAmount===void 0?null:N(e.topUpAmount,t),WebSocket:n}}function BN(e){let t=e.client?.chain?.id;(t!==void 0||e.allowedChainIds?.length===0)&&KA(e.allowedChainIds,t);let n=e.allowCustomEscrow??!1,r=zN(e),i=WA({chain:He,getClient:e.client?()=>e.client:e.getClient,rpcUrl:RO}),a=zA({account:e.account}),o=FD(),s=e.credentialContext===void 0?void 0:RN(e.credentialContext,{}),c=NN({getSocketSession:()=>o.socketSession}),l=e.channelStore??CM(),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=>kM(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=SM(e);e.opened&&u.delete(e.channelId),d?.trackCreates&&!d.seenExisting.has(t)&&d.created.set(t,e),await p(e)},delete:e=>AM(l,e)};EM(m,l);async function h(e){let t=SM(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(AM(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(AM(l,t)).catch(()=>void 0)}e.created.clear(),await M(e.committed??e.previous)}}function _(e){let t=kx(e.request.methodDetails,Nx.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=BD({channel:o.channel,spent:o.spent,state:o.state}),!0;return!1}function v(e){return vD(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=BD({channel:o.channel,spent:o.spent,state:o.state}))}let x=TN({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)}}),S=Tw(x);S&&Sw(x,e=>ae(()=>Promise.resolve(S(e)),e.signal)),kw(x);let C=Aj({allowedChainIds:e.allowedChainIds,account:e.account,getClient:e.client?()=>e.client:e.getClient,resolveAccount:e.resolveAccount}),w=Kw({fetch:r.fetch,methods:[x],onChallenge:async(e,t)=>{if(!XD(e))return;let n=d,r=n&&n.challengesReceived>0&&e.id===o.lastChallenge?.id,i=r&&$x(e)===$x(o.lastChallenge);n&&n.challengesReceived++,!i&&(_(e)||(n?.created.size?await g():r&&await M(n.committed??n.previous)),o.lastChallenge=e,v({type:`challengeReceived`,challengeId:e.id}))}});function T(e,t){return x.createCredential({challenge:e,context:RN(s,t)})}function ee(e){ID({maxVoucherCumulative:r.maxVoucherCumulative,receipt:e,runtime:o})}function te(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 E(t){let n=t.headers.get(q.paymentSessionSnapshot);if(!n)return;let r=cD(n);KA(e.allowedChainIds,r.chainId);let s=await i({chainId:r.chainId});GA(s,r.chainId);let c=a(s),{entry:l,spent:u}=await iN({account:await e.resolveAccount?.({account:c,chainId:r.chainId,operation:{authority:Ij(r.descriptor),kind:`authorizePaymentChannel`}})??c,client:s,snapshot:r});return A(l.cumulativeAmount),await Promise.resolve(m.set(l)).catch(()=>void 0),o.channel=l,o.spent=u,l}async function ne(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:{...Jw(i),...Jw(n?.headers),[q.acceptPayment]:`${jx.tempo}/${Mx.charge}`}};try{let t=await r.fetch(l,u);if(t.status!==402)return await E(t);let n=lS(t).find(FN);if(!n||!IN(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;zw(n,i,e.trustedTempoProofRealms);let a=await C.createCredential({challenge:n,context:{}}),o=await r.fetch(l,HC({...u,redirect:`manual`},pS(n),a));return o.ok?await E(o):void 0}catch{return}}function D(e,t){let n=o.socketSession;return RD({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 O(e,t){let n=QD(t);if(!n)return;if(Lj({...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 re(e,t){let n=O(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 k(e,t=e.challenge,n=!1){let r=(n?re(e,t):O(e.channel,t))?.acceptedCumulative??D(t,e.channelId);if(r>e.channel.cumulativeAmount)throw Error(`fallback close amount exceeds local voucher state`);return A(r),r.toString()}function A(e){CD({cumulativeAmount:e,maxVoucherCumulative:r.maxVoucherCumulative})}let j,ie;async function ae(e,t){if(ie)throw ie;for(;;){let e=j;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(),ie)throw ie;let n=e();j=n;try{return await n}catch(e){throw e instanceof MO&&(ie=Error(`Session funding outcome is unknown; reconcile the pending payment before creating a new session manager.`)),e}finally{j===n&&(j=void 0)}}async function oe(e){if(!o.channel)throw Error(`Cannot top up session: no active channel`);return OM(l,SM(o.channel),async()=>{let{knownDeposit:t,...n}=e,i=o.channel?await m.get(SM(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 rO({...n,channel:o.channel,createSessionCredential:T,fetch:r.fetch,onUncertainFunding:async e=>{let t=await m.get(SM(e)),n={...t?.channelId===e.channelId?t:e,uncertainTopUp:!0};o.channel?.channelId===e.channelId&&(o.channel=n),await m.set(n),b(n)}});ee(a);let s=o.channel,c=JD({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 se(e){return ae(async()=>{e.signal?.throwIfAborted();let t=o.channel?.channelId===e.channelId?o.channel.deposit:0n,n=t>e.deposit?t:e.deposit,i=OD({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 oe({challenge:e.challenge,input:e.input,channelId:e.channelId,additionalDeposit:i,knownDeposit:n,signal:e.signal})},e.signal)}async function ce(e,t){let n=zD({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 M(e){let t=VD(e,o.channel);o.channel=t.channel,o.spent=t.spent,o.state=t.state,o.channel?.opened&&await p(o.channel)}function le(e){let t=e.headers.get(q.paymentReceipt),n=t?YE(t):null;return ee(n),Object.assign(e,{receipt:n,challenge:o.lastChallenge,channelId:o.channel?.channelId??null,cumulative:o.channel?.cumulativeAmount??0n})}async function ue(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=BD({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 ne(e,t),i.trackCreates=!0;let a=LN(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=LN(e,t,void 0),!0)}for(;;){let t;try{t=await w(e,a)}catch(e){if(i.created.size?await g():await M(i.committed??n),await l())continue;throw e}let s=le(t),c=!1;if(s.status===402){let t=await aO({input:e,init:a,response:s,createSessionCredential:T,fetch:r.fetch,getChannel:()=>o.channel,restoreCumulative:ce,setChallenge(e){o.lastChallenge=e},topUpIfNeeded:se});t&&(c=!0,s=le(t))}if(!c&&!s.ok&&!s.receipt){if(i.created.size?await g():await M(i.committed??n),await l())continue;return s}return s}}finally{d=void 0}}async function de(e){let t=await sO({createSessionCredential:T,fetch:r.fetch,getMinimumSpent:()=>o.spent,headers:o.lastHeaders,lastUrl:o.lastUrl,resolveSignedCloseAmount:t=>k(e,t,!0),signedCloseAmount:k(e),setChallenge(e){o.lastChallenge=e},target:e});return t&&(te(),v({type:`closeStarted`}),v({type:`closed`,receipt:t})),t}let fe={createSessionCredential:T,doFetch:ue,fetch:r.fetch,getChannel:()=>o.channel,getChallenge:()=>o.lastChallenge,assertVoucherWithinLocalLimit:A,acceptReceipt(e){ee(e)},topUpIfNeeded:se},pe={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:ue,async topUp(e){let t=qD({amount:e,assertVoucherWithinLocalLimit:A,channel:o.channel,decimals:r.decimals,lastChallenge:o.lastChallenge,lastUrl:o.lastUrl});return ae(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=qD({amount:e,assertVoucherWithinLocalLimit:A,channel:o.channel,decimals:r.decimals,lastChallenge:t.challenge,lastUrl:t.input});return oe({additionalDeposit:n.additionalDeposit,challenge:n.challenge,channelId:n.channelId,headers:o.lastHeaders,input:n.input})})},async sse(e,t){return cO(e,t,fe)},async ws(e,t){if(!r.WebSocket)throw Error("No WebSocket implementation available. Pass `webSocket` to sessionManager() in this runtime.");let n=tO(e),i=t?.signal?{signal:t.signal}:void 0;await ne(n,i);let a=o.channel?.opened?o.channel.channelId:void 0,{challenge:s,credential:l,httpUrl:u,wsUrl:d}=await _O({async createSessionCredential(e,i){return o.lastChallenge=e,await ww(x,{challenge:e,context:i,fetch:r.fetch,input:n,signal:t?.signal}),T(e,i)},fetch:r.fetch,input:e,onProbeUrl(e){o.lastUrl=e.toString()},probeInit:LN(n,i,a),signal:t?.signal});return o.lastChallenge=s,SO({challenge:s,credential:l,httpUrl:u,WebSocket:r.WebSocket,wsUrl:d,options:t,createSessionCredential:T,getChannel:()=>o.channel,setSocketSession(e){o.socketSession=e},async refreshChallenge(){let e=await gO({fetch:r.fetch,input:u,probeInit:LN(u,i,o.channel?.opened?o.channel.channelId:void 0),signal:t?.signal});return o.lastChallenge=e.challenge,e.challenge},assertVoucherWithinLocalLimit:A,acceptReceipt:ee,rejectCloseReady:c.rejectCloseReady,rejectReceipt:c.rejectReceipt,settleCloseReady:c.settleCloseReady,settleReceipt:c.settleReceipt,topUpIfNeeded:se,waitForReceipt:c.waitForReceipt})},async close(){let e=o.socketSession,t=AD({channel:o.channel,currentSocket:e,lastChallenge:o.lastChallenge});if(!t)return;let n=e?.socket;if(e&&n?.readyState===kO.OPEN){let r=await HD({activeSocket:n,createSessionCredential:T,currentSocket:e,spent:o.spent,target:t,waitForCloseReady:c.waitForCloseReady,waitForReceipt:c.waitForReceipt});return te(),v({type:`closeStarted`}),v({type:`closed`,receipt:r}),r}return de(t)}};return ON(pe,{consumeSseResponse(e,t,n){return lO(e,t,n,fe)},rehydrate({channel:e,challenge:t,input:n,spent:r}){if(!e.opened)throw Error(`Cannot restore a closed session channel.`);if(!XD(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.`);A(e.cumulativeAmount);let i=O(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})}}),pe}var VN=F((()=>{vS(),LT(),Dw(),Rw(),Uw(),WC(),Fx(),BA(),JA(),Fj(),zO(),NM(),xN(),DN(),Vj(),oD(),hD(),jN(),PN(),WD(),NO(),(function(e){e.serializeSnapshot=sD,e.deserializeSnapshot=cD})(BN||={})}));function HN(e){return e instanceof Date?e:new Date(e)}function UN(e){let t=e.getTime();if(!Number.isFinite(t))throw new Y({reason:`subscriptionExpires is invalid`});if(t%1e3!=0)throw new Y({reason:`subscriptionExpires must be representable as whole seconds`});let n=t/1e3;if(n<=0||!Number.isSafeInteger(n))throw new Y({reason:`subscriptionExpires cannot be represented in a Tempo key authorization`});return n}function WN(e){if(!/^[1-9]\d*$/.test(e.periodCount))throw new Y({reason:`periodCount is invalid`});let t=lP[e.periodUnit];if(t===void 0)throw new Y({reason:`periodUnit is invalid`});let n=BigInt(e.periodCount)*t;if(n>cP)throw new Y({reason:`subscription period cannot be represented as an unsigned 64-bit integer`});if(n>BigInt(2**53-1))throw new Y({reason:`subscription period cannot be represented exactly by this Tempo client`});return Number(n)}function GN(e){let{challengeExpires:t,request:n}=e;WN(n);let r=UN(HN(n.subscriptionExpires));if(t){let e=Math.floor(new Date(t).getTime()/1e3);if(!Number.isFinite(e)||r<=e)throw new Y({reason:`subscriptionExpires must be strictly later than challenge expires`})}}function KN(e){let t=aP(e.currency,`currency`),n=aP(e.recipient,`recipient`);return[{address:t,selector:sP,recipients:[n]}]}function qN(e){try{let t=k.fromBytes(D.toBytes(e));if(k.size(t)!==32)throw Error(`invalid challenge id size`);return t}catch{throw new Y({reason:`challenge id must encode 32 bytes`})}}async function JN(e){let{accessKey:t,account:n,challengeId:r,chainId:i,request:a}=e;if(typeof n.sign!=`function`)return;let o=XN({accessKey:t,challengeId:r,chainId:i,request:a}),s=await n.sign({hash:We.getSignPayload(o)}),c=Ge.from(s);if(c.type===`keychain`||c.type===`multisig`)throw new Y({reason:`keyAuthorization must use a primitive signature`});return We.from(o,{signature:s})}function YN(e){let{accessKey:t,challengeId:n,chainId:r,payload:i,request:a}=e;if(i.type!==`keyAuthorization`)throw new Y({reason:`invalid keyAuthorization payload`});let o=ZN(i.signature),s=QN(o);if($N({accessKey:t,authorization:o,chainId:r}),o.witness?.toLowerCase()!==qN(n))throw new Y({reason:`keyAuthorization challenge mismatch`});return eP(o,a),nP(tP(o),a),rP(o.scopes,a),{authorization:o,source:{address:iP(o,s),chainId:r}}}function XN(e){let{accessKey:t,challengeId:n,chainId:r,request:i}=e;return We.from({address:aP(t.accessKeyAddress,`accessKeyAddress`),chainId:BigInt(r),expiry:UN(HN(i.subscriptionExpires)),limits:[{token:aP(i.currency,`currency`),limit:BigInt(i.amount),period:WN(i)}],scopes:KN(i),type:t.keyType,witness:qN(n)})}function ZN(e){try{return We.deserialize(e)}catch(e){throw e instanceof We.InvalidSignatureTypeError?new Y({reason:`keyAuthorization must use a primitive signature`}):new Y({reason:`invalid keyAuthorization payload`})}}function QN(e){let t=e.signature;if(!t)throw new Y({reason:`keyAuthorization must use a primitive signature`});return t}function $N(e){let{accessKey:t,authorization:n,chainId:r}=e;if(n.chainId!==BigInt(r))throw new Y({reason:`keyAuthorization chainId mismatch`});if(t){if(!fe(n.address,aP(t.accessKeyAddress,`accessKeyAddress`)))throw new Y({reason:`keyAuthorization access key mismatch`});if(n.type!==t.keyType)throw new Y({reason:`keyAuthorization key type mismatch`})}}function eP(e,t){if(GN({request:t}),e.expiry!==UN(HN(t.subscriptionExpires)))throw new Y({reason:`keyAuthorization expiry mismatch`})}function tP(e){let[t]=e.limits??[];if(!t||e.limits?.length!==1)throw new Y({reason:`keyAuthorization must contain exactly one token limit`});return t}function nP(e,t){if(!fe(e.token,aP(t.currency,`currency`)))throw new Y({reason:`keyAuthorization currency mismatch`});if(e.limit!==BigInt(t.amount))throw new Y({reason:`keyAuthorization amount mismatch`});if(e.period!==WN(t))throw new Y({reason:`keyAuthorization period mismatch`})}function rP(e,t){if(!e||e.length!==1)throw new Y({reason:`keyAuthorization must contain a recipient-scoped transferWithMemo call`});let n=aP(t.currency,`currency`),r=aP(t.recipient,`recipient`),i=new Set;for(let t of e){if(!fe(t.address,n))throw new Y({reason:`keyAuthorization call target mismatch`});let e=oP(t.selector);if(e!==`0xa9059cbb`&&e!==`0x95777d59`)throw new Y({reason:`keyAuthorization selector not allowed`});if(i.has(e))throw new Y({reason:`keyAuthorization duplicate selector`});if(i.add(e),t.recipients?.length!==1||!fe(t.recipients[0],r))throw new Y({reason:`keyAuthorization recipient mismatch`})}if(!i.has(`0x95777d59`))throw new Y({reason:`keyAuthorization must allow transferWithMemo`})}function iP(e,t){let n=We.getSignPayload(e);try{let e=Ge.extractAddress({payload:n,signature:t});if(!Ge.verify(t,{address:e,payload:n}))throw new Y({reason:`keyAuthorization signature is invalid`});return e}catch(e){throw e instanceof Y?e:new Y({reason:`keyAuthorization signature is invalid`})}}function aP(e,t){if(!de(e))throw new Y({reason:`${t} must be an address`});return e.toLowerCase()}function oP(e){return typeof e==`string`?e.toLowerCase():``}var sP,cP,lP,uP=F((()=>{CS(),sP=`0x95777d59`,cP=(1n<<64n)-1n,lP={dev_second:1n,day:86400n,week:604800n}}));function dP(e={}){let t=WA({chain:ye,getClient:e.getClient,rpcUrl:RO}),n=zA({account:e.account});return bE(IE,{context:mP,async createCredential({challenge:r,context:i}){let a=r.request.methodDetails?.chainId??PO.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.");pP(r.request),await e.validateRequest?.(r.request);let l=await fP(o,{accessKey:c,account:s,challengeId:r.id,chainId:a,request:r.request}),u=YN({accessKey:c,challengeId:r.id,chainId:a,payload:{signature:We.serialize(l),type:`keyAuthorization`},request:r.request});if(!fe(u.source.address,s.address))throw Error(`keyAuthorization signer does not match the selected account`);return AS({challenge:r,payload:{signature:We.serialize(l),type:`keyAuthorization`},source:`did:pkh:eip155:${a}:${s.address.toLowerCase()}`})}})}async function fP(e,t){let{accessKey:n,account:r,challengeId:i,chainId:a,request:o}=t,s=await JN({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:UN(HN(o.subscriptionExpires)),keyType:n.keyType,limits:[{token:o.currency,limit:k.fromNumber(BigInt(o.amount)),period:WN(o)}],scopes:KN(o),witness:qN(i)}]});return We.fromRpc(c.keyAuthorization)}function pP(e){WN(e),UN(HN(e.subscriptionExpires))}var mP,hP=F((()=>{FS(),xE(),BA(),JA(),Zx(),zO(),LE(),uP(),mP=J.object({accessKey:J.optional(J.custom()),account:J.optional(J.custom())})}));function gP(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[Aj(e),_P(n)]}var _P,vP=F((()=>{DN(),VN(),Fj(),hP(),_P=Object.assign(TN,{manager:BN}),(function(e){e.charge=Aj,e.common=gP,e.session=_P,e.subscription=dP})(gP||={})})),yP=F((()=>{Fj(),vP(),hP(),DN(),VN()})),bP=Qe({orderTempoChargeChallengesByBalance:()=>SP,readTempoKeystore:()=>HP,resolveTempoAccount:()=>UP,tempo:()=>CP});async function xP(e){process.stdout.write(Buffer.from(await e.arrayBuffer()))}async function SP(e,t){let n=[],r=[];for(let[t,i]of e.entries())AP(i)&&(n.push(t),r.push(i));if(r.length<2)return[...e];let i=await jP(t).catch(()=>void 0);if(!i)return[...e];let a=await Promise.all(r.map(async(e,t)=>({challenge:e,index:t,score:await MP(e,i)})));a.sort((e,t)=>ZP.indexOf(e.score)-ZP.indexOf(t.score)||e.index-t.index);let o=[...e];for(let[e,t]of n.entries())o[t]=a[e].challenge;return o}function CP(){let e;return TA({method:`tempo`,supports(e){return e.method===`tempo`&&[`charge`,`session`].includes(e.intent)},async setup({challenge:t,options:n,methodOpts:r}){let i=bk(n.account),a=t.request,o=a.currency,s=kP(r),c=IP({autoSwap:s.autoSwap??n.autoSwap,payWith:s.payWith??n.payWith,slippage:s.slippage??n.slippage,tokenIn:s.tokenIn}),l=o??``,u=a.decimals??6,d,f,p,m=!1,h=process.env.MPPX_PRIVATE_KEY?.trim()||(YO(i)?void 0:await xk(i).get());if(!h&&YO(i)&&WP()){m=!0;let e=UP(i);if(e){let r=$O(n.rpcUrl,{network:n.network});p=j({chain:await tk({network:n.network,rpcUrl:r}),transport:ue(r)}),PP({challenge:t,clientChainId:p.chain?.id}),d=p.chain?.blockExplorers?.default?.url;let i=o?await ak(p,o,e.wallet_address).catch(()=>void 0):void 0;l=i?.symbol??o??``,u=i?.decimals??a.decimals??6}}else if(h)f=ve(h);else{let e=KP();if(e){let t=await xk(e).get();t&&(f=ve(t))}if(!f)throw n.account?new I({code:`ACCOUNT_NOT_FOUND`,message:`Account "${i}" not found.`,exitCode:69}):new I({code:`ACCOUNT_NOT_FOUND`,message:`No account found.`,exitCode:69})}if(!m&&f){let e=$O(n.rpcUrl,{network:n.network});p=j({chain:await tk({network:n.network,rpcUrl:e}),transport:ue(e)}),PP({challenge:t,clientChainId:p.chain?.id}),d=p.chain?.blockExplorers?.default?.url;let r=o?await ak(p,o,f.address).catch(()=>void 0):void 0;l=r?.symbol??o??``,u=r?.decimals??a.decimals??6}if(m)return{tokenSymbol:l,tokenDecimals:u,explorerUrl:d,methods:[],async createCredential(e){let t=e.headers.get(`www-authenticate`);if(!t)throw Error(`No WWW-Authenticate header in 402 response.`);return GP(t)}};if(!f||!p)throw new I({code:`ACCOUNT_NOT_FOUND`,message:`Tempo requires a configured account.`,exitCode:69});let g=gP({account:f,...s.allowCustomEscrow===void 0?{}:{allowCustomEscrow:s.allowCustomEscrow},getClient:()=>p,...c===void 0?{}:{autoSwap:c},maxDeposit:(()=>{if(t.intent!==`session`)return;let e=t.request.suggestedDeposit,n=(s.deposit===void 0?void 0:String(s.deposit))??e??(ik(p.chain)?`10`:void 0);if(!n)throw new I({code:`MISSING_DEPOSIT`,message:`Session payment requires a deposit. Use -M deposit=<amount> or connect to testnet.`,exitCode:2});return n})()}),_=(()=>{if(!s.channel)return;let e=s.channel,t=RP(e);return{channelId:e,...t!==void 0&&{cumulativeAmountRaw:t.toString()}}})();return e={descriptor:void 0,async signVoucher({channelId:n,cumulativeAmount:r,escrowContract:i,chainId:a,action:o=`voucher`}){let s=e?.descriptor;if(!s)throw Error(`session descriptor not available`);let c={channelId:n,cumulativeAmount:r},l=await Qj(p,f,c,i,a);return AS({challenge:t,payload:{action:o,channelId:n,...o===`close`?{closeSignature:await $j(p,f,c,i,a)}:{},descriptor:s,cumulativeAmount:r.toString(),signature:l},source:`did:pkh:eip155:${a}:${f.address}`})},source:`did:pkh:eip155:${p.chain.id}:${f.address}`},{tokenSymbol:l,tokenDecimals:u,explorerUrl:d,methods:[...g],credentialContext:_}},prepareCredentialRequest({challenge:e,headers:t}){e.intent===`session`&&(t.Accept=`text/event-stream`)},async handleResponse(t){if(t.challenge.intent!==`session`||!e)return!1;let{challenge:n,credential:r,response:i,fetchUrl:a,fetchInit:o,verbose:s}=t,{silent:c,confirmEnabled:l,tokenSymbol:u,tokenDecimals:d,explorerUrl:f,shownKeys:p}=t,m=c?e=>{}:e=>process.stderr.write(e),h=ES(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&&(e.descriptor=h.payload.descriptor),s>=1){if(h.payload.action===`open`){let e=g.suggestedDeposit,t=e?` ${X.dim(`(deposit ${e} ${u})`)}`:``;m(`${l?``:`
|
|
233
233
|
`}${X.dim(`Channel opened ${h.payload.channelId}`)}${t}\n`)}else m(`${l?``:`
|
|
234
|
-
`}${X.dim(`Channel reused ${h.payload.channelId}`)}\n`)}let C=i;C.ok&&!C.headers.get(`Content-Type`)?.includes(`text/event-stream`)&&h.payload.action===`open`&&`cumulativeAmount`in h.payload&&(S=BigInt(h.payload.cumulativeAmount));let w=C.headers.get(q.paymentReceipt);if(w)try{let e=JSON.parse(D.toString(w));
|
|
235
|
-
`})}catch{}return(C.headers.get(`Content-Type`)??``).includes(`text/event-stream`)?await
|
|
236
|
-
`),l&&!await t.confirm(`Close channel?`,!0)?s>=1&&m(`${X.dim(`Kept channel open.`)}\n`):await
|
|
237
|
-
`)}function
|
|
234
|
+
`}${X.dim(`Channel reused ${h.payload.channelId}`)}\n`)}let C=i;C.ok&&!C.headers.get(`Content-Type`)?.includes(`text/event-stream`)&&h.payload.action===`open`&&`cumulativeAmount`in h.payload&&(S=BigInt(h.payload.cumulativeAmount));let w=C.headers.get(q.paymentReceipt);if(w)try{let e=JSON.parse(D.toString(w));TP(e,S),typeof e.acceptedCumulative==`string`&&e.acceptedCumulative&&zP(v,S),s>=1&&wP(e,{info:m,shownKeys:p,tokenSymbol:u,tokenDecimals:d,explorerUrl:f,handler:this,prefix:`
|
|
235
|
+
`})}catch{}return(C.headers.get(`Content-Type`)??``).includes(`text/event-stream`)?await EP(C,{challenge:n,channelId:v,escrowContract:y,chainId:b,cumulativeAmount:S,tickCost:x,fetchUrl:a,fetchInit:o,session:e,info:m,verbose:s,shownKeys:p,tokenSymbol:u,tokenDecimals:d,explorerUrl:f,handler:this}):(await xP(C),v&&y&&b&&(l&&m(`
|
|
236
|
+
`),l&&!await t.confirm(`Close channel?`,!0)?s>=1&&m(`${X.dim(`Kept channel open.`)}\n`):await DP({channelId:v,cumulativeAmount:S,escrowContract:y,chainId:b,fetchUrl:a,fetchInit:o,session:e,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 wP(e,t){t.info(`${t.prefix??``}${X.bold(X.green(`Payment Receipt`))}\n`);let n=[],r=e.channelId&&e.reference&&e.channelId===e.reference,i=new Set([`acceptedCumulative`,`spent`]);for(let[a,o]of Object.entries(e)){if(o===void 0||t.shownKeys.has(a)||a===`reference`&&r)continue;let e=t.handler.formatReceiptField?.(a,o);e===void 0?i.has(a)&&typeof o==`string`?n.push([a,`${o} ${X.dim(`(${QO(BigInt(o),t.tokenSymbol,t.tokenDecimals)})`)}`]):(a===`reference`||a===`txHash`)&&typeof o==`string`&&t.explorerUrl?n.push([a,KO(`${t.explorerUrl}/tx/${o}`,o)]):n.push([a,String(o)]):n.push([a,e])}n.sort(([e],[t])=>e.localeCompare(t));let a=Math.max(...n.map(([e])=>e.length));for(let[e,r]of n)t.info(` ${X.dim(e.padEnd(a))} ${r}\n`);t.prefix&&t.info(`
|
|
237
|
+
`)}function TP(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 EP(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 OP():void 0,c=(()=>{if(!s||!X.isColorSupported)return;let e=e=>Math.max(0,Math.min(255,Math.round(e))),t=.299*s.r+.587*s.g+.114*s.b<128?1:-1,n=n=>r=>`\x1b[48;2;${e(s.r+n*t)};${e(s.g+n*t)};${e(s.b+n*t)}m${r}\x1b[49m`;return[n(12),n(24)]})(),l=0,u=e=>{if(c){let t=c[l%c.length];process.stdout.write(e.replace(/[^\n]+/g,e=>t(e))),l++}else process.stdout.write(e)},d=async e=>{for(let r of e){if(r.startsWith(`event: `)){o=r.slice(7).trim();continue}if(!r.startsWith(`data: `)){r===``&&(o=``);continue}let e=r.slice(6);if(e.trim()!==`[DONE]`){if(o===`payment-need-voucher`&&t.channelId&&t.escrowContract&&t.chainId){try{let r=JSON.parse(e);if(r.channelId!==t.channelId)throw Error(`payment-need-voucher channelId does not match current session`);let i=BigInt(r.requiredCumulative);if(i>n+t.tickCost)throw Error(`payment-need-voucher exceeds next locally billable amount`);n=n>i?n:i;let a=await t.session.signVoucher({channelId:t.channelId,cumulativeAmount:n,escrowContract:t.escrowContract,chainId:t.chainId});await globalThis.fetch(t.fetchUrl,{method:`POST`,headers:{[q.authorization]:a}})}catch(e){t.info(X.dim(X.yellow(` [voucher failed: ${e instanceof Error?e.message:e}]`)))}o=``;continue}if(o===`payment-receipt`){if(t.verbose>=1)try{wP(JSON.parse(e),{info:t.info,shownKeys:t.shownKeys,tokenSymbol:t.tokenSymbol,tokenDecimals:t.tokenDecimals,explorerUrl:t.explorerUrl,handler:t.handler,prefix:`
|
|
238
238
|
|
|
239
239
|
`})}catch{}o=``;continue}if(e.length===0)u(`
|
|
240
240
|
`);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(`
|
|
241
|
-
`);a=n.pop(),await d(n)}a.trim()&&await d([a]),t.channelId&&t.escrowContract&&t.chainId&&await
|
|
242
|
-
`)){let e=t.trim();if(e===`[[keys]]`){r?.wallet_address&&n.push(r),r={wallet_type:`local`,wallet_address:``,chain_id:0};continue}if(!r)continue;let i=e.match(/^(\w+)\s*=\s*"?([^"]*)"?$/);if(!i)continue;let[,a,o]=i;a===`wallet_type`?r.wallet_type=o:a===`wallet_address`?r.wallet_address=o:a===`chain_id`&&(r.chain_id=Number.parseInt(o,10))}return r?.wallet_address&&n.push(r),n}catch{return[]}}function HP(e){let t=VP();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]}function UP(){if(ZP!==void 0)return ZP;try{m.execFileSync(`which`,[`tempo`],{stdio:`ignore`}),ZP=!0}catch{ZP=!1}return ZP}async function WP(e){return new Promise((t,n)=>{m.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 GP(){let e=vk();if(JO(e.get())&&!UP()&&b.platform()===`darwin`)try{let t=m.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]===KP&&r?.[1]&&n.push(r[1])}if(n.length>0)return e.set(n[0]),n[0]}catch{}}var KP,qP,JP,YP,XP,ZP,QP=F((()=>{Ox(),IT(),Fx(),PS(),vP(),aD(),iM(),Ek(),fk(),TA(),KP=`mppx`,qP=p.union([p.boolean(),p.literal(`true`).transform(()=>!0),p.literal(`false`).transform(()=>!1)]),JP=p.object({allowCustomEscrow:p.optional(qP),autoSwap:p.optional(qP),channel:p.optional(p.coerce.string()),deposit:p.optional(p.union([p.string(),p.number()])),payWith:p.optional(p.string()),slippage:p.optional(p.coerce.number()),tokenIn:p.optional(p.string())}),YP=[`allowCustomEscrow`,`autoSwap`,`channel`,`deposit`,`payWith`,`slippage`,`tokenIn`],XP=[`payable`,`unknownBalance`,`insufficientBalance`,`unsupported`]}));qS(),Ek(),TA();const $P=[...Object.entries(Mk),...Object.entries(Nk),...Object.entries(Pk),...Object.entries(Fk)];function eF(){return wA({method:`evm`,supports:tF,async setup({challenge:e,options:t}){let n=e.request,r=n.network?nF(Hk(n.network)):void 0,i=n.network&&n.asset?$P.find(([,e])=>Bk(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`?Ak({address:n.asset,decimals:i?.[1].decimals??6,network:n.network,transfer:{name:a,type:`eip3009`,version:o}}):void 0,c=await Ck(t.account);return{explorerUrl:r?.blockExplorers?.default?.url,methods:[...CA({account:c,...s&&{currencies:[s]}})],tokenDecimals:i?.[1].decimals??6,tokenSymbol:i?.[0]??``}}})}function tF(e){if(!GS(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 nF(e){return Object.values(Ve).find(t=>t.id===e)}_S(),pC(),QP();const rF=[SP(),FA(),EA(),eF()];async function iF(e,t,n){let r=n;for(let n of t??[]){let t=await n.preparePayment?.({challenge:e,...r===void 0?{}:{credentialContext:r}});t&&`credentialContext`in t&&(r=t.credentialContext)}return r}function aF(e,t){let n=t?.plugins?.find(t=>lF(t,e));if(n)return{plugin:n};let r=cF(t)?.filter(t=>t.name===e.method&&t.intent===e.intent),i=r?.find(t=>t.canHandleChallenge?.({challenge:e})??!0);if(i)return{method:i};if(r?.length)return{};let a=rF.find(t=>lF(t,e));return a?{plugin:a}:{}}function oF(e,t){let n=cF(t);if(n?.length){let r=QS(e,n,YS(n,t?.paymentPreferences).entries);if(r){let e=t?.plugins?.find(e=>lF(e,r.challenge));return{challenge:r.challenge,...e?{plugin:e}:{method:r.method}}}return}for(let n of e){let e=aF(n,t);if(e.plugin||e.method)return{challenge:n,...e}}}function sF(e){let t=cF(e);if(t?.length)return YS(t,e?.paymentPreferences).header}function cF(e){return Array.isArray(e?.methods)?e.methods.flat():void 0}function lF(e,t){return e.supports?e.supports(t):e.method===t.method}async function uF(e){let t=dF(e);if(!t)return;let n=await import(t);return{config:n.default??n,path:t}}function dF(e){if(e){let n=c.resolve(e);return t.existsSync(n)?n:void 0}let n=process.env.MPPX_CONFIG?.trim();if(n){let e=c.resolve(n);return t.existsSync(e)?e:void 0}}function fF(e,t){function n(t){let n={...t.request};if(t.method===`tempo`&&t.intent===`session`){let e={...n.methodDetails};delete e.sessionSnapshot,Object.keys(e).length?n.methodDetails=e:delete n.methodDetails}return $x({...t,request:n,id:e.id,expires:e.expires})}if(n(t)!==n(e))throw Error(`Payment request changed on retry. Run the command again to approve the new payment.`)}QP(),_S(),yM(),AN(),BN(),MO();function pF(e){return e??globalThis.fetch.bind(globalThis)}function mF(e,t){let n=e.request.methodDetails?.chainId;if(n!==void 0&&n!==t.chainId)throw Error(`Close challenge changed the session chain.`);if(typeof e.request.recipient!=`string`||e.request.recipient.toLowerCase()!==t.descriptor.payee.toLowerCase())throw Error(`Close challenge changed the session payee.`);if(typeof e.request.currency!=`string`||e.request.currency.toLowerCase()!==t.descriptor.token.toLowerCase())throw Error(`Close challenge changed the session token.`);if(fM(e,t.escrow).toLowerCase()!==t.escrow.toLowerCase())throw Error(`Close challenge changed the session escrow.`);let r=ZD(e);if(r&&r.channelId.toLowerCase()!==t.channelId.toLowerCase())throw Error(`Close challenge changed the session channel.`)}async function hF(e){mF(e.challenge,e.channel);let t=pF(e.fetch),n,r=async(r,i)=>{n&&=(await e.onChallenge?.(n),void 0);let a=await t(r,i);if(a.status!==402)return a;let o=cS(a).find(YD);if(!o)throw Error(`Refreshed close response did not include tempo/session.`);return mF(o,e.channel),n=o,a},i=zN({...e.manager,bootstrap:!1,escrow:e.channel.escrow,fetch:r});ON(i).rehydrate(e);let a=await i.close();if(!a)throw Error(`Session close response did not include a payment receipt.`);return{manager:i,receipt:a}}_S(),yM(),MM(),MO(),Bj(),Zx();var gF=class extends Error{name=`SessionStateError`;code=`SESSION_STATE_INVALID`;file;constructor(e,t={}){super(e,t.cause===void 0?void 0:{cause:t.cause}),this.file=t.file}},_F=class extends Error{name=`SessionBusyError`;code=`SESSION_BUSY`;exitCode=75;scope;owner;constructor(e,t){super(`Session scope is busy in process ${t.pid} on ${t.hostname}.`),this.scope=e,this.owner=t}};const vF=J.object({channelId:qx(),cumulativeAmount:J.string(),deposit:J.string(),descriptor:J.object({payer:Kx(),payee:Kx(),operator:Kx(),token:Kx(),salt:qx(),authorizedSigner:Kx(),expiringNonceHash:qx()}),escrow:Kx(),chainId:J.number(),opened:J.boolean()}),yF=J.object({name:J.optional(J.string()),address:Kx()}),bF=J.object({method:J.literal(`tempo`),intent:J.literal(`session`),status:J.literal(`success`),timestamp:J.string(),reference:J.string(),challengeId:J.string(),channelId:qx(),acceptedCumulative:J.string(),spent:J.string(),units:J.optional(J.number()),txHash:J.optional(qx())}),xF=J.object({version:J.literal(1),method:J.literal(`tempo`),intent:J.literal(`session`),status:J.enum([`opening`,`open`,`closing`,`stale`]),channel:vF,account:yF,endpoint:J.string(),challenge:gS,receipt:J.optional(bF),spent:J.string(),units:J.number(),createdAt:J.string(),updatedAt:J.string()}),SF=J.object({version:J.literal(1),channelId:qx()}),CF=J.object({version:J.literal(1),scope:J.string(),hostname:J.string(),pid:J.number(),token:J.string(),createdAt:J.string()});function wF(e,t,n,r){let i=e.safeParse(t);if(!i.success)throw Z(n,r,i.error);return i.data}function TF(e){let t=FF(e);return[t.payer,t.payee,t.token,t.escrow,t.chainId].join(`:`)}function EF(e){return{payer:e.descriptor.payer,payee:e.descriptor.payee,token:e.descriptor.token,escrow:e.escrow,chainId:e.chainId}}function DF(e={}){let t=e.stateRoot??kF(),n={root:t,channels:c.join(t,`channels`),locks:c.join(t,`locks`),preferred:c.join(t,`preferred`)},r=e.hostname??b.hostname(),i=e.pid??process.pid,a=e.now??(()=>new Date),o=e.isProcessAlive??sI;async function s(){for(let e of[n.root,n.channels,n.locks,n.preferred])await C.mkdir(e,{recursive:!0,mode:448}),await C.chmod(e,448)}async function l(e){let t=NF(e),r=AF(n,t),i=await QF(r);if(i===void 0)return;let a=UF(i,r);if(a.channel.channelId.toLowerCase()!==t)throw Z(r,`Session filename does not match its channel ID.`);return WF(a)}async function u(){let e;try{e=await C.readdir(n.channels,{withFileTypes:!0})}catch(e){if(lI(e,`ENOENT`))return[];throw Z(n.channels,`Unable to list managed sessions.`,e)}let t=[];for(let n of e){if(!n.isFile()||n.name.includes(`.tmp-`)||!n.name.endsWith(`.json`))continue;let e=n.name.slice(0,-5);NF(e);let r=await l(e);r&&t.push(r)}return t.sort((e,t)=>e.createdAt.localeCompare(t.createdAt))}async function d(e){await s();let t=zF(e.channel),r=NF(t.channelId),i=AF(n,r),o=await QF(i),c=o===void 0?void 0:UF(o,i);c&&GF(c,e,i);let l=VF(e.challenge,i);qF(l,t,i);let u=e.receipt?HF(e.receipt,t.channelId,i):void 0,d=c?wM(c.channel):void 0,f=ZF(t.cumulativeAmount,d?.cumulativeAmount??0n),p=ZF(e.spent??0n,u?BigInt(u.spent):0n,c?BigInt(c.spent):0n);if(p>f)throw Z(i,`Session spend exceeds the locally authorized cumulative amount.`);let m=BF(CM({...t,cumulativeAmount:f}),i),h=XF(c?.updatedAt,a(),i),g=YF(c?.receipt,u),_=RF(e.account,i),v=UF({version:1,method:`tempo`,intent:`session`,status:e.status,channel:m,account:{..._.name===void 0?c?.account.name===void 0?{}:{name:c.account.name}:{name:_.name},address:_.address},endpoint:LF(e.endpoint,i),challenge:l,...g!==void 0&&{receipt:g},spent:p.toString(),units:Math.max(c?.units??0,e.units??0,u?.units??0),createdAt:c?.createdAt??h,updatedAt:h},i);return await $F(i,v),WF(v)}async function f(e){let t=MF(n,e),r=await QF(t);if(r===void 0)return;let{channelId:i}=wF(SF,r,t,`Preferred session is invalid.`),a=await l(i);if(!a)throw Z(t,`Preferred session ${i} does not exist.`);return JF(a.channel,e,t),i}async function p(e,t){let r=NF(t),i=await l(r),a=MF(n,e);if(!i)throw Z(a,`Session ${r} does not exist.`);JF(i.channel,e,a),await $F(a,{version:1,channelId:r})}async function m(e,t){let r=MF(n,e),i=t===void 0?void 0:NF(t),a=await QF(r);if(a===void 0)return;let o=wF(SF,a,r,`Preferred session is invalid.`).channelId;i&&o.toLowerCase()!==i||await aI(r,`Unable to clear preferred session.`)}async function h(e){let t=NF(e),r=await l(t);r&&(await m(EF(r.channel),t),await aI(AF(n,t),`Unable to remove session.`))}async function g(e){await s();let t=jF(n,e);for(let n=0;n<3;n++){let n={version:1,scope:e,hostname:r,pid:i,token:_(),createdAt:a().toISOString()};try{if(await eI(t,n),await rI(nI(t))){await iI(t,n);continue}return{async release(){await iI(t,n)}}}catch(e){if(!lI(e,`EEXIST`))throw e}let s=await QF(t);if(s===void 0)continue;let c=wF(CF,s,t,`Session lock is invalid.`);if(c.scope!==e)throw Z(t,`Session lock scope is invalid.`);if(c.hostname!==r||o(c.pid))throw new _F(e,c);await tI(t,c)}let c=await QF(t);throw c===void 0?Z(t,`Unable to acquire session lock.`):new _F(e,wF(CF,c,t,`Session lock is invalid.`))}async function v(e){return g(TF(e))}return{root:t,get:l,list:u,upsert:d,remove:h,getPreferred:f,setPreferred:p,clearPreferred:m,acquire:v}}function OF(e,t){let n=IF(t.scope),r=t.selection===`auto`||t.selection===`new`?void 0:NF(t.selection);function i(e){if(e.toLowerCase()!==n)throw new gF(`Session manager requested an unexpected payment scope.`)}async function a(n=!0){if(t.selection===`new`&&!r)return;let i=r??await e.getPreferred(t.scope);if(!i)return;let a=await e.get(i);if(!a)throw new gF(`Session ${i} does not exist.`);if(JF(a.channel,t.scope),!(n&&(a.status!==`open`||!a.channel.opened)))return r=i,a}return{async get(e){return i(e),(await a())?.channel},async set(n){if(i(xM(n)),JF(n,t.scope),r&&r.toLowerCase()!==n.channelId.toLowerCase())throw new gF(`Session manager selected ${r}, but attempted to store ${n.channelId}.`);r||t.onNewChannel?.(n);let a=await e.upsert({...t.context(),channel:n});r=a.channel.channelId,await e.setPreferred(t.scope,a.channel.channelId)},async delete(n){i(n);let o=await a(!1);if(!o)return;let s=t.context();await e.upsert({...o,...s,status:s.status===`closing`?`closing`:`stale`,channel:o.channel,spent:s.spent??o.spent,units:s.units??o.units}),s.status!==`closing`&&await e.clearPreferred(t.scope,o.channel.channelId),r=void 0}}}function kF(){let e=process.env.XDG_STATE_HOME||c.join(b.homedir(),`.local`,`state`);return c.join(e,`mppx`,`sessions`,`v1`)}function AF(e,t){return c.join(e.channels,`${t}.json`)}function jF(e,t){let n=g(`sha256`).update(t).digest(`hex`);return c.join(e.locks,`${n}.lock`)}function MF(e,t){let n=g(`sha256`).update(TF(t)).digest(`hex`);return c.join(e.preferred,`${n}.json`)}function NF(e){return wF(qx(),e,void 0,`Invalid session channel ID: ${e}.`).toLowerCase()}function PF(e,t,n){return wF(Kx(),e,n,`Invalid ${t}.`).toLowerCase()}function FF(e){if(!Number.isSafeInteger(e.chainId)||e.chainId<0)throw new gF(`Invalid session chain ID.`);return{payer:PF(e.payer,`session payer`),payee:PF(e.payee,`session payee`),token:PF(e.token,`session token`),escrow:PF(e.escrow,`session escrow`),chainId:e.chainId}}function IF(e){let t=FF(e);return[t.payee,t.token,t.escrow,t.chainId].join(`:`)}function LF(e,t){if(typeof e!=`string`)throw Z(t,`Session endpoint is invalid.`);let n;try{n=new URL(e)}catch(e){throw Z(t,`Session endpoint is invalid.`,e)}if(n.protocol!==`http:`&&n.protocol!==`https:`)throw Z(t,`Session endpoint must use HTTP or HTTPS.`);if(n.username||n.password)throw Z(t,`Session endpoint must not contain credentials.`);let r=e.indexOf(`#`);return r===-1?e:e.slice(0,r)}function RF(e,t){return wF(yF,e,t,`Session account is invalid.`)}function zF(e){return wM(BF(CM(e)))}function BF(e,t){return wF(vF,e,t,`Stored session channel is invalid.`)}function VF(e,t){let n=gS.safeParse(e);if(!n.success||!YD(n.data))throw Z(t,`Stored session challenge is invalid.`);return n.data}function HF(e,t,n){let r=wF(bF,e,n,`Stored session receipt is invalid.`);if(r.channelId!==t.toLowerCase())throw Z(n,`Stored session receipt has a different channel ID.`);if(r.reference.toLowerCase()!==t.toLowerCase())throw Z(n,`Stored session receipt has a different reference.`);if(BigInt(r.spent)>BigInt(r.acceptedCumulative))throw Z(n,`Stored session receipt spend exceeds its accepted amount.`);return r}function UF(e,t){let n=wF(xF,e,t,`Stored session is invalid.`),{receipt:r,...i}=n,a=n.channel,o=n.account;if(o.address.toLowerCase()!==a.descriptor.payer.toLowerCase())throw Z(t,`Stored session account does not match the channel payer.`);let s=r?HF(r,a.channelId,t):void 0,c=n.spent,l=BigInt(a.cumulativeAmount);if(BigInt(c)>l)throw Z(t,`Stored session spend exceeds its cumulative authorization.`);if(s&&BigInt(s.acceptedCumulative)>l)throw Z(t,`Stored receipt exceeds the cumulative authorization.`);if(Date.parse(n.updatedAt)<Date.parse(n.createdAt))throw Z(t,`Stored session timestamps are not monotonic.`);let u=LF(n.endpoint,t);if(u!==n.endpoint)throw Z(t,`Stored session endpoint contains a fragment.`);let d=VF(n.challenge,t);return qF(d,wM(a),t),{...i,account:o,channel:a,endpoint:u,challenge:d,...s&&{receipt:s}}}function WF(e){return{version:1,status:e.status,channel:wM(e.channel),account:e.account,endpoint:e.endpoint,challenge:e.challenge,...e.receipt&&{receipt:e.receipt},spent:BigInt(e.spent),units:e.units,createdAt:e.createdAt,updatedAt:e.updatedAt}}function GF(e,t,n){let r=zF(t.channel),i=RF(t.account,n),a=wM(e.channel);if(JSON.stringify(KF(r))!==JSON.stringify(KF(a)))throw Z(n,`Session update changed immutable channel identity.`);if(i.address.toLowerCase()!==e.account.address.toLowerCase())throw Z(n,`Session update changed the payer account.`)}function KF(e){return{channelId:e.channelId.toLowerCase(),descriptor:Object.fromEntries(Object.entries(e.descriptor).map(([e,t])=>[e,typeof t==`string`?t.toLowerCase():t])),escrow:e.escrow.toLowerCase(),chainId:e.chainId}}function qF(e,t,n){if(Ij({...t.descriptor,chainId:t.chainId,escrow:t.escrow}).toLowerCase()!==t.channelId.toLowerCase())throw Z(n,`Session channel ID does not match its descriptor.`);let r=PF(e.request.recipient,`challenge recipient`,n),i=PF(e.request.currency,`challenge currency`,n);if(r!==t.descriptor.payee.toLowerCase())throw Z(n,`Session challenge payee does not match the channel.`);if(i!==t.descriptor.token.toLowerCase())throw Z(n,`Session challenge token does not match the channel.`);if(fM(e,t.escrow).toLowerCase()!==t.escrow.toLowerCase())throw Z(n,`Session challenge escrow does not match the channel.`);if(cI(e.request.methodDetails)){let r=e.request.methodDetails;if(r.chainId!==void 0&&r.chainId!==t.chainId)throw Z(n,`Session challenge chain does not match the channel.`)}}function JF(e,t,n){let r=FF(t);if(e.descriptor.payer.toLowerCase()!==r.payer||e.descriptor.payee.toLowerCase()!==r.payee||e.descriptor.token.toLowerCase()!==r.token||e.escrow.toLowerCase()!==r.escrow||e.chainId!==r.chainId)throw Z(n,`Session channel does not match the selected payment scope.`)}function YF(e,t){return e?t&&Date.parse(t.timestamp)>=Date.parse(e.timestamp)?t:e:t}function XF(e,t,n){if(!Number.isFinite(t.getTime()))throw Z(n,`Session clock is invalid.`);let r=t.toISOString();return!e||Date.parse(r)>=Date.parse(e)?r:e}function ZF(...e){return e.reduce((e,t)=>t>e?t:e,0n)}async function QF(e){let t;try{t=await C.readFile(e,`utf8`)}catch(t){if(lI(t,`ENOENT`))return;throw Z(e,`Unable to read session state.`,t)}try{return JSON.parse(t)}catch(t){throw Z(e,`Session state contains invalid JSON.`,t)}}async function $F(e,t){await C.mkdir(c.dirname(e),{recursive:!0,mode:448}),await C.chmod(c.dirname(e),448);let n=`${e}.tmp-${process.pid}-${_()}`,r;try{r=await C.open(n,`wx`,384),await r.writeFile(`${JSON.stringify(t,null,2)}\n`,`utf8`),await r.sync(),await r.close(),r=void 0,await C.rename(n,e),await C.chmod(e,384),await oI(c.dirname(e))}catch(t){throw await r?.close().catch(()=>void 0),await C.unlink(n).catch(()=>void 0),t instanceof gF?t:Z(e,`Unable to write session state.`,t)}}async function eI(e,t){let n;try{n=await C.open(e,`wx`,384),await n.writeFile(`${JSON.stringify(t)}\n`,`utf8`),await n.sync(),await n.close(),n=void 0,await oI(c.dirname(e))}catch(t){throw await n?.close().catch(()=>void 0),n&&await C.unlink(e).catch(()=>void 0),t}}async function tI(e,t){let n=nI(e);try{await C.link(e,n)}catch(t){if(lI(t,`EEXIST`)||lI(t,`ENOENT`))return;throw Z(e,`Unable to claim dead lock.`,t)}try{let r=await QF(n);if(r===void 0||wF(CF,r,n,`Session lock is invalid.`).token!==t.token)return;await aI(e,`Unable to reclaim dead lock.`)}finally{await aI(n,`Unable to release dead lock claim.`)}}function nI(e){return`${e}.reclaim`}async function rI(e){try{return await C.access(e),!0}catch(t){if(lI(t,`ENOENT`))return!1;throw Z(e,`Unable to inspect session lock.`,t)}}async function iI(e,t){let n=await QF(e);n!==void 0&&wF(CF,n,e,`Session lock is invalid.`).token===t.token&&await aI(e,`Unable to release session lock.`)}async function aI(e,t){try{await C.unlink(e),await oI(c.dirname(e))}catch(n){if(!lI(n,`ENOENT`))throw Z(e,t,n)}}async function oI(e){let t=await C.open(e,`r`);try{await t.sync()}finally{await t.close()}}function sI(e){try{return process.kill(e,0),!0}catch(e){if(lI(e,`ESRCH`))return!1;if(lI(e,`EPERM`))return!0;throw e}}function cI(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function lI(e,t){return e instanceof Error&&`code`in e&&e.code===t}function Z(e,t,n){return new gF(t,{...n!==void 0&&{cause:n},file:e})}Ox(),IT(),bN(),LM(),Bj(),Ek(),fk();const uI=p.object({status:p.enum([`opening`,`open`,`closing`,`stale`]),channelId:p.string(),account:p.string().optional(),payer:p.string(),payee:p.string(),authorizedSigner:p.string(),token:p.string(),escrow:p.string(),chainId:p.number(),cumulativeAmount:p.string(),confirmedSpend:p.string(),deposit:p.string(),units:p.number(),resourceUrl:p.string(),createdAt:p.string(),updatedAt:p.string()}),dI=p.object({channelId:p.string(),status:p.enum([`closed`,`already-closed`]),spent:p.string(),txHash:p.string().optional()}),fI=p.object({closed:p.array(dI),failed:p.array(p.object({channelId:p.string(),message:p.string()}))});function pI(e){return e===`mainnet`?ye.id:be.id}function mI(e){if(e===ye.id)return`mainnet`;if(e===be.id)return`testnet`}function hI(e){let t={};for(let n of e??[]){let e=n.indexOf(`:`);if(e===-1)throw new I({code:`INVALID_HEADER`,message:`Invalid header format: ${n}`,exitCode:2});t[n.slice(0,e).trim()]=n.slice(e+1).trim()}return t}function gI(e){return{status:e.status,channelId:e.channel.channelId,...e.account.name&&{account:e.account.name},payer:e.channel.descriptor.payer,payee:e.channel.descriptor.payee,authorizedSigner:e.channel.descriptor.authorizedSigner,token:e.channel.descriptor.token,escrow:e.channel.escrow,chainId:e.channel.chainId,cumulativeAmount:e.channel.cumulativeAmount.toString(),confirmedSpend:e.spent.toString(),deposit:e.channel.deposit.toString(),units:e.units,resourceUrl:e.endpoint,createdAt:e.createdAt,updatedAt:e.updatedAt}}function _I(e,t){throw e instanceof I?e:e instanceof _F?new I({code:e.code,message:e.message,exitCode:e.exitCode,cause:e}):e instanceof gF?new I({code:e.code,message:e.message,exitCode:65,cause:e}):new I({code:t,message:e instanceof Error?e.message:String(e),exitCode:75,...e instanceof Error&&{cause:e}})}async function vI(e,t){let n=await Sk(t??e.account.name);if(!iN(n.account,e.channel.descriptor))throw new I({code:`SESSION_ACCOUNT_MISMATCH`,message:`Account ${n.account.address} cannot sign for session ${e.channel.channelId}.`,exitCode:2});return n}async function yI(e,t){if(t.network&&pI(t.network)!==e)throw new I({code:`CHAIN_MISMATCH`,message:`Session uses chainId ${e}, not ${t.network}.`,exitCode:2});let n=t.network??mI(e),r=QO(t.rpcUrl,{network:n}),i=await ek({network:n,rpcUrl:r});if(i.id!==e)throw new I({code:`CHAIN_MISMATCH`,message:`Session uses chainId ${e}, but RPC is chainId ${i.id}.`,exitCode:2});return j({chain:i,transport:ue(r)})}const bI=cb(`sessions`,{description:`Manage persistent payment sessions (list, view, close)`}).command(`list`,{description:`List persistent payment sessions`,options:p.object({account:p.string().optional().describe(`Filter by account name`),network:p.enum([`mainnet`,`testnet`]).optional().describe(`Filter by Tempo network`)}),output:p.object({sessions:p.array(uI)}),alias:{account:`a`},async run(e){try{let t=(await DF().list()).filter(t=>!(e.options.account&&t.account.name!==e.options.account||e.options.network&&t.channel.chainId!==pI(e.options.network))).map(gI),n={sessions:t};if(e.format===`json`&&e.formatExplicit)return e.ok(n);t.length===0&&console.log(`No sessions.`);for(let[e,n]of t.entries())e>0&&console.log(``),xI(n);return}catch(e){return _I(e,`SESSION_LIST_FAILED`)}}}).command(`view`,{description:`View a persistent payment session`,args:p.object({channelId:p.string().describe(`Full session channel ID`)}),output:uI,async run(e){try{let t=await DF().get(e.args.channelId);if(!t)throw new I({code:`SESSION_NOT_FOUND`,message:`Session ${e.args.channelId} was not found.`,exitCode:2});let n=gI(t);if(e.format===`json`&&e.formatExplicit)return e.ok(n);xI(n);return}catch(e){return _I(e,`SESSION_VIEW_FAILED`)}}}).command(`close`,{description:`Cooperatively close persistent payment sessions`,usage:[{suffix:`<channel-id> [options]`},{suffix:`--all --yes [options]`}],args:p.object({channelId:p.string().optional().describe(`Full session channel ID`)}),options:p.object({account:p.string().optional().describe(`Account name`),all:p.boolean().optional().default(!1).describe(`Close every matching session`),header:p.array(p.string()).optional().describe(`Add close request header (repeatable)`),network:p.enum([`mainnet`,`testnet`]).optional().describe(`Tempo network`),rpcUrl:p.string().optional().describe(`RPC endpoint (env: MPPX_RPC_URL)`),url:p.string().optional().describe(`Override the stored resource URL`),yes:p.boolean().optional().default(!1).describe(`Confirm closing every session`)}),output:p.union([dI,fI]),alias:{account:`a`,header:`H`,rpcUrl:`r`},async run(e){if(e.options.all&&e.args.channelId)return e.error({code:`INVALID_SESSION_CLOSE`,message:`Specify a channel ID or --all, not both.`,exitCode:2});if(!e.options.all&&!e.args.channelId)return e.error({code:`INVALID_SESSION_CLOSE`,message:`Specify a channel ID or --all.`,exitCode:2});if(e.options.all&&!e.options.yes)return e.error({code:`CONFIRMATION_REQUIRED`,message:`Closing all sessions requires --yes.`,exitCode:2});if(e.options.all&&(e.options.header||e.options.rpcUrl||e.options.url))return e.error({code:`INVALID_SESSION_CLOSE`,message:`--header, --rpc-url, and --url only apply to a single session.`,exitCode:2});let t=DF();async function n(e,n={}){let r=await t.get(e);if(!r)throw new I({code:`SESSION_NOT_FOUND`,message:`Session ${e} was not found.`,exitCode:2});let i=EF(r.channel),a=await t.acquire(i);try{let r=await t.get(e);if(!r)throw new I({code:`SESSION_NOT_FOUND`,message:`Session ${e} was not found.`,exitCode:2});let a=await vI(r,n.account),o=await yI(r.channel.chainId,n);if(Ij({...r.channel.descriptor,escrow:r.channel.escrow,chainId:r.channel.chainId}).toLowerCase()!==r.channel.channelId.toLowerCase())throw new I({code:`SESSION_STATE_INVALID`,message:`Stored descriptor does not derive the session channel ID.`,exitCode:65});if((await PM(o,r.channel.channelId,r.channel.escrow)).deposit===0n)return await t.remove(r.channel.channelId),{channelId:r.channel.channelId,status:`already-closed`,spent:r.spent.toString()};let s=LF(n.resourceUrl??r.endpoint),c={...a.source===`keychain`&&{name:a.accountName},address:a.account.address},l=(e=r.challenge)=>({status:`closing`,account:c,endpoint:s,challenge:e,...r.receipt&&{receipt:r.receipt},spent:r.spent,units:r.units}),u=await t.upsert({...l(),channel:r.channel}),d=hI(n.headers),f=u.challenge,p=await hF({channel:u.channel,challenge:u.challenge,fetch:async(e,t)=>globalThis.fetch(e,{...t,headers:{...d,...qw(t?.headers)}}),input:s,spent:u.spent,async onChallenge(e){f=e,await t.upsert({...l(e),channel:u.channel})},manager:{account:a.account,client:o,channelStore:OF(t,{scope:i,selection:u.channel.channelId,context:()=>l(f)})}});return await t.remove(u.channel.channelId),{channelId:u.channel.channelId,status:`closed`,spent:p.receipt.spent,txHash:p.receipt.txHash}}finally{await a.release()}}try{if(e.options.all){let r=(await t.list()).filter(t=>(!e.options.account||t.account.name===e.options.account)&&(!e.options.network||t.channel.chainId===pI(e.options.network))),i=[],a=[];for(let t of r)try{i.push(await n(t.channel.channelId,{account:e.options.account,network:e.options.network}))}catch(e){a.push({channelId:t.channel.channelId,message:e instanceof Error?e.message:String(e)})}let o={closed:i,failed:a};if(a.length>0){for(let e of a)process.stderr.write(`${e.channelId}: ${e.message}\n`);process.exitCode=1}if(e.format===`json`&&e.formatExplicit)return e.ok(o);for(let e of i)console.log(`${e.channelId} ${e.status} ${e.spent}`);for(let e of a)console.log(`${e.channelId} failed ${e.message}`);return}let r=await n(e.args.channelId,{account:e.options.account,headers:e.options.header,network:e.options.network,resourceUrl:e.options.url,rpcUrl:e.options.rpcUrl});if(e.format===`json`&&e.formatExplicit)return e.ok(r);console.log(`${r.channelId} ${r.status} ${r.spent}`),r.txHash&&console.log(` transaction ${r.txHash}`);return}catch(e){return _I(e,`SESSION_CLOSE_FAILED`)}}});function xI(e){console.log(e.channelId),console.log(` status ${e.status}`),console.log(` cumulative amount ${e.cumulativeAmount}`),console.log(` confirmed spend ${e.confirmedSpend}`),console.log(` deposit ${e.deposit}`),console.log(` chain ${e.chainId}`),console.log(` payer ${e.payer}`),console.log(` payee ${e.payee}`),console.log(` token ${e.token}`),console.log(` resource ${e.resourceUrl}`)}Ox(),bN(),AN(),BN(),aD(),Ek(),fk();function SI(e,t){if(t&&e!==`auto`&&t.toLowerCase()!==e.toLowerCase())throw new I({code:`SESSION_SELECTION_CONFLICT`,message:`--session and -M channel= select different sessions.`,exitCode:2});let n=t??e;if(n===`auto`||n===`new`)return n;if(/^0x[0-9a-fA-F]{64}$/.test(n))return n.toLowerCase();throw new I({code:`INVALID_SESSION`,message:`Session must be auto, new, or a 32-byte channel ID.`,exitCode:2})}function CI(e){let t=e.allowCustomEscrow;if(t!==void 0){if(t===`true`)return!0;if(t===`false`)return!1;throw new I({code:`INVALID_ALLOW_CUSTOM_ESCROW`,message:`allowCustomEscrow must be true or false.`,exitCode:2})}}function wI(e,t,n,r){if(t.deposit!==void 0)return t.deposit;let i=e.request.suggestedDeposit;return typeof i==`string`?ce(BigInt(i),r):n?`10`:void 0}function TI(e,t){if(!e)return;if(e.challengeId!==t.challenge.id)throw Error(`Session receipt challenge does not match the paid request.`);if(e.channelId.toLowerCase()!==t.channelId.toLowerCase())throw Error(`Session receipt channel does not match the selected channel.`);let n=BigInt(e.acceptedCumulative),r=BigInt(e.spent);if(n>t.cumulative)throw Error(`Session receipt exceeds the local cumulative authorization.`);if(r>n)throw Error(`Session receipt spend exceeds its accepted authorization.`);return e}function EI(e,t){return e.channel.channelId.toLowerCase()===t.toLowerCase()}function DI(e){if(e.trim()!==`[DONE]`){if(e.length===0){process.stdout.write(`
|
|
243
|
-
`);return}try{let t=JSON.parse(e);process.stdout.write(t.token??t.choices?.[0]?.delta?.content??e)}catch{process.stdout.write(e)}}}async function OI(e){let{options:t}=e,n=await Sk(t.account),r=QO(t.rpcUrl,{network:t.network}),i=await ek({network:t.network,rpcUrl:r}),a=j({chain:i,transport:ue(r)}),o=CI(e.methodOptions),s=await QM({allowCustomEscrow:o,challenge:e.challenge,getClient:async()=>a});if(s.chainId!==i.id)throw new I({code:`CHAIN_MISMATCH`,message:`Challenge requires chainId ${s.chainId}, but RPC is chainId ${i.id}.`,exitCode:2});let{decimals:c}=await ik(a,s.token,n.account.address,{requireDecimals:!0}),l={payer:n.account.address,payee:s.payee,token:s.token,escrow:s.escrow,chainId:s.chainId},u=SI(t.session,e.methodOptions.channel),d=e.registry??DF(),f=await d.acquire(l).catch(e=>{throw e instanceof _F?new I({code:e.code,message:e.message,exitCode:e.exitCode,cause:e}):e});try{let r=u===`auto`?await d.getPreferred(l):u===`new`?void 0:u,s=r?await d.get(r):void 0;if(r&&!s)throw new I({code:`SESSION_NOT_FOUND`,message:`Session ${r} was not found.`,exitCode:2});if(s&&u!==`auto`&&(s.status!==`open`||!s.channel.opened||TF(EF(s.channel))!==TF(l)||!iN(n.account,s.channel.descriptor)))throw new I({code:`SESSION_MISMATCH`,message:`Session ${s.channel.channelId} cannot be used for this account and challenge.`,exitCode:2});let f=s?.status===`open`&&s.channel.opened?s:void 0,p=f?`open`:`opening`,m=e.challenge,h=f?.receipt,g=f?.spent??0n,_=f?.units??0,v=LF(e.endpoint),y={...n.source===`keychain`&&{name:n.accountName},address:n.account.address},b=OF(d,{scope:l,selection:u,context:()=>({status:p,account:y,endpoint:v,challenge:m,...h&&{receipt:h},spent:g,units:_}),onNewChannel(){p=`opening`,h=void 0,g=0n,_=0}}),{signal:x,...S}=e.init,C={...S,...x&&{signal:x},onReceipt(e){h=e,g=g>BigInt(e.spent)?g:BigInt(e.spent),_=Math.max(_,e.units??0)}};if(e.challengeResponse.status!==402||e.challengeResponse.bodyUsed)throw Error(`Session manager requires an unconsumed 402 challenge response.`);let w=!0,T=zN({account:n.account,allowCustomEscrow:o,bootstrap:!1,client:a,channelStore:b,credentialContext:e.credentialContext,decimals:c,maxDeposit:wI(e.challenge,e.methodOptions,rk(i),c),fetch:async(t,n)=>w?(w=!1,e.challengeResponse):e.fetch(t,n)});f&&ON(T).rehydrate({channel:f.channel,challenge:e.challenge,input:e.fetchInput,spent:f.spent});let{onReceipt:ee,...te}=C,E=await T.fetch(e.fetchInput,te);if(t.fail&&E.status>=400)throw new I({code:`HTTP_ERROR`,message:`HTTP error ${E.status}`,exitCode:22});if(E.status===402)throw new I({code:`PAYMENT_REJECTED`,message:`Payment rejected.`,exitCode:75});VO(E,{include:!1,verbose:t.include?Math.max(t.verbose,2):t.verbose,silent:t.silent}),m=E.challenge??e.challenge;let ne=T.channelId;if(!ne)throw Error(`Session manager did not select a channel.`);if(h=TI(E.receipt,{challenge:m,channelId:ne,cumulative:T.cumulative})??h,YE(E)){let t=ON(T).consumeSseResponse(e.fetchInput,E,{onReceipt:ee,signal:e.init.signal??void 0});for await(let e of t)DI(e)}else process.stdout.write(Buffer.from(await E.arrayBuffer()));let D=await d.get(ne);if(!D||!EI(D,ne))throw Error(`Session ${ne} was not persisted.`);if(h){let e=TI(h,{challenge:m,channelId:ne,cumulative:T.cumulative});if(!e)throw Error(`Session receipt validation failed.`);h=e,g=g>BigInt(e.spent)?g:BigInt(e.spent),_=Math.max(_,e.units??0),p=`open`}await d.upsert({status:p,channel:D.channel,account:y,endpoint:v,challenge:m,...h&&{receipt:h},spent:g,units:_}),t.silent||(e.info(`Session retained ${ne}\n`),e.info(`Close with: mppx sessions close ${ne}\n`))}finally{await f.release()}}fk();function Q(e,t){return t?{label:e,detail:t,severity:`pass`}:{label:e,severity:`pass`}}function $(e,t,n){let r={label:e,severity:`fail`};return t&&(r.detail=t),n&&(r.hint=n),r}function kI(e,t,n){let r={label:e,severity:`warn`};return t&&(r.detail=t),n&&(r.hint=n),r}function AI(e,t,n){let r=t?{label:e,detail:t,severity:`skip`}:{label:e,severity:`skip`};return n&&(r.hint=n),r}const jI={pass:X.green(`✓`),fail:X.red(`✗`),warn:X.yellow(`⚠`),suggested:X.cyan(`◇`),skip:X.dim(`○`)};function MI(e){let t=jI[e.severity],n=e.detail?`${e.label} (${e.detail})`:e.label;console.log(` ${t} ${n}`),e.hint&&e.severity!==`pass`&&console.log(X.dim(` → ${e.hint}`))}function NI(e){console.log(`\n${X.bold(e)}`)}function PI(e,t){for(let n of e)MI(n),n.severity===`pass`?t.passed++:n.severity===`fail`?t.failed++:n.severity===`warn`?t.warnings++:n.severity===`suggested`?t.suggested++:n.severity===`skip`&&t.skipped++}async function FI(e,t,n=15e3){let r=new AbortController,i=setTimeout(()=>r.abort(),n);try{return await fetch(e,{...t,redirect:`error`,signal:r.signal})}finally{clearTimeout(i)}}function II(e){return e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`}const LI=new Set([`get`,`post`,`put`,`patch`,`delete`,`head`,`options`,`trace`]);function RI(e){return typeof e==`string`&&/^0x[0-9a-fA-F]{40}$/.test(e)}function zI(e){return typeof e==`string`&&/^(0|[1-9][0-9]*)$/.test(e)}function BI(e){let t=e.indexOf(`:`);if(t<1)return null;let n=e.slice(0,t).toLowerCase();if(!LI.has(n))return null;let r=e.slice(t+1);if(!r)return null;let i=r.startsWith(`/`)?r:`/`+r;return{method:n.toUpperCase(),path:i}}function VI(e,t){if(e){try{let n=JSON.parse(e);if(n&&typeof n==`object`&&!Array.isArray(n)){let e=Object.keys(n);if(e.length>0&&e.every(e=>e.startsWith(`/`))){let e=n[t];return e===void 0?void 0:typeof e==`string`?e:JSON.stringify(e)}}}catch{}return e}}function HI(e){if(!e)return{};let t={};for(let n of e){let e=n.indexOf(`:`);e>0&&(t[n.slice(0,e).trim().toLowerCase()]=n.slice(e+1).trim())}return t}async function UI(e){let t=new URL(`openapi.json`,e.replace(/\/?$/,`/`)).href;try{let e=await FI(t,{});if(!e.ok)return{error:`HTTP ${e.status}`};let n=await e.text();return{doc:JSON.parse(n),raw:n}}catch(e){return e instanceof DOMException&&e.name===`AbortError`?{error:`Request timed out after 15s`}:e instanceof SyntaxError?{error:`Invalid JSON`}:{error:e.message}}}async function WI(e){let t=new URL(`/llms.txt`,e).href,n=`llms.txt found and nonempty`;try{let e=await FI(t,{});if(!e.ok)throw Error(`HTTP ${e.status}`);let r=(await e.text()).trim();if(!r)throw Error(`Empty document`);let i=e.headers.get(`content-type`)?.split(`;`)[0]?.trim().toLowerCase();if(i&&!i.startsWith(`text/`)||i===`text/html`||/^<(?:!doctype html|html|head|body)\b/i.test(r))throw Error(`Expected text documentation, received non-text or HTML content`);return Q(n,t)}catch(e){return{label:n,detail:`${t}: ${e.message}`,severity:`suggested`,hint:`Serve nonempty text documentation at /llms.txt.`}}}function GI(e){let t=[],n=[],r=e.paths;if(!r)return[];for(let[e,i]of Object.entries(r)){let r=JI(i.parameters);for(let[a,o]of Object.entries(i)){if(!LI.has(a)||!o||typeof o!=`object`||Array.isArray(o))continue;let i=o,s=YI(r,JI(i.parameters)),c=s.length>0?s:void 0;if(i[`x-payment-info`]){let n=i[`x-payment-info`];t.push({method:a.toUpperCase(),path:e,amount:n.amount,parameters:c})}else{let t=i.responses;t&&`402`in t&&n.push({method:a.toUpperCase(),path:e,parameters:c})}}}return t.length>0?t:n}function KI(e,t){let n=e.paths;if(!n)return;let r=n[t.path];if(!r)return;let i=r[t.method.toLowerCase()];if(!i?.requestBody)return;let a=i.requestBody.content?.[`application/json`];if(!a)return;if(a.example)return JSON.stringify(a.example);if(a.examples&&typeof a.examples==`object`){let e=Object.values(a.examples)[0];if(e?.value)return JSON.stringify(e.value)}let o=a.schema,s=new Set;if(o=ZI(o,e,s),!o||o.type!==`object`)return;let c=QI(o,e,s);if(c&&typeof c==`object`&&Object.keys(c).length>0)return JSON.stringify(c)}function qI(e,t,n){if(!t.path.startsWith(`/`)||t.path.startsWith(`//`)||t.path.includes(`\\`))throw Error(`OpenAPI path must be an origin-relative path: ${t.path}`);let r=t.path;t.parameters&&(r=XI(r,t.parameters));let i=r.startsWith(`/`)?r.slice(1):r,a=new URL(e.replace(/\/?$/,`/`)),o=new URL(i,a);if(o.origin!==a.origin)throw Error(`OpenAPI path must be an origin-relative path: ${t.path}`);let s=o.href;if(n){let e=new URL(s);for(let t of n){let[n,...r]=t.split(`=`);n&&e.searchParams.set(n,r.join(`=`))}s=e.href}return s}function JI(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(!n||typeof n!=`object`)continue;let e=n;e.in===`path`&&typeof e.name==`string`&&t.push(e.schema&&typeof e.schema==`object`?{name:e.name,in:`path`,schema:e.schema,example:e.example}:{name:e.name,in:`path`,example:e.example})}return t}function YI(e,t){let n=[...e];for(let e of t){let t=n.findIndex(t=>t.name===e.name);t>=0?n[t]=e:n.push(e)}return n}function XI(e,t){return e.replace(/\{([^}]+)\}/g,(e,n)=>{let r=t.find(e=>e.name===n&&e.in===`path`);if(!r)return e;let i=r.example??r.schema?.example??r.schema?.default;return i===void 0?e:encodeURIComponent(String(i))})}function ZI(e,t,n){if(!e||typeof e.$ref!=`string`)return e;if(n?.has(e.$ref))return;let r=e.$ref.replace(/^#\//,``).split(`/`),i=t;for(let e of r)if(i&&typeof i==`object`)i=i[e];else return;return i}function QI(e,t,n){let r=ZI(e,t,n)??e;if(r.const!==void 0)return r.const;if(r.example!==void 0)return r.example;if(r.default!==void 0)return r.default;switch(r.type){case`string`:return r.enum&&Array.isArray(r.enum)?r.enum[0]:r.format===`email`?`test@example.com`:r.format===`uuid`?`00000000-0000-0000-0000-000000000000`:r.format===`uri`||r.format===`url`?`https://example.com`:r.format===`date`?`2026-01-01`:r.pattern===`^\\d{5}(?:-\\d{4})?$`?`10001`:r.pattern===`^[A-Z]{2}$`?`US`:`test`;case`number`:case`integer`:return r.minimum??1;case`boolean`:return!0;case`array`:return[];case`object`:{let e=r.properties;if(!e)return{};let i=r.required||[],a={};for(let r of i){let i=e[r];i&&(a[r]=QI(i,t,n))}return a}default:return null}}_S(),Fx(),hw(),fk();const $I=Object.values(Ve);function eL(e){let t=e.request.methodDetails;return typeof t?.chainId==`number`&&$I.find(e=>e.id===t.chainId)?.testnet===!0}async function tL(e,t,n,r){let i=[],a;try{a=qI(e,t,r?.query)}catch(e){return i.push($(`Request URL valid`,e.message)),{results:i}}let o=HI(r?.extraHeaders),s;r?.body&&!r.bodyIsAutogenerated&&(s=r.body,o[`content-type`]||=`application/json`);let c;try{let e={method:t.method};Object.keys(o).length>0&&(e.headers=o),s&&(e.body=s),c=await FI(a,e)}catch(e){return i.push($(`Request failed`,e.message)),{results:i}}if(!s&&(c.status===400||c.status===422)){let e=r?.body??(r?.discoveryDoc?KI(r.discoveryDoc,t):void 0);if(e){n&&console.log(X.dim(` Retrying with body: ${e}`)),s=e,o[`content-type`]=`application/json`;try{c=await FI(a,{method:t.method,headers:o,body:s})}catch(e){return i.push($(`Request failed`,e.message)),{results:i}}}}if(c.status!==402)return c.status===200?i.push(AI(`Returns 402 without credentials`,`Got 200 (endpoint may not require payment in all cases)`)):c.status===401||c.status===403?i.push(AI(`Returns 402 without credentials`,`Got ${c.status} (endpoint requires auth before payment gate)`)):i.push($(`Returns 402 without credentials`,`Got ${c.status} instead`,c.status===400||c.status===422?`Server requires a valid request body before returning 402. Add a requestBody schema with examples to your OpenAPI doc, or use --body.`:`Endpoints that require payment must return HTTP 402 with a WWW-Authenticate: Payment header when no valid credential is provided.`)),{results:i};i.push(Q(`Returns 402 without credentials`));let l=c.headers.get(q.wwwAuthenticate),u=fL(c);if(!l)return u.length>0?(i.push(AI(`Not an MPP endpoint`,`No WWW-Authenticate header — x402 protocol detected`)),i.push(...u)):i.push(AI(`Not an MPP endpoint`,`No WWW-Authenticate header (may be x402 or other protocol)`)),{results:i};if(u.length>0&&i.push(...u),!l.startsWith(`${Ax.payment} `))return i.push(AI(`Not an MPP endpoint`,`WWW-Authenticate scheme is not Payment`)),{results:i};i.push(Q(`WWW-Authenticate header present`,`Payment scheme`));let d;try{d=cS(c)}catch(e){let t=e.message;i.push($(`Challenge parseable`,t,`The Payment challenge must include a request="<base64url>" parameter containing JSON-encoded payment details.`));let n=l.slice(l.indexOf(` `)+1);return i.push(kI(`Received`,n.length>200?n.slice(0,200)+`...`:n)),{results:i}}if(d.length===0)return i.push($(`Challenge parseable`,`No Payment challenges found in header`)),{results:i};let f=d.map(e=>`${e.method}/${e.intent}`).join(`, `);i.push(Q(`Challenge parseable`,d.length===1?f:`${d.length} methods: ${f}`));let p=new URL(e).hostname;nL(d,i),rL(d,i),iL(d,i),aL(d,p,i);let m=d.length>1;for(let e of d){let t=e.request;oL(e,t,i,m)}if(n)for(let e of d)console.log(X.dim(` Challenge (${e.method}/${e.intent}): ${JSON.stringify(e,null,2)}`));return{results:i,resolvedBody:s,challenges:d}}function nL(e,t){let n=e.filter(e=>!e.id);n.length===0?t.push(Q(`Challenge has id`)):t.push($(`Challenge has id`,`${n.length} missing`,`Every challenge must include a unique id field.`))}function rL(e,t){let n=e.filter(e=>!e.realm);n.length===0?t.push(Q(`Challenge has realm`)):t.push($(`Challenge has realm`,`${n.length} missing`,`Set realm to your server's hostname.`))}function iL(e,t){let n=new Date;for(let r of e){if(!r.expires){t.push(kI(`Challenge has expiration`,`missing expires field`,`Add an expires field (ISO 8601) to prevent replay attacks.`));return}if(new Date(r.expires)<=n){t.push($(`Challenge expires in the future`,`Expired at ${r.expires}`,`The expires timestamp must be in the future.`));return}}let r=Math.min(...e.map(e=>new Date(e.expires).getTime()-n.getTime()));t.push(Q(`Challenge expires in the future`,`${Math.round(r/6e4)}m from now`))}function aL(e,t,n){let r=e=>e.toLowerCase().replace(/\.$/,``),i=r(t),a=[...new Set(e.map(e=>e.realm??``))].filter(e=>{let t=r(e);return!t||t!==i&&!i.endsWith(`.${t}`)});a.length>0?n.push($(`Realm matches server hostname`,`realm="${a[0]}" vs host="${t}"`,`Set the realm to your production hostname (or base domain) in the challenge.`)):n.push(Q(`Realm matches server hostname`))}function oL(e,t,n,r){let i=r?`[${e.method}] `:``;e.method===jx.tempo?sL(t,i,n,e):e.method===jx.stripe?cL(t,i,n):e.method===jx.evm&&lL(e,t,i,n)}function sL(e,t,n,r){let i=e.methodDetails,a=Array.isArray(i?.splits)&&i.splits.length>0;if(RI(e.recipient)?n.push(Q(`${t}Valid recipient address`)):e.recipient===void 0&&a?n.push(Q(`${t}Uses splits (no single recipient)`)):e.recipient===void 0?n.push($(`${t}Valid recipient address`,`Missing recipient (and no splits defined)`,`Set request.recipient to a valid 0x address, or use methodDetails.splits for multiple recipients.`)):n.push($(`${t}Valid recipient address`,`Got: ${String(e.recipient)}`,`Set request.recipient to a valid 0x-prefixed 40-hex-char address.`)),RI(e.currency)){let e=eL(r)?`testnet`:`mainnet`;n.push(Q(`${t}Valid currency address`,e))}else n.push($(`${t}Valid currency address`,`Got: ${String(e.currency)}`,`Set request.currency to a valid token address.`));uL(e,t,n,`token's smallest unit (e.g. "10000" = $0.01 for 6-decimal tokens)`)}function cL(e,t,n){uL(e,t,n,`currency's smallest unit (e.g. "100" = $1.00 for USD)`);let r=e.currency;typeof r==`string`&&/^[a-z]{3}$/i.test(r)?n.push(Q(`${t}Valid currency code`,r.toUpperCase())):n.push($(`${t}Valid currency code`,r?`Got: ${r}`:`missing`,`Must be a three-letter ISO currency code (e.g. "usd").`));let i=e.methodDetails,a=i?.networkId;a?n.push(Q(`${t}Has networkId`,a.slice(0,20))):n.push($(`${t}Has networkId`,`Missing methodDetails.networkId`,`Set methodDetails.networkId to your Stripe Business Network profile ID.`));let o=i?.paymentMethodTypes;Array.isArray(o)&&o.length>0?n.push(Q(`${t}Has paymentMethodTypes`,o.join(`, `))):n.push($(`${t}Has paymentMethodTypes`,`Missing or empty`,`Set methodDetails.paymentMethodTypes to an array (e.g. ["card"]).`))}function lL(e,t,n,r){if(RI(t.recipient)?r.push(Q(`${n}Valid recipient address`)):r.push($(`${n}Valid recipient address`,`Got: ${String(t.recipient)}`,`Set request.recipient to a valid 0x-prefixed Ethereum address.`)),RI(t.currency)){let t=eL(e)?`testnet`:`mainnet`;r.push(Q(`${n}Valid currency address`,t))}else r.push($(`${n}Valid currency address`,`Got: ${String(t.currency)}`,`Set request.currency to a valid ERC-20 token contract address.`));uL(t,n,r,`token's smallest unit`);let i=t.methodDetails?.chainId;typeof i==`number`&&i>0?r.push(Q(`${n}Has chainId`,String(i))):r.push($(`${n}Has chainId`,`Missing methodDetails.chainId`,`Set methodDetails.chainId to the EVM chain ID.`))}function uL(e,t,n,r){zI(e.amount)?n.push(Q(`${t}Amount is valid integer string`)):e.amount===void 0||e.amount===null?n.push($(`${t}Amount is valid integer string`,`Missing amount`,`Set request.amount to a string of digits in the ${r}.`)):n.push($(`${t}Amount is valid integer string`,`Got: ${String(e.amount)}`,`request.amount must be a string of digits (no decimals, no prefix).`))}async function dL(e,t,n){let r=[],i=qI(e,t,n?.query),a={[q.authorization]:`${Ax.payment} dGhpcyBpcyBnYXJiYWdl`},o;n?.body&&(o=n.body,a[`content-type`]=`application/json`);try{let e=await FI(i,{method:t.method,headers:a,body:o??null});e.status===402?(r.push(Q(`Malformed credential returns 402`,`not 500`)),e.headers.get(q.wwwAuthenticate)?.startsWith(`${Ax.payment} `)?r.push(Q(`Error response includes fresh challenge`)):r.push(kI(`Error response includes fresh challenge`,`No WWW-Authenticate header`,`When rejecting an invalid credential, respond with 402 and include a fresh WWW-Authenticate: Payment challenge so the client can retry.`))):e.status>=500?r.push($(`Malformed credential returns 402`,`Got ${e.status} (server error)`,`When the Authorization header contains an invalid credential, respond with 402 (not 500). Catch credential validation errors and return a fresh challenge.`)):r.push(kI(`Malformed credential returns 402`,`Got ${e.status}`,`When the Authorization header contains an invalid Payment credential, respond with 402 and a fresh WWW-Authenticate challenge. Returning ${e.status} prevents the client from retrying with a valid payment.`))}catch(e){r.push($(`Error handling test`,e.message))}return r}function fL(e){let t=[],n=e.headers.get(`payment-required`)??e.headers.get(`x-payment-required`);if(!n)return t;let r=e.headers.get(`payment-required`)?`PAYMENT-REQUIRED`:`X-Payment-Required`;try{let e=cw(n);t.push(Q(`x402 payment challenge`,`${r} with valid x402 v${e.x402Version} payload`))}catch{t.push(kI(`x402 payment challenge`,`${r} header present but failed schema validation`,`Ensure the PAYMENT-REQUIRED header contains a valid base64-encoded JSON payload matching the x402 schema.`))}return t}const pL=[`No discovery document found, endpoints could not be automatically found.`,`MPP servers must serve an OpenAPI document at /openapi.json with x-payment-info extensions.`,`The MPP SDKs can automatically expose this endpoint. See https://mpp.dev/sdk.`,``,`To test a specific endpoint: mppx validate <url> --endpoint POST:/your/path`].join(`
|
|
244
|
-
`);Zx();const mL={fundingCurrency:J.optional(J.string()),method:J.string(),reference:J.string(),externalId:J.optional(J.string()),subscriptionId:J.optional(J.string()),status:J.literal(`success`),timestamp:Hx()};J.object(mL);const hL=J.looseObject(mL);function gL(e){let t=D.toString(e);return _L(JSON.parse(t))}function _L(e){return hL.parse(e)}_S(),Hw(),Fx(),vP(),RO(),MO(),aD(),Ek(),fk();async function vL(e,t,n){try{n||console.log(X.dim(` Provisioning testnet wallet and funding via faucet...`));let t=ge(),r=ve(t),i=j({chain:be,transport:ue()});if(YD(e)){let{chainId:t,operator:n}=e.request.methodDetails??{};if(t===be.id&&typeof n==`string`&&de(n)&&n!==he){let e=await Ie.faucet.fund(i,{account:n});await Promise.all(e.map(e=>Ne(i,{hash:e})))}}let a=await Ie.faucet.fund(i,{account:r});await Promise.all(a.map(e=>Ne(i,{hash:e}))),n||console.log(X.dim(` Using wallet: ${r.address}`));let o=e.request.currency;if(typeof o==`string`)for(let e=0;e<10;e++){let e=await Ie.token.getBalance(i,{account:r.address,token:o}).catch(()=>void 0);if(e&&e.amount>0n)break;await new Promise(e=>setTimeout(e,500))}return{methods:[...hP({account:r})]}}catch(e){t&&console.log(X.dim(` Provisioning failed: ${e.message}`));return}}async function yL(){let e=yk(),{isTempoAccount:t}=await Promise.resolve().then(()=>(fk(),zO)),{resolveTempoAccount:n}=await Promise.resolve().then(()=>(QP(),yP));if(t(e)){let t=n(e);if(t)return t.wallet_address}try{return(await Ck()).address}catch{return}}function bL(e){try{let{execSync:t}=m,n=t(`stripe config --list`,{encoding:`utf8`,timeout:5e3}).match(/test_mode_api_key\s*=\s*'([^']+)'/);if(n?.[1])return e&&console.log(X.dim(` Using Stripe test key from stripe CLI`)),n[1]}catch{}}async function xL(e,t,n){let r=j({chain:e,transport:ue()}),[i,a,o]=await Promise.all([n?Oe(r,{address:t,abi:se,functionName:`balanceOf`,args:[n]}):0n,Oe(r,{address:t,abi:se,functionName:`decimals`}),Oe(r,{address:t,abi:se,functionName:`symbol`}).catch(()=>void 0)]);return{balance:i,decimals:a,symbol:o??void 0}}function SL(e){return Object.values(Ve).find(t=>t.id===e)}function CL(e,t){return`$${(Number(e)/10**t).toFixed(2)}`}function wL(e){switch(e.method){case jx.evm:return`no EVM payment plugin yet`;case`solana`:return`no Solana payment plugin yet`;default:return`no plugin for ${e.method}/${e.intent}`}}async function TL(e,t,n,r){let i=[],a=qI(e,t,r.query),o=HI(r.extraHeaders),s;r.body&&(s=r.body,o[`content-type`]=`application/json`);let c;try{c=await FI(a,{method:t.method,headers:o,body:s??null})}catch(e){return i.push($(`Payment: fetch challenge`,e.message)),i}if(c.status!==402)return i.push(AI(`Payment: skipped`,`Endpoint returned ${c.status}`)),i;let l;try{l=cS(c)}catch(e){return i.push($(`Payment: parse challenge`,e.message)),i}if(l.length===0)return i.push($(`Payment: parse challenge`,`No Payment challenges in response`)),i;let u=[];aL(l,new URL(a).hostname,u);let d=u.filter(e=>e.severity===`fail`);if(d.length>0)return i.push(...d),r.onResults?.(d),i;let f=await uF().catch(()=>void 0),p=l.find(e=>{if(e.method!==jx.tempo||cF(f?.config)?.some(t=>t.name===e.method&&t.intent===e.intent))return!1;let t=e.request.methodDetails;return typeof t?.chainId==`number`&&t.chainId!==NO.mainnet});if(p){let e=await vL(p,n,r.silent);if(e)try{let r=ML((e,t)=>FI(e,t??{},3e4));await AL(i,await RT({methods:e.methods,polyfill:!1,async onChallenge(e,{createCredential:t}){fF(p,e);let n=await t(await iF(e,f?.config.extensions));return i.push(Q(`Payment: submitted`,`ephemeral testnet wallet`)),n},fetch:r.fetch}).fetch(a,{method:t.method,headers:o,body:s??null}),n,be,YD(p),r.receipt)}catch(e){i.push($(`Payment: create credential`,e.message))}else i.push($(`Payment: auto-provision wallet`,`Failed to create and fund testnet wallet`));r.onResults?.(i)}let m=r.interactive,h=process.env.MPPX_STRIPE_SECRET_KEY??bL(n),g=h?.startsWith(`sk_test_`)||h?.startsWith(`rk_test_`),_=new Set([jx.tempo,jx.evm,jx.stripe]);for(let e of l){if(e===p||!_.has(e.method))continue;r.silent||console.log(``);let c=i.length,l=()=>{r.onResults&&i.length>c&&r.onResults(i.slice(c))},u=`Payment [${e.method}]`;try{switch(e.method){case jx.tempo:case jx.evm:await EL(e,u,{results:i,url:a,endpoint:t,fetchHeaders:o,fetchBody:s,verbose:n,loaded:f,isInteractive:m,options:r});break;case jx.stripe:await DL(e,u,{results:i,url:a,endpoint:t,fetchHeaders:o,fetchBody:s,verbose:n,loaded:f,isInteractive:m,isStripeTestKey:g??!1,stripeKey:h,options:r})}}finally{l()}}return i}async function EL(e,t,n){let{results:r,url:i,endpoint:a,fetchHeaders:o,fetchBody:s,verbose:c,loaded:l,options:u}=n,d=e.request,f=d.methodDetails,p=zI(d.amount)?BigInt(d.amount):void 0,m=f?.decimals??d.decimals??6,h=d.currency,{plugin:g,method:_}=aF(e,l?.config);if(!g&&!_){r.push(AI(t,wL(e)));return}let v;if(!_){try{v=await yL()}catch{}if(!v){r.push(AI(t,`no wallet configured. Run "mppx account create" to create one.`));return}}let y;if(e.method===jx.tempo){let e=f?.chainId??(_?void 0:ye.id);e!==void 0&&(y=e===be.id?be:SL(e))}else if(e.method===jx.evm){let e=f?.chainId;e&&(y=SL(e))}if(p&&h&&!y){r.push(AI(t,`unable to resolve payment chain and verify token decimals`));return}let b;if(p&&h&&y)try{let n;if(e.method===jx.tempo){let e=await ik(j({chain:y,transport:ue()}),h,v??he,{requireDecimals:!0});n=e.balance,m=e.decimals,b=e.symbol}else{let e=await xL(y,h,v);n=e.balance,m=e.decimals,b=e.symbol}if(v&&n<p){let e=CL(p,m),i=CL(n,m),a=b??`tokens`;r.push(AI(t,`insufficient balance (have ${i}, need ${e} ${a} on ${y.name})`,`Fund wallet ${v} with at least ${e} ${a} on ${y.name}.`));return}}catch(e){c&&console.log(X.dim(` Balance check skipped: ${e.message}`)),r.push(AI(t,`unable to verify token balance and decimals from the payment chain`));return}let x=p?CL(p,m):`unknown amount`,S=b??(h?.length===3?h.toUpperCase():``),C=y?.name,w=`${x}${S?` ${S}`:``}${C?` on ${C}`:``}`;if(u.silent||console.log(X.dim(v?` Attempting payment with wallet ${v}`:` Attempting payment with configured method`)),!_&&y?.testnet)u.silent||console.log(X.dim(` Auto-approved: ${w} (testnet)`));else if(!u.yes&&!n.isInteractive){r.push(AI(t,`non-interactive mode, use --yes to approve`));return}else if(u.yes)u.silent||console.log(X.dim(` Auto-approved: ${w}`));else if(!await XO(` ${X.yellow(`Pay`)} ${w}. Continue?`,!1)){r.push(AI(t,`declined`));return}let T,ee,te;if(g)try{let t=await g.setup({challenge:e,options:{network:`mainnet`},methodOpts:{}});T=t.methods,ee=t.createCredential,te=t.credentialContext}catch(e){r.push(AI(t,e.message));return}else T=[_];if(_&&YD(e)){let n=!0,u=ML((e,t)=>FI(e,t??{},3e4)),d=RT({methods:[_],polyfill:!1,async onChallenge(n,{createCredential:i}){let a=await iF(n,l?.config.extensions);fF(e,n);let o=await i(a);return r.push(Q(`${t}: submitted`)),o},fetch:async(t,r)=>n?(n=!1,new Response(null,{status:402,headers:{[q.wwwAuthenticate]:$x(e)}})):u.fetch(t,r)});try{await AL(r,await d.fetch(i,{method:a.method,headers:o,body:s??null}),c,y,!0,u.receipt)}catch(e){r.push($(t,e.message))}return}let E=await OL(e,T,ee,t,r,l?.config.extensions,te,i);E&&(g?.prepareCredentialRequest?.({challenge:e,credential:E,headers:o}),await kL(r,i,a,E,o,s,c,y,fS(e),YD(e)))}async function DL(e,t,n){let{results:r,url:i,endpoint:a,fetchHeaders:o,fetchBody:s,verbose:c,loaded:l,options:u,stripeKey:d}=n,{plugin:f,method:p}=aF(e,l?.config);if(!f&&!p){r.push(AI(t,`no Stripe payment method available`));return}let m=!!(f&&!l?.config.plugins?.includes(f)&&n.isStripeTestKey),h=e.request,g=zI(h.amount)?BigInt(h.amount):void 0,_=h.decimals??2,v=h.currency,y=g?CL(g,_):`unknown amount`,b=v?.length===3?v.toUpperCase():``,x=`${y}${b?` ${b}`:``} via Stripe${m?` (testmode)`:``}`;if(m)u.silent||console.log(X.dim(` Attempting: ${x}`));else if(!u.yes&&!n.isInteractive){r.push(AI(t,`non-interactive mode, use --yes to approve`));return}else if(u.yes)u.silent||console.log(X.dim(` Auto-approved: ${x}`));else if(!await XO(` ${X.yellow(`Pay`)} ${x}. Continue?`,!1)){r.push(AI(t,`declined`));return}let S,C,w;if(f)try{let t={paymentMethod:`pm_card_visa`};d&&(t.secretKey=d);let n=await f.setup({challenge:e,options:{},methodOpts:t});S=n.methods,C=n.createCredential,w=n.credentialContext}catch(e){r.push(AI(t,e.message));return}else S=[p];let T=await OL(e,S,C,t,r,l?.config.extensions,w,i);if(T){if(f?.prepareCredentialRequest?.({challenge:e,credential:T,headers:o}),m){let n=await FI(i,{method:a.method,headers:{...o,[fS(e)]:T},body:s??null},3e4);n.status>=200&&n.status<300?r.push(Q(`${t}: successful`,`HTTP ${n.status}`)):r.push(AI(`${t}: server is in livemode`,void 0,`Run your server with a Stripe test key to automatically validate Stripe payments in testmode.`));return}await kL(r,i,a,T,o,s,c,void 0,fS(e))}}async function OL(e,t,n,r,i,a,o,s){let c=new Response(null,{status:402,headers:{[q.wwwAuthenticate]:$x(e)}});try{Rw(e,new URL(s),void 0);let l=await iF(e,a,o),u;return u=n?await n(c,l):await RT({methods:t,polyfill:!1}).createCredential(c,l),i.push(Q(`${r}: submitted`)),u}catch(e){let t=e.message;t.toLowerCase().includes(`insufficient`)?i.push(AI(r,`insufficient balance: ${t}`)):i.push($(r,t));return}}async function kL(e,t,n,r,i,a,o,s,c=q.authorization,l=!1){let u;try{u=await FI(t,{method:n.method,headers:{...i,[c]:r},body:a??null},3e4)}catch(t){return e.push($(`Payment: send credential`,t.message)),e}return AL(e,u,o,s,l)}async function AL(e,t,n,r,i=!1,a){if(t.status===402){let n=await t.text().catch(()=>``),r=`Payment rejected`;try{let e=JSON.parse(n);r=e.detail??e.title??r}catch{}return e.push($(`Payment: accepted`,r,`The server rejected a valid credential. Check that your payment verification logic accepts the credential format and that the payment was processed on-chain.`)),e}if(t.status>=400&&t.status<500)e.push(kI(`Payment: post-payment response`,`Got ${t.status}`,`Payment succeeded but the endpoint returned a client error. The endpoint likely requires request body parameters. Use --body to provide them.`));else if(t.status>=500)return e.push($(`Payment: server response`,`Got ${t.status}`,`Payment was accepted but the server errored while generating the response. Check server logs for the underlying error.`)),e;else e.push(Q(`Payment: successful`,`HTTP ${t.status}`));let o=t.headers.get(`content-type`)??``,s=t.headers.get(q.paymentReceipt),c=!s&&i&&YE(t),l=await t.text().catch(()=>``);if(c){let t=a?.(),n=t===void 0?jL(l):t??void 0;n?e.push(Q(`Payment receipt in event stream`,n.reference)):e.push($(`Payment receipt in event stream`,void 0,`SSE session responses without a Payment-Receipt header must end with an "event: payment-receipt" carrying the session receipt.`))}else if(!s)e.push($(`Payment-Receipt header present`,void 0,`After accepting payment, include a Payment-Receipt header with a base64url-encoded JSON object containing: method, reference, status ("success"), and timestamp (ISO 8601).`));else{e.push(Q(`Payment-Receipt header present`));try{let t=gL(s);if(e.push(Q(`Receipt parseable`)),t.status===`success`?e.push(Q(`Receipt status is "success"`)):e.push($(`Receipt status is "success"`,`Got: ${t.status}`)),t.reference){let n=/^0x[0-9a-fA-F]{64}$/.test(t.reference),r=t.reference.startsWith(`pi_`);n||r?e.push(Q(`Receipt reference valid`,t.reference.slice(0,20)+`...`)):e.push(kI(`Receipt reference format`,t.reference.slice(0,40)))}else e.push(kI(`Receipt has reference`,`No reference field`));if(t.timestamp){let n=new Date(t.timestamp),r=Date.now()-n.getTime();r<6e4?e.push(Q(`Receipt timestamp recent`,`${Math.round(r/1e3)}s ago`)):e.push(kI(`Receipt timestamp recent`,`${Math.round(r/6e4)}m ago`))}n&&console.log(X.dim(` Receipt: ${JSON.stringify(t,null,2)}`))}catch(t){e.push($(`Receipt parseable`,t.message))}}if(l.length>0)e.push(Q(`Response body non-empty`,`${o.split(`;`)[0]}, ${II(l.length)}`));else{let n=[...t.headers.entries()].filter(([e])=>!e.startsWith(`x-`)&&![`content-type`,`content-length`,`date`,`server`,`connection`,`keep-alive`,`cache-control`,`vary`,`access-control-allow-origin`,`payment-receipt`,`payment-session`,`payment-session-snapshot`].includes(e.toLowerCase()));n.length>0?e.push(kI(`Response body empty -- data may be in headers only`,n.map(([e])=>e).join(`, `))):e.push(kI(`Response body empty`))}if(o?e.push(Q(`Content-Type header set`,o.split(`;`)[0])):e.push(kI(`Content-Type header set`)),s)try{let t=gL(s);if(t.reference&&/^0x[0-9a-fA-F]{64}$/.test(t.reference)){let n=r?.blockExplorers?.default?.url;if(n){let r=n.includes(`tempo`)?`receipt`:`tx`;e.push(Q(`On-chain transaction`,`${n}/${r}/${t.reference}`))}}}catch{}return e}function jL(e){for(let t of e.replace(/\r\n|\r/g,`
|
|
241
|
+
`);a=n.pop(),await d(n)}a.trim()&&await d([a]),t.channelId&&t.escrowContract&&t.chainId&&await DP({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 DP(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:{...Jw(e.fetchInit.headers),Authorization:t}});if(n.ok){if(BP(e.channelId),e.verbose>=1){let t=n.headers.get(q.paymentReceipt),r;if(t)try{let e=JSON.parse(D.toString(t));typeof e.txHash==`string`&&(r=e.txHash)}catch{}let i=r&&e.explorerUrl?` ${X.dim(KO(`${e.explorerUrl}/tx/${r}`,r))}`:``;e.info(`${X.dim(`Channel closed.`)} ${X.dim(`Spent ${QO(e.cumulativeAmount,e.tokenSymbol,e.tokenDecimals)}.`)}${i}\n`)}}else{let t=await n.text().catch(()=>``);e.info(`\n${X.dim(X.yellow(`Channel close failed`))} ${X.dim(`(${n.status})`)}\n`),e.info(`${X.dim(` channelId: ${e.channelId}`)}\n${X.dim(` cumulativeAmount: ${e.cumulativeAmount}`)}\n${X.dim(` escrowContract: ${e.escrowContract}`)}\n${X.dim(` chainId: ${e.chainId}`)}\n${X.dim(` response: ${t||`(empty)`}`)}\n`)}}function OP(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 kP(e){return NP(YP,e,XP)}function AP(e){return e.method===`tempo`&&e.intent===`charge`}async function jP(e){let t=bk(e.options.account),n=process.env.MPPX_PRIVATE_KEY?.trim()||(YO(t)?void 0:await xk(t).get()),r;if(n)r=ve(n).address;else if(YO(t)&&WP())r=UP(t)?.wallet_address;else{let e=KP();if(e){let t=await xk(e).get();t&&(r=ve(t).address)}}if(!r)return;let i=$O(e.options.rpcUrl,{network:e.options.network}),a=j({chain:await tk({network:e.options.network,rpcUrl:i}),transport:ue(i)});return{account:r,client:a}}async function MP(e,t){let n=e.request,r=n.currency,i=n.amount;if(typeof r!=`string`||typeof i!=`string`)return`unsupported`;let a=n.methodDetails?.chainId;if(a&&t.client.chain?.id&&a!==t.client.chain.id)return`unsupported`;let o=BigInt(i);if(o===0n)return`payable`;let s=await Ie.token.getBalance(t.client,{account:t.account,token:r}).then(e=>e.amount).catch(()=>void 0);return s===void 0?`unknownBalance`:s>=o?`payable`:`insufficientBalance`}function NP(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 PP(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 I({code:`CHAIN_MISMATCH`,message:`Challenge requires chainId ${t}, but RPC is chainId ${e.clientChainId}.${n}`,exitCode:2})}function FP(e){if(e)return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function IP(e){let t=FP(e.tokenIn)??FP(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 LP(){return c.join(process.env.XDG_CONFIG_HOME||c.join(b.homedir(),`.config`),`mppx`,`channels`)}function RP(e){try{let n=t.readFileSync(c.join(LP(),e),`utf-8`).trim();return n?BigInt(n):void 0}catch{return}}function zP(e,n){let r=LP();t.mkdirSync(r,{recursive:!0}),t.writeFileSync(c.join(r,e),n.toString(),`utf-8`)}function BP(e){try{t.unlinkSync(c.join(LP(),e))}catch{}}function VP(){return b.platform()===`darwin`?c.join(b.homedir(),`Library`,`Application Support`,`tempo`,`wallet`,`keys.toml`):c.join(process.env.XDG_DATA_HOME||c.join(b.homedir(),`.local`,`share`),`tempo`,`wallet`,`keys.toml`)}function HP(){try{let e=t.readFileSync(VP(),`utf-8`),n=[],r;for(let t of e.split(`
|
|
242
|
+
`)){let e=t.trim();if(e===`[[keys]]`){r?.wallet_address&&n.push(r),r={wallet_type:`local`,wallet_address:``,chain_id:0};continue}if(!r)continue;let i=e.match(/^(\w+)\s*=\s*"?([^"]*)"?$/);if(!i)continue;let[,a,o]=i;a===`wallet_type`?r.wallet_type=o:a===`wallet_address`?r.wallet_address=o:a===`chain_id`&&(r.chain_id=Number.parseInt(o,10))}return r?.wallet_address&&n.push(r),n}catch{return[]}}function UP(e){let t=HP();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]}function WP(){if(QP!==void 0)return QP;try{m.execFileSync(`which`,[`tempo`],{stdio:`ignore`}),QP=!0}catch{QP=!1}return QP}async function GP(e){return new Promise((t,n)=>{m.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 KP(){let e=yk();if(YO(e.get())&&!WP()&&b.platform()===`darwin`)try{let t=m.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]===qP&&r?.[1]&&n.push(r[1])}if(n.length>0)return e.set(n[0]),n[0]}catch{}}var qP,JP,YP,XP,ZP,QP,$P=F((()=>{Ox(),LT(),Fx(),FS(),yP(),oD(),aM(),Dk(),pk(),EA(),qP=`mppx`,JP=p.union([p.boolean(),p.literal(`true`).transform(()=>!0),p.literal(`false`).transform(()=>!1)]),YP=p.object({allowCustomEscrow:p.optional(JP),autoSwap:p.optional(JP),channel:p.optional(p.coerce.string()),deposit:p.optional(p.union([p.string(),p.number()])),payWith:p.optional(p.string()),slippage:p.optional(p.coerce.number()),tokenIn:p.optional(p.string())}),XP=[`allowCustomEscrow`,`autoSwap`,`channel`,`deposit`,`payWith`,`slippage`,`tokenIn`],ZP=[`payable`,`unknownBalance`,`insufficientBalance`,`unsupported`]}));JS(),Dk(),EA();const eF=[...Object.entries(Nk),...Object.entries(Pk),...Object.entries(Fk),...Object.entries(Ik)];function tF(){return TA({method:`evm`,supports:nF,async setup({challenge:e,options:t}){let n=e.request,r=n.network?rF(Uk(n.network)):void 0,i=n.network&&n.asset?eF.find(([,e])=>Vk(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`?jk({address:n.asset,decimals:i?.[1].decimals??6,network:n.network,transfer:{name:a,type:`eip3009`,version:o}}):void 0,c=await wk(t.account);return{explorerUrl:r?.blockExplorers?.default?.url,methods:[...wA({account:c,...s&&{currencies:[s]}})],tokenDecimals:i?.[1].decimals??6,tokenSymbol:i?.[0]??``}}})}function nF(e){if(!KS(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 rF(e){return Object.values(Ve).find(t=>t.id===e)}vS(),mC(),$P();const iF=[CP(),IA(),DA(),tF()];async function aF(e,t,n){let r=n;for(let n of t??[]){let t=await n.preparePayment?.({challenge:e,...r===void 0?{}:{credentialContext:r}});t&&`credentialContext`in t&&(r=t.credentialContext)}return r}function oF(e,t){let n=t?.plugins?.find(t=>uF(t,e));if(n)return{plugin:n};let r=lF(t)?.filter(t=>t.name===e.method&&t.intent===e.intent),i=r?.find(t=>t.canHandleChallenge?.({challenge:e})??!0);if(i)return{method:i};if(r?.length)return{};let a=iF.find(t=>uF(t,e));return a?{plugin:a}:{}}function sF(e,t){let n=lF(t);if(n?.length){let r=$S(e,n,XS(n,t?.paymentPreferences).entries);if(r){let e=t?.plugins?.find(e=>uF(e,r.challenge));return{challenge:r.challenge,...e?{plugin:e}:{method:r.method}}}return}for(let n of e){let e=oF(n,t);if(e.plugin||e.method)return{challenge:n,...e}}}function cF(e){let t=lF(e);if(t?.length)return XS(t,e?.paymentPreferences).header}function lF(e){return Array.isArray(e?.methods)?e.methods.flat():void 0}function uF(e,t){return e.supports?e.supports(t):e.method===t.method}async function dF(e){let t=fF(e);if(!t)return;let n=await import(t);return{config:n.default??n,path:t}}function fF(e){if(e){let n=c.resolve(e);return t.existsSync(n)?n:void 0}let n=process.env.MPPX_CONFIG?.trim();if(n){let e=c.resolve(n);return t.existsSync(e)?e:void 0}}function pF(e,t){function n(t){let n={...t.request};if(t.method===`tempo`&&t.intent===`session`){let e={...n.methodDetails};delete e.sessionSnapshot,Object.keys(e).length?n.methodDetails=e:delete n.methodDetails}return $x({...t,request:n,id:e.id,expires:e.expires})}if(n(t)!==n(e))throw Error(`Payment request changed on retry. Run the command again to approve the new payment.`)}$P(),vS(),bM(),jN(),VN(),NO();function mF(e){return e??globalThis.fetch.bind(globalThis)}function hF(e,t){let n=e.request.methodDetails?.chainId;if(n!==void 0&&n!==t.chainId)throw Error(`Close challenge changed the session chain.`);if(typeof e.request.recipient!=`string`||e.request.recipient.toLowerCase()!==t.descriptor.payee.toLowerCase())throw Error(`Close challenge changed the session payee.`);if(typeof e.request.currency!=`string`||e.request.currency.toLowerCase()!==t.descriptor.token.toLowerCase())throw Error(`Close challenge changed the session token.`);if(pM(e,t.escrow).toLowerCase()!==t.escrow.toLowerCase())throw Error(`Close challenge changed the session escrow.`);let r=QD(e);if(r&&r.channelId.toLowerCase()!==t.channelId.toLowerCase())throw Error(`Close challenge changed the session channel.`)}async function gF(e){hF(e.challenge,e.channel);let t=mF(e.fetch),n,r=async(r,i)=>{n&&=(await e.onChallenge?.(n),void 0);let a=await t(r,i);if(a.status!==402)return a;let o=lS(a).find(XD);if(!o)throw Error(`Refreshed close response did not include tempo/session.`);return hF(o,e.channel),n=o,a},i=BN({...e.manager,bootstrap:!1,escrow:e.channel.escrow,fetch:r});kN(i).rehydrate(e);let a=await i.close();if(!a)throw Error(`Session close response did not include a payment receipt.`);return{manager:i,receipt:a}}vS(),bM(),NM(),NO(),Vj(),Zx();var _F=class extends Error{name=`SessionStateError`;code=`SESSION_STATE_INVALID`;file;constructor(e,t={}){super(e,t.cause===void 0?void 0:{cause:t.cause}),this.file=t.file}},vF=class extends Error{name=`SessionBusyError`;code=`SESSION_BUSY`;exitCode=75;scope;owner;constructor(e,t){super(`Session scope is busy in process ${t.pid} on ${t.hostname}.`),this.scope=e,this.owner=t}};const yF=J.object({channelId:qx(),cumulativeAmount:J.string(),deposit:J.string(),descriptor:J.object({payer:Kx(),payee:Kx(),operator:Kx(),token:Kx(),salt:qx(),authorizedSigner:Kx(),expiringNonceHash:qx()}),escrow:Kx(),chainId:J.number(),opened:J.boolean()}),bF=J.object({name:J.optional(J.string()),address:Kx()}),xF=J.object({method:J.literal(`tempo`),intent:J.literal(`session`),status:J.literal(`success`),timestamp:J.string(),reference:J.string(),challengeId:J.string(),channelId:qx(),acceptedCumulative:J.string(),spent:J.string(),units:J.optional(J.number()),txHash:J.optional(qx())}),SF=J.object({version:J.literal(1),method:J.literal(`tempo`),intent:J.literal(`session`),status:J.enum([`opening`,`open`,`closing`,`stale`]),channel:yF,account:bF,endpoint:J.string(),challenge:_S,receipt:J.optional(xF),spent:J.string(),units:J.number(),createdAt:J.string(),updatedAt:J.string()}),CF=J.object({version:J.literal(1),channelId:qx()}),wF=J.object({version:J.literal(1),scope:J.string(),hostname:J.string(),pid:J.number(),token:J.string(),createdAt:J.string()});function TF(e,t,n,r){let i=e.safeParse(t);if(!i.success)throw Z(n,r,i.error);return i.data}function EF(e){let t=IF(e);return[t.payer,t.payee,t.token,t.escrow,t.chainId].join(`:`)}function DF(e){return{payer:e.descriptor.payer,payee:e.descriptor.payee,token:e.descriptor.token,escrow:e.escrow,chainId:e.chainId}}function OF(e={}){let t=e.stateRoot??AF(),n={root:t,channels:c.join(t,`channels`),locks:c.join(t,`locks`),preferred:c.join(t,`preferred`)},r=e.hostname??b.hostname(),i=e.pid??process.pid,a=e.now??(()=>new Date),o=e.isProcessAlive??cI;async function s(){for(let e of[n.root,n.channels,n.locks,n.preferred])await C.mkdir(e,{recursive:!0,mode:448}),await C.chmod(e,448)}async function l(e){let t=PF(e),r=jF(n,t),i=await $F(r);if(i===void 0)return;let a=WF(i,r);if(a.channel.channelId.toLowerCase()!==t)throw Z(r,`Session filename does not match its channel ID.`);return GF(a)}async function u(){let e;try{e=await C.readdir(n.channels,{withFileTypes:!0})}catch(e){if(uI(e,`ENOENT`))return[];throw Z(n.channels,`Unable to list managed sessions.`,e)}let t=[];for(let n of e){if(!n.isFile()||n.name.includes(`.tmp-`)||!n.name.endsWith(`.json`))continue;let e=n.name.slice(0,-5);PF(e);let r=await l(e);r&&t.push(r)}return t.sort((e,t)=>e.createdAt.localeCompare(t.createdAt))}async function d(e){await s();let t=BF(e.channel),r=PF(t.channelId),i=jF(n,r),o=await $F(i),c=o===void 0?void 0:WF(o,i);c&&KF(c,e,i);let l=HF(e.challenge,i);JF(l,t,i);let u=e.receipt?UF(e.receipt,t.channelId,i):void 0,d=c?TM(c.channel):void 0,f=QF(t.cumulativeAmount,d?.cumulativeAmount??0n),p=QF(e.spent??0n,u?BigInt(u.spent):0n,c?BigInt(c.spent):0n);if(p>f)throw Z(i,`Session spend exceeds the locally authorized cumulative amount.`);let m=VF(wM({...t,cumulativeAmount:f}),i),h=ZF(c?.updatedAt,a(),i),g=XF(c?.receipt,u),_=zF(e.account,i),v=WF({version:1,method:`tempo`,intent:`session`,status:e.status,channel:m,account:{..._.name===void 0?c?.account.name===void 0?{}:{name:c.account.name}:{name:_.name},address:_.address},endpoint:RF(e.endpoint,i),challenge:l,...g!==void 0&&{receipt:g},spent:p.toString(),units:Math.max(c?.units??0,e.units??0,u?.units??0),createdAt:c?.createdAt??h,updatedAt:h},i);return await eI(i,v),GF(v)}async function f(e){let t=NF(n,e),r=await $F(t);if(r===void 0)return;let{channelId:i}=TF(CF,r,t,`Preferred session is invalid.`),a=await l(i);if(!a)throw Z(t,`Preferred session ${i} does not exist.`);return YF(a.channel,e,t),i}async function p(e,t){let r=PF(t),i=await l(r),a=NF(n,e);if(!i)throw Z(a,`Session ${r} does not exist.`);YF(i.channel,e,a),await eI(a,{version:1,channelId:r})}async function m(e,t){let r=NF(n,e),i=t===void 0?void 0:PF(t),a=await $F(r);if(a===void 0)return;let o=TF(CF,a,r,`Preferred session is invalid.`).channelId;i&&o.toLowerCase()!==i||await oI(r,`Unable to clear preferred session.`)}async function h(e){let t=PF(e),r=await l(t);r&&(await m(DF(r.channel),t),await oI(jF(n,t),`Unable to remove session.`))}async function g(e){await s();let t=MF(n,e);for(let n=0;n<3;n++){let n={version:1,scope:e,hostname:r,pid:i,token:_(),createdAt:a().toISOString()};try{if(await tI(t,n),await iI(rI(t))){await aI(t,n);continue}return{async release(){await aI(t,n)}}}catch(e){if(!uI(e,`EEXIST`))throw e}let s=await $F(t);if(s===void 0)continue;let c=TF(wF,s,t,`Session lock is invalid.`);if(c.scope!==e)throw Z(t,`Session lock scope is invalid.`);if(c.hostname!==r||o(c.pid))throw new vF(e,c);await nI(t,c)}let c=await $F(t);throw c===void 0?Z(t,`Unable to acquire session lock.`):new vF(e,TF(wF,c,t,`Session lock is invalid.`))}async function v(e){return g(EF(e))}return{root:t,get:l,list:u,upsert:d,remove:h,getPreferred:f,setPreferred:p,clearPreferred:m,acquire:v}}function kF(e,t){let n=LF(t.scope),r=t.selection===`auto`||t.selection===`new`?void 0:PF(t.selection);function i(e){if(e.toLowerCase()!==n)throw new _F(`Session manager requested an unexpected payment scope.`)}async function a(n=!0){if(t.selection===`new`&&!r)return;let i=r??await e.getPreferred(t.scope);if(!i)return;let a=await e.get(i);if(!a)throw new _F(`Session ${i} does not exist.`);if(YF(a.channel,t.scope),!(n&&(a.status!==`open`||!a.channel.opened)))return r=i,a}return{async get(e){return i(e),(await a())?.channel},async set(n){if(i(SM(n)),YF(n,t.scope),r&&r.toLowerCase()!==n.channelId.toLowerCase())throw new _F(`Session manager selected ${r}, but attempted to store ${n.channelId}.`);r||t.onNewChannel?.(n);let a=await e.upsert({...t.context(),channel:n});r=a.channel.channelId,await e.setPreferred(t.scope,a.channel.channelId)},async delete(n){i(n);let o=await a(!1);if(!o)return;let s=t.context();await e.upsert({...o,...s,status:s.status===`closing`?`closing`:`stale`,channel:o.channel,spent:s.spent??o.spent,units:s.units??o.units}),s.status!==`closing`&&await e.clearPreferred(t.scope,o.channel.channelId),r=void 0}}}function AF(){let e=process.env.XDG_STATE_HOME||c.join(b.homedir(),`.local`,`state`);return c.join(e,`mppx`,`sessions`,`v1`)}function jF(e,t){return c.join(e.channels,`${t}.json`)}function MF(e,t){let n=g(`sha256`).update(t).digest(`hex`);return c.join(e.locks,`${n}.lock`)}function NF(e,t){let n=g(`sha256`).update(EF(t)).digest(`hex`);return c.join(e.preferred,`${n}.json`)}function PF(e){return TF(qx(),e,void 0,`Invalid session channel ID: ${e}.`).toLowerCase()}function FF(e,t,n){return TF(Kx(),e,n,`Invalid ${t}.`).toLowerCase()}function IF(e){if(!Number.isSafeInteger(e.chainId)||e.chainId<0)throw new _F(`Invalid session chain ID.`);return{payer:FF(e.payer,`session payer`),payee:FF(e.payee,`session payee`),token:FF(e.token,`session token`),escrow:FF(e.escrow,`session escrow`),chainId:e.chainId}}function LF(e){let t=IF(e);return[t.payee,t.token,t.escrow,t.chainId].join(`:`)}function RF(e,t){if(typeof e!=`string`)throw Z(t,`Session endpoint is invalid.`);let n;try{n=new URL(e)}catch(e){throw Z(t,`Session endpoint is invalid.`,e)}if(n.protocol!==`http:`&&n.protocol!==`https:`)throw Z(t,`Session endpoint must use HTTP or HTTPS.`);if(n.username||n.password)throw Z(t,`Session endpoint must not contain credentials.`);let r=e.indexOf(`#`);return r===-1?e:e.slice(0,r)}function zF(e,t){return TF(bF,e,t,`Session account is invalid.`)}function BF(e){return TM(VF(wM(e)))}function VF(e,t){return TF(yF,e,t,`Stored session channel is invalid.`)}function HF(e,t){let n=_S.safeParse(e);if(!n.success||!XD(n.data))throw Z(t,`Stored session challenge is invalid.`);return n.data}function UF(e,t,n){let r=TF(xF,e,n,`Stored session receipt is invalid.`);if(r.channelId!==t.toLowerCase())throw Z(n,`Stored session receipt has a different channel ID.`);if(r.reference.toLowerCase()!==t.toLowerCase())throw Z(n,`Stored session receipt has a different reference.`);if(BigInt(r.spent)>BigInt(r.acceptedCumulative))throw Z(n,`Stored session receipt spend exceeds its accepted amount.`);return r}function WF(e,t){let n=TF(SF,e,t,`Stored session is invalid.`),{receipt:r,...i}=n,a=n.channel,o=n.account;if(o.address.toLowerCase()!==a.descriptor.payer.toLowerCase())throw Z(t,`Stored session account does not match the channel payer.`);let s=r?UF(r,a.channelId,t):void 0,c=n.spent,l=BigInt(a.cumulativeAmount);if(BigInt(c)>l)throw Z(t,`Stored session spend exceeds its cumulative authorization.`);if(s&&BigInt(s.acceptedCumulative)>l)throw Z(t,`Stored receipt exceeds the cumulative authorization.`);if(Date.parse(n.updatedAt)<Date.parse(n.createdAt))throw Z(t,`Stored session timestamps are not monotonic.`);let u=RF(n.endpoint,t);if(u!==n.endpoint)throw Z(t,`Stored session endpoint contains a fragment.`);let d=HF(n.challenge,t);return JF(d,TM(a),t),{...i,account:o,channel:a,endpoint:u,challenge:d,...s&&{receipt:s}}}function GF(e){return{version:1,status:e.status,channel:TM(e.channel),account:e.account,endpoint:e.endpoint,challenge:e.challenge,...e.receipt&&{receipt:e.receipt},spent:BigInt(e.spent),units:e.units,createdAt:e.createdAt,updatedAt:e.updatedAt}}function KF(e,t,n){let r=BF(t.channel),i=zF(t.account,n),a=TM(e.channel);if(JSON.stringify(qF(r))!==JSON.stringify(qF(a)))throw Z(n,`Session update changed immutable channel identity.`);if(i.address.toLowerCase()!==e.account.address.toLowerCase())throw Z(n,`Session update changed the payer account.`)}function qF(e){return{channelId:e.channelId.toLowerCase(),descriptor:Object.fromEntries(Object.entries(e.descriptor).map(([e,t])=>[e,typeof t==`string`?t.toLowerCase():t])),escrow:e.escrow.toLowerCase(),chainId:e.chainId}}function JF(e,t,n){if(Lj({...t.descriptor,chainId:t.chainId,escrow:t.escrow}).toLowerCase()!==t.channelId.toLowerCase())throw Z(n,`Session channel ID does not match its descriptor.`);let r=FF(e.request.recipient,`challenge recipient`,n),i=FF(e.request.currency,`challenge currency`,n);if(r!==t.descriptor.payee.toLowerCase())throw Z(n,`Session challenge payee does not match the channel.`);if(i!==t.descriptor.token.toLowerCase())throw Z(n,`Session challenge token does not match the channel.`);if(pM(e,t.escrow).toLowerCase()!==t.escrow.toLowerCase())throw Z(n,`Session challenge escrow does not match the channel.`);if(lI(e.request.methodDetails)){let r=e.request.methodDetails;if(r.chainId!==void 0&&r.chainId!==t.chainId)throw Z(n,`Session challenge chain does not match the channel.`)}}function YF(e,t,n){let r=IF(t);if(e.descriptor.payer.toLowerCase()!==r.payer||e.descriptor.payee.toLowerCase()!==r.payee||e.descriptor.token.toLowerCase()!==r.token||e.escrow.toLowerCase()!==r.escrow||e.chainId!==r.chainId)throw Z(n,`Session channel does not match the selected payment scope.`)}function XF(e,t){return e?t&&Date.parse(t.timestamp)>=Date.parse(e.timestamp)?t:e:t}function ZF(e,t,n){if(!Number.isFinite(t.getTime()))throw Z(n,`Session clock is invalid.`);let r=t.toISOString();return!e||Date.parse(r)>=Date.parse(e)?r:e}function QF(...e){return e.reduce((e,t)=>t>e?t:e,0n)}async function $F(e){let t;try{t=await C.readFile(e,`utf8`)}catch(t){if(uI(t,`ENOENT`))return;throw Z(e,`Unable to read session state.`,t)}try{return JSON.parse(t)}catch(t){throw Z(e,`Session state contains invalid JSON.`,t)}}async function eI(e,t){await C.mkdir(c.dirname(e),{recursive:!0,mode:448}),await C.chmod(c.dirname(e),448);let n=`${e}.tmp-${process.pid}-${_()}`,r;try{r=await C.open(n,`wx`,384),await r.writeFile(`${JSON.stringify(t,null,2)}\n`,`utf8`),await r.sync(),await r.close(),r=void 0,await C.rename(n,e),await C.chmod(e,384),await sI(c.dirname(e))}catch(t){throw await r?.close().catch(()=>void 0),await C.unlink(n).catch(()=>void 0),t instanceof _F?t:Z(e,`Unable to write session state.`,t)}}async function tI(e,t){let n;try{n=await C.open(e,`wx`,384),await n.writeFile(`${JSON.stringify(t)}\n`,`utf8`),await n.sync(),await n.close(),n=void 0,await sI(c.dirname(e))}catch(t){throw await n?.close().catch(()=>void 0),n&&await C.unlink(e).catch(()=>void 0),t}}async function nI(e,t){let n=rI(e);try{await C.link(e,n)}catch(t){if(uI(t,`EEXIST`)||uI(t,`ENOENT`))return;throw Z(e,`Unable to claim dead lock.`,t)}try{let r=await $F(n);if(r===void 0||TF(wF,r,n,`Session lock is invalid.`).token!==t.token)return;await oI(e,`Unable to reclaim dead lock.`)}finally{await oI(n,`Unable to release dead lock claim.`)}}function rI(e){return`${e}.reclaim`}async function iI(e){try{return await C.access(e),!0}catch(t){if(uI(t,`ENOENT`))return!1;throw Z(e,`Unable to inspect session lock.`,t)}}async function aI(e,t){let n=await $F(e);n!==void 0&&TF(wF,n,e,`Session lock is invalid.`).token===t.token&&await oI(e,`Unable to release session lock.`)}async function oI(e,t){try{await C.unlink(e),await sI(c.dirname(e))}catch(n){if(!uI(n,`ENOENT`))throw Z(e,t,n)}}async function sI(e){let t=await C.open(e,`r`);try{await t.sync()}finally{await t.close()}}function cI(e){try{return process.kill(e,0),!0}catch(e){if(uI(e,`ESRCH`))return!1;if(uI(e,`EPERM`))return!0;throw e}}function lI(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function uI(e,t){return e instanceof Error&&`code`in e&&e.code===t}function Z(e,t,n){return new _F(t,{...n!==void 0&&{cause:n},file:e})}Ox(),LT(),xN(),RM(),Vj(),Dk(),pk();const dI=p.object({status:p.enum([`opening`,`open`,`closing`,`stale`]),channelId:p.string(),account:p.string().optional(),payer:p.string(),payee:p.string(),authorizedSigner:p.string(),token:p.string(),escrow:p.string(),chainId:p.number(),cumulativeAmount:p.string(),confirmedSpend:p.string(),deposit:p.string(),units:p.number(),resourceUrl:p.string(),createdAt:p.string(),updatedAt:p.string()}),fI=p.object({channelId:p.string(),status:p.enum([`closed`,`already-closed`]),spent:p.string(),txHash:p.string().optional()}),pI=p.object({closed:p.array(fI),failed:p.array(p.object({channelId:p.string(),message:p.string()}))});function mI(e){return e===`mainnet`?ye.id:be.id}function hI(e){if(e===ye.id)return`mainnet`;if(e===be.id)return`testnet`}function gI(e){let t={};for(let n of e??[]){let e=n.indexOf(`:`);if(e===-1)throw new I({code:`INVALID_HEADER`,message:`Invalid header format: ${n}`,exitCode:2});t[n.slice(0,e).trim()]=n.slice(e+1).trim()}return t}function _I(e){return{status:e.status,channelId:e.channel.channelId,...e.account.name&&{account:e.account.name},payer:e.channel.descriptor.payer,payee:e.channel.descriptor.payee,authorizedSigner:e.channel.descriptor.authorizedSigner,token:e.channel.descriptor.token,escrow:e.channel.escrow,chainId:e.channel.chainId,cumulativeAmount:e.channel.cumulativeAmount.toString(),confirmedSpend:e.spent.toString(),deposit:e.channel.deposit.toString(),units:e.units,resourceUrl:e.endpoint,createdAt:e.createdAt,updatedAt:e.updatedAt}}function vI(e,t){throw e instanceof I?e:e instanceof vF?new I({code:e.code,message:e.message,exitCode:e.exitCode,cause:e}):e instanceof _F?new I({code:e.code,message:e.message,exitCode:65,cause:e}):new I({code:t,message:e instanceof Error?e.message:String(e),exitCode:75,...e instanceof Error&&{cause:e}})}async function yI(e,t){let n=await Ck(t??e.account.name);if(!aN(n.account,e.channel.descriptor))throw new I({code:`SESSION_ACCOUNT_MISMATCH`,message:`Account ${n.account.address} cannot sign for session ${e.channel.channelId}.`,exitCode:2});return n}async function bI(e,t){if(t.network&&mI(t.network)!==e)throw new I({code:`CHAIN_MISMATCH`,message:`Session uses chainId ${e}, not ${t.network}.`,exitCode:2});let n=t.network??hI(e),r=$O(t.rpcUrl,{network:n}),i=await tk({network:n,rpcUrl:r});if(i.id!==e)throw new I({code:`CHAIN_MISMATCH`,message:`Session uses chainId ${e}, but RPC is chainId ${i.id}.`,exitCode:2});return j({chain:i,transport:ue(r)})}const xI=cb(`sessions`,{description:`Manage persistent payment sessions (list, view, close)`}).command(`list`,{description:`List persistent payment sessions`,options:p.object({account:p.string().optional().describe(`Filter by account name`),network:p.enum([`mainnet`,`testnet`]).optional().describe(`Filter by Tempo network`)}),output:p.object({sessions:p.array(dI)}),alias:{account:`a`},async run(e){try{let t=(await OF().list()).filter(t=>!(e.options.account&&t.account.name!==e.options.account||e.options.network&&t.channel.chainId!==mI(e.options.network))).map(_I),n={sessions:t};if(e.format===`json`&&e.formatExplicit)return e.ok(n);t.length===0&&console.log(`No sessions.`);for(let[e,n]of t.entries())e>0&&console.log(``),SI(n);return}catch(e){return vI(e,`SESSION_LIST_FAILED`)}}}).command(`view`,{description:`View a persistent payment session`,args:p.object({channelId:p.string().describe(`Full session channel ID`)}),output:dI,async run(e){try{let t=await OF().get(e.args.channelId);if(!t)throw new I({code:`SESSION_NOT_FOUND`,message:`Session ${e.args.channelId} was not found.`,exitCode:2});let n=_I(t);if(e.format===`json`&&e.formatExplicit)return e.ok(n);SI(n);return}catch(e){return vI(e,`SESSION_VIEW_FAILED`)}}}).command(`close`,{description:`Cooperatively close persistent payment sessions`,usage:[{suffix:`<channel-id> [options]`},{suffix:`--all --yes [options]`}],args:p.object({channelId:p.string().optional().describe(`Full session channel ID`)}),options:p.object({account:p.string().optional().describe(`Account name`),all:p.boolean().optional().default(!1).describe(`Close every matching session`),header:p.array(p.string()).optional().describe(`Add close request header (repeatable)`),network:p.enum([`mainnet`,`testnet`]).optional().describe(`Tempo network`),rpcUrl:p.string().optional().describe(`RPC endpoint (env: MPPX_RPC_URL)`),url:p.string().optional().describe(`Override the stored resource URL`),yes:p.boolean().optional().default(!1).describe(`Confirm closing every session`)}),output:p.union([fI,pI]),alias:{account:`a`,header:`H`,rpcUrl:`r`},async run(e){if(e.options.all&&e.args.channelId)return e.error({code:`INVALID_SESSION_CLOSE`,message:`Specify a channel ID or --all, not both.`,exitCode:2});if(!e.options.all&&!e.args.channelId)return e.error({code:`INVALID_SESSION_CLOSE`,message:`Specify a channel ID or --all.`,exitCode:2});if(e.options.all&&!e.options.yes)return e.error({code:`CONFIRMATION_REQUIRED`,message:`Closing all sessions requires --yes.`,exitCode:2});if(e.options.all&&(e.options.header||e.options.rpcUrl||e.options.url))return e.error({code:`INVALID_SESSION_CLOSE`,message:`--header, --rpc-url, and --url only apply to a single session.`,exitCode:2});let t=OF();async function n(e,n={}){let r=await t.get(e);if(!r)throw new I({code:`SESSION_NOT_FOUND`,message:`Session ${e} was not found.`,exitCode:2});let i=DF(r.channel),a=await t.acquire(i);try{let r=await t.get(e);if(!r)throw new I({code:`SESSION_NOT_FOUND`,message:`Session ${e} was not found.`,exitCode:2});let a=await yI(r,n.account),o=await bI(r.channel.chainId,n);if(Lj({...r.channel.descriptor,escrow:r.channel.escrow,chainId:r.channel.chainId}).toLowerCase()!==r.channel.channelId.toLowerCase())throw new I({code:`SESSION_STATE_INVALID`,message:`Stored descriptor does not derive the session channel ID.`,exitCode:65});if((await FM(o,r.channel.channelId,r.channel.escrow)).deposit===0n)return await t.remove(r.channel.channelId),{channelId:r.channel.channelId,status:`already-closed`,spent:r.spent.toString()};let s=RF(n.resourceUrl??r.endpoint),c={...a.source===`keychain`&&{name:a.accountName},address:a.account.address},l=(e=r.challenge)=>({status:`closing`,account:c,endpoint:s,challenge:e,...r.receipt&&{receipt:r.receipt},spent:r.spent,units:r.units}),u=await t.upsert({...l(),channel:r.channel}),d=gI(n.headers),f=u.challenge,p=await gF({channel:u.channel,challenge:u.challenge,fetch:async(e,t)=>globalThis.fetch(e,{...t,headers:{...d,...Jw(t?.headers)}}),input:s,spent:u.spent,async onChallenge(e){f=e,await t.upsert({...l(e),channel:u.channel})},manager:{account:a.account,client:o,channelStore:kF(t,{scope:i,selection:u.channel.channelId,context:()=>l(f)})}});return await t.remove(u.channel.channelId),{channelId:u.channel.channelId,status:`closed`,spent:p.receipt.spent,txHash:p.receipt.txHash}}finally{await a.release()}}try{if(e.options.all){let r=(await t.list()).filter(t=>(!e.options.account||t.account.name===e.options.account)&&(!e.options.network||t.channel.chainId===mI(e.options.network))),i=[],a=[];for(let t of r)try{i.push(await n(t.channel.channelId,{account:e.options.account,network:e.options.network}))}catch(e){a.push({channelId:t.channel.channelId,message:e instanceof Error?e.message:String(e)})}let o={closed:i,failed:a};if(a.length>0){for(let e of a)process.stderr.write(`${e.channelId}: ${e.message}\n`);process.exitCode=1}if(e.format===`json`&&e.formatExplicit)return e.ok(o);for(let e of i)console.log(`${e.channelId} ${e.status} ${e.spent}`);for(let e of a)console.log(`${e.channelId} failed ${e.message}`);return}let r=await n(e.args.channelId,{account:e.options.account,headers:e.options.header,network:e.options.network,resourceUrl:e.options.url,rpcUrl:e.options.rpcUrl});if(e.format===`json`&&e.formatExplicit)return e.ok(r);console.log(`${r.channelId} ${r.status} ${r.spent}`),r.txHash&&console.log(` transaction ${r.txHash}`);return}catch(e){return vI(e,`SESSION_CLOSE_FAILED`)}}});function SI(e){console.log(e.channelId),console.log(` status ${e.status}`),console.log(` cumulative amount ${e.cumulativeAmount}`),console.log(` confirmed spend ${e.confirmedSpend}`),console.log(` deposit ${e.deposit}`),console.log(` chain ${e.chainId}`),console.log(` payer ${e.payer}`),console.log(` payee ${e.payee}`),console.log(` token ${e.token}`),console.log(` resource ${e.resourceUrl}`)}Ox(),xN(),jN(),VN(),oD(),Dk(),pk();function CI(e,t){if(t&&e!==`auto`&&t.toLowerCase()!==e.toLowerCase())throw new I({code:`SESSION_SELECTION_CONFLICT`,message:`--session and -M channel= select different sessions.`,exitCode:2});let n=t??e;if(n===`auto`||n===`new`)return n;if(/^0x[0-9a-fA-F]{64}$/.test(n))return n.toLowerCase();throw new I({code:`INVALID_SESSION`,message:`Session must be auto, new, or a 32-byte channel ID.`,exitCode:2})}function wI(e){let t=e.allowCustomEscrow;if(t!==void 0){if(t===`true`)return!0;if(t===`false`)return!1;throw new I({code:`INVALID_ALLOW_CUSTOM_ESCROW`,message:`allowCustomEscrow must be true or false.`,exitCode:2})}}function TI(e,t,n,r){if(t.deposit!==void 0)return t.deposit;let i=e.request.suggestedDeposit;return typeof i==`string`?ce(BigInt(i),r):n?`10`:void 0}function EI(e,t){if(!e)return;if(e.challengeId!==t.challenge.id)throw Error(`Session receipt challenge does not match the paid request.`);if(e.channelId.toLowerCase()!==t.channelId.toLowerCase())throw Error(`Session receipt channel does not match the selected channel.`);let n=BigInt(e.acceptedCumulative),r=BigInt(e.spent);if(n>t.cumulative)throw Error(`Session receipt exceeds the local cumulative authorization.`);if(r>n)throw Error(`Session receipt spend exceeds its accepted authorization.`);return e}function DI(e,t){return e.channel.channelId.toLowerCase()===t.toLowerCase()}function OI(e){if(e.trim()!==`[DONE]`){if(e.length===0){process.stdout.write(`
|
|
243
|
+
`);return}try{let t=JSON.parse(e);process.stdout.write(t.token??t.choices?.[0]?.delta?.content??e)}catch{process.stdout.write(e)}}}async function kI(e){let{options:t}=e,n=await Ck(t.account),r=$O(t.rpcUrl,{network:t.network}),i=await tk({network:t.network,rpcUrl:r}),a=j({chain:i,transport:ue(r)}),o=wI(e.methodOptions),s=await $M({allowCustomEscrow:o,challenge:e.challenge,getClient:async()=>a});if(s.chainId!==i.id)throw new I({code:`CHAIN_MISMATCH`,message:`Challenge requires chainId ${s.chainId}, but RPC is chainId ${i.id}.`,exitCode:2});let{decimals:c}=await ak(a,s.token,n.account.address,{requireDecimals:!0}),l={payer:n.account.address,payee:s.payee,token:s.token,escrow:s.escrow,chainId:s.chainId},u=CI(t.session,e.methodOptions.channel),d=e.registry??OF(),f=await d.acquire(l).catch(e=>{throw e instanceof vF?new I({code:e.code,message:e.message,exitCode:e.exitCode,cause:e}):e});try{let r=u===`auto`?await d.getPreferred(l):u===`new`?void 0:u,s=r?await d.get(r):void 0;if(r&&!s)throw new I({code:`SESSION_NOT_FOUND`,message:`Session ${r} was not found.`,exitCode:2});if(s&&u!==`auto`&&(s.status!==`open`||!s.channel.opened||EF(DF(s.channel))!==EF(l)||!aN(n.account,s.channel.descriptor)))throw new I({code:`SESSION_MISMATCH`,message:`Session ${s.channel.channelId} cannot be used for this account and challenge.`,exitCode:2});let f=s?.status===`open`&&s.channel.opened?s:void 0,p=f?`open`:`opening`,m=e.challenge,h=f?.receipt,g=f?.spent??0n,_=f?.units??0,v=RF(e.endpoint),y={...n.source===`keychain`&&{name:n.accountName},address:n.account.address},b=kF(d,{scope:l,selection:u,context:()=>({status:p,account:y,endpoint:v,challenge:m,...h&&{receipt:h},spent:g,units:_}),onNewChannel(){p=`opening`,h=void 0,g=0n,_=0}}),{signal:x,...S}=e.init,C={...S,...x&&{signal:x},onReceipt(e){h=e,g=g>BigInt(e.spent)?g:BigInt(e.spent),_=Math.max(_,e.units??0)}};if(e.challengeResponse.status!==402||e.challengeResponse.bodyUsed)throw Error(`Session manager requires an unconsumed 402 challenge response.`);let w=!0,T=BN({account:n.account,allowCustomEscrow:o,bootstrap:!1,client:a,channelStore:b,credentialContext:e.credentialContext,decimals:c,maxDeposit:TI(e.challenge,e.methodOptions,ik(i),c),fetch:async(t,n)=>w?(w=!1,e.challengeResponse):e.fetch(t,n)});f&&kN(T).rehydrate({channel:f.channel,challenge:e.challenge,input:e.fetchInput,spent:f.spent});let{onReceipt:ee,...te}=C,E=await T.fetch(e.fetchInput,te);if(t.fail&&E.status>=400)throw new I({code:`HTTP_ERROR`,message:`HTTP error ${E.status}`,exitCode:22});if(E.status===402)throw new I({code:`PAYMENT_REJECTED`,message:`Payment rejected.`,exitCode:75});HO(E,{include:!1,verbose:t.include?Math.max(t.verbose,2):t.verbose,silent:t.silent}),m=E.challenge??e.challenge;let ne=T.channelId;if(!ne)throw Error(`Session manager did not select a channel.`);if(h=EI(E.receipt,{challenge:m,channelId:ne,cumulative:T.cumulative})??h,XE(E)){let t=kN(T).consumeSseResponse(e.fetchInput,E,{onReceipt:ee,signal:e.init.signal??void 0});for await(let e of t)OI(e)}else process.stdout.write(Buffer.from(await E.arrayBuffer()));let D=await d.get(ne);if(!D||!DI(D,ne))throw Error(`Session ${ne} was not persisted.`);if(h){let e=EI(h,{challenge:m,channelId:ne,cumulative:T.cumulative});if(!e)throw Error(`Session receipt validation failed.`);h=e,g=g>BigInt(e.spent)?g:BigInt(e.spent),_=Math.max(_,e.units??0),p=`open`}await d.upsert({status:p,channel:D.channel,account:y,endpoint:v,challenge:m,...h&&{receipt:h},spent:g,units:_}),t.silent||(e.info(`Session retained ${ne}\n`),e.info(`Close with: mppx sessions close ${ne}\n`))}finally{await f.release()}}pk();function Q(e,t){return t?{label:e,detail:t,severity:`pass`}:{label:e,severity:`pass`}}function $(e,t,n){let r={label:e,severity:`fail`};return t&&(r.detail=t),n&&(r.hint=n),r}function AI(e,t,n){let r={label:e,severity:`warn`};return t&&(r.detail=t),n&&(r.hint=n),r}function jI(e,t,n){let r=t?{label:e,detail:t,severity:`skip`}:{label:e,severity:`skip`};return n&&(r.hint=n),r}const MI={pass:X.green(`✓`),fail:X.red(`✗`),warn:X.yellow(`⚠`),suggested:X.cyan(`◇`),skip:X.dim(`○`)};function NI(e){let t=MI[e.severity],n=e.detail?`${e.label} (${e.detail})`:e.label;console.log(` ${t} ${n}`),e.hint&&e.severity!==`pass`&&console.log(X.dim(` → ${e.hint}`))}function PI(e){console.log(`\n${X.bold(e)}`)}function FI(e,t){for(let n of e)NI(n),n.severity===`pass`?t.passed++:n.severity===`fail`?t.failed++:n.severity===`warn`?t.warnings++:n.severity===`suggested`?t.suggested++:n.severity===`skip`&&t.skipped++}async function II(e,t,n=15e3){let r=new AbortController,i=setTimeout(()=>r.abort(),n);try{return await fetch(e,{...t,redirect:`error`,signal:r.signal})}finally{clearTimeout(i)}}function LI(e){return e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`}const RI=new Set([`get`,`post`,`put`,`patch`,`delete`,`head`,`options`,`trace`]);function zI(e){return typeof e==`string`&&/^0x[0-9a-fA-F]{40}$/.test(e)}function BI(e){return typeof e==`string`&&/^(0|[1-9][0-9]*)$/.test(e)}function VI(e){let t=e.indexOf(`:`);if(t<1)return null;let n=e.slice(0,t).toLowerCase();if(!RI.has(n))return null;let r=e.slice(t+1);if(!r)return null;let i=r.startsWith(`/`)?r:`/`+r;return{method:n.toUpperCase(),path:i}}function HI(e,t){if(e){try{let n=JSON.parse(e);if(n&&typeof n==`object`&&!Array.isArray(n)){let e=Object.keys(n);if(e.length>0&&e.every(e=>e.startsWith(`/`))){let e=n[t];return e===void 0?void 0:typeof e==`string`?e:JSON.stringify(e)}}}catch{}return e}}function UI(e){if(!e)return{};let t={};for(let n of e){let e=n.indexOf(`:`);e>0&&(t[n.slice(0,e).trim().toLowerCase()]=n.slice(e+1).trim())}return t}async function WI(e){let t=new URL(`openapi.json`,e.replace(/\/?$/,`/`)).href;try{let e=await II(t,{});if(!e.ok)return{error:`HTTP ${e.status}`};let n=await e.text();return{doc:JSON.parse(n),raw:n}}catch(e){return e instanceof DOMException&&e.name===`AbortError`?{error:`Request timed out after 15s`}:e instanceof SyntaxError?{error:`Invalid JSON`}:{error:e.message}}}async function GI(e){let t=new URL(`/llms.txt`,e).href,n=`llms.txt found and nonempty`;try{let e=await II(t,{});if(!e.ok)throw Error(`HTTP ${e.status}`);let r=(await e.text()).trim();if(!r)throw Error(`Empty document`);let i=e.headers.get(`content-type`)?.split(`;`)[0]?.trim().toLowerCase();if(i&&!i.startsWith(`text/`)||i===`text/html`||/^<(?:!doctype html|html|head|body)\b/i.test(r))throw Error(`Expected text documentation, received non-text or HTML content`);return Q(n,t)}catch(e){return{label:n,detail:`${t}: ${e.message}`,severity:`suggested`,hint:`Serve nonempty text documentation at /llms.txt.`}}}function KI(e){let t=[],n=[],r=e.paths;if(!r)return[];for(let[e,i]of Object.entries(r)){let r=YI(i.parameters);for(let[a,o]of Object.entries(i)){if(!RI.has(a)||!o||typeof o!=`object`||Array.isArray(o))continue;let i=o,s=XI(r,YI(i.parameters)),c=s.length>0?s:void 0;if(i[`x-payment-info`]){let n=i[`x-payment-info`];t.push({method:a.toUpperCase(),path:e,amount:n.amount,parameters:c})}else{let t=i.responses;t&&`402`in t&&n.push({method:a.toUpperCase(),path:e,parameters:c})}}}return t.length>0?t:n}function qI(e,t){let n=e.paths;if(!n)return;let r=n[t.path];if(!r)return;let i=r[t.method.toLowerCase()];if(!i?.requestBody)return;let a=i.requestBody.content?.[`application/json`];if(!a)return;if(a.example)return JSON.stringify(a.example);if(a.examples&&typeof a.examples==`object`){let e=Object.values(a.examples)[0];if(e?.value)return JSON.stringify(e.value)}let o=a.schema,s=new Set;if(o=QI(o,e,s),!o||o.type!==`object`)return;let c=$I(o,e,s);if(c&&typeof c==`object`&&Object.keys(c).length>0)return JSON.stringify(c)}function JI(e,t,n){if(!t.path.startsWith(`/`)||t.path.startsWith(`//`)||t.path.includes(`\\`))throw Error(`OpenAPI path must be an origin-relative path: ${t.path}`);let r=t.path;t.parameters&&(r=ZI(r,t.parameters));let i=r.startsWith(`/`)?r.slice(1):r,a=new URL(e.replace(/\/?$/,`/`)),o=new URL(i,a);if(o.origin!==a.origin)throw Error(`OpenAPI path must be an origin-relative path: ${t.path}`);let s=o.href;if(n){let e=new URL(s);for(let t of n){let[n,...r]=t.split(`=`);n&&e.searchParams.set(n,r.join(`=`))}s=e.href}return s}function YI(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(!n||typeof n!=`object`)continue;let e=n;e.in===`path`&&typeof e.name==`string`&&t.push(e.schema&&typeof e.schema==`object`?{name:e.name,in:`path`,schema:e.schema,example:e.example}:{name:e.name,in:`path`,example:e.example})}return t}function XI(e,t){let n=[...e];for(let e of t){let t=n.findIndex(t=>t.name===e.name);t>=0?n[t]=e:n.push(e)}return n}function ZI(e,t){return e.replace(/\{([^}]+)\}/g,(e,n)=>{let r=t.find(e=>e.name===n&&e.in===`path`);if(!r)return e;let i=r.example??r.schema?.example??r.schema?.default;return i===void 0?e:encodeURIComponent(String(i))})}function QI(e,t,n){if(!e||typeof e.$ref!=`string`)return e;if(n?.has(e.$ref))return;let r=e.$ref.replace(/^#\//,``).split(`/`),i=t;for(let e of r)if(i&&typeof i==`object`)i=i[e];else return;return i}function $I(e,t,n){let r=QI(e,t,n)??e;if(r.const!==void 0)return r.const;if(r.example!==void 0)return r.example;if(r.default!==void 0)return r.default;switch(r.type){case`string`:return r.enum&&Array.isArray(r.enum)?r.enum[0]:r.format===`email`?`test@example.com`:r.format===`uuid`?`00000000-0000-0000-0000-000000000000`:r.format===`uri`||r.format===`url`?`https://example.com`:r.format===`date`?`2026-01-01`:r.pattern===`^\\d{5}(?:-\\d{4})?$`?`10001`:r.pattern===`^[A-Z]{2}$`?`US`:`test`;case`number`:case`integer`:return r.minimum??1;case`boolean`:return!0;case`array`:return[];case`object`:{let e=r.properties;if(!e)return{};let i=r.required||[],a={};for(let r of i){let i=e[r];i&&(a[r]=$I(i,t,n))}return a}default:return null}}vS(),Fx(),gw(),pk();const eL=Object.values(Ve);function tL(e){let t=e.request.methodDetails;return typeof t?.chainId==`number`&&eL.find(e=>e.id===t.chainId)?.testnet===!0}async function nL(e,t,n,r){let i=[],a;try{a=JI(e,t,r?.query)}catch(e){return i.push($(`Request URL valid`,e.message)),{results:i}}let o=UI(r?.extraHeaders),s;r?.body&&!r.bodyIsAutogenerated&&(s=r.body,o[`content-type`]||=`application/json`);let c;try{let e={method:t.method};Object.keys(o).length>0&&(e.headers=o),s&&(e.body=s),c=await II(a,e)}catch(e){return i.push($(`Request failed`,e.message)),{results:i}}if(!s&&(c.status===400||c.status===422)){let e=r?.body??(r?.discoveryDoc?qI(r.discoveryDoc,t):void 0);if(e){n&&console.log(X.dim(` Retrying with body: ${e}`)),s=e,o[`content-type`]=`application/json`;try{c=await II(a,{method:t.method,headers:o,body:s})}catch(e){return i.push($(`Request failed`,e.message)),{results:i}}}}if(c.status!==402)return c.status===200?i.push(jI(`Returns 402 without credentials`,`Got 200 (endpoint may not require payment in all cases)`)):c.status===401||c.status===403?i.push(jI(`Returns 402 without credentials`,`Got ${c.status} (endpoint requires auth before payment gate)`)):i.push($(`Returns 402 without credentials`,`Got ${c.status} instead`,c.status===400||c.status===422?`Server requires a valid request body before returning 402. Add a requestBody schema with examples to your OpenAPI doc, or use --body.`:`Endpoints that require payment must return HTTP 402 with a WWW-Authenticate: Payment header when no valid credential is provided.`)),{results:i};i.push(Q(`Returns 402 without credentials`));let l=c.headers.get(q.wwwAuthenticate),u=pL(c);if(!l)return u.length>0?(i.push(jI(`Not an MPP endpoint`,`No WWW-Authenticate header — x402 protocol detected`)),i.push(...u)):i.push(jI(`Not an MPP endpoint`,`No WWW-Authenticate header (may be x402 or other protocol)`)),{results:i};if(u.length>0&&i.push(...u),!l.startsWith(`${Ax.payment} `))return i.push(jI(`Not an MPP endpoint`,`WWW-Authenticate scheme is not Payment`)),{results:i};i.push(Q(`WWW-Authenticate header present`,`Payment scheme`));let d;try{d=lS(c)}catch(e){let t=e.message;i.push($(`Challenge parseable`,t,`The Payment challenge must include a request="<base64url>" parameter containing JSON-encoded payment details.`));let n=l.slice(l.indexOf(` `)+1);return i.push(AI(`Received`,n.length>200?n.slice(0,200)+`...`:n)),{results:i}}if(d.length===0)return i.push($(`Challenge parseable`,`No Payment challenges found in header`)),{results:i};let f=d.map(e=>`${e.method}/${e.intent}`).join(`, `);i.push(Q(`Challenge parseable`,d.length===1?f:`${d.length} methods: ${f}`));let p=new URL(e).hostname;rL(d,i),iL(d,i),aL(d,i),oL(d,p,i);let m=d.length>1;for(let e of d){let t=e.request;sL(e,t,i,m)}if(n)for(let e of d)console.log(X.dim(` Challenge (${e.method}/${e.intent}): ${JSON.stringify(e,null,2)}`));return{results:i,resolvedBody:s,challenges:d}}function rL(e,t){let n=e.filter(e=>!e.id);n.length===0?t.push(Q(`Challenge has id`)):t.push($(`Challenge has id`,`${n.length} missing`,`Every challenge must include a unique id field.`))}function iL(e,t){let n=e.filter(e=>!e.realm);n.length===0?t.push(Q(`Challenge has realm`)):t.push($(`Challenge has realm`,`${n.length} missing`,`Set realm to your server's hostname.`))}function aL(e,t){let n=new Date;for(let r of e){if(!r.expires){t.push(AI(`Challenge has expiration`,`missing expires field`,`Add an expires field (ISO 8601) to prevent replay attacks.`));return}if(new Date(r.expires)<=n){t.push($(`Challenge expires in the future`,`Expired at ${r.expires}`,`The expires timestamp must be in the future.`));return}}let r=Math.min(...e.map(e=>new Date(e.expires).getTime()-n.getTime()));t.push(Q(`Challenge expires in the future`,`${Math.round(r/6e4)}m from now`))}function oL(e,t,n){let r=e=>e.toLowerCase().replace(/\.$/,``),i=r(t),a=[...new Set(e.map(e=>e.realm??``))].filter(e=>{let t=r(e);return!t||t!==i&&!i.endsWith(`.${t}`)});a.length>0?n.push($(`Realm matches server hostname`,`realm="${a[0]}" vs host="${t}"`,`Set the realm to your production hostname (or base domain) in the challenge.`)):n.push(Q(`Realm matches server hostname`))}function sL(e,t,n,r){let i=r?`[${e.method}] `:``;e.method===jx.tempo?cL(t,i,n,e):e.method===jx.stripe?lL(t,i,n):e.method===jx.evm&&uL(e,t,i,n)}function cL(e,t,n,r){let i=e.methodDetails,a=Array.isArray(i?.splits)&&i.splits.length>0;if(zI(e.recipient)?n.push(Q(`${t}Valid recipient address`)):e.recipient===void 0&&a?n.push(Q(`${t}Uses splits (no single recipient)`)):e.recipient===void 0?n.push($(`${t}Valid recipient address`,`Missing recipient (and no splits defined)`,`Set request.recipient to a valid 0x address, or use methodDetails.splits for multiple recipients.`)):n.push($(`${t}Valid recipient address`,`Got: ${String(e.recipient)}`,`Set request.recipient to a valid 0x-prefixed 40-hex-char address.`)),zI(e.currency)){let e=tL(r)?`testnet`:`mainnet`;n.push(Q(`${t}Valid currency address`,e))}else n.push($(`${t}Valid currency address`,`Got: ${String(e.currency)}`,`Set request.currency to a valid token address.`));dL(e,t,n,`token's smallest unit (e.g. "10000" = $0.01 for 6-decimal tokens)`)}function lL(e,t,n){dL(e,t,n,`currency's smallest unit (e.g. "100" = $1.00 for USD)`);let r=e.currency;typeof r==`string`&&/^[a-z]{3}$/i.test(r)?n.push(Q(`${t}Valid currency code`,r.toUpperCase())):n.push($(`${t}Valid currency code`,r?`Got: ${r}`:`missing`,`Must be a three-letter ISO currency code (e.g. "usd").`));let i=e.methodDetails,a=i?.networkId;a?n.push(Q(`${t}Has networkId`,a.slice(0,20))):n.push($(`${t}Has networkId`,`Missing methodDetails.networkId`,`Set methodDetails.networkId to your Stripe Business Network profile ID.`));let o=i?.paymentMethodTypes;Array.isArray(o)&&o.length>0?n.push(Q(`${t}Has paymentMethodTypes`,o.join(`, `))):n.push($(`${t}Has paymentMethodTypes`,`Missing or empty`,`Set methodDetails.paymentMethodTypes to an array (e.g. ["card"]).`))}function uL(e,t,n,r){if(zI(t.recipient)?r.push(Q(`${n}Valid recipient address`)):r.push($(`${n}Valid recipient address`,`Got: ${String(t.recipient)}`,`Set request.recipient to a valid 0x-prefixed Ethereum address.`)),zI(t.currency)){let t=tL(e)?`testnet`:`mainnet`;r.push(Q(`${n}Valid currency address`,t))}else r.push($(`${n}Valid currency address`,`Got: ${String(t.currency)}`,`Set request.currency to a valid ERC-20 token contract address.`));dL(t,n,r,`token's smallest unit`);let i=t.methodDetails?.chainId;typeof i==`number`&&i>0?r.push(Q(`${n}Has chainId`,String(i))):r.push($(`${n}Has chainId`,`Missing methodDetails.chainId`,`Set methodDetails.chainId to the EVM chain ID.`))}function dL(e,t,n,r){BI(e.amount)?n.push(Q(`${t}Amount is valid integer string`)):e.amount===void 0||e.amount===null?n.push($(`${t}Amount is valid integer string`,`Missing amount`,`Set request.amount to a string of digits in the ${r}.`)):n.push($(`${t}Amount is valid integer string`,`Got: ${String(e.amount)}`,`request.amount must be a string of digits (no decimals, no prefix).`))}async function fL(e,t,n){let r=[],i=JI(e,t,n?.query),a={[q.authorization]:`${Ax.payment} dGhpcyBpcyBnYXJiYWdl`},o;n?.body&&(o=n.body,a[`content-type`]=`application/json`);try{let e=await II(i,{method:t.method,headers:a,body:o??null});e.status===402?(r.push(Q(`Malformed credential returns 402`,`not 500`)),e.headers.get(q.wwwAuthenticate)?.startsWith(`${Ax.payment} `)?r.push(Q(`Error response includes fresh challenge`)):r.push(AI(`Error response includes fresh challenge`,`No WWW-Authenticate header`,`When rejecting an invalid credential, respond with 402 and include a fresh WWW-Authenticate: Payment challenge so the client can retry.`))):e.status>=500?r.push($(`Malformed credential returns 402`,`Got ${e.status} (server error)`,`When the Authorization header contains an invalid credential, respond with 402 (not 500). Catch credential validation errors and return a fresh challenge.`)):r.push(AI(`Malformed credential returns 402`,`Got ${e.status}`,`When the Authorization header contains an invalid Payment credential, respond with 402 and a fresh WWW-Authenticate challenge. Returning ${e.status} prevents the client from retrying with a valid payment.`))}catch(e){r.push($(`Error handling test`,e.message))}return r}function pL(e){let t=[],n=e.headers.get(`payment-required`)??e.headers.get(`x-payment-required`);if(!n)return t;let r=e.headers.get(`payment-required`)?`PAYMENT-REQUIRED`:`X-Payment-Required`;try{let e=lw(n);t.push(Q(`x402 payment challenge`,`${r} with valid x402 v${e.x402Version} payload`))}catch{t.push(AI(`x402 payment challenge`,`${r} header present but failed schema validation`,`Ensure the PAYMENT-REQUIRED header contains a valid base64-encoded JSON payload matching the x402 schema.`))}return t}const mL=[`No discovery document found, endpoints could not be automatically found.`,`MPP servers must serve an OpenAPI document at /openapi.json with x-payment-info extensions.`,`The MPP SDKs can automatically expose this endpoint. See https://mpp.dev/sdk.`,``,`To test a specific endpoint: mppx validate <url> --endpoint POST:/your/path`].join(`
|
|
244
|
+
`);Zx();const hL={fundingCurrency:J.optional(J.string()),method:J.string(),reference:J.string(),externalId:J.optional(J.string()),subscriptionId:J.optional(J.string()),status:J.literal(`success`),timestamp:Hx()};J.object(hL);const gL=J.looseObject(hL);function _L(e){let t=D.toString(e);return vL(JSON.parse(t))}function vL(e){return gL.parse(e)}vS(),Uw(),Fx(),yP(),zO(),NO(),oD(),Dk(),pk();async function yL(e,t,n){try{n||console.log(X.dim(` Provisioning testnet wallet and funding via faucet...`));let t=ge(),r=ve(t),i=j({chain:be,transport:ue()});if(XD(e)){let{chainId:t,operator:n}=e.request.methodDetails??{};if(t===be.id&&typeof n==`string`&&de(n)&&n!==he){let e=await Ie.faucet.fund(i,{account:n});await Promise.all(e.map(e=>Ne(i,{hash:e})))}}let a=await Ie.faucet.fund(i,{account:r});await Promise.all(a.map(e=>Ne(i,{hash:e}))),n||console.log(X.dim(` Using wallet: ${r.address}`));let o=e.request.currency;if(typeof o==`string`)for(let e=0;e<10;e++){let e=await Ie.token.getBalance(i,{account:r.address,token:o}).catch(()=>void 0);if(e&&e.amount>0n)break;await new Promise(e=>setTimeout(e,500))}return{methods:[...gP({account:r})]}}catch(e){t&&console.log(X.dim(` Provisioning failed: ${e.message}`));return}}async function bL(){let e=bk(),{isTempoAccount:t}=await Promise.resolve().then(()=>(pk(),BO)),{resolveTempoAccount:n}=await Promise.resolve().then(()=>($P(),bP));if(t(e)){let t=n(e);if(t)return t.wallet_address}try{return(await wk()).address}catch{return}}function xL(e){try{let{execSync:t}=m,n=t(`stripe config --list`,{encoding:`utf8`,timeout:5e3}).match(/test_mode_api_key\s*=\s*'([^']+)'/);if(n?.[1])return e&&console.log(X.dim(` Using Stripe test key from stripe CLI`)),n[1]}catch{}}async function SL(e,t,n){let r=j({chain:e,transport:ue()}),[i,a,o]=await Promise.all([n?Oe(r,{address:t,abi:se,functionName:`balanceOf`,args:[n]}):0n,Oe(r,{address:t,abi:se,functionName:`decimals`}),Oe(r,{address:t,abi:se,functionName:`symbol`}).catch(()=>void 0)]);return{balance:i,decimals:a,symbol:o??void 0}}function CL(e){return Object.values(Ve).find(t=>t.id===e)}function wL(e,t){return`$${(Number(e)/10**t).toFixed(2)}`}function TL(e){switch(e.method){case jx.evm:return`no EVM payment plugin yet`;case`solana`:return`no Solana payment plugin yet`;default:return`no plugin for ${e.method}/${e.intent}`}}async function EL(e,t,n,r){let i=[],a=JI(e,t,r.query),o=UI(r.extraHeaders),s;r.body&&(s=r.body,o[`content-type`]=`application/json`);let c;try{c=await II(a,{method:t.method,headers:o,body:s??null})}catch(e){return i.push($(`Payment: fetch challenge`,e.message)),i}if(c.status!==402)return i.push(jI(`Payment: skipped`,`Endpoint returned ${c.status}`)),i;let l;try{l=lS(c)}catch(e){return i.push($(`Payment: parse challenge`,e.message)),i}if(l.length===0)return i.push($(`Payment: parse challenge`,`No Payment challenges in response`)),i;let u=[];oL(l,new URL(a).hostname,u);let d=u.filter(e=>e.severity===`fail`);if(d.length>0)return i.push(...d),r.onResults?.(d),i;let f=await dF().catch(()=>void 0),p=l.find(e=>{if(e.method!==jx.tempo||lF(f?.config)?.some(t=>t.name===e.method&&t.intent===e.intent))return!1;let t=e.request.methodDetails;return typeof t?.chainId==`number`&&t.chainId!==PO.mainnet});if(p){let e=await yL(p,n,r.silent);if(e)try{let r=NL((e,t)=>II(e,t??{},3e4));await jL(i,await zT({methods:e.methods,polyfill:!1,async onChallenge(e,{createCredential:t}){pF(p,e);let n=await t(await aF(e,f?.config.extensions));return i.push(Q(`Payment: submitted`,`ephemeral testnet wallet`)),n},fetch:r.fetch}).fetch(a,{method:t.method,headers:o,body:s??null}),n,be,XD(p),r.receipt)}catch(e){i.push($(`Payment: create credential`,e.message))}else i.push($(`Payment: auto-provision wallet`,`Failed to create and fund testnet wallet`));r.onResults?.(i)}let m=r.interactive,h=process.env.MPPX_STRIPE_SECRET_KEY??xL(n),g=h?.startsWith(`sk_test_`)||h?.startsWith(`rk_test_`),_=new Set([jx.tempo,jx.evm,jx.stripe]);for(let e of l){if(e===p||!_.has(e.method))continue;r.silent||console.log(``);let c=i.length,l=()=>{r.onResults&&i.length>c&&r.onResults(i.slice(c))},u=`Payment [${e.method}]`;try{switch(e.method){case jx.tempo:case jx.evm:await DL(e,u,{results:i,url:a,endpoint:t,fetchHeaders:o,fetchBody:s,verbose:n,loaded:f,isInteractive:m,options:r});break;case jx.stripe:await OL(e,u,{results:i,url:a,endpoint:t,fetchHeaders:o,fetchBody:s,verbose:n,loaded:f,isInteractive:m,isStripeTestKey:g??!1,stripeKey:h,options:r})}}finally{l()}}return i}async function DL(e,t,n){let{results:r,url:i,endpoint:a,fetchHeaders:o,fetchBody:s,verbose:c,loaded:l,options:u}=n,d=e.request,f=d.methodDetails,p=BI(d.amount)?BigInt(d.amount):void 0,m=f?.decimals??d.decimals??6,h=d.currency,{plugin:g,method:_}=oF(e,l?.config);if(!g&&!_){r.push(jI(t,TL(e)));return}let v;if(!_){try{v=await bL()}catch{}if(!v){r.push(jI(t,`no wallet configured. Run "mppx account create" to create one.`));return}}let y;if(e.method===jx.tempo){let e=f?.chainId??(_?void 0:ye.id);e!==void 0&&(y=e===be.id?be:CL(e))}else if(e.method===jx.evm){let e=f?.chainId;e&&(y=CL(e))}if(p&&h&&!y){r.push(jI(t,`unable to resolve payment chain and verify token decimals`));return}let b;if(p&&h&&y)try{let n;if(e.method===jx.tempo){let e=await ak(j({chain:y,transport:ue()}),h,v??he,{requireDecimals:!0});n=e.balance,m=e.decimals,b=e.symbol}else{let e=await SL(y,h,v);n=e.balance,m=e.decimals,b=e.symbol}if(v&&n<p){let e=wL(p,m),i=wL(n,m),a=b??`tokens`;r.push(jI(t,`insufficient balance (have ${i}, need ${e} ${a} on ${y.name})`,`Fund wallet ${v} with at least ${e} ${a} on ${y.name}.`));return}}catch(e){c&&console.log(X.dim(` Balance check skipped: ${e.message}`)),r.push(jI(t,`unable to verify token balance and decimals from the payment chain`));return}let x=p?wL(p,m):`unknown amount`,S=b??(h?.length===3?h.toUpperCase():``),C=y?.name,w=`${x}${S?` ${S}`:``}${C?` on ${C}`:``}`;if(u.silent||console.log(X.dim(v?` Attempting payment with wallet ${v}`:` Attempting payment with configured method`)),!_&&y?.testnet)u.silent||console.log(X.dim(` Auto-approved: ${w} (testnet)`));else if(!u.yes&&!n.isInteractive){r.push(jI(t,`non-interactive mode, use --yes to approve`));return}else if(u.yes)u.silent||console.log(X.dim(` Auto-approved: ${w}`));else if(!await ZO(` ${X.yellow(`Pay`)} ${w}. Continue?`,!1)){r.push(jI(t,`declined`));return}let T,ee,te;if(g)try{let t=await g.setup({challenge:e,options:{network:`mainnet`},methodOpts:{}});T=t.methods,ee=t.createCredential,te=t.credentialContext}catch(e){r.push(jI(t,e.message));return}else T=[_];if(_&&XD(e)){let n=!0,u=NL((e,t)=>II(e,t??{},3e4)),d=zT({methods:[_],polyfill:!1,async onChallenge(n,{createCredential:i}){let a=await aF(n,l?.config.extensions);pF(e,n);let o=await i(a);return r.push(Q(`${t}: submitted`)),o},fetch:async(t,r)=>n?(n=!1,new Response(null,{status:402,headers:{[q.wwwAuthenticate]:$x(e)}})):u.fetch(t,r)});try{await jL(r,await d.fetch(i,{method:a.method,headers:o,body:s??null}),c,y,!0,u.receipt)}catch(e){r.push($(t,e.message))}return}let E=await kL(e,T,ee,t,r,l?.config.extensions,te,i);E&&(g?.prepareCredentialRequest?.({challenge:e,credential:E,headers:o}),await AL(r,i,a,E,o,s,c,y,pS(e),XD(e)))}async function OL(e,t,n){let{results:r,url:i,endpoint:a,fetchHeaders:o,fetchBody:s,verbose:c,loaded:l,options:u,stripeKey:d}=n,{plugin:f,method:p}=oF(e,l?.config);if(!f&&!p){r.push(jI(t,`no Stripe payment method available`));return}let m=!!(f&&!l?.config.plugins?.includes(f)&&n.isStripeTestKey),h=e.request,g=BI(h.amount)?BigInt(h.amount):void 0,_=h.decimals??2,v=h.currency,y=g?wL(g,_):`unknown amount`,b=v?.length===3?v.toUpperCase():``,x=`${y}${b?` ${b}`:``} via Stripe${m?` (testmode)`:``}`;if(m)u.silent||console.log(X.dim(` Attempting: ${x}`));else if(!u.yes&&!n.isInteractive){r.push(jI(t,`non-interactive mode, use --yes to approve`));return}else if(u.yes)u.silent||console.log(X.dim(` Auto-approved: ${x}`));else if(!await ZO(` ${X.yellow(`Pay`)} ${x}. Continue?`,!1)){r.push(jI(t,`declined`));return}let S,C,w;if(f)try{let t={paymentMethod:`pm_card_visa`};d&&(t.secretKey=d);let n=await f.setup({challenge:e,options:{},methodOpts:t});S=n.methods,C=n.createCredential,w=n.credentialContext}catch(e){r.push(jI(t,e.message));return}else S=[p];let T=await kL(e,S,C,t,r,l?.config.extensions,w,i);if(T){if(f?.prepareCredentialRequest?.({challenge:e,credential:T,headers:o}),m){let n=await II(i,{method:a.method,headers:{...o,[pS(e)]:T},body:s??null},3e4);n.status>=200&&n.status<300?r.push(Q(`${t}: successful`,`HTTP ${n.status}`)):r.push(jI(`${t}: server is in livemode`,void 0,`Run your server with a Stripe test key to automatically validate Stripe payments in testmode.`));return}await AL(r,i,a,T,o,s,c,void 0,pS(e))}}async function kL(e,t,n,r,i,a,o,s){let c=new Response(null,{status:402,headers:{[q.wwwAuthenticate]:$x(e)}});try{zw(e,new URL(s),void 0);let l=await aF(e,a,o),u;return u=n?await n(c,l):await zT({methods:t,polyfill:!1}).createCredential(c,l),i.push(Q(`${r}: submitted`)),u}catch(e){let t=e.message;t.toLowerCase().includes(`insufficient`)?i.push(jI(r,`insufficient balance: ${t}`)):i.push($(r,t));return}}async function AL(e,t,n,r,i,a,o,s,c=q.authorization,l=!1){let u;try{u=await II(t,{method:n.method,headers:{...i,[c]:r},body:a??null},3e4)}catch(t){return e.push($(`Payment: send credential`,t.message)),e}return jL(e,u,o,s,l)}async function jL(e,t,n,r,i=!1,a){if(t.status===402){let n=await t.text().catch(()=>``),r=`Payment rejected`;try{let e=JSON.parse(n);r=e.detail??e.title??r}catch{}return e.push($(`Payment: accepted`,r,`The server rejected a valid credential. Check that your payment verification logic accepts the credential format and that the payment was processed on-chain.`)),e}if(t.status>=400&&t.status<500)e.push(AI(`Payment: post-payment response`,`Got ${t.status}`,`Payment succeeded but the endpoint returned a client error. The endpoint likely requires request body parameters. Use --body to provide them.`));else if(t.status>=500)return e.push($(`Payment: server response`,`Got ${t.status}`,`Payment was accepted but the server errored while generating the response. Check server logs for the underlying error.`)),e;else e.push(Q(`Payment: successful`,`HTTP ${t.status}`));let o=t.headers.get(`content-type`)??``,s=t.headers.get(q.paymentReceipt),c=!s&&i&&XE(t),l=await t.text().catch(()=>``);if(c){let t=a?.(),n=t===void 0?ML(l):t??void 0;n?e.push(Q(`Payment receipt in event stream`,n.reference)):e.push($(`Payment receipt in event stream`,void 0,`SSE session responses without a Payment-Receipt header must end with an "event: payment-receipt" carrying the session receipt.`))}else if(!s)e.push($(`Payment-Receipt header present`,void 0,`After accepting payment, include a Payment-Receipt header with a base64url-encoded JSON object containing: method, reference, status ("success"), and timestamp (ISO 8601).`));else{e.push(Q(`Payment-Receipt header present`));try{let t=_L(s);if(e.push(Q(`Receipt parseable`)),t.status===`success`?e.push(Q(`Receipt status is "success"`)):e.push($(`Receipt status is "success"`,`Got: ${t.status}`)),t.reference){let n=/^0x[0-9a-fA-F]{64}$/.test(t.reference),r=t.reference.startsWith(`pi_`);n||r?e.push(Q(`Receipt reference valid`,t.reference.slice(0,20)+`...`)):e.push(AI(`Receipt reference format`,t.reference.slice(0,40)))}else e.push(AI(`Receipt has reference`,`No reference field`));if(t.timestamp){let n=new Date(t.timestamp),r=Date.now()-n.getTime();r<6e4?e.push(Q(`Receipt timestamp recent`,`${Math.round(r/1e3)}s ago`)):e.push(AI(`Receipt timestamp recent`,`${Math.round(r/6e4)}m ago`))}n&&console.log(X.dim(` Receipt: ${JSON.stringify(t,null,2)}`))}catch(t){e.push($(`Receipt parseable`,t.message))}}if(l.length>0)e.push(Q(`Response body non-empty`,`${o.split(`;`)[0]}, ${LI(l.length)}`));else{let n=[...t.headers.entries()].filter(([e])=>!e.startsWith(`x-`)&&![`content-type`,`content-length`,`date`,`server`,`connection`,`keep-alive`,`cache-control`,`vary`,`access-control-allow-origin`,`payment-receipt`,`payment-session`,`payment-session-snapshot`].includes(e.toLowerCase()));n.length>0?e.push(AI(`Response body empty -- data may be in headers only`,n.map(([e])=>e).join(`, `))):e.push(AI(`Response body empty`))}if(o?e.push(Q(`Content-Type header set`,o.split(`;`)[0])):e.push(AI(`Content-Type header set`)),s)try{let t=_L(s);if(t.reference&&/^0x[0-9a-fA-F]{64}$/.test(t.reference)){let n=r?.blockExplorers?.default?.url;if(n){let r=n.includes(`tempo`)?`receipt`:`tx`;e.push(Q(`On-chain transaction`,`${n}/${r}/${t.reference}`))}}}catch{}return e}function ML(e){for(let t of e.replace(/\r\n|\r/g,`
|
|
245
245
|
`).split(`
|
|
246
246
|
|
|
247
|
-
`)){let e=
|
|
248
|
-
`).
|
|
247
|
+
`)){let e=ZE(t);if(e?.type===`payment-receipt`)return e.data}}function NL(e){let t;return{async fetch(n,r){let i=await e(n,r);if(!i.body||!XE(i)||i.headers.get(q.paymentReceipt))return i;t??=null;let a=new TextDecoder,o=[],s=0,c=!1,l=!1,u=(e,n)=>{let r=c?`\r${e}`:e;c=!n&&r.endsWith(`\r`),c&&(r=r.slice(0,-1));let i=r.replace(/\r\n|\r/g,`
|
|
248
|
+
`),a=[];i.startsWith(`
|
|
249
|
+
`)&&o.at(-1)?.endsWith(`
|
|
250
|
+
`)&&(a.push(o.join(``).slice(0,-1)),o=[],s=0,i=i.slice(1));for(let e=i.indexOf(`
|
|
251
|
+
|
|
252
|
+
`);e!==-1;e=i.indexOf(`
|
|
249
253
|
|
|
250
|
-
`)
|
|
251
|
-
`);console.log(X.yellow(` ${e}`));for(let e of t)console.log(e?X.dim(` ${e}`):``);console.log(``),process.exit(1)}t.discovery.endpoints.length===0&&!e.options.endpoint&&l&&(console.log(X.dim(` Use --endpoint to specify endpoints manually.`)),console.log(``),process.exit(1));break;case`endpoint`:u++,NI(`${t.endpoint.method} ${t.endpoint.path}`);break;case`challenge`:console.log(X.dim(` Challenge`)),PI(t.results,n),t.isMpp&&(r=!0,t.isTestnet&&(o=!0),t.isMainnet&&(s=!0)),t.isNonMppPayment&&(i=!0),t.isMalformedChallenge&&(a=!0);break;case`errorHandling`:console.log(X.dim(` Error Handling`)),PI(t.results,n);break;case`payment`:t.succeeded&&(c=!0)}BL(n,{sawMppEndpoint:r,sawNonMppPaymentEndpoint:i,sawMalformedChallenge:a,sawTestnet:o,sawMainnet:s,paymentSucceeded:c},u)}});function BL(e,t,n){!t.sawMppEndpoint&&n>0&&(console.log(``),t.sawMalformedChallenge?(console.log(X.yellow(` Payment scheme detected but challenge format is invalid on ${n} endpoint(s).`)),console.log(X.dim(` The server uses WWW-Authenticate: Payment but the challenge parameters do not conform to MPP.`)),console.log(X.dim(` Fix: encode payment details as base64url JSON in a request="..." parameter. See errors above.`))):t.sawNonMppPaymentEndpoint?(console.log(X.yellow(` No MPP endpoints found. Tested ${n} endpoint(s) but none use WWW-Authenticate: Payment.`)),console.log(X.dim(` This server may use x402 or another payment protocol.`))):e.skipped>0&&e.failed===0?(console.log(X.yellow(` Could not reach payment gate on any endpoint (all returned 401/403/200).`)),console.log(X.dim(` The server may require authentication before payment. Try providing auth or use --endpoint with a public path.`))):(console.log(X.yellow(` No MPP endpoints found. Tested ${n} endpoint(s) but none use WWW-Authenticate: Payment.`)),console.log(X.dim(` This server may use x402 or another payment protocol.`))),console.log(``),process.exit(1)),console.log(``);let r=[];e.passed>0&&r.push(X.green(`${e.passed} passed`)),e.failed>0&&r.push(X.red(`${e.failed} failed`)),e.warnings>0&&r.push(X.yellow(`${e.warnings} warning(s)`)),e.suggested>0&&r.push(X.cyan(`${e.suggested} suggested`)),e.skipped>0&&r.push(X.yellow(`${e.skipped} skipped`)),console.log(`${X.bold(`Summary:`)} ${r.join(`, `)}`),t.paymentSucceeded&&t.sawTestnet&&!t.sawMainnet?(console.log(``),console.log(X.dim(` Tip: also validate your mainnet server to confirm real payments work end-to-end.`))):t.sawMainnet&&!t.sawTestnet&&(console.log(``),console.log(X.dim(` Tip: also validate your testnet server for free. This CLI automatically provisions and funds a testnet wallet for testing.`))),console.log(``),e.failed>0&&process.exit(1)}function VL(e){return UL(e)?e.offers:[e]}function HL(e){let{_canonicalRequest:t,intent:n,name:r}=e,i=t.methodDetails??{},a=WL(t.amount)??WL(i.amount)??null,o=WL(t.currency)??WL(i.currency),s=WL(e.description)??WL(t.description),c={amount:a,...o?{currency:o}:{},...s?{description:s}:{},intent:n,method:r},l=new Set([`amount`,`currency`,`description`,`methodDetails`]);for(let[e,n]of Object.entries(t))!l.has(e)&&n!==void 0&&(c[e]=n);return c}function UL(e){return`offers`in e&&!(`_canonicalRequest`in e)}function WL(e){return typeof e==`string`?e:void 0}var GL=F((()=>{})),KL=Qe({generate:()=>qL,generateProxy:()=>JL});function qL(e,t){let n=e.methods,r=new Map,i={};for(let e of n)r.set(`${e.name}/${e.intent}`,e),i[e.intent]=(i[e.intent]??0)+1;for(let e of n)i[e.intent]===1&&r.set(e.intent,e);let a=t.routes.map(e=>XL(e,r));return YL({info:{title:t.info?.title??e.realm,version:t.info?.version??`1.0.0`},routes:a,serviceInfo:t.serviceInfo})}function JL(e){let t=e.routes.map(t=>({...t,path:ZL(e.basePath,t.path)}));return YL({info:{title:e.info?.title??`API Proxy`,version:e.info?.version??`1.0.0`},routes:t,serviceInfo:e.serviceInfo})}function YL(e){let t={};for(let n of e.routes){let e=n.method.toLowerCase(),r={responses:{...n.payment?{402:{description:`Payment Required`}}:{},200:{description:`Successful response`}}};n.payment&&(r[`x-payment-info`]=uE.parse(n.payment)),n.summary&&(r.summary=n.summary),n.requestBody&&(r.requestBody=n.requestBody),t[n.path]||(t[n.path]={}),t[n.path][e]=r}let n={info:e.info,openapi:`3.1.0`,paths:t};return e.serviceInfo&&(n[`x-service-info`]=e.serviceInfo),n}function XL(e,t){if(`handler`in e){let t=e.handler._internal;if(!t)throw Error(`Route ${e.method.toUpperCase()} ${e.path} is missing discovery metadata`);return{method:e.method,path:e.path,payment:{offers:VL(t).map(HL)},...e.requestBody?{requestBody:e.requestBody}:{},...e.summary?{summary:e.summary}:{}}}let n=t.get(e.intent);if(!n)throw Error(`Unknown intent "${e.intent}" for route ${e.method.toUpperCase()} ${e.path}. Available: ${[...t.keys()].join(`, `)}`);let{description:r,...i}=e.options,a={_canonicalRequest:Lx(n,i),...typeof r==`string`?{description:r}:{},intent:n.intent,name:n.name};return{method:e.method,path:e.path,payment:HL(a),...e.requestBody?{requestBody:e.requestBody}:{},...e.summary?{summary:e.summary}:{}}}function ZL(e,t){if(!e)return t;let n=e.startsWith(`/`)?e:`/${e}`;return`${n.endsWith(`/`)?n.slice(0,-1):n}${t}`}var QL=F((()=>{zx(),gE(),GL()}));Ox(),_S(),IT(),Hw(),iw(),_w(),bw(),Fx(),MO(),hw(),qS(),BC(),Ek(),fk();const $L=`0.16.0`,eR=p.object({address:p.string(),isDefault:p.boolean().optional(),name:p.string(),source:p.string().optional()}),tR=p.object({address:p.string(),balances:p.array(p.string()).optional(),name:p.string(),type:p.string().optional()}),nR=p.object({message:p.string(),path:p.string(),severity:p.string()}),rR=p.object({description:p.string().optional(),id:p.string(),name:p.string().optional(),paidEndpoints:p.number(),status:p.string().optional(),url:p.string().optional()}),iR=p.object({description:p.string().optional(),method:p.string(),path:p.string(),payment:p.unknown().optional()});function aR(e){return e.format===`json`&&e.formatExplicit}function oR(e,t,n){if(aR(e))return e.ok(t);n()}async function sR(t){if(!t.body)return;let n=t.body.getReader();try{for(;;){let{done:t,value:r}=await n.read();if(t)break;process.stdout.write(Buffer.from(r))||await e(process.stdout,`drain`)}}finally{n.releaseLock()}}function cR(){return process.stdin.isTTY===!1&&process.stdin.listenerCount(`data`)===0&&process.stdin.listenerCount(`readable`)===0}function lR(e){return typeof e==`string`?e:void 0}function uR(e){return Array.isArray(e.endpoints)?e.endpoints.filter(e=>typeof e==`object`&&!!e):[]}function dR(e){let t=uR(e);return{...lR(e.description)?{description:lR(e.description)}:{},id:lR(e.id)??lR(e.name)??`unknown`,...lR(e.name)?{name:lR(e.name)}:{},paidEndpoints:t.filter(e=>e.payment).length,...lR(e.status)?{status:lR(e.status)}:{},...lR(e.serviceUrl)||lR(e.url)?{url:lR(e.serviceUrl)??lR(e.url)}:{}}}function fR(e){return{...lR(e.description)?{description:lR(e.description)}:{},method:lR(e.method)??`GET`,path:lR(e.path)??`/`,...e.payment===void 0?{}:{payment:e.payment}}}function pR(e){if(!e)return`free`;if(typeof e!=`object`)return String(e);let t=e,n=lR(t.amount),r=lR(t.currency),i=lR(t.method),a=lR(t.intent);return[n,r,i&&a?`${i}/${a}`:i??a].filter(Boolean).join(` `)}function mR(e){return e.request.currency??e.request.asset}function hR(e,t){if(!t)return[...e];let n=t.toLowerCase();return e.filter(e=>{let t=mR(e);return typeof t==`string`&&t.toLowerCase()===n})}async function gR(e,t,n={}){let r=()=>rw().getChallenges(e),i=()=>gw().getChallenges(n.ignoreX402ResponseUrl?new Response(null,{headers:e.headers,status:e.status}):e);if(t===`mpp`)return r();if(t===`x402`)return i();let a=[],o;try{a=await r()}catch(e){o=e}let s=[],c;try{s=await i()}catch(e){c=e}if(a.length||s.length)return[...a,...s];if(o)throw o;if(c)throw c;return[]}function _R(e){return vw({name:`selected-challenge`,isPaymentRequired:e=>e.status===402,getChallenges:()=>[e],setCredential:e=>e})}function vR(e,t){if(!GS(e))return new Response(null,{status:402,headers:{[q.wwwAuthenticate]:$x(e)}});let n=e.request;return n.resource?new Response(null,{status:402,headers:{[SC]:fw({accepts:[_C(n)],...n.extensions&&{extensions:n.extensions},resource:n.resource,x402Version:2})}}):t}function yR(e){let{host:t,hostname:n,protocol:r}=new URL(e);return r===`https:`||!n.endsWith(`.localhost`)||n===`localhost`?{url:e}:{host:t,url:e.replace(n,`127.0.0.1`)}}async function bR(e,t,n,r){let i=t,a=yR(i),o={...n,redirect:`manual`,headers:qw(n.headers)};a.host&&CR(o.headers,a.host);for(let t=0;t<=20;t++){let n=await e(a.url,o),s=n.headers.get(`location`);if(!r||!s||![301,302,303,307,308].includes(n.status))return{init:o,logicalUrl:i,response:n,target:a};if(t===20)throw TypeError(`Too many redirects`);await n.body?.cancel().catch(()=>{});let c=new URL(s,i),l=new URL(i),u=qw(o.headers);if(c.origin!==l.origin)for(let e of[`authorization`,`cookie`,`host`,`proxy-authorization`])for(let t of Object.keys(u))t.toLowerCase()===e&&delete u[t];let d=(o.method??(o.body?`POST`:`GET`)).toUpperCase(),f=n.status===303&&d!==`GET`&&d!==`HEAD`||(n.status===301||n.status===302)&&d===`POST`;if(f)for(let e of[`content-encoding`,`content-language`,`content-length`,`content-location`,`content-type`])for(let t of Object.keys(u))t.toLowerCase()===e&&delete u[t];i=c.href,a=yR(i),a.host&&CR(u,a.host);let p={...o};f&&(delete p.body,p.method=`GET`),o={...p,headers:u,redirect:`manual`}}throw TypeError(`Too many redirects`)}function xR(e,t,n){let r=new URL(e),i=new URL(n||e);return i.origin!==r.origin&&SR(i),yR(i.href)}function SR(e){throw new I({code:`UNSAFE_PAYMENT_REDIRECT`,message:`Refusing to send a payment credential to redirected origin ${e.origin}.`,exitCode:1})}function CR(e,t){for(let t of Object.keys(e))t.toLowerCase()===`host`&&delete e[t];t&&(e.Host=t)}function wR(e){let t=e.request.resource;return typeof t?.url==`string`?t.url:void 0}async function TR(){let e=process.env.MPPX_SERVICES_URL??`https://mpp.dev/api/services`,t=await globalThis.fetch(e);if(!t.ok)throw new I({code:`SERVICES_FETCH_FAILED`,message:`Failed to fetch services registry: HTTP ${t.status}`,exitCode:1});let n=await t.json();if(!n||typeof n!=`object`||!Array.isArray(n.services))throw new I({code:`SERVICES_INVALID`,message:`Services registry response did not contain a services array.`,exitCode:1});return n.services}function ER(e,t){let n=t.toLowerCase();return e.find(e=>{let t=lR(e.id)?.toLowerCase(),r=lR(e.name)?.toLowerCase();return t===n||r===n})}const DR=cb(`mppx`,{mcp:{tools:{discovery:`direct`}},version:$L,description:`Make HTTP requests with automatic payment handling`,usage:[{suffix:`<url> [options]`}],args:p.object({url:p.string().describe(`URL to make request to`)}),options:p.object({account:p.string().optional().describe(`Account name (env: MPPX_ACCOUNT)`),autoSwap:p.boolean().optional().describe(`Auto-swap source tokens into payment currency`),config:p.string().optional().describe(`Path to config file`),confirm:p.boolean().optional().default(!1).describe(`Show confirmation prompts`),currency:p.string().optional().describe(`Payment currency/token address to select`),data:p.string().optional().describe(`Send request body (implies POST unless -X is set)`),fail:p.boolean().optional().describe(`Fail silently on HTTP errors (exit 22)`),header:p.array(p.string()).optional().describe(`Add header (repeatable)`),include:p.boolean().optional().describe(`Include response headers in output`),insecure:p.boolean().optional().describe(`Skip TLS certificate verification (disables payment retries)`),jsonBody:p.string().optional().describe(`Send JSON body (sets Content-Type and Accept, implies POST)`),location:p.boolean().optional().describe(`Follow redirects`),method:p.string().optional().describe(`HTTP method`),methodOpt:p.array(p.string()).optional().describe(`Method-specific option (key=value, repeatable)`),network:p.enum([`mainnet`,`testnet`]).optional().describe(`Tempo network`),payWith:p.string().optional().describe(`Source token for Tempo auto-swap`),protocol:p.enum([`auto`,`mpp`,`x402`]).default(`auto`).describe(`Payment protocol to use`),rpcUrl:p.string().optional().describe(`RPC endpoint, defaults to public RPC for chain (env: MPPX_RPC_URL)`),session:p.string().optional().default(`auto`).refine(e=>e===`auto`||e===`new`||/^0x[0-9a-fA-F]{64}$/.test(e),`Expected auto, new, or a 32-byte channel ID`).describe(`Session selection: auto, new, or channel ID`),silent:p.boolean().default(!1).describe(`Silent mode (suppress progress and info)`),slippage:p.number().optional().describe(`Tempo auto-swap max slippage percentage`),userAgent:p.string().optional().describe(`Set User-Agent header`),verbose:p.number().default(0).meta({count:!0}).describe(`Verbosity (-v details, -vv headers)`)}),alias:{account:`a`,config:`c`,data:`d`,fail:`f`,header:`H`,include:`i`,insecure:`k`,jsonBody:`J`,location:`L`,method:`X`,methodOpt:`M`,rpcUrl:`r`,silent:`s`,userAgent:`A`,verbose:`v`},examples:[{args:{url:`mpp.dev/api/ping/paid`},description:`Make a payment request`}],async run(e){let t=e.options.silent?e=>{}:e=>process.stderr.write(e),n=await uF(e.options.config);n&&e.options.verbose>=1&&t(`${X.dim(`Using config`)} ${X.blue(c.relative(process.cwd(),n.path))}\n`);let r=Ok(),i={"User-Agent":e.options.userAgent??`mppx/${$L}${r?` AIAgent/${r}`:``}`};if(e.options.header)for(let t of e.options.header){let n=t.indexOf(`:`);if(n===-1)return e.error({code:`INVALID_HEADER`,message:`Invalid header format: ${t}`,exitCode:2});i[t.slice(0,n).trim()]=t.slice(n+1).trim()}let a=sF(n?.config);a&&!Object.keys(i).some(e=>e.toLowerCase()===`accept-payment`)&&(i[`Accept-Payment`]=a);let o=(()=>{let t=/^https?:\/\//.test(e.args.url),n=/^(localhost|.*\.localhost|127\.0\.0\.1|\[::1\])(:\d+)?/.test(e.args.url);return t?e.args.url:`${n?`http`:`https`}://${e.args.url}`})(),{hostname:s}=new URL(o),l=e.options.insecure??!1,u=l?async(e,t)=>{let n=process.env.NODE_TLS_REJECT_UNAUTHORIZED;process.env.NODE_TLS_REJECT_UNAUTHORIZED=`0`;try{return await globalThis.fetch(e,t)}finally{n===void 0?delete process.env.NODE_TLS_REJECT_UNAUTHORIZED:process.env.NODE_TLS_REJECT_UNAUTHORIZED=n}}:globalThis.fetch,d=yR(o),f=d.url;d.host&&(i.Host=d.host);try{let r=KO(e.options.methodOpt),a=DF(),s={redirect:e.options.location?`follow`:`manual`};e.options.jsonBody?(s.body=e.options.jsonBody,i[`Content-Type`]??=`application/json`,i.Accept??=`application/json`):e.options.data&&(s.body=e.options.data),e.options.method?s.method=e.options.method.toUpperCase():s.body&&(s.method=`POST`),Object.keys(i).length>0&&(s.headers=i);let c={include:e.options.include??!1,verbose:e.options.verbose,silent:e.options.silent};e.options.verbose>=2&&BO(o,s,t);let p=await bR(u,o,s,e.options.location??!1),m=p.response;if(l&&m.status===402)return e.error({code:`INSECURE_PAYMENT`,message:`Payment requires verified TLS. Install a trusted certificate and omit --insecure.`,exitCode:2});if(m.status!==402){if(e.options.session!==`auto`)return e.error({code:`UNSUPPORTED_SESSION`,message:`--session requires a tempo/session payment challenge.`,exitCode:2});if(e.options.fail&&m.status>=400)return e.error({code:`HTTP_ERROR`,message:`HTTP error ${m.status}`,exitCode:22});VO(m,c),await sR(m);return}let h=m.url?new URL(m.url):void 0,g=d.host!==void 0&&h?.hostname===`127.0.0.1`,_=await gR(m,e.options.protocol,{ignoreX402ResponseUrl:g});if(_.length===0)return e.error({code:`UNSUPPORTED_PROTOCOL`,message:e.options.protocol===`auto`?`Server did not offer a payment challenge.`:`Server did not offer an ${e.options.protocol} payment challenge.`,exitCode:2});let v=hR(_,e.options.currency);if(e.options.currency&&v.length===0){let t=_.map(mR).filter(e=>typeof e==`string`).join(`, `);return e.error({code:`UNSUPPORTED_CURRENCY`,message:`Server did not offer payment currency ${e.options.currency}.${t?` Offered currencies: ${t}.`:``}`,exitCode:2})}let y=cF(n?.config)?.length?v:await xP(v,{options:{account:e.options.account,network:e.options.network,rpcUrl:e.options.rpcUrl}}),b=oF(y,n?.config);if(!b){let t=y.map(e=>`${e.method}/${e.intent}`).join(`, `);return e.error({code:`UNSUPPORTED_METHOD`,message:`Unsupported payment method. Server offers: ${t}. Add it to mppx.config.ts using defineConfig().`,exitCode:2})}let{challenge:x,plugin:S,method:C}=b,w=GS(x),T=w?void 0:xR(o,d,p.logicalUrl);if(!w)try{Rw(x,new URL(p.logicalUrl||o),void 0)}catch(t){return e.error({code:`UNTRUSTED_PROOF_REALM`,message:t.message,exitCode:1})}let ee=vR(x,m),te=x.request.currency??``,E=x.request.decimals??6,ne,O;S&&(O=await S.setup({challenge:x,options:{account:e.options.account,autoSwap:e.options.autoSwap,network:e.options.network,payWith:e.options.payWith,rpcUrl:e.options.rpcUrl,slippage:e.options.slippage},methodOpts:r}),te=O.tokenSymbol,E=O.tokenDecimals,ne=O.explorerUrl);let re=!e.options.silent&&e.options.confirm,k=new Set;{VO(m,x.method===`tempo`&&x.intent===`session`&&e.options.include?{...c,include:!1,verbose:Math.max(c.verbose,2)}:c);let n=(()=>{let e=new Set([`id`,`request`]),t=[];for(let[n,r]of Object.entries(x))e.has(n)||r===void 0||t.push([n,WO(n,r)]);return t.sort(([e],[t])=>e.localeCompare(t))})(),r={tokenSymbol:te,tokenDecimals:E,explorerUrl:ne},i=(()=>{let e=new Set([`decimals`,`currency`,`methodDetails`]),t=[];for(let[n,i]of Object.entries(x.request))e.has(n)||i===void 0||t.push([n,HO(n,i,r)]);return t.sort(([e],[t])=>e.localeCompare(t))})(),a=(()=>{let e=x.request.methodDetails;if(!e)return[];let t=[];for(let[n,i]of Object.entries(e))if(i!==void 0){if(n===`memo`&&typeof i==`string`){let e=UO(i);t.push([n,e?`${e}\n${X.dim(i)}`:i])}else t.push([n,HO(n,i,r)])}return t.sort(([e],[t])=>e.localeCompare(t))})(),o=[[`Challenge`,n],[`Request`,i],...a.length?[[`Details`,a]]:[]];for(let[,e]of o)for(let[t]of e)k.add(t);let s=Math.max(...o.flatMap(([,e])=>e.map(([e])=>e.length))),l=` ${``.padEnd(s)} `;if(e.options.verbose>=1||re){t(`${X.bold(X.yellow(`Payment Required`))}\n`);for(let[e,n]of o){t(`${X.bold(e)}\n`);for(let[e,r]of n){let[n,...i]=r.split(`
|
|
254
|
+
`))a.push(o.join(``)+i.slice(0,e)),o=[],s=0,i=i.slice(e+2);i&&(o.push(i),s+=i.length),n&&(a.push(o.join(``)),o=[],s=0),l&&a.length>0&&(a.shift(),l=!1),s>1048576&&(o=o.at(-1)?.endsWith(`
|
|
255
|
+
`)?[`
|
|
256
|
+
`]:[],s=o.length,l=!0);for(let e of a){let n=ZE(e);n?.type===`payment-receipt`&&!t&&(t=n.data)}},d=i.body.pipeThrough(new TransformStream({transform(e,t){u(a.decode(e,{stream:!0}),!1),t.enqueue(e)},flush(){u(a.decode(),!0)}})),f=new Response(d,{headers:i.headers,status:i.status,statusText:i.statusText});return Object.defineProperty(f,"url",{value:i.url}),f},receipt:()=>t}}async function*PL(e){let t=e.url.replace(/\/$/,``).replace(/\/openapi\.json$/i,``),n=e.verbose??!1,r=await zL(t,e);yield{phase:`discovery`,discovery:r,results:r.checks};for(let i of r.endpoints){yield{phase:`endpoint`,endpoint:i};let a,o=!1;e.endpoint?a=e.body:(a=HI(e.body,i.path),!a&&r.doc&&(a=qI(r.doc,i),o=!!a));let{results:s,resolvedBody:c,challenges:l}=await nL(t,i,n,{body:a,bodyIsAutogenerated:o,query:e.query,extraHeaders:e.headers,discoveryDoc:r.doc??void 0}),u=c??a,d=s.some(e=>e.severity===`pass`&&e.label===`Challenge parseable`),f=!s.some(e=>e.severity===`fail`),p=(l??[]).filter(e=>e.method!==`stripe`).map(e=>e.request.methodDetails?.chainId).filter(e=>typeof e==`number`),m=p.some(RL),h=p.some(e=>!RL(e)),g=!d&&s.some(e=>e.label===`Not an MPP endpoint`),_=s.some(e=>e.severity===`pass`&&e.label===`WWW-Authenticate header present`),v=s.some(e=>e.severity===`fail`&&e.label===`Challenge parseable`);if(yield{phase:`challenge`,endpoint:i,results:s,isMpp:d,isTestnet:m,isMainnet:h,isNonMppPayment:g,isMalformedChallenge:!d&&_&&v,methods:l?.map(e=>e.method)??[]},d&&(yield{phase:`errorHandling`,endpoint:i,results:await fL(t,i,{body:u,query:e.query})},!e.skipPayment&&f)){let r=e.onPaymentResults,a=await EL(t,i,n,{body:u,query:e.query,extraHeaders:e.headers,yes:e.yes,silent:!r,interactive:e.interactive,...r&&{onResults:r}});yield{phase:`payment`,endpoint:i,results:a,succeeded:a.some(e=>e.severity===`pass`&&e.label===`Payment: successful`)}}}}async function FL(e){let t=e.url.replace(/\/$/,``).replace(/\/openapi\.json$/i,``),n,r=[],i,a=!1,o=!1;for await(let t of PL(e))switch(t.phase){case`discovery`:n=t.discovery;break;case`endpoint`:i={method:t.endpoint.method,path:t.endpoint.path,challenge:[],errorHandling:[],payment:[]},r.push(i);break;case`challenge`:i&&(i.challenge=t.results),t.isMpp&&(t.isTestnet&&(a=!0),t.isMainnet&&(o=!0));break;case`errorHandling`:i&&(i.errorHandling=t.results);break;case`payment`:i&&(i.payment=t.results)}let s={passed:0,failed:0,warnings:0,suggested:0,skipped:0};if(n)for(let e of n.checks)e.severity===`pass`?s.passed++:e.severity===`fail`?s.failed++:e.severity===`warn`?s.warnings++:e.severity===`suggested`?s.suggested++:e.severity===`skip`&&s.skipped++;for(let e of r)for(let t of[...e.challenge,...e.errorHandling,...e.payment])t.severity===`pass`?s.passed++:t.severity===`fail`?s.failed++:t.severity===`warn`?s.warnings++:t.severity===`suggested`?s.suggested++:t.severity===`skip`&&s.skipped++;if(!n)throw Error(`Discovery phase did not complete`);let c=IL(r,n,{sawTestnet:a,sawMainnet:o});return{url:t,discovery:n,endpoints:r,summary:s,suggestions:c}}function IL(e,t,n){let r=[],i=e.flatMap(e=>[...e.challenge,...e.payment]);t.found||r.push(mL);let a=n.sawMainnet,o=n.sawTestnet,s=i.some(e=>e.label.includes(`[stripe]`)&&e.label.includes(`livemode`));return a&&!o?r.push(`Validate your testnet server to test without real funds (Tempo wallets are automatically provisioned).`):o&&!a&&r.push(`Validate your mainnet server to confirm real payments work end-to-end.`),s&&r.push(`Validate your testmode Stripe server to test card payments end-to-end (auto-pays with test card).`),r}const LL=Object.values(Ve);function RL(e){return LL.find(t=>t.id===e)?.testnet===!0}async function zL(e,t){let n=[],r=[],i=null,a=!1,o=!1;n.push(await GI(e));let s=new URL(e).origin,c;t.discoveryPath?c=[new URL(t.discoveryPath,e+`/`).href.replace(/\/openapi\.json$/i,``)]:(c=[e,s,`${s}/api`],c=[...new Set(c)]);let l,u=[];for(let e of c)if(l=await WI(e),`error`in l)u.push(`${e}/openapi.json: ${l.error}`);else break;if(!l||`error`in l)n.push({label:`Document found`,detail:u.join(`; `),hint:`MPP servers must serve an OpenAPI document at /openapi.json with x-payment-info extensions.`,severity:`fail`});else{a=!0,n.push({label:`Document found and parseable`,severity:`pass`});let e=vE(l.doc),t=e.filter(e=>e.severity===`error`),r=e.filter(e=>e.severity===`warning`);if(t.length>0){n.push({label:`Valid OpenAPI structure`,detail:`${t.length} error(s)`,severity:`fail`});for(let e of t)n.push({label:e.message,detail:e.path,severity:`fail`})}else o=!0,n.push({label:`Valid OpenAPI structure`,severity:`pass`});for(let e of r)n.push({label:e.message,detail:e.path,severity:`warn`});i=l.doc}if(t.endpoint){let e=VI(t.endpoint);e&&r.push(e)}else if(i){r=KI(i);let e=BigInt(`999999999999999999`);r.sort((t,n)=>{let r=BI(t.amount)?BigInt(t.amount):e,i=BI(n.amount)?BigInt(n.amount):e;return r<i?-1:+(r>i)}),r.length>0?n.push({label:`Paid endpoints found`,detail:`${r.length} endpoint(s)`,severity:`pass`}):n.push({label:`Paid endpoints found`,detail:`No endpoints with x-payment-info`,severity:`warn`})}return{found:a,valid:o,endpoints:r,checks:n,doc:i}}Ox(),pk();const BL=cb(`validate`,{description:`Validate an MPP server implementation end-to-end`,args:p.object({url:p.string().describe(`Base URL of the MPP server to validate`)}),options:p.object({endpoint:p.string().optional().describe(`Endpoint to test (METHOD:path). Skips discovery.`),body:p.string().optional().describe(`Request body. With --endpoint, used directly. In discovery mode, JSON with / keys is a per-path mapping.`),query:p.array(p.string()).optional().describe(`Query parameter (key=value, repeatable)`),header:p.array(p.string()).optional().describe(`Request header (key:value, repeatable)`),verbose:p.number().default(0).meta({count:!0}).describe(`Verbosity level`),yes:p.boolean().default(!1).describe(`Auto-approve mainnet payments`),outputJson:p.boolean().default(!1).describe(`Output results as JSON (auto-enabled in known agent environments)`)}),alias:{endpoint:`e`,header:`H`,verbose:`v`,yes:`y`,outputJson:`j`},async run(e){if(e.options.outputJson||JO()){let t=await FL({url:e.args.url,endpoint:e.options.endpoint,body:e.options.body,query:e.options.query,headers:e.options.header,verbose:e.options.verbose>0,yes:e.options.yes,interactive:!1});console.log(JSON.stringify(t,null,2));let n=t.endpoints.length===0&&!e.options.endpoint;(t.summary.failed>0||!t.discovery.found||n)&&process.exit(1);return}let t=e.args.url.replace(/\/$/,``).replace(/\/openapi\.json$/i,``);console.log(`\n${X.bold(`mppx validate`)} ${X.dim(t)}\n`);let n={passed:0,failed:0,warnings:0,suggested:0,skipped:0},r=!1,i=!1,a=!1,o=!1,s=!1,c=!1,l=!1,u=0;for await(let t of PL({url:e.args.url,endpoint:e.options.endpoint,body:e.options.body,query:e.options.query,headers:e.options.header,verbose:e.options.verbose>0,yes:e.options.yes,interactive:!!process.stdin.isTTY,onPaymentResults:e=>FI(e,n)}))switch(t.phase){case`discovery`:if(PI(`Discovery (/openapi.json)`),FI(t.results,n),l=t.discovery.found,!l&&!e.options.endpoint){console.log(``);let[e,...t]=mL.split(`
|
|
257
|
+
`);console.log(X.yellow(` ${e}`));for(let e of t)console.log(e?X.dim(` ${e}`):``);console.log(``),process.exit(1)}t.discovery.endpoints.length===0&&!e.options.endpoint&&l&&(console.log(X.dim(` Use --endpoint to specify endpoints manually.`)),console.log(``),process.exit(1));break;case`endpoint`:u++,PI(`${t.endpoint.method} ${t.endpoint.path}`);break;case`challenge`:console.log(X.dim(` Challenge`)),FI(t.results,n),t.isMpp&&(r=!0,t.isTestnet&&(o=!0),t.isMainnet&&(s=!0)),t.isNonMppPayment&&(i=!0),t.isMalformedChallenge&&(a=!0);break;case`errorHandling`:console.log(X.dim(` Error Handling`)),FI(t.results,n);break;case`payment`:t.succeeded&&(c=!0)}VL(n,{sawMppEndpoint:r,sawNonMppPaymentEndpoint:i,sawMalformedChallenge:a,sawTestnet:o,sawMainnet:s,paymentSucceeded:c},u)}});function VL(e,t,n){!t.sawMppEndpoint&&n>0&&(console.log(``),t.sawMalformedChallenge?(console.log(X.yellow(` Payment scheme detected but challenge format is invalid on ${n} endpoint(s).`)),console.log(X.dim(` The server uses WWW-Authenticate: Payment but the challenge parameters do not conform to MPP.`)),console.log(X.dim(` Fix: encode payment details as base64url JSON in a request="..." parameter. See errors above.`))):t.sawNonMppPaymentEndpoint?(console.log(X.yellow(` No MPP endpoints found. Tested ${n} endpoint(s) but none use WWW-Authenticate: Payment.`)),console.log(X.dim(` This server may use x402 or another payment protocol.`))):e.skipped>0&&e.failed===0?(console.log(X.yellow(` Could not reach payment gate on any endpoint (all returned 401/403/200).`)),console.log(X.dim(` The server may require authentication before payment. Try providing auth or use --endpoint with a public path.`))):(console.log(X.yellow(` No MPP endpoints found. Tested ${n} endpoint(s) but none use WWW-Authenticate: Payment.`)),console.log(X.dim(` This server may use x402 or another payment protocol.`))),console.log(``),process.exit(1)),console.log(``);let r=[];e.passed>0&&r.push(X.green(`${e.passed} passed`)),e.failed>0&&r.push(X.red(`${e.failed} failed`)),e.warnings>0&&r.push(X.yellow(`${e.warnings} warning(s)`)),e.suggested>0&&r.push(X.cyan(`${e.suggested} suggested`)),e.skipped>0&&r.push(X.yellow(`${e.skipped} skipped`)),console.log(`${X.bold(`Summary:`)} ${r.join(`, `)}`),t.paymentSucceeded&&t.sawTestnet&&!t.sawMainnet?(console.log(``),console.log(X.dim(` Tip: also validate your mainnet server to confirm real payments work end-to-end.`))):t.sawMainnet&&!t.sawTestnet&&(console.log(``),console.log(X.dim(` Tip: also validate your testnet server for free. This CLI automatically provisions and funds a testnet wallet for testing.`))),console.log(``),e.failed>0&&process.exit(1)}function HL(e){return WL(e)?e.offers:[e]}function UL(e){let{_canonicalRequest:t,intent:n,name:r}=e,i=t.methodDetails??{},a=GL(t.amount)??GL(i.amount)??null,o=GL(t.currency)??GL(i.currency),s=GL(e.description)??GL(t.description),c={amount:a,...o?{currency:o}:{},...s?{description:s}:{},intent:n,method:r},l=new Set([`amount`,`currency`,`description`,`methodDetails`]);for(let[e,n]of Object.entries(t))!l.has(e)&&n!==void 0&&(c[e]=n);return c}function WL(e){return`offers`in e&&!(`_canonicalRequest`in e)}function GL(e){return typeof e==`string`?e:void 0}var KL=F((()=>{})),qL=Qe({generate:()=>JL,generateProxy:()=>YL});function JL(e,t){let n=e.methods,r=new Map,i={};for(let e of n)r.set(`${e.name}/${e.intent}`,e),i[e.intent]=(i[e.intent]??0)+1;for(let e of n)i[e.intent]===1&&r.set(e.intent,e);let a=t.routes.map(e=>ZL(e,r));return XL({info:{title:t.info?.title??e.realm,version:t.info?.version??`1.0.0`},routes:a,serviceInfo:t.serviceInfo})}function YL(e){let t=e.routes.map(t=>({...t,path:QL(e.basePath,t.path)}));return XL({info:{title:e.info?.title??`API Proxy`,version:e.info?.version??`1.0.0`},routes:t,serviceInfo:e.serviceInfo})}function XL(e){let t={};for(let n of e.routes){let e=n.method.toLowerCase(),r={responses:{...n.payment?{402:{description:`Payment Required`}}:{},200:{description:`Successful response`}}};n.payment&&(r[`x-payment-info`]=dE.parse(n.payment)),n.summary&&(r.summary=n.summary),n.requestBody&&(r.requestBody=n.requestBody),t[n.path]||(t[n.path]={}),t[n.path][e]=r}let n={info:e.info,openapi:`3.1.0`,paths:t};return e.serviceInfo&&(n[`x-service-info`]=e.serviceInfo),n}function ZL(e,t){if(`handler`in e){let t=e.handler._internal;if(!t)throw Error(`Route ${e.method.toUpperCase()} ${e.path} is missing discovery metadata`);return{method:e.method,path:e.path,payment:{offers:HL(t).map(UL)},...e.requestBody?{requestBody:e.requestBody}:{},...e.summary?{summary:e.summary}:{}}}let n=t.get(e.intent);if(!n)throw Error(`Unknown intent "${e.intent}" for route ${e.method.toUpperCase()} ${e.path}. Available: ${[...t.keys()].join(`, `)}`);let{description:r,...i}=e.options,a={_canonicalRequest:Lx(n,i),...typeof r==`string`?{description:r}:{},intent:n.intent,name:n.name};return{method:e.method,path:e.path,payment:UL(a),...e.requestBody?{requestBody:e.requestBody}:{},...e.summary?{summary:e.summary}:{}}}function QL(e,t){if(!e)return t;let n=e.startsWith(`/`)?e:`/${e}`;return`${n.endsWith(`/`)?n.slice(0,-1):n}${t}`}var $L=F((()=>{zx(),_E(),KL()}));Ox(),vS(),LT(),Uw(),aw(),vw(),xw(),Fx(),NO(),gw(),JS(),VC(),Dk(),pk();const eR=`0.17.0`,tR=p.object({address:p.string(),isDefault:p.boolean().optional(),name:p.string(),source:p.string().optional()}),nR=p.object({address:p.string(),balances:p.array(p.string()).optional(),name:p.string(),type:p.string().optional()}),rR=p.object({message:p.string(),path:p.string(),severity:p.string()}),iR=p.object({description:p.string().optional(),id:p.string(),name:p.string().optional(),paidEndpoints:p.number(),status:p.string().optional(),url:p.string().optional()}),aR=p.object({description:p.string().optional(),method:p.string(),path:p.string(),payment:p.unknown().optional()});function oR(e){return e.format===`json`&&e.formatExplicit}function sR(e,t,n){if(oR(e))return e.ok(t);n()}async function cR(t){if(!t.body)return;let n=t.body.getReader();try{for(;;){let{done:t,value:r}=await n.read();if(t)break;process.stdout.write(Buffer.from(r))||await e(process.stdout,`drain`)}}finally{n.releaseLock()}}function lR(){return process.stdin.isTTY===!1&&process.stdin.listenerCount(`data`)===0&&process.stdin.listenerCount(`readable`)===0}function uR(e){return typeof e==`string`?e:void 0}function dR(e){return Array.isArray(e.endpoints)?e.endpoints.filter(e=>typeof e==`object`&&!!e):[]}function fR(e){let t=dR(e);return{...uR(e.description)?{description:uR(e.description)}:{},id:uR(e.id)??uR(e.name)??`unknown`,...uR(e.name)?{name:uR(e.name)}:{},paidEndpoints:t.filter(e=>e.payment).length,...uR(e.status)?{status:uR(e.status)}:{},...uR(e.serviceUrl)||uR(e.url)?{url:uR(e.serviceUrl)??uR(e.url)}:{}}}function pR(e){return{...uR(e.description)?{description:uR(e.description)}:{},method:uR(e.method)??`GET`,path:uR(e.path)??`/`,...e.payment===void 0?{}:{payment:e.payment}}}function mR(e){if(!e)return`free`;if(typeof e!=`object`)return String(e);let t=e,n=uR(t.amount),r=uR(t.currency),i=uR(t.method),a=uR(t.intent);return[n,r,i&&a?`${i}/${a}`:i??a].filter(Boolean).join(` `)}function hR(e){return e.request.currency??e.request.asset}function gR(e,t){if(!t)return[...e];let n=t.toLowerCase();return e.filter(e=>{let t=hR(e);return typeof t==`string`&&t.toLowerCase()===n})}async function _R(e,t,n={}){let r=()=>iw().getChallenges(e),i=()=>_w().getChallenges(n.ignoreX402ResponseUrl?new Response(null,{headers:e.headers,status:e.status}):e);if(t===`mpp`)return r();if(t===`x402`)return i();let a=[],o;try{a=await r()}catch(e){o=e}let s=[],c;try{s=await i()}catch(e){c=e}if(a.length||s.length)return[...a,...s];if(o)throw o;if(c)throw c;return[]}function vR(e){return yw({name:`selected-challenge`,isPaymentRequired:e=>e.status===402,getChallenges:()=>[e],setCredential:e=>e})}function yR(e,t){if(!KS(e))return new Response(null,{status:402,headers:{[q.wwwAuthenticate]:$x(e)}});let n=e.request;return n.resource?new Response(null,{status:402,headers:{[CC]:pw({accepts:[vC(n)],...n.extensions&&{extensions:n.extensions},resource:n.resource,x402Version:2})}}):t}function bR(e){let{host:t,hostname:n,protocol:r}=new URL(e);return r===`https:`||!n.endsWith(`.localhost`)||n===`localhost`?{url:e}:{host:t,url:e.replace(n,`127.0.0.1`)}}async function xR(e,t,n,r){let i=t,a=bR(i),o={...n,redirect:`manual`,headers:Jw(n.headers)};a.host&&wR(o.headers,a.host);for(let t=0;t<=20;t++){let n=await e(a.url,o),s=n.headers.get(`location`);if(!r||!s||![301,302,303,307,308].includes(n.status))return{init:o,logicalUrl:i,response:n,target:a};if(t===20)throw TypeError(`Too many redirects`);await n.body?.cancel().catch(()=>{});let c=new URL(s,i),l=new URL(i),u=Jw(o.headers);if(c.origin!==l.origin)for(let e of[`authorization`,`cookie`,`host`,`proxy-authorization`])for(let t of Object.keys(u))t.toLowerCase()===e&&delete u[t];let d=(o.method??(o.body?`POST`:`GET`)).toUpperCase(),f=n.status===303&&d!==`GET`&&d!==`HEAD`||(n.status===301||n.status===302)&&d===`POST`;if(f)for(let e of[`content-encoding`,`content-language`,`content-length`,`content-location`,`content-type`])for(let t of Object.keys(u))t.toLowerCase()===e&&delete u[t];i=c.href,a=bR(i),a.host&&wR(u,a.host);let p={...o};f&&(delete p.body,p.method=`GET`),o={...p,headers:u,redirect:`manual`}}throw TypeError(`Too many redirects`)}function SR(e,t,n){let r=new URL(e),i=new URL(n||e);return i.origin!==r.origin&&CR(i),bR(i.href)}function CR(e){throw new I({code:`UNSAFE_PAYMENT_REDIRECT`,message:`Refusing to send a payment credential to redirected origin ${e.origin}.`,exitCode:1})}function wR(e,t){for(let t of Object.keys(e))t.toLowerCase()===`host`&&delete e[t];t&&(e.Host=t)}function TR(e){let t=e.request.resource;return typeof t?.url==`string`?t.url:void 0}async function ER(){let e=process.env.MPPX_SERVICES_URL??`https://mpp.dev/api/services`,t=await globalThis.fetch(e);if(!t.ok)throw new I({code:`SERVICES_FETCH_FAILED`,message:`Failed to fetch services registry: HTTP ${t.status}`,exitCode:1});let n=await t.json();if(!n||typeof n!=`object`||!Array.isArray(n.services))throw new I({code:`SERVICES_INVALID`,message:`Services registry response did not contain a services array.`,exitCode:1});return n.services}function DR(e,t){let n=t.toLowerCase();return e.find(e=>{let t=uR(e.id)?.toLowerCase(),r=uR(e.name)?.toLowerCase();return t===n||r===n})}const OR=cb(`mppx`,{mcp:{tools:{discovery:`direct`}},version:eR,description:`Make HTTP requests with automatic payment handling`,usage:[{suffix:`<url> [options]`}],args:p.object({url:p.string().describe(`URL to make request to`)}),options:p.object({account:p.string().optional().describe(`Account name (env: MPPX_ACCOUNT)`),autoSwap:p.boolean().optional().describe(`Auto-swap source tokens into payment currency`),config:p.string().optional().describe(`Path to config file`),confirm:p.boolean().optional().default(!1).describe(`Show confirmation prompts`),currency:p.string().optional().describe(`Payment currency/token address to select`),data:p.string().optional().describe(`Send request body (implies POST unless -X is set)`),fail:p.boolean().optional().describe(`Fail silently on HTTP errors (exit 22)`),header:p.array(p.string()).optional().describe(`Add header (repeatable)`),include:p.boolean().optional().describe(`Include response headers in output`),insecure:p.boolean().optional().describe(`Skip TLS certificate verification (disables payment retries)`),jsonBody:p.string().optional().describe(`Send JSON body (sets Content-Type and Accept, implies POST)`),location:p.boolean().optional().describe(`Follow redirects`),method:p.string().optional().describe(`HTTP method`),methodOpt:p.array(p.string()).optional().describe(`Method-specific option (key=value, repeatable)`),network:p.enum([`mainnet`,`testnet`]).optional().describe(`Tempo network`),payWith:p.string().optional().describe(`Source token for Tempo auto-swap`),protocol:p.enum([`auto`,`mpp`,`x402`]).default(`auto`).describe(`Payment protocol to use`),rpcUrl:p.string().optional().describe(`RPC endpoint, defaults to public RPC for chain (env: MPPX_RPC_URL)`),session:p.string().optional().default(`auto`).refine(e=>e===`auto`||e===`new`||/^0x[0-9a-fA-F]{64}$/.test(e),`Expected auto, new, or a 32-byte channel ID`).describe(`Session selection: auto, new, or channel ID`),silent:p.boolean().default(!1).describe(`Silent mode (suppress progress and info)`),slippage:p.number().optional().describe(`Tempo auto-swap max slippage percentage`),userAgent:p.string().optional().describe(`Set User-Agent header`),verbose:p.number().default(0).meta({count:!0}).describe(`Verbosity (-v details, -vv headers)`)}),alias:{account:`a`,config:`c`,data:`d`,fail:`f`,header:`H`,include:`i`,insecure:`k`,jsonBody:`J`,location:`L`,method:`X`,methodOpt:`M`,rpcUrl:`r`,silent:`s`,userAgent:`A`,verbose:`v`},examples:[{args:{url:`mpp.dev/api/ping/paid`},description:`Make a payment request`}],async run(e){let t=e.options.silent?e=>{}:e=>process.stderr.write(e),n=await dF(e.options.config);n&&e.options.verbose>=1&&t(`${X.dim(`Using config`)} ${X.blue(c.relative(process.cwd(),n.path))}\n`);let r=kk(),i={"User-Agent":e.options.userAgent??`mppx/${eR}${r?` AIAgent/${r}`:``}`};if(e.options.header)for(let t of e.options.header){let n=t.indexOf(`:`);if(n===-1)return e.error({code:`INVALID_HEADER`,message:`Invalid header format: ${t}`,exitCode:2});i[t.slice(0,n).trim()]=t.slice(n+1).trim()}let a=cF(n?.config);a&&!Object.keys(i).some(e=>e.toLowerCase()===`accept-payment`)&&(i[`Accept-Payment`]=a);let o=(()=>{let t=/^https?:\/\//.test(e.args.url),n=/^(localhost|.*\.localhost|127\.0\.0\.1|\[::1\])(:\d+)?/.test(e.args.url);return t?e.args.url:`${n?`http`:`https`}://${e.args.url}`})(),{hostname:s}=new URL(o),l=e.options.insecure??!1,u=l?async(e,t)=>{let n=process.env.NODE_TLS_REJECT_UNAUTHORIZED;process.env.NODE_TLS_REJECT_UNAUTHORIZED=`0`;try{return await globalThis.fetch(e,t)}finally{n===void 0?delete process.env.NODE_TLS_REJECT_UNAUTHORIZED:process.env.NODE_TLS_REJECT_UNAUTHORIZED=n}}:globalThis.fetch,d=bR(o),f=d.url;d.host&&(i.Host=d.host);try{let r=qO(e.options.methodOpt),a=OF(),s={redirect:e.options.location?`follow`:`manual`};e.options.jsonBody?(s.body=e.options.jsonBody,i[`Content-Type`]??=`application/json`,i.Accept??=`application/json`):e.options.data&&(s.body=e.options.data),e.options.method?s.method=e.options.method.toUpperCase():s.body&&(s.method=`POST`),Object.keys(i).length>0&&(s.headers=i);let c={include:e.options.include??!1,verbose:e.options.verbose,silent:e.options.silent};e.options.verbose>=2&&VO(o,s,t);let p=await xR(u,o,s,e.options.location??!1),m=p.response;if(l&&m.status===402)return e.error({code:`INSECURE_PAYMENT`,message:`Payment requires verified TLS. Install a trusted certificate and omit --insecure.`,exitCode:2});if(m.status!==402){if(e.options.session!==`auto`)return e.error({code:`UNSUPPORTED_SESSION`,message:`--session requires a tempo/session payment challenge.`,exitCode:2});if(e.options.fail&&m.status>=400)return e.error({code:`HTTP_ERROR`,message:`HTTP error ${m.status}`,exitCode:22});HO(m,c),await cR(m);return}let h=m.url?new URL(m.url):void 0,g=d.host!==void 0&&h?.hostname===`127.0.0.1`,_=await _R(m,e.options.protocol,{ignoreX402ResponseUrl:g});if(_.length===0)return e.error({code:`UNSUPPORTED_PROTOCOL`,message:e.options.protocol===`auto`?`Server did not offer a payment challenge.`:`Server did not offer an ${e.options.protocol} payment challenge.`,exitCode:2});let v=gR(_,e.options.currency);if(e.options.currency&&v.length===0){let t=_.map(hR).filter(e=>typeof e==`string`).join(`, `);return e.error({code:`UNSUPPORTED_CURRENCY`,message:`Server did not offer payment currency ${e.options.currency}.${t?` Offered currencies: ${t}.`:``}`,exitCode:2})}let y=lF(n?.config)?.length?v:await SP(v,{options:{account:e.options.account,network:e.options.network,rpcUrl:e.options.rpcUrl}}),b=sF(y,n?.config);if(!b){let t=y.map(e=>`${e.method}/${e.intent}`).join(`, `);return e.error({code:`UNSUPPORTED_METHOD`,message:`Unsupported payment method. Server offers: ${t}. Add it to mppx.config.ts using defineConfig().`,exitCode:2})}let{challenge:x,plugin:S,method:C}=b,w=KS(x),T=w?void 0:SR(o,d,p.logicalUrl);if(!w)try{zw(x,new URL(p.logicalUrl||o),void 0)}catch(t){return e.error({code:`UNTRUSTED_PROOF_REALM`,message:t.message,exitCode:1})}let ee=yR(x,m),te=x.request.currency??``,E=x.request.decimals??6,ne,O;S&&(O=await S.setup({challenge:x,options:{account:e.options.account,autoSwap:e.options.autoSwap,network:e.options.network,payWith:e.options.payWith,rpcUrl:e.options.rpcUrl,slippage:e.options.slippage},methodOpts:r}),te=O.tokenSymbol,E=O.tokenDecimals,ne=O.explorerUrl);let re=!e.options.silent&&e.options.confirm,k=new Set;{HO(m,x.method===`tempo`&&x.intent===`session`&&e.options.include?{...c,include:!1,verbose:Math.max(c.verbose,2)}:c);let n=(()=>{let e=new Set([`id`,`request`]),t=[];for(let[n,r]of Object.entries(x))e.has(n)||r===void 0||t.push([n,GO(n,r)]);return t.sort(([e],[t])=>e.localeCompare(t))})(),r={tokenSymbol:te,tokenDecimals:E,explorerUrl:ne},i=(()=>{let e=new Set([`decimals`,`currency`,`methodDetails`]),t=[];for(let[n,i]of Object.entries(x.request))e.has(n)||i===void 0||t.push([n,UO(n,i,r)]);return t.sort(([e],[t])=>e.localeCompare(t))})(),a=(()=>{let e=x.request.methodDetails;if(!e)return[];let t=[];for(let[n,i]of Object.entries(e))if(i!==void 0){if(n===`memo`&&typeof i==`string`){let e=WO(i);t.push([n,e?`${e}\n${X.dim(i)}`:i])}else t.push([n,UO(n,i,r)])}return t.sort(([e],[t])=>e.localeCompare(t))})(),o=[[`Challenge`,n],[`Request`,i],...a.length?[[`Details`,a]]:[]];for(let[,e]of o)for(let[t]of e)k.add(t);let s=Math.max(...o.flatMap(([,e])=>e.map(([e])=>e.length))),l=` ${``.padEnd(s)} `;if(e.options.verbose>=1||re){t(`${X.bold(X.yellow(`Payment Required`))}\n`);for(let[e,n]of o){t(`${X.bold(e)}\n`);for(let[e,r]of n){let[n,...i]=r.split(`
|
|
252
258
|
`);t(` ${X.dim(e.padEnd(s))} ${n}\n`);for(let e of i)t(`${l}${e}\n`)}}}if(re&&(t(`
|
|
253
|
-
`),!await
|
|
254
|
-
`);return}}let A=process.env.MPPX_PRIVATE_KEY?.trim()||!
|
|
255
|
-
`)}catch{}await
|
|
259
|
+
`),!await ZO(`Proceed with ${x.intent}?`,!0))){t(`Aborted.
|
|
260
|
+
`);return}}let A=process.env.MPPX_PRIVATE_KEY?.trim()||!YO(bk(e.options.account));if(XD(x)&&A&&!C){try{await kI({challenge:x,challengeResponse:ee,credentialContext:await aF(x,n?.config.extensions,O?.credentialContext),endpoint:p.logicalUrl,fetch:u,fetchInput:T.url,init:{...p.init,redirect:`manual`},info:t,methodOptions:r,options:{account:e.options.account,fail:e.options.fail,include:e.options.include,network:e.options.network,rpcUrl:e.options.rpcUrl,session:e.options.session,silent:e.options.silent,verbose:e.options.verbose},registry:a})}catch(e){return vI(e,`SESSION_REQUEST_FAILED`)}return}if(e.options.session!==`auto`)return e.error({code:`UNSUPPORTED_SESSION`,message:C&&XD(x)?`--session cannot override a configured session method. Configure its channelStore instead.`:`--session requires a tempo/session payment challenge.`,exitCode:2});let j=C&&XD(x)?void 0:await aF(x,n?.config.extensions,O?.credentialContext),ie,ae;if(C&&XD(x)){let e=ee;ie=await zT({methods:[C],polyfill:!1,async onChallenge(e,{createCredential:t}){let r=await aF(e,n?.config.extensions,O?.credentialContext);return pF(x,e),t(r)},fetch:async(t,n)=>{if(e){let t=e;return e=void 0,t}return u(t,n)}}).fetch(T.url,{...p.init,context:j,redirect:`manual`})}else{if(O?.createCredential)ae=await O.createCredential(ee,j);else if(O)ae=await zT({methods:O.methods,polyfill:!1,transport:vR(x)}).createCredential(ee,j);else if(C)ae=await zT({methods:[C],polyfill:!1,transport:vR(x)}).createCredential(ee,j);else throw Error(`unreachable`);let n=w?wC:pS(x),r={...Jw(p.init.headers),[n]:ae},i=w?bR((TR(x)??m.url)||o):T;w&&wR(r,i.host),S?.prepareCredentialRequest?.({challenge:x,credential:ae,headers:r});let a={...p.init,redirect:`manual`,headers:r};e.options.verbose>=2&&VO(i.url,a,t),ie=await u(i.url,a)}if(e.options.fail&&ie.status>=400)return e.error({code:`HTTP_ERROR`,message:`HTTP error ${ie.status}`,exitCode:22});if(ie.status===402){let n=await ie.text();t(`${X.bold(X.red(`Payment Rejected`))}\n`);try{let e=JSON.parse(n),r=[];for(let[t,n]of Object.entries(e))n!==void 0&&r.push([t,String(n)]);r.sort(([e],[t])=>e.localeCompare(t));let i=Math.max(...r.map(([e])=>e.length));for(let[e,n]of r)t(` ${X.dim(e.padEnd(i))} ${n}\n`)}catch{n&&t(` ${n}\n`)}return e.error({code:`PAYMENT_REJECTED`,message:`Payment rejected`,exitCode:75})}if(HO(ie,c),!(ae&&await S?.handleResponse?.({challenge:x,credential:ae,response:ie,fetchUrl:f,fetchInit:s,silent:e.options.silent,verbose:e.options.verbose,confirmEnabled:re,confirm:ZO,tokenSymbol:te,tokenDecimals:E,explorerUrl:ne,shownKeys:k}))){let n=ie.headers.get(q.paymentReceipt);if(n&&e.options.verbose>=1)try{let e=JSON.parse(D.toString(n));t(`\n${X.bold(X.green(`Payment Receipt`))}\n`);let r=[],i=e.channelId,a=e.reference,o=i&&a&&i===a,s=new Set([`acceptedCumulative`,`spent`]);for(let[t,n]of Object.entries(e)){if(n===void 0||k.has(t)||t===`reference`&&o)continue;let e=S?.formatReceiptField?.(t,n);e===void 0?s.has(t)&&typeof n==`string`?r.push([t,`${n} ${X.dim(`(${QO(BigInt(n),te,E)})`)}`]):(t===`reference`||t===`txHash`)&&typeof n==`string`&&ne?r.push([t,KO(`${ne}/tx/${n}`,n)]):r.push([t,String(n)]):r.push([t,e])}r.sort(([e],[t])=>e.localeCompare(t));let c=Math.max(...r.map(([e])=>e.length));for(let[e,n]of r)t(` ${X.dim(e.padEnd(c))} ${n}\n`);t(`
|
|
261
|
+
`)}catch{}await cR(ie)}}catch(t){if(t instanceof I)throw t;let n=t instanceof Error?t.cause:void 0,r=n instanceof Error?n:void 0;if(r&&`code`in r){let t=r.code;return t===`ENOTFOUND`?e.error({code:`DNS_ERROR`,message:`Could not resolve host "${s}". Check the URL and try again.`,exitCode:6}):t===`ECONNREFUSED`?e.error({code:`CONNECTION_REFUSED`,message:`Connection refused by "${s}". Is the server running?`,retryable:!0,exitCode:7}):t===`ECONNRESET`?e.error({code:`CONNECTION_RESET`,message:`Connection to "${s}" was reset.`,retryable:!0,exitCode:56}):t===`ETIMEDOUT`?e.error({code:`CONNECTION_TIMEOUT`,message:`Connection to "${s}" timed out.`,retryable:!0,exitCode:28}):t===`CERT_HAS_EXPIRED`||t===`UNABLE_TO_VERIFY_LEAF_SIGNATURE`?e.error({code:`TLS_ERROR`,message:`TLS certificate error for "${s}". Use --insecure to skip verification.`,exitCode:60}):e.error({code:`REQUEST_FAILED`,message:`Request to "${s}" failed: ${r.message}`})}{let n=t instanceof Error?t.message:String(t);return e.error({code:`REQUEST_FAILED`,message:r?`Request failed: ${n} (Cause: ${r.message})`:`Request failed: ${n}`})}}}}),kR=cb(`account`,{description:`Manage accounts (create, default, delete, export, fund, list, view)`}).command(`create`,{description:`Create new account`,options:p.object({account:p.string().optional().describe(`Account name (env: MPPX_ACCOUNT)`),network:p.enum([`mainnet`,`testnet`]).optional().describe(`Tempo network`),rpcUrl:p.string().optional().describe(`RPC endpoint (env: MPPX_RPC_URL)`)}),output:p.object({address:p.string(),name:p.string()}),alias:{account:`a`,rpcUrl:`r`},async run(e){let t=oR(e),n=e.options.account;if(!n){if((await xk().list()).length===0)n=`main`;else{if(t)return e.error({code:`ACCOUNT_REQUIRED`,message:`Account name is required in structured mode.`,exitCode:2});let r=await XO(`Account name`);if(!r)return;n=r}}let r=xk(n);for(;await r.get();){if(t)return e.error({code:`ACCOUNT_EXISTS`,message:`Account "${n}" already exists.`,exitCode:1});process.stderr.write(`${X.dim(`Account "${n}" already exists.`)}\n\n`);let i=await XO(`Enter different name`);if(!i)return;n=i,r=xk(n)}let i=ge(),a=ve(i);await r.set(i),(await xk().list()).length===1&&yk().set(n);let o=ye.blockExplorers?.default?.url,s=o?KO(`${o}/address/${a.address}`,a.address):a.address,c=ek(e.options),l=$O(e.options.rpcUrl,{network:c});return tk({network:c,rpcUrl:l}).then(e=>j({chain:e,transport:ue(l)})).then(e=>import(`viem/tempo`).then(({Actions:t})=>t.faucet.fund(e,{account:a}).catch(()=>{}))),sR(e,{address:a.address,name:n},()=>{console.log(`Account "${n}" saved to keychain.`),console.log(X.dim(`Address ${s}`)),console.log(X.dim(`Fund testnet tokens: mppx account fund --account ${n} --network testnet`))})}}).command(`default`,{description:`Set default account`,options:p.object({account:p.string().describe(`Account name`)}),output:p.object({name:p.string()}),alias:{account:`a`},async run(e){let t=e.options.account;return YO(t)?UP(t)?(yk().set(t),sR(e,{name:t},()=>{console.log(`Default account set to "${t}"`)})):e.error({code:`ACCOUNT_NOT_FOUND`,message:`Account "${t}" not found. Is Tempo wallet configured?`,exitCode:69}):await xk(t).get()?(yk().set(t),sR(e,{name:t},()=>{console.log(`Default account set to "${t}"`)})):e.error({code:`ACCOUNT_NOT_FOUND`,message:`Account "${t}" not found.`,exitCode:69})}}).command(`delete`,{description:`Delete account`,options:p.object({account:p.string().describe(`Account name`),yes:p.boolean().optional().describe(`DANGER!! Skip confirmation prompts`)}),output:p.object({defaultAccount:p.string().optional(),name:p.string()}),alias:{account:`a`},async run(e){let t=xk(e.options.account),n=await t.get();if(!n)return e.error({code:`ACCOUNT_NOT_FOUND`,message:`Account "${e.options.account}" not found.`,exitCode:69});let r=ve(n),i=await ok(r.address,{includeTestnet:!1});if(!e.options.yes){if(oR(e))return e.error({code:`CONFIRMATION_REQUIRED`,message:`Pass --yes to delete an account in structured mode.`,exitCode:2});let t=ye.blockExplorers?.default?.url,n=t?KO(`${t}/address/${r.address}`,r.address):r.address;process.stderr.write(X.dim(`Delete account "${e.options.account}"\n`)),process.stderr.write(X.dim(` Address ${n}\n`));for(let e=0;e<i.length;e++)process.stderr.write(X.dim(` ${e===0?`Balance`:` `} ${i[e]}\n`));if(process.stderr.write(X.dim(`This action cannot be undone
|
|
256
262
|
|
|
257
|
-
`)),!await
|
|
258
|
-
`);return}let r=await
|
|
263
|
+
`)),!await ZO(`Confirm delete?`)){console.log(`Canceled`);return}}await t.delete();let a=yk().get(),o;if(a===e.options.account){let e=await xk().list();e.length>0?(o=e[0],yk().set(o)):yk().clear()}return sR(e,{defaultAccount:o,name:e.options.account},()=>{o&&console.log(`Default account set to "${o}"`),console.log(`Account "${e.options.account}" deleted`)})}}).command(`fund`,{description:`Fund account with testnet tokens`,options:p.object({account:p.string().optional().describe(`Account name (env: MPPX_ACCOUNT)`),network:p.enum([`testnet`]).optional().describe(`Tempo network`),rpcUrl:p.string().optional().describe(`RPC endpoint (env: MPPX_RPC_URL)`)}),output:p.object({account:p.string(),chain:p.string(),transactions:p.array(p.string())}),alias:{account:`a`,rpcUrl:`r`},async run(e){let t=oR(e),n=bk(e.options.account),r=await xk(n).get();if(!r)return e.options.account?e.error({code:`ACCOUNT_NOT_FOUND`,message:`Account "${n}" not found.`,exitCode:69}):e.error({code:`ACCOUNT_NOT_FOUND`,message:`No account found.`,exitCode:69});let i=ve(r),a=ek(e.options),o=$O(e.options.rpcUrl,{network:a}),s=await tk({network:a,rpcUrl:o}),c=j({chain:s,transport:ue(o)});t||console.log(`Funding "${n}" on ${nk(s)}`);try{let{Actions:r}=await import(`viem/tempo`),a=await r.faucet.fund(c,{account:i}),o=s.blockExplorers?.default?.url;if(!t)for(let e of a){let t=o?KO(`${o}/tx/${e}`,X.gray(e)):e;console.log(` ${t}`)}let{waitForTransactionReceipt:l}=await import(`viem/actions`);return await Promise.all(a.map(e=>l(c,{hash:e}))),sR(e,{account:n,chain:nk(s),transactions:[...a]},()=>{console.log(`Funded successfully`)})}catch(n){let r=n instanceof Error?n.message:String(n);return t?e.error({code:`FUNDING_FAILED`,message:r,exitCode:1}):e.error({code:`FUNDING_FAILED`,message:`Funding failed: ${r}`,exitCode:1})}}}).command(`list`,{description:`List all accounts`,output:p.object({accounts:p.array(tR)}),async run(e){let t=yk().get(),n=(await xk().list()).sort(),r=[];for(let e of n){let t=await xk(e).get();t&&r.push({name:e,address:ve(t).address})}let i=HP();for(let e=0;e<i.length;e++){let t=i[e],n=e===0?`tempo:default`:`tempo:${e}`;t.wallet_address&&r.push({name:n,address:t.wallet_address,source:`tempo wallet`})}if(r.length===0)return sR(e,{accounts:[]},()=>{console.log(`No accounts found.`)});let a=ye.blockExplorers?.default?.url,o=Math.max(...r.map(e=>e.name.length+ +(e.name===t)));return sR(e,{accounts:r.map(e=>({...e,...e.name===t?{isDefault:!0}:void 0}))},()=>{for(let e of r){let n=e.name===t,r=n?`${e.name}${X.dim(`*`)}`:e.name,i=e.name.length+ +!!n,s=a?KO(`${a}/address/${e.address}`,e.address):e.address,c=e.source?` ${X.dim(`(${e.source})`)}`:``;console.log(`${r}${` `.repeat(o-i+2)}${X.dim(s)}${c}`)}})}}).command(`export`,{description:`Export the private key for a local account`,options:p.object({account:p.string().optional().describe(`Account name (env: MPPX_ACCOUNT)`)}),output:p.object({privateKey:p.string()}),alias:{account:`a`},async run(e){let t=bk(e.options.account);if(YO(t))return e.error({code:`UNSUPPORTED_ACCOUNT`,message:`Account "${t}" is managed by Tempo wallet and does not expose a private key via mppx.`,exitCode:2});let n=await xk(t).get();return n?sR(e,{privateKey:n},()=>{console.log(n)}):e.options.account?e.error({code:`ACCOUNT_NOT_FOUND`,message:`Account "${t}" not found.`,exitCode:69}):e.error({code:`ACCOUNT_NOT_FOUND`,message:`No account found.`,exitCode:69})}}).command(`view`,{description:`View account address`,options:p.object({account:p.string().optional().describe(`Account name (env: MPPX_ACCOUNT)`),network:p.enum([`mainnet`,`testnet`]).optional().describe(`Tempo network`),rpcUrl:p.string().optional().describe(`RPC endpoint (env: MPPX_RPC_URL)`)}),output:nR,alias:{account:`a`,rpcUrl:`r`},async run(e){let t=bk(e.options.account);if(YO(t)){let n=UP(t);if(!n)return e.error({code:`ACCOUNT_NOT_FOUND`,message:`Account "${t}" not found. Is Tempo wallet configured?`,exitCode:69});let r=n.wallet_address,i=$O(e.options.rpcUrl,{network:e.options.network}),a=await tk({network:e.options.network,rpcUrl:i}),o=a.blockExplorers?.default?.url,s=o?KO(`${o}/address/${r}`,r):r,c=await ok(r,a&&i?{chain:a,rpcUrl:i}:void 0);return sR(e,{address:r,balances:c,name:t,type:`${n.wallet_type} (tempo wallet)`},()=>{console.log(`${X.dim(`Address`)} ${s}`);for(let e=0;e<c.length;e++)console.log(`${X.dim(e===0?`Balance`:` `)} ${c[e]}`);console.log(`${X.dim(`Name`)} ${t}`),console.log(`${X.dim(`Type`)} ${n.wallet_type} ${X.dim(`(tempo wallet)`)}`)})}let n=await xk(t).get();if(!n)return e.options.account?e.error({code:`ACCOUNT_NOT_FOUND`,message:`Account "${t}" not found.`,exitCode:69}):e.error({code:`ACCOUNT_NOT_FOUND`,message:`No account found.`,exitCode:69});let r=ve(n),i=$O(e.options.rpcUrl,{network:e.options.network}),a=await tk({network:e.options.network,rpcUrl:i}),o=a.blockExplorers?.default?.url,s=o?KO(`${o}/address/${r.address}`,r.address):r.address,c=await ok(r.address,a&&i?{chain:a,rpcUrl:i}:void 0);return sR(e,{address:r.address,balances:c,name:t},()=>{console.log(`${X.dim(`Address`)} ${s}`);for(let e=0;e<c.length;e++)console.log(`${X.dim(e===0?`Balance`:` `)} ${c[e]}`);console.log(`${X.dim(`Name`)} ${t}`)})}}),AR=cb(`sign`,{description:`Sign a payment challenge and output the Authorization header`,usage:[{suffix:`--challenge <value> [options]`},{prefix:`echo <challenge> |`,suffix:`[options]`}],options:p.object({account:p.string().optional().describe(`Account name (env: MPPX_ACCOUNT)`),challenge:p.string().optional().describe(`WWW-Authenticate challenge value`),config:p.string().optional().describe(`Path to config file`),dryRun:p.boolean().optional().describe(`Validate and parse the challenge without signing`),autoSwap:p.boolean().optional().describe(`Auto-swap source tokens into payment currency`),methodOpt:p.array(p.string()).optional().describe(`Method-specific option (key=value, repeatable)`),network:p.enum([`mainnet`,`testnet`]).optional().describe(`Tempo network`),payWith:p.string().optional().describe(`Source token for Tempo auto-swap`),rpcUrl:p.string().optional().describe(`RPC endpoint, defaults to public RPC for chain (env: MPPX_RPC_URL)`),slippage:p.number().optional().describe(`Tempo auto-swap max slippage percentage`)}),output:p.object({authorization:p.string()}),alias:{account:`a`,challenge:`C`,config:`c`,methodOpt:`M`,rpcUrl:`r`},async run(e){let t=e.options.challenge||(lR()?await new Promise((e,t)=>{let n=``;process.stdin.setEncoding(`utf-8`),process.stdin.on(`data`,e=>{n+=e}),process.stdin.on(`end`,()=>e(n.trim())),process.stdin.on(`error`,t)}):void 0);if(!t)return e.error({code:`NO_CHALLENGE`,message:`No challenge provided. Use --challenge or pipe via stdin.`,exitCode:2});let n;try{n=dS(t)}catch(t){return e.error({code:`INVALID_CHALLENGE`,message:`Failed to parse challenge: ${t instanceof Error?t.message:t}`,exitCode:2})}if(e.options.dryRun){process.stderr.write(`Challenge is valid.
|
|
264
|
+
`);return}let r=await dF(e.options.config),i=sF(n,r?.config);if(!i){let t=n.map(e=>`${e.method}/${e.intent}`).join(`, `);return e.error({code:`UNSUPPORTED_METHOD`,message:`Unsupported payment method. Server offers: ${t}. Add it to mppx.config.ts using defineConfig().`,exitCode:2})}let{challenge:a,plugin:o,method:s}=i,c=qO(e.options.methodOpt),l=$x(a),u=new Response(null,{status:402,headers:{[q.wwwAuthenticate]:l}}),d;o&&(d=await o.setup({challenge:a,options:{account:e.options.account,autoSwap:e.options.autoSwap,network:e.options.network,payWith:e.options.payWith,rpcUrl:e.options.rpcUrl,slippage:e.options.slippage},methodOpts:c}));let f=await aF(a,r?.config.extensions,d?.credentialContext),p;if(d)p=d.createCredential?await d.createCredential(u,f):await zT({methods:d.methods,polyfill:!1}).createCredential(u,f);else if(s)p=await zT({methods:[s],polyfill:!1}).createCredential(u,f);else return e.error({code:`UNSUPPORTED_METHOD`,message:`Unsupported payment method: ${a.method}/${a.intent}. Add it to mppx.config.ts using defineConfig().`,exitCode:2});return sR(e,{authorization:p},()=>{console.log(p)})}}),jR=cb(`init`,{description:`Create an mppx.config.ts file in the current directory`,options:p.object({force:p.boolean().optional().describe(`Overwrite existing config file`)}),output:p.object({file:p.string()}),alias:{force:`f`},async run(e){let n=process.cwd(),r=`mppx.config${(()=>{if(t.existsSync(c.join(n,`tsconfig.json`)))return`.ts`;try{if(JSON.parse(t.readFileSync(c.join(n,`package.json`),`utf-8`)).type===`module`)return`.mjs`}catch{}return`.js`})()}`,i=c.join(n,r);return t.existsSync(i)&&!e.options.force?e.error({code:`CONFIG_EXISTS`,message:`${r} already exists. Use --force to overwrite.`,exitCode:1}):(t.writeFileSync(i,`import { defineConfig } from 'mppx/cli'
|
|
259
265
|
|
|
260
266
|
export default defineConfig({
|
|
261
267
|
methods: [],
|
|
262
268
|
plugins: [],
|
|
263
269
|
})
|
|
264
|
-
`),
|
|
270
|
+
`),sR(e,{file:i},()=>{console.log(`Created ${r}`)}))}}),MR=cb(`services`,{description:`Browse the MPP services registry`}).command(`list`,{description:`List registered MPP services`,options:p.object({query:p.string().optional().describe(`Filter by id, name, category, tag, or description`)}),output:p.object({services:p.array(iR)}),alias:{query:`q`},async run(e){let t=e.options.query?.toLowerCase(),n=await ER(),r=(t?n.filter(e=>[e.id,e.name,e.description,...Array.isArray(e.categories)?e.categories:[],...Array.isArray(e.tags)?e.tags:[]].filter(e=>typeof e==`string`).some(e=>e.toLowerCase().includes(t))):n).map(fR).sort((e,t)=>e.id.localeCompare(t.id));return sR(e,{services:r},()=>{if(r.length===0){console.log(`No services found.`);return}let e=Math.max(...r.map(e=>e.id.length)),t=Math.max(...r.map(e=>String(e.paidEndpoints).length));for(let n of r){let r=n.name&&n.name!==n.id?` ${n.name}`:``,i=n.url?` ${X.dim(n.url)}`:``;console.log(`${n.id.padEnd(e)} ${String(n.paidEndpoints).padStart(t)} paid${r}${i}`)}})}}).command(`show`,{description:`Show one registered MPP service`,args:p.object({service:p.string().describe(`Service id or name`)}),output:p.object({service:p.record(p.string(),p.unknown())}),async run(e){let t=DR(await ER(),e.args.service);if(!t)return e.error({code:`SERVICE_NOT_FOUND`,message:`Service not found: ${e.args.service}`,exitCode:1});let n=fR(t),r=dR(t);return sR(e,{service:t},()=>{console.log(`${n.name??n.id} ${X.dim(`(${n.id})`)}`),n.description&&console.log(n.description),n.url&&console.log(`${X.dim(`URL`)} ${KO(n.url,n.url)}`),n.status&&console.log(`${X.dim(`Status`)} ${n.status}`),console.log(`${X.dim(`Endpoints`)} ${r.length} (${n.paidEndpoints} paid)`);let e=t.docs,i=e&&uR(e.homepage);i&&console.log(`${X.dim(`Docs`)} ${KO(i,i)}`)})}}).command(`endpoints`,{description:`List endpoints for a registered MPP service`,args:p.object({service:p.string().describe(`Service id or name`)}),output:p.object({endpoints:p.array(aR),service:iR}),async run(e){let t=DR(await ER(),e.args.service);if(!t)return e.error({code:`SERVICE_NOT_FOUND`,message:`Service not found: ${e.args.service}`,exitCode:1});let n=fR(t),r=dR(t).map(pR);return sR(e,{endpoints:r,service:n},()=>{if(r.length===0){console.log(`No endpoints found for ${n.id}.`);return}let e=Math.max(...r.map(e=>e.method.length)),t=Math.max(...r.map(e=>e.path.length));for(let n of r){let r=mR(n.payment),i=n.description?` ${X.dim(n.description)}`:``;console.log(`${n.method.padEnd(e)} ${n.path.padEnd(t)} ${r}${i}`)}})}}),NR=cb(`discover`,{description:`Discovery tooling`}).command(`generate`,{description:`Generate a static OpenAPI discovery document from a module`,args:p.object({module:p.string().describe(`Path to a module that default-exports a discovery config`)}),options:p.object({output:p.string().optional().describe(`Write output to a file instead of stdout`)}),output:p.record(p.string(),p.unknown()),alias:{output:`o`},async run(e){let n=c.resolve(e.args.module);if(!t.existsSync(n))return e.error({code:`MODULE_NOT_FOUND`,message:`Module not found: ${n}`,exitCode:1});let r;try{r=await import(n)}catch(t){return e.error({code:`MODULE_IMPORT_FAILED`,message:`Failed to import module: ${t.message}`,exitCode:1})}let i=r.default??r,a;if(typeof i.openapi==`string`)a=i;else{let{generate:t}=await Promise.resolve().then(()=>($L(),qL)),n=i.mppx;if(!n)return e.error({code:`INVALID_MODULE`,message:"Module must default-export an OpenAPI document (with `openapi` key) or an object with `mppx` (server instance) and `routes`.",exitCode:1});a=t(n,i)}let o=JSON.stringify(a,null,2);if(e.options.output){let n=c.resolve(e.options.output);return t.writeFileSync(n,`${o}\n`),process.stderr.write(`Wrote ${n}\n`),sR(e,a,()=>{})}return sR(e,a,()=>{console.log(o)})}}).command(`validate`,{description:`Validate an OpenAPI discovery document from a file or URL`,args:p.object({input:p.string().describe(`Path or URL to a discovery document`)}),output:p.object({errorCount:p.number(),issues:p.array(rR),valid:p.boolean(),warningCount:p.number()}),async run(e){let n=e.args.input,r;if(/^https?:\/\//.test(n)){let t=new AbortController,i=setTimeout(()=>t.abort(),3e4),a;try{a=await globalThis.fetch(n,{signal:t.signal})}catch(t){clearTimeout(i);let n=t instanceof DOMException&&t.name===`AbortError`?`Request timed out after 30s`:t.message;return e.error({code:`DISCOVERY_FETCH_FAILED`,message:`Failed to fetch discovery document: ${n}`,exitCode:1})}if(clearTimeout(i),!a.ok)return e.error({code:`DISCOVERY_FETCH_FAILED`,message:`Failed to fetch discovery document: HTTP ${a.status}`,exitCode:1});let o=10485760,s=a.headers.get(`content-length`);if(s&&Number(s)>o||(r=await a.text(),r.length>o))return e.error({code:`DISCOVERY_TOO_LARGE`,message:`Discovery document exceeds 10 MB limit`,exitCode:1})}else{let i=c.resolve(n);if(!t.existsSync(i))return e.error({code:`DISCOVERY_NOT_FOUND`,message:`Discovery document not found: ${i}`,exitCode:1});r=t.readFileSync(i,`utf-8`)}let i;try{i=JSON.parse(r)}catch(t){return e.error({code:`DISCOVERY_INVALID_JSON`,message:`Invalid discovery JSON: ${t.message}`,exitCode:1})}let a=vE(i);if(!oR(e))for(let e of a)console.log(`[${e.severity}] ${e.path}: ${e.message}`);let o=a.filter(e=>e.severity===`error`).length,s=a.filter(e=>e.severity===`warning`).length;return o>0?e.error({code:`DISCOVERY_INVALID`,message:`Discovery document has ${o} error(s) and ${s} warning(s).`,exitCode:1}):sR(e,{errorCount:o,issues:a,valid:!0,warningCount:s},()=>{console.log(s>0?`Discovery document is valid with ${s} warning(s).`:`Discovery document is valid.`)})}});OR.command(kR),OR.command(NR),OR.command(jR),OR.command(MR),OR.command(xI),OR.command(AR),OR.command(BL);export{OR as default,SR as resolveMppCredentialTarget};
|