@be-link/request 1.45.1-beta.1 → 1.45.1-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -9,33 +9,114 @@
9
9
  - 拦截器机制(请求/响应拦截)
10
10
  - TypeScript 类型支持
11
11
  - 多环境适配(Browser/Node.js)
12
+ - 支持多服务实例配置
12
13
 
13
14
  ## 安装
14
15
 
15
16
  ```bash
16
- npm install @be-link/request
17
- #
18
- pnpm add @be-link/request
17
+ # 基础安装(包含所有依赖)
18
+ pnpm add @be-link/request axios crypto-js
19
+
20
+ # 如果需要使用云函数调用 (callFunction)
21
+ pnpm add @be-link/request axios crypto-js @cloudbase/js-sdk
22
+ ```
23
+
24
+ ### 依赖说明
25
+
26
+ | 依赖 | 是否必须 | 说明 |
27
+ | ------------------- | -------- | ---------------------- |
28
+ | `axios` | ✅ 必须 | HTTP 客户端 |
29
+ | `crypto-js` | ✅ 必须 | Token 加密(AES) |
30
+ | `@cloudbase/js-sdk` | ⚠️ 可选 | 仅 `callFunction` 需要 |
31
+
32
+ > **注意**:所有依赖作为 external 不打包进产物,需要用户安装。
33
+
34
+ ## 架构设计
35
+
36
+ ```
37
+ ┌─────────────────────────────────────────────────────────────────────┐
38
+ │ 应用层 (Application) │
39
+ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
40
+ │ │ beLinkRequest │ │ beLinkLiveRequest│ │ request │ │
41
+ │ │ (企业级客户端) │ │ (直播客户端) │ │ (基础请求) │ │
42
+ │ └────────┬─────────┘ └────────┬─────────┘ └────────┬─────────┘ │
43
+ └───────────│─────────────────────│─────────────────────│─────────────┘
44
+ │ │ │
45
+ ▼ ▼ │
46
+ ┌─────────────────────────────────────────────────────────────────────┐
47
+ │ 客户端层 (Clients) │
48
+ │ ┌──────────────────┐ ┌──────────────────┐ │
49
+ │ │ BeLinkClient │ │ LiveClient │ │
50
+ │ │ - Token 加密 │ │ - 简化版 │ │
51
+ │ │ - 时间同步 │ │ - 无认证逻辑 │ │
52
+ │ │ - 401 处理 │ │ │ │
53
+ │ └────────┬─────────┘ └────────┬─────────┘ │
54
+ └───────────│─────────────────────│───────────────────────────────────┘
55
+ │ │
56
+ ▼ ▼
57
+ ┌─────────────────────────────────────────────────────────────────────┐
58
+ │ 基类层 (HttpClient) │
59
+ │ ┌─────────────────────────────────────────────────────────────┐ │
60
+ │ │ - get/post/put/delete 方法 │ │
61
+ │ │ - 拦截器管理 (addRequestInterceptor/addResponseInterceptor) │ │
62
+ │ │ - 请求上下文管理 │ │
63
+ │ └──────────────────────────────┬──────────────────────────────┘ │
64
+ └─────────────────────────────────│───────────────────────────────────┘
65
+
66
+
67
+ ┌─────────────────────────────────────────────────────────────────────┐
68
+ │ 适配器层 (AxiosAdapter) │
69
+ │ ┌─────────────────────────────────────────────────────────────┐ │
70
+ │ │ - 封装 Axios 实例 │ │
71
+ │ │ - 统一错误处理 (HttpError/NetworkError/TimeoutError) │ │
72
+ │ │ - 请求/响应转换 │ │
73
+ │ └─────────────────────────────────────────────────────────────┘ │
74
+ └─────────────────────────────────────────────────────────────────────┘
75
+ ```
76
+
77
+ ### Token 加密流程
78
+
19
79
  ```
80
+ 每次请求时:
81
+ ┌─────────────┐ ┌──────────────────┐ ┌─────────────────┐
82
+ │ TokenProvider│────>│ EncryptionService│────>│ 请求头 │
83
+ │ () => token │ │ AES(token|+|time)│ │ x-belink-auth.. │
84
+ └─────────────┘ └──────────────────┘ └─────────────────┘
85
+
86
+
87
+ TimeSyncService
88
+ (服务器时间校正)
89
+ ```
90
+
91
+ ## 客户端选择指南
92
+
93
+ | 客户端 | 使用场景 | Token 加密 | 时间同步 | 401 处理 |
94
+ | ------------------- | -------------------- | :--------: | :------: | :------: |
95
+ | `beLinkRequest` | 需要认证的业务 API | ✅ | ✅ | ✅ |
96
+ | `beLinkLiveRequest` | 直播、无需认证的场景 | ❌ | ❌ | ❌ |
97
+ | `request` | 第三方 API、简单请求 | ❌ | ❌ | ❌ |
20
98
 
