@xfe-repo/bff-micro 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.
- package/README.md +3 -0
- package/dist/chunk-DL5PCZRQ.mjs +102 -0
- package/dist/chunk-IWNPXJTK.mjs +45 -0
- package/dist/chunk-MGUWQKV3.mjs +55 -0
- package/dist/index.d.mts +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +213 -0
- package/dist/index.mjs +17 -0
- package/dist/micro.interceptor.d.mts +21 -0
- package/dist/micro.interceptor.d.ts +21 -0
- package/dist/micro.interceptor.js +160 -0
- package/dist/micro.interceptor.mjs +7 -0
- package/dist/micro.module.d.mts +8 -0
- package/dist/micro.module.d.ts +8 -0
- package/dist/micro.module.js +206 -0
- package/dist/micro.module.mjs +8 -0
- package/dist/micro.service.d.mts +16 -0
- package/dist/micro.service.d.ts +16 -0
- package/dist/micro.service.js +65 -0
- package/dist/micro.service.mjs +6 -0
- package/package.json +43 -0
package/README.md
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MicroService,
|
|
3
|
+
__name,
|
|
4
|
+
__publicField
|
|
5
|
+
} from "./chunk-IWNPXJTK.mjs";
|
|
6
|
+
|
|
7
|
+
// src/micro.interceptor.ts
|
|
8
|
+
import { Injectable, Logger } from "@nestjs/common";
|
|
9
|
+
import { CtxService } from "@xfe-repo/bff-core";
|
|
10
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
11
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
12
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
13
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
14
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
15
|
+
}
|
|
16
|
+
__name(_ts_decorate, "_ts_decorate");
|
|
17
|
+
function _ts_metadata(k, v) {
|
|
18
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
19
|
+
}
|
|
20
|
+
__name(_ts_metadata, "_ts_metadata");
|
|
21
|
+
var _MicroInterceptor = class _MicroInterceptor {
|
|
22
|
+
constructor(microService, ctx) {
|
|
23
|
+
__publicField(this, "microService");
|
|
24
|
+
__publicField(this, "ctx");
|
|
25
|
+
__publicField(this, "logger", new Logger(_MicroInterceptor.name));
|
|
26
|
+
this.microService = microService;
|
|
27
|
+
this.ctx = ctx;
|
|
28
|
+
}
|
|
29
|
+
get axiosRef() {
|
|
30
|
+
return this.microService.axiosRef;
|
|
31
|
+
}
|
|
32
|
+
onModuleInit() {
|
|
33
|
+
this.registerInterceptors();
|
|
34
|
+
}
|
|
35
|
+
registerInterceptors() {
|
|
36
|
+
const requestManager = this.axiosRef.interceptors.request;
|
|
37
|
+
const responseManager = this.axiosRef.interceptors.response;
|
|
38
|
+
requestManager.use(this.requestFulfilled(), this.requestRejected());
|
|
39
|
+
responseManager.use(this.responseFulfilled(), this.responseRejected());
|
|
40
|
+
}
|
|
41
|
+
requestFulfilled() {
|
|
42
|
+
return (config) => {
|
|
43
|
+
const { params, data, url = "", method } = config;
|
|
44
|
+
const replaceParams = method?.toUpperCase() === "GET";
|
|
45
|
+
const dataURL = dataUrlBuilder(url)(replaceParams ? params : data);
|
|
46
|
+
replaceParams ? config.params = dataURL.data : config.data = dataURL.data;
|
|
47
|
+
config.url = dataURL.url;
|
|
48
|
+
this.logger.log(`Micro Request: ${this.ctx.traceid} ${config.timeout} ${config.method?.toUpperCase()}] ${config.baseURL}${config.url} - Headers:${JSON.stringify(config.headers)}`);
|
|
49
|
+
return config;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
requestRejected() {
|
|
53
|
+
return (error) => {
|
|
54
|
+
this.logger.error(`Micro Request Error: ${this.ctx.traceid} ${error}, ${JSON.stringify(error)}`);
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
responseFulfilled() {
|
|
58
|
+
return (response) => {
|
|
59
|
+
this.logger.log(`Micro Response: ${this.ctx.traceid} ${response.config.url} ${JSON.stringify(response.data)}`);
|
|
60
|
+
return response.data;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
responseRejected() {
|
|
64
|
+
return (error) => {
|
|
65
|
+
this.logger.error(`Micro Response Error: ${this.ctx.traceid} ${error}, ${JSON.stringify(error)}`);
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
__name(_MicroInterceptor, "MicroInterceptor");
|
|
70
|
+
var MicroInterceptor = _MicroInterceptor;
|
|
71
|
+
MicroInterceptor = _ts_decorate([
|
|
72
|
+
Injectable(),
|
|
73
|
+
_ts_metadata("design:type", Function),
|
|
74
|
+
_ts_metadata("design:paramtypes", [
|
|
75
|
+
typeof MicroService === "undefined" ? Object : MicroService,
|
|
76
|
+
typeof CtxService === "undefined" ? Object : CtxService
|
|
77
|
+
])
|
|
78
|
+
], MicroInterceptor);
|
|
79
|
+
var dataUrlBuilder = /* @__PURE__ */ __name((originURL) => {
|
|
80
|
+
return (params) => {
|
|
81
|
+
if (!originURL.includes(":")) {
|
|
82
|
+
return {
|
|
83
|
+
url: originURL,
|
|
84
|
+
data: params
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
Object.keys(params).forEach((query) => {
|
|
88
|
+
if (originURL.includes(`:${query}`)) {
|
|
89
|
+
originURL = originURL.replace(`:${query}`, params[query] || "");
|
|
90
|
+
delete params[query];
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
return {
|
|
94
|
+
url: originURL,
|
|
95
|
+
data: params
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
}, "dataUrlBuilder");
|
|
99
|
+
|
|
100
|
+
export {
|
|
101
|
+
MicroInterceptor
|
|
102
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
|
|
6
|
+
// src/micro.service.ts
|
|
7
|
+
import { HttpService } from "@nestjs/axios";
|
|
8
|
+
import { Injectable } from "@nestjs/common";
|
|
9
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
10
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
11
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
12
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
13
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
14
|
+
}
|
|
15
|
+
__name(_ts_decorate, "_ts_decorate");
|
|
16
|
+
function _ts_metadata(k, v) {
|
|
17
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
18
|
+
}
|
|
19
|
+
__name(_ts_metadata, "_ts_metadata");
|
|
20
|
+
var _MicroService = class _MicroService {
|
|
21
|
+
constructor(httpService) {
|
|
22
|
+
__publicField(this, "httpService");
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
24
|
+
__publicField(this, "request", this.axiosRef.request);
|
|
25
|
+
this.httpService = httpService;
|
|
26
|
+
}
|
|
27
|
+
get axiosRef() {
|
|
28
|
+
return this.httpService.axiosRef;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
__name(_MicroService, "MicroService");
|
|
32
|
+
var MicroService = _MicroService;
|
|
33
|
+
MicroService = _ts_decorate([
|
|
34
|
+
Injectable(),
|
|
35
|
+
_ts_metadata("design:type", Function),
|
|
36
|
+
_ts_metadata("design:paramtypes", [
|
|
37
|
+
typeof HttpService === "undefined" ? Object : HttpService
|
|
38
|
+
])
|
|
39
|
+
], MicroService);
|
|
40
|
+
|
|
41
|
+
export {
|
|
42
|
+
__name,
|
|
43
|
+
__publicField,
|
|
44
|
+
MicroService
|
|
45
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MicroInterceptor
|
|
3
|
+
} from "./chunk-DL5PCZRQ.mjs";
|
|
4
|
+
import {
|
|
5
|
+
MicroService,
|
|
6
|
+
__name
|
|
7
|
+
} from "./chunk-IWNPXJTK.mjs";
|
|
8
|
+
|
|
9
|
+
// src/micro.module.ts
|
|
10
|
+
import { HttpModule } from "@nestjs/axios";
|
|
11
|
+
import { Module } from "@nestjs/common";
|
|
12
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
13
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
14
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
15
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
16
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
17
|
+
}
|
|
18
|
+
__name(_ts_decorate, "_ts_decorate");
|
|
19
|
+
var _MicroModule = class _MicroModule {
|
|
20
|
+
static registerAsync(options) {
|
|
21
|
+
const { global, extraProviders = [], ...restOptions } = options;
|
|
22
|
+
if (!options.useFactory) {
|
|
23
|
+
throw new Error("useFactory is required in MicroModule.registerAsync()");
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
global,
|
|
27
|
+
module: _MicroModule,
|
|
28
|
+
imports: [
|
|
29
|
+
HttpModule.registerAsync(restOptions)
|
|
30
|
+
],
|
|
31
|
+
// 由于 Nest 的单例模式, 要保证此处的 MicroInterceptor 只应被实例化一次
|
|
32
|
+
// 放置此位置,可保证拦截器的执行顺序为 MicroInterceptor => ApiInterceptor
|
|
33
|
+
providers: [
|
|
34
|
+
...extraProviders,
|
|
35
|
+
MicroInterceptor
|
|
36
|
+
]
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
__name(_MicroModule, "MicroModule");
|
|
41
|
+
var MicroModule = _MicroModule;
|
|
42
|
+
MicroModule = _ts_decorate([
|
|
43
|
+
Module({
|
|
44
|
+
providers: [
|
|
45
|
+
MicroService
|
|
46
|
+
],
|
|
47
|
+
exports: [
|
|
48
|
+
MicroService
|
|
49
|
+
]
|
|
50
|
+
})
|
|
51
|
+
], MicroModule);
|
|
52
|
+
|
|
53
|
+
export {
|
|
54
|
+
MicroModule
|
|
55
|
+
};
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from 'axios';
|
|
2
|
+
export { MicroInterceptor } from './micro.interceptor.mjs';
|
|
3
|
+
export { MicroModule } from './micro.module.mjs';
|
|
4
|
+
export { MicrAxiosInstance, MicroRequest, MicroRequestConfig, MicroService } from './micro.service.mjs';
|
|
5
|
+
import '@nestjs/common';
|
|
6
|
+
import '@xfe-repo/bff-core';
|
|
7
|
+
import '@nestjs/axios';
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from 'axios';
|
|
2
|
+
export { MicroInterceptor } from './micro.interceptor.js';
|
|
3
|
+
export { MicroModule } from './micro.module.js';
|
|
4
|
+
export { MicrAxiosInstance, MicroRequest, MicroRequestConfig, MicroService } from './micro.service.js';
|
|
5
|
+
import '@nestjs/common';
|
|
6
|
+
import '@xfe-repo/bff-core';
|
|
7
|
+
import '@nestjs/axios';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
7
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
21
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
22
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
23
|
+
|
|
24
|
+
// src/index.ts
|
|
25
|
+
var index_exports = {};
|
|
26
|
+
__export(index_exports, {
|
|
27
|
+
MicroInterceptor: () => MicroInterceptor,
|
|
28
|
+
MicroModule: () => MicroModule,
|
|
29
|
+
MicroService: () => MicroService
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(index_exports);
|
|
32
|
+
__reExport(index_exports, require("axios"), module.exports);
|
|
33
|
+
|
|
34
|
+
// src/micro.interceptor.ts
|
|
35
|
+
var import_common2 = require("@nestjs/common");
|
|
36
|
+
var import_bff_core = require("@xfe-repo/bff-core");
|
|
37
|
+
|
|
38
|
+
// src/micro.service.ts
|
|
39
|
+
var import_axios = require("@nestjs/axios");
|
|
40
|
+
var import_common = require("@nestjs/common");
|
|
41
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
42
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
43
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
44
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
45
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
46
|
+
}
|
|
47
|
+
__name(_ts_decorate, "_ts_decorate");
|
|
48
|
+
function _ts_metadata(k, v) {
|
|
49
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
50
|
+
}
|
|
51
|
+
__name(_ts_metadata, "_ts_metadata");
|
|
52
|
+
var _MicroService = class _MicroService {
|
|
53
|
+
constructor(httpService) {
|
|
54
|
+
__publicField(this, "httpService");
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
56
|
+
__publicField(this, "request", this.axiosRef.request);
|
|
57
|
+
this.httpService = httpService;
|
|
58
|
+
}
|
|
59
|
+
get axiosRef() {
|
|
60
|
+
return this.httpService.axiosRef;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
__name(_MicroService, "MicroService");
|
|
64
|
+
var MicroService = _MicroService;
|
|
65
|
+
MicroService = _ts_decorate([
|
|
66
|
+
(0, import_common.Injectable)(),
|
|
67
|
+
_ts_metadata("design:type", Function),
|
|
68
|
+
_ts_metadata("design:paramtypes", [
|
|
69
|
+
typeof import_axios.HttpService === "undefined" ? Object : import_axios.HttpService
|
|
70
|
+
])
|
|
71
|
+
], MicroService);
|
|
72
|
+
|
|
73
|
+
// src/micro.interceptor.ts
|
|
74
|
+
function _ts_decorate2(decorators, target, key, desc) {
|
|
75
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
76
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
77
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
78
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
79
|
+
}
|
|
80
|
+
__name(_ts_decorate2, "_ts_decorate");
|
|
81
|
+
function _ts_metadata2(k, v) {
|
|
82
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
83
|
+
}
|
|
84
|
+
__name(_ts_metadata2, "_ts_metadata");
|
|
85
|
+
var _MicroInterceptor = class _MicroInterceptor {
|
|
86
|
+
constructor(microService, ctx) {
|
|
87
|
+
__publicField(this, "microService");
|
|
88
|
+
__publicField(this, "ctx");
|
|
89
|
+
__publicField(this, "logger", new import_common2.Logger(_MicroInterceptor.name));
|
|
90
|
+
this.microService = microService;
|
|
91
|
+
this.ctx = ctx;
|
|
92
|
+
}
|
|
93
|
+
get axiosRef() {
|
|
94
|
+
return this.microService.axiosRef;
|
|
95
|
+
}
|
|
96
|
+
onModuleInit() {
|
|
97
|
+
this.registerInterceptors();
|
|
98
|
+
}
|
|
99
|
+
registerInterceptors() {
|
|
100
|
+
const requestManager = this.axiosRef.interceptors.request;
|
|
101
|
+
const responseManager = this.axiosRef.interceptors.response;
|
|
102
|
+
requestManager.use(this.requestFulfilled(), this.requestRejected());
|
|
103
|
+
responseManager.use(this.responseFulfilled(), this.responseRejected());
|
|
104
|
+
}
|
|
105
|
+
requestFulfilled() {
|
|
106
|
+
return (config) => {
|
|
107
|
+
const { params, data, url = "", method } = config;
|
|
108
|
+
const replaceParams = method?.toUpperCase() === "GET";
|
|
109
|
+
const dataURL = dataUrlBuilder(url)(replaceParams ? params : data);
|
|
110
|
+
replaceParams ? config.params = dataURL.data : config.data = dataURL.data;
|
|
111
|
+
config.url = dataURL.url;
|
|
112
|
+
this.logger.log(`Micro Request: ${this.ctx.traceid} ${config.timeout} ${config.method?.toUpperCase()}] ${config.baseURL}${config.url} - Headers:${JSON.stringify(config.headers)}`);
|
|
113
|
+
return config;
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
requestRejected() {
|
|
117
|
+
return (error) => {
|
|
118
|
+
this.logger.error(`Micro Request Error: ${this.ctx.traceid} ${error}, ${JSON.stringify(error)}`);
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
responseFulfilled() {
|
|
122
|
+
return (response) => {
|
|
123
|
+
this.logger.log(`Micro Response: ${this.ctx.traceid} ${response.config.url} ${JSON.stringify(response.data)}`);
|
|
124
|
+
return response.data;
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
responseRejected() {
|
|
128
|
+
return (error) => {
|
|
129
|
+
this.logger.error(`Micro Response Error: ${this.ctx.traceid} ${error}, ${JSON.stringify(error)}`);
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
__name(_MicroInterceptor, "MicroInterceptor");
|
|
134
|
+
var MicroInterceptor = _MicroInterceptor;
|
|
135
|
+
MicroInterceptor = _ts_decorate2([
|
|
136
|
+
(0, import_common2.Injectable)(),
|
|
137
|
+
_ts_metadata2("design:type", Function),
|
|
138
|
+
_ts_metadata2("design:paramtypes", [
|
|
139
|
+
typeof MicroService === "undefined" ? Object : MicroService,
|
|
140
|
+
typeof import_bff_core.CtxService === "undefined" ? Object : import_bff_core.CtxService
|
|
141
|
+
])
|
|
142
|
+
], MicroInterceptor);
|
|
143
|
+
var dataUrlBuilder = /* @__PURE__ */ __name((originURL) => {
|
|
144
|
+
return (params) => {
|
|
145
|
+
if (!originURL.includes(":")) {
|
|
146
|
+
return {
|
|
147
|
+
url: originURL,
|
|
148
|
+
data: params
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
Object.keys(params).forEach((query) => {
|
|
152
|
+
if (originURL.includes(`:${query}`)) {
|
|
153
|
+
originURL = originURL.replace(`:${query}`, params[query] || "");
|
|
154
|
+
delete params[query];
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
return {
|
|
158
|
+
url: originURL,
|
|
159
|
+
data: params
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
}, "dataUrlBuilder");
|
|
163
|
+
|
|
164
|
+
// src/micro.module.ts
|
|
165
|
+
var import_axios2 = require("@nestjs/axios");
|
|
166
|
+
var import_common3 = require("@nestjs/common");
|
|
167
|
+
function _ts_decorate3(decorators, target, key, desc) {
|
|
168
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
169
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
170
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
171
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
172
|
+
}
|
|
173
|
+
__name(_ts_decorate3, "_ts_decorate");
|
|
174
|
+
var _MicroModule = class _MicroModule {
|
|
175
|
+
static registerAsync(options) {
|
|
176
|
+
const { global, extraProviders = [], ...restOptions } = options;
|
|
177
|
+
if (!options.useFactory) {
|
|
178
|
+
throw new Error("useFactory is required in MicroModule.registerAsync()");
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
global,
|
|
182
|
+
module: _MicroModule,
|
|
183
|
+
imports: [
|
|
184
|
+
import_axios2.HttpModule.registerAsync(restOptions)
|
|
185
|
+
],
|
|
186
|
+
// 由于 Nest 的单例模式, 要保证此处的 MicroInterceptor 只应被实例化一次
|
|
187
|
+
// 放置此位置,可保证拦截器的执行顺序为 MicroInterceptor => ApiInterceptor
|
|
188
|
+
providers: [
|
|
189
|
+
...extraProviders,
|
|
190
|
+
MicroInterceptor
|
|
191
|
+
]
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
__name(_MicroModule, "MicroModule");
|
|
196
|
+
var MicroModule = _MicroModule;
|
|
197
|
+
MicroModule = _ts_decorate3([
|
|
198
|
+
(0, import_common3.Module)({
|
|
199
|
+
providers: [
|
|
200
|
+
MicroService
|
|
201
|
+
],
|
|
202
|
+
exports: [
|
|
203
|
+
MicroService
|
|
204
|
+
]
|
|
205
|
+
})
|
|
206
|
+
], MicroModule);
|
|
207
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
208
|
+
0 && (module.exports = {
|
|
209
|
+
MicroInterceptor,
|
|
210
|
+
MicroModule,
|
|
211
|
+
MicroService,
|
|
212
|
+
...require("axios")
|
|
213
|
+
});
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MicroModule
|
|
3
|
+
} from "./chunk-MGUWQKV3.mjs";
|
|
4
|
+
import {
|
|
5
|
+
MicroInterceptor
|
|
6
|
+
} from "./chunk-DL5PCZRQ.mjs";
|
|
7
|
+
import {
|
|
8
|
+
MicroService
|
|
9
|
+
} from "./chunk-IWNPXJTK.mjs";
|
|
10
|
+
|
|
11
|
+
// src/index.ts
|
|
12
|
+
export * from "axios";
|
|
13
|
+
export {
|
|
14
|
+
MicroInterceptor,
|
|
15
|
+
MicroModule,
|
|
16
|
+
MicroService
|
|
17
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { OnModuleInit } from '@nestjs/common';
|
|
2
|
+
import { CtxService } from '@xfe-repo/bff-core';
|
|
3
|
+
import { InternalAxiosRequestConfig, AxiosResponse } from 'axios';
|
|
4
|
+
import { MicroService } from './micro.service.mjs';
|
|
5
|
+
import '@nestjs/axios';
|
|
6
|
+
|
|
7
|
+
declare class MicroInterceptor implements OnModuleInit {
|
|
8
|
+
private readonly microService;
|
|
9
|
+
private readonly ctx;
|
|
10
|
+
private readonly logger;
|
|
11
|
+
constructor(microService: MicroService, ctx: CtxService);
|
|
12
|
+
private get axiosRef();
|
|
13
|
+
onModuleInit(): void;
|
|
14
|
+
private registerInterceptors;
|
|
15
|
+
requestFulfilled(): (config: InternalAxiosRequestConfig) => InternalAxiosRequestConfig<any>;
|
|
16
|
+
requestRejected(): (error: any) => void;
|
|
17
|
+
responseFulfilled(): (response: AxiosResponse) => any;
|
|
18
|
+
responseRejected(): (error: any) => void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { MicroInterceptor };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { OnModuleInit } from '@nestjs/common';
|
|
2
|
+
import { CtxService } from '@xfe-repo/bff-core';
|
|
3
|
+
import { InternalAxiosRequestConfig, AxiosResponse } from 'axios';
|
|
4
|
+
import { MicroService } from './micro.service.js';
|
|
5
|
+
import '@nestjs/axios';
|
|
6
|
+
|
|
7
|
+
declare class MicroInterceptor implements OnModuleInit {
|
|
8
|
+
private readonly microService;
|
|
9
|
+
private readonly ctx;
|
|
10
|
+
private readonly logger;
|
|
11
|
+
constructor(microService: MicroService, ctx: CtxService);
|
|
12
|
+
private get axiosRef();
|
|
13
|
+
onModuleInit(): void;
|
|
14
|
+
private registerInterceptors;
|
|
15
|
+
requestFulfilled(): (config: InternalAxiosRequestConfig) => InternalAxiosRequestConfig<any>;
|
|
16
|
+
requestRejected(): (error: any) => void;
|
|
17
|
+
responseFulfilled(): (response: AxiosResponse) => any;
|
|
18
|
+
responseRejected(): (error: any) => void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { MicroInterceptor };
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
7
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
22
|
+
|
|
23
|
+
// src/micro.interceptor.ts
|
|
24
|
+
var micro_interceptor_exports = {};
|
|
25
|
+
__export(micro_interceptor_exports, {
|
|
26
|
+
MicroInterceptor: () => MicroInterceptor
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(micro_interceptor_exports);
|
|
29
|
+
var import_common2 = require("@nestjs/common");
|
|
30
|
+
var import_bff_core = require("@xfe-repo/bff-core");
|
|
31
|
+
|
|
32
|
+
// src/micro.service.ts
|
|
33
|
+
var import_axios = require("@nestjs/axios");
|
|
34
|
+
var import_common = require("@nestjs/common");
|
|
35
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
36
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
37
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
38
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
39
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
40
|
+
}
|
|
41
|
+
__name(_ts_decorate, "_ts_decorate");
|
|
42
|
+
function _ts_metadata(k, v) {
|
|
43
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
44
|
+
}
|
|
45
|
+
__name(_ts_metadata, "_ts_metadata");
|
|
46
|
+
var _MicroService = class _MicroService {
|
|
47
|
+
constructor(httpService) {
|
|
48
|
+
__publicField(this, "httpService");
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
50
|
+
__publicField(this, "request", this.axiosRef.request);
|
|
51
|
+
this.httpService = httpService;
|
|
52
|
+
}
|
|
53
|
+
get axiosRef() {
|
|
54
|
+
return this.httpService.axiosRef;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
__name(_MicroService, "MicroService");
|
|
58
|
+
var MicroService = _MicroService;
|
|
59
|
+
MicroService = _ts_decorate([
|
|
60
|
+
(0, import_common.Injectable)(),
|
|
61
|
+
_ts_metadata("design:type", Function),
|
|
62
|
+
_ts_metadata("design:paramtypes", [
|
|
63
|
+
typeof import_axios.HttpService === "undefined" ? Object : import_axios.HttpService
|
|
64
|
+
])
|
|
65
|
+
], MicroService);
|
|
66
|
+
|
|
67
|
+
// src/micro.interceptor.ts
|
|
68
|
+
function _ts_decorate2(decorators, target, key, desc) {
|
|
69
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
70
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
71
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
72
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
73
|
+
}
|
|
74
|
+
__name(_ts_decorate2, "_ts_decorate");
|
|
75
|
+
function _ts_metadata2(k, v) {
|
|
76
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
77
|
+
}
|
|
78
|
+
__name(_ts_metadata2, "_ts_metadata");
|
|
79
|
+
var _MicroInterceptor = class _MicroInterceptor {
|
|
80
|
+
constructor(microService, ctx) {
|
|
81
|
+
__publicField(this, "microService");
|
|
82
|
+
__publicField(this, "ctx");
|
|
83
|
+
__publicField(this, "logger", new import_common2.Logger(_MicroInterceptor.name));
|
|
84
|
+
this.microService = microService;
|
|
85
|
+
this.ctx = ctx;
|
|
86
|
+
}
|
|
87
|
+
get axiosRef() {
|
|
88
|
+
return this.microService.axiosRef;
|
|
89
|
+
}
|
|
90
|
+
onModuleInit() {
|
|
91
|
+
this.registerInterceptors();
|
|
92
|
+
}
|
|
93
|
+
registerInterceptors() {
|
|
94
|
+
const requestManager = this.axiosRef.interceptors.request;
|
|
95
|
+
const responseManager = this.axiosRef.interceptors.response;
|
|
96
|
+
requestManager.use(this.requestFulfilled(), this.requestRejected());
|
|
97
|
+
responseManager.use(this.responseFulfilled(), this.responseRejected());
|
|
98
|
+
}
|
|
99
|
+
requestFulfilled() {
|
|
100
|
+
return (config) => {
|
|
101
|
+
const { params, data, url = "", method } = config;
|
|
102
|
+
const replaceParams = method?.toUpperCase() === "GET";
|
|
103
|
+
const dataURL = dataUrlBuilder(url)(replaceParams ? params : data);
|
|
104
|
+
replaceParams ? config.params = dataURL.data : config.data = dataURL.data;
|
|
105
|
+
config.url = dataURL.url;
|
|
106
|
+
this.logger.log(`Micro Request: ${this.ctx.traceid} ${config.timeout} ${config.method?.toUpperCase()}] ${config.baseURL}${config.url} - Headers:${JSON.stringify(config.headers)}`);
|
|
107
|
+
return config;
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
requestRejected() {
|
|
111
|
+
return (error) => {
|
|
112
|
+
this.logger.error(`Micro Request Error: ${this.ctx.traceid} ${error}, ${JSON.stringify(error)}`);
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
responseFulfilled() {
|
|
116
|
+
return (response) => {
|
|
117
|
+
this.logger.log(`Micro Response: ${this.ctx.traceid} ${response.config.url} ${JSON.stringify(response.data)}`);
|
|
118
|
+
return response.data;
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
responseRejected() {
|
|
122
|
+
return (error) => {
|
|
123
|
+
this.logger.error(`Micro Response Error: ${this.ctx.traceid} ${error}, ${JSON.stringify(error)}`);
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
__name(_MicroInterceptor, "MicroInterceptor");
|
|
128
|
+
var MicroInterceptor = _MicroInterceptor;
|
|
129
|
+
MicroInterceptor = _ts_decorate2([
|
|
130
|
+
(0, import_common2.Injectable)(),
|
|
131
|
+
_ts_metadata2("design:type", Function),
|
|
132
|
+
_ts_metadata2("design:paramtypes", [
|
|
133
|
+
typeof MicroService === "undefined" ? Object : MicroService,
|
|
134
|
+
typeof import_bff_core.CtxService === "undefined" ? Object : import_bff_core.CtxService
|
|
135
|
+
])
|
|
136
|
+
], MicroInterceptor);
|
|
137
|
+
var dataUrlBuilder = /* @__PURE__ */ __name((originURL) => {
|
|
138
|
+
return (params) => {
|
|
139
|
+
if (!originURL.includes(":")) {
|
|
140
|
+
return {
|
|
141
|
+
url: originURL,
|
|
142
|
+
data: params
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
Object.keys(params).forEach((query) => {
|
|
146
|
+
if (originURL.includes(`:${query}`)) {
|
|
147
|
+
originURL = originURL.replace(`:${query}`, params[query] || "");
|
|
148
|
+
delete params[query];
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
return {
|
|
152
|
+
url: originURL,
|
|
153
|
+
data: params
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
}, "dataUrlBuilder");
|
|
157
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
158
|
+
0 && (module.exports = {
|
|
159
|
+
MicroInterceptor
|
|
160
|
+
});
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
7
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
22
|
+
|
|
23
|
+
// src/micro.module.ts
|
|
24
|
+
var micro_module_exports = {};
|
|
25
|
+
__export(micro_module_exports, {
|
|
26
|
+
MicroModule: () => MicroModule
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(micro_module_exports);
|
|
29
|
+
var import_axios2 = require("@nestjs/axios");
|
|
30
|
+
var import_common3 = require("@nestjs/common");
|
|
31
|
+
|
|
32
|
+
// src/micro.interceptor.ts
|
|
33
|
+
var import_common2 = require("@nestjs/common");
|
|
34
|
+
var import_bff_core = require("@xfe-repo/bff-core");
|
|
35
|
+
|
|
36
|
+
// src/micro.service.ts
|
|
37
|
+
var import_axios = require("@nestjs/axios");
|
|
38
|
+
var import_common = require("@nestjs/common");
|
|
39
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
40
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
41
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
42
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
43
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
44
|
+
}
|
|
45
|
+
__name(_ts_decorate, "_ts_decorate");
|
|
46
|
+
function _ts_metadata(k, v) {
|
|
47
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
48
|
+
}
|
|
49
|
+
__name(_ts_metadata, "_ts_metadata");
|
|
50
|
+
var _MicroService = class _MicroService {
|
|
51
|
+
constructor(httpService) {
|
|
52
|
+
__publicField(this, "httpService");
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
54
|
+
__publicField(this, "request", this.axiosRef.request);
|
|
55
|
+
this.httpService = httpService;
|
|
56
|
+
}
|
|
57
|
+
get axiosRef() {
|
|
58
|
+
return this.httpService.axiosRef;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
__name(_MicroService, "MicroService");
|
|
62
|
+
var MicroService = _MicroService;
|
|
63
|
+
MicroService = _ts_decorate([
|
|
64
|
+
(0, import_common.Injectable)(),
|
|
65
|
+
_ts_metadata("design:type", Function),
|
|
66
|
+
_ts_metadata("design:paramtypes", [
|
|
67
|
+
typeof import_axios.HttpService === "undefined" ? Object : import_axios.HttpService
|
|
68
|
+
])
|
|
69
|
+
], MicroService);
|
|
70
|
+
|
|
71
|
+
// src/micro.interceptor.ts
|
|
72
|
+
function _ts_decorate2(decorators, target, key, desc) {
|
|
73
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
74
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
75
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
76
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
77
|
+
}
|
|
78
|
+
__name(_ts_decorate2, "_ts_decorate");
|
|
79
|
+
function _ts_metadata2(k, v) {
|
|
80
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
81
|
+
}
|
|
82
|
+
__name(_ts_metadata2, "_ts_metadata");
|
|
83
|
+
var _MicroInterceptor = class _MicroInterceptor {
|
|
84
|
+
constructor(microService, ctx) {
|
|
85
|
+
__publicField(this, "microService");
|
|
86
|
+
__publicField(this, "ctx");
|
|
87
|
+
__publicField(this, "logger", new import_common2.Logger(_MicroInterceptor.name));
|
|
88
|
+
this.microService = microService;
|
|
89
|
+
this.ctx = ctx;
|
|
90
|
+
}
|
|
91
|
+
get axiosRef() {
|
|
92
|
+
return this.microService.axiosRef;
|
|
93
|
+
}
|
|
94
|
+
onModuleInit() {
|
|
95
|
+
this.registerInterceptors();
|
|
96
|
+
}
|
|
97
|
+
registerInterceptors() {
|
|
98
|
+
const requestManager = this.axiosRef.interceptors.request;
|
|
99
|
+
const responseManager = this.axiosRef.interceptors.response;
|
|
100
|
+
requestManager.use(this.requestFulfilled(), this.requestRejected());
|
|
101
|
+
responseManager.use(this.responseFulfilled(), this.responseRejected());
|
|
102
|
+
}
|
|
103
|
+
requestFulfilled() {
|
|
104
|
+
return (config) => {
|
|
105
|
+
const { params, data, url = "", method } = config;
|
|
106
|
+
const replaceParams = method?.toUpperCase() === "GET";
|
|
107
|
+
const dataURL = dataUrlBuilder(url)(replaceParams ? params : data);
|
|
108
|
+
replaceParams ? config.params = dataURL.data : config.data = dataURL.data;
|
|
109
|
+
config.url = dataURL.url;
|
|
110
|
+
this.logger.log(`Micro Request: ${this.ctx.traceid} ${config.timeout} ${config.method?.toUpperCase()}] ${config.baseURL}${config.url} - Headers:${JSON.stringify(config.headers)}`);
|
|
111
|
+
return config;
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
requestRejected() {
|
|
115
|
+
return (error) => {
|
|
116
|
+
this.logger.error(`Micro Request Error: ${this.ctx.traceid} ${error}, ${JSON.stringify(error)}`);
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
responseFulfilled() {
|
|
120
|
+
return (response) => {
|
|
121
|
+
this.logger.log(`Micro Response: ${this.ctx.traceid} ${response.config.url} ${JSON.stringify(response.data)}`);
|
|
122
|
+
return response.data;
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
responseRejected() {
|
|
126
|
+
return (error) => {
|
|
127
|
+
this.logger.error(`Micro Response Error: ${this.ctx.traceid} ${error}, ${JSON.stringify(error)}`);
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
__name(_MicroInterceptor, "MicroInterceptor");
|
|
132
|
+
var MicroInterceptor = _MicroInterceptor;
|
|
133
|
+
MicroInterceptor = _ts_decorate2([
|
|
134
|
+
(0, import_common2.Injectable)(),
|
|
135
|
+
_ts_metadata2("design:type", Function),
|
|
136
|
+
_ts_metadata2("design:paramtypes", [
|
|
137
|
+
typeof MicroService === "undefined" ? Object : MicroService,
|
|
138
|
+
typeof import_bff_core.CtxService === "undefined" ? Object : import_bff_core.CtxService
|
|
139
|
+
])
|
|
140
|
+
], MicroInterceptor);
|
|
141
|
+
var dataUrlBuilder = /* @__PURE__ */ __name((originURL) => {
|
|
142
|
+
return (params) => {
|
|
143
|
+
if (!originURL.includes(":")) {
|
|
144
|
+
return {
|
|
145
|
+
url: originURL,
|
|
146
|
+
data: params
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
Object.keys(params).forEach((query) => {
|
|
150
|
+
if (originURL.includes(`:${query}`)) {
|
|
151
|
+
originURL = originURL.replace(`:${query}`, params[query] || "");
|
|
152
|
+
delete params[query];
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
return {
|
|
156
|
+
url: originURL,
|
|
157
|
+
data: params
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
}, "dataUrlBuilder");
|
|
161
|
+
|
|
162
|
+
// src/micro.module.ts
|
|
163
|
+
function _ts_decorate3(decorators, target, key, desc) {
|
|
164
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
165
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
166
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
167
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
168
|
+
}
|
|
169
|
+
__name(_ts_decorate3, "_ts_decorate");
|
|
170
|
+
var _MicroModule = class _MicroModule {
|
|
171
|
+
static registerAsync(options) {
|
|
172
|
+
const { global, extraProviders = [], ...restOptions } = options;
|
|
173
|
+
if (!options.useFactory) {
|
|
174
|
+
throw new Error("useFactory is required in MicroModule.registerAsync()");
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
global,
|
|
178
|
+
module: _MicroModule,
|
|
179
|
+
imports: [
|
|
180
|
+
import_axios2.HttpModule.registerAsync(restOptions)
|
|
181
|
+
],
|
|
182
|
+
// 由于 Nest 的单例模式, 要保证此处的 MicroInterceptor 只应被实例化一次
|
|
183
|
+
// 放置此位置,可保证拦截器的执行顺序为 MicroInterceptor => ApiInterceptor
|
|
184
|
+
providers: [
|
|
185
|
+
...extraProviders,
|
|
186
|
+
MicroInterceptor
|
|
187
|
+
]
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
__name(_MicroModule, "MicroModule");
|
|
192
|
+
var MicroModule = _MicroModule;
|
|
193
|
+
MicroModule = _ts_decorate3([
|
|
194
|
+
(0, import_common3.Module)({
|
|
195
|
+
providers: [
|
|
196
|
+
MicroService
|
|
197
|
+
],
|
|
198
|
+
exports: [
|
|
199
|
+
MicroService
|
|
200
|
+
]
|
|
201
|
+
})
|
|
202
|
+
], MicroModule);
|
|
203
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
204
|
+
0 && (module.exports = {
|
|
205
|
+
MicroModule
|
|
206
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { HttpService } from '@nestjs/axios';
|
|
2
|
+
import { AxiosInstance, AxiosRequestConfig } from 'axios';
|
|
3
|
+
|
|
4
|
+
type MicroRequestConfig = AxiosRequestConfig;
|
|
5
|
+
type MicroRequest<P = any, R = any> = P extends void ? (params: void, config?: MicroRequestConfig) => Promise<R> : (params: P, config?: MicroRequestConfig) => Promise<R>;
|
|
6
|
+
interface MicrAxiosInstance extends AxiosInstance {
|
|
7
|
+
request<P = any, R = any>(config: AxiosRequestConfig<P>): Promise<R>;
|
|
8
|
+
}
|
|
9
|
+
declare class MicroService {
|
|
10
|
+
private readonly httpService;
|
|
11
|
+
constructor(httpService: HttpService);
|
|
12
|
+
get axiosRef(): MicrAxiosInstance;
|
|
13
|
+
readonly request: <P = any, R = any>(config: AxiosRequestConfig<P>) => Promise<R>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { type MicrAxiosInstance, type MicroRequest, type MicroRequestConfig, MicroService };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { HttpService } from '@nestjs/axios';
|
|
2
|
+
import { AxiosInstance, AxiosRequestConfig } from 'axios';
|
|
3
|
+
|
|
4
|
+
type MicroRequestConfig = AxiosRequestConfig;
|
|
5
|
+
type MicroRequest<P = any, R = any> = P extends void ? (params: void, config?: MicroRequestConfig) => Promise<R> : (params: P, config?: MicroRequestConfig) => Promise<R>;
|
|
6
|
+
interface MicrAxiosInstance extends AxiosInstance {
|
|
7
|
+
request<P = any, R = any>(config: AxiosRequestConfig<P>): Promise<R>;
|
|
8
|
+
}
|
|
9
|
+
declare class MicroService {
|
|
10
|
+
private readonly httpService;
|
|
11
|
+
constructor(httpService: HttpService);
|
|
12
|
+
get axiosRef(): MicrAxiosInstance;
|
|
13
|
+
readonly request: <P = any, R = any>(config: AxiosRequestConfig<P>) => Promise<R>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { type MicrAxiosInstance, type MicroRequest, type MicroRequestConfig, MicroService };
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
7
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
22
|
+
|
|
23
|
+
// src/micro.service.ts
|
|
24
|
+
var micro_service_exports = {};
|
|
25
|
+
__export(micro_service_exports, {
|
|
26
|
+
MicroService: () => MicroService
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(micro_service_exports);
|
|
29
|
+
var import_axios = require("@nestjs/axios");
|
|
30
|
+
var import_common = require("@nestjs/common");
|
|
31
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
32
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
33
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
34
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
35
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
36
|
+
}
|
|
37
|
+
__name(_ts_decorate, "_ts_decorate");
|
|
38
|
+
function _ts_metadata(k, v) {
|
|
39
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
40
|
+
}
|
|
41
|
+
__name(_ts_metadata, "_ts_metadata");
|
|
42
|
+
var _MicroService = class _MicroService {
|
|
43
|
+
constructor(httpService) {
|
|
44
|
+
__publicField(this, "httpService");
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
46
|
+
__publicField(this, "request", this.axiosRef.request);
|
|
47
|
+
this.httpService = httpService;
|
|
48
|
+
}
|
|
49
|
+
get axiosRef() {
|
|
50
|
+
return this.httpService.axiosRef;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
__name(_MicroService, "MicroService");
|
|
54
|
+
var MicroService = _MicroService;
|
|
55
|
+
MicroService = _ts_decorate([
|
|
56
|
+
(0, import_common.Injectable)(),
|
|
57
|
+
_ts_metadata("design:type", Function),
|
|
58
|
+
_ts_metadata("design:paramtypes", [
|
|
59
|
+
typeof import_axios.HttpService === "undefined" ? Object : import_axios.HttpService
|
|
60
|
+
])
|
|
61
|
+
], MicroService);
|
|
62
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
63
|
+
0 && (module.exports = {
|
|
64
|
+
MicroService
|
|
65
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xfe-repo/bff-micro",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"sideEffects": false,
|
|
5
|
+
"module": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"import": {
|
|
10
|
+
"types": "./dist/index.d.mts",
|
|
11
|
+
"default": "./dist/index.mjs"
|
|
12
|
+
},
|
|
13
|
+
"require": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"default": "./dist/index.js"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@nestjs/axios": "^4.0.1",
|
|
24
|
+
"@nestjs/common": "11.1.13",
|
|
25
|
+
"axios": "^1.13.4",
|
|
26
|
+
"@xfe-repo/bff-core": "1.2.5"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/node": "^25.0.10",
|
|
30
|
+
"@xfe-repo/eslint-config": "0.0.5",
|
|
31
|
+
"@xfe-repo/typescript-config": "0.0.6"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {},
|
|
34
|
+
"publishConfig": {
|
|
35
|
+
"registry": "https://registry.npmjs.org/"
|
|
36
|
+
},
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "tsup",
|
|
39
|
+
"dev": "tsup --watch",
|
|
40
|
+
"lint": "eslint \"src/**/*.ts*\"",
|
|
41
|
+
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist"
|
|
42
|
+
}
|
|
43
|
+
}
|