cppay-sdk 0.0.2-beta.20 → 0.0.2-beta.21
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/{cppay-LnYTnh4d.js → cppay-BcCDwXlg.js} +4 -2
- package/dist/cppay-DnxPUyM2.cjs +1 -0
- package/dist/cppay-sdk.css +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.js +1 -1
- package/dist/react.cjs +1 -1
- package/dist/react.d.ts +7 -0
- package/dist/react.js +400 -141
- package/dist/vue.cjs +1 -1
- package/dist/vue.d.ts +68 -8
- package/dist/vue.js +404 -123
- package/dist/walletconnect-B0L70Mgc.js +1239 -0
- package/dist/walletconnect-B_n5YF-h.cjs +8 -0
- package/package.json +8 -2
- package/dist/browser-B4fiRjvC.cjs +0 -8
- package/dist/browser-Dm8HHcNy.js +0 -1239
- package/dist/cppay-ClXaSwp8.cjs +0 -1
package/dist/vue.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`./browser-B4fiRjvC.cjs`),t=require(`./cppay-ClXaSwp8.cjs`);let n=require(`vue`),r=require(`rxjs`),i=require(`rxjs/operators`);var a=e.i(e.t(),1),o={class:`_cppay-dialog`},s={class:`_cppay-header`},c={class:`_cppay-title`},l=[`disabled`],u={class:`_cppay-content`},d={key:0},f={class:`_cppay-section`},p={class:`_cppay-grid`},m=[`onClick`],ee=[`src`,`alt`],te={class:`_cppay-section`},ne={class:`_cppay-grid`},re=[`onClick`],ie=[`src`,`alt`],h={class:`_cppay-section`},g={class:`_cppay-price-box`},_={class:`_cppay-price-row`},v={class:`_cppay-price-amount`},y={class:`_cppay-price-main`},b={class:`_cppay-price-sub`},x={class:`_cppay-section`},S=[`disabled`],C={key:1},w={class:`_cppay-qr-container`},T={class:`_cppay-qr-code`,style:{background:`white`,padding:`16px`,"border-radius":`16px`,display:`inline-block`}},E=[`src`],D={class:`_cppay-section`},O={class:`_cppay-info-box`},k={class:`_cppay-info-label`},A={class:`_cppay-info-value`},j={class:`_cppay-info-box`},M={class:`_cppay-info-label`},N={class:`_cppay-address-row`},P={key:0,class:`_cppay-info-box`,style:{background:`#fff3cd`,"border-color":`#ffc107`}},F={class:`_cppay-section`},I=[`disabled`],ae={class:`_cppay-section`},L=[`disabled`],R=(0,n.defineComponent)({__name:`PaymentDialog`,props:{modelValue:{type:Boolean},apikey:{},orderId:{},amount:{},plain:{default:`one-time`},intervalDays:{default:30}},emits:[`update:modelValue`,`success`,`error`],setup(e,{emit:R}){let z=e,B=R,V=new t.t(z.apikey),H=(0,n.ref)(`select`),U=(0,n.ref)(!1),W=(0,n.ref)([]),G=(0,n.ref)(``),K=(0,n.ref)(``),q=(0,n.ref)(null),J=(0,n.ref)(``),Y=(0,n.ref)(null),oe=(0,n.computed)(()=>W.value.find(e=>e.chain===G.value)),X=(0,n.computed)(()=>oe.value?.tokens||[]);(0,n.computed)(()=>X.value.find(e=>e.symbol===K.value));let se=(0,n.ref)(1),Z=(0,n.computed)(()=>K.value?(parseFloat(z.amount)/se.value).toFixed(6):`0`),Q=()=>{B(`update:modelValue`,!1),setTimeout(()=>{H.value=`select`,q.value=null},300)},ce=async()=>{try{U.value=!0,W.value=await V.getSupportedChains(),W.value.length>0&&(G.value=W.value[0].chain)}catch(e){B(`error`,e)}finally{U.value=!1}},le=async()=>{if(!(!G.value||!K.value))try{U.value=!0;let e;z.plain===`one-time`?e=await V.createPayment(`one-time`,{paymentChain:G.value,paymentToken:K.value,orderId:z.orderId,amount:Z.value}):z.plain===`subscription`&&(e=await V.createPayment(`subscription`,{paymentChain:G.value,paymentToken:K.value,orderId:z.orderId,amountOfUsd:Z.value,intervalDays:z.intervalDays||30})),q.value={paymentId:e.paymentId||e.subscriptionId,paymentAmount:e.paymentAmount||e.approveAmount,receiveAddress:e.receiveAddress||e.spenderAddress||``};let t=`${G.value.toLowerCase()}:${q.value.receiveAddress}?amount=${q.value.paymentAmount}`;J.value=await a.toDataURL(t,{width:200,margin:2,errorCorrectionLevel:`H`}),H.value=`payment`}catch(e){B(`error`,e)}finally{U.value=!1}},$=e=>{let t=()=>(0,r.defer)(()=>z.plain===`subscription`?V.checkSubscriptionPaymentStatus({subscriptionId:e}):V.checkOnetimePaymentStatus({paymentId:e})).pipe((0,i.timeout)(15e3),(0,i.retry)({count:3,delay:2e3}));Y.value?.unsubscribe(),Y.value=t().pipe((0,i.expand)(e=>e.status===`pending`?(0,r.timer)(2e3).pipe((0,i.switchMap)(()=>t())):r.EMPTY),(0,i.tap)(t=>{t.status===`expired`&&alert(`支付已过期`),t.status===`paid`&&(alert(`支付成功!`),B(`success`,e),Q()),t.status===`failed`&&alert(`支付失败`),t.status===`approved`&&(alert(`订阅成功!`),B(`success`,e),Q())})).subscribe({error:e=>{console.error(`支付状态检查错误:`,e),B(`error`,e)}})},ue=async()=>{if(q.value)try{U.value=!0,$(q.value.paymentId)}catch(e){B(`error`,e)}finally{U.value=!1}},de=async()=>{q.value?.receiveAddress&&(await navigator.clipboard.writeText(q.value.receiveAddress),alert(`地址已复制`))};return(0,n.watch)(()=>z.modelValue,e=>{e&&W.value.length===0&&ce()}),(0,n.watch)(G,()=>{X.value.length>0&&(K.value=X.value[0].symbol)}),(0,n.watch)(H,e=>{e===`payment`&&q.value&&$(q.value.paymentId)}),(0,n.onUnmounted)(()=>{Y.value?.unsubscribe()}),(t,r)=>((0,n.openBlock)(),(0,n.createBlock)(n.Teleport,{to:`body`},[(0,n.createVNode)(n.Transition,{name:`_cppay-fade`},{default:(0,n.withCtx)(()=>[e.modelValue?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:`_cppay-overlay`,onClick:(0,n.withModifiers)(Q,[`self`])},[(0,n.createElementVNode)(`div`,o,[(0,n.createElementVNode)(`div`,s,[(0,n.createElementVNode)(`h2`,c,(0,n.toDisplayString)(H.value===`select`?`选择支付方式`:`完成支付`),1),(0,n.createElementVNode)(`button`,{onClick:Q,class:`_cppay-close-btn`,disabled:U.value},[...r[1]||=[(0,n.createElementVNode)(`svg`,{fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[(0,n.createElementVNode)(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M6 18L18 6M6 6l12 12`})],-1)]],8,l)]),(0,n.createElementVNode)(`div`,u,[H.value===`select`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,d,[(0,n.createElementVNode)(`div`,f,[r[2]||=(0,n.createElementVNode)(`label`,{class:`_cppay-label`},`支付网络`,-1),(0,n.createElementVNode)(`div`,p,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(W.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:e.chain,onClick:t=>G.value=e.chain,class:(0,n.normalizeClass)([`_cppay-select-btn`,G.value===e.chain?`_cppay-selected`:``])},[e.icon?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:e.icon,alt:e.chain},null,8,ee)):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.chain),1)],10,m))),128))])]),(0,n.createElementVNode)(`div`,te,[r[3]||=(0,n.createElementVNode)(`label`,{class:`_cppay-label`},`支付代币`,-1),(0,n.createElementVNode)(`div`,ne,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(X.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:e.symbol,onClick:t=>K.value=e.symbol,class:(0,n.normalizeClass)([`_cppay-select-btn`,K.value===e.symbol?`_cppay-selected`:``])},[e.icon?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:e.icon,alt:e.symbol},null,8,ie)):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.symbol),1)],10,re))),128))])]),(0,n.createElementVNode)(`div`,h,[(0,n.createElementVNode)(`div`,g,[(0,n.createElementVNode)(`div`,_,[r[4]||=(0,n.createElementVNode)(`span`,{class:`_cppay-price-label`},`支付金额`,-1),(0,n.createElementVNode)(`div`,v,[(0,n.createElementVNode)(`div`,y,(0,n.toDisplayString)(Z.value)+` `+(0,n.toDisplayString)(K.value),1),(0,n.createElementVNode)(`div`,b,`≈ $`+(0,n.toDisplayString)(e.amount),1)])])])]),(0,n.createElementVNode)(`div`,x,[(0,n.createElementVNode)(`button`,{onClick:le,disabled:!G.value||!K.value||U.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(U.value?`处理中...`:`继续支付`),9,S)])])):H.value===`payment`&&q.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,C,[(0,n.createElementVNode)(`div`,w,[(0,n.createElementVNode)(`div`,T,[J.value?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:J.value,alt:`QR Code`,style:{width:`200px`,height:`200px`}},null,8,E)):(0,n.createCommentVNode)(``,!0)])]),(0,n.createElementVNode)(`div`,D,[(0,n.createElementVNode)(`div`,O,[(0,n.createElementVNode)(`div`,k,(0,n.toDisplayString)(z.plain===`subscription`?`授权金额`:`支付金额`),1),(0,n.createElementVNode)(`div`,A,(0,n.toDisplayString)(q.value.paymentAmount)+` `+(0,n.toDisplayString)(K.value),1)]),(0,n.createElementVNode)(`div`,j,[(0,n.createElementVNode)(`div`,M,(0,n.toDisplayString)(z.plain===`subscription`?`授权合约地址`:`支付地址`),1),(0,n.createElementVNode)(`div`,N,[(0,n.createElementVNode)(`code`,null,(0,n.toDisplayString)(q.value.receiveAddress),1),(0,n.createElementVNode)(`button`,{onClick:de,class:`_cppay-copy-btn`,title:`复制地址`},[...r[5]||=[(0,n.createElementVNode)(`svg`,{fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[(0,n.createElementVNode)(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z`})],-1)]])])]),z.plain===`subscription`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,P,[...r[6]||=[(0,n.createElementVNode)(`div`,{class:`_cppay-info-label`,style:{color:`#856404`}},`📌 订阅说明`,-1),(0,n.createElementVNode)(`div`,{class:`_cppay-info-value`,style:{"font-size":`12px`,color:`#856404`}},` 订阅支付需要授权代币给合约地址,系统将按周期自动扣款。授权后无需每次手动支付。 `,-1)]])):(0,n.createCommentVNode)(``,!0)]),(0,n.createElementVNode)(`div`,F,[(0,n.createElementVNode)(`button`,{onClick:ue,disabled:U.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(U.value?`检查支付状态...`:`我已完成支付`),9,I)]),(0,n.createElementVNode)(`div`,ae,[(0,n.createElementVNode)(`button`,{onClick:r[0]||=e=>H.value=`select`,disabled:U.value,class:`_cppay-btn _cppay-btn-secondary`},` 更改支付方式 `,8,L)])])):(0,n.createCommentVNode)(``,!0)])])])):(0,n.createCommentVNode)(``,!0)]),_:1})]))}}),z=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},B=z(R,[[`__scopeId`,`data-v-681ced40`]]);e.n(e.r),exports.PaymentDialog=B;
|
|
1
|
+
const e=require(`./walletconnect-B_n5YF-h.cjs`),t=require(`./cppay-DnxPUyM2.cjs`);let n=require(`vue`),r=require(`rxjs`),i=require(`rxjs/operators`),a=require(`viem`),o=require(`viem/chains`),s=require(`@walletconnect/ethereum-provider`);s=e.o(s);var ee=e.o(e.r(),1),te={class:`_cppay-dialog`},ne={class:`_cppay-header`},re={class:`_cppay-title`},ie=[`disabled`],ae={class:`_cppay-content`},oe={key:0,style:{"text-align":`center`,padding:`2rem 0`}},c={style:{"font-size":`1.5rem`,"font-weight":`600`,color:`#10b981`,margin:`0 0 0.5rem 0`}},se={style:{color:`#6b7280`,margin:`0`}},ce={key:1},le={class:`_cppay-section`},ue={class:`_cppay-grid`},de=[`onClick`],fe=[`src`,`alt`],pe={class:`_cppay-section`},me={class:`_cppay-grid`},he=[`onClick`],ge=[`src`,`alt`],_e={class:`_cppay-section`},ve={class:`_cppay-price-box`},ye={class:`_cppay-price-row`},be={class:`_cppay-price-amount`},xe={class:`_cppay-price-main`},Se={class:`_cppay-price-sub`},Ce={class:`_cppay-section`},we=[`disabled`],Te={key:2},Ee={class:`_cppay-qr-container`},De={class:`_cppay-qr-code`},l=[`src`],u={class:`_cppay-section`},d={class:`_cppay-info-box`},f={class:`_cppay-info-label`},p={class:`_cppay-info-value`},m={class:`_cppay-info-box`},h={class:`_cppay-info-label`},g={class:`_cppay-address-row`},_={key:0,class:`_cppay-info-box`,style:{background:`#fff3cd`,"border-color":`#ffc107`}},v={class:`_cppay-section`},y={key:0,style:{display:`flex`,"flex-direction":`row`,gap:`0.5rem`,"justify-content":`center`}},b=[`disabled`],x=[`src`],S=[`disabled`],C=[`src`],w={key:1},T=[`disabled`],E={style:{"text-align":`center`,"margin-top":`8px`,"font-size":`12px`,color:`#666`}},Oe={class:`_cppay-section`},ke=[`disabled`],Ae={class:`_cppay-section`},je=[`disabled`],D=(0,n.defineComponent)({__name:`PaymentDialog`,props:{modelValue:{type:Boolean},apikey:{},orderId:{},amount:{},plain:{default:`one-time`},intervalDays:{default:30}},emits:[`update:modelValue`,`success`,`error`],setup(D,{emit:O}){let k=D,A=O,j=new t.t(k.apikey),M=(0,n.ref)(`select`),N=(0,n.ref)(!1),P=(0,n.ref)([]),F=(0,n.ref)(``),I=(0,n.ref)(``),L=(0,n.ref)(null),R=(0,n.ref)(``),z=(0,n.ref)(``),B=(0,n.ref)(!1),V=(0,n.ref)(!0),H=(0,n.ref)(null),U=(0,n.ref)(null),W=(0,n.ref)(null),G=(0,n.computed)(()=>P.value.find(e=>e.chain===F.value)),K=(0,n.computed)(()=>G.value?.tokens||[]),q=(0,n.computed)(()=>K.value.find(e=>e.symbol===I.value)),Me=e=>[`USDT`,`USDC`,`BUSD`,`DAI`,`TUSD`,`USDD`,`FDUSD`].includes(e.toUpperCase())?2:6,Ne=(e,t)=>{let n=parseFloat(e);return isNaN(n)?`0`:n.toFixed(t).replace(/\.?0+$/,``)},J=(0,n.computed)(()=>{if(!I.value||!q.value)return`0`;let e=parseFloat(q.value.price);if(isNaN(e)||e===0)return`0`;let t=Me(I.value);return Ne((parseFloat(k.amount)/e).toFixed(t),t)}),Pe=()=>{L.value&&(N.value=!0,k.plain===`one-time`?$(L.value.paymentId):k.plain===`subscription`&&$(L.value.subscriptionId))},Y=()=>{N.value||(A(`update:modelValue`,!1),setTimeout(()=>{M.value=`select`,L.value=null},300))},Fe=async()=>{try{N.value=!0,P.value=await j.getSupportedChains(),P.value.length>0&&(F.value=P.value[0].chain)}catch(e){A(`error`,e)}finally{N.value=!1}},X=e=>({ETH:o.mainnet,BSC:o.bsc,Polygon:o.polygon,Arbitrum:o.arbitrum,Optimism:o.optimism,Base:o.base})[e]||o.mainnet,Z=async e=>{try{if(B.value=!0,e===`metamask`){if(typeof window<`u`&&window.ethereum?.isMetaMask){let e=await window.ethereum.request({method:`eth_requestAccounts`});if(e&&e.length>0){z.value=e[0],H.value=`metamask`,V.value=!1;return}}throw Error(`请安装 MetaMask 扩展`)}if(e===`walletconnect`){let e=await s.default.init({projectId:`8d2e1854d3f1782e45aa15fbd8938894`,chains:[1],showQrModal:!0,optionalChains:[56,137,42161,10,8453],methods:[`eth_sendTransaction`,`eth_signTransaction`,`eth_sign`,`personal_sign`,`eth_signTypedData`],events:[`chainChanged`,`accountsChanged`],metadata:{name:`Cppay`,description:`Cppay Payment Gateway`,url:typeof window<`u`?window.location.origin:`https://cppay.com`,icons:[`https://cppay.com/icon.png`]},rpcMap:{1:`https://ethereum.publicnode.com`,56:`https://bsc-dataseed.binance.org`,137:`https://polygon-rpc.com`,42161:`https://arb1.arbitrum.io/rpc`,10:`https://mainnet.optimism.io`,8453:`https://mainnet.base.org`}});await e.enable();let t=await e.request({method:`eth_accounts`});t&&t.length>0&&(z.value=t[0],H.value=`walletconnect`,U.value=e,V.value=!1)}}catch(e){console.error(`钱包连接失败:`,e),A(`error`,e)}finally{B.value=!1}},Q=async e=>{let t;if(t=H.value===`walletconnect`?U.value:window.ethereum,t)try{await t.request({method:`wallet_switchEthereumChain`,params:[{chainId:`0x${e.toString(16)}`}]})}catch(e){throw e.code===4902?Error(`请在钱包中添加该网络`):e}},Ie=async()=>{if(!(!z.value||!L.value||!q.value))try{N.value=!0;let e=L.value,t=X(F.value);await Q(G.value.chainId);let n=(0,a.createWalletClient)({account:z.value,chain:t,transport:(0,a.custom)(H.value===`walletconnect`?U.value:window.ethereum)});if(q.value.address){let t=await n.writeContract({address:q.value.address,abi:[{name:`transfer`,type:`function`,stateMutability:`nonpayable`,inputs:[{name:`to`,type:`address`},{name:`amount`,type:`uint256`}],outputs:[{type:`bool`}]}],functionName:`transfer`,args:[e.receiveAddress,(0,a.parseUnits)(e.paymentAmount,q.value.decimals)],chain:null});console.log(`转账交易哈希:`,t)}else{let t=await n.sendTransaction({to:e.receiveAddress,value:(0,a.parseUnits)(e.paymentAmount,q.value.decimals),chain:null});console.log(`转账交易哈希:`,t)}$(e.paymentId)}catch(e){console.error(`钱包支付失败:`,e),A(`error`,e)}finally{N.value=!1}},Le=async()=>{if(!(!z.value||!L.value||!q.value))try{N.value=!0;let e=L.value,t=X(F.value);await Q(G.value.chainId);let n=(0,a.createWalletClient)({account:z.value,chain:t,transport:(0,a.custom)(H.value===`walletconnect`?U.value:window.ethereum)});if(!q.value.address)throw Error(`订阅支付不支持原生代币`);let r=await n.writeContract({address:q.value.address,abi:[{name:`approve`,type:`function`,stateMutability:`nonpayable`,inputs:[{name:`spender`,type:`address`},{name:`amount`,type:`uint256`}],outputs:[{type:`bool`}]}],functionName:`approve`,args:[e.receiveAddress,(0,a.parseUnits)(e.paymentAmount,q.value.decimals)],chain:null});console.log(`授权交易哈希:`,r),$(e.paymentId)}catch(e){console.error(`钱包授权失败:`,e),A(`error`,e)}finally{N.value=!1}},Re=async()=>{if(!z.value){V.value=!0;return}k.plain===`one-time`?await Ie():k.plain===`subscription`&&await Le()},ze=async()=>{if(!(!F.value||!I.value))try{N.value=!0;let e;k.plain===`one-time`?e=await j.createPayment(`one-time`,{paymentChain:F.value,paymentToken:I.value,orderId:k.orderId,amount:J.value}):k.plain===`subscription`&&(e=await j.createPayment(`subscription`,{paymentChain:F.value,paymentToken:I.value,orderId:k.orderId,amountOfUsd:J.value,intervalDays:k.intervalDays||30})),L.value={paymentId:e.paymentId||e.subscriptionId,paymentAmount:e.paymentAmount||e.approveAmount,receiveAddress:e.receiveAddress||e.spenderAddress||``};let t=`${F.value.toLowerCase()}:${L.value.receiveAddress}?amount=${L.value.paymentAmount}`;R.value=await ee.toDataURL(t,{width:200,margin:2,errorCorrectionLevel:`H`}),M.value=`payment`}catch(e){A(`error`,e)}finally{N.value=!1}},$=e=>{let t=()=>(0,r.defer)(()=>k.plain===`subscription`?j.checkSubscriptionPaymentStatus({subscriptionId:e}):j.checkOnetimePaymentStatus({paymentId:e})).pipe((0,i.timeout)(15e3),(0,i.retry)({count:3,delay:2e3}));W.value?.unsubscribe(),W.value=t().pipe((0,i.expand)(e=>e.status===`pending`?(0,r.timer)(2e3).pipe((0,i.switchMap)(()=>t())):r.EMPTY),(0,i.tap)(e=>{e.status===`expired`&&(N.value=!1),e.status===`paid`&&(N.value=!1,M.value=`success`,A(`success`,e)),e.status===`failed`&&(N.value=!1),e.status===`approved`&&(N.value=!1,M.value=`success`,A(`success`,e))})).subscribe({error:e=>{console.error(`支付状态检查错误:`,e),N.value=!1,A(`error`,e)}})},Be=async()=>{L.value?.receiveAddress&&await navigator.clipboard.writeText(L.value.receiveAddress)};return(0,n.watch)(()=>k.modelValue,e=>{e&&P.value.length===0&&Fe()}),(0,n.watch)(F,()=>{K.value.length>0&&(I.value=K.value[0].symbol)}),(0,n.watch)(M,e=>{e===`payment`&&L.value&&$(L.value.paymentId)}),(0,n.onUnmounted)(()=>{W.value?.unsubscribe()}),(t,r)=>((0,n.openBlock)(),(0,n.createBlock)(n.Teleport,{to:`body`},[(0,n.createVNode)(n.Transition,{name:`_cppay-fade`},{default:(0,n.withCtx)(()=>[D.modelValue?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:`_cppay-overlay`,onClick:r[3]||=(0,n.withModifiers)(e=>!N.value&&Y(),[`self`])},[(0,n.createElementVNode)(`div`,te,[(0,n.createElementVNode)(`div`,ne,[(0,n.createElementVNode)(`h2`,re,(0,n.toDisplayString)(M.value===`select`?`选择支付方式`:M.value===`success`?`支付结果`:`完成支付`),1),(0,n.createElementVNode)(`button`,{onClick:Y,class:`_cppay-close-btn`,disabled:N.value},[...r[4]||=[(0,n.createElementVNode)(`svg`,{fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[(0,n.createElementVNode)(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M6 18L18 6M6 6l12 12`})],-1)]],8,ie)]),(0,n.createElementVNode)(`div`,ae,[M.value===`success`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,oe,[r[5]||=(0,n.createElementVNode)(`div`,{style:{"font-size":`64px`,"margin-bottom":`1rem`}},`✅`,-1),(0,n.createElementVNode)(`h3`,c,(0,n.toDisplayString)(k.plain===`subscription`?`授权成功!`:`支付成功!`),1),(0,n.createElementVNode)(`p`,se,(0,n.toDisplayString)(k.plain===`subscription`?`订阅已激活`:`交易已完成`),1)])):(0,n.createCommentVNode)(``,!0),M.value===`select`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,ce,[(0,n.createElementVNode)(`div`,le,[r[6]||=(0,n.createElementVNode)(`label`,{class:`_cppay-label`},`支付网络`,-1),(0,n.createElementVNode)(`div`,ue,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(P.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:e.chain,onClick:t=>F.value=e.chain,class:(0,n.normalizeClass)([`_cppay-select-btn`,F.value===e.chain?`_cppay-selected`:``])},[e.icon?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:e.icon,alt:e.chain},null,8,fe)):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.chain),1)],10,de))),128))])]),(0,n.createElementVNode)(`div`,pe,[r[7]||=(0,n.createElementVNode)(`label`,{class:`_cppay-label`},`支付代币`,-1),(0,n.createElementVNode)(`div`,me,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(K.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:e.symbol,onClick:t=>I.value=e.symbol,class:(0,n.normalizeClass)([`_cppay-select-btn`,I.value===e.symbol?`_cppay-selected`:``])},[e.icon?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:e.icon,alt:e.symbol},null,8,ge)):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.symbol),1)],10,he))),128))])]),(0,n.createElementVNode)(`div`,_e,[(0,n.createElementVNode)(`div`,ve,[(0,n.createElementVNode)(`div`,ye,[r[8]||=(0,n.createElementVNode)(`span`,{class:`_cppay-price-label`},`支付金额`,-1),(0,n.createElementVNode)(`div`,be,[(0,n.createElementVNode)(`div`,xe,(0,n.toDisplayString)(J.value)+` `+(0,n.toDisplayString)(I.value),1),(0,n.createElementVNode)(`div`,Se,`≈ $`+(0,n.toDisplayString)(D.amount),1)])])])]),(0,n.createElementVNode)(`div`,Ce,[(0,n.createElementVNode)(`button`,{onClick:ze,disabled:!F.value||!I.value||N.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(N.value?`处理中...`:`继续支付`),9,we)])])):M.value===`payment`&&L.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,Te,[(0,n.createElementVNode)(`div`,Ee,[(0,n.createElementVNode)(`div`,De,[R.value?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:R.value,alt:`QR Code`,style:{width:`160px`,height:`160px`,display:`block`}},null,8,l)):(0,n.createCommentVNode)(``,!0)])]),(0,n.createElementVNode)(`div`,u,[(0,n.createElementVNode)(`div`,d,[(0,n.createElementVNode)(`div`,f,(0,n.toDisplayString)(k.plain===`subscription`?`授权金额`:`支付金额`),1),(0,n.createElementVNode)(`div`,p,(0,n.toDisplayString)(L.value.paymentAmount)+` `+(0,n.toDisplayString)(I.value),1)]),(0,n.createElementVNode)(`div`,m,[(0,n.createElementVNode)(`div`,h,(0,n.toDisplayString)(k.plain===`subscription`?`授权合约地址`:`支付地址`),1),(0,n.createElementVNode)(`div`,g,[(0,n.createElementVNode)(`code`,null,(0,n.toDisplayString)(L.value.receiveAddress),1),(0,n.createElementVNode)(`button`,{onClick:Be,class:`_cppay-copy-btn`,title:`复制地址`},[...r[9]||=[(0,n.createElementVNode)(`svg`,{fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[(0,n.createElementVNode)(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z`})],-1)]])])]),k.plain===`subscription`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,_,[...r[10]||=[(0,n.createElementVNode)(`div`,{class:`_cppay-info-label`,style:{color:`#856404`}},`📌 订阅说明`,-1),(0,n.createElementVNode)(`div`,{class:`_cppay-info-value`,style:{"font-size":`12px`,color:`#856404`}},` 订阅支付需要授权代币给合约地址,系统将按周期自动扣款。授权后无需每次手动支付。 `,-1)]])):(0,n.createCommentVNode)(``,!0)]),(0,n.createElementVNode)(`div`,v,[z.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,w,[(0,n.createElementVNode)(`button`,{onClick:Re,disabled:N.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(N.value?D.plain===`subscription`?`授权中...`:`支付中...`:D.plain===`subscription`?`💳 钱包授权`:`💳 钱包支付`),9,T),(0,n.createElementVNode)(`div`,E,` 已连接: `+(0,n.toDisplayString)(z.value.slice(0,6))+`...`+(0,n.toDisplayString)(z.value.slice(-4)),1)])):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,y,[(0,n.createElementVNode)(`button`,{onClick:r[0]||=()=>Z(`metamask`),disabled:B.value,class:`_cppay-btn _cppay-btn-secondary`,style:{display:`flex`,"align-items":`center`,"justify-content":`center`,gap:`0.5rem`,padding:`0.5rem 1rem`,"font-size":`14px`,flex:`1`}},[(0,n.createElementVNode)(`img`,{src:(0,n.unref)(e.n),alt:`MetaMask`,style:{width:`20px`,height:`20px`}},null,8,x),r[11]||=(0,n.createElementVNode)(`span`,null,`MetaMask`,-1)],8,b),(0,n.createElementVNode)(`button`,{onClick:r[1]||=()=>Z(`walletconnect`),disabled:B.value,class:`_cppay-btn _cppay-btn-secondary`,style:{display:`flex`,"align-items":`center`,"justify-content":`center`,gap:`0.5rem`,padding:`0.5rem 1rem`,"font-size":`14px`,flex:`1`}},[(0,n.createElementVNode)(`img`,{src:(0,n.unref)(e.t),alt:`WalletConnect`,style:{width:`20px`,height:`20px`}},null,8,C),r[12]||=(0,n.createElementVNode)(`span`,null,`WalletConnect`,-1)],8,S)]))]),(0,n.createElementVNode)(`div`,Oe,[(0,n.createElementVNode)(`button`,{onClick:Pe,disabled:N.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(N.value?`检查中...`:`我已完成支付`),9,ke)]),(0,n.createElementVNode)(`div`,Ae,[(0,n.createElementVNode)(`button`,{onClick:r[2]||=e=>M.value=`select`,disabled:N.value,class:`_cppay-btn _cppay-btn-text`},` 更改支付方式 `,8,je)])])):(0,n.createCommentVNode)(``,!0)])])])):(0,n.createCommentVNode)(``,!0)]),_:1})]))}}),O=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},k=O(D,[[`__scopeId`,`data-v-1a5fedf2`]]),A=(0,n.ref)({apikey:``,open:!1,options:null});const j=e=>{A.value.options=e,A.value.open=!0};var M=()=>{A.value.open=!1},N=e=>{A.value.options?.onSuccess?.(e),A.value.open=!1},P=e=>{A.value.options?.onError?.(e)};const F={install(e,t){if(!t?.apikey)throw Error(`Cppay plugin requires an apikey`);A.value.apikey=t.apikey,e.config.globalProperties.$showPayment=j;let r=document.createElement(`div`);document.body.appendChild(r),(0,n.createApp)({setup(){return()=>A.value.options?(0,n.h)(k,{modelValue:A.value.open,"onUpdate:modelValue":e=>{A.value.open=e,e||M()},apikey:A.value.apikey,plain:A.value.options.plain,orderId:A.value.options.orderId,amount:A.value.options.amount,intervalDays:A.value.options.intervalDays,onSuccess:N,onError:P}):null}}).mount(r)}},I=()=>{if(!A.value.apikey)throw Error(`useCppayPayment must be used after installing CppayPlugin`);return{showPayment:j}};e.i(e.a),exports.CppayPlugin=F,exports.PaymentDialog=k,exports.showPayment=j,exports.useCppayPayment=I;
|
package/dist/vue.d.ts
CHANGED
|
@@ -1,28 +1,88 @@
|
|
|
1
|
-
import { ComponentOptionsMixin } from 'vue';
|
|
2
|
-
import { ComponentProvideOptions } from 'vue';
|
|
3
|
-
import { DefineComponent } from 'vue';
|
|
4
|
-
import {
|
|
1
|
+
import { ComponentOptionsMixin } from '../../vue/dist/vue.esm-bundler.js';
|
|
2
|
+
import { ComponentProvideOptions } from '../../vue/dist/vue.esm-bundler.js';
|
|
3
|
+
import { DefineComponent } from '../../vue/dist/vue.esm-bundler.js';
|
|
4
|
+
import { Plugin as Plugin_2 } from '../../vue/dist/vue.esm-bundler.js';
|
|
5
|
+
import { PublicProps } from '../../vue/dist/vue.esm-bundler.js';
|
|
6
|
+
|
|
7
|
+
declare type Address = `0x${string}`;
|
|
8
|
+
|
|
9
|
+
export declare const CppayPlugin: Plugin_2;
|
|
10
|
+
|
|
11
|
+
declare type Numberic = `${number}.${number}` | `${number}`;
|
|
12
|
+
|
|
13
|
+
declare interface OnetimePaymentOrderStatus {
|
|
14
|
+
orderId: string;
|
|
15
|
+
paymentId: string;
|
|
16
|
+
chain: string;
|
|
17
|
+
token: string;
|
|
18
|
+
baseAmount: Numberic;
|
|
19
|
+
payAmount: Numberic;
|
|
20
|
+
receiveAddress: Address;
|
|
21
|
+
expireAt: number;
|
|
22
|
+
status: PaymentStatus;
|
|
23
|
+
}
|
|
5
24
|
|
|
6
25
|
export declare const PaymentDialog: DefineComponent<Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
|
|
7
26
|
error: (error: Error) => any;
|
|
8
27
|
"update:modelValue": (value: boolean) => any;
|
|
9
|
-
success: (
|
|
28
|
+
success: (order: OnetimePaymentOrderStatus | SubscriptionPaymentOrderStatus) => any;
|
|
10
29
|
}, string, PublicProps, Readonly<Props> & Readonly<{
|
|
11
30
|
onError?: ((error: Error) => any) | undefined;
|
|
12
31
|
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
|
|
13
|
-
onSuccess?: ((
|
|
32
|
+
onSuccess?: ((order: OnetimePaymentOrderStatus | SubscriptionPaymentOrderStatus) => any) | undefined;
|
|
14
33
|
}>, {
|
|
15
34
|
intervalDays: number;
|
|
16
|
-
plain:
|
|
35
|
+
plain: PaymentPlain;
|
|
17
36
|
}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
|
|
18
37
|
|
|
38
|
+
declare interface PaymentOptions_2 {
|
|
39
|
+
plain: PaymentPlain;
|
|
40
|
+
orderId: string;
|
|
41
|
+
amount: string;
|
|
42
|
+
intervalDays?: number;
|
|
43
|
+
onSuccess?: (order: SubscriptionPaymentOrderStatus | OnetimePaymentOrderStatus) => void;
|
|
44
|
+
onError?: (error: Error) => void;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
declare type PaymentPlain = "one-time" | "subscription" | "x402";
|
|
48
|
+
|
|
49
|
+
declare type PaymentStatus = "pending" | "paid" | "expired" | "failed";
|
|
50
|
+
|
|
19
51
|
declare interface Props {
|
|
20
52
|
modelValue: boolean;
|
|
21
53
|
apikey: string;
|
|
22
54
|
orderId: string;
|
|
23
55
|
amount: string;
|
|
24
|
-
plain?:
|
|
56
|
+
plain?: PaymentPlain;
|
|
25
57
|
intervalDays?: number;
|
|
26
58
|
}
|
|
27
59
|
|
|
60
|
+
export declare const showPayment: (options: PaymentOptions_2) => void;
|
|
61
|
+
|
|
62
|
+
declare interface SubscriptionPaymentOrderStatus {
|
|
63
|
+
orderId: string;
|
|
64
|
+
subscriptionId: string;
|
|
65
|
+
chain: string;
|
|
66
|
+
token: string;
|
|
67
|
+
approvedAddress: string;
|
|
68
|
+
txHash: string;
|
|
69
|
+
approveAmount: string;
|
|
70
|
+
amountOfUsd: string;
|
|
71
|
+
expireAt: number;
|
|
72
|
+
status: SubscriptionPaymentStatus;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
declare type SubscriptionPaymentStatus = "pending" | "approved" | "expired" | "failed";
|
|
76
|
+
|
|
77
|
+
export declare const useCppayPayment: () => {
|
|
78
|
+
showPayment: (options: PaymentOptions_2) => void;
|
|
79
|
+
};
|
|
80
|
+
|
|
28
81
|
export { }
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
declare module "@vue/runtime-core" {
|
|
85
|
+
interface ComponentCustomProperties {
|
|
86
|
+
$showPayment: typeof showPayment;
|
|
87
|
+
}
|
|
88
|
+
}
|