@flusys/nestjs-shared 1.1.0-beta → 1.2.0-rc.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.
- package/README.md +146 -1330
- package/cjs/classes/api-controller.class.js +325 -49
- package/cjs/classes/api-service.class.js +271 -149
- package/cjs/classes/handle-custome-db.js +37 -0
- package/cjs/classes/index.js +2 -2
- package/cjs/classes/winston.logger.class.js +103 -70
- package/cjs/constants/index.js +15 -4
- package/cjs/constants/message-keys.js +68 -0
- package/cjs/constants/permissions.js +287 -0
- package/cjs/decorators/api-response.decorator.js +2 -3
- package/cjs/decorators/index.js +1 -0
- package/cjs/decorators/log-action.decorator.js +149 -0
- package/cjs/decorators/require-permission.decorator.js +5 -5
- package/cjs/dtos/delete.dto.js +10 -0
- package/cjs/dtos/filter-and-pagination.dto.js +24 -34
- package/cjs/dtos/get-by-ids.dto.js +65 -0
- package/cjs/dtos/identity-response.dto.js +4 -8
- package/cjs/dtos/index.js +1 -0
- package/cjs/dtos/pagination.dto.js +4 -8
- package/cjs/dtos/response-payload.dto.js +68 -112
- package/cjs/entities/identity.js +12 -6
- package/cjs/entities/index.js +1 -0
- package/cjs/entities/raw-type.js +4 -0
- package/cjs/entities/user-root.js +15 -15
- package/cjs/enums/index.js +20 -0
- package/cjs/enums/notification-type.enum.js +17 -0
- package/cjs/enums/participant-status.enum.js +17 -0
- package/cjs/enums/recurrence-type.enum.js +18 -0
- package/cjs/exceptions/base-app.exception.js +151 -0
- package/cjs/exceptions/index.js +1 -0
- package/cjs/exceptions/permission.exception.js +13 -9
- package/cjs/filters/global-exception.filter.js +279 -0
- package/cjs/filters/index.js +18 -0
- package/cjs/guards/jwt-auth.guard.js +4 -1
- package/cjs/guards/permission.guard.js +88 -148
- package/cjs/index.js +2 -0
- package/cjs/interceptors/idempotency.interceptor.js +1 -1
- package/cjs/interceptors/index.js +1 -4
- package/cjs/interceptors/set-user-field-on-body.interceptor.js +60 -0
- package/cjs/interceptors/slug.interceptor.js +30 -9
- package/cjs/interfaces/datasource.interface.js +4 -0
- package/cjs/interfaces/event-manager-adapter.interface.js +11 -0
- package/cjs/interfaces/index.js +4 -2
- package/cjs/interfaces/module-config.interface.js +4 -0
- package/cjs/interfaces/notification-adapter.interface.js +11 -0
- package/cjs/interfaces/permission.interface.js +1 -1
- package/cjs/middlewares/logger.middleware.js +133 -115
- package/cjs/modules/cache/cache.module.js +3 -3
- package/cjs/modules/datasource/index.js +0 -1
- package/cjs/modules/datasource/multi-tenant-datasource.service.js +60 -183
- package/cjs/modules/utils/utils.service.js +27 -206
- package/cjs/utils/date-time.util.js +94 -0
- package/cjs/utils/html-sanitizer.util.js +64 -0
- package/cjs/utils/index.js +5 -1
- package/cjs/utils/query-helpers.util.js +60 -0
- package/cjs/utils/request.util.js +96 -0
- package/cjs/utils/string.util.js +63 -0
- package/classes/api-controller.class.d.ts +16 -8
- package/classes/api-service.class.d.ts +30 -25
- package/classes/handle-custome-db.d.ts +3 -0
- package/classes/index.d.ts +2 -2
- package/classes/winston.logger.class.d.ts +1 -0
- package/constants/index.d.ts +2 -1
- package/constants/message-keys.d.ts +45 -0
- package/constants/permissions.d.ts +306 -0
- package/decorators/api-response.decorator.d.ts +1 -1
- package/decorators/current-user.decorator.d.ts +1 -1
- package/decorators/index.d.ts +1 -0
- package/decorators/log-action.decorator.d.ts +8 -0
- package/decorators/require-permission.decorator.d.ts +2 -2
- package/dtos/delete.dto.d.ts +1 -0
- package/dtos/filter-and-pagination.dto.d.ts +0 -2
- package/dtos/get-by-ids.dto.d.ts +4 -0
- package/dtos/index.d.ts +1 -0
- package/dtos/response-payload.dto.d.ts +8 -20
- package/entities/index.d.ts +1 -0
- package/entities/raw-type.d.ts +1 -0
- package/enums/index.d.ts +3 -0
- package/enums/notification-type.enum.d.ts +6 -0
- package/enums/participant-status.enum.d.ts +6 -0
- package/enums/recurrence-type.enum.d.ts +7 -0
- package/exceptions/base-app.exception.d.ts +41 -0
- package/exceptions/index.d.ts +1 -0
- package/exceptions/permission.exception.d.ts +2 -2
- package/fesm/classes/api-controller.class.js +326 -50
- package/fesm/classes/api-service.class.js +274 -152
- package/fesm/classes/handle-custome-db.js +19 -0
- package/fesm/classes/index.js +3 -2
- package/fesm/classes/winston.logger.class.js +100 -68
- package/fesm/constants/index.js +4 -1
- package/fesm/constants/message-keys.js +49 -0
- package/fesm/constants/permissions.js +200 -0
- package/fesm/decorators/api-response.decorator.js +3 -21
- package/fesm/decorators/index.js +1 -0
- package/fesm/decorators/log-action.decorator.js +139 -0
- package/fesm/decorators/require-permission.decorator.js +17 -65
- package/fesm/dtos/delete.dto.js +12 -2
- package/fesm/dtos/filter-and-pagination.dto.js +26 -47
- package/fesm/dtos/get-by-ids.dto.js +55 -0
- package/fesm/dtos/identity-response.dto.js +4 -8
- package/fesm/dtos/index.js +1 -0
- package/fesm/dtos/pagination.dto.js +4 -8
- package/fesm/dtos/response-payload.dto.js +68 -103
- package/fesm/entities/identity.js +12 -6
- package/fesm/entities/index.js +1 -0
- package/fesm/entities/raw-type.js +1 -0
- package/fesm/entities/user-root.js +15 -15
- package/fesm/enums/index.js +3 -0
- package/fesm/enums/notification-type.enum.js +7 -0
- package/fesm/enums/participant-status.enum.js +7 -0
- package/fesm/enums/recurrence-type.enum.js +8 -0
- package/fesm/exceptions/base-app.exception.js +115 -0
- package/fesm/exceptions/index.js +1 -0
- package/fesm/exceptions/permission.exception.js +16 -18
- package/fesm/filters/global-exception.filter.js +269 -0
- package/fesm/filters/index.js +1 -0
- package/fesm/guards/jwt-auth.guard.js +5 -2
- package/fesm/guards/permission.guard.js +90 -150
- package/fesm/index.js +2 -0
- package/fesm/interceptors/idempotency.interceptor.js +2 -2
- package/fesm/interceptors/index.js +1 -4
- package/fesm/interceptors/set-user-field-on-body.interceptor.js +39 -0
- package/fesm/interceptors/slug.interceptor.js +31 -10
- package/fesm/interfaces/datasource.interface.js +1 -0
- package/fesm/interfaces/event-manager-adapter.interface.js +1 -0
- package/fesm/interfaces/index.js +4 -2
- package/fesm/interfaces/module-config.interface.js +5 -0
- package/fesm/interfaces/notification-adapter.interface.js +1 -0
- package/fesm/interfaces/permission.interface.js +1 -3
- package/fesm/middlewares/logger.middleware.js +133 -109
- package/fesm/modules/cache/cache.module.js +2 -2
- package/fesm/modules/datasource/index.js +0 -1
- package/fesm/modules/datasource/multi-tenant-datasource.service.js +61 -184
- package/fesm/modules/utils/utils.service.js +27 -206
- package/fesm/utils/date-time.util.js +70 -0
- package/fesm/utils/html-sanitizer.util.js +69 -0
- package/fesm/utils/index.js +5 -1
- package/fesm/utils/query-helpers.util.js +85 -0
- package/fesm/utils/request.util.js +81 -0
- package/fesm/utils/string.util.js +71 -0
- package/filters/global-exception.filter.d.ts +9 -0
- package/filters/index.d.ts +1 -0
- package/guards/permission.guard.d.ts +4 -6
- package/index.d.ts +2 -0
- package/interceptors/idempotency.interceptor.d.ts +1 -1
- package/interceptors/index.d.ts +1 -4
- package/interceptors/set-user-field-on-body.interceptor.d.ts +5 -0
- package/interceptors/slug.interceptor.d.ts +2 -1
- package/interfaces/api.interface.d.ts +4 -2
- package/interfaces/datasource.interface.d.ts +5 -0
- package/interfaces/event-manager-adapter.interface.d.ts +43 -0
- package/interfaces/identity.interface.d.ts +4 -4
- package/interfaces/index.d.ts +4 -2
- package/interfaces/logged-user-info.interface.d.ts +0 -2
- package/interfaces/module-config.interface.d.ts +6 -0
- package/interfaces/notification-adapter.interface.d.ts +21 -0
- package/interfaces/permission.interface.d.ts +13 -9
- package/middlewares/logger.middleware.d.ts +2 -2
- package/modules/datasource/index.d.ts +0 -1
- package/modules/datasource/multi-tenant-datasource.service.d.ts +5 -16
- package/modules/utils/utils.service.d.ts +3 -14
- package/package.json +21 -14
- package/utils/date-time.util.d.ts +8 -0
- package/utils/html-sanitizer.util.d.ts +2 -0
- package/utils/index.d.ts +5 -1
- package/utils/query-helpers.util.d.ts +16 -0
- package/utils/request.util.d.ts +6 -0
- package/utils/string.util.d.ts +2 -0
- package/cjs/classes/request-scoped-api.service.js +0 -61
- package/cjs/classes/winston-logger-adapter.class.js +0 -121
- package/cjs/interceptors/query-performance.interceptor.js +0 -66
- package/cjs/interceptors/set-create-by-on-body.interceptor.js +0 -40
- package/cjs/interceptors/set-delete-by-on-body.interceptor.js +0 -40
- package/cjs/interceptors/set-update-by-on-body.interceptor.js +0 -40
- package/cjs/interfaces/base-query.interface.js +0 -6
- package/cjs/interfaces/logger.interface.js +0 -7
- package/cjs/modules/datasource/datasource.module.js +0 -120
- package/cjs/utils/error-handler.util.js +0 -67
- package/classes/request-scoped-api.service.d.ts +0 -13
- package/classes/winston-logger-adapter.class.d.ts +0 -20
- package/fesm/classes/request-scoped-api.service.js +0 -51
- package/fesm/classes/winston-logger-adapter.class.js +0 -124
- package/fesm/interceptors/query-performance.interceptor.js +0 -56
- package/fesm/interceptors/set-create-by-on-body.interceptor.js +0 -30
- package/fesm/interceptors/set-delete-by-on-body.interceptor.js +0 -30
- package/fesm/interceptors/set-update-by-on-body.interceptor.js +0 -30
- package/fesm/interfaces/base-query.interface.js +0 -3
- package/fesm/interfaces/logger.interface.js +0 -4
- package/fesm/modules/datasource/datasource.module.js +0 -110
- package/fesm/utils/error-handler.util.js +0 -59
- package/interceptors/query-performance.interceptor.d.ts +0 -8
- package/interceptors/set-create-by-on-body.interceptor.d.ts +0 -5
- package/interceptors/set-delete-by-on-body.interceptor.d.ts +0 -5
- package/interceptors/set-update-by-on-body.interceptor.d.ts +0 -5
- package/interfaces/base-query.interface.d.ts +0 -7
- package/interfaces/logger.interface.d.ts +0 -7
- package/modules/datasource/datasource.module.d.ts +0 -18
- package/utils/error-handler.util.d.ts +0 -24
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { DatabaseMode, IDatabaseConfig, IDataSourceServiceOptions, ITenantDatabaseConfig } from '@flusys/nestjs-core';
|
|
2
|
-
import {
|
|
2
|
+
import { OnModuleDestroy } from '@nestjs/common';
|
|
3
3
|
import { Request } from 'express';
|
|
4
4
|
import { DataSource, EntityTarget, ObjectLiteral, Repository } from 'typeorm';
|
|
5
5
|
export declare class MultiTenantDataSourceService implements OnModuleDestroy {
|
|
6
|
-
protected readonly options?: IDataSourceServiceOptions;
|
|
7
|
-
protected readonly request?: Request;
|
|
8
|
-
protected readonly logger: Logger;
|
|
6
|
+
protected readonly options?: IDataSourceServiceOptions | undefined;
|
|
7
|
+
protected readonly request?: Request | undefined;
|
|
9
8
|
protected static readonly tenantConnections: Map<string, DataSource>;
|
|
10
9
|
protected static singleDataSource: DataSource | null;
|
|
11
10
|
protected static readonly tenantsRegistry: Map<string, ITenantDatabaseConfig>;
|
|
@@ -13,29 +12,19 @@ export declare class MultiTenantDataSourceService implements OnModuleDestroy {
|
|
|
13
12
|
protected static readonly connectionLocks: Map<string, Promise<DataSource>>;
|
|
14
13
|
protected static singleConnectionLock: Promise<DataSource> | null;
|
|
15
14
|
protected tenantHeader: string;
|
|
16
|
-
constructor(options?: IDataSourceServiceOptions, request?: Request);
|
|
15
|
+
constructor(options?: IDataSourceServiceOptions | undefined, request?: Request | undefined);
|
|
16
|
+
private get self();
|
|
17
17
|
private initializeFromOptions;
|
|
18
18
|
private registerTenants;
|
|
19
|
-
setTenantHeader(header: string): void;
|
|
20
19
|
getDatabaseMode(): DatabaseMode;
|
|
21
20
|
isMultiTenant(): boolean;
|
|
22
21
|
getCurrentTenantId(): string | null;
|
|
23
22
|
getCurrentTenant(): ITenantDatabaseConfig | null;
|
|
24
23
|
getTenant(tenantId: string): ITenantDatabaseConfig | null;
|
|
25
|
-
getAllTenants(): ITenantDatabaseConfig[];
|
|
26
|
-
getActiveTenants(): ITenantDatabaseConfig[];
|
|
27
24
|
getDataSource(): Promise<DataSource>;
|
|
28
|
-
getDataSourceForTenant(tenantId: string): Promise<DataSource>;
|
|
29
|
-
setDataSource(dataSource: DataSource): void;
|
|
30
25
|
getRepository<T extends ObjectLiteral>(entity: EntityTarget<T>): Promise<Repository<T>>;
|
|
31
|
-
getRepositoryForTenant<T extends ObjectLiteral>(entity: EntityTarget<T>, tenantId: string): Promise<Repository<T>>;
|
|
32
|
-
withTenant<T>(tenantId: string, callback: (ds: DataSource) => Promise<T>): Promise<T>;
|
|
33
|
-
forAllTenants<T>(callback: (tenant: ITenantDatabaseConfig, ds: DataSource) => Promise<T>): Promise<Map<string, T>>;
|
|
34
|
-
registerTenant(tenant: ITenantDatabaseConfig): void;
|
|
35
|
-
removeTenant(tenantId: string): Promise<void>;
|
|
36
26
|
closeTenantConnection(tenantId: string): Promise<void>;
|
|
37
27
|
onModuleDestroy(): Promise<void>;
|
|
38
|
-
static reset(): void;
|
|
39
28
|
protected getSingleDataSource(): Promise<DataSource>;
|
|
40
29
|
protected getTenantDataSource(): Promise<DataSource>;
|
|
41
30
|
protected getOrCreateTenantConnection(tenant: ITenantDatabaseConfig): Promise<DataSource>;
|
|
@@ -1,21 +1,10 @@
|
|
|
1
|
-
import { HybridCache } from '
|
|
1
|
+
import { HybridCache } from '../../classes/hybrid-cache.class';
|
|
2
2
|
export declare class UtilsService {
|
|
3
|
-
constructor();
|
|
4
3
|
getCacheKey(entityName: string, params: any, entityId?: string, tenantId?: string): string;
|
|
5
4
|
trackCacheKey(cacheKey: string, entityName: string, cacheManager: HybridCache, entityId?: string, tenantId?: string): Promise<void>;
|
|
6
5
|
clearCache(entityName: string, cacheManager: HybridCache, entityId?: string, tenantId?: string): Promise<void>;
|
|
7
|
-
checkPhoneOrEmail(value: string): {
|
|
8
|
-
value: string | null;
|
|
9
|
-
type: 'phone' | 'email' | null;
|
|
10
|
-
};
|
|
11
6
|
transformToSlug(value: string, salt?: boolean): string;
|
|
12
7
|
getRandomInt(min: number, max: number): number;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
extractColumnNameFromError(detail: string): {
|
|
16
|
-
columnName: string;
|
|
17
|
-
value: string;
|
|
18
|
-
};
|
|
19
|
-
getOtpEmailFormat(otp: number, userName?: string | null | undefined): string;
|
|
20
|
-
getResetPasswordEmailFormat(resetLink: string, userName?: string | null | undefined): string;
|
|
8
|
+
private buildTenantPrefix;
|
|
9
|
+
private buildTrackingKey;
|
|
21
10
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flusys/nestjs-shared",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0-rc.1",
|
|
4
4
|
"description": "Common shared utilities for Flusys NestJS applications",
|
|
5
5
|
"main": "cjs/index.js",
|
|
6
6
|
"module": "fesm/index.js",
|
|
@@ -46,6 +46,11 @@
|
|
|
46
46
|
"import": "./fesm/entities/index.js",
|
|
47
47
|
"require": "./cjs/entities/index.js"
|
|
48
48
|
},
|
|
49
|
+
"./enums": {
|
|
50
|
+
"types": "./enums/index.d.ts",
|
|
51
|
+
"import": "./fesm/enums/index.js",
|
|
52
|
+
"require": "./cjs/enums/index.js"
|
|
53
|
+
},
|
|
49
54
|
"./exceptions": {
|
|
50
55
|
"types": "./exceptions/index.d.ts",
|
|
51
56
|
"import": "./fesm/exceptions/index.js",
|
|
@@ -88,23 +93,25 @@
|
|
|
88
93
|
}
|
|
89
94
|
},
|
|
90
95
|
"peerDependencies": {
|
|
91
|
-
"@keyv/redis": "^
|
|
92
|
-
"@nestjs/common": "^
|
|
93
|
-
"@nestjs/config": "^
|
|
94
|
-
"@nestjs/core": "^
|
|
95
|
-
"@nestjs/jwt": "^
|
|
96
|
-
"@nestjs/passport": "^
|
|
97
|
-
"@nestjs/swagger": "^
|
|
98
|
-
"@nestjs/typeorm": "^
|
|
99
|
-
"cacheable": "^1.0
|
|
100
|
-
"class-transformer": "^0.5.
|
|
101
|
-
"class-validator": "^0.
|
|
96
|
+
"@keyv/redis": "^5.1.0",
|
|
97
|
+
"@nestjs/common": "^11.0.0",
|
|
98
|
+
"@nestjs/config": "^4.0.0",
|
|
99
|
+
"@nestjs/core": "^11.0.0",
|
|
100
|
+
"@nestjs/jwt": "^11.0.0",
|
|
101
|
+
"@nestjs/passport": "^11.0.0",
|
|
102
|
+
"@nestjs/swagger": "^11.0.0",
|
|
103
|
+
"@nestjs/typeorm": "^11.0.0",
|
|
104
|
+
"cacheable": "^2.1.0",
|
|
105
|
+
"class-transformer": "^0.5.1",
|
|
106
|
+
"class-validator": "^0.15.0",
|
|
102
107
|
"keyv": "^5.0.0",
|
|
103
108
|
"typeorm": "^0.3.0",
|
|
104
109
|
"winston": "^3.0.0",
|
|
105
|
-
"winston-daily-rotate-file": "^5.0.0"
|
|
110
|
+
"winston-daily-rotate-file": "^5.0.0",
|
|
111
|
+
"express": "^5.0.0",
|
|
112
|
+
"rxjs": "^7.8.0"
|
|
106
113
|
},
|
|
107
114
|
"dependencies": {
|
|
108
|
-
"@flusys/nestjs-core": "1.
|
|
115
|
+
"@flusys/nestjs-core": "1.2.0-rc.1"
|
|
109
116
|
}
|
|
110
117
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function localToUtc(dateStr: string, timeStr: string, timezone: string): Date;
|
|
2
|
+
export declare function utcToLocal(utcDate: Date | string, timezone: string): {
|
|
3
|
+
date: string;
|
|
4
|
+
time: string;
|
|
5
|
+
display: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function formatInTimezone(utcDate: Date | string, timezone: string, options?: Intl.DateTimeFormatOptions): string;
|
|
8
|
+
export declare function getTodayInTimezone(timezone: string): string;
|
package/utils/index.d.ts
CHANGED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ObjectLiteral, SelectQueryBuilder } from 'typeorm';
|
|
2
|
+
import { ILoggedUserInfo } from '../interfaces';
|
|
3
|
+
export interface ICompanyFilterConfig {
|
|
4
|
+
isCompanyFeatureEnabled: boolean;
|
|
5
|
+
entityAlias: string;
|
|
6
|
+
columnName?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function applyCompanyFilter<T extends ObjectLiteral>(query: SelectQueryBuilder<T>, config: ICompanyFilterConfig, user: ILoggedUserInfo | null | undefined): SelectQueryBuilder<T>;
|
|
9
|
+
export declare function buildCompanyWhereCondition<T extends Record<string, unknown>>(baseWhere: T, isCompanyFeatureEnabled: boolean, user: ILoggedUserInfo | null | undefined): T & {
|
|
10
|
+
companyId?: string;
|
|
11
|
+
};
|
|
12
|
+
export interface ICompanyEnabled {
|
|
13
|
+
companyId?: string | null;
|
|
14
|
+
}
|
|
15
|
+
export declare function hasCompanyId<T>(entity: T): entity is T & ICompanyEnabled;
|
|
16
|
+
export declare function validateCompanyOwnership<T>(entity: T, user: ILoggedUserInfo | null | undefined, isCompanyFeatureEnabled: boolean, entityName: string): void;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CookieOptions, Request } from 'express';
|
|
2
|
+
export declare function isBrowserRequest(req: Request): boolean;
|
|
3
|
+
export declare function buildCookieOptions(req: Request): Pick<CookieOptions, 'secure' | 'sameSite' | 'domain'>;
|
|
4
|
+
export declare function parseDurationToMs(duration: string, defaultMs?: number): number;
|
|
5
|
+
export declare function extractFrontendUrl(req: Request): string;
|
|
6
|
+
export declare function buildFrontendUrl(req: Request, path: string): string;
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "RequestScopedApiService", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return RequestScopedApiService;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _common = require("@nestjs/common");
|
|
12
|
-
const _apiserviceclass = require("./api-service.class");
|
|
13
|
-
function _define_property(obj, key, value) {
|
|
14
|
-
if (key in obj) {
|
|
15
|
-
Object.defineProperty(obj, key, {
|
|
16
|
-
value: value,
|
|
17
|
-
enumerable: true,
|
|
18
|
-
configurable: true,
|
|
19
|
-
writable: true
|
|
20
|
-
});
|
|
21
|
-
} else {
|
|
22
|
-
obj[key] = value;
|
|
23
|
-
}
|
|
24
|
-
return obj;
|
|
25
|
-
}
|
|
26
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
27
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
28
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
29
|
-
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;
|
|
30
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
31
|
-
}
|
|
32
|
-
let RequestScopedApiService = class RequestScopedApiService extends _apiserviceclass.ApiService {
|
|
33
|
-
async ensureRepositoryInitialized() {
|
|
34
|
-
if (!this.repositoryInitialized) {
|
|
35
|
-
const entity = this.resolveEntity();
|
|
36
|
-
const provider = this.getDataSourceProvider();
|
|
37
|
-
this.repository = await provider.getRepository(entity);
|
|
38
|
-
this.repositoryInitialized = true;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/** Initialize additional repositories beyond the primary entity */ async initializeAdditionalRepositories(entities) {
|
|
42
|
-
const provider = this.getDataSourceProvider();
|
|
43
|
-
const repositories = [];
|
|
44
|
-
for (const entity of entities){
|
|
45
|
-
repositories.push(await provider.getRepository(entity));
|
|
46
|
-
}
|
|
47
|
-
return repositories;
|
|
48
|
-
}
|
|
49
|
-
/** Get DataSource for direct access (transactions, custom queries) */ async getDataSourceForService() {
|
|
50
|
-
const provider = this.getDataSourceProvider();
|
|
51
|
-
return await provider.getDataSource();
|
|
52
|
-
}
|
|
53
|
-
constructor(...args){
|
|
54
|
-
super(...args), _define_property(this, "repositoryInitialized", false);
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
RequestScopedApiService = _ts_decorate([
|
|
58
|
-
(0, _common.Injectable)({
|
|
59
|
-
scope: _common.Scope.REQUEST
|
|
60
|
-
})
|
|
61
|
-
], RequestScopedApiService);
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
function _export(target, all) {
|
|
6
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
get NestLoggerAdapter () {
|
|
13
|
-
return NestLoggerAdapter;
|
|
14
|
-
},
|
|
15
|
-
get WinstonLoggerAdapter () {
|
|
16
|
-
return WinstonLoggerAdapter;
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
const _winstonloggerclass = require("./winston.logger.class");
|
|
20
|
-
const _loggermiddleware = require("../middlewares/logger.middleware");
|
|
21
|
-
function _define_property(obj, key, value) {
|
|
22
|
-
if (key in obj) {
|
|
23
|
-
Object.defineProperty(obj, key, {
|
|
24
|
-
value: value,
|
|
25
|
-
enumerable: true,
|
|
26
|
-
configurable: true,
|
|
27
|
-
writable: true
|
|
28
|
-
});
|
|
29
|
-
} else {
|
|
30
|
-
obj[key] = value;
|
|
31
|
-
}
|
|
32
|
-
return obj;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Get correlation context for logging
|
|
36
|
-
* Automatically includes requestId, userId, tenantId, companyId if available
|
|
37
|
-
*/ function getCorrelationMeta() {
|
|
38
|
-
const meta = {};
|
|
39
|
-
const requestId = (0, _loggermiddleware.getRequestId)();
|
|
40
|
-
const userId = (0, _loggermiddleware.getUserId)();
|
|
41
|
-
const tenantId = (0, _loggermiddleware.getTenantId)();
|
|
42
|
-
const companyId = (0, _loggermiddleware.getCompanyId)();
|
|
43
|
-
if (requestId) meta.requestId = requestId;
|
|
44
|
-
if (userId) meta.userId = userId;
|
|
45
|
-
if (tenantId) meta.tenantId = tenantId;
|
|
46
|
-
if (companyId) meta.companyId = companyId;
|
|
47
|
-
return meta;
|
|
48
|
-
}
|
|
49
|
-
let WinstonLoggerAdapter = class WinstonLoggerAdapter {
|
|
50
|
-
log(message, context, ...args) {
|
|
51
|
-
const meta = args.length > 0 && typeof args[0] === 'object' ? args[0] : {};
|
|
52
|
-
_winstonloggerclass.instance.info(message, {
|
|
53
|
-
context: context || this.context,
|
|
54
|
-
...getCorrelationMeta(),
|
|
55
|
-
...meta
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
error(message, trace, context, ...args) {
|
|
59
|
-
const meta = args.length > 0 && typeof args[0] === 'object' ? args[0] : {};
|
|
60
|
-
_winstonloggerclass.instance.error(message, {
|
|
61
|
-
context: context || this.context,
|
|
62
|
-
stack: trace,
|
|
63
|
-
...getCorrelationMeta(),
|
|
64
|
-
...meta
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
warn(message, context, ...args) {
|
|
68
|
-
const meta = args.length > 0 && typeof args[0] === 'object' ? args[0] : {};
|
|
69
|
-
_winstonloggerclass.instance.warn(message, {
|
|
70
|
-
context: context || this.context,
|
|
71
|
-
...getCorrelationMeta(),
|
|
72
|
-
...meta
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
debug(message, context, ...args) {
|
|
76
|
-
const meta = args.length > 0 && typeof args[0] === 'object' ? args[0] : {};
|
|
77
|
-
_winstonloggerclass.instance.debug(message, {
|
|
78
|
-
context: context || this.context,
|
|
79
|
-
...getCorrelationMeta(),
|
|
80
|
-
...meta
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
verbose(message, context, ...args) {
|
|
84
|
-
const meta = args.length > 0 && typeof args[0] === 'object' ? args[0] : {};
|
|
85
|
-
_winstonloggerclass.instance.verbose(message, {
|
|
86
|
-
context: context || this.context,
|
|
87
|
-
...getCorrelationMeta(),
|
|
88
|
-
...meta
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
constructor(context){
|
|
92
|
-
_define_property(this, "context", void 0);
|
|
93
|
-
this.context = context;
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
let NestLoggerAdapter = class NestLoggerAdapter {
|
|
97
|
-
log(message, context, ...args) {
|
|
98
|
-
const logMessage = args.length > 0 ? `${message} ${JSON.stringify(args)}` : message;
|
|
99
|
-
this.logger.log(logMessage, context);
|
|
100
|
-
}
|
|
101
|
-
error(message, trace, context, ...args) {
|
|
102
|
-
const logMessage = args.length > 0 ? `${message} ${JSON.stringify(args)}` : message;
|
|
103
|
-
this.logger.error(logMessage, trace, context);
|
|
104
|
-
}
|
|
105
|
-
warn(message, context, ...args) {
|
|
106
|
-
const logMessage = args.length > 0 ? `${message} ${JSON.stringify(args)}` : message;
|
|
107
|
-
this.logger.warn(logMessage, context);
|
|
108
|
-
}
|
|
109
|
-
debug(message, context, ...args) {
|
|
110
|
-
const logMessage = args.length > 0 ? `${message} ${JSON.stringify(args)}` : message;
|
|
111
|
-
this.logger.debug(logMessage, context);
|
|
112
|
-
}
|
|
113
|
-
verbose(message, context, ...args) {
|
|
114
|
-
const logMessage = args.length > 0 ? `${message} ${JSON.stringify(args)}` : message;
|
|
115
|
-
this.logger.verbose(logMessage, context);
|
|
116
|
-
}
|
|
117
|
-
constructor(logger){
|
|
118
|
-
_define_property(this, "logger", void 0);
|
|
119
|
-
this.logger = logger;
|
|
120
|
-
}
|
|
121
|
-
};
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "QueryPerformanceInterceptor", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return QueryPerformanceInterceptor;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _common = require("@nestjs/common");
|
|
12
|
-
const _operators = require("rxjs/operators");
|
|
13
|
-
function _define_property(obj, key, value) {
|
|
14
|
-
if (key in obj) {
|
|
15
|
-
Object.defineProperty(obj, key, {
|
|
16
|
-
value: value,
|
|
17
|
-
enumerable: true,
|
|
18
|
-
configurable: true,
|
|
19
|
-
writable: true
|
|
20
|
-
});
|
|
21
|
-
} else {
|
|
22
|
-
obj[key] = value;
|
|
23
|
-
}
|
|
24
|
-
return obj;
|
|
25
|
-
}
|
|
26
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
27
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
28
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
29
|
-
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;
|
|
30
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
31
|
-
}
|
|
32
|
-
function _ts_metadata(k, v) {
|
|
33
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
34
|
-
}
|
|
35
|
-
let QueryPerformanceInterceptor = class QueryPerformanceInterceptor {
|
|
36
|
-
intercept(context, next) {
|
|
37
|
-
const request = context.switchToHttp().getRequest();
|
|
38
|
-
const { method, url } = request;
|
|
39
|
-
const handler = context.getHandler().name;
|
|
40
|
-
const controller = context.getClass().name;
|
|
41
|
-
const startTime = Date.now();
|
|
42
|
-
return next.handle().pipe((0, _operators.tap)(()=>{
|
|
43
|
-
const executionTime = Date.now() - startTime;
|
|
44
|
-
if (executionTime > this.threshold) {
|
|
45
|
-
this.logger.warn(`Slow request detected: ${method} ${url} | ` + `Controller: ${controller}.${handler} | ` + `Execution time: ${executionTime}ms`);
|
|
46
|
-
} else {
|
|
47
|
-
// Optional: Log all requests in debug mode
|
|
48
|
-
this.logger.debug(`${method} ${url} | ${controller}.${handler} | ${executionTime}ms`);
|
|
49
|
-
}
|
|
50
|
-
}));
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* @param threshold - Time threshold in milliseconds (default: 1000ms)
|
|
54
|
-
*/ constructor(threshold = 1000){
|
|
55
|
-
_define_property(this, "logger", new _common.Logger(QueryPerformanceInterceptor.name));
|
|
56
|
-
_define_property(this, "threshold", void 0);
|
|
57
|
-
this.threshold = threshold;
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
QueryPerformanceInterceptor = _ts_decorate([
|
|
61
|
-
(0, _common.Injectable)(),
|
|
62
|
-
_ts_metadata("design:type", Function),
|
|
63
|
-
_ts_metadata("design:paramtypes", [
|
|
64
|
-
Number
|
|
65
|
-
])
|
|
66
|
-
], QueryPerformanceInterceptor);
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "SetCreatedByOnBody", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return SetCreatedByOnBody;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _common = require("@nestjs/common");
|
|
12
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
13
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
14
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
15
|
-
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;
|
|
16
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
17
|
-
}
|
|
18
|
-
let SetCreatedByOnBody = class SetCreatedByOnBody {
|
|
19
|
-
intercept(context, next) {
|
|
20
|
-
const request = context.switchToHttp().getRequest();
|
|
21
|
-
const user = request?.user;
|
|
22
|
-
if (user) {
|
|
23
|
-
if (Array.isArray(request.body)) {
|
|
24
|
-
request.body = request.body.map((item)=>({
|
|
25
|
-
...item,
|
|
26
|
-
createdById: user.id
|
|
27
|
-
}));
|
|
28
|
-
} else if (typeof request.body === 'object' && request.body !== null) {
|
|
29
|
-
request.body = {
|
|
30
|
-
...request.body,
|
|
31
|
-
createdById: user.id
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return next.handle();
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
SetCreatedByOnBody = _ts_decorate([
|
|
39
|
-
(0, _common.Injectable)()
|
|
40
|
-
], SetCreatedByOnBody);
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "SetDeletedByOnBody", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return SetDeletedByOnBody;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _common = require("@nestjs/common");
|
|
12
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
13
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
14
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
15
|
-
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;
|
|
16
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
17
|
-
}
|
|
18
|
-
let SetDeletedByOnBody = class SetDeletedByOnBody {
|
|
19
|
-
intercept(context, next) {
|
|
20
|
-
const request = context.switchToHttp().getRequest();
|
|
21
|
-
const user = request?.user;
|
|
22
|
-
if (user) {
|
|
23
|
-
if (Array.isArray(request.body)) {
|
|
24
|
-
request.body = request.body.map((item)=>({
|
|
25
|
-
...item,
|
|
26
|
-
deletedById: user.id
|
|
27
|
-
}));
|
|
28
|
-
} else if (typeof request.body === 'object' && request.body !== null) {
|
|
29
|
-
request.body = {
|
|
30
|
-
...request.body,
|
|
31
|
-
deletedById: user.id
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return next.handle();
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
SetDeletedByOnBody = _ts_decorate([
|
|
39
|
-
(0, _common.Injectable)()
|
|
40
|
-
], SetDeletedByOnBody);
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "SetUpdateByOnBody", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return SetUpdateByOnBody;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _common = require("@nestjs/common");
|
|
12
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
13
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
14
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
15
|
-
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;
|
|
16
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
17
|
-
}
|
|
18
|
-
let SetUpdateByOnBody = class SetUpdateByOnBody {
|
|
19
|
-
intercept(context, next) {
|
|
20
|
-
const request = context.switchToHttp().getRequest();
|
|
21
|
-
const user = request?.user;
|
|
22
|
-
if (user) {
|
|
23
|
-
if (Array.isArray(request.body)) {
|
|
24
|
-
request.body = request.body.map((item)=>({
|
|
25
|
-
...item,
|
|
26
|
-
updatedById: user.id
|
|
27
|
-
}));
|
|
28
|
-
} else if (typeof request.body === 'object' && request.body !== null) {
|
|
29
|
-
request.body = {
|
|
30
|
-
...request.body,
|
|
31
|
-
updatedById: user.id
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return next.handle();
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
SetUpdateByOnBody = _ts_decorate([
|
|
39
|
-
(0, _common.Injectable)()
|
|
40
|
-
], SetUpdateByOnBody);
|