21
99
  ## 快速开始
22
100
 
23
101
  ### 1. 初始化配置
24
102
 
25
103
  ```typescript
26
- import { beLinkRequest, ConfigManager } from '@be-link/request';
104
+ import { beLinkRequest } from '@be-link/request';
27
105
 
28
106
  // 初始化客户端
29
107
  beLinkRequest.init({
30
108
  mode: 'production', // 'development' | 'testing' | 'production'
31
- loginPath: '/login', // 401 时跳转的登录页路径,也可以是函数
109
+ baseUrl: 'https://api.example.com', // API 基础地址
110
+ loginPath: '/login', // 401 时跳转的登录页路径
111
+ tokenHeaderName: 'x-belink-authorization', // Token 请求头名称(可选)
112
+ tokenStorageKey: 'belink_token', // localStorage 存储键名(可选)
32
113
  });
33
114
 
34
115
  // 设置 Token(通常在登录后调用)
35
116
  beLinkRequest.setToken('your-auth-token');
36
117
 
37
118
  // 或监听 localStorage 中的 Token 变化
38
- beLinkRequest.setupTokenListener('TOKEN_KEY');
119
+ beLinkRequest.setupTokenListener('belink_token');
39
120
  ```
40
121
 
41
122
  ### 2. 发起请求
