lgsso-sdk 1.1.2 → 1.1.4
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 +433 -120
- package/dist/lgsso-sdk.cjs +25 -1
- package/dist/lgsso-sdk.esm.js +25 -1
- package/dist/lgsso-sdk.js +25 -1
- package/dist/lgsso-sdk.min.js +1 -1
- package/package.json +1 -1
- package/src/sso.js +25 -1
package/README.md
CHANGED
|
@@ -1,132 +1,243 @@
|
|
|
1
|
-
#
|
|
1
|
+
# lgsso-sdk
|
|
2
2
|
|
|
3
3
|
LG-SSO SDK 是一个无框架依赖的单点登录(SSO)JavaScript 库,提供 token 管理、登录状态维护、注销、跨应用跳转等功能,可帮助 Web 应用快速集成 SSO 认证机制。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 一、安装
|
|
6
|
+
|
|
7
|
+
支持 npm 和 yarn 两种包管理工具,执行对应命令完成安装:
|
|
6
8
|
|
|
7
9
|
|
|
8
10
|
|
|
9
11
|
```
|
|
10
|
-
|
|
12
|
+
\# 使用 npm 安装
|
|
11
13
|
|
|
12
|
-
npm install
|
|
14
|
+
npm install lgsso-sdk
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
\# 使用 yarn 安装
|
|
15
17
|
|
|
16
|
-
yarn add
|
|
18
|
+
yarn add lgsso-sdk
|
|
17
19
|
```
|
|
18
20
|
|
|
19
|
-
##
|
|
21
|
+
## 二、引入方式
|
|
22
|
+
|
|
23
|
+
提供「默认实例」和「自定义实例」两种引入方式,根据项目需求选择:
|
|
20
24
|
|
|
21
25
|
|
|
22
26
|
|
|
23
27
|
```
|
|
24
|
-
//
|
|
28
|
+
// 1. 引入默认实例(推荐单 SSO 配置场景)
|
|
25
29
|
|
|
26
|
-
import lgsso from '
|
|
30
|
+
import lgsso from 'lgsso-sdk';
|
|
27
31
|
|
|
28
|
-
//
|
|
32
|
+
// 2. 创建自定义实例(多 SSO 配置场景,如多系统对接)
|
|
29
33
|
|
|
30
|
-
import { createSSO } from '
|
|
34
|
+
import { createSSO } from 'lgsso-sdk';
|
|
31
35
|
|
|
32
36
|
const customSSO = createSSO();
|
|
33
37
|
```
|
|
34
38
|
|
|
35
|
-
##
|
|
39
|
+
## 三、初始化配置
|
|
40
|
+
|
|
41
|
+
**⚠️ 重要**:使用 SDK 所有核心方法前,必须先调用 `init()` 方法完成初始化,否则会抛出「未初始化」错误。
|
|
36
42
|
|
|
37
|
-
|
|
43
|
+
### 3.1 初始化示例代码
|
|
38
44
|
|
|
39
45
|
|
|
40
46
|
|
|
41
47
|
```
|
|
42
48
|
lgsso.init({
|
|
43
49
|
|
|
44
|
-
|
|
50
|
+
  accessCodeKey: 'accessCode', // accessCode 在 URL 中的参数名
|
|
51
|
+
|
|
52
|
+
  tokenKey: 'scm\_token', // token 在存储中的键名
|
|
53
|
+
|
|
54
|
+
  timeout: 5000, // 请求超时时间(单位:毫秒)
|
|
55
|
+
|
|
56
|
+
  headers: {}, // 自定义请求头(如项目标识、Content-Type)
|
|
45
57
|
|
|
46
|
-
|
|
58
|
+
  tokenApi: '/api/token', // 通过 accessCode 获取 token 的 API 地址(必填)
|
|
47
59
|
|
|
48
|
-
|
|
60
|
+
  refreshCodeApi: '/api/refresh', // 刷新 accessCode 的 API 地址
|
|
49
61
|
|
|
50
|
-
|
|
62
|
+
  logoutApi: '/api/logout', // 注销 API 地址
|
|
51
63
|
|
|
52
|
-
|
|
64
|
+
  logOutUrl: '/login', // 登录页面 URL(无 token 时自动跳转)
|
|
53
65
|
|
|
54
|
-
|
|
66
|
+
  storage: localStorage, // 存储方式(支持 localStorage/sessionStorage)
|
|
55
67
|
|
|
56
|
-
|
|
68
|
+
  oldPwdKey: 'oldPwd', // 旧密码在请求参数中的键名(用于修改密码)
|
|
57
69
|
|
|
58
|
-
|
|
70
|
+
  newPwdKey: 'newPwd', // 新密码在请求参数中的键名(用于修改密码)
|
|
59
71
|
|
|
60
|
-
|
|
72
|
+
  changePasswordApi: '/api/change-pwd' // 修改密码的 API 地址(用于修改密码功能)
|
|
61
73
|
|
|
62
74
|
})
|
|
63
75
|
|
|
64
76
|
.then(result => {
|
|
65
77
|
|
|
66
|
-
|
|
78
|
+
  console.log('初始化结果:', result); // 打印初始化状态(成功/失败信息)
|
|
67
79
|
|
|
68
80
|
});
|
|
69
81
|
```
|
|
70
82
|
|
|
71
|
-
### 配置参数说明
|
|
83
|
+
### 3.2 配置参数说明
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
| 参数名 | 类型 | 默认值 | 说明 |
|
|
88
|
+
| ----------------- | ------ | ------------ | -------------------------------------------------- |
|
|
89
|
+
| accessCodeKey | String | 'accessCode' | accessCode 在 URL 中的参数名(如 `?accessCode=xxx`) |
|
|
90
|
+
| tokenKey | String | 'scm\_token' | token 在 storage 中的存储键名(用于读取 / 删除 token) |
|
|
91
|
+
| timeout | Number | 5000 | 请求超时时间(单位:ms),超时后触发错误 |
|
|
92
|
+
| headers | Object | {} | 全局自定义请求头,所有 SDK 发起的请求均携带 |
|
|
93
|
+
| tokenApi | String | '' | 通过 accessCode 获取 token 的 API 地址(**必填**,否则无法初始化) |
|
|
94
|
+
| refreshCodeApi | String | '' | 刷新 accessCode 的 API 地址(跨应用跳转需配置) |
|
|
95
|
+
| logoutApi | String | '' | 注销 API 地址(未配置时仅清除本地 token) |
|
|
96
|
+
| logOutUrl | String | '' | 登录页面 URL(无有效 token 时自动跳转,**必填**) |
|
|
97
|
+
| storage | Object | localStorage | 存储介质,需实现 `setItem(key, value)` 和 `getItem(key)` 方法 |
|
|
98
|
+
| oldPwdKey | String | 'oldPwd' | 旧密码在请求参数中的键名(修改密码功能用) |
|
|
99
|
+
| newPwdKey | String | 'newPwd' | 新密码在请求参数中的键名(修改密码功能用) |
|
|
100
|
+
| changePasswordApi | String | '' | 修改密码的 API 地址(修改密码功能需配置,**必填**) |
|
|
101
|
+
|
|
102
|
+
## 四、核心方法
|
|
103
|
+
|
|
104
|
+
所有方法均返回 `Promise` 对象,支持 `async/await` 或 `.then()` 链式调用,便于异步流程控制。
|
|
105
|
+
|
|
106
|
+
### 4.1 init(options)
|
|
107
|
+
|
|
108
|
+
#### 功能
|
|
109
|
+
|
|
110
|
+
初始化 SDK,完成配置合并、参数验证、AccessCode 换 Token、无 Token 跳转登录页等操作。
|
|
111
|
+
|
|
112
|
+
#### 参数
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
* `options`:Object 类型,配置选项(详见「3.1 初始化示例代码」)
|
|
117
|
+
|
|
118
|
+
#### 返回
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
* `Promise<Object>`:初始化结果,结构如下:
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
{
|
|
128
|
+
|
|
129
|
+
  code: 0, // 状态码(0:成功,-100:初始化错误)
|
|
130
|
+
|
|
131
|
+
  msg: '初始化成功', // 提示信息
|
|
132
|
+
|
|
133
|
+
  success: true, // 成功标识(true/false)
|
|
72
134
|
|
|
135
|
+
  data: null // 附加数据(如 Token,仅部分场景返回)
|
|
73
136
|
|
|
137
|
+
}
|
|
138
|
+
```
|
|
74
139
|
|
|
75
|
-
|
|
76
|
-
| -------------- | ------ | ------------ | ----------------------------------- |
|
|
77
|
-
| accessCodeKey | String | 'accessCode' | accessCode 在 URL 中的参数名 |
|
|
78
|
-
| tokenKey | String | 'scm_token' | token 在 storage 中的存储键名 |
|
|
79
|
-
| timeout | Number | 5000 | 请求超时时间(ms) |
|
|
80
|
-
| headers | Object | {} | 自定义请求头 |
|
|
81
|
-
| tokenApi | String | '' | 通过 accessCode 获取 token 的 API 地址(必填) |
|
|
82
|
-
| refreshCodeApi | String | '' | 刷新 accessCode 的 API 地址 |
|
|
83
|
-
| logoutApi | String | '' | 注销 API 地址 |
|
|
84
|
-
| logOutUrl | String | '' | 登录页面 URL |
|
|
85
|
-
| storage | Object | localStorage | 存储方式,需实现 setItem 和 getItem 方法 |
|
|
140
|
+
### 4.2 getToken()
|
|
86
141
|
|
|
87
|
-
|
|
142
|
+
#### 功能
|
|
88
143
|
|
|
89
|
-
|
|
144
|
+
获取存储在本地的 Token 值。
|
|
90
145
|
|
|
91
|
-
|
|
146
|
+
#### 参数
|
|
92
147
|
|
|
93
|
-
**参数**:
|
|
94
148
|
|
|
95
149
|
|
|
150
|
+
* 无
|
|
96
151
|
|
|
97
|
-
|
|
152
|
+
#### 返回
|
|
98
153
|
|
|
99
|
-
**返回**:`Promise<Object>` - 初始化结果
|
|
100
154
|
|
|
101
|
-
### getToken()
|
|
102
155
|
|
|
103
|
-
|
|
156
|
+
* `String|null`:Token 值(存在则返回字符串,不存在 / 过期则返回 null)
|
|
104
157
|
|
|
105
|
-
|
|
158
|
+
#### 示例代码
|
|
106
159
|
|
|
107
160
|
|
|
108
161
|
|
|
109
162
|
```
|
|
110
163
|
const token = lgsso.getToken();
|
|
111
164
|
|
|
112
|
-
|
|
165
|
+
if (token) {
|
|
166
|
+
|
|
167
|
+
  console.log('当前有效 Token:', token);
|
|
168
|
+
|
|
169
|
+
  // 可用于非 SDK 发起的接口请求(如自定义 axios 实例)
|
|
170
|
+
|
|
171
|
+
} else {
|
|
172
|
+
|
|
173
|
+
  console.log('无有效 Token,需重新登录');
|
|
174
|
+
|
|
175
|
+
}
|
|
113
176
|
```
|
|
114
177
|
|
|
115
|
-
### removeToken()
|
|
178
|
+
### 4.3 removeToken()
|
|
116
179
|
|
|
117
|
-
|
|
180
|
+
#### 功能
|
|
181
|
+
|
|
182
|
+
删除本地存储的 Token(仅清除本地数据,不调用 `logoutApi`)。
|
|
183
|
+
|
|
184
|
+
#### 参数
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
* 无
|
|
189
|
+
|
|
190
|
+
#### 返回
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
* 无
|
|
195
|
+
|
|
196
|
+
#### 示例代码
|
|
118
197
|
|
|
119
198
|
|
|
120
199
|
|
|
121
200
|
```
|
|
201
|
+
// 清除本地 Token
|
|
202
|
+
|
|
122
203
|
lgsso.removeToken();
|
|
204
|
+
|
|
205
|
+
console.log('Token 已清除:', lgsso.getToken()); // 输出 null
|
|
123
206
|
```
|
|
124
207
|
|
|
125
|
-
### logout()
|
|
208
|
+
### 4.4 logout()
|
|
209
|
+
|
|
210
|
+
#### 功能
|
|
211
|
+
|
|
212
|
+
执行退出登录流程:调用 `logoutApi`(若配置)→ 清除本地 Token → 跳转到登录页。
|
|
213
|
+
|
|
214
|
+
#### 参数
|
|
215
|
+
|
|
216
|
+
|
|
126
217
|
|
|
127
|
-
|
|
218
|
+
* 无
|
|
128
219
|
|
|
129
|
-
|
|
220
|
+
#### 返回
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
* `Promise<Object>`:退出结果,结构如下:
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
```
|
|
229
|
+
{
|
|
230
|
+
|
|
231
|
+
  code: 0, // 状态码(0:成功,-102:无 logoutApi,-103:退出失败)
|
|
232
|
+
|
|
233
|
+
  msg: '退出成功', // 提示信息
|
|
234
|
+
|
|
235
|
+
  success: true // 成功标识(true/false)
|
|
236
|
+
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
#### 示例代码
|
|
130
241
|
|
|
131
242
|
|
|
132
243
|
|
|
@@ -135,48 +246,116 @@ lgsso.logout()
|
|
|
135
246
|
|
|
136
247
|
.then(result => {
|
|
137
248
|
|
|
138
|
-
|
|
249
|
+
  if (result.code === 0) {
|
|
250
|
+
|
|
251
|
+
  console.log('退出成功,已跳转至登录页');
|
|
252
|
+
|
|
253
|
+
  } else {
|
|
254
|
+
|
|
255
|
+
  console.warn('退出警告:', result.msg);
|
|
256
|
+
|
|
257
|
+
  }
|
|
258
|
+
|
|
259
|
+
})
|
|
260
|
+
|
|
261
|
+
.catch(error => {
|
|
262
|
+
|
|
263
|
+
  console.error('退出失败:', error.message);
|
|
139
264
|
|
|
140
265
|
});
|
|
141
266
|
```
|
|
142
267
|
|
|
143
|
-
### toUrl(redirectUrl, target)
|
|
268
|
+
### 4.5 toUrl(redirectUrl, target)
|
|
269
|
+
|
|
270
|
+
#### 功能
|
|
271
|
+
|
|
272
|
+
跨应用跳转核心方法:通过当前 Token 刷新 AccessCode → 将 AccessCode 拼接至目标 URL → 执行跳转。
|
|
144
273
|
|
|
145
|
-
|
|
274
|
+
#### 参数
|
|
146
275
|
|
|
147
|
-
**参数**:
|
|
148
276
|
|
|
149
277
|
|
|
278
|
+
1. `redirectUrl`:String 类型(必填),目标跳转地址(如 `https://other-app.example.com`)
|
|
150
279
|
|
|
151
|
-
|
|
280
|
+
2. `target`:String 类型(可选),跳转方式(`'_self'`:当前页面跳转,默认;`'_blank'`:新窗口打开)
|
|
152
281
|
|
|
153
|
-
|
|
282
|
+
#### 返回
|
|
154
283
|
|
|
155
|
-
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
* `Promise<Object>`:跳转准备结果(仅代表 AccessCode 刷新状态,跳转操作同步执行)
|
|
287
|
+
|
|
288
|
+
#### 示例代码
|
|
156
289
|
|
|
157
290
|
|
|
158
291
|
|
|
159
292
|
```
|
|
160
|
-
//
|
|
293
|
+
// 1. 在当前页面跳转到目标应用(默认方式)
|
|
161
294
|
|
|
162
|
-
lgsso.toUrl('https://example.com
|
|
295
|
+
lgsso.toUrl('https://other-app.example.com', '\_self')
|
|
163
296
|
|
|
164
297
|
.then(result => {
|
|
165
298
|
|
|
166
|
-
|
|
299
|
+
  if (result.code === 0) {
|
|
300
|
+
|
|
301
|
+
  console.log('AccessCode 刷新成功,已跳转');
|
|
302
|
+
|
|
303
|
+
  }
|
|
304
|
+
|
|
305
|
+
})
|
|
306
|
+
|
|
307
|
+
.catch(error => {
|
|
308
|
+
|
|
309
|
+
  console.error('跳转失败:', error.message);
|
|
167
310
|
|
|
168
311
|
});
|
|
169
312
|
|
|
170
|
-
//
|
|
313
|
+
// 2. 在新窗口打开目标应用
|
|
314
|
+
|
|
315
|
+
lgsso.toUrl('https://other-app.example.com', '\_blank')
|
|
316
|
+
|
|
317
|
+
.catch(error => {
|
|
318
|
+
|
|
319
|
+
  console.error('新窗口跳转失败:', error.message);
|
|
320
|
+
|
|
321
|
+
});
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### 4.6 getAccessCode()
|
|
325
|
+
|
|
326
|
+
#### 功能
|
|
327
|
+
|
|
328
|
+
通过当前 Token 刷新 AccessCode(仅获取 AccessCode,不执行跳转,适用于自定义跳转场景)。
|
|
329
|
+
|
|
330
|
+
#### 参数
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
* 无
|
|
335
|
+
|
|
336
|
+
#### 返回
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
* `Promise<Object>`:AccessCode 刷新结果,结构如下:
|
|
341
|
+
|
|
342
|
+
|
|
171
343
|
|
|
172
|
-
lgsso.toUrl('https://example.com/target', ' _blank');
|
|
173
344
|
```
|
|
345
|
+
{
|
|
174
346
|
|
|
175
|
-
|
|
347
|
+
  code: 0, // 状态码(0:成功,-105:无 refreshCodeApi,-106:无 Token)
|
|
176
348
|
|
|
177
|
-
|
|
349
|
+
  msg: 'AccessCode 刷新成功',// 提示信息
|
|
178
350
|
|
|
179
|
-
|
|
351
|
+
  success: true, // 成功标识
|
|
352
|
+
|
|
353
|
+
  data: 'abc123xyz' // 新的 AccessCode(成功时返回)
|
|
354
|
+
|
|
355
|
+
}
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
#### 示例代码
|
|
180
359
|
|
|
181
360
|
|
|
182
361
|
|
|
@@ -185,122 +364,256 @@ lgsso.getAccessCode()
|
|
|
185
364
|
|
|
186
365
|
.then(result => {
|
|
187
366
|
|
|
188
|
-
|
|
367
|
+
  if (result.code === 0) {
|
|
368
|
+
|
|
369
|
+
  const accessCode = result.data;
|
|
370
|
+
|
|
371
|
+
  // 自定义跳转逻辑(如拼接多个参数)
|
|
372
|
+
|
|
373
|
+
  const targetUrl = \`https://other-app.example.com?accessCode=\${accessCode}\×tamp=\${Date.now()}\`;
|
|
374
|
+
|
|
375
|
+
  window.location.href = targetUrl;
|
|
376
|
+
|
|
377
|
+
  }
|
|
378
|
+
|
|
379
|
+
})
|
|
380
|
+
|
|
381
|
+
.catch(error => {
|
|
382
|
+
|
|
383
|
+
  console.error('AccessCode 刷新失败:', error.message);
|
|
384
|
+
|
|
385
|
+
});
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
### 4.7 changePassword(fromData)
|
|
389
|
+
|
|
390
|
+
#### 功能
|
|
391
|
+
|
|
392
|
+
调用修改密码 API,更新用户密码(需先配置 `changePasswordApi`、`oldPwdKey`、`newPwdKey`)。
|
|
393
|
+
|
|
394
|
+
#### 参数
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
* `fromData`:Object 类型(必填),密码信息对象,需包含 `oldPwdKey` 和 `newPwdKey` 配置对应的键名(默认需包含 `oldPwd` 和 `newPwd`)
|
|
399
|
+
|
|
400
|
+
#### 返回
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
* `Promise<Object>`:密码修改结果,结构如下:
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
```
|
|
409
|
+
{
|
|
410
|
+
|
|
411
|
+
  code: 0, // 状态码(0:成功,-1:参数缺失,其他:接口错误)
|
|
412
|
+
|
|
413
|
+
  msg: '密码修改成功', // 提示信息
|
|
414
|
+
|
|
415
|
+
  success: true // 成功标识(true/false)
|
|
416
|
+
|
|
417
|
+
}
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
#### 示例代码
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
```
|
|
425
|
+
// 1. 使用默认参数键名(oldPwd、newPwd)
|
|
426
|
+
|
|
427
|
+
lgsso.changePassword({
|
|
428
|
+
|
|
429
|
+
  oldPwd: 'current-password-123', // 旧密码
|
|
430
|
+
|
|
431
|
+
  newPwd: 'new-password-456' // 新密码
|
|
432
|
+
|
|
433
|
+
})
|
|
434
|
+
|
|
435
|
+
.then(result => {
|
|
436
|
+
|
|
437
|
+
  if (result.code === 0) {
|
|
438
|
+
|
|
439
|
+
  console.log('密码修改成功,建议重新登录');
|
|
440
|
+
|
|
441
|
+
  // 可选:强制退出登录(避免旧 Token 残留)
|
|
442
|
+
|
|
443
|
+
  // lgsso.logout();
|
|
444
|
+
|
|
445
|
+
  } else {
|
|
446
|
+
|
|
447
|
+
  console.error('密码修改失败:', result.msg);
|
|
448
|
+
|
|
449
|
+
  }
|
|
450
|
+
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
// 2. 使用自定义参数键名(如配置 oldPwdKey: 'oldPassword'、newPwdKey: 'newPassword')
|
|
189
454
|
|
|
190
|
-
|
|
455
|
+
lgsso.changePassword({
|
|
191
456
|
|
|
192
|
-
|
|
457
|
+
  oldPassword: 'current-password-123',
|
|
458
|
+
|
|
459
|
+
  newPassword: 'new-password-456'
|
|
193
460
|
|
|
194
461
|
});
|
|
195
462
|
```
|
|
196
463
|
|
|
197
|
-
##
|
|
464
|
+
## 五、错误码说明
|
|
198
465
|
|
|
199
466
|
|
|
200
467
|
|
|
201
|
-
| 错误码 | 说明
|
|
202
|
-
| ---- |
|
|
203
|
-
| -
|
|
204
|
-
| -
|
|
205
|
-
| -
|
|
206
|
-
| -
|
|
207
|
-
| -
|
|
208
|
-
| -
|
|
209
|
-
| -
|
|
210
|
-
| -
|
|
211
|
-
| -
|
|
212
|
-
| -
|
|
213
|
-
| -
|
|
214
|
-
| -
|
|
215
|
-
| -
|
|
468
|
+
| 错误码 | 说明 | 所属场景 |
|
|
469
|
+
| ---- | -------------------------------------------- | --------------------- |
|
|
470
|
+
| -1 | 密码修改参数验证错误(如缺少旧密码 / 新密码、参数键名不匹配配置) | 密码修改 |
|
|
471
|
+
| -100 | 初始化相关错误(如缺少必填配置 `tokenApi`/`logOutUrl`、配置无效) | 初始化 |
|
|
472
|
+
| -101 | 未初始化(调用其他方法前未调用 `init()`) | 所有方法 |
|
|
473
|
+
| -102 | 未配置 `logoutApi`(仅清除本地 Token,不调用后端接口) | 退出登录 |
|
|
474
|
+
| -103 | 退出登录失败(如 `logoutApi` 接口报错、网络异常) | 退出登录 |
|
|
475
|
+
| -104 | 跳转地址为空(`redirectUrl` 参数未传) | 跨应用跳转 |
|
|
476
|
+
| -105 | 未配置 `refreshCodeApi`(无法刷新 AccessCode) | 跨应用跳转 / 获取 AccessCode |
|
|
477
|
+
| -106 | 未找到有效 Token(本地存储无 Token 或已过期) | 所有需 Token 方法 |
|
|
478
|
+
| -107 | 跳转失败(如 AccessCode 刷新失败、网络异常) | 跨应用跳转 |
|
|
479
|
+
| -108 | `target` 参数无效(仅支持 `'_self'` 或 `'_blank'`) | 跨应用跳转 |
|
|
480
|
+
| -200 | 非浏览器环境使用 `request` 方法(如 Node.js 环境) | 所有请求 |
|
|
481
|
+
| -201 | 响应数据不是有效的 JSON 格式(接口返回格式错误) | 所有请求 |
|
|
482
|
+
| -202 | 请求超时(超过配置的 `timeout` 时间) | 所有请求 |
|
|
483
|
+
| -203 | 网络请求失败(如跨域错误、404/500 状态码) | 所有请求 |
|
|
216
484
|
|
|
217
|
-
##
|
|
485
|
+
## 六、完整使用示例
|
|
218
486
|
|
|
219
487
|
|
|
220
488
|
|
|
221
489
|
```
|
|
222
|
-
// 初始化SDK
|
|
490
|
+
// 初始化 SDK(项目入口处调用,如 main.js)
|
|
223
491
|
|
|
224
492
|
lgsso.init({
|
|
225
493
|
|
|
226
|
-
|
|
494
|
+
  tokenApi: '/api/getToken',
|
|
495
|
+
|
|
496
|
+
  refreshCodeApi: '/api/refreshCode',
|
|
497
|
+
|
|
498
|
+
  logoutApi: '/api/logout',
|
|
227
499
|
|
|
228
|
-
|
|
500
|
+
  logOutUrl: '/login',
|
|
229
501
|
|
|
230
|
-
|
|
502
|
+
  oldPwdKey: 'oldPwd',
|
|
231
503
|
|
|
232
|
-
|
|
504
|
+
  newPwdKey: 'newPwd',
|
|
505
|
+
|
|
506
|
+
  changePasswordApi: '/api/change-pwd'
|
|
233
507
|
|
|
234
508
|
})
|
|
235
509
|
|
|
236
510
|
.then(initResult => {
|
|
237
511
|
|
|
238
|
-
|
|
512
|
+
  console.log('初始化结果:', initResult);
|
|
513
|
+
|
|
514
|
+
  
|
|
515
|
+
|
|
516
|
+
  // 1. 获取当前 Token
|
|
517
|
+
|
|
518
|
+
  const token = lgsso.getToken();
|
|
519
|
+
|
|
520
|
+
  console.log('当前 Token:', token);
|
|
521
|
+
|
|
522
|
+
  
|
|
523
|
+
|
|
524
|
+
  // 2. 绑定「跳转到当前页面」按钮事件
|
|
525
|
+
|
|
526
|
+
  document.getElementById('gotoCurrent').addEventListener('click', () => {
|
|
527
|
+
|
|
528
|
+
  lgsso.toUrl('https://other-app.example.com', '\_self')
|
|
239
529
|
|
|
240
|
-
|
|
530
|
+
  .catch(err => console.error('跳转失败:', err));
|
|
241
531
|
|
|
242
|
-
|
|
532
|
+
  });
|
|
243
533
|
|
|
244
|
-
|
|
534
|
+
  
|
|
245
535
|
|
|
246
|
-
|
|
536
|
+
  // 3. 绑定「跳转到新窗口」按钮事件
|
|
247
537
|
|
|
248
|
-
|
|
538
|
+
  document.getElementById('gotoNew').addEventListener('click', () => {
|
|
249
539
|
|
|
250
|
-
|
|
540
|
+
  lgsso.toUrl('https://other-app.example.com', '\_blank')
|
|
251
541
|
|
|
252
|
-
|
|
542
|
+
  .catch(err => console.error('跳转失败:', err));
|
|
253
543
|
|
|
254
|
-
|
|
544
|
+
  });
|
|
255
545
|
|
|
256
|
-
|
|
546
|
+
  
|
|
257
547
|
|
|
258
|
-
|
|
548
|
+
  // 4. 绑定「退出登录」按钮事件
|
|
259
549
|
|
|
260
|
-
|
|
550
|
+
  document.getElementById('logoutBtn').addEventListener('click', () => {
|
|
261
551
|
|
|
262
|
-
|
|
552
|
+
  lgsso.logout()
|
|
263
553
|
|
|
264
|
-
|
|
554
|
+
  .catch(err => console.error('退出失败:', err));
|
|
265
555
|
|
|
266
|
-
|
|
556
|
+
  });
|
|
267
557
|
|
|
268
|
-
|
|
558
|
+
  
|
|
269
559
|
|
|
270
|
-
|
|
560
|
+
  // 5. 绑定「修改密码」按钮事件
|
|
271
561
|
|
|
272
|
-
|
|
562
|
+
  document.getElementById('changePwdBtn').addEventListener('click', () => {
|
|
273
563
|
|
|
274
|
-
|
|
564
|
+
  const oldPwd = document.getElementById('oldPwdInput').value;
|
|
275
565
|
|
|
276
|
-
|
|
566
|
+
  const newPwd = document.getElementById('newPwdInput').value;
|
|
277
567
|
|
|
278
|
-
|
|
568
|
+
   
|
|
279
569
|
|
|
280
|
-
|
|
570
|
+
  lgsso.changePassword({ oldPwd, newPwd })
|
|
281
571
|
|
|
282
|
-
|
|
572
|
+
  .then(result => {
|
|
573
|
+
|
|
574
|
+
  if (result.code === 0) {
|
|
575
|
+
|
|
576
|
+
  alert('密码修改成功,请重新登录');
|
|
577
|
+
|
|
578
|
+
  lgsso.logout(); // 强制退出登录
|
|
579
|
+
|
|
580
|
+
  } else {
|
|
581
|
+
|
|
582
|
+
  alert('修改失败: ' + result.msg);
|
|
583
|
+
|
|
584
|
+
  }
|
|
585
|
+
|
|
586
|
+
  })
|
|
587
|
+
|
|
588
|
+
  .catch(err => console.error('修改密码异常:', err));
|
|
589
|
+
|
|
590
|
+
  });
|
|
283
591
|
|
|
284
592
|
})
|
|
285
593
|
|
|
286
594
|
.catch(err => {
|
|
287
595
|
|
|
288
|
-
|
|
596
|
+
  console.error('初始化失败:', err);
|
|
289
597
|
|
|
290
598
|
});
|
|
291
599
|
```
|
|
292
600
|
|
|
293
|
-
##
|
|
601
|
+
## 七、注意事项
|
|
602
|
+
|
|
603
|
+
|
|
294
604
|
|
|
605
|
+
1. **初始化优先级**:必须在项目入口处(如 Vue 的 `main.js`、React 的 `index.js`)优先调用 `init()`,确保后续业务代码使用 SDK 时已完成初始化。
|
|
295
606
|
|
|
607
|
+
2. **必填配置检查**:`tokenApi` 和 `logOutUrl` 是初始化必填项,缺少会导致初始化失败(返回 `-100` 错误)。
|
|
296
608
|
|
|
297
|
-
|
|
609
|
+
3. **密码修改前置条件**:使用 `changePassword()` 前,需确保配置 `changePasswordApi`、`oldPwdKey`、`newPwdKey`,且参数键名与配置一致。
|
|
298
610
|
|
|
299
|
-
|
|
611
|
+
4. **跨应用跳转前提**:使用 `toUrl()` 跳转时,目标应用需集成相同 SSO 逻辑,且当前应用已配置 `refreshCodeApi`。
|
|
300
612
|
|
|
301
|
-
|
|
613
|
+
5. **安全建议**:密码修改成功后,建议调用 `logout()` 强制用户重新登录,避免旧 Token 残留导致安全风险。
|
|
302
614
|
|
|
303
|
-
|
|
615
|
+
6. **环境限制**:SDK 依赖 `localStorage`、`window` 等浏览器 API,Node.js 环境仅支持 `getConfig()` 等无依赖方法。
|
|
304
616
|
|
|
305
|
-
|
|
617
|
+
7. `target`** 参数限制**:`toUrl()` 方法的 `target` 参数仅支持 `'_self'` 和 `'_blank'`,默认使用 `'_self'`。
|
|
306
618
|
|
|
619
|
+
> (注:文档部分内容可能由 AI 生成)
|
package/dist/lgsso-sdk.cjs
CHANGED
|
@@ -4051,6 +4051,9 @@ const DEFAULT_CONFIG = {
|
|
|
4051
4051
|
logoutApi: '',
|
|
4052
4052
|
logOutUrl: '',
|
|
4053
4053
|
storage: localStorage, // 可替换为sessionStorage
|
|
4054
|
+
oldPwdKey: 'oldPwd',
|
|
4055
|
+
newPwdKey: 'newPwd',
|
|
4056
|
+
changePasswordApi: '',
|
|
4054
4057
|
};
|
|
4055
4058
|
|
|
4056
4059
|
let config = null;
|
|
@@ -4300,7 +4303,28 @@ function createSSO() {
|
|
|
4300
4303
|
*/
|
|
4301
4304
|
getConfig() {
|
|
4302
4305
|
return { ...config }; // 返回配置的副本,防止外部修改
|
|
4303
|
-
}
|
|
4306
|
+
},
|
|
4307
|
+
|
|
4308
|
+
async changePassword(fromData = {}) {
|
|
4309
|
+
if (!fromData[config.oldPwdKey]) {
|
|
4310
|
+
return { code: -1, msg: '请输入旧密码', success: false };
|
|
4311
|
+
} else if (!fromData[config.newPwdKey]) {
|
|
4312
|
+
return { code: -1, msg: '请输入新密码', success: false };
|
|
4313
|
+
}
|
|
4314
|
+
const token = this.getToken();
|
|
4315
|
+
return request(
|
|
4316
|
+
config.changePasswordApi,
|
|
4317
|
+
{
|
|
4318
|
+
method: 'POST',
|
|
4319
|
+
headers: { ...config.headers, [config.tokenKey]: token },
|
|
4320
|
+
timeout: config.timeout,
|
|
4321
|
+
data: {
|
|
4322
|
+
[config.oldPwdKey]: fromData[config.oldPwdKey],
|
|
4323
|
+
[config.newPwdKey]: fromData[config.newPwdKey],
|
|
4324
|
+
}
|
|
4325
|
+
}
|
|
4326
|
+
);
|
|
4327
|
+
},
|
|
4304
4328
|
};
|
|
4305
4329
|
}
|
|
4306
4330
|
|
package/dist/lgsso-sdk.esm.js
CHANGED
|
@@ -4047,6 +4047,9 @@ const DEFAULT_CONFIG = {
|
|
|
4047
4047
|
logoutApi: '',
|
|
4048
4048
|
logOutUrl: '',
|
|
4049
4049
|
storage: localStorage, // 可替换为sessionStorage
|
|
4050
|
+
oldPwdKey: 'oldPwd',
|
|
4051
|
+
newPwdKey: 'newPwd',
|
|
4052
|
+
changePasswordApi: '',
|
|
4050
4053
|
};
|
|
4051
4054
|
|
|
4052
4055
|
let config = null;
|
|
@@ -4296,7 +4299,28 @@ function createSSO() {
|
|
|
4296
4299
|
*/
|
|
4297
4300
|
getConfig() {
|
|
4298
4301
|
return { ...config }; // 返回配置的副本,防止外部修改
|
|
4299
|
-
}
|
|
4302
|
+
},
|
|
4303
|
+
|
|
4304
|
+
async changePassword(fromData = {}) {
|
|
4305
|
+
if (!fromData[config.oldPwdKey]) {
|
|
4306
|
+
return { code: -1, msg: '请输入旧密码', success: false };
|
|
4307
|
+
} else if (!fromData[config.newPwdKey]) {
|
|
4308
|
+
return { code: -1, msg: '请输入新密码', success: false };
|
|
4309
|
+
}
|
|
4310
|
+
const token = this.getToken();
|
|
4311
|
+
return request(
|
|
4312
|
+
config.changePasswordApi,
|
|
4313
|
+
{
|
|
4314
|
+
method: 'POST',
|
|
4315
|
+
headers: { ...config.headers, [config.tokenKey]: token },
|
|
4316
|
+
timeout: config.timeout,
|
|
4317
|
+
data: {
|
|
4318
|
+
[config.oldPwdKey]: fromData[config.oldPwdKey],
|
|
4319
|
+
[config.newPwdKey]: fromData[config.newPwdKey],
|
|
4320
|
+
}
|
|
4321
|
+
}
|
|
4322
|
+
);
|
|
4323
|
+
},
|
|
4300
4324
|
};
|
|
4301
4325
|
}
|
|
4302
4326
|
|
package/dist/lgsso-sdk.js
CHANGED
|
@@ -4053,6 +4053,9 @@
|
|
|
4053
4053
|
logoutApi: '',
|
|
4054
4054
|
logOutUrl: '',
|
|
4055
4055
|
storage: localStorage, // 可替换为sessionStorage
|
|
4056
|
+
oldPwdKey: 'oldPwd',
|
|
4057
|
+
newPwdKey: 'newPwd',
|
|
4058
|
+
changePasswordApi: '',
|
|
4056
4059
|
};
|
|
4057
4060
|
|
|
4058
4061
|
let config = null;
|
|
@@ -4302,7 +4305,28 @@
|
|
|
4302
4305
|
*/
|
|
4303
4306
|
getConfig() {
|
|
4304
4307
|
return { ...config }; // 返回配置的副本,防止外部修改
|
|
4305
|
-
}
|
|
4308
|
+
},
|
|
4309
|
+
|
|
4310
|
+
async changePassword(fromData = {}) {
|
|
4311
|
+
if (!fromData[config.oldPwdKey]) {
|
|
4312
|
+
return { code: -1, msg: '请输入旧密码', success: false };
|
|
4313
|
+
} else if (!fromData[config.newPwdKey]) {
|
|
4314
|
+
return { code: -1, msg: '请输入新密码', success: false };
|
|
4315
|
+
}
|
|
4316
|
+
const token = this.getToken();
|
|
4317
|
+
return request(
|
|
4318
|
+
config.changePasswordApi,
|
|
4319
|
+
{
|
|
4320
|
+
method: 'POST',
|
|
4321
|
+
headers: { ...config.headers, [config.tokenKey]: token },
|
|
4322
|
+
timeout: config.timeout,
|
|
4323
|
+
data: {
|
|
4324
|
+
[config.oldPwdKey]: fromData[config.oldPwdKey],
|
|
4325
|
+
[config.newPwdKey]: fromData[config.newPwdKey],
|
|
4326
|
+
}
|
|
4327
|
+
}
|
|
4328
|
+
);
|
|
4329
|
+
},
|
|
4306
4330
|
};
|
|
4307
4331
|
}
|
|
4308
4332
|
|
package/dist/lgsso-sdk.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).lgsso={})}(this,function(e){"use strict";function t(){return"undefined"!=typeof window&&"undefined"!=typeof document}function n(){return t()?window.location.href:""}function r(e,t){return function(){return e.apply(t,arguments)}}const{toString:o}=Object.prototype,{getPrototypeOf:s}=Object,{iterator:i,toStringTag:a}=Symbol,c=(u=Object.create(null),e=>{const t=o.call(e);return u[t]||(u[t]=t.slice(8,-1).toLowerCase())});var u;const l=e=>(e=e.toLowerCase(),t=>c(t)===e),d=e=>t=>typeof t===e,{isArray:f}=Array,h=d("undefined");function p(e){return null!==e&&!h(e)&&null!==e.constructor&&!h(e.constructor)&&y(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const m=l("ArrayBuffer");const g=d("string"),y=d("function"),w=d("number"),b=e=>null!==e&&"object"==typeof e,E=e=>{if("object"!==c(e))return!1;const t=s(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||a in e||i in e)},O=l("Date"),R=l("File"),S=l("Blob"),T=l("FileList"),A=l("URLSearchParams"),[v,C,U,k]=["ReadableStream","Request","Response","Headers"].map(l);function j(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let r,o;if("object"!=typeof e&&(e=[e]),f(e))for(r=0,o=e.length;r<o;r++)t.call(null,e[r],r,e);else{if(p(e))return;const o=n?Object.getOwnPropertyNames(e):Object.keys(e),s=o.length;let i;for(r=0;r<s;r++)i=o[r],t.call(null,e[i],i,e)}}function x(e,t){if(p(e))return null;t=t.toLowerCase();const n=Object.keys(e);let r,o=n.length;for(;o-- >0;)if(r=n[o],t===r.toLowerCase())return r;return null}const _="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,P=e=>!h(e)&&e!==_;const N=(L="undefined"!=typeof Uint8Array&&s(Uint8Array),e=>L&&e instanceof L);var L;const F=l("HTMLFormElement"),B=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),D=l("RegExp"),q=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};j(n,(n,o)=>{let s;!1!==(s=t(n,o,e))&&(r[o]=s||n)}),Object.defineProperties(e,r)};const I=l("AsyncFunction"),$=(K="function"==typeof setImmediate,M=y(_.postMessage),K?setImmediate:M?(z=`axios@${Math.random()}`,H=[],_.addEventListener("message",({source:e,data:t})=>{e===_&&t===z&&H.length&&H.shift()()},!1),e=>{H.push(e),_.postMessage(z,"*")}):e=>setTimeout(e));var K,M,z,H;const J="undefined"!=typeof queueMicrotask?queueMicrotask.bind(_):"undefined"!=typeof process&&process.nextTick||$;var W={isArray:f,isArrayBuffer:m,isBuffer:p,isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||y(e.append)&&("formdata"===(t=c(e))||"object"===t&&y(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&m(e.buffer),t},isString:g,isNumber:w,isBoolean:e=>!0===e||!1===e,isObject:b,isPlainObject:E,isEmptyObject:e=>{if(!b(e)||p(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(e){return!1}},isReadableStream:v,isRequest:C,isResponse:U,isHeaders:k,isUndefined:h,isDate:O,isFile:R,isBlob:S,isRegExp:D,isFunction:y,isStream:e=>b(e)&&y(e.pipe),isURLSearchParams:A,isTypedArray:N,isFileList:T,forEach:j,merge:function e(){const{caseless:t}=P(this)&&this||{},n={},r=(r,o)=>{const s=t&&x(n,o)||o;E(n[s])&&E(r)?n[s]=e(n[s],r):E(r)?n[s]=e({},r):f(r)?n[s]=r.slice():n[s]=r};for(let e=0,t=arguments.length;e<t;e++)arguments[e]&&j(arguments[e],r);return n},extend:(e,t,n,{allOwnKeys:o}={})=>(j(t,(t,o)=>{n&&y(t)?e[o]=r(t,n):e[o]=t},{allOwnKeys:o}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,i,a;const c={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)a=o[i],r&&!r(a,e,t)||c[a]||(t[a]=e[a],c[a]=!0);e=!1!==n&&s(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:c,kindOfTest:l,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(f(e))return e;let t=e.length;if(!w(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[i]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:F,hasOwnProperty:B,hasOwnProp:B,reduceDescriptors:q,freezeMethods:e=>{q(e,(t,n)=>{if(y(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];y(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))})},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach(e=>{n[e]=!0})};return f(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n}),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:x,global:_,isContextDefined:P,isSpecCompliantForm:function(e){return!!(e&&y(e.append)&&"FormData"===e[a]&&e[i])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(b(e)){if(t.indexOf(e)>=0)return;if(p(e))return e;if(!("toJSON"in e)){t[r]=e;const o=f(e)?[]:{};return j(e,(e,t)=>{const s=n(e,r+1);!h(s)&&(o[t]=s)}),t[r]=void 0,o}}return e};return n(e,0)},isAsyncFn:I,isThenable:e=>e&&(b(e)||y(e))&&y(e.then)&&y(e.catch),setImmediate:$,asap:J,isIterable:e=>null!=e&&y(e[i])};function V(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status?o.status:null)}W.inherits(V,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:W.toJSONObject(this.config),code:this.code,status:this.status}}});const G=V.prototype,X={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{X[e]={value:e}}),Object.defineProperties(V,X),Object.defineProperty(G,"isAxiosError",{value:!0}),V.from=(e,t,n,r,o,s)=>{const i=Object.create(G);return W.toFlatObject(e,i,function(e){return e!==Error.prototype},e=>"isAxiosError"!==e),V.call(i,e.message,t,n,r,o),i.cause=e,i.name=e.name,s&&Object.assign(i,s),i};function Q(e){return W.isPlainObject(e)||W.isArray(e)}function Z(e){return W.endsWith(e,"[]")?e.slice(0,-2):e}function Y(e,t,n){return e?e.concat(t).map(function(e,t){return e=Z(e),!n&&t?"["+e+"]":e}).join(n?".":""):t}const ee=W.toFlatObject(W,{},null,function(e){return/^is[A-Z]/.test(e)});function te(e,t,n){if(!W.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=W.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!W.isUndefined(t[e])})).metaTokens,o=n.visitor||u,s=n.dots,i=n.indexes,a=(n.Blob||"undefined"!=typeof Blob&&Blob)&&W.isSpecCompliantForm(t);if(!W.isFunction(o))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(W.isDate(e))return e.toISOString();if(W.isBoolean(e))return e.toString();if(!a&&W.isBlob(e))throw new V("Blob is not supported. Use a Buffer instead.");return W.isArrayBuffer(e)||W.isTypedArray(e)?a&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function u(e,n,o){let a=e;if(e&&!o&&"object"==typeof e)if(W.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(W.isArray(e)&&function(e){return W.isArray(e)&&!e.some(Q)}(e)||(W.isFileList(e)||W.endsWith(n,"[]"))&&(a=W.toArray(e)))return n=Z(n),a.forEach(function(e,r){!W.isUndefined(e)&&null!==e&&t.append(!0===i?Y([n],r,s):null===i?n:n+"[]",c(e))}),!1;return!!Q(e)||(t.append(Y(o,n,s),c(e)),!1)}const l=[],d=Object.assign(ee,{defaultVisitor:u,convertValue:c,isVisitable:Q});if(!W.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!W.isUndefined(n)){if(-1!==l.indexOf(n))throw Error("Circular reference detected in "+r.join("."));l.push(n),W.forEach(n,function(n,s){!0===(!(W.isUndefined(n)||null===n)&&o.call(t,n,W.isString(s)?s.trim():s,r,d))&&e(n,r?r.concat(s):[s])}),l.pop()}}(e),t}function ne(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function re(e,t){this._pairs=[],e&&te(e,this,t)}const oe=re.prototype;function se(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function ie(e,t,n){if(!t)return e;const r=n&&n.encode||se;W.isFunction(n)&&(n={serialize:n});const o=n&&n.serialize;let s;if(s=o?o(t,n):W.isURLSearchParams(t)?t.toString():new re(t,n).toString(r),s){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+s}return e}oe.append=function(e,t){this._pairs.push([e,t])},oe.toString=function(e){const t=e?function(t){return e.call(this,t,ne)}:ne;return this._pairs.map(function(e){return t(e[0])+"="+t(e[1])},"").join("&")};var ae=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){W.forEach(this.handlers,function(t){null!==t&&e(t)})}},ce={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},ue={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:re,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const le="undefined"!=typeof window&&"undefined"!=typeof document,de="object"==typeof navigator&&navigator||void 0,fe=le&&(!de||["ReactNative","NativeScript","NS"].indexOf(de.product)<0),he="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,pe=le&&window.location.href||"http://localhost";var me={...Object.freeze({__proto__:null,hasBrowserEnv:le,hasStandardBrowserEnv:fe,hasStandardBrowserWebWorkerEnv:he,navigator:de,origin:pe}),...ue};function ge(e){function t(e,n,r,o){let s=e[o++];if("__proto__"===s)return!0;const i=Number.isFinite(+s),a=o>=e.length;if(s=!s&&W.isArray(r)?r.length:s,a)return W.hasOwnProp(r,s)?r[s]=[r[s],n]:r[s]=n,!i;r[s]&&W.isObject(r[s])||(r[s]=[]);return t(e,n,r[s],o)&&W.isArray(r[s])&&(r[s]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let s;for(r=0;r<o;r++)s=n[r],t[s]=e[s];return t}(r[s])),!i}if(W.isFormData(e)&&W.isFunction(e.entries)){const n={};return W.forEachEntry(e,(e,r)=>{t(function(e){return W.matchAll(/\w+|\[(\w*)]/g,e).map(e=>"[]"===e[0]?"":e[1]||e[0])}(e),r,n,0)}),n}return null}const ye={transitional:ce,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=W.isObject(e);o&&W.isHTMLForm(e)&&(e=new FormData(e));if(W.isFormData(e))return r?JSON.stringify(ge(e)):e;if(W.isArrayBuffer(e)||W.isBuffer(e)||W.isStream(e)||W.isFile(e)||W.isBlob(e)||W.isReadableStream(e))return e;if(W.isArrayBufferView(e))return e.buffer;if(W.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let s;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return te(e,new me.classes.URLSearchParams,{visitor:function(e,t,n,r){return me.isNode&&W.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)},...t})}(e,this.formSerializer).toString();if((s=W.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return te(s?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(W.isString(e))try{return(t||JSON.parse)(e),W.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||ye.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(W.isResponse(e)||W.isReadableStream(e))return e;if(e&&W.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(e){if(n){if("SyntaxError"===e.name)throw V.from(e,V.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:me.classes.FormData,Blob:me.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};W.forEach(["delete","get","head","post","put","patch"],e=>{ye.headers[e]={}});var we=ye;const be=W.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const Ee=Symbol("internals");function Oe(e){return e&&String(e).trim().toLowerCase()}function Re(e){return!1===e||null==e?e:W.isArray(e)?e.map(Re):String(e)}function Se(e,t,n,r,o){return W.isFunction(r)?r.call(this,t,n):(o&&(t=n),W.isString(t)?W.isString(r)?-1!==t.indexOf(r):W.isRegExp(r)?r.test(t):void 0:void 0)}class Te{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=Oe(t);if(!o)throw new Error("header name must be a non-empty string");const s=W.findKey(r,o);(!s||void 0===r[s]||!0===n||void 0===n&&!1!==r[s])&&(r[s||t]=Re(e))}const s=(e,t)=>W.forEach(e,(e,n)=>o(e,n,t));if(W.isPlainObject(e)||e instanceof this.constructor)s(e,t);else if(W.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))s((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach(function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&be[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t})(e),t);else if(W.isObject(e)&&W.isIterable(e)){let n,r,o={};for(const t of e){if(!W.isArray(t))throw TypeError("Object iterator must return a key-value pair");o[r=t[0]]=(n=o[r])?W.isArray(n)?[...n,t[1]]:[n,t[1]]:t[1]}s(o,t)}else null!=e&&o(t,e,n);return this}get(e,t){if(e=Oe(e)){const n=W.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(W.isFunction(t))return t.call(this,e,n);if(W.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Oe(e)){const n=W.findKey(this,e);return!(!n||void 0===this[n]||t&&!Se(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=Oe(e)){const o=W.findKey(n,e);!o||t&&!Se(0,n[o],o,t)||(delete n[o],r=!0)}}return W.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!Se(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return W.forEach(this,(r,o)=>{const s=W.findKey(n,o);if(s)return t[s]=Re(r),void delete t[o];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,n)=>t.toUpperCase()+n)}(o):String(o).trim();i!==o&&delete t[o],t[i]=Re(r),n[i]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return W.forEach(this,(n,r)=>{null!=n&&!1!==n&&(t[r]=e&&W.isArray(n)?n.join(", "):n)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach(e=>n.set(e)),n}static accessor(e){const t=(this[Ee]=this[Ee]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=Oe(e);t[r]||(!function(e,t){const n=W.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})})}(n,e),t[r]=!0)}return W.isArray(e)?e.forEach(r):r(e),this}}Te.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),W.reduceDescriptors(Te.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),W.freezeMethods(Te);var Ae=Te;function ve(e,t){const n=this||we,r=t||n,o=Ae.from(r.headers);let s=r.data;return W.forEach(e,function(e){s=e.call(n,s,o.normalize(),t?t.status:void 0)}),o.normalize(),s}function Ce(e){return!(!e||!e.__CANCEL__)}function Ue(e,t,n){V.call(this,null==e?"canceled":e,V.ERR_CANCELED,t,n),this.name="CanceledError"}function ke(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new V("Request failed with status code "+n.status,[V.ERR_BAD_REQUEST,V.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}W.inherits(Ue,V,{__CANCEL__:!0});const je=(e,t,n=3)=>{let r=0;const o=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,s=0,i=0;return t=void 0!==t?t:1e3,function(a){const c=Date.now(),u=r[i];o||(o=c),n[s]=a,r[s]=c;let l=i,d=0;for(;l!==s;)d+=n[l++],l%=e;if(s=(s+1)%e,s===i&&(i=(i+1)%e),c-o<t)return;const f=u&&c-u;return f?Math.round(1e3*d/f):void 0}}(50,250);return function(e,t){let n,r,o=0,s=1e3/t;const i=(t,s=Date.now())=>{o=s,n=null,r&&(clearTimeout(r),r=null),e(...t)};return[(...e)=>{const t=Date.now(),a=t-o;a>=s?i(e,t):(n=e,r||(r=setTimeout(()=>{r=null,i(n)},s-a)))},()=>n&&i(n)]}(n=>{const s=n.loaded,i=n.lengthComputable?n.total:void 0,a=s-r,c=o(a);r=s;e({loaded:s,total:i,progress:i?s/i:void 0,bytes:a,rate:c||void 0,estimated:c&&i&&s<=i?(i-s)/c:void 0,event:n,lengthComputable:null!=i,[t?"download":"upload"]:!0})},n)},xe=(e,t)=>{const n=null!=e;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},_e=e=>(...t)=>W.asap(()=>e(...t));var Pe=me.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,me.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(me.origin),me.navigator&&/(msie|trident)/i.test(me.navigator.userAgent)):()=>!0,Ne=me.hasStandardBrowserEnv?{write(e,t,n,r,o,s){const i=[e+"="+encodeURIComponent(t)];W.isNumber(n)&&i.push("expires="+new Date(n).toGMTString()),W.isString(r)&&i.push("path="+r),W.isString(o)&&i.push("domain="+o),!0===s&&i.push("secure"),document.cookie=i.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function Le(e,t,n){let r=!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t);return e&&(r||0==n)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Fe=e=>e instanceof Ae?{...e}:e;function Be(e,t){t=t||{};const n={};function r(e,t,n,r){return W.isPlainObject(e)&&W.isPlainObject(t)?W.merge.call({caseless:r},e,t):W.isPlainObject(t)?W.merge({},t):W.isArray(t)?t.slice():t}function o(e,t,n,o){return W.isUndefined(t)?W.isUndefined(e)?void 0:r(void 0,e,0,o):r(e,t,0,o)}function s(e,t){if(!W.isUndefined(t))return r(void 0,t)}function i(e,t){return W.isUndefined(t)?W.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function a(n,o,s){return s in t?r(n,o):s in e?r(void 0,n):void 0}const c={url:s,method:s,data:s,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:a,headers:(e,t,n)=>o(Fe(e),Fe(t),0,!0)};return W.forEach(Object.keys({...e,...t}),function(r){const s=c[r]||o,i=s(e[r],t[r],r);W.isUndefined(i)&&s!==a||(n[r]=i)}),n}var De=e=>{const t=Be({},e);let n,{data:r,withXSRFToken:o,xsrfHeaderName:s,xsrfCookieName:i,headers:a,auth:c}=t;if(t.headers=a=Ae.from(a),t.url=ie(Le(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),c&&a.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):""))),W.isFormData(r))if(me.hasStandardBrowserEnv||me.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if(!1!==(n=a.getContentType())){const[e,...t]=n?n.split(";").map(e=>e.trim()).filter(Boolean):[];a.setContentType([e||"multipart/form-data",...t].join("; "))}if(me.hasStandardBrowserEnv&&(o&&W.isFunction(o)&&(o=o(t)),o||!1!==o&&Pe(t.url))){const e=s&&i&&Ne.read(i);e&&a.set(s,e)}return t};var qe="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise(function(t,n){const r=De(e);let o=r.data;const s=Ae.from(r.headers).normalize();let i,a,c,u,l,{responseType:d,onUploadProgress:f,onDownloadProgress:h}=r;function p(){u&&u(),l&&l(),r.cancelToken&&r.cancelToken.unsubscribe(i),r.signal&&r.signal.removeEventListener("abort",i)}let m=new XMLHttpRequest;function g(){if(!m)return;const r=Ae.from("getAllResponseHeaders"in m&&m.getAllResponseHeaders());ke(function(e){t(e),p()},function(e){n(e),p()},{data:d&&"text"!==d&&"json"!==d?m.response:m.responseText,status:m.status,statusText:m.statusText,headers:r,config:e,request:m}),m=null}m.open(r.method.toUpperCase(),r.url,!0),m.timeout=r.timeout,"onloadend"in m?m.onloadend=g:m.onreadystatechange=function(){m&&4===m.readyState&&(0!==m.status||m.responseURL&&0===m.responseURL.indexOf("file:"))&&setTimeout(g)},m.onabort=function(){m&&(n(new V("Request aborted",V.ECONNABORTED,e,m)),m=null)},m.onerror=function(){n(new V("Network Error",V.ERR_NETWORK,e,m)),m=null},m.ontimeout=function(){let t=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const o=r.transitional||ce;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new V(t,o.clarifyTimeoutError?V.ETIMEDOUT:V.ECONNABORTED,e,m)),m=null},void 0===o&&s.setContentType(null),"setRequestHeader"in m&&W.forEach(s.toJSON(),function(e,t){m.setRequestHeader(t,e)}),W.isUndefined(r.withCredentials)||(m.withCredentials=!!r.withCredentials),d&&"json"!==d&&(m.responseType=r.responseType),h&&([c,l]=je(h,!0),m.addEventListener("progress",c)),f&&m.upload&&([a,u]=je(f),m.upload.addEventListener("progress",a),m.upload.addEventListener("loadend",u)),(r.cancelToken||r.signal)&&(i=t=>{m&&(n(!t||t.type?new Ue(null,e,m):t),m.abort(),m=null)},r.cancelToken&&r.cancelToken.subscribe(i),r.signal&&(r.signal.aborted?i():r.signal.addEventListener("abort",i)));const y=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(r.url);y&&-1===me.protocols.indexOf(y)?n(new V("Unsupported protocol "+y+":",V.ERR_BAD_REQUEST,e)):m.send(o||null)})};var Ie=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n,r=new AbortController;const o=function(e){if(!n){n=!0,i();const t=e instanceof Error?e:this.reason;r.abort(t instanceof V?t:new Ue(t instanceof Error?t.message:t))}};let s=t&&setTimeout(()=>{s=null,o(new V(`timeout ${t} of ms exceeded`,V.ETIMEDOUT))},t);const i=()=>{e&&(s&&clearTimeout(s),s=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(o):e.removeEventListener("abort",o)}),e=null)};e.forEach(e=>e.addEventListener("abort",o));const{signal:a}=r;return a.unsubscribe=()=>W.asap(i),a}};const $e=function*(e,t){let n=e.byteLength;if(!t||n<t)return void(yield e);let r,o=0;for(;o<n;)r=o+t,yield e.slice(o,r),o=r},Ke=async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:n}=await t.read();if(e)break;yield n}}finally{await t.cancel()}},Me=(e,t,n,r)=>{const o=async function*(e,t){for await(const n of Ke(e))yield*$e(n,t)}(e,t);let s,i=0,a=e=>{s||(s=!0,r&&r(e))};return new ReadableStream({async pull(e){try{const{done:t,value:r}=await o.next();if(t)return a(),void e.close();let s=r.byteLength;if(n){let e=i+=s;n(e)}e.enqueue(new Uint8Array(r))}catch(e){throw a(e),e}},cancel:e=>(a(e),o.return())},{highWaterMark:2})},ze="function"==typeof fetch&&"function"==typeof Request&&"function"==typeof Response,He=ze&&"function"==typeof ReadableStream,Je=ze&&("function"==typeof TextEncoder?(We=new TextEncoder,e=>We.encode(e)):async e=>new Uint8Array(await new Response(e).arrayBuffer()));var We;const Ve=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},Ge=He&&Ve(()=>{let e=!1;const t=new Request(me.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),Xe=He&&Ve(()=>W.isReadableStream(new Response("").body)),Qe={stream:Xe&&(e=>e.body)};var Ze;ze&&(Ze=new Response,["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!Qe[e]&&(Qe[e]=W.isFunction(Ze[e])?t=>t[e]():(t,n)=>{throw new V(`Response type '${e}' is not supported`,V.ERR_NOT_SUPPORT,n)})}));const Ye=async(e,t)=>{const n=W.toFiniteNumber(e.getContentLength());return null==n?(async e=>{if(null==e)return 0;if(W.isBlob(e))return e.size;if(W.isSpecCompliantForm(e)){const t=new Request(me.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return W.isArrayBufferView(e)||W.isArrayBuffer(e)?e.byteLength:(W.isURLSearchParams(e)&&(e+=""),W.isString(e)?(await Je(e)).byteLength:void 0)})(t):n};var et=ze&&(async e=>{let{url:t,method:n,data:r,signal:o,cancelToken:s,timeout:i,onDownloadProgress:a,onUploadProgress:c,responseType:u,headers:l,withCredentials:d="same-origin",fetchOptions:f}=De(e);u=u?(u+"").toLowerCase():"text";let h,p=Ie([o,s&&s.toAbortSignal()],i);const m=p&&p.unsubscribe&&(()=>{p.unsubscribe()});let g;try{if(c&&Ge&&"get"!==n&&"head"!==n&&0!==(g=await Ye(l,r))){let e,n=new Request(t,{method:"POST",body:r,duplex:"half"});if(W.isFormData(r)&&(e=n.headers.get("content-type"))&&l.setContentType(e),n.body){const[e,t]=xe(g,je(_e(c)));r=Me(n.body,65536,e,t)}}W.isString(d)||(d=d?"include":"omit");const o="credentials"in Request.prototype;h=new Request(t,{...f,signal:p,method:n.toUpperCase(),headers:l.normalize().toJSON(),body:r,duplex:"half",credentials:o?d:void 0});let s=await fetch(h,f);const i=Xe&&("stream"===u||"response"===u);if(Xe&&(a||i&&m)){const e={};["status","statusText","headers"].forEach(t=>{e[t]=s[t]});const t=W.toFiniteNumber(s.headers.get("content-length")),[n,r]=a&&xe(t,je(_e(a),!0))||[];s=new Response(Me(s.body,65536,n,()=>{r&&r(),m&&m()}),e)}u=u||"text";let y=await Qe[W.findKey(Qe,u)||"text"](s,e);return!i&&m&&m(),await new Promise((t,n)=>{ke(t,n,{data:y,headers:Ae.from(s.headers),status:s.status,statusText:s.statusText,config:e,request:h})})}catch(t){if(m&&m(),t&&"TypeError"===t.name&&/Load failed|fetch/i.test(t.message))throw Object.assign(new V("Network Error",V.ERR_NETWORK,e,h),{cause:t.cause||t});throw V.from(t,t&&t.code,e,h)}});const tt={http:null,xhr:qe,fetch:et};W.forEach(tt,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}});const nt=e=>`- ${e}`,rt=e=>W.isFunction(e)||null===e||!1===e;var ot=e=>{e=W.isArray(e)?e:[e];const{length:t}=e;let n,r;const o={};for(let s=0;s<t;s++){let t;if(n=e[s],r=n,!rt(n)&&(r=tt[(t=String(n)).toLowerCase()],void 0===r))throw new V(`Unknown adapter '${t}'`);if(r)break;o[t||"#"+s]=r}if(!r){const e=Object.entries(o).map(([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build"));throw new V("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map(nt).join("\n"):" "+nt(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return r};function st(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Ue(null,e)}function it(e){st(e),e.headers=Ae.from(e.headers),e.data=ve.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return ot(e.adapter||we.adapter)(e).then(function(t){return st(e),t.data=ve.call(e,e.transformResponse,t),t.headers=Ae.from(t.headers),t},function(t){return Ce(t)||(st(e),t&&t.response&&(t.response.data=ve.call(e,e.transformResponse,t.response),t.response.headers=Ae.from(t.response.headers))),Promise.reject(t)})}const at="1.11.0",ct={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{ct[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});const ut={};ct.transitional=function(e,t,n){function r(e,t){return"[Axios v"+at+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,s)=>{if(!1===e)throw new V(r(o," has been removed"+(t?" in "+t:"")),V.ERR_DEPRECATED);return t&&!ut[o]&&(ut[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,s)}},ct.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};var lt={assertOptions:function(e,t,n){if("object"!=typeof e)throw new V("options must be an object",V.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const s=r[o],i=t[s];if(i){const t=e[s],n=void 0===t||i(t,s,e);if(!0!==n)throw new V("option "+s+" must be "+n,V.ERR_BAD_OPTION_VALUE);continue}if(!0!==n)throw new V("Unknown option "+s,V.ERR_BAD_OPTION)}},validators:ct};const dt=lt.validators;class ft{constructor(e){this.defaults=e||{},this.interceptors={request:new ae,response:new ae}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const n=t.stack?t.stack.replace(/^.+\n/,""):"";try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,""))&&(e.stack+="\n"+n):e.stack=n}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Be(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&<.assertOptions(n,{silentJSONParsing:dt.transitional(dt.boolean),forcedJSONParsing:dt.transitional(dt.boolean),clarifyTimeoutError:dt.transitional(dt.boolean)},!1),null!=r&&(W.isFunction(r)?t.paramsSerializer={serialize:r}:lt.assertOptions(r,{encode:dt.function,serialize:dt.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),lt.assertOptions(t,{baseUrl:dt.spelling("baseURL"),withXsrfToken:dt.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let s=o&&W.merge(o.common,o[t.method]);o&&W.forEach(["delete","get","head","post","put","patch","common"],e=>{delete o[e]}),t.headers=Ae.concat(s,o);const i=[];let a=!0;this.interceptors.request.forEach(function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(a=a&&e.synchronous,i.unshift(e.fulfilled,e.rejected))});const c=[];let u;this.interceptors.response.forEach(function(e){c.push(e.fulfilled,e.rejected)});let l,d=0;if(!a){const e=[it.bind(this),void 0];for(e.unshift(...i),e.push(...c),l=e.length,u=Promise.resolve(t);d<l;)u=u.then(e[d++],e[d++]);return u}l=i.length;let f=t;for(d=0;d<l;){const e=i[d++],t=i[d++];try{f=e(f)}catch(e){t.call(this,e);break}}try{u=it.call(this,f)}catch(e){return Promise.reject(e)}for(d=0,l=c.length;d<l;)u=u.then(c[d++],c[d++]);return u}getUri(e){return ie(Le((e=Be(this.defaults,e)).baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}}W.forEach(["delete","get","head","options"],function(e){ft.prototype[e]=function(t,n){return this.request(Be(n||{},{method:e,url:t,data:(n||{}).data}))}}),W.forEach(["post","put","patch"],function(e){function t(t){return function(n,r,o){return this.request(Be(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}ft.prototype[e]=t(),ft.prototype[e+"Form"]=t(!0)});var ht=ft;class pt{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise(function(e){t=e});const n=this;this.promise.then(e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t;const r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,o){n.reason||(n.reason=new Ue(e,r,o),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new pt(function(t){e=t}),cancel:e}}}var mt=pt;const gt={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(gt).forEach(([e,t])=>{gt[t]=e});var yt=gt;const wt=function e(t){const n=new ht(t),o=r(ht.prototype.request,n);return W.extend(o,ht.prototype,n,{allOwnKeys:!0}),W.extend(o,n,null,{allOwnKeys:!0}),o.create=function(n){return e(Be(t,n))},o}(we);wt.Axios=ht,wt.CanceledError=Ue,wt.CancelToken=mt,wt.isCancel=Ce,wt.VERSION=at,wt.toFormData=te,wt.AxiosError=V,wt.Cancel=wt.CanceledError,wt.all=function(e){return Promise.all(e)},wt.spread=function(e){return function(t){return e.apply(null,t)}},wt.isAxiosError=function(e){return W.isObject(e)&&!0===e.isAxiosError},wt.mergeConfig=Be,wt.AxiosHeaders=Ae,wt.formToJSON=e=>ge(W.isHTMLForm(e)?new FormData(e):e),wt.getAdapter=ot,wt.HttpStatusCode=yt,wt.default=wt;var bt=wt;async function Et(e,{method:n="GET",data:r={},headers:o={},timeout:s=5e3}={}){return t()?"fetch"in window&&"AbortController"in window?async function(e,t){const{method:n="GET",data:r={},headers:o={},timeout:s=5e3}=t,i=new AbortController,a=setTimeout(()=>i.abort(),s),c={method:n.toUpperCase(),headers:{"Content-Type":"application/json",...o},signal:i.signal};"GET"!==c.method&&r&&(c.body=JSON.stringify(r));try{const t=await fetch(e,c);if(clearTimeout(a),!t.ok)return{code:t.status,msg:`HTTP请求失败: ${t.statusText}`,success:!1};try{return await t.json()}catch(e){return{code:-201,msg:"响应数据不是有效的JSON格式",success:!1}}}catch(e){return clearTimeout(a),"AbortError"===e.name?{code:-202,msg:`请求超时(${s}ms)`,success:!1}:{code:-203,msg:`网络请求失败: ${e.message}`,success:!1}}}(e,{method:n,data:r,headers:o,timeout:s}):async function(e,t){const{method:n="GET",data:r={},headers:o={},timeout:s=5e3}=t,i={url:e,method:n.toUpperCase(),headers:{"Content-Type":"application/json",...o},timeout:s,["GET"===n.toUpperCase()?"params":"data"]:r};try{return(await bt(i)).data}catch(e){return"ECONNABORTED"===e.code?{code:-202,msg:`请求超时(${s}ms)`,success:!1}:e.response?{code:e.response.status,msg:`HTTP请求失败: ${e.response.statusText}`,success:!1}:{code:-203,msg:`网络请求失败: ${e.message}`,success:!1}}}(e,{method:n,data:r,headers:o,timeout:s}):{code:-200,msg:"request方法只能在浏览器环境使用",success:!1}}const Ot={accessCodeKey:"accessCode",tokenKey:"scm_token",timeout:5e3,headers:{},tokenApi:"",refreshCodeApi:"",logoutApi:"",logOutUrl:"",storage:localStorage};let Rt=null;function St(){return{async init(e={}){try{Rt=function(e,t){if(!t)return{...e};const n={...e};for(const e in t)t.hasOwnProperty(e)&&(n[e]=t[e]);return n}(Ot,e),function(e){if("string"!=typeof e.accessCodeKey||""===e.accessCodeKey.trim())throw new Error("accessCodeKey必须是有效的字符串");if("string"!=typeof e.tokenKey||""===e.tokenKey.trim())throw new Error("tokenKey必须是有效的字符串");if(e.storage&&("function"!=typeof e.storage.setItem||"function"!=typeof e.storage.getItem))throw new Error("storage必须实现setItem和getItem方法")}(Rt);const r=function(e,n){if(!t())return null;const r=n||window.location.href,o=new URL(r);let s=o.searchParams.get(e);if(null!==s)return s;if(o.hash.includes("?")){const t=o.hash.split("?")[1];return new URLSearchParams(t).get(e)}return null}(Rt.accessCodeKey);if(!Rt.tokenApi)return{code:-100,msg:"缺少tokenApi配置",success:!1};if(r){const e=await Et(Rt.tokenApi,{method:"POST",data:{accessCode:r},headers:Rt.headers,timeout:Rt.timeout});return 0===e.code&&e.data&&(Rt.storage.setItem(Rt.tokenKey,e.data),function(e){if(!t())return;const n=new URL(window.location.href);let r,o;if(n.hash.includes("?")){const[t,s]=n.hash.split("?");if(r=new URLSearchParams(s),r.has(e)){r.delete(e);const s=r.toString()?`${t}?${r.toString()}`:t;n.hash=s,o=n.toString()}}else r=new URLSearchParams(n.search),r.has(e)&&(r.delete(e),n.search=r.toString(),o=n.toString());o&&o!==window.location.href&&window.location.replace(o)}(Rt.accessCodeKey)),e}return this.getToken()||t()&&Rt.logOutUrl&&(window.location.href=`${Rt.logOutUrl}?redirect_uri=${encodeURIComponent(n())}`),{code:0,msg:"初始化成功",success:!0}}catch(e){return{code:-100,msg:`初始化失败: ${e.message}`,success:!1}}},getToken:()=>Rt&&t()?Rt.storage.getItem(Rt.tokenKey):null,removeToken(){Rt&&t()&&Rt.storage.removeItem(Rt.tokenKey)},async logout(){if(!Rt)return{code:-101,msg:"请先调用init方法初始化",success:!1};if(!Rt.logoutApi)return{code:-102,msg:"未配置logoutApi",success:!1};const e=this.getToken();if(!e)return this.removeToken(),t()&&Rt.logOutUrl&&(window.location.href=`${Rt.logOutUrl}?redirect_uri=${encodeURIComponent(n())}`),{code:0,msg:"已成功清除token",success:!0};try{const r=await Et(Rt.logoutApi,{method:"POST",headers:{...Rt.headers,[Rt.tokenKey]:e},timeout:Rt.timeout});return this.removeToken(),t()&&Rt.logOutUrl&&(window.location.href=`${Rt.logOutUrl}?redirect_uri=${encodeURIComponent(n())}`),r}catch(e){return{code:-103,msg:`退出失败: ${e.message}`,success:!1}}},async toUrl(e,n="_self"){if(!Rt)return{code:-101,msg:"请先调用init方法初始化",success:!1};if(!e)return{code:-104,msg:"请提供跳转地址",success:!1};if(!["_self","_blank"].includes(n))return{code:-108,msg:'target参数必须是"_self"或"_blank"',success:!1};if(!Rt.refreshCodeApi)return{code:-105,msg:"未配置refreshCodeApi",success:!1};const r=this.getToken();if(!r){if(t()&&Rt.logOutUrl){const t=`${Rt.logOutUrl}?redirect_uri=${encodeURIComponent(e)}`;"_blank"===n?window.open(t,"_blank"):window.location.href=t}return{code:-106,msg:"未找到有效token",success:!1}}try{const o=await Et(Rt.refreshCodeApi,{method:"POST",headers:{...Rt.headers,[Rt.tokenKey]:r},timeout:Rt.timeout});if(0===o.code&&o.data&&t()){const t=new URL(e);t.searchParams.set(Rt.accessCodeKey,o.data);const r=t.toString();"_blank"===n?window.open(r,"_blank"):window.location.href=r}else{const t=`${Rt.logOutUrl}?redirect_uri=${encodeURIComponent(e)}`;"_blank"===n?window.open(t,"_blank"):window.location.href=t}return o}catch(t){const r=`${Rt.logOutUrl}?redirect_uri=${encodeURIComponent(e)}`;return"_blank"===n?window.open(r,"_blank"):window.location.href=r,{code:-107,msg:`跳转失败: ${t.message}`,success:!1}}},async getAccessCode(){if(!Rt)return{code:-101,msg:"请先调用init方法初始化",success:!1};const e=this.getToken();return e?Rt.refreshCodeApi?Et(Rt.refreshCodeApi,{method:"POST",headers:{...Rt.headers,[Rt.tokenKey]:e},timeout:Rt.timeout}):{code:-105,msg:"未配置refreshCodeApi",success:!1}:{code:-106,msg:"未找到有效token",success:!1}},getConfig:()=>({...Rt})}}const Tt=St();e.createSSO=St,e.default=Tt,e.lgsso=Tt,Object.defineProperty(e,"__esModule",{value:!0})});
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).lgsso={})}(this,function(e){"use strict";function t(){return"undefined"!=typeof window&&"undefined"!=typeof document}function n(){return t()?window.location.href:""}function r(e,t){return function(){return e.apply(t,arguments)}}const{toString:o}=Object.prototype,{getPrototypeOf:s}=Object,{iterator:i,toStringTag:a}=Symbol,c=(u=Object.create(null),e=>{const t=o.call(e);return u[t]||(u[t]=t.slice(8,-1).toLowerCase())});var u;const l=e=>(e=e.toLowerCase(),t=>c(t)===e),d=e=>t=>typeof t===e,{isArray:f}=Array,h=d("undefined");function p(e){return null!==e&&!h(e)&&null!==e.constructor&&!h(e.constructor)&&y(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const m=l("ArrayBuffer");const g=d("string"),y=d("function"),w=d("number"),b=e=>null!==e&&"object"==typeof e,E=e=>{if("object"!==c(e))return!1;const t=s(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||a in e||i in e)},O=l("Date"),R=l("File"),S=l("Blob"),T=l("FileList"),A=l("URLSearchParams"),[v,C,P,U]=["ReadableStream","Request","Response","Headers"].map(l);function k(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let r,o;if("object"!=typeof e&&(e=[e]),f(e))for(r=0,o=e.length;r<o;r++)t.call(null,e[r],r,e);else{if(p(e))return;const o=n?Object.getOwnPropertyNames(e):Object.keys(e),s=o.length;let i;for(r=0;r<s;r++)i=o[r],t.call(null,e[i],i,e)}}function j(e,t){if(p(e))return null;t=t.toLowerCase();const n=Object.keys(e);let r,o=n.length;for(;o-- >0;)if(r=n[o],t===r.toLowerCase())return r;return null}const x="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,_=e=>!h(e)&&e!==x;const N=(L="undefined"!=typeof Uint8Array&&s(Uint8Array),e=>L&&e instanceof L);var L;const F=l("HTMLFormElement"),B=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),D=l("RegExp"),q=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};k(n,(n,o)=>{let s;!1!==(s=t(n,o,e))&&(r[o]=s||n)}),Object.defineProperties(e,r)};const I=l("AsyncFunction"),K=($="function"==typeof setImmediate,M=y(x.postMessage),$?setImmediate:M?(z=`axios@${Math.random()}`,H=[],x.addEventListener("message",({source:e,data:t})=>{e===x&&t===z&&H.length&&H.shift()()},!1),e=>{H.push(e),x.postMessage(z,"*")}):e=>setTimeout(e));var $,M,z,H;const J="undefined"!=typeof queueMicrotask?queueMicrotask.bind(x):"undefined"!=typeof process&&process.nextTick||K;var W={isArray:f,isArrayBuffer:m,isBuffer:p,isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||y(e.append)&&("formdata"===(t=c(e))||"object"===t&&y(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&m(e.buffer),t},isString:g,isNumber:w,isBoolean:e=>!0===e||!1===e,isObject:b,isPlainObject:E,isEmptyObject:e=>{if(!b(e)||p(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(e){return!1}},isReadableStream:v,isRequest:C,isResponse:P,isHeaders:U,isUndefined:h,isDate:O,isFile:R,isBlob:S,isRegExp:D,isFunction:y,isStream:e=>b(e)&&y(e.pipe),isURLSearchParams:A,isTypedArray:N,isFileList:T,forEach:k,merge:function e(){const{caseless:t}=_(this)&&this||{},n={},r=(r,o)=>{const s=t&&j(n,o)||o;E(n[s])&&E(r)?n[s]=e(n[s],r):E(r)?n[s]=e({},r):f(r)?n[s]=r.slice():n[s]=r};for(let e=0,t=arguments.length;e<t;e++)arguments[e]&&k(arguments[e],r);return n},extend:(e,t,n,{allOwnKeys:o}={})=>(k(t,(t,o)=>{n&&y(t)?e[o]=r(t,n):e[o]=t},{allOwnKeys:o}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,i,a;const c={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)a=o[i],r&&!r(a,e,t)||c[a]||(t[a]=e[a],c[a]=!0);e=!1!==n&&s(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:c,kindOfTest:l,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(f(e))return e;let t=e.length;if(!w(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[i]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:F,hasOwnProperty:B,hasOwnProp:B,reduceDescriptors:q,freezeMethods:e=>{q(e,(t,n)=>{if(y(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];y(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))})},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach(e=>{n[e]=!0})};return f(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(e,t,n){return t.toUpperCase()+n}),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:j,global:x,isContextDefined:_,isSpecCompliantForm:function(e){return!!(e&&y(e.append)&&"FormData"===e[a]&&e[i])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(b(e)){if(t.indexOf(e)>=0)return;if(p(e))return e;if(!("toJSON"in e)){t[r]=e;const o=f(e)?[]:{};return k(e,(e,t)=>{const s=n(e,r+1);!h(s)&&(o[t]=s)}),t[r]=void 0,o}}return e};return n(e,0)},isAsyncFn:I,isThenable:e=>e&&(b(e)||y(e))&&y(e.then)&&y(e.catch),setImmediate:K,asap:J,isIterable:e=>null!=e&&y(e[i])};function V(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status?o.status:null)}W.inherits(V,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:W.toJSONObject(this.config),code:this.code,status:this.status}}});const G=V.prototype,X={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{X[e]={value:e}}),Object.defineProperties(V,X),Object.defineProperty(G,"isAxiosError",{value:!0}),V.from=(e,t,n,r,o,s)=>{const i=Object.create(G);return W.toFlatObject(e,i,function(e){return e!==Error.prototype},e=>"isAxiosError"!==e),V.call(i,e.message,t,n,r,o),i.cause=e,i.name=e.name,s&&Object.assign(i,s),i};function Q(e){return W.isPlainObject(e)||W.isArray(e)}function Z(e){return W.endsWith(e,"[]")?e.slice(0,-2):e}function Y(e,t,n){return e?e.concat(t).map(function(e,t){return e=Z(e),!n&&t?"["+e+"]":e}).join(n?".":""):t}const ee=W.toFlatObject(W,{},null,function(e){return/^is[A-Z]/.test(e)});function te(e,t,n){if(!W.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=W.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!W.isUndefined(t[e])})).metaTokens,o=n.visitor||u,s=n.dots,i=n.indexes,a=(n.Blob||"undefined"!=typeof Blob&&Blob)&&W.isSpecCompliantForm(t);if(!W.isFunction(o))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(W.isDate(e))return e.toISOString();if(W.isBoolean(e))return e.toString();if(!a&&W.isBlob(e))throw new V("Blob is not supported. Use a Buffer instead.");return W.isArrayBuffer(e)||W.isTypedArray(e)?a&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function u(e,n,o){let a=e;if(e&&!o&&"object"==typeof e)if(W.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(W.isArray(e)&&function(e){return W.isArray(e)&&!e.some(Q)}(e)||(W.isFileList(e)||W.endsWith(n,"[]"))&&(a=W.toArray(e)))return n=Z(n),a.forEach(function(e,r){!W.isUndefined(e)&&null!==e&&t.append(!0===i?Y([n],r,s):null===i?n:n+"[]",c(e))}),!1;return!!Q(e)||(t.append(Y(o,n,s),c(e)),!1)}const l=[],d=Object.assign(ee,{defaultVisitor:u,convertValue:c,isVisitable:Q});if(!W.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!W.isUndefined(n)){if(-1!==l.indexOf(n))throw Error("Circular reference detected in "+r.join("."));l.push(n),W.forEach(n,function(n,s){!0===(!(W.isUndefined(n)||null===n)&&o.call(t,n,W.isString(s)?s.trim():s,r,d))&&e(n,r?r.concat(s):[s])}),l.pop()}}(e),t}function ne(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function re(e,t){this._pairs=[],e&&te(e,this,t)}const oe=re.prototype;function se(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function ie(e,t,n){if(!t)return e;const r=n&&n.encode||se;W.isFunction(n)&&(n={serialize:n});const o=n&&n.serialize;let s;if(s=o?o(t,n):W.isURLSearchParams(t)?t.toString():new re(t,n).toString(r),s){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+s}return e}oe.append=function(e,t){this._pairs.push([e,t])},oe.toString=function(e){const t=e?function(t){return e.call(this,t,ne)}:ne;return this._pairs.map(function(e){return t(e[0])+"="+t(e[1])},"").join("&")};var ae=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){W.forEach(this.handlers,function(t){null!==t&&e(t)})}},ce={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},ue={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:re,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const le="undefined"!=typeof window&&"undefined"!=typeof document,de="object"==typeof navigator&&navigator||void 0,fe=le&&(!de||["ReactNative","NativeScript","NS"].indexOf(de.product)<0),he="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,pe=le&&window.location.href||"http://localhost";var me={...Object.freeze({__proto__:null,hasBrowserEnv:le,hasStandardBrowserEnv:fe,hasStandardBrowserWebWorkerEnv:he,navigator:de,origin:pe}),...ue};function ge(e){function t(e,n,r,o){let s=e[o++];if("__proto__"===s)return!0;const i=Number.isFinite(+s),a=o>=e.length;if(s=!s&&W.isArray(r)?r.length:s,a)return W.hasOwnProp(r,s)?r[s]=[r[s],n]:r[s]=n,!i;r[s]&&W.isObject(r[s])||(r[s]=[]);return t(e,n,r[s],o)&&W.isArray(r[s])&&(r[s]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let s;for(r=0;r<o;r++)s=n[r],t[s]=e[s];return t}(r[s])),!i}if(W.isFormData(e)&&W.isFunction(e.entries)){const n={};return W.forEachEntry(e,(e,r)=>{t(function(e){return W.matchAll(/\w+|\[(\w*)]/g,e).map(e=>"[]"===e[0]?"":e[1]||e[0])}(e),r,n,0)}),n}return null}const ye={transitional:ce,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=W.isObject(e);o&&W.isHTMLForm(e)&&(e=new FormData(e));if(W.isFormData(e))return r?JSON.stringify(ge(e)):e;if(W.isArrayBuffer(e)||W.isBuffer(e)||W.isStream(e)||W.isFile(e)||W.isBlob(e)||W.isReadableStream(e))return e;if(W.isArrayBufferView(e))return e.buffer;if(W.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let s;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return te(e,new me.classes.URLSearchParams,{visitor:function(e,t,n,r){return me.isNode&&W.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)},...t})}(e,this.formSerializer).toString();if((s=W.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return te(s?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(W.isString(e))try{return(t||JSON.parse)(e),W.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||ye.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(W.isResponse(e)||W.isReadableStream(e))return e;if(e&&W.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(e){if(n){if("SyntaxError"===e.name)throw V.from(e,V.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:me.classes.FormData,Blob:me.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};W.forEach(["delete","get","head","post","put","patch"],e=>{ye.headers[e]={}});var we=ye;const be=W.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const Ee=Symbol("internals");function Oe(e){return e&&String(e).trim().toLowerCase()}function Re(e){return!1===e||null==e?e:W.isArray(e)?e.map(Re):String(e)}function Se(e,t,n,r,o){return W.isFunction(r)?r.call(this,t,n):(o&&(t=n),W.isString(t)?W.isString(r)?-1!==t.indexOf(r):W.isRegExp(r)?r.test(t):void 0:void 0)}class Te{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=Oe(t);if(!o)throw new Error("header name must be a non-empty string");const s=W.findKey(r,o);(!s||void 0===r[s]||!0===n||void 0===n&&!1!==r[s])&&(r[s||t]=Re(e))}const s=(e,t)=>W.forEach(e,(e,n)=>o(e,n,t));if(W.isPlainObject(e)||e instanceof this.constructor)s(e,t);else if(W.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))s((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach(function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&be[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t})(e),t);else if(W.isObject(e)&&W.isIterable(e)){let n,r,o={};for(const t of e){if(!W.isArray(t))throw TypeError("Object iterator must return a key-value pair");o[r=t[0]]=(n=o[r])?W.isArray(n)?[...n,t[1]]:[n,t[1]]:t[1]}s(o,t)}else null!=e&&o(t,e,n);return this}get(e,t){if(e=Oe(e)){const n=W.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(W.isFunction(t))return t.call(this,e,n);if(W.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Oe(e)){const n=W.findKey(this,e);return!(!n||void 0===this[n]||t&&!Se(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=Oe(e)){const o=W.findKey(n,e);!o||t&&!Se(0,n[o],o,t)||(delete n[o],r=!0)}}return W.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!Se(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return W.forEach(this,(r,o)=>{const s=W.findKey(n,o);if(s)return t[s]=Re(r),void delete t[o];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,n)=>t.toUpperCase()+n)}(o):String(o).trim();i!==o&&delete t[o],t[i]=Re(r),n[i]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return W.forEach(this,(n,r)=>{null!=n&&!1!==n&&(t[r]=e&&W.isArray(n)?n.join(", "):n)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach(e=>n.set(e)),n}static accessor(e){const t=(this[Ee]=this[Ee]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=Oe(e);t[r]||(!function(e,t){const n=W.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})})}(n,e),t[r]=!0)}return W.isArray(e)?e.forEach(r):r(e),this}}Te.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),W.reduceDescriptors(Te.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}),W.freezeMethods(Te);var Ae=Te;function ve(e,t){const n=this||we,r=t||n,o=Ae.from(r.headers);let s=r.data;return W.forEach(e,function(e){s=e.call(n,s,o.normalize(),t?t.status:void 0)}),o.normalize(),s}function Ce(e){return!(!e||!e.__CANCEL__)}function Pe(e,t,n){V.call(this,null==e?"canceled":e,V.ERR_CANCELED,t,n),this.name="CanceledError"}function Ue(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new V("Request failed with status code "+n.status,[V.ERR_BAD_REQUEST,V.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}W.inherits(Pe,V,{__CANCEL__:!0});const ke=(e,t,n=3)=>{let r=0;const o=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,s=0,i=0;return t=void 0!==t?t:1e3,function(a){const c=Date.now(),u=r[i];o||(o=c),n[s]=a,r[s]=c;let l=i,d=0;for(;l!==s;)d+=n[l++],l%=e;if(s=(s+1)%e,s===i&&(i=(i+1)%e),c-o<t)return;const f=u&&c-u;return f?Math.round(1e3*d/f):void 0}}(50,250);return function(e,t){let n,r,o=0,s=1e3/t;const i=(t,s=Date.now())=>{o=s,n=null,r&&(clearTimeout(r),r=null),e(...t)};return[(...e)=>{const t=Date.now(),a=t-o;a>=s?i(e,t):(n=e,r||(r=setTimeout(()=>{r=null,i(n)},s-a)))},()=>n&&i(n)]}(n=>{const s=n.loaded,i=n.lengthComputable?n.total:void 0,a=s-r,c=o(a);r=s;e({loaded:s,total:i,progress:i?s/i:void 0,bytes:a,rate:c||void 0,estimated:c&&i&&s<=i?(i-s)/c:void 0,event:n,lengthComputable:null!=i,[t?"download":"upload"]:!0})},n)},je=(e,t)=>{const n=null!=e;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},xe=e=>(...t)=>W.asap(()=>e(...t));var _e=me.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,me.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(me.origin),me.navigator&&/(msie|trident)/i.test(me.navigator.userAgent)):()=>!0,Ne=me.hasStandardBrowserEnv?{write(e,t,n,r,o,s){const i=[e+"="+encodeURIComponent(t)];W.isNumber(n)&&i.push("expires="+new Date(n).toGMTString()),W.isString(r)&&i.push("path="+r),W.isString(o)&&i.push("domain="+o),!0===s&&i.push("secure"),document.cookie=i.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function Le(e,t,n){let r=!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t);return e&&(r||0==n)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Fe=e=>e instanceof Ae?{...e}:e;function Be(e,t){t=t||{};const n={};function r(e,t,n,r){return W.isPlainObject(e)&&W.isPlainObject(t)?W.merge.call({caseless:r},e,t):W.isPlainObject(t)?W.merge({},t):W.isArray(t)?t.slice():t}function o(e,t,n,o){return W.isUndefined(t)?W.isUndefined(e)?void 0:r(void 0,e,0,o):r(e,t,0,o)}function s(e,t){if(!W.isUndefined(t))return r(void 0,t)}function i(e,t){return W.isUndefined(t)?W.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function a(n,o,s){return s in t?r(n,o):s in e?r(void 0,n):void 0}const c={url:s,method:s,data:s,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:a,headers:(e,t,n)=>o(Fe(e),Fe(t),0,!0)};return W.forEach(Object.keys({...e,...t}),function(r){const s=c[r]||o,i=s(e[r],t[r],r);W.isUndefined(i)&&s!==a||(n[r]=i)}),n}var De=e=>{const t=Be({},e);let n,{data:r,withXSRFToken:o,xsrfHeaderName:s,xsrfCookieName:i,headers:a,auth:c}=t;if(t.headers=a=Ae.from(a),t.url=ie(Le(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),c&&a.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):""))),W.isFormData(r))if(me.hasStandardBrowserEnv||me.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if(!1!==(n=a.getContentType())){const[e,...t]=n?n.split(";").map(e=>e.trim()).filter(Boolean):[];a.setContentType([e||"multipart/form-data",...t].join("; "))}if(me.hasStandardBrowserEnv&&(o&&W.isFunction(o)&&(o=o(t)),o||!1!==o&&_e(t.url))){const e=s&&i&&Ne.read(i);e&&a.set(s,e)}return t};var qe="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise(function(t,n){const r=De(e);let o=r.data;const s=Ae.from(r.headers).normalize();let i,a,c,u,l,{responseType:d,onUploadProgress:f,onDownloadProgress:h}=r;function p(){u&&u(),l&&l(),r.cancelToken&&r.cancelToken.unsubscribe(i),r.signal&&r.signal.removeEventListener("abort",i)}let m=new XMLHttpRequest;function g(){if(!m)return;const r=Ae.from("getAllResponseHeaders"in m&&m.getAllResponseHeaders());Ue(function(e){t(e),p()},function(e){n(e),p()},{data:d&&"text"!==d&&"json"!==d?m.response:m.responseText,status:m.status,statusText:m.statusText,headers:r,config:e,request:m}),m=null}m.open(r.method.toUpperCase(),r.url,!0),m.timeout=r.timeout,"onloadend"in m?m.onloadend=g:m.onreadystatechange=function(){m&&4===m.readyState&&(0!==m.status||m.responseURL&&0===m.responseURL.indexOf("file:"))&&setTimeout(g)},m.onabort=function(){m&&(n(new V("Request aborted",V.ECONNABORTED,e,m)),m=null)},m.onerror=function(){n(new V("Network Error",V.ERR_NETWORK,e,m)),m=null},m.ontimeout=function(){let t=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const o=r.transitional||ce;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new V(t,o.clarifyTimeoutError?V.ETIMEDOUT:V.ECONNABORTED,e,m)),m=null},void 0===o&&s.setContentType(null),"setRequestHeader"in m&&W.forEach(s.toJSON(),function(e,t){m.setRequestHeader(t,e)}),W.isUndefined(r.withCredentials)||(m.withCredentials=!!r.withCredentials),d&&"json"!==d&&(m.responseType=r.responseType),h&&([c,l]=ke(h,!0),m.addEventListener("progress",c)),f&&m.upload&&([a,u]=ke(f),m.upload.addEventListener("progress",a),m.upload.addEventListener("loadend",u)),(r.cancelToken||r.signal)&&(i=t=>{m&&(n(!t||t.type?new Pe(null,e,m):t),m.abort(),m=null)},r.cancelToken&&r.cancelToken.subscribe(i),r.signal&&(r.signal.aborted?i():r.signal.addEventListener("abort",i)));const y=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(r.url);y&&-1===me.protocols.indexOf(y)?n(new V("Unsupported protocol "+y+":",V.ERR_BAD_REQUEST,e)):m.send(o||null)})};var Ie=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n,r=new AbortController;const o=function(e){if(!n){n=!0,i();const t=e instanceof Error?e:this.reason;r.abort(t instanceof V?t:new Pe(t instanceof Error?t.message:t))}};let s=t&&setTimeout(()=>{s=null,o(new V(`timeout ${t} of ms exceeded`,V.ETIMEDOUT))},t);const i=()=>{e&&(s&&clearTimeout(s),s=null,e.forEach(e=>{e.unsubscribe?e.unsubscribe(o):e.removeEventListener("abort",o)}),e=null)};e.forEach(e=>e.addEventListener("abort",o));const{signal:a}=r;return a.unsubscribe=()=>W.asap(i),a}};const Ke=function*(e,t){let n=e.byteLength;if(!t||n<t)return void(yield e);let r,o=0;for(;o<n;)r=o+t,yield e.slice(o,r),o=r},$e=async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:n}=await t.read();if(e)break;yield n}}finally{await t.cancel()}},Me=(e,t,n,r)=>{const o=async function*(e,t){for await(const n of $e(e))yield*Ke(n,t)}(e,t);let s,i=0,a=e=>{s||(s=!0,r&&r(e))};return new ReadableStream({async pull(e){try{const{done:t,value:r}=await o.next();if(t)return a(),void e.close();let s=r.byteLength;if(n){let e=i+=s;n(e)}e.enqueue(new Uint8Array(r))}catch(e){throw a(e),e}},cancel:e=>(a(e),o.return())},{highWaterMark:2})},ze="function"==typeof fetch&&"function"==typeof Request&&"function"==typeof Response,He=ze&&"function"==typeof ReadableStream,Je=ze&&("function"==typeof TextEncoder?(We=new TextEncoder,e=>We.encode(e)):async e=>new Uint8Array(await new Response(e).arrayBuffer()));var We;const Ve=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},Ge=He&&Ve(()=>{let e=!1;const t=new Request(me.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),Xe=He&&Ve(()=>W.isReadableStream(new Response("").body)),Qe={stream:Xe&&(e=>e.body)};var Ze;ze&&(Ze=new Response,["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!Qe[e]&&(Qe[e]=W.isFunction(Ze[e])?t=>t[e]():(t,n)=>{throw new V(`Response type '${e}' is not supported`,V.ERR_NOT_SUPPORT,n)})}));const Ye=async(e,t)=>{const n=W.toFiniteNumber(e.getContentLength());return null==n?(async e=>{if(null==e)return 0;if(W.isBlob(e))return e.size;if(W.isSpecCompliantForm(e)){const t=new Request(me.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return W.isArrayBufferView(e)||W.isArrayBuffer(e)?e.byteLength:(W.isURLSearchParams(e)&&(e+=""),W.isString(e)?(await Je(e)).byteLength:void 0)})(t):n};var et=ze&&(async e=>{let{url:t,method:n,data:r,signal:o,cancelToken:s,timeout:i,onDownloadProgress:a,onUploadProgress:c,responseType:u,headers:l,withCredentials:d="same-origin",fetchOptions:f}=De(e);u=u?(u+"").toLowerCase():"text";let h,p=Ie([o,s&&s.toAbortSignal()],i);const m=p&&p.unsubscribe&&(()=>{p.unsubscribe()});let g;try{if(c&&Ge&&"get"!==n&&"head"!==n&&0!==(g=await Ye(l,r))){let e,n=new Request(t,{method:"POST",body:r,duplex:"half"});if(W.isFormData(r)&&(e=n.headers.get("content-type"))&&l.setContentType(e),n.body){const[e,t]=je(g,ke(xe(c)));r=Me(n.body,65536,e,t)}}W.isString(d)||(d=d?"include":"omit");const o="credentials"in Request.prototype;h=new Request(t,{...f,signal:p,method:n.toUpperCase(),headers:l.normalize().toJSON(),body:r,duplex:"half",credentials:o?d:void 0});let s=await fetch(h,f);const i=Xe&&("stream"===u||"response"===u);if(Xe&&(a||i&&m)){const e={};["status","statusText","headers"].forEach(t=>{e[t]=s[t]});const t=W.toFiniteNumber(s.headers.get("content-length")),[n,r]=a&&je(t,ke(xe(a),!0))||[];s=new Response(Me(s.body,65536,n,()=>{r&&r(),m&&m()}),e)}u=u||"text";let y=await Qe[W.findKey(Qe,u)||"text"](s,e);return!i&&m&&m(),await new Promise((t,n)=>{Ue(t,n,{data:y,headers:Ae.from(s.headers),status:s.status,statusText:s.statusText,config:e,request:h})})}catch(t){if(m&&m(),t&&"TypeError"===t.name&&/Load failed|fetch/i.test(t.message))throw Object.assign(new V("Network Error",V.ERR_NETWORK,e,h),{cause:t.cause||t});throw V.from(t,t&&t.code,e,h)}});const tt={http:null,xhr:qe,fetch:et};W.forEach(tt,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}});const nt=e=>`- ${e}`,rt=e=>W.isFunction(e)||null===e||!1===e;var ot=e=>{e=W.isArray(e)?e:[e];const{length:t}=e;let n,r;const o={};for(let s=0;s<t;s++){let t;if(n=e[s],r=n,!rt(n)&&(r=tt[(t=String(n)).toLowerCase()],void 0===r))throw new V(`Unknown adapter '${t}'`);if(r)break;o[t||"#"+s]=r}if(!r){const e=Object.entries(o).map(([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build"));throw new V("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map(nt).join("\n"):" "+nt(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return r};function st(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Pe(null,e)}function it(e){st(e),e.headers=Ae.from(e.headers),e.data=ve.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return ot(e.adapter||we.adapter)(e).then(function(t){return st(e),t.data=ve.call(e,e.transformResponse,t),t.headers=Ae.from(t.headers),t},function(t){return Ce(t)||(st(e),t&&t.response&&(t.response.data=ve.call(e,e.transformResponse,t.response),t.response.headers=Ae.from(t.response.headers))),Promise.reject(t)})}const at="1.11.0",ct={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{ct[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});const ut={};ct.transitional=function(e,t,n){function r(e,t){return"[Axios v"+at+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,s)=>{if(!1===e)throw new V(r(o," has been removed"+(t?" in "+t:"")),V.ERR_DEPRECATED);return t&&!ut[o]&&(ut[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,s)}},ct.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};var lt={assertOptions:function(e,t,n){if("object"!=typeof e)throw new V("options must be an object",V.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const s=r[o],i=t[s];if(i){const t=e[s],n=void 0===t||i(t,s,e);if(!0!==n)throw new V("option "+s+" must be "+n,V.ERR_BAD_OPTION_VALUE);continue}if(!0!==n)throw new V("Unknown option "+s,V.ERR_BAD_OPTION)}},validators:ct};const dt=lt.validators;class ft{constructor(e){this.defaults=e||{},this.interceptors={request:new ae,response:new ae}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const n=t.stack?t.stack.replace(/^.+\n/,""):"";try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,""))&&(e.stack+="\n"+n):e.stack=n}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Be(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&<.assertOptions(n,{silentJSONParsing:dt.transitional(dt.boolean),forcedJSONParsing:dt.transitional(dt.boolean),clarifyTimeoutError:dt.transitional(dt.boolean)},!1),null!=r&&(W.isFunction(r)?t.paramsSerializer={serialize:r}:lt.assertOptions(r,{encode:dt.function,serialize:dt.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),lt.assertOptions(t,{baseUrl:dt.spelling("baseURL"),withXsrfToken:dt.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let s=o&&W.merge(o.common,o[t.method]);o&&W.forEach(["delete","get","head","post","put","patch","common"],e=>{delete o[e]}),t.headers=Ae.concat(s,o);const i=[];let a=!0;this.interceptors.request.forEach(function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(a=a&&e.synchronous,i.unshift(e.fulfilled,e.rejected))});const c=[];let u;this.interceptors.response.forEach(function(e){c.push(e.fulfilled,e.rejected)});let l,d=0;if(!a){const e=[it.bind(this),void 0];for(e.unshift(...i),e.push(...c),l=e.length,u=Promise.resolve(t);d<l;)u=u.then(e[d++],e[d++]);return u}l=i.length;let f=t;for(d=0;d<l;){const e=i[d++],t=i[d++];try{f=e(f)}catch(e){t.call(this,e);break}}try{u=it.call(this,f)}catch(e){return Promise.reject(e)}for(d=0,l=c.length;d<l;)u=u.then(c[d++],c[d++]);return u}getUri(e){return ie(Le((e=Be(this.defaults,e)).baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}}W.forEach(["delete","get","head","options"],function(e){ft.prototype[e]=function(t,n){return this.request(Be(n||{},{method:e,url:t,data:(n||{}).data}))}}),W.forEach(["post","put","patch"],function(e){function t(t){return function(n,r,o){return this.request(Be(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}ft.prototype[e]=t(),ft.prototype[e+"Form"]=t(!0)});var ht=ft;class pt{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise(function(e){t=e});const n=this;this.promise.then(e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null}),this.promise.then=e=>{let t;const r=new Promise(e=>{n.subscribe(e),t=e}).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e(function(e,r,o){n.reason||(n.reason=new Pe(e,r,o),t(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new pt(function(t){e=t}),cancel:e}}}var mt=pt;const gt={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(gt).forEach(([e,t])=>{gt[t]=e});var yt=gt;const wt=function e(t){const n=new ht(t),o=r(ht.prototype.request,n);return W.extend(o,ht.prototype,n,{allOwnKeys:!0}),W.extend(o,n,null,{allOwnKeys:!0}),o.create=function(n){return e(Be(t,n))},o}(we);wt.Axios=ht,wt.CanceledError=Pe,wt.CancelToken=mt,wt.isCancel=Ce,wt.VERSION=at,wt.toFormData=te,wt.AxiosError=V,wt.Cancel=wt.CanceledError,wt.all=function(e){return Promise.all(e)},wt.spread=function(e){return function(t){return e.apply(null,t)}},wt.isAxiosError=function(e){return W.isObject(e)&&!0===e.isAxiosError},wt.mergeConfig=Be,wt.AxiosHeaders=Ae,wt.formToJSON=e=>ge(W.isHTMLForm(e)?new FormData(e):e),wt.getAdapter=ot,wt.HttpStatusCode=yt,wt.default=wt;var bt=wt;async function Et(e,{method:n="GET",data:r={},headers:o={},timeout:s=5e3}={}){return t()?"fetch"in window&&"AbortController"in window?async function(e,t){const{method:n="GET",data:r={},headers:o={},timeout:s=5e3}=t,i=new AbortController,a=setTimeout(()=>i.abort(),s),c={method:n.toUpperCase(),headers:{"Content-Type":"application/json",...o},signal:i.signal};"GET"!==c.method&&r&&(c.body=JSON.stringify(r));try{const t=await fetch(e,c);if(clearTimeout(a),!t.ok)return{code:t.status,msg:`HTTP请求失败: ${t.statusText}`,success:!1};try{return await t.json()}catch(e){return{code:-201,msg:"响应数据不是有效的JSON格式",success:!1}}}catch(e){return clearTimeout(a),"AbortError"===e.name?{code:-202,msg:`请求超时(${s}ms)`,success:!1}:{code:-203,msg:`网络请求失败: ${e.message}`,success:!1}}}(e,{method:n,data:r,headers:o,timeout:s}):async function(e,t){const{method:n="GET",data:r={},headers:o={},timeout:s=5e3}=t,i={url:e,method:n.toUpperCase(),headers:{"Content-Type":"application/json",...o},timeout:s,["GET"===n.toUpperCase()?"params":"data"]:r};try{return(await bt(i)).data}catch(e){return"ECONNABORTED"===e.code?{code:-202,msg:`请求超时(${s}ms)`,success:!1}:e.response?{code:e.response.status,msg:`HTTP请求失败: ${e.response.statusText}`,success:!1}:{code:-203,msg:`网络请求失败: ${e.message}`,success:!1}}}(e,{method:n,data:r,headers:o,timeout:s}):{code:-200,msg:"request方法只能在浏览器环境使用",success:!1}}const Ot={accessCodeKey:"accessCode",tokenKey:"scm_token",timeout:5e3,headers:{},tokenApi:"",refreshCodeApi:"",logoutApi:"",logOutUrl:"",storage:localStorage,oldPwdKey:"oldPwd",newPwdKey:"newPwd",changePasswordApi:""};let Rt=null;function St(){return{async init(e={}){try{Rt=function(e,t){if(!t)return{...e};const n={...e};for(const e in t)t.hasOwnProperty(e)&&(n[e]=t[e]);return n}(Ot,e),function(e){if("string"!=typeof e.accessCodeKey||""===e.accessCodeKey.trim())throw new Error("accessCodeKey必须是有效的字符串");if("string"!=typeof e.tokenKey||""===e.tokenKey.trim())throw new Error("tokenKey必须是有效的字符串");if(e.storage&&("function"!=typeof e.storage.setItem||"function"!=typeof e.storage.getItem))throw new Error("storage必须实现setItem和getItem方法")}(Rt);const r=function(e,n){if(!t())return null;const r=n||window.location.href,o=new URL(r);let s=o.searchParams.get(e);if(null!==s)return s;if(o.hash.includes("?")){const t=o.hash.split("?")[1];return new URLSearchParams(t).get(e)}return null}(Rt.accessCodeKey);if(!Rt.tokenApi)return{code:-100,msg:"缺少tokenApi配置",success:!1};if(r){const e=await Et(Rt.tokenApi,{method:"POST",data:{accessCode:r},headers:Rt.headers,timeout:Rt.timeout});return 0===e.code&&e.data&&(Rt.storage.setItem(Rt.tokenKey,e.data),function(e){if(!t())return;const n=new URL(window.location.href);let r,o;if(n.hash.includes("?")){const[t,s]=n.hash.split("?");if(r=new URLSearchParams(s),r.has(e)){r.delete(e);const s=r.toString()?`${t}?${r.toString()}`:t;n.hash=s,o=n.toString()}}else r=new URLSearchParams(n.search),r.has(e)&&(r.delete(e),n.search=r.toString(),o=n.toString());o&&o!==window.location.href&&window.location.replace(o)}(Rt.accessCodeKey)),e}return this.getToken()||t()&&Rt.logOutUrl&&(window.location.href=`${Rt.logOutUrl}?redirect_uri=${encodeURIComponent(n())}`),{code:0,msg:"初始化成功",success:!0}}catch(e){return{code:-100,msg:`初始化失败: ${e.message}`,success:!1}}},getToken:()=>Rt&&t()?Rt.storage.getItem(Rt.tokenKey):null,removeToken(){Rt&&t()&&Rt.storage.removeItem(Rt.tokenKey)},async logout(){if(!Rt)return{code:-101,msg:"请先调用init方法初始化",success:!1};if(!Rt.logoutApi)return{code:-102,msg:"未配置logoutApi",success:!1};const e=this.getToken();if(!e)return this.removeToken(),t()&&Rt.logOutUrl&&(window.location.href=`${Rt.logOutUrl}?redirect_uri=${encodeURIComponent(n())}`),{code:0,msg:"已成功清除token",success:!0};try{const r=await Et(Rt.logoutApi,{method:"POST",headers:{...Rt.headers,[Rt.tokenKey]:e},timeout:Rt.timeout});return this.removeToken(),t()&&Rt.logOutUrl&&(window.location.href=`${Rt.logOutUrl}?redirect_uri=${encodeURIComponent(n())}`),r}catch(e){return{code:-103,msg:`退出失败: ${e.message}`,success:!1}}},async toUrl(e,n="_self"){if(!Rt)return{code:-101,msg:"请先调用init方法初始化",success:!1};if(!e)return{code:-104,msg:"请提供跳转地址",success:!1};if(!["_self","_blank"].includes(n))return{code:-108,msg:'target参数必须是"_self"或"_blank"',success:!1};if(!Rt.refreshCodeApi)return{code:-105,msg:"未配置refreshCodeApi",success:!1};const r=this.getToken();if(!r){if(t()&&Rt.logOutUrl){const t=`${Rt.logOutUrl}?redirect_uri=${encodeURIComponent(e)}`;"_blank"===n?window.open(t,"_blank"):window.location.href=t}return{code:-106,msg:"未找到有效token",success:!1}}try{const o=await Et(Rt.refreshCodeApi,{method:"POST",headers:{...Rt.headers,[Rt.tokenKey]:r},timeout:Rt.timeout});if(0===o.code&&o.data&&t()){const t=new URL(e);t.searchParams.set(Rt.accessCodeKey,o.data);const r=t.toString();"_blank"===n?window.open(r,"_blank"):window.location.href=r}else{const t=`${Rt.logOutUrl}?redirect_uri=${encodeURIComponent(e)}`;"_blank"===n?window.open(t,"_blank"):window.location.href=t}return o}catch(t){const r=`${Rt.logOutUrl}?redirect_uri=${encodeURIComponent(e)}`;return"_blank"===n?window.open(r,"_blank"):window.location.href=r,{code:-107,msg:`跳转失败: ${t.message}`,success:!1}}},async getAccessCode(){if(!Rt)return{code:-101,msg:"请先调用init方法初始化",success:!1};const e=this.getToken();return e?Rt.refreshCodeApi?Et(Rt.refreshCodeApi,{method:"POST",headers:{...Rt.headers,[Rt.tokenKey]:e},timeout:Rt.timeout}):{code:-105,msg:"未配置refreshCodeApi",success:!1}:{code:-106,msg:"未找到有效token",success:!1}},getConfig:()=>({...Rt}),async changePassword(e={}){if(!e[Rt.oldPwdKey])return{code:-1,msg:"请输入旧密码",success:!1};if(!e[Rt.newPwdKey])return{code:-1,msg:"请输入新密码",success:!1};const t=this.getToken();return Et(Rt.changePasswordApi,{method:"POST",headers:{...Rt.headers,[Rt.tokenKey]:t},timeout:Rt.timeout,data:{[Rt.oldPwdKey]:e[Rt.oldPwdKey],[Rt.newPwdKey]:e[Rt.newPwdKey]}})}}}const Tt=St();e.createSSO=St,e.default=Tt,e.lgsso=Tt,Object.defineProperty(e,"__esModule",{value:!0})});
|
|
2
2
|
//# sourceMappingURL=lgsso-sdk.min.js.map
|
package/package.json
CHANGED
package/src/sso.js
CHANGED
|
@@ -12,6 +12,9 @@ const DEFAULT_CONFIG = {
|
|
|
12
12
|
logoutApi: '',
|
|
13
13
|
logOutUrl: '',
|
|
14
14
|
storage: localStorage, // 可替换为sessionStorage
|
|
15
|
+
oldPwdKey: 'oldPwd',
|
|
16
|
+
newPwdKey: 'newPwd',
|
|
17
|
+
changePasswordApi: '',
|
|
15
18
|
};
|
|
16
19
|
|
|
17
20
|
let config = null;
|
|
@@ -261,7 +264,28 @@ export function createSSO() {
|
|
|
261
264
|
*/
|
|
262
265
|
getConfig() {
|
|
263
266
|
return { ...config }; // 返回配置的副本,防止外部修改
|
|
264
|
-
}
|
|
267
|
+
},
|
|
268
|
+
|
|
269
|
+
async changePassword(fromData = {}) {
|
|
270
|
+
if (!fromData[config.oldPwdKey]) {
|
|
271
|
+
return { code: -1, msg: '请输入旧密码', success: false };
|
|
272
|
+
} else if (!fromData[config.newPwdKey]) {
|
|
273
|
+
return { code: -1, msg: '请输入新密码', success: false };
|
|
274
|
+
}
|
|
275
|
+
const token = this.getToken();
|
|
276
|
+
return request(
|
|
277
|
+
config.changePasswordApi,
|
|
278
|
+
{
|
|
279
|
+
method: 'POST',
|
|
280
|
+
headers: { ...config.headers, [config.tokenKey]: token },
|
|
281
|
+
timeout: config.timeout,
|
|
282
|
+
data: {
|
|
283
|
+
[config.oldPwdKey]: fromData[config.oldPwdKey],
|
|
284
|
+
[config.newPwdKey]: fromData[config.newPwdKey],
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
);
|
|
288
|
+
},
|
|
265
289
|
};
|
|
266
290
|
}
|
|
267
291
|
|