@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.
- package/dist/modules/job/dtos/job-query.dto.d.ts +4 -3
- package/dist/modules/job/dtos/job-query.dto.js +40 -0
- package/dist/modules/job/dtos/job-query.dto.js.map +1 -1
- package/dist/modules/job/job.controller.js +9 -6
- package/dist/modules/job/job.controller.js.map +1 -1
- package/dist/modules/job/job.entity.js +6 -1
- package/dist/modules/job/job.entity.js.map +1 -1
- package/dist/modules/module/module.module.js +3 -3
- package/dist/modules/module/module.module.js.map +1 -1
- package/dist/modules/permission/permission.module.js +2 -2
- package/dist/modules/permission/permission.module.js.map +1 -1
- package/dist/modules/role/dtos/create-role.dto.d.ts +1 -1
- package/dist/modules/role/dtos/role-query.dto.d.ts +1 -0
- package/dist/modules/role/dtos/role-query.dto.js +6 -0
- package/dist/modules/role/dtos/role-query.dto.js.map +1 -1
- package/dist/modules/role/dtos/update-role.dto.d.ts +1 -1
- package/dist/modules/role/role.controller.js.map +1 -1
- package/dist/modules/role/role.entity.d.ts +2 -0
- package/dist/modules/role/role.entity.js +10 -0
- package/dist/modules/role/role.entity.js.map +1 -1
- package/dist/modules/role/role.module.js +2 -2
- package/dist/modules/role/role.module.js.map +1 -1
- package/dist/modules/role/role.service.js +4 -0
- package/dist/modules/role/role.service.js.map +1 -1
- package/dist/modules/user/dtos/create-user.dto.d.ts +1 -1
- package/dist/modules/user/dtos/user-query.dto.d.ts +4 -0
- package/dist/modules/user/dtos/user-query.dto.js +40 -0
- package/dist/modules/user/dtos/user-query.dto.js.map +1 -1
- package/dist/modules/user/user.controller.js +14 -1
- package/dist/modules/user/user.controller.js.map +1 -1
- package/dist/modules/user/user.module.js +2 -2
- package/dist/modules/user/user.module.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/core/database/switch.schema.d.ts +0 -6
- package/dist/core/database/switch.schema.js +0 -39
- package/dist/core/database/switch.schema.js.map +0 -1
- package/dist/core/utils/guard-base.entity.d.ts +0 -10
- package/dist/core/utils/guard-base.entity.js +0 -46
- package/dist/core/utils/guard-base.entity.js.map +0 -1
- package/dist/core/utils/user-populate.d.ts +0 -0
- package/dist/core/utils/user-populate.js +0 -2
- package/dist/core/utils/user-populate.js.map +0 -1
- package/dist/database/migrations/1765027603465-CreateUserTable.d.ts +0 -6
- package/dist/database/migrations/1765027603465-CreateUserTable.js +0 -63
- package/dist/database/migrations/1765027603465-CreateUserTable.js.map +0 -1
- package/dist/database/migrations/1768190400000-AddUserLevelsColumns.d.ts +0 -6
- package/dist/database/migrations/1768190400000-AddUserLevelsColumns.js +0 -37
- package/dist/database/migrations/1768190400000-AddUserLevelsColumns.js.map +0 -1
- package/dist/database/seeders/auth.seeder.d.ts +0 -12
- package/dist/database/seeders/auth.seeder.js +0 -338
- package/dist/database/seeders/auth.seeder.js.map +0 -1
- package/dist/dev-server.d.ts +0 -1
- package/dist/dev-server.js +0 -72
- package/dist/dev-server.js.map +0 -1
- package/dist/modules/auth/auth.module-definition.d.ts +0 -2
- package/dist/modules/auth/auth.module-definition.js +0 -11
- package/dist/modules/auth/auth.module-definition.js.map +0 -1
- package/dist/modules/duty/dtos/create-duty.dto.d.ts +0 -5
- package/dist/modules/duty/dtos/create-duty.dto.js +0 -14
- package/dist/modules/duty/dtos/create-duty.dto.js.map +0 -1
- package/dist/modules/duty/dtos/duty-query.dto.d.ts +0 -3
- package/dist/modules/duty/dtos/duty-query.dto.js +0 -8
- package/dist/modules/duty/dtos/duty-query.dto.js.map +0 -1
- package/dist/modules/duty/dtos/duty.dto.d.ts +0 -9
- package/dist/modules/duty/dtos/duty.dto.js +0 -55
- package/dist/modules/duty/dtos/duty.dto.js.map +0 -1
- package/dist/modules/duty/dtos/update-duty.dto.d.ts +0 -5
- package/dist/modules/duty/dtos/update-duty.dto.js +0 -9
- package/dist/modules/duty/dtos/update-duty.dto.js.map +0 -1
- package/dist/modules/duty/duty.controller.d.ts +0 -16
- package/dist/modules/duty/duty.controller.js +0 -186
- package/dist/modules/duty/duty.controller.js.map +0 -1
- package/dist/modules/duty/duty.entity.d.ts +0 -9
- package/dist/modules/duty/duty.entity.js +0 -49
- package/dist/modules/duty/duty.entity.js.map +0 -1
- package/dist/modules/duty/duty.mapper.d.ts +0 -7
- package/dist/modules/duty/duty.mapper.js +0 -45
- package/dist/modules/duty/duty.mapper.js.map +0 -1
- package/dist/modules/duty/duty.module.d.ts +0 -2
- package/dist/modules/duty/duty.module.js +0 -33
- package/dist/modules/duty/duty.module.js.map +0 -1
- package/dist/modules/duty/duty.service.d.ts +0 -13
- package/dist/modules/duty/duty.service.js +0 -60
- package/dist/modules/duty/duty.service.js.map +0 -1
- package/dist/modules/job-duty/job-duty.entity.d.ts +0 -7
- package/dist/modules/job-duty/job-duty.entity.js +0 -33
- package/dist/modules/job-duty/job-duty.entity.js.map +0 -1
- package/dist/modules/user/user.module-definition.d.ts +0 -5
- package/dist/modules/user/user.module-definition.js +0 -9
- package/dist/modules/user/user.module-definition.js.map +0 -1
- package/dist/modules/user-permission/user-permission.controller.d.ts +0 -2
- package/dist/modules/user-permission/user-permission.controller.js +0 -17
- package/dist/modules/user-permission/user-permission.controller.js.map +0 -1
- package/dist/modules/user-role/dtos/create-user-role.dto.d.ts +0 -5
- package/dist/modules/user-role/dtos/create-user-role.dto.js +0 -14
- package/dist/modules/user-role/dtos/create-user-role.dto.js.map +0 -1
- package/dist/modules/user-role/dtos/update-user-role.dto.d.ts +0 -5
- package/dist/modules/user-role/dtos/update-user-role.dto.js +0 -9
- package/dist/modules/user-role/dtos/update-user-role.dto.js.map +0 -1
- package/dist/modules/user-role/dtos/user-role-query.dto.d.ts +0 -3
- package/dist/modules/user-role/dtos/user-role-query.dto.js +0 -8
- package/dist/modules/user-role/dtos/user-role-query.dto.js.map +0 -1
- package/dist/modules/user-role/dtos/user-role.dto.d.ts +0 -7
- package/dist/modules/user-role/dtos/user-role.dto.js +0 -28
- package/dist/modules/user-role/dtos/user-role.dto.js.map +0 -1
- package/dist/modules/user-role/user-role.controller.d.ts +0 -0
- package/dist/modules/user-role/user-role.controller.js +0 -2
- package/dist/modules/user-role/user-role.controller.js.map +0 -1
- package/dist/modules/user-role/user-role.entity.d.ts +0 -0
- package/dist/modules/user-role/user-role.entity.js +0 -2
- package/dist/modules/user-role/user-role.entity.js.map +0 -1
- package/dist/modules/user-role/user-role.mapper.d.ts +0 -0
- package/dist/modules/user-role/user-role.mapper.js +0 -2
- package/dist/modules/user-role/user-role.mapper.js.map +0 -1
- package/dist/modules/user-role/user-role.module.d.ts +0 -0
- package/dist/modules/user-role/user-role.module.js +0 -2
- package/dist/modules/user-role/user-role.module.js.map +0 -1
- package/dist/modules/user-role/user-role.service.d.ts +0 -0
- package/dist/modules/user-role/user-role.service.js +0 -2
- package/dist/modules/user-role/user-role.service.js.map +0 -1
- package/dist/security/decorators/roles.decorator.d.ts +0 -2
- package/dist/security/decorators/roles.decorator.js +0 -7
- package/dist/security/decorators/roles.decorator.js.map +0 -1
- package/dist/security/guards/roles.guard.d.ts +0 -9
- package/dist/security/guards/roles.guard.js +0 -59
- package/dist/security/guards/roles.guard.js.map +0 -1
- package/dist/security/password-util.d.ts +0 -3
- package/dist/security/password-util.js +0 -44
- package/dist/security/password-util.js.map +0 -1
- package/dist/seeders/auth.seeder.d.ts +0 -12
- package/dist/seeders/auth.seeder.js +0 -404
- package/dist/seeders/auth.seeder.js.map +0 -1
- package/dist/seeders/modules.seeder.d.ts +0 -6
- package/dist/seeders/modules.seeder.js +0 -53
- package/dist/seeders/modules.seeder.js.map +0 -1
- package/dist/seeders/orchestrator.seeder.d.ts +0 -6
- package/dist/seeders/orchestrator.seeder.js +0 -32
- package/dist/seeders/orchestrator.seeder.js.map +0 -1
- package/dist/seeders/permissions.seeder.d.ts +0 -6
- package/dist/seeders/permissions.seeder.js +0 -51
- package/dist/seeders/permissions.seeder.js.map +0 -1
- package/dist/seeders/role-permissions.seeder.d.ts +0 -6
- package/dist/seeders/role-permissions.seeder.js +0 -65
- package/dist/seeders/role-permissions.seeder.js.map +0 -1
- package/dist/seeders/roles.seeder.d.ts +0 -6
- package/dist/seeders/roles.seeder.js +0 -57
- package/dist/seeders/roles.seeder.js.map +0 -1
- package/dist/seeders/run.seeder.d.ts +0 -1
- package/dist/seeders/run.seeder.js +0 -82
- package/dist/seeders/run.seeder.js.map +0 -1
- package/dist/seeders/user/data.d.ts +0 -2
- package/dist/seeders/user/data.js +0 -16
- package/dist/seeders/user/data.js.map +0 -1
- package/dist/seeders/user/user-seeder.module.d.ts +0 -2
- package/dist/seeders/user/user-seeder.module.js +0 -24
- package/dist/seeders/user/user-seeder.module.js.map +0 -1
- package/dist/seeders/user/user-seeder.service.d.ts +0 -7
- package/dist/seeders/user/user-seeder.service.js +0 -51
- package/dist/seeders/user/user-seeder.service.js.map +0 -1
- package/dist/seeders/user-roles.seeder.d.ts +0 -6
- package/dist/seeders/user-roles.seeder.js +0 -44
- package/dist/seeders/user-roles.seeder.js.map +0 -1
- package/dist/seeders/users.seeder.d.ts +0 -6
- package/dist/seeders/users.seeder.js +0 -93
- package/dist/seeders/users.seeder.js.map +0 -1
- package/dist/tenant-db/config/tenant-db.config.d.ts +0 -4
- package/dist/tenant-db/config/tenant-db.config.js +0 -18
- package/dist/tenant-db/config/tenant-db.config.js.map +0 -1
- package/dist/tenant-db/context/tenant-db.context.d.ts +0 -11
- package/dist/tenant-db/context/tenant-db.context.js +0 -46
- package/dist/tenant-db/context/tenant-db.context.js.map +0 -1
- package/dist/tenant-db/helpers/tenant-db.helpers.d.ts +0 -13
- package/dist/tenant-db/helpers/tenant-db.helpers.js +0 -42
- package/dist/tenant-db/helpers/tenant-db.helpers.js.map +0 -1
- package/dist/tenant-db/manager/tenant-db.manager.d.ts +0 -20
- package/dist/tenant-db/manager/tenant-db.manager.js +0 -135
- package/dist/tenant-db/manager/tenant-db.manager.js.map +0 -1
- package/dist/tenant-db/middleware/tenant-db.middleware.d.ts +0 -13
- package/dist/tenant-db/middleware/tenant-db.middleware.js +0 -46
- package/dist/tenant-db/middleware/tenant-db.middleware.js.map +0 -1
- package/dist/tenant-db/module/tenant=db-module.d.ts +0 -10
- package/dist/tenant-db/module/tenant=db-module.js +0 -53
- package/dist/tenant-db/module/tenant=db-module.js.map +0 -1
- package/dist/tenant-db/resolvers/tenant.resolver.d.ts +0 -9
- package/dist/tenant-db/resolvers/tenant.resolver.js +0 -42
- package/dist/tenant-db/resolvers/tenant.resolver.js.map +0 -1
- package/dist/tenant-db/service/tenant-db.service.d.ts +0 -14
- package/dist/tenant-db/service/tenant-db.service.js +0 -62
- package/dist/tenant-db/service/tenant-db.service.js.map +0 -1
- package/dist/tenant-db/tenant-cache.d.ts +0 -10
- package/dist/tenant-db/tenant-cache.js +0 -17
- package/dist/tenant-db/tenant-cache.js.map +0 -1
- package/dist/tenant-db/types/tenant-db.types.d.ts +0 -29
- package/dist/tenant-db/types/tenant-db.types.js +0 -3
- 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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-db.types.js","sourceRoot":"","sources":["../../../src/tenant-db/types/tenant-db.types.ts"],"names":[],"mappings":""}
|