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
package/README.md ADDED
@@ -0,0 +1,51 @@
1
+ # yz-web-server-shared
2
+
3
+ NestJS 共享模块库,为 YingziOS 平台提供统一的服务端基础设施。
4
+
5
+ ## 功能模块
6
+
7
+ - **Sequelize** - 数据库 ORM 模块
8
+ - **JWT** - JSON Web Token 认证
9
+ - **Swagger** - API 文档生成
10
+ - **Logger** - 日志服务(基于 Winston)
11
+ - **Apollo** - Apollo 配置中心客户端
12
+ - **Nacos** - Nacos 服务发现与配置
13
+ - **Snowflake** - 分布式 ID 生成器
14
+ - **Cache** - 缓存服务(支持 Redis/SQLite)
15
+ - **Env** - 环境变量管理
16
+ - **RESTful** - RESTful API 工具
17
+
18
+ ## 安装
19
+
20
+ ```bash
21
+ pnpm add yz-web-server-shared
22
+ ```
23
+
24
+ ## 使用示例
25
+
26
+ ```typescript
27
+ import { SequelizeModule } from 'yz-web-server-shared/sequelize';
28
+ import { JwtModule } from 'yz-web-server-shared/jwt';
29
+
30
+ @Module({
31
+ imports: [
32
+ SequelizeModule.forRoot({
33
+ // 配置选项
34
+ }),
35
+ JwtModule.register({
36
+ // JWT 配置
37
+ }),
38
+ ],
39
+ })
40
+ export class AppModule {}
41
+ ```
42
+
43
+ ## 依赖要求
44
+
45
+ - Node.js >= 18
46
+ - NestJS >= 11
47
+ - TypeScript >= 5
48
+
49
+ ## License
50
+
51
+ MIT
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Apollo配置接口
3
+ */
4
+ export interface ApolloConfig {
5
+ /**
6
+ * Apollo服务地址
7
+ */
8
+ host?: string;
9
+ /**
10
+ * 应用ID
11
+ */
12
+ appId?: string;
13
+ /**
14
+ * 集群名称
15
+ */
16
+ clusterName?: string;
17
+ /**
18
+ * 命名空间
19
+ */
20
+ namespaces?: string[];
21
+ /**
22
+ * Apollo访问密钥
23
+ */
24
+ secret?: string;
25
+ }
26
+ //# sourceMappingURL=apollo.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apollo.config.d.ts","sourceRoot":"","sources":["../../src/apollo/apollo.config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,13 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import { ApolloConfig } from './apollo.config';
3
+ /**
4
+ * Apollo模块
5
+ */
6
+ export declare class ApolloModule {
7
+ /**
8
+ * 静态方法:配置Apollo模块
9
+ * 用于根模块注册
10
+ */
11
+ static forRoot(config: ApolloConfig): DynamicModule;
12
+ }
13
+ //# sourceMappingURL=apollo.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apollo.module.d.ts","sourceRoot":"","sources":["../../src/apollo/apollo.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAkB,MAAM,gBAAgB,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C;;GAEG;AACH,qBAEa,YAAY;IACvB;;;OAGG;IACH,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa;CAuCpD"}
@@ -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
+ var ApolloModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.ApolloModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const apollo_service_1 = require("./apollo.service");
13
+ const apollo_client_1 = require("@vodyani/apollo-client");
14
+ /**
15
+ * Apollo模块
16
+ */
17
+ let ApolloModule = ApolloModule_1 = class ApolloModule {
18
+ /**
19
+ * 静态方法:配置Apollo模块
20
+ * 用于根模块注册
21
+ */
22
+ static forRoot(config) {
23
+ const apolloClient = new apollo_client_1.ApolloHttpClient({
24
+ appId: config.appId,
25
+ configServerUrl: config.host,
26
+ clusterName: config.clusterName,
27
+ secret: config.secret,
28
+ });
29
+ const namespaces = config.namespaces || ['application'];
30
+ return {
31
+ module: ApolloModule_1,
32
+ providers: [
33
+ {
34
+ provide: 'APOLLO_NAMESPACE_CONFIGS',
35
+ useFactory: async () => {
36
+ const configs = {};
37
+ const promises = namespaces.map(async (namespace) => {
38
+ const config = await apolloClient.getConfigByCache(namespace, 'properties');
39
+ return { namespace, config };
40
+ });
41
+ const results = await Promise.all(promises);
42
+ results.forEach(({ namespace, config }) => {
43
+ configs[namespace] = config;
44
+ });
45
+ return configs;
46
+ },
47
+ },
48
+ {
49
+ provide: 'APOLLO_SERVICE',
50
+ useClass: apollo_service_1.ApolloService,
51
+ },
52
+ ],
53
+ exports: ['APOLLO_SERVICE'],
54
+ };
55
+ }
56
+ };
57
+ exports.ApolloModule = ApolloModule;
58
+ exports.ApolloModule = ApolloModule = ApolloModule_1 = __decorate([
59
+ (0, common_1.Global)(),
60
+ (0, common_1.Module)({})
61
+ ], ApolloModule);
@@ -0,0 +1,17 @@
1
+ export interface IApolloService {
2
+ getConfig(namespace: string): Record<string, any>;
3
+ }
4
+ /**
5
+ * Apollo服务
6
+ * 实现与携程Apollo配置中心的对接
7
+ */
8
+ export declare class ApolloService implements IApolloService {
9
+ protected readonly configs: {
10
+ [key: string]: Record<string, any>;
11
+ };
12
+ constructor(configs: {
13
+ [key: string]: Record<string, any>;
14
+ });
15
+ getConfig(namespace: string): Record<string, any>;
16
+ }
17
+ //# sourceMappingURL=apollo.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apollo.service.d.ts","sourceRoot":"","sources":["../../src/apollo/apollo.service.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACnD;AAED;;;GAGG;AACH,qBACa,aAAc,YAAW,cAAc;IAGhD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE;gBAA/C,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE;IAGpE,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAGlD"}
@@ -0,0 +1,35 @@
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.ApolloService = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ /**
18
+ * Apollo服务
19
+ * 实现与携程Apollo配置中心的对接
20
+ */
21
+ let ApolloService = class ApolloService {
22
+ configs;
23
+ constructor(configs) {
24
+ this.configs = configs;
25
+ }
26
+ getConfig(namespace) {
27
+ return this.configs[namespace];
28
+ }
29
+ };
30
+ exports.ApolloService = ApolloService;
31
+ exports.ApolloService = ApolloService = __decorate([
32
+ (0, common_1.Injectable)(),
33
+ __param(0, (0, common_1.Inject)('APOLLO_NAMESPACE_CONFIGS')),
34
+ __metadata("design:paramtypes", [Object])
35
+ ], ApolloService);
@@ -0,0 +1,5 @@
1
+ export * from './apollo.module';
2
+ import { ApolloConfig } from './apollo.config';
3
+ import { IApolloService } from './apollo.service';
4
+ export type { ApolloConfig, IApolloService };
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/apollo/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,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("./apollo.module"), exports);
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Cache 模块配置接口
3
+ */
4
+ export interface ICacheConfig {
5
+ /**
6
+ * 缓存驱动类型
7
+ * - memory: 内存存储(临时测试用,Pod 重启后数据丢失)
8
+ * - sqlite: 本地 SQLite 文件存储(开发环境推荐)
9
+ * - redis: Redis 存储(生产环境推荐)
10
+ */
11
+ driver: 'memory' | 'sqlite' | 'redis';
12
+ /**
13
+ * SQLite 配置(driver = 'sqlite' 时有效)
14
+ * 数据库文件路径,如 './cache.db'
15
+ */
16
+ sqlitePath?: string;
17
+ /**
18
+ * Redis 配置(driver = 'redis' 时有效)
19
+ * Redis 连接 URL,如 'redis://localhost:6379'
20
+ */
21
+ redisUrl?: string;
22
+ /**
23
+ * 命名空间,用于隔离不同应用的缓存
24
+ * 默认: 'cache'
25
+ */
26
+ namespace?: string;
27
+ }
28
+ //# sourceMappingURL=cache.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.config.d.ts","sourceRoot":"","sources":["../../src/cache/cache.config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IAEtC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,39 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import type { ICacheConfig } from './cache.config';
3
+ /**
4
+ * 缓存模块
5
+ * 提供统一的 KV 缓存能力,支持 SQLite(本地开发)和 Redis(生产环境)
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * // 静态配置
10
+ * CacheModule.forRoot({
11
+ * driver: 'sqlite',
12
+ * sqlitePath: './cache.db',
13
+ * })
14
+ *
15
+ * // 异步配置
16
+ * CacheModule.forRootAsync({
17
+ * useFactory: (envService: EnvService) => ({
18
+ * driver: envService.getItem('CACHE_DRIVER') as 'sqlite' | 'redis',
19
+ * sqlitePath: envService.getItem('CACHE_SQLITE_PATH'),
20
+ * redisUrl: envService.getItem('REDIS_URL'),
21
+ * }),
22
+ * inject: [EnvService],
23
+ * })
24
+ * ```
25
+ */
26
+ export declare class CacheModule {
27
+ /**
28
+ * 静态配置
29
+ */
30
+ static forRoot(config: ICacheConfig): DynamicModule;
31
+ /**
32
+ * 异步配置
33
+ */
34
+ static forRootAsync(options: {
35
+ useFactory: (...args: any[]) => Promise<ICacheConfig> | ICacheConfig;
36
+ inject?: any[];
37
+ }): DynamicModule;
38
+ }
39
+ //# sourceMappingURL=cache.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.module.d.ts","sourceRoot":"","sources":["../../src/cache/cache.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAkB,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAEa,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa;IAcnD;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE;QAC3B,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC;QACrE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;KAChB,GAAG,aAAa;CAclB"}
@@ -0,0 +1,75 @@
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 CacheModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.CacheModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const cache_service_1 = require("./cache.service");
13
+ /**
14
+ * 缓存模块
15
+ * 提供统一的 KV 缓存能力,支持 SQLite(本地开发)和 Redis(生产环境)
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * // 静态配置
20
+ * CacheModule.forRoot({
21
+ * driver: 'sqlite',
22
+ * sqlitePath: './cache.db',
23
+ * })
24
+ *
25
+ * // 异步配置
26
+ * CacheModule.forRootAsync({
27
+ * useFactory: (envService: EnvService) => ({
28
+ * driver: envService.getItem('CACHE_DRIVER') as 'sqlite' | 'redis',
29
+ * sqlitePath: envService.getItem('CACHE_SQLITE_PATH'),
30
+ * redisUrl: envService.getItem('REDIS_URL'),
31
+ * }),
32
+ * inject: [EnvService],
33
+ * })
34
+ * ```
35
+ */
36
+ let CacheModule = CacheModule_1 = class CacheModule {
37
+ /**
38
+ * 静态配置
39
+ */
40
+ static forRoot(config) {
41
+ return {
42
+ module: CacheModule_1,
43
+ providers: [
44
+ {
45
+ provide: 'CACHE_CONFIG',
46
+ useValue: config,
47
+ },
48
+ cache_service_1.CacheService,
49
+ ],
50
+ exports: [cache_service_1.CacheService],
51
+ };
52
+ }
53
+ /**
54
+ * 异步配置
55
+ */
56
+ static forRootAsync(options) {
57
+ return {
58
+ module: CacheModule_1,
59
+ providers: [
60
+ {
61
+ provide: 'CACHE_CONFIG',
62
+ useFactory: options.useFactory,
63
+ inject: options.inject || [],
64
+ },
65
+ cache_service_1.CacheService,
66
+ ],
67
+ exports: [cache_service_1.CacheService],
68
+ };
69
+ }
70
+ };
71
+ exports.CacheModule = CacheModule;
72
+ exports.CacheModule = CacheModule = CacheModule_1 = __decorate([
73
+ (0, common_1.Global)(),
74
+ (0, common_1.Module)({})
75
+ ], CacheModule);
@@ -0,0 +1,49 @@
1
+ import { OnModuleDestroy } from '@nestjs/common';
2
+ import type { ICacheConfig } from './cache.config';
3
+ /**
4
+ * 缓存服务
5
+ * 提供统一的 KV 缓存接口,支持 SQLite(本地开发)和 Redis(生产环境)
6
+ */
7
+ export declare class CacheService implements OnModuleDestroy {
8
+ private readonly config;
9
+ private keyv;
10
+ private readonly logger;
11
+ constructor(config: ICacheConfig);
12
+ /**
13
+ * 根据配置创建 Keyv 实例
14
+ */
15
+ private createKeyvInstance;
16
+ /**
17
+ * 设置缓存
18
+ * @param key 缓存键
19
+ * @param value 缓存值
20
+ * @param ttl 过期时间(毫秒),不传则永不过期
21
+ */
22
+ set<T = any>(key: string, value: T, ttl?: number): Promise<boolean>;
23
+ /**
24
+ * 获取缓存
25
+ * @param key 缓存键
26
+ * @returns 缓存值,不存在或已过期返回 undefined
27
+ */
28
+ get<T = any>(key: string): Promise<T | undefined>;
29
+ /**
30
+ * 删除缓存
31
+ * @param key 缓存键
32
+ * @returns 是否删除成功
33
+ */
34
+ delete(key: string): Promise<boolean>;
35
+ /**
36
+ * 检查缓存是否存在
37
+ * @param key 缓存键
38
+ */
39
+ has(key: string): Promise<boolean>;
40
+ /**
41
+ * 清空当前命名空间下的所有缓存
42
+ */
43
+ clear(): Promise<void>;
44
+ /**
45
+ * 断开连接(模块销毁时调用)
46
+ */
47
+ onModuleDestroy(): Promise<void>;
48
+ }
49
+ //# sourceMappingURL=cache.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.service.d.ts","sourceRoot":"","sources":["../../src/cache/cache.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,eAAe,EAAU,MAAM,gBAAgB,CAAC;AAK7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA6HnD;;;GAGG;AACH,qBACa,YAAa,YAAW,eAAe;IAMhD,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;gBAIrC,MAAM,EAAE,YAAY;IAKvC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;;;;OAKG;IACG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzE;;;;OAIG;IACG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIvD;;;;OAIG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI3C;;;OAGG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvC"}
@@ -0,0 +1,208 @@
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
+ var CacheService_1;
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.CacheService = void 0;
20
+ const common_1 = require("@nestjs/common");
21
+ const node_fs_1 = require("node:fs");
22
+ const node_path_1 = __importDefault(require("node:path"));
23
+ const node_sqlite_1 = require("node:sqlite");
24
+ const keyv_1 = __importDefault(require("keyv"));
25
+ class SqliteBackedStore {
26
+ logger = new common_1.Logger(SqliteBackedStore.name);
27
+ db;
28
+ constructor(sqlitePath) {
29
+ const resolvedPath = node_path_1.default.resolve(process.cwd(), sqlitePath);
30
+ (0, node_fs_1.mkdirSync)(node_path_1.default.dirname(resolvedPath), { recursive: true });
31
+ this.db = new node_sqlite_1.DatabaseSync(resolvedPath, {
32
+ timeout: 5000,
33
+ enableForeignKeyConstraints: true,
34
+ });
35
+ this.db.exec(`
36
+ PRAGMA journal_mode = WAL;
37
+ PRAGMA synchronous = NORMAL;
38
+ CREATE TABLE IF NOT EXISTS keyv_cache (
39
+ key TEXT PRIMARY KEY,
40
+ value TEXT NOT NULL,
41
+ expires_at INTEGER
42
+ );
43
+ CREATE INDEX IF NOT EXISTS idx_keyv_cache_expires_at
44
+ ON keyv_cache(expires_at);
45
+ `);
46
+ this.logger.log(`使用 node:sqlite 缓存: ${resolvedPath}`);
47
+ }
48
+ shouldTraceKey(key) {
49
+ return key.startsWith('portal:auth:');
50
+ }
51
+ async get(key) {
52
+ this.cleanupExpired(key);
53
+ const row = this.db
54
+ .prepare('SELECT value FROM keyv_cache WHERE key = ?')
55
+ .get(key);
56
+ if (!row) {
57
+ if (this.shouldTraceKey(key)) {
58
+ this.logger.debug(`[cache:get:miss] key=${key}`);
59
+ }
60
+ return undefined;
61
+ }
62
+ if (this.shouldTraceKey(key)) {
63
+ this.logger.debug(`[cache:get:hit] key=${key}`);
64
+ }
65
+ return JSON.parse(row.value);
66
+ }
67
+ async set(key, value, ttl) {
68
+ const expiresAt = ttl ? Date.now() + ttl : null;
69
+ this.db
70
+ .prepare(`
71
+ INSERT INTO keyv_cache (key, value, expires_at)
72
+ VALUES (?, ?, ?)
73
+ ON CONFLICT(key) DO UPDATE SET
74
+ value = excluded.value,
75
+ expires_at = excluded.expires_at
76
+ `)
77
+ .run(key, JSON.stringify(value), expiresAt);
78
+ if (this.shouldTraceKey(key)) {
79
+ this.logger.debug(`[cache:set] key=${key} ttlMs=${ttl ?? 'none'} expiresAt=${expiresAt ?? 'none'}`);
80
+ }
81
+ return true;
82
+ }
83
+ async delete(key) {
84
+ const result = this.db
85
+ .prepare('DELETE FROM keyv_cache WHERE key = ?')
86
+ .run(key);
87
+ if (this.shouldTraceKey(key)) {
88
+ this.logger.debug(`[cache:delete] key=${key} deleted=${Number(result.changes) > 0}`);
89
+ }
90
+ return Number(result.changes) > 0;
91
+ }
92
+ async clear() {
93
+ this.db.exec('DELETE FROM keyv_cache');
94
+ this.logger.warn('[cache:clear] 已清空整个 sqlite 缓存表 keyv_cache');
95
+ }
96
+ async has(key) {
97
+ return (await this.get(key)) !== undefined;
98
+ }
99
+ async disconnect() {
100
+ if (this.db.isOpen) {
101
+ this.db.close();
102
+ }
103
+ }
104
+ cleanupExpired(key) {
105
+ const now = Date.now();
106
+ if (key) {
107
+ this.db
108
+ .prepare('DELETE FROM keyv_cache WHERE key = ? AND expires_at IS NOT NULL AND expires_at <= ?')
109
+ .run(key, now);
110
+ return;
111
+ }
112
+ this.db
113
+ .prepare('DELETE FROM keyv_cache WHERE expires_at IS NOT NULL AND expires_at <= ?')
114
+ .run(now);
115
+ }
116
+ }
117
+ /**
118
+ * 缓存服务
119
+ * 提供统一的 KV 缓存接口,支持 SQLite(本地开发)和 Redis(生产环境)
120
+ */
121
+ let CacheService = CacheService_1 = class CacheService {
122
+ config;
123
+ keyv;
124
+ logger = new common_1.Logger(CacheService_1.name);
125
+ constructor(config) {
126
+ this.config = config;
127
+ this.keyv = this.createKeyvInstance();
128
+ }
129
+ /**
130
+ * 根据配置创建 Keyv 实例
131
+ */
132
+ createKeyvInstance() {
133
+ const namespace = this.config.namespace || 'cache';
134
+ // 内存缓存 - 临时测试用,Pod 重启后数据丢失
135
+ if (this.config.driver === 'memory') {
136
+ this.logger.log(`使用内存缓存 (namespace=${namespace}) - 警告: Pod 重启后数据将丢失`);
137
+ return new keyv_1.default({ namespace });
138
+ }
139
+ if (this.config.driver === 'redis') {
140
+ try {
141
+ // Redis 驱动需要动态导入
142
+ const KeyvRedis = require('@keyv/redis').default;
143
+ const store = new KeyvRedis(this.config.redisUrl || 'redis://localhost:6379');
144
+ this.logger.log(`使用 Redis 缓存: ${this.config.redisUrl}`);
145
+ return new keyv_1.default({ store, namespace });
146
+ }
147
+ catch (err) {
148
+ this.logger.warn(`Redis 驱动加载失败,回退到内存缓存: ${err.message}`);
149
+ return new keyv_1.default({ namespace });
150
+ }
151
+ }
152
+ const sqlitePath = this.config.sqlitePath || './cache/cache.db';
153
+ return new keyv_1.default({
154
+ store: new SqliteBackedStore(sqlitePath),
155
+ namespace,
156
+ });
157
+ }
158
+ /**
159
+ * 设置缓存
160
+ * @param key 缓存键
161
+ * @param value 缓存值
162
+ * @param ttl 过期时间(毫秒),不传则永不过期
163
+ */
164
+ async set(key, value, ttl) {
165
+ return this.keyv.set(key, value, ttl);
166
+ }
167
+ /**
168
+ * 获取缓存
169
+ * @param key 缓存键
170
+ * @returns 缓存值,不存在或已过期返回 undefined
171
+ */
172
+ async get(key) {
173
+ return this.keyv.get(key);
174
+ }
175
+ /**
176
+ * 删除缓存
177
+ * @param key 缓存键
178
+ * @returns 是否删除成功
179
+ */
180
+ async delete(key) {
181
+ return this.keyv.delete(key);
182
+ }
183
+ /**
184
+ * 检查缓存是否存在
185
+ * @param key 缓存键
186
+ */
187
+ async has(key) {
188
+ return this.keyv.has(key);
189
+ }
190
+ /**
191
+ * 清空当前命名空间下的所有缓存
192
+ */
193
+ async clear() {
194
+ return this.keyv.clear();
195
+ }
196
+ /**
197
+ * 断开连接(模块销毁时调用)
198
+ */
199
+ async onModuleDestroy() {
200
+ await this.keyv.disconnect();
201
+ }
202
+ };
203
+ exports.CacheService = CacheService;
204
+ exports.CacheService = CacheService = CacheService_1 = __decorate([
205
+ (0, common_1.Injectable)(),
206
+ __param(0, (0, common_1.Inject)('CACHE_CONFIG')),
207
+ __metadata("design:paramtypes", [Object])
208
+ ], CacheService);
@@ -0,0 +1,4 @@
1
+ export * from './cache.config';
2
+ export * from './cache.service';
3
+ export * from './cache.module';
4
+ //# sourceMappingURL=index.d.ts.map