@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.
@@ -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;AAUzG;;;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,CAAuB;IACpC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,oBAAoB,CAA6B;IACzD,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,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,UAAU,EAAE,gBAAgB,CAAC;QAC7B,cAAc,EAAE,cAAc,CAAC;KAChC,GAAG,IAAI;IAmCD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAItC;;OAEG;IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACI,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIhC;;;OAGG;IACI,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,MAAM,IAAI;IAqDxE;;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;CAY5F"}
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;IAiB3D,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;CAG1D"}
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;;;;CAIf,CAAC"}
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"}
@@ -13,6 +13,8 @@ export interface EncryptionConfig {
13
13
  export interface TimeSyncConfig {
14
14
  /** 是否启用 */
15
15
  enabled?: boolean;
16
+ /** 同步时间间隔,单位毫秒 */
17
+ syncGapTime?: number;
16
18
  /** 开发环境 URL */
17
19
  developmentUrl?: string;
18
20
  /** 生产环境 URL */
@@ -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
- const encrypted = CryptoJS.AES.encrypt(data, CryptoJS.enc.Utf8.parse(this.config.key), {
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
- if (serverTime && serverTime !== 'undefined') {
755
- this.synced = true;
756
- return;
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
- // const currentTime = Date.now();
787
- // const timeDiff = serverTime - currentTime;
788
+ console.log(111111113331312);
788
789
  localStorage.setItem(STORAGE_KEYS.SERVER_TIME, String(serverTime));
789
- // localStorage.setItem(STORAGE_KEYS.TIME_DIFF, String(timeDiff));
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 = null;
1162
- this.userId = null;
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
- const encrypted = CryptoJS.AES.encrypt(data, CryptoJS.enc.Utf8.parse(this.config.key), {
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
- if (serverTime && serverTime !== 'undefined') {
752
- this.synced = true;
753
- return;
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
- // const currentTime = Date.now();
784
- // const timeDiff = serverTime - currentTime;
785
+ console.log(111111113331312);
785
786
  localStorage.setItem(STORAGE_KEYS.SERVER_TIME, String(serverTime));
786
- // localStorage.setItem(STORAGE_KEYS.TIME_DIFF, String(timeDiff));
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 = null;
1159
- this.userId = null;
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;IAgB9D;;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
+ {"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"}
@@ -6,7 +6,6 @@ import { TimeSyncConfig } from '../../core/types';
6
6
  export declare class TimeSyncService {
7
7
  private config;
8
8
  private mode;
9
- private synced;
10
9
  constructor(config: TimeSyncConfig, mode?: string);
11
10
  /**
12
11
  * 确保时间已同步
@@ -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;IACrB,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,EAAE,cAAc,EAAE,IAAI,GAAE,MAAsB;IAKhE;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBxC;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwClC;;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"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@be-link/request",
3
- "version": "1.45.1-beta.3",
3
+ "version": "1.45.1-beta.4",
4
4
  "description": "共比邻 request 库",
5
5
  "homepage": "https://github.com/snowmountain-top/be-link#readme",
6
6
  "author": "zhuifeng <yangyiboys@163.com>",