@zero-bits/taro-request 1.0.0

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.
Files changed (62) hide show
  1. package/README.md +291 -0
  2. package/es/index.d.ts +6 -0
  3. package/es/index.js +1 -0
  4. package/es/onion-request/core/compose.d.ts +7 -0
  5. package/es/onion-request/core/compose.js +1 -0
  6. package/es/onion-request/core/errors.d.ts +6 -0
  7. package/es/onion-request/core/errors.js +1 -0
  8. package/es/onion-request/core/request.d.ts +89 -0
  9. package/es/onion-request/core/request.js +1 -0
  10. package/es/onion-request/core/types.d.ts +97 -0
  11. package/es/onion-request/core/types.js +1 -0
  12. package/es/onion-request/createRequest.d.ts +20 -0
  13. package/es/onion-request/createRequest.js +1 -0
  14. package/es/onion-request/index.d.ts +4 -0
  15. package/es/onion-request/index.js +1 -0
  16. package/es/onion-request/middlewares/authMiddleware.d.ts +13 -0
  17. package/es/onion-request/middlewares/authMiddleware.js +1 -0
  18. package/es/onion-request/middlewares/bizMiddleware.d.ts +25 -0
  19. package/es/onion-request/middlewares/bizMiddleware.js +1 -0
  20. package/es/onion-request/middlewares/index.d.ts +3 -0
  21. package/es/onion-request/middlewares/index.js +1 -0
  22. package/es/onion-request/middlewares/logMiddleware.d.ts +7 -0
  23. package/es/onion-request/middlewares/logMiddleware.js +1 -0
  24. package/es/polyfill.d.ts +5 -0
  25. package/es/polyfill.js +1 -0
  26. package/es/request/adapter.d.ts +25 -0
  27. package/es/request/adapter.js +1 -0
  28. package/es/request/index.d.ts +31 -0
  29. package/es/request/index.js +1 -0
  30. package/es/request/util.d.ts +30 -0
  31. package/es/request/util.js +1 -0
  32. package/lib/index.d.ts +6 -0
  33. package/lib/index.js +1 -0
  34. package/lib/onion-request/core/compose.d.ts +7 -0
  35. package/lib/onion-request/core/compose.js +1 -0
  36. package/lib/onion-request/core/errors.d.ts +6 -0
  37. package/lib/onion-request/core/errors.js +1 -0
  38. package/lib/onion-request/core/request.d.ts +89 -0
  39. package/lib/onion-request/core/request.js +1 -0
  40. package/lib/onion-request/core/types.d.ts +97 -0
  41. package/lib/onion-request/core/types.js +1 -0
  42. package/lib/onion-request/createRequest.d.ts +20 -0
  43. package/lib/onion-request/createRequest.js +1 -0
  44. package/lib/onion-request/index.d.ts +4 -0
  45. package/lib/onion-request/index.js +1 -0
  46. package/lib/onion-request/middlewares/authMiddleware.d.ts +13 -0
  47. package/lib/onion-request/middlewares/authMiddleware.js +1 -0
  48. package/lib/onion-request/middlewares/bizMiddleware.d.ts +25 -0
  49. package/lib/onion-request/middlewares/bizMiddleware.js +1 -0
  50. package/lib/onion-request/middlewares/index.d.ts +3 -0
  51. package/lib/onion-request/middlewares/index.js +1 -0
  52. package/lib/onion-request/middlewares/logMiddleware.d.ts +7 -0
  53. package/lib/onion-request/middlewares/logMiddleware.js +1 -0
  54. package/lib/polyfill.d.ts +5 -0
  55. package/lib/polyfill.js +1 -0
  56. package/lib/request/adapter.d.ts +25 -0
  57. package/lib/request/adapter.js +1 -0
  58. package/lib/request/index.d.ts +31 -0
  59. package/lib/request/index.js +1 -0
  60. package/lib/request/util.d.ts +30 -0
  61. package/lib/request/util.js +1 -0
  62. package/package.json +24 -0
