@evara-group/guard 3.0.21 → 3.0.22

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 (196) hide show
  1. package/dist/modules/job/dtos/job-query.dto.d.ts +4 -3
  2. package/dist/modules/job/dtos/job-query.dto.js +40 -0
  3. package/dist/modules/job/dtos/job-query.dto.js.map +1 -1
  4. package/dist/modules/job/job.controller.js +9 -6
  5. package/dist/modules/job/job.controller.js.map +1 -1
  6. package/dist/modules/job/job.entity.js +6 -1
  7. package/dist/modules/job/job.entity.js.map +1 -1
  8. package/dist/modules/module/module.module.js +3 -3
  9. package/dist/modules/module/module.module.js.map +1 -1
  10. package/dist/modules/permission/permission.module.js +2 -2
  11. package/dist/modules/permission/permission.module.js.map +1 -1
  12. package/dist/modules/role/dtos/create-role.dto.d.ts +1 -1
  13. package/dist/modules/role/dtos/role-query.dto.d.ts +1 -0
  14. package/dist/modules/role/dtos/role-query.dto.js +6 -0
  15. package/dist/modules/role/dtos/role-query.dto.js.map +1 -1
  16. package/dist/modules/role/dtos/update-role.dto.d.ts +1 -1
  17. package/dist/modules/role/role.controller.js.map +1 -1
  18. package/dist/modules/role/role.entity.d.ts +2 -0
  19. package/dist/modules/role/role.entity.js +10 -0
  20. package/dist/modules/role/role.entity.js.map +1 -1
  21. package/dist/modules/role/role.module.js +2 -2
  22. package/dist/modules/role/role.module.js.map +1 -1
  23. package/dist/modules/role/role.service.js +4 -0
  24. package/dist/modules/role/role.service.js.map +1 -1
  25. package/dist/modules/user/dtos/create-user.dto.d.ts +1 -1
  26. package/dist/modules/user/dtos/user-query.dto.d.ts +4 -0
  27. package/dist/modules/user/dtos/user-query.dto.js +40 -0
  28. package/dist/modules/user/dtos/user-query.dto.js.map +1 -1
  29. package/dist/modules/user/user.controller.js +14 -1
  30. package/dist/modules/user/user.controller.js.map +1 -1
  31. package/dist/modules/user/user.module.js +2 -2
  32. package/dist/modules/user/user.module.js.map +1 -1
  33. package/dist/tsconfig.tsbuildinfo +1 -1
  34. package/package.json +1 -1
  35. package/dist/core/database/switch.schema.d.ts +0 -6
  36. package/dist/core/database/switch.schema.js +0 -39
  37. package/dist/core/database/switch.schema.js.map +0 -1
  38. package/dist/core/utils/guard-base.entity.d.ts +0 -10
  39. package/dist/core/utils/guard-base.entity.js +0 -46
  40. package/dist/core/utils/guard-base.entity.js.map +0 -1
  41. package/dist/core/utils/user-populate.d.ts +0 -0
  42. package/dist/core/utils/user-populate.js +0 -2
  43. package/dist/core/utils/user-populate.js.map +0 -1
  44. package/dist/database/migrations/1765027603465-CreateUserTable.d.ts +0 -6
  45. package/dist/database/migrations/1765027603465-CreateUserTable.js +0 -63
  46. package/dist/database/migrations/1765027603465-CreateUserTable.js.map +0 -1
  47. package/dist/database/migrations/1768190400000-AddUserLevelsColumns.d.ts +0 -6
  48. package/dist/database/migrations/1768190400000-AddUserLevelsColumns.js +0 -37
  49. package/dist/database/migrations/1768190400000-AddUserLevelsColumns.js.map +0 -1
  50. package/dist/database/seeders/auth.seeder.d.ts +0 -12
  51. package/dist/database/seeders/auth.seeder.js +0 -338
  52. package/dist/database/seeders/auth.seeder.js.map +0 -1
  53. package/dist/dev-server.d.ts +0 -1
  54. package/dist/dev-server.js +0 -72
  55. package/dist/dev-server.js.map +0 -1
  56. package/dist/modules/auth/auth.module-definition.d.ts +0 -2
  57. package/dist/modules/auth/auth.module-definition.js +0 -11
  58. package/dist/modules/auth/auth.module-definition.js.map +0 -1
  59. package/dist/modules/duty/dtos/create-duty.dto.d.ts +0 -5
  60. package/dist/modules/duty/dtos/create-duty.dto.js +0 -14
  61. package/dist/modules/duty/dtos/create-duty.dto.js.map +0 -1
  62. package/dist/modules/duty/dtos/duty-query.dto.d.ts +0 -3
  63. package/dist/modules/duty/dtos/duty-query.dto.js +0 -8
  64. package/dist/modules/duty/dtos/duty-query.dto.js.map +0 -1
  65. package/dist/modules/duty/dtos/duty.dto.d.ts +0 -9
  66. package/dist/modules/duty/dtos/duty.dto.js +0 -55
  67. package/dist/modules/duty/dtos/duty.dto.js.map +0 -1
  68. package/dist/modules/duty/dtos/update-duty.dto.d.ts +0 -5
  69. package/dist/modules/duty/dtos/update-duty.dto.js +0 -9
  70. package/dist/modules/duty/dtos/update-duty.dto.js.map +0 -1
  71. package/dist/modules/duty/duty.controller.d.ts +0 -16
  72. package/dist/modules/duty/duty.controller.js +0 -186
  73. package/dist/modules/duty/duty.controller.js.map +0 -1
  74. package/dist/modules/duty/duty.entity.d.ts +0 -9
  75. package/dist/modules/duty/duty.entity.js +0 -49
  76. package/dist/modules/duty/duty.entity.js.map +0 -1
  77. package/dist/modules/duty/duty.mapper.d.ts +0 -7
  78. package/dist/modules/duty/duty.mapper.js +0 -45
  79. package/dist/modules/duty/duty.mapper.js.map +0 -1
  80. package/dist/modules/duty/duty.module.d.ts +0 -2
  81. package/dist/modules/duty/duty.module.js +0 -33
  82. package/dist/modules/duty/duty.module.js.map +0 -1
  83. package/dist/modules/duty/duty.service.d.ts +0 -13
  84. package/dist/modules/duty/duty.service.js +0 -60
  85. package/dist/modules/duty/duty.service.js.map +0 -1
  86. package/dist/modules/job-duty/job-duty.entity.d.ts +0 -7
  87. package/dist/modules/job-duty/job-duty.entity.js +0 -33
  88. package/dist/modules/job-duty/job-duty.entity.js.map +0 -1
  89. package/dist/modules/user/user.module-definition.d.ts +0 -5
  90. package/dist/modules/user/user.module-definition.js +0 -9
  91. package/dist/modules/user/user.module-definition.js.map +0 -1
  92. package/dist/modules/user-permission/user-permission.controller.d.ts +0 -2
  93. package/dist/modules/user-permission/user-permission.controller.js +0 -17
  94. package/dist/modules/user-permission/user-permission.controller.js.map +0 -1
  95. package/dist/modules/user-role/dtos/create-user-role.dto.d.ts +0 -5
  96. package/dist/modules/user-role/dtos/create-user-role.dto.js +0 -14
  97. package/dist/modules/user-role/dtos/create-user-role.dto.js.map +0 -1
  98. package/dist/modules/user-role/dtos/update-user-role.dto.d.ts +0 -5
  99. package/dist/modules/user-role/dtos/update-user-role.dto.js +0 -9
  100. package/dist/modules/user-role/dtos/update-user-role.dto.js.map +0 -1
  101. package/dist/modules/user-role/dtos/user-role-query.dto.d.ts +0 -3
  102. package/dist/modules/user-role/dtos/user-role-query.dto.js +0 -8
  103. package/dist/modules/user-role/dtos/user-role-query.dto.js.map +0 -1
  104. package/dist/modules/user-role/dtos/user-role.dto.d.ts +0 -7
  105. package/dist/modules/user-role/dtos/user-role.dto.js +0 -28
  106. package/dist/modules/user-role/dtos/user-role.dto.js.map +0 -1
  107. package/dist/modules/user-role/user-role.controller.d.ts +0 -0
  108. package/dist/modules/user-role/user-role.controller.js +0 -2
  109. package/dist/modules/user-role/user-role.controller.js.map +0 -1
  110. package/dist/modules/user-role/user-role.entity.d.ts +0 -0
  111. package/dist/modules/user-role/user-role.entity.js +0 -2
  112. package/dist/modules/user-role/user-role.entity.js.map +0 -1
  113. package/dist/modules/user-role/user-role.mapper.d.ts +0 -0
  114. package/dist/modules/user-role/user-role.mapper.js +0 -2
  115. package/dist/modules/user-role/user-role.mapper.js.map +0 -1
  116. package/dist/modules/user-role/user-role.module.d.ts +0 -0
  117. package/dist/modules/user-role/user-role.module.js +0 -2
  118. package/dist/modules/user-role/user-role.module.js.map +0 -1
  119. package/dist/modules/user-role/user-role.service.d.ts +0 -0
  120. package/dist/modules/user-role/user-role.service.js +0 -2
  121. package/dist/modules/user-role/user-role.service.js.map +0 -1
  122. package/dist/security/decorators/roles.decorator.d.ts +0 -2
  123. package/dist/security/decorators/roles.decorator.js +0 -7
  124. package/dist/security/decorators/roles.decorator.js.map +0 -1
  125. package/dist/security/guards/roles.guard.d.ts +0 -9
  126. package/dist/security/guards/roles.guard.js +0 -59
  127. package/dist/security/guards/roles.guard.js.map +0 -1
  128. package/dist/security/password-util.d.ts +0 -3
  129. package/dist/security/password-util.js +0 -44
  130. package/dist/security/password-util.js.map +0 -1
  131. package/dist/seeders/auth.seeder.d.ts +0 -12
  132. package/dist/seeders/auth.seeder.js +0 -404
  133. package/dist/seeders/auth.seeder.js.map +0 -1
  134. package/dist/seeders/modules.seeder.d.ts +0 -6
  135. package/dist/seeders/modules.seeder.js +0 -53
  136. package/dist/seeders/modules.seeder.js.map +0 -1
  137. package/dist/seeders/orchestrator.seeder.d.ts +0 -6
  138. package/dist/seeders/orchestrator.seeder.js +0 -32
  139. package/dist/seeders/orchestrator.seeder.js.map +0 -1
  140. package/dist/seeders/permissions.seeder.d.ts +0 -6
  141. package/dist/seeders/permissions.seeder.js +0 -51
  142. package/dist/seeders/permissions.seeder.js.map +0 -1
  143. package/dist/seeders/role-permissions.seeder.d.ts +0 -6
  144. package/dist/seeders/role-permissions.seeder.js +0 -65
  145. package/dist/seeders/role-permissions.seeder.js.map +0 -1
  146. package/dist/seeders/roles.seeder.d.ts +0 -6
  147. package/dist/seeders/roles.seeder.js +0 -57
  148. package/dist/seeders/roles.seeder.js.map +0 -1
  149. package/dist/seeders/run.seeder.d.ts +0 -1
  150. package/dist/seeders/run.seeder.js +0 -82
  151. package/dist/seeders/run.seeder.js.map +0 -1
  152. package/dist/seeders/user/data.d.ts +0 -2
  153. package/dist/seeders/user/data.js +0 -16
  154. package/dist/seeders/user/data.js.map +0 -1
  155. package/dist/seeders/user/user-seeder.module.d.ts +0 -2
  156. package/dist/seeders/user/user-seeder.module.js +0 -24
  157. package/dist/seeders/user/user-seeder.module.js.map +0 -1
  158. package/dist/seeders/user/user-seeder.service.d.ts +0 -7
  159. package/dist/seeders/user/user-seeder.service.js +0 -51
  160. package/dist/seeders/user/user-seeder.service.js.map +0 -1
  161. package/dist/seeders/user-roles.seeder.d.ts +0 -6
  162. package/dist/seeders/user-roles.seeder.js +0 -44
  163. package/dist/seeders/user-roles.seeder.js.map +0 -1
  164. package/dist/seeders/users.seeder.d.ts +0 -6
  165. package/dist/seeders/users.seeder.js +0 -93
  166. package/dist/seeders/users.seeder.js.map +0 -1
  167. package/dist/tenant-db/config/tenant-db.config.d.ts +0 -4
  168. package/dist/tenant-db/config/tenant-db.config.js +0 -18
  169. package/dist/tenant-db/config/tenant-db.config.js.map +0 -1
  170. package/dist/tenant-db/context/tenant-db.context.d.ts +0 -11
  171. package/dist/tenant-db/context/tenant-db.context.js +0 -46
  172. package/dist/tenant-db/context/tenant-db.context.js.map +0 -1
  173. package/dist/tenant-db/helpers/tenant-db.helpers.d.ts +0 -13
  174. package/dist/tenant-db/helpers/tenant-db.helpers.js +0 -42
  175. package/dist/tenant-db/helpers/tenant-db.helpers.js.map +0 -1
  176. package/dist/tenant-db/manager/tenant-db.manager.d.ts +0 -20
  177. package/dist/tenant-db/manager/tenant-db.manager.js +0 -135
  178. package/dist/tenant-db/manager/tenant-db.manager.js.map +0 -1
  179. package/dist/tenant-db/middleware/tenant-db.middleware.d.ts +0 -13
  180. package/dist/tenant-db/middleware/tenant-db.middleware.js +0 -46
  181. package/dist/tenant-db/middleware/tenant-db.middleware.js.map +0 -1
  182. package/dist/tenant-db/module/tenant=db-module.d.ts +0 -10
  183. package/dist/tenant-db/module/tenant=db-module.js +0 -53
  184. package/dist/tenant-db/module/tenant=db-module.js.map +0 -1
  185. package/dist/tenant-db/resolvers/tenant.resolver.d.ts +0 -9
  186. package/dist/tenant-db/resolvers/tenant.resolver.js +0 -42
  187. package/dist/tenant-db/resolvers/tenant.resolver.js.map +0 -1
  188. package/dist/tenant-db/service/tenant-db.service.d.ts +0 -14
  189. package/dist/tenant-db/service/tenant-db.service.js +0 -62
  190. package/dist/tenant-db/service/tenant-db.service.js.map +0 -1
  191. package/dist/tenant-db/tenant-cache.d.ts +0 -10
  192. package/dist/tenant-db/tenant-cache.js +0 -17
  193. package/dist/tenant-db/tenant-cache.js.map +0 -1
  194. package/dist/tenant-db/types/tenant-db.types.d.ts +0 -29
  195. package/dist/tenant-db/types/tenant-db.types.js +0 -3
  196. package/dist/tenant-db/types/tenant-db.types.js.map +0 -1
