@moonpay/cli 0.13.4 → 0.14.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.
@@ -1,3 +1,3 @@
1
1
  process.noDeprecation = true; import { createRequire as __createRequire } from "module"; const require = __createRequire(import.meta.url);
2
- import{a as x,b as u,c as K,e as U,i as W}from"./chunk-HJJKANGF.js";import{existsSync as je,readFileSync as He,writeFileSync as G,renameSync as q}from"fs";import{join as N}from"path";import{homedir as Me}from"os";import{randomBytes as z}from"crypto";import{execFileSync as _,execSync as ye}from"child_process";import{randomBytes as me}from"crypto";import{existsSync as ge,readFileSync as he,writeFileSync as Se}from"fs";import{homedir as ve,platform as j}from"os";import{join as Ce}from"path";import*as o from"fs";import*as L from"os";import*as S from"path";import{readFileSync as ee}from"fs";import{join as re}from"path";import{homedir as te}from"os";var ne="0.13.4",oe="X-CLI-Version",se="X-Agent-Id",p;function ie(){if(p!==void 0)return p;try{p=JSON.parse(ee(re(te(),".config","moonpay","consent.json"),"utf-8")).agentId??null}catch{p=null}return p??null}function B(){let e={"Content-Type":"application/json",[oe]:ne},r=ie();return r&&(e[se]=r),e}var m=S.join(L.homedir(),".config","moonpay"),I=S.join(m,"config.json"),g=S.join(m,"credentials.json"),y=S.join(m,".credentials.lock"),F={baseUrl:"https://agents.moonpay.com"};function f(){o.existsSync(m)||o.mkdirSync(m,{recursive:!0,mode:448})}function $(e,r,t){let n=e+`.tmp.${process.pid}`;o.writeFileSync(n,r,{encoding:"utf-8",mode:t}),o.renameSync(n,e)}var ce=3e4;function ae(){f();try{let e=o.openSync(y,o.constants.O_CREAT|o.constants.O_EXCL|o.constants.O_WRONLY,384);o.writeSync(e,JSON.stringify({pid:process.pid,ts:Date.now()})),o.closeSync(e)}catch(e){if(e.code!=="EEXIST")throw e;try{let r=JSON.parse(o.readFileSync(y,"utf-8"));if(Date.now()-r.ts<ce)return null}catch{}try{o.unlinkSync(y)}catch{}try{let r=o.openSync(y,o.constants.O_CREAT|o.constants.O_EXCL|o.constants.O_WRONLY,384);o.writeSync(r,JSON.stringify({pid:process.pid,ts:Date.now()})),o.closeSync(r)}catch{return null}}return()=>{try{o.unlinkSync(y)}catch{}}}function J(){if(!o.existsSync(I))return null;try{let e=JSON.parse(o.readFileSync(I,"utf-8"));return e.baseUrl?e:null}catch{return null}}function nr(){let e=J();return e||(le(F),F)}function E(){if(!o.existsSync(g))return null;let e=h();if(!e)return null;try{let r=JSON.parse(o.readFileSync(g,"utf-8")),t=x.parse(r),n=K(t,e),s=JSON.parse(n);return!s.accessToken||!s.baseUrl?null:s}catch{return null}}function fe(e){let r=k(),t=u(JSON.stringify(e),r);f(),$(g,JSON.stringify(t,null,2),384)}function le(e){f(),$(I,JSON.stringify(e,null,2),384)}function or(){o.existsSync(g)&&o.unlinkSync(g)}function sr(){let e=J(),r=E();return e?.baseUrl??r?.baseUrl??F.baseUrl}async function de(e,r,t){let n=await fetch(`${e}/api/tools/${encodeURIComponent(r)}`,{method:"POST",signal:AbortSignal.timeout(15e3),headers:B(),body:JSON.stringify(t)}),s=await n.json();if(!n.ok){let i=s;throw new Error(i?.error??`${r} failed (${n.status})`)}return s}async function ue(e){if(!e.refreshToken)throw new Error("No refresh token available");let r=ae();if(!r){await new Promise(n=>setTimeout(n,2e3));let t=E();if(t&&t.expiresAt>Date.now())return t;throw new Error("Token refresh failed (concurrent refresh in progress)")}try{let t=E();if(t&&t.expiresAt>Date.now()+6e4)return t;let n=await de(e.baseUrl,"refresh",{refreshToken:e.refreshToken}),s={accessToken:n.accessToken,refreshToken:n.refreshToken,expiresAt:n.expiresAt*1e3,baseUrl:e.baseUrl};return fe(s),s}finally{r()}}var pe=300*1e3;async function ir(){let e=E();if(!e)return null;if(Date.now()>=e.expiresAt-pe){if(e.refreshToken)try{return(await ue(e)).accessToken}catch{return null}return null}return e.accessToken}var d="moonpay-cli",v="encryption-key",O=Ce(ve(),".config","moonpay",".encryption-key");function we(e){try{_("security",["delete-generic-password","-s",d,"-a",v],{stdio:"ignore"})}catch{}_("security",["add-generic-password","-s",d,"-a",v,"-w",e],{stdio:"ignore"})}function xe(){try{return _("security",["find-generic-password","-s",d,"-a",v,"-w"],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()}catch{return null}}function Ke(e){ye(`printf '%s' | secret-tool store --label="${d}" service "${d}" account "${v}"`,{input:e,stdio:["pipe","ignore","ignore"]})}function Ee(){try{return _("secret-tool",["lookup","service",d,"account",v],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()}catch{return null}}function ke(e){f(),Se(O,e,{encoding:"utf-8",mode:384})}function _e(){try{return ge(O)&&he(O,"utf-8").trim()||null}catch{return null}}function Oe(e){try{let r=j();return r==="darwin"?(we(e),!0):r==="linux"?(Ke(e),!0):!1}catch{return!1}}function be(){let e=j();return e==="darwin"?xe():e==="linux"?Ee():null}function h(){let e=process.env.MOONPAY_ENCRYPTION_KEY;return e||(be()??_e())}function k(){let e=h();if(e)return e;let r=me(32).toString("hex");return Oe(r)||(ke(r),process.stderr.write("Note: Keychain unavailable. Encryption key stored in "+O+`
2
+ import{a as x,b as u,c as K,e as U,i as W}from"./chunk-HJJKANGF.js";import{existsSync as je,readFileSync as He,writeFileSync as G,renameSync as q}from"fs";import{join as N}from"path";import{homedir as Me}from"os";import{randomBytes as z}from"crypto";import{execFileSync as _,execSync as ye}from"child_process";import{randomBytes as me}from"crypto";import{existsSync as ge,readFileSync as he,writeFileSync as Se}from"fs";import{homedir as ve,platform as j}from"os";import{join as Ce}from"path";import*as o from"fs";import*as L from"os";import*as S from"path";import{readFileSync as ee}from"fs";import{join as re}from"path";import{homedir as te}from"os";var ne="0.14.0",oe="X-CLI-Version",se="X-Agent-Id",p;function ie(){if(p!==void 0)return p;try{p=JSON.parse(ee(re(te(),".config","moonpay","consent.json"),"utf-8")).agentId??null}catch{p=null}return p??null}function B(){let e={"Content-Type":"application/json",[oe]:ne},r=ie();return r&&(e[se]=r),e}var m=S.join(L.homedir(),".config","moonpay"),I=S.join(m,"config.json"),g=S.join(m,"credentials.json"),y=S.join(m,".credentials.lock"),F={baseUrl:"https://agents.moonpay.com"};function f(){o.existsSync(m)||o.mkdirSync(m,{recursive:!0,mode:448})}function $(e,r,t){let n=e+`.tmp.${process.pid}`;o.writeFileSync(n,r,{encoding:"utf-8",mode:t}),o.renameSync(n,e)}var ce=3e4;function ae(){f();try{let e=o.openSync(y,o.constants.O_CREAT|o.constants.O_EXCL|o.constants.O_WRONLY,384);o.writeSync(e,JSON.stringify({pid:process.pid,ts:Date.now()})),o.closeSync(e)}catch(e){if(e.code!=="EEXIST")throw e;try{let r=JSON.parse(o.readFileSync(y,"utf-8"));if(Date.now()-r.ts<ce)return null}catch{}try{o.unlinkSync(y)}catch{}try{let r=o.openSync(y,o.constants.O_CREAT|o.constants.O_EXCL|o.constants.O_WRONLY,384);o.writeSync(r,JSON.stringify({pid:process.pid,ts:Date.now()})),o.closeSync(r)}catch{return null}}return()=>{try{o.unlinkSync(y)}catch{}}}function J(){if(!o.existsSync(I))return null;try{let e=JSON.parse(o.readFileSync(I,"utf-8"));return e.baseUrl?e:null}catch{return null}}function nr(){let e=J();return e||(le(F),F)}function E(){if(!o.existsSync(g))return null;let e=h();if(!e)return null;try{let r=JSON.parse(o.readFileSync(g,"utf-8")),t=x.parse(r),n=K(t,e),s=JSON.parse(n);return!s.accessToken||!s.baseUrl?null:s}catch{return null}}function fe(e){let r=k(),t=u(JSON.stringify(e),r);f(),$(g,JSON.stringify(t,null,2),384)}function le(e){f(),$(I,JSON.stringify(e,null,2),384)}function or(){o.existsSync(g)&&o.unlinkSync(g)}function sr(){let e=J(),r=E();return e?.baseUrl??r?.baseUrl??F.baseUrl}async function de(e,r,t){let n=await fetch(`${e}/api/tools/${encodeURIComponent(r)}`,{method:"POST",signal:AbortSignal.timeout(15e3),headers:B(),body:JSON.stringify(t)}),s=await n.json();if(!n.ok){let i=s;throw new Error(i?.error??`${r} failed (${n.status})`)}return s}async function ue(e){if(!e.refreshToken)throw new Error("No refresh token available");let r=ae();if(!r){await new Promise(n=>setTimeout(n,2e3));let t=E();if(t&&t.expiresAt>Date.now())return t;throw new Error("Token refresh failed (concurrent refresh in progress)")}try{let t=E();if(t&&t.expiresAt>Date.now()+6e4)return t;let n=await de(e.baseUrl,"refresh",{refreshToken:e.refreshToken}),s={accessToken:n.accessToken,refreshToken:n.refreshToken,expiresAt:n.expiresAt*1e3,baseUrl:e.baseUrl};return fe(s),s}finally{r()}}var pe=300*1e3;async function ir(){let e=E();if(!e)return null;if(Date.now()>=e.expiresAt-pe){if(e.refreshToken)try{return(await ue(e)).accessToken}catch{return null}return null}return e.accessToken}var d="moonpay-cli",v="encryption-key",O=Ce(ve(),".config","moonpay",".encryption-key");function we(e){try{_("security",["delete-generic-password","-s",d,"-a",v],{stdio:"ignore"})}catch{}_("security",["add-generic-password","-s",d,"-a",v,"-w",e],{stdio:"ignore"})}function xe(){try{return _("security",["find-generic-password","-s",d,"-a",v,"-w"],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()}catch{return null}}function Ke(e){ye(`printf '%s' | secret-tool store --label="${d}" service "${d}" account "${v}"`,{input:e,stdio:["pipe","ignore","ignore"]})}function Ee(){try{return _("secret-tool",["lookup","service",d,"account",v],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()}catch{return null}}function ke(e){f(),Se(O,e,{encoding:"utf-8",mode:384})}function _e(){try{return ge(O)&&he(O,"utf-8").trim()||null}catch{return null}}function Oe(e){try{let r=j();return r==="darwin"?(we(e),!0):r==="linux"?(Ke(e),!0):!1}catch{return!1}}function be(){let e=j();return e==="darwin"?xe():e==="linux"?Ee():null}function h(){let e=process.env.MOONPAY_ENCRYPTION_KEY;return e||(be()??_e())}function k(){let e=h();if(e)return e;let r=me(32).toString("hex");return Oe(r)||(ke(r),process.stderr.write("Note: Keychain unavailable. Encryption key stored in "+O+`
3
3
  `)),r}import{createHash as H}from"crypto";import{HDKey as R}from"@scure/bip32";import{mnemonicToSeedSync as C}from"@scure/bip39";import{keccak_256 as M}from"@noble/hashes/sha3";import{derivePath as V}from"ed25519-hd-key";import*as Y from"bitcoinjs-lib";import Te from"ecpair";import*as b from"tiny-secp256k1";import{Keypair as Ne}from"@solana/web3.js";import Ae from"bs58";import{WalletContractV5R1 as Ie}from"@ton/ton";import{keyPairFromSeed as Fe}from"@ton/crypto";var Re=Te(b);function w(e,r=0){switch(e){case"solana":return`m/44'/501'/${r}'/0'`;case"ethereum":return`m/44'/60'/${r}'/0/0`;case"bitcoin":return`m/84'/0'/${r}'/0/0`;case"tron":return`m/44'/195'/${r}'/0/0`;case"ton":return`m/44'/607'/${r}'`}}function l(e,r,t=0){switch(r){case"solana":return De(e,t);case"ethereum":return Pe(e,t);case"bitcoin":return Be(e,t);case"tron":return Le(e,t);case"ton":return Je(e,t)}}function kr(e,r=0){return{solana:l(e,"solana",r).address,ethereum:l(e,"ethereum",r).address,bitcoin:l(e,"bitcoin",r).address,tron:l(e,"tron",r).address,ton:l(e,"ton",r).address}}function De(e,r){let t=C(e),n=w("solana",r),{key:s}=V(n,Buffer.from(t).toString("hex")),i=Ne.fromSeed(Uint8Array.from(s));return{privateKey:i.secretKey,address:i.publicKey.toBase58()}}function Pe(e,r){let t=C(e),n=R.fromMasterSeed(t),s=w("ethereum",r),i=n.derive(s);if(!i.privateKey)throw new Error("Failed to derive EVM private key");let a=Ue(i.publicKey);return{privateKey:i.privateKey,address:a}}function Ue(e){let r=b.pointCompress(e,!1),n=X(r.slice(1)).slice(-20),s="0x"+Buffer.from(n).toString("hex");return We(s)}function X(e){return M(e)}function We(e){let r=e.toLowerCase().replace("0x",""),t=Buffer.from(M(Buffer.from(r,"utf8"))).toString("hex"),n="0x";for(let s=0;s<r.length;s++)n+=parseInt(t[s],16)>=8?r[s].toUpperCase():r[s];return n}function Be(e,r){let t=C(e),n=R.fromMasterSeed(t),s=w("bitcoin",r),i=n.derive(s);if(!i.privateKey)throw new Error("Failed to derive Bitcoin private key");let a=Re.fromPrivateKey(Buffer.from(i.privateKey)),{address:c}=Y.payments.p2wpkh({pubkey:Buffer.from(a.publicKey)});if(!c)throw new Error("Failed to derive Bitcoin address");return{privateKey:i.privateKey,address:c}}function Le(e,r){let t=C(e),n=R.fromMasterSeed(t),s=w("tron",r),i=n.derive(s);if(!i.privateKey)throw new Error("Failed to derive Tron private key");let a=$e(i.publicKey);return{privateKey:i.privateKey,address:a}}function $e(e){let r=b.pointCompress(e,!1),n=X(r.slice(1)).slice(-20),s=Buffer.concat([Buffer.from([65]),Buffer.from(n)]),i=H("sha256").update(s).digest(),a=H("sha256").update(i).digest(),c=Buffer.concat([s,a.slice(0,4)]);return Ae.encode(c)}function Je(e,r){let t=C(e),n=w("ton",r),{key:s}=V(n,Buffer.from(t).toString("hex")),i=Fe(Buffer.from(s)),a=Ie.create({publicKey:Buffer.from(i.publicKey)});return{privateKey:i.secretKey,address:a.address.toString({bounceable:!1})}}import Ve from"bs58";var D=N(Me(),".config","moonpay"),T=N(D,"wallets.json");function Q(){if(!je(T))return[];let e=h();if(!e)throw new Error("Encryption key not found. Set MOONPAY_ENCRYPTION_KEY or ensure OS keychain is accessible.");let r=JSON.parse(He(T,"utf-8")),t=x.parse(r),n=K(t,e),i=(JSON.parse(n).wallets??[]).map(c=>W.parse(c)),a=!1;for(let c of i)if(c.type==="hd"&&!c.addresses.ton){let A=l(c.mnemonic,"ton");c.addresses.ton=A.address,a=!0}if(a){let c=JSON.stringify({wallets:i}),A=u(c,e);f();let P=N(D,`.wallets.${z(4).toString("hex")}.tmp`);G(P,JSON.stringify(A,null,2),{mode:384}),q(P,T)}return i}function Ye(e){let r=k(),t=JSON.stringify({wallets:e}),n=u(t,r);f();let s=N(D,`.wallets.${z(4).toString("hex")}.tmp`);G(s,JSON.stringify(n,null,2),{mode:384}),q(s,T)}function Z(e){let r=Q();e(r),Ye(r)}function Xe(e){let r=Q();for(let t of r){if(t.name===e)return t;for(let n of Object.values(t.addresses))if(n===e)return t}return null}function Ur(e){let r=Xe(e);if(!r)throw new Error(`Wallet "${e}" not found`);return r}function Wr(e){Z(r=>{if(r.some(t=>t.name===e.name))throw new Error(`Wallet "${e.name}" already exists`);r.push(e)})}function Br(e){Z(r=>{let t=r.findIndex(n=>n.name===e);if(t===-1)throw new Error(`Wallet "${e}" not found`);r.splice(t,1)})}function Lr(e,r){if(e.type==="hardware")throw new Error(`Wallet "${e.name}" is a hardware wallet. Signing must happen on the device \u2014 use ledgerSignTransaction/ledgerSignMessage instead.`);let t=U[r];if(e.type==="imported"){if(e.chain!==t)throw new Error(`Wallet "${e.name}" was imported for ${e.chain}, cannot sign for ${r}.`);return{privateKey:Ge(e.privateKey,t),address:e.addresses[t]}}let n=l(e.mnemonic,t);return{privateKey:n.privateKey,address:n.address}}function Ge(e,r){if(r==="solana")return Ve.decode(e);let t=e.startsWith("0x")?e.slice(2):e;return Uint8Array.from(Buffer.from(t,"hex"))}export{ne as a,B as b,f as c,nr as d,E as e,fe as f,or as g,sr as h,de as i,ue as j,ir as k,kr as l,Q as m,Ye as n,Z as o,Xe as p,Ur as q,Wr as r,Br as s,Lr as t};
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 R,b as S,c as T,d as j,e as k}from"./chunk-DMY6FW35.js";import{a as C,h as A,p as J}from"./chunk-DPVUTAYJ.js";import{e as v}from"./chunk-HJJKANGF.js";import"./chunk-LMDE72OE.js";import{Command as ne}from"commander";var Y=!process.env.NO_COLOR&&process.stdout.isTTY===!0;function $(e){return t=>Y?`${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 O(e){if(e==null)return!0;let t=typeof e;return t==="string"||t==="number"||t==="boolean"}function _(e){return e==null?"-":String(e)}function N(e,t=0){let n=" ".repeat(t);return O(e)?`${n}${_(e)}`:Array.isArray(e)?e.length===0?`${n}${p.dim("(empty)")}`:e.every(O)?e.map(r=>`${n}- ${_(r)}`).join(`
3
+ import{a as R,b as S,c as T,d as j,e as k}from"./chunk-DJJNMEPR.js";import{a as C,h as A,p as J}from"./chunk-XEYPP2ON.js";import{e as v}from"./chunk-HJJKANGF.js";import"./chunk-LMDE72OE.js";import{Command as ne}from"commander";var Y=!process.env.NO_COLOR&&process.stdout.isTTY===!0;function $(e){return t=>Y?`${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 O(e){if(e==null)return!0;let t=typeof e;return t==="string"||t==="number"||t==="boolean"}function _(e){return e==null?"-":String(e)}function N(e,t=0){let n=" ".repeat(t);return O(e)?`${n}${_(e)}`:Array.isArray(e)?e.length===0?`${n}${p.dim("(empty)")}`:e.every(O)?e.map(r=>`${n}- ${_(r)}`).join(`
4
4
  `):e.map(r=>{if(typeof r!="object"||r===null)return`${n}- ${_(r)}`;let o=Object.entries(r),a=[],[c,f]=o[0];O(f)?a.push(`${n}- ${p.bold(c)}: ${_(f)}`):(a.push(`${n}- ${p.bold(c)}:`),a.push(N(f,t+2)));for(let[m,y]of o.slice(1))O(y)?a.push(`${n} ${p.bold(m)}: ${_(y)}`):(a.push(`${n} ${p.bold(m)}:`),a.push(N(y,t+2)));return a.join(`
5
5
  `)}).join(`
6
6
 
@@ -14,5 +14,5 @@ ${N(a,t+1)}`).join(`
14
14
 
15
15
  Run \`mp skill install\` to install AI skills for Claude Code.
16
16
 
17
- `+T).version(C).option("--json","Output as JSON instead of YAML");function re(){return h.opts().json?"json":"yaml"}function D(e){console.log(F(e,re()))}function U(){let e=te();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-K7BGAYRS.js");await e()});function M(e,t){let n=e;for(let r of t){let o=n.commands.find(a=>a.name()===r);o||(o=n.command(r)),n=o}return n}function Z(e,t=""){let n=[];for(let[r,o]of Object.entries(e)){let a=t?`${t}-${r}`:r,c=o;for(;c._def.typeName==="ZodEffects";)c=c._def.schema;let f=c;f._def.typeName==="ZodNullable"&&(f=f._def.innerType),f._def.typeName==="ZodObject"&&f.shape?n.push(...Z(f.shape,a)):n.push({flatKey:a,field:o,path:a.split("-")})}return n}function oe(e,t){let n={};for(let{flatKey:r,path:o}of t){let a=r.replace(/-([a-z])/g,(f,m)=>m.toUpperCase()),c=a in e?e[a]:e[r];if(o.length===1)n[o[0]]=c;else{let f=n;for(let m=0;m<o.length-1;m++)(!f[o[m]]||typeof f[o[m]]!="object")&&(f[o[m]]={}),f=f[o[m]];f[o[o.length-1]]=c}}return n}function se(e,t){for(let n of t){let r=n.schema.name.split("_"),o=r.pop(),c=M(e,r).command(o).description(n.schema.description),f=n.schema.input.shape??{},m=Z(f),y=[],b=[],w=[];for(let{flatKey:u,field:i}of m){let s=i.description??u,l=i;for(;l._def.typeName==="ZodEffects";)l=l._def.schema;let g=l._def.typeName,d=l;d._def.typeName==="ZodNullable"&&(d=d._def.innerType),d._def.typeName==="ZodNumber"&&b.push(u),d._def.typeName==="ZodRecord"&&w.push(u),g==="ZodBoolean"?c.option(`--${u}`,s,!1):g==="ZodNullable"?(c.option(`--${u} <${u}>`,s),y.push(u)):c.requiredOption(`--${u} <${u}>`,s)}c.action(async u=>{n.schema.name.startsWith("consent_")||await j.handler({});for(let s of y){let l=s.replace(/-([a-z])/g,(g,d)=>d.toUpperCase());u[l]===void 0&&(u[l]=null)}for(let s of b){let l=s.replace(/-([a-z])/g,(g,d)=>d.toUpperCase());u[l]!=null&&typeof u[l]=="string"&&(u[l]=Number(u[l]))}for(let s of w){let l=s.replace(/-([a-z])/g,(g,d)=>d.toUpperCase());if(typeof u[l]=="string")try{u[l]=JSON.parse(u[l])}catch{console.error(`Invalid JSON for --${s}`),process.exit(1)}}let i=oe(u,m);try{let s=await n.handler(i);D(s)}catch(s){console.error(s.message),process.exit(1)}})}}function ie(e){if(e.$ref&&e.definitions){let t=e.$ref.replace("#/definitions/","");return e.definitions[t]}return e}function ae(e){return Array.isArray(e.type)?e.type.includes("null"):e.anyOf?e.anyOf.some(t=>t.type==="null"):!1}function ce(e){return Array.isArray(e.type)?e.type.includes("object"):e.anyOf?e.anyOf.some(t=>t.type==="object"):e.type==="object"}function le(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 fe(e){let t=e.wallet,n=e.chain;if(typeof t!="string"||typeof n!="string")return;let r=J(t);if(!r)return;let o=v[n];if(!o)return;let a=r.addresses[o];a&&(e.wallet=a)}var q=new Set(["swaps_transaction_build","token_transfer","transaction_register","virtual-account_offramp_initiate","prediction-market_position_buy","prediction-market_position_sell","commerce_cart_update","commerce_checkout_start","commerce_checkout_pay"]);function ue(e,t){for(let n of t){if(q.has(n.name))continue;let r=n.name.split("_"),o=r.pop(),a=M(e,r);if(a.commands.find(i=>i.name()===o))continue;let c=a.command(o).description(n.description),f=ie(n.inputSchema),m=f.properties??{},y=new Set(f.required??[]),b=[],w=[],u=[];for(let[i,s]of Object.entries(m)){let l=s.description??i,g=ae(s),d=ce(s);le(s)&&w.push(i),d?(u.push(i),y.has(i)&&!g?c.requiredOption(`--${i} <json>`,`${l} (as JSON)`):(c.option(`--${i} <json>`,`${l} (as JSON)`),b.push(i))):g||!y.has(i)?(c.option(`--${i} <${i}>`,l),b.push(i)):c.requiredOption(`--${i} <${i}>`,l)}c.action(async i=>{await j.handler({});for(let s of b)i[s]===void 0&&(i[s]=null);for(let s of w)i[s]!=null&&typeof i[s]=="string"&&(i[s]=Number(i[s]));for(let s of u)if(typeof i[s]=="string")try{i[s]=JSON.parse(i[s])}catch{console.error(`Invalid JSON for --${s}`),process.exit(1)}try{fe(i);let s=A(),l=await R(s,n.name,i);D(l),U()}catch(s){console.error(s.message),process.exit(1)}})}}se(h,k);ue(h,S);h.command("tools").description("List available tools").action(()=>{let e=[...k.map(n=>({name:n.schema.name,description:n.schema.description})),...S.filter(n=>!k.some(r=>r.schema.name===n.name)&&!q.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
+ `+T).version(C).option("--json","Output as JSON instead of YAML");function re(){return h.opts().json?"json":"yaml"}function D(e){console.log(F(e,re()))}function U(){let e=te();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-BS2SIT5V.js");await e()});function M(e,t){let n=e;for(let r of t){let o=n.commands.find(a=>a.name()===r);o||(o=n.command(r)),n=o}return n}function Z(e,t=""){let n=[];for(let[r,o]of Object.entries(e)){let a=t?`${t}-${r}`:r,c=o;for(;c._def.typeName==="ZodEffects";)c=c._def.schema;let f=c;f._def.typeName==="ZodNullable"&&(f=f._def.innerType),f._def.typeName==="ZodObject"&&f.shape?n.push(...Z(f.shape,a)):n.push({flatKey:a,field:o,path:a.split("-")})}return n}function oe(e,t){let n={};for(let{flatKey:r,path:o}of t){let a=r.replace(/-([a-z])/g,(f,m)=>m.toUpperCase()),c=a in e?e[a]:e[r];if(o.length===1)n[o[0]]=c;else{let f=n;for(let m=0;m<o.length-1;m++)(!f[o[m]]||typeof f[o[m]]!="object")&&(f[o[m]]={}),f=f[o[m]];f[o[o.length-1]]=c}}return n}function se(e,t){for(let n of t){let r=n.schema.name.split("_"),o=r.pop(),c=M(e,r).command(o).description(n.schema.description),f=n.schema.input.shape??{},m=Z(f),y=[],b=[],w=[];for(let{flatKey:u,field:i}of m){let s=i.description??u,l=i;for(;l._def.typeName==="ZodEffects";)l=l._def.schema;let g=l._def.typeName,d=l;d._def.typeName==="ZodNullable"&&(d=d._def.innerType),d._def.typeName==="ZodNumber"&&b.push(u),d._def.typeName==="ZodRecord"&&w.push(u),g==="ZodBoolean"?c.option(`--${u}`,s,!1):g==="ZodNullable"?(c.option(`--${u} <${u}>`,s),y.push(u)):c.requiredOption(`--${u} <${u}>`,s)}c.action(async u=>{n.schema.name.startsWith("consent_")||await j.handler({});for(let s of y){let l=s.replace(/-([a-z])/g,(g,d)=>d.toUpperCase());u[l]===void 0&&(u[l]=null)}for(let s of b){let l=s.replace(/-([a-z])/g,(g,d)=>d.toUpperCase());u[l]!=null&&typeof u[l]=="string"&&(u[l]=Number(u[l]))}for(let s of w){let l=s.replace(/-([a-z])/g,(g,d)=>d.toUpperCase());if(typeof u[l]=="string")try{u[l]=JSON.parse(u[l])}catch{console.error(`Invalid JSON for --${s}`),process.exit(1)}}let i=oe(u,m);try{let s=await n.handler(i);D(s)}catch(s){console.error(s.message),process.exit(1)}})}}function ie(e){if(e.$ref&&e.definitions){let t=e.$ref.replace("#/definitions/","");return e.definitions[t]}return e}function ae(e){return Array.isArray(e.type)?e.type.includes("null"):e.anyOf?e.anyOf.some(t=>t.type==="null"):!1}function ce(e){return Array.isArray(e.type)?e.type.includes("object"):e.anyOf?e.anyOf.some(t=>t.type==="object"):e.type==="object"}function le(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 fe(e){let t=e.wallet,n=e.chain;if(typeof t!="string"||typeof n!="string")return;let r=J(t);if(!r)return;let o=v[n];if(!o)return;let a=r.addresses[o];a&&(e.wallet=a)}var q=new Set(["swaps_transaction_build","token_transfer","transaction_register","virtual-account_offramp_initiate","prediction-market_position_buy","prediction-market_position_sell","commerce_cart_update","commerce_checkout_start","commerce_checkout_pay"]);function ue(e,t){for(let n of t){if(q.has(n.name))continue;let r=n.name.split("_"),o=r.pop(),a=M(e,r);if(a.commands.find(i=>i.name()===o))continue;let c=a.command(o).description(n.description),f=ie(n.inputSchema),m=f.properties??{},y=new Set(f.required??[]),b=[],w=[],u=[];for(let[i,s]of Object.entries(m)){let l=s.description??i,g=ae(s),d=ce(s);le(s)&&w.push(i),d?(u.push(i),y.has(i)&&!g?c.requiredOption(`--${i} <json>`,`${l} (as JSON)`):(c.option(`--${i} <json>`,`${l} (as JSON)`),b.push(i))):g||!y.has(i)?(c.option(`--${i} <${i}>`,l),b.push(i)):c.requiredOption(`--${i} <${i}>`,l)}c.action(async i=>{await j.handler({});for(let s of b)i[s]===void 0&&(i[s]=null);for(let s of w)i[s]!=null&&typeof i[s]=="string"&&(i[s]=Number(i[s]));for(let s of u)if(typeof i[s]=="string")try{i[s]=JSON.parse(i[s])}catch{console.error(`Invalid JSON for --${s}`),process.exit(1)}try{fe(i);let s=A(),l=await R(s,n.name,i);D(l),U()}catch(s){console.error(s.message),process.exit(1)}})}}se(h,k);ue(h,S);h.command("tools").description("List available tools").action(()=>{let e=[...k.map(n=>({name:n.schema.name,description:n.schema.description})),...S.filter(n=>!k.some(r=>r.schema.name===n.name)&&!q.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
  `)),U()});h.parse();
@@ -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 d,b as y,e as l}from"./chunk-DMY6FW35.js";import{a as u,h as f}from"./chunk-DPVUTAYJ.js";import"./chunk-HJJKANGF.js";import"./chunk-LMDE72OE.js";import{Server as x}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport as N}from"@modelcontextprotocol/sdk/server/stdio.js";import{CallToolRequestSchema as T,ListToolsRequestSchema as v}from"@modelcontextprotocol/sdk/types.js";import{zodToJsonSchema as q}from"zod-to-json-schema";var h=new Map(l.map(s=>[s.schema.name,s]));function A(s){let n=s.inputSchema;if(n.$ref&&n.definitions){let c=n.$ref.replace("#/definitions/","");return n.definitions[c]??n}return n}async function J(){let s=new x({name:"moonpay",version:u},{capabilities:{tools:{listChanged:!0}}}),n=l.map(e=>({name:e.schema.name,description:e.schema.description,inputSchema:q(e.schema.input)})),c=new Map;for(let e of y){if(h.has(e.name))continue;let t=A(e);c.set(e.name,t.properties??{}),n.push({name:e.name,description:e.description,inputSchema:{type:"object",properties:t.properties??{},...t.required?{required:t.required}:{},...t.additionalProperties!==void 0?{additionalProperties:t.additionalProperties}:{}}})}let g=new Map(n.map(e=>[e.name,e]));s.setRequestHandler(v,async()=>({tools:n.map(e=>({name:e.name,description:e.description,inputSchema:e.inputSchema}))})),s.setRequestHandler(T,async e=>{let{name:t,arguments:o={}}=e.params;if(!g.has(t))return{content:[{type:"text",text:`Unknown tool: ${t}`}],isError:!0};try{let i=h.get(t);if(i){let p=i.schema.input.shape??{};for(let[m,a]of Object.entries(p))o[m]===void 0&&a._def.typeName==="ZodNullable"&&(o[m]=null);let r=await i.handler(o);return{content:[{type:"text",text:JSON.stringify(r,null,2)}]}}let b=c.get(t)??{};for(let[p,r]of Object.entries(b))o[p]===void 0&&(Array.isArray(r.type)?r.type.includes("null"):r.anyOf?.some(R=>R.type==="null"))&&(o[p]=null),(r.type==="number"||r.type==="integer"||Array.isArray(r.type)&&r.type.some(a=>a==="number"||a==="integer")||r.anyOf?.some(a=>a.type==="number"||a.type==="integer"))&&typeof o[p]=="string"&&(o[p]=Number(o[p]));let w=f(),O=await d(w,t,o);return{content:[{type:"text",text:JSON.stringify(O,null,2)}]}}catch(i){return{content:[{type:"text",text:i instanceof Error?i.message:String(i)}],isError:!0}}});let S=new N;await s.connect(S)}export{J as startMcpServer};
2
+ import{a as d,b as y,e as l}from"./chunk-DJJNMEPR.js";import{a as u,h as f}from"./chunk-XEYPP2ON.js";import"./chunk-HJJKANGF.js";import"./chunk-LMDE72OE.js";import{Server as x}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport as N}from"@modelcontextprotocol/sdk/server/stdio.js";import{CallToolRequestSchema as T,ListToolsRequestSchema as v}from"@modelcontextprotocol/sdk/types.js";import{zodToJsonSchema as q}from"zod-to-json-schema";var h=new Map(l.map(s=>[s.schema.name,s]));function A(s){let n=s.inputSchema;if(n.$ref&&n.definitions){let c=n.$ref.replace("#/definitions/","");return n.definitions[c]??n}return n}async function J(){let s=new x({name:"moonpay",version:u},{capabilities:{tools:{listChanged:!0}}}),n=l.map(e=>({name:e.schema.name,description:e.schema.description,inputSchema:q(e.schema.input)})),c=new Map;for(let e of y){if(h.has(e.name))continue;let t=A(e);c.set(e.name,t.properties??{}),n.push({name:e.name,description:e.description,inputSchema:{type:"object",properties:t.properties??{},...t.required?{required:t.required}:{},...t.additionalProperties!==void 0?{additionalProperties:t.additionalProperties}:{}}})}let g=new Map(n.map(e=>[e.name,e]));s.setRequestHandler(v,async()=>({tools:n.map(e=>({name:e.name,description:e.description,inputSchema:e.inputSchema}))})),s.setRequestHandler(T,async e=>{let{name:t,arguments:o={}}=e.params;if(!g.has(t))return{content:[{type:"text",text:`Unknown tool: ${t}`}],isError:!0};try{let i=h.get(t);if(i){let p=i.schema.input.shape??{};for(let[m,a]of Object.entries(p))o[m]===void 0&&a._def.typeName==="ZodNullable"&&(o[m]=null);let r=await i.handler(o);return{content:[{type:"text",text:JSON.stringify(r,null,2)}]}}let b=c.get(t)??{};for(let[p,r]of Object.entries(b))o[p]===void 0&&(Array.isArray(r.type)?r.type.includes("null"):r.anyOf?.some(R=>R.type==="null"))&&(o[p]=null),(r.type==="number"||r.type==="integer"||Array.isArray(r.type)&&r.type.some(a=>a==="number"||a==="integer")||r.anyOf?.some(a=>a.type==="number"||a.type==="integer"))&&typeof o[p]=="string"&&(o[p]=Number(o[p]));let w=f(),O=await d(w,t,o);return{content:[{type:"text",text:JSON.stringify(O,null,2)}]}}catch(i){return{content:[{type:"text",text:i instanceof Error?i.message:String(i)}],isError:!0}}});let S=new N;await s.connect(S)}export{J as startMcpServer};
@@ -1,2 +1,2 @@
1
1
  process.noDeprecation = true; import { createRequire as __createRequire } from "module"; const require = __createRequire(import.meta.url);
2
- import{m as a,n as b,o as c,p as d,q as e,r as f,s as g,t as h}from"./chunk-DPVUTAYJ.js";import"./chunk-HJJKANGF.js";import"./chunk-LMDE72OE.js";export{f as addWallet,d as findWallet,e as findWalletOrThrow,a as loadWallets,c as mutateWallets,g as removeWallet,h as resolveSigningKey,b as saveWallets};
2
+ import{m as a,n as b,o as c,p as d,q as e,r as f,s as g,t as h}from"./chunk-XEYPP2ON.js";import"./chunk-HJJKANGF.js";import"./chunk-LMDE72OE.js";export{f as addWallet,d as findWallet,e as findWalletOrThrow,a as loadWallets,c as mutateWallets,g as removeWallet,h as resolveSigningKey,b as saveWallets};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moonpay/cli",
3
- "version": "0.13.4",
3
+ "version": "0.14.0",
4
4
  "description": "MoonPay CLI — how agents move money",
5
5
  "homepage": "https://agents.moonpay.com",
6
6
  "publishConfig": {