@lenne.tech/nest-server 11.7.2 → 11.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/core/common/interfaces/server-options.interface.d.ts +22 -0
  2. package/dist/core/modules/auth/guards/roles.guard.d.ts +12 -2
  3. package/dist/core/modules/auth/guards/roles.guard.js +192 -5
  4. package/dist/core/modules/auth/guards/roles.guard.js.map +1 -1
  5. package/dist/core/modules/file/core-file.controller.d.ts +1 -0
  6. package/dist/core/modules/file/core-file.controller.js +22 -0
  7. package/dist/core/modules/file/core-file.controller.js.map +1 -1
  8. package/dist/core/modules/tus/core-tus.controller.d.ts +9 -0
  9. package/dist/core/modules/tus/core-tus.controller.js +85 -0
  10. package/dist/core/modules/tus/core-tus.controller.js.map +1 -0
  11. package/dist/core/modules/tus/core-tus.service.d.ts +30 -0
  12. package/dist/core/modules/tus/core-tus.service.js +284 -0
  13. package/dist/core/modules/tus/core-tus.service.js.map +1 -0
  14. package/dist/core/modules/tus/index.d.ts +4 -0
  15. package/dist/core/modules/tus/index.js +21 -0
  16. package/dist/core/modules/tus/index.js.map +1 -0
  17. package/dist/core/modules/tus/interfaces/tus-config.interface.d.ts +10 -0
  18. package/dist/core/modules/tus/interfaces/tus-config.interface.js +59 -0
  19. package/dist/core/modules/tus/interfaces/tus-config.interface.js.map +1 -0
  20. package/dist/core/modules/tus/tus.module.d.ts +21 -0
  21. package/dist/core/modules/tus/tus.module.js +99 -0
  22. package/dist/core/modules/tus/tus.module.js.map +1 -0
  23. package/dist/core/modules/user/core-user.service.d.ts +1 -0
  24. package/dist/core/modules/user/core-user.service.js +12 -0
  25. package/dist/core/modules/user/core-user.service.js.map +1 -1
  26. package/dist/index.d.ts +1 -0
  27. package/dist/index.js +1 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/server/modules/file/file.controller.d.ts +5 -7
  30. package/dist/server/modules/file/file.controller.js +3 -31
  31. package/dist/server/modules/file/file.controller.js.map +1 -1
  32. package/dist/server/server.module.js +3 -1
  33. package/dist/server/server.module.js.map +1 -1
  34. package/dist/tsconfig.build.tsbuildinfo +1 -1
  35. package/package.json +4 -1
  36. package/src/core/common/interfaces/server-options.interface.ts +154 -0
  37. package/src/core/modules/auth/guards/roles.guard.ts +298 -5
  38. package/src/core/modules/file/README.md +165 -0
  39. package/src/core/modules/file/core-file.controller.ts +27 -1
  40. package/src/core/modules/tus/INTEGRATION-CHECKLIST.md +176 -0
  41. package/src/core/modules/tus/README.md +439 -0
  42. package/src/core/modules/tus/core-tus.controller.ts +88 -0
  43. package/src/core/modules/tus/core-tus.service.ts +424 -0
  44. package/src/core/modules/tus/index.ts +5 -0
  45. package/src/core/modules/tus/interfaces/tus-config.interface.ts +107 -0
  46. package/src/core/modules/tus/tus.module.ts +187 -0
  47. package/src/core/modules/user/core-user.service.ts +27 -0
  48. package/src/index.ts +6 -0
  49. package/src/server/modules/file/file.controller.ts +14 -34
  50. package/src/server/server.module.ts +5 -1
@@ -195,4 +195,26 @@ export interface IServerOptions {
195
195
  engine?: string;
196
196
  path?: string;
197
197
  };
198
+ tus?: boolean | ITusConfig;
199
+ }
200
+ export interface ITusConfig {
201
+ allowedHeaders?: string[];
202
+ allowedTypes?: string[];
203
+ checksum?: boolean;
204
+ concatenation?: boolean;
205
+ creation?: boolean | ITusCreationConfig;
206
+ creationWithUpload?: boolean;
207
+ enabled?: boolean;
208
+ expiration?: boolean | ITusExpirationConfig;
209
+ maxSize?: number;
210
+ path?: string;
211
+ termination?: boolean;
212
+ uploadDir?: string;
213
+ }
214
+ export interface ITusCreationConfig {
215
+ enabled?: boolean;
216
+ }
217
+ export interface ITusExpirationConfig {
218
+ enabled?: boolean;
219
+ expiresIn?: string;
198
220
  }
