better-wechatpay 1.0.1 → 1.0.2
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 +23 -178
- package/dist/core/verify.d.ts +2 -1
- package/dist/core/verify.d.ts.map +1 -1
- package/dist/core/verify.js +6 -1
- package/dist/core/verify.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,28 +1,18 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
1
3
|
# Better WeChatPay
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
- [JSAPI / 小程序支付](#jsapi--小程序支付)
|
|
15
|
-
- [H5 支付](#h5-支付)
|
|
16
|
-
- [合单支付](#合单支付)
|
|
17
|
-
- [订单管理](#订单管理)
|
|
18
|
-
- [退款管理](#退款管理)
|
|
19
|
-
- [账单下载](#账单下载)
|
|
20
|
-
- [Webhook 处理](#webhook-处理)
|
|
21
|
-
- [自定义 API 调用](#自定义-api-调用)
|
|
22
|
-
- [调试模式](#调试模式)
|
|
23
|
-
- [示例服务器](#示例服务器)
|
|
24
|
-
- [框架集成](#框架集成)
|
|
25
|
-
- [文档](#文档)
|
|
5
|
+
**现代化的微信支付 Node.js SDK**
|
|
6
|
+
|
|
7
|
+
ESM、TypeScript、全支付方式支持
|
|
8
|
+
|
|
9
|
+
[](https://www.npmjs.com/package/better-wechatpay)
|
|
10
|
+
[](LICENSE)
|
|
11
|
+

|
|
12
|
+
|
|
13
|
+
[**在线文档**](https://better-wechatpay.vikingz.me)
|
|
14
|
+
|
|
15
|
+
</div>
|
|
26
16
|
|
|
27
17
|
## 特性
|
|
28
18
|
|
|
@@ -55,6 +45,9 @@ const wechat = new WeChatPay({
|
|
|
55
45
|
apiKey: process.env.WECHAT_PAY_API_KEY,
|
|
56
46
|
privateKey: process.env.WECHAT_PAY_PRIVATE_KEY,
|
|
57
47
|
publicKey: process.env.WECHAT_PAY_PUBLIC_KEY,
|
|
48
|
+
// 可选但推荐:微信支付公钥验签(无有效期限制)
|
|
49
|
+
paymentPublicKey: process.env.WECHAT_PAY_PAYMENT_PUBLIC_KEY,
|
|
50
|
+
publicKeyId: process.env.WECHAT_PAY_PUBLIC_KEY_ID,
|
|
58
51
|
notifyUrl: 'https://your-domain.com/webhook/wechat'
|
|
59
52
|
}
|
|
60
53
|
});
|
|
@@ -79,7 +72,7 @@ WECHAT_PAY_APP_ID="your_app_id"
|
|
|
79
72
|
WECHAT_PAY_MCH_ID="your_mch_id"
|
|
80
73
|
WECHAT_PAY_API_KEY="32_character_api_key"
|
|
81
74
|
|
|
82
|
-
# 证书(PEM
|
|
75
|
+
# 证书(PEM 格式,多行/单行均可)
|
|
83
76
|
WECHAT_PAY_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----
|
|
84
77
|
MIIEvQIBADANBgkq...
|
|
85
78
|
-----END PRIVATE KEY-----"
|
|
@@ -88,12 +81,16 @@ WECHAT_PAY_PUBLIC_KEY="-----BEGIN CERTIFICATE-----
|
|
|
88
81
|
MIID8zCCAtugAwIB...
|
|
89
82
|
-----END CERTIFICATE-----"
|
|
90
83
|
|
|
91
|
-
#
|
|
84
|
+
# 可选但推荐:微信支付公钥(用于验签,无有效期限制)
|
|
85
|
+
# 获取位置:商户平台 → 账户中心 → API安全 → 微信支付公钥
|
|
92
86
|
WECHAT_PAY_PAYMENT_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----
|
|
93
87
|
MIIEvgIBADAN...
|
|
94
88
|
-----END PUBLIC KEY-----"
|
|
95
89
|
|
|
96
|
-
|
|
90
|
+
# 公钥 ID(下载公钥时显示,必须与公钥配对使用)
|
|
91
|
+
# 获取位置:商户平台 → 账户中心 → API安全 → 微信支付公钥
|
|
92
|
+
# 格式如:PUB_KEY_ID_0000000000000024101100397200000006
|
|
93
|
+
WECHAT_PAY_PUBLIC_KEY_ID="PUB_KEY_ID_xxxx"
|
|
97
94
|
```
|
|
98
95
|
|
|
99
96
|
## 支付方式
|
|
@@ -149,158 +146,6 @@ const payment = await wechat.h5.create({
|
|
|
149
146
|
// 返回: { h5_url: 'https://wx.tenpay.com/...', out_trade_no: 'order-123' }
|
|
150
147
|
```
|
|
151
148
|
|
|
152
|
-
## 通用操作
|
|
153
|
-
|
|
154
|
-
所有支付方式都支持以下操作:
|
|
155
|
-
|
|
156
|
-
### 查询订单
|
|
157
|
-
|
|
158
|
-
```typescript
|
|
159
|
-
// 通过商户订单号查询
|
|
160
|
-
const order = await wechat.native.query({ out_trade_no: 'order-123' });
|
|
161
|
-
|
|
162
|
-
// 通过微信订单号查询
|
|
163
|
-
const order = await wechat.native.queryByTransactionId({ transaction_id: 'txn-123' });
|
|
164
|
-
|
|
165
|
-
console.log('订单状态:', order.trade_state);
|
|
166
|
-
console.log('微信订单号:', order.transaction_id);
|
|
167
|
-
console.log('金额:', order.amount.total);
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### 关闭订单
|
|
171
|
-
|
|
172
|
-
```typescript
|
|
173
|
-
await wechat.native.close('order-123');
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
### 申请退款
|
|
177
|
-
|
|
178
|
-
```typescript
|
|
179
|
-
const refund = await wechat.native.refund({
|
|
180
|
-
out_trade_no: 'order-123',
|
|
181
|
-
out_refund_no: 'refund-123',
|
|
182
|
-
refund: 99.00,
|
|
183
|
-
total: 99.00,
|
|
184
|
-
reason: '商品售后'
|
|
185
|
-
});
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
### 查询退款
|
|
189
|
-
|
|
190
|
-
```typescript
|
|
191
|
-
const refund = await wechat.native.queryRefund({ out_refund_no: 'refund-123' });
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
### 申请账单
|
|
195
|
-
|
|
196
|
-
```typescript
|
|
197
|
-
// 交易账单
|
|
198
|
-
const tradeBill = await wechat.native.applyTradeBill({
|
|
199
|
-
bill_date: '2025-01-01',
|
|
200
|
-
bill_type: 'ALL'
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
// 资金账单
|
|
204
|
-
const fundBill = await wechat.native.applyFundFlowBill({
|
|
205
|
-
bill_date: '2025-01-01',
|
|
206
|
-
account_type: 'BASIC'
|
|
207
|
-
});
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
## 自定义 API 调用
|
|
211
|
-
|
|
212
|
-
SDK 暴露了底层 HTTP 客户端,可用于调用未实现的微信支付 API:
|
|
213
|
-
|
|
214
|
-
```typescript
|
|
215
|
-
const result = await wechat.request<CustomResponse>(
|
|
216
|
-
'POST',
|
|
217
|
-
'/v3/custom/endpoint',
|
|
218
|
-
{ custom_param: 'value' }
|
|
219
|
-
);
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
这对于调用新推出的微信支付 API 或特殊业务场景非常有用。
|
|
223
|
-
|
|
224
|
-
## Webhook 处理
|
|
225
|
-
|
|
226
|
-
```typescript
|
|
227
|
-
import { createServer } from 'http';
|
|
228
|
-
|
|
229
|
-
const server = createServer(async (req, res) => {
|
|
230
|
-
if (req.url === '/webhook/wechat') {
|
|
231
|
-
let body = '';
|
|
232
|
-
req.on('data', chunk => body += chunk);
|
|
233
|
-
req.on('end', async () => {
|
|
234
|
-
const result = await wechat.webhook.verify({
|
|
235
|
-
headers: req.headers as any,
|
|
236
|
-
body
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
if (result.success) {
|
|
240
|
-
console.log('Webhook 验证成功:', result.eventType);
|
|
241
|
-
console.log('解密数据:', result.decryptedData);
|
|
242
|
-
res.writeHead(200);
|
|
243
|
-
res.end('OK');
|
|
244
|
-
} else {
|
|
245
|
-
console.error('Webhook 签名无效');
|
|
246
|
-
res.writeHead(400);
|
|
247
|
-
res.end('Invalid signature');
|
|
248
|
-
}
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
});
|
|
252
|
-
|
|
253
|
-
server.listen(3000);
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
## 调试模式
|
|
257
|
-
|
|
258
|
-
启用调试日志:
|
|
259
|
-
|
|
260
|
-
```typescript
|
|
261
|
-
const wechat = new WeChatPay({
|
|
262
|
-
config: {
|
|
263
|
-
/* ... 配置 ... */
|
|
264
|
-
debug: true
|
|
265
|
-
}
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
// 或通过环境变量
|
|
269
|
-
WECHAT_PAY_DEBUG=true node app.js
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
调试输出包含:
|
|
273
|
-
- 请求详情(URL、方法、请求头、请求体)
|
|
274
|
-
- 响应详情(状态码、响应头、响应体)
|
|
275
|
-
- 签名验证结果
|
|
276
|
-
- 错误详情
|
|
277
|
-
|
|
278
|
-
## 配置选项
|
|
279
|
-
|
|
280
|
-
```typescript
|
|
281
|
-
interface WeChatPayConfig {
|
|
282
|
-
appId: string; // 应用 ID
|
|
283
|
-
mchId: string; // 商户号
|
|
284
|
-
apiKey: string; // API 密钥(32位)
|
|
285
|
-
privateKey: Buffer | string; // 商户私钥
|
|
286
|
-
publicKey: Buffer | string; // 商户证书
|
|
287
|
-
paymentPublicKey?: Buffer | string; // 微信支付公钥(可选,推荐)
|
|
288
|
-
publicKeyId?: string; // 公钥 ID(使用 paymentPublicKey 时必填)
|
|
289
|
-
notifyUrl?: string; // 回调通知地址
|
|
290
|
-
baseUrl?: string; // API 基础 URL(默认生产环境)
|
|
291
|
-
debug?: boolean; // 调试模式
|
|
292
|
-
}
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
## 安全注意事项
|
|
296
|
-
|
|
297
|
-
1. **永远不要将证书或密钥提交到版本控制**
|
|
298
|
-
2. **将敏感凭证存储在环境变量中**
|
|
299
|
-
3. **始终验证 Webhook 签名**
|
|
300
|
-
4. **Webhook URL 必须使用 HTTPS**
|
|
301
|
-
5. **定期轮换证书**
|
|
302
|
-
|
|
303
|
-
详见 [安全指南](docs/security.md)。
|
|
304
149
|
|
|
305
150
|
## 文档
|
|
306
151
|
|
package/dist/core/verify.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { WeChatPayConfig } from '../types/index.js';
|
|
2
2
|
export declare class Verifier {
|
|
3
3
|
private config;
|
|
4
|
+
private instance?;
|
|
4
5
|
private publicKey;
|
|
5
6
|
private serialNo;
|
|
6
7
|
private platformCertificates;
|
|
7
|
-
constructor(config: WeChatPayConfig);
|
|
8
|
+
constructor(config: WeChatPayConfig, instance?: object | undefined);
|
|
8
9
|
private loadPublicKey;
|
|
9
10
|
private getSerialNumber;
|
|
10
11
|
getMerchantSerialNo(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/core/verify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/core/verify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,qBAAa,QAAQ;IAKP,OAAO,CAAC,MAAM;IAAmB,OAAO,CAAC,QAAQ,CAAC;IAJ9D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,oBAAoB,CAA6B;gBAErC,MAAM,EAAE,eAAe,EAAU,QAAQ,CAAC,EAAE,MAAM,YAAA;IAKtE,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,eAAe;IAKvB,mBAAmB,IAAI,MAAM;IAI7B,YAAY,IAAI,MAAM;IAItB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAI5D,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI3C,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC;CAiCpB"}
|
package/dist/core/verify.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { createVerify } from 'crypto';
|
|
2
2
|
import { X509Certificate } from '@peculiar/x509';
|
|
3
|
+
import { logger } from './debug.js';
|
|
3
4
|
export class Verifier {
|
|
4
5
|
config;
|
|
6
|
+
instance;
|
|
5
7
|
publicKey;
|
|
6
8
|
serialNo;
|
|
7
9
|
platformCertificates = new Map();
|
|
8
|
-
constructor(config) {
|
|
10
|
+
constructor(config, instance) {
|
|
9
11
|
this.config = config;
|
|
12
|
+
this.instance = instance;
|
|
10
13
|
this.publicKey = this.loadPublicKey();
|
|
11
14
|
this.serialNo = this.getSerialNumber(this.publicKey);
|
|
12
15
|
}
|
|
@@ -35,6 +38,7 @@ export class Verifier {
|
|
|
35
38
|
async verify(timestamp, nonce, body, signature, serialNo) {
|
|
36
39
|
const message = `${timestamp}\n${nonce}\n${body}\n`;
|
|
37
40
|
if (this.config.paymentPublicKey && this.config.publicKeyId && serialNo === this.config.publicKeyId) {
|
|
41
|
+
logger.log(this.instance || {}, 'Verifying signature with payment public key', { serialNo });
|
|
38
42
|
const paymentPublicKey = typeof this.config.paymentPublicKey === 'string'
|
|
39
43
|
? Buffer.from(this.config.paymentPublicKey)
|
|
40
44
|
: this.config.paymentPublicKey;
|
|
@@ -53,6 +57,7 @@ export class Verifier {
|
|
|
53
57
|
return false;
|
|
54
58
|
}
|
|
55
59
|
try {
|
|
60
|
+
logger.log(this.instance || {}, 'Verifying signature with platform certificate', { serialNo });
|
|
56
61
|
const verify = createVerify('RSA-SHA256');
|
|
57
62
|
verify.update(message);
|
|
58
63
|
const isValid = verify.verify(platformPublicKey, signature, 'base64');
|
package/dist/core/verify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/core/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/core/verify.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,qBAAa,SAAS;IACpB,SAAgB,MAAM,EAAE,GAAG,CAAC;IAC5B,SAAgB,MAAM,EAAE,aAAa,CAAC;IACtC,SAAgB,KAAK,EAAE,YAAY,CAAC;IACpC,SAAgB,GAAG,EAAE,UAAU,CAAC;IAChC,SAAgB,EAAE,EAAE,SAAS,CAAC;IAC9B,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;gBAE5B,OAAO,EAAE,GAAG;IAsBxB;;;;;;OAMG;IACU,OAAO,CAAC,CAAC,GAAG,GAAG,EAC1B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,EACnD,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,GACT,OAAO,CAAC,CAAC,CAAC;YAIC,sBAAsB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,qBAAa,SAAS;IACpB,SAAgB,MAAM,EAAE,GAAG,CAAC;IAC5B,SAAgB,MAAM,EAAE,aAAa,CAAC;IACtC,SAAgB,KAAK,EAAE,YAAY,CAAC;IACpC,SAAgB,GAAG,EAAE,UAAU,CAAC;IAChC,SAAgB,EAAE,EAAE,SAAS,CAAC;IAC9B,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;gBAE5B,OAAO,EAAE,GAAG;IAsBxB;;;;;;OAMG;IACU,OAAO,CAAC,CAAC,GAAG,GAAG,EAC1B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,EACnD,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,GACT,OAAO,CAAC,CAAC,CAAC;YAIC,sBAAsB;WAUhB,UAAU,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC;CASjE;AAED,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,eAAe,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -22,9 +22,9 @@ export class WeChatPay {
|
|
|
22
22
|
const config = loadConfig(options);
|
|
23
23
|
setDebugEnabled(this, config.debug || false);
|
|
24
24
|
const signer = new Signer(config);
|
|
25
|
-
const verifier = new Verifier(config);
|
|
25
|
+
const verifier = new Verifier(config, this);
|
|
26
26
|
const cryptoUtils = new CryptoUtils(config);
|
|
27
|
-
const httpClient = new HttpClient(config, signer, verifier);
|
|
27
|
+
const httpClient = new HttpClient(config, signer, verifier, this);
|
|
28
28
|
const certManager = new CertificateManager(config, verifier, cryptoUtils, this);
|
|
29
29
|
this.config = config;
|
|
30
30
|
this.httpClient = httpClient;
|
|
@@ -46,9 +46,7 @@ export class WeChatPay {
|
|
|
46
46
|
return this.httpClient.request(method, url, data);
|
|
47
47
|
}
|
|
48
48
|
async initializeCertificates(certManager, httpClient, config) {
|
|
49
|
-
|
|
50
|
-
await certManager.fetchCertificates(() => httpClient.request('GET', '/v3/certificates', undefined, true));
|
|
51
|
-
}
|
|
49
|
+
await certManager.fetchCertificates(() => httpClient.request('GET', '/v3/certificates', undefined, true));
|
|
52
50
|
}
|
|
53
51
|
static async initialize(options) {
|
|
54
52
|
const instance = new WeChatPay(options);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,MAAM,OAAO,SAAS;IACJ,MAAM,CAAM;IACZ,MAAM,CAAgB;IACtB,KAAK,CAAe;IACpB,GAAG,CAAa;IAChB,EAAE,CAAY;IACd,OAAO,CAAU;IAChB,UAAU,CAAa;IAExC,YAAY,OAAY;QACtB,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACnC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;QAE7C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|