yingzios-platform-backend-shared 1.0.1

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 (194) hide show
  1. package/README.md +51 -0
  2. package/dist/apollo/apollo.config.d.ts +26 -0
  3. package/dist/apollo/apollo.config.d.ts.map +1 -0
  4. package/dist/apollo/apollo.config.js +2 -0
  5. package/dist/apollo/apollo.module.d.ts +13 -0
  6. package/dist/apollo/apollo.module.d.ts.map +1 -0
  7. package/dist/apollo/apollo.module.js +61 -0
  8. package/dist/apollo/apollo.service.d.ts +17 -0
  9. package/dist/apollo/apollo.service.d.ts.map +1 -0
  10. package/dist/apollo/apollo.service.js +35 -0
  11. package/dist/apollo/index.d.ts +5 -0
  12. package/dist/apollo/index.d.ts.map +1 -0
  13. package/dist/apollo/index.js +17 -0
  14. package/dist/cache/cache.config.d.ts +28 -0
  15. package/dist/cache/cache.config.d.ts.map +1 -0
  16. package/dist/cache/cache.config.js +2 -0
  17. package/dist/cache/cache.module.d.ts +39 -0
  18. package/dist/cache/cache.module.d.ts.map +1 -0
  19. package/dist/cache/cache.module.js +75 -0
  20. package/dist/cache/cache.service.d.ts +49 -0
  21. package/dist/cache/cache.service.d.ts.map +1 -0
  22. package/dist/cache/cache.service.js +208 -0
  23. package/dist/cache/index.d.ts +4 -0
  24. package/dist/cache/index.d.ts.map +1 -0
  25. package/dist/cache/index.js +19 -0
  26. package/dist/env/env-loader.d.ts +50 -0
  27. package/dist/env/env-loader.d.ts.map +1 -0
  28. package/dist/env/env-loader.js +159 -0
  29. package/dist/env/env.module.d.ts +11 -0
  30. package/dist/env/env.module.d.ts.map +1 -0
  31. package/dist/env/env.module.js +47 -0
  32. package/dist/env/env.service.d.ts +31 -0
  33. package/dist/env/env.service.d.ts.map +1 -0
  34. package/dist/env/env.service.js +195 -0
  35. package/dist/env/index.d.ts +4 -0
  36. package/dist/env/index.d.ts.map +1 -0
  37. package/dist/env/index.js +19 -0
  38. package/dist/index.d.ts +12 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +27 -0
  41. package/dist/internal-auth/decorators/caller.decorator.d.ts +29 -0
  42. package/dist/internal-auth/decorators/caller.decorator.d.ts.map +1 -0
  43. package/dist/internal-auth/decorators/caller.decorator.js +37 -0
  44. package/dist/internal-auth/decorators/index.d.ts +3 -0
  45. package/dist/internal-auth/decorators/index.d.ts.map +1 -0
  46. package/dist/internal-auth/decorators/index.js +18 -0
  47. package/dist/internal-auth/decorators/use-either-guard.decorator.d.ts +31 -0
  48. package/dist/internal-auth/decorators/use-either-guard.decorator.d.ts.map +1 -0
  49. package/dist/internal-auth/decorators/use-either-guard.decorator.js +79 -0
  50. package/dist/internal-auth/guards/index.d.ts +2 -0
  51. package/dist/internal-auth/guards/index.d.ts.map +1 -0
  52. package/dist/internal-auth/guards/index.js +17 -0
  53. package/dist/internal-auth/guards/service-key.guard.d.ts +36 -0
  54. package/dist/internal-auth/guards/service-key.guard.d.ts.map +1 -0
  55. package/dist/internal-auth/guards/service-key.guard.js +86 -0
  56. package/dist/internal-auth/index.d.ts +43 -0
  57. package/dist/internal-auth/index.d.ts.map +1 -0
  58. package/dist/internal-auth/index.js +62 -0
  59. package/dist/internal-auth/internal-auth.module.d.ts +62 -0
  60. package/dist/internal-auth/internal-auth.module.d.ts.map +1 -0
  61. package/dist/internal-auth/internal-auth.module.js +118 -0
  62. package/dist/internal-auth/internal-http.service.d.ts +72 -0
  63. package/dist/internal-auth/internal-http.service.d.ts.map +1 -0
  64. package/dist/internal-auth/internal-http.service.js +119 -0
  65. package/dist/jwt/auto-fill-user.pipe.d.ts +43 -0
  66. package/dist/jwt/auto-fill-user.pipe.d.ts.map +1 -0
  67. package/dist/jwt/auto-fill-user.pipe.js +166 -0
  68. package/dist/jwt/decorators/current-user.decorator.d.ts +37 -0
  69. package/dist/jwt/decorators/current-user.decorator.d.ts.map +1 -0
  70. package/dist/jwt/decorators/current-user.decorator.js +29 -0
  71. package/dist/jwt/decorators/public.decorator.d.ts +8 -0
  72. package/dist/jwt/decorators/public.decorator.d.ts.map +1 -0
  73. package/dist/jwt/decorators/public.decorator.js +12 -0
  74. package/dist/jwt/guards/jwt-auth.guard.d.ts +20 -0
  75. package/dist/jwt/guards/jwt-auth.guard.d.ts.map +1 -0
  76. package/dist/jwt/guards/jwt-auth.guard.js +88 -0
  77. package/dist/jwt/index.d.ts +8 -0
  78. package/dist/jwt/index.d.ts.map +1 -0
  79. package/dist/jwt/index.js +26 -0
  80. package/dist/jwt/jwt-config.service.d.ts +10 -0
  81. package/dist/jwt/jwt-config.service.d.ts.map +1 -0
  82. package/dist/jwt/jwt-config.service.js +40 -0
  83. package/dist/jwt/jwt.config.d.ts +15 -0
  84. package/dist/jwt/jwt.config.d.ts.map +1 -0
  85. package/dist/jwt/jwt.config.js +2 -0
  86. package/dist/jwt/jwt.module.d.ts +19 -0
  87. package/dist/jwt/jwt.module.d.ts.map +1 -0
  88. package/dist/jwt/jwt.module.js +100 -0
  89. package/dist/jwt/jwt.service.d.ts +31 -0
  90. package/dist/jwt/jwt.service.d.ts.map +1 -0
  91. package/dist/jwt/jwt.service.js +71 -0
  92. package/dist/jwt/strategies/jwt.strategy.d.ts +25 -0
  93. package/dist/jwt/strategies/jwt.strategy.d.ts.map +1 -0
  94. package/dist/jwt/strategies/jwt.strategy.js +150 -0
  95. package/dist/jwt/user-aware-axios.service.d.ts +17 -0
  96. package/dist/jwt/user-aware-axios.service.d.ts.map +1 -0
  97. package/dist/jwt/user-aware-axios.service.js +105 -0
  98. package/dist/jwt/utils/jwt.utils.d.ts +24 -0
  99. package/dist/jwt/utils/jwt.utils.d.ts.map +1 -0
  100. package/dist/jwt/utils/jwt.utils.js +40 -0
  101. package/dist/logger/index.d.ts +4 -0
  102. package/dist/logger/index.d.ts.map +1 -0
  103. package/dist/logger/index.js +19 -0
  104. package/dist/logger/logger.config.d.ts +41 -0
  105. package/dist/logger/logger.config.d.ts.map +1 -0
  106. package/dist/logger/logger.config.js +13 -0
  107. package/dist/logger/logger.module.d.ts +17 -0
  108. package/dist/logger/logger.module.d.ts.map +1 -0
  109. package/dist/logger/logger.module.js +49 -0
  110. package/dist/logger/logger.service.d.ts +62 -0
  111. package/dist/logger/logger.service.d.ts.map +1 -0
  112. package/dist/logger/logger.service.js +124 -0
  113. package/dist/logger/winston.config.d.ts +43 -0
  114. package/dist/logger/winston.config.d.ts.map +1 -0
  115. package/dist/logger/winston.config.js +183 -0
  116. package/dist/nacos/index.d.ts +4 -0
  117. package/dist/nacos/index.d.ts.map +1 -0
  118. package/dist/nacos/index.js +19 -0
  119. package/dist/nacos/nacos.config.d.ts +10 -0
  120. package/dist/nacos/nacos.config.d.ts.map +1 -0
  121. package/dist/nacos/nacos.config.js +2 -0
  122. package/dist/nacos/nacos.module.d.ts +9 -0
  123. package/dist/nacos/nacos.module.d.ts.map +1 -0
  124. package/dist/nacos/nacos.module.js +42 -0
  125. package/dist/nacos/nacos.service.d.ts +43 -0
  126. package/dist/nacos/nacos.service.d.ts.map +1 -0
  127. package/dist/nacos/nacos.service.js +212 -0
  128. package/dist/nacos/utils.d.ts +10 -0
  129. package/dist/nacos/utils.d.ts.map +1 -0
  130. package/dist/nacos/utils.js +65 -0
  131. package/dist/restful/current-request.util.d.ts +16 -0
  132. package/dist/restful/current-request.util.d.ts.map +1 -0
  133. package/dist/restful/current-request.util.js +34 -0
  134. package/dist/restful/http-exception.filter.d.ts +24 -0
  135. package/dist/restful/http-exception.filter.d.ts.map +1 -0
  136. package/dist/restful/http-exception.filter.js +126 -0
  137. package/dist/restful/index.d.ts +8 -0
  138. package/dist/restful/index.d.ts.map +1 -0
  139. package/dist/restful/index.js +23 -0
  140. package/dist/restful/request-context.middleware.d.ts +6 -0
  141. package/dist/restful/request-context.middleware.d.ts.map +1 -0
  142. package/dist/restful/request-context.middleware.js +25 -0
  143. package/dist/restful/response-codes.d.ts +104 -0
  144. package/dist/restful/response-codes.d.ts.map +1 -0
  145. package/dist/restful/response-codes.js +163 -0
  146. package/dist/restful/response.dto.d.ts +52 -0
  147. package/dist/restful/response.dto.d.ts.map +1 -0
  148. package/dist/restful/response.dto.js +146 -0
  149. package/dist/restful/response.interceptor.d.ts +17 -0
  150. package/dist/restful/response.interceptor.d.ts.map +1 -0
  151. package/dist/restful/response.interceptor.js +86 -0
  152. package/dist/restful/restful.module.d.ts +5 -0
  153. package/dist/restful/restful.module.d.ts.map +1 -0
  154. package/dist/restful/restful.module.js +26 -0
  155. package/dist/sequelize/index.d.ts +4 -0
  156. package/dist/sequelize/index.d.ts.map +1 -0
  157. package/dist/sequelize/index.js +19 -0
  158. package/dist/sequelize/sequelize.config.d.ts +24 -0
  159. package/dist/sequelize/sequelize.config.d.ts.map +1 -0
  160. package/dist/sequelize/sequelize.config.js +5 -0
  161. package/dist/sequelize/sequelize.module.d.ts +28 -0
  162. package/dist/sequelize/sequelize.module.d.ts.map +1 -0
  163. package/dist/sequelize/sequelize.module.js +50 -0
  164. package/dist/sequelize/sequelize.provider.d.ts +7 -0
  165. package/dist/sequelize/sequelize.provider.d.ts.map +1 -0
  166. package/dist/sequelize/sequelize.provider.js +154 -0
  167. package/dist/snowflake/index.d.ts +4 -0
  168. package/dist/snowflake/index.d.ts.map +1 -0
  169. package/dist/snowflake/index.js +19 -0
  170. package/dist/snowflake/snowflake.config.d.ts +30 -0
  171. package/dist/snowflake/snowflake.config.d.ts.map +1 -0
  172. package/dist/snowflake/snowflake.config.js +12 -0
  173. package/dist/snowflake/snowflake.module.d.ts +17 -0
  174. package/dist/snowflake/snowflake.module.d.ts.map +1 -0
  175. package/dist/snowflake/snowflake.module.js +58 -0
  176. package/dist/snowflake/snowflake.service.d.ts +21 -0
  177. package/dist/snowflake/snowflake.service.d.ts.map +1 -0
  178. package/dist/snowflake/snowflake.service.js +44 -0
  179. package/dist/swagger/index.d.ts +6 -0
  180. package/dist/swagger/index.d.ts.map +1 -0
  181. package/dist/swagger/index.js +19 -0
  182. package/dist/swagger/swagger.config.d.ts +45 -0
  183. package/dist/swagger/swagger.config.d.ts.map +1 -0
  184. package/dist/swagger/swagger.config.js +19 -0
  185. package/dist/swagger/swagger.decorators.d.ts +21 -0
  186. package/dist/swagger/swagger.decorators.d.ts.map +1 -0
  187. package/dist/swagger/swagger.decorators.js +112 -0
  188. package/dist/swagger/swagger.module.d.ts +15 -0
  189. package/dist/swagger/swagger.module.d.ts.map +1 -0
  190. package/dist/swagger/swagger.module.js +49 -0
  191. package/dist/swagger/swagger.service.d.ts +44 -0
  192. package/dist/swagger/swagger.service.d.ts.map +1 -0
  193. package/dist/swagger/swagger.service.js +202 -0
  194. package/package.json +75 -0
