lgsso-sdk 1.0.91 → 1.0.93

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.
@@ -0,0 +1,442 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ /*
6
+ * @Author: Robin LEI
7
+ * @Date: 2025-08-21 15:09:15
8
+ * @LastEditTime: 2025-08-21 15:22:11
9
+ * @FilePath: \lg-wms-admind:\业务代码\中联钢信\五服一管\lg-ssosdk\src\utils.js
10
+ */
11
+ /**
12
+ * 检查是否在浏览器环境
13
+ */
14
+ function isBrowser() {
15
+ return typeof window !== 'undefined' && typeof document !== 'undefined';
16
+ }
17
+
18
+ /**
19
+ * 解析URL中的查询参数
20
+ * @param {string} name - 参数名
21
+ * @param {string} [url] - 可选URL,默认使用当前页面URL
22
+ * @returns {string|null} 参数值
23
+ */
24
+ function getQueryParam(name, url) {
25
+ if (!isBrowser()) return null;
26
+
27
+ const targetUrl = url || window.location.href;
28
+ const urlObj = new URL(targetUrl);
29
+
30
+ // 先检查常规查询参数
31
+ let param = urlObj.searchParams.get(name);
32
+ if (param !== null) return param;
33
+
34
+ // 检查hash中的查询参数
35
+ if (urlObj.hash.includes('?')) {
36
+ const hashQuery = urlObj.hash.split('?')[1];
37
+ const hashParams = new URLSearchParams(hashQuery);
38
+ return hashParams.get(name);
39
+ }
40
+
41
+ return null;
42
+ }
43
+
44
+ /**
45
+ * 移除URL中的指定参数
46
+ * @param {string} name - 参数名
47
+ */
48
+ function removeQueryParam(name) {
49
+ if (!isBrowser()) return;
50
+
51
+ const url = new URL(window.location.href);
52
+ let params, newUrl;
53
+
54
+ // 处理hash模式(参数在#之后)
55
+ if (url.hash.includes('?')) {
56
+ const [hashPath, hashQuery] = url.hash.split('?');
57
+ params = new URLSearchParams(hashQuery);
58
+
59
+ if (params.has(name)) {
60
+ params.delete(name);
61
+ const newHash = params.toString() ? `${hashPath}?${params.toString()}` : hashPath;
62
+ url.hash = newHash;
63
+ newUrl = url.toString();
64
+ }
65
+ }
66
+ // 处理history模式(参数在?之后)
67
+ else {
68
+ params = new URLSearchParams(url.search);
69
+ if (params.has(name)) {
70
+ params.delete(name);
71
+ url.search = params.toString();
72
+ newUrl = url.toString();
73
+ }
74
+ }
75
+
76
+ // 更新URL
77
+ if (newUrl && newUrl !== window.location.href) {
78
+ window.location.replace(newUrl);
79
+ }
80
+ }
81
+
82
+ /**
83
+ * 获取当前完整URL(包含所有参数)
84
+ * @returns {string} 当前URL
85
+ */
86
+ function getCurrentUrlWithParams() {
87
+ if (!isBrowser()) return '';
88
+ return window.location.href;
89
+ }
90
+
91
+ /**
92
+ * 合并配置对象
93
+ * @param {Object} defaults - 默认配置
94
+ * @param {Object} options - 用户配置
95
+ * @returns {Object} 合并后的配置
96
+ */
97
+ function mergeConfigs(defaults, options) {
98
+ if (!options) return { ...defaults };
99
+ const merged = { ...defaults };
100
+ for (const key in options) {
101
+ if (options.hasOwnProperty(key)) {
102
+ merged[key] = options[key];
103
+ }
104
+ }
105
+ return merged;
106
+ }
107
+
108
+ /**
109
+ * 通用HTTP请求工具
110
+ * @param {string} url - 请求URL
111
+ * @param {Object} options - 请求选项
112
+ * @param {string} [options.method='GET'] - 请求方法
113
+ * @param {Object} [options.data] - 请求数据
114
+ * @param {Object} [options.headers] - 请求头
115
+ * @param {number} [options.timeout=5000] - 超时时间(ms)
116
+ * @returns {Promise<Object>} 请求结果
117
+ */
118
+ async function request(url, {
119
+ method = 'GET',
120
+ data = {},
121
+ headers = {},
122
+ timeout = 5000
123
+ } = {}) {
124
+ if (!isBrowser()) {
125
+ return {
126
+ code: -200,
127
+ msg: 'request方法只能在浏览器环境使用',
128
+ success: false
129
+ };
130
+ }
131
+
132
+ // 超时控制
133
+ const controller = new AbortController();
134
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
135
+
136
+ // 构建请求配置
137
+ const options = {
138
+ method: method.toUpperCase(),
139
+ headers: {
140
+ 'Content-Type': 'application/json',
141
+ ...headers
142
+ },
143
+ signal: controller.signal
144
+ };
145
+
146
+ // 处理请求体(GET请求不携带body)
147
+ if (options.method !== 'GET' && data) {
148
+ options.body = JSON.stringify(data);
149
+ }
150
+
151
+ try {
152
+ const response = await fetch(url, options);
153
+ clearTimeout(timeoutId);
154
+
155
+ // 处理HTTP错误状态码
156
+ if (!response.ok) {
157
+ return {
158
+ code: response.status,
159
+ msg: `HTTP请求失败: ${response.statusText}`,
160
+ success: false
161
+ };
162
+ }
163
+
164
+ // 尝试解析JSON响应
165
+ try {
166
+ const result = await response.json();
167
+ return result;
168
+ } catch (jsonError) {
169
+ return {
170
+ code: -201,
171
+ msg: '响应数据不是有效的JSON格式',
172
+ success: false
173
+ };
174
+ }
175
+ } catch (error) {
176
+ clearTimeout(timeoutId);
177
+
178
+ // 超时错误处理
179
+ if (error.name === 'AbortError') {
180
+ return {
181
+ code: -202,
182
+ msg: `请求超时(${timeout}ms)`,
183
+ success: false
184
+ };
185
+ }
186
+
187
+ // 其他网络错误
188
+ return {
189
+ code: -203,
190
+ msg: `网络请求失败: ${error.message}`,
191
+ success: false
192
+ };
193
+ }
194
+ }
195
+
196
+ // 默认配置
197
+ const DEFAULT_CONFIG = {
198
+ accessCodeKey: 'accessCode',
199
+ tokenKey: 'scm_token',
200
+ timeout: 5000,
201
+ headers: {},
202
+ tokenApi: '',
203
+ refreshCodeApi: '',
204
+ logoutApi: '',
205
+ logOutUrl: '',
206
+ storage: localStorage, // 可替换为sessionStorage
207
+ };
208
+
209
+ let config = null;
210
+
211
+ /**
212
+ * 验证配置的有效性
213
+ * @param {Object} options - 配置选项
214
+ * @throws {Error} 当配置无效时抛出错误
215
+ */
216
+ function validateConfig(options) {
217
+ if (typeof options.accessCodeKey !== 'string' || options.accessCodeKey.trim() === '') {
218
+ throw new Error('accessCodeKey必须是有效的字符串');
219
+ }
220
+ if (typeof options.tokenKey !== 'string' || options.tokenKey.trim() === '') {
221
+ throw new Error('tokenKey必须是有效的字符串');
222
+ }
223
+ if (options.storage && (typeof options.storage.setItem !== 'function' || typeof options.storage.getItem !== 'function')) {
224
+ throw new Error('storage必须实现setItem和getItem方法');
225
+ }
226
+ }
227
+
228
+ /**
229
+ * 创建SSO实例
230
+ * @returns {Object} SSO实例
231
+ */
232
+ function createSSO() {
233
+ return {
234
+ /**
235
+ * 初始化SDK
236
+ * @param {Object} options - 配置参数
237
+ * @returns {Promise<Object>} 接口返回结果
238
+ */
239
+ async init(options = {}) {
240
+ try {
241
+ // 合并并验证配置
242
+ config = mergeConfigs(DEFAULT_CONFIG, options);
243
+ validateConfig(config);
244
+
245
+ const accessCode = getQueryParam(config.accessCodeKey);
246
+
247
+ // 验证必要的API配置
248
+ if (!config.tokenApi) {
249
+ return { code: -100, msg: '缺少tokenApi配置', success: false };
250
+ }
251
+
252
+ // 如果存在accessCode,尝试获取token
253
+ if (accessCode) {
254
+ const result = await request(
255
+ config.tokenApi,
256
+ {
257
+ method: 'POST',
258
+ data: { accessCode },
259
+ headers: config.headers,
260
+ timeout: config.timeout
261
+ }
262
+ );
263
+
264
+ if (result.code === 0 && result.data) {
265
+ config.storage.setItem(config.tokenKey, result.data);
266
+ removeQueryParam(config.accessCodeKey);
267
+ }
268
+ return result;
269
+ }
270
+ // 如果没有token,跳转到登录页
271
+ else if (!this.getToken()) {
272
+ if (isBrowser() && config.logOutUrl) {
273
+ window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(getCurrentUrlWithParams())}`;
274
+ }
275
+ }
276
+
277
+ return { code: 0, msg: '初始化成功', success: true };
278
+ } catch (error) {
279
+ return { code: -100, msg: `初始化失败: ${error.message}`, success: false };
280
+ }
281
+ },
282
+
283
+ /**
284
+ * 获取存储的token
285
+ * @returns {string|null} token值或null
286
+ */
287
+ getToken() {
288
+ if (!config || !isBrowser()) return null;
289
+ return config.storage.getItem(config.tokenKey);
290
+ },
291
+
292
+ /**
293
+ * 删除存储的token
294
+ */
295
+ removeToken() {
296
+ if (!config || !isBrowser()) return;
297
+ config.storage.removeItem(config.tokenKey);
298
+ },
299
+
300
+ /**
301
+ * 退出登录
302
+ * @returns {Promise<Object>} 接口返回结果
303
+ */
304
+ async logout() {
305
+ if (!config) {
306
+ return { code: -101, msg: '请先调用init方法初始化', success: false };
307
+ }
308
+
309
+ if (!config.logoutApi) {
310
+ return { code: -102, msg: '未配置logoutApi', success: false };
311
+ }
312
+
313
+ const token = this.getToken();
314
+ if (token) {
315
+ try {
316
+ const result = await request(
317
+ config.logoutApi,
318
+ {
319
+ method: 'POST',
320
+ headers: { ...config.headers, [config.tokenKey]: token },
321
+ timeout: config.timeout
322
+ }
323
+ );
324
+ this.removeToken();
325
+
326
+ if (isBrowser() && config.logOutUrl) {
327
+ window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(getCurrentUrlWithParams())}`;
328
+ }
329
+ return result;
330
+ } catch (error) {
331
+ return { code: -103, msg: `退出失败: ${error.message}`, success: false };
332
+ }
333
+ } else {
334
+ this.removeToken();
335
+ if (isBrowser() && config.logOutUrl) {
336
+ window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(getCurrentUrlWithParams())}`;
337
+ }
338
+ return { code: 0, msg: '已成功清除token', success: true };
339
+ }
340
+ },
341
+
342
+ /**
343
+ * 用token换取新accessCode并跳转到指定URL
344
+ * @param {string} redirectUrl - 目标跳转地址
345
+ * @returns {Promise<Object>} 接口返回结果
346
+ */
347
+ async toUrl(redirectUrl) {
348
+ if (!config) {
349
+ return { code: -101, msg: '请先调用init方法初始化', success: false };
350
+ }
351
+
352
+ if (!redirectUrl) {
353
+ return { code: -104, msg: '请提供跳转地址', success: false };
354
+ }
355
+
356
+ if (!config.refreshCodeApi) {
357
+ return { code: -105, msg: '未配置refreshCodeApi', success: false };
358
+ }
359
+
360
+ const token = this.getToken();
361
+ if (!token) {
362
+ if (isBrowser() && config.logOutUrl) {
363
+ // 修改:使用参数传入的redirectUrl作为重定向地址
364
+ window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(redirectUrl)}`;
365
+ }
366
+ return { code: -106, msg: '未找到有效token', success: false };
367
+ }
368
+
369
+ try {
370
+ const result = await request(
371
+ config.refreshCodeApi,
372
+ {
373
+ method: 'POST',
374
+ headers: { ...config.headers, [config.tokenKey]: token },
375
+ timeout: config.timeout
376
+ }
377
+ );
378
+
379
+ if (result.code === 0 && result.data && isBrowser()) {
380
+ const url = new URL(redirectUrl);
381
+ url.searchParams.set(config.accessCodeKey, result.data);
382
+ window.location.href = url.toString();
383
+ }
384
+
385
+ return result;
386
+ } catch (error) {
387
+ return { code: -107, msg: `跳转失败: ${error.message}`, success: false };
388
+ }
389
+ },
390
+
391
+ /**
392
+ * 获取accessCode(通过token换取)
393
+ * @returns {Promise<Object>} 接口返回结果(data为accessCode)
394
+ */
395
+ async getAccessCode() {
396
+ if (!config) {
397
+ return { code: -101, msg: '请先调用init方法初始化', success: false };
398
+ }
399
+
400
+ const token = this.getToken();
401
+ if (!token) {
402
+ return { code: -106, msg: '未找到有效token', success: false };
403
+ }
404
+
405
+ if (!config.refreshCodeApi) {
406
+ return { code: -105, msg: '未配置refreshCodeApi', success: false };
407
+ }
408
+
409
+ return request(
410
+ config.refreshCodeApi,
411
+ {
412
+ method: 'POST',
413
+ headers: { ...config.headers, [config.tokenKey]: token },
414
+ timeout: config.timeout
415
+ }
416
+ );
417
+ },
418
+
419
+ /**
420
+ * 获取当前配置
421
+ * @returns {Object|null} 当前配置
422
+ */
423
+ getConfig() {
424
+ return { ...config }; // 返回配置的副本,防止外部修改
425
+ }
426
+ };
427
+ }
428
+
429
+ // 创建默认实例
430
+ const lgsso = createSSO();
431
+
432
+ /*
433
+ * @Author: Robin LEI
434
+ * @Date: 2025-08-21 15:08:08
435
+ * @LastEditTime: 2025-08-21 15:12:09
436
+ * @FilePath: \lg-wms-admind:\业务代码\中联钢信\五服一管\lg-ssosdk\src\index.js
437
+ */
438
+
439
+ exports.createSSO = createSSO;
440
+ exports.default = lgsso;
441
+ exports.lgsso = lgsso;
442
+ //# sourceMappingURL=lgsso-sdk.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lgsso-sdk.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"lgsso-sdk.esm.js","sources":["../src/utils.js","../src/request.js","../src/sso.js","../src/index.js"],"sourcesContent":["/*\r\n * @Author: Robin LEI\r\n * @Date: 2025-08-21 15:09:15\r\n * @LastEditTime: 2025-08-21 15:22:11\r\n * @FilePath: \\lg-wms-admind:\\业务代码\\中联钢信\\五服一管\\lg-ssosdk\\src\\utils.js\r\n */\r\n/**\r\n * 检查是否在浏览器环境\r\n */\r\nexport function isBrowser() {\r\n return typeof window !== 'undefined' && typeof document !== 'undefined';\r\n}\r\n\r\n/**\r\n * 解析URL中的查询参数\r\n * @param {string} name - 参数名\r\n * @param {string} [url] - 可选URL,默认使用当前页面URL\r\n * @returns {string|null} 参数值\r\n */\r\nexport function getQueryParam(name, url) {\r\n if (!isBrowser()) return null;\r\n\r\n const targetUrl = url || window.location.href;\r\n const urlObj = new URL(targetUrl);\r\n\r\n // 先检查常规查询参数\r\n let param = urlObj.searchParams.get(name);\r\n if (param !== null) return param;\r\n\r\n // 检查hash中的查询参数\r\n if (urlObj.hash.includes('?')) {\r\n const hashQuery = urlObj.hash.split('?')[1];\r\n const hashParams = new URLSearchParams(hashQuery);\r\n return hashParams.get(name);\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * 移除URL中的指定参数\r\n * @param {string} name - 参数名\r\n */\r\nexport function removeQueryParam(name) {\r\n if (!isBrowser()) return;\r\n\r\n const url = new URL(window.location.href);\r\n let params, newUrl;\r\n\r\n // 处理hash模式(参数在#之后)\r\n if (url.hash.includes('?')) {\r\n const [hashPath, hashQuery] = url.hash.split('?');\r\n params = new URLSearchParams(hashQuery);\r\n\r\n if (params.has(name)) {\r\n params.delete(name);\r\n const newHash = params.toString() ? `${hashPath}?${params.toString()}` : hashPath;\r\n url.hash = newHash;\r\n newUrl = url.toString();\r\n }\r\n }\r\n // 处理history模式(参数在?之后)\r\n else {\r\n params = new URLSearchParams(url.search);\r\n if (params.has(name)) {\r\n params.delete(name);\r\n url.search = params.toString();\r\n newUrl = url.toString();\r\n }\r\n }\r\n\r\n // 更新URL\r\n if (newUrl && newUrl !== window.location.href) {\r\n window.location.replace(newUrl);\r\n }\r\n}\r\n\r\n/**\r\n * 获取当前完整URL(包含所有参数)\r\n * @returns {string} 当前URL\r\n */\r\nexport function getCurrentUrlWithParams() {\r\n if (!isBrowser()) return '';\r\n return window.location.href;\r\n}\r\n\r\n/**\r\n * 合并配置对象\r\n * @param {Object} defaults - 默认配置\r\n * @param {Object} options - 用户配置\r\n * @returns {Object} 合并后的配置\r\n */\r\nexport function mergeConfigs(defaults, options) {\r\n if (!options) return { ...defaults };\r\n const merged = { ...defaults };\r\n for (const key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n merged[key] = options[key];\r\n }\r\n }\r\n return merged;\r\n}","import { isBrowser } from './utils';\r\n\r\n/**\r\n * 通用HTTP请求工具\r\n * @param {string} url - 请求URL\r\n * @param {Object} options - 请求选项\r\n * @param {string} [options.method='GET'] - 请求方法\r\n * @param {Object} [options.data] - 请求数据\r\n * @param {Object} [options.headers] - 请求头\r\n * @param {number} [options.timeout=5000] - 超时时间(ms)\r\n * @returns {Promise<Object>} 请求结果\r\n */\r\nexport async function request(url, {\r\n method = 'GET',\r\n data = {},\r\n headers = {},\r\n timeout = 5000\r\n} = {}) {\r\n if (!isBrowser()) {\r\n return {\r\n code: -200,\r\n msg: 'request方法只能在浏览器环境使用',\r\n success: false\r\n };\r\n }\r\n\r\n // 超时控制\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), timeout);\r\n\r\n // 构建请求配置\r\n const options = {\r\n method: method.toUpperCase(),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...headers\r\n },\r\n signal: controller.signal\r\n };\r\n\r\n // 处理请求体(GET请求不携带body)\r\n if (options.method !== 'GET' && data) {\r\n options.body = JSON.stringify(data);\r\n }\r\n\r\n try {\r\n const response = await fetch(url, options);\r\n clearTimeout(timeoutId);\r\n\r\n // 处理HTTP错误状态码\r\n if (!response.ok) {\r\n return {\r\n code: response.status,\r\n msg: `HTTP请求失败: ${response.statusText}`,\r\n success: false\r\n };\r\n }\r\n\r\n // 尝试解析JSON响应\r\n try {\r\n const result = await response.json();\r\n return result;\r\n } catch (jsonError) {\r\n return {\r\n code: -201,\r\n msg: '响应数据不是有效的JSON格式',\r\n success: false\r\n };\r\n }\r\n } catch (error) {\r\n clearTimeout(timeoutId);\r\n\r\n // 超时错误处理\r\n if (error.name === 'AbortError') {\r\n return {\r\n code: -202,\r\n msg: `请求超时(${timeout}ms)`,\r\n success: false\r\n };\r\n }\r\n\r\n // 其他网络错误\r\n return {\r\n code: -203,\r\n msg: `网络请求失败: ${error.message}`,\r\n success: false\r\n };\r\n }\r\n}","import { request } from './request';\r\nimport { isBrowser, getQueryParam, removeQueryParam, getCurrentUrlWithParams, mergeConfigs } from './utils';\r\n\r\n// 默认配置\r\nconst DEFAULT_CONFIG = {\r\n accessCodeKey: 'accessCode',\r\n tokenKey: 'scm_token',\r\n timeout: 5000,\r\n headers: {},\r\n tokenApi: '',\r\n refreshCodeApi: '',\r\n logoutApi: '',\r\n logOutUrl: '',\r\n storage: localStorage, // 可替换为sessionStorage\r\n};\r\n\r\nlet config = null;\r\n\r\n/**\r\n * 验证配置的有效性\r\n * @param {Object} options - 配置选项\r\n * @throws {Error} 当配置无效时抛出错误\r\n */\r\nfunction validateConfig(options) {\r\n if (typeof options.accessCodeKey !== 'string' || options.accessCodeKey.trim() === '') {\r\n throw new Error('accessCodeKey必须是有效的字符串');\r\n }\r\n if (typeof options.tokenKey !== 'string' || options.tokenKey.trim() === '') {\r\n throw new Error('tokenKey必须是有效的字符串');\r\n }\r\n if (options.storage && (typeof options.storage.setItem !== 'function' || typeof options.storage.getItem !== 'function')) {\r\n throw new Error('storage必须实现setItem和getItem方法');\r\n }\r\n}\r\n\r\n/**\r\n * 创建SSO实例\r\n * @returns {Object} SSO实例\r\n */\r\nexport function createSSO() {\r\n return {\r\n /**\r\n * 初始化SDK\r\n * @param {Object} options - 配置参数\r\n * @returns {Promise<Object>} 接口返回结果\r\n */\r\n async init(options = {}) {\r\n try {\r\n // 合并并验证配置\r\n config = mergeConfigs(DEFAULT_CONFIG, options);\r\n validateConfig(config);\r\n\r\n const accessCode = getQueryParam(config.accessCodeKey);\r\n\r\n // 验证必要的API配置\r\n if (!config.tokenApi) {\r\n return { code: -100, msg: '缺少tokenApi配置', success: false };\r\n }\r\n\r\n // 如果存在accessCode,尝试获取token\r\n if (accessCode) {\r\n const result = await request(\r\n config.tokenApi,\r\n {\r\n method: 'POST',\r\n data: { accessCode },\r\n headers: config.headers,\r\n timeout: config.timeout\r\n }\r\n );\r\n\r\n if (result.code === 0 && result.data) {\r\n config.storage.setItem(config.tokenKey, result.data);\r\n removeQueryParam(config.accessCodeKey);\r\n }\r\n return result;\r\n }\r\n // 如果没有token,跳转到登录页\r\n else if (!this.getToken()) {\r\n if (isBrowser() && config.logOutUrl) {\r\n window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(getCurrentUrlWithParams())}`;\r\n }\r\n }\r\n\r\n return { code: 0, msg: '初始化成功', success: true };\r\n } catch (error) {\r\n return { code: -100, msg: `初始化失败: ${error.message}`, success: false };\r\n }\r\n },\r\n\r\n /**\r\n * 获取存储的token\r\n * @returns {string|null} token值或null\r\n */\r\n getToken() {\r\n if (!config || !isBrowser()) return null;\r\n return config.storage.getItem(config.tokenKey);\r\n },\r\n\r\n /**\r\n * 删除存储的token\r\n */\r\n removeToken() {\r\n if (!config || !isBrowser()) return;\r\n config.storage.removeItem(config.tokenKey);\r\n },\r\n\r\n /**\r\n * 退出登录\r\n * @returns {Promise<Object>} 接口返回结果\r\n */\r\n async logout() {\r\n if (!config) {\r\n return { code: -101, msg: '请先调用init方法初始化', success: false };\r\n }\r\n\r\n if (!config.logoutApi) {\r\n return { code: -102, msg: '未配置logoutApi', success: false };\r\n }\r\n\r\n const token = this.getToken();\r\n if (token) {\r\n try {\r\n const result = await request(\r\n config.logoutApi,\r\n {\r\n method: 'POST',\r\n headers: { ...config.headers, [config.tokenKey]: token },\r\n timeout: config.timeout\r\n }\r\n );\r\n this.removeToken();\r\n\r\n if (isBrowser() && config.logOutUrl) {\r\n window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(getCurrentUrlWithParams())}`;\r\n }\r\n return result;\r\n } catch (error) {\r\n return { code: -103, msg: `退出失败: ${error.message}`, success: false };\r\n }\r\n } else {\r\n this.removeToken();\r\n if (isBrowser() && config.logOutUrl) {\r\n window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(getCurrentUrlWithParams())}`;\r\n }\r\n return { code: 0, msg: '已成功清除token', success: true };\r\n }\r\n },\r\n\r\n /**\r\n * 用token换取新accessCode并跳转到指定URL\r\n * @param {string} redirectUrl - 目标跳转地址\r\n * @returns {Promise<Object>} 接口返回结果\r\n */\r\n async toUrl(redirectUrl) {\r\n if (!config) {\r\n return { code: -101, msg: '请先调用init方法初始化', success: false };\r\n }\r\n\r\n if (!redirectUrl) {\r\n return { code: -104, msg: '请提供跳转地址', success: false };\r\n }\r\n\r\n if (!config.refreshCodeApi) {\r\n return { code: -105, msg: '未配置refreshCodeApi', success: false };\r\n }\r\n\r\n const token = this.getToken();\r\n if (!token) {\r\n if (isBrowser() && config.logOutUrl) {\r\n // 修改:使用参数传入的redirectUrl作为重定向地址\r\n window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(redirectUrl)}`;\r\n }\r\n return { code: -106, msg: '未找到有效token', success: false };\r\n }\r\n\r\n try {\r\n const result = await request(\r\n config.refreshCodeApi,\r\n {\r\n method: 'POST',\r\n headers: { ...config.headers, [config.tokenKey]: token },\r\n timeout: config.timeout\r\n }\r\n );\r\n\r\n if (result.code === 0 && result.data && isBrowser()) {\r\n const url = new URL(redirectUrl);\r\n url.searchParams.set(config.accessCodeKey, result.data);\r\n window.location.href = url.toString();\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n return { code: -107, msg: `跳转失败: ${error.message}`, success: false };\r\n }\r\n },\r\n\r\n /**\r\n * 获取accessCode(通过token换取)\r\n * @returns {Promise<Object>} 接口返回结果(data为accessCode)\r\n */\r\n async getAccessCode() {\r\n if (!config) {\r\n return { code: -101, msg: '请先调用init方法初始化', success: false };\r\n }\r\n\r\n const token = this.getToken();\r\n if (!token) {\r\n return { code: -106, msg: '未找到有效token', success: false };\r\n }\r\n\r\n if (!config.refreshCodeApi) {\r\n return { code: -105, msg: '未配置refreshCodeApi', success: false };\r\n }\r\n\r\n return request(\r\n config.refreshCodeApi,\r\n {\r\n method: 'POST',\r\n headers: { ...config.headers, [config.tokenKey]: token },\r\n timeout: config.timeout\r\n }\r\n );\r\n },\r\n\r\n /**\r\n * 获取当前配置\r\n * @returns {Object|null} 当前配置\r\n */\r\n getConfig() {\r\n return { ...config }; // 返回配置的副本,防止外部修改\r\n }\r\n };\r\n}\r\n\r\n// 创建默认实例\r\nexport const lgsso = createSSO();\r\n","/*\r\n * @Author: Robin LEI\r\n * @Date: 2025-08-21 15:08:08\r\n * @LastEditTime: 2025-08-21 15:12:09\r\n * @FilePath: \\lg-wms-admind:\\业务代码\\中联钢信\\五服一管\\lg-ssosdk\\src\\index.js\r\n */\r\nimport { lgsso, createSSO } from './sso';\r\n// 导出所有公共API\r\nexport {\r\n lgsso,\r\n createSSO,\r\n};\r\n\r\n// 默认导出默认实例\r\nexport default lgsso;"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lgsso-sdk.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"lgsso-sdk.js","sources":["../src/utils.js","../src/request.js","../src/sso.js","../src/index.js"],"sourcesContent":["/*\r\n * @Author: Robin LEI\r\n * @Date: 2025-08-21 15:09:15\r\n * @LastEditTime: 2025-08-21 15:22:11\r\n * @FilePath: \\lg-wms-admind:\\业务代码\\中联钢信\\五服一管\\lg-ssosdk\\src\\utils.js\r\n */\r\n/**\r\n * 检查是否在浏览器环境\r\n */\r\nexport function isBrowser() {\r\n return typeof window !== 'undefined' && typeof document !== 'undefined';\r\n}\r\n\r\n/**\r\n * 解析URL中的查询参数\r\n * @param {string} name - 参数名\r\n * @param {string} [url] - 可选URL,默认使用当前页面URL\r\n * @returns {string|null} 参数值\r\n */\r\nexport function getQueryParam(name, url) {\r\n if (!isBrowser()) return null;\r\n\r\n const targetUrl = url || window.location.href;\r\n const urlObj = new URL(targetUrl);\r\n\r\n // 先检查常规查询参数\r\n let param = urlObj.searchParams.get(name);\r\n if (param !== null) return param;\r\n\r\n // 检查hash中的查询参数\r\n if (urlObj.hash.includes('?')) {\r\n const hashQuery = urlObj.hash.split('?')[1];\r\n const hashParams = new URLSearchParams(hashQuery);\r\n return hashParams.get(name);\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * 移除URL中的指定参数\r\n * @param {string} name - 参数名\r\n */\r\nexport function removeQueryParam(name) {\r\n if (!isBrowser()) return;\r\n\r\n const url = new URL(window.location.href);\r\n let params, newUrl;\r\n\r\n // 处理hash模式(参数在#之后)\r\n if (url.hash.includes('?')) {\r\n const [hashPath, hashQuery] = url.hash.split('?');\r\n params = new URLSearchParams(hashQuery);\r\n\r\n if (params.has(name)) {\r\n params.delete(name);\r\n const newHash = params.toString() ? `${hashPath}?${params.toString()}` : hashPath;\r\n url.hash = newHash;\r\n newUrl = url.toString();\r\n }\r\n }\r\n // 处理history模式(参数在?之后)\r\n else {\r\n params = new URLSearchParams(url.search);\r\n if (params.has(name)) {\r\n params.delete(name);\r\n url.search = params.toString();\r\n newUrl = url.toString();\r\n }\r\n }\r\n\r\n // 更新URL\r\n if (newUrl && newUrl !== window.location.href) {\r\n window.location.replace(newUrl);\r\n }\r\n}\r\n\r\n/**\r\n * 获取当前完整URL(包含所有参数)\r\n * @returns {string} 当前URL\r\n */\r\nexport function getCurrentUrlWithParams() {\r\n if (!isBrowser()) return '';\r\n return window.location.href;\r\n}\r\n\r\n/**\r\n * 合并配置对象\r\n * @param {Object} defaults - 默认配置\r\n * @param {Object} options - 用户配置\r\n * @returns {Object} 合并后的配置\r\n */\r\nexport function mergeConfigs(defaults, options) {\r\n if (!options) return { ...defaults };\r\n const merged = { ...defaults };\r\n for (const key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n merged[key] = options[key];\r\n }\r\n }\r\n return merged;\r\n}","import { isBrowser } from './utils';\r\n\r\n/**\r\n * 通用HTTP请求工具\r\n * @param {string} url - 请求URL\r\n * @param {Object} options - 请求选项\r\n * @param {string} [options.method='GET'] - 请求方法\r\n * @param {Object} [options.data] - 请求数据\r\n * @param {Object} [options.headers] - 请求头\r\n * @param {number} [options.timeout=5000] - 超时时间(ms)\r\n * @returns {Promise<Object>} 请求结果\r\n */\r\nexport async function request(url, {\r\n method = 'GET',\r\n data = {},\r\n headers = {},\r\n timeout = 5000\r\n} = {}) {\r\n if (!isBrowser()) {\r\n return {\r\n code: -200,\r\n msg: 'request方法只能在浏览器环境使用',\r\n success: false\r\n };\r\n }\r\n\r\n // 超时控制\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), timeout);\r\n\r\n // 构建请求配置\r\n const options = {\r\n method: method.toUpperCase(),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...headers\r\n },\r\n signal: controller.signal\r\n };\r\n\r\n // 处理请求体(GET请求不携带body)\r\n if (options.method !== 'GET' && data) {\r\n options.body = JSON.stringify(data);\r\n }\r\n\r\n try {\r\n const response = await fetch(url, options);\r\n clearTimeout(timeoutId);\r\n\r\n // 处理HTTP错误状态码\r\n if (!response.ok) {\r\n return {\r\n code: response.status,\r\n msg: `HTTP请求失败: ${response.statusText}`,\r\n success: false\r\n };\r\n }\r\n\r\n // 尝试解析JSON响应\r\n try {\r\n const result = await response.json();\r\n return result;\r\n } catch (jsonError) {\r\n return {\r\n code: -201,\r\n msg: '响应数据不是有效的JSON格式',\r\n success: false\r\n };\r\n }\r\n } catch (error) {\r\n clearTimeout(timeoutId);\r\n\r\n // 超时错误处理\r\n if (error.name === 'AbortError') {\r\n return {\r\n code: -202,\r\n msg: `请求超时(${timeout}ms)`,\r\n success: false\r\n };\r\n }\r\n\r\n // 其他网络错误\r\n return {\r\n code: -203,\r\n msg: `网络请求失败: ${error.message}`,\r\n success: false\r\n };\r\n }\r\n}","import { request } from './request';\r\nimport { isBrowser, getQueryParam, removeQueryParam, getCurrentUrlWithParams, mergeConfigs } from './utils';\r\n\r\n// 默认配置\r\nconst DEFAULT_CONFIG = {\r\n accessCodeKey: 'accessCode',\r\n tokenKey: 'scm_token',\r\n timeout: 5000,\r\n headers: {},\r\n tokenApi: '',\r\n refreshCodeApi: '',\r\n logoutApi: '',\r\n logOutUrl: '',\r\n storage: localStorage, // 可替换为sessionStorage\r\n};\r\n\r\nlet config = null;\r\n\r\n/**\r\n * 验证配置的有效性\r\n * @param {Object} options - 配置选项\r\n * @throws {Error} 当配置无效时抛出错误\r\n */\r\nfunction validateConfig(options) {\r\n if (typeof options.accessCodeKey !== 'string' || options.accessCodeKey.trim() === '') {\r\n throw new Error('accessCodeKey必须是有效的字符串');\r\n }\r\n if (typeof options.tokenKey !== 'string' || options.tokenKey.trim() === '') {\r\n throw new Error('tokenKey必须是有效的字符串');\r\n }\r\n if (options.storage && (typeof options.storage.setItem !== 'function' || typeof options.storage.getItem !== 'function')) {\r\n throw new Error('storage必须实现setItem和getItem方法');\r\n }\r\n}\r\n\r\n/**\r\n * 创建SSO实例\r\n * @returns {Object} SSO实例\r\n */\r\nexport function createSSO() {\r\n return {\r\n /**\r\n * 初始化SDK\r\n * @param {Object} options - 配置参数\r\n * @returns {Promise<Object>} 接口返回结果\r\n */\r\n async init(options = {}) {\r\n try {\r\n // 合并并验证配置\r\n config = mergeConfigs(DEFAULT_CONFIG, options);\r\n validateConfig(config);\r\n\r\n const accessCode = getQueryParam(config.accessCodeKey);\r\n\r\n // 验证必要的API配置\r\n if (!config.tokenApi) {\r\n return { code: -100, msg: '缺少tokenApi配置', success: false };\r\n }\r\n\r\n // 如果存在accessCode,尝试获取token\r\n if (accessCode) {\r\n const result = await request(\r\n config.tokenApi,\r\n {\r\n method: 'POST',\r\n data: { accessCode },\r\n headers: config.headers,\r\n timeout: config.timeout\r\n }\r\n );\r\n\r\n if (result.code === 0 && result.data) {\r\n config.storage.setItem(config.tokenKey, result.data);\r\n removeQueryParam(config.accessCodeKey);\r\n }\r\n return result;\r\n }\r\n // 如果没有token,跳转到登录页\r\n else if (!this.getToken()) {\r\n if (isBrowser() && config.logOutUrl) {\r\n window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(getCurrentUrlWithParams())}`;\r\n }\r\n }\r\n\r\n return { code: 0, msg: '初始化成功', success: true };\r\n } catch (error) {\r\n return { code: -100, msg: `初始化失败: ${error.message}`, success: false };\r\n }\r\n },\r\n\r\n /**\r\n * 获取存储的token\r\n * @returns {string|null} token值或null\r\n */\r\n getToken() {\r\n if (!config || !isBrowser()) return null;\r\n return config.storage.getItem(config.tokenKey);\r\n },\r\n\r\n /**\r\n * 删除存储的token\r\n */\r\n removeToken() {\r\n if (!config || !isBrowser()) return;\r\n config.storage.removeItem(config.tokenKey);\r\n },\r\n\r\n /**\r\n * 退出登录\r\n * @returns {Promise<Object>} 接口返回结果\r\n */\r\n async logout() {\r\n if (!config) {\r\n return { code: -101, msg: '请先调用init方法初始化', success: false };\r\n }\r\n\r\n if (!config.logoutApi) {\r\n return { code: -102, msg: '未配置logoutApi', success: false };\r\n }\r\n\r\n const token = this.getToken();\r\n if (token) {\r\n try {\r\n const result = await request(\r\n config.logoutApi,\r\n {\r\n method: 'POST',\r\n headers: { ...config.headers, [config.tokenKey]: token },\r\n timeout: config.timeout\r\n }\r\n );\r\n this.removeToken();\r\n\r\n if (isBrowser() && config.logOutUrl) {\r\n window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(getCurrentUrlWithParams())}`;\r\n }\r\n return result;\r\n } catch (error) {\r\n return { code: -103, msg: `退出失败: ${error.message}`, success: false };\r\n }\r\n } else {\r\n this.removeToken();\r\n if (isBrowser() && config.logOutUrl) {\r\n window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(getCurrentUrlWithParams())}`;\r\n }\r\n return { code: 0, msg: '已成功清除token', success: true };\r\n }\r\n },\r\n\r\n /**\r\n * 用token换取新accessCode并跳转到指定URL\r\n * @param {string} redirectUrl - 目标跳转地址\r\n * @returns {Promise<Object>} 接口返回结果\r\n */\r\n async toUrl(redirectUrl) {\r\n if (!config) {\r\n return { code: -101, msg: '请先调用init方法初始化', success: false };\r\n }\r\n\r\n if (!redirectUrl) {\r\n return { code: -104, msg: '请提供跳转地址', success: false };\r\n }\r\n\r\n if (!config.refreshCodeApi) {\r\n return { code: -105, msg: '未配置refreshCodeApi', success: false };\r\n }\r\n\r\n const token = this.getToken();\r\n if (!token) {\r\n if (isBrowser() && config.logOutUrl) {\r\n // 修改:使用参数传入的redirectUrl作为重定向地址\r\n window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(redirectUrl)}`;\r\n }\r\n return { code: -106, msg: '未找到有效token', success: false };\r\n }\r\n\r\n try {\r\n const result = await request(\r\n config.refreshCodeApi,\r\n {\r\n method: 'POST',\r\n headers: { ...config.headers, [config.tokenKey]: token },\r\n timeout: config.timeout\r\n }\r\n );\r\n\r\n if (result.code === 0 && result.data && isBrowser()) {\r\n const url = new URL(redirectUrl);\r\n url.searchParams.set(config.accessCodeKey, result.data);\r\n window.location.href = url.toString();\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n return { code: -107, msg: `跳转失败: ${error.message}`, success: false };\r\n }\r\n },\r\n\r\n /**\r\n * 获取accessCode(通过token换取)\r\n * @returns {Promise<Object>} 接口返回结果(data为accessCode)\r\n */\r\n async getAccessCode() {\r\n if (!config) {\r\n return { code: -101, msg: '请先调用init方法初始化', success: false };\r\n }\r\n\r\n const token = this.getToken();\r\n if (!token) {\r\n return { code: -106, msg: '未找到有效token', success: false };\r\n }\r\n\r\n if (!config.refreshCodeApi) {\r\n return { code: -105, msg: '未配置refreshCodeApi', success: false };\r\n }\r\n\r\n return request(\r\n config.refreshCodeApi,\r\n {\r\n method: 'POST',\r\n headers: { ...config.headers, [config.tokenKey]: token },\r\n timeout: config.timeout\r\n }\r\n );\r\n },\r\n\r\n /**\r\n * 获取当前配置\r\n * @returns {Object|null} 当前配置\r\n */\r\n getConfig() {\r\n return { ...config }; // 返回配置的副本,防止外部修改\r\n }\r\n };\r\n}\r\n\r\n// 创建默认实例\r\nexport const lgsso = createSSO();\r\n","/*\r\n * @Author: Robin LEI\r\n * @Date: 2025-08-21 15:08:08\r\n * @LastEditTime: 2025-08-21 15:12:09\r\n * @FilePath: \\lg-wms-admind:\\业务代码\\中联钢信\\五服一管\\lg-ssosdk\\src\\index.js\r\n */\r\nimport { lgsso, createSSO } from './sso';\r\n// 导出所有公共API\r\nexport {\r\n lgsso,\r\n createSSO,\r\n};\r\n\r\n// 默认导出默认实例\r\nexport default lgsso;"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lgsso-sdk.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"lgsso-sdk.min.js","sources":["../src/utils.js","../src/request.js","../src/sso.js"],"sourcesContent":["/*\r\n * @Author: Robin LEI\r\n * @Date: 2025-08-21 15:09:15\r\n * @LastEditTime: 2025-08-21 15:22:11\r\n * @FilePath: \\lg-wms-admind:\\业务代码\\中联钢信\\五服一管\\lg-ssosdk\\src\\utils.js\r\n */\r\n/**\r\n * 检查是否在浏览器环境\r\n */\r\nexport function isBrowser() {\r\n return typeof window !== 'undefined' && typeof document !== 'undefined';\r\n}\r\n\r\n/**\r\n * 解析URL中的查询参数\r\n * @param {string} name - 参数名\r\n * @param {string} [url] - 可选URL,默认使用当前页面URL\r\n * @returns {string|null} 参数值\r\n */\r\nexport function getQueryParam(name, url) {\r\n if (!isBrowser()) return null;\r\n\r\n const targetUrl = url || window.location.href;\r\n const urlObj = new URL(targetUrl);\r\n\r\n // 先检查常规查询参数\r\n let param = urlObj.searchParams.get(name);\r\n if (param !== null) return param;\r\n\r\n // 检查hash中的查询参数\r\n if (urlObj.hash.includes('?')) {\r\n const hashQuery = urlObj.hash.split('?')[1];\r\n const hashParams = new URLSearchParams(hashQuery);\r\n return hashParams.get(name);\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * 移除URL中的指定参数\r\n * @param {string} name - 参数名\r\n */\r\nexport function removeQueryParam(name) {\r\n if (!isBrowser()) return;\r\n\r\n const url = new URL(window.location.href);\r\n let params, newUrl;\r\n\r\n // 处理hash模式(参数在#之后)\r\n if (url.hash.includes('?')) {\r\n const [hashPath, hashQuery] = url.hash.split('?');\r\n params = new URLSearchParams(hashQuery);\r\n\r\n if (params.has(name)) {\r\n params.delete(name);\r\n const newHash = params.toString() ? `${hashPath}?${params.toString()}` : hashPath;\r\n url.hash = newHash;\r\n newUrl = url.toString();\r\n }\r\n }\r\n // 处理history模式(参数在?之后)\r\n else {\r\n params = new URLSearchParams(url.search);\r\n if (params.has(name)) {\r\n params.delete(name);\r\n url.search = params.toString();\r\n newUrl = url.toString();\r\n }\r\n }\r\n\r\n // 更新URL\r\n if (newUrl && newUrl !== window.location.href) {\r\n window.location.replace(newUrl);\r\n }\r\n}\r\n\r\n/**\r\n * 获取当前完整URL(包含所有参数)\r\n * @returns {string} 当前URL\r\n */\r\nexport function getCurrentUrlWithParams() {\r\n if (!isBrowser()) return '';\r\n return window.location.href;\r\n}\r\n\r\n/**\r\n * 合并配置对象\r\n * @param {Object} defaults - 默认配置\r\n * @param {Object} options - 用户配置\r\n * @returns {Object} 合并后的配置\r\n */\r\nexport function mergeConfigs(defaults, options) {\r\n if (!options) return { ...defaults };\r\n const merged = { ...defaults };\r\n for (const key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n merged[key] = options[key];\r\n }\r\n }\r\n return merged;\r\n}","import { isBrowser } from './utils';\r\n\r\n/**\r\n * 通用HTTP请求工具\r\n * @param {string} url - 请求URL\r\n * @param {Object} options - 请求选项\r\n * @param {string} [options.method='GET'] - 请求方法\r\n * @param {Object} [options.data] - 请求数据\r\n * @param {Object} [options.headers] - 请求头\r\n * @param {number} [options.timeout=5000] - 超时时间(ms)\r\n * @returns {Promise<Object>} 请求结果\r\n */\r\nexport async function request(url, {\r\n method = 'GET',\r\n data = {},\r\n headers = {},\r\n timeout = 5000\r\n} = {}) {\r\n if (!isBrowser()) {\r\n return {\r\n code: -200,\r\n msg: 'request方法只能在浏览器环境使用',\r\n success: false\r\n };\r\n }\r\n\r\n // 超时控制\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), timeout);\r\n\r\n // 构建请求配置\r\n const options = {\r\n method: method.toUpperCase(),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...headers\r\n },\r\n signal: controller.signal\r\n };\r\n\r\n // 处理请求体(GET请求不携带body)\r\n if (options.method !== 'GET' && data) {\r\n options.body = JSON.stringify(data);\r\n }\r\n\r\n try {\r\n const response = await fetch(url, options);\r\n clearTimeout(timeoutId);\r\n\r\n // 处理HTTP错误状态码\r\n if (!response.ok) {\r\n return {\r\n code: response.status,\r\n msg: `HTTP请求失败: ${response.statusText}`,\r\n success: false\r\n };\r\n }\r\n\r\n // 尝试解析JSON响应\r\n try {\r\n const result = await response.json();\r\n return result;\r\n } catch (jsonError) {\r\n return {\r\n code: -201,\r\n msg: '响应数据不是有效的JSON格式',\r\n success: false\r\n };\r\n }\r\n } catch (error) {\r\n clearTimeout(timeoutId);\r\n\r\n // 超时错误处理\r\n if (error.name === 'AbortError') {\r\n return {\r\n code: -202,\r\n msg: `请求超时(${timeout}ms)`,\r\n success: false\r\n };\r\n }\r\n\r\n // 其他网络错误\r\n return {\r\n code: -203,\r\n msg: `网络请求失败: ${error.message}`,\r\n success: false\r\n };\r\n }\r\n}","import { request } from './request';\r\nimport { isBrowser, getQueryParam, removeQueryParam, getCurrentUrlWithParams, mergeConfigs } from './utils';\r\n\r\n// 默认配置\r\nconst DEFAULT_CONFIG = {\r\n accessCodeKey: 'accessCode',\r\n tokenKey: 'scm_token',\r\n timeout: 5000,\r\n headers: {},\r\n tokenApi: '',\r\n refreshCodeApi: '',\r\n logoutApi: '',\r\n logOutUrl: '',\r\n storage: localStorage, // 可替换为sessionStorage\r\n};\r\n\r\nlet config = null;\r\n\r\n/**\r\n * 验证配置的有效性\r\n * @param {Object} options - 配置选项\r\n * @throws {Error} 当配置无效时抛出错误\r\n */\r\nfunction validateConfig(options) {\r\n if (typeof options.accessCodeKey !== 'string' || options.accessCodeKey.trim() === '') {\r\n throw new Error('accessCodeKey必须是有效的字符串');\r\n }\r\n if (typeof options.tokenKey !== 'string' || options.tokenKey.trim() === '') {\r\n throw new Error('tokenKey必须是有效的字符串');\r\n }\r\n if (options.storage && (typeof options.storage.setItem !== 'function' || typeof options.storage.getItem !== 'function')) {\r\n throw new Error('storage必须实现setItem和getItem方法');\r\n }\r\n}\r\n\r\n/**\r\n * 创建SSO实例\r\n * @returns {Object} SSO实例\r\n */\r\nexport function createSSO() {\r\n return {\r\n /**\r\n * 初始化SDK\r\n * @param {Object} options - 配置参数\r\n * @returns {Promise<Object>} 接口返回结果\r\n */\r\n async init(options = {}) {\r\n try {\r\n // 合并并验证配置\r\n config = mergeConfigs(DEFAULT_CONFIG, options);\r\n validateConfig(config);\r\n\r\n const accessCode = getQueryParam(config.accessCodeKey);\r\n\r\n // 验证必要的API配置\r\n if (!config.tokenApi) {\r\n return { code: -100, msg: '缺少tokenApi配置', success: false };\r\n }\r\n\r\n // 如果存在accessCode,尝试获取token\r\n if (accessCode) {\r\n const result = await request(\r\n config.tokenApi,\r\n {\r\n method: 'POST',\r\n data: { accessCode },\r\n headers: config.headers,\r\n timeout: config.timeout\r\n }\r\n );\r\n\r\n if (result.code === 0 && result.data) {\r\n config.storage.setItem(config.tokenKey, result.data);\r\n removeQueryParam(config.accessCodeKey);\r\n }\r\n return result;\r\n }\r\n // 如果没有token,跳转到登录页\r\n else if (!this.getToken()) {\r\n if (isBrowser() && config.logOutUrl) {\r\n window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(getCurrentUrlWithParams())}`;\r\n }\r\n }\r\n\r\n return { code: 0, msg: '初始化成功', success: true };\r\n } catch (error) {\r\n return { code: -100, msg: `初始化失败: ${error.message}`, success: false };\r\n }\r\n },\r\n\r\n /**\r\n * 获取存储的token\r\n * @returns {string|null} token值或null\r\n */\r\n getToken() {\r\n if (!config || !isBrowser()) return null;\r\n return config.storage.getItem(config.tokenKey);\r\n },\r\n\r\n /**\r\n * 删除存储的token\r\n */\r\n removeToken() {\r\n if (!config || !isBrowser()) return;\r\n config.storage.removeItem(config.tokenKey);\r\n },\r\n\r\n /**\r\n * 退出登录\r\n * @returns {Promise<Object>} 接口返回结果\r\n */\r\n async logout() {\r\n if (!config) {\r\n return { code: -101, msg: '请先调用init方法初始化', success: false };\r\n }\r\n\r\n if (!config.logoutApi) {\r\n return { code: -102, msg: '未配置logoutApi', success: false };\r\n }\r\n\r\n const token = this.getToken();\r\n if (token) {\r\n try {\r\n const result = await request(\r\n config.logoutApi,\r\n {\r\n method: 'POST',\r\n headers: { ...config.headers, [config.tokenKey]: token },\r\n timeout: config.timeout\r\n }\r\n );\r\n this.removeToken();\r\n\r\n if (isBrowser() && config.logOutUrl) {\r\n window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(getCurrentUrlWithParams())}`;\r\n }\r\n return result;\r\n } catch (error) {\r\n return { code: -103, msg: `退出失败: ${error.message}`, success: false };\r\n }\r\n } else {\r\n this.removeToken();\r\n if (isBrowser() && config.logOutUrl) {\r\n window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(getCurrentUrlWithParams())}`;\r\n }\r\n return { code: 0, msg: '已成功清除token', success: true };\r\n }\r\n },\r\n\r\n /**\r\n * 用token换取新accessCode并跳转到指定URL\r\n * @param {string} redirectUrl - 目标跳转地址\r\n * @returns {Promise<Object>} 接口返回结果\r\n */\r\n async toUrl(redirectUrl) {\r\n if (!config) {\r\n return { code: -101, msg: '请先调用init方法初始化', success: false };\r\n }\r\n\r\n if (!redirectUrl) {\r\n return { code: -104, msg: '请提供跳转地址', success: false };\r\n }\r\n\r\n if (!config.refreshCodeApi) {\r\n return { code: -105, msg: '未配置refreshCodeApi', success: false };\r\n }\r\n\r\n const token = this.getToken();\r\n if (!token) {\r\n if (isBrowser() && config.logOutUrl) {\r\n // 修改:使用参数传入的redirectUrl作为重定向地址\r\n window.location.href = `${config.logOutUrl}?redirect_uri=${encodeURIComponent(redirectUrl)}`;\r\n }\r\n return { code: -106, msg: '未找到有效token', success: false };\r\n }\r\n\r\n try {\r\n const result = await request(\r\n config.refreshCodeApi,\r\n {\r\n method: 'POST',\r\n headers: { ...config.headers, [config.tokenKey]: token },\r\n timeout: config.timeout\r\n }\r\n );\r\n\r\n if (result.code === 0 && result.data && isBrowser()) {\r\n const url = new URL(redirectUrl);\r\n url.searchParams.set(config.accessCodeKey, result.data);\r\n window.location.href = url.toString();\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n return { code: -107, msg: `跳转失败: ${error.message}`, success: false };\r\n }\r\n },\r\n\r\n /**\r\n * 获取accessCode(通过token换取)\r\n * @returns {Promise<Object>} 接口返回结果(data为accessCode)\r\n */\r\n async getAccessCode() {\r\n if (!config) {\r\n return { code: -101, msg: '请先调用init方法初始化', success: false };\r\n }\r\n\r\n const token = this.getToken();\r\n if (!token) {\r\n return { code: -106, msg: '未找到有效token', success: false };\r\n }\r\n\r\n if (!config.refreshCodeApi) {\r\n return { code: -105, msg: '未配置refreshCodeApi', success: false };\r\n }\r\n\r\n return request(\r\n config.refreshCodeApi,\r\n {\r\n method: 'POST',\r\n headers: { ...config.headers, [config.tokenKey]: token },\r\n timeout: config.timeout\r\n }\r\n );\r\n },\r\n\r\n /**\r\n * 获取当前配置\r\n * @returns {Object|null} 当前配置\r\n */\r\n getConfig() {\r\n return { ...config }; // 返回配置的副本,防止外部修改\r\n }\r\n };\r\n}\r\n\r\n// 创建默认实例\r\nexport const lgsso = createSSO();\r\n"],"names":["isBrowser","window","document","getCurrentUrlWithParams","location","href","async","request","url","method","data","headers","timeout","code","msg","success","controller","AbortController","timeoutId","setTimeout","abort","options","toUpperCase","signal","body","JSON","stringify","response","fetch","clearTimeout","ok","status","statusText","json","jsonError","error","name","message","DEFAULT_CONFIG","accessCodeKey","tokenKey","tokenApi","refreshCodeApi","logoutApi","logOutUrl","storage","localStorage","config","createSSO","init","defaults","merged","key","hasOwnProperty","mergeConfigs","trim","Error","setItem","getItem","validateConfig","accessCode","targetUrl","urlObj","URL","param","searchParams","get","hash","includes","hashQuery","split","URLSearchParams","getQueryParam","result","params","newUrl","hashPath","has","delete","newHash","toString","search","replace","removeQueryParam","this","getToken","encodeURIComponent","removeToken","removeItem","logout","token","toUrl","redirectUrl","set","getAccessCode","getConfig","lgsso"],"mappings":"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"}
1
+ {"version":3,"file":"lgsso-sdk.min.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "lgsso-sdk",
3
- "version": "1.0.91",
3
+ "version": "1.0.93",
4
4
  "type": "module",
5
5
  "description": "无框架依赖的单点登录SDK",
6
- "main": "dist/lgsso-sdk.js",
6
+ "main": "dist/lgsso-sdk.esm.js",
7
7
  "module": "dist/lgsso-sdk.esm.js",
8
8
  "browser": "dist/lgsso-sdk.min.js",
9
9
  "unpkg": "dist/lgsso-sdk.min.js",