@kominal/common-nestjs 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/controllers/health.controller.d.ts +6 -0
- package/controllers/health.controller.js +38 -0
- package/controllers/health.controller.js.map +1 -0
- package/entities/access-token.entity.d.ts +21 -0
- package/entities/access-token.entity.js +38 -0
- package/entities/access-token.entity.js.map +1 -0
- package/entities/membership.entity.d.ts +40 -0
- package/entities/membership.entity.js +66 -0
- package/entities/membership.entity.js.map +1 -0
- package/entities/tenant.entity.d.ts +24 -0
- package/entities/tenant.entity.js +38 -0
- package/entities/tenant.entity.js.map +1 -0
- package/entities/user.entity.d.ts +20 -0
- package/entities/user.entity.js +34 -0
- package/entities/user.entity.js.map +1 -0
- package/guards/admin.guard.d.ts +7 -0
- package/guards/admin.guard.js +29 -0
- package/guards/admin.guard.js.map +1 -0
- package/guards/system.guard.d.ts +4 -0
- package/guards/system.guard.js +21 -0
- package/guards/system.guard.js.map +1 -0
- package/guards/tenant.guard.d.ts +11 -0
- package/guards/tenant.guard.js +71 -0
- package/guards/tenant.guard.js.map +1 -0
- package/guards/user.guard.d.ts +13 -0
- package/guards/user.guard.js +66 -0
- package/guards/user.guard.js.map +1 -0
- package/helpers/context.decorator.d.ts +7 -0
- package/helpers/context.decorator.js +11 -0
- package/helpers/context.decorator.js.map +1 -0
- package/helpers/custom-operation-name.decorator.d.ts +2 -0
- package/helpers/custom-operation-name.decorator.js +14 -0
- package/helpers/custom-operation-name.decorator.js.map +1 -0
- package/helpers/entity-service.helper.d.ts +56 -0
- package/helpers/entity-service.helper.js +86 -0
- package/helpers/entity-service.helper.js.map +1 -0
- package/helpers/exception-filter.d.ts +4 -0
- package/helpers/exception-filter.js +30 -0
- package/helpers/exception-filter.js.map +1 -0
- package/helpers/logger.d.ts +10 -0
- package/helpers/logger.js +39 -0
- package/helpers/logger.js.map +1 -0
- package/kominal-common.module.d.ts +2 -0
- package/kominal-common.module.js +29 -0
- package/kominal-common.module.js.map +1 -0
- package/middlewares/request-logging.middleware.d.ts +6 -0
- package/middlewares/request-logging.middleware.js +32 -0
- package/middlewares/request-logging.middleware.js.map +1 -0
- package/models/entity.model.d.ts +14 -0
- package/models/entity.model.js +50 -0
- package/models/entity.model.js.map +1 -0
- package/models/stored-file.model.d.ts +8 -0
- package/models/stored-file.model.js +10 -0
- package/models/stored-file.model.js.map +1 -0
- package/package.json +30 -0
- package/services/auth.service.d.ts +4 -0
- package/services/auth.service.js +34 -0
- package/services/auth.service.js.map +1 -0
- package/services/file.service.d.ts +7 -0
- package/services/file.service.js +57 -0
- package/services/file.service.js.map +1 -0
- package/services/health.service.d.ts +3 -0
- package/services/health.service.js +28 -0
- package/services/health.service.js.map +1 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.decorator.js","sourceRoot":"","sources":["../../src/helpers/context.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAAsD;AAEtD,MAAa,WAAW;CAKvB;AALD,kCAKC;AAEY,QAAA,OAAO,GAAG,IAAA,6BAAoB,EAAqB,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE;IAC7E,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC,WAA0B,CAAC;AACxE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CustomOperationName = void 0;
|
|
4
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
5
|
+
const CustomOperationName = (op) => (target, prop, descriptor) => {
|
|
6
|
+
if (!op)
|
|
7
|
+
op = {};
|
|
8
|
+
(0, swagger_1.ApiOperation)({
|
|
9
|
+
...op,
|
|
10
|
+
'x-operation-name': prop.toString(),
|
|
11
|
+
})(target, prop, descriptor);
|
|
12
|
+
};
|
|
13
|
+
exports.CustomOperationName = CustomOperationName;
|
|
14
|
+
//# sourceMappingURL=custom-operation-name.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-operation-name.decorator.js","sourceRoot":"","sources":["../../src/helpers/custom-operation-name.decorator.ts"],"names":[],"mappings":";;;AAAA,6CAAwF;AAEjF,MAAM,mBAAmB,GAC9B,CAAC,EAAwB,EAAmB,EAAE,CAC9C,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;IAC3B,IAAI,CAAC,EAAE;QAAE,EAAE,GAAG,EAAE,CAAC;IACjB,IAAA,sBAAgB,EAAC;QACf,GAAG,EAAE;QACL,kBAAkB,EAAE,IAAI,CAAC,QAAQ,EAAE;KAC7B,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AACtC,CAAC,CAAC;AARS,QAAA,mBAAmB,uBAQ5B"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { FilterQuery, Model, PopulateOptions } from 'mongoose';
|
|
2
|
+
import { BaseEntity } from '../models/entity.model';
|
|
3
|
+
export declare class EntitiesPathParams {
|
|
4
|
+
tenantId: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class OptionalEntityPathParams {
|
|
7
|
+
tenantId: string;
|
|
8
|
+
uuid?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class EntityPathParams {
|
|
11
|
+
tenantId: string;
|
|
12
|
+
uuid: string;
|
|
13
|
+
}
|
|
14
|
+
export declare class GlobalEntityPathParams {
|
|
15
|
+
uuid: string;
|
|
16
|
+
}
|
|
17
|
+
export declare class ListParams {
|
|
18
|
+
active?: string;
|
|
19
|
+
direction?: string;
|
|
20
|
+
pageIndex?: number;
|
|
21
|
+
pageSize?: number;
|
|
22
|
+
filter?: string;
|
|
23
|
+
select?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare class ListResponse<T> {
|
|
26
|
+
items: T[];
|
|
27
|
+
count: number;
|
|
28
|
+
}
|
|
29
|
+
export declare const OpenApiPaginationResponse: (model: any) => (<TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void);
|
|
30
|
+
declare class ChangeContext {
|
|
31
|
+
email: string;
|
|
32
|
+
}
|
|
33
|
+
export declare function created<Entity extends BaseEntity>(changeContext: ChangeContext, entity: Partial<Entity>): Partial<Entity>;
|
|
34
|
+
export declare function changed<Entity extends BaseEntity>(changeContext: ChangeContext, entity: Partial<Entity>): Partial<Entity>;
|
|
35
|
+
export declare class EntityService<Entity extends BaseEntity, EntitiesPath extends FilterQuery<Entity> = EntitiesPathParams, EntityPath extends FilterQuery<Entity> = EntityPathParams, PopulatedEntity = Entity> {
|
|
36
|
+
private model;
|
|
37
|
+
protected options?: {
|
|
38
|
+
listSelect?: string;
|
|
39
|
+
populate?: PopulateOptions | PopulateOptions[];
|
|
40
|
+
defaultSortKey?: string;
|
|
41
|
+
defaultSortDirection?: string;
|
|
42
|
+
} | undefined;
|
|
43
|
+
constructor(model: Model<Entity>, options?: {
|
|
44
|
+
listSelect?: string;
|
|
45
|
+
populate?: PopulateOptions | PopulateOptions[];
|
|
46
|
+
defaultSortKey?: string;
|
|
47
|
+
defaultSortDirection?: string;
|
|
48
|
+
} | undefined);
|
|
49
|
+
create(changeContext: ChangeContext, pathParams: EntitiesPath, createRequest: Partial<Entity>): Promise<Entity>;
|
|
50
|
+
list(pathParams: EntitiesPath, { active, direction, pageIndex, pageSize, filter, select }: ListParams): Promise<ListResponse<PopulatedEntity>>;
|
|
51
|
+
read(params: EntityPath): Promise<Entity>;
|
|
52
|
+
update(changeContext: ChangeContext, entityPath: EntityPath, createRequest: Partial<Entity>): Promise<void>;
|
|
53
|
+
delete(params: EntityPath): Promise<any>;
|
|
54
|
+
inUse(params: EntityPath): Promise<boolean>;
|
|
55
|
+
}
|
|
56
|
+
export {};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EntityService = exports.OpenApiPaginationResponse = exports.ListResponse = exports.ListParams = exports.GlobalEntityPathParams = exports.EntityPathParams = exports.OptionalEntityPathParams = exports.EntitiesPathParams = void 0;
|
|
4
|
+
exports.created = created;
|
|
5
|
+
exports.changed = changed;
|
|
6
|
+
const common_1 = require("@nestjs/common");
|
|
7
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
8
|
+
const uuid_1 = require("uuid");
|
|
9
|
+
class EntitiesPathParams {
|
|
10
|
+
}
|
|
11
|
+
exports.EntitiesPathParams = EntitiesPathParams;
|
|
12
|
+
class OptionalEntityPathParams {
|
|
13
|
+
}
|
|
14
|
+
exports.OptionalEntityPathParams = OptionalEntityPathParams;
|
|
15
|
+
class EntityPathParams {
|
|
16
|
+
}
|
|
17
|
+
exports.EntityPathParams = EntityPathParams;
|
|
18
|
+
class GlobalEntityPathParams {
|
|
19
|
+
}
|
|
20
|
+
exports.GlobalEntityPathParams = GlobalEntityPathParams;
|
|
21
|
+
class ListParams {
|
|
22
|
+
}
|
|
23
|
+
exports.ListParams = ListParams;
|
|
24
|
+
class ListResponse {
|
|
25
|
+
}
|
|
26
|
+
exports.ListResponse = ListResponse;
|
|
27
|
+
const OpenApiPaginationResponse = (model) => (0, common_1.applyDecorators)((0, swagger_1.ApiOkResponse)({ schema: { properties: { items: { type: 'array', items: { $ref: (0, swagger_1.getSchemaPath)(model) } }, count: { type: 'number' } }, required: ['items', 'count'] } }), (0, swagger_1.ApiExtraModels)(model));
|
|
28
|
+
exports.OpenApiPaginationResponse = OpenApiPaginationResponse;
|
|
29
|
+
class ChangeContext {
|
|
30
|
+
}
|
|
31
|
+
function created(changeContext, entity) {
|
|
32
|
+
return {
|
|
33
|
+
...entity,
|
|
34
|
+
uuid: (0, uuid_1.v4)(),
|
|
35
|
+
createdAt: new Date(),
|
|
36
|
+
createdBy: changeContext.email,
|
|
37
|
+
updatedAt: new Date(),
|
|
38
|
+
updatedBy: changeContext.email,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function changed(changeContext, entity) {
|
|
42
|
+
return {
|
|
43
|
+
...entity,
|
|
44
|
+
updatedAt: new Date(),
|
|
45
|
+
updatedBy: changeContext.email,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
class EntityService {
|
|
49
|
+
constructor(model, options) {
|
|
50
|
+
this.model = model;
|
|
51
|
+
this.options = options;
|
|
52
|
+
}
|
|
53
|
+
async create(changeContext, pathParams, createRequest) {
|
|
54
|
+
return this.model.create(created(changeContext, { ...createRequest, ...pathParams }));
|
|
55
|
+
}
|
|
56
|
+
async list(pathParams, { active, direction, pageIndex, pageSize, filter, select }) {
|
|
57
|
+
const evaluatedFilter = { ...(filter ? JSON.parse(filter) : {}), ...pathParams };
|
|
58
|
+
const items = await this.model
|
|
59
|
+
.find(evaluatedFilter)
|
|
60
|
+
.select(this.options?.listSelect || select || '')
|
|
61
|
+
.sort({ [active || this.options?.defaultSortKey || '_id']: (direction || this.options?.defaultSortDirection || 'asc') })
|
|
62
|
+
.skip((pageIndex || 0) * (pageSize || 10))
|
|
63
|
+
.limit(pageSize || 10)
|
|
64
|
+
.populate(this.options?.populate || [])
|
|
65
|
+
.lean();
|
|
66
|
+
const count = await this.model.countDocuments(evaluatedFilter);
|
|
67
|
+
return { items, count };
|
|
68
|
+
}
|
|
69
|
+
async read(params) {
|
|
70
|
+
return this.model.findOne(params).orFail(new common_1.HttpException('exception.notFound', 404));
|
|
71
|
+
}
|
|
72
|
+
async update(changeContext, entityPath, createRequest) {
|
|
73
|
+
await this.model.updateOne(entityPath, changed(changeContext, { ...createRequest, tenantId: entityPath.tenantId }));
|
|
74
|
+
}
|
|
75
|
+
async delete(params) {
|
|
76
|
+
if (await this.inUse(params)) {
|
|
77
|
+
throw new common_1.HttpException('exception.inUse', 404);
|
|
78
|
+
}
|
|
79
|
+
return this.model.deleteOne(params);
|
|
80
|
+
}
|
|
81
|
+
async inUse(params) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.EntityService = EntityService;
|
|
86
|
+
//# sourceMappingURL=entity-service.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-service.helper.js","sourceRoot":"","sources":["../../src/helpers/entity-service.helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
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.ErrorFilter = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
let ErrorFilter = class ErrorFilter {
|
|
12
|
+
catch(error, host) {
|
|
13
|
+
const ctx = host.switchToHttp();
|
|
14
|
+
const response = ctx.getResponse();
|
|
15
|
+
console.error(error);
|
|
16
|
+
if (error instanceof common_1.HttpException) {
|
|
17
|
+
const httpException = error;
|
|
18
|
+
response.status(httpException.getStatus()).json(httpException.getResponse());
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
response.status(common_1.HttpStatus.INTERNAL_SERVER_ERROR).json({
|
|
22
|
+
type: 'SERVER_ERROR',
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
exports.ErrorFilter = ErrorFilter;
|
|
27
|
+
exports.ErrorFilter = ErrorFilter = __decorate([
|
|
28
|
+
(0, common_1.Catch)(Error)
|
|
29
|
+
], ErrorFilter);
|
|
30
|
+
//# sourceMappingURL=exception-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exception-filter.js","sourceRoot":"","sources":["../../src/helpers/exception-filter.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAkG;AAI3F,IAAM,WAAW,GAAjB,MAAM,WAAW;IACf,KAAK,CAAC,KAAY,EAAE,IAAmB;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAY,CAAC;QAE7C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAErB,IAAI,KAAK,YAAY,sBAAa,EAAE,CAAC;YACnC,MAAM,aAAa,GAAG,KAAsB,CAAC;YAC7C,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7E,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,MAAM,CAAC,mBAAU,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC;YACrD,IAAI,EAAE,cAAc;SACrB,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAjBY,kCAAW;sBAAX,WAAW;IADvB,IAAA,cAAK,EAAC,KAAK,CAAC;GACA,WAAW,CAiBvB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { LoggerService } from '@nestjs/common';
|
|
2
|
+
export declare class CustomerLogger implements LoggerService {
|
|
3
|
+
private formatString;
|
|
4
|
+
private logToConsole;
|
|
5
|
+
log(message: any, ...optionalParams: any): void;
|
|
6
|
+
error(message: any, ...optionalParams: any): void;
|
|
7
|
+
warn(message: any, ...optionalParams: any): void;
|
|
8
|
+
debug?(message: any, ...optionalParams: any): void;
|
|
9
|
+
verbose?(message: any, ...optionalParams: any): void;
|
|
10
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
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.CustomerLogger = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
let CustomerLogger = class CustomerLogger {
|
|
12
|
+
formatString(message, ...optionalParams) {
|
|
13
|
+
return message.replace(/{([0-9]+)}/g, (match, index) => (typeof optionalParams[index] === 'undefined' ? match : optionalParams[index]));
|
|
14
|
+
}
|
|
15
|
+
logToConsole(level, message, ...optionalParams) {
|
|
16
|
+
const parameter = optionalParams[0] || [];
|
|
17
|
+
console.log(`${new Date().toISOString()} [${level}] [${parameter[parameter.length - 1]}] ${this.formatString(message, parameter)}`);
|
|
18
|
+
}
|
|
19
|
+
log(message, ...optionalParams) {
|
|
20
|
+
this.logToConsole('LOG ', message, optionalParams);
|
|
21
|
+
}
|
|
22
|
+
error(message, ...optionalParams) {
|
|
23
|
+
this.logToConsole('ERROR ', message, optionalParams);
|
|
24
|
+
}
|
|
25
|
+
warn(message, ...optionalParams) {
|
|
26
|
+
this.logToConsole('WARN ', message, optionalParams);
|
|
27
|
+
}
|
|
28
|
+
debug(message, ...optionalParams) {
|
|
29
|
+
this.logToConsole('DEBUG ', message, optionalParams);
|
|
30
|
+
}
|
|
31
|
+
verbose(message, ...optionalParams) {
|
|
32
|
+
this.logToConsole('VERBOSE', message, optionalParams);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
exports.CustomerLogger = CustomerLogger;
|
|
36
|
+
exports.CustomerLogger = CustomerLogger = __decorate([
|
|
37
|
+
(0, common_1.Injectable)()
|
|
38
|
+
], CustomerLogger);
|
|
39
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/helpers/logger.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA2D;AAGpD,IAAM,cAAc,GAApB,MAAM,cAAc;IACjB,YAAY,CAAC,OAAe,EAAE,GAAG,cAAqB;QAC5D,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,cAAc,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1I,CAAC;IAEO,YAAY,CAAC,KAAa,EAAE,OAAY,EAAE,GAAG,cAAmB;QACtE,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE1C,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,MAAM,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IACtI,CAAC;IAEM,GAAG,CAAC,OAAY,EAAE,GAAG,cAAmB;QAC7C,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;IACxD,CAAC;IAEM,KAAK,CAAC,OAAY,EAAE,GAAG,cAAmB;QAC/C,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;IACxD,CAAC;IAEM,IAAI,CAAC,OAAY,EAAE,GAAG,cAAmB;QAC9C,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;IACxD,CAAC;IAEM,KAAK,CAAE,OAAY,EAAE,GAAG,cAAmB;QAChD,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;IACxD,CAAC;IAEM,OAAO,CAAE,OAAY,EAAE,GAAG,cAAmB;QAClD,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;IACxD,CAAC;CACF,CAAA;AA9BY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;GACA,cAAc,CA8B1B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
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.KominalCommonModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const health_controller_1 = require("./controllers/health.controller");
|
|
12
|
+
const admin_guard_1 = require("./guards/admin.guard");
|
|
13
|
+
const system_guard_1 = require("./guards/system.guard");
|
|
14
|
+
const tenant_guard_1 = require("./guards/tenant.guard");
|
|
15
|
+
const user_guard_1 = require("./guards/user.guard");
|
|
16
|
+
const auth_service_1 = require("./services/auth.service");
|
|
17
|
+
const file_service_1 = require("./services/file.service");
|
|
18
|
+
const health_service_1 = require("./services/health.service");
|
|
19
|
+
let KominalCommonModule = class KominalCommonModule {
|
|
20
|
+
};
|
|
21
|
+
exports.KominalCommonModule = KominalCommonModule;
|
|
22
|
+
exports.KominalCommonModule = KominalCommonModule = __decorate([
|
|
23
|
+
(0, common_1.Module)({
|
|
24
|
+
controllers: [health_controller_1.HealthController],
|
|
25
|
+
providers: [auth_service_1.AuthService, file_service_1.FileService, health_service_1.HealthService, admin_guard_1.AdminGuard, tenant_guard_1.TenantGuard, user_guard_1.UserGuard, system_guard_1.SystemGuard],
|
|
26
|
+
exports: [auth_service_1.AuthService, file_service_1.FileService, health_service_1.HealthService, admin_guard_1.AdminGuard, tenant_guard_1.TenantGuard, user_guard_1.UserGuard, system_guard_1.SystemGuard],
|
|
27
|
+
})
|
|
28
|
+
], KominalCommonModule);
|
|
29
|
+
//# sourceMappingURL=kominal-common.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kominal-common.module.js","sourceRoot":"","sources":["../src/kominal-common.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,uEAAmE;AACnE,sDAAkD;AAClD,wDAAoD;AACpD,wDAAoD;AACpD,oDAAgD;AAChD,0DAAsD;AACtD,0DAAsD;AACtD,8DAA0D;AAOnD,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;CAAG,CAAA;AAAtB,kDAAmB;8BAAnB,mBAAmB;IAL/B,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,oCAAgB,CAAC;QAC/B,SAAS,EAAE,CAAC,0BAAW,EAAE,0BAAW,EAAE,8BAAa,EAAE,wBAAU,EAAE,0BAAW,EAAE,sBAAS,EAAE,0BAAW,CAAC;QACrG,OAAO,EAAE,CAAC,0BAAW,EAAE,0BAAW,EAAE,8BAAa,EAAE,wBAAU,EAAE,0BAAW,EAAE,sBAAS,EAAE,0BAAW,CAAC;KACpG,CAAC;GACW,mBAAmB,CAAG"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { NestMiddleware } from '@nestjs/common';
|
|
2
|
+
import { NextFunction, Request, Response } from 'express';
|
|
3
|
+
export declare class RequestLoggingMiddleware implements NestMiddleware {
|
|
4
|
+
private readonly logger;
|
|
5
|
+
use(req: Request, res: Response, next: NextFunction): void;
|
|
6
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
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 RequestLoggingMiddleware_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.RequestLoggingMiddleware = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
let RequestLoggingMiddleware = RequestLoggingMiddleware_1 = class RequestLoggingMiddleware {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.logger = new common_1.Logger(RequestLoggingMiddleware_1.name);
|
|
15
|
+
}
|
|
16
|
+
use(req, res, next) {
|
|
17
|
+
const time = new Date().getTime();
|
|
18
|
+
const requestText = `${req.method} ${req.originalUrl}`;
|
|
19
|
+
this.logger.log(requestText);
|
|
20
|
+
res.on('close', () => {
|
|
21
|
+
const { statusCode } = res;
|
|
22
|
+
const contentLength = res.get('content-length');
|
|
23
|
+
this.logger.log(`${requestText} ${statusCode} ${contentLength} ${new Date().getTime() - time}ms`);
|
|
24
|
+
});
|
|
25
|
+
next();
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
exports.RequestLoggingMiddleware = RequestLoggingMiddleware;
|
|
29
|
+
exports.RequestLoggingMiddleware = RequestLoggingMiddleware = RequestLoggingMiddleware_1 = __decorate([
|
|
30
|
+
(0, common_1.Injectable)()
|
|
31
|
+
], RequestLoggingMiddleware);
|
|
32
|
+
//# sourceMappingURL=request-logging.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-logging.middleware.js","sourceRoot":"","sources":["../../src/middlewares/request-logging.middleware.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAoE;AAI7D,IAAM,wBAAwB,gCAA9B,MAAM,wBAAwB;IAA9B;QACY,WAAM,GAAG,IAAI,eAAM,CAAC,0BAAwB,CAAC,IAAI,CAAC,CAAC;IAatE,CAAC;IAXQ,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;QACxD,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC7B,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACnB,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;YAC3B,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,IAAI,UAAU,IAAI,aAAa,IAAI,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;QACpG,CAAC,CAAC,CAAC;QACH,IAAI,EAAE,CAAC;IACT,CAAC;CACF,CAAA;AAdY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;GACA,wBAAwB,CAcpC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare abstract class BaseEntity {
|
|
2
|
+
_id: string;
|
|
3
|
+
uuid: string;
|
|
4
|
+
createdAt: Date;
|
|
5
|
+
createdBy: string;
|
|
6
|
+
updatedAt: Date;
|
|
7
|
+
updatedBy: string;
|
|
8
|
+
version: number;
|
|
9
|
+
}
|
|
10
|
+
export declare const TECHNICAL_KEYS_BASE_ENTITY: (keyof BaseEntity)[];
|
|
11
|
+
export declare abstract class TenantEntity extends BaseEntity {
|
|
12
|
+
tenantId: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const TECHNICAL_KEYS: (keyof TenantEntity)[];
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.TECHNICAL_KEYS = exports.TenantEntity = exports.TECHNICAL_KEYS_BASE_ENTITY = exports.BaseEntity = void 0;
|
|
13
|
+
const mongoose_1 = require("@nestjs/mongoose");
|
|
14
|
+
class BaseEntity {
|
|
15
|
+
}
|
|
16
|
+
exports.BaseEntity = BaseEntity;
|
|
17
|
+
__decorate([
|
|
18
|
+
(0, mongoose_1.Prop)(),
|
|
19
|
+
__metadata("design:type", String)
|
|
20
|
+
], BaseEntity.prototype, "uuid", void 0);
|
|
21
|
+
__decorate([
|
|
22
|
+
(0, mongoose_1.Prop)(),
|
|
23
|
+
__metadata("design:type", Date)
|
|
24
|
+
], BaseEntity.prototype, "createdAt", void 0);
|
|
25
|
+
__decorate([
|
|
26
|
+
(0, mongoose_1.Prop)(),
|
|
27
|
+
__metadata("design:type", String)
|
|
28
|
+
], BaseEntity.prototype, "createdBy", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, mongoose_1.Prop)(),
|
|
31
|
+
__metadata("design:type", Date)
|
|
32
|
+
], BaseEntity.prototype, "updatedAt", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
(0, mongoose_1.Prop)(),
|
|
35
|
+
__metadata("design:type", String)
|
|
36
|
+
], BaseEntity.prototype, "updatedBy", void 0);
|
|
37
|
+
__decorate([
|
|
38
|
+
(0, mongoose_1.Prop)(),
|
|
39
|
+
__metadata("design:type", Number)
|
|
40
|
+
], BaseEntity.prototype, "version", void 0);
|
|
41
|
+
exports.TECHNICAL_KEYS_BASE_ENTITY = ['_id', 'uuid', 'createdAt', 'createdBy', 'updatedAt', 'updatedBy', 'version'];
|
|
42
|
+
class TenantEntity extends BaseEntity {
|
|
43
|
+
}
|
|
44
|
+
exports.TenantEntity = TenantEntity;
|
|
45
|
+
__decorate([
|
|
46
|
+
(0, mongoose_1.Prop)(),
|
|
47
|
+
__metadata("design:type", String)
|
|
48
|
+
], TenantEntity.prototype, "tenantId", void 0);
|
|
49
|
+
exports.TECHNICAL_KEYS = [...exports.TECHNICAL_KEYS_BASE_ENTITY, 'tenantId'];
|
|
50
|
+
//# sourceMappingURL=entity.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.model.js","sourceRoot":"","sources":["../../src/models/entity.model.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAAwC;AAExC,MAAsB,UAAU;CAQ/B;AARD,gCAQC;AANgB;IAAd,IAAA,eAAI,GAAE;;wCAAqB;AACb;IAAd,IAAA,eAAI,GAAE;8BAAmB,IAAI;6CAAC;AAChB;IAAd,IAAA,eAAI,GAAE;;6CAA0B;AAClB;IAAd,IAAA,eAAI,GAAE;8BAAmB,IAAI;6CAAC;AAChB;IAAd,IAAA,eAAI,GAAE;;6CAA0B;AAClB;IAAd,IAAA,eAAI,GAAE;;2CAAwB;AAGpB,QAAA,0BAA0B,GAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAE/I,MAAsB,YAAa,SAAQ,UAAU;CAEpD;AAFD,oCAEC;AADgB;IAAd,IAAA,eAAI,GAAE;;8CAAyB;AAGrB,QAAA,cAAc,GAA2B,CAAC,GAAG,kCAA0B,EAAE,UAAU,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StoredFileSignedUrl = exports.StoredFile = void 0;
|
|
4
|
+
class StoredFile {
|
|
5
|
+
}
|
|
6
|
+
exports.StoredFile = StoredFile;
|
|
7
|
+
class StoredFileSignedUrl {
|
|
8
|
+
}
|
|
9
|
+
exports.StoredFileSignedUrl = StoredFileSignedUrl;
|
|
10
|
+
//# sourceMappingURL=stored-file.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stored-file.model.js","sourceRoot":"","sources":["../../src/models/stored-file.model.ts"],"names":[],"mappings":";;;AAAA,MAAa,UAAU;CAMtB;AAND,gCAMC;AAED,MAAa,mBAAmB;CAE/B;AAFD,kDAEC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@kominal/common-nestjs",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"build": "nest build",
|
|
8
|
+
"postbuild": "cp package.json dist",
|
|
9
|
+
"publish": "npm run build && cd dist && npm publish"
|
|
10
|
+
},
|
|
11
|
+
"author": "",
|
|
12
|
+
"license": "ISC",
|
|
13
|
+
"publishConfig": {
|
|
14
|
+
"access": "public"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@aws-sdk/client-s3": "^3.787.0",
|
|
18
|
+
"@aws-sdk/s3-request-presigner": "^3.787.0",
|
|
19
|
+
"@nestjs/common": "^11.0.20",
|
|
20
|
+
"@nestjs/mongoose": "^11.0.3",
|
|
21
|
+
"@nestjs/swagger": "^11.1.4",
|
|
22
|
+
"express": "^5.1.0",
|
|
23
|
+
"jsonwebtoken": "^9.0.2",
|
|
24
|
+
"jwks-rsa": "^3.2.0",
|
|
25
|
+
"uuid": "^11.1.0"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/node": "^22.14.1"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
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.AuthService = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const jsonwebtoken_1 = require("jsonwebtoken");
|
|
12
|
+
const jwks_rsa_1 = require("jwks-rsa");
|
|
13
|
+
let AuthService = class AuthService {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.jwksClient = new jwks_rsa_1.JwksClient({ jwksUri: process.env.JWKS_URI || '' });
|
|
16
|
+
}
|
|
17
|
+
async getClaims(bearerHeader) {
|
|
18
|
+
if (!bearerHeader) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
const token = bearerHeader.split(' ')[1];
|
|
22
|
+
const decodedToken = (0, jsonwebtoken_1.decode)(token, { complete: true });
|
|
23
|
+
if (!decodedToken) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
const publicKey = await this.jwksClient.getSigningKey(decodedToken.header.kid).then((key) => key.getPublicKey());
|
|
27
|
+
return (0, jsonwebtoken_1.verify)(token, publicKey);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
exports.AuthService = AuthService;
|
|
31
|
+
exports.AuthService = AuthService = __decorate([
|
|
32
|
+
(0, common_1.Injectable)()
|
|
33
|
+
], AuthService);
|
|
34
|
+
//# sourceMappingURL=auth.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../src/services/auth.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,+CAA8C;AAC9C,uCAAsC;AAG/B,IAAM,WAAW,GAAjB,MAAM,WAAW;IAAjB;QACG,eAAU,GAAG,IAAI,qBAAU,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;IAmB/E,CAAC;IAjBQ,KAAK,CAAC,SAAS,CAAC,YAAoB;QACzC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzC,MAAM,YAAY,GAAG,IAAA,qBAAM,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;QAEjH,OAAO,IAAA,qBAAM,EAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAClC,CAAC;CACF,CAAA;AApBY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;GACA,WAAW,CAoBvB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { StoredFile, StoredFileSignedUrl } from '../models/stored-file.model';
|
|
2
|
+
export declare class FileService {
|
|
3
|
+
private s3Client;
|
|
4
|
+
private bucket;
|
|
5
|
+
storeFile(tenantId: string, buffer: Buffer, originalname: string, userId: string, email: string): Promise<StoredFile>;
|
|
6
|
+
getSignedUrl(tenantId: string, key: string): Promise<StoredFileSignedUrl>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
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.FileService = void 0;
|
|
10
|
+
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
11
|
+
const s3_request_presigner_1 = require("@aws-sdk/s3-request-presigner");
|
|
12
|
+
const common_1 = require("@nestjs/common");
|
|
13
|
+
const uuid_1 = require("uuid");
|
|
14
|
+
let FileService = class FileService {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.s3Client = new client_s3_1.S3Client({
|
|
17
|
+
endpoint: process.env.S3_ENDPOINT,
|
|
18
|
+
forcePathStyle: true,
|
|
19
|
+
region: 'eu',
|
|
20
|
+
credentials: {
|
|
21
|
+
accessKeyId: process.env.S3_ACCESS_KEY || '',
|
|
22
|
+
secretAccessKey: process.env.S3_SECRET_KEY || '',
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
this.bucket = process.env.S3_BUCKET || '';
|
|
26
|
+
}
|
|
27
|
+
async storeFile(tenantId, buffer, originalname, userId, email) {
|
|
28
|
+
const fileName = `${(0, uuid_1.v4)()}_${(0, uuid_1.v4)()}_${originalname}`;
|
|
29
|
+
const key = `tenants/${tenantId}/${fileName}`;
|
|
30
|
+
await this.s3Client.send(new client_s3_1.PutObjectCommand({
|
|
31
|
+
Bucket: this.bucket,
|
|
32
|
+
Key: key,
|
|
33
|
+
Body: buffer,
|
|
34
|
+
ACL: 'private',
|
|
35
|
+
Metadata: {
|
|
36
|
+
tenantId,
|
|
37
|
+
userId,
|
|
38
|
+
email,
|
|
39
|
+
originalname,
|
|
40
|
+
},
|
|
41
|
+
}));
|
|
42
|
+
return { name: originalname, location: `${process.env.S3_ENDPOINT}/${process.env.S3_BUCKET}/${key}`, key };
|
|
43
|
+
}
|
|
44
|
+
async getSignedUrl(tenantId, key) {
|
|
45
|
+
const head = await this.s3Client.send(new client_s3_1.HeadObjectCommand({ Bucket: this.bucket, Key: key }));
|
|
46
|
+
if (head.Metadata?.tenantid !== tenantId) {
|
|
47
|
+
throw new Error('Unauthorized');
|
|
48
|
+
}
|
|
49
|
+
const url = await (0, s3_request_presigner_1.getSignedUrl)(this.s3Client, new client_s3_1.GetObjectCommand({ Bucket: this.bucket, Key: key }), { expiresIn: 3600 });
|
|
50
|
+
return { url };
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
exports.FileService = FileService;
|
|
54
|
+
exports.FileService = FileService = __decorate([
|
|
55
|
+
(0, common_1.Injectable)()
|
|
56
|
+
], FileService);
|
|
57
|
+
//# sourceMappingURL=file.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.service.js","sourceRoot":"","sources":["../../src/services/file.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,kDAAqG;AACrG,wEAA6D;AAC7D,2CAA4C;AAC5C,+BAA0B;AAInB,IAAM,WAAW,GAAjB,MAAM,WAAW;IAAjB;QACE,aAAQ,GAAG,IAAI,oBAAQ,CAAC;YAC/B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;YACjC,cAAc,EAAE,IAAI;YACpB,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE;gBACZ,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE;gBAC5C,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE;aAChD;SACD,CAAC,CAAC;QAEK,WAAM,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;IAkC9C,CAAC;IAhCO,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,MAAc,EAAE,YAAoB,EAAE,MAAc,EAAE,KAAa;QAC3G,MAAM,QAAQ,GAAG,GAAG,IAAA,SAAE,GAAE,IAAI,IAAA,SAAE,GAAE,IAAI,YAAY,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,WAAW,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAC9C,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CACvB,IAAI,4BAAgB,CAAC;YACpB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,MAAM;YACZ,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE;gBACT,QAAQ;gBACR,MAAM;gBACN,KAAK;gBACL,YAAY;aACZ;SACD,CAAC,CACF,CAAC;QAEF,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC;IAC5G,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,GAAW;QACtD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,6BAAiB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAEhG,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,IAAA,mCAAY,EAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,4BAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5H,OAAO,EAAE,GAAG,EAAE,CAAC;IAChB,CAAC;CACD,CAAA;AA7CY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;GACA,WAAW,CA6CvB"}
|