@be-link/request 1.45.1-beta.3 → 1.45.1-beta.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/dist/application/clients/LiveClient.d.ts +2 -10
- package/dist/application/clients/LiveClient.d.ts.map +1 -1
- package/dist/application/interceptors/TokenInterceptor.d.ts.map +1 -1
- package/dist/core/constants/index.d.ts +1 -0
- package/dist/core/constants/index.d.ts.map +1 -1
- package/dist/core/types/config.types.d.ts +2 -0
- package/dist/core/types/config.types.d.ts.map +1 -1
- package/dist/index.cjs.js +22 -75
- package/dist/index.esm.js +22 -75
- package/dist/infrastructure/services/EncryptionService.d.ts.map +1 -1
- package/dist/infrastructure/services/TimeSyncService.d.ts +0 -1
- package/dist/infrastructure/services/TimeSyncService.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -11,7 +11,6 @@ export declare class LiveClient extends HttpClient {
|
|
|
11
11
|
private token;
|
|
12
12
|
private userId;
|
|
13
13
|
private initialized;
|
|
14
|
-
private tokenListenerCleanup;
|
|
15
14
|
private tokenHeaderName;
|
|
16
15
|
private tokenStorageKey;
|
|
17
16
|
constructor();
|
|
@@ -21,25 +20,18 @@ export declare class LiveClient extends HttpClient {
|
|
|
21
20
|
init(config: {
|
|
22
21
|
mode: string;
|
|
23
22
|
baseUrl?: string;
|
|
23
|
+
token?: string;
|
|
24
|
+
userId?: string;
|
|
24
25
|
tokenHeaderName?: string;
|
|
25
26
|
tokenStorageKey?: string;
|
|
26
27
|
encryption: EncryptionConfig;
|
|
27
28
|
timeSyncConfig: TimeSyncConfig;
|
|
28
29
|
}): void;
|
|
29
30
|
setUserId(userId: string): void;
|
|
30
|
-
/**
|
|
31
|
-
* 设置 Token
|
|
32
|
-
*/
|
|
33
|
-
setToken(token: string): void;
|
|
34
31
|
/**
|
|
35
32
|
* 获取当前 Token
|
|
36
33
|
*/
|
|
37
34
|
getToken(): string | null;
|
|
38
|
-
/**
|
|
39
|
-
* 设置 Token 监听器
|
|
40
|
-
* @returns 清理函数,用于移除监听器
|
|
41
|
-
*/
|
|
42
|
-
setupTokenListener(tokenKey: string | (() => string)): () => void;
|
|
43
35
|
/**
|
|
44
36
|
* 清除请求时间
|
|
45
37
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveClient.d.ts","sourceRoot":"","sources":["../../../src/application/clients/LiveClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"LiveClient.d.ts","sourceRoot":"","sources":["../../../src/application/clients/LiveClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AASzG;;;GAGG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,iBAAiB,CAAgC;IACzD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,eAAe,CAA8B;;IAiBrD;;OAEG;IACI,IAAI,CAAC,MAAM,EAAE;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,UAAU,EAAE,gBAAgB,CAAC;QAC7B,cAAc,EAAE,cAAc,CAAC;KAChC,GAAG,IAAI;IA2CD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAItC;;OAEG;IACI,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIhC;;OAEG;IACU,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/C;;OAEG;IACU,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAS7D;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAmBhC;;OAEG;IACU,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAQ5F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenInterceptor.d.ts","sourceRoot":"","sources":["../../../src/application/interceptors/TokenInterceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,kBAAkB;IAClD,IAAI,SAAsB;IAC1B,QAAQ,EAAE,MAAM,CAAC;IAExB,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAgB;gBAG5B,aAAa,EAAE,MAAM,MAAM,GAAG,IAAI,EAClC,iBAAiB,EAAE,kBAAkB,EACrC,OAAO,CAAC,EAAE,uBAAuB;IAStB,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"TokenInterceptor.d.ts","sourceRoot":"","sources":["../../../src/application/interceptors/TokenInterceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,kBAAkB;IAClD,IAAI,SAAsB;IAC1B,QAAQ,EAAE,MAAM,CAAC;IAExB,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAgB;gBAG5B,aAAa,EAAE,MAAM,MAAM,GAAG,IAAI,EAClC,iBAAiB,EAAE,kBAAkB,EACrC,OAAO,CAAC,EAAE,uBAAuB;IAStB,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAgB3D,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;CAG1D"}
|
|
@@ -58,6 +58,7 @@ export declare const TIME_SYNC_HEADERS: {
|
|
|
58
58
|
export declare const STORAGE_KEYS: {
|
|
59
59
|
readonly TOKEN: "token";
|
|
60
60
|
readonly SERVER_TIME: "x-belink-serverTime";
|
|
61
|
+
readonly CLIENT_TIME: "x-belink-clientTime";
|
|
61
62
|
readonly TIME_DIFF: "x-belink-timeDiff";
|
|
62
63
|
};
|
|
63
64
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/constants/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;CAYd,CAAC;AAEX;;GAEG;AACH,oBAAY,WAAW;IACrB,kBAAkB;IAClB,IAAI,qBAAqB;IACzB,mBAAmB;IACnB,eAAe,sCAAsC;IACrD,sBAAsB;IACtB,SAAS,wBAAwB;IACjC,UAAU;IACV,IAAI,eAAe;IACnB,WAAW;IACX,IAAI,cAAc;IAClB,UAAU;IACV,GAAG,oBAAoB;IACvB,WAAW;IACX,YAAY,6BAA6B;CAC1C;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC;;GAEG;AACH,eAAO,MAAM,YAAY,2BAA2B,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAE/C;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;CAGpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/constants/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;CAYd,CAAC;AAEX;;GAEG;AACH,oBAAY,WAAW;IACrB,kBAAkB;IAClB,IAAI,qBAAqB;IACzB,mBAAmB;IACnB,eAAe,sCAAsC;IACrD,sBAAsB;IACtB,SAAS,wBAAwB;IACjC,UAAU;IACV,IAAI,eAAe;IACnB,WAAW;IACX,IAAI,cAAc;IAClB,UAAU;IACV,GAAG,oBAAoB;IACvB,WAAW;IACX,YAAY,6BAA6B;CAC1C;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC;;GAEG;AACH,eAAO,MAAM,YAAY,2BAA2B,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAE/C;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;CAGpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;CAKf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../../src/core/types/config.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,aAAa;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,cAAc;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS;IACT,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW;IACX,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,YAAY,CAAC;IAC/C,aAAa;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;IAClC,WAAW;IACX,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,aAAa;IACb,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,mBAAmB;IACnB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,SAmB5B,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../../src/core/types/config.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,aAAa;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,cAAc;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS;IACT,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW;IACX,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,YAAY,CAAC;IAC/C,aAAa;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;IAClC,WAAW;IACX,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,aAAa;IACb,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,mBAAmB;IACnB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,SAmB5B,CAAC"}
|
package/dist/index.cjs.js
CHANGED
|
@@ -65,6 +65,7 @@ const TIME_SYNC_HEADERS = {
|
|
|
65
65
|
const STORAGE_KEYS = {
|
|
66
66
|
TOKEN: 'token',
|
|
67
67
|
SERVER_TIME: 'x-belink-serverTime',
|
|
68
|
+
CLIENT_TIME: 'x-belink-clientTime',
|
|
68
69
|
TIME_DIFF: 'x-belink-timeDiff',
|
|
69
70
|
};
|
|
70
71
|
|
|
@@ -680,11 +681,10 @@ class EncryptionService {
|
|
|
680
681
|
}
|
|
681
682
|
const time = timestamp ?? this.getAdjustedTime();
|
|
682
683
|
const data = `${token}|+|${time}`;
|
|
683
|
-
|
|
684
|
+
return CryptoJS.AES.encrypt(data, CryptoJS.enc.Utf8.parse(this.config.key), {
|
|
684
685
|
iv: CryptoJS.enc.Utf8.parse(this.config.iv),
|
|
685
686
|
mode: CryptoJS.mode.CBC,
|
|
686
687
|
}).toString();
|
|
687
|
-
return encrypted;
|
|
688
688
|
}
|
|
689
689
|
/**
|
|
690
690
|
* 解密 Token
|
|
@@ -733,7 +733,6 @@ class EncryptionService {
|
|
|
733
733
|
*/
|
|
734
734
|
class TimeSyncService {
|
|
735
735
|
constructor(config, mode = 'development') {
|
|
736
|
-
this.synced = false;
|
|
737
736
|
this.config = config;
|
|
738
737
|
this.mode = mode;
|
|
739
738
|
}
|
|
@@ -744,16 +743,18 @@ class TimeSyncService {
|
|
|
744
743
|
if (!this.config.enabled) {
|
|
745
744
|
return;
|
|
746
745
|
}
|
|
747
|
-
if (this.synced) {
|
|
748
|
-
return;
|
|
749
|
-
}
|
|
750
746
|
if (!isBrowser()) {
|
|
751
747
|
return;
|
|
752
748
|
}
|
|
753
749
|
const serverTime = localStorage.getItem(STORAGE_KEYS.SERVER_TIME);
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
750
|
+
const clientTime = localStorage.getItem(STORAGE_KEYS.CLIENT_TIME);
|
|
751
|
+
const currentTime = Date.now();
|
|
752
|
+
if (serverTime && serverTime !== 'undefined' && clientTime && clientTime !== 'undefined') {
|
|
753
|
+
const diff = Math.abs(Number(clientTime) - currentTime);
|
|
754
|
+
if (diff <= (this.config.syncGapTime || 50 * 1000)) {
|
|
755
|
+
console.log('服务器时间无需同步,差值:', diff);
|
|
756
|
+
return;
|
|
757
|
+
}
|
|
757
758
|
}
|
|
758
759
|
await this.sync();
|
|
759
760
|
}
|
|
@@ -765,6 +766,7 @@ class TimeSyncService {
|
|
|
765
766
|
return;
|
|
766
767
|
}
|
|
767
768
|
try {
|
|
769
|
+
console.log('服务器时间无需同步');
|
|
768
770
|
const url = this.getSyncUrl();
|
|
769
771
|
if (!url) {
|
|
770
772
|
console.warn('[TimeSyncService] Sync URL not configured');
|
|
@@ -783,11 +785,9 @@ class TimeSyncService {
|
|
|
783
785
|
this.clear();
|
|
784
786
|
return;
|
|
785
787
|
}
|
|
786
|
-
|
|
787
|
-
// const timeDiff = serverTime - currentTime;
|
|
788
|
+
console.log(111111113331312);
|
|
788
789
|
localStorage.setItem(STORAGE_KEYS.SERVER_TIME, String(serverTime));
|
|
789
|
-
|
|
790
|
-
this.synced = true;
|
|
790
|
+
localStorage.setItem(STORAGE_KEYS.CLIENT_TIME, String(Date.now()));
|
|
791
791
|
}
|
|
792
792
|
catch (error) {
|
|
793
793
|
console.error('[TimeSyncService] Failed to sync time:', error);
|
|
@@ -835,9 +835,9 @@ class TimeSyncService {
|
|
|
835
835
|
clear() {
|
|
836
836
|
if (isBrowser()) {
|
|
837
837
|
localStorage.removeItem(STORAGE_KEYS.SERVER_TIME);
|
|
838
|
+
localStorage.removeItem(STORAGE_KEYS.CLIENT_TIME);
|
|
838
839
|
localStorage.removeItem(STORAGE_KEYS.TIME_DIFF);
|
|
839
840
|
}
|
|
840
|
-
this.synced = false;
|
|
841
841
|
}
|
|
842
842
|
/**
|
|
843
843
|
* 更新模式
|
|
@@ -1158,10 +1158,9 @@ const beLinkRequest = new BeLinkClient();
|
|
|
1158
1158
|
class LiveClient extends HttpClient {
|
|
1159
1159
|
constructor() {
|
|
1160
1160
|
super();
|
|
1161
|
-
this.token =
|
|
1162
|
-
this.userId =
|
|
1161
|
+
this.token = '';
|
|
1162
|
+
this.userId = '';
|
|
1163
1163
|
this.initialized = false;
|
|
1164
|
-
this.tokenListenerCleanup = null;
|
|
1165
1164
|
this.tokenHeaderName = TOKEN_HEADER;
|
|
1166
1165
|
this.tokenStorageKey = STORAGE_KEYS.TOKEN;
|
|
1167
1166
|
this.configManager = ConfigManager.getInstance();
|
|
@@ -1196,6 +1195,12 @@ class LiveClient extends HttpClient {
|
|
|
1196
1195
|
if (config.tokenStorageKey) {
|
|
1197
1196
|
this.tokenStorageKey = config.tokenStorageKey;
|
|
1198
1197
|
}
|
|
1198
|
+
if (config.token) {
|
|
1199
|
+
this.token = config.token;
|
|
1200
|
+
}
|
|
1201
|
+
if (config.userId) {
|
|
1202
|
+
this.userId = config.userId;
|
|
1203
|
+
}
|
|
1199
1204
|
// 设置默认拦截器
|
|
1200
1205
|
if (!this.initialized) {
|
|
1201
1206
|
this.setupDefaultInterceptors();
|
|
@@ -1205,67 +1210,12 @@ class LiveClient extends HttpClient {
|
|
|
1205
1210
|
setUserId(userId) {
|
|
1206
1211
|
this.userId = userId;
|
|
1207
1212
|
}
|
|
1208
|
-
/**
|
|
1209
|
-
* 设置 Token
|
|
1210
|
-
*/
|
|
1211
|
-
setToken(token) {
|
|
1212
|
-
this.token = token;
|
|
1213
|
-
}
|
|
1214
1213
|
/**
|
|
1215
1214
|
* 获取当前 Token
|
|
1216
1215
|
*/
|
|
1217
1216
|
getToken() {
|
|
1218
1217
|
return this.token;
|
|
1219
1218
|
}
|
|
1220
|
-
/**
|
|
1221
|
-
* 设置 Token 监听器
|
|
1222
|
-
* @returns 清理函数,用于移除监听器
|
|
1223
|
-
*/
|
|
1224
|
-
setupTokenListener(tokenKey) {
|
|
1225
|
-
// 清理之前的监听器
|
|
1226
|
-
if (this.tokenListenerCleanup) {
|
|
1227
|
-
this.tokenListenerCleanup();
|
|
1228
|
-
this.tokenListenerCleanup = null;
|
|
1229
|
-
}
|
|
1230
|
-
// 非浏览器环境返回空操作
|
|
1231
|
-
if (!isBrowser()) {
|
|
1232
|
-
return () => { };
|
|
1233
|
-
}
|
|
1234
|
-
const getToken = () => {
|
|
1235
|
-
if (typeof tokenKey === 'string') {
|
|
1236
|
-
return window.localStorage.getItem(tokenKey);
|
|
1237
|
-
}
|
|
1238
|
-
else if (typeof tokenKey === 'function') {
|
|
1239
|
-
return tokenKey();
|
|
1240
|
-
}
|
|
1241
|
-
return null;
|
|
1242
|
-
};
|
|
1243
|
-
const storageHandler = (event) => {
|
|
1244
|
-
if (typeof tokenKey === 'string' && event.key === tokenKey) {
|
|
1245
|
-
if (event.newValue) {
|
|
1246
|
-
this.setToken(event.newValue);
|
|
1247
|
-
}
|
|
1248
|
-
}
|
|
1249
|
-
if (typeof tokenKey === 'function') {
|
|
1250
|
-
const token = tokenKey();
|
|
1251
|
-
if (token) {
|
|
1252
|
-
this.setToken(token);
|
|
1253
|
-
}
|
|
1254
|
-
}
|
|
1255
|
-
};
|
|
1256
|
-
window.addEventListener('storage', storageHandler);
|
|
1257
|
-
// 初始化时获取 token
|
|
1258
|
-
const token = getToken();
|
|
1259
|
-
if (token) {
|
|
1260
|
-
this.setToken(token);
|
|
1261
|
-
}
|
|
1262
|
-
// 创建并存储清理函数
|
|
1263
|
-
const cleanup = () => {
|
|
1264
|
-
window.removeEventListener('storage', storageHandler);
|
|
1265
|
-
};
|
|
1266
|
-
this.tokenListenerCleanup = cleanup;
|
|
1267
|
-
return cleanup;
|
|
1268
|
-
}
|
|
1269
1219
|
/**
|
|
1270
1220
|
* 清除请求时间
|
|
1271
1221
|
*/
|
|
@@ -1304,9 +1254,6 @@ class LiveClient extends HttpClient {
|
|
|
1304
1254
|
* 重写请求方法(向后兼容旧版 API)
|
|
1305
1255
|
*/
|
|
1306
1256
|
async request(config) {
|
|
1307
|
-
if (config.customToken) {
|
|
1308
|
-
this.setToken(config.customToken);
|
|
1309
|
-
}
|
|
1310
1257
|
// 处理旧版拦截器配置(使用基类的共享方法)
|
|
1311
1258
|
if (config.requestInterceptors || config.responseInterceptors) {
|
|
1312
1259
|
return this.requestWithLegacyInterceptors(config);
|
package/dist/index.esm.js
CHANGED
|
@@ -62,6 +62,7 @@ const TIME_SYNC_HEADERS = {
|
|
|
62
62
|
const STORAGE_KEYS = {
|
|
63
63
|
TOKEN: 'token',
|
|
64
64
|
SERVER_TIME: 'x-belink-serverTime',
|
|
65
|
+
CLIENT_TIME: 'x-belink-clientTime',
|
|
65
66
|
TIME_DIFF: 'x-belink-timeDiff',
|
|
66
67
|
};
|
|
67
68
|
|
|
@@ -677,11 +678,10 @@ class EncryptionService {
|
|
|
677
678
|
}
|
|
678
679
|
const time = timestamp ?? this.getAdjustedTime();
|
|
679
680
|
const data = `${token}|+|${time}`;
|
|
680
|
-
|
|
681
|
+
return CryptoJS.AES.encrypt(data, CryptoJS.enc.Utf8.parse(this.config.key), {
|
|
681
682
|
iv: CryptoJS.enc.Utf8.parse(this.config.iv),
|
|
682
683
|
mode: CryptoJS.mode.CBC,
|
|
683
684
|
}).toString();
|
|
684
|
-
return encrypted;
|
|
685
685
|
}
|
|
686
686
|
/**
|
|
687
687
|
* 解密 Token
|
|
@@ -730,7 +730,6 @@ class EncryptionService {
|
|
|
730
730
|
*/
|
|
731
731
|
class TimeSyncService {
|
|
732
732
|
constructor(config, mode = 'development') {
|
|
733
|
-
this.synced = false;
|
|
734
733
|
this.config = config;
|
|
735
734
|
this.mode = mode;
|
|
736
735
|
}
|
|
@@ -741,16 +740,18 @@ class TimeSyncService {
|
|
|
741
740
|
if (!this.config.enabled) {
|
|
742
741
|
return;
|
|
743
742
|
}
|
|
744
|
-
if (this.synced) {
|
|
745
|
-
return;
|
|
746
|
-
}
|
|
747
743
|
if (!isBrowser()) {
|
|
748
744
|
return;
|
|
749
745
|
}
|
|
750
746
|
const serverTime = localStorage.getItem(STORAGE_KEYS.SERVER_TIME);
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
747
|
+
const clientTime = localStorage.getItem(STORAGE_KEYS.CLIENT_TIME);
|
|
748
|
+
const currentTime = Date.now();
|
|
749
|
+
if (serverTime && serverTime !== 'undefined' && clientTime && clientTime !== 'undefined') {
|
|
750
|
+
const diff = Math.abs(Number(clientTime) - currentTime);
|
|
751
|
+
if (diff <= (this.config.syncGapTime || 50 * 1000)) {
|
|
752
|
+
console.log('服务器时间无需同步,差值:', diff);
|
|
753
|
+
return;
|
|
754
|
+
}
|
|
754
755
|
}
|
|
755
756
|
await this.sync();
|
|
756
757
|
}
|
|
@@ -762,6 +763,7 @@ class TimeSyncService {
|
|
|
762
763
|
return;
|
|
763
764
|
}
|
|
764
765
|
try {
|
|
766
|
+
console.log('服务器时间无需同步');
|
|
765
767
|
const url = this.getSyncUrl();
|
|
766
768
|
if (!url) {
|
|
767
769
|
console.warn('[TimeSyncService] Sync URL not configured');
|
|
@@ -780,11 +782,9 @@ class TimeSyncService {
|
|
|
780
782
|
this.clear();
|
|
781
783
|
return;
|
|
782
784
|
}
|
|
783
|
-
|
|
784
|
-
// const timeDiff = serverTime - currentTime;
|
|
785
|
+
console.log(111111113331312);
|
|
785
786
|
localStorage.setItem(STORAGE_KEYS.SERVER_TIME, String(serverTime));
|
|
786
|
-
|
|
787
|
-
this.synced = true;
|
|
787
|
+
localStorage.setItem(STORAGE_KEYS.CLIENT_TIME, String(Date.now()));
|
|
788
788
|
}
|
|
789
789
|
catch (error) {
|
|
790
790
|
console.error('[TimeSyncService] Failed to sync time:', error);
|
|
@@ -832,9 +832,9 @@ class TimeSyncService {
|
|
|
832
832
|
clear() {
|
|
833
833
|
if (isBrowser()) {
|
|
834
834
|
localStorage.removeItem(STORAGE_KEYS.SERVER_TIME);
|
|
835
|
+
localStorage.removeItem(STORAGE_KEYS.CLIENT_TIME);
|
|
835
836
|
localStorage.removeItem(STORAGE_KEYS.TIME_DIFF);
|
|
836
837
|
}
|
|
837
|
-
this.synced = false;
|
|
838
838
|
}
|
|
839
839
|
/**
|
|
840
840
|
* 更新模式
|
|
@@ -1155,10 +1155,9 @@ const beLinkRequest = new BeLinkClient();
|
|
|
1155
1155
|
class LiveClient extends HttpClient {
|
|
1156
1156
|
constructor() {
|
|
1157
1157
|
super();
|
|
1158
|
-
this.token =
|
|
1159
|
-
this.userId =
|
|
1158
|
+
this.token = '';
|
|
1159
|
+
this.userId = '';
|
|
1160
1160
|
this.initialized = false;
|
|
1161
|
-
this.tokenListenerCleanup = null;
|
|
1162
1161
|
this.tokenHeaderName = TOKEN_HEADER;
|
|
1163
1162
|
this.tokenStorageKey = STORAGE_KEYS.TOKEN;
|
|
1164
1163
|
this.configManager = ConfigManager.getInstance();
|
|
@@ -1193,6 +1192,12 @@ class LiveClient extends HttpClient {
|
|
|
1193
1192
|
if (config.tokenStorageKey) {
|
|
1194
1193
|
this.tokenStorageKey = config.tokenStorageKey;
|
|
1195
1194
|
}
|
|
1195
|
+
if (config.token) {
|
|
1196
|
+
this.token = config.token;
|
|
1197
|
+
}
|
|
1198
|
+
if (config.userId) {
|
|
1199
|
+
this.userId = config.userId;
|
|
1200
|
+
}
|
|
1196
1201
|
// 设置默认拦截器
|
|
1197
1202
|
if (!this.initialized) {
|
|
1198
1203
|
this.setupDefaultInterceptors();
|
|
@@ -1202,67 +1207,12 @@ class LiveClient extends HttpClient {
|
|
|
1202
1207
|
setUserId(userId) {
|
|
1203
1208
|
this.userId = userId;
|
|
1204
1209
|
}
|
|
1205
|
-
/**
|
|
1206
|
-
* 设置 Token
|
|
1207
|
-
*/
|
|
1208
|
-
setToken(token) {
|
|
1209
|
-
this.token = token;
|
|
1210
|
-
}
|
|
1211
1210
|
/**
|
|
1212
1211
|
* 获取当前 Token
|
|
1213
1212
|
*/
|
|
1214
1213
|
getToken() {
|
|
1215
1214
|
return this.token;
|
|
1216
1215
|
}
|
|
1217
|
-
/**
|
|
1218
|
-
* 设置 Token 监听器
|
|
1219
|
-
* @returns 清理函数,用于移除监听器
|
|
1220
|
-
*/
|
|
1221
|
-
setupTokenListener(tokenKey) {
|
|
1222
|
-
// 清理之前的监听器
|
|
1223
|
-
if (this.tokenListenerCleanup) {
|
|
1224
|
-
this.tokenListenerCleanup();
|
|
1225
|
-
this.tokenListenerCleanup = null;
|
|
1226
|
-
}
|
|
1227
|
-
// 非浏览器环境返回空操作
|
|
1228
|
-
if (!isBrowser()) {
|
|
1229
|
-
return () => { };
|
|
1230
|
-
}
|
|
1231
|
-
const getToken = () => {
|
|
1232
|
-
if (typeof tokenKey === 'string') {
|
|
1233
|
-
return window.localStorage.getItem(tokenKey);
|
|
1234
|
-
}
|
|
1235
|
-
else if (typeof tokenKey === 'function') {
|
|
1236
|
-
return tokenKey();
|
|
1237
|
-
}
|
|
1238
|
-
return null;
|
|
1239
|
-
};
|
|
1240
|
-
const storageHandler = (event) => {
|
|
1241
|
-
if (typeof tokenKey === 'string' && event.key === tokenKey) {
|
|
1242
|
-
if (event.newValue) {
|
|
1243
|
-
this.setToken(event.newValue);
|
|
1244
|
-
}
|
|
1245
|
-
}
|
|
1246
|
-
if (typeof tokenKey === 'function') {
|
|
1247
|
-
const token = tokenKey();
|
|
1248
|
-
if (token) {
|
|
1249
|
-
this.setToken(token);
|
|
1250
|
-
}
|
|
1251
|
-
}
|
|
1252
|
-
};
|
|
1253
|
-
window.addEventListener('storage', storageHandler);
|
|
1254
|
-
// 初始化时获取 token
|
|
1255
|
-
const token = getToken();
|
|
1256
|
-
if (token) {
|
|
1257
|
-
this.setToken(token);
|
|
1258
|
-
}
|
|
1259
|
-
// 创建并存储清理函数
|
|
1260
|
-
const cleanup = () => {
|
|
1261
|
-
window.removeEventListener('storage', storageHandler);
|
|
1262
|
-
};
|
|
1263
|
-
this.tokenListenerCleanup = cleanup;
|
|
1264
|
-
return cleanup;
|
|
1265
|
-
}
|
|
1266
1216
|
/**
|
|
1267
1217
|
* 清除请求时间
|
|
1268
1218
|
*/
|
|
@@ -1301,9 +1251,6 @@ class LiveClient extends HttpClient {
|
|
|
1301
1251
|
* 重写请求方法(向后兼容旧版 API)
|
|
1302
1252
|
*/
|
|
1303
1253
|
async request(config) {
|
|
1304
|
-
if (config.customToken) {
|
|
1305
|
-
this.setToken(config.customToken);
|
|
1306
|
-
}
|
|
1307
1254
|
// 处理旧版拦截器配置(使用基类的共享方法)
|
|
1308
1255
|
if (config.requestInterceptors || config.responseInterceptors) {
|
|
1309
1256
|
return this.requestWithLegacyInterceptors(config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EncryptionService.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/services/EncryptionService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,eAAe,CAAC,CAAkB;gBAE9B,MAAM,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAE,eAAe;IAKvE;;;OAGG;IACI,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"EncryptionService.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/services/EncryptionService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,eAAe,CAAC,CAAkB;gBAE9B,MAAM,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAE,eAAe;IAKvE;;;OAGG;IACI,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IAc9D;;OAEG;IACI,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAajF;;OAEG;IACI,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAI5D;;;OAGG;IACH,OAAO,CAAC,eAAe;CAkBxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimeSyncService.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/services/TimeSyncService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIlD;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,IAAI,CAAS;
|
|
1
|
+
{"version":3,"file":"TimeSyncService.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/services/TimeSyncService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIlD;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,IAAI,CAAS;gBAET,MAAM,EAAE,cAAc,EAAE,IAAI,GAAE,MAAsB;IAKhE;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBxC;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsClC;;OAEG;IACI,aAAa,IAAI,MAAM,GAAG,IAAI;IAQrC;;OAEG;IACI,WAAW,IAAI,MAAM,GAAG,IAAI;IAQnC;;OAEG;IACI,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAenD;;OAEG;IACI,KAAK,IAAI,IAAI;IAQpB;;OAEG;IACI,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,OAAO,CAAC,UAAU;CAMnB"}
|