@moonpay/cli 1.96.1 → 1.96.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
1
  process.noDeprecation = true; import { createRequire as __createRequire } from "module"; const require = __createRequire(import.meta.url);
2
- import{b as a,c as b}from"./chunk-V7V6LCEH.js";import"./chunk-QDAWFEIX.js";import"./chunk-LMDE72OE.js";export{a as moonpay,b as resetClient};
2
+ import{b as a,c as b}from"./chunk-6YKAGPNJ.js";import"./chunk-CGJ3RNXL.js";import"./chunk-LMDE72OE.js";export{a as moonpay,b as resetClient};
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  process.noDeprecation = true; import { createRequire as __createRequire } from "module"; const require = __createRequire(import.meta.url);
3
- import{a as T,b,c as L,e as M,f as J,g as j}from"./chunk-OYN4MVGH.js";import{b as C}from"./chunk-V7V6LCEH.js";import{a as I,n as D}from"./chunk-WFMM5XGD.js";import{e as E,g as oe}from"./chunk-QDAWFEIX.js";import"./chunk-LMDE72OE.js";import{Command as ye}from"commander";var re=!process.env.NO_COLOR&&process.stdout.isTTY===!0;function _(e){return t=>re?`${e}${t}\x1B[0m`:t}var p={bold:_("\x1B[1m"),dim:_("\x1B[2m"),green:_("\x1B[32m"),yellow:_("\x1B[33m"),cyan:_("\x1B[36m"),red:_("\x1B[31m")};function S(e){if(e==null)return!0;let t=typeof e;return t==="string"||t==="number"||t==="boolean"}function k(e){return e==null?"-":String(e)}function v(e,t=0){let n=" ".repeat(t);return S(e)?`${n}${k(e)}`:Array.isArray(e)?e.length===0?`${n}${p.dim("(empty)")}`:e.every(S)?e.map(r=>`${n}- ${k(r)}`).join(`
3
+ import{a as T,b,c as L,e as M,f as J,g as j}from"./chunk-XEPXR457.js";import{b as C}from"./chunk-6YKAGPNJ.js";import{a as I,n as D}from"./chunk-U3FONESS.js";import{e as E,g as oe}from"./chunk-CGJ3RNXL.js";import"./chunk-LMDE72OE.js";import{Command as ye}from"commander";var re=!process.env.NO_COLOR&&process.stdout.isTTY===!0;function _(e){return t=>re?`${e}${t}\x1B[0m`:t}var p={bold:_("\x1B[1m"),dim:_("\x1B[2m"),green:_("\x1B[32m"),yellow:_("\x1B[33m"),cyan:_("\x1B[36m"),red:_("\x1B[31m")};function S(e){if(e==null)return!0;let t=typeof e;return t==="string"||t==="number"||t==="boolean"}function k(e){return e==null?"-":String(e)}function v(e,t=0){let n=" ".repeat(t);return S(e)?`${n}${k(e)}`:Array.isArray(e)?e.length===0?`${n}${p.dim("(empty)")}`:e.every(S)?e.map(r=>`${n}- ${k(r)}`).join(`
4
4
  `):e.map(r=>{if(typeof r!="object"||r===null)return`${n}- ${k(r)}`;let s=Object.entries(r),i=[],[a,f]=s[0];S(f)?i.push(`${n}- ${p.bold(a)}: ${k(f)}`):(i.push(`${n}- ${p.bold(a)}:`),i.push(v(f,t+2)));for(let[d,g]of s.slice(1))S(g)?i.push(`${n} ${p.bold(d)}: ${k(g)}`):(i.push(`${n} ${p.bold(d)}:`),i.push(v(g,t+2)));return i.join(`
5
5
  `)}).join(`
6
6
 
@@ -14,5 +14,5 @@ ${v(i,t+1)}`).join(`
14
14
 
15
15
  Run \`mp skill install\` to install AI skills for Claude Code.
16
16
 
17
- `+M).version(E).option("--json","Output as JSON instead of YAML");function x(){return h.opts().json?"json":"yaml"}function V(e){console.log(R(e,x()))}function Q(){let e=ge();e&&process.stderr.write(e)}h.command("mcp").description("Start MCP server over stdio (for Claude Desktop, Claude Code, etc.)").action(async()=>{let{startMcpServer:e}=await import("./mcp-MJ4WULTJ.js");await e()});h.command("serve").description("Local loopback mirror of agents.moonpay.com/api/tools \u2014 warm process for MoonAgents / UIs. GET /health \xB7 POST /api/tools/:tool").option("--port <port>","Port to bind (default 8787)",e=>Number(e),8787).option("--host <host>","Loopback host only (default 127.0.0.1)","127.0.0.1").option("--force","Bind even if something already answers on this port (skip idempotent check)",!1).action(async e=>{let{startServe:t}=await import("./serve-NMKWP2YQ.js");try{await t({host:e.host,port:e.port,idempotent:!e.force})}catch(n){console.error(n instanceof Error?n.message:String(n)),process.exit(1)}});function ee(e,t){let n=e;for(let r of t){let s=n.commands.find(i=>i.name()===r);s||(s=n.command(r)),n=s}return n}function ne(e,t=""){let n=[];for(let[r,s]of Object.entries(e)){let i=t?`${t}-${r}`:r,a=s;for(;a._def.typeName==="ZodEffects";)a=a._def.schema;let f=a;f._def.typeName==="ZodNullable"&&(f=f._def.innerType),f._def.typeName==="ZodObject"&&f.shape?n.push(...ne(f.shape,i)):n.push({flatKey:i,field:s,path:i.split("-")})}return n}function he(e,t){let n={};for(let{flatKey:r,path:s}of t){let i=r.replace(/-([a-z])/g,(f,d)=>d.toUpperCase()),a=i in e?e[i]:e[r];if(s.length===1)n[s[0]]=a;else{let f=n;for(let d=0;d<s.length-1;d++)(!f[s[d]]||typeof f[s[d]]!="object")&&(f[s[d]]={}),f=f[s[d]];f[s[s.length-1]]=a}}return n}function be(e,t){for(let n of t){let r=n.schema.name.split("_"),s=r.pop(),a=ee(e,r).command(s).description(n.schema.description),f=n.schema.input.shape??{},d=ne(f),g=d.some(({flatKey:o})=>o===b),w=[],O=[],$=[],N=[];for(let{flatKey:o,field:c}of d){let l=c.description??o,u=c;for(;u._def.typeName==="ZodEffects";)u=u._def.schema;let y=u._def.typeName,m=u;m._def.typeName==="ZodNullable"&&(m=m._def.innerType),m._def.typeName==="ZodNumber"&&O.push(o),m._def.typeName==="ZodRecord"&&$.push(o),m._def.typeName==="ZodBoolean"&&N.push(o),y==="ZodBoolean"?a.option(`--${o} [${o}]`,l,!1):y==="ZodNullable"?(a.option(`--${o} <${o}>`,l),w.push(o)):a.requiredOption(`--${o} <${o}>`,l)}g||a.option(`--${b} <${b}>`,L),a.action(async o=>{n.schema.name.startsWith("consent_")||await J.handler({});for(let l of w){let u=l.replace(/-([a-z])/g,(y,m)=>m.toUpperCase());o[u]===void 0&&(o[u]=null)}for(let l of O){let u=l.replace(/-([a-z])/g,(y,m)=>m.toUpperCase());o[u]!=null&&typeof o[u]=="string"&&(o[u]=Number(o[u]))}for(let l of N){let u=l.replace(/-([a-z])/g,(m,A)=>A.toUpperCase()),y=o[u];if(typeof y=="string"){let m=y.toLowerCase();m==="true"||m==="1"?o[u]=!0:(m==="false"||m==="0")&&(o[u]=!1)}}for(let l of $){let u=l.replace(/-([a-z])/g,(y,m)=>m.toUpperCase());if(typeof o[u]=="string")try{o[u]=JSON.parse(o[u])}catch{console.error(`Invalid JSON for --${l}`),process.exit(1)}}let c=he(o,d);!g&&typeof o[b]=="string"&&(c[b]=o[b]);try{let l=await n.handler(c);V(l)}catch(l){console.error(F(l,x())),process.exit(1)}})}}function we(e){if(e.$ref&&e.definitions){let t=e.$ref.replace("#/definitions/","");return e.definitions[t]}return e}function _e(e){return Array.isArray(e.type)?e.type.includes("null"):e.anyOf?e.anyOf.some(t=>t.type==="null"):!1}function ke(e){return Array.isArray(e.type)?e.type.includes("object"):e.anyOf?e.anyOf.some(t=>t.type==="object"):e.type==="object"}function Oe(e){return Array.isArray(e.type)?e.type.some(t=>t==="number"||t==="integer"):e.anyOf?e.anyOf.some(t=>t.type==="number"||t.type==="integer"):e.type==="number"||e.type==="integer"}function $e(e){return Array.isArray(e.type)?e.type.includes("boolean"):e.anyOf?e.anyOf.some(t=>t.type==="boolean"):e.type==="boolean"}var te=new Set(["swaps_transaction_build","swaps_quote_retrieve","transaction_register","virtual-account_offramp_initiate","prediction-market_position_buy","prediction-market_position_sell","prediction-market_position_redeem","polymarket_balance_withdraw_prepare","polymarket_balance_withdraw_submit","commerce_cart_update","commerce_checkout_start","commerce_checkout_pay","card_delegation_approve_transaction_build","card_delegation_revoke_transaction_build","card_delegation_token_retrieve","card_wallet_link","card_wallet_unlink"]);function Ne(e,t){for(let n of t){if(te.has(n.name))continue;let r=n.name.split("_"),s=r.pop(),i=ee(e,r);if(i.commands.find(o=>o.name()===s))continue;let a=i.command(s).description(n.description),f=we(n.inputSchema),d=f.properties??{},g=new Set(f.required??[]),w=[],O=[],$=[],N=[];for(let[o,c]of Object.entries(d)){let l=c.description??o,u=_e(c),y=ke(c),m=Oe(c),A=$e(c);m&&O.push(o),A&&N.push(o),y?($.push(o),g.has(o)&&!u?a.requiredOption(`--${o} <json>`,`${l} (as JSON)`):(a.option(`--${o} <json>`,`${l} (as JSON)`),w.push(o))):u||!g.has(o)?(a.option(`--${o} <${o}>`,l),w.push(o)):a.requiredOption(`--${o} <${o}>`,l)}a.action(async o=>{await J.handler({});for(let c of w)o[c]===void 0&&(o[c]=null);for(let c of O)o[c]!=null&&typeof o[c]=="string"&&(o[c]=Number(o[c]));for(let c of N)if(typeof o[c]=="string"){let l=o[c].toLowerCase();l==="true"||l==="1"?o[c]=!0:(l==="false"||l==="0")&&(o[c]=!1)}for(let c of $)if(typeof o[c]=="string")try{o[c]=JSON.parse(o[c])}catch{console.error(`Invalid JSON for --${c}`),process.exit(1)}try{await H(o);let c=await C._call(n.name,o);V(c),Q()}catch(c){console.error(F(c,x())),process.exit(1)}})}}be(h,j);Ne(h,T);h.command("tools").description("List available tools").action(()=>{let e=[...j.map(n=>({name:n.schema.name,description:n.schema.description})),...T.filter(n=>!j.some(r=>r.schema.name===n.name)&&!te.has(n.name)).map(n=>({name:n.name,description:n.description}))].sort((n,r)=>n.name.localeCompare(r.name)),t=[];for(let n of e){let r=n.name.replace(/_/g," ");t.push(` ${p.green(r.padEnd(28))} ${p.dim(n.description)}`)}t.push(""),t.push(p.dim(`${e.length} tools`)),console.log(t.join(`
17
+ `+M).version(E).option("--json","Output as JSON instead of YAML");function x(){return h.opts().json?"json":"yaml"}function V(e){console.log(R(e,x()))}function Q(){let e=ge();e&&process.stderr.write(e)}h.command("mcp").description("Start MCP server over stdio (for Claude Desktop, Claude Code, etc.)").action(async()=>{let{startMcpServer:e}=await import("./mcp-OCABGJGJ.js");await e()});h.command("serve").description("Local loopback mirror of agents.moonpay.com/api/tools \u2014 warm process for MoonAgents / UIs. GET /health \xB7 POST /api/tools/:tool").option("--port <port>","Port to bind (default 8787)",e=>Number(e),8787).option("--host <host>","Loopback host only (default 127.0.0.1)","127.0.0.1").option("--force","Bind even if something already answers on this port (skip idempotent check)",!1).action(async e=>{let{startServe:t}=await import("./serve-YEVXUSXZ.js");try{await t({host:e.host,port:e.port,idempotent:!e.force})}catch(n){console.error(n instanceof Error?n.message:String(n)),process.exit(1)}});function ee(e,t){let n=e;for(let r of t){let s=n.commands.find(i=>i.name()===r);s||(s=n.command(r)),n=s}return n}function ne(e,t=""){let n=[];for(let[r,s]of Object.entries(e)){let i=t?`${t}-${r}`:r,a=s;for(;a._def.typeName==="ZodEffects";)a=a._def.schema;let f=a;f._def.typeName==="ZodNullable"&&(f=f._def.innerType),f._def.typeName==="ZodObject"&&f.shape?n.push(...ne(f.shape,i)):n.push({flatKey:i,field:s,path:i.split("-")})}return n}function he(e,t){let n={};for(let{flatKey:r,path:s}of t){let i=r.replace(/-([a-z])/g,(f,d)=>d.toUpperCase()),a=i in e?e[i]:e[r];if(s.length===1)n[s[0]]=a;else{let f=n;for(let d=0;d<s.length-1;d++)(!f[s[d]]||typeof f[s[d]]!="object")&&(f[s[d]]={}),f=f[s[d]];f[s[s.length-1]]=a}}return n}function be(e,t){for(let n of t){let r=n.schema.name.split("_"),s=r.pop(),a=ee(e,r).command(s).description(n.schema.description),f=n.schema.input.shape??{},d=ne(f),g=d.some(({flatKey:o})=>o===b),w=[],O=[],$=[],N=[];for(let{flatKey:o,field:c}of d){let l=c.description??o,u=c;for(;u._def.typeName==="ZodEffects";)u=u._def.schema;let y=u._def.typeName,m=u;m._def.typeName==="ZodNullable"&&(m=m._def.innerType),m._def.typeName==="ZodNumber"&&O.push(o),m._def.typeName==="ZodRecord"&&$.push(o),m._def.typeName==="ZodBoolean"&&N.push(o),y==="ZodBoolean"?a.option(`--${o} [${o}]`,l,!1):y==="ZodNullable"?(a.option(`--${o} <${o}>`,l),w.push(o)):a.requiredOption(`--${o} <${o}>`,l)}g||a.option(`--${b} <${b}>`,L),a.action(async o=>{n.schema.name.startsWith("consent_")||await J.handler({});for(let l of w){let u=l.replace(/-([a-z])/g,(y,m)=>m.toUpperCase());o[u]===void 0&&(o[u]=null)}for(let l of O){let u=l.replace(/-([a-z])/g,(y,m)=>m.toUpperCase());o[u]!=null&&typeof o[u]=="string"&&(o[u]=Number(o[u]))}for(let l of N){let u=l.replace(/-([a-z])/g,(m,A)=>A.toUpperCase()),y=o[u];if(typeof y=="string"){let m=y.toLowerCase();m==="true"||m==="1"?o[u]=!0:(m==="false"||m==="0")&&(o[u]=!1)}}for(let l of $){let u=l.replace(/-([a-z])/g,(y,m)=>m.toUpperCase());if(typeof o[u]=="string")try{o[u]=JSON.parse(o[u])}catch{console.error(`Invalid JSON for --${l}`),process.exit(1)}}let c=he(o,d);!g&&typeof o[b]=="string"&&(c[b]=o[b]);try{let l=await n.handler(c);V(l)}catch(l){console.error(F(l,x())),process.exit(1)}})}}function we(e){if(e.$ref&&e.definitions){let t=e.$ref.replace("#/definitions/","");return e.definitions[t]}return e}function _e(e){return Array.isArray(e.type)?e.type.includes("null"):e.anyOf?e.anyOf.some(t=>t.type==="null"):!1}function ke(e){return Array.isArray(e.type)?e.type.includes("object"):e.anyOf?e.anyOf.some(t=>t.type==="object"):e.type==="object"}function Oe(e){return Array.isArray(e.type)?e.type.some(t=>t==="number"||t==="integer"):e.anyOf?e.anyOf.some(t=>t.type==="number"||t.type==="integer"):e.type==="number"||e.type==="integer"}function $e(e){return Array.isArray(e.type)?e.type.includes("boolean"):e.anyOf?e.anyOf.some(t=>t.type==="boolean"):e.type==="boolean"}var te=new Set(["swaps_transaction_build","swaps_quote_retrieve","transaction_register","virtual-account_offramp_initiate","prediction-market_position_buy","prediction-market_position_sell","prediction-market_position_redeem","polymarket_balance_withdraw_prepare","polymarket_balance_withdraw_submit","commerce_cart_update","commerce_checkout_start","commerce_checkout_pay","card_delegation_approve_transaction_build","card_delegation_revoke_transaction_build","card_delegation_token_retrieve","card_wallet_link","card_wallet_unlink"]);function Ne(e,t){for(let n of t){if(te.has(n.name))continue;let r=n.name.split("_"),s=r.pop(),i=ee(e,r);if(i.commands.find(o=>o.name()===s))continue;let a=i.command(s).description(n.description),f=we(n.inputSchema),d=f.properties??{},g=new Set(f.required??[]),w=[],O=[],$=[],N=[];for(let[o,c]of Object.entries(d)){let l=c.description??o,u=_e(c),y=ke(c),m=Oe(c),A=$e(c);m&&O.push(o),A&&N.push(o),y?($.push(o),g.has(o)&&!u?a.requiredOption(`--${o} <json>`,`${l} (as JSON)`):(a.option(`--${o} <json>`,`${l} (as JSON)`),w.push(o))):u||!g.has(o)?(a.option(`--${o} <${o}>`,l),w.push(o)):a.requiredOption(`--${o} <${o}>`,l)}a.action(async o=>{await J.handler({});for(let c of w)o[c]===void 0&&(o[c]=null);for(let c of O)o[c]!=null&&typeof o[c]=="string"&&(o[c]=Number(o[c]));for(let c of N)if(typeof o[c]=="string"){let l=o[c].toLowerCase();l==="true"||l==="1"?o[c]=!0:(l==="false"||l==="0")&&(o[c]=!1)}for(let c of $)if(typeof o[c]=="string")try{o[c]=JSON.parse(o[c])}catch{console.error(`Invalid JSON for --${c}`),process.exit(1)}try{await H(o);let c=await C._call(n.name,o);V(c),Q()}catch(c){console.error(F(c,x())),process.exit(1)}})}}be(h,j);Ne(h,T);h.command("tools").description("List available tools").action(()=>{let e=[...j.map(n=>({name:n.schema.name,description:n.schema.description})),...T.filter(n=>!j.some(r=>r.schema.name===n.name)&&!te.has(n.name)).map(n=>({name:n.name,description:n.description}))].sort((n,r)=>n.name.localeCompare(r.name)),t=[];for(let n of e){let r=n.name.replace(/_/g," ");t.push(` ${p.green(r.padEnd(28))} ${p.dim(n.description)}`)}t.push(""),t.push(p.dim(`${e.length} tools`)),console.log(t.join(`
18
18
  `)),Q()});h.parse();
@@ -7,6 +7,6 @@ Run: npm i -g @moonpay/cli --include=optional`;function y(){try{let e=S("@ledger
7
7
  `),p}async function U(){if(!p)return null;try{let e=y(),i=f().getDeviceSessionState({sessionId:p}),s=await e.firstValueFrom(i.pipe(e.take(1),e.timeout(3e3)));return s.sessionStateType>=1?s.currentApp?.name??null:null}catch{return null}}var M={evm:"Ethereum",solana:"Solana"};function _(e){let n=String(e);return n.includes("6807")||n.includes("6a15")||n.includes("UnknownDeviceExchangeError")}async function C(e){process.stderr.write(`Installing ${e} app on your Ledger...
8
8
  `);let{OpenAppWithDependenciesDeviceAction:n}=y(),i=new n({input:{appName:e}}),t=f().executeDeviceAction({sessionId:E(),deviceAction:i});await m(t,`Install ${e}`,18e4),process.stderr.write(`Installed ${e} app
9
9
  `)}async function R(e){let n=M[e];if(!n||await U()===n)return;process.stderr.write(`Opening ${n} app on your Ledger...
10
- `);let{OpenAppDeviceAction:s}=y(),t=new s({input:{appName:n}}),u=f().executeDeviceAction({sessionId:E(),deviceAction:t});try{await m(u,`Open ${n}`)}catch(c){if(_(c)){await D(),await C(n),await D();return}if(!String(c).includes("isconnect"))throw c}await D()}async function D(){try{await f().disconnect({sessionId:p})}catch{}p=null,await new Promise(e=>setTimeout(e,500)),await P()}function $(e,n=0){switch(e){case"evm":return`44'/60'/${n}'/0/0`;case"solana":return`44'/501'/${n}'/0'`;default:throw new Error(`${e} derivation via Ledger is not supported.`)}}function k(e){return e.startsWith("0x")?e.slice(2):e}function T(e){return e.startsWith("0x")?e:`0x${e}`}async function x(e){let{moonpay:n}=await import("./client-YCF5Z2NY.js"),s=(await n.chain.retrieve({chain:e})).keyFamily;if(s==="bitcoin")throw new Error("Bitcoin address derivation via Ledger is not yet supported.");if(s==="tron")throw new Error("Tron address derivation via Ledger is not supported. The Ethereum signer cannot interact with the Tron Ledger app.");await R(s);let t=$(s),a=E(),u=f();switch(s){case"evm":{let{SignerEthBuilder:c}=I(),l=new c({dmk:u,sessionId:a}).build().getAddress(t,{skipOpenApp:!1});return(await m(l,"Get Ethereum address")).address}case"solana":{let{SignerSolanaBuilder:c}=L(),l=new c({dmk:u,sessionId:a}).build().getAddress(t,{skipOpenApp:!1});return await m(l,"Get Solana address")}default:throw new Error(`Ledger address derivation not supported for ${s}`)}}async function F(){let e={};try{e.ethereum=await x("ethereum")}catch(n){process.stderr.write(`Failed to get Ethereum address: ${n}
10
+ `);let{OpenAppDeviceAction:s}=y(),t=new s({input:{appName:n}}),u=f().executeDeviceAction({sessionId:E(),deviceAction:t});try{await m(u,`Open ${n}`)}catch(c){if(_(c)){await D(),await C(n),await D();return}if(!String(c).includes("isconnect"))throw c}await D()}async function D(){try{await f().disconnect({sessionId:p})}catch{}p=null,await new Promise(e=>setTimeout(e,500)),await P()}function $(e,n=0){switch(e){case"evm":return`44'/60'/${n}'/0/0`;case"solana":return`44'/501'/${n}'/0'`;default:throw new Error(`${e} derivation via Ledger is not supported.`)}}function k(e){return e.startsWith("0x")?e.slice(2):e}function T(e){return e.startsWith("0x")?e:`0x${e}`}async function x(e){let{moonpay:n}=await import("./client-KOA5A3FV.js"),s=(await n.chain.retrieve({chain:e})).keyFamily;if(s==="bitcoin")throw new Error("Bitcoin address derivation via Ledger is not yet supported.");if(s==="tron")throw new Error("Tron address derivation via Ledger is not supported. The Ethereum signer cannot interact with the Tron Ledger app.");await R(s);let t=$(s),a=E(),u=f();switch(s){case"evm":{let{SignerEthBuilder:c}=I(),l=new c({dmk:u,sessionId:a}).build().getAddress(t,{skipOpenApp:!1});return(await m(l,"Get Ethereum address")).address}case"solana":{let{SignerSolanaBuilder:c}=L(),l=new c({dmk:u,sessionId:a}).build().getAddress(t,{skipOpenApp:!1});return await m(l,"Get Solana address")}default:throw new Error(`Ledger address derivation not supported for ${s}`)}}async function F(){let e={};try{e.ethereum=await x("ethereum")}catch(n){process.stderr.write(`Failed to get Ethereum address: ${n}
11
11
  `)}try{e.solana=await x("solana")}catch(n){process.stderr.write(`Failed to get Solana address: ${n}
12
- `)}if(!e.ethereum&&!e.solana)throw new Error("Could not derive any addresses from Ledger device");return e}async function H(e,n){let{moonpay:i}=await import("./client-YCF5Z2NY.js"),t=(await i.chain.retrieve({chain:e})).keyFamily;if(t==="bitcoin")throw new Error("Bitcoin transaction signing via Ledger is not yet supported. Use a software wallet for Bitcoin transactions.");if(t==="tron")throw new Error("Tron transaction signing via Ledger is not supported. Use a software wallet for Tron transactions.");await R(t);let a=$(t),u=E(),c=f();switch(t){case"evm":{let{SignerEthBuilder:d}=I(),l=new d({dmk:c,sessionId:u}).build(),w=T(n.startsWith("0x")?n:Buffer.from(n,"base64").toString("hex")),o=Uint8Array.from(Buffer.from(k(w),"hex")),r=l.signTransaction(a,o,{skipOpenApp:!1}),g=await m(r,"Sign transaction"),{parseTransaction:v,serializeTransaction:A}=await import("viem"),B=v(w);return{transaction:A(B,{r:T(k(g.r)),s:T(k(g.s)),v:BigInt(g.v)})}}case"solana":{let{SignerSolanaBuilder:d}=L(),l=new d({dmk:c,sessionId:u}).build(),{VersionedTransaction:w}=await import("@solana/web3.js"),o=Uint8Array.from(Buffer.from(n,"base64")),r=w.deserialize(o),g=r.message.serialize(),v=l.signTransaction(a,g,{skipOpenApp:!1}),A=await m(v,"Sign Solana transaction");return r.signatures[0]=A,{transaction:Buffer.from(r.serialize()).toString("base64")}}default:throw new Error(`Ledger transaction signing not supported for ${t}`)}}async function V(e,n){let{moonpay:i}=await import("./client-YCF5Z2NY.js"),t=(await i.chain.retrieve({chain:e})).keyFamily;if(t==="bitcoin")throw new Error("Bitcoin message signing via Ledger is not yet supported. Use a software wallet for Bitcoin message signing.");if(t==="tron")throw new Error("Tron message signing via Ledger is not supported. Use a software wallet for Tron message signing.");await R(t);let a=$(t),u=E(),c=f();switch(t){case"evm":{let{SignerEthBuilder:d}=I(),w=new d({dmk:c,sessionId:u}).build().signMessage(a,n,{skipOpenApp:!1}),o=await m(w,"Sign message"),r=k(o.r),g=k(o.s),v=o.v.toString(16).padStart(2,"0");return{signature:`0x${r}${g}${v}`}}case"solana":{let{SignerSolanaBuilder:d}=L(),l=new d({dmk:c,sessionId:u}).build(),w=Buffer.from(n,"utf8").toString("hex"),o=l.signMessage(a,w,{skipOpenApp:!1}),r=await m(o,"Sign Solana message");return{signature:(await import("bs58")).default.encode(r)}}default:throw new Error(`Ledger message signing not supported for ${t}`)}}async function q(){if(p){try{await f().disconnect({sessionId:p})}catch{}p=null}if(h){try{h.close()}catch{}h=null}}export{P as connectLedger,q as disconnectLedger,x as ledgerGetAddress,F as ledgerGetAllAddresses,V as ledgerSignMessage,H as ledgerSignTransaction};
12
+ `)}if(!e.ethereum&&!e.solana)throw new Error("Could not derive any addresses from Ledger device");return e}async function H(e,n){let{moonpay:i}=await import("./client-KOA5A3FV.js"),t=(await i.chain.retrieve({chain:e})).keyFamily;if(t==="bitcoin")throw new Error("Bitcoin transaction signing via Ledger is not yet supported. Use a software wallet for Bitcoin transactions.");if(t==="tron")throw new Error("Tron transaction signing via Ledger is not supported. Use a software wallet for Tron transactions.");await R(t);let a=$(t),u=E(),c=f();switch(t){case"evm":{let{SignerEthBuilder:d}=I(),l=new d({dmk:c,sessionId:u}).build(),w=T(n.startsWith("0x")?n:Buffer.from(n,"base64").toString("hex")),o=Uint8Array.from(Buffer.from(k(w),"hex")),r=l.signTransaction(a,o,{skipOpenApp:!1}),g=await m(r,"Sign transaction"),{parseTransaction:v,serializeTransaction:A}=await import("viem"),B=v(w);return{transaction:A(B,{r:T(k(g.r)),s:T(k(g.s)),v:BigInt(g.v)})}}case"solana":{let{SignerSolanaBuilder:d}=L(),l=new d({dmk:c,sessionId:u}).build(),{VersionedTransaction:w}=await import("@solana/web3.js"),o=Uint8Array.from(Buffer.from(n,"base64")),r=w.deserialize(o),g=r.message.serialize(),v=l.signTransaction(a,g,{skipOpenApp:!1}),A=await m(v,"Sign Solana transaction");return r.signatures[0]=A,{transaction:Buffer.from(r.serialize()).toString("base64")}}default:throw new Error(`Ledger transaction signing not supported for ${t}`)}}async function V(e,n){let{moonpay:i}=await import("./client-KOA5A3FV.js"),t=(await i.chain.retrieve({chain:e})).keyFamily;if(t==="bitcoin")throw new Error("Bitcoin message signing via Ledger is not yet supported. Use a software wallet for Bitcoin message signing.");if(t==="tron")throw new Error("Tron message signing via Ledger is not supported. Use a software wallet for Tron message signing.");await R(t);let a=$(t),u=E(),c=f();switch(t){case"evm":{let{SignerEthBuilder:d}=I(),w=new d({dmk:c,sessionId:u}).build().signMessage(a,n,{skipOpenApp:!1}),o=await m(w,"Sign message"),r=k(o.r),g=k(o.s),v=o.v.toString(16).padStart(2,"0");return{signature:`0x${r}${g}${v}`}}case"solana":{let{SignerSolanaBuilder:d}=L(),l=new d({dmk:c,sessionId:u}).build(),w=Buffer.from(n,"utf8").toString("hex"),o=l.signMessage(a,w,{skipOpenApp:!1}),r=await m(o,"Sign Solana message");return{signature:(await import("bs58")).default.encode(r)}}default:throw new Error(`Ledger message signing not supported for ${t}`)}}async function q(){if(p){try{await f().disconnect({sessionId:p})}catch{}p=null}if(h){try{h.close()}catch{}h=null}}export{P as connectLedger,q as disconnectLedger,x as ledgerGetAddress,F as ledgerGetAllAddresses,V as ledgerSignMessage,H as ledgerSignTransaction};
@@ -1,2 +1,2 @@
1
1
  process.noDeprecation = true; import { createRequire as __createRequire } from "module"; const require = __createRequire(import.meta.url);
2
- import{a,c,d as i}from"./chunk-ACEFIMCT.js";import"./chunk-OYN4MVGH.js";import"./chunk-V7V6LCEH.js";import"./chunk-WFMM5XGD.js";import{e as s,g as u}from"./chunk-QDAWFEIX.js";import"./chunk-LMDE72OE.js";u();import{Server as f}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport as S}from"@modelcontextprotocol/sdk/server/stdio.js";import{CallToolRequestSchema as g,ListToolsRequestSchema as y}from"@modelcontextprotocol/sdk/types.js";async function v(){let o=new f({name:"moonpay",version:s},{capabilities:{tools:{listChanged:!0}}}),r=a(),m=new Map(r.map(t=>[t.name,t]));o.setRequestHandler(y,async()=>({tools:r.map(t=>({name:t.name,description:t.description,inputSchema:t.inputSchema}))})),o.setRequestHandler(g,async t=>{let{name:n,arguments:l={}}=t.params;if(!m.has(n))return{content:[{type:"text",text:`Unknown tool: ${n}`}],isError:!0};try{let e=await i(n,l);return{content:[{type:"text",text:JSON.stringify(e,null,2)}]}}catch(e){return{content:[{type:"text",text:e instanceof c||e instanceof Error?e.message:String(e)}],isError:!0}}});let p=new S;await o.connect(p)}export{v as startMcpServer};
2
+ import{a,c,d as i}from"./chunk-ELSJLR6R.js";import"./chunk-XEPXR457.js";import"./chunk-6YKAGPNJ.js";import"./chunk-U3FONESS.js";import{e as s,g as u}from"./chunk-CGJ3RNXL.js";import"./chunk-LMDE72OE.js";u();import{Server as f}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport as S}from"@modelcontextprotocol/sdk/server/stdio.js";import{CallToolRequestSchema as g,ListToolsRequestSchema as y}from"@modelcontextprotocol/sdk/types.js";async function v(){let o=new f({name:"moonpay",version:s},{capabilities:{tools:{listChanged:!0}}}),r=a(),m=new Map(r.map(t=>[t.name,t]));o.setRequestHandler(y,async()=>({tools:r.map(t=>({name:t.name,description:t.description,inputSchema:t.inputSchema}))})),o.setRequestHandler(g,async t=>{let{name:n,arguments:l={}}=t.params;if(!m.has(n))return{content:[{type:"text",text:`Unknown tool: ${n}`}],isError:!0};try{let e=await i(n,l);return{content:[{type:"text",text:JSON.stringify(e,null,2)}]}}catch(e){return{content:[{type:"text",text:e instanceof c||e instanceof Error?e.message:String(e)}],isError:!0}}});let p=new S;await o.connect(p)}export{v as startMcpServer};
@@ -1,5 +1,5 @@
1
1
  process.noDeprecation = true; import { createRequire as __createRequire } from "module"; const require = __createRequire(import.meta.url);
2
- import{b as v,c as g,d as y}from"./chunk-ACEFIMCT.js";import"./chunk-OYN4MVGH.js";import"./chunk-V7V6LCEH.js";import"./chunk-WFMM5XGD.js";import{e as d,g as E,h as S,p as O}from"./chunk-QDAWFEIX.js";import"./chunk-LMDE72OE.js";E();import{createServer as b}from"http";import{writeFileSync as k,unlinkSync as R,readFileSync as M,existsSync as $}from"fs";import{join as N}from"path";import{homedir as A}from"os";O();var h="127.0.0.1",x=8787,m=N(A(),".config","moonpay","serve.json"),f="/api/tools";function w(e){let t=e.trim().replace(/^v/,"").match(/^(\d+)\.(\d+)\.(\d+)/);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}function I(e,t){let r=w(e),s=w(t);if(!r||!s)return!0;for(let i=0;i<3;i++){if(r[i]<s[i])return!0;if(r[i]>s[i])return!1}return!1}function J(e){if(!(!Number.isFinite(e)||e<=0))try{process.kill(e,"SIGTERM")}catch{}}function _(e){S(),k(m,JSON.stringify(e,null,2)+`
2
+ import{b as v,c as g,d as y}from"./chunk-ELSJLR6R.js";import"./chunk-XEPXR457.js";import"./chunk-6YKAGPNJ.js";import"./chunk-U3FONESS.js";import{e as d,g as E,h as S,p as O}from"./chunk-CGJ3RNXL.js";import"./chunk-LMDE72OE.js";E();import{createServer as b}from"http";import{writeFileSync as k,unlinkSync as R,readFileSync as M,existsSync as $}from"fs";import{join as N}from"path";import{homedir as A}from"os";O();var h="127.0.0.1",x=8787,m=N(A(),".config","moonpay","serve.json"),f="/api/tools";function w(e){let t=e.trim().replace(/^v/,"").match(/^(\d+)\.(\d+)\.(\d+)/);return t?[Number(t[1]),Number(t[2]),Number(t[3])]:null}function I(e,t){let r=w(e),s=w(t);if(!r||!s)return!0;for(let i=0;i<3;i++){if(r[i]<s[i])return!0;if(r[i]>s[i])return!1}return!1}function J(e){if(!(!Number.isFinite(e)||e<=0))try{process.kill(e,"SIGTERM")}catch{}}function _(e){S(),k(m,JSON.stringify(e,null,2)+`
3
3
  `,{encoding:"utf-8",mode:384})}function j(){try{$(m)&&R(m)}catch{}}function z(){try{return JSON.parse(M(m,"utf-8"))}catch{return null}}async function L(e){let t=[];for await(let s of e)t.push(typeof s=="string"?Buffer.from(s):s);if(t.length===0)return{};let r=Buffer.concat(t).toString("utf-8").trim();return r?JSON.parse(r):{}}function l(e,t,r){let s=JSON.stringify(r);e.writeHead(t,{"Content-Type":"application/json; charset=utf-8","Content-Length":Buffer.byteLength(s)}),e.end(s)}async function B(e,t,r=500){let s=new AbortController,i=setTimeout(()=>s.abort(),r);try{let u=await fetch(`http://${e}:${t}/health`,{signal:s.signal});if(!u.ok)return null;let a=await u.json();return a.ok?{pid:typeof a.pid=="number"?a.pid:-1,host:e,port:t,startedAt:typeof a.startedAt=="string"?a.startedAt:"",version:typeof a.version=="string"?a.version:"",toolsPath:typeof a.toolsPath=="string"?a.toolsPath:void 0}:null}catch{return null}finally{clearTimeout(i)}}async function P(e,t,r){let s=e.headers.host??`${h}`,i=new URL(e.url||"/",`http://${s}`),u=(e.method||"GET").toUpperCase();if(u==="GET"&&i.pathname==="/health"){l(t,200,{ok:!0,version:d,pid:process.pid,startedAt:r,toolsPath:f});return}let a=i.pathname.match(/^\/api\/tools\/([a-z0-9_]+)$/i);if(u==="POST"&&a){let c=a[1];if(!v(c)){l(t,404,{error:`Unknown tool: ${c}`,tool:c});return}let n={};try{let o=await L(e);if(o&&typeof o=="object"&&!Array.isArray(o))n=o;else if(o!=null){l(t,400,{error:"Body must be a JSON object"});return}}catch{l(t,400,{error:"Invalid JSON body"});return}try{let o=await y(c,n);l(t,200,o);return}catch(o){if(o instanceof g){l(t,404,{error:o.message,tool:c});return}let p=o instanceof Error?o.message:String(o);l(t,500,{error:p,tool:c});return}}l(t,404,{error:"Not found",hint:"GET /health or POST /api/tools/:tool"})}async function K(e={}){let t=e.host??h,r=e.port??x,s=e.idempotent!==!1;if(t!=="127.0.0.1"&&t!=="localhost"&&t!=="::1")throw new Error(`mp serve refuses non-loopback host '${t}' \u2014 bind 127.0.0.1 only`);if(s){let n=await B(t,r);if(n){let o=n.toolsPath===f,p=!I(n.version,d);if(o&&p)return process.stdout.write(JSON.stringify({ok:!0,alreadyRunning:!0,host:t,port:r,pid:n.pid,version:n.version,toolsPath:n.toolsPath},null,2)+`
4
4
  `),{host:t,port:r};process.stderr.write(`[mp serve] replacing incompatible daemon pid=${n.pid} v${n.version||"?"} toolsPath=${n.toolsPath??"\u2205"} \u2192 v${d}
5
5
  `),J(n.pid),await new Promise(T=>setTimeout(T,200))}}let i=new Date().toISOString(),u=b((n,o)=>{P(n,o,i).catch(p=>{l(o,500,{error:p instanceof Error?p.message:String(p)})})});await new Promise((n,o)=>{u.once("error",o),u.listen(r,t,()=>n())});let a={pid:process.pid,host:t,port:r,startedAt:i,version:d};_(a);let c=()=>{j(),u.close(()=>process.exit(0))};return process.once("SIGINT",c),process.once("SIGTERM",c),process.stdout.write(JSON.stringify({ok:!0,alreadyRunning:!1,host:t,port:r,pid:process.pid,version:d,endpoints:{health:`http://${t}:${r}/health`,tools:`http://${t}:${r}${f}/:tool`},toolsPath:f},null,2)+`
@@ -1,2 +1,2 @@
1
1
  process.noDeprecation = true; import { createRequire as __createRequire } from "module"; const require = __createRequire(import.meta.url);
2
- import{A as u,B as v,C as w,g as a,h as b,i as c,j as d,k as e,l as f,m as g,n as h,o as i,p as j,q as k,r as l,s as m,t as n,u as o,v as p,w as q,x as r,y as s,z as t}from"./chunk-WFMM5XGD.js";import"./chunk-QDAWFEIX.js";import"./chunk-LMDE72OE.js";export{m as addHardwareWallet,u as addWallet,d as createWallet,j as deleteWallet,l as exportSecret,h as findWallet,i as findWalletOrThrow,a as getVaultPath,e as importMnemonic,f as importPrivateKey,g as listWallets,s as loadWallets,c as migrateWallets,w as mutateWallets,p as owsSignMessage,o as owsSignTransaction,q as owsSignTypedData,n as refreshHardwareAddresses,t as removeWallet,k as renameWallet,b as requireMigrationCheck,r as resolveSigningKey,v as saveWallets};
2
+ import{A as u,B as v,C as w,g as a,h as b,i as c,j as d,k as e,l as f,m as g,n as h,o as i,p as j,q as k,r as l,s as m,t as n,u as o,v as p,w as q,x as r,y as s,z as t}from"./chunk-U3FONESS.js";import"./chunk-CGJ3RNXL.js";import"./chunk-LMDE72OE.js";export{m as addHardwareWallet,u as addWallet,d as createWallet,j as deleteWallet,l as exportSecret,h as findWallet,i as findWalletOrThrow,a as getVaultPath,e as importMnemonic,f as importPrivateKey,g as listWallets,s as loadWallets,c as migrateWallets,w as mutateWallets,p as owsSignMessage,o as owsSignTransaction,q as owsSignTypedData,n as refreshHardwareAddresses,t as removeWallet,k as renameWallet,b as requireMigrationCheck,r as resolveSigningKey,v as saveWallets};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moonpay/cli",
3
- "version": "1.96.1",
3
+ "version": "1.96.2",
4
4
  "description": "MoonPay CLI — how agents move money",
5
5
  "homepage": "https://agents.moonpay.com",
6
6
  "publishConfig": {