@cicctencent/midwayjs-base 1.0.20 → 1.0.21
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/dist/base/base.controller.d.ts +5 -0
- package/dist/base/base.controller.js +28 -0
- package/dist/base/base.model.service.d.ts +29 -0
- package/dist/base/base.model.service.js +86 -0
- package/dist/base/base.service.d.ts +30 -0
- package/dist/base/base.service.js +86 -0
- package/dist/config/config.default.d.ts +3 -0
- package/dist/config/config.default.js +153 -0
- package/dist/config/env.d.ts +1 -0
- package/dist/config/env.js +19 -0
- package/dist/configuration.d.ts +5 -0
- package/dist/configuration.js +79 -0
- package/dist/filter/default.filter.d.ts +7 -0
- package/dist/filter/default.filter.js +24 -0
- package/dist/filter/notfound.filter.d.ts +5 -0
- package/dist/filter/notfound.filter.js +22 -0
- package/dist/guard/api.d.ts +16 -0
- package/dist/guard/api.js +88 -0
- package/dist/guard/auth.d.ts +19 -0
- package/dist/guard/auth.js +184 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +37 -0
- package/dist/lib/decorator.d.ts +36 -0
- package/dist/lib/decorator.js +79 -0
- package/dist/lib/request.d.ts +7 -0
- package/dist/lib/request.js +7 -0
- package/dist/lib/utils.d.ts +15 -0
- package/dist/lib/utils.js +100 -0
- package/dist/middleware/apiResultFormatter.d.ts +8 -0
- package/dist/middleware/apiResultFormatter.js +84 -0
- package/dist/middleware/detect.middleware.d.ts +5 -0
- package/dist/middleware/detect.middleware.js +61 -0
- package/dist/middleware/requestInit.d.ts +8 -0
- package/dist/middleware/requestInit.js +100 -0
- package/dist/service/session.service.d.ts +39 -0
- package/dist/service/session.service.js +93 -0
- package/dist/service/tencent.service.d.ts +38 -0
- package/dist/service/tencent.service.js +87 -0
- package/package.json +2 -2
- package/typings/midway.d.ts +54 -54
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ApiResultFormatterMiddleware = void 0;
|
|
13
|
+
// @ts-ignore
|
|
14
|
+
const core_1 = require("@midwayjs/core");
|
|
15
|
+
const stream_1 = require("stream");
|
|
16
|
+
let ApiResultFormatterMiddleware = class ApiResultFormatterMiddleware {
|
|
17
|
+
apiOption;
|
|
18
|
+
ignore(ctx) {
|
|
19
|
+
// 下面的路由将忽略此中间件
|
|
20
|
+
if (this.apiOption?.ignore) {
|
|
21
|
+
for (const ig of this.apiOption.ignore) {
|
|
22
|
+
if (typeof ig === 'string' && ctx.path === ig)
|
|
23
|
+
return true;
|
|
24
|
+
if (ig?.test?.(ctx.path))
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
resolve() {
|
|
31
|
+
return async (ctx, next) => {
|
|
32
|
+
const isApi = this.apiOption?.reg?.test(ctx.request.path);
|
|
33
|
+
//console.log(ctx.URL.toString(), isApi);
|
|
34
|
+
if (isApi) {
|
|
35
|
+
try {
|
|
36
|
+
await next();
|
|
37
|
+
const res = ctx.body;
|
|
38
|
+
// 是否是可格式化的类型
|
|
39
|
+
if (this.canFormat(res)) {
|
|
40
|
+
ctx.body = Object.assign({
|
|
41
|
+
ret: 0,
|
|
42
|
+
msg: 'success',
|
|
43
|
+
data: null,
|
|
44
|
+
}, typeof res?.ret === 'number' ? res : { data: res });
|
|
45
|
+
//ctx.logger.info(ctx.request.rawBody, ctx.body);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
console.error(err);
|
|
50
|
+
if (typeof err.ret === 'number') {
|
|
51
|
+
ctx.body = err;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
ctx.body = {
|
|
55
|
+
ret: 1001,
|
|
56
|
+
msg: err.message,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
ctx.logger.error(ctx.request.rawBody, ctx.body);
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
if (ctx.status !== 302)
|
|
63
|
+
ctx.status = 200;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
await next();
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
canFormat(data) {
|
|
72
|
+
return data !== '' && !Buffer.isBuffer(data) &&
|
|
73
|
+
!(data instanceof stream_1.Stream || data instanceof Uint8Array || data instanceof Blob);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
exports.ApiResultFormatterMiddleware = ApiResultFormatterMiddleware;
|
|
77
|
+
__decorate([
|
|
78
|
+
(0, core_1.Config)('apiOption'),
|
|
79
|
+
__metadata("design:type", Object)
|
|
80
|
+
], ApiResultFormatterMiddleware.prototype, "apiOption", void 0);
|
|
81
|
+
exports.ApiResultFormatterMiddleware = ApiResultFormatterMiddleware = __decorate([
|
|
82
|
+
(0, core_1.Middleware)()
|
|
83
|
+
], ApiResultFormatterMiddleware);
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpUmVzdWx0Rm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZGRsZXdhcmUvYXBpUmVzdWx0Rm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGFBQWE7QUFDYix5Q0FBaUU7QUFFakUsbUNBQWdDO0FBR3pCLElBQU0sNEJBQTRCLEdBQWxDLE1BQU0sNEJBQTRCO0lBSXJDLFNBQVMsQ0FBTTtJQUVmLE1BQU0sQ0FBQyxHQUFZO1FBQ2YsZUFBZTtRQUNmLElBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUN4QixLQUFJLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3BDLElBQUcsT0FBTyxFQUFFLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssRUFBRTtvQkFBRSxPQUFPLElBQUksQ0FBQztnQkFDMUQsSUFBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztvQkFBRSxPQUFPLElBQUksQ0FBQztZQUN6QyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxPQUFPO1FBQ0gsT0FBTyxLQUFLLEVBQUUsR0FBWSxFQUFFLElBQWtCLEVBQUUsRUFBRTtZQUM5QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxRCx5Q0FBeUM7WUFDekMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDUixJQUFJLENBQUM7b0JBQ0QsTUFBTSxJQUFJLEVBQUUsQ0FBQztvQkFDYixNQUFNLEdBQUcsR0FBUSxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUMxQixhQUFhO29CQUNiLElBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUNyQixHQUFHLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQ3BCOzRCQUNJLEdBQUcsRUFBRSxDQUFDOzRCQUNOLEdBQUcsRUFBRSxTQUFTOzRCQUNkLElBQUksRUFBRSxJQUFJO3lCQUNiLEVBQ0QsT0FBTyxHQUFHLEVBQUUsR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FDckQsQ0FBQzt3QkFDRixpREFBaUQ7b0JBQ3JELENBQUM7Z0JBQ0wsQ0FBQztnQkFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ25CLElBQUksT0FBTyxHQUFHLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUM5QixHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztvQkFDbkIsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLEdBQUcsQ0FBQyxJQUFJLEdBQUc7NEJBQ1AsR0FBRyxFQUFFLElBQUk7NEJBQ1QsR0FBRyxFQUFFLEdBQUcsQ0FBQyxPQUFPO3lCQUNuQixDQUFDO29CQUNOLENBQUM7b0JBQ0QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwRCxDQUFDO3dCQUNPLENBQUM7b0JBQ0wsSUFBRyxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUc7d0JBQUUsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7Z0JBQzVDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUNqQixDQUFDO1FBQ0wsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUNELFNBQVMsQ0FBQyxJQUFTO1FBQ2YsT0FBTyxJQUFJLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDNUMsQ0FBQyxDQUFDLElBQUksWUFBWSxlQUFNLElBQUksSUFBSSxZQUFZLFVBQVUsSUFBSSxJQUFJLFlBQVksSUFBSSxDQUFDLENBQUM7SUFDcEYsQ0FBQztDQUNKLENBQUE7QUE3RFksb0VBQTRCO0FBSXJDO0lBREMsSUFBQSxhQUFNLEVBQUMsV0FBVyxDQUFDOzsrREFDTDt1Q0FKTiw0QkFBNEI7SUFEeEMsSUFBQSxpQkFBVSxHQUFFO0dBQ0EsNEJBQTRCLENBNkR4QyJ9
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DetectMiddleware = void 0;
|
|
10
|
+
const core_1 = require("@midwayjs/core");
|
|
11
|
+
let DetectMiddleware = class DetectMiddleware {
|
|
12
|
+
resolve() {
|
|
13
|
+
return async (ctx, next) => {
|
|
14
|
+
const UA = ctx.get('user-agent') || '';
|
|
15
|
+
const IS_MOBILE = /Mobile/i.test(UA);
|
|
16
|
+
const VER_MQQ = UA.match(/QQ\/([\d.]+)/i) && UA.match(/QQ\/([\d.]+)/i)?.[1];
|
|
17
|
+
const IS_MQQ = Boolean(VER_MQQ);
|
|
18
|
+
// 微信版本号可能分4段,影响业务代码里使用semver比较版本号(会报错),如果业务需要4段版本号可以自己从ua里取
|
|
19
|
+
const VER_WEIXIN = UA.match(/MicroMessenger\/([\d.]+)/i) &&
|
|
20
|
+
UA.match(/MicroMessenger\/([\d.]+)/i)?.[1]
|
|
21
|
+
.split('.')
|
|
22
|
+
.slice(0, 3)
|
|
23
|
+
.join('.');
|
|
24
|
+
const IS_WEIXIN = Boolean(VER_WEIXIN);
|
|
25
|
+
// 是否是开发者工具
|
|
26
|
+
const IS_WECHATTOOLS = /wechatdevtools\//i.test(UA);
|
|
27
|
+
// @ts-ignore
|
|
28
|
+
const IS_PCWEIXIN = /(Windows|Mac)Wechat/i.test(UA);
|
|
29
|
+
// 是否是企业微信
|
|
30
|
+
const IS_WXWORK = /wxwork\//i.test(UA);
|
|
31
|
+
// @ts-ignore
|
|
32
|
+
const VER_MINA = /miniProgram/i.test(UA);
|
|
33
|
+
const IS_MINA = Boolean(VER_MINA);
|
|
34
|
+
let requestIP = (ctx.request.header['x-forwarded-for'] ||
|
|
35
|
+
ctx.request.ip || '').toString();
|
|
36
|
+
if (requestIP.includes(','))
|
|
37
|
+
requestIP = requestIP.split(',')[0];
|
|
38
|
+
const clientIP = (ctx.request.header['x-client-ip'] || requestIP).toString();
|
|
39
|
+
const hostname = ctx.get('tencent-acceleration-domain-name') || ctx.request.hostname;
|
|
40
|
+
// 环境变量
|
|
41
|
+
ctx.detect = {
|
|
42
|
+
IS_MOBILE,
|
|
43
|
+
IS_MQQ,
|
|
44
|
+
IS_WEIXIN,
|
|
45
|
+
IS_WECHATTOOLS,
|
|
46
|
+
IS_PCWEIXIN,
|
|
47
|
+
IS_WXWORK,
|
|
48
|
+
IS_MINA,
|
|
49
|
+
CLIENTIP: clientIP,
|
|
50
|
+
REQUESTIP: requestIP,
|
|
51
|
+
HOSTNAME: hostname,
|
|
52
|
+
};
|
|
53
|
+
return next();
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
exports.DetectMiddleware = DetectMiddleware;
|
|
58
|
+
exports.DetectMiddleware = DetectMiddleware = __decorate([
|
|
59
|
+
(0, core_1.Middleware)()
|
|
60
|
+
], DetectMiddleware);
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0Lm1pZGRsZXdhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlkZGxld2FyZS9kZXRlY3QubWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSx5Q0FBeUQ7QUFJbEQsSUFBTSxnQkFBZ0IsR0FBdEIsTUFBTSxnQkFBZ0I7SUFDekIsT0FBTztRQUNILE9BQU8sS0FBSyxFQUFFLEdBQVksRUFBRSxJQUFrQixFQUFFLEVBQUU7WUFDOUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEMsNERBQTREO1lBQzVELE1BQU0sVUFBVSxHQUNaLEVBQUUsQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQUM7Z0JBQ3JDLEVBQUUsQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDckMsS0FBSyxDQUFDLEdBQUcsQ0FBQztxQkFDVixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDWCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXRDLFdBQVc7WUFDWCxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEQsYUFBYTtZQUNiLE1BQU0sV0FBVyxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwRCxVQUFVO1lBQ1YsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2QyxhQUFhO1lBQ2IsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFbEMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztnQkFDdEQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakMsSUFBRyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFBRSxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVoRSxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRTdFLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsa0NBQWtDLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUVyRixPQUFPO1lBQ1AsR0FBRyxDQUFDLE1BQU0sR0FBRztnQkFDVCxTQUFTO2dCQUNULE1BQU07Z0JBQ04sU0FBUztnQkFDVCxjQUFjO2dCQUNkLFdBQVc7Z0JBQ1gsU0FBUztnQkFDVCxPQUFPO2dCQUNQLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixTQUFTLEVBQUUsU0FBUztnQkFDcEIsUUFBUSxFQUFFLFFBQVE7YUFDckIsQ0FBQTtZQUNELE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUE7QUFsRFksNENBQWdCOzJCQUFoQixnQkFBZ0I7SUFENUIsSUFBQSxpQkFBVSxHQUFFO0dBQ0EsZ0JBQWdCLENBa0Q1QiJ9
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { IMiddleware } from '@midwayjs/core';
|
|
2
|
+
import { NextFunction, Context } from '@midwayjs/koa';
|
|
3
|
+
export declare class RequestInitMiddleware implements IMiddleware<Context, NextFunction> {
|
|
4
|
+
loggerConfig: any;
|
|
5
|
+
private staticExtensions;
|
|
6
|
+
ignore(ctx: Context): boolean;
|
|
7
|
+
resolve(): (ctx: Context, next: NextFunction) => Promise<any>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.RequestInitMiddleware = void 0;
|
|
13
|
+
const core_1 = require("@midwayjs/core");
|
|
14
|
+
const uuid_1 = require("uuid");
|
|
15
|
+
const ip = require("ip");
|
|
16
|
+
const logger_1 = require("@fefeding/common/dist/utils/logger");
|
|
17
|
+
let RequestInitMiddleware = class RequestInitMiddleware {
|
|
18
|
+
loggerConfig;
|
|
19
|
+
// 静态文件扩展名列表
|
|
20
|
+
staticExtensions = [
|
|
21
|
+
'.js', '.css', '.jpg', '.png', '.ico', '.svg',
|
|
22
|
+
'.woff', '.woff2', '.ttf', '.eot', '.map'
|
|
23
|
+
];
|
|
24
|
+
ignore(ctx) {
|
|
25
|
+
const isStaticFile = this.staticExtensions.some(ext => ctx.path.toLowerCase().endsWith(ext));
|
|
26
|
+
// 下面的路由将忽略此中间件
|
|
27
|
+
return isStaticFile || ctx.path === '/' || !ctx.path;
|
|
28
|
+
}
|
|
29
|
+
resolve() {
|
|
30
|
+
return async (ctx, next) => {
|
|
31
|
+
const body = (ctx.request.body || {});
|
|
32
|
+
let request_id = ctx.URL.searchParams.get('request_id') || body.request_id ||
|
|
33
|
+
ctx.request.header['x-request-id'] ||
|
|
34
|
+
ctx.cookies.get('request_id', {
|
|
35
|
+
signed: false,
|
|
36
|
+
});
|
|
37
|
+
if (!request_id)
|
|
38
|
+
request_id = (0, uuid_1.v4)().replace(/-/g, '');
|
|
39
|
+
ctx.request_id = request_id;
|
|
40
|
+
//console.log('request start', request_id, ctx.url);
|
|
41
|
+
const logger = new logger_1.default({
|
|
42
|
+
remoteUrl: this.loggerConfig?.remoteUrl,
|
|
43
|
+
serviceName: process.env.SERVICE_NAME,
|
|
44
|
+
logLevel: this.loggerConfig?.level,
|
|
45
|
+
requestId: ctx.request_id || '',
|
|
46
|
+
loginId: ctx.currentSession?.loginId || '',
|
|
47
|
+
userId: (ctx.currentSession?.userId || '').toString(),
|
|
48
|
+
clientIP: ctx.detect?.CLIENTIP || ctx.ip || '',
|
|
49
|
+
serverIP: ip.address() || '',
|
|
50
|
+
url: ctx.url,
|
|
51
|
+
});
|
|
52
|
+
// 将logger挂载到ctx上
|
|
53
|
+
ctx.logger = logger;
|
|
54
|
+
// 记录请求开始时间
|
|
55
|
+
const startTime = Date.now();
|
|
56
|
+
try {
|
|
57
|
+
// 继续处理请求
|
|
58
|
+
let result = await next();
|
|
59
|
+
const logData = {
|
|
60
|
+
requestId: ctx.request_id,
|
|
61
|
+
method: ctx.method,
|
|
62
|
+
status: ctx.status,
|
|
63
|
+
result,
|
|
64
|
+
responseTime: Date.now() - startTime
|
|
65
|
+
};
|
|
66
|
+
if (typeof logData.result === 'string') {
|
|
67
|
+
logData.result = logData.result.substring(0, 500);
|
|
68
|
+
}
|
|
69
|
+
// 记录成功响应
|
|
70
|
+
//logger.info('Request completed', logData);
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
// 记录错误响应
|
|
75
|
+
logger.error('Request failed', {
|
|
76
|
+
requestId: ctx.request_id,
|
|
77
|
+
method: ctx.method,
|
|
78
|
+
url: ctx.href,
|
|
79
|
+
error: {
|
|
80
|
+
name: error.name,
|
|
81
|
+
message: error.message,
|
|
82
|
+
stack: error.stack
|
|
83
|
+
},
|
|
84
|
+
responseTime: Date.now() - startTime
|
|
85
|
+
});
|
|
86
|
+
// 将错误继续抛出,由全局异常处理器处理
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
exports.RequestInitMiddleware = RequestInitMiddleware;
|
|
93
|
+
__decorate([
|
|
94
|
+
(0, core_1.Config)('logger'),
|
|
95
|
+
__metadata("design:type", Object)
|
|
96
|
+
], RequestInitMiddleware.prototype, "loggerConfig", void 0);
|
|
97
|
+
exports.RequestInitMiddleware = RequestInitMiddleware = __decorate([
|
|
98
|
+
(0, core_1.Middleware)()
|
|
99
|
+
], RequestInitMiddleware);
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdEluaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlkZGxld2FyZS9yZXF1ZXN0SW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSx5Q0FBaUU7QUFFakUsK0JBQWtDO0FBQ2xDLHlCQUF5QjtBQUN6QiwrREFBd0Q7QUFHakQsSUFBTSxxQkFBcUIsR0FBM0IsTUFBTSxxQkFBcUI7SUFFOUIsWUFBWSxDQUFNO0lBQ2xCLFlBQVk7SUFDSixnQkFBZ0IsR0FBRztRQUN2QixLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07UUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07S0FDNUMsQ0FBQztJQUNGLE1BQU0sQ0FBQyxHQUFZO1FBQ2YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUNwRCxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FDckMsQ0FBQztRQUNGLGVBQWU7UUFDZixPQUFPLFlBQVksSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDdkQsQ0FBQztJQUNILE9BQU87UUFDSCxPQUFPLEtBQUssRUFBRSxHQUFZLEVBQUUsSUFBa0IsRUFBRSxFQUFFO1lBQzlDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFRLENBQUM7WUFDN0MsSUFBSSxVQUFVLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVO2dCQUN0RSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7Z0JBQ2xDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRTtvQkFDdEIsTUFBTSxFQUFFLEtBQUs7aUJBQ2hCLENBQUMsQ0FBQztZQUVYLElBQUksQ0FBQyxVQUFVO2dCQUFFLFVBQVUsR0FBRyxJQUFBLFNBQUksR0FBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFdkQsR0FBRyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7WUFDNUIsb0RBQW9EO1lBRXBELE1BQU0sTUFBTSxHQUFHLElBQUksZ0JBQU0sQ0FBQztnQkFDdEIsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUztnQkFDdkMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWTtnQkFDckMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSztnQkFDbEMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxVQUFVLElBQUksRUFBRTtnQkFDL0IsT0FBTyxFQUFFLEdBQUcsQ0FBQyxjQUFjLEVBQUUsT0FBTyxJQUFJLEVBQUU7Z0JBQzFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQkFDckQsUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRTtnQkFDOUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO2dCQUM1QixHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7YUFDYixDQUFDLENBQUM7WUFDSCxpQkFBaUI7WUFDakIsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFHdEIsV0FBVztZQUNYLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUU3QixJQUFJLENBQUM7Z0JBQ0QsU0FBUztnQkFDVCxJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO2dCQUUxQixNQUFNLE9BQU8sR0FBRztvQkFDWixTQUFTLEVBQUUsR0FBRyxDQUFDLFVBQVU7b0JBQ3pCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtvQkFDbEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO29CQUNsQixNQUFNO29CQUNOLFlBQVksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUztpQkFDdkMsQ0FBQTtnQkFFRCxJQUFHLE9BQU8sT0FBTyxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDcEMsT0FBTyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3RELENBQUM7Z0JBRUQsU0FBUztnQkFDVCw0Q0FBNEM7Z0JBRTVDLE9BQU8sTUFBTSxDQUFDO1lBQ2xCLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNiLFNBQVM7Z0JBQ1QsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtvQkFDM0IsU0FBUyxFQUFFLEdBQUcsQ0FBQyxVQUFVO29CQUN6QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07b0JBQ2xCLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSTtvQkFDYixLQUFLLEVBQUU7d0JBQ0gsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO3dCQUNoQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87d0JBQ3RCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztxQkFDckI7b0JBQ0QsWUFBWSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTO2lCQUN2QyxDQUFDLENBQUM7Z0JBRUgscUJBQXFCO2dCQUNyQixNQUFNLEtBQUssQ0FBQztZQUNoQixDQUFDO1FBQ0wsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUE7QUF0Rlksc0RBQXFCO0FBRTlCO0lBREMsSUFBQSxhQUFNLEVBQUMsUUFBUSxDQUFDOzsyREFDQztnQ0FGVCxxQkFBcUI7SUFEakMsSUFBQSxpQkFBVSxHQUFFO0dBQ0EscUJBQXFCLENBc0ZqQyJ9
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { MidwayCache } from '@midwayjs/cache-manager';
|
|
2
|
+
import { BaseService } from '../base/base.service';
|
|
3
|
+
import { Session, LoginByWxReq, LoginByWxRsp, LoginByAccountReq, LoginByAccountRsp } from '@fefeding/common/dist/models/account/session';
|
|
4
|
+
export declare class SessionService extends BaseService {
|
|
5
|
+
sessionCache: MidwayCache;
|
|
6
|
+
sessionOption: {
|
|
7
|
+
timeout: number;
|
|
8
|
+
secretKey: string;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* 根据ID获取session
|
|
12
|
+
* 并判断session是否在有效期
|
|
13
|
+
* @param id token唯一
|
|
14
|
+
*/
|
|
15
|
+
getLoginSession(id: string): Promise<Session>;
|
|
16
|
+
/**
|
|
17
|
+
* 下线
|
|
18
|
+
* @param id 需要下线的id或者session
|
|
19
|
+
*/
|
|
20
|
+
logout(id: string): Promise<any>;
|
|
21
|
+
/**
|
|
22
|
+
* 登录接口
|
|
23
|
+
* @param loginParams 登录参数
|
|
24
|
+
* @returns
|
|
25
|
+
*/
|
|
26
|
+
loginByWx(loginParams: LoginByWxReq): Promise<LoginByWxRsp>;
|
|
27
|
+
/**
|
|
28
|
+
* 帐号登陆
|
|
29
|
+
* @param loginParams
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
loginByAccount(loginParams: LoginByAccountReq): Promise<LoginByAccountRsp>;
|
|
33
|
+
/**
|
|
34
|
+
* 用临时码登陆
|
|
35
|
+
* @param code 登陆临时码
|
|
36
|
+
* @returns
|
|
37
|
+
*/
|
|
38
|
+
loginByCode(code: string): Promise<import("@fefeding/common/dist/models/base/response").default<any>>;
|
|
39
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SessionService = void 0;
|
|
13
|
+
// @ts-ignore
|
|
14
|
+
const core_1 = require("@midwayjs/core");
|
|
15
|
+
const cache_manager_1 = require("@midwayjs/cache-manager");
|
|
16
|
+
const base_service_1 = require("../base/base.service");
|
|
17
|
+
const session_1 = require("@fefeding/common/dist/models/account/session");
|
|
18
|
+
let SessionService = class SessionService extends base_service_1.BaseService {
|
|
19
|
+
sessionCache;
|
|
20
|
+
sessionOption;
|
|
21
|
+
/**
|
|
22
|
+
* 根据ID获取session
|
|
23
|
+
* 并判断session是否在有效期
|
|
24
|
+
* @param id token唯一
|
|
25
|
+
*/
|
|
26
|
+
async getLoginSession(id) {
|
|
27
|
+
const req = new session_1.GetLoginSessionReq();
|
|
28
|
+
req.id = id;
|
|
29
|
+
const res = await this.requestBaseApi(req);
|
|
30
|
+
return res?.data || null;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 下线
|
|
34
|
+
* @param id 需要下线的id或者session
|
|
35
|
+
*/
|
|
36
|
+
async logout(id) {
|
|
37
|
+
const req = new session_1.LogoutReq();
|
|
38
|
+
req.id = id;
|
|
39
|
+
const res = await this.requestBaseApi(req);
|
|
40
|
+
this.ctx.currentSession = null;
|
|
41
|
+
return res;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 登录接口
|
|
45
|
+
* @param loginParams 登录参数
|
|
46
|
+
* @returns
|
|
47
|
+
*/
|
|
48
|
+
async loginByWx(loginParams) {
|
|
49
|
+
const req = new session_1.LoginByWxReq();
|
|
50
|
+
req.fromJSON(loginParams);
|
|
51
|
+
const res = await this.requestBaseApi(req);
|
|
52
|
+
return res;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 帐号登陆
|
|
56
|
+
* @param loginParams
|
|
57
|
+
* @returns
|
|
58
|
+
*/
|
|
59
|
+
async loginByAccount(loginParams) {
|
|
60
|
+
loginParams.appId = '0'; //this.baseServiceOption.appId?.toString() || '0';
|
|
61
|
+
const req = new session_1.LoginByAccountReq();
|
|
62
|
+
req.fromJSON(loginParams);
|
|
63
|
+
const res = await this.requestBaseApi(req);
|
|
64
|
+
return res;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 用临时码登陆
|
|
68
|
+
* @param code 登陆临时码
|
|
69
|
+
* @returns
|
|
70
|
+
*/
|
|
71
|
+
async loginByCode(code) {
|
|
72
|
+
const res = await this.requestBaseApi('/api/session/loginByAuthCode', {
|
|
73
|
+
data: {
|
|
74
|
+
code
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
return res;
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
exports.SessionService = SessionService;
|
|
81
|
+
__decorate([
|
|
82
|
+
(0, core_1.InjectClient)(cache_manager_1.CachingFactory, 'session'),
|
|
83
|
+
__metadata("design:type", Object)
|
|
84
|
+
], SessionService.prototype, "sessionCache", void 0);
|
|
85
|
+
__decorate([
|
|
86
|
+
(0, core_1.Config)('session'),
|
|
87
|
+
__metadata("design:type", Object)
|
|
88
|
+
], SessionService.prototype, "sessionOption", void 0);
|
|
89
|
+
exports.SessionService = SessionService = __decorate([
|
|
90
|
+
(0, core_1.Provide)(),
|
|
91
|
+
(0, core_1.Scope)(core_1.ScopeEnum.Request, { allowDowngrade: true })
|
|
92
|
+
], SessionService);
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2Uvc2Vzc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGFBQWE7QUFDYix5Q0FBaUY7QUFDakYsMkRBQXNFO0FBQ3RFLHVEQUFtRDtBQUNuRCwwRUFBdU07QUFJaE0sSUFBTSxjQUFjLEdBQXBCLE1BQU0sY0FBZSxTQUFRLDBCQUFXO0lBRzNDLFlBQVksQ0FBYztJQUcxQixhQUFhLENBR1o7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFVO1FBQzVCLE1BQU0sR0FBRyxHQUFHLElBQUksNEJBQWtCLEVBQUUsQ0FBQztRQUNyQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNaLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBcUIsR0FBRyxDQUFDLENBQUM7UUFDL0QsT0FBTyxHQUFHLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQztJQUM3QixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFVO1FBQ25CLE1BQU0sR0FBRyxHQUFHLElBQUksbUJBQVMsRUFBRSxDQUFDO1FBQzVCLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1osTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMvQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUF5QjtRQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLHNCQUFZLEVBQUUsQ0FBQztRQUMvQixHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBZSxHQUFHLENBQUMsQ0FBQztRQUN6RCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxXQUE4QjtRQUMvQyxXQUFXLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFBLGtEQUFrRDtRQUUxRSxNQUFNLEdBQUcsR0FBRyxJQUFJLDJCQUFpQixFQUFFLENBQUM7UUFDcEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxQixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBQzlELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQVk7UUFDMUIsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLDhCQUE4QixFQUFFO1lBQ2xFLElBQUksRUFBRTtnQkFDRixJQUFJO2FBQ1A7U0FDSixDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSixDQUFBO0FBekVZLHdDQUFjO0FBR3ZCO0lBREMsSUFBQSxtQkFBWSxFQUFDLDhCQUFjLEVBQUUsU0FBUyxDQUFDOztvREFDZDtBQUcxQjtJQURDLElBQUEsYUFBTSxFQUFDLFNBQVMsQ0FBQzs7cURBSWpCO3lCQVRRLGNBQWM7SUFGMUIsSUFBQSxjQUFPLEdBQUU7SUFDVCxJQUFBLFlBQUssRUFBQyxnQkFBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQztHQUN0QyxjQUFjLENBeUUxQiJ9
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import { BaseService } from '../base/base.service';
|
|
3
|
+
interface TencentCredentialConfig {
|
|
4
|
+
secretId: string;
|
|
5
|
+
secretKey: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class TencentService extends BaseService {
|
|
8
|
+
tencentCredentialConfig: TencentCredentialConfig | {
|
|
9
|
+
[client: string]: TencentCredentialConfig;
|
|
10
|
+
};
|
|
11
|
+
cosFileOption: {
|
|
12
|
+
[key: string]: {
|
|
13
|
+
/** 存储桶的名称,格式为<bucketname-appid>,例如examplebucket-1250000000 */
|
|
14
|
+
Bucket: string;
|
|
15
|
+
Region: string;
|
|
16
|
+
Key?: string;
|
|
17
|
+
Headers?: any;
|
|
18
|
+
url?: string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
cosClient(name: string): COS;
|
|
22
|
+
uploadCosFile(key: string, filePath: string, cos?: string, headers?: {}, client?: string): Promise<{
|
|
23
|
+
/** 对象的实体标签(Entity Tag),是对象被创建时标识对象内容的信息标签,可用于检查对象的内容是否发生变化,例如"8e0b617ca298a564c3331da28dcb50df"。此头部并不一定返回对象的 MD5 值,而是根据对象上传和加密方式而有所不同 */
|
|
24
|
+
ETag: string;
|
|
25
|
+
/** 创建的存储桶访问地址,不带 https:// 前缀,例如 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/images/1.jpg */
|
|
26
|
+
Location: string;
|
|
27
|
+
url?: string;
|
|
28
|
+
}>;
|
|
29
|
+
uploadCosData(key: string, body: string | fs.ReadStream | any, cos?: string, headers?: {}, client?: string): Promise<{
|
|
30
|
+
/** 对象的实体标签(Entity Tag),是对象被创建时标识对象内容的信息标签,可用于检查对象的内容是否发生变化,例如"8e0b617ca298a564c3331da28dcb50df"。此头部并不一定返回对象的 MD5 值,而是根据对象上传和加密方式而有所不同 */
|
|
31
|
+
ETag: string;
|
|
32
|
+
/** 创建的存储桶访问地址,不带 https:// 前缀,例如 examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/images/1.jpg */
|
|
33
|
+
Location: string;
|
|
34
|
+
url?: string;
|
|
35
|
+
}>;
|
|
36
|
+
getCosFileUrl(key: string, cos?: string, client?: string): Promise<string>;
|
|
37
|
+
}
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.TencentService = void 0;
|
|
13
|
+
// @ts-ignore
|
|
14
|
+
const core_1 = require("@midwayjs/core");
|
|
15
|
+
const fs = require("fs");
|
|
16
|
+
const url = require("url");
|
|
17
|
+
const TxCos = require("@fefeding/common/dist/utils/txCos");
|
|
18
|
+
const lodash_1 = require("lodash");
|
|
19
|
+
const base_service_1 = require("../base/base.service");
|
|
20
|
+
let TencentService = class TencentService extends base_service_1.BaseService {
|
|
21
|
+
tencentCredentialConfig;
|
|
22
|
+
cosFileOption;
|
|
23
|
+
// 生成client
|
|
24
|
+
cosClient(name) {
|
|
25
|
+
const config = this.tencentCredentialConfig[name] || this.tencentCredentialConfig;
|
|
26
|
+
const client = TxCos.createClient({
|
|
27
|
+
/** 固定密钥的 SecretId,可从{@link https://console.cloud.tencent.com/cam/capi|API密钥管理}获取 */
|
|
28
|
+
SecretId: config.secretId,
|
|
29
|
+
/** 固定密钥的 SecretKey,可从{@link https://console.cloud.tencent.com/cam/capi|API密钥管理}获取 */
|
|
30
|
+
SecretKey: config.secretKey,
|
|
31
|
+
});
|
|
32
|
+
return client;
|
|
33
|
+
}
|
|
34
|
+
// 上传文件
|
|
35
|
+
async uploadCosFile(key, filePath, cos = 'default', headers = {}, client = 'default') {
|
|
36
|
+
const body = fs.createReadStream(filePath);
|
|
37
|
+
return this.uploadCosData(key, body, cos, headers, client);
|
|
38
|
+
}
|
|
39
|
+
// 上传文件内容
|
|
40
|
+
async uploadCosData(key, body, cos = 'default', headers = {}, client = 'default') {
|
|
41
|
+
const option = this.cosFileOption[cos];
|
|
42
|
+
if ((0, lodash_1.isPlainObject)(body) || Array.isArray(body)) {
|
|
43
|
+
body = JSON.stringify(body);
|
|
44
|
+
}
|
|
45
|
+
headers = {
|
|
46
|
+
...option.Headers,
|
|
47
|
+
...headers,
|
|
48
|
+
};
|
|
49
|
+
const res = await TxCos.putObject({
|
|
50
|
+
...option,
|
|
51
|
+
Key: key,
|
|
52
|
+
Body: body,
|
|
53
|
+
Headers: headers
|
|
54
|
+
}, this.cosClient(client));
|
|
55
|
+
if (option.url) {
|
|
56
|
+
res.url = (new url.URL(key, option.url)).toString();
|
|
57
|
+
}
|
|
58
|
+
return res;
|
|
59
|
+
}
|
|
60
|
+
// 获取文件访问url,带有临时签名
|
|
61
|
+
async getCosFileUrl(key, cos = 'default', client = 'default') {
|
|
62
|
+
if (!key) {
|
|
63
|
+
throw Error('指定文件地址');
|
|
64
|
+
}
|
|
65
|
+
const option = this.cosFileOption[cos];
|
|
66
|
+
const url = await TxCos.getObjectUrl({
|
|
67
|
+
...option,
|
|
68
|
+
Key: key,
|
|
69
|
+
Sign: true,
|
|
70
|
+
}, this.cosClient(client));
|
|
71
|
+
return url;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
exports.TencentService = TencentService;
|
|
75
|
+
__decorate([
|
|
76
|
+
(0, core_1.Config)('tencentCredential'),
|
|
77
|
+
__metadata("design:type", Object)
|
|
78
|
+
], TencentService.prototype, "tencentCredentialConfig", void 0);
|
|
79
|
+
__decorate([
|
|
80
|
+
(0, core_1.Config)('tencentCosOption'),
|
|
81
|
+
__metadata("design:type", Object)
|
|
82
|
+
], TencentService.prototype, "cosFileOption", void 0);
|
|
83
|
+
exports.TencentService = TencentService = __decorate([
|
|
84
|
+
(0, core_1.Provide)(),
|
|
85
|
+
(0, core_1.Scope)(core_1.ScopeEnum.Request, { allowDowngrade: true })
|
|
86
|
+
], TencentService);
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuY2VudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2UvdGVuY2VudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGFBQWE7QUFDYix5Q0FBZ0Y7QUFDaEYseUJBQXlCO0FBQ3pCLDJCQUEyQjtBQUMzQiwyREFBMkQ7QUFDM0QsbUNBQXVDO0FBQ3ZDLHVEQUFtRDtBQVM1QyxJQUFNLGNBQWMsR0FBcEIsTUFBTSxjQUFlLFNBQVEsMEJBQVc7SUFHM0MsdUJBQXVCLENBRXJCO0lBR0YsYUFBYSxDQWFaO0lBQ0QsV0FBVztJQUNYLFNBQVMsQ0FBQyxJQUFZO1FBQ2xCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUM7UUFDbEYsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUM5QixvRkFBb0Y7WUFDcEYsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQ3pCLHFGQUFxRjtZQUNyRixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7U0FDOUIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELE9BQU87SUFDUCxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQVcsRUFBRSxRQUFnQixFQUFFLEdBQUcsR0FBQyxTQUFTLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxNQUFNLEdBQUcsU0FBUztRQUM5RixNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFM0MsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsU0FBUztJQUNULEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBVyxFQUFFLElBQStCLEVBQUUsR0FBRyxHQUFDLFNBQVMsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLE1BQU0sR0FBRyxTQUFTO1FBQzdHLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBRyxJQUFBLHNCQUFhLEVBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzVDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxPQUFPLEdBQUc7WUFDTixHQUFHLE1BQU0sQ0FBQyxPQUFPO1lBQ2pCLEdBQUcsT0FBTztTQUNiLENBQUM7UUFDRixNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDOUIsR0FBRyxNQUFNO1lBQ1QsR0FBRyxFQUFFLEdBQUc7WUFDUixJQUFJLEVBQUUsSUFBSTtZQUNWLE9BQU8sRUFBRSxPQUFPO1NBQ25CLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FNeEIsQ0FBQztRQUVGLElBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1osR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDeEQsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixLQUFLLENBQUMsYUFBYSxDQUFDLEdBQVcsRUFBRSxHQUFHLEdBQUMsU0FBUyxFQUFFLE1BQU0sR0FBRyxTQUFTO1FBRTlELElBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNOLE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFDLFlBQVksQ0FBQztZQUNqQyxHQUFHLE1BQU07WUFDVCxHQUFHLEVBQUUsR0FBRztZQUNSLElBQUksRUFBRSxJQUFJO1NBQ2IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFXLENBQUM7UUFFckMsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0NBRUosQ0FBQTtBQXZGWSx3Q0FBYztBQUd2QjtJQURDLElBQUEsYUFBTSxFQUFDLG1CQUFtQixDQUFDOzsrREFHMUI7QUFHRjtJQURDLElBQUEsYUFBTSxFQUFDLGtCQUFrQixDQUFDOztxREFjMUI7eUJBckJRLGNBQWM7SUFGMUIsSUFBQSxjQUFPLEdBQUU7SUFDVCxJQUFBLFlBQUssRUFBQyxnQkFBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQztHQUN0QyxjQUFjLENBdUYxQiJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cicctencent/midwayjs-base",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.21",
|
|
4
4
|
"description": "基础框架,服务",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"typings": "index.d.ts",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"typescript": "^5.9.2"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@fefeding/common": "^1.0.
|
|
43
|
+
"@fefeding/common": "^1.0.57",
|
|
44
44
|
"@midwayjs/axios": "^3.20.11",
|
|
45
45
|
"@midwayjs/bootstrap": "^3.20.11",
|
|
46
46
|
"@midwayjs/cache-manager": "^3.20.11",
|