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,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Caller = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ /**
6
+ * 获取调用方身份(支持服务和用户两种类型)
7
+ *
8
+ * 用于 @UseEitherGuard(ServiceKeyGuard, JwtAuthGuard) 场景,
9
+ * 自动识别是服务调用还是用户调用。
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * @UseEitherGuard(ServiceKeyGuard, JwtAuthGuard)
14
+ * @Get('/internal/orders')
15
+ * getOrders(@Caller() caller: CallerIdentity) {
16
+ * if (caller.type === 'service') {
17
+ * // 服务调用,无用户上下文
18
+ * } else {
19
+ * console.log(caller.user.id);
20
+ * }
21
+ * }
22
+ * ```
23
+ */
24
+ exports.Caller = (0, common_1.createParamDecorator)((data, ctx) => {
25
+ const request = ctx.switchToHttp().getRequest();
26
+ // 检查用户身份(JWT 认证)
27
+ if (request.user) {
28
+ return {
29
+ type: 'user',
30
+ user: request.user,
31
+ };
32
+ }
33
+ // 服务调用(通过 ServiceKeyGuard)
34
+ return {
35
+ type: 'service',
36
+ };
37
+ });
@@ -0,0 +1,3 @@
1
+ export * from './use-either-guard.decorator';
2
+ export * from './caller.decorator';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/internal-auth/decorators/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,18 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./use-either-guard.decorator"), exports);
18
+ __exportStar(require("./caller.decorator"), exports);
@@ -0,0 +1,31 @@
1
+ import { CanActivate, ExecutionContext, Type } from '@nestjs/common';
2
+ import { ModuleRef, Reflector } from '@nestjs/core';
3
+ export declare const EITHER_GUARDS_KEY = "either-guards";
4
+ /**
5
+ * Either Guard 执行器
6
+ *
7
+ * 依次尝试每个 Guard,任一通过即可。
8
+ * 如果所有 Guard 都失败,抛出 UnauthorizedException。
9
+ */
10
+ export declare class EitherGuardExecutor implements CanActivate {
11
+ private readonly reflector;
12
+ private readonly moduleRef;
13
+ constructor(reflector: Reflector, moduleRef: ModuleRef);
14
+ canActivate(context: ExecutionContext): Promise<boolean>;
15
+ }
16
+ /**
17
+ * 组合多个 Guard,实现 OR 逻辑(任一通过即可)
18
+ *
19
+ * @param guards - 要组合的 Guard 类列表
20
+ * @returns 装饰器
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * // 服务调用或用户调用都可以
25
+ * @UseEitherGuard(ServiceApiKeyGuard, JwtAuthGuard)
26
+ * @Get('/internal/orders')
27
+ * getOrders(@Caller() caller: ServiceIdentity | UserIdentity) {}
28
+ * ```
29
+ */
30
+ export declare function UseEitherGuard(...guards: Type<CanActivate>[]): MethodDecorator & ClassDecorator;
31
+ //# sourceMappingURL=use-either-guard.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-either-guard.decorator.d.ts","sourceRoot":"","sources":["../../../src/internal-auth/decorators/use-either-guard.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EACX,gBAAgB,EAGhB,IAAI,EAGL,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpD,eAAO,MAAM,iBAAiB,kBAAkB,CAAC;AAEjD;;;;;GAKG;AACH,qBACa,mBAAoB,YAAW,WAAW;IAEnD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS;IAGjC,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;CAoC/D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,GAAG,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,GAC7B,eAAe,GAAG,cAAc,CAKlC"}
@@ -0,0 +1,79 @@
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.EitherGuardExecutor = exports.EITHER_GUARDS_KEY = void 0;
13
+ exports.UseEitherGuard = UseEitherGuard;
14
+ const common_1 = require("@nestjs/common");
15
+ const core_1 = require("@nestjs/core");
16
+ exports.EITHER_GUARDS_KEY = 'either-guards';
17
+ /**
18
+ * Either Guard 执行器
19
+ *
20
+ * 依次尝试每个 Guard,任一通过即可。
21
+ * 如果所有 Guard 都失败,抛出 UnauthorizedException。
22
+ */
23
+ let EitherGuardExecutor = class EitherGuardExecutor {
24
+ reflector;
25
+ moduleRef;
26
+ constructor(reflector, moduleRef) {
27
+ this.reflector = reflector;
28
+ this.moduleRef = moduleRef;
29
+ }
30
+ async canActivate(context) {
31
+ const guardClasses = this.reflector.get(exports.EITHER_GUARDS_KEY, context.getHandler());
32
+ if (!guardClasses || guardClasses.length === 0) {
33
+ // 没有配置任何 Guard,默认放行
34
+ return true;
35
+ }
36
+ const errors = [];
37
+ for (const GuardClass of guardClasses) {
38
+ try {
39
+ // 尝试从 DI 容器获取 Guard 实例
40
+ const guard = this.moduleRef.get(GuardClass, { strict: false });
41
+ const result = await guard.canActivate(context);
42
+ if (result) {
43
+ // 任一 Guard 通过即可
44
+ return true;
45
+ }
46
+ }
47
+ catch (error) {
48
+ // 记录错误信息,继续尝试下一个 Guard
49
+ errors.push(error instanceof Error ? error.message : 'Unknown auth error');
50
+ continue;
51
+ }
52
+ }
53
+ // 所有 Guard 都失败
54
+ throw new common_1.UnauthorizedException(`Authentication failed: ${errors.join(' | ')}`);
55
+ }
56
+ };
57
+ exports.EitherGuardExecutor = EitherGuardExecutor;
58
+ exports.EitherGuardExecutor = EitherGuardExecutor = __decorate([
59
+ (0, common_1.Injectable)(),
60
+ __metadata("design:paramtypes", [core_1.Reflector,
61
+ core_1.ModuleRef])
62
+ ], EitherGuardExecutor);
63
+ /**
64
+ * 组合多个 Guard,实现 OR 逻辑(任一通过即可)
65
+ *
66
+ * @param guards - 要组合的 Guard 类列表
67
+ * @returns 装饰器
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * // 服务调用或用户调用都可以
72
+ * @UseEitherGuard(ServiceApiKeyGuard, JwtAuthGuard)
73
+ * @Get('/internal/orders')
74
+ * getOrders(@Caller() caller: ServiceIdentity | UserIdentity) {}
75
+ * ```
76
+ */
77
+ function UseEitherGuard(...guards) {
78
+ return (0, common_1.applyDecorators)((0, common_1.SetMetadata)(exports.EITHER_GUARDS_KEY, guards), (0, common_1.UseGuards)(EitherGuardExecutor));
79
+ }
@@ -0,0 +1,2 @@
1
+ export * from './service-key.guard';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/internal-auth/guards/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,17 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./service-key.guard"), exports);
@@ -0,0 +1,36 @@
1
+ import { CanActivate, ExecutionContext } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ /**
4
+ * Service Key 验证配置
5
+ */
6
+ export interface ServiceKeyConfig {
7
+ /** 服务间共享的密钥 */
8
+ serviceKey: string;
9
+ /** Header 名称,默认 'x-service-key' */
10
+ headerName?: string;
11
+ }
12
+ export declare const SERVICE_KEY_CONFIG = "SERVICE_KEY_CONFIG";
13
+ /**
14
+ * 服务间调用 Service Key 认证守卫
15
+ *
16
+ * 用于验证服务间调用的身份。服务 A 调用服务 B 时,
17
+ * 在请求头中携带 `X-Service-Key`,由本 Guard 验证。
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * // 仅允许服务调用
22
+ * @UseGuards(ServiceKeyGuard)
23
+ * @Get('/internal/config')
24
+ * getConfig() {}
25
+ * ```
26
+ */
27
+ export declare class ServiceKeyGuard implements CanActivate {
28
+ private readonly reflector;
29
+ private readonly config?;
30
+ private readonly headerName;
31
+ private readonly serviceKey;
32
+ constructor(reflector: Reflector, config?: ServiceKeyConfig);
33
+ canActivate(context: ExecutionContext): Promise<boolean>;
34
+ private extractServiceKey;
35
+ }
36
+ //# sourceMappingURL=service-key.guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-key.guard.d.ts","sourceRoot":"","sources":["../../../src/internal-auth/guards/service-key.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EACX,gBAAgB,EAIjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,eAAe;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAEvD;;;;;;;;;;;;;GAaG;AACH,qBACa,eAAgB,YAAW,WAAW;IAK/C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAG1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAP1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAGjB,SAAS,EAAE,SAAS,EAGpB,MAAM,CAAC,EAAE,gBAAgB;IAQtC,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IA+B9D,OAAO,CAAC,iBAAiB;CAU1B"}
@@ -0,0 +1,86 @@
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.ServiceKeyGuard = exports.SERVICE_KEY_CONFIG = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const core_1 = require("@nestjs/core");
18
+ const public_decorator_1 = require("../../jwt/decorators/public.decorator");
19
+ exports.SERVICE_KEY_CONFIG = 'SERVICE_KEY_CONFIG';
20
+ /**
21
+ * 服务间调用 Service Key 认证守卫
22
+ *
23
+ * 用于验证服务间调用的身份。服务 A 调用服务 B 时,
24
+ * 在请求头中携带 `X-Service-Key`,由本 Guard 验证。
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * // 仅允许服务调用
29
+ * @UseGuards(ServiceKeyGuard)
30
+ * @Get('/internal/config')
31
+ * getConfig() {}
32
+ * ```
33
+ */
34
+ let ServiceKeyGuard = class ServiceKeyGuard {
35
+ reflector;
36
+ config;
37
+ headerName;
38
+ serviceKey;
39
+ constructor(reflector, config) {
40
+ this.reflector = reflector;
41
+ this.config = config;
42
+ this.headerName = config?.headerName || 'x-service-key';
43
+ // 优先使用注入的配置,否则从环境变量读取
44
+ this.serviceKey = config?.serviceKey || process.env.INTERNAL_SERVICE_KEY || '';
45
+ console.log('[ServiceKeyGuard] constructor, serviceKey:', this.serviceKey ? '***' : 'EMPTY');
46
+ }
47
+ async canActivate(context) {
48
+ // 检查路由是否标记为公开
49
+ const isPublic = this.reflector.getAllAndOverride(public_decorator_1.IS_PUBLIC_KEY, [
50
+ context.getHandler(),
51
+ context.getClass(),
52
+ ]);
53
+ if (isPublic) {
54
+ return true;
55
+ }
56
+ const request = context.switchToHttp().getRequest();
57
+ const serviceKey = this.extractServiceKey(request);
58
+ if (!serviceKey) {
59
+ throw new common_1.UnauthorizedException('Missing service key');
60
+ }
61
+ if (!this.serviceKey) {
62
+ throw new common_1.UnauthorizedException('Service key not configured');
63
+ }
64
+ if (serviceKey !== this.serviceKey) {
65
+ throw new common_1.UnauthorizedException('Invalid service key');
66
+ }
67
+ return true;
68
+ }
69
+ extractServiceKey(request) {
70
+ const serviceKey = request.headers[this.headerName];
71
+ if (typeof serviceKey === 'string') {
72
+ return serviceKey;
73
+ }
74
+ if (Array.isArray(serviceKey) && serviceKey.length > 0) {
75
+ return serviceKey[0];
76
+ }
77
+ return null;
78
+ }
79
+ };
80
+ exports.ServiceKeyGuard = ServiceKeyGuard;
81
+ exports.ServiceKeyGuard = ServiceKeyGuard = __decorate([
82
+ (0, common_1.Injectable)(),
83
+ __param(1, (0, common_1.Optional)()),
84
+ __param(1, (0, common_1.Inject)(exports.SERVICE_KEY_CONFIG)),
85
+ __metadata("design:paramtypes", [core_1.Reflector, Object])
86
+ ], ServiceKeyGuard);
@@ -0,0 +1,43 @@
1
+ /**
2
+ * 服务间调用认证模块
3
+ *
4
+ * 提供服务间调用的认证能力:
5
+ * - Service Key 认证:用于服务间调用(共享密钥)
6
+ * - JWT 透传:用于服务代用户调用(需用户上下文)
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * // 1. 在 AppModule 中注册
11
+ * import { InternalAuthModule, EnvService } from 'yz-web-server-shared';
12
+ *
13
+ * @Module({
14
+ * imports: [
15
+ * InternalAuthModule.forRootAsync({
16
+ * useFactory: (envService: EnvService) => ({
17
+ * serviceKey: envService.getItem('INTERNAL_SERVICE_KEY'),
18
+ * }),
19
+ * inject: [EnvService],
20
+ * }),
21
+ * ],
22
+ * })
23
+ * export class AppModule {}
24
+ *
25
+ * // 2. 在 Controller 中使用
26
+ * import { ServiceKeyGuard, UseEitherGuard, Caller } from 'yz-web-server-shared';
27
+ *
28
+ * // 仅允许服务调用
29
+ * @UseGuards(ServiceKeyGuard)
30
+ * @Get('/internal/config')
31
+ * getConfig() {}
32
+ *
33
+ * // 服务或用户调用都可以
34
+ * @UseEitherGuard(ServiceKeyGuard, JwtAuthGuard)
35
+ * @Get('/internal/orders')
36
+ * getOrders(@Caller() caller: CallerIdentity) {}
37
+ * ```
38
+ */
39
+ export * from './internal-auth.module';
40
+ export * from './guards';
41
+ export * from './decorators';
42
+ export * from './internal-http.service';
43
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/internal-auth/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAGH,cAAc,wBAAwB,CAAC;AAGvC,cAAc,UAAU,CAAC;AAGzB,cAAc,cAAc,CAAC;AAG7B,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * 服务间调用认证模块
4
+ *
5
+ * 提供服务间调用的认证能力:
6
+ * - Service Key 认证:用于服务间调用(共享密钥)
7
+ * - JWT 透传:用于服务代用户调用(需用户上下文)
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * // 1. 在 AppModule 中注册
12
+ * import { InternalAuthModule, EnvService } from 'yz-web-server-shared';
13
+ *
14
+ * @Module({
15
+ * imports: [
16
+ * InternalAuthModule.forRootAsync({
17
+ * useFactory: (envService: EnvService) => ({
18
+ * serviceKey: envService.getItem('INTERNAL_SERVICE_KEY'),
19
+ * }),
20
+ * inject: [EnvService],
21
+ * }),
22
+ * ],
23
+ * })
24
+ * export class AppModule {}
25
+ *
26
+ * // 2. 在 Controller 中使用
27
+ * import { ServiceKeyGuard, UseEitherGuard, Caller } from 'yz-web-server-shared';
28
+ *
29
+ * // 仅允许服务调用
30
+ * @UseGuards(ServiceKeyGuard)
31
+ * @Get('/internal/config')
32
+ * getConfig() {}
33
+ *
34
+ * // 服务或用户调用都可以
35
+ * @UseEitherGuard(ServiceKeyGuard, JwtAuthGuard)
36
+ * @Get('/internal/orders')
37
+ * getOrders(@Caller() caller: CallerIdentity) {}
38
+ * ```
39
+ */
40
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
41
+ if (k2 === undefined) k2 = k;
42
+ var desc = Object.getOwnPropertyDescriptor(m, k);
43
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
44
+ desc = { enumerable: true, get: function() { return m[k]; } };
45
+ }
46
+ Object.defineProperty(o, k2, desc);
47
+ }) : (function(o, m, k, k2) {
48
+ if (k2 === undefined) k2 = k;
49
+ o[k2] = m[k];
50
+ }));
51
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
52
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
53
+ };
54
+ Object.defineProperty(exports, "__esModule", { value: true });
55
+ // Module
56
+ __exportStar(require("./internal-auth.module"), exports);
57
+ // Guards
58
+ __exportStar(require("./guards"), exports);
59
+ // Decorators
60
+ __exportStar(require("./decorators"), exports);
61
+ // HTTP Client
62
+ __exportStar(require("./internal-http.service"), exports);
@@ -0,0 +1,62 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ /**
3
+ * 服务间调用认证模块配置
4
+ */
5
+ export interface InternalAuthModuleOptions {
6
+ /**
7
+ * 服务间共享的密钥
8
+ */
9
+ serviceKey?: string;
10
+ /**
11
+ * 请求超时时间(毫秒),默认 10000
12
+ */
13
+ timeout?: number;
14
+ }
15
+ /**
16
+ * 服务间调用认证模块
17
+ *
18
+ * 提供服务间调用的认证能力:
19
+ * - Service Key 认证(服务身份)
20
+ * - InternalHttpService(服务间 HTTP 调用)
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * // 在 AppModule 中注册
25
+ * @Module({
26
+ * imports: [
27
+ * InternalAuthModule.forRootAsync({
28
+ * useFactory: (envService: EnvService) => ({
29
+ * serviceKey: envService.getItem('INTERNAL_SERVICE_KEY'),
30
+ * }),
31
+ * inject: [EnvService],
32
+ * }),
33
+ * ],
34
+ * })
35
+ * export class AppModule {}
36
+ *
37
+ * // 在 Service 中使用
38
+ * @Injectable()
39
+ * export class MyService {
40
+ * constructor(private readonly internalHttp: InternalHttpService) {}
41
+ *
42
+ * async getPlatformConfig() {
43
+ * return this.internalHttp.get('platform', '/portal/api/platform/internal/config');
44
+ * }
45
+ * }
46
+ * ```
47
+ */
48
+ export declare class InternalAuthModule {
49
+ /**
50
+ * 同步注册模块
51
+ */
52
+ static forRoot(options?: InternalAuthModuleOptions): DynamicModule;
53
+ /**
54
+ * 异步注册模块(支持依赖注入配置)
55
+ */
56
+ static forRootAsync(options: {
57
+ imports?: any[];
58
+ useFactory: (...args: any[]) => Promise<InternalAuthModuleOptions> | InternalAuthModuleOptions;
59
+ inject?: any[];
60
+ }): DynamicModule;
61
+ }
62
+ //# sourceMappingURL=internal-auth.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-auth.module.d.ts","sourceRoot":"","sources":["../../src/internal-auth/internal-auth.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,MAAM,gBAAgB,CAAC;AAajE;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBACa,kBAAkB;IAC7B;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,GAAE,yBAA8B,GAAG,aAAa;IA6BtE;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE;QAC3B,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;QAChB,UAAU,EAAE,CACV,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,OAAO,CAAC,yBAAyB,CAAC,GAAG,yBAAyB,CAAC;QACpE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;KAChB,GAAG,aAAa;CAiClB"}
@@ -0,0 +1,118 @@
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 InternalAuthModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.InternalAuthModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const service_key_guard_1 = require("./guards/service-key.guard");
13
+ const use_either_guard_decorator_1 = require("./decorators/use-either-guard.decorator");
14
+ const internal_http_service_1 = require("./internal-http.service");
15
+ /**
16
+ * 服务间调用认证模块
17
+ *
18
+ * 提供服务间调用的认证能力:
19
+ * - Service Key 认证(服务身份)
20
+ * - InternalHttpService(服务间 HTTP 调用)
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * // 在 AppModule 中注册
25
+ * @Module({
26
+ * imports: [
27
+ * InternalAuthModule.forRootAsync({
28
+ * useFactory: (envService: EnvService) => ({
29
+ * serviceKey: envService.getItem('INTERNAL_SERVICE_KEY'),
30
+ * }),
31
+ * inject: [EnvService],
32
+ * }),
33
+ * ],
34
+ * })
35
+ * export class AppModule {}
36
+ *
37
+ * // 在 Service 中使用
38
+ * @Injectable()
39
+ * export class MyService {
40
+ * constructor(private readonly internalHttp: InternalHttpService) {}
41
+ *
42
+ * async getPlatformConfig() {
43
+ * return this.internalHttp.get('platform', '/portal/api/platform/internal/config');
44
+ * }
45
+ * }
46
+ * ```
47
+ */
48
+ let InternalAuthModule = InternalAuthModule_1 = class InternalAuthModule {
49
+ /**
50
+ * 同步注册模块
51
+ */
52
+ static forRoot(options = {}) {
53
+ const providers = [
54
+ service_key_guard_1.ServiceKeyGuard,
55
+ use_either_guard_decorator_1.EitherGuardExecutor,
56
+ internal_http_service_1.InternalHttpService,
57
+ ];
58
+ if (options.serviceKey) {
59
+ providers.push({
60
+ provide: service_key_guard_1.SERVICE_KEY_CONFIG,
61
+ useValue: { serviceKey: options.serviceKey },
62
+ });
63
+ providers.push({
64
+ provide: internal_http_service_1.INTERNAL_HTTP_CONFIG,
65
+ useValue: {
66
+ serviceKey: options.serviceKey,
67
+ timeout: options.timeout,
68
+ },
69
+ });
70
+ }
71
+ return {
72
+ module: InternalAuthModule_1,
73
+ providers,
74
+ exports: [service_key_guard_1.ServiceKeyGuard, use_either_guard_decorator_1.EitherGuardExecutor, internal_http_service_1.InternalHttpService],
75
+ global: true,
76
+ };
77
+ }
78
+ /**
79
+ * 异步注册模块(支持依赖注入配置)
80
+ */
81
+ static forRootAsync(options) {
82
+ return {
83
+ module: InternalAuthModule_1,
84
+ imports: options.imports || [],
85
+ providers: [
86
+ service_key_guard_1.ServiceKeyGuard,
87
+ use_either_guard_decorator_1.EitherGuardExecutor,
88
+ internal_http_service_1.InternalHttpService,
89
+ {
90
+ provide: service_key_guard_1.SERVICE_KEY_CONFIG,
91
+ useFactory: async (...args) => {
92
+ const config = await options.useFactory(...args);
93
+ console.log('[InternalAuthModule] SERVICE_KEY_CONFIG useFactory called, serviceKey:', config.serviceKey);
94
+ return { serviceKey: config.serviceKey };
95
+ },
96
+ inject: options.inject || [],
97
+ },
98
+ {
99
+ provide: internal_http_service_1.INTERNAL_HTTP_CONFIG,
100
+ useFactory: async (...args) => {
101
+ const config = await options.useFactory(...args);
102
+ return {
103
+ serviceKey: config.serviceKey,
104
+ timeout: config.timeout,
105
+ };
106
+ },
107
+ inject: options.inject || [],
108
+ },
109
+ ],
110
+ exports: [service_key_guard_1.ServiceKeyGuard, use_either_guard_decorator_1.EitherGuardExecutor, internal_http_service_1.InternalHttpService],
111
+ global: true,
112
+ };
113
+ }
114
+ };
115
+ exports.InternalAuthModule = InternalAuthModule;
116
+ exports.InternalAuthModule = InternalAuthModule = InternalAuthModule_1 = __decorate([
117
+ (0, common_1.Module)({})
118
+ ], InternalAuthModule);