@@ -1,9 +1,19 @@
1
1
  import { ExecutionContext } from '@nestjs/common';
2
- import { Reflector } from '@nestjs/core';
2
+ import { ModuleRef, Reflector } from '@nestjs/core';
3
3
  declare const RolesGuard_base: import("@nestjs/passport").Type<import("./auth.guard").IAuthGuard>;
4
4
  export declare class RolesGuard extends RolesGuard_base {
5
5
  protected readonly reflector: Reflector;
6
- constructor(reflector: Reflector);
6
+ private readonly moduleRef?;
7
+ private readonly logger;
8
+ private betterAuthService;
9
+ private mongoConnection;
10
+ private servicesResolved;
11
+ constructor(reflector: Reflector, moduleRef?: ModuleRef);
12
+ private resolveServices;
13
+ canActivate(context: ExecutionContext): Promise<boolean>;
14
+ private verifyBetterAuthTokenFromContext;
15
+ private loadUserFromPayload;
16
+ private loadUserFromSessionResult;
7
17
  handleRequest(err: any, user: any, info: any, context: any): any;
8
18
  getRequest(context: ExecutionContext): any;
9
19
  }
@@ -8,20 +8,205 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var RolesGuard_1;
11
15
  Object.defineProperty(exports, "__esModule", { value: true });
12
16
  exports.RolesGuard = void 0;
13
17
  const common_1 = require("@nestjs/common");
14
18
  const core_1 = require("@nestjs/core");
15
19
  const graphql_1 = require("@nestjs/graphql");
20
+ const mongoose_1 = require("@nestjs/mongoose");
21
+ const mongoose_2 = require("mongoose");
22
+ const rxjs_1 = require("rxjs");
16
23
  const role_enum_1 = require("../../../common/enums/role.enum");
24
+ const better_auth_service_1 = require("../../better-auth/better-auth.service");
17
25
  const auth_guard_strategy_enum_1 = require("../auth-guard-strategy.enum");
18
26
  const expired_token_exception_1 = require("../exceptions/expired-token.exception");
19
27
  const invalid_token_exception_1 = require("../exceptions/invalid-token.exception");
20
28
  const auth_guard_1 = require("./auth.guard");
