@vobs/payment 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/alipay/client.cjs +31 -8
- package/dist/alipay/client.cjs.map +1 -1
- package/dist/alipay/client.js +6 -5
- package/dist/alipay/client.js.map +1 -1
- package/dist/alipay/config.cjs +27 -5
- package/dist/alipay/config.cjs.map +1 -1
- package/dist/alipay/config.js +3 -3
- package/dist/alipay/config.js.map +1 -1
- package/dist/alipay/index.cjs +56 -177
- package/dist/alipay/index.cjs.map +1 -1
- package/dist/alipay/index.js +17 -162
- package/dist/alipay/index.js.map +1 -1
- package/dist/alipay/notify.cjs +27 -5
- package/dist/alipay/notify.cjs.map +1 -1
- package/dist/alipay/notify.js +3 -3
- package/dist/alipay/notify.js.map +1 -1
- package/dist/alipay/payment.cjs +27 -5
- package/dist/alipay/payment.cjs.map +1 -1
- package/dist/alipay/payment.js +3 -3
- package/dist/alipay/payment.js.map +1 -1
- package/dist/alipay/plugin.cjs +36 -165
- package/dist/alipay/plugin.cjs.map +1 -1
- package/dist/alipay/plugin.js +9 -160
- package/dist/alipay/plugin.js.map +1 -1
- package/dist/alipay/query.cjs +29 -5
- package/dist/alipay/query.cjs.map +1 -1
- package/dist/alipay/query.js +3 -3
- package/dist/alipay/query.js.map +1 -1
- package/dist/alipay/refund.cjs +29 -5
- package/dist/alipay/refund.cjs.map +1 -1
- package/dist/alipay/refund.js +3 -3
- package/dist/alipay/refund.js.map +1 -1
- package/dist/alipay/response.cjs +29 -6
- package/dist/alipay/response.cjs.map +1 -1
- package/dist/alipay/response.js +4 -3
- package/dist/alipay/response.js.map +1 -1
- package/dist/alipay/types.cjs +18 -2
- package/dist/alipay/types.cjs.map +1 -1
- package/dist/alipay/types.js +0 -2
- package/dist/alipay/types.js.map +1 -1
- package/dist/alipay/wap.cjs +27 -5
- package/dist/alipay/wap.cjs.map +1 -1
- package/dist/alipay/wap.js +3 -3
- package/dist/alipay/wap.js.map +1 -1
- package/dist/index.cjs +85 -194
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +38 -167
- package/dist/index.js.map +1 -1
- package/dist/wechat/client.cjs +31 -8
- package/dist/wechat/client.cjs.map +1 -1
- package/dist/wechat/client.js +6 -5
- package/dist/wechat/client.js.map +1 -1
- package/dist/wechat/config.cjs +27 -5
- package/dist/wechat/config.cjs.map +1 -1
- package/dist/wechat/config.js +3 -3
- package/dist/wechat/config.js.map +1 -1
- package/dist/wechat/index.cjs +64 -181
- package/dist/wechat/index.cjs.map +1 -1
- package/dist/wechat/index.js +23 -164
- package/dist/wechat/index.js.map +1 -1
- package/dist/wechat/notify.cjs +33 -10
- package/dist/wechat/notify.cjs.map +1 -1
- package/dist/wechat/notify.js +6 -5
- package/dist/wechat/notify.js.map +1 -1
- package/dist/wechat/payment.cjs +33 -10
- package/dist/wechat/payment.cjs.map +1 -1
- package/dist/wechat/payment.js +6 -5
- package/dist/wechat/payment.js.map +1 -1
- package/dist/wechat/plugin.cjs +36 -165
- package/dist/wechat/plugin.cjs.map +1 -1
- package/dist/wechat/plugin.js +9 -160
- package/dist/wechat/plugin.js.map +1 -1
- package/dist/wechat/refund.cjs +29 -5
- package/dist/wechat/refund.cjs.map +1 -1
- package/dist/wechat/refund.js +3 -3
- package/dist/wechat/refund.js.map +1 -1
- package/dist/wechat/response.cjs +31 -7
- package/dist/wechat/response.cjs.map +1 -1
- package/dist/wechat/response.js +5 -3
- package/dist/wechat/response.js.map +1 -1
- package/dist/wechat/types.cjs +18 -2
- package/dist/wechat/types.cjs.map +1 -1
- package/dist/wechat/types.js +0 -2
- package/dist/wechat/types.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/alipay/response.ts"],"
|
|
1
|
+
{"version":3,"sources":["../../src/alipay/response.ts"],"sourcesContent":["/**\n * 支付宝开放接口响应解包与业务错误检查。\n *\n * 网关应答(HTTP 200)不代表业务成功:业务失败时响应体内\n * code != '10000' 并携带 sub_code/sub_msg,必须显式检查,\n * 否则会把失败结果当成功映射(字段全部 undefined)。\n */\nexport class AlipayApiError extends Error {\n readonly code: string\n readonly subCode?: string\n readonly subMsg?: string\n\n constructor(apiName: string, code: string, subCode: string | undefined, subMsg: string | undefined, msg: string | undefined) {\n super(`支付宝接口 ${apiName} 调用失败: ${subMsg ?? msg ?? '未知错误'} (code=${code}${subCode ? `, sub_code=${subCode}` : ''})`)\n this.name = 'AlipayApiError'\n this.code = code\n this.subCode = subCode\n this.subMsg = subMsg\n }\n}\n\n/** alipay.trade.page.pay -> alipay_trade_page_pay_response */\nfunction toResponseKey(apiName: string): string {\n return `${apiName.replace(/\\./g, '_')}_response`\n}\n\n/**\n * 从网关应答中取出业务响应体,code !== '10000' 时抛出 AlipayApiError。\n */\nexport function unwrapResponse(raw: unknown, apiName: string): Record<string, any> {\n const outer = raw as Record<string, any> | null | undefined\n const body = (outer && outer[toResponseKey(apiName)]) ?? outer\n if (!body || typeof body !== 'object') {\n throw new AlipayApiError(apiName, 'INVALID_RESPONSE', undefined, undefined, '响应体格式异常')\n }\n if (body.code !== '10000') {\n throw new AlipayApiError(apiName, body.code, body.sub_code, body.sub_msg, body.msg)\n }\n return body\n}\n"],"mappings":";;;;AAOO,IAAM,kBAAN,MAAM,wBAAuB,MAAM;AAAA,EAKxC,YAAY,SAAiB,MAAc,SAA6B,QAA4B,KAAyB;AAC3H,UAAM,kCAAS,OAAO,8BAAU,UAAU,OAAO,0BAAM,UAAU,IAAI,GAAG,UAAU,cAAc,OAAO,KAAK,EAAE,GAAG;AACjH,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,UAAU;AACf,SAAK,SAAS;AAAA,EAChB;AACF;AAZ0C;AAAnC,IAAM,iBAAN;AAeP,SAAS,cAAc,SAAyB;AAC9C,SAAO,GAAG,QAAQ,QAAQ,OAAO,GAAG,CAAC;AACvC;AAFS;AAOF,SAAS,eAAe,KAAc,SAAsC;AACjF,QAAM,QAAQ;AACd,QAAM,QAAQ,SAAS,MAAM,cAAc,OAAO,CAAC,MAAM;AACzD,MAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrC,UAAM,IAAI,eAAe,SAAS,oBAAoB,QAAW,QAAW,4CAAS;AAAA,EACvF;AACA,MAAI,KAAK,SAAS,SAAS;AACzB,UAAM,IAAI,eAAe,SAAS,KAAK,MAAM,KAAK,UAAU,KAAK,SAAS,KAAK,GAAG;AAAA,EACpF;AACA,SAAO;AACT;AAVgB;","names":[]}
|
package/dist/alipay/types.cjs
CHANGED
|
@@ -1,4 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
var __VOBS_CJS_FILE_URL = require("url").pathToFileURL(__filename).href;
|
|
2
|
+
"use strict";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __copyProps = (to, from, except, desc) => {
|
|
8
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
9
|
+
for (let key of __getOwnPropNames(from))
|
|
10
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
11
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
12
|
+
}
|
|
13
|
+
return to;
|
|
14
|
+
};
|
|
15
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
2
16
|
|
|
3
|
-
|
|
17
|
+
// packages/payment/src/alipay/types.ts
|
|
18
|
+
var types_exports = {};
|
|
19
|
+
module.exports = __toCommonJS(types_exports);
|
|
4
20
|
//# sourceMappingURL=types.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"
|
|
1
|
+
{"version":3,"sources":["../../src/alipay/types.ts"],"sourcesContent":["import type { AlipaySdkConfig, AlipaySdkSignType } from 'alipay-sdk'\n\n// ---- 重新导出 alipay-sdk 类型 ----\nexport type { AlipaySdkConfig, AlipaySdkSignType }\n\n// ---- 电脑网站支付 (alipay.trade.page.pay) ----\nexport interface AlipayPagePayParams {\n /** 商户订单号,需保证唯一 */\n outTradeNo: string\n /** 订单总金额,单位元,精确到两位小数 */\n totalAmount: string\n /** 订单标题 */\n subject: string\n /** 产品代码,电脑网站支付固定为 FAST_INSTANT_TRADE_PAY */\n productCode?: string\n /** 订单描述 */\n body?: string\n /** 绝对超时时间,格式 yyyy-MM-dd HH:mm:ss */\n timeExpire?: string\n /** 订单相对超时时间,范围 1m~15d */\n timeoutExpress?: string\n /** 商品主类型:0-虚拟,1-实物 */\n goodsType?: '0' | '1'\n /** 公用回传参数,异步通知时原样返回 */\n passbackParams?: string\n /** 支付完成后同步跳转地址 */\n returnUrl?: string\n /** 异步通知地址 */\n notifyUrl?: string\n /** 扩展信息 */\n extendParams?: Record<string, string>\n /** 商户门店编号 */\n storeId?: string\n /** 是否发起实名校验 */\n qrPayMode?: string\n /** 扫码支付模式 */\n qrcodeWidth?: string\n}\n\nexport interface AlipayPagePayResult {\n /** 支付宝返回的 HTML 表单字符串 */\n formHtml: string\n}\n\n// ---- 手机网站支付 (alipay.trade.wap.pay) ----\nexport interface AlipayWapPayParams {\n /** 商户订单号,需保证唯一 */\n outTradeNo: string\n /** 订单总金额,单位元,精确到两位小数 */\n totalAmount: string\n /** 订单标题 */\n subject: string\n /** 产品代码,手机网站支付固定为 QUICK_WAP_WAY */\n productCode?: string\n /** 订单描述 */\n body?: string\n /** 绝对超时时间,格式 yyyy-MM-dd HH:mm:ss */\n timeExpire?: string\n /** 订单相对超时时间,范围 1m~15d */\n timeoutExpress?: string\n /** 公用回传参数,异步通知时原样返回 */\n passbackParams?: string\n /** 用户付款中途退出后返回的商户页面地址 */\n quitUrl?: string\n /** 支付完成后同步跳转地址 */\n returnUrl?: string\n /** 异步通知地址 */\n notifyUrl?: string\n}\n\nexport interface AlipayWapPayResult {\n /** 支付宝返回的 HTML 表单字符串 */\n formHtml: string\n}\n\n// ---- 交易查询 (alipay.trade.query) ----\nexport interface AlipayQueryParams {\n outTradeNo?: string\n tradeNo?: string\n}\n\nexport interface AlipayQueryResult {\n /** 支付宝交易号 */\n tradeNo: string\n /** 商户订单号 */\n outTradeNo: string\n /** 买家支付宝账号 */\n buyerLogonId: string\n /** 交易状态 */\n tradeStatus: TradeStatus\n /** 交易的订单金额 */\n totalAmount: string\n /** 实收金额 */\n receiptAmount: string\n /** 买家实付金额 */\n buyerPayAmount: string\n /** 交易创建时间 */\n sendPayDate: string\n /** 交易付款时间 */\n gmtPayment: string | null\n /** 交易关闭时间 */\n gmtClose: string | null\n /** 退款金额 */\n refundAmount: string\n /** 商品描述 */\n subject: string\n /** 商户传入的回传参数 */\n passbackParams: string | null\n /** 本次交易支付工具 */\n fundChannel: string | null\n}\n\n// ---- 交易退款 (alipay.trade.refund) ----\nexport interface AlipayRefundParams {\n outTradeNo?: string\n tradeNo?: string\n refundAmount: string\n refundReason?: string\n outRequestNo?: string\n refundCurrency?: string\n}\n\nexport interface AlipayRefundResult {\n /** 支付宝交易号 */\n tradeNo: string\n /** 商户订单号 */\n outTradeNo: string\n /** 买家支付宝账号 */\n buyerLogonId: string\n /** 本次退款请求金额 */\n refundAmount: string\n /** 资金变动明细 */\n fundChange: string\n /** 退款时间 */\n gmtRefundPay: string\n /** 退款金额(含各渠道) */\n refundDetailItemList: Array<{\n contributionType: string\n amount: string\n }> | null\n}\n\n// ---- 交易关闭 (alipay.trade.close) ----\nexport interface AlipayCloseParams {\n outTradeNo?: string\n tradeNo?: string\n}\n\nexport interface AlipayCloseResult {\n /** 支付宝交易号 */\n tradeNo: string\n /** 商户订单号 */\n outTradeNo: string\n}\n\n// ---- 退款查询 (alipay.trade.fastpay.refund.query) ----\nexport interface AlipayRefundQueryParams {\n outTradeNo?: string\n tradeNo?: string\n outRequestNo: string\n}\n\nexport interface AlipayRefundQueryResult {\n /** 支付宝交易号 */\n tradeNo: string\n /** 商户订单号 */\n outTradeNo: string\n /** 退款金额 */\n refundAmount: string\n /** 退款状态 */\n refundStatus: string\n /** 退款请求号 */\n outRequestNo: string\n /** 退款原因 */\n refundReason: string\n}\n\n// ---- 异步通知 ----\nexport interface AlipayNotifyParams {\n [key: string]: string | undefined\n notifyTime: string\n notifyType: string\n notifyId: string\n appId: string\n charset: string\n version: string\n signType: string\n sign: string\n tradeNo: string\n outTradeNo: string\n outBizNo?: string\n buyerId: string\n buyerLogonId: string\n sellerId: string\n sellerEmail: string\n tradeStatus: string\n totalAmount: string\n receiptAmount: string\n invoiceAmount: string\n buyerPayAmount: string\n pointAmount: string\n refundFee: string\n subject: string\n body: string\n gmtCreate: string\n gmtPayment: string\n gmtClose: string\n fundBillList: string\n passbackParams: string\n voucherDetailList: string\n}\n\n// ---- 通用 ----\nexport type TradeStatus =\n | 'WAIT_BUYER_PAY'\n | 'TRADE_CLOSED'\n | 'TRADE_SUCCESS'\n | 'TRADE_FINISHED'\n\nexport type AlipayKeyType = 'PKCS1' | 'PKCS8'\n\nexport interface AlipayClientOptions {\n /** 应用 ID */\n appId: string\n /** 应用私钥(Node.js 使用 PKCS#1 格式) */\n privateKey: string\n /** 支付宝公钥 */\n alipayPublicKey: string\n /** 签名类型,默认 RSA2 */\n signType?: AlipaySdkSignType\n /** 网关地址,沙箱使用沙箱网关 */\n gateway?: string\n /** 异步通知地址 */\n notifyUrl?: string\n /** 同步跳转地址 */\n returnUrl?: string\n /** 私钥类型,默认 PKCS1(Node.js 使用 PKCS1) */\n keyType?: AlipayKeyType\n /** 请求超时时间,默认 5000ms */\n timeout?: number\n}\n\n/** 电脑网站支付配置 */\nexport interface AlipayPagePayConfig {\n /** 商户订单号 */\n outTradeNo: string\n /** 订单总金额,单位元 */\n totalAmount: string\n /** 订单标题 */\n subject: string\n /** 订单描述 */\n body?: string\n /** 公用回传参数 */\n passbackParams?: string\n}\n\n/** 手机网站支付配置 */\nexport interface AlipayWapPayConfig {\n /** 商户订单号 */\n outTradeNo: string\n /** 订单总金额,单位元 */\n totalAmount: string\n /** 订单标题 */\n subject: string\n /** 订单描述 */\n body?: string\n /** 公用回传参数 */\n passbackParams?: string\n /** 用户付款中途退出后返回的商户页面地址(wap 支付必填) */\n quitUrl?: string\n}"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
package/dist/alipay/types.js
CHANGED
package/dist/alipay/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/alipay/wap.cjs
CHANGED
|
@@ -1,9 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __VOBS_CJS_FILE_URL = require("url").pathToFileURL(__filename).href;
|
|
2
|
+
"use strict";
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
7
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
5
21
|
|
|
6
22
|
// packages/payment/src/alipay/wap.ts
|
|
23
|
+
var wap_exports = {};
|
|
24
|
+
__export(wap_exports, {
|
|
25
|
+
createWapPay: () => createWapPay
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(wap_exports);
|
|
7
28
|
function createWapPay(client) {
|
|
8
29
|
return {
|
|
9
30
|
/**
|
|
@@ -44,7 +65,8 @@ function sanitizeParams(params) {
|
|
|
44
65
|
return result;
|
|
45
66
|
}
|
|
46
67
|
__name(sanitizeParams, "sanitizeParams");
|
|
47
|
-
|
|
48
|
-
exports
|
|
49
|
-
|
|
68
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
69
|
+
0 && (module.exports = {
|
|
70
|
+
createWapPay
|
|
71
|
+
});
|
|
50
72
|
//# sourceMappingURL=wap.cjs.map
|
package/dist/alipay/wap.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/alipay/wap.ts"],"
|
|
1
|
+
{"version":3,"sources":["../../src/alipay/wap.ts"],"sourcesContent":["import type { AlipayClient } from './client'\nimport type { AlipayWapPayConfig, AlipayWapPayParams, AlipayWapPayResult } from './types'\n\n/**\n * 手机网站支付 (alipay.trade.wap.pay)\n *\n * 移动端浏览器内拉起支付宝收银台,生成表单 HTML 由前端提交跳转。\n *\n * ⚠️ 必须使用 pageExecute() 方法,禁止使用 exec()。\n * ⚠️ 返回值为 HTML 表单字符串,前端必须渲染 form 并自动提交。\n * ⚠️ 支付结果以异步通知或查询接口为准,不可依赖同步跳转。\n */\nexport function createWapPay(client: AlipayClient) {\n return {\n /**\n * 发起手机网站支付\n * @param config 支付配置\n * @returns 支付表单 HTML\n */\n async pay(config: AlipayWapPayConfig): Promise<AlipayWapPayResult> {\n const { outTradeNo, totalAmount, subject, body, passbackParams, quitUrl } = config\n\n const bizParams: AlipayWapPayParams = {\n outTradeNo,\n totalAmount,\n subject,\n productCode: 'QUICK_WAP_WAY',\n body,\n passbackParams,\n quitUrl,\n returnUrl: client.config.returnUrl,\n notifyUrl: client.config.notifyUrl\n }\n\n const formHtml = client.sdk.pageExecute(\n 'alipay.trade.wap.pay',\n 'POST',\n { bizContent: sanitizeParams(bizParams) }\n )\n\n return { formHtml }\n }\n }\n}\n\n/** 移除 undefined 字段 */\nfunction sanitizeParams<T extends Record<string, any>>(params: T): Record<string, any> {\n const result: Record<string, any> = {}\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null) {\n result[key] = value\n }\n }\n return result\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAYO,SAAS,aAAa,QAAsB;AACjD,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAML,MAAM,IAAI,QAAyD;AACjE,YAAM,EAAE,YAAY,aAAa,SAAS,MAAM,gBAAgB,QAAQ,IAAI;AAE5E,YAAM,YAAgC;AAAA,QACpC;AAAA,QACA;AAAA,QACA;AAAA,QACA,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,OAAO,OAAO;AAAA,QACzB,WAAW,OAAO,OAAO;AAAA,MAC3B;AAEA,YAAM,WAAW,OAAO,IAAI;AAAA,QAC1B;AAAA,QACA;AAAA,QACA,EAAE,YAAY,eAAe,SAAS,EAAE;AAAA,MAC1C;AAEA,aAAO,EAAE,SAAS;AAAA,IACpB;AAAA,EACF;AACF;AA/BgB;AAkChB,SAAS,eAA8C,QAAgC;AACrF,QAAM,SAA8B,CAAC;AACrC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,QAAI,UAAU,UAAa,UAAU,MAAM;AACzC,aAAO,GAAG,IAAI;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AACT;AARS;","names":[]}
|
package/dist/alipay/wap.js
CHANGED
package/dist/alipay/wap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/alipay/wap.ts"],"
|
|
1
|
+
{"version":3,"sources":["../../src/alipay/wap.ts"],"sourcesContent":["import type { AlipayClient } from './client'\nimport type { AlipayWapPayConfig, AlipayWapPayParams, AlipayWapPayResult } from './types'\n\n/**\n * 手机网站支付 (alipay.trade.wap.pay)\n *\n * 移动端浏览器内拉起支付宝收银台,生成表单 HTML 由前端提交跳转。\n *\n * ⚠️ 必须使用 pageExecute() 方法,禁止使用 exec()。\n * ⚠️ 返回值为 HTML 表单字符串,前端必须渲染 form 并自动提交。\n * ⚠️ 支付结果以异步通知或查询接口为准,不可依赖同步跳转。\n */\nexport function createWapPay(client: AlipayClient) {\n return {\n /**\n * 发起手机网站支付\n * @param config 支付配置\n * @returns 支付表单 HTML\n */\n async pay(config: AlipayWapPayConfig): Promise<AlipayWapPayResult> {\n const { outTradeNo, totalAmount, subject, body, passbackParams, quitUrl } = config\n\n const bizParams: AlipayWapPayParams = {\n outTradeNo,\n totalAmount,\n subject,\n productCode: 'QUICK_WAP_WAY',\n body,\n passbackParams,\n quitUrl,\n returnUrl: client.config.returnUrl,\n notifyUrl: client.config.notifyUrl\n }\n\n const formHtml = client.sdk.pageExecute(\n 'alipay.trade.wap.pay',\n 'POST',\n { bizContent: sanitizeParams(bizParams) }\n )\n\n return { formHtml }\n }\n }\n}\n\n/** 移除 undefined 字段 */\nfunction sanitizeParams<T extends Record<string, any>>(params: T): Record<string, any> {\n const result: Record<string, any> = {}\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null) {\n result[key] = value\n }\n }\n return result\n}\n"],"mappings":";;;;AAYO,SAAS,aAAa,QAAsB;AACjD,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAML,MAAM,IAAI,QAAyD;AACjE,YAAM,EAAE,YAAY,aAAa,SAAS,MAAM,gBAAgB,QAAQ,IAAI;AAE5E,YAAM,YAAgC;AAAA,QACpC;AAAA,QACA;AAAA,QACA;AAAA,QACA,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,OAAO,OAAO;AAAA,QACzB,WAAW,OAAO,OAAO;AAAA,MAC3B;AAEA,YAAM,WAAW,OAAO,IAAI;AAAA,QAC1B;AAAA,QACA;AAAA,QACA,EAAE,YAAY,eAAe,SAAS,EAAE;AAAA,MAC1C;AAEA,aAAO,EAAE,SAAS;AAAA,IACpB;AAAA,EACF;AACF;AA/BgB;AAkChB,SAAS,eAA8C,QAAgC;AACrF,QAAM,SAA8B,CAAC;AACrC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,QAAI,UAAU,UAAa,UAAU,MAAM;AACzC,aAAO,GAAG,IAAI;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AACT;AARS;","names":[]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,14 +1,47 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var alipaySdk = require('alipay-sdk');
|
|
4
|
-
var wechatpayAxiosPlugin = require('wechatpay-axios-plugin');
|
|
5
|
-
|
|
1
|
+
var __VOBS_CJS_FILE_URL = require("url").pathToFileURL(__filename).href;
|
|
2
|
+
"use strict";
|
|
6
3
|
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
7
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
8
|
var __export = (target, all) => {
|
|
9
9
|
for (var name in all)
|
|
10
10
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
11
|
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
|
|
22
|
+
// packages/payment/src/index.ts
|
|
23
|
+
var src_exports = {};
|
|
24
|
+
__export(src_exports, {
|
|
25
|
+
ALIPAY_KEY: () => ALIPAY_KEY,
|
|
26
|
+
AlipayApiError: () => AlipayApiError,
|
|
27
|
+
AlipayClient: () => AlipayClient,
|
|
28
|
+
AlipayConfig: () => AlipayConfig,
|
|
29
|
+
WECHAT_KEY: () => WECHAT_KEY,
|
|
30
|
+
WechatApiError: () => WechatApiError,
|
|
31
|
+
WechatClient: () => WechatClient,
|
|
32
|
+
WechatConfig: () => WechatConfig,
|
|
33
|
+
alipay: () => alipay_exports,
|
|
34
|
+
alipayPlugin: () => alipayPlugin,
|
|
35
|
+
createPagePay: () => createPagePay,
|
|
36
|
+
createPayment: () => createPayment,
|
|
37
|
+
createQuery: () => createQuery,
|
|
38
|
+
createWapPay: () => createWapPay,
|
|
39
|
+
useAlipay: () => useAlipay,
|
|
40
|
+
useWechat: () => useWechat,
|
|
41
|
+
wechat: () => wechat_exports,
|
|
42
|
+
wechatPlugin: () => wechatPlugin
|
|
43
|
+
});
|
|
44
|
+
module.exports = __toCommonJS(src_exports);
|
|
12
45
|
|
|
13
46
|
// packages/payment/src/alipay/index.ts
|
|
14
47
|
var alipay_exports = {};
|
|
@@ -26,6 +59,9 @@ __export(alipay_exports, {
|
|
|
26
59
|
useAlipay: () => useAlipay
|
|
27
60
|
});
|
|
28
61
|
|
|
62
|
+
// packages/payment/src/alipay/client.ts
|
|
63
|
+
var import_alipay_sdk = require("alipay-sdk");
|
|
64
|
+
|
|
29
65
|
// packages/payment/src/alipay/config.ts
|
|
30
66
|
var _AlipayConfig = class _AlipayConfig {
|
|
31
67
|
constructor(options) {
|
|
@@ -109,7 +145,7 @@ var _AlipayClient = class _AlipayClient {
|
|
|
109
145
|
this._sdk = null;
|
|
110
146
|
}
|
|
111
147
|
createSdk(options) {
|
|
112
|
-
return new
|
|
148
|
+
return new import_alipay_sdk.AlipaySdk({
|
|
113
149
|
appId: options.appId,
|
|
114
150
|
privateKey: options.privateKey,
|
|
115
151
|
alipayPublicKey: options.alipayPublicKey,
|
|
@@ -412,165 +448,9 @@ function createNotifyHandler(client) {
|
|
|
412
448
|
}
|
|
413
449
|
__name(createNotifyHandler, "createNotifyHandler");
|
|
414
450
|
|
|
415
|
-
// packages/reactivity/src/debug.ts
|
|
416
|
-
var activeDebugHooks = null;
|
|
417
|
-
function hasDebugHooks() {
|
|
418
|
-
return activeDebugHooks !== null;
|
|
419
|
-
}
|
|
420
|
-
__name(hasDebugHooks, "hasDebugHooks");
|
|
421
|
-
function invokeDebug(name, ...args) {
|
|
422
|
-
return;
|
|
423
|
-
}
|
|
424
|
-
__name(invokeDebug, "invokeDebug");
|
|
425
|
-
|
|
426
|
-
// packages/reactivity/src/owner.ts
|
|
427
|
-
var currentOwner = null;
|
|
428
|
-
function getCurrentOwner() {
|
|
429
|
-
return currentOwner;
|
|
430
|
-
}
|
|
431
|
-
__name(getCurrentOwner, "getCurrentOwner");
|
|
432
|
-
|
|
433
|
-
// packages/reactivity/src/scheduler.ts
|
|
434
|
-
var _Scheduler = class _Scheduler {
|
|
435
|
-
constructor() {
|
|
436
|
-
this.dirtyEffects = /* @__PURE__ */ new Set();
|
|
437
|
-
this.lowPriorityEffects = /* @__PURE__ */ new Set();
|
|
438
|
-
// flush 不可重入(flushing 标志保证),缓冲数组可在轮次间安全复用,避免每轮分配。
|
|
439
|
-
this.normalBuffer = [];
|
|
440
|
-
this.lowBuffer = [];
|
|
441
|
-
this.flushing = false;
|
|
442
|
-
this.scheduled = false;
|
|
443
|
-
this.batchDepth = 0;
|
|
444
|
-
}
|
|
445
|
-
schedule(effect2) {
|
|
446
|
-
if (effect2.disposed) return;
|
|
447
|
-
this.dirtyEffects.add(effect2);
|
|
448
|
-
this.lowPriorityEffects.delete(effect2);
|
|
449
|
-
this.ensureScheduled();
|
|
450
|
-
}
|
|
451
|
-
/** Queue an effect behind normal updates while preserving deterministic order. */
|
|
452
|
-
scheduleLow(effect2) {
|
|
453
|
-
if (effect2.disposed) return;
|
|
454
|
-
if (!this.dirtyEffects.has(effect2)) this.lowPriorityEffects.add(effect2);
|
|
455
|
-
this.ensureScheduled();
|
|
456
|
-
}
|
|
457
|
-
ensureScheduled() {
|
|
458
|
-
if (this.batchDepth === 0 && !this.flushing && !this.scheduled) {
|
|
459
|
-
this.scheduled = true;
|
|
460
|
-
queueMicrotask(() => {
|
|
461
|
-
this.scheduled = false;
|
|
462
|
-
this.flush();
|
|
463
|
-
});
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
remove(effect2) {
|
|
467
|
-
this.dirtyEffects.delete(effect2);
|
|
468
|
-
this.lowPriorityEffects.delete(effect2);
|
|
469
|
-
}
|
|
470
|
-
batch(fn) {
|
|
471
|
-
this.batchDepth++;
|
|
472
|
-
try {
|
|
473
|
-
return fn();
|
|
474
|
-
} finally {
|
|
475
|
-
this.batchDepth--;
|
|
476
|
-
if (this.batchDepth === 0) this.flush();
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
flush() {
|
|
480
|
-
if (this.flushing || this.batchDepth > 0) return;
|
|
481
|
-
this.flushing = true;
|
|
482
|
-
let rounds = 0;
|
|
483
|
-
let firstError;
|
|
484
|
-
let hasError = false;
|
|
485
|
-
try {
|
|
486
|
-
while (this.dirtyEffects.size > 0 || this.lowPriorityEffects.size > 0) {
|
|
487
|
-
if (++rounds > 100) {
|
|
488
|
-
this.dirtyEffects.clear();
|
|
489
|
-
this.lowPriorityEffects.clear();
|
|
490
|
-
throw new Error("Vobs: \u54CD\u5E94\u5F0F\u66F4\u65B0\u8D85\u8FC7 100 \u8F6E\uFF0C\u53EF\u80FD\u5B58\u5728\u5FAA\u73AF\u4F9D\u8D56");
|
|
491
|
-
}
|
|
492
|
-
this.collectRunnable(this.dirtyEffects, this.normalBuffer);
|
|
493
|
-
this.collectRunnable(this.lowPriorityEffects, this.lowBuffer);
|
|
494
|
-
sortEffects(this.normalBuffer);
|
|
495
|
-
sortEffects(this.lowBuffer);
|
|
496
|
-
for (const effect2 of this.normalBuffer) {
|
|
497
|
-
try {
|
|
498
|
-
effect2.run();
|
|
499
|
-
} catch (error) {
|
|
500
|
-
if (!hasError) {
|
|
501
|
-
firstError = error;
|
|
502
|
-
hasError = true;
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
for (const effect2 of this.lowBuffer) {
|
|
507
|
-
try {
|
|
508
|
-
effect2.run();
|
|
509
|
-
} catch (error) {
|
|
510
|
-
if (!hasError) {
|
|
511
|
-
firstError = error;
|
|
512
|
-
hasError = true;
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
this.normalBuffer.length = 0;
|
|
517
|
-
this.lowBuffer.length = 0;
|
|
518
|
-
}
|
|
519
|
-
} finally {
|
|
520
|
-
this.normalBuffer.length = 0;
|
|
521
|
-
this.lowBuffer.length = 0;
|
|
522
|
-
this.flushing = false;
|
|
523
|
-
}
|
|
524
|
-
if (hasError) throw firstError;
|
|
525
|
-
}
|
|
526
|
-
/** 收集未 disposed 的 effect 并清空源集合;run() 期间新调度的 effect 留给下一轮。 */
|
|
527
|
-
collectRunnable(source, target) {
|
|
528
|
-
for (const effect2 of source) {
|
|
529
|
-
if (!effect2.disposed) target.push(effect2);
|
|
530
|
-
}
|
|
531
|
-
source.clear();
|
|
532
|
-
}
|
|
533
|
-
};
|
|
534
|
-
__name(_Scheduler, "Scheduler");
|
|
535
|
-
function sortEffects(effects) {
|
|
536
|
-
if (effects.length > 1) {
|
|
537
|
-
effects.sort((a, b) => b.depth - a.depth || a.order - b.order);
|
|
538
|
-
}
|
|
539
|
-
}
|
|
540
|
-
__name(sortEffects, "sortEffects");
|
|
541
|
-
|
|
542
|
-
// packages/runtime/src/hmr.ts
|
|
543
|
-
var globalTarget = globalThis;
|
|
544
|
-
var hmrGlobal = globalTarget.__VOBS_HMR__ ?? { modules: /* @__PURE__ */ new Map() };
|
|
545
|
-
globalTarget.__VOBS_HMR__ = hmrGlobal;
|
|
546
|
-
|
|
547
|
-
// packages/vobs/src/context.ts
|
|
548
|
-
var ownerProviders = /* @__PURE__ */ new WeakMap();
|
|
549
|
-
function inject(key, fallback) {
|
|
550
|
-
const owner = getCurrentOwner();
|
|
551
|
-
const value = owner ? injectFromOwner(owner, key) : void 0;
|
|
552
|
-
return value === void 0 ? fallback : value;
|
|
553
|
-
}
|
|
554
|
-
__name(inject, "inject");
|
|
555
|
-
function injectFromOwner(owner, key) {
|
|
556
|
-
let current = owner;
|
|
557
|
-
while (current) {
|
|
558
|
-
const providers = ownerProviders.get(current);
|
|
559
|
-
if (providers?.has(key)) return providers.get(key);
|
|
560
|
-
current = current.parent;
|
|
561
|
-
}
|
|
562
|
-
return void 0;
|
|
563
|
-
}
|
|
564
|
-
__name(injectFromOwner, "injectFromOwner");
|
|
565
|
-
|
|
566
|
-
// packages/vobs/src/app.ts
|
|
567
|
-
function createInjectionKey(description) {
|
|
568
|
-
return Symbol(description);
|
|
569
|
-
}
|
|
570
|
-
__name(createInjectionKey, "createInjectionKey");
|
|
571
|
-
|
|
572
451
|
// packages/payment/src/alipay/plugin.ts
|
|
573
|
-
var
|
|
452
|
+
var import_vobs = require("@vobs/vobs");
|
|
453
|
+
var ALIPAY_KEY = (0, import_vobs.createInjectionKey)("vobs.payment.alipay");
|
|
574
454
|
function alipayPlugin(options) {
|
|
575
455
|
return {
|
|
576
456
|
name: "@vobs/payment/alipay",
|
|
@@ -588,7 +468,7 @@ function alipayPlugin(options) {
|
|
|
588
468
|
}
|
|
589
469
|
__name(alipayPlugin, "alipayPlugin");
|
|
590
470
|
function useAlipay() {
|
|
591
|
-
const client = inject(ALIPAY_KEY);
|
|
471
|
+
const client = (0, import_vobs.inject)(ALIPAY_KEY);
|
|
592
472
|
if (!client) {
|
|
593
473
|
throw new Error(
|
|
594
474
|
"Vobs Payment: \u627E\u4E0D\u5230 AlipayClient\uFF0C\u8BF7\u5B89\u88C5 alipayPlugin"
|
|
@@ -612,6 +492,9 @@ __export(wechat_exports, {
|
|
|
612
492
|
wechatPlugin: () => wechatPlugin
|
|
613
493
|
});
|
|
614
494
|
|
|
495
|
+
// packages/payment/src/wechat/client.ts
|
|
496
|
+
var import_wechatpay_axios_plugin = require("wechatpay-axios-plugin");
|
|
497
|
+
|
|
615
498
|
// packages/payment/src/wechat/config.ts
|
|
616
499
|
var _WechatConfig = class _WechatConfig {
|
|
617
500
|
constructor(options) {
|
|
@@ -704,7 +587,7 @@ var _WechatClient = class _WechatClient {
|
|
|
704
587
|
this._sdk = null;
|
|
705
588
|
}
|
|
706
589
|
createSdk(options) {
|
|
707
|
-
return new
|
|
590
|
+
return new import_wechatpay_axios_plugin.Wechatpay({
|
|
708
591
|
mchid: options.mchid,
|
|
709
592
|
serial: options.serial,
|
|
710
593
|
privateKey: options.privateKey,
|
|
@@ -760,6 +643,9 @@ async function unwrapV3(promise) {
|
|
|
760
643
|
}
|
|
761
644
|
}
|
|
762
645
|
__name(unwrapV3, "unwrapV3");
|
|
646
|
+
|
|
647
|
+
// packages/payment/src/wechat/payment.ts
|
|
648
|
+
var import_wechatpay_axios_plugin2 = require("wechatpay-axios-plugin");
|
|
763
649
|
function createPayment(client) {
|
|
764
650
|
return {
|
|
765
651
|
/**
|
|
@@ -865,15 +751,15 @@ function buildInvokeParams(client, prepayId) {
|
|
|
865
751
|
throw new Error("WechatClient: \u4E0B\u5355\u54CD\u5E94\u7F3A\u5C11 prepay_id");
|
|
866
752
|
}
|
|
867
753
|
const appId = client.config.appid;
|
|
868
|
-
const timeStamp = `${
|
|
869
|
-
const nonceStr =
|
|
754
|
+
const timeStamp = `${import_wechatpay_axios_plugin2.Formatter.timestamp()}`;
|
|
755
|
+
const nonceStr = import_wechatpay_axios_plugin2.Formatter.nonce(32);
|
|
870
756
|
const pkg = `prepay_id=${prepayId}`;
|
|
871
757
|
const message = `${appId}
|
|
872
758
|
${timeStamp}
|
|
873
759
|
${nonceStr}
|
|
874
760
|
${pkg}
|
|
875
761
|
`;
|
|
876
|
-
const paySign =
|
|
762
|
+
const paySign = import_wechatpay_axios_plugin2.Rsa.sign(message, client.config.options.privateKey);
|
|
877
763
|
return { appId, timeStamp, nonceStr, package: pkg, signType: "RSA", paySign };
|
|
878
764
|
}
|
|
879
765
|
__name(buildInvokeParams, "buildInvokeParams");
|
|
@@ -894,6 +780,9 @@ function mapTransaction(data) {
|
|
|
894
780
|
};
|
|
895
781
|
}
|
|
896
782
|
__name(mapTransaction, "mapTransaction");
|
|
783
|
+
|
|
784
|
+
// packages/payment/src/wechat/notify.ts
|
|
785
|
+
var import_wechatpay_axios_plugin3 = require("wechatpay-axios-plugin");
|
|
897
786
|
function createNotifyHandler2(client) {
|
|
898
787
|
return {
|
|
899
788
|
/**
|
|
@@ -908,8 +797,8 @@ function createNotifyHandler2(client) {
|
|
|
908
797
|
return false;
|
|
909
798
|
}
|
|
910
799
|
try {
|
|
911
|
-
const message =
|
|
912
|
-
return
|
|
800
|
+
const message = import_wechatpay_axios_plugin3.Formatter.response(headers.timestamp, headers.nonce, body);
|
|
801
|
+
return import_wechatpay_axios_plugin3.Rsa.verify(message, headers.signature, publicKey);
|
|
913
802
|
} catch {
|
|
914
803
|
return false;
|
|
915
804
|
}
|
|
@@ -919,7 +808,7 @@ function createNotifyHandler2(client) {
|
|
|
919
808
|
* @param resource 回调 JSON 中的 resource 字段
|
|
920
809
|
*/
|
|
921
810
|
decrypt(resource) {
|
|
922
|
-
const plaintext =
|
|
811
|
+
const plaintext = import_wechatpay_axios_plugin3.Aes.AesGcm.decrypt(
|
|
923
812
|
resource.ciphertext,
|
|
924
813
|
client.config.apiv3Key,
|
|
925
814
|
resource.nonce,
|
|
@@ -1023,9 +912,10 @@ function mapRefund(data) {
|
|
|
1023
912
|
__name(mapRefund, "mapRefund");
|
|
1024
913
|
|
|
1025
914
|
// packages/payment/src/wechat/plugin.ts
|
|
1026
|
-
var
|
|
915
|
+
var import_vobs2 = require("@vobs/vobs");
|
|
916
|
+
var WECHAT_KEY = (0, import_vobs2.createInjectionKey)("vobs.payment.wechat");
|
|
1027
917
|
function useWechat() {
|
|
1028
|
-
const client = inject(WECHAT_KEY);
|
|
918
|
+
const client = (0, import_vobs2.inject)(WECHAT_KEY);
|
|
1029
919
|
if (!client) {
|
|
1030
920
|
throw new Error("Vobs Payment: \u627E\u4E0D\u5230 WechatClient\uFF0C\u8BF7\u5B89\u88C5 wechatPlugin");
|
|
1031
921
|
}
|
|
@@ -1048,24 +938,25 @@ function wechatPlugin(options) {
|
|
|
1048
938
|
};
|
|
1049
939
|
}
|
|
1050
940
|
__name(wechatPlugin, "wechatPlugin");
|
|
1051
|
-
|
|
1052
|
-
exports
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
941
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
942
|
+
0 && (module.exports = {
|
|
943
|
+
ALIPAY_KEY,
|
|
944
|
+
AlipayApiError,
|
|
945
|
+
AlipayClient,
|
|
946
|
+
AlipayConfig,
|
|
947
|
+
WECHAT_KEY,
|
|
948
|
+
WechatApiError,
|
|
949
|
+
WechatClient,
|
|
950
|
+
WechatConfig,
|
|
951
|
+
alipay,
|
|
952
|
+
alipayPlugin,
|
|
953
|
+
createPagePay,
|
|
954
|
+
createPayment,
|
|
955
|
+
createQuery,
|
|
956
|
+
createWapPay,
|
|
957
|
+
useAlipay,
|
|
958
|
+
useWechat,
|
|
959
|
+
wechat,
|
|
960
|
+
wechatPlugin
|
|
961
|
+
});
|
|
1071
962
|
//# sourceMappingURL=index.cjs.map
|