cppay-sdk 0.0.2-beta.26 → 0.0.2-beta.28

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/vue.cjs CHANGED
@@ -1 +1 @@
1
- const e=require(`./polygon-zw79IkW8.cjs`),t=require(`./cppay-DnxPUyM2.cjs`);let n=require(`vue`),r=require(`rxjs`),i=require(`viem`),ee=require(`@reown/appkit`),te=require(`@reown/appkit-adapter-ethers`);var ne=e.g(e.f(),1),re={class:`_cppay-dialog`},ie={class:`_cppay-header`},ae={class:`_cppay-title`},oe=[`disabled`],se={class:`_cppay-content`},ce={key:0,style:{"text-align":`center`,padding:`2rem 0`}},le={style:{"font-size":`1.5rem`,"font-weight":`600`,color:`#10b981`,margin:`0 0 0.5rem 0`}},ue={style:{color:`#6b7280`,margin:`0`}},de={key:1},fe={class:`_cppay-section`},pe={class:`_cppay-grid`},me=[`onClick`],he=[`src`,`alt`],ge={class:`_cppay-section`},_e={class:`_cppay-grid`},ve=[`onClick`],ye=[`src`,`alt`],be={class:`_cppay-section`},xe={class:`_cppay-price-box`},Se={class:`_cppay-price-row`},Ce={class:`_cppay-price-amount`},we={class:`_cppay-price-main`},Te={class:`_cppay-price-sub`},Ee={class:`_cppay-section`},De=[`disabled`],a={key:2},o={class:`_cppay-qr-container`},s={class:`_cppay-qr-code`},c=[`src`],l={class:`_cppay-section`},u={key:0,class:`_cppay-info-box`},d={class:`_cppay-info-label`},f={class:`_cppay-info-value`},p={class:`_cppay-info-box`},m={class:`_cppay-info-label`},h={class:`_cppay-address-row`},g={key:1,class:`_cppay-info-box`,style:{background:`#fff3cd`,"border-color":`#ffc107`}},_={key:0,class:`_cppay-section`},v=[`disabled`],y={key:1},b={class:`_cppay-btn-container`},x=[`disabled`],S=[`disabled`],C={style:{"text-align":`center`,"margin-top":`8px`,"font-size":`12px`,color:`#666`}},w={class:`_cppay-section`},T=[`disabled`],E={class:`_cppay-section`},Oe=[`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)(!1),F=(0,n.ref)([]),I=(0,n.ref)(),L=(0,n.ref)(),R=(0,n.ref)(null),z=(0,n.ref)(),B=(0,n.ref)(),V=(0,n.ref)(!1),H=(0,n.ref)(),U=(0,n.ref)(null),W,G=(0,n.computed)(()=>F.value.find(e=>e.chain===I.value)),K=(0,n.computed)(()=>G.value?.tokens||[]),q=(0,n.computed)(()=>K.value.find(e=>e.symbol===L.value)),ke=e=>[`USDT`,`USDC`,`BUSD`,`DAI`,`TUSD`,`USDD`,`FDUSD`].includes(e.toUpperCase())?2:6,J=(e,t)=>{let n=parseFloat(e);return isNaN(n)?`0`:n.toFixed(t).replace(/\.?0+$/,``)},Y=(0,n.computed)(()=>{if(!L.value||!q.value)return`0`;let e=parseFloat(q.value.price);if(isNaN(e)||e===0)return`0`;let t=ke(L.value);return J((parseFloat(k.amount)/e).toFixed(t),t)}),Ae=()=>{R.value&&(P.value=!0,k.plain===`one-time`?$(R.value.paymentId):k.plain===`subscription`&&$(R.value.subscriptionId))},X=()=>{N.value||P.value||(A(`update:modelValue`,!1),setTimeout(()=>{M.value=`select`,R.value=null},300))},je=async()=>{try{N.value=!0,F.value=await j.getSupportedChains(),F.value.length>0&&(I.value=F.value[0].chain)}catch(e){A(`error`,e)}finally{N.value=!1}};(0,n.onMounted)(()=>{typeof window<`u`&&!W&&(W=(0,ee.createAppKit)({debug:!1,enableNetworkSwitch:!1,adapters:[new te.EthersAdapter],projectId:`8d2e1854d3f1782e45aa15fbd8938894`,allowUnsupportedChain:!0,networks:[e.r,e.i,e.t,e.o,e.n,e.a],metadata:{name:`Cppay`,description:`Cppay Payment Gateway`,url:window.location.origin,icons:[`https://cppay.com/icon.png`]},features:{analytics:!1}}),H.value=W.getProvider(`eip155`),B.value=W.getAddress(),W.subscribeAccount(e=>{e.isConnected?B.value=e.address:(B.value=void 0,H.value=void 0)}),W.subscribeProviders(e=>{H.value=e?.eip155}))});let Z=async()=>{try{V.value=!0,W&&await W.open()}catch(e){console.error(`钱包连接失败:`,e),A(`error`,e)}finally{V.value=!1}},Q=async e=>{if(H.value)try{await H.value.request({method:`wallet_switchEthereumChain`,params:[{chainId:`0x${e.toString(16)}`}]})}catch(e){throw e.code===4902?Error(`请在钱包中添加该网络`):e}},Me=async()=>{if(!(!B.value||!H.value||!R.value||!q.value||!G.value))try{N.value=!0;let e=R.value;await Q(G.value.chainId);let t=(0,i.createWalletClient)({account:B.value,transport:(0,i.custom)(H.value)});if(q.value.address){let n=await t.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,i.parseUnits)(e.paymentAmount,q.value.decimals)],chain:null});console.log(`转账交易哈希:`,n)}else{let n=await t.sendTransaction({to:e.receiveAddress,value:(0,i.parseUnits)(e.paymentAmount,q.value.decimals),chain:null});console.log(`转账交易哈希:`,n)}N.value=!1,P.value=!0,$(e.paymentId)}catch(e){console.error(`钱包支付失败:`,e),A(`error`,e),N.value=!1}},Ne=async()=>{if(!(!B.value||!H.value||!R.value||!q.value||!G.value))try{N.value=!0;let e=R.value;await Q(G.value.chainId);let t=(0,i.createWalletClient)({account:B.value,transport:(0,i.custom)(H.value)});if(!q.value.address)throw Error(`订阅支付不支持原生代币`);let n=await t.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,i.parseUnits)(e.paymentAmount,q.value.decimals)],chain:null});console.log(`授权交易哈希:`,n),N.value=!1,P.value=!0,$(e.paymentId)}catch(e){console.error(`钱包授权失败:`,e),A(`error`,e),N.value=!1}},Pe=async()=>{if(!B.value){await Z();return}k.plain===`one-time`?await Me():k.plain===`subscription`&&await Ne()},Fe=async()=>{if(!(!I.value||!L.value))try{N.value=!0;let e;k.plain===`one-time`?e=await j.createPayment(`one-time`,{paymentChain:I.value,paymentToken:L.value,orderId:k.orderId,amount:Y.value}):k.plain===`subscription`&&(e=await j.createPayment(`subscription`,{paymentChain:I.value,paymentToken:L.value,orderId:k.orderId,amountOfUsd:Y.value,intervalDays:k.intervalDays||30})),R.value={paymentId:e.paymentId||e.subscriptionId,paymentAmount:e.paymentAmount||e.approveAmount,receiveAddress:e.receiveAddress||e.spenderAddress||``};let t=`${I.value.toLowerCase()}:${R.value.receiveAddress}?amount=${R.value.paymentAmount}`;z.value=await ne.toDataURL(t,{width:200,margin:2,errorCorrectionLevel:`H`}),M.value=`payment`}catch(e){A(`error`,e)}finally{N.value=!1}},$=t=>{let n=()=>(0,r.defer)(()=>k.plain===`subscription`?j.checkSubscriptionPaymentStatus({subscriptionId:t}):j.checkOnetimePaymentStatus({paymentId:t})).pipe(e.s(15e3),e.u({count:3,delay:2e3}));U.value?.unsubscribe(),U.value=n().pipe(e.d(t=>t.status===`pending`?(0,r.timer)(2e3).pipe(e.l(()=>n())):r.EMPTY),e.c(e=>{e.status===`expired`&&(P.value=!1),e.status===`paid`&&(P.value=!1,M.value=`success`,A(`success`,e)),e.status===`failed`&&(P.value=!1),e.status===`approved`&&(P.value=!1,M.value=`success`,A(`success`,e))})).subscribe({error:e=>{console.error(`支付状态检查错误:`,e),P.value=!1,A(`error`,e)}})},Ie=async()=>{R.value?.receiveAddress&&await navigator.clipboard.writeText(R.value.receiveAddress)};return(0,n.watch)(()=>k.modelValue,e=>{e&&F.value.length===0&&je()}),(0,n.watch)(I,()=>{K.value.length>0&&(L.value=K.value[0].symbol)}),(0,n.watch)(M,e=>{e===`payment`&&R.value&&$(R.value.paymentId)}),(0,n.onUnmounted)(()=>{U.value?.unsubscribe()}),(e,t)=>((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:t[1]||=(0,n.withModifiers)(e=>!N.value&&!P.value&&X(),[`self`])},[(0,n.createElementVNode)(`div`,re,[(0,n.createElementVNode)(`div`,ie,[(0,n.createElementVNode)(`h2`,ae,(0,n.toDisplayString)(M.value===`select`?`选择支付方式`:M.value===`success`?`支付结果`:`完成支付`),1),(0,n.createElementVNode)(`button`,{onClick:X,class:`_cppay-close-btn`,disabled:N.value||P.value},[...t[2]||=[(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,oe)]),(0,n.createElementVNode)(`div`,se,[M.value===`success`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,ce,[t[3]||=(0,n.createElementVNode)(`div`,{style:{"font-size":`64px`,"margin-bottom":`1rem`}},`✅`,-1),(0,n.createElementVNode)(`h3`,le,(0,n.toDisplayString)(k.plain===`subscription`?`授权成功!`:`支付成功!`),1),(0,n.createElementVNode)(`p`,ue,(0,n.toDisplayString)(k.plain===`subscription`?`订阅已激活`:`交易已完成`),1)])):(0,n.createCommentVNode)(``,!0),M.value===`select`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,de,[(0,n.createElementVNode)(`div`,fe,[t[4]||=(0,n.createElementVNode)(`label`,{class:`_cppay-label`},`支付网络`,-1),(0,n.createElementVNode)(`div`,pe,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(F.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:e.chain,onClick:t=>I.value=e.chain,class:(0,n.normalizeClass)([`_cppay-select-btn`,I.value===e.chain?`_cppay-selected`:``])},[e.icon?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:e.icon,alt:e.chain},null,8,he)):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.chain),1)],10,me))),128))])]),(0,n.createElementVNode)(`div`,ge,[t[5]||=(0,n.createElementVNode)(`label`,{class:`_cppay-label`},`支付代币`,-1),(0,n.createElementVNode)(`div`,_e,[((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=>L.value=e.symbol,class:(0,n.normalizeClass)([`_cppay-select-btn`,L.value===e.symbol?`_cppay-selected`:``])},[e.icon?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:e.icon,alt:e.symbol},null,8,ye)):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.symbol),1)],10,ve))),128))])]),(0,n.createElementVNode)(`div`,be,[(0,n.createElementVNode)(`div`,xe,[(0,n.createElementVNode)(`div`,Se,[t[6]||=(0,n.createElementVNode)(`span`,{class:`_cppay-price-label`},`支付金额`,-1),(0,n.createElementVNode)(`div`,Ce,[(0,n.createElementVNode)(`div`,we,(0,n.toDisplayString)(Y.value??`-`)+` `+(0,n.toDisplayString)(L.value??``),1),(0,n.createElementVNode)(`div`,Te,`≈ $`+(0,n.toDisplayString)(D.amount),1)])])])]),(0,n.createElementVNode)(`div`,Ee,[(0,n.createElementVNode)(`button`,{onClick:Fe,disabled:!I.value||!L.value||N.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(N.value?`处理中...`:`继续支付`),9,De)])])):M.value===`payment`&&R.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,a,[(0,n.createElementVNode)(`div`,o,[(0,n.createElementVNode)(`div`,s,[z.value?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:z.value,alt:`QR Code`,style:{width:`160px`,height:`160px`,display:`block`}},null,8,c)):(0,n.createCommentVNode)(``,!0)])]),(0,n.createElementVNode)(`div`,l,[L.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,u,[(0,n.createElementVNode)(`div`,d,(0,n.toDisplayString)(k.plain===`subscription`?`授权金额`:`支付金额`),1),(0,n.createElementVNode)(`div`,f,(0,n.toDisplayString)(R.value.paymentAmount)+` `+(0,n.toDisplayString)(L.value),1)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`div`,p,[(0,n.createElementVNode)(`div`,m,(0,n.toDisplayString)(k.plain===`subscription`?`授权合约地址`:`支付地址`),1),(0,n.createElementVNode)(`div`,h,[(0,n.createElementVNode)(`code`,null,(0,n.toDisplayString)(R.value.receiveAddress),1),(0,n.createElementVNode)(`button`,{onClick:Ie,class:`_cppay-copy-btn`,title:`复制地址`},[...t[7]||=[(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`,g,[...t[8]||=[(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)]),P.value?(0,n.createCommentVNode)(``,!0):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,_,[B.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,y,[(0,n.createElementVNode)(`div`,b,[(0,n.createElementVNode)(`button`,{onClick:Pe,disabled:N.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(N.value?D.plain===`subscription`?`授权中...`:`支付中...`:D.plain===`subscription`?`💳 钱包授权`:`💳 钱包支付`),9,x),(0,n.createElementVNode)(`button`,{onClick:Z,disabled:N.value,class:`_cppay-btn _cppay-btn-primary`},` 💰钱包状态 `,8,S)]),(0,n.createElementVNode)(`div`,C,` 已连接: `+(0,n.toDisplayString)(B.value.slice(0,6))+`...`+(0,n.toDisplayString)(B.value.slice(-4)),1)])):((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:0,onClick:Z,disabled:V.value,class:`_cppay-btn _cppay-btn-secondary`,style:{display:`flex`,"align-items":`center`,"justify-content":`center`,gap:`0.5rem`,padding:`0.75rem 1rem`,width:`100%`}},[(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(V.value?`连接中...`:`💳 连接钱包`),1)],8,v))])),(0,n.createElementVNode)(`div`,w,[(0,n.createElementVNode)(`button`,{onClick:Ae,disabled:P.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(P.value?`检查中...`:`我已完成支付`),9,T)]),(0,n.createElementVNode)(`div`,E,[(0,n.createElementVNode)(`button`,{onClick:t[0]||=e=>M.value=`select`,disabled:N.value||P.value,class:`_cppay-btn _cppay-btn-text`},` 更改支付方式 `,8,Oe)])])):(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-07ac5b3d`]]),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.p(e.m),exports.CppayPlugin=F,exports.PaymentDialog=k,exports.showPayment=j,exports.useCppayPayment=I;
1
+ const e=require(`./inject-style-CvrNZeWB.cjs`),t=require(`./cppay-DnxPUyM2.cjs`);let n=require(`vue`),r=require(`qrcode`);r=e.r(r);let i=require(`rxjs`),a=require(`rxjs/operators`),o=require(`viem`),s=require(`viem/chains`),ee=require(`@reown/appkit`),te=require(`@reown/appkit-adapter-ethers`);var ne={class:`_cppay-dialog`},re={class:`_cppay-header`},ie={class:`_cppay-title`},c=[`disabled`],ae={class:`_cppay-content`},oe={key:0,style:{"text-align":`center`,padding:`2rem 0`}},se={style:{"font-size":`1.5rem`,"font-weight":`600`,color:`#10b981`,margin:`0 0 0.5rem 0`}},ce={style:{color:`#6b7280`,margin:`0`}},le={key:1},ue={class:`_cppay-section`},de={class:`_cppay-grid`},fe=[`onClick`],pe=[`src`,`alt`],me={class:`_cppay-section`},he={class:`_cppay-grid`},ge=[`onClick`],_e=[`src`,`alt`],ve={class:`_cppay-section`},ye={class:`_cppay-price-box`},be={class:`_cppay-price-row`},xe={class:`_cppay-price-amount`},Se={class:`_cppay-price-main`},Ce={class:`_cppay-price-sub`},we={class:`_cppay-section`},Te=[`disabled`],l={key:2},u={class:`_cppay-qr-container`},d={class:`_cppay-qr-code`},f=[`src`],p={class:`_cppay-section`},m={key:0,class:`_cppay-info-box`},h={class:`_cppay-info-label`},g={class:`_cppay-info-value`},_={class:`_cppay-info-box`},v={class:`_cppay-info-label`},y={class:`_cppay-address-row`},b={key:1,class:`_cppay-info-box`,style:{background:`#fff3cd`,"border-color":`#ffc107`}},x={key:0,class:`_cppay-section`},S=[`disabled`],C={key:1},w={class:`_cppay-btn-container`},T=[`disabled`],E=[`disabled`],D={style:{"text-align":`center`,"margin-top":`8px`,"font-size":`12px`,color:`#666`}},O={class:`_cppay-section`},Ee=[`disabled`],De={class:`_cppay-section`},Oe=[`disabled`],k=(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:k}){let A=e,j=k,M=new t.t(A.apikey),N=(0,n.ref)(`select`),P=(0,n.ref)(!1),F=(0,n.ref)(!1),I=(0,n.ref)([]),L=(0,n.ref)(),R=(0,n.ref)(),z=(0,n.ref)(null),B=(0,n.ref)(),V=(0,n.ref)(),H=(0,n.ref)(!1),U=(0,n.ref)(),W=(0,n.ref)(null),G,K=(0,n.computed)(()=>I.value.find(e=>e.chain===L.value)),q=(0,n.computed)(()=>K.value?.tokens||[]),J=(0,n.computed)(()=>q.value.find(e=>e.symbol===R.value)),ke=e=>[`USDT`,`USDC`,`BUSD`,`DAI`,`TUSD`,`USDD`,`FDUSD`].includes(e.toUpperCase())?2:6,Ae=(e,t)=>{let n=parseFloat(e);return isNaN(n)?`0`:n.toFixed(t).replace(/\.?0+$/,``)},Y=(0,n.computed)(()=>{if(!R.value||!J.value)return`0`;let e=parseFloat(J.value.price);if(isNaN(e)||e===0)return`0`;let t=ke(R.value);return Ae((parseFloat(A.amount)/e).toFixed(t),t)}),je=()=>{z.value&&(F.value=!0,A.plain===`one-time`?$(z.value.paymentId):A.plain===`subscription`&&$(z.value.subscriptionId))},X=()=>{P.value||F.value||(j(`update:modelValue`,!1),setTimeout(()=>{N.value=`select`,z.value=null},300))},Me=async()=>{try{P.value=!0,I.value=await M.getSupportedChains(),I.value.length>0&&(L.value=I.value[0].chain)}catch(e){j(`error`,e)}finally{P.value=!1}};(0,n.onMounted)(()=>{typeof window<`u`&&!G&&(G=(0,ee.createAppKit)({debug:!1,enableNetworkSwitch:!1,adapters:[new te.EthersAdapter],projectId:`8d2e1854d3f1782e45aa15fbd8938894`,allowUnsupportedChain:!0,networks:[s.mainnet,s.bsc,s.polygon,s.arbitrum,s.optimism,s.base],metadata:{name:`Cppay`,description:`Cppay Payment Gateway`,url:window.location.origin,icons:[`https://cppay.com/icon.png`]},features:{analytics:!1}}),U.value=G.getProvider(`eip155`),V.value=G.getAddress(),G.subscribeAccount(e=>{e.isConnected?V.value=e.address:(V.value=void 0,U.value=void 0)}),G.subscribeProviders(e=>{U.value=e?.eip155}))});let Z=async()=>{try{H.value=!0,G&&await G.open()}catch(e){console.error(`钱包连接失败:`,e),j(`error`,e)}finally{H.value=!1}},Q=async e=>{if(U.value)try{await U.value.request({method:`wallet_switchEthereumChain`,params:[{chainId:`0x${e.toString(16)}`}]})}catch(e){throw e.code===4902?Error(`请在钱包中添加该网络`):e}},Ne=async()=>{if(!(!V.value||!U.value||!z.value||!J.value||!K.value))try{P.value=!0;let e=z.value;await Q(K.value.chainId);let t=(0,o.createWalletClient)({account:V.value,transport:(0,o.custom)(U.value)});if(J.value.address){let n=await t.writeContract({address:J.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,o.parseUnits)(e.paymentAmount,J.value.decimals)],chain:null});console.log(`转账交易哈希:`,n)}else{let n=await t.sendTransaction({to:e.receiveAddress,value:(0,o.parseUnits)(e.paymentAmount,J.value.decimals),chain:null});console.log(`转账交易哈希:`,n)}P.value=!1,F.value=!0,$(e.paymentId)}catch(e){console.error(`钱包支付失败:`,e),j(`error`,e),P.value=!1}},Pe=async()=>{if(!(!V.value||!U.value||!z.value||!J.value||!K.value))try{P.value=!0;let e=z.value;await Q(K.value.chainId);let t=(0,o.createWalletClient)({account:V.value,transport:(0,o.custom)(U.value)});if(!J.value.address)throw Error(`订阅支付不支持原生代币`);let n=await t.writeContract({address:J.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,o.parseUnits)(e.paymentAmount,J.value.decimals)],chain:null});console.log(`授权交易哈希:`,n),P.value=!1,F.value=!0,$(e.paymentId)}catch(e){console.error(`钱包授权失败:`,e),j(`error`,e),P.value=!1}},Fe=async()=>{if(!V.value){await Z();return}A.plain===`one-time`?await Ne():A.plain===`subscription`&&await Pe()},Ie=async()=>{if(!(!L.value||!R.value))try{P.value=!0;let e;A.plain===`one-time`?e=await M.createPayment(`one-time`,{paymentChain:L.value,paymentToken:R.value,orderId:A.orderId,amount:Y.value}):A.plain===`subscription`&&(e=await M.createPayment(`subscription`,{paymentChain:L.value,paymentToken:R.value,orderId:A.orderId,amountOfUsd:Y.value,intervalDays:A.intervalDays||30})),z.value={paymentId:e.paymentId||e.subscriptionId,paymentAmount:e.paymentAmount||e.approveAmount,receiveAddress:e.receiveAddress||e.spenderAddress||``};let t=`${L.value.toLowerCase()}:${z.value.receiveAddress}?amount=${z.value.paymentAmount}`;B.value=await r.toDataURL(t,{width:200,margin:2,errorCorrectionLevel:`H`}),N.value=`payment`}catch(e){j(`error`,e)}finally{P.value=!1}},$=e=>{let t=()=>(0,i.defer)(()=>A.plain===`subscription`?M.checkSubscriptionPaymentStatus({subscriptionId:e}):M.checkOnetimePaymentStatus({paymentId:e})).pipe((0,a.timeout)(15e3),(0,a.retry)({count:3,delay:2e3}));W.value?.unsubscribe(),W.value=t().pipe((0,a.expand)(e=>e.status===`pending`?(0,i.timer)(2e3).pipe((0,a.switchMap)(()=>t())):i.EMPTY),(0,a.tap)(e=>{e.status===`expired`&&(F.value=!1),e.status===`paid`&&(F.value=!1,N.value=`success`,j(`success`,e)),e.status===`failed`&&(F.value=!1),e.status===`approved`&&(F.value=!1,N.value=`success`,j(`success`,e))})).subscribe({error:e=>{console.error(`支付状态检查错误:`,e),F.value=!1,j(`error`,e)}})},Le=async()=>{z.value?.receiveAddress&&await navigator.clipboard.writeText(z.value.receiveAddress)};return(0,n.watch)(()=>A.modelValue,e=>{e&&I.value.length===0&&Me()}),(0,n.watch)(L,()=>{q.value.length>0&&(R.value=q.value[0].symbol)}),(0,n.watch)(N,e=>{e===`payment`&&z.value&&$(z.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)(()=>[e.modelValue?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:`_cppay-overlay`,onClick:r[1]||=(0,n.withModifiers)(e=>!P.value&&!F.value&&X(),[`self`])},[(0,n.createElementVNode)(`div`,ne,[(0,n.createElementVNode)(`div`,re,[(0,n.createElementVNode)(`h2`,ie,(0,n.toDisplayString)(N.value===`select`?`选择支付方式`:N.value===`success`?`支付结果`:`完成支付`),1),(0,n.createElementVNode)(`button`,{onClick:X,class:`_cppay-close-btn`,disabled:P.value||F.value},[...r[2]||=[(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,c)]),(0,n.createElementVNode)(`div`,ae,[N.value===`success`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,oe,[r[3]||=(0,n.createElementVNode)(`div`,{style:{"font-size":`64px`,"margin-bottom":`1rem`}},`✅`,-1),(0,n.createElementVNode)(`h3`,se,(0,n.toDisplayString)(A.plain===`subscription`?`授权成功!`:`支付成功!`),1),(0,n.createElementVNode)(`p`,ce,(0,n.toDisplayString)(A.plain===`subscription`?`订阅已激活`:`交易已完成`),1)])):(0,n.createCommentVNode)(``,!0),N.value===`select`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,le,[(0,n.createElementVNode)(`div`,ue,[r[4]||=(0,n.createElementVNode)(`label`,{class:`_cppay-label`},`支付网络`,-1),(0,n.createElementVNode)(`div`,de,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(I.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:e.chain,onClick:t=>L.value=e.chain,class:(0,n.normalizeClass)([`_cppay-select-btn`,L.value===e.chain?`_cppay-selected`:``])},[e.icon?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:e.icon,alt:e.chain},null,8,pe)):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.chain),1)],10,fe))),128))])]),(0,n.createElementVNode)(`div`,me,[r[5]||=(0,n.createElementVNode)(`label`,{class:`_cppay-label`},`支付代币`,-1),(0,n.createElementVNode)(`div`,he,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(q.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:e.symbol,onClick:t=>R.value=e.symbol,class:(0,n.normalizeClass)([`_cppay-select-btn`,R.value===e.symbol?`_cppay-selected`:``])},[e.icon?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:e.icon,alt:e.symbol},null,8,_e)):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.symbol),1)],10,ge))),128))])]),(0,n.createElementVNode)(`div`,ve,[(0,n.createElementVNode)(`div`,ye,[(0,n.createElementVNode)(`div`,be,[r[6]||=(0,n.createElementVNode)(`span`,{class:`_cppay-price-label`},`支付金额`,-1),(0,n.createElementVNode)(`div`,xe,[(0,n.createElementVNode)(`div`,Se,(0,n.toDisplayString)(Y.value??`-`)+` `+(0,n.toDisplayString)(R.value??``),1),(0,n.createElementVNode)(`div`,Ce,`≈ $`+(0,n.toDisplayString)(e.amount),1)])])])]),(0,n.createElementVNode)(`div`,we,[(0,n.createElementVNode)(`button`,{onClick:Ie,disabled:!L.value||!R.value||P.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(P.value?`处理中...`:`继续支付`),9,Te)])])):N.value===`payment`&&z.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,l,[(0,n.createElementVNode)(`div`,u,[(0,n.createElementVNode)(`div`,d,[B.value?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:B.value,alt:`QR Code`,style:{width:`160px`,height:`160px`,display:`block`}},null,8,f)):(0,n.createCommentVNode)(``,!0)])]),(0,n.createElementVNode)(`div`,p,[R.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,m,[(0,n.createElementVNode)(`div`,h,(0,n.toDisplayString)(A.plain===`subscription`?`授权金额`:`支付金额`),1),(0,n.createElementVNode)(`div`,g,(0,n.toDisplayString)(z.value.paymentAmount)+` `+(0,n.toDisplayString)(R.value),1)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`div`,_,[(0,n.createElementVNode)(`div`,v,(0,n.toDisplayString)(A.plain===`subscription`?`授权合约地址`:`支付地址`),1),(0,n.createElementVNode)(`div`,y,[(0,n.createElementVNode)(`code`,null,(0,n.toDisplayString)(z.value.receiveAddress),1),(0,n.createElementVNode)(`button`,{onClick:Le,class:`_cppay-copy-btn`,title:`复制地址`},[...r[7]||=[(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)]])])]),A.plain===`subscription`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,b,[...r[8]||=[(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)]),F.value?(0,n.createCommentVNode)(``,!0):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,x,[V.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,C,[(0,n.createElementVNode)(`div`,w,[(0,n.createElementVNode)(`button`,{onClick:Fe,disabled:P.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(P.value?e.plain===`subscription`?`授权中...`:`支付中...`:e.plain===`subscription`?`💳 钱包授权`:`💳 钱包支付`),9,T),(0,n.createElementVNode)(`button`,{onClick:Z,disabled:P.value,class:`_cppay-btn _cppay-btn-primary`},` 💰钱包状态 `,8,E)]),(0,n.createElementVNode)(`div`,D,` 已连接: `+(0,n.toDisplayString)(V.value.slice(0,6))+`...`+(0,n.toDisplayString)(V.value.slice(-4)),1)])):((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:0,onClick:Z,disabled:H.value,class:`_cppay-btn _cppay-btn-secondary`,style:{display:`flex`,"align-items":`center`,"justify-content":`center`,gap:`0.5rem`,padding:`0.75rem 1rem`,width:`100%`}},[(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(H.value?`连接中...`:`💳 连接钱包`),1)],8,S))])),(0,n.createElementVNode)(`div`,O,[(0,n.createElementVNode)(`button`,{onClick:je,disabled:F.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(F.value?`检查中...`:`我已完成支付`),9,Ee)]),(0,n.createElementVNode)(`div`,De,[(0,n.createElementVNode)(`button`,{onClick:r[0]||=e=>N.value=`select`,disabled:P.value||F.value,class:`_cppay-btn _cppay-btn-text`},` 更改支付方式 `,8,Oe)])])):(0,n.createCommentVNode)(``,!0)])])])):(0,n.createCommentVNode)(``,!0)]),_:1})]))}}),A=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},j=A(k,[[`__scopeId`,`data-v-07ac5b3d`]]),M=(0,n.ref)({apikey:``,open:!1,options:null});const N=e=>{M.value.options=e,M.value.open=!0};var P=()=>{M.value.open=!1},F=e=>{M.value.options?.onSuccess?.(e),M.value.open=!1},I=e=>{M.value.options?.onError?.(e)};const L={install(e,t){if(!t?.apikey)throw Error(`Cppay plugin requires an apikey`);M.value.apikey=t.apikey,e.config.globalProperties.$showPayment=N;let r=document.createElement(`div`);document.body.appendChild(r),(0,n.createApp)({setup(){return()=>M.value.options?(0,n.h)(j,{modelValue:M.value.open,"onUpdate:modelValue":e=>{M.value.open=e,e||P()},apikey:M.value.apikey,plain:M.value.options.plain,orderId:M.value.options.orderId,amount:M.value.options.amount,intervalDays:M.value.options.intervalDays,onSuccess:F,onError:I}):null}}).mount(r)}},R=()=>{if(!M.value.apikey)throw Error(`useCppayPayment must be used after installing CppayPlugin`);return{showPayment:N}};e.t(e.n),exports.CppayPlugin=L,exports.PaymentDialog=j,exports.showPayment=N,exports.useCppayPayment=R;
package/dist/vue.js CHANGED
@@ -1,11 +1,14 @@
1
- import { _ as __toESM, a as base, c as tap, d as expand, f as require_browser, i as bsc, l as switchMap, m as payment_dialog_default, n as optimism, o as arbitrum, p as injectStyle, r as mainnet, s as timeout, t as polygon, u as retry } from "./polygon-1pLQCNfb.js";
2
- import { t as cppay_default } from "./cppay-BcCDwXlg.js";
1
+ import { t as cppay_default } from "./cppay-Dhqe5Hz_.js";
2
+ import { n as payment_dialog_default, t as injectStyle } from "./inject-style-aMqJSA89.js";
3
3
  import { Fragment, Teleport, Transition, computed, createApp, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, h, normalizeClass, onMounted, onUnmounted, openBlock, ref, renderList, toDisplayString, watch, withCtx, withModifiers } from "vue";
