cppay-sdk 0.0.2-beta.30 → 0.0.2-beta.31

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.
@@ -158,8 +158,8 @@ var BASE_URL = "http://192.168.0.162:8000", request = async (e, t, r) => {
158
158
  }
159
159
  }, cppay_default = class {
160
160
  api;
161
- constructor(e) {
162
- this.api = new CppayApi(e);
161
+ constructor(e, t) {
162
+ this.api = new CppayApi(e, t);
163
163
  }
164
164
  async getSupportedChains() {
165
165
  let n = (await this.api.getSupportedChains()).reduce((n, r) => {
@@ -1 +1 @@
1
- const e={Ethereum:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png`,BSC:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/binance/info/logo.png`,"bsc-testnet":`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/binance/info/logo.png`,Tron:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png`,Polygon:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/polygon/info/logo.png`,Solana:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/solana/info/logo.png`},t={USDT:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png`,USDC:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png`,ETH:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png`,BNB:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/binance/info/logo.png`,tBNB:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/binance/info/logo.png`,TRX:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png`,SOL:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/solana/info/logo.png`};var n=`http://192.168.0.162:8000`,r=async(e,t,r)=>{let i=Object.assign({timeout:15e3},r),a=new AbortController,o=setTimeout(()=>a.abort(),i.timeout);try{let r=await fetch(new URL(e,n),{signal:a.signal,...t});clearTimeout(o);let i=r.headers.get(`Content-Type`)??``;if(i.includes(`json`))return await r.json();try{return await r.json()}catch{throw Error(`URL: ${e}, Unsupport Content Type: ${i}`)}}catch(t){throw clearTimeout(o),t instanceof DOMException&&t.name===`AbortError`?Error(`URL: ${e}, Request timeout after ${i.timeout}ms`):t}},i=0,a=async(e,t)=>{let n=new URLSearchParams(t.params),a=await r(`${t.url}${n.size?`?${n.toString()}`:``}`,{method:t.method??`get`,headers:{Authorization:e,...t.headers},body:t.data?JSON.stringify(t.data):void 0});if(a.code!==i)throw Error(`Request ${t.url} Failed. ${a.message}`);return a.data},o=class{authorization;constructor(e,t){this.authorization=e?`ApiKey ${e}`:`OTT ${t}`}async getSupportedChains(){return(await a(this.authorization,{url:`/api/payment/token`})).map(e=>({chain:e.chain,chainId:e.chain_id,tokenSymbol:e.token_symbol,tokenDecimals:e.token_decimals,tokenAddress:e.token_address,tokenPrice:e.token_price}))}async createOnetimePayment(e,t,n,r){let i={chain:e,token:t,order_no:n,amount:r},o=await a(this.authorization,{url:`/api/payment/create`,method:`post`,data:i});return{paymentId:o.payment_id,paymentAmount:o.pay_amount,receiveAddress:o.receive_address,expireAt:o.expire_at}}async createSubscriptionPayment(e,t,n,r,i){let o={chain:e,token:t,order_no:n,amount_usd:r,renewal_days:i},s=await a(this.authorization,{url:`/api/subscription/create`,method:`post`,data:o});return{subscriptionId:s.subscription_id,approveAmount:s.approved_amount,spenderAddress:s.contract_address,expireAt:s.expire_at}}async createX402Payment(){throw Error(`Unsupported payment mode`)}async checkOnetimePaymentStatus(e){let t={payment_id:e},n=await a(this.authorization,{url:`/api/payment/query`,params:t});return{orderId:n.order_no,paymentId:n.payment_id,chain:n.chain,token:n.token,baseAmount:n.base_amount,payAmount:n.pay_amount,receiveAddress:n.receive_address,expireAt:n.expire_at,status:n.status}}async checkSubcriptionPaymentStatus(e){let t={subscription_id:e},n=await a(this.authorization,{url:`/api/subscription/query`,params:t});return{orderId:n.order_no,subscriptionId:n.subscription_id,chain:n.chain,token:n.token,approvedAddress:n.approved_contract_address,txHash:n.approved_tx_hash,approveAmount:n.approved_amount,amountOfUsd:n.amount_usd,expireAt:n.expire_at,status:n.subscription_status}}async getSubcriptionPayments(e){let t={subscription_id:e},n=await a(this.authorization,{url:`/api/subscription/payments`,params:t});return{total:n.total,payments:(n.payments??[]).map(e=>({orderId:e.order_no,subscriptionId:e.subscription_id,chain:e.chain,token:e.token,txHash:e.tx_hash,payAmount:e.pay_amount,receiveAddress:e.receive_address,status:e.status,errorMessage:e.error_message}))}}async checkX402PaymentStatus(){throw Error(`Unsupported payment mode`)}},s=class{api;constructor(e){this.api=new o(e)}async getSupportedChains(){let n=(await this.api.getSupportedChains()).reduce((n,r)=>{let i=n[r.chain]??{chain:r.chain,chainId:r.chainId,tokens:[],icon:e[r.chain]};return i.tokens.push({symbol:r.tokenSymbol,decimals:r.tokenDecimals,address:r.tokenAddress,icon:t[r.tokenSymbol],price:r.tokenPrice}),n[r.chain]=i,n},{});return Object.values(n)}async createPayment(e,t){switch(e){case`one-time`:return this.createOnetimePayment(t);case`subscription`:return this.createSubscriptionPayment(t)}}async checkPaymentStatus(e,t){switch(e){case`one-time`:return this.checkOnetimePaymentStatus(t);case`subscription`:return this.checkSubscriptionPaymentStatus(t)}}async createOnetimePayment(e){let t=await this.api.createOnetimePayment(e.paymentChain,e.paymentToken,e.orderId,e.amount);return{...e,...t}}async createSubscriptionPayment(e){let t=await this.api.createSubscriptionPayment(e.paymentChain,e.paymentToken,e.orderId,e.amountOfUsd,e.intervalDays);return{...e,...t}}async checkOnetimePaymentStatus(e){return{...await this.api.checkOnetimePaymentStatus(e.paymentId)}}async checkSubscriptionPaymentStatus(e){return{...await this.api.checkSubcriptionPaymentStatus(e.subscriptionId)}}async getSubcriptionPayments(e){return{...await this.api.getSubcriptionPayments(e.subscriptionId)}}},c=s;Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return c}});
1
+ const e={Ethereum:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png`,BSC:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/binance/info/logo.png`,"bsc-testnet":`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/binance/info/logo.png`,Tron:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png`,Polygon:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/polygon/info/logo.png`,Solana:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/solana/info/logo.png`},t={USDT:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png`,USDC:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png`,ETH:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png`,BNB:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/binance/info/logo.png`,tBNB:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/binance/info/logo.png`,TRX:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png`,SOL:`https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/solana/info/logo.png`};var n=`http://192.168.0.162:8000`,r=async(e,t,r)=>{let i=Object.assign({timeout:15e3},r),a=new AbortController,o=setTimeout(()=>a.abort(),i.timeout);try{let r=await fetch(new URL(e,n),{signal:a.signal,...t});clearTimeout(o);let i=r.headers.get(`Content-Type`)??``;if(i.includes(`json`))return await r.json();try{return await r.json()}catch{throw Error(`URL: ${e}, Unsupport Content Type: ${i}`)}}catch(t){throw clearTimeout(o),t instanceof DOMException&&t.name===`AbortError`?Error(`URL: ${e}, Request timeout after ${i.timeout}ms`):t}},i=0,a=async(e,t)=>{let n=new URLSearchParams(t.params),a=await r(`${t.url}${n.size?`?${n.toString()}`:``}`,{method:t.method??`get`,headers:{Authorization:e,...t.headers},body:t.data?JSON.stringify(t.data):void 0});if(a.code!==i)throw Error(`Request ${t.url} Failed. ${a.message}`);return a.data},o=class{authorization;constructor(e,t){this.authorization=e?`ApiKey ${e}`:`OTT ${t}`}async getSupportedChains(){return(await a(this.authorization,{url:`/api/payment/token`})).map(e=>({chain:e.chain,chainId:e.chain_id,tokenSymbol:e.token_symbol,tokenDecimals:e.token_decimals,tokenAddress:e.token_address,tokenPrice:e.token_price}))}async createOnetimePayment(e,t,n,r){let i={chain:e,token:t,order_no:n,amount:r},o=await a(this.authorization,{url:`/api/payment/create`,method:`post`,data:i});return{paymentId:o.payment_id,paymentAmount:o.pay_amount,receiveAddress:o.receive_address,expireAt:o.expire_at}}async createSubscriptionPayment(e,t,n,r,i){let o={chain:e,token:t,order_no:n,amount_usd:r,renewal_days:i},s=await a(this.authorization,{url:`/api/subscription/create`,method:`post`,data:o});return{subscriptionId:s.subscription_id,approveAmount:s.approved_amount,spenderAddress:s.contract_address,expireAt:s.expire_at}}async createX402Payment(){throw Error(`Unsupported payment mode`)}async checkOnetimePaymentStatus(e){let t={payment_id:e},n=await a(this.authorization,{url:`/api/payment/query`,params:t});return{orderId:n.order_no,paymentId:n.payment_id,chain:n.chain,token:n.token,baseAmount:n.base_amount,payAmount:n.pay_amount,receiveAddress:n.receive_address,expireAt:n.expire_at,status:n.status}}async checkSubcriptionPaymentStatus(e){let t={subscription_id:e},n=await a(this.authorization,{url:`/api/subscription/query`,params:t});return{orderId:n.order_no,subscriptionId:n.subscription_id,chain:n.chain,token:n.token,approvedAddress:n.approved_contract_address,txHash:n.approved_tx_hash,approveAmount:n.approved_amount,amountOfUsd:n.amount_usd,expireAt:n.expire_at,status:n.subscription_status}}async getSubcriptionPayments(e){let t={subscription_id:e},n=await a(this.authorization,{url:`/api/subscription/payments`,params:t});return{total:n.total,payments:(n.payments??[]).map(e=>({orderId:e.order_no,subscriptionId:e.subscription_id,chain:e.chain,token:e.token,txHash:e.tx_hash,payAmount:e.pay_amount,receiveAddress:e.receive_address,status:e.status,errorMessage:e.error_message}))}}async checkX402PaymentStatus(){throw Error(`Unsupported payment mode`)}},s=class{api;constructor(e,t){this.api=new o(e,t)}async getSupportedChains(){let n=(await this.api.getSupportedChains()).reduce((n,r)=>{let i=n[r.chain]??{chain:r.chain,chainId:r.chainId,tokens:[],icon:e[r.chain]};return i.tokens.push({symbol:r.tokenSymbol,decimals:r.tokenDecimals,address:r.tokenAddress,icon:t[r.tokenSymbol],price:r.tokenPrice}),n[r.chain]=i,n},{});return Object.values(n)}async createPayment(e,t){switch(e){case`one-time`:return this.createOnetimePayment(t);case`subscription`:return this.createSubscriptionPayment(t)}}async checkPaymentStatus(e,t){switch(e){case`one-time`:return this.checkOnetimePaymentStatus(t);case`subscription`:return this.checkSubscriptionPaymentStatus(t)}}async createOnetimePayment(e){let t=await this.api.createOnetimePayment(e.paymentChain,e.paymentToken,e.orderId,e.amount);return{...e,...t}}async createSubscriptionPayment(e){let t=await this.api.createSubscriptionPayment(e.paymentChain,e.paymentToken,e.orderId,e.amountOfUsd,e.intervalDays);return{...e,...t}}async checkOnetimePaymentStatus(e){return{...await this.api.checkOnetimePaymentStatus(e.paymentId)}}async checkSubscriptionPaymentStatus(e){return{...await this.api.checkSubcriptionPaymentStatus(e.subscriptionId)}}async getSubcriptionPayments(e){return{...await this.api.getSubcriptionPayments(e.subscriptionId)}}},c=s;Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return c}});
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- const e=require(`./cppay-D2T3pCwj.cjs`);exports.CHAIN_ICONS=e.n,exports.Cppay=e.t,exports.TOKEN_ICONS=e.r;
1
+ const e=require(`./cppay-DXZVBIDi.cjs`);exports.CHAIN_ICONS=e.n,exports.Cppay=e.t,exports.TOKEN_ICONS=e.r;
package/dist/index.d.ts CHANGED
@@ -10,8 +10,9 @@ export declare interface ChainInfo {
10
10
  }
11
11
 
12
12
  export declare class Cppay {
13
- private api;
14
- constructor(apikey: string);
13
+ api: CppayApi;
14
+ constructor(apikey: string, ott?: undefined);
15
+ constructor(apikey: undefined, ott: string);
15
16
  getSupportedChains(): Promise<ChainInfo[]>;
16
17
  createPayment(plain: "one-time", params: Parameters<Cppay["createOnetimePayment"]>[0]): Promise<OnetimePaymentInfo>;
17
18
  createPayment(plain: "subscription", params: Parameters<Cppay["createSubscriptionPayment"]>[0]): Promise<SubscriptionPaymentInfo>;
@@ -44,6 +45,71 @@ export declare class Cppay {
44
45
  }>;
45
46
  }
46
47
 
48
+ declare class CppayApi {
49
+ private authorization;
50
+ constructor(apikey: string, ott?: undefined);
51
+ constructor(apikey: undefined, ott: string);
52
+ getSupportedChains(): Promise<{
53
+ chain: string;
54
+ chainId: number;
55
+ tokenSymbol: string;
56
+ tokenDecimals: number;
57
+ tokenAddress: `0x${string}`;
58
+ tokenPrice: Numberic;
59
+ }[]>;
60
+ createOnetimePayment(paymentChain: string, paymentToken: string, orderId: string, amount: Numberic): Promise<{
61
+ paymentId: string;
62
+ paymentAmount: Numberic;
63
+ receiveAddress: `0x${string}`;
64
+ expireAt: number;
65
+ }>;
66
+ createSubscriptionPayment(paymentChain: string, paymentToken: string, orderId: string, amountOfUsd: Numberic, intervalDays: number): Promise<{
67
+ subscriptionId: string;
68
+ approveAmount: Numberic;
69
+ spenderAddress: `0x${string}`;
70
+ expireAt: number;
71
+ }>;
72
+ createX402Payment(): Promise<void>;
73
+ checkOnetimePaymentStatus(paymentId: string): Promise<{
74
+ orderId: string;
75
+ paymentId: string;
76
+ chain: string;
77
+ token: string;
78
+ baseAmount: Numberic;
79
+ payAmount: Numberic;
80
+ receiveAddress: `0x${string}`;
81
+ expireAt: number;
82
+ status: PaymentStatus;
83
+ }>;
84
+ checkSubcriptionPaymentStatus(subscriptionId: string): Promise<{
85
+ orderId: string;
86
+ subscriptionId: string;
87
+ chain: string;
88
+ token: string;
89
+ approvedAddress: string;
90
+ txHash: string;
91
+ approveAmount: string;
92
+ amountOfUsd: string;
93
+ expireAt: number;
94
+ status: SubscriptionPaymentStatus;
95
+ }>;
96
+ getSubcriptionPayments(subscriptionId: string): Promise<{
97
+ total: number;
98
+ payments: {
99
+ orderId: string;
100
+ subscriptionId: string;
101
+ chain: string;
102
+ token: string;
103
+ txHash: string;
104
+ payAmount: Numberic;
105
+ receiveAddress: `0x${string}`;
106
+ status: PaymentStatus;
107
+ errorMessage: string;
108
+ }[];
109
+ }>;
110
+ checkX402PaymentStatus(): Promise<void>;
111
+ }
112
+
47
113
  export declare interface CppayResponse<R> {
48
114
  code: number;
49
115
  message: string;
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import { n as CHAIN_ICONS, r as TOKEN_ICONS, t as cppay_default } from "./cppay-CCxKnEWz.js";
1
+ import { n as CHAIN_ICONS, r as TOKEN_ICONS, t as cppay_default } from "./cppay-BPtRBPjB.js";
2
2
  export { CHAIN_ICONS, cppay_default as Cppay, TOKEN_ICONS };
package/dist/react.cjs CHANGED
@@ -1 +1 @@
1
- const e=require(`./inject-style-Boo8CMsU.cjs`),t=require(`./cppay-D2T3pCwj.cjs`);let n=require(`qrcode`);n=e.r(n);let r=require(`rxjs`),i=require(`rxjs/operators`),a=require(`viem`),o=require(`viem/chains`),s=require(`@reown/appkit`),c=require(`@reown/appkit-adapter-ethers`),l=require(`react`);l=e.r(l);let u=require(`react/jsx-runtime`);var d=({open:e,onClose:d,apikey:f,plain:p,orderId:m,amount:h,intervalDays:ee,onExpired:te,onSuccess:g,onFailed:ne,onError:_})=>{let v=(0,l.useMemo)(()=>new t.t(f),[f]),[y,b]=(0,l.useState)(`select`),[x,S]=(0,l.useState)(!1),[C,w]=(0,l.useState)(!1),[T,E]=(0,l.useState)(),[D,O]=(0,l.useState)(!1),[k,re]=(0,l.useState)([]),[A,j]=(0,l.useState)(),[M,N]=(0,l.useState)(),[P,ie]=(0,l.useState)(),[F,I]=(0,l.useState)(),[L,R]=(0,l.useState)(!1),[z,B]=(0,l.useState)(),V=(0,l.useRef)(null),H=(0,l.useRef)(null);(0,l.useEffect)(()=>{typeof window<`u`&&!V.current&&(V.current=(0,s.createAppKit)({debug:!1,enableNetworkSwitch:!1,adapters:[new c.EthersAdapter],projectId:`8d2e1854d3f1782e45aa15fbd8938894`,allowUnsupportedChain:!0,networks:[o.mainnet,o.bsc,o.polygon,o.arbitrum,o.optimism,o.base],metadata:{name:`Cppay`,description:`Cppay Payment Gateway`,url:window.location.origin,icons:[`https://cppay.com/icon.png`]},features:{analytics:!1}}),I(V.current.getAddress()),B(V.current.getProvider(`eip155`)),V.current.subscribeAccount(e=>{e.isConnected?I(e.address):(I(void 0),B(void 0))}),V.current.subscribeProviders(e=>{let t=e?.eip155;B(t)}))},[]);let U=async()=>{try{R(!0),E(void 0),V.current&&await V.current.open()}catch(e){console.error(`钱包连接失败:`,e),E(e instanceof Error?e.message:`钱包连接失败`),_?.(e)}finally{R(!1)}},W=(0,l.useMemo)(()=>k.find(e=>e.chain===A),[k,A]),G=(0,l.useMemo)(()=>W?.tokens||[],[W]),K=(0,l.useMemo)(()=>G.find(e=>e.symbol===M),[G,M]),q=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,l.useMemo)(()=>{if(!M||!K)return`0`;let e=parseFloat(K.price);if(isNaN(e)||e===0)return`0`;let t=q(M);return J((parseFloat(h)/e).toFixed(t),t)},[h,M,K]),ae=async()=>{try{S(!0),E(void 0);let e=await v.getSupportedChains();re(e),e.length>0&&j(e[0].chain)}catch(e){E(e instanceof Error?e.message:`加载支付网络失败`),_?.(e)}finally{S(!1)}},X=async e=>{if(z)try{await z.request({method:`wallet_switchEthereumChain`,params:[{chainId:`0x${e.toString(16)}`}]})}catch(e){throw e.code===4902?Error(`请在钱包中添加该网络`):e}},oe=async()=>{if(!(!F||!z||!Z.current||!K||!W))try{S(!0);let e=Z.current;await X(W.chainId);let t=(0,a.createWalletClient)({account:F,transport:(0,a.custom)(z)});if(K.address){let n=await t.writeContract({address:K.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,K.decimals)],chain:null});console.log(`转账交易哈希:`,n)}else{let n=await t.sendTransaction({to:e.receiveAddress,value:(0,a.parseUnits)(e.paymentAmount,K.decimals),chain:null});console.log(`转账交易哈希:`,n)}S(!1),w(!0),Q(e.paymentId)}catch(e){console.error(`钱包支付失败:`,e),E(e instanceof Error?e.message:`钱包支付失败`),_?.(e),S(!1)}},se=async()=>{if(!(!F||!z||!Z.current||!K||!W))try{S(!0);let e=Z.current;await X(W.chainId);let t=(0,a.createWalletClient)({account:F,transport:(0,a.custom)(z)});if(!K.address)throw Error(`订阅支付不支持原生代币`);let n=await t.writeContract({address:K.address,abi:[{name:`approve`,type:`function`,stateMutability:`nonpayable`,inputs:[{name:`spender`,type:`address`},{name:`amount`,type:`uint256`}],outputs:[{type:`bool`}]}],functionName:`approve`,args:[e.spenderAddress,(0,a.parseUnits)(e.approveAmount,K.decimals)],chain:null});console.log(`授权交易哈希:`,n),S(!1),w(!0),Q(e.subscriptionId)}catch(e){console.error(`钱包授权失败:`,e),E(e instanceof Error?e.message:`钱包授权失败`),_?.(e),S(!1)}},ce=async()=>{if(!F){let e=`请先连接钱包`;E(e),_?.(Error(e));return}p===`one-time`?await oe():p===`subscription`&&await se()},Z=(0,l.useRef)(null),le=async()=>{if(!(!A||!M))try{S(!0),E(void 0);let e=``;p===`one-time`?(Z.current=await v.createOnetimePayment({paymentChain:A,paymentToken:M,orderId:m,amount:Y}),e=`${A.toLowerCase()}:${Z.current.receiveAddress}?amount=${Z.current.paymentAmount}`):p===`subscription`&&(Z.current=await v.createSubscriptionPayment({paymentChain:A,paymentToken:M,orderId:m,amountOfUsd:Y,intervalDays:ee||30}),e=`${A.toLowerCase()}:${Z.current.spenderAddress}?amount=${Z.current.approveAmount}`),b(`payment`),ie(await n.toDataURL(e,{width:200,margin:2,errorCorrectionLevel:`H`}))}catch(e){E(e instanceof Error?e.message:`创建支付失败`),_?.(e)}finally{S(!1)}},ue=async()=>{if(Z.current)try{w(!0),E(void 0),p===`one-time`?Q(Z.current.paymentId):p===`subscription`&&Q(Z.current.subscriptionId)}catch(e){console.error(`支付状态检查错误:`,e),E(e instanceof Error?e.message:`检查支付状态失败`),_?.(e),w(!1)}},Q=e=>{let t=()=>(0,r.defer)(()=>p===`subscription`?v.checkSubscriptionPaymentStatus({subscriptionId:e}):v.checkOnetimePaymentStatus({paymentId:e})).pipe((0,i.timeout)(15e3),(0,i.retry)({count:3,delay:2e3}));H.current?.unsubscribe(),H.current=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`&&(w(!1),te?.(e)),e.status===`paid`&&(w(!1),b(`success`),g?.(e)),e.status===`failed`&&(w(!1),ne?.(e)),e.status===`approved`&&(w(!1),b(`success`),g?.(e))})).subscribe({error:e=>{console.error(`支付状态检查错误:`,e),E(e instanceof Error?e.message:`检查支付状态失败`),w(!1),_?.(e)}})},de=async()=>{if(!Z.current)return;let e=p===`subscription`?Z.current.spenderAddress:Z.current.receiveAddress;e&&await navigator.clipboard.writeText(e)},$=()=>{x||C||(d(),setTimeout(()=>{b(`select`),E(void 0),Z.current=null},300))};return(0,l.useEffect)(()=>{e&&k.length===0&&ae()},[e]),(0,l.useEffect)(()=>{G.length>0&&N(G[0].symbol)},[G]),(0,l.useEffect)(()=>()=>{H.current?.unsubscribe()},[]),e?(0,u.jsx)(`div`,{className:`_cppay-overlay`,onClick:e=>e.target===e.currentTarget&&!x&&!C&&$(),children:(0,u.jsxs)(`div`,{className:`_cppay-dialog`,children:[(0,u.jsxs)(`div`,{className:`_cppay-header`,children:[(0,u.jsx)(`h2`,{className:`_cppay-title`,children:y===`select`?`选择支付方式`:`完成支付`}),(0,u.jsx)(`button`,{onClick:$,disabled:x||C,className:`_cppay-close-btn`,children:(0,u.jsx)(`svg`,{fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`,children:(0,u.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:2,d:`M6 18L18 6M6 6l12 12`})})})]}),(0,u.jsx)(`div`,{className:`_cppay-content`,children:y===`success`?(0,u.jsxs)(`div`,{style:{textAlign:`center`,padding:`2rem 0`},children:[(0,u.jsx)(`div`,{style:{fontSize:`64px`,marginBottom:`1rem`},children:`✅`}),(0,u.jsx)(`h3`,{style:{fontSize:`1.5rem`,fontWeight:600,color:`#10b981`,margin:`0 0 0.5rem 0`},children:p===`subscription`?`授权成功!`:`支付成功!`}),(0,u.jsx)(`p`,{style:{color:`#6b7280`,margin:0},children:p===`subscription`?`订阅已激活`:`交易已完成`})]}):y===`select`?(0,u.jsxs)(`div`,{children:[(0,u.jsxs)(`div`,{className:`_cppay-section`,children:[(0,u.jsx)(`label`,{className:`_cppay-label`,children:`支付网络`}),(0,u.jsx)(`div`,{className:`_cppay-grid`,children:k.map(e=>(0,u.jsxs)(`button`,{onClick:()=>j(e.chain),className:`_cppay-select-btn ${A===e.chain?`_cppay-selected`:``}`,children:[e.icon&&(0,u.jsx)(`img`,{src:e.icon,alt:e.chain}),(0,u.jsx)(`span`,{children:e.chain})]},e.chain))})]}),(0,u.jsxs)(`div`,{className:`_cppay-section`,children:[(0,u.jsx)(`label`,{className:`_cppay-label`,children:`支付代币`}),(0,u.jsx)(`div`,{className:`_cppay-grid`,children:G.map(e=>(0,u.jsxs)(`button`,{onClick:()=>N(e.symbol),className:`_cppay-select-btn ${M===e.symbol?`_cppay-selected`:``}`,children:[e.icon&&(0,u.jsx)(`img`,{src:e.icon,alt:e.symbol}),(0,u.jsx)(`span`,{children:e.symbol})]},e.symbol))})]}),(0,u.jsx)(`div`,{className:`_cppay-section`,children:(0,u.jsx)(`div`,{className:`_cppay-price-box`,children:(0,u.jsxs)(`div`,{className:`_cppay-price-row`,children:[(0,u.jsx)(`span`,{className:`_cppay-price-label`,children:`支付金额`}),(0,u.jsxs)(`div`,{className:`_cppay-price-amount`,children:[(0,u.jsxs)(`div`,{className:`_cppay-price-main`,children:[Y??`-`,` `,M??``]}),(0,u.jsxs)(`div`,{className:`_cppay-price-sub`,children:[`≈ $`,h]})]})]})})}),(0,u.jsxs)(`div`,{className:`_cppay-section`,children:[T&&(0,u.jsxs)(`div`,{className:`_cppay-error-tooltip-wrapper`,onMouseEnter:()=>O(!0),onMouseLeave:()=>O(!1),children:[(0,u.jsxs)(`div`,{className:`_cppay-error-tooltip`,children:[(0,u.jsx)(`svg`,{viewBox:`0 0 20 20`,fill:`currentColor`,children:(0,u.jsx)(`path`,{fillRule:`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z`,clipRule:`evenodd`})}),(0,u.jsx)(`span`,{children:T})]}),D&&(0,u.jsx)(`div`,{className:`_cppay-error-tooltip-full`,children:T})]}),(0,u.jsx)(`button`,{onClick:le,disabled:!A||!M||x,className:`_cppay-btn _cppay-btn-primary`,children:x?`处理中...`:`继续支付`})]})]}):(0,u.jsxs)(`div`,{children:[(0,u.jsx)(`div`,{className:`_cppay-qr-container`,children:(0,u.jsx)(`div`,{className:`_cppay-qr-code`,children:P&&(0,u.jsx)(`img`,{src:P,alt:`Payment QR Code`,style:{width:`160px`,height:`160px`,display:`block`}})})}),(0,u.jsxs)(`div`,{className:`_cppay-section`,children:[M&&(0,u.jsxs)(`div`,{className:`_cppay-info-box`,children:[(0,u.jsx)(`div`,{className:`_cppay-info-label`,children:p===`subscription`?`授权金额`:`支付金额`}),(0,u.jsx)(`div`,{className:`_cppay-info-value`,children:p===`subscription`?`${J(Z.current.approveAmount,q(M))} ${M}`:`${J(Z.current.paymentAmount,q(M))} ${M}`})]}),(0,u.jsxs)(`div`,{className:`_cppay-info-box`,children:[(0,u.jsx)(`div`,{className:`_cppay-info-label`,children:p===`subscription`?`授权合约地址`:`支付地址`}),(0,u.jsxs)(`div`,{className:`_cppay-address-row`,children:[(0,u.jsx)(`code`,{children:p===`subscription`?Z.current.spenderAddress:Z.current.receiveAddress}),(0,u.jsx)(`button`,{onClick:de,className:`_cppay-copy-btn`,title:`复制地址`,children:(0,u.jsx)(`svg`,{fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`,children:(0,u.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth: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`})})})]})]}),p===`subscription`&&(0,u.jsxs)(`div`,{className:`_cppay-info-box`,style:{background:`#fff3cd`,borderColor:`#ffc107`},children:[(0,u.jsx)(`div`,{className:`_cppay-info-label`,style:{color:`#856404`},children:`📌 订阅说明`}),(0,u.jsx)(`div`,{className:`_cppay-info-value`,style:{fontSize:`12px`,color:`#856404`},children:`订阅支付需要授权代币给合约地址,系统将按周期自动扣款。授权后无需每次手动支付。`})]})]}),T&&(0,u.jsxs)(`div`,{className:`_cppay-error-tooltip-wrapper`,onMouseEnter:()=>O(!0),onMouseLeave:()=>O(!1),children:[(0,u.jsxs)(`div`,{className:`_cppay-error-tooltip`,children:[(0,u.jsx)(`svg`,{viewBox:`0 0 20 20`,fill:`currentColor`,children:(0,u.jsx)(`path`,{fillRule:`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z`,clipRule:`evenodd`})}),(0,u.jsx)(`span`,{children:T})]}),D&&(0,u.jsx)(`div`,{className:`_cppay-error-tooltip-full`,children:T})]}),!C&&(0,u.jsx)(`div`,{className:`_cppay-section`,children:F?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsxs)(`div`,{className:`_cppay-btn-container`,children:[(0,u.jsx)(`button`,{onClick:ce,disabled:x,className:`_cppay-btn _cppay-btn-primary`,children:x?p===`subscription`?`授权中...`:`支付中...`:p===`subscription`?`💳 钱包授权`:`💳 钱包支付`}),(0,u.jsx)(`button`,{onClick:U,disabled:x,className:`_cppay-btn _cppay-btn-primary`,children:`💰钱包状态`})]}),(0,u.jsxs)(`div`,{style:{textAlign:`center`,marginTop:`8px`,fontSize:`12px`,color:`#666`},children:[`已连接: `,F.slice(0,6),`...`,F.slice(-4)]})]}):(0,u.jsx)(`button`,{onClick:U,disabled:L,className:`_cppay-btn _cppay-btn-secondary`,style:{display:`flex`,alignItems:`center`,justifyContent:`center`,gap:`0.5rem`,padding:`0.75rem 1rem`,width:`100%`},children:(0,u.jsx)(`span`,{children:L?`连接中...`:`💳 连接钱包`})})}),(0,u.jsx)(`div`,{className:`_cppay-section`,children:(0,u.jsx)(`button`,{onClick:ue,disabled:C,className:`_cppay-btn _cppay-btn-primary`,children:C?`检查中...`:`我已完成支付`})}),(0,u.jsx)(`div`,{className:`_cppay-section`,children:(0,u.jsx)(`button`,{onClick:()=>b(`select`),disabled:x||C,className:`_cppay-btn _cppay-btn-text`,children:`更改支付方式`})})]})})]})}):null},f=l.default.memo(d),p=(0,l.createContext)(null);const m=({apikey:e,children:t})=>{let[n,r]=(0,l.useState)(!1),[i,a]=(0,l.useState)(null),o=(0,l.useCallback)(e=>{a(e),r(!0)},[]),s=(0,l.useCallback)(()=>{r(!1)},[]),c=(0,l.useCallback)(e=>{i?.onSuccess?.(e),r(!1)},[i]),d=(0,l.useCallback)(e=>{i?.onError?.(e)},[i]);return(0,u.jsxs)(p.Provider,{value:{showPayment:o},children:[t,i&&(0,u.jsx)(f,{open:n,onClose:s,apikey:e,plain:i.plain,orderId:i.orderId,amount:i.amount,intervalDays:i.intervalDays,onSuccess:c,onError:d})]})},h=()=>{let e=(0,l.useContext)(p);if(!e)throw Error(`useCppayPayment must be used within CppayProvider`);return e};e.t(e.n),exports.CppayProvider=m,exports.PaymentDialog=f,exports.useCppayPayment=h;
1
+ const e=require(`./inject-style-Boo8CMsU.cjs`),t=require(`./cppay-DXZVBIDi.cjs`);let n=require(`qrcode`);n=e.r(n);let r=require(`rxjs`),i=require(`rxjs/operators`),a=require(`viem`),o=require(`viem/chains`),s=require(`@reown/appkit`),c=require(`@reown/appkit-adapter-ethers`),l=require(`react`);l=e.r(l);let u=require(`react/jsx-runtime`);var d=({open:e,onClose:d,apikey:f,plain:p,orderId:m,amount:h,intervalDays:ee,onExpired:te,onSuccess:g,onFailed:ne,onError:_})=>{let v=(0,l.useMemo)(()=>new t.t(f),[f]),[y,b]=(0,l.useState)(`select`),[x,S]=(0,l.useState)(!1),[C,w]=(0,l.useState)(!1),[T,E]=(0,l.useState)(),[D,O]=(0,l.useState)(!1),[k,re]=(0,l.useState)([]),[A,j]=(0,l.useState)(),[M,N]=(0,l.useState)(),[P,ie]=(0,l.useState)(),[F,I]=(0,l.useState)(),[L,R]=(0,l.useState)(!1),[z,B]=(0,l.useState)(),V=(0,l.useRef)(null),H=(0,l.useRef)(null);(0,l.useEffect)(()=>{typeof window<`u`&&!V.current&&(V.current=(0,s.createAppKit)({debug:!1,enableNetworkSwitch:!1,adapters:[new c.EthersAdapter],projectId:`8d2e1854d3f1782e45aa15fbd8938894`,allowUnsupportedChain:!0,networks:[o.mainnet,o.bsc,o.polygon,o.arbitrum,o.optimism,o.base],metadata:{name:`Cppay`,description:`Cppay Payment Gateway`,url:window.location.origin,icons:[`https://cppay.com/icon.png`]},features:{analytics:!1}}),I(V.current.getAddress()),B(V.current.getProvider(`eip155`)),V.current.subscribeAccount(e=>{e.isConnected?I(e.address):(I(void 0),B(void 0))}),V.current.subscribeProviders(e=>{let t=e?.eip155;B(t)}))},[]);let U=async()=>{try{R(!0),E(void 0),V.current&&await V.current.open()}catch(e){console.error(`钱包连接失败:`,e),E(e instanceof Error?e.message:`钱包连接失败`),_?.(e)}finally{R(!1)}},W=(0,l.useMemo)(()=>k.find(e=>e.chain===A),[k,A]),G=(0,l.useMemo)(()=>W?.tokens||[],[W]),K=(0,l.useMemo)(()=>G.find(e=>e.symbol===M),[G,M]),q=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,l.useMemo)(()=>{if(!M||!K)return`0`;let e=parseFloat(K.price);if(isNaN(e)||e===0)return`0`;let t=q(M);return J((parseFloat(h)/e).toFixed(t),t)},[h,M,K]),ae=async()=>{try{S(!0),E(void 0);let e=await v.getSupportedChains();re(e),e.length>0&&j(e[0].chain)}catch(e){E(e instanceof Error?e.message:`加载支付网络失败`),_?.(e)}finally{S(!1)}},X=async e=>{if(z)try{await z.request({method:`wallet_switchEthereumChain`,params:[{chainId:`0x${e.toString(16)}`}]})}catch(e){throw e.code===4902?Error(`请在钱包中添加该网络`):e}},oe=async()=>{if(!(!F||!z||!Z.current||!K||!W))try{S(!0);let e=Z.current;await X(W.chainId);let t=(0,a.createWalletClient)({account:F,transport:(0,a.custom)(z)});if(K.address){let n=await t.writeContract({address:K.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,K.decimals)],chain:null});console.log(`转账交易哈希:`,n)}else{let n=await t.sendTransaction({to:e.receiveAddress,value:(0,a.parseUnits)(e.paymentAmount,K.decimals),chain:null});console.log(`转账交易哈希:`,n)}S(!1),w(!0),Q(e.paymentId)}catch(e){console.error(`钱包支付失败:`,e),E(e instanceof Error?e.message:`钱包支付失败`),_?.(e),S(!1)}},se=async()=>{if(!(!F||!z||!Z.current||!K||!W))try{S(!0);let e=Z.current;await X(W.chainId);let t=(0,a.createWalletClient)({account:F,transport:(0,a.custom)(z)});if(!K.address)throw Error(`订阅支付不支持原生代币`);let n=await t.writeContract({address:K.address,abi:[{name:`approve`,type:`function`,stateMutability:`nonpayable`,inputs:[{name:`spender`,type:`address`},{name:`amount`,type:`uint256`}],outputs:[{type:`bool`}]}],functionName:`approve`,args:[e.spenderAddress,(0,a.parseUnits)(e.approveAmount,K.decimals)],chain:null});console.log(`授权交易哈希:`,n),S(!1),w(!0),Q(e.subscriptionId)}catch(e){console.error(`钱包授权失败:`,e),E(e instanceof Error?e.message:`钱包授权失败`),_?.(e),S(!1)}},ce=async()=>{if(!F){let e=`请先连接钱包`;E(e),_?.(Error(e));return}p===`one-time`?await oe():p===`subscription`&&await se()},Z=(0,l.useRef)(null),le=async()=>{if(!(!A||!M))try{S(!0),E(void 0);let e=``;p===`one-time`?(Z.current=await v.createOnetimePayment({paymentChain:A,paymentToken:M,orderId:m,amount:Y}),e=`${A.toLowerCase()}:${Z.current.receiveAddress}?amount=${Z.current.paymentAmount}`):p===`subscription`&&(Z.current=await v.createSubscriptionPayment({paymentChain:A,paymentToken:M,orderId:m,amountOfUsd:Y,intervalDays:ee||30}),e=`${A.toLowerCase()}:${Z.current.spenderAddress}?amount=${Z.current.approveAmount}`),b(`payment`),ie(await n.toDataURL(e,{width:200,margin:2,errorCorrectionLevel:`H`}))}catch(e){E(e instanceof Error?e.message:`创建支付失败`),_?.(e)}finally{S(!1)}},ue=async()=>{if(Z.current)try{w(!0),E(void 0),p===`one-time`?Q(Z.current.paymentId):p===`subscription`&&Q(Z.current.subscriptionId)}catch(e){console.error(`支付状态检查错误:`,e),E(e instanceof Error?e.message:`检查支付状态失败`),_?.(e),w(!1)}},Q=e=>{let t=()=>(0,r.defer)(()=>p===`subscription`?v.checkSubscriptionPaymentStatus({subscriptionId:e}):v.checkOnetimePaymentStatus({paymentId:e})).pipe((0,i.timeout)(15e3),(0,i.retry)({count:3,delay:2e3}));H.current?.unsubscribe(),H.current=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`&&(w(!1),te?.(e)),e.status===`paid`&&(w(!1),b(`success`),g?.(e)),e.status===`failed`&&(w(!1),ne?.(e)),e.status===`approved`&&(w(!1),b(`success`),g?.(e))})).subscribe({error:e=>{console.error(`支付状态检查错误:`,e),E(e instanceof Error?e.message:`检查支付状态失败`),w(!1),_?.(e)}})},de=async()=>{if(!Z.current)return;let e=p===`subscription`?Z.current.spenderAddress:Z.current.receiveAddress;e&&await navigator.clipboard.writeText(e)},$=()=>{x||C||(d(),setTimeout(()=>{b(`select`),E(void 0),Z.current=null},300))};return(0,l.useEffect)(()=>{e&&k.length===0&&ae()},[e]),(0,l.useEffect)(()=>{G.length>0&&N(G[0].symbol)},[G]),(0,l.useEffect)(()=>()=>{H.current?.unsubscribe()},[]),e?(0,u.jsx)(`div`,{className:`_cppay-overlay`,onClick:e=>e.target===e.currentTarget&&!x&&!C&&$(),children:(0,u.jsxs)(`div`,{className:`_cppay-dialog`,children:[(0,u.jsxs)(`div`,{className:`_cppay-header`,children:[(0,u.jsx)(`h2`,{className:`_cppay-title`,children:y===`select`?`选择支付方式`:`完成支付`}),(0,u.jsx)(`button`,{onClick:$,disabled:x||C,className:`_cppay-close-btn`,children:(0,u.jsx)(`svg`,{fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`,children:(0,u.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:2,d:`M6 18L18 6M6 6l12 12`})})})]}),(0,u.jsx)(`div`,{className:`_cppay-content`,children:y===`success`?(0,u.jsxs)(`div`,{style:{textAlign:`center`,padding:`2rem 0`},children:[(0,u.jsx)(`div`,{style:{fontSize:`64px`,marginBottom:`1rem`},children:`✅`}),(0,u.jsx)(`h3`,{style:{fontSize:`1.5rem`,fontWeight:600,color:`#10b981`,margin:`0 0 0.5rem 0`},children:p===`subscription`?`授权成功!`:`支付成功!`}),(0,u.jsx)(`p`,{style:{color:`#6b7280`,margin:0},children:p===`subscription`?`订阅已激活`:`交易已完成`})]}):y===`select`?(0,u.jsxs)(`div`,{children:[(0,u.jsxs)(`div`,{className:`_cppay-section`,children:[(0,u.jsx)(`label`,{className:`_cppay-label`,children:`支付网络`}),(0,u.jsx)(`div`,{className:`_cppay-grid`,children:k.map(e=>(0,u.jsxs)(`button`,{onClick:()=>j(e.chain),className:`_cppay-select-btn ${A===e.chain?`_cppay-selected`:``}`,children:[e.icon&&(0,u.jsx)(`img`,{src:e.icon,alt:e.chain}),(0,u.jsx)(`span`,{children:e.chain})]},e.chain))})]}),(0,u.jsxs)(`div`,{className:`_cppay-section`,children:[(0,u.jsx)(`label`,{className:`_cppay-label`,children:`支付代币`}),(0,u.jsx)(`div`,{className:`_cppay-grid`,children:G.map(e=>(0,u.jsxs)(`button`,{onClick:()=>N(e.symbol),className:`_cppay-select-btn ${M===e.symbol?`_cppay-selected`:``}`,children:[e.icon&&(0,u.jsx)(`img`,{src:e.icon,alt:e.symbol}),(0,u.jsx)(`span`,{children:e.symbol})]},e.symbol))})]}),(0,u.jsx)(`div`,{className:`_cppay-section`,children:(0,u.jsx)(`div`,{className:`_cppay-price-box`,children:(0,u.jsxs)(`div`,{className:`_cppay-price-row`,children:[(0,u.jsx)(`span`,{className:`_cppay-price-label`,children:`支付金额`}),(0,u.jsxs)(`div`,{className:`_cppay-price-amount`,children:[(0,u.jsxs)(`div`,{className:`_cppay-price-main`,children:[Y??`-`,` `,M??``]}),(0,u.jsxs)(`div`,{className:`_cppay-price-sub`,children:[`≈ $`,h]})]})]})})}),(0,u.jsxs)(`div`,{className:`_cppay-section`,children:[T&&(0,u.jsxs)(`div`,{className:`_cppay-error-tooltip-wrapper`,onMouseEnter:()=>O(!0),onMouseLeave:()=>O(!1),children:[(0,u.jsxs)(`div`,{className:`_cppay-error-tooltip`,children:[(0,u.jsx)(`svg`,{viewBox:`0 0 20 20`,fill:`currentColor`,children:(0,u.jsx)(`path`,{fillRule:`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z`,clipRule:`evenodd`})}),(0,u.jsx)(`span`,{children:T})]}),D&&(0,u.jsx)(`div`,{className:`_cppay-error-tooltip-full`,children:T})]}),(0,u.jsx)(`button`,{onClick:le,disabled:!A||!M||x,className:`_cppay-btn _cppay-btn-primary`,children:x?`处理中...`:`继续支付`})]})]}):(0,u.jsxs)(`div`,{children:[(0,u.jsx)(`div`,{className:`_cppay-qr-container`,children:(0,u.jsx)(`div`,{className:`_cppay-qr-code`,children:P&&(0,u.jsx)(`img`,{src:P,alt:`Payment QR Code`,style:{width:`160px`,height:`160px`,display:`block`}})})}),(0,u.jsxs)(`div`,{className:`_cppay-section`,children:[M&&(0,u.jsxs)(`div`,{className:`_cppay-info-box`,children:[(0,u.jsx)(`div`,{className:`_cppay-info-label`,children:p===`subscription`?`授权金额`:`支付金额`}),(0,u.jsx)(`div`,{className:`_cppay-info-value`,children:p===`subscription`?`${J(Z.current.approveAmount,q(M))} ${M}`:`${J(Z.current.paymentAmount,q(M))} ${M}`})]}),(0,u.jsxs)(`div`,{className:`_cppay-info-box`,children:[(0,u.jsx)(`div`,{className:`_cppay-info-label`,children:p===`subscription`?`授权合约地址`:`支付地址`}),(0,u.jsxs)(`div`,{className:`_cppay-address-row`,children:[(0,u.jsx)(`code`,{children:p===`subscription`?Z.current.spenderAddress:Z.current.receiveAddress}),(0,u.jsx)(`button`,{onClick:de,className:`_cppay-copy-btn`,title:`复制地址`,children:(0,u.jsx)(`svg`,{fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`,children:(0,u.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth: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`})})})]})]}),p===`subscription`&&(0,u.jsxs)(`div`,{className:`_cppay-info-box`,style:{background:`#fff3cd`,borderColor:`#ffc107`},children:[(0,u.jsx)(`div`,{className:`_cppay-info-label`,style:{color:`#856404`},children:`📌 订阅说明`}),(0,u.jsx)(`div`,{className:`_cppay-info-value`,style:{fontSize:`12px`,color:`#856404`},children:`订阅支付需要授权代币给合约地址,系统将按周期自动扣款。授权后无需每次手动支付。`})]})]}),T&&(0,u.jsxs)(`div`,{className:`_cppay-error-tooltip-wrapper`,onMouseEnter:()=>O(!0),onMouseLeave:()=>O(!1),children:[(0,u.jsxs)(`div`,{className:`_cppay-error-tooltip`,children:[(0,u.jsx)(`svg`,{viewBox:`0 0 20 20`,fill:`currentColor`,children:(0,u.jsx)(`path`,{fillRule:`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z`,clipRule:`evenodd`})}),(0,u.jsx)(`span`,{children:T})]}),D&&(0,u.jsx)(`div`,{className:`_cppay-error-tooltip-full`,children:T})]}),!C&&(0,u.jsx)(`div`,{className:`_cppay-section`,children:F?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsxs)(`div`,{className:`_cppay-btn-container`,children:[(0,u.jsx)(`button`,{onClick:ce,disabled:x,className:`_cppay-btn _cppay-btn-primary`,children:x?p===`subscription`?`授权中...`:`支付中...`:p===`subscription`?`💳 钱包授权`:`💳 钱包支付`}),(0,u.jsx)(`button`,{onClick:U,disabled:x,className:`_cppay-btn _cppay-btn-primary`,children:`💰钱包状态`})]}),(0,u.jsxs)(`div`,{style:{textAlign:`center`,marginTop:`8px`,fontSize:`12px`,color:`#666`},children:[`已连接: `,F.slice(0,6),`...`,F.slice(-4)]})]}):(0,u.jsx)(`button`,{onClick:U,disabled:L,className:`_cppay-btn _cppay-btn-secondary`,style:{display:`flex`,alignItems:`center`,justifyContent:`center`,gap:`0.5rem`,padding:`0.75rem 1rem`,width:`100%`},children:(0,u.jsx)(`span`,{children:L?`连接中...`:`💳 连接钱包`})})}),(0,u.jsx)(`div`,{className:`_cppay-section`,children:(0,u.jsx)(`button`,{onClick:ue,disabled:C,className:`_cppay-btn _cppay-btn-primary`,children:C?`检查中...`:`我已完成支付`})}),(0,u.jsx)(`div`,{className:`_cppay-section`,children:(0,u.jsx)(`button`,{onClick:()=>b(`select`),disabled:x||C,className:`_cppay-btn _cppay-btn-text`,children:`更改支付方式`})})]})})]})}):null},f=l.default.memo(d),p=(0,l.createContext)(null);const m=({apikey:e,children:t})=>{let[n,r]=(0,l.useState)(!1),[i,a]=(0,l.useState)(null),o=(0,l.useCallback)(e=>{a(e),r(!0)},[]),s=(0,l.useCallback)(()=>{r(!1)},[]),c=(0,l.useCallback)(e=>{i?.onSuccess?.(e),r(!1)},[i]),d=(0,l.useCallback)(e=>{i?.onError?.(e)},[i]);return(0,u.jsxs)(p.Provider,{value:{showPayment:o},children:[t,i&&(0,u.jsx)(f,{open:n,onClose:s,apikey:e,plain:i.plain,orderId:i.orderId,amount:i.amount,intervalDays:i.intervalDays,onSuccess:c,onError:d})]})},h=()=>{let e=(0,l.useContext)(p);if(!e)throw Error(`useCppayPayment must be used within CppayProvider`);return e};e.t(e.n),exports.CppayProvider=m,exports.PaymentDialog=f,exports.useCppayPayment=h;
package/dist/react.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as cppay_default } from "./cppay-CCxKnEWz.js";
1
+ import { t as cppay_default } from "./cppay-BPtRBPjB.js";
2
2
  import { n as payment_dialog_default, t as injectStyle } from "./inject-style-CWza6SKp.js";
