@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.
Files changed (40) hide show
  1. package/dist/base/base.controller.d.ts +5 -0
  2. package/dist/base/base.controller.js +28 -0
  3. package/dist/base/base.model.service.d.ts +29 -0
  4. package/dist/base/base.model.service.js +86 -0
  5. package/dist/base/base.service.d.ts +30 -0
  6. package/dist/base/base.service.js +86 -0
  7. package/dist/config/config.default.d.ts +3 -0
  8. package/dist/config/config.default.js +153 -0
  9. package/dist/config/env.d.ts +1 -0
  10. package/dist/config/env.js +19 -0
  11. package/dist/configuration.d.ts +5 -0
  12. package/dist/configuration.js +79 -0
  13. package/dist/filter/default.filter.d.ts +7 -0
  14. package/dist/filter/default.filter.js +24 -0
  15. package/dist/filter/notfound.filter.d.ts +5 -0
  16. package/dist/filter/notfound.filter.js +22 -0
  17. package/dist/guard/api.d.ts +16 -0
  18. package/dist/guard/api.js +88 -0
  19. package/dist/guard/auth.d.ts +19 -0
  20. package/dist/guard/auth.js +184 -0
  21. package/dist/index.d.ts +16 -0
  22. package/dist/index.js +37 -0
  23. package/dist/lib/decorator.d.ts +36 -0
  24. package/dist/lib/decorator.js +79 -0
  25. package/dist/lib/request.d.ts +7 -0
  26. package/dist/lib/request.js +7 -0
  27. package/dist/lib/utils.d.ts +15 -0
  28. package/dist/lib/utils.js +100 -0
  29. package/dist/middleware/apiResultFormatter.d.ts +8 -0
  30. package/dist/middleware/apiResultFormatter.js +84 -0
  31. package/dist/middleware/detect.middleware.d.ts +5 -0
  32. package/dist/middleware/detect.middleware.js +61 -0
  33. package/dist/middleware/requestInit.d.ts +8 -0
  34. package/dist/middleware/requestInit.js +100 -0
  35. package/dist/service/session.service.d.ts +39 -0
  36. package/dist/service/session.service.js +93 -0
  37. package/dist/service/tencent.service.d.ts +38 -0
  38. package/dist/service/tencent.service.js +87 -0
  39. package/package.json +2 -2
  40. 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,5 @@
1
+ import { IMiddleware } from '@midwayjs/core';
2
+ import { NextFunction, Context } from '@midwayjs/koa';
3
+ export declare class DetectMiddleware implements IMiddleware<Context, NextFunction> {
4
+ resolve(): (ctx: Context, next: NextFunction) => Promise<any>;
5
+ }
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdEluaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlkZGxld2FyZS9yZXF1ZXN0SW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSx5Q0FBaUU7QUFFakUsK0JBQWtDO0FBQ2xDLHlCQUF5QjtBQUN6QiwrREFBd0Q7QUFHakQsSUFBTSxxQkFBcUIsR0FBM0IsTUFBTSxxQkFBcUI7SUFFOUIsWUFBWSxDQUFNO0lBQ2xCLFlBQVk7SUFDSixnQkFBZ0IsR0FBRztRQUN2QixLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07UUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07S0FDNUMsQ0FBQztJQUNGLE1BQU0sQ0FBQyxHQUFZO1FBQ2YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUNwRCxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FDckMsQ0FBQztRQUNGLGVBQWU7UUFDZixPQUFPLFlBQVksSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDdkQsQ0FBQztJQUNILE9BQU87UUFDSCxPQUFPLEtBQUssRUFBRSxHQUFZLEVBQUUsSUFBa0IsRUFBRSxFQUFFO1lBQzlDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFRLENBQUM7WUFDN0MsSUFBSSxVQUFVLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVO2dCQUN0RSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FB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
@@ -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.20",
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.55",
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",