21
- let RolesGuard = class RolesGuard extends (0, auth_guard_1.AuthGuard)(auth_guard_strategy_enum_1.AuthGuardStrategy.JWT) {
22
- constructor(reflector) {
29
+ let RolesGuard = RolesGuard_1 = class RolesGuard extends (0, auth_guard_1.AuthGuard)(auth_guard_strategy_enum_1.AuthGuardStrategy.JWT) {
30
+ constructor(reflector, moduleRef) {
23
31
  super();
24
32
  this.reflector = reflector;
33
+ this.moduleRef = moduleRef;
34
+ this.logger = new common_1.Logger(RolesGuard_1.name);
35
+ this.betterAuthService = null;
36
+ this.mongoConnection = null;
37
+ this.servicesResolved = false;
38
+ }
39
+ resolveServices() {
40
+ if (this.servicesResolved || !this.moduleRef) {
41
+ return;
42
+ }
43
+ try {
44
+ this.betterAuthService = this.moduleRef.get(better_auth_service_1.BetterAuthService, { strict: false });
45
+ }
46
+ catch {
47
+ }
48
+ try {
49
+ this.mongoConnection = this.moduleRef.get((0, mongoose_1.getConnectionToken)(), { strict: false });
50
+ }
51
+ catch {
52
+ }
53
+ this.servicesResolved = true;
54
+ }
55
+ async canActivate(context) {
56
+ this.resolveServices();
57
+ try {
58
+ const result = super.canActivate(context);
59
+ return (0, rxjs_1.isObservable)(result) ? await (0, rxjs_1.firstValueFrom)(result) : await result;
60
+ }
61
+ catch (passportError) {
62
+ if (!this.betterAuthService?.isEnabled()) {
63
+ throw passportError;
64
+ }
65
+ const user = await this.verifyBetterAuthTokenFromContext(context);
66
+ if (!user) {
67
+ throw passportError;
68
+ }
69
+ const request = this.getRequest(context);
70
+ if (request) {
71
+ request.user = user;
72
+ }
73
+ this.handleRequest(null, user, null, context);
74
+ return true;
75
+ }
76
+ }
77
+ async verifyBetterAuthTokenFromContext(context) {
78
+ if (!this.betterAuthService || !this.mongoConnection) {
79
+ return null;
80
+ }
81
+ try {
82
+ let authHeader;
83
+ try {
84
+ const gqlContext = graphql_1.GqlExecutionContext.create(context);
85
+ const ctx = gqlContext.getContext();
86
+ if (ctx?.req?.headers) {
87
+ authHeader = ctx.req.headers.authorization || ctx.req.headers.Authorization;
88
+ }
89
+ }
90
+ catch {
91
+ }
92
+ if (!authHeader) {
93
+ try {
94
+ const httpRequest = context.switchToHttp().getRequest();
95
+ if (httpRequest?.headers) {
96
+ authHeader = httpRequest.headers.authorization || httpRequest.headers.Authorization;
97
+ }
98
+ }
99
+ catch {
100
+ }
101
+ }
102
+ let token;
103
+ if (authHeader?.startsWith('Bearer ')) {
104
+ token = authHeader.substring(7);
105
+ }
106
+ else if (authHeader?.startsWith('bearer ')) {
107
+ token = authHeader.substring(7);
108
+ }
109
+ if (!token) {
110
+ return null;
111
+ }
112
+ if (this.betterAuthService.isJwtEnabled()) {
113
+ try {
114
+ const payload = await this.betterAuthService.verifyJwtToken(token);
115
+ if (payload?.sub) {
116
+ const user = await this.loadUserFromPayload(payload);
117
+ if (user) {
118
+ return user;
119
+ }
120
+ }
121
+ }
122
+ catch {
123
+ }
124
+ }
125
+ try {
126
+ const sessionResult = await this.betterAuthService.getSessionByToken(token);
127
+ if (sessionResult?.user) {
128
+ return this.loadUserFromSessionResult(sessionResult.user);
129
+ }
130
+ }
131
+ catch {
132
+ }
133
+ return null;
134
+ }
135
+ catch (error) {
136
+ this.logger.debug(`BetterAuth token fallback failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
137
+ return null;
138
+ }
139
+ }
140
+ async loadUserFromPayload(payload) {
141
+ if (!this.mongoConnection) {
142
+ return null;
143
+ }
144
+ try {
145
+ const usersCollection = this.mongoConnection.collection('users');
146
+ let user = null;
147
+ if (mongoose_2.Types.ObjectId.isValid(payload.sub)) {
148
+ user = await usersCollection.findOne({ _id: new mongoose_2.Types.ObjectId(payload.sub) });
149
+ }
150
+ if (!user) {
151
+ user = await usersCollection.findOne({ iamId: payload.sub });
152
+ }
153
+ if (!user) {
154
+ return null;
155
+ }
156
+ const userObject = {
157
+ ...user,
158
+ _authenticatedViaBetterAuth: true,
159
+ hasRole: (roles) => {
160
+ if (!user.roles || !Array.isArray(user.roles)) {
161
+ return false;
162
+ }
163
+ return roles.some((role) => user.roles.includes(role));
164
+ },
165
+ id: user._id?.toString(),
166
+ };
167
+ return userObject;
168
+ }
169
+ catch (error) {
170
+ this.logger.debug(`Failed to load user from payload: ${error instanceof Error ? error.message : 'Unknown error'}`);
171
+ return null;
172
+ }
173
+ }
174
+ async loadUserFromSessionResult(sessionUser) {
175
+ if (!this.mongoConnection || !sessionUser) {
176
+ return null;
177
+ }
178
+ try {
179
+ const usersCollection = this.mongoConnection.collection('users');
180
+ let user = null;
181
+ if (sessionUser.email) {
182
+ user = await usersCollection.findOne({ email: sessionUser.email });
183
+ }
184
+ if (!user && sessionUser.id) {
185
+ user = await usersCollection.findOne({ iamId: sessionUser.id });
186
+ }
187
+ if (!user && sessionUser.id && mongoose_2.Types.ObjectId.isValid(sessionUser.id)) {
188
+ user = await usersCollection.findOne({ _id: new mongoose_2.Types.ObjectId(sessionUser.id) });
189
+ }
190
+ if (!user) {
191
+ return null;
192
+ }
193
+ const userObject = {
194
+ ...user,
195
+ _authenticatedViaBetterAuth: true,
196
+ hasRole: (roles) => {
197
+ if (!user.roles || !Array.isArray(user.roles)) {
198
+ return false;
199
+ }
200
+ return roles.some((role) => user.roles.includes(role));
201
+ },
202
+ id: user._id?.toString(),
203
+ };
204
+ return userObject;
205
+ }
206
+ catch (error) {
207
+ this.logger.debug(`Failed to load user from session: ${error instanceof Error ? error.message : 'Unknown error'}`);
208
+ return null;
209
+ }
25
210
  }
26
211
  handleRequest(err, user, info, context) {
27
212
  const reflectorRoles = this.reflector.getAll('roles', [context.getHandler(), context.getClass()]);
@@ -33,7 +218,7 @@ let RolesGuard = class RolesGuard extends (0, auth_guard_1.AuthGuard)(auth_guard
33
218
  if (roles && roles.includes(role_enum_1.RoleEnum.S_NO_ONE)) {
34
219
  throw new common_1.UnauthorizedException('No access');
35
220
  }
36
- if (!roles || !roles.some(value => !!value)) {
221
+ if (!roles || !roles.some((value) => !!value)) {
37
222
  return user;
38
223
  }
39
224
  if (!user?.hasRole?.(roles)) {
@@ -59,8 +244,10 @@ let RolesGuard = class RolesGuard extends (0, auth_guard_1.AuthGuard)(auth_guard
59
244
  }
60
245
  };
61
246
  exports.RolesGuard = RolesGuard;
62
- exports.RolesGuard = RolesGuard = __decorate([
247
+ exports.RolesGuard = RolesGuard = RolesGuard_1 = __decorate([
63
248
  (0, common_1.Injectable)(),
64
- __metadata("design:paramtypes", [core_1.Reflector])
249
+ __param(1, (0, common_1.Optional)()),
250
+ __metadata("design:paramtypes", [core_1.Reflector,
251
+ core_1.ModuleRef])
65
252
  ], RolesGuard);
66
253
  //# sourceMappingURL=roles.guard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"roles.guard.js","sourceRoot":"","sources":["../../../../../src/core/modules/auth/guards/roles.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAqF;AACrF,uCAAyC;AACzC,6CAAsD;AAEtD,+DAA2D;AAC3D,0EAAgE;AAChE,mFAA8E;AAC9E,mFAA8E;AAC9E,6CAAyC;AAUlC,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,IAAA,sBAAS,EAAC,4CAAiB,CAAC,GAAG,CAAC;IAI9D,YAA+B,SAAoB;QACjD,KAAK,EAAE,CAAC;QADqB,cAAS,GAAT,SAAS,CAAW;IAEnD,CAAC;IAKQ,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO;QAE7C,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAa,OAAO,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC9G,MAAM,KAAK,GAAa,cAAc,CAAC,CAAC,CAAC;YACvC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;gBACjB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC9C,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;YACrB,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAGtB,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,oBAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,8BAAqB,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;QAGD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YAE5B,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,oBAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,oBAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACrF,OAAO,IAAI,CAAC;YACd,CAAC;YAGD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,IAAI,+CAAqB,EAAE,CAAC;gBACpC,CAAC;gBACD,IAAI,IAAI,EAAE,IAAI,KAAK,mBAAmB,EAAE,CAAC;oBACvC,MAAM,IAAI,+CAAqB,EAAE,CAAC;gBACpC,CAAC;gBACD,MAAM,IAAI,8BAAqB,CAAC,cAAc,CAAC,CAAC;YAClD,CAAC;YAGD,MAAM,IAAI,8BAAqB,CAAC,cAAc,CAAC,CAAC;QAClD,CAAC;QAGD,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,UAAU,CAAC,OAAyB;QAClC,MAAM,GAAG,GAAG,6BAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChD,OAAO,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;IACvF,CAAC;CACF,CAAA;AA/DY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;qCAK+B,gBAAS;GAJxC,UAAU,CA+DtB"}
1
+ {"version":3,"file":"roles.guard.js","sourceRoot":"","sources":["../../../../../src/core/modules/auth/guards/roles.guard.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,6 @@ import { CoreFileService } from './core-file.service';
3
3
  export declare abstract class CoreFileController {
4
4
  protected fileService: CoreFileService;
5
5
  protected constructor(fileService: CoreFileService);
6
+ getFileById(id: string, res: Response): Promise<Response<any, Record<string, any>>>;
6
7
  getFile(filename: string, res: Response): Promise<Response<any, Record<string, any>>>;
7
8
  }
@@ -21,6 +21,19 @@ let CoreFileController = class CoreFileController {
21
21
  constructor(fileService) {
22
22
  this.fileService = fileService;
23
23
  }
24
+ async getFileById(id, res) {
25
+ if (!id) {
26
+ throw new common_1.BadRequestException('Missing file ID for download');
27
+ }
28
+ const file = await this.fileService.getFileInfo(id);
29
+ if (!file) {
30
+ throw new common_1.NotFoundException('File not found');
31
+ }
32
+ const filestream = await this.fileService.getFileStream(id);
33
+ res.header('Content-Type', file.contentType || 'application/octet-stream');
34
+ res.header('Content-Disposition', `attachment; filename=${file.filename}`);
35
+ return filestream.pipe(res);
36
+ }
24
37
  async getFile(filename, res) {
25
38
  if (!filename) {
26
39
  throw new common_1.BadRequestException('Missing filename for download');
@@ -36,6 +49,15 @@ let CoreFileController = class CoreFileController {
36
49
  }
37
50
  };
38
51
  exports.CoreFileController = CoreFileController;
52
+ __decorate([
53
+ (0, common_1.Get)('id/:id'),
54
+ (0, roles_decorator_1.Roles)(role_enum_1.RoleEnum.S_EVERYONE),
55
+ __param(0, (0, common_1.Param)('id')),
56
+ __param(1, (0, common_1.Res)()),
57
+ __metadata("design:type", Function),
58
+ __metadata("design:paramtypes", [String, Object]),
59
+ __metadata("design:returntype", Promise)
60
+ ], CoreFileController.prototype, "getFileById", null);
39
61
  __decorate([
40
62
  (0, common_1.Get)(':filename'),
41
63
  (0, roles_decorator_1.Roles)(role_enum_1.RoleEnum.S_EVERYONE),
@@ -1 +1 @@
1
- {"version":3,"file":"core-file.controller.js","sourceRoot":"","sources":["../../../../src/core/modules/file/core-file.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAqG;AAGrG,6EAAgE;AAChE,4DAAwD;AACxD,2DAAsD;AAO/C,IAAe,kBAAkB,GAAjC,MAAe,kBAAkB;IAItC,YAAgC,WAA4B;QAA5B,gBAAW,GAAX,WAAW,CAAiB;IAAG,CAAC;IAO1D,AAAN,KAAK,CAAC,OAAO,CAAoB,QAAgB,EAAS,GAAa;QACrE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,4BAAmB,CAAC,+BAA+B,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,0BAAiB,CAAC,gBAAgB,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjE,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,IAAI,0BAA0B,CAAC,CAAC;QAC3E,GAAG,CAAC,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3E,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;CACF,CAAA;AAzBqB,gDAAkB;AAWhC;IAFL,IAAA,YAAG,EAAC,WAAW,CAAC;IAChB,IAAA,uBAAK,EAAC,oBAAQ,CAAC,UAAU,CAAC;IACZ,WAAA,IAAA,cAAK,EAAC,UAAU,CAAC,CAAA;IAAoB,WAAA,IAAA,YAAG,GAAE,CAAA;;;;iDAaxD;6BAxBmB,kBAAkB;IAFvC,IAAA,mBAAU,EAAC,OAAO,CAAC;IACnB,IAAA,uBAAK,EAAC,oBAAQ,CAAC,KAAK,CAAC;qCAKyB,mCAAe;GAJxC,kBAAkB,CAyBvC"}
1
+ {"version":3,"file":"core-file.controller.js","sourceRoot":"","sources":["../../../../src/core/modules/file/core-file.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAqG;AAGrG,6EAAgE;AAChE,4DAAwD;AACxD,2DAAsD;AAO/C,IAAe,kBAAkB,GAAjC,MAAe,kBAAkB;IAItC,YAAgC,WAA4B;QAA5B,gBAAW,GAAX,WAAW,CAAiB;IAAG,CAAC;IAU1D,AAAN,KAAK,CAAC,WAAW,CAAc,EAAU,EAAS,GAAa;QAC7D,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,IAAI,4BAAmB,CAAC,8BAA8B,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,0BAAiB,CAAC,gBAAgB,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAC5D,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,IAAI,0BAA0B,CAAC,CAAC;QAC3E,GAAG,CAAC,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3E,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAUK,AAAN,KAAK,CAAC,OAAO,CAAoB,QAAgB,EAAS,GAAa;QACrE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,4BAAmB,CAAC,+BAA+B,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,0BAAiB,CAAC,gBAAgB,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjE,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,IAAI,0BAA0B,CAAC,CAAC;QAC3E,GAAG,CAAC,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3E,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;CACF,CAAA;AAnDqB,gDAAkB;AAchC;IAFL,IAAA,YAAG,EAAC,QAAQ,CAAC;IACb,IAAA,uBAAK,EAAC,oBAAQ,CAAC,UAAU,CAAC;IACR,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IAAc,WAAA,IAAA,YAAG,GAAE,CAAA;;;;qDAahD;AAUK;IAFL,IAAA,YAAG,EAAC,WAAW,CAAC;IAChB,IAAA,uBAAK,EAAC,oBAAQ,CAAC,UAAU,CAAC;IACZ,WAAA,IAAA,cAAK,EAAC,UAAU,CAAC,CAAA;IAAoB,WAAA,IAAA,YAAG,GAAE,CAAA;;;;iDAaxD;6BAlDmB,kBAAkB;IAFvC,IAAA,mBAAU,EAAC,OAAO,CAAC;IACnB,IAAA,uBAAK,EAAC,oBAAQ,CAAC,KAAK,CAAC;qCAKyB,mCAAe;GAJxC,kBAAkB,CAmDvC"}
@@ -0,0 +1,9 @@
1
+ import { Request, Response } from 'express';
2
+ import { CoreTusService } from './core-tus.service';
3
+ export declare class CoreTusController {
4
+ protected readonly tusService: CoreTusService;
5
+ private readonly logger;
6
+ constructor(tusService: CoreTusService);
7
+ handleTus(req: Request, res: Response): Promise<void>;
8
+ handleTusWithId(req: Request, res: Response): Promise<void>;
9
+ }
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var CoreTusController_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.CoreTusController = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const roles_decorator_1 = require("../../common/decorators/roles.decorator");
19
+ const role_enum_1 = require("../../common/enums/role.enum");
20
+ const core_tus_service_1 = require("./core-tus.service");
21
+ let CoreTusController = CoreTusController_1 = class CoreTusController {
22
+ constructor(tusService) {
23
+ this.tusService = tusService;
24
+ this.logger = new common_1.Logger(CoreTusController_1.name);
25
+ }
26
+ async handleTus(req, res) {
27
+ const server = this.tusService.getServer();
28
+ if (!server) {
29
+ this.logger.warn('TUS server not initialized');
30
+ res.status(503).json({ message: 'TUS uploads not available' });
31
+ return;
32
+ }
33
+ try {
34
+ await server.handle(req, res);
35
+ }
36
+ catch (error) {
37
+ this.logger.error(`TUS request error: ${error.message}`);
38
+ if (!res.headersSent) {
39
+ res.status(500).json({ message: 'Upload error' });
40
+ }
41
+ }
42
+ }
43
+ async handleTusWithId(req, res) {
44
+ const server = this.tusService.getServer();
45
+ if (!server) {
46
+ this.logger.warn('TUS server not initialized');
47
+ res.status(503).json({ message: 'TUS uploads not available' });
48
+ return;
49
+ }
50
+ try {
51
+ await server.handle(req, res);
52
+ }
53
+ catch (error) {
54
+ this.logger.error(`TUS request error for upload ${req.params.id}: ${error.message}`);
55
+ if (!res.headersSent) {
56
+ res.status(500).json({ message: 'Upload error' });
57
+ }
58
+ }
59
+ }
60
+ };
61
+ exports.CoreTusController = CoreTusController;
62
+ __decorate([
63
+ (0, common_1.All)(),
64
+ (0, roles_decorator_1.Roles)(role_enum_1.RoleEnum.S_EVERYONE),
65
+ __param(0, (0, common_1.Req)()),
66
+ __param(1, (0, common_1.Res)()),
67
+ __metadata("design:type", Function),
68
+ __metadata("design:paramtypes", [Object, Object]),
69
+ __metadata("design:returntype", Promise)
70
+ ], CoreTusController.prototype, "handleTus", null);
71
+ __decorate([
72
+ (0, common_1.All)(':id'),
73
+ (0, roles_decorator_1.Roles)(role_enum_1.RoleEnum.S_EVERYONE),
74
+ __param(0, (0, common_1.Req)()),
75
+ __param(1, (0, common_1.Res)()),
76
+ __metadata("design:type", Function),
77
+ __metadata("design:paramtypes", [Object, Object]),
78
+ __metadata("design:returntype", Promise)
79
+ ], CoreTusController.prototype, "handleTusWithId", null);
80
+ exports.CoreTusController = CoreTusController = CoreTusController_1 = __decorate([
81
+ (0, common_1.Controller)('tus'),
82
+ (0, roles_decorator_1.Roles)(role_enum_1.RoleEnum.S_EVERYONE),
83
+ __metadata("design:paramtypes", [core_tus_service_1.CoreTusService])
84
+ ], CoreTusController);
85
+ //# sourceMappingURL=core-tus.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-tus.controller.js","sourceRoot":"","sources":["../../../../src/core/modules/tus/core-tus.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAmE;AAGnE,6EAAgE;AAChE,4DAAwD;AACxD,yDAAoD;AAqB7C,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAG5B,YAA+B,UAA0B;QAA1B,eAAU,GAAV,UAAU,CAAgB;QAFxC,WAAM,GAAG,IAAI,eAAM,CAAC,mBAAiB,CAAC,IAAI,CAAC,CAAC;IAED,CAAC;IAcvD,AAAN,KAAK,CAAC,SAAS,CAAQ,GAAY,EAAS,GAAa;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QAE3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC/C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACzD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;IACH,CAAC;IASK,AAAN,KAAK,CAAC,eAAe,CAAQ,GAAY,EAAS,GAAa;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QAE3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC/C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACrF,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAA;AA7DY,8CAAiB;AAiBtB;IAFL,IAAA,YAAG,GAAE;IACL,IAAA,uBAAK,EAAC,oBAAQ,CAAC,UAAU,CAAC;IACV,WAAA,IAAA,YAAG,GAAE,CAAA;IAAgB,WAAA,IAAA,YAAG,GAAE,CAAA;;;;kDAiB1C;AASK;IAFL,IAAA,YAAG,EAAC,KAAK,CAAC;IACV,IAAA,uBAAK,EAAC,oBAAQ,CAAC,UAAU,CAAC;IACJ,WAAA,IAAA,YAAG,GAAE,CAAA;IAAgB,WAAA,IAAA,YAAG,GAAE,CAAA;;;;wDAiBhD;4BA5DU,iBAAiB;IAF7B,IAAA,mBAAU,EAAC,KAAK,CAAC;IACjB,IAAA,uBAAK,EAAC,oBAAQ,CAAC,UAAU,CAAC;qCAIkB,iCAAc;GAH9C,iBAAiB,CA6D7B"}
@@ -0,0 +1,30 @@
1
+ import { OnModuleDestroy, OnModuleInit } from '@nestjs/common';
2
+ import { Server, Upload } from '@tus/server';
3
+ import { Connection } from 'mongoose';
4
+ import { ITusConfig } from '../../common/interfaces/server-options.interface';
5
+ export declare class CoreTusService implements OnModuleDestroy, OnModuleInit {
6
+ private readonly connection;
7
+ private readonly logger;
8
+ private tusServer;
9
+ private config;
10
+ private files;
11
+ private cleanupInterval;
12
+ constructor(connection: Connection);
13
+ configure(config: boolean | ITusConfig | undefined): void;
14
+ onModuleInit(): Promise<void>;
15
+ onModuleDestroy(): Promise<void>;
16
+ getServer(): null | Server;
17
+ getConfig(): ITusConfig;
18
+ isEnabled(): boolean;
19
+ getPath(): string;
20
+ protected onUploadComplete(upload: Upload): Promise<void>;
21
+ protected onUploadTerminate(upload: Upload): Promise<void>;
22
+ protected validateFileType(filetype: string | undefined): boolean;
23
+ private createTusServer;
24
+ private parseMetadata;
25
+ private ensureUploadDir;
26
+ private deleteTemporaryFile;
27
+ private setupExpirationCleanup;
28
+ private cleanupExpiredUploads;
29
+ private logEnabledFeatures;
30
+ }