3
3
  import * as QRCode from "qrcode";
4
4
  import { EMPTY, defer, timer } from "rxjs";
package/dist/vue.cjs CHANGED
@@ -1 +1 @@
1
- const e=require(`./inject-style-Boo8CMsU.cjs`),t=require(`./cppay-D2T3pCwj.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`},ae=[`disabled`],c={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={class:`_cppay-error-tooltip`},Ee={key:0,class:`_cppay-error-tooltip-full`},De=[`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={class:`_cppay-error-tooltip`},S={key:0,class:`_cppay-error-tooltip-full`},C={key:1,class:`_cppay-section`},w=[`disabled`],T={key:1},E={class:`_cppay-btn-container`},Oe=[`disabled`],ke=[`disabled`],Ae={style:{"text-align":`center`,"margin-top":`8px`,"font-size":`12px`,color:`#666`}},je={class:`_cppay-section`},Me=[`disabled`],Ne={class:`_cppay-section`},Pe=[`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(e,{emit:D}){let O=e,k=D,A=new t.t(O.apikey),j=(0,n.ref)(`select`),M=(0,n.ref)(!1),N=(0,n.ref)(!1),P=(0,n.ref)(),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)),Fe=e=>[`USDT`,`USDC`,`BUSD`,`DAI`,`TUSD`,`USDD`,`FDUSD`].includes(e.toUpperCase())?2:6,Ie=(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=Fe(R.value);return Ie((parseFloat(O.amount)/e).toFixed(t),t)}),Le=()=>{z.value&&(P.value=void 0,N.value=!0,O.plain===`one-time`?$(z.value.paymentId):O.plain===`subscription`&&$(z.value.subscriptionId))},X=()=>{M.value||N.value||(k(`update:modelValue`,!1),setTimeout(()=>{j.value=`select`,P.value=void 0,z.value=null},300))},Re=async()=>{try{M.value=!0,P.value=void 0,I.value=await A.getSupportedChains(),I.value.length>0&&(L.value=I.value[0].chain)}catch(e){P.value=e instanceof Error?e.message:`加载支付网络失败`,k(`error`,e)}finally{M.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,P.value=void 0,G&&await G.open()}catch(e){console.error(`钱包连接失败:`,e),P.value=e instanceof Error?e.message:`钱包连接失败`,k(`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}},ze=async()=>{if(!(!V.value||!U.value||!z.value||!J.value||!K.value))try{M.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)}M.value=!1,N.value=!0,$(e.paymentId)}catch(e){console.error(`钱包支付失败:`,e),P.value=e instanceof Error?e.message:`钱包支付失败`,k(`error`,e),M.value=!1}},Be=async()=>{if(!(!V.value||!U.value||!z.value||!J.value||!K.value))try{M.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),M.value=!1,N.value=!0,$(e.paymentId)}catch(e){console.error(`钱包授权失败:`,e),P.value=e instanceof Error?e.message:`钱包授权失败`,k(`error`,e),M.value=!1}},Ve=async()=>{if(!V.value){await Z();return}O.plain===`one-time`?await ze():O.plain===`subscription`&&await Be()},He=async()=>{if(!(!L.value||!R.value))try{M.value=!0,P.value=void 0;let e;O.plain===`one-time`?e=await A.createPayment(`one-time`,{paymentChain:L.value,paymentToken:R.value,orderId:O.orderId,amount:Y.value}):O.plain===`subscription`&&(e=await A.createPayment(`subscription`,{paymentChain:L.value,paymentToken:R.value,orderId:O.orderId,amountOfUsd:Y.value,intervalDays:O.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`}),j.value=`payment`}catch(e){P.value=e instanceof Error?e.message:`创建支付失败`,k(`error`,e)}finally{M.value=!1}},$=e=>{let t=()=>(0,i.defer)(()=>O.plain===`subscription`?A.checkSubscriptionPaymentStatus({subscriptionId:e}):A.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`&&(N.value=!1),e.status===`paid`&&(N.value=!1,j.value=`success`,k(`success`,e)),e.status===`failed`&&(N.value=!1),e.status===`approved`&&(N.value=!1,j.value=`success`,k(`success`,e))})).subscribe({error:e=>{console.error(`支付状态检查错误:`,e),P.value=e instanceof Error?e.message:`检查支付状态失败`,N.value=!1,k(`error`,e)}})},Ue=async()=>{z.value?.receiveAddress&&await navigator.clipboard.writeText(z.value.receiveAddress)};return(0,n.watch)(()=>O.modelValue,e=>{e&&I.value.length===0&&Re()}),(0,n.watch)(L,()=>{q.value.length>0&&(R.value=q.value[0].symbol)}),(0,n.watch)(j,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[5]||=(0,n.withModifiers)(e=>!M.value&&!N.value&&X(),[`self`])},[(0,n.createElementVNode)(`div`,ne,[(0,n.createElementVNode)(`div`,re,[(0,n.createElementVNode)(`h2`,ie,(0,n.toDisplayString)(j.value===`select`?`选择支付方式`:j.value===`success`?`支付结果`:`完成支付`),1),(0,n.createElementVNode)(`button`,{onClick:X,class:`_cppay-close-btn`,disabled:M.value||N.value},[...r[6]||=[(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,ae)]),(0,n.createElementVNode)(`div`,c,[j.value===`success`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,oe,[r[7]||=(0,n.createElementVNode)(`div`,{style:{"font-size":`64px`,"margin-bottom":`1rem`}},`✅`,-1),(0,n.createElementVNode)(`h3`,se,(0,n.toDisplayString)(O.plain===`subscription`?`授权成功!`:`支付成功!`),1),(0,n.createElementVNode)(`p`,ce,(0,n.toDisplayString)(O.plain===`subscription`?`订阅已激活`:`交易已完成`),1)])):(0,n.createCommentVNode)(``,!0),j.value===`select`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,le,[(0,n.createElementVNode)(`div`,ue,[r[8]||=(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[9]||=(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[10]||=(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,[P.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:`_cppay-error-tooltip-wrapper`,onMouseenter:r[0]||=e=>F.value=!0,onMouseleave:r[1]||=e=>F.value=!1},[(0,n.createElementVNode)(`div`,Te,[r[11]||=(0,n.createElementVNode)(`svg`,{viewBox:`0 0 20 20`,fill:`currentColor`},[(0,n.createElementVNode)(`path`,{"fill-rule":`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z`,"clip-rule":`evenodd`})],-1),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(P.value),1)]),F.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,Ee,(0,n.toDisplayString)(P.value),1)):(0,n.createCommentVNode)(``,!0)],32)):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`button`,{onClick:He,disabled:!L.value||!R.value||M.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(M.value?`处理中...`:`继续支付`),9,De)])])):j.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)(O.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)(O.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:Ue,class:`_cppay-copy-btn`,title:`复制地址`},[...r[12]||=[(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)]])])]),O.plain===`subscription`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,b,[...r[13]||=[(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.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:`_cppay-error-tooltip-wrapper`,onMouseenter:r[2]||=e=>F.value=!0,onMouseleave:r[3]||=e=>F.value=!1},[(0,n.createElementVNode)(`div`,x,[r[14]||=(0,n.createElementVNode)(`svg`,{viewBox:`0 0 20 20`,fill:`currentColor`},[(0,n.createElementVNode)(`path`,{"fill-rule":`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z`,"clip-rule":`evenodd`})],-1),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(P.value),1)]),F.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,S,(0,n.toDisplayString)(P.value),1)):(0,n.createCommentVNode)(``,!0)],32)):(0,n.createCommentVNode)(``,!0),N.value?(0,n.createCommentVNode)(``,!0):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,C,[V.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,T,[(0,n.createElementVNode)(`div`,E,[(0,n.createElementVNode)(`button`,{onClick:Ve,disabled:M.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(M.value?e.plain===`subscription`?`授权中...`:`支付中...`:e.plain===`subscription`?`💳 钱包授权`:`💳 钱包支付`),9,Oe),(0,n.createElementVNode)(`button`,{onClick:Z,disabled:M.value,class:`_cppay-btn _cppay-btn-primary`},` 💰钱包状态 `,8,ke)]),(0,n.createElementVNode)(`div`,Ae,` 已连接: `+(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,w))])),(0,n.createElementVNode)(`div`,je,[(0,n.createElementVNode)(`button`,{onClick:Le,disabled:N.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(N.value?`检查中...`:`我已完成支付`),9,Me)]),(0,n.createElementVNode)(`div`,Ne,[(0,n.createElementVNode)(`button`,{onClick:r[4]||=e=>j.value=`select`,disabled:M.value||N.value,class:`_cppay-btn _cppay-btn-text`},` 更改支付方式 `,8,Pe)])])):(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-9361860d`]]),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.t(e.n),exports.CppayPlugin=F,exports.PaymentDialog=k,exports.showPayment=j,exports.useCppayPayment=I;
1
+ const e=require(`./inject-style-Boo8CMsU.cjs`),t=require(`./cppay-DXZVBIDi.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`},ae=[`disabled`],c={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={class:`_cppay-error-tooltip`},Ee={key:0,class:`_cppay-error-tooltip-full`},De=[`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={class:`_cppay-error-tooltip`},S={key:0,class:`_cppay-error-tooltip-full`},C={key:1,class:`_cppay-section`},w=[`disabled`],T={key:1},E={class:`_cppay-btn-container`},Oe=[`disabled`],ke=[`disabled`],Ae={style:{"text-align":`center`,"margin-top":`8px`,"font-size":`12px`,color:`#666`}},je={class:`_cppay-section`},Me=[`disabled`],Ne={class:`_cppay-section`},Pe=[`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(e,{emit:D}){let O=e,k=D,A=new t.t(O.apikey),j=(0,n.ref)(`select`),M=(0,n.ref)(!1),N=(0,n.ref)(!1),P=(0,n.ref)(),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)),Fe=e=>[`USDT`,`USDC`,`BUSD`,`DAI`,`TUSD`,`USDD`,`FDUSD`].includes(e.toUpperCase())?2:6,Ie=(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=Fe(R.value);return Ie((parseFloat(O.amount)/e).toFixed(t),t)}),Le=()=>{z.value&&(P.value=void 0,N.value=!0,O.plain===`one-time`?$(z.value.paymentId):O.plain===`subscription`&&$(z.value.subscriptionId))},X=()=>{M.value||N.value||(k(`update:modelValue`,!1),setTimeout(()=>{j.value=`select`,P.value=void 0,z.value=null},300))},Re=async()=>{try{M.value=!0,P.value=void 0,I.value=await A.getSupportedChains(),I.value.length>0&&(L.value=I.value[0].chain)}catch(e){P.value=e instanceof Error?e.message:`加载支付网络失败`,k(`error`,e)}finally{M.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,P.value=void 0,G&&await G.open()}catch(e){console.error(`钱包连接失败:`,e),P.value=e instanceof Error?e.message:`钱包连接失败`,k(`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}},ze=async()=>{if(!(!V.value||!U.value||!z.value||!J.value||!K.value))try{M.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)}M.value=!1,N.value=!0,$(e.paymentId)}catch(e){console.error(`钱包支付失败:`,e),P.value=e instanceof Error?e.message:`钱包支付失败`,k(`error`,e),M.value=!1}},Be=async()=>{if(!(!V.value||!U.value||!z.value||!J.value||!K.value))try{M.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),M.value=!1,N.value=!0,$(e.paymentId)}catch(e){console.error(`钱包授权失败:`,e),P.value=e instanceof Error?e.message:`钱包授权失败`,k(`error`,e),M.value=!1}},Ve=async()=>{if(!V.value){await Z();return}O.plain===`one-time`?await ze():O.plain===`subscription`&&await Be()},He=async()=>{if(!(!L.value||!R.value))try{M.value=!0,P.value=void 0;let e;O.plain===`one-time`?e=await A.createPayment(`one-time`,{paymentChain:L.value,paymentToken:R.value,orderId:O.orderId,amount:Y.value}):O.plain===`subscription`&&(e=await A.createPayment(`subscription`,{paymentChain:L.value,paymentToken:R.value,orderId:O.orderId,amountOfUsd:Y.value,intervalDays:O.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`}),j.value=`payment`}catch(e){P.value=e instanceof Error?e.message:`创建支付失败`,k(`error`,e)}finally{M.value=!1}},$=e=>{let t=()=>(0,i.defer)(()=>O.plain===`subscription`?A.checkSubscriptionPaymentStatus({subscriptionId:e}):A.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`&&(N.value=!1),e.status===`paid`&&(N.value=!1,j.value=`success`,k(`success`,e)),e.status===`failed`&&(N.value=!1),e.status===`approved`&&(N.value=!1,j.value=`success`,k(`success`,e))})).subscribe({error:e=>{console.error(`支付状态检查错误:`,e),P.value=e instanceof Error?e.message:`检查支付状态失败`,N.value=!1,k(`error`,e)}})},Ue=async()=>{z.value?.receiveAddress&&await navigator.clipboard.writeText(z.value.receiveAddress)};return(0,n.watch)(()=>O.modelValue,e=>{e&&I.value.length===0&&Re()}),(0,n.watch)(L,()=>{q.value.length>0&&(R.value=q.value[0].symbol)}),(0,n.watch)(j,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[5]||=(0,n.withModifiers)(e=>!M.value&&!N.value&&X(),[`self`])},[(0,n.createElementVNode)(`div`,ne,[(0,n.createElementVNode)(`div`,re,[(0,n.createElementVNode)(`h2`,ie,(0,n.toDisplayString)(j.value===`select`?`选择支付方式`:j.value===`success`?`支付结果`:`完成支付`),1),(0,n.createElementVNode)(`button`,{onClick:X,class:`_cppay-close-btn`,disabled:M.value||N.value},[...r[6]||=[(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,ae)]),(0,n.createElementVNode)(`div`,c,[j.value===`success`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,oe,[r[7]||=(0,n.createElementVNode)(`div`,{style:{"font-size":`64px`,"margin-bottom":`1rem`}},`✅`,-1),(0,n.createElementVNode)(`h3`,se,(0,n.toDisplayString)(O.plain===`subscription`?`授权成功!`:`支付成功!`),1),(0,n.createElementVNode)(`p`,ce,(0,n.toDisplayString)(O.plain===`subscription`?`订阅已激活`:`交易已完成`),1)])):(0,n.createCommentVNode)(``,!0),j.value===`select`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,le,[(0,n.createElementVNode)(`div`,ue,[r[8]||=(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[9]||=(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[10]||=(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,[P.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:`_cppay-error-tooltip-wrapper`,onMouseenter:r[0]||=e=>F.value=!0,onMouseleave:r[1]||=e=>F.value=!1},[(0,n.createElementVNode)(`div`,Te,[r[11]||=(0,n.createElementVNode)(`svg`,{viewBox:`0 0 20 20`,fill:`currentColor`},[(0,n.createElementVNode)(`path`,{"fill-rule":`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z`,"clip-rule":`evenodd`})],-1),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(P.value),1)]),F.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,Ee,(0,n.toDisplayString)(P.value),1)):(0,n.createCommentVNode)(``,!0)],32)):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`button`,{onClick:He,disabled:!L.value||!R.value||M.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(M.value?`处理中...`:`继续支付`),9,De)])])):j.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)(O.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)(O.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:Ue,class:`_cppay-copy-btn`,title:`复制地址`},[...r[12]||=[(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)]])])]),O.plain===`subscription`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,b,[...r[13]||=[(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.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:`_cppay-error-tooltip-wrapper`,onMouseenter:r[2]||=e=>F.value=!0,onMouseleave:r[3]||=e=>F.value=!1},[(0,n.createElementVNode)(`div`,x,[r[14]||=(0,n.createElementVNode)(`svg`,{viewBox:`0 0 20 20`,fill:`currentColor`},[(0,n.createElementVNode)(`path`,{"fill-rule":`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z`,"clip-rule":`evenodd`})],-1),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(P.value),1)]),F.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,S,(0,n.toDisplayString)(P.value),1)):(0,n.createCommentVNode)(``,!0)],32)):(0,n.createCommentVNode)(``,!0),N.value?(0,n.createCommentVNode)(``,!0):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,C,[V.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,T,[(0,n.createElementVNode)(`div`,E,[(0,n.createElementVNode)(`button`,{onClick:Ve,disabled:M.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(M.value?e.plain===`subscription`?`授权中...`:`支付中...`:e.plain===`subscription`?`💳 钱包授权`:`💳 钱包支付`),9,Oe),(0,n.createElementVNode)(`button`,{onClick:Z,disabled:M.value,class:`_cppay-btn _cppay-btn-primary`},` 💰钱包状态 `,8,ke)]),(0,n.createElementVNode)(`div`,Ae,` 已连接: `+(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,w))])),(0,n.createElementVNode)(`div`,je,[(0,n.createElementVNode)(`button`,{onClick:Le,disabled:N.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(N.value?`检查中...`:`我已完成支付`),9,Me)]),(0,n.createElementVNode)(`div`,Ne,[(0,n.createElementVNode)(`button`,{onClick:r[4]||=e=>j.value=`select`,disabled:M.value||N.value,class:`_cppay-btn _cppay-btn-text`},` 更改支付方式 `,8,Pe)])])):(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-9361860d`]]),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.t(e.n),exports.CppayPlugin=F,exports.PaymentDialog=k,exports.showPayment=j,exports.useCppayPayment=I;
package/dist/vue.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as cppay_default } from "./cppay-CCxKnEWz.js";
1
+ import { t as cppay_default } from "./cppay-BPtRBPjB.js";
2
2
  import { n as payment_dialog_default, t as injectStyle } from "./inject-style-CWza6SKp.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
4
  import * as QRCode from "qrcode";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cppay-sdk",
3
- "version": "0.0.2-beta.30",
3
+ "version": "0.0.2-beta.31",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "dev": "vite",