@0xchain/request 1.1.0-beta.81 → 1.1.0-beta.83
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 +13 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -0
- package/dist/interceptors/response.d.ts.map +1 -1
- package/dist/responseToast.d.ts +14 -0
- package/dist/responseToast.d.ts.map +1 -0
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -10,6 +10,7 @@ This library was generated with [Nx](https://nx.dev).
|
|
|
10
10
|
- 自动添加通用请求头
|
|
11
11
|
- 统一的错误处理
|
|
12
12
|
- 支持返回完整响应对象(包含 headers 信息)
|
|
13
|
+
- 业务信封可选 `toast` 时,客户端派发 `xchain-response-toast`
|
|
13
14
|
|
|
14
15
|
## 使用方法
|
|
15
16
|
|
|
@@ -68,6 +69,18 @@ if (response.status === 201) {
|
|
|
68
69
|
}
|
|
69
70
|
```
|
|
70
71
|
|
|
72
|
+
### 响应体 toast
|
|
73
|
+
|
|
74
|
+
成功信封可带可选字段 `toast: { amount, title? }`。客户端会派发 `xchain-response-toast`(导出常量 `RESPONSE_TOAST_EVENT`),业务自行监听并展示;SSR 不会派发。没有 toast 时后端应省略该字段。
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
import axiosInstance, { RESPONSE_TOAST_EVENT } from '@0xchain/request';
|
|
78
|
+
|
|
79
|
+
window.addEventListener(RESPONSE_TOAST_EVENT, (event) => {
|
|
80
|
+
const toast = (event as CustomEvent).detail; // { amount, title? }
|
|
81
|
+
});
|
|
82
|
+
```
|
|
83
|
+
|
|
71
84
|
## API 配置选项
|
|
72
85
|
|
|
73
86
|
### ApiRequestConfig
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { AxiosError } from 'axios';
|
|
2
|
+
import { ResponseToast } from './responseToast';
|
|
2
3
|
export interface ApiResponse<T> {
|
|
3
4
|
status: {
|
|
4
5
|
code: number;
|
|
5
6
|
msg: string;
|
|
6
7
|
};
|
|
7
8
|
data: T;
|
|
9
|
+
toast?: ResponseToast;
|
|
8
10
|
}
|
|
9
11
|
export interface ApiError extends AxiosError {
|
|
10
12
|
need?: boolean;
|
|
@@ -13,5 +15,7 @@ declare const axiosInstance: import('axios').AxiosInstance;
|
|
|
13
15
|
export default axiosInstance;
|
|
14
16
|
export { setServerHeaderProvider, setClientLocales } from './interceptors/commonHeader';
|
|
15
17
|
export { refreshAccessToken, getCurrentAccessToken } from './tokenRefresh';
|
|
18
|
+
export { RESPONSE_TOAST_EVENT, emitResponseToast, parseResponseToast, } from './responseToast';
|
|
19
|
+
export type { ResponseToast } from './responseToast';
|
|
16
20
|
export type { ApiRequestConfig, ServerHeaderProvider, Pagination, Status, IResponse, IFilters, IPageRequest, } from './types';
|
|
17
21
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAC;AAM/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,QAAS,SAAQ,UAAU;IAC1C,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAGD,QAAA,MAAM,aAAa,+BAYjB,CAAC;AASH,eAAe,aAAa,CAAC;AAE7B,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAExF,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,EACV,MAAM,EACN,SAAS,EACT,QAAQ,EACR,YAAY,GACb,MAAM,SAAS,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -258,6 +258,36 @@ function refreshAccessToken() {
|
|
|
258
258
|
function getCurrentAccessToken() {
|
|
259
259
|
return jsCookie.get(envCookieName("access_token")) || getToken("access_token") || "";
|
|
260
260
|
}
|
|
261
|
+
const RESPONSE_TOAST_EVENT = "xchain-response-toast";
|
|
262
|
+
function readToastObject(source) {
|
|
263
|
+
if (!source || typeof source !== "object") return null;
|
|
264
|
+
const raw = source;
|
|
265
|
+
const amount = Number(raw.amount);
|
|
266
|
+
if (!Number.isFinite(amount)) return null;
|
|
267
|
+
return {
|
|
268
|
+
amount,
|
|
269
|
+
title: typeof raw.title === "string" ? raw.title : void 0
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
function parseResponseToast(payload) {
|
|
273
|
+
if (!payload || typeof payload !== "object") return null;
|
|
274
|
+
const rec = payload;
|
|
275
|
+
const direct = readToastObject(rec.toast);
|
|
276
|
+
if (direct) return direct;
|
|
277
|
+
if (rec.data && typeof rec.data === "object") {
|
|
278
|
+
return readToastObject(rec.data.toast);
|
|
279
|
+
}
|
|
280
|
+
return null;
|
|
281
|
+
}
|
|
282
|
+
function emitResponseToast(payload) {
|
|
283
|
+
if (isServerRuntime()) return;
|
|
284
|
+
if (typeof window === "undefined") return;
|
|
285
|
+
const toast = parseResponseToast(payload);
|
|
286
|
+
if (!toast) return;
|
|
287
|
+
window.dispatchEvent(
|
|
288
|
+
new CustomEvent(RESPONSE_TOAST_EVENT, { detail: toast })
|
|
289
|
+
);
|
|
290
|
+
}
|
|
261
291
|
function shouldSkipRefresh(config) {
|
|
262
292
|
const url = typeof config?.url === "string" ? config.url : "";
|
|
263
293
|
if (url.includes("/api/refresh/token")) return true;
|
|
@@ -268,6 +298,7 @@ function shouldSkipRefresh(config) {
|
|
|
268
298
|
function handleBusinessResponse(response) {
|
|
269
299
|
const config = response.config;
|
|
270
300
|
if (config.returnFullResponse) {
|
|
301
|
+
emitResponseToast(response.data);
|
|
271
302
|
return response;
|
|
272
303
|
}
|
|
273
304
|
if (response.status === 200) {
|
|
@@ -309,6 +340,7 @@ function handleBusinessResponse(response) {
|
|
|
309
340
|
}
|
|
310
341
|
throw err;
|
|
311
342
|
}
|
|
343
|
+
emitResponseToast(data);
|
|
312
344
|
return data;
|
|
313
345
|
}
|
|
314
346
|
return response;
|
|
@@ -383,8 +415,11 @@ axiosInstance.interceptors.request.use(refreshToken);
|
|
|
383
415
|
axiosInstance.interceptors.request.use(commonHeader, errorInterceptor);
|
|
384
416
|
axiosInstance.interceptors.response.use(createResponseInterceptor(axiosInstance), errorInterceptor);
|
|
385
417
|
export {
|
|
418
|
+
RESPONSE_TOAST_EVENT,
|
|
386
419
|
axiosInstance as default,
|
|
420
|
+
emitResponseToast,
|
|
387
421
|
getCurrentAccessToken,
|
|
422
|
+
parseResponseToast,
|
|
388
423
|
refreshAccessToken,
|
|
389
424
|
setClientLocales,
|
|
390
425
|
setServerHeaderProvider
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/interceptors/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,aAAa,EAAE,aAAa,EAA8B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/interceptors/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,aAAa,EAAE,aAAa,EAA8B,MAAM,OAAO,CAAC;AAwE7F;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,aAAa,IACrB,UAAU,aAAa,KAAG,OAAO,CAAC,GAAG,CAAC,CAoBjF;AAED,eAAe,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** 业务信封里的 toast。无发放时后端应省略该字段。 */
|
|
2
|
+
export type ResponseToast = {
|
|
3
|
+
amount: number;
|
|
4
|
+
title?: string;
|
|
5
|
+
};
|
|
6
|
+
/** 客户端 window 事件名。产品层自行监听并展示 UI,本库不弹 toast。 */
|
|
7
|
+
export declare const RESPONSE_TOAST_EVENT = "xchain-response-toast";
|
|
8
|
+
/**
|
|
9
|
+
* 从业务信封 `{ data, status, toast }` 或 AxiosResponse `{ data: envelope }` 解析 toast。
|
|
10
|
+
* 只认 `toast` 字段,不把业务 `data.amount` 当成提示。
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseResponseToast(payload: unknown): ResponseToast | null;
|
|
13
|
+
export declare function emitResponseToast(payload: unknown): void;
|
|
14
|
+
//# sourceMappingURL=responseToast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responseToast.d.ts","sourceRoot":"","sources":["../src/responseToast.ts"],"names":[],"mappings":"AAEA,iCAAiC;AACjC,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,oBAAoB,0BAA0B,CAAC;AAa5D;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CASzE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQxD"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { AxiosRequestConfig } from 'axios';
|
|
2
|
+
import { ResponseToast } from './responseToast';
|
|
3
|
+
export type { ResponseToast };
|
|
2
4
|
export interface ServerHeaderProvider {
|
|
3
5
|
getAccessToken(): Promise<string | undefined>;
|
|
4
6
|
getLanguage(): Promise<string | undefined>;
|
|
@@ -32,6 +34,7 @@ export interface IResponse<T> {
|
|
|
32
34
|
data: T;
|
|
33
35
|
pagination?: null | Pagination;
|
|
34
36
|
status: Status;
|
|
37
|
+
toast?: ResponseToast;
|
|
35
38
|
[property: string]: any;
|
|
36
39
|
}
|
|
37
40
|
/**
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,MAAM,WAAW,oBAAoB;IACnC,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC9C,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;CACzB;AAED;;EAEE;AACF,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC;IACR,UAAU,CAAC,EAAE,IAAI,GAAG,UAAU,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;CACzB;AAED;;EAEE;AACF,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;CACzB;AACD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;CACzB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@0xchain/request",
|
|
3
|
-
"version": "1.1.0-beta.
|
|
3
|
+
"version": "1.1.0-beta.83",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"qs": "6.14.0"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@0xchain/logger": "1.1.0-beta.
|
|
36
|
-
"@0xchain/token": "1.1.0-beta.
|
|
35
|
+
"@0xchain/logger": "1.1.0-beta.83",
|
|
36
|
+
"@0xchain/token": "1.1.0-beta.83"
|
|
37
37
|
},
|
|
38
38
|
"nx": {
|
|
39
39
|
"tags": [
|