@@ -0,0 +1,10 @@
1
+ import type { IJWTConfig } from './jwt.config';
2
+ export declare class JwtConfigService {
3
+ private readonly jwtConfig;
4
+ constructor(jwtConfig: IJWTConfig);
5
+ get isOptionalAuth(): boolean;
6
+ getConfig(): IJWTConfig;
7
+ getSecret(): string;
8
+ getNodeEnv(): string;
9
+ }
10
+ //# sourceMappingURL=jwt-config.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-config.service.d.ts","sourceRoot":"","sources":["../../src/jwt/jwt-config.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,qBACa,gBAAgB;IACQ,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,UAAU;IAEzE,IAAI,cAAc,YAEjB;IAED,SAAS,IAAI,UAAU;IAIvB,SAAS,IAAI,MAAM;IAInB,UAAU,IAAI,MAAM;CAGrB"}
@@ -0,0 +1,40 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.JwtConfigService = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ let JwtConfigService = class JwtConfigService {
18
+ jwtConfig;
19
+ constructor(jwtConfig) {
20
+ this.jwtConfig = jwtConfig;
21
+ }
22
+ get isOptionalAuth() {
23
+ return this.jwtConfig.optionalAuth;
24
+ }
25
+ getConfig() {
26
+ return this.jwtConfig;
27
+ }
28
+ getSecret() {
29
+ return this.jwtConfig.secret;
30
+ }
31
+ getNodeEnv() {
32
+ return this.jwtConfig.node_env;
33
+ }
34
+ };
35
+ exports.JwtConfigService = JwtConfigService;
36
+ exports.JwtConfigService = JwtConfigService = __decorate([
37
+ (0, common_1.Injectable)(),
38
+ __param(0, (0, common_1.Inject)('JWT_CONFIGS')),
39
+ __metadata("design:paramtypes", [Object])
40
+ ], JwtConfigService);
@@ -0,0 +1,15 @@
1
+ export interface IJWTConfig {
2
+ node_env: string;
3
+ /**
4
+ * JWT密钥
5
+ */
6
+ secret: string;
7
+ signOptions: {
8
+ /**
9
+ * JWT过期时间
10
+ */
11
+ expiresIn: number;
12
+ };
13
+ optionalAuth?: boolean;
14
+ }
15
+ //# sourceMappingURL=jwt.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.config.d.ts","sourceRoot":"","sources":["../../src/jwt/jwt.config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE;QACX;;WAEG;QACH,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,19 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import { IJWTConfig } from './jwt.config';
3
+ /**
4
+ * JWT模块
5
+ * 提供完整的JWT认证和授权功能
6
+ * 支持 forRoot() 静态方法进行配置
7
+ * 设置为全局模块,所有其他模块都可以直接使用其提供者
8
+ */
9
+ export declare class JwtModule {
10
+ /**
11
+ * 静态方法:异步配置JWT模块
12
+ * 用于异步配置场景
13
+ */
14
+ static forRootAsync(options: {
15
+ useFactory: (...args: any[]) => Promise<IJWTConfig> | IJWTConfig;
16
+ inject?: any[];
17
+ }): DynamicModule;
18
+ }
19
+ //# sourceMappingURL=jwt.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.module.d.ts","sourceRoot":"","sources":["../../src/jwt/jwt.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAkB,MAAM,gBAAgB,CAAC;AAO/D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C;;;;;GAKG;AACH,qBAEa,SAAS;IACpB;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE;QAC3B,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;QACjE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;KAChB,GAAG,aAAa;CAiElB"}
@@ -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 JwtModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.JwtModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const jwt_1 = require("@nestjs/jwt");
13
+ const passport_1 = require("@nestjs/passport");
14
+ const jwt_strategy_1 = require("./strategies/jwt.strategy");
15
+ const jwt_auth_guard_1 = require("./guards/jwt-auth.guard");
16
+ const current_user_decorator_1 = require("./decorators/current-user.decorator");
17
+ const auto_fill_user_pipe_1 = require("./auto-fill-user.pipe");
18
+ const user_aware_axios_service_1 = require("./user-aware-axios.service");
19
+ const jwt_config_service_1 = require("./jwt-config.service");
20
+ /**
21
+ * JWT模块
22
+ * 提供完整的JWT认证和授权功能
23
+ * 支持 forRoot() 静态方法进行配置
24
+ * 设置为全局模块,所有其他模块都可以直接使用其提供者
25
+ */
26
+ let JwtModule = JwtModule_1 = class JwtModule {
27
+ /**
28
+ * 静态方法:异步配置JWT模块
29
+ * 用于异步配置场景
30
+ */
31
+ static forRootAsync(options) {
32
+ const optionProvider = {
33
+ useFactory: async (...args) => {
34
+ const config = await options.useFactory(...args);
35
+ return config;
36
+ },
37
+ inject: options.inject || [],
38
+ };
39
+ return {
40
+ module: JwtModule_1,
41
+ imports: [
42
+ // 导入Passport模块
43
+ passport_1.PassportModule.register({ defaultStrategy: 'jwt' }),
44
+ // 配置JWT模块
45
+ jwt_1.JwtModule.registerAsync(optionProvider),
46
+ ],
47
+ providers: [
48
+ {
49
+ provide: 'JWT_CONFIGS',
50
+ ...optionProvider,
51
+ },
52
+ // JWT配置服务
53
+ jwt_config_service_1.JwtConfigService,
54
+ // JWT服务
55
+ // JwtService,
56
+ // JWT认证策略
57
+ jwt_strategy_1.JwtStrategy,
58
+ // 守卫
59
+ jwt_auth_guard_1.JwtAuthGuard,
60
+ user_aware_axios_service_1.UserAwareAxiosService,
61
+ // 管道
62
+ {
63
+ provide: auto_fill_user_pipe_1.AutoFillUserPipe,
64
+ useValue: auto_fill_user_pipe_1.AutoFillUserPipe,
65
+ },
66
+ // 装饰器(作为提供者注册)
67
+ {
68
+ provide: 'CurrentUserDecorator',
69
+ useValue: current_user_decorator_1.CurrentUser,
70
+ },
71
+ {
72
+ provide: 'UserIdDecorator',
73
+ useValue: current_user_decorator_1.UserId,
74
+ },
75
+ {
76
+ provide: 'USERAWARE_AXIOS_SERVICE',
77
+ useExisting: user_aware_axios_service_1.UserAwareAxiosService,
78
+ },
79
+ ],
80
+ exports: [
81
+ // 导出实际的服务类(推荐使用)
82
+ // JwtService,
83
+ jwt_strategy_1.JwtStrategy,
84
+ jwt_auth_guard_1.JwtAuthGuard,
85
+ jwt_config_service_1.JwtConfigService, // 导出配置服务
86
+ auto_fill_user_pipe_1.AutoFillUserPipe,
87
+ jwt_1.JwtModule,
88
+ // 导出装饰器
89
+ 'CurrentUserDecorator',
90
+ 'UserIdDecorator',
91
+ 'USERAWARE_AXIOS_SERVICE',
92
+ ],
93
+ };
94
+ }
95
+ };
96
+ exports.JwtModule = JwtModule;
97
+ exports.JwtModule = JwtModule = JwtModule_1 = __decorate([
98
+ (0, common_1.Global)(),
99
+ (0, common_1.Module)({})
100
+ ], JwtModule);
@@ -0,0 +1,31 @@
1
+ import { JwtService as NestJwtService } from '@nestjs/jwt';
2
+ import type { IJWTConfig } from './jwt.config';
3
+ /**
4
+ * JWT服务
5
+ * 提供JWT令牌的验证功能
6
+ * 注意:不负责生成令牌,生成令牌需要用户信息,应由业务模块处理
7
+ */
8
+ export declare class JwtService {
9
+ private readonly jwtService;
10
+ private readonly jwtConfig;
11
+ constructor(jwtService: NestJwtService, jwtConfig: IJWTConfig);
12
+ /**
13
+ * 验证JWT令牌
14
+ * @param token JWT令牌
15
+ * @returns 令牌负载或抛出异常
16
+ */
17
+ verifyToken(token: string): any;
18
+ /**
19
+ * 解码JWT令牌(不验证)
20
+ * @param token JWT令牌
21
+ * @returns 解码后的负载
22
+ */
23
+ decodeToken(token: string): any;
24
+ /**
25
+ * 从请求头中提取令牌
26
+ * @param authorizationHeader 授权头
27
+ * @returns JWT令牌或null
28
+ */
29
+ extractTokenFromHeader(authorizationHeader: string): string | null;
30
+ }
31
+ //# sourceMappingURL=jwt.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.service.d.ts","sourceRoot":"","sources":["../../src/jwt/jwt.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C;;;;GAIG;AACH,qBACa,UAAU;IAEnB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAE3B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFT,UAAU,EAAE,cAAc,EAE1B,SAAS,EAAE,UAAU;IAGxC;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM;IAUzB;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG;IAI/B;;;;OAIG;IACH,sBAAsB,CAAC,mBAAmB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAQnE"}
@@ -0,0 +1,71 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.JwtService = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const jwt_1 = require("@nestjs/jwt");
18
+ /**
19
+ * JWT服务
20
+ * 提供JWT令牌的验证功能
21
+ * 注意:不负责生成令牌,生成令牌需要用户信息,应由业务模块处理
22
+ */
23
+ let JwtService = class JwtService {
24
+ jwtService;
25
+ jwtConfig;
26
+ constructor(jwtService, jwtConfig) {
27
+ this.jwtService = jwtService;
28
+ this.jwtConfig = jwtConfig;
29
+ }
30
+ /**
31
+ * 验证JWT令牌
32
+ * @param token JWT令牌
33
+ * @returns 令牌负载或抛出异常
34
+ */
35
+ verifyToken(token) {
36
+ try {
37
+ return this.jwtService.verify(token, {
38
+ secret: this.jwtConfig.secret,
39
+ });
40
+ }
41
+ catch {
42
+ throw new common_1.UnauthorizedException('无效的JWT令牌');
43
+ }
44
+ }
45
+ /**
46
+ * 解码JWT令牌(不验证)
47
+ * @param token JWT令牌
48
+ * @returns 解码后的负载
49
+ */
50
+ decodeToken(token) {
51
+ return this.jwtService.decode(token);
52
+ }
53
+ /**
54
+ * 从请求头中提取令牌
55
+ * @param authorizationHeader 授权头
56
+ * @returns JWT令牌或null
57
+ */
58
+ extractTokenFromHeader(authorizationHeader) {
59
+ if (!authorizationHeader) {
60
+ return null;
61
+ }
62
+ const [type, token] = authorizationHeader.split(' ');
63
+ return type === 'Bearer' ? token : null;
64
+ }
65
+ };
66
+ exports.JwtService = JwtService;
67
+ exports.JwtService = JwtService = __decorate([
68
+ (0, common_1.Injectable)(),
69
+ __param(1, (0, common_1.Inject)('JWT_CONFIGS')),
70
+ __metadata("design:paramtypes", [jwt_1.JwtService, Object])
71
+ ], JwtService);
@@ -0,0 +1,25 @@
1
+ import { Strategy } from 'passport-jwt';
2
+ import { ICurrentUser } from '../decorators/current-user.decorator';
3
+ import { Request } from 'express';
4
+ import type { IJWTConfig } from '../jwt.config';
5
+ declare const JwtStrategy_base: new (...args: [opt: import("passport-jwt").StrategyOptionsWithRequest] | [opt: import("passport-jwt").StrategyOptionsWithoutRequest]) => Strategy & {
6
+ validate(...args: any[]): unknown;
7
+ };
8
+ /**
9
+ * 基础JWT策略
10
+ * 仅验证JWT令牌的有效性,不验证用户存在性
11
+ * 适用于不需要用户数据库验证的场景
12
+ */
13
+ export declare class JwtStrategy extends JwtStrategy_base {
14
+ private jwtConfig;
15
+ constructor(jwtConfig: IJWTConfig);
16
+ /**
17
+ * 验证令牌负载
18
+ * @param req 请求对象
19
+ * @param payload 令牌负载
20
+ * @returns 符合ICurrentUser接口的用户信息
21
+ */
22
+ validate(req: Request, payload: any): Promise<ICurrentUser>;
23
+ }
24
+ export {};
25
+ //# sourceMappingURL=jwt.strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.strategy.d.ts","sourceRoot":"","sources":["../../../src/jwt/strategies/jwt.strategy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,YAAY,EAAY,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;;;;AA2ChD;;;;GAIG;AACH,qBACa,WAAY,SAAQ,gBAA0B;IAGvD,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,UAAU;IAkB/B;;;;;OAKG;IACG,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC;CA4DlE"}
@@ -0,0 +1,150 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.JwtStrategy = void 0;
19
+ const common_1 = require("@nestjs/common");
20
+ const passport_1 = require("@nestjs/passport");
21
+ const passport_jwt_1 = require("passport-jwt");
22
+ const current_user_decorator_1 = require("../decorators/current-user.decorator");
23
+ const json_bigint_1 = __importDefault(require("json-bigint"));
24
+ // 自定义从Header或Cookie中提取Token的函数
25
+ const extractJWT = (env) => {
26
+ return (req) => {
27
+ const internalJwt = req.headers?.['x-internal-jwt'];
28
+ if (typeof internalJwt === 'string' && internalJwt.trim()) {
29
+ return internalJwt;
30
+ }
31
+ if (Array.isArray(internalJwt) && internalJwt[0]?.trim()) {
32
+ return internalJwt[0];
33
+ }
34
+ // 首先从Authorization header中提取Bearer token
35
+ if (req.headers && req.headers.authorization) {
36
+ const parts = req.headers.authorization.split(' ');
37
+ if (parts.length === 2 && parts[0] === 'Bearer') {
38
+ return parts[1];
39
+ }
40
+ }
41
+ // 从自定义header中提取token
42
+ if (req.headers && req.headers['token_key']) {
43
+ return req.headers['token_key'];
44
+ }
45
+ // 从cookies中提取token
46
+ if (req.cookies) {
47
+ // 也可以尝试从系统代码+accessToken组合中获取
48
+ // 例如sysCode + "accessToken"
49
+ const sysCode = env || 'dev';
50
+ const dynamicCookieName = `${sysCode}_accessToken`;
51
+ if (req.cookies[dynamicCookieName]) {
52
+ return req.cookies[dynamicCookieName];
53
+ }
54
+ }
55
+ return null;
56
+ };
57
+ };
58
+ /**
59
+ * 基础JWT策略
60
+ * 仅验证JWT令牌的有效性,不验证用户存在性
61
+ * 适用于不需要用户数据库验证的场景
62
+ */
63
+ let JwtStrategy = class JwtStrategy extends (0, passport_1.PassportStrategy)(passport_jwt_1.Strategy) {
64
+ jwtConfig;
65
+ constructor(jwtConfig) {
66
+ super({
67
+ // 从请求头或cookie中提取JWT令牌
68
+ jwtFromRequest: extractJWT(jwtConfig.node_env),
69
+ // 忽略过期令牌
70
+ ignoreExpiration: false,
71
+ // 密钥
72
+ secretOrKey: jwtConfig.secret,
73
+ // 签发者验证 - 设为可选以提高兼容性
74
+ issuer: undefined,
75
+ // 受众验证 - 设为可选以提高兼容性
76
+ audience: undefined,
77
+ // 传递完整请求对象给validate函数
78
+ passReqToCallback: true,
79
+ });
80
+ this.jwtConfig = jwtConfig;
81
+ }
82
+ /**
83
+ * 验证令牌负载
84
+ * @param req 请求对象
85
+ * @param payload 令牌负载
86
+ * @returns 符合ICurrentUser接口的用户信息
87
+ */
88
+ async validate(req, payload) {
89
+ console.log('[JwtStrategy.validate] Called with payload:', JSON.stringify(payload));
90
+ // 从请求中提取原始token,解码获取未经解析的ID值
91
+ const token = extractJWT(this.jwtConfig.node_env)(req) || req.headers.authorization?.replace('Bearer ', '');
92
+ let userId = '';
93
+ if (token) {
94
+ try {
95
+ // 解码JWT token但不验证,以获取原始payload
96
+ const base64Url = token.split('.')[1];
97
+ const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
98
+ // 使用Buffer进行解码
99
+ const payloadStr = Buffer.from(base64, 'base64').toString('utf8');
100
+ // 使用json-bigint解析,防止大整数精度丢失
101
+ const rawPayload = json_bigint_1.default.parse(payloadStr);
102
+ // 尝试从原始payload中获取ID,json-bigint会将大整数转换为特殊的Number类型
103
+ // 该类型可以通过toString()方法获取原始字符串值
104
+ if (rawPayload.id) {
105
+ userId = rawPayload.id.toString();
106
+ }
107
+ else if (rawPayload.individualOrgId) {
108
+ userId = rawPayload.individualOrgId.toString();
109
+ }
110
+ else if (rawPayload.sub) {
111
+ userId = rawPayload.sub.toString();
112
+ }
113
+ else {
114
+ // 如果都没有,使用空字符串
115
+ }
116
+ }
117
+ catch {
118
+ // 如果解析失败,回退到原有方式
119
+ userId = String(payload.individualOrgId || payload.sub || payload.id);
120
+ }
121
+ }
122
+ else {
123
+ userId = String(payload.individualOrgId || payload.sub || payload.id);
124
+ }
125
+ const username = payload.individualOrgName || payload.username || payload.name || payload.nickname;
126
+ console.log('[JwtStrategy.validate] Extracted userId:', userId, 'username:', username);
127
+ // 将JWT负载转换为ICurrentUser接口(包含扩展字段)
128
+ return {
129
+ id: userId,
130
+ username: username,
131
+ email: payload.email,
132
+ role: payload.role || current_user_decorator_1.UserRole.USER, // 默认设置为USER角色
133
+ isActive: payload.isActive !== undefined ? payload.isActive : true,
134
+ lastLoginAt: payload.lastLoginAt ? new Date(payload.lastLoginAt) : undefined,
135
+ createdAt: payload.createdAt ? new Date(payload.createdAt) : new Date(),
136
+ updatedAt: payload.updatedAt ? new Date(payload.updatedAt) : new Date(),
137
+ // 扩展字段(来自内部 JWT payload)
138
+ nickname: payload.nickname,
139
+ avatar: payload.avatar,
140
+ phone: payload.phone,
141
+ orgId: payload.orgId,
142
+ };
143
+ }
144
+ };
145
+ exports.JwtStrategy = JwtStrategy;
146
+ exports.JwtStrategy = JwtStrategy = __decorate([
147
+ (0, common_1.Injectable)(),
148
+ __param(0, (0, common_1.Inject)('JWT_CONFIGS')),
149
+ __metadata("design:paramtypes", [Object])
150
+ ], JwtStrategy);
@@ -0,0 +1,17 @@
1
+ import { AxiosInstance } from 'axios';
2
+ import type { Request } from 'express';
3
+ /**
4
+ * 提供带用户信息的Axios实例的服务
5
+ * 该服务会自动将当前用户信息注入到HTTP请求头中
6
+ */
7
+ export declare class UserAwareAxiosService {
8
+ private readonly request;
9
+ private readonly axiosInstance;
10
+ constructor(request: Request);
11
+ /**
12
+ * 获取带用户信息的Axios实例
13
+ * @returns AxiosInstance
14
+ */
15
+ getInstance(): AxiosInstance;
16
+ }
17
+ //# sourceMappingURL=user-aware-axios.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-aware-axios.service.d.ts","sourceRoot":"","sources":["../../src/jwt/user-aware-axios.service.ts"],"names":[],"mappings":"AACA,OAAc,EAAE,aAAa,EAAgB,MAAM,OAAO,CAAC;AAE3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIvC;;;GAGG;AACH,qBACa,qBAAqB;IAGH,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFrD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;gBAEA,OAAO,EAAE,OAAO;IAqC9D;;;OAGG;IACH,WAAW,IAAI,aAAa;CAG7B"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ 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;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
+ };
44
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
45
+ return function (target, key) { decorator(target, key, paramIndex); }
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.UserAwareAxiosService = void 0;
49
+ const common_1 = require("@nestjs/common");
50
+ const axios_1 = __importStar(require("axios"));
51
+ const core_1 = require("@nestjs/core");
52
+ const EXCLUDE_HEADERS = new Set(['host', 'operator', 'operatorname']);
53
+ /**
54
+ * 提供带用户信息的Axios实例的服务
55
+ * 该服务会自动将当前用户信息注入到HTTP请求头中
56
+ */
57
+ let UserAwareAxiosService = class UserAwareAxiosService {
58
+ request;
59
+ axiosInstance;
60
+ constructor(request) {
61
+ this.request = request;
62
+ this.axiosInstance = axios_1.default.create();
63
+ // 添加请求拦截器,用于注入用户信息到请求头
64
+ this.axiosInstance.interceptors.request.use((config) => {
65
+ // 获取当前用户信息
66
+ const currentUser = this.request.user;
67
+ // 确保headers对象存在
68
+ if (!config.headers) {
69
+ config.headers = new axios_1.AxiosHeaders();
70
+ }
71
+ // 将原始请求中的所有headers复制到新的请求中
72
+ if (this.request.headers) {
73
+ for (const [key, value] of Object.entries(this.request.headers)) {
74
+ const lowerKey = key.toLowerCase();
75
+ // 跳过排除的头部
76
+ if (EXCLUDE_HEADERS.has(lowerKey)) {
77
+ continue;
78
+ }
79
+ config.headers.set(key, value);
80
+ }
81
+ }
82
+ // 如果存在当前用户信息,则将其注入到请求头中
83
+ if (currentUser) {
84
+ // 注入用户信息到请求头
85
+ // config.headers.set('operator', currentUser.id);
86
+ // config.headers.set('operatorname', currentUser.username);
87
+ config.headers.set('valid_token_successed', 'true');
88
+ }
89
+ return config;
90
+ });
91
+ }
92
+ /**
93
+ * 获取带用户信息的Axios实例
94
+ * @returns AxiosInstance
95
+ */
96
+ getInstance() {
97
+ return this.axiosInstance;
98
+ }
99
+ };
100
+ exports.UserAwareAxiosService = UserAwareAxiosService;
101
+ exports.UserAwareAxiosService = UserAwareAxiosService = __decorate([
102
+ (0, common_1.Injectable)(),
103
+ __param(0, (0, common_1.Inject)(core_1.REQUEST)),
104
+ __metadata("design:paramtypes", [Object])
105
+ ], UserAwareAxiosService);
@@ -0,0 +1,24 @@
1
+ /**
2
+ * JWT工具函数
3
+ */
4
+ /**
5
+ * 生成JWT配置选项
6
+ */
7
+ export interface JwtOptions {
8
+ secret: string;
9
+ expiresIn: string | number;
10
+ issuer?: string;
11
+ audience?: string;
12
+ }
13
+ /**
14
+ * 格式化JWT配置选项
15
+ */
16
+ export declare function formatJwtOptions(options: JwtOptions): {
17
+ secret: string;
18
+ signOptions: {
19
+ expiresIn: number;
20
+ issuer: string;
21
+ audience: string;
22
+ };
23
+ };
24
+ //# sourceMappingURL=jwt.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.utils.d.ts","sourceRoot":"","sources":["../../../src/jwt/utils/jwt.utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsBH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU;;;;;;;EAYnD"}