@cloudbase/oauth 3.0.0 → 3.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/dist/cjs/auth/apis.d.ts +22 -4
- package/dist/cjs/auth/apis.js +255 -66
- package/dist/cjs/auth/auth-error.d.ts +6 -0
- package/dist/cjs/auth/auth-error.js +32 -0
- package/dist/cjs/auth/consts.d.ts +22 -0
- package/dist/cjs/auth/consts.js +24 -2
- package/dist/cjs/auth/models.d.ts +13 -4
- package/dist/cjs/auth/models.js +1 -1
- package/dist/cjs/captcha/captcha-dom.d.ts +3 -0
- package/dist/cjs/captcha/captcha-dom.js +223 -0
- package/dist/cjs/captcha/captcha.d.ts +3 -1
- package/dist/cjs/captcha/captcha.js +11 -102
- package/dist/cjs/index.d.ts +12 -2
- package/dist/cjs/index.js +27 -4
- package/dist/cjs/oauth2client/interface.d.ts +1 -1
- package/dist/cjs/oauth2client/interface.js +1 -1
- package/dist/cjs/oauth2client/models.d.ts +15 -1
- package/dist/cjs/oauth2client/models.js +1 -1
- package/dist/cjs/oauth2client/oauth2client.d.ts +62 -3
- package/dist/cjs/oauth2client/oauth2client.js +426 -131
- package/dist/cjs/utils/base64.d.ts +5 -0
- package/dist/cjs/utils/base64.js +15 -2
- package/dist/cjs/utils/encryptlong/index.js +22 -16
- package/dist/cjs/utils/index.js +1 -1
- package/dist/cjs/utils/mp.js +4 -4
- package/dist/cjs/utils/urlSearchParams.js +1 -1
- package/dist/esm/auth/apis.d.ts +22 -4
- package/dist/esm/auth/apis.js +130 -10
- package/dist/esm/auth/auth-error.d.ts +6 -0
- package/dist/esm/auth/auth-error.js +9 -0
- package/dist/esm/auth/consts.d.ts +22 -0
- package/dist/esm/auth/consts.js +22 -0
- package/dist/esm/auth/models.d.ts +13 -4
- package/dist/esm/captcha/captcha-dom.d.ts +3 -0
- package/dist/esm/captcha/captcha-dom.js +129 -0
- package/dist/esm/captcha/captcha.d.ts +3 -1
- package/dist/esm/captcha/captcha.js +14 -97
- package/dist/esm/index.d.ts +12 -2
- package/dist/esm/index.js +20 -3
- package/dist/esm/oauth2client/interface.d.ts +1 -1
- package/dist/esm/oauth2client/models.d.ts +15 -1
- package/dist/esm/oauth2client/oauth2client.d.ts +62 -3
- package/dist/esm/oauth2client/oauth2client.js +200 -55
- package/dist/esm/utils/base64.d.ts +5 -0
- package/dist/esm/utils/base64.js +12 -0
- package/dist/esm/utils/encryptlong/index.js +21 -15
- package/dist/esm/utils/mp.js +3 -3
- package/dist/miniprogram/index.js +1 -1
- package/package.json +10 -4
- package/src/auth/apis.ts +222 -17
- package/src/auth/auth-error.ts +21 -0
- package/src/auth/consts.ts +28 -0
- package/src/auth/models.ts +13 -4
- package/src/captcha/captcha-dom.ts +178 -0
- package/src/captcha/captcha.ts +25 -114
- package/src/index.ts +54 -4
- package/src/oauth2client/interface.ts +1 -1
- package/src/oauth2client/models.ts +29 -1
- package/src/oauth2client/oauth2client.ts +308 -55
- package/src/utils/base64.ts +12 -0
- package/src/utils/encryptlong/index.js +20 -14
- package/src/utils/index.ts +1 -0
- package/src/utils/mp.ts +3 -3
- package/src/utils/urlSearchParams.ts +2 -0
- package/tsconfig.json +1 -0
- package/dist/cjs/utils/cloudbase-adapter-wx_mp.d.ts +0 -1
- package/dist/cjs/utils/cloudbase-adapter-wx_mp.js +0 -40
- package/dist/esm/utils/cloudbase-adapter-wx_mp.d.ts +0 -1
- package/dist/esm/utils/cloudbase-adapter-wx_mp.js +0 -35
- package/src/utils/cloudbase-adapter-wx_mp.ts +0 -42
package/dist/cjs/utils/index.js
CHANGED
|
@@ -53,4 +53,4 @@ var getPathName = function (url) {
|
|
|
53
53
|
return '';
|
|
54
54
|
};
|
|
55
55
|
exports.getPathName = getPathName;
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBUU8sSUFBTSxTQUFTLEdBQUcsVUFBQyxLQUFVO0lBQ2xDLElBQU0sS0FBSyxHQUFHLFVBQUMsV0FBZ0I7UUFFN0IsS0FBSyxJQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUU7WUFFdkIsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBQSxpQkFBUyxFQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO2FBQ3pDO1NBQ0Y7UUFDRCxPQUFPLFdBQVcsQ0FBQTtJQUNwQixDQUFDLENBQUE7SUFFRCxJQUFNLElBQUksR0FBTSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRTlILElBQ0U7UUFDRSxXQUFXO1FBQ1gsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixZQUFZO1FBQ1osYUFBYTtRQUNiLFlBQVk7UUFDWixhQUFhO1FBQ2IsY0FBYztRQUNkLGNBQWM7UUFDZCxlQUFlO1FBQ2YsZ0JBQWdCO0tBQ2pCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUNoQjtRQUNBLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFBO0tBQ3JCO0lBRUQsUUFBUSxJQUFJLEVBQUU7UUFDWixLQUFLLFFBQVE7WUFDWCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzNELEtBQUssT0FBTztZQUNWLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2xCLEtBQUssTUFBTTtZQUNULE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDbEMsS0FBSyxRQUFRO1lBQ1gsT0FBTyxJQUFJLE1BQU0sQ0FDZixLQUFLLENBQUMsTUFBTSxFQUNaLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7a0JBQ3JCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7a0JBQzdCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7a0JBQzVCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7a0JBQ3pCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDL0IsQ0FBQTtRQUNIO1lBQ0UsT0FBTyxLQUFLLENBQUE7S0FDZjtBQUNILENBQUMsQ0FBQTtBQW5EWSxRQUFBLFNBQVMsYUFtRHJCO0FBRU0sSUFBTSxXQUFXLEdBQUcsVUFBQyxHQUFXO0lBRXJDLElBQU0sS0FBSyxHQUFHLHNDQUFzQyxDQUFBO0lBQ3BELElBQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFOUIsSUFBSSxLQUFLLEVBQUU7UUFDVCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7S0FDdEI7SUFFRCxPQUFPLEVBQUUsQ0FBQTtBQUNYLENBQUMsQ0FBQTtBQVZZLFFBQUEsV0FBVyxlQVV2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog5rex5ou36LSdXG4gKiBAcGFyYW0geyp9IHZhbHVlIOmcgOimgeaLt+i0neeahOWAvFxuICogQHJldHVybnMgeyp9IOa3seaLt+i0neWQjueahOWAvFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogeyBjOiAyIH0gfTtcbiAqIGNvbnN0IG5ld09iaiA9IGRlZXBDbG9uZShvYmopO1xuICovXG5leHBvcnQgY29uc3QgZGVlcENsb25lID0gKHZhbHVlOiBhbnkpID0+IHtcbiAgY29uc3QgY2xvbmUgPSAoY29waWVkVmFsdWU6IGFueSkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBjb3BpZWRWYWx1ZVtrZXldID0gZGVlcENsb25lKHZhbHVlW2tleV0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3BpZWRWYWx1ZVxuICB9XG5cbiAgY29uc3QgdHlwZSA9ICAgIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgPyAnTnVsbE9yVW5kZWZpbmVkJyA6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpXG5cbiAgaWYgKFxuICAgIFtcbiAgICAgICdJbnQ4QXJyYXknLFxuICAgICAgJ1VpbnQ4QXJyYXknLFxuICAgICAgJ1VpbnQ4Q2xhbXBlZEFycmF5JyxcbiAgICAgICdJbnQxNkFycmF5JyxcbiAgICAgICdVaW50MTZBcnJheScsXG4gICAgICAnSW50MzJBcnJheScsXG4gICAgICAnVWludDMyQXJyYXknLFxuICAgICAgJ0Zsb2F0MzJBcnJheScsXG4gICAgICAnRmxvYXQ2NEFycmF5JyxcbiAgICAgICdCaWdJbnQ2NEFycmF5JyxcbiAgICAgICdCaWdVaW50NjRBcnJheScsXG4gICAgXS5pbmNsdWRlcyh0eXBlKVxuICApIHtcbiAgICByZXR1cm4gdmFsdWUuc2xpY2UoKVxuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnT2JqZWN0JzpcbiAgICAgIHJldHVybiBjbG9uZShPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkpKVxuICAgIGNhc2UgJ0FycmF5JzpcbiAgICAgIHJldHVybiBjbG9uZShbXSlcbiAgICBjYXNlICdEYXRlJzpcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZS52YWx1ZU9mKCkpXG4gICAgY2FzZSAnUmVnRXhwJzpcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKFxuICAgICAgICB2YWx1ZS5zb3VyY2UsXG4gICAgICAgICh2YWx1ZS5nbG9iYWwgPyAnZycgOiAnJylcbiAgICAgICAgICArICh2YWx1ZS5pZ25vcmVDYXNlID8gJ2knIDogJycpXG4gICAgICAgICAgKyAodmFsdWUubXVsdGlsaW5lID8gJ20nIDogJycpXG4gICAgICAgICAgKyAodmFsdWUuc3RpY2t5ID8gJ3knIDogJycpXG4gICAgICAgICAgKyAodmFsdWUudW5pY29kZSA/ICd1JyA6ICcnKSxcbiAgICAgIClcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldFBhdGhOYW1lID0gKHVybDogc3RyaW5nKSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICBjb25zdCByZWdleCA9IC9eKD86aHR0cChzKT86XFwvXFwvW15cXC9dKyk/KFxcL1teXFw/I10qKS9cbiAgY29uc3QgbWF0Y2ggPSB1cmwubWF0Y2gocmVnZXgpXG5cbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIG1hdGNoWzJdIHx8ICcnXG4gIH1cblxuICByZXR1cm4gJydcbn1cbiJdfQ==
|
package/dist/cjs/utils/mp.js
CHANGED
|
@@ -12,7 +12,7 @@ function isMp() {
|
|
|
12
12
|
if (globalThis.Page === undefined) {
|
|
13
13
|
return false;
|
|
14
14
|
}
|
|
15
|
-
if (!wx.
|
|
15
|
+
if (!wx.getDeviceInfo) {
|
|
16
16
|
return false;
|
|
17
17
|
}
|
|
18
18
|
if (!wx.getStorageSync) {
|
|
@@ -28,10 +28,10 @@ function isMp() {
|
|
|
28
28
|
return false;
|
|
29
29
|
}
|
|
30
30
|
try {
|
|
31
|
-
if (!wx.
|
|
31
|
+
if (!wx.getDeviceInfo()) {
|
|
32
32
|
return false;
|
|
33
33
|
}
|
|
34
|
-
if (wx.
|
|
34
|
+
if (wx.getDeviceInfo().platform === 'qq') {
|
|
35
35
|
return false;
|
|
36
36
|
}
|
|
37
37
|
}
|
|
@@ -63,4 +63,4 @@ function isInMpWebView() {
|
|
|
63
63
|
return IS_IN_MP_WEBVIEW;
|
|
64
64
|
}
|
|
65
65
|
exports.isInMpWebView = isInMpWebView;
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvbXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBZ0IsSUFBSTtJQUNsQixJQUFJLE9BQU8sVUFBVSxLQUFLLFdBQVcsRUFBRTtRQUNyQyxPQUFPLEtBQUssQ0FBQTtLQUNiO0lBRU8sSUFBQSxFQUFFLEdBQUssVUFBaUIsR0FBdEIsQ0FBc0I7SUFDaEMsSUFBSSxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQUU7UUFDN0IsT0FBTyxLQUFLLENBQUE7S0FDYjtJQUNELElBQUssVUFBa0IsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1FBQzFDLE9BQU8sS0FBSyxDQUFBO0tBQ2I7SUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRTtRQUNyQixPQUFPLEtBQUssQ0FBQTtLQUNiO0lBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUU7UUFDdEIsT0FBTyxLQUFLLENBQUE7S0FDYjtJQUNELElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFO1FBQ3RCLE9BQU8sS0FBSyxDQUFBO0tBQ2I7SUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRTtRQUNyQixPQUFPLEtBQUssQ0FBQTtLQUNiO0lBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUU7UUFDZixPQUFPLEtBQUssQ0FBQTtLQUNiO0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDdkIsT0FBTyxLQUFLLENBQUE7U0FDYjtRQUVELElBQUksRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDeEMsT0FBTyxLQUFLLENBQUE7U0FDYjtLQUNGO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixPQUFPLEtBQUssQ0FBQTtLQUNiO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBekNELG9CQXlDQztBQUVELElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFBO0FBQzVCLFNBQVMsS0FBSztJQUNaLGdCQUFnQixHQUFNLGdCQUFnQixJQUFJLENBQUMsT0FBTyxNQUFNLEtBQUssU0FBUyxJQUFLLE1BQWMsQ0FBQyxrQkFBa0IsS0FBSyxhQUFhLENBQUMsQ0FBQTtBQUNqSSxDQUFDO0FBQ0QsSUFBSTtJQUNGLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNYLGdCQUFnQixHQUFRLGdCQUFnQjtlQUNuQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO2VBQzFDLE1BQWMsQ0FBQyxrQkFBa0IsS0FBSyxhQUFhLENBQUE7UUFDekQsSUFBSyxNQUFjLElBQUssTUFBYyxDQUFDLGNBQWMsSUFBSyxNQUFjLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRTtZQUM5RixLQUFLLEVBQUUsQ0FBQTtTQUNSO2FBQU0sSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFDMUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtTQUMvRDtLQUNGO0NBQ0Y7QUFBQyxPQUFPLENBQUMsRUFBRSxHQUFFO0FBQ2QsU0FBZ0IsYUFBYTtJQUMzQixPQUFPLGdCQUFnQixDQUFBO0FBQ3pCLENBQUM7QUFGRCxzQ0FFQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBpc01wKCkge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCB7IHd4IH0gPSBnbG9iYWxUaGlzIGFzIGFueVxuICBpZiAodHlwZW9mIHd4ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmICgoZ2xvYmFsVGhpcyBhcyBhbnkpLlBhZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmICghd3guZ2V0RGV2aWNlSW5mbykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmICghd3guZ2V0U3RvcmFnZVN5bmMpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBpZiAoIXd4LnNldFN0b3JhZ2VTeW5jKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKCF3eC5jb25uZWN0U29ja2V0KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgaWYgKCF3eC5yZXF1ZXN0KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICB0cnkge1xuICAgIGlmICghd3guZ2V0RGV2aWNlSW5mbygpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAod3guZ2V0RGV2aWNlSW5mbygpLnBsYXRmb3JtID09PSAncXEnKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmxldCBJU19JTl9NUF9XRUJWSUVXID0gZmFsc2VcbmZ1bmN0aW9uIHJlYWR5KCkge1xuICBJU19JTl9NUF9XRUJWSUVXID0gICAgSVNfSU5fTVBfV0VCVklFVyB8fCAodHlwZW9mIHdpbmRvdyAhPT0gdW5kZWZpbmVkICYmICh3aW5kb3cgYXMgYW55KS5fX3d4anNfZW52aXJvbm1lbnQgPT09ICdtaW5pcHJvZ3JhbScpXG59XG50cnkge1xuICBpZiAoIWlzTXAoKSkge1xuICAgIElTX0lOX01QX1dFQlZJRVcgPSAgICAgIElTX0lOX01QX1dFQlZJRVdcbiAgICAgIHx8ICEhbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvbWluaXByb2dyYW0vaSlcbiAgICAgIHx8ICh3aW5kb3cgYXMgYW55KS5fX3d4anNfZW52aXJvbm1lbnQgPT09ICdtaW5pcHJvZ3JhbSdcbiAgICBpZiAoKHdpbmRvdyBhcyBhbnkpICYmICh3aW5kb3cgYXMgYW55KS5XZWl4aW5KU0JyaWRnZSAmJiAod2luZG93IGFzIGFueSkuV2VpeGluSlNCcmlkZ2UuaW52b2tlKSB7XG4gICAgICByZWFkeSgpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdXZWl4aW5KU0JyaWRnZVJlYWR5JywgcmVhZHksIGZhbHNlKVxuICAgIH1cbiAgfVxufSBjYXRjaCAoZSkge31cbmV4cG9ydCBmdW5jdGlvbiBpc0luTXBXZWJWaWV3KCkge1xuICByZXR1cm4gSVNfSU5fTVBfV0VCVklFV1xufVxuIl19
|
|
@@ -63,4 +63,4 @@ var MyURLSearchParams = (function () {
|
|
|
63
63
|
return MyURLSearchParams;
|
|
64
64
|
}());
|
|
65
65
|
exports.default = MyURLSearchParams;
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsU2VhcmNoUGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3VybFNlYXJjaFBhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBO0lBR0UsMkJBQVksSUFBSTtRQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFBO1FBQ2hCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDakI7YUFBTSxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFFM0MsS0FBSyxJQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0JBQ3RCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtvQkFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7aUJBQzVCO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFHRCxpQ0FBSyxHQUFMLFVBQU0sR0FBRztRQUFULGlCQU1DO1FBTEMsSUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUM3QixNQUFNLENBQUMsT0FBTyxDQUFDLFVBQUMsS0FBSztZQUNiLElBQUEsS0FBZSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUF0RCxHQUFHLFFBQUEsRUFBRSxLQUFLLFFBQTRDLENBQUE7WUFDN0QsS0FBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDekIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBR0Qsa0NBQU0sR0FBTixVQUFPLEdBQUcsRUFBRSxLQUFLO1FBQ2YsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1NBQ3BEO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDM0I7SUFDSCxDQUFDO0lBR0QsK0JBQUcsR0FBSCxVQUFJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUN0RCxDQUFDO0lBR0Qsa0NBQU0sR0FBTixVQUFPLEdBQUc7UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQy9CLENBQUM7SUFHRCxrQ0FBTSxHQUFOLFVBQU8sR0FBRztRQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBR0QsK0JBQUcsR0FBSCxVQUFJLEdBQUc7UUFDTCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQy9ELENBQUM7SUFHRCwrQkFBRyxHQUFILFVBQUksR0FBRyxFQUFFLEtBQUs7UUFDWixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUdELG9DQUFRLEdBQVI7UUFDRSxJQUFNLEtBQUssR0FBRyxFQUFFLENBQUE7Z0NBRUwsR0FBRztZQUNaLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQUssTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUMxRCxPQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxLQUFLO29CQUM3QixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLGNBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUUsQ0FBQyxDQUFBO2dCQUN2RSxDQUFDLENBQUMsQ0FBQTthQUNIOzs7UUFMSCxLQUFLLElBQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNO29CQUFsQixHQUFHO1NBTWI7UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDeEIsQ0FBQztJQUNILHdCQUFDO0FBQUQsQ0FBQyxBQXpFRCxJQXlFQztBQUVELGtCQUFlLGlCQUFpQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDlhbzlrrnlsI/nqIvluo9cbiAqL1xuY2xhc3MgTXlVUkxTZWFyY2hQYXJhbXMge1xuICBwYXJhbXM6IHt9XG5cbiAgY29uc3RydWN0b3IoaW5pdCkge1xuICAgIHRoaXMucGFyYW1zID0ge31cbiAgICBpZiAodHlwZW9mIGluaXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnBhcnNlKGluaXQpXG4gICAgfSBlbHNlIGlmIChpbml0ICYmIHR5cGVvZiBpbml0ID09PSAnb2JqZWN0Jykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBpbml0KSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5pdCwga2V5KSkge1xuICAgICAgICAgIHRoaXMuYXBwZW5kKGtleSwgaW5pdFtrZXldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8g6Kej5p6Q5p+l6K+i5a2X56ym5LiyXG4gIHBhcnNlKHN0cikge1xuICAgIGNvbnN0IHBhcmFtcyA9IHN0ci5zcGxpdCgnJicpXG4gICAgcGFyYW1zLmZvckVhY2goKHBhcmFtKSA9PiB7XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYXJhbS5zcGxpdCgnPScpLm1hcChkZWNvZGVVUklDb21wb25lbnQpXG4gICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlKVxuICAgIH0pXG4gIH1cblxuICAvLyDmt7vliqDlj4LmlbBcbiAgYXBwZW5kKGtleSwgdmFsdWUpIHtcbiAgICBpZiAodGhpcy5wYXJhbXNba2V5XSkge1xuICAgICAgdGhpcy5wYXJhbXNba2V5XSA9IHRoaXMucGFyYW1zW2tleV0uY29uY2F0KFt2YWx1ZV0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyYW1zW2tleV0gPSBbdmFsdWVdXG4gICAgfVxuICB9XG5cbiAgLy8g6I635Y+W5Y+C5pWw5YC877yI5Y2V5Liq5YC877yJXG4gIGdldChrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXNba2V5XSA/IHRoaXMucGFyYW1zW2tleV1bMF0gOiBudWxsXG4gIH1cblxuICAvLyDojrflj5blj4LmlbDlgLzvvIjmiYDmnInlgLzvvIlcbiAgZ2V0QWxsKGtleSkge1xuICAgIHJldHVybiB0aGlzLnBhcmFtc1trZXldIHx8IFtdXG4gIH1cblxuICAvLyDliKDpmaTlj4LmlbBcbiAgZGVsZXRlKGtleSkge1xuICAgIGRlbGV0ZSB0aGlzLnBhcmFtc1trZXldXG4gIH1cblxuICAvLyDmo4Dmn6Xlj4LmlbDmmK/lkKblrZjlnKhcbiAgaGFzKGtleSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5wYXJhbXMsIGtleSlcbiAgfVxuXG4gIC8vIOiuvue9ruWPguaVsOWAvFxuICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHRoaXMucGFyYW1zW2tleV0gPSBbdmFsdWVdXG4gIH1cblxuICAvLyDov5Tlm57mn6Xor6LlrZfnrKbkuLJcbiAgdG9TdHJpbmcoKSB7XG4gICAgY29uc3QgaXRlbXMgPSBbXVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucGFyYW1zKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucGFyYW1zLCBrZXkpKSB7XG4gICAgICAgIHRoaXMucGFyYW1zW2tleV0uZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICBpdGVtcy5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zLmpvaW4oJyYnKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE15VVJMU2VhcmNoUGFyYW1zXG4iXX0=
|
package/dist/esm/auth/apis.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GetVerificationRequest, GetVerificationResponse, UserProfile, UserInfo, SignInRequest, SignUpRequest, VerifyRequest, VerifyResponse, GenProviderRedirectUriRequest, GenProviderRedirectUriResponse, GrantProviderTokenRequest, GrantProviderTokenResponse, PatchProviderTokenRequest, PatchProviderTokenResponse, SignInWithProviderRequest, SignInCustomRequest, BindWithProviderRequest, TransByProviderRequest, GrantTokenRequest, UnbindProviderRequest, CheckPasswordRequest, SetPasswordRequest, ChangeBoundProviderRequest, ChangeBoundProviderResponse, UpdatePasswordRequest, SudoResponse, SudoRequest, GetCustomSignTicketFn, QueryUserProfileRequest, QueryUserProfileResponse, ResetPasswordRequest, DeviceAuthorizeRequest, DeviceAuthorizeResponse, CheckUsernameRequest, CheckIfUserExistRequest, CheckIfUserExistResponse, WithSudoRequest, PublicKey, EncryptParams, ProviderSubType, GetMiniProgramQrCodeRequest, GetMiniProgramQrCodeStatusRequest, GetMiniProgramQrCodeResponse, GetMiniProgramQrCodeStatusResponse, ModifyUserBasicInfoRequest, EditContactRequest, AuthorizeInfoRequest, AuthorizeInfoResponse, AuthorizeDeviceRequest, AuthorizeRequest, AuthorizeResponse, GetUserBehaviorLog, GetUserBehaviorLogRes, RevokeDeviceRequest,
|
|
1
|
+
import { GetVerificationRequest, GetVerificationResponse, UserProfile, UserInfo, SignInRequest, SignUpRequest, VerifyRequest, VerifyResponse, GenProviderRedirectUriRequest, GenProviderRedirectUriResponse, GrantProviderTokenRequest, GrantProviderTokenResponse, PatchProviderTokenRequest, PatchProviderTokenResponse, SignInWithProviderRequest, SignInCustomRequest, BindWithProviderRequest, TransByProviderRequest, GrantTokenRequest, UnbindProviderRequest, CheckPasswordRequest, SetPasswordRequest, ChangeBoundProviderRequest, ChangeBoundProviderResponse, UpdatePasswordRequest, SudoResponse, SudoRequest, GetCustomSignTicketFn, QueryUserProfileRequest, QueryUserProfileResponse, ResetPasswordRequest, DeviceAuthorizeRequest, DeviceAuthorizeResponse, CheckUsernameRequest, CheckIfUserExistRequest, CheckIfUserExistResponse, WithSudoRequest, PublicKey, EncryptParams, ProviderSubType, GetMiniProgramQrCodeRequest, GetMiniProgramQrCodeStatusRequest, GetMiniProgramQrCodeResponse, GetMiniProgramQrCodeStatusResponse, ModifyUserBasicInfoRequest, EditContactRequest, AuthorizeInfoRequest, AuthorizeInfoResponse, AuthorizeDeviceRequest, AuthorizeRequest, AuthorizeResponse, GetUserBehaviorLog, GetUserBehaviorLogRes, RevokeDeviceRequest, SignoutResponse, ProvidersResponse, SignoutRequest, ModifyPasswordWithoutLoginRequest } from './models';
|
|
2
2
|
import { SimpleStorage, RequestFunction } from '../oauth2client/interface';
|
|
3
3
|
import { OAuth2Client } from '../oauth2client/oauth2client';
|
|
4
4
|
import { Credentials } from '../oauth2client/models';
|
|
@@ -27,7 +27,10 @@ export interface AuthOptions {
|
|
|
27
27
|
[key: string]: string;
|
|
28
28
|
};
|
|
29
29
|
i18n?: ICloudbaseConfig['i18n'];
|
|
30
|
-
|
|
30
|
+
useWxCloud?: boolean;
|
|
31
|
+
eventBus?: any;
|
|
32
|
+
detectSessionInUrl?: boolean;
|
|
33
|
+
debug?: boolean;
|
|
31
34
|
}
|
|
32
35
|
export declare class Auth {
|
|
33
36
|
private static parseParamsToSearch;
|
|
@@ -43,7 +46,7 @@ export declare class Auth {
|
|
|
43
46
|
provider_token?: string;
|
|
44
47
|
}, useWxCloud?: boolean): Promise<Credentials>;
|
|
45
48
|
signUp(params: SignUpRequest): Promise<Credentials>;
|
|
46
|
-
signOut(params?: SignoutRequest): Promise<
|
|
49
|
+
signOut(params?: SignoutRequest): Promise<SignoutResponse>;
|
|
47
50
|
revokeAllDevices(): Promise<void>;
|
|
48
51
|
revokeDevice(params: RevokeDeviceRequest): Promise<void>;
|
|
49
52
|
getVerification(params: GetVerificationRequest, options?: {
|
|
@@ -54,15 +57,29 @@ export declare class Auth {
|
|
|
54
57
|
grantProviderToken(params: GrantProviderTokenRequest, useWxCloud?: boolean): Promise<GrantProviderTokenResponse>;
|
|
55
58
|
patchProviderToken(params: PatchProviderTokenRequest): Promise<PatchProviderTokenResponse>;
|
|
56
59
|
signInWithProvider(params: SignInWithProviderRequest, useWxCloud?: boolean): Promise<Credentials>;
|
|
60
|
+
toBindIdentity(params: {
|
|
61
|
+
provider_token: string;
|
|
62
|
+
provider: string;
|
|
63
|
+
credentials?: Credentials;
|
|
64
|
+
fireEvent?: boolean;
|
|
65
|
+
}): Promise<any>;
|
|
66
|
+
getInitialSession(): Promise<{
|
|
67
|
+
data: {
|
|
68
|
+
session: Credentials;
|
|
69
|
+
user?: any;
|
|
70
|
+
} | null;
|
|
71
|
+
error: Error | null;
|
|
72
|
+
}>;
|
|
57
73
|
signInCustom(params: SignInCustomRequest): Promise<Credentials>;
|
|
58
74
|
signInWithWechat(params?: any): Promise<Credentials>;
|
|
59
|
-
bindWithProvider(params: BindWithProviderRequest): Promise<void>;
|
|
75
|
+
bindWithProvider(params: BindWithProviderRequest, credentials?: Credentials): Promise<void>;
|
|
60
76
|
getUserProfile(params: {
|
|
61
77
|
version?: string;
|
|
62
78
|
}): Promise<UserProfile>;
|
|
63
79
|
getUserInfo(params?: {
|
|
64
80
|
version?: string;
|
|
65
81
|
query?: string;
|
|
82
|
+
credentials?: Credentials;
|
|
66
83
|
}): Promise<UserInfo>;
|
|
67
84
|
getWedaUserInfo(): Promise<any>;
|
|
68
85
|
deleteMe(params: WithSudoRequest): Promise<UserProfile>;
|
|
@@ -120,4 +137,5 @@ export declare class Auth {
|
|
|
120
137
|
getUserBehaviorLog(params: GetUserBehaviorLog): Promise<GetUserBehaviorLogRes>;
|
|
121
138
|
modifyPassword(params: ModifyUserBasicInfoRequest): Promise<void>;
|
|
122
139
|
modifyPasswordWithoutLogin(params: ModifyPasswordWithoutLoginRequest): Promise<void>;
|
|
140
|
+
private restoreUrlState;
|
|
123
141
|
}
|
package/dist/esm/auth/apis.js
CHANGED
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
import { ApiUrls, ApiUrlsV2, ErrorType } from './consts';
|
|
2
|
+
import { ApiUrls, ApiUrlsV2, AUTH_STATE_CHANGED_TYPE, ErrorType, EVENTS, OAUTH_TYPE } from './consts';
|
|
3
3
|
import { OAuth2Client, defaultStorage } from '../oauth2client/oauth2client';
|
|
4
4
|
import { Captcha } from '../captcha/captcha';
|
|
5
5
|
import { deepClone } from '../utils';
|
|
6
6
|
import MyURLSearchParams from '../utils/urlSearchParams';
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
import { AuthError } from './auth-error';
|
|
8
|
+
async function getEncryptUtils(isEncrypt, adapter) {
|
|
9
|
+
const getUtils = async () => {
|
|
9
10
|
try {
|
|
10
11
|
const utils = require('../utils/encrypt');
|
|
11
12
|
return utils;
|
|
12
13
|
}
|
|
13
14
|
catch (error) {
|
|
14
|
-
|
|
15
|
+
try {
|
|
16
|
+
const utils = await import('../utils/encrypt');
|
|
17
|
+
return utils;
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
15
22
|
}
|
|
16
23
|
};
|
|
17
24
|
try {
|
|
@@ -54,17 +61,19 @@ export class Auth {
|
|
|
54
61
|
onCredentialsError: opts.onCredentialsError,
|
|
55
62
|
headers: opts.headers || {},
|
|
56
63
|
i18n: opts.i18n,
|
|
57
|
-
|
|
64
|
+
debug: opts.debug,
|
|
58
65
|
};
|
|
59
66
|
oAuth2Client = new OAuth2Client(initOptions);
|
|
60
67
|
}
|
|
61
68
|
if (!request) {
|
|
62
69
|
const baseRequest = oAuth2Client.request.bind(oAuth2Client);
|
|
63
70
|
const captcha = new Captcha({
|
|
71
|
+
env: opts.env,
|
|
64
72
|
clientId: opts.clientId,
|
|
65
73
|
request: baseRequest,
|
|
66
74
|
storage: opts.storage,
|
|
67
75
|
adapter: opts.adapter,
|
|
76
|
+
oauthInstance: this,
|
|
68
77
|
...opts.captchaOptions,
|
|
69
78
|
});
|
|
70
79
|
request = captcha.request.bind(captcha);
|
|
@@ -173,9 +182,13 @@ export class Auth {
|
|
|
173
182
|
withCredentials = true;
|
|
174
183
|
}
|
|
175
184
|
}
|
|
185
|
+
const body = deepClone(params);
|
|
186
|
+
if (body.phone_number && !/^\+\d{1,3}\s+\d+/.test(body.phone_number)) {
|
|
187
|
+
body.phone_number = `+86 ${body.phone_number}`;
|
|
188
|
+
}
|
|
176
189
|
return this.config.request(ApiUrls.VERIFICATION_URL, {
|
|
177
190
|
method: 'POST',
|
|
178
|
-
body
|
|
191
|
+
body,
|
|
179
192
|
withCaptcha: options?.withCaptcha || false,
|
|
180
193
|
withCredentials,
|
|
181
194
|
});
|
|
@@ -237,6 +250,99 @@ export class Auth {
|
|
|
237
250
|
});
|
|
238
251
|
return Promise.resolve(credentials);
|
|
239
252
|
}
|
|
253
|
+
async toBindIdentity(params) {
|
|
254
|
+
const credentials = params.credentials || (await this.config.credentialsClient.localCredentials.getCredentials());
|
|
255
|
+
let res;
|
|
256
|
+
try {
|
|
257
|
+
await this.bindWithProvider({
|
|
258
|
+
provider_token: params.provider_token,
|
|
259
|
+
}, credentials);
|
|
260
|
+
res = { data: { type: OAUTH_TYPE.BIND_IDENTITY, provider: params.provider }, error: null };
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
res = { data: { type: OAUTH_TYPE.BIND_IDENTITY }, error: new AuthError(error) };
|
|
264
|
+
}
|
|
265
|
+
if (params.fireEvent) {
|
|
266
|
+
this.config.eventBus?.fire?.(EVENTS.AUTH_STATE_CHANGED, {
|
|
267
|
+
event: AUTH_STATE_CHANGED_TYPE.BIND_IDENTITY,
|
|
268
|
+
info: res,
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
return res;
|
|
272
|
+
}
|
|
273
|
+
async getInitialSession() {
|
|
274
|
+
let data = {};
|
|
275
|
+
try {
|
|
276
|
+
if (typeof window === 'undefined' || typeof document === 'undefined') {
|
|
277
|
+
return { data: null, error: null };
|
|
278
|
+
}
|
|
279
|
+
const localSearch = new URLSearchParams(location?.search);
|
|
280
|
+
const code = localSearch.get('code');
|
|
281
|
+
const state = localSearch.get('state');
|
|
282
|
+
if (!code || !state) {
|
|
283
|
+
return { data: null, error: null };
|
|
284
|
+
}
|
|
285
|
+
let cacheData = null;
|
|
286
|
+
try {
|
|
287
|
+
cacheData = JSON.parse(sessionStorage.getItem(state) || 'null');
|
|
288
|
+
}
|
|
289
|
+
catch {
|
|
290
|
+
}
|
|
291
|
+
data = { type: cacheData?.type };
|
|
292
|
+
const errorParam = localSearch.get('error');
|
|
293
|
+
const errorDescription = localSearch.get('error_description');
|
|
294
|
+
if (errorParam || errorDescription) {
|
|
295
|
+
return {
|
|
296
|
+
data,
|
|
297
|
+
error: new AuthError({ message: errorDescription || errorParam || 'Unknown error from OAuth provider' }),
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
const provider = cacheData?.provider || localSearch.get('provider');
|
|
301
|
+
if (!provider) {
|
|
302
|
+
return { data, error: new AuthError({ message: 'Provider is required for OAuth verification' }) };
|
|
303
|
+
}
|
|
304
|
+
const redirectUri = location.origin + location.pathname;
|
|
305
|
+
const { provider_token: providerToken } = await this.grantProviderToken({
|
|
306
|
+
provider_id: provider,
|
|
307
|
+
provider_redirect_uri: redirectUri,
|
|
308
|
+
provider_code: code,
|
|
309
|
+
});
|
|
310
|
+
let credentials;
|
|
311
|
+
let user = null;
|
|
312
|
+
let res;
|
|
313
|
+
if (cacheData.type === OAUTH_TYPE.BIND_IDENTITY) {
|
|
314
|
+
credentials = await this.config.credentialsClient.localCredentials.getCredentials();
|
|
315
|
+
res = await this.toBindIdentity({ provider, provider_token: providerToken, credentials });
|
|
316
|
+
}
|
|
317
|
+
else if (cacheData.type === OAUTH_TYPE.SIGN_IN) {
|
|
318
|
+
res = this.getParamsByVersion({ provider }, 'AUTH_SIGN_IN_WITH_PROVIDER_URL');
|
|
319
|
+
credentials = await this.config.request(res.url, {
|
|
320
|
+
method: 'POST',
|
|
321
|
+
body: { provider_token: providerToken },
|
|
322
|
+
});
|
|
323
|
+
try {
|
|
324
|
+
user = await this.getUserInfo({ credentials });
|
|
325
|
+
}
|
|
326
|
+
catch (e) {
|
|
327
|
+
console.error('get user info error', e);
|
|
328
|
+
}
|
|
329
|
+
res = { data: { ...data, session: credentials, user }, error: null };
|
|
330
|
+
}
|
|
331
|
+
localSearch.delete('code');
|
|
332
|
+
localSearch.delete('state');
|
|
333
|
+
localSearch.delete('provider');
|
|
334
|
+
this.restoreUrlState(cacheData?.search === undefined ? `?${localSearch.toString()}` : cacheData.search, cacheData?.hash || location.hash);
|
|
335
|
+
try {
|
|
336
|
+
sessionStorage.removeItem(state);
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
}
|
|
340
|
+
return res;
|
|
341
|
+
}
|
|
342
|
+
catch (error) {
|
|
343
|
+
return { data, error: new AuthError(error) };
|
|
344
|
+
}
|
|
345
|
+
}
|
|
240
346
|
async signInCustom(params) {
|
|
241
347
|
const credentials = await this.config.request(ApiUrls.AUTH_SIGN_IN_CUSTOM, {
|
|
242
348
|
method: 'POST',
|
|
@@ -253,11 +359,12 @@ export class Auth {
|
|
|
253
359
|
await this.config.credentialsClient.setCredentials(credentials);
|
|
254
360
|
return Promise.resolve(credentials);
|
|
255
361
|
}
|
|
256
|
-
async bindWithProvider(params) {
|
|
362
|
+
async bindWithProvider(params, credentials) {
|
|
257
363
|
return this.config.request(ApiUrls.PROVIDER_BIND_URL, {
|
|
258
364
|
method: 'POST',
|
|
259
365
|
body: params,
|
|
260
366
|
withCredentials: true,
|
|
367
|
+
getCredentials: credentials ? () => credentials : undefined,
|
|
261
368
|
});
|
|
262
369
|
}
|
|
263
370
|
async getUserProfile(params) {
|
|
@@ -272,6 +379,7 @@ export class Auth {
|
|
|
272
379
|
const userInfo = await this.config.request(res.url, {
|
|
273
380
|
method: 'GET',
|
|
274
381
|
withCredentials: true,
|
|
382
|
+
getCredentials: params.credentials ? () => params.credentials : undefined,
|
|
275
383
|
});
|
|
276
384
|
if (userInfo.sub) {
|
|
277
385
|
userInfo.uid = userInfo.sub;
|
|
@@ -507,7 +615,7 @@ export class Auth {
|
|
|
507
615
|
const { isEncrypt } = params;
|
|
508
616
|
delete params.isEncrypt;
|
|
509
617
|
const payload = deepClone(params);
|
|
510
|
-
const encryptUtils = getEncryptUtils(isEncrypt, this.config.adapter);
|
|
618
|
+
const encryptUtils = await getEncryptUtils(isEncrypt, this.config.adapter);
|
|
511
619
|
if (!encryptUtils) {
|
|
512
620
|
return params;
|
|
513
621
|
}
|
|
@@ -574,7 +682,7 @@ export class Auth {
|
|
|
574
682
|
async modifyPassword(params) {
|
|
575
683
|
let publicKey = '';
|
|
576
684
|
let public_key_thumbprint = '';
|
|
577
|
-
const encryptUtils = getEncryptUtils(true, this.config.adapter);
|
|
685
|
+
const encryptUtils = await getEncryptUtils(true, this.config.adapter);
|
|
578
686
|
if (!encryptUtils) {
|
|
579
687
|
throw new Error('do not support encrypt, a encrypt util required.');
|
|
580
688
|
}
|
|
@@ -605,7 +713,7 @@ export class Auth {
|
|
|
605
713
|
async modifyPasswordWithoutLogin(params) {
|
|
606
714
|
let publicKey = '';
|
|
607
715
|
let public_key_thumbprint = '';
|
|
608
|
-
const encryptUtils = getEncryptUtils(true, this.config.adapter);
|
|
716
|
+
const encryptUtils = await getEncryptUtils(true, this.config.adapter);
|
|
609
717
|
if (!encryptUtils) {
|
|
610
718
|
throw new Error('do not support encrypt, a encrypt util required.');
|
|
611
719
|
}
|
|
@@ -632,4 +740,16 @@ export class Auth {
|
|
|
632
740
|
},
|
|
633
741
|
});
|
|
634
742
|
}
|
|
743
|
+
restoreUrlState(search, hash) {
|
|
744
|
+
if (search === undefined)
|
|
745
|
+
return;
|
|
746
|
+
try {
|
|
747
|
+
const url = new URL(window.location.href);
|
|
748
|
+
url.search = search;
|
|
749
|
+
url.hash = hash || '';
|
|
750
|
+
window.history.replaceState(null, '', url.toString());
|
|
751
|
+
}
|
|
752
|
+
catch {
|
|
753
|
+
}
|
|
754
|
+
}
|
|
635
755
|
}
|
|
@@ -108,3 +108,25 @@ export declare enum ErrorType {
|
|
|
108
108
|
CAPTCHA_REQUIRED = "captcha_required",
|
|
109
109
|
CAPTCHA_INVALID = "captcha_invalid"
|
|
110
110
|
}
|
|
111
|
+
export declare const LOGIN_STATE_CHANGED_TYPE: {
|
|
112
|
+
SIGN_OUT: string;
|
|
113
|
+
SIGN_IN: string;
|
|
114
|
+
CREDENTIALS_ERROR: string;
|
|
115
|
+
};
|
|
116
|
+
export declare const AUTH_STATE_CHANGED_TYPE: {
|
|
117
|
+
SIGNED_OUT: string;
|
|
118
|
+
SIGNED_IN: string;
|
|
119
|
+
INITIAL_SESSION: string;
|
|
120
|
+
PASSWORD_RECOVERY: string;
|
|
121
|
+
TOKEN_REFRESHED: string;
|
|
122
|
+
USER_UPDATED: string;
|
|
123
|
+
BIND_IDENTITY: string;
|
|
124
|
+
};
|
|
125
|
+
export declare const EVENTS: {
|
|
126
|
+
LOGIN_STATE_CHANGED: string;
|
|
127
|
+
AUTH_STATE_CHANGED: string;
|
|
128
|
+
};
|
|
129
|
+
export declare const OAUTH_TYPE: {
|
|
130
|
+
SIGN_IN: string;
|
|
131
|
+
BIND_IDENTITY: string;
|
|
132
|
+
};
|
package/dist/esm/auth/consts.js
CHANGED
|
@@ -112,3 +112,25 @@ export var ErrorType;
|
|
|
112
112
|
ErrorType["CAPTCHA_REQUIRED"] = "captcha_required";
|
|
113
113
|
ErrorType["CAPTCHA_INVALID"] = "captcha_invalid";
|
|
114
114
|
})(ErrorType || (ErrorType = {}));
|
|
115
|
+
export const LOGIN_STATE_CHANGED_TYPE = {
|
|
116
|
+
SIGN_OUT: 'sign_out',
|
|
117
|
+
SIGN_IN: 'sign_in',
|
|
118
|
+
CREDENTIALS_ERROR: 'credentials_error',
|
|
119
|
+
};
|
|
120
|
+
export const AUTH_STATE_CHANGED_TYPE = {
|
|
121
|
+
SIGNED_OUT: 'SIGNED_OUT',
|
|
122
|
+
SIGNED_IN: 'SIGNED_IN',
|
|
123
|
+
INITIAL_SESSION: 'INITIAL_SESSION',
|
|
124
|
+
PASSWORD_RECOVERY: 'PASSWORD_RECOVERY',
|
|
125
|
+
TOKEN_REFRESHED: 'TOKEN_REFRESHED',
|
|
126
|
+
USER_UPDATED: 'USER_UPDATED',
|
|
127
|
+
BIND_IDENTITY: 'BIND_IDENTITY',
|
|
128
|
+
};
|
|
129
|
+
export const EVENTS = {
|
|
130
|
+
LOGIN_STATE_CHANGED: 'loginStateChanged',
|
|
131
|
+
AUTH_STATE_CHANGED: 'authStateChanged',
|
|
132
|
+
};
|
|
133
|
+
export const OAUTH_TYPE = {
|
|
134
|
+
SIGN_IN: 'sign_in',
|
|
135
|
+
BIND_IDENTITY: 'bind_identity',
|
|
136
|
+
};
|
|
@@ -235,7 +235,7 @@ export interface PatchProviderTokenResponse {
|
|
|
235
235
|
}
|
|
236
236
|
export interface GenProviderRedirectUriRequest {
|
|
237
237
|
provider_id: string;
|
|
238
|
-
redirect_uri
|
|
238
|
+
redirect_uri?: string;
|
|
239
239
|
provider_redirect_uri?: string;
|
|
240
240
|
state: string;
|
|
241
241
|
scope?: string;
|
|
@@ -278,6 +278,12 @@ export interface UserProfile {
|
|
|
278
278
|
zoneinfo?: string;
|
|
279
279
|
locale?: string;
|
|
280
280
|
created_from?: string;
|
|
281
|
+
created_at?: string;
|
|
282
|
+
updated_at?: string;
|
|
283
|
+
loginType?: string;
|
|
284
|
+
avatarUrl?: string;
|
|
285
|
+
location?: any;
|
|
286
|
+
hasPassword?: boolean;
|
|
281
287
|
}
|
|
282
288
|
interface UserProvider {
|
|
283
289
|
id: string;
|
|
@@ -377,8 +383,8 @@ export interface QueryUserProfileResponse {
|
|
|
377
383
|
data?: [SimpleUserProfile];
|
|
378
384
|
}
|
|
379
385
|
export interface ResetPasswordRequest extends BaseRequest {
|
|
380
|
-
email
|
|
381
|
-
phone_number
|
|
386
|
+
email?: string;
|
|
387
|
+
phone_number?: string;
|
|
382
388
|
new_password: string;
|
|
383
389
|
verification_token: string;
|
|
384
390
|
}
|
|
@@ -436,7 +442,7 @@ export interface SignoutRequest {
|
|
|
436
442
|
redirect_uri?: string;
|
|
437
443
|
state?: string;
|
|
438
444
|
}
|
|
439
|
-
export interface
|
|
445
|
+
export interface SignoutResponse {
|
|
440
446
|
redirect_uri?: string;
|
|
441
447
|
}
|
|
442
448
|
export interface AuthorizeDeviceRequest extends BaseRequest {
|
|
@@ -511,6 +517,8 @@ export interface ModifyUserBasicInfoRequest {
|
|
|
511
517
|
gender?: 'MALE' | 'FEMALE';
|
|
512
518
|
password?: string;
|
|
513
519
|
new_password?: string;
|
|
520
|
+
email?: string;
|
|
521
|
+
phone?: string;
|
|
514
522
|
}
|
|
515
523
|
export interface GetUserBehaviorLog {
|
|
516
524
|
type: 'LOGIN' | 'MODIFY';
|
|
@@ -537,5 +545,6 @@ export interface ToDefaultLoginPage {
|
|
|
537
545
|
config_version?: 'env' | string;
|
|
538
546
|
redirect_uri?: string;
|
|
539
547
|
app_id?: string;
|
|
548
|
+
query?: Record<string, any>;
|
|
540
549
|
}
|
|
541
550
|
export {};
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { CloudbaseEventEmitter } from '@cloudbase/utilities/dist/cjs/libs/events';
|
|
2
|
+
import { parseCaptcha } from '@cloudbase/utilities/dist/cjs/libs/util';
|
|
3
|
+
const debounce = (func, delay) => {
|
|
4
|
+
let timeoutId;
|
|
5
|
+
return (...args) => {
|
|
6
|
+
clearTimeout(timeoutId);
|
|
7
|
+
timeoutId = setTimeout(() => func.apply(null, args), delay);
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
const eventBus = new CloudbaseEventEmitter();
|
|
11
|
+
const CAPTCHA_EVENT = {
|
|
12
|
+
CAPTCHA_DATA_CHANGE: 'captchaDataChange',
|
|
13
|
+
RESOLVE_CAPTCHA_DATA: 'resolveCaptchaData',
|
|
14
|
+
};
|
|
15
|
+
const CAPTCHA_STYLES = {
|
|
16
|
+
overlay: 'position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.5);z-index:999',
|
|
17
|
+
modal: 'position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:320px;padding:20px;background:#fff;border-radius:8px;box-shadow:0 0 10px rgba(0,0,0,0.2);z-index:1000',
|
|
18
|
+
prompt: 'margin-bottom:15px',
|
|
19
|
+
captchaWrap: 'display:flex;align-items:center;justify-content:space-between;margin-bottom:15px',
|
|
20
|
+
captchaImg: 'width:100%;height:auto;border:1px solid #eee',
|
|
21
|
+
refreshBtn: 'padding:10px 8px;background:#007bff;color:#fff;border:none;border-radius:4px;cursor:pointer;flex:1;white-space:nowrap;margin-left:10px',
|
|
22
|
+
input: 'width:100%;padding:14px 16px;margin-bottom:15px;box-sizing:border-box;border:2px solid #e8ecf4;border-radius:10px;font-size:15px',
|
|
23
|
+
confirmBtn: 'width:100%;padding:10px;background:#007bff;color:#fff;border:none;border-radius:4px;cursor:pointer',
|
|
24
|
+
loading: 'background:#6c757d;cursor:not-allowed',
|
|
25
|
+
};
|
|
26
|
+
const genCaptchaDom = ({ oauthInstance, captchaState }) => {
|
|
27
|
+
const CAPTCHA_IMG_ID = 'captcha-image';
|
|
28
|
+
const refreshCaptcha = async () => {
|
|
29
|
+
try {
|
|
30
|
+
const result = await oauthInstance.createCaptchaData({ state: captchaState.state });
|
|
31
|
+
captchaState = { ...captchaState, captchaData: result.data, token: result.token };
|
|
32
|
+
document.getElementById(CAPTCHA_IMG_ID).src = result.data;
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error('刷新图形验证码失败', error);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const createElement = (tag, styles, text) => {
|
|
39
|
+
const el = document.createElement(tag);
|
|
40
|
+
if (styles)
|
|
41
|
+
el.style.cssText = styles;
|
|
42
|
+
if (text)
|
|
43
|
+
el.textContent = text;
|
|
44
|
+
return el;
|
|
45
|
+
};
|
|
46
|
+
const overlay = createElement('div', CAPTCHA_STYLES.overlay);
|
|
47
|
+
const modal = createElement('div', CAPTCHA_STYLES.modal);
|
|
48
|
+
modal.appendChild(createElement('p', CAPTCHA_STYLES.prompt, '请输入你看到的字符:'));
|
|
49
|
+
const captchaWrap = createElement('div', CAPTCHA_STYLES.captchaWrap);
|
|
50
|
+
const captchaImg = createElement('img', CAPTCHA_STYLES.captchaImg);
|
|
51
|
+
captchaImg.id = CAPTCHA_IMG_ID;
|
|
52
|
+
captchaImg.src = captchaState.captchaData;
|
|
53
|
+
captchaWrap.appendChild(captchaImg);
|
|
54
|
+
const refreshBtn = createElement('button', CAPTCHA_STYLES.refreshBtn, '刷新');
|
|
55
|
+
refreshBtn.onclick = debounce(async () => {
|
|
56
|
+
refreshBtn.textContent = '加载中...';
|
|
57
|
+
refreshBtn.disabled = true;
|
|
58
|
+
refreshBtn.style.cssText = `${CAPTCHA_STYLES.refreshBtn};${CAPTCHA_STYLES.loading}`;
|
|
59
|
+
try {
|
|
60
|
+
await refreshCaptcha();
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
refreshBtn.textContent = '刷新';
|
|
64
|
+
refreshBtn.disabled = false;
|
|
65
|
+
refreshBtn.style.cssText = CAPTCHA_STYLES.refreshBtn;
|
|
66
|
+
}
|
|
67
|
+
}, 500);
|
|
68
|
+
captchaWrap.appendChild(refreshBtn);
|
|
69
|
+
modal.appendChild(captchaWrap);
|
|
70
|
+
const input = createElement('input', CAPTCHA_STYLES.input);
|
|
71
|
+
input.type = 'text';
|
|
72
|
+
input.placeholder = '输入字符';
|
|
73
|
+
input.maxLength = 4;
|
|
74
|
+
modal.appendChild(input);
|
|
75
|
+
const errorMsg = createElement('div', 'color:#dc3545;font-size:12px;margin-bottom:10px;display:none;padding:8px;background:#f8d7da;border:1px solid #f5c6cb;border-radius:4px');
|
|
76
|
+
modal.appendChild(errorMsg);
|
|
77
|
+
const showError = (message) => {
|
|
78
|
+
errorMsg.textContent = message;
|
|
79
|
+
errorMsg.style.display = 'block';
|
|
80
|
+
};
|
|
81
|
+
const confirmBtn = createElement('button', CAPTCHA_STYLES.confirmBtn, '确定');
|
|
82
|
+
confirmBtn.onclick = debounce(async () => {
|
|
83
|
+
const inputValue = input.value.trim();
|
|
84
|
+
if (!inputValue) {
|
|
85
|
+
showError('请输入字符');
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
errorMsg.style.display = 'none';
|
|
89
|
+
confirmBtn.textContent = '验证中...';
|
|
90
|
+
confirmBtn.disabled = true;
|
|
91
|
+
confirmBtn.style.cssText = `${CAPTCHA_STYLES.confirmBtn};${CAPTCHA_STYLES.loading}`;
|
|
92
|
+
try {
|
|
93
|
+
const verifyResult = await oauthInstance.verifyCaptchaData({
|
|
94
|
+
token: captchaState.token,
|
|
95
|
+
key: inputValue,
|
|
96
|
+
});
|
|
97
|
+
eventBus.fire(CAPTCHA_EVENT.RESOLVE_CAPTCHA_DATA, verifyResult);
|
|
98
|
+
console.log('图形验证码校验成功');
|
|
99
|
+
document.body.removeChild(overlay);
|
|
100
|
+
document.body.removeChild(modal);
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
console.error('图形验证码校验失败', error);
|
|
104
|
+
const errorMessage = error.error_description || '图形验证码校验失败';
|
|
105
|
+
showError(errorMessage);
|
|
106
|
+
input.value = '';
|
|
107
|
+
input.focus();
|
|
108
|
+
await refreshCaptcha();
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
confirmBtn.textContent = '确定';
|
|
112
|
+
confirmBtn.disabled = false;
|
|
113
|
+
confirmBtn.style.cssText = CAPTCHA_STYLES.confirmBtn;
|
|
114
|
+
}
|
|
115
|
+
}, 500);
|
|
116
|
+
modal.appendChild(confirmBtn);
|
|
117
|
+
document.body.appendChild(overlay);
|
|
118
|
+
document.body.appendChild(modal);
|
|
119
|
+
};
|
|
120
|
+
export const openURIWithCallback = async (url, oauthInstance) => {
|
|
121
|
+
const { captchaData, state, token } = parseCaptcha(url);
|
|
122
|
+
genCaptchaDom({ oauthInstance, captchaState: { captchaData, state, token } });
|
|
123
|
+
return new Promise((resolve) => {
|
|
124
|
+
console.log('等待图形验证码校验结果...');
|
|
125
|
+
eventBus.on(CAPTCHA_EVENT.RESOLVE_CAPTCHA_DATA, (res) => {
|
|
126
|
+
resolve(res?.data);
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
};
|