@moonpay/cli 1.44.1 → 1.45.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/dist/{chunk-U6OVJRBI.js → chunk-5JQLAKXV.js} +2 -2
- package/dist/{chunk-BVKE6RQA.js → chunk-UBBH7EMC.js} +3 -3
- package/dist/{chunk-OCE3NV3D.js → chunk-WDWBP4SJ.js} +1 -1
- package/dist/{chunk-XKO4SZAC.js → chunk-YMYCU44B.js} +1 -1
- package/dist/{client-QJRZJ5JU.js → client-25RQCHDP.js} +1 -1
- package/dist/index.js +2 -2
- package/dist/{ledger-NN34AOBM.js → ledger-2ZXRZTRV.js} +2 -2
- package/dist/{mcp-IHSBIXER.js → mcp-QROSGACH.js} +1 -1
- package/dist/{store-LEPUG5XZ.js → store-TOXOKXUJ.js} +1 -1
- package/package.json +1 -1
- package/skills/moonpay-discover-tokens/SKILL.md +2 -2
- package/skills/moonpay-missions/SKILL.md +194 -74
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
process.noDeprecation = true; import { createRequire as __createRequire } from "module"; const require = __createRequire(import.meta.url);
|
|
2
|
-
import{f as vt,g as yt,j as Pt,m as Ct,n as kt,o as It,p as At}from"./chunk-XKO4SZAC.js";var n=class extends Error{constructor(r,i,u){super(r);this.status=i;this.toolName=u;this.name="MoonPayError"}},c=class extends n{constructor(t="Authentication required"){super(t,401),this.name="AuthError"}},o=class extends n{constructor(t="Rate limit exceeded"){super(t,429),this.name="RateLimitError"}},l=class extends n{constructor(t,r){super(t,400,r),this.name="ValidationError"}},s=class extends n{constructor(t){super(`Tool not found: ${t}`,404,t),this.name="ToolNotFoundError"}},p=class extends n{constructor(t,r){super(`Tool "${t}" has been renamed to "${r}"`,410,t),this.name="ToolRenamedError",this.newName=r}};var Mt="https://agents.moonpay.com",Rt=36e4,h=class{constructor(t={}){this.baseUrl=(t.baseUrl??Mt).replace(/\/$/,""),this.auth=t.auth??{type:"none"},this.timeout=t.timeout??Rt,this.headers=t.headers??{}}async _call(t,r){let i=`${this.baseUrl}/api/tools/${encodeURIComponent(t)}`,u=await this.buildHeaders(),a=await fetch(i,{method:"POST",headers:u,body:JSON.stringify(r),signal:AbortSignal.timeout(this.timeout)});if(a.status===401&&this.auth.type==="bearer"&&this.auth.refreshToken)try{let gt=await this.auth.refreshToken();u.Authorization=`Bearer ${gt}`,a=await fetch(i,{method:"POST",headers:u,body:JSON.stringify(r),signal:AbortSignal.timeout(this.timeout)})}catch{throw new c("Token refresh failed")}return this.handleResponse(a,t)}async buildHeaders(){let t={"Content-Type":"application/json",...this.headers};if(this.auth.type==="bearer"){let r=await this.auth.getToken();r&&(t.Authorization=`Bearer ${r}`)}return t}async handleResponse(t,r){if(t.ok)return t.json();let i;try{i=await t.json()}catch{i={error:t.statusText}}let u=i?.error??i?.message,a=typeof u=="string"?u:u?JSON.stringify(u):`Request failed with status ${t.status}`;switch(t.status){case 400:throw new l(a,r);case 401:throw new c(a);case 404:throw new s(r);case 410:throw new p(r,i?.newName??"unknown");case 429:throw new o(a);default:throw new n(a,t.status,r)}}};var _=class{constructor(t){this.client=t}build(t){return this.client._call("card_delegation_approve_transaction_build",t)}},O=class{constructor(t){this.client=t}get transaction(){return new _(this.client)}},v=class{constructor(t){this.client=t}build(t){return this.client._call("card_delegation_revoke_transaction_build",t)}},P=class{constructor(t){this.client=t}get transaction(){return new v(this.client)}},C=class{constructor(t){this.client=t}retrieve(t){return this.client._call("card_delegation_token_retrieve",t)}},k=class{constructor(t){this.client=t}get approve(){return new O(this.client)}get revoke(){return new P(this.client)}get token(){return new C(this.client)}},I=class{constructor(t){this.client=t}check(t){return this.client._call("card_onboarding_check",t)}finish(t){return this.client._call("card_onboarding_finish",t)}start(t){return this.client._call("card_onboarding_start",t)}},g=class{constructor(t){this.client=t}list(t){return this.client._call("card_transaction_list",t)}},y=class{constructor(t){this.client=t}retrieve(t){return this.client._call("card_user_retrieve",t)}},A=class{constructor(t){this.client=t}check(t){return this.client._call("card_wallet_check",t)}link(t){return this.client._call("card_wallet_link",t)}list(t){return this.client._call("card_wallet_list",t)}unlink(t){return this.client._call("card_wallet_unlink",t)}},M=class{constructor(t){this.client=t}get delegation(){return new k(this.client)}get onboarding(){return new I(this.client)}get transaction(){return new g(this.client)}get user(){return new y(this.client)}get wallet(){return new A(this.client)}create(t){return this.client._call("card_create",t)}freeze(t){return this.client._call("card_freeze",t)}retrieve(t){return this.client._call("card_retrieve",t)}reveal(t){return this.client._call("card_reveal",t)}unfreeze(t){return this.client._call("card_unfreeze",t)}},R=class{constructor(t){this.client=t}list(t){return this.client._call("chain_list",t)}retrieve(t){return this.client._call("chain_retrieve",t)}},f=class{constructor(t){this.client=t}create(t){return this.client._call("cli_activation_create",t)}update(t){return this.client._call("cli_activation_update",t)}},w=class{constructor(t){this.client=t}get activation(){return new f(this.client)}},T=class{constructor(t){this.client=t}add(t){return this.client._call("commerce_cart_add",t)}remove(t){return this.client._call("commerce_cart_remove",t)}retrieve(t){return this.client._call("commerce_cart_retrieve",t)}update(t){return this.client._call("commerce_cart_update",t)}},L=class{constructor(t){this.client=t}pay(t){return this.client._call("commerce_checkout_pay",t)}start(t){return this.client._call("commerce_checkout_start",t)}},V=class{constructor(t){this.client=t}retrieve(t){return this.client._call("commerce_product_retrieve",t)}search(t){return this.client._call("commerce_product_search",t)}},x=class{constructor(t){this.client=t}list(t){return this.client._call("commerce_store_list",t)}retrieve(t){return this.client._call("commerce_store_retrieve",t)}},b=class{constructor(t){this.client=t}get cart(){return new T(this.client)}get checkout(){return new L(this.client)}get product(){return new V(this.client)}get store(){return new x(this.client)}search(t){return this.client._call("commerce_search",t)}},S=class{constructor(t){this.client=t}list(t){return this.client._call("deposit_transaction_list",t)}},B=class{constructor(t){this.client=t}get transaction(){return new S(this.client)}create(t){return this.client._call("deposit_create",t)}retrieve(t){return this.client._call("deposit_retrieve",t)}},U=class{constructor(t){this.client=t}create(t){return this.client._call("feedback_create",t)}},W=class{constructor(t){this.client=t}buy(t){return this.client._call("gateway_buy",t)}search(t){return this.client._call("gateway_search",t)}},D=class{constructor(t){this.client=t}list(t){return this.client._call("prediction-market_activity_list",t)}},E=class{constructor(t){this.client=t}retrieve(t){return this.client._call("prediction-market_market_event_retrieve",t)}},F=class{constructor(t){this.client=t}list(t){return this.client._call("prediction-market_market_price_history_list",t)}},z=class{constructor(t){this.client=t}get history(){return new F(this.client)}retrieve(t){return this.client._call("prediction-market_market_price_retrieve",t)}},H=class{constructor(t){this.client=t}list(t){return this.client._call("prediction-market_market_tag_list",t)}},$=class{constructor(t){this.client=t}list(t){return this.client._call("prediction-market_market_trending_list",t)}},G=class{constructor(t){this.client=t}get event(){return new E(this.client)}get price(){return new z(this.client)}get tag(){return new H(this.client)}get trending(){return new $(this.client)}search(t){return this.client._call("prediction-market_market_search",t)}},K=class{constructor(t){this.client=t}retrieve(t){return this.client._call("prediction-market_pnl_retrieve",t)}},j=class{constructor(t){this.client=t}buy(t){return this.client._call("prediction-market_position_buy",t)}list(t){return this.client._call("prediction-market_position_list",t)}redeem(t){return this.client._call("prediction-market_position_redeem",t)}sell(t){return this.client._call("prediction-market_position_sell",t)}},J=class{constructor(t){this.client=t}list(t){return this.client._call("prediction-market_trade_list",t)}},q=class{constructor(t){this.client=t}create(t){return this.client._call("prediction-market_user_create",t)}},Q=class{constructor(t){this.client=t}get activity(){return new D(this.client)}get market(){return new G(this.client)}get pnl(){return new K(this.client)}get position(){return new j(this.client)}get trade(){return new J(this.client)}get user(){return new q(this.client)}},X=class{constructor(t){this.client=t}build(t){return this.client._call("swaps_transaction_build",t)}},Y=class{constructor(t){this.client=t}get transaction(){return new X(this.client)}},Z=class{constructor(t){this.client=t}list(t){return this.client._call("token_balance_list",t)}},N=class{constructor(t){this.client=t}list(t){return this.client._call("token_holder_list",t)}},tt=class{constructor(t){this.client=t}list(t){return this.client._call("token_ohlcv_list",t)}},et=class{constructor(t){this.client=t}list(t){return this.client._call("token_trending_list",t)}},rt=class{constructor(t){this.client=t}get balance(){return new Z(this.client)}get holder(){return new N(this.client)}get ohlcv(){return new tt(this.client)}get trending(){return new et(this.client)}check(t){return this.client._call("token_check",t)}retrieve(t){return this.client._call("token_retrieve",t)}search(t){return this.client._call("token_search",t)}},nt=class{constructor(t){this.client=t}list(t){return this.client._call("transaction_list",t)}prepare(t){return this.client._call("transaction_prepare",t)}register(t){return this.client._call("transaction_register",t)}retrieve(t){return this.client._call("transaction_retrieve",t)}send(t){return this.client._call("transaction_send",t)}},it=class{constructor(t){this.client=t}retrieve(t){return this.client._call("user_retrieve",t)}},ut=class{constructor(t){this.client=t}accept(t){return this.client._call("virtual-account_agreement_accept",t)}list(t){return this.client._call("virtual-account_agreement_list",t)}},at=class{constructor(t){this.client=t}delete(t){return this.client._call("virtual-account_bank-account_delete",t)}list(t){return this.client._call("virtual-account_bank-account_list",t)}register(t){return this.client._call("virtual-account_bank-account_register",t)}retrieve(t){return this.client._call("virtual-account_bank-account_retrieve",t)}},ct=class{constructor(t){this.client=t}continue(t){return this.client._call("virtual-account_kyc_continue",t)}restart(t){return this.client._call("virtual-account_kyc_restart",t)}},ot=class{constructor(t){this.client=t}cancel(t){return this.client._call("virtual-account_offramp_cancel",t)}create(t){return this.client._call("virtual-account_offramp_create",t)}initiate(t){return this.client._call("virtual-account_offramp_initiate",t)}list(t){return this.client._call("virtual-account_offramp_list",t)}retrieve(t){return this.client._call("virtual-account_offramp_retrieve",t)}update(t){return this.client._call("virtual-account_offramp_update",t)}},lt=class{constructor(t){this.client=t}create(t){return this.client._call("virtual-account_onramp_payment_create",t)}retrieve(t){return this.client._call("virtual-account_onramp_payment_retrieve",t)}},st=class{constructor(t){this.client=t}get payment(){return new lt(this.client)}cancel(t){return this.client._call("virtual-account_onramp_cancel",t)}create(t){return this.client._call("virtual-account_onramp_create",t)}list(t){return this.client._call("virtual-account_onramp_list",t)}retrieve(t){return this.client._call("virtual-account_onramp_retrieve",t)}update(t){return this.client._call("virtual-account_onramp_update",t)}},pt=class{constructor(t){this.client=t}list(t){return this.client._call("virtual-account_transaction_list",t)}},mt=class{constructor(t){this.client=t}list(t){return this.client._call("virtual-account_wallet_list",t)}register(t){return this.client._call("virtual-account_wallet_register",t)}},ht=class{constructor(t){this.client=t}get agreement(){return new ut(this.client)}get bankAccount(){return new at(this.client)}get kyc(){return new ct(this.client)}get offramp(){return new ot(this.client)}get onramp(){return new st(this.client)}get transaction(){return new pt(this.client)}get wallet(){return new mt(this.client)}create(t){return this.client._call("virtual-account_create",t)}retrieve(t){return this.client._call("virtual-account_retrieve",t)}},dt=class{constructor(t){this.client=t}list(t){return this.client._call("wallet_activity_list",t)}},_t=class{constructor(t){this.client=t}retrieve(t){return this.client._call("wallet_pnl_retrieve",t)}},Ot=class{constructor(t){this.client=t}get activity(){return new dt(this.client)}get pnl(){return new _t(this.client)}discover(t){return this.client._call("wallet_discover",t)}},m=class extends h{constructor(t={}){super(t)}get card(){return new M(this)}get chain(){return new R(this)}get cli(){return new w(this)}get commerce(){return new b(this)}get deposit(){return new B(this)}get feedback(){return new U(this)}get gateway(){return new W(this)}get predictionMarket(){return new Q(this)}get swaps(){return new Y(this)}get token(){return new rt(this)}get transaction(){return new nt(this)}get user(){return new it(this)}get virtualAccount(){return new ht(this)}get wallet(){return new Ot(this)}buy(t){return this._call("buy",t)}login(t){return this._call("login",t)}refresh(t){return this._call("refresh",t)}verify(t){return this._call("verify",t)}};At();yt();var d=null;function ft(){return d||(d=new m({baseUrl:Ct(),auth:{type:"bearer",getToken:It,refreshToken:async()=>{let e=Pt();if(!e?.refreshToken)throw new Error("No refresh token available");return(await kt(e)).accessToken}},headers:vt()})),d}var Ft=new Proxy({},{get(e,t){return Reflect.get(ft(),t)}});function zt(){d=null}export{m as a,Ft as b,zt as c};
|
|
2
|
+
import{f as vt,g as yt,j as Pt,m as Ct,n as kt,o as It,p as At}from"./chunk-YMYCU44B.js";var n=class extends Error{constructor(r,i,u){super(r);this.status=i;this.toolName=u;this.name="MoonPayError"}},c=class extends n{constructor(t="Authentication required"){super(t,401),this.name="AuthError"}},o=class extends n{constructor(t="Rate limit exceeded"){super(t,429),this.name="RateLimitError"}},l=class extends n{constructor(t,r){super(t,400,r),this.name="ValidationError"}},s=class extends n{constructor(t){super(`Tool not found: ${t}`,404,t),this.name="ToolNotFoundError"}},p=class extends n{constructor(t,r){super(`Tool "${t}" has been renamed to "${r}"`,410,t),this.name="ToolRenamedError",this.newName=r}};var Mt="https://agents.moonpay.com",Rt=36e4,h=class{constructor(t={}){this.baseUrl=(t.baseUrl??Mt).replace(/\/$/,""),this.auth=t.auth??{type:"none"},this.timeout=t.timeout??Rt,this.headers=t.headers??{}}async _call(t,r){let i=`${this.baseUrl}/api/tools/${encodeURIComponent(t)}`,u=await this.buildHeaders(),a=await fetch(i,{method:"POST",headers:u,body:JSON.stringify(r),signal:AbortSignal.timeout(this.timeout)});if(a.status===401&&this.auth.type==="bearer"&&this.auth.refreshToken)try{let gt=await this.auth.refreshToken();u.Authorization=`Bearer ${gt}`,a=await fetch(i,{method:"POST",headers:u,body:JSON.stringify(r),signal:AbortSignal.timeout(this.timeout)})}catch{throw new c("Token refresh failed")}return this.handleResponse(a,t)}async buildHeaders(){let t={"Content-Type":"application/json",...this.headers};if(this.auth.type==="bearer"){let r=await this.auth.getToken();r&&(t.Authorization=`Bearer ${r}`)}return t}async handleResponse(t,r){if(t.ok)return t.json();let i;try{i=await t.json()}catch{i={error:t.statusText}}let u=i?.error??i?.message,a=typeof u=="string"?u:u?JSON.stringify(u):`Request failed with status ${t.status}`;switch(t.status){case 400:throw new l(a,r);case 401:throw new c(a);case 404:throw new s(r);case 410:throw new p(r,i?.newName??"unknown");case 429:throw new o(a);default:throw new n(a,t.status,r)}}};var _=class{constructor(t){this.client=t}build(t){return this.client._call("card_delegation_approve_transaction_build",t)}},O=class{constructor(t){this.client=t}get transaction(){return new _(this.client)}},v=class{constructor(t){this.client=t}build(t){return this.client._call("card_delegation_revoke_transaction_build",t)}},P=class{constructor(t){this.client=t}get transaction(){return new v(this.client)}},C=class{constructor(t){this.client=t}retrieve(t){return this.client._call("card_delegation_token_retrieve",t)}},k=class{constructor(t){this.client=t}get approve(){return new O(this.client)}get revoke(){return new P(this.client)}get token(){return new C(this.client)}},I=class{constructor(t){this.client=t}check(t){return this.client._call("card_onboarding_check",t)}finish(t){return this.client._call("card_onboarding_finish",t)}start(t){return this.client._call("card_onboarding_start",t)}},g=class{constructor(t){this.client=t}list(t){return this.client._call("card_transaction_list",t)}},y=class{constructor(t){this.client=t}retrieve(t){return this.client._call("card_user_retrieve",t)}},A=class{constructor(t){this.client=t}check(t){return this.client._call("card_wallet_check",t)}link(t){return this.client._call("card_wallet_link",t)}list(t){return this.client._call("card_wallet_list",t)}unlink(t){return this.client._call("card_wallet_unlink",t)}},M=class{constructor(t){this.client=t}get delegation(){return new k(this.client)}get onboarding(){return new I(this.client)}get transaction(){return new g(this.client)}get user(){return new y(this.client)}get wallet(){return new A(this.client)}create(t){return this.client._call("card_create",t)}freeze(t){return this.client._call("card_freeze",t)}retrieve(t){return this.client._call("card_retrieve",t)}reveal(t){return this.client._call("card_reveal",t)}unfreeze(t){return this.client._call("card_unfreeze",t)}},R=class{constructor(t){this.client=t}list(t){return this.client._call("chain_list",t)}retrieve(t){return this.client._call("chain_retrieve",t)}},f=class{constructor(t){this.client=t}create(t){return this.client._call("cli_activation_create",t)}update(t){return this.client._call("cli_activation_update",t)}},w=class{constructor(t){this.client=t}get activation(){return new f(this.client)}},T=class{constructor(t){this.client=t}add(t){return this.client._call("commerce_cart_add",t)}remove(t){return this.client._call("commerce_cart_remove",t)}retrieve(t){return this.client._call("commerce_cart_retrieve",t)}update(t){return this.client._call("commerce_cart_update",t)}},L=class{constructor(t){this.client=t}pay(t){return this.client._call("commerce_checkout_pay",t)}start(t){return this.client._call("commerce_checkout_start",t)}},V=class{constructor(t){this.client=t}retrieve(t){return this.client._call("commerce_product_retrieve",t)}search(t){return this.client._call("commerce_product_search",t)}},x=class{constructor(t){this.client=t}list(t){return this.client._call("commerce_store_list",t)}retrieve(t){return this.client._call("commerce_store_retrieve",t)}},b=class{constructor(t){this.client=t}get cart(){return new T(this.client)}get checkout(){return new L(this.client)}get product(){return new V(this.client)}get store(){return new x(this.client)}search(t){return this.client._call("commerce_search",t)}},S=class{constructor(t){this.client=t}list(t){return this.client._call("deposit_transaction_list",t)}},B=class{constructor(t){this.client=t}get transaction(){return new S(this.client)}create(t){return this.client._call("deposit_create",t)}retrieve(t){return this.client._call("deposit_retrieve",t)}},U=class{constructor(t){this.client=t}create(t){return this.client._call("feedback_create",t)}},W=class{constructor(t){this.client=t}buy(t){return this.client._call("gateway_buy",t)}search(t){return this.client._call("gateway_search",t)}},D=class{constructor(t){this.client=t}list(t){return this.client._call("prediction-market_activity_list",t)}},E=class{constructor(t){this.client=t}retrieve(t){return this.client._call("prediction-market_market_event_retrieve",t)}},F=class{constructor(t){this.client=t}list(t){return this.client._call("prediction-market_market_price_history_list",t)}},z=class{constructor(t){this.client=t}get history(){return new F(this.client)}retrieve(t){return this.client._call("prediction-market_market_price_retrieve",t)}},H=class{constructor(t){this.client=t}list(t){return this.client._call("prediction-market_market_tag_list",t)}},$=class{constructor(t){this.client=t}list(t){return this.client._call("prediction-market_market_trending_list",t)}},G=class{constructor(t){this.client=t}get event(){return new E(this.client)}get price(){return new z(this.client)}get tag(){return new H(this.client)}get trending(){return new $(this.client)}search(t){return this.client._call("prediction-market_market_search",t)}},K=class{constructor(t){this.client=t}retrieve(t){return this.client._call("prediction-market_pnl_retrieve",t)}},j=class{constructor(t){this.client=t}buy(t){return this.client._call("prediction-market_position_buy",t)}list(t){return this.client._call("prediction-market_position_list",t)}redeem(t){return this.client._call("prediction-market_position_redeem",t)}sell(t){return this.client._call("prediction-market_position_sell",t)}},J=class{constructor(t){this.client=t}list(t){return this.client._call("prediction-market_trade_list",t)}},q=class{constructor(t){this.client=t}create(t){return this.client._call("prediction-market_user_create",t)}},Q=class{constructor(t){this.client=t}get activity(){return new D(this.client)}get market(){return new G(this.client)}get pnl(){return new K(this.client)}get position(){return new j(this.client)}get trade(){return new J(this.client)}get user(){return new q(this.client)}},X=class{constructor(t){this.client=t}build(t){return this.client._call("swaps_transaction_build",t)}},Y=class{constructor(t){this.client=t}get transaction(){return new X(this.client)}},Z=class{constructor(t){this.client=t}list(t){return this.client._call("token_balance_list",t)}},N=class{constructor(t){this.client=t}list(t){return this.client._call("token_holder_list",t)}},tt=class{constructor(t){this.client=t}list(t){return this.client._call("token_ohlcv_list",t)}},et=class{constructor(t){this.client=t}list(t){return this.client._call("token_trending_list",t)}},rt=class{constructor(t){this.client=t}get balance(){return new Z(this.client)}get holder(){return new N(this.client)}get ohlcv(){return new tt(this.client)}get trending(){return new et(this.client)}check(t){return this.client._call("token_check",t)}retrieve(t){return this.client._call("token_retrieve",t)}search(t){return this.client._call("token_search",t)}},nt=class{constructor(t){this.client=t}list(t){return this.client._call("transaction_list",t)}prepare(t){return this.client._call("transaction_prepare",t)}register(t){return this.client._call("transaction_register",t)}retrieve(t){return this.client._call("transaction_retrieve",t)}send(t){return this.client._call("transaction_send",t)}},it=class{constructor(t){this.client=t}retrieve(t){return this.client._call("user_retrieve",t)}},ut=class{constructor(t){this.client=t}accept(t){return this.client._call("virtual-account_agreement_accept",t)}list(t){return this.client._call("virtual-account_agreement_list",t)}},at=class{constructor(t){this.client=t}delete(t){return this.client._call("virtual-account_bank-account_delete",t)}list(t){return this.client._call("virtual-account_bank-account_list",t)}register(t){return this.client._call("virtual-account_bank-account_register",t)}retrieve(t){return this.client._call("virtual-account_bank-account_retrieve",t)}},ct=class{constructor(t){this.client=t}continue(t){return this.client._call("virtual-account_kyc_continue",t)}restart(t){return this.client._call("virtual-account_kyc_restart",t)}},ot=class{constructor(t){this.client=t}cancel(t){return this.client._call("virtual-account_offramp_cancel",t)}create(t){return this.client._call("virtual-account_offramp_create",t)}initiate(t){return this.client._call("virtual-account_offramp_initiate",t)}list(t){return this.client._call("virtual-account_offramp_list",t)}retrieve(t){return this.client._call("virtual-account_offramp_retrieve",t)}update(t){return this.client._call("virtual-account_offramp_update",t)}},lt=class{constructor(t){this.client=t}create(t){return this.client._call("virtual-account_onramp_payment_create",t)}retrieve(t){return this.client._call("virtual-account_onramp_payment_retrieve",t)}},st=class{constructor(t){this.client=t}get payment(){return new lt(this.client)}cancel(t){return this.client._call("virtual-account_onramp_cancel",t)}create(t){return this.client._call("virtual-account_onramp_create",t)}list(t){return this.client._call("virtual-account_onramp_list",t)}retrieve(t){return this.client._call("virtual-account_onramp_retrieve",t)}update(t){return this.client._call("virtual-account_onramp_update",t)}},pt=class{constructor(t){this.client=t}list(t){return this.client._call("virtual-account_transaction_list",t)}},mt=class{constructor(t){this.client=t}list(t){return this.client._call("virtual-account_wallet_list",t)}register(t){return this.client._call("virtual-account_wallet_register",t)}},ht=class{constructor(t){this.client=t}get agreement(){return new ut(this.client)}get bankAccount(){return new at(this.client)}get kyc(){return new ct(this.client)}get offramp(){return new ot(this.client)}get onramp(){return new st(this.client)}get transaction(){return new pt(this.client)}get wallet(){return new mt(this.client)}create(t){return this.client._call("virtual-account_create",t)}retrieve(t){return this.client._call("virtual-account_retrieve",t)}},dt=class{constructor(t){this.client=t}list(t){return this.client._call("wallet_activity_list",t)}},_t=class{constructor(t){this.client=t}retrieve(t){return this.client._call("wallet_pnl_retrieve",t)}},Ot=class{constructor(t){this.client=t}get activity(){return new dt(this.client)}get pnl(){return new _t(this.client)}discover(t){return this.client._call("wallet_discover",t)}},m=class extends h{constructor(t={}){super(t)}get card(){return new M(this)}get chain(){return new R(this)}get cli(){return new w(this)}get commerce(){return new b(this)}get deposit(){return new B(this)}get feedback(){return new U(this)}get gateway(){return new W(this)}get predictionMarket(){return new Q(this)}get swaps(){return new Y(this)}get token(){return new rt(this)}get transaction(){return new nt(this)}get user(){return new it(this)}get virtualAccount(){return new ht(this)}get wallet(){return new Ot(this)}buy(t){return this._call("buy",t)}login(t){return this._call("login",t)}refresh(t){return this._call("refresh",t)}verify(t){return this._call("verify",t)}};At();yt();var d=null;function ft(){return d||(d=new m({baseUrl:Ct(),auth:{type:"bearer",getToken:It,refreshToken:async()=>{let e=Pt();if(!e?.refreshToken)throw new Error("No refresh token available");return(await kt(e)).accessToken}},headers:vt()})),d}var Ft=new Proxy({},{get(e,t){return Reflect.get(ft(),t)}});function zt(){d=null}export{m as a,Ft as b,zt as c};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
process.noDeprecation = true; import { createRequire as __createRequire } from "module"; const require = __createRequire(import.meta.url);
|
|
2
|
-
import{b as m,d as b}from"./chunk-LMDE72OE.js";var G={};b(G,{decrypt:()=>k,encrypt:()=>T,encryptedFileSchema:()=>O});import{randomBytes as A,scryptSync as v,createCipheriv as X,createDecipheriv as $}from"crypto";import{z as i}from"zod";function T(n,t){let r=A(32),o=v(t,r,D,{N:R,r:L,p:F,maxmem:K}),s=A(12),c=X("aes-256-gcm",o,s),_=Buffer.concat([c.update(n,"utf8"),c.final()]);return{encryption:{cipher:"aes-256-gcm",kdf:"scrypt",kdfparams:{n:R,r:L,p:F},salt:r.toString("base64"),iv:s.toString("base64"),tag:c.getAuthTag().toString("base64")},data:_.toString("base64")}}function k(n,t){let{salt:r,iv:o,tag:s,kdfparams:c}=n.encryption,_=v(t,Buffer.from(r,"base64"),D,{N:c.n,r:c.r,p:c.p,maxmem:K}),x=$("aes-256-gcm",_,Buffer.from(o,"base64"),{authTagLength:16});return x.setAuthTag(Buffer.from(s,"base64")),Buffer.concat([x.update(Buffer.from(n.data,"base64")),x.final()]).toString("utf8")}var R,L,F,D,K,O,P=m(()=>{"use strict";R=2**18,L=8,F=1,D=32,K=512*1024*1024,O=i.object({encryption:i.object({cipher:i.literal("aes-256-gcm"),kdf:i.literal("scrypt"),kdfparams:i.object({n:i.number(),r:i.number(),p:i.number()}),salt:i.string(),iv:i.string(),tag:i.string()}),data:i.string()})});import{readFileSync as W}from"fs";import{join as z}from"path";import{homedir as q}from"os";function en(){if(f!==void 0)return f;try{f=JSON.parse(W(z(q(),".config","moonpay","consent.json"),"utf-8")).agentId??null}catch{f=null}return f??null}function rn(){return process.env.OPENCLAW_SHELL?"openclaw":process.env.CLAUDECODE?"claude-code":process.env.CODEX_CI?"codex":process.env.GEMINI_CLI?"gemini-cli":"human"}function U(){let n={"Content-Type":"application/json",[Z]:Q,[tn]:rn()},t=en();return t&&(n[nn]=t),n}var Q,Z,nn,f,tn,j=m(()=>{"use strict";Q="1.
|
|
2
|
+
import{b as m,d as b}from"./chunk-LMDE72OE.js";var G={};b(G,{decrypt:()=>k,encrypt:()=>T,encryptedFileSchema:()=>O});import{randomBytes as A,scryptSync as v,createCipheriv as X,createDecipheriv as $}from"crypto";import{z as i}from"zod";function T(n,t){let r=A(32),o=v(t,r,D,{N:R,r:L,p:F,maxmem:K}),s=A(12),c=X("aes-256-gcm",o,s),_=Buffer.concat([c.update(n,"utf8"),c.final()]);return{encryption:{cipher:"aes-256-gcm",kdf:"scrypt",kdfparams:{n:R,r:L,p:F},salt:r.toString("base64"),iv:s.toString("base64"),tag:c.getAuthTag().toString("base64")},data:_.toString("base64")}}function k(n,t){let{salt:r,iv:o,tag:s,kdfparams:c}=n.encryption,_=v(t,Buffer.from(r,"base64"),D,{N:c.n,r:c.r,p:c.p,maxmem:K}),x=$("aes-256-gcm",_,Buffer.from(o,"base64"),{authTagLength:16});return x.setAuthTag(Buffer.from(s,"base64")),Buffer.concat([x.update(Buffer.from(n.data,"base64")),x.final()]).toString("utf8")}var R,L,F,D,K,O,P=m(()=>{"use strict";R=2**18,L=8,F=1,D=32,K=512*1024*1024,O=i.object({encryption:i.object({cipher:i.literal("aes-256-gcm"),kdf:i.literal("scrypt"),kdfparams:i.object({n:i.number(),r:i.number(),p:i.number()}),salt:i.string(),iv:i.string(),tag:i.string()}),data:i.string()})});import{readFileSync as W}from"fs";import{join as z}from"path";import{homedir as q}from"os";function en(){if(f!==void 0)return f;try{f=JSON.parse(W(z(q(),".config","moonpay","consent.json"),"utf-8")).agentId??null}catch{f=null}return f??null}function rn(){return process.env.OPENCLAW_SHELL?"openclaw":process.env.CLAUDECODE?"claude-code":process.env.CODEX_CI?"codex":process.env.GEMINI_CLI?"gemini-cli":"human"}function U(){let n={"Content-Type":"application/json",[Z]:Q,[tn]:rn()},t=en();return t&&(n[nn]=t),n}var Q,Z,nn,f,tn,j=m(()=>{"use strict";Q="1.45.0",Z="X-CLI-Version",nn="X-Agent-Id";tn="X-Agent"});import*as e from"fs";import*as Y from"os";import*as g from"path";function d(){e.existsSync(l)||e.mkdirSync(l,{recursive:!0,mode:448})}function H(n,t,r){let o=n+`.tmp.${process.pid}`;e.writeFileSync(o,t,{encoding:"utf-8",mode:r}),e.renameSync(o,n)}function sn(){d();try{let n=e.openSync(u,e.constants.O_CREAT|e.constants.O_EXCL|e.constants.O_WRONLY,384);e.writeSync(n,JSON.stringify({pid:process.pid,ts:Date.now()})),e.closeSync(n)}catch(n){if(n.code!=="EEXIST")throw n;try{let t=JSON.parse(e.readFileSync(u,"utf-8"));if(Date.now()-t.ts<on)return null}catch{}try{e.unlinkSync(u)}catch{}try{let t=e.openSync(u,e.constants.O_CREAT|e.constants.O_EXCL|e.constants.O_WRONLY,384);e.writeSync(t,JSON.stringify({pid:process.pid,ts:Date.now()})),e.closeSync(t)}catch{return null}}return()=>{try{e.unlinkSync(u)}catch{}}}function B(){if(!e.existsSync(w))return null;try{let n=JSON.parse(e.readFileSync(w,"utf-8"));return n.baseUrl?n:null}catch{return null}}function Pn(){let n=B();return n||(an(N),N)}function S(){if(!e.existsSync(p))return null;let n=h();if(!n)return null;try{let t=JSON.parse(e.readFileSync(p,"utf-8")),r=O.parse(t),o=k(r,n),s=JSON.parse(o);return!s.accessToken||!s.baseUrl?null:s}catch{return null}}function cn(n){let t=I(),r=T(JSON.stringify(n),t);d(),H(p,JSON.stringify(r,null,2),384)}function an(n){d(),H(w,JSON.stringify(n,null,2),384)}function Un(){e.existsSync(p)&&e.unlinkSync(p)}function jn(){let n=B(),t=S();return n?.baseUrl??t?.baseUrl??N.baseUrl}async function fn(n,t,r){let o=await fetch(`${n}/api/tools/${encodeURIComponent(t)}`,{method:"POST",signal:AbortSignal.timeout(15e3),headers:U(),body:JSON.stringify(r)}),s=await o.json();if(!o.ok){let c=s;throw new Error(c?.error??`${t} failed (${o.status})`)}return s}async function un(n){if(!n.refreshToken)throw new Error("No refresh token available");let t=sn();if(!t){await new Promise(o=>setTimeout(o,2e3));let r=S();if(r&&r.expiresAt>Date.now())return r;throw new Error("Token refresh failed (concurrent refresh in progress)")}try{let r=S();if(r&&r.expiresAt>Date.now()+6e4)return r;let o=await fn(n.baseUrl,"refresh",{refreshToken:n.refreshToken}),s={accessToken:o.accessToken,refreshToken:o.refreshToken,expiresAt:o.expiresAt*1e3,baseUrl:n.baseUrl};return cn(s),s}finally{t()}}async function Jn(){let n=S();if(!n)return null;if(Date.now()>=n.expiresAt-ln){if(n.refreshToken)try{return(await un(n)).accessToken}catch{return null}return null}return n.accessToken}var l,w,p,u,N,on,ln,V=m(()=>{"use strict";P();J();j();l=g.join(Y.homedir(),".config","moonpay"),w=g.join(l,"config.json"),p=g.join(l,"credentials.json"),u=g.join(l,".credentials.lock"),N={baseUrl:"https://agents.moonpay.com"};on=3e4;ln=300*1e3});var Nn={};b(Nn,{ensureEncryptionKey:()=>I,getEncryptionKey:()=>h});import{execFileSync as C,execSync as pn}from"child_process";import{randomBytes as gn}from"crypto";import{existsSync as dn,readFileSync as yn,writeFileSync as mn}from"fs";import{homedir as Sn,platform as M}from"os";import{join as hn}from"path";function Cn(n){try{C("security",["delete-generic-password","-s",a,"-a",y],{stdio:"ignore"})}catch{}C("security",["add-generic-password","-s",a,"-a",y,"-w",n],{stdio:"ignore"})}function En(){try{return C("security",["find-generic-password","-s",a,"-a",y,"-w"],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()}catch{return null}}function _n(n){pn(`printf '%s' | secret-tool store --label="${a}" service "${a}" account "${y}"`,{input:n,stdio:["pipe","ignore","ignore"]})}function xn(){try{return C("secret-tool",["lookup","service",a,"account",y],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()}catch{return null}}function On(n){d(),mn(E,n,{encoding:"utf-8",mode:384})}function Tn(){try{return dn(E)&&yn(E,"utf-8").trim()||null}catch{return null}}function kn(n){try{let t=M();return t==="darwin"?(Cn(n),!0):t==="linux"?(_n(n),!0):!1}catch{return!1}}function wn(){let n=M();return n==="darwin"?En():n==="linux"?xn():null}function h(){let n=process.env.MOONPAY_ENCRYPTION_KEY;return n||(wn()??Tn())}function I(){let n=h();if(n)return n;let t=gn(32).toString("hex");return kn(t)||(On(t),process.stderr.write("Note: Keychain unavailable. Encryption key stored in "+E+`
|
|
3
3
|
`)),t}var a,y,E,J=m(()=>{"use strict";V();a="moonpay-cli",y="encryption-key",E=hn(Sn(),".config","moonpay",".encryption-key")});export{G as a,P as b,Nn as c,J as d,Q as e,U as f,j as g,d as h,Pn as i,S as j,cn as k,Un as l,jn as m,un as n,Jn as o,V as p};
|
|
@@ -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-
|
|
2
|
+
import{b as a,c as b}from"./chunk-WDWBP4SJ.js";import"./chunk-YMYCU44B.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 J,b as K,c as R,d as C}from"./chunk-
|
|
3
|
+
import{a as J,b as K,c as R,d as C}from"./chunk-UBBH7EMC.js";import{b as N}from"./chunk-WDWBP4SJ.js";import{m as A}from"./chunk-5JQLAKXV.js";import{e as v,g as H}from"./chunk-YMYCU44B.js";import"./chunk-LMDE72OE.js";import{Command as se}from"commander";var W=!process.env.NO_COLOR&&process.stdout.isTTY===!0;function _(e){return n=>W?`${e}${n}\x1B[0m`:n}var d={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 n=typeof e;return n==="string"||n==="number"||n==="boolean"}function w(e){return e==null?"-":String(e)}function S(e,n=0){let t=" ".repeat(n);return O(e)?`${t}${w(e)}`:Array.isArray(e)?e.length===0?`${t}${d.dim("(empty)")}`:e.every(O)?e.map(s=>`${t}- ${w(s)}`).join(`
|
|
4
4
|
`):e.map(s=>{if(typeof s!="object"||s===null)return`${t}- ${w(s)}`;let r=Object.entries(s),c=[],[l,u]=r[0];O(u)?c.push(`${t}- ${d.bold(l)}: ${w(u)}`):(c.push(`${t}- ${d.bold(l)}:`),c.push(S(u,n+2)));for(let[p,g]of r.slice(1))O(g)?c.push(`${t} ${d.bold(p)}: ${w(g)}`):(c.push(`${t} ${d.bold(p)}:`),c.push(S(g,n+2)));return c.join(`
|
|
5
5
|
`)}).join(`
|
|
6
6
|
|
|
@@ -14,5 +14,5 @@ ${S(c,n+1)}`).join(`
|
|
|
14
14
|
|
|
15
15
|
Run \`mp skill install\` to install AI skills for Claude Code.
|
|
16
16
|
|
|
17
|
-
`+K).version(v).option("--json","Output as JSON instead of YAML");function ae(){return h.opts().json?"json":"yaml"}function U(e){console.log(F(e,ae()))}function M(){let e=ie();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-
|
|
17
|
+
`+K).version(v).option("--json","Output as JSON instead of YAML");function ae(){return h.opts().json?"json":"yaml"}function U(e){console.log(F(e,ae()))}function M(){let e=ie();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-QROSGACH.js");await e()});function q(e,n){let t=e;for(let s of n){let r=t.commands.find(c=>c.name()===s);r||(r=t.command(s)),t=r}return t}function z(e,n=""){let t=[];for(let[s,r]of Object.entries(e)){let c=n?`${n}-${s}`:s,l=r;for(;l._def.typeName==="ZodEffects";)l=l._def.schema;let u=l;u._def.typeName==="ZodNullable"&&(u=u._def.innerType),u._def.typeName==="ZodObject"&&u.shape?t.push(...z(u.shape,c)):t.push({flatKey:c,field:r,path:c.split("-")})}return t}function ce(e,n){let t={};for(let{flatKey:s,path:r}of n){let c=s.replace(/-([a-z])/g,(u,p)=>p.toUpperCase()),l=c in e?e[c]:e[s];if(r.length===1)t[r[0]]=l;else{let u=t;for(let p=0;p<r.length-1;p++)(!u[r[p]]||typeof u[r[p]]!="object")&&(u[r[p]]={}),u=u[r[p]];u[r[r.length-1]]=l}}return t}function le(e,n){for(let t of n){let s=t.schema.name.split("_"),r=s.pop(),l=q(e,s).command(r).description(t.schema.description),u=t.schema.input.shape??{},p=z(u),g=[],b=[],k=[],$=[];for(let{flatKey:f,field:i}of p){let o=i.description??f,a=i;for(;a._def.typeName==="ZodEffects";)a=a._def.schema;let y=a._def.typeName,m=a;m._def.typeName==="ZodNullable"&&(m=m._def.innerType),m._def.typeName==="ZodNumber"&&b.push(f),m._def.typeName==="ZodRecord"&&k.push(f),m._def.typeName==="ZodBoolean"&&$.push(f),y==="ZodBoolean"?l.option(`--${f} [${f}]`,o,!1):y==="ZodNullable"?(l.option(`--${f} <${f}>`,o),g.push(f)):l.requiredOption(`--${f} <${f}>`,o)}l.action(async f=>{t.schema.name.startsWith("consent_")||await R.handler({});for(let o of g){let a=o.replace(/-([a-z])/g,(y,m)=>m.toUpperCase());f[a]===void 0&&(f[a]=null)}for(let o of b){let a=o.replace(/-([a-z])/g,(y,m)=>m.toUpperCase());f[a]!=null&&typeof f[a]=="string"&&(f[a]=Number(f[a]))}for(let o of $){let a=o.replace(/-([a-z])/g,(m,j)=>j.toUpperCase()),y=f[a];if(typeof y=="string"){let m=y.toLowerCase();m==="true"||m==="1"?f[a]=!0:(m==="false"||m==="0")&&(f[a]=!1)}}for(let o of k){let a=o.replace(/-([a-z])/g,(y,m)=>m.toUpperCase());if(typeof f[a]=="string")try{f[a]=JSON.parse(f[a])}catch{console.error(`Invalid JSON for --${o}`),process.exit(1)}}let i=ce(f,p);try{let o=await t.handler(i);U(o)}catch(o){console.error(Z(o)),process.exit(1)}})}}function fe(e){if(e.$ref&&e.definitions){let n=e.$ref.replace("#/definitions/","");return e.definitions[n]}return e}function ue(e){return Array.isArray(e.type)?e.type.includes("null"):e.anyOf?e.anyOf.some(n=>n.type==="null"):!1}function me(e){return Array.isArray(e.type)?e.type.includes("object"):e.anyOf?e.anyOf.some(n=>n.type==="object"):e.type==="object"}function pe(e){return Array.isArray(e.type)?e.type.some(n=>n==="number"||n==="integer"):e.anyOf?e.anyOf.some(n=>n.type==="number"||n.type==="integer"):e.type==="number"||e.type==="integer"}function de(e){return Array.isArray(e.type)?e.type.includes("boolean"):e.anyOf?e.anyOf.some(n=>n.type==="boolean"):e.type==="boolean"}var Y=new Set(["swaps_transaction_build","transaction_register","virtual-account_offramp_initiate","prediction-market_position_buy","prediction-market_position_sell","prediction-market_position_redeem","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 ye(e,n){for(let t of n){if(Y.has(t.name))continue;let s=t.name.split("_"),r=s.pop(),c=q(e,s);if(c.commands.find(i=>i.name()===r))continue;let l=c.command(r).description(t.description),u=fe(t.inputSchema),p=u.properties??{},g=new Set(u.required??[]),b=[],k=[],$=[],f=[];for(let[i,o]of Object.entries(p)){let a=o.description??i,y=ue(o),m=me(o),j=pe(o),B=de(o);j&&k.push(i),B&&f.push(i),m?($.push(i),g.has(i)&&!y?l.requiredOption(`--${i} <json>`,`${a} (as JSON)`):(l.option(`--${i} <json>`,`${a} (as JSON)`),b.push(i))):y||!g.has(i)?(l.option(`--${i} <${i}>`,a),b.push(i)):l.requiredOption(`--${i} <${i}>`,a)}l.action(async i=>{await R.handler({});for(let o of b)i[o]===void 0&&(i[o]=null);for(let o of k)i[o]!=null&&typeof i[o]=="string"&&(i[o]=Number(i[o]));for(let o of f)if(typeof i[o]=="string"){let a=i[o].toLowerCase();a==="true"||a==="1"?i[o]=!0:(a==="false"||a==="0")&&(i[o]=!1)}for(let o of $)if(typeof i[o]=="string")try{i[o]=JSON.parse(i[o])}catch{console.error(`Invalid JSON for --${o}`),process.exit(1)}try{await I(i);let o=await N._call(t.name,i);U(o),M()}catch(o){console.error(Z(o)),process.exit(1)}})}}le(h,C);ye(h,J);h.command("tools").description("List available tools").action(()=>{let e=[...C.map(t=>({name:t.schema.name,description:t.schema.description})),...J.filter(t=>!C.some(s=>s.schema.name===t.name)&&!Y.has(t.name)).map(t=>({name:t.name,description:t.description}))].sort((t,s)=>t.name.localeCompare(s.name)),n=[];for(let t of e){let s=t.name.replace(/_/g," ");n.push(` ${d.green(s.padEnd(28))} ${d.dim(t.description)}`)}n.push(""),n.push(d.dim(`${e.length} tools`)),console.log(n.join(`
|
|
18
18
|
`)),M()});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-
|
|
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-25RQCHDP.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-
|
|
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-25RQCHDP.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-25RQCHDP.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 as f,d as u}from"./chunk-
|
|
2
|
+
import{a as f,d as u}from"./chunk-UBBH7EMC.js";import{b as d}from"./chunk-WDWBP4SJ.js";import"./chunk-5JQLAKXV.js";import{e as l,g as R}from"./chunk-YMYCU44B.js";import"./chunk-LMDE72OE.js";import{Server as N}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport as O}from"@modelcontextprotocol/sdk/server/stdio.js";import{CallToolRequestSchema as T,ListToolsRequestSchema as x}from"@modelcontextprotocol/sdk/types.js";import{zodToJsonSchema as k}from"zod-to-json-schema";R();var y=new Map(u.map(s=>[s.schema.name,s]));function q(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 P(){let s=new N({name:"moonpay",version:l},{capabilities:{tools:{listChanged:!0}}}),n=u.map(e=>({name:e.schema.name,description:e.schema.description,inputSchema:k(e.schema.input)})),c=new Map;for(let e of f){if(y.has(e.name))continue;let t=q(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 h=new Map(n.map(e=>[e.name,e]));s.setRequestHandler(x,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(!h.has(t))return{content:[{type:"text",text:`Unknown tool: ${t}`}],isError:!0};try{let i=y.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 S=c.get(t)??{};for(let[p,r]of Object.entries(S))o[p]===void 0&&(Array.isArray(r.type)?r.type.includes("null"):r.anyOf?.some(w=>w.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 b=await d._call(t,o);return{content:[{type:"text",text:JSON.stringify(b,null,2)}]}}catch(i){return{content:[{type:"text",text:i instanceof Error?i.message:String(i)}],isError:!0}}});let g=new O;await s.connect(g)}export{P 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{A as v,B as w,f as a,g as b,h as c,i as d,j as e,k as f,l as g,m as h,n as i,o as j,p as k,q as l,r as m,s as n,t as o,u as p,v as q,w as r,x as s,y as t,z as u}from"./chunk-
|
|
2
|
+
import{A as v,B as w,f as a,g as b,h as c,i as d,j as e,k as f,l as g,m as h,n as i,o as j,p as k,q as l,r as m,s as n,t as o,u as p,v as q,w as r,x as s,y as t,z as u}from"./chunk-5JQLAKXV.js";import"./chunk-YMYCU44B.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
|
@@ -19,8 +19,8 @@ mp token search --query "BONK" --chain solana
|
|
|
19
19
|
# Get full details for a specific token
|
|
20
20
|
mp token retrieve --token <mint-address> --chain solana
|
|
21
21
|
|
|
22
|
-
# See what's trending
|
|
23
|
-
mp token trending list --chain solana
|
|
22
|
+
# See what's trending. --page is required (starts at 1); --limit is per page.
|
|
23
|
+
mp token trending list --chain solana --limit 10 --page 1
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
## Supported chains
|
|
@@ -1,154 +1,274 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: moonpay-missions
|
|
3
|
-
description: A
|
|
4
|
-
tags: [setup]
|
|
3
|
+
description: A guided walkthrough showing every MoonPay CLI capability end-to-end, in the order a real user would touch them — fund with USDC (zero-fee stablecoins), swap into a private-company prestock, build an index fund, bridge cross-chain, settle a Kalshi prediction-market position, and check out from a Shopify store. Use when the user is new or says "get started", "show me what you can do", or "run the missions".
|
|
4
|
+
tags: [setup, demo]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# MoonPay Missions
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Guided walkthrough that exercises every MoonPay CLI capability against the user's real wallet. Each mission proposes one thing, executes when the user agrees, gives a 1-2 sentence take, then proposes the next.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
This is the **showcase** — when someone says "what can you do?", run this. Skip with "skip"; jump ahead with "next" or "go".
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
## Conduct rules
|
|
14
|
+
|
|
15
|
+
- **Be concise.** Short responses. No walls of text.
|
|
16
|
+
- **No preamble.** Don't say "Let me do X" — just do it. Action first, brief summary after.
|
|
17
|
+
- **Handle errors gracefully.** If something fails, say "Let's skip ahead" and propose the next mission.
|
|
18
|
+
- **Don't ask for confirmation** before running `moonpay` commands — just execute. Exception: anything that costs real money the user hasn't already agreed to.
|
|
19
|
+
- **Show and explain.** Before each `moonpay` command, say in one short sentence what you're about to run and why. After it runs, point out the one or two key fields in the output.
|
|
20
|
+
- **Cheat codes allowed.** Pre-verified token addresses and market IDs are in this file. Still *run* the discovery command — but use the known values when picking from results, don't stall comparing options.
|
|
21
|
+
|
|
22
|
+
## Wallet to use
|
|
23
|
+
|
|
24
|
+
Default to the **funded-sol** wallet for everything unless the user says otherwise.
|
|
25
|
+
|
|
26
|
+
| | |
|
|
27
|
+
|---|---|
|
|
28
|
+
| Wallet name | `funded-sol` |
|
|
29
|
+
| Solana | `GmmrYv28CQhKjJsPcpHZuspfJSKcDwGdECeYdiDLfW12` |
|
|
30
|
+
|
|
31
|
+
Other addresses are visible via `mp wallet retrieve --wallet funded-sol`.
|
|
32
|
+
|
|
33
|
+
## Pre-flight (silent — run before Mission 1)
|
|
14
34
|
|
|
15
35
|
```bash
|
|
16
36
|
mp user retrieve
|
|
17
37
|
mp wallet list
|
|
18
38
|
```
|
|
19
39
|
|
|
20
|
-
If
|
|
40
|
+
Confirm the user is authed and `funded-sol` exists. If not, fall back to whatever wallet the user has. If they have none, run `mp wallet create --name "main"` and use that. Don't narrate this step — just do it and roll into Mission 1.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Mission 1 — Fund the wallet with USDC (zero-fee stablecoins)
|
|
45
|
+
|
|
46
|
+
**Propose:** "Want me to top up your wallet with some USDC? Heads-up — MoonPay just made stablecoin onramps zero-fee, so $50 fiat in is $50 USDC out. No spread, no card fee."
|
|
47
|
+
|
|
48
|
+
**Why this is the lead:** the zero-fee stablecoin pitch is the strongest thing MoonPay ships right now. Everything downstream (swap, prediction markets, commerce) works against the USDC we just funded.
|
|
49
|
+
|
|
50
|
+
**On yes:**
|
|
21
51
|
|
|
22
52
|
```bash
|
|
23
|
-
mp wallet
|
|
53
|
+
mp buy --token usdc --amount 50 --wallet GmmrYv28CQhKjJsPcpHZuspfJSKcDwGdECeYdiDLfW12 --email <user-email>
|
|
24
54
|
```
|
|
25
55
|
|
|
26
|
-
|
|
56
|
+
This returns a checkout URL. Open it (the desktop app intercepts the click; in CLI use `open "<url>"`).
|
|
57
|
+
|
|
58
|
+
**Summary:** "Checkout's open — fiat → USDC, zero-fee onramp. Once the order settles, $50 USDC lands on Solana." Mention that the user can check `mp token balance list --wallet funded-sol --chain solana` after the checkout completes to confirm.
|
|
59
|
+
|
|
60
|
+
**Next:** "Now that you've got USDC, want me to put some of it into Anthropic? It's trading as a prestock on Solana right now."
|
|
61
|
+
|
|
62
|
+
---
|
|
27
63
|
|
|
28
|
-
## Mission 2:
|
|
64
|
+
## Mission 2 — PreStock: Swap USDC → ANTHRP
|
|
29
65
|
|
|
30
|
-
**
|
|
66
|
+
**On yes:**
|
|
67
|
+
|
|
68
|
+
Step 1 — Discover:
|
|
31
69
|
|
|
32
70
|
```bash
|
|
33
|
-
mp token
|
|
71
|
+
mp token search --query "anthropic" --chain solana
|
|
34
72
|
```
|
|
35
73
|
|
|
36
|
-
|
|
74
|
+
Confirm `Anthropic PreStocks` (symbol `ANTHRP`) at `Pren1FvFX6J3E4kXhJuCiAD5aDmGEb7qJRncwA8Lkhw`. Add ONE sentence on what a prestock is — tokenized exposure to a private company pre-IPO, tradable 24/7 on Solana.
|
|
75
|
+
|
|
76
|
+
Step 2 — Swap USDC → ANTHRP:
|
|
37
77
|
|
|
38
78
|
```bash
|
|
39
|
-
mp token
|
|
40
|
-
|
|
79
|
+
mp token swap \
|
|
80
|
+
--wallet funded-sol --chain solana \
|
|
81
|
+
--from-token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
|
|
82
|
+
--to-token Pren1FvFX6J3E4kXhJuCiAD5aDmGEb7qJRncwA8Lkhw \
|
|
83
|
+
--from-amount 5
|
|
41
84
|
```
|
|
42
85
|
|
|
43
|
-
|
|
86
|
+
(`EPjFWdd5...` = USDC on Solana.)
|
|
87
|
+
|
|
88
|
+
**Summary:** "Just bought Anthropic pre-IPO from the terminal — one search, one swap, fractional private-company exposure on Solana. The CLI built the route, signed locally (key never left this machine), and broadcast."
|
|
89
|
+
|
|
90
|
+
**Next:** "If one prestock is cool, a whole basket is cooler — want me to build you the Elon Musk index fund?"
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Mission 3 — The Elon Musk Index Fund
|
|
44
95
|
|
|
45
|
-
|
|
96
|
+
**Trigger:** The user might also kick this off verbatim ("hey claude build the elon musk index fund"). When they do, just build it — $5 each into SpaceX, Neuralink, and TSLA. Don't stall on amount or composition.
|
|
46
97
|
|
|
47
|
-
**
|
|
98
|
+
**Propose (if not user-triggered):** "Want me to build you the Elon Musk index fund? SpaceX and Neuralink prestocks plus Tesla xStock — $5 into each, $15 total. Two private companies pre-IPO, one public stock, all on Solana."
|
|
99
|
+
|
|
100
|
+
**On yes:**
|
|
101
|
+
|
|
102
|
+
Step 1 — Discover (run all three in parallel):
|
|
48
103
|
|
|
49
104
|
```bash
|
|
50
|
-
mp token
|
|
51
|
-
mp token
|
|
52
|
-
mp
|
|
105
|
+
mp token search --query "spacex" --chain solana
|
|
106
|
+
mp token search --query "neuralink" --chain solana
|
|
107
|
+
mp token search --query "tesla" --chain solana
|
|
53
108
|
```
|
|
54
109
|
|
|
55
|
-
|
|
110
|
+
Step 2 — Identify from results (cheat codes for picking):
|
|
56
111
|
|
|
57
|
-
|
|
112
|
+
| Asset | Symbol | Mint |
|
|
113
|
+
|---|---|---|
|
|
114
|
+
| SpaceX PreStock | SPACEX | `PreANxuXjsy2pvisWWMNB6YaJNzr7681wJJr2rHsfTh` |
|
|
115
|
+
| Neuralink PreStocks | NEURALINK | `PrekqLJvJ3qVdXmBGDiexvwUTF4rLFDa6HWS4HJbw9S` |
|
|
116
|
+
| Tesla xStock | TSLAx | `XsDoVfqeBukxuZHWhdvWHBhgEHjGNst4MLodqsJHzoB` |
|
|
58
117
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
Pick a small swap based on what the wallet holds:
|
|
118
|
+
Step 3 — Swap $5 USDC into each (run all three in parallel):
|
|
62
119
|
|
|
63
120
|
```bash
|
|
64
|
-
mp token swap \
|
|
65
|
-
--
|
|
66
|
-
--
|
|
67
|
-
|
|
68
|
-
|
|
121
|
+
mp token swap --wallet funded-sol --chain solana \
|
|
122
|
+
--from-token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
|
|
123
|
+
--to-token PreANxuXjsy2pvisWWMNB6YaJNzr7681wJJr2rHsfTh --from-amount 5
|
|
124
|
+
```
|
|
125
|
+
```bash
|
|
126
|
+
mp token swap --wallet funded-sol --chain solana \
|
|
127
|
+
--from-token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
|
|
128
|
+
--to-token PrekqLJvJ3qVdXmBGDiexvwUTF4rLFDa6HWS4HJbw9S --from-amount 5
|
|
129
|
+
```
|
|
130
|
+
```bash
|
|
131
|
+
mp token swap --wallet funded-sol --chain solana \
|
|
132
|
+
--from-token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
|
|
133
|
+
--to-token XsDoVfqeBukxuZHWhdvWHBhgEHjGNst4MLodqsJHzoB --from-amount 5
|
|
69
134
|
```
|
|
70
135
|
|
|
71
|
-
|
|
136
|
+
**Summary:** "Elon Musk index fund is live — $15 AUM, three holdings, one prompt. Two private companies pre-IPO and a public stock, all settled on Solana. Vanguard could never."
|
|
137
|
+
|
|
138
|
+
**Next:** "Want to move some money cross-chain? I can bridge USDC from Solana to TON in one command."
|
|
72
139
|
|
|
73
|
-
|
|
74
|
-
- **`mp token swap`** — same chain, different tokens (e.g. SOL → USDC)
|
|
75
|
-
- **`mp token bridge`** — cross chain (e.g. ETH on Ethereum → USDC on Polygon)
|
|
76
|
-
- **`mp token transfer`** — same chain, same token, different wallet (e.g. send USDC to a friend)
|
|
140
|
+
---
|
|
77
141
|
|
|
78
|
-
## Mission
|
|
142
|
+
## Mission 4 — Cross-chain bridge: Solana → TON
|
|
79
143
|
|
|
80
|
-
**
|
|
144
|
+
**On yes:**
|
|
81
145
|
|
|
82
146
|
```bash
|
|
83
|
-
mp
|
|
147
|
+
mp token bridge \
|
|
148
|
+
--from-wallet funded-sol \
|
|
149
|
+
--from-chain solana --from-token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
|
|
150
|
+
--from-amount 2 \
|
|
151
|
+
--to-chain ton --to-token EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs
|
|
84
152
|
```
|
|
85
153
|
|
|
86
|
-
|
|
154
|
+
(`EPjFWdd5...` = USDC on Solana. `EQCxE6mU...` = USDT on TON.)
|
|
155
|
+
|
|
156
|
+
**Summary:** "Solana → TON, signed locally, bridged cross-chain. USDC out, USDT on TON in. The CLI handled the route + the swap on the destination."
|
|
157
|
+
|
|
158
|
+
**Next:** "NBA playoffs are heating up — want me to check Kalshi for the title?"
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Mission 5 — Prediction markets: Kalshi NBA
|
|
87
163
|
|
|
88
|
-
|
|
164
|
+
**On yes:**
|
|
89
165
|
|
|
90
|
-
|
|
166
|
+
Step 1 — Search:
|
|
91
167
|
|
|
92
168
|
```bash
|
|
93
|
-
mp
|
|
169
|
+
mp prediction-market market search --provider kalshi --query "NBA"
|
|
94
170
|
```
|
|
95
171
|
|
|
96
|
-
|
|
172
|
+
Step 2 — Look at the `KXNBA-26` series ("Pro Basketball Champion — 2026"). Find sub-markets with `acceptingOrders: true` and real `bestAsk` prices. Pick one with a story — a heavy favorite (OKC, Boston) for clean execution, or a value underdog if the spread looks juicy.
|
|
97
173
|
|
|
98
|
-
|
|
174
|
+
Step 3 — Quick take on the market — implied probability, whether the price looks fair.
|
|
99
175
|
|
|
100
|
-
|
|
176
|
+
Step 4 — Then: "Want me to grab some shares?"
|
|
101
177
|
|
|
102
178
|
```bash
|
|
103
|
-
mp
|
|
179
|
+
mp prediction-market position buy \
|
|
180
|
+
--provider kalshi \
|
|
181
|
+
--tokenId <yes-tokenId> \
|
|
182
|
+
--price <bestAsk> \
|
|
183
|
+
--size <shares> \
|
|
184
|
+
--wallet funded-sol
|
|
104
185
|
```
|
|
105
186
|
|
|
106
|
-
|
|
187
|
+
⚠️ Kalshi settles in USD on Solana — no Polygon gas needed. `size * price` must be ≥ $1.
|
|
107
188
|
|
|
108
|
-
|
|
189
|
+
**Summary:** "Done — NBA title position placed from the terminal. No browser, no signup form, no second account."
|
|
109
190
|
|
|
110
|
-
**
|
|
191
|
+
**Next:** "One more — want me to buy you something from a Shopify store with crypto?"
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Mission 6 — Headless commerce: buy a shirt with USDC
|
|
196
|
+
|
|
197
|
+
**On yes:**
|
|
198
|
+
|
|
199
|
+
Step 1 — Search products:
|
|
111
200
|
|
|
112
201
|
```bash
|
|
113
|
-
mp
|
|
202
|
+
mp commerce product search --store shop.hel.io --query ""
|
|
114
203
|
```
|
|
115
204
|
|
|
116
|
-
|
|
205
|
+
Step 2 — Find "Helio Classic BLACK" ($0.10), variant ID: `gid://shopify/ProductVariant/55220565016953`.
|
|
206
|
+
|
|
207
|
+
Step 3 — Add to cart and checkout with funded-sol wallet:
|
|
117
208
|
|
|
118
209
|
```bash
|
|
119
|
-
mp
|
|
210
|
+
mp commerce cart add --variantId <variant-id> --quantity 1
|
|
211
|
+
mp commerce checkout --wallet funded-sol
|
|
120
212
|
```
|
|
121
213
|
|
|
122
|
-
|
|
214
|
+
**Summary:** "Just bought you a physical shirt for 10 cents with Solana Pay — fully headless, no browser, no checkout page."
|
|
123
215
|
|
|
124
|
-
|
|
216
|
+
**Closing line:** "That's funding with zero-fee USDC, prestocks, an index fund built in parallel, cross-chain bridging, prediction markets, and headless commerce — all one CLI, one AI, natural language."
|
|
217
|
+
|
|
218
|
+
---
|
|
125
219
|
|
|
126
|
-
|
|
220
|
+
## Optional Mission 7 — Virtual Account: EUR onramp + payment link
|
|
221
|
+
|
|
222
|
+
Use this if the user wants to see the open-banking side, or if they say "show me the EUR thing" / "fiat onramp."
|
|
223
|
+
|
|
224
|
+
**On yes:**
|
|
225
|
+
|
|
226
|
+
Step 1 — Create the EUR onramp:
|
|
127
227
|
|
|
128
228
|
```bash
|
|
129
|
-
|
|
130
|
-
|
|
229
|
+
mp virtual-account onramp create \
|
|
230
|
+
--name "Demo EUR Onramp" \
|
|
231
|
+
--fiat EUR \
|
|
232
|
+
--stablecoin EURC \
|
|
233
|
+
--wallet N39jn2g1tA7dmdyyoHt9yiQegQoVhnfQzq1ZzuZRF9e \
|
|
234
|
+
--chain solana
|
|
235
|
+
```
|
|
131
236
|
|
|
132
|
-
|
|
133
|
-
mp skill retrieve --name moonpay-prediction-market
|
|
237
|
+
⚠️ Use uppercase `EUR` and `EURC`. The wallet `N39jn2g1tA7dmdyyoHt9yiQegQoVhnfQzq1ZzuZRF9e` should already be registered on the user's virtual account; if not, run `mp virtual-account wallet add` first.
|
|
134
238
|
|
|
135
|
-
|
|
136
|
-
|
|
239
|
+
Step 2 — Create a payment link from the onramp ID returned in step 1:
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
mp virtual-account onramp payment create --onrampId <id> --amount 10 --fiat EUR
|
|
137
243
|
```
|
|
138
244
|
|
|
139
|
-
|
|
245
|
+
Step 3 — Open the `paymentLink` URL.
|
|
246
|
+
|
|
247
|
+
**Summary:** "Live open-banking payment link — EUR goes in, EURC comes out on Solana."
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## Recap (after the last mission, or whenever the user says "recap")
|
|
252
|
+
|
|
253
|
+
You just exercised the full MoonPay surface end-to-end:
|
|
254
|
+
|
|
255
|
+
- **1. Fund** — fiat → USDC via zero-fee stablecoin onramp
|
|
256
|
+
- **2. Prestock** — Anthropic pre-IPO from one swap
|
|
257
|
+
- **3. Index fund** — three-asset basket built in parallel
|
|
258
|
+
- **4. Bridge** — USDC Solana → USDT TON
|
|
259
|
+
- **5. Prediction markets** — Kalshi NBA position settled in USD
|
|
260
|
+
- **6. Commerce** — headless Shopify checkout with crypto
|
|
261
|
+
|
|
262
|
+
Plus optional Mission 7: virtual-account EUR onramp + payment link.
|
|
263
|
+
|
|
264
|
+
One CLI, one chat, one wallet. Real money, real chains.
|
|
265
|
+
|
|
266
|
+
## Skip / next / start commands
|
|
140
267
|
|
|
141
|
-
|
|
268
|
+
- **"skip"** → move to the next mission immediately, skip the summary.
|
|
269
|
+
- **"next"** / **"go"** / **"start"** → propose the next mission as if mid-flow.
|
|
270
|
+
- **"recap"** → run the recap above.
|
|
142
271
|
|
|
143
|
-
|
|
144
|
-
- Set up a multi-chain HD wallet (encrypted, OS keychain secured)
|
|
145
|
-
- Searched and analyzed tokens
|
|
146
|
-
- Checked portfolio across Solana, Ethereum, Bitcoin
|
|
147
|
-
- Executed a swap (built, signed locally, broadcast)
|
|
148
|
-
- Generated a fiat buy link
|
|
149
|
-
- Signed a message for verification
|
|
150
|
-
- Explored virtual accounts
|
|
151
|
-
- Browsed prediction markets
|
|
152
|
-
- Discovered and installed skills
|
|
272
|
+
## Tone
|
|
153
273
|
|
|
154
|
-
|
|
274
|
+
Casual, confident, like a capable assistant who knows what's available. Not robotic, not overly formal, no slides. The whole point is to feel like a normal day-to-day chat that happens to settle real money on real chains.
|