@@ -1,135 +0,0 @@
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 TenantDatabaseManager_1;
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.TenantDatabaseManager = void 0;
14
- const common_1 = require("@nestjs/common");
15
- const typeorm_1 = require("typeorm");
16
- const tenant_db_config_1 = require("../config/tenant-db.config");
17
- let TenantDatabaseManager = TenantDatabaseManager_1 = class TenantDatabaseManager {
18
- constructor() {
19
- this.logger = new common_1.Logger(TenantDatabaseManager_1.name);
20
- this.cache = new Map();
21
- this.config = tenant_db_config_1.TenantDatabaseConfig.load();
22
- this.startCleanupScheduler();
23
- }
24
- async getDataSource(databaseName, options) {
25
- const cached = this.cache.get(databaseName);
26
- if (cached?.dataSource.isInitialized) {
27
- cached.lastUsed = Date.now();
28
- return cached.dataSource;
29
- }
30
- if (this.cache.size >= this.config.maxCachedTenants) {
31
- await this.evictLRU();
32
- }
33
- const dataSource = await this.createDataSource(databaseName, options);
34
- this.cache.set(databaseName, {
35
- dataSource,
36
- lastUsed: Date.now(),
37
- });
38
- this.logger.log(`Initialized datasource for tenant database: ${databaseName}`);
39
- return dataSource;
40
- }
41
- async createDataSource(databaseName, options) {
42
- const dataSourceOptions = {
43
- type: "postgres",
44
- host: options?.host || this.config.defaultHost,
45
- port: options?.port || this.config.defaultPort,
46
- username: options?.username || this.config.defaultUsername,
47
- password: options?.password || this.config.defaultPassword,
48
- database: databaseName,
49
- entities: options?.entities || [__dirname + "/../../**/*.entity.{ts,js}"],
50
- migrations: options?.migrations || [
51
- __dirname + "/../../database/migrations/*{.ts,.js}",
52
- ],
53
- synchronize: options?.synchronize ?? false,
54
- extra: options?.extra || { max: this.config.poolMax },
55
- logging: process.env.NODE_ENV === "development" ? ["error", "warn"] : false,
56
- };
57
- const dataSource = new typeorm_1.DataSource(dataSourceOptions);
58
- await dataSource.initialize();
59
- return dataSource;
60
- }
61
- async evictLRU() {
62
- let oldestKey = null;
63
- let oldestTime = Infinity;
64
- for (const [key, cached] of this.cache.entries()) {
65
- if (cached.lastUsed < oldestTime) {
66
- oldestTime = cached.lastUsed;
67
- oldestKey = key;
68
- }
69
- }
70
- if (oldestKey) {
71
- await this.destroyDataSource(oldestKey);
72
- this.logger.log(`Evicted LRU tenant datasource: ${oldestKey}`);
73
- }
74
- }
75
- async destroyDataSource(key) {
76
- const cached = this.cache.get(key);
77
- if (!cached)
78
- return;
79
- try {
80
- if (cached.dataSource.isInitialized) {
81
- await cached.dataSource.destroy();
82
- }
83
- this.cache.delete(key);
84
- }
85
- catch (error) {
86
- this.logger.error(`Failed to destroy datasource for ${key}:`, error);
87
- }
88
- }
89
- startCleanupScheduler() {
90
- const interval = Math.max(60000, Math.floor(this.config.idleTimeoutMs / 2));
91
- this.cleanupInterval = setInterval(() => {
92
- this.cleanupIdleConnections();
93
- }, interval);
94
- this.cleanupInterval.unref();
95
- }
96
- async cleanupIdleConnections() {
97
- const now = Date.now();
98
- const toRemove = [];
99
- for (const [key, cached] of this.cache.entries()) {
100
- if (now - cached.lastUsed > this.config.idleTimeoutMs) {
101
- toRemove.push(key);
102
- }
103
- }
104
- for (const key of toRemove) {
105
- this.logger.log(`Closing idle datasource: ${key}`);
106
- await this.destroyDataSource(key);
107
- }
108
- }
109
- async onModuleDestroy() {
110
- if (this.cleanupInterval) {
111
- clearInterval(this.cleanupInterval);
112
- }
113
- const destroyPromises = Array.from(this.cache.keys()).map((key) => this.destroyDataSource(key));
114
- await Promise.allSettled(destroyPromises);
115
- this.logger.log("All tenant datasources destroyed");
116
- }
117
- getCacheSize() {
118
- return this.cache.size;
119
- }
120
- getCachedTenants() {
121
- return Array.from(this.cache.keys());
122
- }
123
- async clearCache() {
124
- const keys = Array.from(this.cache.keys());
125
- for (const key of keys) {
126
- await this.destroyDataSource(key);
127
- }
128
- }
129
- };
130
- exports.TenantDatabaseManager = TenantDatabaseManager;
131
- exports.TenantDatabaseManager = TenantDatabaseManager = TenantDatabaseManager_1 = __decorate([
132
- (0, common_1.Injectable)(),
133
- __metadata("design:paramtypes", [])
134
- ], TenantDatabaseManager);
135
- //# sourceMappingURL=tenant-db.manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tenant-db.manager.js","sourceRoot":"","sources":["../../../src/tenant-db/manager/tenant-db.manager.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- import { NestMiddleware } from "@nestjs/common";
2
- import { Request, Response, NextFunction } from "express";
3
- import { TenantDatabaseContext } from "../context/tenant-db.context";
4
- import { ITenantResolver } from "../resolvers/tenant.resolver";
5
- import { TenantDatabaseManager } from "../manager/tenant-db.manager";
6
- export declare class TenantDatabaseMiddleware implements NestMiddleware {
7
- private readonly manager;
8
- private readonly context;
9
- private readonly resolver;
10
- private readonly logger;
11
- constructor(manager: TenantDatabaseManager, context: TenantDatabaseContext, resolver: ITenantResolver);
12
- use(req: Request, res: Response, next: NextFunction): Promise<void>;
13
- }
@@ -1,46 +0,0 @@
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 TenantDatabaseMiddleware_1;
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.TenantDatabaseMiddleware = void 0;
14
- const common_1 = require("@nestjs/common");
15
- const tenant_db_context_1 = require("../context/tenant-db.context");
16
- const tenant_db_manager_1 = require("../manager/tenant-db.manager");
17
- let TenantDatabaseMiddleware = TenantDatabaseMiddleware_1 = class TenantDatabaseMiddleware {
18
- constructor(manager, context, resolver) {
19
- this.manager = manager;
20
- this.context = context;
21
- this.resolver = resolver;
22
- this.logger = new common_1.Logger(TenantDatabaseMiddleware_1.name);
23
- }
24
- async use(req, res, next) {
25
- try {
26
- const tenantId = this.resolver.extractTenantId(req);
27
- if (!tenantId) {
28
- throw new common_1.BadRequestException("Tenant identifier is required");
29
- }
30
- const databaseName = await this.resolver.resolveDatabaseName(tenantId);
31
- const dataSource = await this.manager.getDataSource(databaseName);
32
- this.context.run({ dataSource, tenantId }, () => next());
33
- }
34
- catch (error) {
35
- this.logger.error("Tenant resolution failed:", error);
36
- next(error);
37
- }
38
- }
39
- };
40
- exports.TenantDatabaseMiddleware = TenantDatabaseMiddleware;
41
- exports.TenantDatabaseMiddleware = TenantDatabaseMiddleware = TenantDatabaseMiddleware_1 = __decorate([
42
- (0, common_1.Injectable)(),
43
- __metadata("design:paramtypes", [tenant_db_manager_1.TenantDatabaseManager,
44
- tenant_db_context_1.TenantDatabaseContext, Object])
45
- ], TenantDatabaseMiddleware);
46
- //# sourceMappingURL=tenant-db.middleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tenant-db.middleware.js","sourceRoot":"","sources":["../../../src/tenant-db/middleware/tenant-db.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAKwB;AAExB,oEAAqE;AAErE,oEAAqE;AAG9D,IAAM,wBAAwB,gCAA9B,MAAM,wBAAwB;IAGnC,YACmB,OAA8B,EAC9B,OAA8B,EAC9B,QAAyB;QAFzB,YAAO,GAAP,OAAO,CAAuB;QAC9B,YAAO,GAAP,OAAO,CAAuB;QAC9B,aAAQ,GAAR,QAAQ,CAAiB;QAL3B,WAAM,GAAG,IAAI,eAAM,CAAC,0BAAwB,CAAC,IAAI,CAAC,CAAC;IAMjE,CAAC;IAEJ,KAAK,CAAC,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;QACvD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAEpD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,4BAAmB,CAAC,+BAA+B,CAAC,CAAC;YACjE,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YACvE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAElE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YACtD,IAAI,CAAC,KAAK,CAAC,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAA;AA1BY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;qCAKiB,yCAAqB;QACrB,yCAAqB;GALtC,wBAAwB,CA0BpC"}
@@ -1,10 +0,0 @@
1
- import { MiddlewareConsumer, NestModule, DynamicModule } from "@nestjs/common";
2
- import { ITenantResolver } from "../resolvers/tenant.resolver";
3
- export interface TenantDatabaseModuleOptions {
4
- resolver?: ITenantResolver;
5
- excludeRoutes?: string[];
6
- }
7
- export declare class TenantDatabaseModule implements NestModule {
8
- static forRoot(options?: TenantDatabaseModuleOptions): DynamicModule;
9
- configure(consumer: MiddlewareConsumer): void;
10
- }
@@ -1,53 +0,0 @@
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 TenantDatabaseModule_1;
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.TenantDatabaseModule = void 0;
11
- const common_1 = require("@nestjs/common");
12
- const tenant_resolver_1 = require("../resolvers/tenant.resolver");
13
- const tenant_db_manager_1 = require("../manager/tenant-db.manager");
14
- const tenant_db_context_1 = require("../context/tenant-db.context");
15
- const tenant_db_service_1 = require("../service/tenant-db.service");
16
- const tenant_db_middleware_1 = require("../middleware/tenant-db.middleware");
17
- let TenantDatabaseModule = TenantDatabaseModule_1 = class TenantDatabaseModule {
18
- static forRoot(options) {
19
- const resolver = options?.resolver || new tenant_resolver_1.DefaultTenantResolver();
20
- return {
21
- module: TenantDatabaseModule_1,
22
- providers: [
23
- tenant_db_manager_1.TenantDatabaseManager,
24
- tenant_db_context_1.TenantDatabaseContext,
25
- tenant_db_service_1.TenantDatabaseService,
26
- {
27
- provide: "TENANT_RESOLVER",
28
- useValue: resolver,
29
- },
30
- {
31
- provide: tenant_db_middleware_1.TenantDatabaseMiddleware,
32
- useFactory: (manager, context) => {
33
- return new tenant_db_middleware_1.TenantDatabaseMiddleware(manager, context, resolver);
34
- },
35
- inject: [tenant_db_manager_1.TenantDatabaseManager, tenant_db_context_1.TenantDatabaseContext],
36
- },
37
- ],
38
- exports: [
39
- tenant_db_manager_1.TenantDatabaseManager,
40
- tenant_db_context_1.TenantDatabaseContext,
41
- tenant_db_service_1.TenantDatabaseService,
42
- ],
43
- };
44
- }
45
- configure(consumer) {
46
- consumer.apply(tenant_db_middleware_1.TenantDatabaseMiddleware).forRoutes("*");
47
- }
48
- };
49
- exports.TenantDatabaseModule = TenantDatabaseModule;
50
- exports.TenantDatabaseModule = TenantDatabaseModule = TenantDatabaseModule_1 = __decorate([
51
- (0, common_1.Module)({})
52
- ], TenantDatabaseModule);
53
- //# sourceMappingURL=tenant=db-module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tenant=db-module.js","sourceRoot":"","sources":["../../../src/tenant-db/module/tenant=db-module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAKwB;AACxB,kEAGsC;AACtC,oEAAqE;AACrE,oEAAqE;AACrE,oEAAqE;AACrE,6EAA8E;AAQvE,IAAM,oBAAoB,4BAA1B,MAAM,oBAAoB;IAC/B,MAAM,CAAC,OAAO,CAAC,OAAqC;QAClD,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,IAAI,uCAAqB,EAAE,CAAC;QAElE,OAAO;YACL,MAAM,EAAE,sBAAoB;YAC5B,SAAS,EAAE;gBACT,yCAAqB;gBACrB,yCAAqB;gBACrB,yCAAqB;gBACrB;oBACE,OAAO,EAAE,iBAAiB;oBAC1B,QAAQ,EAAE,QAAQ;iBACnB;gBACD;oBACE,OAAO,EAAE,+CAAwB;oBACjC,UAAU,EAAE,CACV,OAA8B,EAC9B,OAA8B,EAC9B,EAAE;wBACF,OAAO,IAAI,+CAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;oBAClE,CAAC;oBACD,MAAM,EAAE,CAAC,yCAAqB,EAAE,yCAAqB,CAAC;iBACvD;aACF;YACD,OAAO,EAAE;gBACP,yCAAqB;gBACrB,yCAAqB;gBACrB,yCAAqB;aACtB;SACF,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,QAA4B;QACpC,QAAQ,CAAC,KAAK,CAAC,+CAAwB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC;CACF,CAAA;AApCY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,oBAAoB,CAoChC"}
@@ -1,9 +0,0 @@
1
- export interface ITenantResolver {
2
- extractTenantId(request: any): string | undefined;
3
- resolveDatabaseName(tenantId: string): Promise<string>;
4
- }
5
- export declare class DefaultTenantResolver implements ITenantResolver {
6
- extractTenantId(request: any): string | undefined;
7
- resolveDatabaseName(tenantId: string): Promise<string>;
8
- private validateDatabaseName;
9
- }
@@ -1,42 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.DefaultTenantResolver = void 0;
10
- const common_1 = require("@nestjs/common");
11
- let DefaultTenantResolver = class DefaultTenantResolver {
12
- extractTenantId(request) {
13
- if (request.headers?.["x-tenant-id"]) {
14
- return request.headers["x-tenant-id"];
15
- }
16
- if (request.headers?.["x-tenant"]) {
17
- return request.headers["x-tenant"];
18
- }
19
- const hostname = request.hostname || request.headers?.host;
20
- if (hostname) {
21
- const parts = hostname.split(".");
22
- if (parts.length > 2) {
23
- return parts[0];
24
- }
25
- }
26
- return request.query?.tenantId;
27
- }
28
- async resolveDatabaseName(tenantId) {
29
- this.validateDatabaseName(tenantId);
30
- return `tenant_${tenantId}`;
31
- }
32
- validateDatabaseName(name) {
33
- if (!/^[a-zA-Z0-9_-]+$/.test(name)) {
34
- throw new Error("Invalid tenant identifier format");
35
- }
36
- }
37
- };
38
- exports.DefaultTenantResolver = DefaultTenantResolver;
39
- exports.DefaultTenantResolver = DefaultTenantResolver = __decorate([
40
- (0, common_1.Injectable)()
41
- ], DefaultTenantResolver);
42
- //# sourceMappingURL=tenant.resolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tenant.resolver.js","sourceRoot":"","sources":["../../../src/tenant-db/resolvers/tenant.resolver.ts"],"names":[],"mappings":";;;;;;;;;AAKA,2CAA4C;AAQrC,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,eAAe,CAAC,OAAY;QAE1B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;YACrC,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;QAGD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;QAC3D,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAGD,OAAO,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,QAAgB;QAGxC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,UAAU,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAEO,oBAAoB,CAAC,IAAY;QAEvC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;CACF,CAAA;AArCY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;GACA,qBAAqB,CAqCjC"}
@@ -1,14 +0,0 @@
1
- import { TenantDatabaseManager } from "../manager/tenant-db.manager";
2
- export declare class TenantDatabaseService {
3
- private readonly manager;
4
- private readonly logger;
5
- constructor(manager: TenantDatabaseManager);
6
- runMigrations(databaseName: string): Promise<void>;
7
- showMigrations(databaseName: string): Promise<void>;
8
- getConnectionStatus(databaseName: string): Promise<boolean>;
9
- getCacheMetrics(): {
10
- size: number;
11
- tenants: string[];
12
- };
13
- clearCache(): Promise<void>;
14
- }
@@ -1,62 +0,0 @@
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 TenantDatabaseService_1;
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.TenantDatabaseService = void 0;
14
- const common_1 = require("@nestjs/common");
15
- const tenant_db_manager_1 = require("../manager/tenant-db.manager");
16
- let TenantDatabaseService = TenantDatabaseService_1 = class TenantDatabaseService {
17
- constructor(manager) {
18
- this.manager = manager;
19
- this.logger = new common_1.Logger(TenantDatabaseService_1.name);
20
- }
21
- async runMigrations(databaseName) {
22
- const dataSource = await this.manager.getDataSource(databaseName);
23
- try {
24
- const migrations = await dataSource.runMigrations();
25
- this.logger.log(`Executed ${migrations.length} migration(s) for ${databaseName}`);
26
- }
27
- catch (error) {
28
- this.logger.error(`Migration failed for ${databaseName}:`, error);
29
- throw error;
30
- }
31
- }
32
- async showMigrations(databaseName) {
33
- const dataSource = await this.manager.getDataSource(databaseName);
34
- const migrations = await dataSource.showMigrations();
35
- this.logger.log(`${databaseName} has ${migrations ? "pending" : "no"} migrations`);
36
- }
37
- async getConnectionStatus(databaseName) {
38
- try {
39
- const dataSource = await this.manager.getDataSource(databaseName);
40
- return dataSource.isInitialized;
41
- }
42
- catch {
43
- return false;
44
- }
45
- }
46
- getCacheMetrics() {
47
- return {
48
- size: this.manager.getCacheSize(),
49
- tenants: this.manager.getCachedTenants(),
50
- };
51
- }
52
- async clearCache() {
53
- await this.manager.clearCache();
54
- this.logger.log("Tenant datasource cache cleared");
55
- }
56
- };
57
- exports.TenantDatabaseService = TenantDatabaseService;
58
- exports.TenantDatabaseService = TenantDatabaseService = TenantDatabaseService_1 = __decorate([
59
- (0, common_1.Injectable)(),
60
- __metadata("design:paramtypes", [tenant_db_manager_1.TenantDatabaseManager])
61
- ], TenantDatabaseService);
62
- //# sourceMappingURL=tenant-db.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tenant-db.service.js","sourceRoot":"","sources":["../../../src/tenant-db/service/tenant-db.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AACpD,oEAAqE;AAG9D,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IAGhC,YAA6B,OAA8B;QAA9B,YAAO,GAAP,OAAO,CAAuB;QAF1C,WAAM,GAAG,IAAI,eAAM,CAAC,uBAAqB,CAAC,IAAI,CAAC,CAAC;IAEH,CAAC;IAE/D,KAAK,CAAC,aAAa,CAAC,YAAoB;QACtC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAElE,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE,CAAC;YACpD,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,YAAY,UAAU,CAAC,MAAM,qBAAqB,YAAY,EAAE,CACjE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,YAAY,GAAG,EAAE,KAAK,CAAC,CAAC;YAClE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,YAAoB;QACvC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,cAAc,EAAE,CAAC;QAErD,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,GAAG,YAAY,QAAQ,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,aAAa,CAClE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,YAAoB;QAC5C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAClE,OAAO,UAAU,CAAC,aAAa,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,eAAe;QACb,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;YACjC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;SACzC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;CACF,CAAA;AAhDY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;qCAI2B,yCAAqB;GAHhD,qBAAqB,CAgDjC"}
@@ -1,10 +0,0 @@
1
- import { DataSource } from "typeorm";
2
- export declare function getCachedConnection(key: string): DataSource | undefined;
3
- export declare function setCachedConnection(key: string, dataSource: DataSource): void;
4
- export declare function generateConnectionKey(options: {
5
- name?: string;
6
- database?: string;
7
- host: string;
8
- port: number;
9
- user: string;
10
- }): string;
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getCachedConnection = getCachedConnection;
4
- exports.setCachedConnection = setCachedConnection;
5
- exports.generateConnectionKey = generateConnectionKey;
6
- const connectionCache = [];
7
- function getCachedConnection(key) {
8
- return connectionCache.find((c) => c.key === key)?.dataSource;
9
- }
10
- function setCachedConnection(key, dataSource) {
11
- connectionCache.push({ key, dataSource });
12
- }
13
- function generateConnectionKey(options) {
14
- const dbName = options.database ?? options.name ?? "default";
15
- return `${options.host}_${options.port}_${dbName}_${options.user}`;
16
- }
17
- //# sourceMappingURL=tenant-cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tenant-cache.js","sourceRoot":"","sources":["../../src/tenant-db/tenant-cache.ts"],"names":[],"mappings":";;AAUA,kDAEC;AAED,kDAEC;AAED,sDASC;AAnBD,MAAM,eAAe,GAAuB,EAAE,CAAC;AAE/C,SAAgB,mBAAmB,CAAC,GAAW;IAC7C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,UAAU,CAAC;AAChE,CAAC;AAED,SAAgB,mBAAmB,CAAC,GAAW,EAAE,UAAsB;IACrE,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,qBAAqB,CAAC,OAMrC;IACC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC;IAC7D,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;AACrE,CAAC"}
@@ -1,29 +0,0 @@
1
- import { DataSource } from "typeorm";
2
- export interface TenantDataSourceOptions {
3
- host?: string;
4
- port?: number;
5
- username?: string;
6
- password?: string;
7
- database?: string;
8
- entities?: string[] | any[];
9
- migrations?: string[] | any[];
10
- synchronize?: boolean;
11
- extra?: any;
12
- }
13
- export interface TenantStore {
14
- dataSource?: DataSource;
15
- tenantId?: string;
16
- }
17
- export interface CachedDataSource {
18
- dataSource: DataSource;
19
- lastUsed: number;
20
- }
21
- export interface TenantConfig {
22
- idleTimeoutMs: number;
23
- maxCachedTenants: number;
24
- poolMax: number;
25
- defaultHost: string;
26
- defaultPort: number;
27
- defaultUsername: string;
28
- defaultPassword: string;
29
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=tenant-db.types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tenant-db.types.js","sourceRoot":"","sources":["../../../src/tenant-db/types/tenant-db.types.ts"],"names":[],"mappings":""}