package/README.md ADDED
@@ -0,0 +1,291 @@
1
+ # @zero-bits/taro-request
2
+
3
+ 适用于 Taro 的请求库,提供两套方案:
4
+
5
+ - **OnionRequest** — 基于洋葱模型的原生请求方案,直接调用 `Taro.request`,内置 Token 注入、无感刷新、业务异常拦截等中间件,零外部依赖
6
+ - **request / initializeRequest** — 基于 `@zero-bits/request`(Axios)的方案,通过 `taroAdapter` 将 Axios 的请求转换为 `Taro.request`,适合已有 Axios 使用习惯的团队
7
+
8
+ ## 安装
9
+
10
+ ```bash
11
+ # npm
12
+ npm install @zero-bits/taro-request axios
13
+
14
+ # pnpm
15
+ pnpm add @zero-bits/taro-request axios
16
+ ```
17
+
18
+ > `@tarojs/taro`、`axios`、`react` 为 peerDependency,需在宿主项目中自行安装。
19
+
20
+ ## 快速上手
21
+
22
+ ### 方案一:OnionRequest(推荐)
23
+
24
+ ```ts
25
+ import { createRequest, setupTaroEnvironment } from '@zero-bits/taro-request'
26
+
27
+ // 小程序环境需要在入口执行一次,补齐缺失的原生对象(如 AbortController)
28
+ setupTaroEnvironment()
29
+
30
+ const http = createRequest({
31
+ baseURL: 'https://api.example.com',
32
+ timeout: 15000,
33
+ getAccessToken: () => getStoredToken(),
34
+ isSuccess: (data) => data.code === 0,
35
+ resolveData: (data) => data.result,
36
+ onBizError: (err) => showToast(err.msg),
37
+ onHttpError: (statusCode, err) => console.error(statusCode, err),
38
+ })
39
+
40
+ // GET
41
+ const user = await http.get<User>('/user/info')
42
+
43
+ // POST
44
+ const res = await http.post<LoginRes>('/auth/login', { username: 'admin', password: '123456' })
45
+
46
+ // 文件上传
47
+ const uploadRes = await http.upload('/file/upload', tempFilePath, { type: 'image' })
48
+ ```
49
+
50
+ ### 方案二:request / initializeRequest(Axios 方案)
51
+
52
+ ```ts
53
+ import { initializeRequest, request, taroAdapter, defaultTransformRequest } from '@zero-bits/taro-request'
54
+
55
+ initializeRequest({
56
+ baseURL: 'https://api.example.com',
57
+ timeout: 10000,
58
+ adapter: taroAdapter,
59
+ transformRequest: [defaultTransformRequest],
60
+ })
61
+
62
+ const user = await request.get<User>('/user/info')
63
+ ```
64
+
65
+ ---
66
+
67
+ ## OnionRequest
68
+
69
+ ### createRequest(config)
70
+
71
+ 工厂函数,创建一个内置中间件链的 `OnionRequest` 实例。
72
+
73
+ 内置中间件执行顺序:
74
+
75
+ ```
76
+ requestInterceptors(用户前置)
77
+ → logMiddleware(耗时日志)
78
+ → authMiddleware(Token 注入 + 无感刷新)
79
+ → bizMiddleware(HTTP 状态码 + 业务异常 + 数据提纯)
80
+ → responseInterceptors(用户后置)
81
+ → 真实网络请求 (Taro.request)
82
+ ```
83
+
84
+ #### RequestConfig
85
+
86
+ | 属性 | 类型 | 说明 |
87
+ |------|------|------|
88
+ | `baseURL` | `string` | 接口根地址前缀 |
89
+ | `header` | `Record<string, string>` | 全局请求头 |
90
+ | `timeout` | `number` | 超时时间(ms),默认 `15000` |
91
+ | `getAccessToken` | `() => string \| undefined` | 获取当前 Access Token |
92
+ | `authHeaderKey` | `string` | 鉴权请求头 Key,默认 `Authorization` |
93
+ | `formatAuthValue` | `(token: string) => string` | 格式化 Token 值,默认 `Bearer <token>` |
94
+ | `skipAuth` | `(req) => boolean` | 返回 `true` 时跳过 Token 注入 |
95
+ | `refreshToken` | 见下表 | 无感刷新配置 |
96
+ | `isSuccess` | `(data) => boolean` | 判断业务是否成功 |
97
+ | `resolveData` | `(data) => any` | 提取业务数据(成功时) |
98
+ | `onBizError` | `(err) => void` | 业务异常全局回调 |
99
+ | `onHttpError` | `(statusCode, err) => void` | HTTP 异常全局回调 |
100
+ | `requestInterceptors` | `Middleware[]` | 用户前置中间件 |
101
+ | `responseInterceptors` | `Middleware[]` | 用户后置中间件 |
102
+ | `middlewares` | `Middleware[]` | 额外注入的自定义中间件 |
103
+
104
+ #### refreshToken 配置
105
+
106
+ | 属性 | 类型 | 说明 |
107
+ |------|------|------|
108
+ | `url` | `string` | 刷新 Token 的接口地址(相对 baseURL) |
109
+ | `method` | `string` | 请求方法,默认 `POST` |
110
+ | `data` | `() => Record<string, any>` | 请求 Body 参数 |
111
+ | `params` | `() => Record<string, any>` | Query 参数 |
112
+ | `header` | `Record<string, string>` | 额外请求头 |
113
+ | `resolveToken` | `(res) => string \| undefined` | 从响应中解析新 Token |
114
+ | `onRefreshed` | `(res) => void \| Promise<void>` | 刷新成功回调(通常用于持久化新 Token) |
115
+ | `onRefreshFailed` | `(err) => void` | 刷新失败回调(通常用于跳转登录页) |
116
+
117
+ ### OnionRequest 实例方法
118
+
119
+ | 方法 | 说明 |
120
+ |------|------|
121
+ | `request<T>(options)` | 发起请求,返回 `AbortablePromise<T>` |
122
+ | `get<T>(url, data?, options?)` | GET 请求 |
123
+ | `post<T>(url, data?, options?)` | POST 请求 |
124
+ | `put<T>(url, data?, options?)` | PUT 请求 |
125
+ | `delete<T>(url, data?, options?)` | DELETE 请求 |
126
+ | `upload<T>(url, filePath, data?, options?)` | 文件上传(自动转换为 `multipart/form-data`) |
127
+ | `use(middleware)` | 手动注册中间件 |
128
+
129
+ 所有方法返回的 `AbortablePromise<T>` 都支持 `.abort()` 主动取消请求:
130
+
131
+ ```ts
132
+ const promise = http.get('/list')
133
+ promise.abort() // 立即取消
134
+ ```
135
+
136
+ ---
137
+
138
+ ## 自定义中间件
139
+
140
+ 中间件签名与 Koa 一致:
141
+
142
+ ```ts
143
+ import type { Middleware } from '@zero-bits/taro-request'
144
+
145
+ const timingMiddleware: Middleware = async (ctx, next) => {
146
+ const start = Date.now()
147
+ await next()
148
+ console.log(`耗时 ${Date.now() - start}ms`, ctx.req.url)
149
+ }
150
+
151
+ const http = createRequest({
152
+ baseURL: 'https://api.example.com',
153
+ requestInterceptors: [timingMiddleware],
154
+ })
155
+ ```
156
+
157
+ ### RequestContext
158
+
159
+ 中间件中可读写的上下文对象:
160
+
161
+ | 属性 | 类型 | 说明 |
162
+ |------|------|------|
163
+ | `req` | `Taro.request.Option` | 请求参数,可在中间件中修改 |
164
+ | `res` | `Taro.request.SuccessCallbackResult` | 响应结果,请求完成后可读 |
165
+ | `error` | `any` | 错误信息 |
166
+ | `state` | `Record<string, any>` | 中间件间共享的数据沙盒 |
167
+ | `state.task` | `Taro.RequestTask \| Taro.UploadTask` | 底层请求任务实例 |
168
+ | `state.abortSignal` | `boolean` | 是否已发出取消信号 |
169
+ | `request` | `(options) => Promise<any>` | 重新发起请求(用于 retry 场景) |
170
+
171
+ ---
172
+
173
+ ## taroAdapter(Axios 方案)
174
+
175
+ 将 Axios 请求桥接到 `Taro.request`,支持:
176
+
177
+ - 普通 JSON 请求
178
+ - `arraybuffer` 二进制响应
179
+ - 文件上传(`multipart/form-data`,payload 中需含 `filePath` 和 `name`)
180
+ - Axios 的 `cancelToken` 和 `signal` 取消机制
181
+
182
+ ```ts
183
+ import axios from 'axios'
184
+ import { taroAdapter, defaultTransformRequest } from '@zero-bits/taro-request'
185
+
186
+ const instance = axios.create({
187
+ baseURL: 'https://api.example.com',
188
+ adapter: taroAdapter,
189
+ transformRequest: [defaultTransformRequest],
190
+ })
191
+ ```
192
+
193
+ ### defaultTransformRequest
194
+
195
+ 替代 Axios 默认的序列化逻辑,兼容小程序环境:
196
+
197
+ - 普通对象 / 数组 → `JSON.stringify`(自动设置 `Content-Type: application/json`)
198
+ - `application/x-www-form-urlencoded` → 原样透传(由小程序底层处理)
199
+ - `FormData` / `ArrayBuffer` / `Blob` / `File` → 原样透传,不做序列化
200
+
201
+ ---
202
+
203
+ ## setupTaroEnvironment
204
+
205
+ 在小程序入口(`app.ts`)调用一次,补齐缺失的 `AbortController` 全局对象,防止部分上游库在小程序环境报错。
206
+
207
+ ```ts
208
+ import { setupTaroEnvironment } from '@zero-bits/taro-request'
209
+
210
+ setupTaroEnvironment()
211
+ ```
212
+
213
+ ---
214
+
215
+ ## 错误处理
216
+
217
+ ### AbortError
218
+
219
+ 主动调用 `.abort()` 时抛出,可用于区分业务错误与用户取消:
220
+
221
+ ```ts
222
+ import { AbortError } from '@zero-bits/taro-request'
223
+
224
+ try {
225
+ await http.get('/list')
226
+ } catch (err) {
227
+ if (err instanceof AbortError) {
228
+ console.log('请求已取消')
229
+ } else {
230
+ console.error('请求失败', err)
231
+ }
232
+ }
233
+ ```
234
+
235
+ ### 错误类型说明
236
+
237
+ | 错误 | 标志 | 说明 |
238
+ |------|------|------|
239
+ | HTTP 错误 | `err.isHttpError === true` | 状态码 < 200 或 ≥ 300 |
240
+ | 业务错误 | `err.isBizError === true` | `isSuccess` 返回 `false` |
241
+ | 取消错误 | `err instanceof AbortError` | 主动调用 `.abort()` |
242
+
243
+ ---
244
+
245
+ ## 无感刷新完整示例
246
+
247
+ ```ts
248
+ import { createRequest, setupTaroEnvironment } from '@zero-bits/taro-request'
249
+ import Taro from '@tarojs/taro'
250
+
251
+ setupTaroEnvironment()
252
+
253
+ const http = createRequest({
254
+ baseURL: 'https://api.example.com',
255
+ timeout: 15000,
256
+ getAccessToken: () => Taro.getStorageSync('accessToken'),
257
+ isSuccess: (data) => data.code === 0,
258
+ resolveData: (data) => data.data,
259
+ onBizError: (err) => Taro.showToast({ title: err.msg || '请求失败', icon: 'none' }),
260
+ refreshToken: {
261
+ url: '/auth/refresh',
262
+ method: 'POST',
263
+ data: () => ({ refreshToken: Taro.getStorageSync('refreshToken') }),
264
+ resolveToken: (res) => res.data?.accessToken,
265
+ onRefreshed: (res) => {
266
+ Taro.setStorageSync('accessToken', res.data.accessToken)
267
+ Taro.setStorageSync('refreshToken', res.data.refreshToken)
268
+ },
269
+ onRefreshFailed: () => {
270
+ Taro.clearStorageSync()
271
+ Taro.reLaunch({ url: '/pages/login/index' })
272
+ },
273
+ },
274
+ })
275
+
276
+ export default http
277
+ ```
278
+
279
+ ---
280
+
281
+ ## 依赖版本
282
+
283
+ | 依赖 | 版本要求 |
284
+ |------|----------|
285
+ | `react` | `>=18.0.0` |
286
+ | `@tarojs/taro` | `>=4.2.1` |
287
+ | `axios` | `>=1.19.0` |
288
+
289
+ ## License
290
+
291
+ MIT
package/es/index.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export { OnionRequest } from './onion-request/core/request';
2
+ export { AbortError } from './onion-request/core/errors';
3
+ export { createRequest } from './onion-request/createRequest';
4
+ export { taroAdapter, defaultTransformRequest } from './request/adapter';
5
+ export { request, initializeRequest } from './request';
6
+ export { setupTaroEnvironment } from './polyfill';
package/es/index.js ADDED
@@ -0,0 +1 @@
1
+ (function(_0xddf5b0,_0x5123b3){var _0x2295c9=a0_0x3207,_0x536ff8=_0xddf5b0();while(!![]){try{var _0x523fa2=-parseInt(_0x2295c9(0x176))/0x1+parseInt(_0x2295c9(0x17a))/0x2+parseInt(_0x2295c9(0x178))/0x3+parseInt(_0x2295c9(0x17b))/0x4+-parseInt(_0x2295c9(0x17c))/0x5+parseInt(_0x2295c9(0x179))/0x6+parseInt(_0x2295c9(0x177))/0x7*(-parseInt(_0x2295c9(0x175))/0x8);if(_0x523fa2===_0x5123b3)break;else _0x536ff8['push'](_0x536ff8['shift']());}catch(_0x1880b8){_0x536ff8['push'](_0x536ff8['shift']());}}}(a0_0x2051,0xbce5d));export{OnionRequest}from'./onion-request/core/request';function a0_0x3207(_0xa1ea3,_0x4bf9c2){_0xa1ea3=_0xa1ea3-0x175;var _0x2051c8=a0_0x2051();var _0x320746=_0x2051c8[_0xa1ea3];if(a0_0x3207['RoQVlq']===undefined){var _0x1da1e0=function(_0x3459f2){var _0x4acb25='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x476493='',_0x166925='';for(var _0x3f1710=0x0,_0x53c0ec,_0x3087e6,_0x151789=0x0;_0x3087e6=_0x3459f2['charAt'](_0x151789++);~_0x3087e6&&(_0x53c0ec=_0x3f1710%0x4?_0x53c0ec*0x40+_0x3087e6:_0x3087e6,_0x3f1710++%0x4)?_0x476493+=String['fromCharCode'](0xff&_0x53c0ec>>(-0x2*_0x3f1710&0x6)):0x0){_0x3087e6=_0x4acb25['indexOf'](_0x3087e6);}for(var _0x5b39e0=0x0,_0x269067=_0x476493['length'];_0x5b39e0<_0x269067;_0x5b39e0++){_0x166925+='%'+('00'+_0x476493['charCodeAt'](_0x5b39e0)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x166925);};a0_0x3207['mkGWUd']=_0x1da1e0,a0_0x3207['diJEBo']={},a0_0x3207['RoQVlq']=!![];}var _0x80da91=_0x2051c8[0x0],_0x3971b0=_0xa1ea3+_0x80da91,_0x12e91d=a0_0x3207['diJEBo'][_0x3971b0];return!_0x12e91d?(_0x320746=a0_0x3207['mkGWUd'](_0x320746),a0_0x3207['diJEBo'][_0x3971b0]=_0x320746):_0x320746=_0x12e91d,_0x320746;}function a0_0x2051(){var _0x43dda0=['otK5nZm4vKPwwLLJ','mta5mZyWuwDZD2Lc','ndmXnJa0mgroEuniBG','mtGWmJu2Au9TEuDS','odiWnda2rvPxELLU','mJaZzwzAtxDV','mZuXmtu1mw1hwxrmyq','odq3odi0nNfez2vbrW'];a0_0x2051=function(){return _0x43dda0;};return a0_0x2051();}export{AbortError}from'./onion-request/core/errors';export{createRequest}from'./onion-request/createRequest';export{taroAdapter,defaultTransformRequest}from'./request/adapter';export{request,initializeRequest}from'./request';export{setupTaroEnvironment}from'./polyfill';
@@ -0,0 +1,7 @@
1
+ import { Middleware, Next, RequestContext } from './types';
2
+ /**
3
+ * 洋葱模型调度器核心算法
4
+ * @param middlewares 洋葱模型中间件数组
5
+ * @returns Middleware 洋葱模型的中间件
6
+ */
7
+ export declare function compose(middlewares: Middleware[]): (context: RequestContext, next?: Next) => Promise<void>;
@@ -0,0 +1 @@
1
+ function a1_0x30b7(_0x4a3c5b,_0x189172){_0x4a3c5b=_0x4a3c5b-0x85;const _0x48c72f=a1_0x48c7();let _0x30b74b=_0x48c72f[_0x4a3c5b];if(a1_0x30b7['bSYqtQ']===undefined){var _0x519ec0=function(_0xc1272b){const _0x379f8a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5ef8a4='',_0x5a51c4='';for(let _0xe48bf=0x0,_0x58cd0e,_0xf2adcb,_0x3fe7ab=0x0;_0xf2adcb=_0xc1272b['charAt'](_0x3fe7ab++);~_0xf2adcb&&(_0x58cd0e=_0xe48bf%0x4?_0x58cd0e*0x40+_0xf2adcb:_0xf2adcb,_0xe48bf++%0x4)?_0x5ef8a4+=String['fromCharCode'](0xff&_0x58cd0e>>(-0x2*_0xe48bf&0x6)):0x0){_0xf2adcb=_0x379f8a['indexOf'](_0xf2adcb);}for(let _0x1ac456=0x0,_0x10ec67=_0x5ef8a4['length'];_0x1ac456<_0x10ec67;_0x1ac456++){_0x5a51c4+='%'+('00'+_0x5ef8a4['charCodeAt'](_0x1ac456)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5a51c4);};a1_0x30b7['RmfAbg']=_0x519ec0,a1_0x30b7['jenkvo']={},a1_0x30b7['bSYqtQ']=!![];}const _0x29d0a4=_0x48c72f[0x0],_0x1d7427=_0x4a3c5b+_0x29d0a4,_0x38406b=a1_0x30b7['jenkvo'][_0x1d7427];return!_0x38406b?(_0x30b74b=a1_0x30b7['RmfAbg'](_0x30b74b),a1_0x30b7['jenkvo'][_0x1d7427]=_0x30b74b):_0x30b74b=_0x38406b,_0x30b74b;}(function(_0x6504e,_0x5569f5){const _0x4512cd=a1_0x30b7,_0x4a0dfa=_0x6504e();while(!![]){try{const _0x364e0d=parseInt(_0x4512cd(0x95))/0x1+parseInt(_0x4512cd(0x85))/0x2*(-parseInt(_0x4512cd(0x93))/0x3)+-parseInt(_0x4512cd(0x90))/0x4*(-parseInt(_0x4512cd(0x87))/0x5)+parseInt(_0x4512cd(0x96))/0x6+parseInt(_0x4512cd(0x86))/0x7*(parseInt(_0x4512cd(0x8f))/0x8)+parseInt(_0x4512cd(0x88))/0x9+parseInt(_0x4512cd(0x8d))/0xa*(-parseInt(_0x4512cd(0x91))/0xb);if(_0x364e0d===_0x5569f5)break;else _0x4a0dfa['push'](_0x4a0dfa['shift']());}catch(_0x4de342){_0x4a0dfa['push'](_0x4a0dfa['shift']());}}}(a1_0x48c7,0x90dd0));function a1_0x48c7(){const _0x59de59=['ndKWodmXEKfqrMno','CMvZB2X2zq','oxntBNvbCW','yMLUza','mZyWndG5tKj0rhvU','mZy5mtK3ng53wuP5sa','v3fdzNm','BgvUz3rO','ndm3ote4q3jMA2jt','mZq0nZvHtwjtEMK','nde3nJv2Bxnkwwy','mtaXndy3odbMEeHstMS','CMvQzwn0','DfnnyvO','sKjVvw4','BMv4DcGPignHBgXLzcbTDwX0AxbSzsb0Aw1LCW','ntmWBNb2zNjV','qwfPwLa','mtm4nfjLvLjeDa','mZe2qxrpsvjv'];a1_0x48c7=function(){return _0x59de59;};return a1_0x48c7();}export function compose(_0x2a0947){const _0x4afbb2=a1_0x30b7,_0x3c96d6={'bgMsR':function(_0xbd389d,_0x2c1440){return _0xbd389d<=_0x2c1440;},'WqCfs':_0x4afbb2(0x8c),'JBoUn':function(_0x3923f3,_0x1d0ebd){return _0x3923f3===_0x1d0ebd;},'AaiZP':function(_0x4b1dc1,_0x499e8d,_0x36245c){return _0x4b1dc1(_0x499e8d,_0x36245c);},'tSMaZ':function(_0x4880af,_0x142c59){return _0x4880af+_0x142c59;},'XZMdM':function(_0x249f4c,_0x7c4d78){return _0x249f4c(_0x7c4d78);}};return function(_0x44926c,_0x2475c4){let _0x97598a=-0x1;function _0x2e2525(_0x744344){const _0x5b7a37=a1_0x30b7;if(_0x3c96d6['bgMsR'](_0x744344,_0x97598a))return Promise[_0x5b7a37(0x89)](new Error(_0x3c96d6[_0x5b7a37(0x97)]));_0x97598a=_0x744344;let _0x810a2b=_0x2a0947[_0x744344];if(_0x3c96d6[_0x5b7a37(0x8b)](_0x744344,_0x2a0947[_0x5b7a37(0x98)]))_0x810a2b=_0x2475c4;if(!_0x810a2b)return Promise[_0x5b7a37(0x92)]();try{return Promise[_0x5b7a37(0x92)](_0x3c96d6[_0x5b7a37(0x8e)](_0x810a2b,_0x44926c,_0x2e2525[_0x5b7a37(0x94)](null,_0x3c96d6[_0x5b7a37(0x8a)](_0x744344,0x1))));}catch(_0x31dd00){return Promise['reject'](_0x31dd00);}}return _0x3c96d6['XZMdM'](_0x2e2525,0x0);};}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 中止错误类,用于区分业务错误与主动取消
3
+ */
4
+ export declare class AbortError extends Error {
5
+ constructor(message?: string);
6
+ }
@@ -0,0 +1 @@
1
+ var a2_0x44ce66=a2_0x482b;(function(_0x346c7c,_0x49b083){var _0xdc790b=a2_0x482b,_0x2d96fb=_0x346c7c();while(!![]){try{var _0x5a250b=-parseInt(_0xdc790b(0x6c))/0x1*(parseInt(_0xdc790b(0x77))/0x2)+parseInt(_0xdc790b(0x76))/0x3*(-parseInt(_0xdc790b(0x7a))/0x4)+-parseInt(_0xdc790b(0x6d))/0x5*(parseInt(_0xdc790b(0x6f))/0x6)+parseInt(_0xdc790b(0x6e))/0x7+parseInt(_0xdc790b(0x70))/0x8*(parseInt(_0xdc790b(0x78))/0x9)+parseInt(_0xdc790b(0x71))/0xa*(parseInt(_0xdc790b(0x7b))/0xb)+parseInt(_0xdc790b(0x72))/0xc*(-parseInt(_0xdc790b(0x73))/0xd);if(_0x5a250b===_0x49b083)break;else _0x2d96fb['push'](_0x2d96fb['shift']());}catch(_0x1790d7){_0x2d96fb['push'](_0x2d96fb['shift']());}}}(a2_0x364b,0xf3d73));function a2_0x364b(){var _0x580bfa=['nZaXody3nLHpqLbjqq','mtC0z1z5BwHm','ohzSy2nUtG','mtu0mZK3otbPt250Cg0','mtu2t21tuKHu','mte3mtKZn2TVuuvWra','qwjVCNrfCNjVCG','BMfTzq','mJeYmZiYowvrq0jerq','mNHKCNPVtG','mteWotC2otnMCu5SsNe','uMvXDwvZDcbHyM9YDgvK','ne95uMvjCG','mtfnB0fpBKm','nJeWmJDNqKLhCNi','mtq0odCWtNHRwuXR'];a2_0x364b=function(){return _0x580bfa;};return a2_0x364b();}function a2_0x482b(_0x1a0420,_0x5fe5fa){_0x1a0420=_0x1a0420-0x6c;var _0x364b04=a2_0x364b();var _0x482b8e=_0x364b04[_0x1a0420];if(a2_0x482b['JstUEK']===undefined){var _0x2ccff9=function(_0x494017){var _0x3d0683='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x482776='',_0x12d106='';for(var _0x3d05c1=0x0,_0x6d36b2,_0x54db53,_0x4f9fe8=0x0;_0x54db53=_0x494017['charAt'](_0x4f9fe8++);~_0x54db53&&(_0x6d36b2=_0x3d05c1%0x4?_0x6d36b2*0x40+_0x54db53:_0x54db53,_0x3d05c1++%0x4)?_0x482776+=String['fromCharCode'](0xff&_0x6d36b2>>(-0x2*_0x3d05c1&0x6)):0x0){_0x54db53=_0x3d0683['indexOf'](_0x54db53);}for(var _0x45905e=0x0,_0x18b0b2=_0x482776['length'];_0x45905e<_0x18b0b2;_0x45905e++){_0x12d106+='%'+('00'+_0x482776['charCodeAt'](_0x45905e)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x12d106);};a2_0x482b['IMFivp']=_0x2ccff9,a2_0x482b['xSIRmf']={},a2_0x482b['JstUEK']=!![];}var _0x28a16e=_0x364b04[0x0],_0x4a300b=_0x1a0420+_0x28a16e,_0x33dfe7=a2_0x482b['xSIRmf'][_0x4a300b];return!_0x33dfe7?(_0x482b8e=a2_0x482b['IMFivp'](_0x482b8e),a2_0x482b['xSIRmf'][_0x4a300b]=_0x482b8e):_0x482b8e=_0x33dfe7,_0x482b8e;}export class AbortError extends Error{constructor(_0x5dba94=a2_0x44ce66(0x79)){var _0x3089a0=a2_0x44ce66;super(_0x5dba94),this[_0x3089a0(0x75)]=_0x3089a0(0x74);}}
@@ -0,0 +1,89 @@
1
+ import Taro from '@tarojs/taro';
2
+ import { Middleware, RequestConfig, AbortablePromise } from './types';
3
+ /**
4
+ * 洋葱模型请求类
5
+ * @property {Middleware[]} middlewares - 中间件数组
6
+ * @property {RequestConfig} config - 请求配置
7
+ * - config.baseURL - 接口根地址前缀
8
+ * - config.timeout - 请求超时时间,默认15000ms
9
+ * - config.authHeaderKey - 鉴权请求头的key,默认'Authorization'
10
+ * - config.formatAuthValue - 格式化鉴权请求头的值
11
+ * - config.getAccessToken - 获取鉴权token的函数
12
+ * - config.skipAuth - 跳过鉴权中间件的函数
13
+ * - config.isSuccess - 判断业务是否成功的函数
14
+ * - config.resolveData - 解析业务数据的函数
15
+ * - config.onBizError - 业务错误处理函数
16
+ * - config.onHttpError - HTTP 错误处理函数
17
+ * - config.refreshToken - 刷新令牌配置
18
+ * - url - 刷新令牌的 URL
19
+ * - getStoredRefreshToken - 获取存储的刷新令牌
20
+ * - resolveAccessToken - 解析访问令牌
21
+ * - onRefreshed - 刷新令牌后的回调
22
+ * - onRefreshFailed - 刷新令牌失败的回调
23
+ * - config.requestInterceptors - 请求拦截器
24
+ * - config.responseInterceptors - 响应拦截器
25
+ */
26
+ export declare class OnionRequest {
27
+ private middlewares;
28
+ private config;
29
+ /**
30
+ * 初始化
31
+ * @param config 请求配置
32
+ */
33
+ constructor(config: RequestConfig);
34
+ /**
35
+ * 注册中间件
36
+ * @param middleware 中间件
37
+ * @returns OnionRequest实例
38
+ */
39
+ use(middleware: Middleware): OnionRequest;
40
+ /**
41
+ * 发起请求
42
+ * @param options 请求配置
43
+ * @returns AbortablePromise实例
44
+ */
45
+ request<T = any>(options: Taro.request.Option): AbortablePromise<T>;
46
+ /**
47
+ * GET 方法
48
+ * @param url 请求地址
49
+ * @param data 请求参数
50
+ * @param options 请求配置
51
+ * @returns Promise
52
+ */
53
+ get<T = any>(url: string, data?: any, options?: Partial<Taro.request.Option>): AbortablePromise<T>;
54
+ /**
55
+ * POST 方法
56
+ * @param url 请求地址
57
+ * @param data 请求参数
58
+ * @param options 请求配置
59
+ * @returns Promise
60
+ */
61
+ post<T = any>(url: string, data?: any, options?: Partial<Taro.request.Option>): AbortablePromise<T>;
62
+ /**
63
+ * PUT 方法
64
+ * @param url 请求地址
65
+ * @param data 请求参数
66
+ * @param options 请求配置
67
+ * @returns Promise
68
+ */
69
+ put<T = any>(url: string, data?: any, options?: Partial<Taro.request.Option>): AbortablePromise<T>;
70
+ /**
71
+ * DELETE 方法
72
+ * @param url 请求地址
73
+ * @param data 请求参数
74
+ * @param options 请求配置
75
+ * @returns Promise
76
+ */
77
+ delete<T = any>(url: string, data?: any, options?: Partial<Taro.request.Option>): AbortablePromise<T>;
78
+ /**
79
+ * 文件上传方法 (自动识别并打上 multipart/form-data 标记)
80
+ * @param url 请求地址
81
+ * @param filePath 本地文件路径
82
+ * @param data 额外的表单数据 (formData)
83
+ * @param options 其他请求配置 (可在此处指定 name,默认为 'file')
84
+ * @returns AbortablePromise实例
85
+ */
86
+ upload<T = any>(url: string, filePath: string, data?: any, options?: Partial<Taro.request.Option> & {
87
+ name?: string;
88
+ }): AbortablePromise<T>;
89
+ }
@@ -0,0 +1 @@
1
+ const a3_0x1d1ace=a3_0xa1e5;(function(_0x2ad531,_0x123b8e){const _0x382265=a3_0xa1e5,_0x5027b2=_0x2ad531();while(!![]){try{const _0x233d99=parseInt(_0x382265(0x198))/0x1+-parseInt(_0x382265(0x179))/0x2+parseInt(_0x382265(0x160))/0x3*(parseInt(_0x382265(0x1a3))/0x4)+-parseInt(_0x382265(0x1ad))/0x5+parseInt(_0x382265(0x166))/0x6*(parseInt(_0x382265(0x175))/0x7)+-parseInt(_0x382265(0x188))/0x8*(-parseInt(_0x382265(0x1a0))/0x9)+-parseInt(_0x382265(0x1c0))/0xa*(-parseInt(_0x382265(0x19a))/0xb);if(_0x233d99===_0x123b8e)break;else _0x5027b2['push'](_0x5027b2['shift']());}catch(_0x3c1cf3){_0x5027b2['push'](_0x5027b2['shift']());}}}(a3_0x3a34,0x1feef));var __awaiter=this&&this[a3_0x1d1ace(0x19f)]||function(_0x35985f,_0x5a4af3,_0xc127ac,_0x367181){const _0x2a7e25={'NdsQF':function(_0x71ceca,_0x42aeef){return _0x71ceca(_0x42aeef);},'vEgQi':function(_0x1695b9,_0x5ccc8c){return _0x1695b9 instanceof _0x5ccc8c;},'Lcwgg':'throw'};function _0x571566(_0x58032f){const _0x373d54=a3_0xa1e5,_0x32148e={'hUWze':function(_0x1b0010,_0x284fc4){const _0x13a041=a3_0xa1e5;return _0x2a7e25[_0x13a041(0x1bf)](_0x1b0010,_0x284fc4);}};return _0x2a7e25[_0x373d54(0x1b2)](_0x58032f,_0xc127ac)?_0x58032f:new _0xc127ac(function(_0x2b2dce){const _0x8946e2=_0x373d54;_0x32148e[_0x8946e2(0x173)](_0x2b2dce,_0x58032f);});}return new(_0xc127ac||(_0xc127ac=Promise))(function(_0x49fbcd,_0x37dcee){const _0x14877f=a3_0xa1e5,_0x2dec82={'PpJVR':function(_0x561223,_0x4d0022){const _0x98d55d=a3_0xa1e5;return _0x2a7e25[_0x98d55d(0x1bf)](_0x561223,_0x4d0022);},'GbxKc':function(_0x4ea930,_0x4b96f8){return _0x4ea930(_0x4b96f8);},'xChHs':_0x2a7e25['Lcwgg']};function _0x3ff4b6(_0x17758d){const _0x502e49=a3_0xa1e5;try{_0x4421f6(_0x367181[_0x502e49(0x1b8)](_0x17758d));}catch(_0x4cb64a){_0x2dec82[_0x502e49(0x17a)](_0x37dcee,_0x4cb64a);}}function _0x2db238(_0x424de7){const _0x4854af=a3_0xa1e5;try{_0x2dec82[_0x4854af(0x197)](_0x4421f6,_0x367181[_0x2dec82[_0x4854af(0x1ae)]](_0x424de7));}catch(_0x4a11c3){_0x2dec82[_0x4854af(0x197)](_0x37dcee,_0x4a11c3);}}function _0x4421f6(_0x336309){const _0x1dd54d=a3_0xa1e5;_0x336309['done']?_0x2a7e25[_0x1dd54d(0x1bf)](_0x49fbcd,_0x336309[_0x1dd54d(0x15e)]):_0x2a7e25[_0x1dd54d(0x1bf)](_0x571566,_0x336309['value'])[_0x1dd54d(0x195)](_0x3ff4b6,_0x2db238);}_0x4421f6((_0x367181=_0x367181[_0x14877f(0x170)](_0x35985f,_0x5a4af3||[]))['next']());});},__rest=this&&this[a3_0x1d1ace(0x1a7)]||function(_0x1e1010,_0x45d3ec){const _0x744845=a3_0x1d1ace,_0x3b53b9={};_0x3b53b9[_0x744845(0x192)]=function(_0x277b83,_0x33f2a1){return _0x277b83<_0x33f2a1;},_0x3b53b9['QxsDD']=function(_0x25bd78,_0x232145){return _0x25bd78!=_0x232145;},_0x3b53b9['kdSjf']=function(_0x1aafaa,_0x1c240f){return _0x1aafaa===_0x1c240f;},_0x3b53b9[_0x744845(0x18f)]=_0x744845(0x19d),_0x3b53b9['jChMY']=function(_0x3753aa,_0x189b60){return _0x3753aa<_0x189b60;};const _0x545d14=_0x3b53b9;var _0x43e8a9={};for(var _0xf5c1a5 in _0x1e1010)if(Object['prototype'][_0x744845(0x183)][_0x744845(0x1b5)](_0x1e1010,_0xf5c1a5)&&_0x545d14[_0x744845(0x192)](_0x45d3ec['indexOf'](_0xf5c1a5),0x0))_0x43e8a9[_0xf5c1a5]=_0x1e1010[_0xf5c1a5];if(_0x545d14[_0x744845(0x1a5)](_0x1e1010,null)&&_0x545d14['kdSjf'](typeof Object[_0x744845(0x168)],_0x545d14[_0x744845(0x18f)]))for(var _0x107ec4=0x0,_0xf5c1a5=Object['getOwnPropertySymbols'](_0x1e1010);_0x545d14[_0x744845(0x192)](_0x107ec4,_0xf5c1a5[_0x744845(0x1a2)]);_0x107ec4++){if(_0x545d14['jChMY'](_0x45d3ec['indexOf'](_0xf5c1a5[_0x107ec4]),0x0)&&Object[_0x744845(0x167)]['propertyIsEnumerable'][_0x744845(0x1b5)](_0x1e1010,_0xf5c1a5[_0x107ec4]))_0x43e8a9[_0xf5c1a5[_0x107ec4]]=_0x1e1010[_0xf5c1a5[_0x107ec4]];}return _0x43e8a9;};import a3_0x516678 from'@tarojs/taro';import{AbortError}from'./errors';function a3_0x3a34(){const _0x5bb246=['y29UzMLN','AgfZt3DUuhjVCgvYDhK','ChvZAa','CMvZCg9UC2u','zgf0yq','z2v0','mZjHrvPgvxK','BMfTzq','tMj3A1G','tK5bCem','AxncAxPfCNjVCG','AgvHzgvY','tun6Beq','tg9zCvu','C3rHCNrZv2L0Aa','Bu9zD00','uwjit1i','yxLNu2K','B25cAxPfCNjVCG','DgHLBG','Bwv0Ag9K','r2j4s2m','mZC5ndz5wurmEge','zMLSzvbHDgG','mZCZntCXs2TwuNLU','zKzLshm','C3vJy2vZCW','zNvUy3rPB24','DxbSB2fK','x19HD2fPDgvY','ntmXmhnQA0Llza','DeP0tfO','BgvUz3rO','mJmXnJrWEMH6rfO','y29UDgvUDc10ExbL','uxHZreq','s2Pss0e','x19Yzxn0','y2f0y2G','D09ky1G','C3r3sMe','Avf0A1y','yMfZzvvsta','mte4nZuWnuD0BxjTua','EenOshm','DxjS','x19PC1jLDhj5','CMvX','DKvNuwK','zgvSzxrL','zw5SuwO','y2fSBa','C3rHDhvZq29Kzq','CMvWBgfJzq','BMv4Da','zuHdwNi','Aw5JBhvKzxm','CNnNs0q','zMLSzq','vffPCwi','zxjYB3i','tMrZuuy','mJbfEM5Hzg8','ywjVCNq','q2TYv3i','CLvwwwu','ufvu','ALDxr2O','DgfZAW','rKrtq3m','DMfSDwu','AxniDhrWrxjYB3i','otzUqxbIyNa','yxnZAwDU','AhLSq3a','C3rHDgu','r0vu','teTXDum','nZHmDMjSzMq','ChjVDg90ExbL','z2v0t3DUuhjVCgvYDhLtEw1IB2XZ','DgLTzw91Da','q29UDgvUDc1uExbL','BxvSDgLWyxj0l2zVCM0Tzgf0yq','revmrvrf','Chv0','BwLKzgXLD2fYzxm','qwjVCNrfCNjVCG','yxbWBhK','CMvZ','B2vzt1u','AfvxEMu','B25iDhrWrxjYB3i','mtm4ntuXsNbkB0Hr','ue9tva','DxbSB2fKrMLSzq','uerrv0C','mZy1mdK4DK5pDMHo','uhbkvLi','ENbiD3u','ywjVCNrtAwDUywW','zxjYtxnN','vw1iBKW','zMfPBa','Cg9ZDa','CMvXDwvZDa'];a3_0x3a34=function(){return _0x5bb246;};return a3_0x3a34();}function a3_0xa1e5(_0x2d9f09,_0x449b64){_0x2d9f09=_0x2d9f09-0x15e;const _0x3a3400=a3_0x3a34();let _0xa1e5e7=_0x3a3400[_0x2d9f09];if(a3_0xa1e5['gvVpdc']===undefined){var _0x2f5afc=function(_0x4a9070){const _0x1b3bfd='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x575c54='',_0x27a308='';for(let _0x300f95=0x0,_0x2955a4,_0x518d3b,_0x338e87=0x0;_0x518d3b=_0x4a9070['charAt'](_0x338e87++);~_0x518d3b&&(_0x2955a4=_0x300f95%0x4?_0x2955a4*0x40+_0x518d3b:_0x518d3b,_0x300f95++%0x4)?_0x575c54+=String['fromCharCode'](0xff&_0x2955a4>>(-0x2*_0x300f95&0x6)):0x0){_0x518d3b=_0x1b3bfd['indexOf'](_0x518d3b);}for(let _0x4fd696=0x0,_0x47e208=_0x575c54['length'];_0x4fd696<_0x47e208;_0x4fd696++){_0x27a308+='%'+('00'+_0x575c54['charCodeAt'](_0x4fd696)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x27a308);};a3_0xa1e5['IiNssx']=_0x2f5afc,a3_0xa1e5['QLIZug']={},a3_0xa1e5['gvVpdc']=!![];}const _0x782865=_0x3a3400[0x0],_0x1a9cc8=_0x2d9f09+_0x782865,_0xeb0ca1=a3_0xa1e5['QLIZug'][_0x1a9cc8];return!_0xeb0ca1?(_0xa1e5e7=a3_0xa1e5['IiNssx'](_0xa1e5e7),a3_0xa1e5['QLIZug'][_0x1a9cc8]=_0xa1e5e7):_0xa1e5e7=_0xeb0ca1,_0xa1e5e7;}import{compose}from'./compose';export class OnionRequest{constructor(_0x39874a){const _0x46d034=a3_0x1d1ace;this[_0x46d034(0x16e)]=[],this[_0x46d034(0x182)]=_0x39874a;if(_0x39874a[_0x46d034(0x16e)]&&_0x39874a[_0x46d034(0x16e)]['length']>0x0)this[_0x46d034(0x16e)][_0x46d034(0x184)](..._0x39874a[_0x46d034(0x16e)]);}['use'](_0x32846c){const _0x4edcf3=a3_0x1d1ace;return this[_0x4edcf3(0x16e)][_0x4edcf3(0x184)](_0x32846c),this;}[a3_0x1d1ace(0x181)](_0x36ad1b){const _0x53dd72=a3_0x1d1ace,_0x2e1ad9={'rUVYe':function(_0x3fccc8,_0x5825ef){return _0x3fccc8===_0x5825ef;},'BnhhC':function(_0x3261c9,_0x262c14){return _0x3261c9===_0x262c14;},'NbwkX':function(_0x13ee28,_0x579c4a){return _0x13ee28===_0x579c4a;},'rsgKD':function(_0x28737d,_0x4ef497){return _0x28737d(_0x4ef497);},'UmHnL':function(_0x3ce022,_0x1968d4,_0x4405b0){return _0x3ce022(_0x1968d4,_0x4405b0);},'oeYOU':_0x53dd72(0x1b0),'mOYwM':_0x53dd72(0x199),'hylCp':'name','eHCZr':function(_0x51e055,_0x38a6ca){return _0x51e055||_0x38a6ca;},'PYpOu':function(_0x9e3882,_0x3c7c51){return _0x9e3882===_0x3c7c51;},'MCzlD':'string','zpHwu':function(_0xdd229e){return _0xdd229e();},'fFeHs':function(_0x3cc389,_0x39bd83){return _0x3cc389(_0x39bd83);},'iQtkV':function(_0x95ebe5,_0x1cb2d5){return _0x95ebe5===_0x1cb2d5;},'rlrUf':function(_0x117a96,_0x3dfe25){return _0x117a96!==_0x3dfe25;},'aygSi':_0x53dd72(0x16f),'ivKiW':function(_0x277220,_0x46ed8d){return _0x277220===_0x46ed8d;},'Lqhpj':'http'},_0x511296=this[_0x53dd72(0x182)][_0x53dd72(0x1ac)]&&!_0x36ad1b[_0x53dd72(0x1af)][_0x53dd72(0x190)](_0x2e1ad9['Lqhpj'])?this[_0x53dd72(0x182)][_0x53dd72(0x1ac)][_0x53dd72(0x1b7)](/\/$/,'')+'/'+_0x36ad1b[_0x53dd72(0x1af)]['replace'](/^\//,''):_0x36ad1b[_0x53dd72(0x1af)],_0x381f7f=Object[_0x53dd72(0x161)](Object[_0x53dd72(0x161)]({},this[_0x53dd72(0x182)]['header']),_0x36ad1b['header']),_0x3971ed=_0x36ad1b[_0x53dd72(0x169)]||this[_0x53dd72(0x182)][_0x53dd72(0x169)]||0x3a98,_0x2f7d5a={};_0x2f7d5a[_0x53dd72(0x1af)]=_0x511296,_0x2f7d5a['header']=_0x381f7f,_0x2f7d5a[_0x53dd72(0x169)]=_0x3971ed;const _0x51122d={'req':Object[_0x53dd72(0x161)](Object[_0x53dd72(0x161)]({},_0x36ad1b),_0x2f7d5a),'state':{},'request':this['request']['bind'](this)},_0x1ecd8d=_0x9539f9=>__awaiter(this,void 0x0,void 0x0,function*(){const _0x481d56=_0x53dd72,_0x55b58c={'CkrWr':_0x2e1ad9[_0x481d56(0x18e)],'NNApC':function(_0x5783cc){const _0x345ae2=_0x481d56;return _0x2e1ad9[_0x345ae2(0x17b)](_0x5783cc);},'TQiqb':function(_0x3d0164,_0x3a98ae){const _0x3600fa=_0x481d56;return _0x2e1ad9[_0x3600fa(0x1bb)](_0x3d0164,_0x3a98ae);}};return new Promise((_0x493466,_0x11e297)=>{const _0x36de90=_0x481d56;var _0x595c6b,_0x57f8ae,_0x2602d3,_0x412ff1,_0x4f89f9;const {req:_0x4b5e71}=_0x9539f9,_0x5843f2=((_0x57f8ae=(_0x595c6b=_0x4b5e71[_0x36de90(0x18d)])===null||_0x2e1ad9['rUVYe'](_0x595c6b,void 0x0)?void 0x0:_0x595c6b['Content-Type'])===null||_0x2e1ad9['BnhhC'](_0x57f8ae,void 0x0)?void 0x0:_0x57f8ae[_0x36de90(0x1ba)](_0x36de90(0x16b)))&&(_0x2e1ad9[_0x36de90(0x18a)](_0x2602d3=_0x4b5e71[_0x36de90(0x186)],null)||_0x2e1ad9[_0x36de90(0x18a)](_0x2602d3,void 0x0)?void 0x0:_0x2602d3[_0x36de90(0x199)]),_0x15b86a=_0x451334=>{const _0x44c240=_0x36de90;if(_0x5843f2&&typeof _0x451334[_0x44c240(0x186)]===_0x55b58c[_0x44c240(0x1c2)])try{_0x451334[_0x44c240(0x186)]=JSON['parse'](_0x451334[_0x44c240(0x186)]);}catch(_0x33df90){}_0x9539f9[_0x44c240(0x171)]=_0x451334,_0x55b58c[_0x44c240(0x18b)](_0x493466);},_0x48bbfb=_0x4d785a=>{const _0x1e33bb=_0x36de90;if(_0x4d785a&&typeof _0x4d785a[_0x1e33bb(0x17d)]===_0x55b58c[_0x1e33bb(0x1c2)]&&_0x4d785a[_0x1e33bb(0x17d)][_0x1e33bb(0x1ba)]('abort'))return _0x55b58c[_0x1e33bb(0x1bd)](_0x11e297,new AbortError());_0x9539f9[_0x1e33bb(0x1be)]=_0x4d785a,_0x11e297(_0x4d785a);};if(_0x9539f9[_0x36de90(0x163)][_0x36de90(0x17c)])return _0x2e1ad9['rsgKD'](_0x11e297,new AbortError());const {__isRetry:_0x4a857a}=_0x4b5e71,_0x9feb49=_0x2e1ad9['UmHnL'](__rest,_0x4b5e71,[_0x2e1ad9[_0x36de90(0x172)]]);if(_0x5843f2){const _0x49d097=_0x9feb49[_0x36de90(0x186)],{filePath:_0xda55c8,name:_0x10ce36}=_0x49d097,_0x18ee2d=_0x2e1ad9[_0x36de90(0x17e)](__rest,_0x49d097,[_0x2e1ad9[_0x36de90(0x191)],_0x2e1ad9[_0x36de90(0x162)]]),_0x5d9424=Object[_0x36de90(0x161)]({},_0x9feb49['header']);delete _0x5d9424[_0x36de90(0x16a)],delete _0x5d9424[_0x36de90(0x1a4)];const _0x220e57=a3_0x516678[_0x36de90(0x177)](Object[_0x36de90(0x161)](Object['assign']({},_0x9feb49),{'url':_0x9feb49[_0x36de90(0x1af)],'filePath':_0xda55c8,'name':_0x2e1ad9[_0x36de90(0x1b9)](_0x10ce36,_0x36de90(0x1bc)),'formData':_0x18ee2d,'header':_0x5d9424,'timeout':_0x9feb49[_0x36de90(0x169)],'success':_0x15b86a,'fail':_0x48bbfb}));(_0x412ff1=_0x220e57[_0x36de90(0x1a8)])===null||_0x412ff1===void 0x0?void 0x0:_0x412ff1[_0x36de90(0x1b5)](_0x220e57,()=>{}),_0x9539f9[_0x36de90(0x163)]['task']=_0x220e57;}else{const _0x17d7fb={};_0x17d7fb[_0x36de90(0x19c)]=_0x15b86a,_0x17d7fb[_0x36de90(0x17f)]=_0x48bbfb;const _0x2621d4=a3_0x516678[_0x36de90(0x181)](Object[_0x36de90(0x161)](Object[_0x36de90(0x161)]({},_0x9feb49),_0x17d7fb));_0x2e1ad9['PYpOu'](_0x4f89f9=_0x2621d4[_0x36de90(0x1a8)],null)||_0x2e1ad9[_0x36de90(0x1c3)](_0x4f89f9,void 0x0)?void 0x0:_0x4f89f9['call'](_0x2621d4,()=>{}),_0x9539f9[_0x36de90(0x163)][_0x36de90(0x1c6)]=_0x2621d4;}});}),_0x508567=compose([...this[_0x53dd72(0x16e)],_0x1ecd8d]),_0x4caa01=()=>__awaiter(this,void 0x0,void 0x0,function*(){const _0x3032cb=_0x53dd72;var _0x22382b,_0xfa19ae,_0x1e8437,_0x291489,_0x4df310,_0x5660b0,_0x42e337,_0x46b92c;try{return yield _0x2e1ad9[_0x3032cb(0x19b)](_0x508567,_0x51122d),_0x2e1ad9[_0x3032cb(0x1ab)](_0x22382b=_0x51122d[_0x3032cb(0x171)],null)||_0x2e1ad9[_0x3032cb(0x1c3)](_0x22382b,void 0x0)?void 0x0:_0x22382b[_0x3032cb(0x186)];}catch(_0x4e6c69){if(!_0x51122d[_0x3032cb(0x1b1)]['__isRetry']&&_0x2e1ad9['rlrUf'](_0x4e6c69['name'],_0x2e1ad9[_0x3032cb(0x193)])){if(_0x4e6c69[_0x3032cb(0x15f)])_0x2e1ad9['ivKiW'](_0x1e8437=(_0xfa19ae=this['config'])['onHttpError'],null)||_0x1e8437===void 0x0?void 0x0:_0x1e8437[_0x3032cb(0x1b5)](_0xfa19ae,_0x4e6c69[_0x3032cb(0x1b6)],_0x4e6c69);else{if(_0x4e6c69[_0x3032cb(0x18c)]){const _0x47e4ce=((_0x291489=_0x4e6c69[_0x3032cb(0x185)])===null||_0x291489===void 0x0?void 0x0:_0x291489[_0x3032cb(0x186)])||_0x4e6c69;_0x2e1ad9['BnhhC'](_0x5660b0=(_0x4df310=this[_0x3032cb(0x182)])[_0x3032cb(0x194)],null)||_0x5660b0===void 0x0?void 0x0:_0x5660b0[_0x3032cb(0x1b5)](_0x4df310,_0x47e4ce);}else this[_0x3032cb(0x182)]['onHttpError']?this['config'][_0x3032cb(0x174)](0x0,_0x4e6c69):_0x2e1ad9['ivKiW'](_0x46b92c=(_0x42e337=this[_0x3032cb(0x182)])[_0x3032cb(0x194)],null)||_0x46b92c===void 0x0?void 0x0:_0x46b92c[_0x3032cb(0x1b5)](_0x42e337,_0x4e6c69);}}throw _0x4e6c69;}}),_0x2ed13f=_0x2e1ad9[_0x53dd72(0x17b)](_0x4caa01);return _0x2ed13f[_0x53dd72(0x1c1)]=()=>{const _0xb3f723=_0x53dd72;_0x51122d['state'][_0xb3f723(0x1c6)]?_0x51122d['state']['task'][_0xb3f723(0x1c1)]():_0x51122d['state']['abortSignal']=!![];},_0x2ed13f;}[a3_0x1d1ace(0x187)](_0x53cdb6,_0x1c6304,_0x220aad){const _0x16238b=a3_0x1d1ace,_0x222284={};return _0x222284[_0x16238b(0x1af)]=_0x53cdb6,_0x222284['method']=_0x16238b(0x164),_0x222284[_0x16238b(0x186)]=_0x1c6304,this['request'](Object[_0x16238b(0x161)](_0x222284,_0x220aad));}[a3_0x1d1ace(0x180)](_0x429d21,_0x55bdbe,_0x51c02f){const _0x404a8b=a3_0x1d1ace,_0x29ac74={};_0x29ac74[_0x404a8b(0x1a1)]=_0x404a8b(0x176);const _0x38dd38=_0x29ac74,_0x58b8ca={};return _0x58b8ca['url']=_0x429d21,_0x58b8ca[_0x404a8b(0x196)]=_0x38dd38[_0x404a8b(0x1a1)],_0x58b8ca['data']=_0x55bdbe,this['request'](Object['assign'](_0x58b8ca,_0x51c02f));}[a3_0x1d1ace(0x16d)](_0x2c82b9,_0x3e710d,_0x2e3b1a){const _0x54173e=a3_0x1d1ace,_0x59aaa3={};_0x59aaa3['jWWGj']=_0x54173e(0x1c4);const _0x4fb756=_0x59aaa3,_0x4501e5={};return _0x4501e5['url']=_0x2c82b9,_0x4501e5[_0x54173e(0x196)]=_0x4fb756[_0x54173e(0x1c5)],_0x4501e5[_0x54173e(0x186)]=_0x3e710d,this[_0x54173e(0x181)](Object[_0x54173e(0x161)](_0x4501e5,_0x2e3b1a));}[a3_0x1d1ace(0x1b3)](_0x1338c5,_0x51a4b0,_0x1032e2){const _0x3cfad0=a3_0x1d1ace,_0x5799b0={};_0x5799b0[_0x3cfad0(0x165)]=_0x3cfad0(0x16c);const _0xc6be4f=_0x5799b0,_0x4288a0={};return _0x4288a0[_0x3cfad0(0x1af)]=_0x1338c5,_0x4288a0[_0x3cfad0(0x196)]=_0xc6be4f['LKquC'],_0x4288a0[_0x3cfad0(0x186)]=_0x51a4b0,this[_0x3cfad0(0x181)](Object[_0x3cfad0(0x161)](_0x4288a0,_0x1032e2));}[a3_0x1d1ace(0x19e)](_0x2f65de,_0x1af841,_0x2220f6,_0x49522f){const _0x36b62d=a3_0x1d1ace,_0x489a7b={'PjHaH':function(_0x43dd0c,_0xa2cc15){return _0x43dd0c||_0xa2cc15;},'PDQWG':_0x36b62d(0x1bc),'KjRKA':function(_0x485b08,_0x2574eb,_0x2c755e){return _0x485b08(_0x2574eb,_0x2c755e);},'stwJa':_0x36b62d(0x189),'FDSCs':_0x36b62d(0x18d),'wOJcX':'POST','enlQj':_0x36b62d(0x16b)},_0x3aa341=_0x489a7b['PjHaH'](_0x49522f,{}),{name:name=_0x489a7b[_0x36b62d(0x178)],header:header={}}=_0x3aa341,_0x40d969=_0x489a7b[_0x36b62d(0x1a6)](__rest,_0x3aa341,[_0x489a7b[_0x36b62d(0x1aa)],_0x489a7b[_0x36b62d(0x1c7)]]),_0x1d1f7b={};return _0x1d1f7b[_0x36b62d(0x199)]=_0x1af841,_0x1d1f7b['name']=name,this[_0x36b62d(0x181)](Object['assign']({'url':_0x2f65de,'method':_0x489a7b[_0x36b62d(0x1a9)],'data':Object[_0x36b62d(0x161)](Object[_0x36b62d(0x161)]({},_0x2220f6),_0x1d1f7b),'header':Object['assign'](Object[_0x36b62d(0x161)]({},header),{'Content-Type':_0x489a7b[_0x36b62d(0x1b4)]})},_0x40d969));}}
@@ -0,0 +1,97 @@
1
+ import Taro from '@tarojs/taro';
2
+ /**
3
+ *洋葱模型上下文
4
+ * - req: Taro.request.Option & { __isRetry?: boolean } 请求选项
5
+ * - res: Taro.request.SuccessCallbackResult<any> 响应结果
6
+ * - error: any 错误信息
7
+ * - state: Record<string, any> 共享数据沙盒
8
+ * -- task: Taro.RequestTask<any> | Taro.UploadTask 任务对象
9
+ * -- abortSignal: boolean 是否已中止
10
+ * -- [key: string]: any 其他自定义数据
11
+ * - request: (options: Taro.request.Option & { __isRetry?: boolean }) => Promise<any> 重新请求方法
12
+ */
13
+ export interface RequestContext {
14
+ req: Taro.request.Option & {
15
+ __isRetry?: boolean;
16
+ };
17
+ res?: Taro.request.SuccessCallbackResult<any>;
18
+ error?: any;
19
+ state: {
20
+ task?: Taro.RequestTask<any> | Taro.UploadTask;
21
+ abortSignal?: boolean;
22
+ [key: string]: any;
23
+ };
24
+ request: (options: Taro.request.Option & {
25
+ __isRetry?: boolean;
26
+ }) => Promise<any>;
27
+ }
28
+ /**
29
+ * 中间件链中的下一步执行
30
+ */
31
+ export type Next = () => Promise<void>;
32
+ /**
33
+ * 洋葱模型中间件
34
+ * - ctx: RequestContext<T> 请求上下文
35
+ * - next: Next 中间件链中的下一步执行
36
+ */
37
+ export type Middleware = (ctx: RequestContext, next: Next) => Promise<void>;
38
+ /**
39
+ * 宿主应用传入的整体请求配置 (IoC 接口)
40
+ * - baseURL: 基础URL
41
+ * - header: 全局Header
42
+ * - timeout: 超时时间
43
+ * - getAccessToken: 获取token
44
+ * - authHeaderKey: 鉴权headerKey
45
+ * - formatAuthValue: 格式化token
46
+ * - skipAuth: 跳过鉴权
47
+ * - refreshToken: 刷新token
48
+ * -- url: 刷新token的url
49
+ * -- method: 刷新token的方法
50
+ * -- isRefreshRequest: 是否为刷新请求
51
+ * -- data: 获取参数
52
+ * -- params: 获取参数
53
+ * -- header: 获取参数
54
+ * -- resolveToken: 解析token
55
+ * -- onRefreshed: 刷新token成功后的回调
56
+ * -- onRefreshFailed: 刷新token失败后的回调
57
+ * - isSuccess: 判断是否成功
58
+ * - onBizError: 业务错误
59
+ * - resolveData: 解析数据
60
+ * - requestInterceptors: 请求拦截器
61
+ * - responseInterceptors: 响应拦截器
62
+ * - middlewares: 中间件
63
+ */
64
+ export interface RequestConfig {
65
+ baseURL?: string;
66
+ header?: Record<string, string>;
67
+ timeout?: number;
68
+ getAccessToken?: () => string | undefined;
69
+ authHeaderKey?: string;
70
+ formatAuthValue?: (token: string) => string;
71
+ skipAuth?: (req: Taro.request.Option) => boolean;
72
+ refreshToken?: {
73
+ url: string;
74
+ method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | string;
75
+ isRefreshRequest?: boolean;
76
+ data?: () => Record<string, any>;
77
+ params?: () => Record<string, any>;
78
+ header?: Record<string, string>;
79
+ resolveToken: (res: any) => string | undefined;
80
+ onRefreshed?: (res: any) => void | Promise<void>;
81
+ onRefreshFailed?: (err: any) => void;
82
+ };
83
+ isSuccess?: (res: any) => boolean;
84
+ onBizError?: (err: any) => void;
85
+ onHttpError?: (statusCode: number, err: any) => void;
86
+ resolveData?: (res: any) => any;
87
+ requestInterceptors?: Middleware[];
88
+ responseInterceptors?: Middleware[];
89
+ middlewares?: Middleware[];
90
+ }
91
+ /**
92
+ * 支持中断的 Promise
93
+ * - abort: 中断请求
94
+ */
95
+ export interface AbortablePromise<T> extends Promise<T> {
96
+ abort: () => void;
97
+ }
@@ -0,0 +1 @@
1
+ export{};
@@ -0,0 +1,20 @@
1
+ import { OnionRequest } from './core/request';
2
+ import { RequestConfig } from './core/types';
3
+ /**
4
+ * 创建请求实例
5
+ * @param config 请求配置
6
+ * @property {string} config.baseURL 接口根地址前缀
7
+ * @property {number} config.timeout 请求超时时间,默认10000ms
8
+ * @property {Array<string>} config.headers 响应头
9
+ * @property {string} config.adapter 使用的适配器
10
+ * @property {function} config.transformRequest 转换请求的函数
11
+ * @property {function} config.transformResponse 转换响应的函数
12
+ * @property {boolean} config.refreshToken 是否开启刷新token机制,默认false
13
+ * - config.refreshToken.url 刷新token接口地址
14
+ * - config.refreshToken.getParams 获取刷新token的请求参数
15
+ * - config.refreshToken.resolveToken 解析token
16
+ * - config.refreshToken.onRefreshed 刷新token成功后的回调
17
+ * - config.refreshToken.onRefreshFailed 刷新token失败后的回调
18
+ * @returns OnionRequest实例
19
+ */
20
+ export declare function createRequest(config: RequestConfig): OnionRequest;
@@ -0,0 +1 @@
1
+ function a5_0x4267(){const _0x26a7c5=['otG1odjVCujbvhm','mtiZmtC5otrAtw9Tt0e','CMvZCg9UC2vjBNrLCMnLChrVCNm','mtq2mJi2Eez6DxL6','zM9YrwfJAa','mtaZndeYmZrzv1fAEhm','nZi0zNHSDNfS','mty4meX2uxvnvW','q0Tbz08','mtz1zvjQBLq','DxnL','mJm3ndm4thf0y3z6','nMD4EgDsAG','CMvXDwvZDeLUDgvYy2vWDg9YCW','mZuWotvQAMrcz2i','mZaWmtu3oujjExzcuG'];a5_0x4267=function(){return _0x26a7c5;};return a5_0x4267();}(function(_0x5ef73d,_0x2e83bb){const _0x19dbfd=a5_0xdeb5,_0x5cfda7=_0x5ef73d();while(!![]){try{const _0x34258f=-parseInt(_0x19dbfd(0x83))/0x1*(parseInt(_0x19dbfd(0x7a))/0x2)+-parseInt(_0x19dbfd(0x82))/0x3+-parseInt(_0x19dbfd(0x7d))/0x4*(parseInt(_0x19dbfd(0x85))/0x5)+parseInt(_0x19dbfd(0x7c))/0x6+-parseInt(_0x19dbfd(0x86))/0x7*(-parseInt(_0x19dbfd(0x80))/0x8)+-parseInt(_0x19dbfd(0x78))/0x9+-parseInt(_0x19dbfd(0x7e))/0xa*(-parseInt(_0x19dbfd(0x77))/0xb);if(_0x34258f===_0x2e83bb)break;else _0x5cfda7['push'](_0x5cfda7['shift']());}catch(_0x377476){_0x5cfda7['push'](_0x5cfda7['shift']());}}}(a5_0x4267,0xe301c));import{OnionRequest}from'./core/request';import{createAuthMiddleware,createBizMiddleware,logMiddleware}from'./middlewares';function a5_0xdeb5(_0x109e8b,_0x49ffd7){_0x109e8b=_0x109e8b-0x77;const _0x4267db=a5_0x4267();let _0xdeb5bf=_0x4267db[_0x109e8b];if(a5_0xdeb5['tPQnGo']===undefined){var _0x240100=function(_0x232702){const _0x2adacf='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x339dca='',_0x414835='';for(let _0x4a201a=0x0,_0x33ec1b,_0xef2bf7,_0x1c0290=0x0;_0xef2bf7=_0x232702['charAt'](_0x1c0290++);~_0xef2bf7&&(_0x33ec1b=_0x4a201a%0x4?_0x33ec1b*0x40+_0xef2bf7:_0xef2bf7,_0x4a201a++%0x4)?_0x339dca+=String['fromCharCode'](0xff&_0x33ec1b>>(-0x2*_0x4a201a&0x6)):0x0){_0xef2bf7=_0x2adacf['indexOf'](_0xef2bf7);}for(let _0x3e4be1=0x0,_0x40803a=_0x339dca['length'];_0x3e4be1<_0x40803a;_0x3e4be1++){_0x414835+='%'+('00'+_0x339dca['charCodeAt'](_0x3e4be1)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x414835);};a5_0xdeb5['gAVkoh']=_0x240100,a5_0xdeb5['HsPiYa']={},a5_0xdeb5['tPQnGo']=!![];}const _0x519973=_0x4267db[0x0],_0x5d0e34=_0x109e8b+_0x519973,_0x412079=a5_0xdeb5['HsPiYa'][_0x5d0e34];return!_0x412079?(_0xdeb5bf=a5_0xdeb5['gAVkoh'](_0xdeb5bf),a5_0xdeb5['HsPiYa'][_0x5d0e34]=_0xdeb5bf):_0xdeb5bf=_0x412079,_0xdeb5bf;}export function createRequest(_0x516555){const _0x4c0b9f=a5_0xdeb5,_0x17b1db={'CKAgO':function(_0x8af7db,_0x1a7f1a){return _0x8af7db(_0x1a7f1a);}},_0x20bcf2=new OnionRequest(_0x516555);if(_0x516555['requestInterceptors'])_0x516555[_0x4c0b9f(0x84)][_0x4c0b9f(0x7b)](_0x3146e9=>_0x20bcf2[_0x4c0b9f(0x81)](_0x3146e9));_0x20bcf2['use'](logMiddleware),_0x20bcf2[_0x4c0b9f(0x81)](_0x17b1db[_0x4c0b9f(0x7f)](createAuthMiddleware,_0x516555)),_0x20bcf2['use'](createBizMiddleware(_0x516555));if(_0x516555[_0x4c0b9f(0x79)])_0x516555[_0x4c0b9f(0x79)][_0x4c0b9f(0x7b)](_0x42b1d8=>_0x20bcf2[_0x4c0b9f(0x81)](_0x42b1d8));return _0x20bcf2;}
@@ -0,0 +1,4 @@
1
+ export * from './core/types';
2
+ export { OnionRequest } from './core/request';
3
+ export { AbortError } from './core/errors';
4
+ export { createRequest } from './createRequest';
@@ -0,0 +1 @@
1
+ function a6_0x5f37(){var _0x2b905b=['nZC4qurQDvDS','mJfhDMnst2i','nda2mwrvuM5QqW','ntm0ntqYnhbyzg94Aq','odu1ntiWDfbHELHq','oxzdqvfqyW','mty4nJCWotbhtxvmA2q','ndy4ntGZmJHqEhDLvfG','ndyZofDxtK5QwG','ndG1mJi4mxnpCwDPyq','oti1mhDMvxnMsq'];a6_0x5f37=function(){return _0x2b905b;};return a6_0x5f37();}function a6_0x284a(_0x426954,_0x15809f){_0x426954=_0x426954-0x99;var _0x5f373e=a6_0x5f37();var _0x284a04=_0x5f373e[_0x426954];if(a6_0x284a['wcXztN']===undefined){var _0x26a895=function(_0x1e45a4){var _0x2ee0eb='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x4f9871='',_0x5bef4b='';for(var _0x5cfd99=0x0,_0x551e40,_0x7a271b,_0x38ac9c=0x0;_0x7a271b=_0x1e45a4['charAt'](_0x38ac9c++);~_0x7a271b&&(_0x551e40=_0x5cfd99%0x4?_0x551e40*0x40+_0x7a271b:_0x7a271b,_0x5cfd99++%0x4)?_0x4f9871+=String['fromCharCode'](0xff&_0x551e40>>(-0x2*_0x5cfd99&0x6)):0x0){_0x7a271b=_0x2ee0eb['indexOf'](_0x7a271b);}for(var _0x5eee5e=0x0,_0x47f798=_0x4f9871['length'];_0x5eee5e<_0x47f798;_0x5eee5e++){_0x5bef4b+='%'+('00'+_0x4f9871['charCodeAt'](_0x5eee5e)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5bef4b);};a6_0x284a['XRhrvL']=_0x26a895,a6_0x284a['YZBRoS']={},a6_0x284a['wcXztN']=!![];}var _0x271349=_0x5f373e[0x0],_0x5bb605=_0x426954+_0x271349,_0x1921af=a6_0x284a['YZBRoS'][_0x5bb605];return!_0x1921af?(_0x284a04=a6_0x284a['XRhrvL'](_0x284a04),a6_0x284a['YZBRoS'][_0x5bb605]=_0x284a04):_0x284a04=_0x1921af,_0x284a04;}(function(_0x513e8d,_0x33bda8){var _0x48eefd=a6_0x284a,_0x1a41c3=_0x513e8d();while(!![]){try{var _0x14b04c=parseInt(_0x48eefd(0x99))/0x1*(parseInt(_0x48eefd(0xa2))/0x2)+parseInt(_0x48eefd(0xa0))/0x3+parseInt(_0x48eefd(0x9a))/0x4+-parseInt(_0x48eefd(0xa1))/0x5*(parseInt(_0x48eefd(0x9f))/0x6)+parseInt(_0x48eefd(0xa3))/0x7*(parseInt(_0x48eefd(0x9b))/0x8)+parseInt(_0x48eefd(0x9c))/0x9*(parseInt(_0x48eefd(0x9d))/0xa)+-parseInt(_0x48eefd(0x9e))/0xb;if(_0x14b04c===_0x33bda8)break;else _0x1a41c3['push'](_0x1a41c3['shift']());}catch(_0x2eacd8){_0x1a41c3['push'](_0x1a41c3['shift']());}}}(a6_0x5f37,0xcfcc7));export*from'./core/types';export{OnionRequest}from'./core/request';export{AbortError}from'./core/errors';export{createRequest}from'./createRequest';
@@ -0,0 +1,13 @@
1
+ import { Middleware, RequestConfig } from '../core/types';
2
+ /**
3
+ * 鉴权中间件
4
+ * @param config 请求配置
5
+ * @property {string} config.baseURL 接口根地址前缀
6
+ * @property {number} config.timeout 请求超时时间,默认15000ms
7
+ * @property {string} config.authHeaderKey 鉴权请求头的key,默认'Authorization'
8
+ * @property {function} config.formatAuthValue 格式化鉴权请求头的值
9
+ * @property {function} config.getAccessToken 获取鉴权token的函数
10
+ * @property {function} config.skipAuth 跳过鉴权中间件的函数
11
+ * @returns Middleware 洋葱模型的中间件
12
+ */
13
+ export declare function createAuthMiddleware(config: RequestConfig): Middleware;