@@ -66,25 +147,30 @@ const data = await beLinkRequest.request({
66
147
 
67
148
  ### beLinkRequest - 企业级请求客户端
68
149
 
69
- 带完整认证、加密、时间同步功能的请求客户端。
150
+ **使用场景**: 需要用户认证的业务 API,如用户信息、订单、支付等。
151
+
152
+ **特性**:
153
+
154
+ - Token 自动加密(AES + 时间戳,防重放攻击)
155
+ - 服务器时间同步(解决客户端时间不准问题)
156
+ - 401 自动处理(跳转登录页或执行回调)
70
157
 
71
158
  ```typescript
72
159
  import { beLinkRequest } from '@be-link/request';
73
160
 
74
- // 初始化
161
+ // 初始化(必须在使用前调用)
75
162
  beLinkRequest.init({
76
163
  mode: 'production',
164
+ baseUrl: 'https://api.example.com',
77
165
  loginPath: '/login',
166
+ tokenHeaderName: 'x-belink-authorization', // 请求头名称
167
+ tokenStorageKey: 'belink_token', // localStorage 键名
78
168
  });
79
169
 
80
- // 设置 Token
81
- beLinkRequest.setToken(token: string): void
82
-
83
- // 获取 Token
84
- beLinkRequest.getToken(): string | null
85
-
86
- // 监听 Token 变化(返回清理函数)
87
- beLinkRequest.setupTokenListener(tokenKey: string | (() => string)): () => void
170
+ // Token 管理
171
+ beLinkRequest.setToken(token: string): void // 设置 Token
172
+ beLinkRequest.getToken(): string | null // 获取 Token
173
+ beLinkRequest.setupTokenListener(tokenKey): () => void // 监听 Token 变化
88
174
 
89
175
  // HTTP 方法
90
176
  beLinkRequest.get<T>(url: string, config?): Promise<ApiResponse<T>>
@@ -95,25 +181,39 @@ beLinkRequest.delete<T>(url: string, config?): Promise<ApiResponse<T>>
95
181
  // 通用请求
96
182
  beLinkRequest.request<T>(config: RequestConfig): Promise<ApiResponse<T>>
97
183
 
98
- // 时间同步
184
+ // 时间同步(向后兼容)
99
185
  beLinkRequest.setupRequestTime(config): Promise<void> // 设置请求时间
100
186
  beLinkRequest.removeRequestTime(): Promise<void> // 清除请求时间
101
187
  ```
102
188
 
103
189
  ### beLinkLiveRequest - 直播请求客户端
104
190
 
105
- 简化版客户端,无认证逻辑,适用于直播等场景。
191
+ **使用场景**: 直播、公开 API、不需要用户认证的场景。
192
+
193
+ **特性**:
194
+
195
+ - 简化版客户端,无 Token 加密
196
+ - 无时间同步
197
+ - 无 401 处理
198
+ - 支持配置 baseUrl 和 tokenHeaderName
106
199
 
107
200
  ```typescript
108
201
  import { beLinkLiveRequest } from '@be-link/request';
109
202
 
110
- // 使用方式与 beLinkRequest 相同,但不包含认证功能
111
- const data = await beLinkLiveRequest.post('/api/live/data', { roomId: '123' });
203
+ // 初始化
204
+ beLinkLiveRequest.init({
205
+ baseUrl: 'https://live-api.example.com',
206
+ tokenHeaderName: 'x-live-authorization', // 可选
207
+ });
208
+
209
+ // 发起请求
210
+ const data = await beLinkLiveRequest.post('/api/live/room', { roomId: '123' });
211
+ const info = await beLinkLiveRequest.get('/api/live/info');
112
212
  ```
113
213
 
114
214
  ### request - 基础请求
115
215
 
116
- 基于 Axios 的基础请求函数。
216
+ **使用场景**: 调用第三方 API、简单的 HTTP 请求、不需要任何认证处理的场景。
117
217
 
118
218
  ```typescript
119
219
  import { request } from '@be-link/request';
@@ -127,7 +227,7 @@ const result = await request({
127
227
 
128
228
  ### callFunction - 云函数调用
129
229
 
130
- 封装腾讯云 CloudBase 云函数调用。
230
+ **使用场景**: 调用腾讯云 CloudBase 云函数。
131
231
 
132
232
  ```typescript
133
233
  import { callFunction } from '@be-link/request';
@@ -156,47 +256,49 @@ const result = await callFunction({
156
256
  });
157
257
  ```
158
258
 
159
- ### ConfigManager - 配置管理
259
+ ## 多服务配置
160
260
 
161
- 全局配置管理器(单例模式)。
261
+ 当页面需要调用多个不同域名的服务时,可以配置不同的 `tokenStorageKey` 避免冲突:
162
262
 
163
263
  ```typescript
164
- import { ConfigManager } from '@be-link/request';
264
+ import { BeLinkClient } from '@be-link/request';
165
265
 
166
- const configManager = ConfigManager.getInstance();
167
-
168
- // 初始化配置
169
- configManager.init({
266
+ // 服务 A
267
+ const serviceA = new BeLinkClient();
268
+ serviceA.init({
170
269
  mode: 'production',
171
- timeout: 10000,
172
- loginPath: '/login',
173
- encryption: {
174
- key: 'your-encryption-key',
175
- iv: 'your-encryption-iv',
176
- },
177
- timeSync: {
178
- enabled: true,
179
- developmentUrl: 'https://dev.example.com/time',
180
- productionUrl: 'https://api.example.com/time',
181
- },
182
- cloudbase: {
183
- development: 'dev-env-id',
184
- testing: 'test-env-id',
185
- production: 'prod-env-id',
186
- region: 'ap-shanghai',
187
- timeout: 60000,
188
- },
270
+ baseUrl: 'https://api-a.example.com',
271
+ tokenHeaderName: 'x-service-a-auth',
272
+ tokenStorageKey: 'service_a_token',
189
273
  });
190
274
 
191
- // 获取配置
192
- const mode = configManager.get('mode');
193
- const allConfig = configManager.getAll();
275
+ // 服务 B
276
+ const serviceB = new BeLinkClient();
277
+ serviceB.init({
278
+ mode: 'production',
279
+ baseUrl: 'https://api-b.example.com',
280
+ tokenHeaderName: 'x-service-b-auth',
281
+ tokenStorageKey: 'service_b_token',
282
+ });
194
283
 
195
- // 设置单个配置
196
- configManager.set('timeout', 15000);
284
+ // localStorage 结构:
285
+ // {
286
+ // "service_a_token": "token_for_service_a",
287
+ // "service_b_token": "token_for_service_b"
288
+ // }
197
289
  ```
198
290
 
199
- ## 请求配置
291
+ ## 初始化配置
292
+
293
+ ### init 配置项
294
+
295
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
296
+ | --------------- | -------------------------------------------- | :--: | -------------------------- | --------------------- |
297
+ | mode | `'development' \| 'testing' \| 'production'` | ✅ | - | 运行模式 |
298
+ | baseUrl | `string` | ❌ | - | API 基础地址 |
299
+ | loginPath | `string \| (() => void)` | ❌ | - | 401 时跳转路径或回调 |
300
+ | tokenHeaderName | `string` | ❌ | `'x-belink-authorization'` | Token 请求头名称 |
301
+ | tokenStorageKey | `string` | ❌ | `'token'` | localStorage 存储键名 |
200
302
 
201
303
  ### RequestConfig
202
304
 
@@ -260,10 +362,18 @@ beLinkRequest.addResponseInterceptor({
260
362
  removeInterceptor();
261
363
  ```
262
364
 
365
+ ### 内置拦截器(BeLinkClient)
366
+
367
+ | 拦截器 | 优先级 | 功能 |
368
+ | ---------------- | :----: | -------------------------- |
369
+ | TimeInterceptor | 1 | 时间同步,添加服务器时间头 |
370
+ | TokenInterceptor | 2 | Token 加密,添加认证头 |
371
+ | AuthInterceptor | 1 | 401 响应处理,跳转登录 |
372
+
263
373
  ## 错误处理
264
374
 
265
375
  ```typescript
266
- import { beLinkRequest, HttpError, AuthError, TimeoutError } from '@be-link/request';
376
+ import { beLinkRequest, HttpError, AuthError, TimeoutError, NetworkError } from '@be-link/request';
267
377
 
268
378
  try {
269
379
  const data = await beLinkRequest.get('/api/data');
@@ -273,6 +383,8 @@ try {
273
383
  console.log('认证失败');
274
384
  } else if (error instanceof TimeoutError) {
275
385
  console.log('请求超时');
386
+ } else if (error instanceof NetworkError) {
387
+ console.log('网络错误');
276
388
  } else if (error instanceof HttpError) {
277
389
  console.log('HTTP 错误:', error.status);
278
390
  }
@@ -314,6 +426,9 @@ export type { CloudFunctionOptions, CloudFunctionResponse, CloudFunctionData } f
314
426
  // 错误类
315
427
  export { BaseError, HttpError, AuthError, TimeoutError, ConfigError, NetworkError } from '@be-link/request';
316
428
 
429
+ // 客户端类
430
+ export { HttpClient, BeLinkClient, LiveClient } from '@be-link/request';
431
+
317
432
  // 工具函数
318
433
  export { isBrowser, isNode, detectEnvironment } from '@be-link/request';
319
434
  ```
@@ -321,32 +436,33 @@ export { isBrowser, isNode, detectEnvironment } from '@be-link/request';
321
436
  ## 完整示例
322
437
 
323
438
  ```typescript
324
- import { beLinkRequest, ConfigManager, HttpError, AuthError } from '@be-link/request';
439
+ import { beLinkRequest, beLinkLiveRequest, callFunction, HttpError, AuthError } from '@be-link/request';
325
440
 
326
- // 1. 初始化配置
327
- const configManager = ConfigManager.getInstance();
328
- configManager.init({
441
+ // 1. 初始化企业级客户端
442
+ beLinkRequest.init({
329
443
  mode: process.env.NODE_ENV === 'production' ? 'production' : 'development',
444
+ baseUrl: 'https://api.example.com',
330
445
  loginPath: () => {
331
446
  window.location.href = '/login';
332
447
  },
448
+ tokenStorageKey: 'app_token',
333
449
  });
334
450
 
335
- // 2. 初始化客户端
336
- beLinkRequest.init({
337
- mode: process.env.NODE_ENV === 'production' ? 'production' : 'development',
451
+ // 2. 初始化直播客户端
452
+ beLinkLiveRequest.init({
453
+ baseUrl: 'https://live-api.example.com',
338
454
  });
339
455
 
340
456
  // 3. 设置 Token(登录后)
341
- const token = localStorage.getItem('token');
457
+ const token = localStorage.getItem('app_token');
342
458
  if (token) {
343
459
  beLinkRequest.setToken(token);
344
460
  }
345
461
 
346
462
  // 4. 监听 Token 变化
347
- beLinkRequest.setupTokenListener('token');
463
+ beLinkRequest.setupTokenListener('app_token');
348
464
 
349
- // 5. 发起请求
465
+ // 5. 发起业务请求
350
466
  async function fetchUserInfo(userId: string) {
351
467
  try {
352
468
  const response = await beLinkRequest.get<{ name: string; age: number }>(`/api/users/${userId}`);
@@ -360,7 +476,13 @@ async function fetchUserInfo(userId: string) {
360
476
  }
361
477
  }
362
478
 
363
- // 6. 调用云函数
479
+ // 6. 发起直播请求
480
+ async function getLiveRoomInfo(roomId: string) {
481
+ const response = await beLinkLiveRequest.get(`/api/room/${roomId}`);
482
+ return response.data;
483
+ }
484
+
485
+ // 7. 调用云函数
364
486
  async function createOrder(productId: string) {
365
487
  const result = await callFunction({
366
488
  name: 'order-service',
@@ -1,25 +1,57 @@
1
1
  import { HttpClient } from './HttpClient';
2
- import { RequestConfig, IConfig } from '../../core/types/request.types';
3
- import { ApiResponse } from '../../core/types/response.types';
2
+ import { ApiResponse, RequestConfig, IConfig, TimeSyncConfig, EncryptionConfig } from '../../core/types';
4
3
  /**
5
- * BeLink 直播请求客户端
6
- * 简化版客户端,无认证逻辑
4
+ * LiveClient 业务请求客户端
5
+ * 提供完整的认证、加密、时间同步等企业级功能
7
6
  */
8
7
  export declare class LiveClient extends HttpClient {
8
+ private configManager;
9
+ private encryptionService;
10
+ private timeSyncService;
11
+ private token;
12
+ private userId;
13
+ private initialized;
14
+ private tokenListenerCleanup;
9
15
  private tokenHeaderName;
16
+ private tokenStorageKey;
10
17
  constructor();
11
18
  /**
12
19
  * 初始化客户端
13
20
  */
14
21
  init(config: {
22
+ mode: string;
15
23
  baseUrl?: string;
16
- /** Token 请求头名称(默认 'x-belink-authorization') */
17
24
  tokenHeaderName?: string;
25
+ tokenStorageKey?: string;
26
+ encryption: EncryptionConfig;
27
+ timeSyncConfig: TimeSyncConfig;
18
28
  }): void;
29
+ setUserId(userId: string): void;
19
30
  /**
20
- * 获取 Token 请求头名称
31
+ * 设置 Token
21
32
  */
22
- getTokenHeaderName(): string;
33
+ setToken(token: string): void;
34
+ /**
35
+ * 获取当前 Token
36
+ */
37
+ getToken(): string | null;
38
+ /**
39
+ * 设置 Token 监听器
40
+ * @returns 清理函数,用于移除监听器
41
+ */
42
+ setupTokenListener(tokenKey: string | (() => string)): () => void;
43
+ /**
44
+ * 清除请求时间
45
+ */
46
+ removeRequestTime(): Promise<void>;
47
+ /**
48
+ * 设置请求时间
49
+ */
50
+ setupRequestTime(config: IConfig): Promise<void>;
51
+ /**
52
+ * 设置默认拦截器
53
+ */
54
+ private setupDefaultInterceptors;
23
55
  /**
24
56
  * 重写请求方法(向后兼容旧版 API)
25
57
  */
@@ -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,aAAa,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAG9D;;;GAGG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC,OAAO,CAAC,eAAe,CAAwB;;IAM/C;;OAEG;IACI,IAAI,CAAC,MAAM,EAAE;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,+CAA+C;QAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,IAAI;IASR;;OAEG;IACI,kBAAkB,IAAI,MAAM;IAInC;;OAEG;IACU,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAQ5F"}
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"}
@@ -6,6 +6,7 @@ import { IEncryptionService } from '../../core/interfaces';
6
6
  export interface TokenInterceptorOptions {
7
7
  priority?: number;
8
8
  headerName?: string;
9
+ userId?: string | null;
9
10
  }
10
11
  /**
11
12
  * Token 拦截器
@@ -17,6 +18,7 @@ export declare class TokenInterceptor implements RequestInterceptor {
17
18
  private tokenProvider;
18
19
  private encryptionService;
19
20
  private headerName;
21
+ private userId;
20
22
  constructor(tokenProvider: () => string | null, encryptionService: IEncryptionService, options?: TokenInterceptorOptions);
21
23
  onRequest(context: RequestContext): Promise<RequestContext>;
22
24
  onRequestError(error: Error): Promise<never>;
@@ -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;CACrB;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;gBAGzB,aAAa,EAAE,MAAM,MAAM,GAAG,IAAI,EAClC,iBAAiB,EAAE,kBAAkB,EACrC,OAAO,CAAC,EAAE,uBAAuB;IAQtB,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAgB3D,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;IAiB3D,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;CAG1D"}
@@ -41,6 +41,10 @@ export declare const DEFAULT_TIMEOUT = 8000;
41
41
  * Token Header 名称
42
42
  */
43
43
  export declare const TOKEN_HEADER = "x-belink-authorization";
44
+ /**
45
+ * UserID Header 名称
46
+ */
47
+ export declare const USERID_HEADER = "x-belink-userid";
44
48
  /**
45
49
  * 时间同步 Header
46
50
  */
@@ -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,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;;;;CAIf,CAAC"}
@@ -4,13 +4,10 @@ import { ResponseContext } from './response.types';
4
4
  * 请求错误类型
5
5
  */
6
6
  export interface RequestError {
7
+ code?: string;
7
8
  message?: string;
8
9
  status?: number;
9
- response?: {
10
- status: number;
11
- data?: unknown;
12
- };
13
- code?: string;
10
+ data?: unknown;
14
11
  }
15
12
  /**
16
13
  * 请求拦截器接口
@@ -1 +1 @@
1
- {"version":3,"file":"interceptor.types.d.ts","sourceRoot":"","sources":["../../../src/core/types/interceptor.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,SAAS,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC;IACjF,aAAa;IACb,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,YAAY;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,aAAa;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,UAAU,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IACjG,aAAa;IACb,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;CACnE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB"}
1
+ {"version":3,"file":"interceptor.types.d.ts","sourceRoot":"","sources":["../../../src/core/types/interceptor.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,YAAY;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,SAAS,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC;IACjF,aAAa;IACb,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,YAAY;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,aAAa;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,UAAU,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IACjG,aAAa;IACb,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;CACnE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB"}