cppay-sdk 0.0.2-beta.9 → 0.0.3
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/README.md +630 -2
- package/dist/cppay-Db8t1Cra.js +216 -0
- package/dist/cppay-DuOJqlpA.cjs +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +159 -8
- package/dist/index.js +1 -1
- package/dist/locales-CEspC4rh.js +128 -0
- package/dist/locales-Cl9v6tre.cjs +1 -0
- package/dist/react.cjs +1 -1
- package/dist/react.d.ts +232 -3
- package/dist/react.js +868 -193
- package/dist/vue.cjs +1 -1
- package/dist/vue.d.ts +183 -10
- package/dist/vue.js +687 -122
- package/package.json +46 -18
- package/dist/cppay-D9NSpEr9.cjs +0 -1
- package/dist/cppay-DdPjlf2b.js +0 -107
- package/dist/cppay-sdk.css +0 -2
- package/dist/inject-style-Dz7JsQxo.cjs +0 -1
- package/dist/inject-style-qX_0AjjE.js +0 -7
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
const CHAIN_ICONS = {
|
|
2
|
+
Ethereum: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png",
|
|
3
|
+
BSC: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/binance/info/logo.png",
|
|
4
|
+
"bsc-testnet": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/binance/info/logo.png",
|
|
5
|
+
Tron: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png",
|
|
6
|
+
Polygon: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/polygon/info/logo.png",
|
|
7
|
+
Solana: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/solana/info/logo.png"
|
|
8
|
+
}, TOKEN_ICONS = {
|
|
9
|
+
USDT: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png",
|
|
10
|
+
USDC: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
|
|
11
|
+
ETH: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png",
|
|
12
|
+
BNB: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/binance/info/logo.png",
|
|
13
|
+
tBNB: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/binance/info/logo.png",
|
|
14
|
+
TRX: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/tron/info/logo.png",
|
|
15
|
+
SOL: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/solana/info/logo.png"
|
|
16
|
+
};
|
|
17
|
+
var BASE_URL = "http://192.168.0.162:8000", request = async (e, t, r) => {
|
|
18
|
+
let i = Object.assign({ timeout: 15e3 }, r), a = new AbortController(), o = setTimeout(() => a.abort(), i.timeout);
|
|
19
|
+
try {
|
|
20
|
+
let r = await fetch(new URL(e, BASE_URL), {
|
|
21
|
+
signal: a.signal,
|
|
22
|
+
...t
|
|
23
|
+
});
|
|
24
|
+
clearTimeout(o);
|
|
25
|
+
let i = r.headers.get("Content-Type") ?? "";
|
|
26
|
+
if (i.includes("json")) return await r.json();
|
|
27
|
+
try {
|
|
28
|
+
return await r.json();
|
|
29
|
+
} catch {
|
|
30
|
+
throw Error(`URL: ${e}, Unsupport Content Type: ${i}`);
|
|
31
|
+
}
|
|
32
|
+
} catch (t) {
|
|
33
|
+
throw clearTimeout(o), t instanceof DOMException && t.name === "AbortError" ? Error(`URL: ${e}, Request timeout after ${i.timeout}ms`) : t;
|
|
34
|
+
}
|
|
35
|
+
}, SUCCESS_CODE = 0, cppayRequest = async (e, t) => {
|
|
36
|
+
let n = new URLSearchParams(t.params), a = await request(`${t.url}${n.size ? `?${n.toString()}` : ""}`, {
|
|
37
|
+
method: t.method ?? "get",
|
|
38
|
+
headers: {
|
|
39
|
+
Authorization: e,
|
|
40
|
+
...t.headers
|
|
41
|
+
},
|
|
42
|
+
body: t.data ? JSON.stringify(t.data) : void 0
|
|
43
|
+
});
|
|
44
|
+
if (a.code !== SUCCESS_CODE) throw Error(`Request ${t.url} Failed. ${a.message}`);
|
|
45
|
+
return a.data;
|
|
46
|
+
}, CppayApi = class {
|
|
47
|
+
authorization;
|
|
48
|
+
constructor(e, t) {
|
|
49
|
+
this.authorization = e ? `ApiKey ${e}` : `OTT ${t}`;
|
|
50
|
+
}
|
|
51
|
+
async getSupportedChains() {
|
|
52
|
+
return (await cppayRequest(this.authorization, { url: "/api/payment/token" })).map((e) => ({
|
|
53
|
+
chain: e.chain,
|
|
54
|
+
chainId: e.chain_id,
|
|
55
|
+
tokenSymbol: e.token_symbol,
|
|
56
|
+
tokenDecimals: e.token_decimals,
|
|
57
|
+
tokenAddress: e.token_address,
|
|
58
|
+
tokenPrice: e.token_price
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
async createOnetimePayment(e, t, n, r, i) {
|
|
62
|
+
let o = {
|
|
63
|
+
chain: e,
|
|
64
|
+
token: t,
|
|
65
|
+
order_no: n,
|
|
66
|
+
amount: r,
|
|
67
|
+
remark: i
|
|
68
|
+
}, s = await cppayRequest(this.authorization, {
|
|
69
|
+
url: "/api/payment/create",
|
|
70
|
+
method: "post",
|
|
71
|
+
data: o
|
|
72
|
+
});
|
|
73
|
+
return {
|
|
74
|
+
paymentId: s.payment_id,
|
|
75
|
+
paymentAmount: s.pay_amount,
|
|
76
|
+
receiveAddress: s.receive_address,
|
|
77
|
+
expireAt: s.expire_at
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
async createSubscriptionPayment(e, t, n, r, i) {
|
|
81
|
+
let o = {
|
|
82
|
+
chain: e,
|
|
83
|
+
token: t,
|
|
84
|
+
order_no: n,
|
|
85
|
+
amount_usd: r,
|
|
86
|
+
renewal_days: i
|
|
87
|
+
}, s = await cppayRequest(this.authorization, {
|
|
88
|
+
url: "/api/subscription/create",
|
|
89
|
+
method: "post",
|
|
90
|
+
data: o
|
|
91
|
+
});
|
|
92
|
+
return {
|
|
93
|
+
subscriptionId: s.subscription_id,
|
|
94
|
+
approveAmount: s.approved_amount,
|
|
95
|
+
spenderAddress: s.contract_address,
|
|
96
|
+
expireAt: s.expire_at
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
async createX402Payment() {
|
|
100
|
+
throw Error("Unsupported payment mode");
|
|
101
|
+
}
|
|
102
|
+
async checkOnetimePaymentStatus(e) {
|
|
103
|
+
let t = "orderId" in e ? { order_no: e.orderId } : { payment_id: e.paymentId }, n = await cppayRequest(this.authorization, {
|
|
104
|
+
url: "/api/payment/query",
|
|
105
|
+
params: t
|
|
106
|
+
});
|
|
107
|
+
return {
|
|
108
|
+
orderId: n.order_no,
|
|
109
|
+
paymentId: n.payment_id,
|
|
110
|
+
chain: n.chain,
|
|
111
|
+
token: n.token,
|
|
112
|
+
baseAmount: n.base_amount,
|
|
113
|
+
payAmount: n.pay_amount,
|
|
114
|
+
receiveAddress: n.receive_address,
|
|
115
|
+
expireAt: n.expire_at,
|
|
116
|
+
status: n.status
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
async checkSubcriptionPaymentStatus(e) {
|
|
120
|
+
let t = "orderId" in e ? { order_no: e.orderId } : { subscription_id: e.subscriptionId }, n = await cppayRequest(this.authorization, {
|
|
121
|
+
url: "/api/subscription/query",
|
|
122
|
+
params: t
|
|
123
|
+
});
|
|
124
|
+
return {
|
|
125
|
+
orderId: n.order_no,
|
|
126
|
+
subscriptionId: n.subscription_id,
|
|
127
|
+
chain: n.chain,
|
|
128
|
+
token: n.token,
|
|
129
|
+
approvedAddress: n.approved_contract_address,
|
|
130
|
+
txHash: n.approved_tx_hash,
|
|
131
|
+
approveAmount: n.approved_amount,
|
|
132
|
+
amountOfUsd: n.amount_usd,
|
|
133
|
+
expireAt: n.expire_at,
|
|
134
|
+
status: n.subscription_status
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
async getSubcriptionPayments(e) {
|
|
138
|
+
let t = { subscription_id: e }, n = await cppayRequest(this.authorization, {
|
|
139
|
+
url: "/api/subscription/payments",
|
|
140
|
+
params: t
|
|
141
|
+
});
|
|
142
|
+
return {
|
|
143
|
+
total: n.total,
|
|
144
|
+
payments: (n.payments ?? []).map((e) => ({
|
|
145
|
+
orderId: e.order_no,
|
|
146
|
+
subscriptionId: e.subscription_id,
|
|
147
|
+
chain: e.chain,
|
|
148
|
+
token: e.token,
|
|
149
|
+
txHash: e.tx_hash,
|
|
150
|
+
payAmount: e.pay_amount,
|
|
151
|
+
receiveAddress: e.receive_address,
|
|
152
|
+
status: e.status,
|
|
153
|
+
errorMessage: e.error_message
|
|
154
|
+
}))
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
async checkX402PaymentStatus() {
|
|
158
|
+
throw Error("Unsupported payment mode");
|
|
159
|
+
}
|
|
160
|
+
}, cppay_default = class {
|
|
161
|
+
api;
|
|
162
|
+
constructor(e, t) {
|
|
163
|
+
this.api = new CppayApi(e, t);
|
|
164
|
+
}
|
|
165
|
+
async getSupportedChains() {
|
|
166
|
+
let n = (await this.api.getSupportedChains()).reduce((n, r) => {
|
|
167
|
+
let i = n[r.chain] ?? {
|
|
168
|
+
chain: r.chain,
|
|
169
|
+
chainId: r.chainId,
|
|
170
|
+
tokens: [],
|
|
171
|
+
icon: CHAIN_ICONS[r.chain]
|
|
172
|
+
};
|
|
173
|
+
return i.tokens.push({
|
|
174
|
+
symbol: r.tokenSymbol,
|
|
175
|
+
decimals: r.tokenDecimals,
|
|
176
|
+
address: r.tokenAddress,
|
|
177
|
+
icon: TOKEN_ICONS[r.tokenSymbol],
|
|
178
|
+
price: r.tokenPrice
|
|
179
|
+
}), n[r.chain] = i, n;
|
|
180
|
+
}, {});
|
|
181
|
+
return Object.values(n);
|
|
182
|
+
}
|
|
183
|
+
async createPayment(e, t) {
|
|
184
|
+
switch (e) {
|
|
185
|
+
case "instant": return this.createOnetimePayment(t);
|
|
186
|
+
case "subscription": return this.createSubscriptionPayment(t);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
async checkPaymentStatus(e, t) {
|
|
190
|
+
switch (e) {
|
|
191
|
+
case "instant": return this.checkOnetimePaymentStatus(t);
|
|
192
|
+
case "subscription": return this.checkSubscriptionPaymentStatus(t);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
async createOnetimePayment(e) {
|
|
196
|
+
let t = await this.api.createOnetimePayment(e.paymentChain, e.paymentToken, e.orderId, e.amount, e.remark);
|
|
197
|
+
return {
|
|
198
|
+
...e,
|
|
199
|
+
...t
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
async createSubscriptionPayment(e) {
|
|
203
|
+
let t = await this.api.createSubscriptionPayment(e.paymentChain, e.paymentToken, e.orderId, e.amountOfUsd, e.intervalDays);
|
|
204
|
+
return {
|
|
205
|
+
...e,
|
|
206
|
+
...t
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
async checkOnetimePaymentStatus(e) {
|
|
210
|
+
return { ...await this.api.checkOnetimePaymentStatus(e) };
|
|
211
|
+
}
|
|
212
|
+
async checkSubscriptionPaymentStatus(e) {
|
|
213
|
+
return { ...await this.api.checkSubcriptionPaymentStatus(e) };
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
export { CHAIN_ICONS as n, TOKEN_ICONS as r, cppay_default as t };
|
|
@@ -0,0 +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,i){let o={chain:e,token:t,order_no:n,amount:r,remark:i},s=await a(this.authorization,{url:`/api/payment/create`,method:`post`,data:o});return{paymentId:s.payment_id,paymentAmount:s.pay_amount,receiveAddress:s.receive_address,expireAt:s.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=`orderId`in e?{order_no:e.orderId}:{payment_id:e.paymentId},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=`orderId`in e?{order_no:e.orderId}:{subscription_id:e.subscriptionId},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`instant`:return this.createOnetimePayment(t);case`subscription`:return this.createSubscriptionPayment(t)}}async checkPaymentStatus(e,t){switch(e){case`instant`: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,e.remark);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)}}async checkSubscriptionPaymentStatus(e){return{...await this.api.checkSubcriptionPaymentStatus(e)}}},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-
|
|
1
|
+
const e=require(`./cppay-DuOJqlpA.cjs`);exports.CHAIN_ICONS=e.n,exports.Cppay=e.t,exports.TOKEN_ICONS=e.r;
|
package/dist/index.d.ts
CHANGED
|
@@ -5,20 +5,116 @@ export declare const CHAIN_ICONS: Record<string, string>;
|
|
|
5
5
|
export declare interface ChainInfo {
|
|
6
6
|
icon?: string;
|
|
7
7
|
chain: string;
|
|
8
|
+
chainId: number;
|
|
8
9
|
tokens: TokenInfo[];
|
|
9
10
|
}
|
|
10
11
|
|
|
11
12
|
export declare class Cppay {
|
|
12
|
-
|
|
13
|
-
constructor(apikey: string);
|
|
13
|
+
api: CppayApi;
|
|
14
|
+
constructor(apikey: string, ott?: undefined);
|
|
15
|
+
constructor(apikey: undefined, ott: string);
|
|
14
16
|
getSupportedChains(): Promise<ChainInfo[]>;
|
|
15
|
-
createPayment(params:
|
|
17
|
+
createPayment(plain: "instant", params: Parameters<Cppay["createOnetimePayment"]>[0]): Promise<OnetimePaymentInfo>;
|
|
18
|
+
createPayment(plain: "subscription", params: Parameters<Cppay["createSubscriptionPayment"]>[0]): Promise<SubscriptionPaymentInfo>;
|
|
19
|
+
checkPaymentStatus(plain: "instant", params: Parameters<Cppay["checkOnetimePaymentStatus"]>[0]): Promise<OnetimePaymentOrderStatus>;
|
|
20
|
+
checkPaymentStatus(plain: "subscription", params: Parameters<Cppay["checkSubscriptionPaymentStatus"]>[0]): Promise<SubscriptionPaymentOrderStatus>;
|
|
21
|
+
createOnetimePayment(params: {
|
|
16
22
|
paymentChain: string;
|
|
17
23
|
paymentToken: string;
|
|
18
24
|
orderId: string;
|
|
19
25
|
amount: Numberic;
|
|
20
|
-
|
|
21
|
-
|
|
26
|
+
remark?: string;
|
|
27
|
+
}): Promise<OnetimePaymentInfo>;
|
|
28
|
+
createSubscriptionPayment(params: {
|
|
29
|
+
paymentChain: string;
|
|
30
|
+
paymentToken: string;
|
|
31
|
+
orderId: string;
|
|
32
|
+
amountOfUsd: Numberic;
|
|
33
|
+
intervalDays: number;
|
|
34
|
+
}): Promise<SubscriptionPaymentInfo>;
|
|
35
|
+
checkOnetimePaymentStatus(params: {
|
|
36
|
+
orderId: string;
|
|
37
|
+
} | {
|
|
38
|
+
paymentId: string;
|
|
39
|
+
}): Promise<OnetimePaymentOrderStatus>;
|
|
40
|
+
checkSubscriptionPaymentStatus(params: {
|
|
41
|
+
orderId: string;
|
|
42
|
+
} | {
|
|
43
|
+
subscriptionId: string;
|
|
44
|
+
}): Promise<SubscriptionPaymentOrderStatus>;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
declare class CppayApi {
|
|
48
|
+
private authorization;
|
|
49
|
+
constructor(apikey: string, ott?: undefined);
|
|
50
|
+
constructor(apikey: undefined, ott: string);
|
|
51
|
+
getSupportedChains(): Promise<{
|
|
52
|
+
chain: string;
|
|
53
|
+
chainId: number;
|
|
54
|
+
tokenSymbol: string;
|
|
55
|
+
tokenDecimals: number;
|
|
56
|
+
tokenAddress: `0x${string}`;
|
|
57
|
+
tokenPrice: Numberic;
|
|
58
|
+
}[]>;
|
|
59
|
+
createOnetimePayment(paymentChain: string, paymentToken: string, orderId: string, amount: Numberic, remark?: string): Promise<{
|
|
60
|
+
paymentId: string;
|
|
61
|
+
paymentAmount: Numberic;
|
|
62
|
+
receiveAddress: `0x${string}`;
|
|
63
|
+
expireAt: number;
|
|
64
|
+
}>;
|
|
65
|
+
createSubscriptionPayment(paymentChain: string, paymentToken: string, orderId: string, amountOfUsd: Numberic, intervalDays: number): Promise<{
|
|
66
|
+
subscriptionId: string;
|
|
67
|
+
approveAmount: Numberic;
|
|
68
|
+
spenderAddress: `0x${string}`;
|
|
69
|
+
expireAt: number;
|
|
70
|
+
}>;
|
|
71
|
+
createX402Payment(): Promise<void>;
|
|
72
|
+
checkOnetimePaymentStatus(_params: {
|
|
73
|
+
orderId: string;
|
|
74
|
+
} | {
|
|
75
|
+
paymentId: string;
|
|
76
|
+
}): Promise<{
|
|
77
|
+
orderId: string;
|
|
78
|
+
paymentId: string;
|
|
79
|
+
chain: string;
|
|
80
|
+
token: string;
|
|
81
|
+
baseAmount: Numberic;
|
|
82
|
+
payAmount: Numberic;
|
|
83
|
+
receiveAddress: `0x${string}`;
|
|
84
|
+
expireAt: number;
|
|
85
|
+
status: PaymentStatus;
|
|
86
|
+
}>;
|
|
87
|
+
checkSubcriptionPaymentStatus(_params: {
|
|
88
|
+
orderId: string;
|
|
89
|
+
} | {
|
|
90
|
+
subscriptionId: string;
|
|
91
|
+
}): Promise<{
|
|
92
|
+
orderId: string;
|
|
93
|
+
subscriptionId: string;
|
|
94
|
+
chain: string;
|
|
95
|
+
token: string;
|
|
96
|
+
approvedAddress: string;
|
|
97
|
+
txHash: string;
|
|
98
|
+
approveAmount: string;
|
|
99
|
+
amountOfUsd: string;
|
|
100
|
+
expireAt: number;
|
|
101
|
+
status: SubscriptionPaymentStatus;
|
|
102
|
+
}>;
|
|
103
|
+
getSubcriptionPayments(subscriptionId: string): Promise<{
|
|
104
|
+
total: number;
|
|
105
|
+
payments: {
|
|
106
|
+
orderId: string;
|
|
107
|
+
subscriptionId: string;
|
|
108
|
+
chain: string;
|
|
109
|
+
token: string;
|
|
110
|
+
txHash: string;
|
|
111
|
+
payAmount: Numberic;
|
|
112
|
+
receiveAddress: `0x${string}`;
|
|
113
|
+
status: PaymentStatus;
|
|
114
|
+
errorMessage: string;
|
|
115
|
+
}[];
|
|
116
|
+
}>;
|
|
117
|
+
checkX402PaymentStatus(): Promise<void>;
|
|
22
118
|
}
|
|
23
119
|
|
|
24
120
|
export declare interface CppayResponse<R> {
|
|
@@ -29,15 +125,17 @@ export declare interface CppayResponse<R> {
|
|
|
29
125
|
|
|
30
126
|
export declare type Numberic = `${number}.${number}` | `${number}`;
|
|
31
127
|
|
|
32
|
-
export declare interface
|
|
128
|
+
export declare interface OnetimePaymentInfo {
|
|
33
129
|
orderId: string;
|
|
34
130
|
paymentId: string;
|
|
35
131
|
paymentAmount: Numberic;
|
|
36
132
|
paymentChain: string;
|
|
37
133
|
paymentToken: string;
|
|
134
|
+
receiveAddress: Address;
|
|
135
|
+
expireAt: number;
|
|
38
136
|
}
|
|
39
137
|
|
|
40
|
-
export declare interface
|
|
138
|
+
export declare interface OnetimePaymentOrderStatus {
|
|
41
139
|
orderId: string;
|
|
42
140
|
paymentId: string;
|
|
43
141
|
chain: string;
|
|
@@ -49,16 +147,69 @@ export declare interface PaymentOrder {
|
|
|
49
147
|
status: PaymentStatus;
|
|
50
148
|
}
|
|
51
149
|
|
|
150
|
+
export declare type PaymentPlain = "instant" | "subscription" | "x402";
|
|
151
|
+
|
|
52
152
|
export declare type PaymentStatus = "pending" | "paid" | "expired" | "failed";
|
|
53
153
|
|
|
154
|
+
export declare type PaymentStep = "select" | "payment" | "checking" | "success" | "failed" | "expired" | "error";
|
|
155
|
+
|
|
156
|
+
export declare interface SubscriptionPayment {
|
|
157
|
+
orderId: string;
|
|
158
|
+
subscriptionId: string;
|
|
159
|
+
chain: string;
|
|
160
|
+
token: string;
|
|
161
|
+
payAmount: Numberic;
|
|
162
|
+
txHash: string;
|
|
163
|
+
receiveAddress: Address;
|
|
164
|
+
status: PaymentStatus;
|
|
165
|
+
errorMessage: string;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export declare interface SubscriptionPaymentInfo {
|
|
169
|
+
subscriptionId: string;
|
|
170
|
+
approveAmount: Numberic;
|
|
171
|
+
spenderAddress: Address;
|
|
172
|
+
expireAt: number;
|
|
173
|
+
paymentChain: string;
|
|
174
|
+
paymentToken: string;
|
|
175
|
+
orderId: string;
|
|
176
|
+
amountOfUsd: Numberic;
|
|
177
|
+
intervalDays: number;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export declare interface SubscriptionPaymentOrderStatus {
|
|
181
|
+
orderId: string;
|
|
182
|
+
subscriptionId: string;
|
|
183
|
+
chain: string;
|
|
184
|
+
token: string;
|
|
185
|
+
approvedAddress: string;
|
|
186
|
+
txHash: string;
|
|
187
|
+
approveAmount: string;
|
|
188
|
+
amountOfUsd: string;
|
|
189
|
+
expireAt: number;
|
|
190
|
+
status: SubscriptionPaymentStatus;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export declare type SubscriptionPaymentStatus = "pending" | "approved" | "expired" | "failed";
|
|
194
|
+
|
|
54
195
|
export declare const TOKEN_ICONS: Record<string, string>;
|
|
55
196
|
|
|
56
197
|
export declare interface TokenInfo {
|
|
57
198
|
icon?: string;
|
|
58
199
|
symbol: string;
|
|
200
|
+
price: Numberic;
|
|
59
201
|
decimals: number;
|
|
60
202
|
address: Address | "";
|
|
61
|
-
receiveAddresses: Address[];
|
|
62
203
|
}
|
|
63
204
|
|
|
64
205
|
export { }
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
declare module "@vue/runtime-core" {
|
|
209
|
+
interface ComponentCustomProperties {
|
|
210
|
+
/** 显示支付对话框的全局方法 */
|
|
211
|
+
$showPayment: typeof showPayment;
|
|
212
|
+
/** 关闭支付对话框的全局方法 */
|
|
213
|
+
$closePayment: typeof closePayment;
|
|
214
|
+
}
|
|
215
|
+
}
|
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-
|
|
1
|
+
import { n as CHAIN_ICONS, r as TOKEN_ICONS, t as cppay_default } from "./cppay-Db8t1Cra.js";
|
|
2
2
|
export { CHAIN_ICONS, cppay_default as Cppay, TOKEN_ICONS };
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
var payment_dialog_default = ":root{--cppay-bg:#fff;--cppay-bg-secondary:#fafafa;--cppay-surface:#f7f7f8;--cppay-surface-hover:#efeff0;--cppay-text-main:#18181b;--cppay-text-sub:#71717a;--cppay-text-muted:#a1a1aa;--cppay-accent:#18181b;--cppay-accent-primary:#6366f1;--cppay-accent-primary-light:#eef2ff;--cppay-accent-primary-border:#c7d2fe;--cppay-border:#e4e4e7;--cppay-border-dark:#d4d4d8;--cppay-danger:#ef4444;--cppay-danger-light:#fee2e2;--cppay-danger-border:#fecaca;--cppay-warning:#f97316;--cppay-warning-light:#fef3c7;--cppay-warning-border:#fcd34d;--cppay-success:#16a34a;--cppay-radius-lg:24px;--cppay-radius-md:16px;--cppay-radius-sm:12px;--cppay-radius-xs:8px;--cppay-space-xs:4px;--cppay-space-sm:8px;--cppay-space-md:12px;--cppay-space-lg:16px;--cppay-space-xl:24px;--cppay-space-2xl:32px;--cppay-shadow-sm:0 1px 2px 0 #0000000d;--cppay-shadow-md:0 4px 6px -1px #0000001a;--cppay-shadow-lg:0 10px 15px -3px #0000001a;--cppay-shadow-xl:0 20px 25px -5px #0000001a;--cppay-transition:all .2s cubic-bezier(.4, 0, .2, 1)}._cppay-overlay{-webkit-backdrop-filter:blur(4px);z-index:999;background-color:#00000080;justify-content:center;align-items:center;margin:0;padding:0;animation:.3s ease-out _cppay-fadeIn;display:flex;position:fixed;inset:0}._cppay-overlay *{box-sizing:border-box}._cppay-dialog{background-color:var(--cppay-bg);border-radius:var(--cppay-radius-md);box-shadow:var(--cppay-shadow-xl);flex-direction:column;width:100%;max-width:520px;max-height:90svh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,sans-serif;animation:.3s cubic-bezier(.4,0,.2,1) _cppay-slideUp;display:flex;overflow:hidden}._cppay-header{padding:var(--cppay-space-xl);border-bottom:1px solid var(--cppay-border);background:var(--cppay-bg);flex-shrink:0;justify-content:space-between;align-items:center;display:flex}._cppay-title{color:var(--cppay-text-main);letter-spacing:-.01em;margin:0;font-size:20px;font-weight:600}._cppay-close-btn{color:var(--cppay-text-muted);cursor:pointer;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;padding:.5rem;transition:all .2s;display:flex}._cppay-close-btn:disabled{opacity:.3;cursor:not-allowed}._cppay-close-btn:not(:disabled):hover{background-color:var(--cppay-surface);color:var(--cppay-text-main)}._cppay-close-btn svg{width:1.5rem;height:1.5rem}._cppay-content{flex:1;padding:1rem 2rem 2rem;overflow-y:auto}._cppay-content::-webkit-scrollbar{width:0;height:0}._cppay-section{margin-bottom:1.5rem}._cppay-section:last-child{margin-bottom:0}._cppay-label{color:var(--cppay-text-sub);margin-bottom:.75rem;font-size:.875rem;font-weight:600;display:block}._cppay-grid{grid-template-columns:repeat(2,1fr);gap:.75rem;display:grid}._cppay-select-btn{border-radius:var(--cppay-radius-sm);background:var(--cppay-surface);cursor:pointer;color:var(--cppay-text-main);border:2px solid #0000;justify-content:flex-start;align-items:center;gap:.75rem;padding:.875rem 1rem;font-family:inherit;font-size:.95rem;font-weight:500;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex;position:relative}._cppay-select-btn:hover{background-color:var(--cppay-surface-hover)}._cppay-select-btn._cppay-selected{background-color:var(--cppay-bg);border-color:var(--cppay-accent);box-shadow:0 4px 12px #0000000d}._cppay-select-btn img{object-fit:cover;border-radius:50%;width:1.5rem;height:1.5rem}._cppay-price-box{text-align:center;padding:1.5rem 0;position:relative}._cppay-price-label{color:var(--cppay-text-sub);margin-bottom:.5rem;font-size:.875rem;font-weight:500;display:block}._cppay-price-main{color:var(--cppay-text-main);letter-spacing:-.03em;justify-content:center;align-items:baseline;gap:.5rem;font-size:2.5rem;font-weight:800;line-height:1.1;display:flex}._cppay-price-symbol{color:var(--cppay-text-sub);font-size:1rem;font-weight:600;transform:translateY(-4px)}._cppay-price-sub{color:var(--cppay-text-muted);margin-top:.75rem;font-size:.95rem;font-weight:500}._cppay-btn{border-radius:var(--cppay-radius-md);cursor:pointer;letter-spacing:-.01em;border:none;justify-content:center;align-items:center;gap:.5rem;width:100%;padding:1rem;font-size:1rem;font-weight:600;transition:all .2s;display:flex}._cppay-btn-primary{background:var(--cppay-accent);color:#fff;box-shadow:0 4px 6px -1px #0000001a}._cppay-btn-primary:hover:not(:disabled){background:#222;transform:translateY(-1px);box-shadow:0 10px 15px -3px #0000001a}._cppay-btn-primary:active:not(:disabled){transform:scale(.98)}._cppay-btn-primary:disabled{color:#a3a3a3;cursor:not-allowed;box-shadow:none;background:#e5e5e5}._cppay-btn-secondary{background:var(--cppay-surface);color:var(--cppay-text-main);border:1px solid var(--cppay-border);box-shadow:0 1px 1px #0000000d}._cppay-btn-secondary:hover:not(:disabled){background:var(--cppay-surface-hover);border-color:var(--cppay-accent);color:var(--cppay-accent);transform:translateY(-1px);box-shadow:0 4px 6px -1px #3b82f633}._cppay-btn-secondary:active:not(:disabled){transform:scale(.98)}._cppay-btn-secondary:disabled{color:#a3a3a3;cursor:not-allowed;box-shadow:none;background:#f5f5f5;border-color:#e5e5e5}._cppay-btn-text{color:var(--cppay-text-sub);background:0 0;margin-top:.5rem;font-size:.875rem}._cppay-btn-text:hover:not(:disabled){color:var(--cppay-text-main)}._cppay-btn-text:disabled{opacity:.5;cursor:not-allowed}._cppay-qr-container{justify-content:center;margin:1.5rem 0 2rem;display:flex}._cppay-qr-code{border-radius:var(--cppay-radius-md);border:1px solid var(--cppay-border);background:#fff;padding:.75rem;box-shadow:0 10px 20px #00000008}._cppay-qr-image{border-radius:8px;width:190px;height:190px;display:block}._cppay-info-box{background-color:var(--cppay-surface);border-radius:var(--cppay-radius-sm);border:1px solid #0000;margin-bottom:.75rem;padding:1rem;transition:all .2s}._cppay-info-box:hover{background-color:var(--cppay-surface-hover);border-color:var(--cppay-border)}._cppay-info-header{justify-content:space-between;align-items:center;margin-bottom:.5rem;display:flex}._cppay-info-label{text-transform:uppercase;color:var(--cppay-text-sub);letter-spacing:.05em;font-size:.75rem;font-weight:700}._cppay-info-label-flex{justify-content:space-between;align-items:center;gap:.5rem;display:flex}._cppay-info-value{color:var(--cppay-text-main);word-break:break-all;font-size:.95rem}._cppay-info-value-flex{flex-direction:column;gap:.5rem;margin-top:.5rem;display:flex}._cppay-info-value-flex span:first-child{font-size:1rem;font-weight:600}._cppay-info-value-flex span:last-child{color:var(--cppay-text-muted);font-size:.85rem}._cppay-info-flex-container{flex-direction:column;gap:.75rem;display:flex}._cppay-info-flex-child{flex-direction:column;gap:.5rem;display:flex}._cppay-address-row{justify-content:space-between;align-items:center;gap:.75rem;margin-top:.5rem;display:flex}._cppay-address-row code{border:1px solid var(--cppay-border);color:var(--cppay-text-main);word-break:break-all;overflow-wrap:break-word;background:#fff;border-radius:4px;flex:1;padding:.5rem .75rem;font-family:SF Mono,Monaco,Inconsolata,monospace;font-size:.85rem}._cppay-countdown{color:#d97706;background:#fffbeb;border-radius:4px;padding:2px 6px;font-size:.75rem;font-weight:600}._cppay-address-wrapper{justify-content:space-between;align-items:center;gap:.5rem;display:flex}._cppay-address-text{color:var(--cppay-text-main);text-overflow:ellipsis;white-space:nowrap;font-family:SF Mono,Monaco,monospace;font-size:.9rem;overflow:hidden}._cppay-copy-btn{border:1px solid var(--cppay-border);cursor:pointer;width:32px;height:32px;color:var(--cppay-text-main);background:#fff;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;padding:0;transition:all .2s;display:flex}._cppay-copy-btn:hover:not(._cppay-copy-success){background:var(--cppay-text-main);border-color:var(--cppay-text-main);color:#fff}._cppay-copy-btn._cppay-copy-success{color:#fff;background:#22c55e;border-color:#22c55e;animation:.3s ease-out _cppay-copyPulse}._cppay-copy-icon{justify-content:center;align-items:center;width:1rem;height:1rem;display:flex}._cppay-subscription-box{background-color:#fef3c7;border-color:#fcd34d}._cppay-subscription-label{color:#92400e;font-size:.85rem;font-weight:600}._cppay-subscription-message{color:#b45309;font-size:.85rem;line-height:1.5}._cppay-state-container{text-align:center}._cppay-state-icon{background:var(--cppay-surface);border-radius:50%;justify-content:center;align-items:center;width:80px;height:80px;margin:0 auto 1.5rem;font-size:2.5rem;display:flex}._cppay-wallet-address-btn{color:var(--cppay-text-muted);margin-top:.5rem;cursor:pointer;background:0 0;border-radius:0;justify-content:center;align-items:center;gap:.5rem;margin-inline:auto;padding:.5rem 0;font-size:.85rem;font-weight:400;transition:all .2s;display:inline-flex}._cppay-wallet-address-btn:hover:not(:disabled){border-bottom-color:var(--cppay-text-main);color:var(--cppay-text-main);background:0 0}._cppay-wallet-address-btn:active:not(:disabled){transform:scale(.98)}._cppay-wallet-address-btn:disabled{opacity:.5;cursor:not-allowed}._cppay-wallet-icon{width:1rem;height:1rem;color:inherit;flex-shrink:0}._cppay-wallet-address-text{text-align:center;color:inherit;flex-shrink:0;font-family:SF Mono,Monaco,Inconsolata,monospace;font-size:.8rem}._cppay-wallet-arrow{width:.85rem;height:.85rem;color:inherit;opacity:.7;flex-shrink:0;transition:transform .2s}._cppay-wallet-address-btn:hover:not(:disabled) ._cppay-wallet-arrow{opacity:1;transform:translateY(1px)}._cppay-wallet-status{background:var(--cppay-surface);border-radius:var(--cppay-radius-sm);justify-content:space-between;align-items:center;margin-top:1rem;padding:.75rem 1rem;display:flex}._cppay-wallet-addr{color:var(--cppay-text-sub);font-family:monospace;font-size:.875rem}._cppay-divider{border-color:var(--cppay-border);border-top:0}._cppay-wallet-disconnect{color:var(--cppay-text-muted);cursor:pointer;background:0 0;border:none;font-size:.75rem}._cppay-wallet-disconnect:hover{color:var(--cppay-danger)}._cppay-error-tooltip-wrapper{position:relative}._cppay-error-tooltip{color:#991b1b;cursor:help;background-color:#fef2f2;border:1px solid #fecaca;border-radius:.375rem;align-items:center;gap:.5rem;margin-bottom:.5rem;padding:.5rem .75rem;font-size:.8125rem;line-height:1.25;transition:all .2s;display:flex}._cppay-error-tooltip:hover{background-color:#fee2e2;border-color:#fca5a5}._cppay-error-tooltip svg{flex-shrink:0;width:1rem;height:1rem}._cppay-error-tooltip span{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}._cppay-error-tooltip-full{color:#fff;z-index:10;word-wrap:break-word;white-space:normal;background-color:#7f1d1d;border-radius:.5rem;margin-bottom:.25rem;padding:.625rem .875rem;font-size:.8125rem;line-height:1.4;animation:.2s ease-out _cppay-tooltipFadeIn;position:absolute;bottom:100%;left:0;right:0;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}._cppay-error-tooltip-full:after{content:\"\";border:.375rem solid #0000;border-top-color:#7f1d1d;position:absolute;top:100%;left:1rem}@keyframes _cppay-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes _cppay-slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes _cppay-bottomSheetUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes _cppay-scaleIn{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}@keyframes _cppay-copyPulse{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}@keyframes _cppay-pulse{0%,to{opacity:1}50%{opacity:.7}}@keyframes _cppay-tooltipFadeIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes _cppay-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._cppay-spinner{flex-shrink:0;width:18px;height:18px;animation:.8s linear infinite _cppay-spin}._cppay-state-container{text-align:center;justify-content:center;align-items:center;gap:var(--cppay-space-lg);flex-direction:column;min-height:380px;display:flex}._cppay-state-success-bg{background:linear-gradient(135deg,#d1fae5 0%,#a7f3d0 100%);border-radius:50%;justify-content:center;align-items:center;width:88px;height:88px;animation:.5s cubic-bezier(.34,1.56,.64,1) _cppay-scaleIn;display:flex}._cppay-state-success-icon{color:#16a34a;font-size:44px;font-weight:700;line-height:1}._cppay-state-expired-bg{background:linear-gradient(135deg,#fef3c7 0%,#fde68a 100%);border-radius:50%;justify-content:center;align-items:center;width:88px;height:88px;animation:.5s cubic-bezier(.34,1.56,.64,1) _cppay-scaleIn;display:flex}._cppay-state-expired-icon{font-size:44px;line-height:1;animation:2s infinite _cppay-pulse}._cppay-state-failed-bg{background:linear-gradient(135deg,#fee2e2 0%,#fecaca 100%);border-radius:50%;justify-content:center;align-items:center;width:88px;height:88px;animation:.5s cubic-bezier(.34,1.56,.64,1) _cppay-scaleIn;display:flex}._cppay-state-failed-icon{color:#dc2626;font-size:44px;font-weight:700;line-height:1}._cppay-state-error-bg{background:linear-gradient(135deg,#f3e8e8 0%,#e5d4d4 100%);border-radius:50%;justify-content:center;align-items:center;width:88px;height:88px;animation:.5s cubic-bezier(.34,1.56,.64,1) _cppay-scaleIn;display:flex}._cppay-state-error-icon{color:#7c2d12;justify-content:center;align-items:center;font-size:44px;font-weight:700;line-height:1;display:flex}._cppay-state-title{color:var(--cppay-text-main);letter-spacing:-.01em;margin:0;margin-top:var(--cppay-space-md);font-size:24px;font-weight:700}._cppay-state-title-success{color:#16a34a}._cppay-state-title-expired{color:#f97316}._cppay-state-title-failed{color:#dc2626}._cppay-state-title-error{color:#7c2d12}._cppay-state-message{color:var(--cppay-text-sub);max-width:300px;margin:0;font-size:14px;line-height:1.5}._cppay-state-hash-container{background:var(--cppay-surface);border-radius:var(--cppay-radius-sm);width:100%;padding:var(--cppay-space-md);border:1px solid var(--cppay-border)}._cppay-state-label{color:var(--cppay-text-muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:var(--cppay-space-md);font-size:12px;font-weight:600}._cppay-hash-row{align-items:center;gap:var(--cppay-space-md);justify-content:center;display:flex}._cppay-state-hash{color:var(--cppay-text-sub);background:var(--cppay-bg);padding:var(--cppay-space-md) var(--cppay-space-lg);border-radius:var(--cppay-radius-xs);border:1px solid var(--cppay-border);word-break:break-all;text-align:center;white-space:nowrap;text-overflow:ellipsis;flex:1;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;font-size:12px;overflow:hidden}._cppay-state-copy-btn{background:var(--cppay-bg);border:1px solid var(--cppay-border);border-radius:var(--cppay-radius-xs);cursor:pointer;width:36px;height:36px;color:var(--cppay-text-sub);transition:var(--cppay-transition);flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}._cppay-state-copy-btn:hover{background:var(--cppay-accent-primary);color:#fff;border-color:var(--cppay-accent-primary)}._cppay-state-copy-btn svg{width:16px;height:16px}._cppay-state-btn{margin-top:var(--cppay-space-lg);min-width:200px}._cppay-success-details{background:var(--cppay-surface);border-radius:var(--cppay-radius-sm);width:100%;padding:var(--cppay-space-lg);border:1px solid var(--cppay-border);gap:var(--cppay-space-md);text-align:left;flex-direction:column;display:flex}._cppay-detail-item{padding:var(--cppay-space-md) 0;border-bottom:1px solid var(--cppay-border);justify-content:space-between;align-items:center;gap:var(--cppay-space-md);display:flex}._cppay-detail-item:last-child{border-bottom:none}._cppay-detail-label{color:var(--cppay-text-muted);text-transform:uppercase;letter-spacing:.02em;flex-shrink:0;font-size:13px;font-weight:500}._cppay-detail-value{color:var(--cppay-text-main);word-break:break-word;text-align:right;flex:1;font-size:14px;font-weight:600}._cppay-detail-id{color:var(--cppay-text-sub);font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;font-size:12px}@media (max-width:640px){._cppay-overlay{align-items:flex-end}._cppay-dialog{border-radius:var(--cppay-radius-md) var(--cppay-radius-md) 0 0;width:100%;max-width:100%;padding-bottom:env(safe-area-inset-bottom);margin:0;animation:.3s cubic-bezier(.4,0,.2,1) _cppay-bottomSheetUp}._cppay-header{padding:var(--cppay-space-lg);border-top-left-radius:var(--cppay-radius-md);border-top-right-radius:var(--cppay-radius-md)}._cppay-title{font-size:18px}._cppay-content{padding:var(--cppay-space-lg);padding-bottom:calc(var(--cppay-space-xl) + env(safe-area-inset-bottom))}._cppay-grid{gap:var(--cppay-space-sm);grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}._cppay-select-btn{padding:var(--cppay-space-md) var(--cppay-space-sm);font-size:12px}._cppay-select-btn img{width:28px;height:28px}._cppay-price-main{font-size:18px}._cppay-qr-image{width:160px;height:160px}}";
|
|
2
|
+
function injectStyle(e) {
|
|
3
|
+
if (typeof document > "u" || document.getElementById("_cppay-payment-dialog-style")) return;
|
|
4
|
+
let r = document.createElement("style");
|
|
5
|
+
r.id = "_cppay-payment-dialog-style", r.textContent = e, document.head.appendChild(r);
|
|
6
|
+
}
|
|
7
|
+
const locales = {
|
|
8
|
+
"zh-CN": {
|
|
9
|
+
selectPaymentMethod: "选择支付方式",
|
|
10
|
+
completePayment: "完成支付",
|
|
11
|
+
paymentResult: "支付结果",
|
|
12
|
+
paymentExpired: "支付已过期",
|
|
13
|
+
paymentFailed: "支付失败",
|
|
14
|
+
error: "出错",
|
|
15
|
+
authorizationSuccess: "授权成功!",
|
|
16
|
+
paymentSuccess: "支付成功!",
|
|
17
|
+
subscriptionActivated: "订阅已激活",
|
|
18
|
+
transactionCompleted: "交易已完成",
|
|
19
|
+
paymentExpiredMessage: "支付已过期,请重选创建支付订单",
|
|
20
|
+
orderPaymentFailed: "订单支付失败!",
|
|
21
|
+
pleaseInitiatePaymentAgain: "请重新发起支付",
|
|
22
|
+
checkStatusFailed: "检查支付状态失败,请稍后重试",
|
|
23
|
+
transactionHash: "交易哈希",
|
|
24
|
+
returnButton: "返回",
|
|
25
|
+
continuePayment: "继续支付",
|
|
26
|
+
processing: "处理中...",
|
|
27
|
+
connectWallet: "连接钱包",
|
|
28
|
+
connecting: "连接中...",
|
|
29
|
+
walletAuthorize: "钱包授权",
|
|
30
|
+
walletPay: "钱包支付",
|
|
31
|
+
authorizing: "授权中...",
|
|
32
|
+
paying: "支付中...",
|
|
33
|
+
completedPayment: "我已完成支付",
|
|
34
|
+
checking: "检查中...",
|
|
35
|
+
changePaymentMethod: "更改支付方式",
|
|
36
|
+
paymentNetwork: "支付网络",
|
|
37
|
+
paymentToken: "支付代币",
|
|
38
|
+
paymentAmount: "支付金额",
|
|
39
|
+
authorizationAmount: "授权金额",
|
|
40
|
+
paymentAddress: "支付地址",
|
|
41
|
+
authorizationContractAddress: "授权合约地址",
|
|
42
|
+
orderId: "订单 ID",
|
|
43
|
+
paymentId: "支付 ID",
|
|
44
|
+
subscriptionId: "订阅 ID",
|
|
45
|
+
renewalInterval: "续费周期",
|
|
46
|
+
days: "天",
|
|
47
|
+
copyAddress: "复制地址",
|
|
48
|
+
copied: "已复制!",
|
|
49
|
+
subscriptionNotice: "📌 订阅说明",
|
|
50
|
+
subscriptionNoticeMessage: "订阅支付需要授权代币给合约地址,系统将按周期自动扣款。授权后无需每次手动支付。",
|
|
51
|
+
clickToModifyWallet: "点击修改或查看钱包状态",
|
|
52
|
+
expired: "已过期",
|
|
53
|
+
hours: "时",
|
|
54
|
+
minutes: "分",
|
|
55
|
+
seconds: "秒",
|
|
56
|
+
loadPaymentNetworkFailed: "加载支付网络失败",
|
|
57
|
+
createPaymentFailed: "创建支付失败",
|
|
58
|
+
walletConnectionFailed: "钱包连接失败",
|
|
59
|
+
walletPaymentFailed: "钱包支付失败",
|
|
60
|
+
walletAuthorizationFailed: "钱包授权失败",
|
|
61
|
+
pleaseConnectWallet: "请先连接钱包",
|
|
62
|
+
pleaseAddNetwork: "请在钱包中添加该网络",
|
|
63
|
+
subscriptionDoesNotSupportNative: "订阅支付不支持原生代币",
|
|
64
|
+
checkPaymentStatusFailed: "检查支付状态失败"
|
|
65
|
+
},
|
|
66
|
+
"en-US": {
|
|
67
|
+
selectPaymentMethod: "Select Payment Method",
|
|
68
|
+
completePayment: "Complete Payment",
|
|
69
|
+
paymentResult: "Payment Result",
|
|
70
|
+
paymentExpired: "Payment Expired",
|
|
71
|
+
paymentFailed: "Payment Failed",
|
|
72
|
+
error: "Error",
|
|
73
|
+
authorizationSuccess: "Authorization Successful!",
|
|
74
|
+
paymentSuccess: "Payment Successful!",
|
|
75
|
+
subscriptionActivated: "Subscription Activated",
|
|
76
|
+
transactionCompleted: "Transaction Completed",
|
|
77
|
+
paymentExpiredMessage: "Payment has expired, please create a new payment order",
|
|
78
|
+
orderPaymentFailed: "Order payment failed!",
|
|
79
|
+
pleaseInitiatePaymentAgain: "Please initiate payment again",
|
|
80
|
+
checkStatusFailed: "Failed to check payment status, please try again later",
|
|
81
|
+
transactionHash: "Transaction Hash",
|
|
82
|
+
returnButton: "Return",
|
|
83
|
+
continuePayment: "Continue Payment",
|
|
84
|
+
processing: "Processing...",
|
|
85
|
+
connectWallet: "Connect Wallet",
|
|
86
|
+
connecting: "Connecting...",
|
|
87
|
+
walletAuthorize: "Wallet Authorize",
|
|
88
|
+
walletPay: "Wallet Pay",
|
|
89
|
+
authorizing: "Authorizing...",
|
|
90
|
+
paying: "Paying...",
|
|
91
|
+
completedPayment: "I have completed payment",
|
|
92
|
+
checking: "Checking...",
|
|
93
|
+
changePaymentMethod: "Change Payment Method",
|
|
94
|
+
paymentNetwork: "Payment Network",
|
|
95
|
+
paymentToken: "Payment Token",
|
|
96
|
+
paymentAmount: "Payment Amount",
|
|
97
|
+
authorizationAmount: "Authorization Amount",
|
|
98
|
+
paymentAddress: "Payment Address",
|
|
99
|
+
authorizationContractAddress: "Authorization Contract Address",
|
|
100
|
+
orderId: "Order ID",
|
|
101
|
+
paymentId: "Payment ID",
|
|
102
|
+
subscriptionId: "Subscription ID",
|
|
103
|
+
renewalInterval: "Renewal Interval",
|
|
104
|
+
days: "Days",
|
|
105
|
+
copyAddress: "Copy Address",
|
|
106
|
+
copied: "Copied!",
|
|
107
|
+
subscriptionNotice: "📌 Subscription Notice",
|
|
108
|
+
subscriptionNoticeMessage: "Subscription payment requires token authorization to the contract address. The system will automatically deduct payment periodically. No manual payment is needed after authorization.",
|
|
109
|
+
clickToModifyWallet: "Click to modify or view wallet status",
|
|
110
|
+
expired: "Expired",
|
|
111
|
+
hours: "h",
|
|
112
|
+
minutes: "m",
|
|
113
|
+
seconds: "s",
|
|
114
|
+
loadPaymentNetworkFailed: "Failed to load payment network",
|
|
115
|
+
createPaymentFailed: "Failed to create payment",
|
|
116
|
+
walletConnectionFailed: "Wallet connection failed",
|
|
117
|
+
walletPaymentFailed: "Wallet payment failed",
|
|
118
|
+
walletAuthorizationFailed: "Wallet authorization failed",
|
|
119
|
+
pleaseConnectWallet: "Please connect wallet first",
|
|
120
|
+
pleaseAddNetwork: "Please add this network in your wallet",
|
|
121
|
+
subscriptionDoesNotSupportNative: "Subscription payment does not support native tokens",
|
|
122
|
+
checkPaymentStatusFailed: "Failed to check payment status"
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
function getLocaleMessages(e = "en-US") {
|
|
126
|
+
return locales[e] || locales["en-US"];
|
|
127
|
+
}
|
|
128
|
+
export { injectStyle as n, payment_dialog_default as r, getLocaleMessages as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),c=`:root{--cppay-bg:#fff;--cppay-bg-secondary:#fafafa;--cppay-surface:#f7f7f8;--cppay-surface-hover:#efeff0;--cppay-text-main:#18181b;--cppay-text-sub:#71717a;--cppay-text-muted:#a1a1aa;--cppay-accent:#18181b;--cppay-accent-primary:#6366f1;--cppay-accent-primary-light:#eef2ff;--cppay-accent-primary-border:#c7d2fe;--cppay-border:#e4e4e7;--cppay-border-dark:#d4d4d8;--cppay-danger:#ef4444;--cppay-danger-light:#fee2e2;--cppay-danger-border:#fecaca;--cppay-warning:#f97316;--cppay-warning-light:#fef3c7;--cppay-warning-border:#fcd34d;--cppay-success:#16a34a;--cppay-radius-lg:24px;--cppay-radius-md:16px;--cppay-radius-sm:12px;--cppay-radius-xs:8px;--cppay-space-xs:4px;--cppay-space-sm:8px;--cppay-space-md:12px;--cppay-space-lg:16px;--cppay-space-xl:24px;--cppay-space-2xl:32px;--cppay-shadow-sm:0 1px 2px 0 #0000000d;--cppay-shadow-md:0 4px 6px -1px #0000001a;--cppay-shadow-lg:0 10px 15px -3px #0000001a;--cppay-shadow-xl:0 20px 25px -5px #0000001a;--cppay-transition:all .2s cubic-bezier(.4, 0, .2, 1)}._cppay-overlay{-webkit-backdrop-filter:blur(4px);z-index:999;background-color:#00000080;justify-content:center;align-items:center;margin:0;padding:0;animation:.3s ease-out _cppay-fadeIn;display:flex;position:fixed;inset:0}._cppay-overlay *{box-sizing:border-box}._cppay-dialog{background-color:var(--cppay-bg);border-radius:var(--cppay-radius-md);box-shadow:var(--cppay-shadow-xl);flex-direction:column;width:100%;max-width:520px;max-height:90svh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,sans-serif;animation:.3s cubic-bezier(.4,0,.2,1) _cppay-slideUp;display:flex;overflow:hidden}._cppay-header{padding:var(--cppay-space-xl);border-bottom:1px solid var(--cppay-border);background:var(--cppay-bg);flex-shrink:0;justify-content:space-between;align-items:center;display:flex}._cppay-title{color:var(--cppay-text-main);letter-spacing:-.01em;margin:0;font-size:20px;font-weight:600}._cppay-close-btn{color:var(--cppay-text-muted);cursor:pointer;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;padding:.5rem;transition:all .2s;display:flex}._cppay-close-btn:disabled{opacity:.3;cursor:not-allowed}._cppay-close-btn:not(:disabled):hover{background-color:var(--cppay-surface);color:var(--cppay-text-main)}._cppay-close-btn svg{width:1.5rem;height:1.5rem}._cppay-content{flex:1;padding:1rem 2rem 2rem;overflow-y:auto}._cppay-content::-webkit-scrollbar{width:0;height:0}._cppay-section{margin-bottom:1.5rem}._cppay-section:last-child{margin-bottom:0}._cppay-label{color:var(--cppay-text-sub);margin-bottom:.75rem;font-size:.875rem;font-weight:600;display:block}._cppay-grid{grid-template-columns:repeat(2,1fr);gap:.75rem;display:grid}._cppay-select-btn{border-radius:var(--cppay-radius-sm);background:var(--cppay-surface);cursor:pointer;color:var(--cppay-text-main);border:2px solid #0000;justify-content:flex-start;align-items:center;gap:.75rem;padding:.875rem 1rem;font-family:inherit;font-size:.95rem;font-weight:500;transition:all .2s cubic-bezier(.4,0,.2,1);display:flex;position:relative}._cppay-select-btn:hover{background-color:var(--cppay-surface-hover)}._cppay-select-btn._cppay-selected{background-color:var(--cppay-bg);border-color:var(--cppay-accent);box-shadow:0 4px 12px #0000000d}._cppay-select-btn img{object-fit:cover;border-radius:50%;width:1.5rem;height:1.5rem}._cppay-price-box{text-align:center;padding:1.5rem 0;position:relative}._cppay-price-label{color:var(--cppay-text-sub);margin-bottom:.5rem;font-size:.875rem;font-weight:500;display:block}._cppay-price-main{color:var(--cppay-text-main);letter-spacing:-.03em;justify-content:center;align-items:baseline;gap:.5rem;font-size:2.5rem;font-weight:800;line-height:1.1;display:flex}._cppay-price-symbol{color:var(--cppay-text-sub);font-size:1rem;font-weight:600;transform:translateY(-4px)}._cppay-price-sub{color:var(--cppay-text-muted);margin-top:.75rem;font-size:.95rem;font-weight:500}._cppay-btn{border-radius:var(--cppay-radius-md);cursor:pointer;letter-spacing:-.01em;border:none;justify-content:center;align-items:center;gap:.5rem;width:100%;padding:1rem;font-size:1rem;font-weight:600;transition:all .2s;display:flex}._cppay-btn-primary{background:var(--cppay-accent);color:#fff;box-shadow:0 4px 6px -1px #0000001a}._cppay-btn-primary:hover:not(:disabled){background:#222;transform:translateY(-1px);box-shadow:0 10px 15px -3px #0000001a}._cppay-btn-primary:active:not(:disabled){transform:scale(.98)}._cppay-btn-primary:disabled{color:#a3a3a3;cursor:not-allowed;box-shadow:none;background:#e5e5e5}._cppay-btn-secondary{background:var(--cppay-surface);color:var(--cppay-text-main);border:1px solid var(--cppay-border);box-shadow:0 1px 1px #0000000d}._cppay-btn-secondary:hover:not(:disabled){background:var(--cppay-surface-hover);border-color:var(--cppay-accent);color:var(--cppay-accent);transform:translateY(-1px);box-shadow:0 4px 6px -1px #3b82f633}._cppay-btn-secondary:active:not(:disabled){transform:scale(.98)}._cppay-btn-secondary:disabled{color:#a3a3a3;cursor:not-allowed;box-shadow:none;background:#f5f5f5;border-color:#e5e5e5}._cppay-btn-text{color:var(--cppay-text-sub);background:0 0;margin-top:.5rem;font-size:.875rem}._cppay-btn-text:hover:not(:disabled){color:var(--cppay-text-main)}._cppay-btn-text:disabled{opacity:.5;cursor:not-allowed}._cppay-qr-container{justify-content:center;margin:1.5rem 0 2rem;display:flex}._cppay-qr-code{border-radius:var(--cppay-radius-md);border:1px solid var(--cppay-border);background:#fff;padding:.75rem;box-shadow:0 10px 20px #00000008}._cppay-qr-image{border-radius:8px;width:190px;height:190px;display:block}._cppay-info-box{background-color:var(--cppay-surface);border-radius:var(--cppay-radius-sm);border:1px solid #0000;margin-bottom:.75rem;padding:1rem;transition:all .2s}._cppay-info-box:hover{background-color:var(--cppay-surface-hover);border-color:var(--cppay-border)}._cppay-info-header{justify-content:space-between;align-items:center;margin-bottom:.5rem;display:flex}._cppay-info-label{text-transform:uppercase;color:var(--cppay-text-sub);letter-spacing:.05em;font-size:.75rem;font-weight:700}._cppay-info-label-flex{justify-content:space-between;align-items:center;gap:.5rem;display:flex}._cppay-info-value{color:var(--cppay-text-main);word-break:break-all;font-size:.95rem}._cppay-info-value-flex{flex-direction:column;gap:.5rem;margin-top:.5rem;display:flex}._cppay-info-value-flex span:first-child{font-size:1rem;font-weight:600}._cppay-info-value-flex span:last-child{color:var(--cppay-text-muted);font-size:.85rem}._cppay-info-flex-container{flex-direction:column;gap:.75rem;display:flex}._cppay-info-flex-child{flex-direction:column;gap:.5rem;display:flex}._cppay-address-row{justify-content:space-between;align-items:center;gap:.75rem;margin-top:.5rem;display:flex}._cppay-address-row code{border:1px solid var(--cppay-border);color:var(--cppay-text-main);word-break:break-all;overflow-wrap:break-word;background:#fff;border-radius:4px;flex:1;padding:.5rem .75rem;font-family:SF Mono,Monaco,Inconsolata,monospace;font-size:.85rem}._cppay-countdown{color:#d97706;background:#fffbeb;border-radius:4px;padding:2px 6px;font-size:.75rem;font-weight:600}._cppay-address-wrapper{justify-content:space-between;align-items:center;gap:.5rem;display:flex}._cppay-address-text{color:var(--cppay-text-main);text-overflow:ellipsis;white-space:nowrap;font-family:SF Mono,Monaco,monospace;font-size:.9rem;overflow:hidden}._cppay-copy-btn{border:1px solid var(--cppay-border);cursor:pointer;width:32px;height:32px;color:var(--cppay-text-main);background:#fff;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;padding:0;transition:all .2s;display:flex}._cppay-copy-btn:hover:not(._cppay-copy-success){background:var(--cppay-text-main);border-color:var(--cppay-text-main);color:#fff}._cppay-copy-btn._cppay-copy-success{color:#fff;background:#22c55e;border-color:#22c55e;animation:.3s ease-out _cppay-copyPulse}._cppay-copy-icon{justify-content:center;align-items:center;width:1rem;height:1rem;display:flex}._cppay-subscription-box{background-color:#fef3c7;border-color:#fcd34d}._cppay-subscription-label{color:#92400e;font-size:.85rem;font-weight:600}._cppay-subscription-message{color:#b45309;font-size:.85rem;line-height:1.5}._cppay-state-container{text-align:center}._cppay-state-icon{background:var(--cppay-surface);border-radius:50%;justify-content:center;align-items:center;width:80px;height:80px;margin:0 auto 1.5rem;font-size:2.5rem;display:flex}._cppay-wallet-address-btn{color:var(--cppay-text-muted);margin-top:.5rem;cursor:pointer;background:0 0;border-radius:0;justify-content:center;align-items:center;gap:.5rem;margin-inline:auto;padding:.5rem 0;font-size:.85rem;font-weight:400;transition:all .2s;display:inline-flex}._cppay-wallet-address-btn:hover:not(:disabled){border-bottom-color:var(--cppay-text-main);color:var(--cppay-text-main);background:0 0}._cppay-wallet-address-btn:active:not(:disabled){transform:scale(.98)}._cppay-wallet-address-btn:disabled{opacity:.5;cursor:not-allowed}._cppay-wallet-icon{width:1rem;height:1rem;color:inherit;flex-shrink:0}._cppay-wallet-address-text{text-align:center;color:inherit;flex-shrink:0;font-family:SF Mono,Monaco,Inconsolata,monospace;font-size:.8rem}._cppay-wallet-arrow{width:.85rem;height:.85rem;color:inherit;opacity:.7;flex-shrink:0;transition:transform .2s}._cppay-wallet-address-btn:hover:not(:disabled) ._cppay-wallet-arrow{opacity:1;transform:translateY(1px)}._cppay-wallet-status{background:var(--cppay-surface);border-radius:var(--cppay-radius-sm);justify-content:space-between;align-items:center;margin-top:1rem;padding:.75rem 1rem;display:flex}._cppay-wallet-addr{color:var(--cppay-text-sub);font-family:monospace;font-size:.875rem}._cppay-divider{border-color:var(--cppay-border);border-top:0}._cppay-wallet-disconnect{color:var(--cppay-text-muted);cursor:pointer;background:0 0;border:none;font-size:.75rem}._cppay-wallet-disconnect:hover{color:var(--cppay-danger)}._cppay-error-tooltip-wrapper{position:relative}._cppay-error-tooltip{color:#991b1b;cursor:help;background-color:#fef2f2;border:1px solid #fecaca;border-radius:.375rem;align-items:center;gap:.5rem;margin-bottom:.5rem;padding:.5rem .75rem;font-size:.8125rem;line-height:1.25;transition:all .2s;display:flex}._cppay-error-tooltip:hover{background-color:#fee2e2;border-color:#fca5a5}._cppay-error-tooltip svg{flex-shrink:0;width:1rem;height:1rem}._cppay-error-tooltip span{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}._cppay-error-tooltip-full{color:#fff;z-index:10;word-wrap:break-word;white-space:normal;background-color:#7f1d1d;border-radius:.5rem;margin-bottom:.25rem;padding:.625rem .875rem;font-size:.8125rem;line-height:1.4;animation:.2s ease-out _cppay-tooltipFadeIn;position:absolute;bottom:100%;left:0;right:0;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}._cppay-error-tooltip-full:after{content:"";border:.375rem solid #0000;border-top-color:#7f1d1d;position:absolute;top:100%;left:1rem}@keyframes _cppay-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes _cppay-slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes _cppay-bottomSheetUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes _cppay-scaleIn{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}@keyframes _cppay-copyPulse{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}@keyframes _cppay-pulse{0%,to{opacity:1}50%{opacity:.7}}@keyframes _cppay-tooltipFadeIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes _cppay-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._cppay-spinner{flex-shrink:0;width:18px;height:18px;animation:.8s linear infinite _cppay-spin}._cppay-state-container{text-align:center;justify-content:center;align-items:center;gap:var(--cppay-space-lg);flex-direction:column;min-height:380px;display:flex}._cppay-state-success-bg{background:linear-gradient(135deg,#d1fae5 0%,#a7f3d0 100%);border-radius:50%;justify-content:center;align-items:center;width:88px;height:88px;animation:.5s cubic-bezier(.34,1.56,.64,1) _cppay-scaleIn;display:flex}._cppay-state-success-icon{color:#16a34a;font-size:44px;font-weight:700;line-height:1}._cppay-state-expired-bg{background:linear-gradient(135deg,#fef3c7 0%,#fde68a 100%);border-radius:50%;justify-content:center;align-items:center;width:88px;height:88px;animation:.5s cubic-bezier(.34,1.56,.64,1) _cppay-scaleIn;display:flex}._cppay-state-expired-icon{font-size:44px;line-height:1;animation:2s infinite _cppay-pulse}._cppay-state-failed-bg{background:linear-gradient(135deg,#fee2e2 0%,#fecaca 100%);border-radius:50%;justify-content:center;align-items:center;width:88px;height:88px;animation:.5s cubic-bezier(.34,1.56,.64,1) _cppay-scaleIn;display:flex}._cppay-state-failed-icon{color:#dc2626;font-size:44px;font-weight:700;line-height:1}._cppay-state-error-bg{background:linear-gradient(135deg,#f3e8e8 0%,#e5d4d4 100%);border-radius:50%;justify-content:center;align-items:center;width:88px;height:88px;animation:.5s cubic-bezier(.34,1.56,.64,1) _cppay-scaleIn;display:flex}._cppay-state-error-icon{color:#7c2d12;justify-content:center;align-items:center;font-size:44px;font-weight:700;line-height:1;display:flex}._cppay-state-title{color:var(--cppay-text-main);letter-spacing:-.01em;margin:0;margin-top:var(--cppay-space-md);font-size:24px;font-weight:700}._cppay-state-title-success{color:#16a34a}._cppay-state-title-expired{color:#f97316}._cppay-state-title-failed{color:#dc2626}._cppay-state-title-error{color:#7c2d12}._cppay-state-message{color:var(--cppay-text-sub);max-width:300px;margin:0;font-size:14px;line-height:1.5}._cppay-state-hash-container{background:var(--cppay-surface);border-radius:var(--cppay-radius-sm);width:100%;padding:var(--cppay-space-md);border:1px solid var(--cppay-border)}._cppay-state-label{color:var(--cppay-text-muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:var(--cppay-space-md);font-size:12px;font-weight:600}._cppay-hash-row{align-items:center;gap:var(--cppay-space-md);justify-content:center;display:flex}._cppay-state-hash{color:var(--cppay-text-sub);background:var(--cppay-bg);padding:var(--cppay-space-md) var(--cppay-space-lg);border-radius:var(--cppay-radius-xs);border:1px solid var(--cppay-border);word-break:break-all;text-align:center;white-space:nowrap;text-overflow:ellipsis;flex:1;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;font-size:12px;overflow:hidden}._cppay-state-copy-btn{background:var(--cppay-bg);border:1px solid var(--cppay-border);border-radius:var(--cppay-radius-xs);cursor:pointer;width:36px;height:36px;color:var(--cppay-text-sub);transition:var(--cppay-transition);flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}._cppay-state-copy-btn:hover{background:var(--cppay-accent-primary);color:#fff;border-color:var(--cppay-accent-primary)}._cppay-state-copy-btn svg{width:16px;height:16px}._cppay-state-btn{margin-top:var(--cppay-space-lg);min-width:200px}._cppay-success-details{background:var(--cppay-surface);border-radius:var(--cppay-radius-sm);width:100%;padding:var(--cppay-space-lg);border:1px solid var(--cppay-border);gap:var(--cppay-space-md);text-align:left;flex-direction:column;display:flex}._cppay-detail-item{padding:var(--cppay-space-md) 0;border-bottom:1px solid var(--cppay-border);justify-content:space-between;align-items:center;gap:var(--cppay-space-md);display:flex}._cppay-detail-item:last-child{border-bottom:none}._cppay-detail-label{color:var(--cppay-text-muted);text-transform:uppercase;letter-spacing:.02em;flex-shrink:0;font-size:13px;font-weight:500}._cppay-detail-value{color:var(--cppay-text-main);word-break:break-word;text-align:right;flex:1;font-size:14px;font-weight:600}._cppay-detail-id{color:var(--cppay-text-sub);font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;font-size:12px}@media (max-width:640px){._cppay-overlay{align-items:flex-end}._cppay-dialog{border-radius:var(--cppay-radius-md) var(--cppay-radius-md) 0 0;width:100%;max-width:100%;padding-bottom:env(safe-area-inset-bottom);margin:0;animation:.3s cubic-bezier(.4,0,.2,1) _cppay-bottomSheetUp}._cppay-header{padding:var(--cppay-space-lg);border-top-left-radius:var(--cppay-radius-md);border-top-right-radius:var(--cppay-radius-md)}._cppay-title{font-size:18px}._cppay-content{padding:var(--cppay-space-lg);padding-bottom:calc(var(--cppay-space-xl) + env(safe-area-inset-bottom))}._cppay-grid{gap:var(--cppay-space-sm);grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}._cppay-select-btn{padding:var(--cppay-space-md) var(--cppay-space-sm);font-size:12px}._cppay-select-btn img{width:28px;height:28px}._cppay-price-main{font-size:18px}._cppay-qr-image{width:160px;height:160px}}`;function l(e){if(typeof document>`u`||document.getElementById(`_cppay-payment-dialog-style`))return;let t=document.createElement(`style`);t.id=`_cppay-payment-dialog-style`,t.textContent=e,document.head.appendChild(t)}const u={"zh-CN":{selectPaymentMethod:`选择支付方式`,completePayment:`完成支付`,paymentResult:`支付结果`,paymentExpired:`支付已过期`,paymentFailed:`支付失败`,error:`出错`,authorizationSuccess:`授权成功!`,paymentSuccess:`支付成功!`,subscriptionActivated:`订阅已激活`,transactionCompleted:`交易已完成`,paymentExpiredMessage:`支付已过期,请重选创建支付订单`,orderPaymentFailed:`订单支付失败!`,pleaseInitiatePaymentAgain:`请重新发起支付`,checkStatusFailed:`检查支付状态失败,请稍后重试`,transactionHash:`交易哈希`,returnButton:`返回`,continuePayment:`继续支付`,processing:`处理中...`,connectWallet:`连接钱包`,connecting:`连接中...`,walletAuthorize:`钱包授权`,walletPay:`钱包支付`,authorizing:`授权中...`,paying:`支付中...`,completedPayment:`我已完成支付`,checking:`检查中...`,changePaymentMethod:`更改支付方式`,paymentNetwork:`支付网络`,paymentToken:`支付代币`,paymentAmount:`支付金额`,authorizationAmount:`授权金额`,paymentAddress:`支付地址`,authorizationContractAddress:`授权合约地址`,orderId:`订单 ID`,paymentId:`支付 ID`,subscriptionId:`订阅 ID`,renewalInterval:`续费周期`,days:`天`,copyAddress:`复制地址`,copied:`已复制!`,subscriptionNotice:`📌 订阅说明`,subscriptionNoticeMessage:`订阅支付需要授权代币给合约地址,系统将按周期自动扣款。授权后无需每次手动支付。`,clickToModifyWallet:`点击修改或查看钱包状态`,expired:`已过期`,hours:`时`,minutes:`分`,seconds:`秒`,loadPaymentNetworkFailed:`加载支付网络失败`,createPaymentFailed:`创建支付失败`,walletConnectionFailed:`钱包连接失败`,walletPaymentFailed:`钱包支付失败`,walletAuthorizationFailed:`钱包授权失败`,pleaseConnectWallet:`请先连接钱包`,pleaseAddNetwork:`请在钱包中添加该网络`,subscriptionDoesNotSupportNative:`订阅支付不支持原生代币`,checkPaymentStatusFailed:`检查支付状态失败`},"en-US":{selectPaymentMethod:`Select Payment Method`,completePayment:`Complete Payment`,paymentResult:`Payment Result`,paymentExpired:`Payment Expired`,paymentFailed:`Payment Failed`,error:`Error`,authorizationSuccess:`Authorization Successful!`,paymentSuccess:`Payment Successful!`,subscriptionActivated:`Subscription Activated`,transactionCompleted:`Transaction Completed`,paymentExpiredMessage:`Payment has expired, please create a new payment order`,orderPaymentFailed:`Order payment failed!`,pleaseInitiatePaymentAgain:`Please initiate payment again`,checkStatusFailed:`Failed to check payment status, please try again later`,transactionHash:`Transaction Hash`,returnButton:`Return`,continuePayment:`Continue Payment`,processing:`Processing...`,connectWallet:`Connect Wallet`,connecting:`Connecting...`,walletAuthorize:`Wallet Authorize`,walletPay:`Wallet Pay`,authorizing:`Authorizing...`,paying:`Paying...`,completedPayment:`I have completed payment`,checking:`Checking...`,changePaymentMethod:`Change Payment Method`,paymentNetwork:`Payment Network`,paymentToken:`Payment Token`,paymentAmount:`Payment Amount`,authorizationAmount:`Authorization Amount`,paymentAddress:`Payment Address`,authorizationContractAddress:`Authorization Contract Address`,orderId:`Order ID`,paymentId:`Payment ID`,subscriptionId:`Subscription ID`,renewalInterval:`Renewal Interval`,days:`Days`,copyAddress:`Copy Address`,copied:`Copied!`,subscriptionNotice:`📌 Subscription Notice`,subscriptionNoticeMessage:`Subscription payment requires token authorization to the contract address. The system will automatically deduct payment periodically. No manual payment is needed after authorization.`,clickToModifyWallet:`Click to modify or view wallet status`,expired:`Expired`,hours:`h`,minutes:`m`,seconds:`s`,loadPaymentNetworkFailed:`Failed to load payment network`,createPaymentFailed:`Failed to create payment`,walletConnectionFailed:`Wallet connection failed`,walletPaymentFailed:`Wallet payment failed`,walletAuthorizationFailed:`Wallet authorization failed`,pleaseConnectWallet:`Please connect wallet first`,pleaseAddNetwork:`Please add this network in your wallet`,subscriptionDoesNotSupportNative:`Subscription payment does not support native tokens`,checkPaymentStatusFailed:`Failed to check payment status`}};function d(e=`en-US`){return u[e]||u[`en-US`]}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return d}});
|