4
+ import * as QRCode from "qrcode";
4
5
  import { EMPTY, defer, timer } from "rxjs";
6
+ import { expand, retry, switchMap, tap, timeout } from "rxjs/operators";
5
7
  import { createWalletClient, custom, parseUnits } from "viem";
8
+ import { arbitrum, base, bsc, mainnet, optimism, polygon } from "viem/chains";
6
9
  import { createAppKit } from "@reown/appkit";
7
10
  import { EthersAdapter } from "@reown/appkit-adapter-ethers";
8
- var import_browser = /* @__PURE__ */ __toESM(require_browser(), 1), _hoisted_1 = { class: "_cppay-dialog" }, _hoisted_2 = { class: "_cppay-header" }, _hoisted_3 = { class: "_cppay-title" }, _hoisted_4 = ["disabled"], _hoisted_5 = { class: "_cppay-content" }, _hoisted_6 = {
11
+ var _hoisted_1 = { class: "_cppay-dialog" }, _hoisted_2 = { class: "_cppay-header" }, _hoisted_3 = { class: "_cppay-title" }, _hoisted_4 = ["disabled"], _hoisted_5 = { class: "_cppay-content" }, _hoisted_6 = {
9
12
  key: 0,
10
13
  style: {
11
14
  "text-align": "center",
@@ -37,10 +40,10 @@ var import_browser = /* @__PURE__ */ __toESM(require_browser(), 1), _hoisted_1 =
37
40
  "margin-top": "8px",
38
41
  "font-size": "12px",
39
42
  color: "#666"
40
- } }, _hoisted_45 = { class: "_cppay-section" }, _hoisted_46 = ["disabled"], _hoisted_47 = { class: "_cppay-section" }, _hoisted_48 = ["disabled"], PaymentDialog_default = /* @__PURE__ */ ((e, _) => {
41
- let v = e.__vccOpts || e;
42
- for (let [e, y] of _) v[e] = y;
43
- return v;
43
+ } }, _hoisted_45 = { class: "_cppay-section" }, _hoisted_46 = ["disabled"], _hoisted_47 = { class: "_cppay-section" }, _hoisted_48 = ["disabled"], PaymentDialog_default = /* @__PURE__ */ ((e, v) => {
44
+ let y = e.__vccOpts || e;
45
+ for (let [e, b] of v) y[e] = b;
46
+ return y;
44
47
  })(/* @__PURE__ */ defineComponent({
45
48
  __name: "PaymentDialog",
46
49
  props: {
@@ -56,8 +59,8 @@ var import_browser = /* @__PURE__ */ __toESM(require_browser(), 1), _hoisted_1 =
56
59
  "success",
57
60
  "error"
58
61
  ],
59
- setup(e, { emit: b }) {
60
- let x = e, S = b, C = new cppay_default(x.apikey), w = ref("select"), T = ref(!1), E = ref(!1), D = ref([]), O = ref(), k = ref(), A = ref(null), j = ref(), M = ref(), N = ref(!1), P = ref(), F = ref(null), I, L = computed(() => D.value.find((e) => e.chain === O.value)), R = computed(() => L.value?.tokens || []), z = computed(() => R.value.find((e) => e.symbol === k.value)), B = (e) => [
62
+ setup(v, { emit: y }) {
63
+ let x = v, S = y, C = new cppay_default(x.apikey), w = ref("select"), T = ref(!1), E = ref(!1), D = ref([]), O = ref(), k = ref(), A = ref(null), j = ref(), M = ref(), N = ref(!1), P = ref(), F = ref(null), I, L = computed(() => D.value.find((e) => e.chain === O.value)), R = computed(() => L.value?.tokens || []), z = computed(() => R.value.find((e) => e.symbol === k.value)), B = (e) => [
61
64
  "USDT",
62
65
  "USDC",
63
66
  "BUSD",
@@ -65,15 +68,15 @@ var import_browser = /* @__PURE__ */ __toESM(require_browser(), 1), _hoisted_1 =
65
68
  "TUSD",
66
69
  "USDD",
67
70
  "FDUSD"
68
- ].includes(e.toUpperCase()) ? 2 : 6, V = (e, _) => {
69
- let v = parseFloat(e);
70
- return isNaN(v) ? "0" : v.toFixed(_).replace(/\.?0+$/, "");
71
+ ].includes(e.toUpperCase()) ? 2 : 6, V = (e, v) => {
72
+ let y = parseFloat(e);
73
+ return isNaN(y) ? "0" : y.toFixed(v).replace(/\.?0+$/, "");
71
74
  }, H = computed(() => {
72
75
  if (!k.value || !z.value) return "0";
73
76
  let e = parseFloat(z.value.price);
74
77
  if (isNaN(e) || e === 0) return "0";
75
- let _ = B(k.value);
76
- return V((parseFloat(x.amount) / e).toFixed(_), _);
78
+ let v = B(k.value);
79
+ return V((parseFloat(x.amount) / e).toFixed(v), v);
77
80
  }), U = () => {
78
81
  A.value && (E.value = !0, x.plain === "one-time" ? Q(A.value.paymentId) : x.plain === "subscription" && Q(A.value.subscriptionId));
79
82
  }, W = () => {
@@ -139,12 +142,12 @@ var import_browser = /* @__PURE__ */ __toESM(require_browser(), 1), _hoisted_1 =
139
142
  T.value = !0;
140
143
  let e = A.value;
141
144
  await q(L.value.chainId);
142
- let _ = createWalletClient({
145
+ let v = createWalletClient({
143
146
  account: M.value,
144
147
  transport: custom(P.value)
145
148
  });
146
149
  if (z.value.address) {
147
- let v = await _.writeContract({
150
+ let y = await v.writeContract({
148
151
  address: z.value.address,
149
152
  abi: [{
150
153
  name: "transfer",
@@ -163,14 +166,14 @@ var import_browser = /* @__PURE__ */ __toESM(require_browser(), 1), _hoisted_1 =
163
166
  args: [e.receiveAddress, parseUnits(e.paymentAmount, z.value.decimals)],
164
167
  chain: null
165
168
  });
166
- console.log("转账交易哈希:", v);
169
+ console.log("转账交易哈希:", y);
167
170
  } else {
168
- let v = await _.sendTransaction({
171
+ let y = await v.sendTransaction({
169
172
  to: e.receiveAddress,
170
173
  value: parseUnits(e.paymentAmount, z.value.decimals),
171
174
  chain: null
172
175
  });
173
- console.log("转账交易哈希:", v);
176
+ console.log("转账交易哈希:", y);
174
177
  }
175
178
  T.value = !1, E.value = !0, Q(e.paymentId);
176
179
  } catch (e) {
@@ -181,12 +184,12 @@ var import_browser = /* @__PURE__ */ __toESM(require_browser(), 1), _hoisted_1 =
181
184
  T.value = !0;
182
185
  let e = A.value;
183
186
  await q(L.value.chainId);
184
- let _ = createWalletClient({
187
+ let v = createWalletClient({
185
188
  account: M.value,
186
189
  transport: custom(P.value)
187
190
  });
188
191
  if (!z.value.address) throw Error("订阅支付不支持原生代币");
189
- let v = await _.writeContract({
192
+ let y = await v.writeContract({
190
193
  address: z.value.address,
191
194
  abi: [{
192
195
  name: "approve",
@@ -205,7 +208,7 @@ var import_browser = /* @__PURE__ */ __toESM(require_browser(), 1), _hoisted_1 =
205
208
  args: [e.receiveAddress, parseUnits(e.paymentAmount, z.value.decimals)],
206
209
  chain: null
207
210
  });
208
- console.log("授权交易哈希:", v), T.value = !1, E.value = !0, Q(e.paymentId);
211
+ console.log("授权交易哈希:", y), T.value = !1, E.value = !0, Q(e.paymentId);
209
212
  } catch (e) {
210
213
  console.error("钱包授权失败:", e), S("error", e), T.value = !1;
211
214
  }
@@ -235,8 +238,8 @@ var import_browser = /* @__PURE__ */ __toESM(require_browser(), 1), _hoisted_1 =
235
238
  paymentAmount: e.paymentAmount || e.approveAmount,
236
239
  receiveAddress: e.receiveAddress || e.spenderAddress || ""
237
240
  };
238
- let _ = `${O.value.toLowerCase()}:${A.value.receiveAddress}?amount=${A.value.paymentAmount}`;
239
- j.value = await import_browser.toDataURL(_, {
241
+ let v = `${O.value.toLowerCase()}:${A.value.receiveAddress}?amount=${A.value.paymentAmount}`;
242
+ j.value = await QRCode.toDataURL(v, {
240
243
  width: 200,
241
244
  margin: 2,
242
245
  errorCorrectionLevel: "H"
@@ -247,11 +250,11 @@ var import_browser = /* @__PURE__ */ __toESM(require_browser(), 1), _hoisted_1 =
247
250
  T.value = !1;
248
251
  }
249
252
  }, Q = (e) => {
250
- let _ = () => defer(() => x.plain === "subscription" ? C.checkSubscriptionPaymentStatus({ subscriptionId: e }) : C.checkOnetimePaymentStatus({ paymentId: e })).pipe(timeout(15e3), retry({
253
+ let v = () => defer(() => x.plain === "subscription" ? C.checkSubscriptionPaymentStatus({ subscriptionId: e }) : C.checkOnetimePaymentStatus({ paymentId: e })).pipe(timeout(15e3), retry({
251
254
  count: 3,
252
255
  delay: 2e3
253
256
  }));
254
- F.value?.unsubscribe(), F.value = _().pipe(expand((e) => e.status === "pending" ? timer(2e3).pipe(switchMap(() => _())) : EMPTY), tap((e) => {
257
+ F.value?.unsubscribe(), F.value = v().pipe(expand((e) => e.status === "pending" ? timer(2e3).pipe(switchMap(() => v())) : EMPTY), tap((e) => {
255
258
  e.status === "expired" && (E.value = !1), e.status === "paid" && (E.value = !1, w.value = "success", S("success", e)), e.status === "failed" && (E.value = !1), e.status === "approved" && (E.value = !1, w.value = "success", S("success", e));
256
259
  })).subscribe({ error: (e) => {
257
260
  console.error("支付状态检查错误:", e), E.value = !1, S("error", e);
@@ -267,16 +270,16 @@ var import_browser = /* @__PURE__ */ __toESM(require_browser(), 1), _hoisted_1 =
267
270
  e === "payment" && A.value && Q(A.value.paymentId);
268
271
  }), onUnmounted(() => {
269
272
  F.value?.unsubscribe();
270
- }), (_, v) => (openBlock(), createBlock(Teleport, { to: "body" }, [createVNode(Transition, { name: "_cppay-fade" }, {
271
- default: withCtx(() => [e.modelValue ? (openBlock(), createElementBlock("div", {
273
+ }), (e, y) => (openBlock(), createBlock(Teleport, { to: "body" }, [createVNode(Transition, { name: "_cppay-fade" }, {
274
+ default: withCtx(() => [v.modelValue ? (openBlock(), createElementBlock("div", {
272
275
  key: 0,
273
276
  class: "_cppay-overlay",
274
- onClick: v[1] ||= withModifiers((e) => !T.value && !E.value && W(), ["self"])
277
+ onClick: y[1] ||= withModifiers((e) => !T.value && !E.value && W(), ["self"])
275
278
  }, [createElementVNode("div", _hoisted_1, [createElementVNode("div", _hoisted_2, [createElementVNode("h2", _hoisted_3, toDisplayString(w.value === "select" ? "选择支付方式" : w.value === "success" ? "支付结果" : "完成支付"), 1), createElementVNode("button", {
276
279
  onClick: W,
277
280
  class: "_cppay-close-btn",
278
281
  disabled: T.value || E.value
279
- }, [...v[2] ||= [createElementVNode("svg", {
282
+ }, [...y[2] ||= [createElementVNode("svg", {
280
283
  fill: "none",
281
284
  stroke: "currentColor",
282
285
  viewBox: "0 0 24 24"
@@ -286,32 +289,32 @@ var import_browser = /* @__PURE__ */ __toESM(require_browser(), 1), _hoisted_1 =
286
289
  "stroke-width": "2",
287
290
  d: "M6 18L18 6M6 6l12 12"
288
291
  })], -1)]], 8, _hoisted_4)]), createElementVNode("div", _hoisted_5, [w.value === "success" ? (openBlock(), createElementBlock("div", _hoisted_6, [
289
- v[3] ||= createElementVNode("div", { style: {
292
+ y[3] ||= createElementVNode("div", { style: {
290
293
  "font-size": "64px",
291
294
  "margin-bottom": "1rem"
292
295
  } }, "✅", -1),
293
296
  createElementVNode("h3", _hoisted_7, toDisplayString(x.plain === "subscription" ? "授权成功!" : "支付成功!"), 1),
294
297
  createElementVNode("p", _hoisted_8, toDisplayString(x.plain === "subscription" ? "订阅已激活" : "交易已完成"), 1)
295
298
  ])) : createCommentVNode("", !0), w.value === "select" ? (openBlock(), createElementBlock("div", _hoisted_9, [
296
- createElementVNode("div", _hoisted_10, [v[4] ||= createElementVNode("label", { class: "_cppay-label" }, "支付网络", -1), createElementVNode("div", _hoisted_11, [(openBlock(!0), createElementBlock(Fragment, null, renderList(D.value, (e) => (openBlock(), createElementBlock("button", {
299
+ createElementVNode("div", _hoisted_10, [y[4] ||= createElementVNode("label", { class: "_cppay-label" }, "支付网络", -1), createElementVNode("div", _hoisted_11, [(openBlock(!0), createElementBlock(Fragment, null, renderList(D.value, (e) => (openBlock(), createElementBlock("button", {
297
300
  key: e.chain,
298
- onClick: (_) => O.value = e.chain,
301
+ onClick: (v) => O.value = e.chain,
299
302
  class: normalizeClass(["_cppay-select-btn", O.value === e.chain ? "_cppay-selected" : ""])
300
303
  }, [e.icon ? (openBlock(), createElementBlock("img", {
301
304
  key: 0,
302
305
  src: e.icon,
303
306
  alt: e.chain
304
307
  }, null, 8, _hoisted_13)) : createCommentVNode("", !0), createElementVNode("span", null, toDisplayString(e.chain), 1)], 10, _hoisted_12))), 128))])]),
305
- createElementVNode("div", _hoisted_14, [v[5] ||= createElementVNode("label", { class: "_cppay-label" }, "支付代币", -1), createElementVNode("div", _hoisted_15, [(openBlock(!0), createElementBlock(Fragment, null, renderList(R.value, (e) => (openBlock(), createElementBlock("button", {
308
+ createElementVNode("div", _hoisted_14, [y[5] ||= createElementVNode("label", { class: "_cppay-label" }, "支付代币", -1), createElementVNode("div", _hoisted_15, [(openBlock(!0), createElementBlock(Fragment, null, renderList(R.value, (e) => (openBlock(), createElementBlock("button", {
306
309
  key: e.symbol,
307
- onClick: (_) => k.value = e.symbol,
310
+ onClick: (v) => k.value = e.symbol,
308
311
  class: normalizeClass(["_cppay-select-btn", k.value === e.symbol ? "_cppay-selected" : ""])
309
312
  }, [e.icon ? (openBlock(), createElementBlock("img", {
310
313
  key: 0,
311
314
  src: e.icon,
312
315
  alt: e.symbol
313
316
  }, null, 8, _hoisted_17)) : createCommentVNode("", !0), createElementVNode("span", null, toDisplayString(e.symbol), 1)], 10, _hoisted_16))), 128))])]),
314
- createElementVNode("div", _hoisted_18, [createElementVNode("div", _hoisted_19, [createElementVNode("div", _hoisted_20, [v[6] ||= createElementVNode("span", { class: "_cppay-price-label" }, "支付金额", -1), createElementVNode("div", _hoisted_21, [createElementVNode("div", _hoisted_22, toDisplayString(H.value ?? "-") + " " + toDisplayString(k.value ?? ""), 1), createElementVNode("div", _hoisted_23, "≈ $" + toDisplayString(e.amount), 1)])])])]),
317
+ createElementVNode("div", _hoisted_18, [createElementVNode("div", _hoisted_19, [createElementVNode("div", _hoisted_20, [y[6] ||= createElementVNode("span", { class: "_cppay-price-label" }, "支付金额", -1), createElementVNode("div", _hoisted_21, [createElementVNode("div", _hoisted_22, toDisplayString(H.value ?? "-") + " " + toDisplayString(k.value ?? ""), 1), createElementVNode("div", _hoisted_23, "≈ $" + toDisplayString(v.amount), 1)])])])]),
315
318
  createElementVNode("div", _hoisted_24, [createElementVNode("button", {
316
319
  onClick: Z,
317
320
  disabled: !O.value || !k.value || T.value,
@@ -334,7 +337,7 @@ var import_browser = /* @__PURE__ */ __toESM(require_browser(), 1), _hoisted_1 =
334
337
  onClick: $,
335
338
  class: "_cppay-copy-btn",
336
339
  title: "复制地址"
337
- }, [...v[7] ||= [createElementVNode("svg", {
340
+ }, [...y[7] ||= [createElementVNode("svg", {
338
341
  fill: "none",
339
342
  stroke: "currentColor",
340
343
  viewBox: "0 0 24 24"
@@ -344,7 +347,7 @@ var import_browser = /* @__PURE__ */ __toESM(require_browser(), 1), _hoisted_1 =
344
347
  "stroke-width": "2",
345
348
  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"
346
349
  })], -1)]])])]),
347
- x.plain === "subscription" ? (openBlock(), createElementBlock("div", _hoisted_37, [...v[8] ||= [createElementVNode("div", {
350
+ x.plain === "subscription" ? (openBlock(), createElementBlock("div", _hoisted_37, [...y[8] ||= [createElementVNode("div", {
348
351
  class: "_cppay-info-label",
349
352
  style: { color: "#856404" }
350
353
  }, "📌 订阅说明", -1), createElementVNode("div", {
@@ -359,7 +362,7 @@ var import_browser = /* @__PURE__ */ __toESM(require_browser(), 1), _hoisted_1 =
359
362
  onClick: X,
360
363
  disabled: T.value,
361
364
  class: "_cppay-btn _cppay-btn-primary"
362
- }, toDisplayString(T.value ? e.plain === "subscription" ? "授权中..." : "支付中..." : e.plain === "subscription" ? "💳 钱包授权" : "💳 钱包支付"), 9, _hoisted_42), createElementVNode("button", {
365
+ }, toDisplayString(T.value ? v.plain === "subscription" ? "授权中..." : "支付中..." : v.plain === "subscription" ? "💳 钱包授权" : "💳 钱包支付"), 9, _hoisted_42), createElementVNode("button", {
363
366
  onClick: K,
364
367
  disabled: T.value,
365
368
  class: "_cppay-btn _cppay-btn-primary"
@@ -383,7 +386,7 @@ var import_browser = /* @__PURE__ */ __toESM(require_browser(), 1), _hoisted_1 =
383
386
  class: "_cppay-btn _cppay-btn-primary"
384
387
  }, toDisplayString(E.value ? "检查中..." : "我已完成支付"), 9, _hoisted_46)]),
385
388
  createElementVNode("div", _hoisted_47, [createElementVNode("button", {
386
- onClick: v[0] ||= (e) => w.value = "select",
389
+ onClick: y[0] ||= (e) => w.value = "select",
387
390
  disabled: T.value || E.value,
388
391
  class: "_cppay-btn _cppay-btn-text"
389
392
  }, " 更改支付方式 ", 8, _hoisted_48)])
@@ -406,11 +409,11 @@ var handleClose = () => {
406
409
  }, handleError = (e) => {
407
410
  cppayState.value.options?.onError?.(e);
408
411
  };
409
- const CppayPlugin = { install(e, _) {
410
- if (!_?.apikey) throw Error("Cppay plugin requires an apikey");
411
- cppayState.value.apikey = _.apikey, e.config.globalProperties.$showPayment = showPayment;
412
- let v = document.createElement("div");
413
- document.body.appendChild(v), createApp({ setup() {
412
+ const CppayPlugin = { install(e, v) {
413
+ if (!v?.apikey) throw Error("Cppay plugin requires an apikey");
414
+ cppayState.value.apikey = v.apikey, e.config.globalProperties.$showPayment = showPayment;
415
+ let y = document.createElement("div");
416
+ document.body.appendChild(y), createApp({ setup() {
414
417
  return () => cppayState.value.options ? h(PaymentDialog_default, {
415
418
  modelValue: cppayState.value.open,
416
419
  "onUpdate:modelValue": (e) => {
@@ -424,7 +427,7 @@ const CppayPlugin = { install(e, _) {
424
427
  onSuccess: handleSuccess,
425
428
  onError: handleError
426
429
  }) : null;
427
- } }).mount(v);
430
+ } }).mount(y);
428
431
  } }, useCppayPayment = () => {
429
432
  if (!cppayState.value.apikey) throw Error("useCppayPayment must be used after installing CppayPlugin");
430
433
  return { showPayment };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cppay-sdk",
3
- "version": "0.0.2-beta.26",
3
+ "version": "0.0.2-beta.28",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "dev": "vite",
@@ -33,44 +33,13 @@
33
33
  }
34
34
  },
35
35
  "peerDependencies": {
36
- "@reown/appkit": "^1.8.16",
37
- "@reown/appkit-adapter-ethers": "^1.8.16",
38
36
  "qrcode": "^1.5.4",
39
37
  "react": ">=16.8.0",
40
38
  "react-dom": ">=16.8.0",
41
- "rxjs": "^7.8.2",
42
39
  "viem": "^2.0.0",
43
40
  "vue": "^3.0.0"
44
41
  },
45
- "peerDependenciesMeta": {
46
- "@reown/appkit": {
47
- "optional": true
48
- },
49
- "@reown/appkit-adapter-ethers": {
50
- "optional": true
51
- },
52
- "qrcode": {
53
- "optional": true
54
- },
55
- "react": {
56
- "optional": true
57
- },
58
- "react-dom": {
59
- "optional": true
60
- },
61
- "rxjs": {
62
- "optional": true
63
- },
64
- "viem": {
65
- "optional": true
66
- },
67
- "vue": {
68
- "optional": true
69
- }
70
- },
71
42
  "devDependencies": {
72
- "@reown/appkit": "^1.8.16",
73
- "@reown/appkit-adapter-ethers": "^1.8.16",
74
43
  "@types/node": "^25.0.8",
75
44
  "@types/qrcode": "^1",
76
45
  "@types/react": "^19",
@@ -78,24 +47,54 @@
78
47
  "@vitejs/plugin-react": "^5.1.2",
79
48
  "@vitejs/plugin-vue": "^6.0.3",
80
49
  "ethers": "^6.16.0",
81
- "qrcode": "^1.5.4",
82
50
  "react": "^19.2.3",
83
51
  "react-dom": "^19.2.3",
84
- "rxjs": "^7.8.2",
85
52
  "typescript": "~5.9.3",
86
- "viem": "^2.44.4",
53
+ "viem": "^2.0.0",
87
54
  "vite": "npm:rolldown-vite@7.2.5",
88
55
  "vite-plugin-dts": "^4.5.4",
89
56
  "vitest": "^4.0.17",
90
57
  "vue": "^3.5.26"
91
58
  },
59
+ "dependencies": {
60
+ "@reown/appkit": "^1.8.16",
61
+ "@reown/appkit-adapter-ethers": "^1.8.16",
62
+ "rxjs": "^7.8.2"
63
+ },
64
+ "peerDependenciesMeta": {
65
+ "react": {
66
+ "optional": true
67
+ },
68
+ "react-dom": {
69
+ "optional": true
70
+ },
71
+ "viem": {
72
+ "optional": false
73
+ },
74
+ "vue": {
75
+ "optional": true
76
+ }
77
+ },
92
78
  "resolutions": {
93
79
  "vite": "npm:rolldown-vite@7.2.5"
94
80
  },
95
81
  "packageManager": "yarn@4.12.0",
96
- "description": "",
97
- "author": "",
82
+ "description": "Cppay SDK for cryptocurrency payments - supports React and Vue",
83
+ "author": "Cppay Team",
98
84
  "license": "MIT",
99
- "repository": "",
100
- "keywords": []
85
+ "repository": {
86
+ "type": "git",
87
+ "url": "https://github.com/cppay/cppay-sdk"
88
+ },
89
+ "keywords": [
90
+ "cppay",
91
+ "crypto",
92
+ "payment",
93
+ "wallet",
94
+ "web3",
95
+ "blockchain",
96
+ "ethereum",
97
+ "react",
98
+ "vue"
99
+ ]
101
100
  }