@lerianstudio/sindarian-server 1.0.0-beta.22 → 1.0.0-beta.25
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 +216 -3
- package/dist/constants/keys.d.ts +1 -0
- package/dist/constants/keys.d.ts.map +1 -1
- package/dist/constants/keys.js +2 -1
- package/dist/constants/keys.js.map +1 -1
- package/dist/controllers/decorators/route-decorator.d.ts +4 -0
- package/dist/controllers/decorators/route-decorator.d.ts.map +1 -1
- package/dist/controllers/decorators/route-decorator.js +7 -0
- package/dist/controllers/decorators/route-decorator.js.map +1 -1
- package/dist/guards/can-activate.d.ts +21 -0
- package/dist/guards/can-activate.d.ts.map +1 -0
- package/dist/guards/can-activate.js +3 -0
- package/dist/guards/can-activate.js.map +1 -0
- package/dist/guards/decorators/index.d.ts +2 -0
- package/dist/guards/decorators/index.d.ts.map +1 -0
- package/dist/guards/decorators/index.js +18 -0
- package/dist/guards/decorators/index.js.map +1 -0
- package/dist/guards/decorators/use-guards-decorator.d.ts +44 -0
- package/dist/guards/decorators/use-guards-decorator.d.ts.map +1 -0
- package/dist/guards/decorators/use-guards-decorator.js +127 -0
- package/dist/guards/decorators/use-guards-decorator.js.map +1 -0
- package/dist/guards/index.d.ts +3 -0
- package/dist/guards/index.d.ts.map +1 -0
- package/dist/guards/index.js +19 -0
- package/dist/guards/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/logger/console-logger.d.ts.map +1 -1
- package/dist/logger/console-logger.js +6 -0
- package/dist/logger/console-logger.js.map +1 -1
- package/dist/server/server-factory.d.ts +10 -0
- package/dist/server/server-factory.d.ts.map +1 -1
- package/dist/server/server-factory.js +39 -0
- package/dist/server/server-factory.js.map +1 -1
- package/dist/services/guards.d.ts +2 -0
- package/dist/services/guards.d.ts.map +1 -0
- package/dist/services/guards.js +5 -0
- package/dist/services/guards.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,7 +8,8 @@ A lightweight, NestJS-inspired framework designed specifically for Next.js appli
|
|
|
8
8
|
- � **Next.js Optimized** - Built for serverless environments
|
|
9
9
|
- =� **Dependency Injection** - Powered by Inversify
|
|
10
10
|
- =� **Decorator-based Routing** - Clean, declarative route definitions
|
|
11
|
-
- =' **Middleware Support** -
|
|
11
|
+
- =' **Middleware Support** - Guards, interceptors, pipes, and exception filters
|
|
12
|
+
- ✅ **Zod Validation** - Built-in schema validation with Zod
|
|
12
13
|
- =� **TypeScript First** - Full type safety out of the box
|
|
13
14
|
- <� **Lightweight** - Minimal overhead for fast cold starts
|
|
14
15
|
|
|
@@ -289,6 +290,218 @@ export class UserController extends BaseController {}
|
|
|
289
290
|
|
|
290
291
|
**Note**: Multiple `APP_INTERCEPTOR` and `APP_PIPE` providers are supported and execute in reverse registration order (last registered runs first).
|
|
291
292
|
|
|
293
|
+
### Guards
|
|
294
|
+
|
|
295
|
+
Guards determine whether a request should be handled by the route handler. They're commonly used for authentication and authorization:
|
|
296
|
+
|
|
297
|
+
```typescript
|
|
298
|
+
import { CanActivate, ExecutionContext, UseGuards } from '@lerianstudio/sindarian-server'
|
|
299
|
+
import { injectable } from 'inversify'
|
|
300
|
+
|
|
301
|
+
@injectable()
|
|
302
|
+
export class AuthGuard implements CanActivate {
|
|
303
|
+
async canActivate(context: ExecutionContext): Promise<boolean> {
|
|
304
|
+
const request = context.switchToHttp().getRequest()
|
|
305
|
+
const token = request.headers.get('authorization')
|
|
306
|
+
|
|
307
|
+
if (!token) {
|
|
308
|
+
return false // Will throw ForbiddenApiException
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// Validate token...
|
|
312
|
+
return true
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
// Apply to controller
|
|
317
|
+
@Controller('/admin')
|
|
318
|
+
@UseGuards(AuthGuard)
|
|
319
|
+
export class AdminController extends BaseController {
|
|
320
|
+
@Get()
|
|
321
|
+
async dashboard() {
|
|
322
|
+
return { message: 'Welcome to admin' }
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// Or apply to specific methods
|
|
327
|
+
@Controller('/users')
|
|
328
|
+
export class UserController extends BaseController {
|
|
329
|
+
@Get()
|
|
330
|
+
async findAll() {
|
|
331
|
+
return { users: [] } // Public route
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
@Delete(':id')
|
|
335
|
+
@UseGuards(AuthGuard)
|
|
336
|
+
async remove(@Param('id') id: string) {
|
|
337
|
+
return { deleted: id } // Protected route
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
Register global guards via module providers:
|
|
343
|
+
|
|
344
|
+
```typescript
|
|
345
|
+
@Module({
|
|
346
|
+
providers: [
|
|
347
|
+
{
|
|
348
|
+
provide: APP_GUARD,
|
|
349
|
+
useClass: AuthGuard
|
|
350
|
+
}
|
|
351
|
+
]
|
|
352
|
+
})
|
|
353
|
+
export class AppModule {}
|
|
354
|
+
|
|
355
|
+
// Or globally via app
|
|
356
|
+
app.useGlobalGuards(new AuthGuard())
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
**Note**: Guards execute before interceptors and pipes. If a guard returns `false`, a `ForbiddenApiException` is thrown.
|
|
360
|
+
|
|
361
|
+
### Pipes
|
|
362
|
+
|
|
363
|
+
Transform and validate input data with pipes:
|
|
364
|
+
|
|
365
|
+
```typescript
|
|
366
|
+
import { PipeTransform, ArgumentMetadata, UsePipes } from '@lerianstudio/sindarian-server'
|
|
367
|
+
|
|
368
|
+
@injectable()
|
|
369
|
+
export class ParseIntPipe implements PipeTransform {
|
|
370
|
+
transform(value: any, metadata: ArgumentMetadata): number {
|
|
371
|
+
const val = parseInt(value, 10)
|
|
372
|
+
if (isNaN(val)) {
|
|
373
|
+
throw new Error('Validation failed: not a number')
|
|
374
|
+
}
|
|
375
|
+
return val
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
// Apply to controller or method
|
|
380
|
+
@Controller('/items')
|
|
381
|
+
@UsePipes(ParseIntPipe)
|
|
382
|
+
export class ItemController extends BaseController {
|
|
383
|
+
@Get(':id')
|
|
384
|
+
async findOne(@Param('id') id: number) {
|
|
385
|
+
return this.itemService.findById(id)
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
Register global pipes via module providers:
|
|
391
|
+
|
|
392
|
+
```typescript
|
|
393
|
+
@Module({
|
|
394
|
+
providers: [
|
|
395
|
+
{
|
|
396
|
+
provide: APP_PIPE,
|
|
397
|
+
useClass: ValidationPipe
|
|
398
|
+
}
|
|
399
|
+
]
|
|
400
|
+
})
|
|
401
|
+
export class AppModule {}
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
### Validation with Zod
|
|
405
|
+
|
|
406
|
+
Built-in Zod integration for schema validation:
|
|
407
|
+
|
|
408
|
+
```typescript
|
|
409
|
+
import { createZodDto, ZodValidationPipe, UsePipes } from '@lerianstudio/sindarian-server'
|
|
410
|
+
import { z } from 'zod'
|
|
411
|
+
|
|
412
|
+
// Define your schema
|
|
413
|
+
const CreateUserSchema = z.object({
|
|
414
|
+
name: z.string().min(2),
|
|
415
|
+
email: z.string().email(),
|
|
416
|
+
age: z.number().min(18).optional()
|
|
417
|
+
})
|
|
418
|
+
|
|
419
|
+
// Create a DTO class from the schema
|
|
420
|
+
const CreateUserDto = createZodDto(CreateUserSchema)
|
|
421
|
+
|
|
422
|
+
// Use in your controller with the validation pipe
|
|
423
|
+
@Controller('/users')
|
|
424
|
+
@UsePipes(ZodValidationPipe)
|
|
425
|
+
export class UserController extends BaseController {
|
|
426
|
+
@Post()
|
|
427
|
+
async create(@Body() userData: typeof CreateUserDto) {
|
|
428
|
+
// userData is validated and typed
|
|
429
|
+
return this.userService.create(userData)
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
The `ZodValidationPipe` automatically validates incoming data against Zod schemas and throws a `ValidationApiException` on validation errors.
|
|
435
|
+
|
|
436
|
+
### Logger Service
|
|
437
|
+
|
|
438
|
+
Use the built-in logger for consistent application logging:
|
|
439
|
+
|
|
440
|
+
```typescript
|
|
441
|
+
import { ConsoleLogger, LoggerService } from '@lerianstudio/sindarian-server'
|
|
442
|
+
|
|
443
|
+
// Use the default ConsoleLogger
|
|
444
|
+
const logger = new ConsoleLogger({ prefix: 'MyApp' })
|
|
445
|
+
logger.log('Application started')
|
|
446
|
+
logger.error('Something went wrong')
|
|
447
|
+
logger.warn('This is a warning')
|
|
448
|
+
logger.debug('Debug information')
|
|
449
|
+
|
|
450
|
+
// Or inject as a service
|
|
451
|
+
@injectable()
|
|
452
|
+
export class MyService {
|
|
453
|
+
constructor(private logger: ConsoleLogger) {}
|
|
454
|
+
|
|
455
|
+
doSomething() {
|
|
456
|
+
this.logger.log('Doing something...')
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
Available log levels: `verbose`, `debug`, `log`, `warn`, `error`, `fatal`
|
|
462
|
+
|
|
463
|
+
### HttpService
|
|
464
|
+
|
|
465
|
+
Abstract base class for building API client services with built-in error handling:
|
|
466
|
+
|
|
467
|
+
```typescript
|
|
468
|
+
import { HttpService, FetchModuleOptions } from '@lerianstudio/sindarian-server'
|
|
469
|
+
import { injectable } from 'inversify'
|
|
470
|
+
|
|
471
|
+
@injectable()
|
|
472
|
+
export class MyApiService extends HttpService {
|
|
473
|
+
protected async createDefaults(): Promise<FetchModuleOptions> {
|
|
474
|
+
return {
|
|
475
|
+
baseUrl: 'https://api.example.com',
|
|
476
|
+
headers: {
|
|
477
|
+
'Content-Type': 'application/json',
|
|
478
|
+
'Authorization': `Bearer ${this.getToken()}`
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
async getUsers() {
|
|
484
|
+
return this.get<User[]>('/users')
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
async createUser(data: CreateUserDto) {
|
|
488
|
+
return this.post<User>('/users', {
|
|
489
|
+
body: JSON.stringify(data)
|
|
490
|
+
})
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
async uploadFile(data: { file: File; name: string }) {
|
|
494
|
+
return this.postFormData<UploadResponse>('/upload', data)
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
The `HttpService` provides:
|
|
500
|
+
- HTTP methods: `get`, `post`, `put`, `patch`, `delete`, `head`
|
|
501
|
+
- FormData support: `postFormData`, `patchFormData`
|
|
502
|
+
- Automatic error handling with typed exceptions
|
|
503
|
+
- Lifecycle hooks: `onBeforeFetch`, `onAfterFetch`, `catch`
|
|
504
|
+
|
|
292
505
|
## <� Parameter Decorators
|
|
293
506
|
|
|
294
507
|
Extract data from requests with decorators:
|
|
@@ -389,8 +602,8 @@ This project is licensed under the ISC License - see the [LICENSE](./LICENSE) fi
|
|
|
389
602
|
|
|
390
603
|
## =� What's Next?
|
|
391
604
|
|
|
392
|
-
- [
|
|
393
|
-
- [
|
|
605
|
+
- [x] Validation pipes with Zod integration
|
|
606
|
+
- [x] Guards system for authentication/authorization
|
|
394
607
|
- [ ] WebSocket support
|
|
395
608
|
- [ ] GraphQL integration
|
|
396
609
|
- [ ] CLI tools for scaffolding
|
package/dist/constants/keys.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export declare const CATCH_KEY: unique symbol;
|
|
|
5
5
|
export declare const FILTER_KEY: unique symbol;
|
|
6
6
|
export declare const INTERCEPTOR_KEY: unique symbol;
|
|
7
7
|
export declare const PIPE_KEY: unique symbol;
|
|
8
|
+
export declare const GUARD_KEY: unique symbol;
|
|
8
9
|
export declare const ROUTE_KEY: unique symbol;
|
|
9
10
|
export declare const GET_KEY: unique symbol;
|
|
10
11
|
export declare const POST_KEY: unique symbol;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/constants/keys.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,eAAuB,CAAA;AAElD,eAAO,MAAM,UAAU,eAAmB,CAAA;AAC1C,eAAO,MAAM,cAAc,eAAuB,CAAA;AAClD,eAAO,MAAM,SAAS,eAAkB,CAAA;AACxC,eAAO,MAAM,UAAU,eAAmB,CAAA;AAC1C,eAAO,MAAM,eAAe,eAAwB,CAAA;AACpD,eAAO,MAAM,QAAQ,eAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/constants/keys.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,eAAuB,CAAA;AAElD,eAAO,MAAM,UAAU,eAAmB,CAAA;AAC1C,eAAO,MAAM,cAAc,eAAuB,CAAA;AAClD,eAAO,MAAM,SAAS,eAAkB,CAAA;AACxC,eAAO,MAAM,UAAU,eAAmB,CAAA;AAC1C,eAAO,MAAM,eAAe,eAAwB,CAAA;AACpD,eAAO,MAAM,QAAQ,eAAiB,CAAA;AACtC,eAAO,MAAM,SAAS,eAAkB,CAAA;AAExC,eAAO,MAAM,SAAS,eAAkB,CAAA;AACxC,eAAO,MAAM,OAAO,eAAgB,CAAA;AACpC,eAAO,MAAM,QAAQ,eAAiB,CAAA;AACtC,eAAO,MAAM,OAAO,eAAgB,CAAA;AACpC,eAAO,MAAM,SAAS,eAAkB,CAAA;AACxC,eAAO,MAAM,UAAU,eAAmB,CAAA;AAE1C,eAAO,MAAM,QAAQ,eAAiB,CAAA;AACtC,eAAO,MAAM,WAAW,eAAoB,CAAA;AAC5C,eAAO,MAAM,SAAS,eAAkB,CAAA;AACxC,eAAO,MAAM,SAAS,eAAkB,CAAA;AAExC,eAAO,MAAM,gBAAgB,gBAAgB,CAAA;AAC7C,eAAO,MAAM,eAAe,eAAe,CAAA;AAC3C,eAAO,MAAM,kBAAkB,kBAAkB,CAAA;AACjD,eAAO,MAAM,oBAAoB,oBAAoB,CAAA"}
|
package/dist/constants/keys.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CONTROLLERS_PROPERTY = exports.PROVIDERS_PROPERTY = exports.MODULE_PROPERTY = exports.IMPORTS_PROPERTY = exports.QUERY_KEY = exports.PARAM_KEY = exports.REQUEST_KEY = exports.BODY_KEY = exports.DELETE_KEY = exports.PATCH_KEY = exports.PUT_KEY = exports.POST_KEY = exports.GET_KEY = exports.ROUTE_KEY = exports.PIPE_KEY = exports.INTERCEPTOR_KEY = exports.FILTER_KEY = exports.CATCH_KEY = exports.CONTROLLER_KEY = exports.MODULE_KEY = exports.INJECTABLE_KEY = void 0;
|
|
3
|
+
exports.CONTROLLERS_PROPERTY = exports.PROVIDERS_PROPERTY = exports.MODULE_PROPERTY = exports.IMPORTS_PROPERTY = exports.QUERY_KEY = exports.PARAM_KEY = exports.REQUEST_KEY = exports.BODY_KEY = exports.DELETE_KEY = exports.PATCH_KEY = exports.PUT_KEY = exports.POST_KEY = exports.GET_KEY = exports.ROUTE_KEY = exports.GUARD_KEY = exports.PIPE_KEY = exports.INTERCEPTOR_KEY = exports.FILTER_KEY = exports.CATCH_KEY = exports.CONTROLLER_KEY = exports.MODULE_KEY = exports.INJECTABLE_KEY = void 0;
|
|
4
4
|
exports.INJECTABLE_KEY = Symbol('injectable');
|
|
5
5
|
exports.MODULE_KEY = Symbol('module');
|
|
6
6
|
exports.CONTROLLER_KEY = Symbol('controller');
|
|
@@ -8,6 +8,7 @@ exports.CATCH_KEY = Symbol('catch');
|
|
|
8
8
|
exports.FILTER_KEY = Symbol('filter');
|
|
9
9
|
exports.INTERCEPTOR_KEY = Symbol('interceptor');
|
|
10
10
|
exports.PIPE_KEY = Symbol('pipe');
|
|
11
|
+
exports.GUARD_KEY = Symbol('guard');
|
|
11
12
|
exports.ROUTE_KEY = Symbol('route');
|
|
12
13
|
exports.GET_KEY = Symbol('get');
|
|
13
14
|
exports.POST_KEY = Symbol('post');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/constants/keys.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;AAErC,QAAA,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;AAC7B,QAAA,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;AACrC,QAAA,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AAC3B,QAAA,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;AAC7B,QAAA,eAAe,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;AACvC,QAAA,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/constants/keys.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;AAErC,QAAA,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;AAC7B,QAAA,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;AACrC,QAAA,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AAC3B,QAAA,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;AAC7B,QAAA,eAAe,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;AACvC,QAAA,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AACzB,QAAA,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AAE3B,QAAA,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AAC3B,QAAA,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACvB,QAAA,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AACzB,QAAA,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACvB,QAAA,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AAC3B,QAAA,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;AAE7B,QAAA,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AACzB,QAAA,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;AAC/B,QAAA,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AAC3B,QAAA,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AAE3B,QAAA,gBAAgB,GAAG,aAAa,CAAA;AAChC,QAAA,eAAe,GAAG,YAAY,CAAA;AAC9B,QAAA,kBAAkB,GAAG,eAAe,CAAA;AACpC,QAAA,oBAAoB,GAAG,iBAAiB,CAAA"}
|
|
@@ -47,6 +47,10 @@ export declare function Patch(path?: string): MethodDecorator;
|
|
|
47
47
|
/**
|
|
48
48
|
* Decorator to define a DELETE route.
|
|
49
49
|
*
|
|
50
|
+
* When the decorated method returns `null` or `undefined`, the response will
|
|
51
|
+
* automatically be HTTP 204 No Content (with no body). If the method returns
|
|
52
|
+
* a non-null value, it will be serialized as JSON with status 200.
|
|
53
|
+
*
|
|
50
54
|
* @param path - The path of the route.
|
|
51
55
|
* @returns A decorator function that can be used to decorate a controller method.
|
|
52
56
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-decorator.d.ts","sourceRoot":"","sources":["../../../src/controllers/decorators/route-decorator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAMtD,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,WAAW,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,GAAG,EAAE,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAA;IAC5C,SAAS,EAAE,GAAG,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,GAAG,CAAA;CAChB,CAAA;AAED,qBAAa,YAAY;IACvB,MAAM,CAAC,WAAW,CAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAAG,MAAM,GAC3B,aAAa;WAIH,OAAO,CAClB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,YAAY,EAAE,GAAG,EAAE,GAClB,OAAO,CAAC,YAAY,EAAE,CAAC;CAa3B;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"route-decorator.d.ts","sourceRoot":"","sources":["../../../src/controllers/decorators/route-decorator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAMtD,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,WAAW,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,GAAG,EAAE,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAA;IAC5C,SAAS,EAAE,GAAG,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,GAAG,CAAA;CAChB,CAAA;AAED,qBAAa,YAAY;IACvB,MAAM,CAAC,WAAW,CAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAAG,MAAM,GAC3B,aAAa;WAIH,OAAO,CAClB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,YAAY,EAAE,GAAG,EAAE,GAClB,OAAO,CAAC,YAAY,EAAE,CAAC;CAa3B;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAoCxE;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,IAAI,GAAE,MAAW,mBAEpC;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,IAAI,GAAE,MAAW,mBAErC;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,IAAI,GAAE,MAAW,mBAEpC;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,IAAI,GAAE,MAAW,mBAEtC;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,IAAI,GAAE,MAAW,mBAEvC"}
|
|
@@ -47,6 +47,9 @@ function Route(method, path) {
|
|
|
47
47
|
if (response instanceof server_1.NextResponse) {
|
|
48
48
|
return response;
|
|
49
49
|
}
|
|
50
|
+
if (method === http_methods_1.HttpMethods.DELETE && response == null) {
|
|
51
|
+
return new server_1.NextResponse(null, { status: 204 });
|
|
52
|
+
}
|
|
50
53
|
return server_1.NextResponse.json(response);
|
|
51
54
|
};
|
|
52
55
|
};
|
|
@@ -90,6 +93,10 @@ function Patch(path = '') {
|
|
|
90
93
|
/**
|
|
91
94
|
* Decorator to define a DELETE route.
|
|
92
95
|
*
|
|
96
|
+
* When the decorated method returns `null` or `undefined`, the response will
|
|
97
|
+
* automatically be HTTP 204 No Content (with no body). If the method returns
|
|
98
|
+
* a non-null value, it will be serialized as JSON with status 200.
|
|
99
|
+
*
|
|
93
100
|
* @param path - The path of the route.
|
|
94
101
|
* @returns A decorator function that can be used to decorate a controller method.
|
|
95
102
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-decorator.js","sourceRoot":"","sources":["../../../src/controllers/decorators/route-decorator.ts"],"names":[],"mappings":";;;AAiDA,
|
|
1
|
+
{"version":3,"file":"route-decorator.js","sourceRoot":"","sources":["../../../src/controllers/decorators/route-decorator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ExecutionContext } from '../context/execution-context';
|
|
2
|
+
/**
|
|
3
|
+
* Interface defining the `canActivate()` function that must be implemented
|
|
4
|
+
* by a guard. Return value indicates whether or not the current request is
|
|
5
|
+
* allowed to proceed.
|
|
6
|
+
*
|
|
7
|
+
* @see [Guards](https://docs.nestjs.com/guards)
|
|
8
|
+
*
|
|
9
|
+
* @publicApi
|
|
10
|
+
*/
|
|
11
|
+
export interface CanActivate {
|
|
12
|
+
/**
|
|
13
|
+
* @param context Current execution context. Provides access to details about
|
|
14
|
+
* the current request pipeline.
|
|
15
|
+
*
|
|
16
|
+
* @returns Value indicating whether or not the current request is allowed to
|
|
17
|
+
* proceed. Can be a boolean or a Promise that resolves to a boolean.
|
|
18
|
+
*/
|
|
19
|
+
canActivate(context: ExecutionContext): boolean | Promise<boolean>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=can-activate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"can-activate.d.ts","sourceRoot":"","sources":["../../src/guards/can-activate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAE9D;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;;OAMG;IACH,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACnE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"can-activate.js","sourceRoot":"","sources":["../../src/guards/can-activate.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/guards/decorators/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./use-guards-decorator"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/guards/decorators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAsC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { CanActivate } from '../can-activate';
|
|
2
|
+
import { ExecutionContext } from '../../context/execution-context';
|
|
3
|
+
import { Class } from '../../types/class';
|
|
4
|
+
import type { Container } from '../../dependency-injection';
|
|
5
|
+
export type GuardMetadata = {
|
|
6
|
+
guards: (CanActivate | Class<CanActivate>)[];
|
|
7
|
+
};
|
|
8
|
+
export declare class GuardHandler {
|
|
9
|
+
static getClassMetadata(target: object): GuardMetadata | undefined;
|
|
10
|
+
static getMethodMetadata(target: object, propertyKey: string | symbol): GuardMetadata | undefined;
|
|
11
|
+
static register(container: Container, target: Class): void;
|
|
12
|
+
static fetch(container: Container, target: object, methodName: string | symbol): Promise<CanActivate[]>;
|
|
13
|
+
/**
|
|
14
|
+
* Execute guards in sequence. If any guard returns false, throws ForbiddenApiException.
|
|
15
|
+
* Guards execute in order: global guards -> class guards -> method guards
|
|
16
|
+
*/
|
|
17
|
+
static execute(executionContext: ExecutionContext, guards: CanActivate[]): Promise<boolean>;
|
|
18
|
+
private static _fetch;
|
|
19
|
+
private static _register;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Decorator that binds guards to the scope of the controller or method,
|
|
23
|
+
* depending on its context.
|
|
24
|
+
*
|
|
25
|
+
* When `@UseGuards` is used at the controller level, the guard will be
|
|
26
|
+
* applied to every handler (method) in the controller.
|
|
27
|
+
*
|
|
28
|
+
* When `@UseGuards` is used at the individual handler level, the guard
|
|
29
|
+
* will apply only to that specific method.
|
|
30
|
+
*
|
|
31
|
+
* @param guards a single guard instance or class, or a list of guard instances
|
|
32
|
+
* or classes.
|
|
33
|
+
*
|
|
34
|
+
* @see [Guards](https://docs.nestjs.com/guards)
|
|
35
|
+
*
|
|
36
|
+
* @usageNotes
|
|
37
|
+
* Guards can also be set up globally for all controllers and routes
|
|
38
|
+
* using `app.useGlobalGuards()` or by registering via module providers
|
|
39
|
+
* with the `APP_GUARD` token.
|
|
40
|
+
*
|
|
41
|
+
* @publicApi
|
|
42
|
+
*/
|
|
43
|
+
export declare function UseGuards(...guards: (CanActivate | Class<CanActivate>)[]): ClassDecorator & MethodDecorator;
|
|
44
|
+
//# sourceMappingURL=use-guards-decorator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-guards-decorator.d.ts","sourceRoot":"","sources":["../../../src/guards/decorators/use-guards-decorator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAErC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAGvD,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAA;CAC7C,CAAA;AAED,qBAAa,YAAY;IACvB,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIlE,MAAM,CAAC,iBAAiB,CACtB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAAG,MAAM,GAC3B,aAAa,GAAG,SAAS;IAgB5B,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK;WA4BtC,KAAK,CAChB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GAAG,MAAM,GAC1B,OAAO,CAAC,WAAW,EAAE,CAAC;IA2BzB;;;OAGG;WACU,OAAO,CAClB,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,WAAW,EAAE,GACpB,OAAO,CAAC,OAAO,CAAC;mBAYE,MAAM;IAU3B,OAAO,CAAC,MAAM,CAAC,SAAS;CAczB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,SAAS,CACvB,GAAG,MAAM,EAAE,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,GAC9C,cAAc,GAAG,eAAe,CA8BlC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GuardHandler = void 0;
|
|
4
|
+
exports.UseGuards = UseGuards;
|
|
5
|
+
const keys_1 = require("../../constants/keys");
|
|
6
|
+
const get_class_methods_1 = require("../../utils/class/get-class-methods");
|
|
7
|
+
const api_exception_1 = require("../../exceptions/api-exception");
|
|
8
|
+
class GuardHandler {
|
|
9
|
+
static getClassMetadata(target) {
|
|
10
|
+
return Reflect.getOwnMetadata(keys_1.GUARD_KEY, target);
|
|
11
|
+
}
|
|
12
|
+
static getMethodMetadata(target, propertyKey) {
|
|
13
|
+
// First check if metadata exists directly on the target (method-level decorator)
|
|
14
|
+
let metadata = Reflect.getOwnMetadata(keys_1.GUARD_KEY, target, propertyKey);
|
|
15
|
+
// If not found, check on the constructor prototype (class-level decorator)
|
|
16
|
+
if (!metadata && target.constructor) {
|
|
17
|
+
metadata = Reflect.getOwnMetadata(keys_1.GUARD_KEY, target.constructor.prototype, propertyKey);
|
|
18
|
+
}
|
|
19
|
+
return metadata;
|
|
20
|
+
}
|
|
21
|
+
static register(container, target) {
|
|
22
|
+
const metadata = GuardHandler.getClassMetadata(target);
|
|
23
|
+
if (metadata && metadata?.guards?.length !== 0) {
|
|
24
|
+
const { guards } = metadata;
|
|
25
|
+
guards.forEach((guard) => {
|
|
26
|
+
GuardHandler._register(container, guard);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
// Register method guards
|
|
30
|
+
const methodNames = (0, get_class_methods_1.getClassMethods)(target);
|
|
31
|
+
methodNames.forEach((methodName) => {
|
|
32
|
+
const methodMetadata = Reflect.getOwnMetadata(keys_1.GUARD_KEY, target.prototype, methodName);
|
|
33
|
+
if (methodMetadata) {
|
|
34
|
+
methodMetadata.guards.forEach((guard) => {
|
|
35
|
+
GuardHandler._register(container, guard);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
static async fetch(container, target, methodName) {
|
|
41
|
+
const guards = [];
|
|
42
|
+
const metadata = GuardHandler.getClassMetadata(target.constructor);
|
|
43
|
+
if (metadata && metadata.guards.length > 0) {
|
|
44
|
+
guards.push(...(await Promise.all(metadata.guards.map((guard) => GuardHandler._fetch(container, guard)))));
|
|
45
|
+
}
|
|
46
|
+
const methodMetadata = GuardHandler.getMethodMetadata(target, methodName);
|
|
47
|
+
if (methodMetadata) {
|
|
48
|
+
guards.push(...(await Promise.all(methodMetadata.guards.map((guard) => GuardHandler._fetch(container, guard)))));
|
|
49
|
+
}
|
|
50
|
+
return guards;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Execute guards in sequence. If any guard returns false, throws ForbiddenApiException.
|
|
54
|
+
* Guards execute in order: global guards -> class guards -> method guards
|
|
55
|
+
*/
|
|
56
|
+
static async execute(executionContext, guards) {
|
|
57
|
+
for (const guard of guards) {
|
|
58
|
+
const canActivate = await guard.canActivate(executionContext);
|
|
59
|
+
if (!canActivate) {
|
|
60
|
+
throw new api_exception_1.ForbiddenApiException('Forbidden resource');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
static async _fetch(container, guard) {
|
|
66
|
+
if (typeof guard === 'function') {
|
|
67
|
+
return container.getAsync(guard);
|
|
68
|
+
}
|
|
69
|
+
return container.getAsync(guard.constructor);
|
|
70
|
+
}
|
|
71
|
+
static _register(container, guard) {
|
|
72
|
+
// If it's a class constructor (function), register it in the container
|
|
73
|
+
if (typeof guard === 'function') {
|
|
74
|
+
if (!container.isBound(guard)) {
|
|
75
|
+
container.bind(guard).toSelf().inSingletonScope();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// If it's an instance, bind it to its constructor class as a constant value
|
|
80
|
+
container.bind(guard.constructor).toConstantValue(guard);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.GuardHandler = GuardHandler;
|
|
85
|
+
/**
|
|
86
|
+
* Decorator that binds guards to the scope of the controller or method,
|
|
87
|
+
* depending on its context.
|
|
88
|
+
*
|
|
89
|
+
* When `@UseGuards` is used at the controller level, the guard will be
|
|
90
|
+
* applied to every handler (method) in the controller.
|
|
91
|
+
*
|
|
92
|
+
* When `@UseGuards` is used at the individual handler level, the guard
|
|
93
|
+
* will apply only to that specific method.
|
|
94
|
+
*
|
|
95
|
+
* @param guards a single guard instance or class, or a list of guard instances
|
|
96
|
+
* or classes.
|
|
97
|
+
*
|
|
98
|
+
* @see [Guards](https://docs.nestjs.com/guards)
|
|
99
|
+
*
|
|
100
|
+
* @usageNotes
|
|
101
|
+
* Guards can also be set up globally for all controllers and routes
|
|
102
|
+
* using `app.useGlobalGuards()` or by registering via module providers
|
|
103
|
+
* with the `APP_GUARD` token.
|
|
104
|
+
*
|
|
105
|
+
* @publicApi
|
|
106
|
+
*/
|
|
107
|
+
function UseGuards(...guards) {
|
|
108
|
+
return (target, propertyKey, descriptor) => {
|
|
109
|
+
if (descriptor && propertyKey) {
|
|
110
|
+
// Method decorator
|
|
111
|
+
Reflect.defineMetadata(keys_1.GUARD_KEY, { guards }, target, propertyKey);
|
|
112
|
+
return descriptor;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
// Class decorator
|
|
116
|
+
const methodNames = (0, get_class_methods_1.getClassMethods)(target);
|
|
117
|
+
// Store class-level guards metadata
|
|
118
|
+
Reflect.defineMetadata(keys_1.GUARD_KEY, { guards }, target);
|
|
119
|
+
// Process each method and store guards metadata
|
|
120
|
+
methodNames.forEach((methodName) => {
|
|
121
|
+
Reflect.defineMetadata(keys_1.GUARD_KEY, { guards }, target.prototype, methodName);
|
|
122
|
+
});
|
|
123
|
+
return target;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=use-guards-decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-guards-decorator.js","sourceRoot":"","sources":["../../../src/guards/decorators/use-guards-decorator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/guards/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./can-activate"), exports);
|
|
18
|
+
__exportStar(require("./decorators"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/guards/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA8B;AAC9B,+CAA4B"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export * from './constants';
|
|
|
3
3
|
export * from './utils/apply-decorators';
|
|
4
4
|
export * from './context';
|
|
5
5
|
export * from './exceptions';
|
|
6
|
+
export * from './guards';
|
|
6
7
|
export * from './interceptor';
|
|
7
8
|
export * from './logger';
|
|
8
9
|
export * from './controllers';
|
|
@@ -12,6 +13,7 @@ export * from './pipes';
|
|
|
12
13
|
export * from './server';
|
|
13
14
|
export * from './zod';
|
|
14
15
|
export { REQUEST } from './services/request';
|
|
16
|
+
export { APP_GUARD } from './services/guards';
|
|
15
17
|
export { APP_INTERCEPTOR } from './services/interceptor';
|
|
16
18
|
export { APP_FILTER } from './services/filters';
|
|
17
19
|
export { APP_PIPE } from './services/pipes';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAA;AAEzB,cAAc,aAAa,CAAA;AAC3B,cAAc,0BAA0B,CAAA;AACxC,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,wBAAwB,CAAA;AACtC,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,OAAO,CAAA;AAGrB,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAA;AAEzB,cAAc,aAAa,CAAA;AAC3B,cAAc,0BAA0B,CAAA;AACxC,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,wBAAwB,CAAA;AACtC,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,OAAO,CAAA;AAGrB,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -16,12 +16,13 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
17
17
|
};
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.HttpService = exports.APP_PIPE = exports.APP_FILTER = exports.APP_INTERCEPTOR = exports.REQUEST = void 0;
|
|
19
|
+
exports.HttpService = exports.APP_PIPE = exports.APP_FILTER = exports.APP_INTERCEPTOR = exports.APP_GUARD = exports.REQUEST = void 0;
|
|
20
20
|
require("reflect-metadata");
|
|
21
21
|
__exportStar(require("./constants"), exports);
|
|
22
22
|
__exportStar(require("./utils/apply-decorators"), exports);
|
|
23
23
|
__exportStar(require("./context"), exports);
|
|
24
24
|
__exportStar(require("./exceptions"), exports);
|
|
25
|
+
__exportStar(require("./guards"), exports);
|
|
25
26
|
__exportStar(require("./interceptor"), exports);
|
|
26
27
|
__exportStar(require("./logger"), exports);
|
|
27
28
|
__exportStar(require("./controllers"), exports);
|
|
@@ -33,6 +34,8 @@ __exportStar(require("./zod"), exports);
|
|
|
33
34
|
// Services
|
|
34
35
|
var request_1 = require("./services/request");
|
|
35
36
|
Object.defineProperty(exports, "REQUEST", { enumerable: true, get: function () { return request_1.REQUEST; } });
|
|
37
|
+
var guards_1 = require("./services/guards");
|
|
38
|
+
Object.defineProperty(exports, "APP_GUARD", { enumerable: true, get: function () { return guards_1.APP_GUARD; } });
|
|
36
39
|
var interceptor_1 = require("./services/interceptor");
|
|
37
40
|
Object.defineProperty(exports, "APP_INTERCEPTOR", { enumerable: true, get: function () { return interceptor_1.APP_INTERCEPTOR; } });
|
|
38
41
|
var filters_1 = require("./services/filters");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,0DAA0D;AAC1D,sEAAsE;;;;;;;;;;;;;;;;;AAEtE,4BAAyB;AAEzB,8CAA2B;AAC3B,2DAAwC;AACxC,4CAAyB;AACzB,+CAA4B;AAC5B,gDAA6B;AAC7B,2CAAwB;AACxB,gDAA6B;AAC7B,yDAAsC;AACtC,4CAAyB;AACzB,0CAAuB;AACvB,2CAAwB;AACxB,wCAAqB;AAErB,WAAW;AACX,8CAA4C;AAAnC,kGAAA,OAAO,OAAA;AAChB,sDAAwD;AAA/C,8GAAA,eAAe,OAAA;AACxB,8CAA+C;AAAtC,qGAAA,UAAU,OAAA;AACnB,0CAA2C;AAAlC,iGAAA,QAAQ,OAAA;AACjB,wDAAyE;AAA5C,2GAAA,WAAW,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,0DAA0D;AAC1D,sEAAsE;;;;;;;;;;;;;;;;;AAEtE,4BAAyB;AAEzB,8CAA2B;AAC3B,2DAAwC;AACxC,4CAAyB;AACzB,+CAA4B;AAC5B,2CAAwB;AACxB,gDAA6B;AAC7B,2CAAwB;AACxB,gDAA6B;AAC7B,yDAAsC;AACtC,4CAAyB;AACzB,0CAAuB;AACvB,2CAAwB;AACxB,wCAAqB;AAErB,WAAW;AACX,8CAA4C;AAAnC,kGAAA,OAAO,OAAA;AAChB,4CAA6C;AAApC,mGAAA,SAAS,OAAA;AAClB,sDAAwD;AAA/C,8GAAA,eAAe,OAAA;AACxB,8CAA+C;AAAtC,qGAAA,UAAU,OAAA;AACnB,0CAA2C;AAAlC,iGAAA,QAAQ,OAAA;AACjB,wDAAyE;AAA5C,2GAAA,WAAW,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console-logger.d.ts","sourceRoot":"","sources":["../../src/logger/console-logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAY1D,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;CACvB,CAAA;AAED,qBACa,aAAc,YAAW,aAAa;IACjD,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAqB;IAEpD,SAAS,CAAC,OAAO,EAAE,oBAAoB,CAAA;gBAEd,OAAO,CAAC,EAAE,oBAAoB;IAQvD,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAIjD,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAInD,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAInD,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAIlD,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAIpD,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAItD;;;OAGG;IACH,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE;IAO/B,SAAS,CAAC,YAAY,CACpB,KAAK,EAAE,MAAM,YAAQ,EACrB,OAAO,EAAE,GAAG,EACZ,eAAe,GAAE,QAAQ,GAAG,QAAmB,GAC9C,IAAI;
|
|
1
|
+
{"version":3,"file":"console-logger.d.ts","sourceRoot":"","sources":["../../src/logger/console-logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAY1D,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;CACvB,CAAA;AAED,qBACa,aAAc,YAAW,aAAa;IACjD,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAqB;IAEpD,SAAS,CAAC,OAAO,EAAE,oBAAoB,CAAA;gBAEd,OAAO,CAAC,EAAE,oBAAoB;IAQvD,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAIjD,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAInD,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAInD,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAIlD,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAIpD,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAItD;;;OAGG;IACH,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE;IAO/B,SAAS,CAAC,YAAY,CACpB,KAAK,EAAE,MAAM,YAAQ,EACrB,OAAO,EAAE,GAAG,EACZ,eAAe,GAAE,QAAQ,GAAG,QAAmB,GAC9C,IAAI;IAcP,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,MAAM;CAM7D"}
|
|
@@ -60,6 +60,12 @@ let ConsoleLogger = class ConsoleLogger {
|
|
|
60
60
|
this.options.logLevels = levels;
|
|
61
61
|
}
|
|
62
62
|
printMessage(level = 'log', message, writeStreamType = 'stdout') {
|
|
63
|
+
// Always log error and fatal levels, regardless of configuration
|
|
64
|
+
const isErrorLevel = level === 'error' || level === 'fatal';
|
|
65
|
+
const isLevelEnabled = this.options.logLevels?.includes(level);
|
|
66
|
+
if (!isErrorLevel && !isLevelEnabled) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
63
69
|
const logLevel = level.toUpperCase();
|
|
64
70
|
process[writeStreamType].write(this.formatMessage(logLevel, message));
|
|
65
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console-logger.js","sourceRoot":"","sources":["../../src/logger/console-logger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAAiD;AAEjD,qCAAiC;AAEjC,MAAM,kBAAkB,GAAe;IACrC,KAAK;IACL,OAAO;IACP,MAAM;IACN,OAAO;IACP,SAAS;IACT,OAAO;CACR,CAAA;AAQM,IAAM,aAAa,GAAnB,MAAM,aAAa;IAKxB,YAAyB,OAA8B;QAJ7C,cAAS,GAAe,kBAAkB,CAAA;QAKlD,OAAO,GAAG,OAAO,IAAI,EAAE,CAAA;QACvB,OAAO,CAAC,SAAS,GAAG,kBAAkB,CAAA;QACtC,OAAO,CAAC,MAAM,KAAK,WAAW,CAAA;QAE9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,GAAG,CAAC,OAAY,EAAE,GAAG,cAAqB;QACxC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,CAAA;IACtD,CAAC;IAED,KAAK,CAAC,OAAY,EAAE,GAAG,cAAqB;QAC1C,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,CAAA;IACxD,CAAC;IAED,KAAK,CAAC,OAAY,EAAE,GAAG,cAAqB;QAC1C,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,CAAA;IACxD,CAAC;IAED,IAAI,CAAC,OAAY,EAAE,GAAG,cAAqB;QACzC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAE,OAAY,EAAE,GAAG,cAAqB;QAC3C,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,CAAA;IACxD,CAAC;IAED,OAAO,CAAE,OAAY,EAAE,GAAG,cAAqB;QAC7C,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,CAAA;IAC1D,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,MAAkB;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;QACnB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,MAAM,CAAA;IACjC,CAAC;IAES,YAAY,CACpB,QAAgB,KAAK,EACrB,OAAY,EACZ,kBAAuC,QAAQ;QAE/C,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QAEpC,OAAO,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;IACvE,CAAC;IAES,aAAa,CAAC,KAAa,EAAE,OAAY;QACjD,MAAM,SAAS,GAAG,eAAM,CAAC,YAAY,EAAE,CAAA;QACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QAEpC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,OAAO,SAAS,KAAK,QAAQ,KAAK,OAAO,IAAI,CAAA;IAC7E,CAAC;CACF,CAAA;
|
|
1
|
+
{"version":3,"file":"console-logger.js","sourceRoot":"","sources":["../../src/logger/console-logger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAAiD;AAEjD,qCAAiC;AAEjC,MAAM,kBAAkB,GAAe;IACrC,KAAK;IACL,OAAO;IACP,MAAM;IACN,OAAO;IACP,SAAS;IACT,OAAO;CACR,CAAA;AAQM,IAAM,aAAa,GAAnB,MAAM,aAAa;IAKxB,YAAyB,OAA8B;QAJ7C,cAAS,GAAe,kBAAkB,CAAA;QAKlD,OAAO,GAAG,OAAO,IAAI,EAAE,CAAA;QACvB,OAAO,CAAC,SAAS,GAAG,kBAAkB,CAAA;QACtC,OAAO,CAAC,MAAM,KAAK,WAAW,CAAA;QAE9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,GAAG,CAAC,OAAY,EAAE,GAAG,cAAqB;QACxC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,CAAA;IACtD,CAAC;IAED,KAAK,CAAC,OAAY,EAAE,GAAG,cAAqB;QAC1C,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,CAAA;IACxD,CAAC;IAED,KAAK,CAAC,OAAY,EAAE,GAAG,cAAqB;QAC1C,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,CAAA;IACxD,CAAC;IAED,IAAI,CAAC,OAAY,EAAE,GAAG,cAAqB;QACzC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAE,OAAY,EAAE,GAAG,cAAqB;QAC3C,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,CAAA;IACxD,CAAC;IAED,OAAO,CAAE,OAAY,EAAE,GAAG,cAAqB;QAC7C,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,CAAA;IAC1D,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,MAAkB;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;QACnB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,MAAM,CAAA;IACjC,CAAC;IAES,YAAY,CACpB,QAAgB,KAAK,EACrB,OAAY,EACZ,kBAAuC,QAAQ;QAE/C,iEAAiE;QACjE,MAAM,YAAY,GAAG,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,CAAA;QAC3D,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAiB,CAAC,CAAA;QAE1E,IAAI,CAAC,YAAY,IAAI,CAAC,cAAc,EAAE,CAAC;YACrC,OAAM;QACR,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QAEpC,OAAO,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;IACvE,CAAC;IAES,aAAa,CAAC,KAAa,EAAE,OAAY;QACjD,MAAM,SAAS,GAAG,eAAM,CAAC,YAAY,EAAE,CAAA;QACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QAEpC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,OAAO,SAAS,KAAK,QAAQ,KAAK,OAAO,IAAI,CAAA;IAC7E,CAAC;CACF,CAAA;AAxEY,sCAAa;wBAAb,aAAa;IADzB,IAAA,sBAAU,GAAE;IAME,WAAA,IAAA,qBAAS,GAAE,CAAA;;GALb,aAAa,CAwEzB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Container } from '../dependency-injection/container';
|
|
2
2
|
import { ExceptionFilter } from '../exceptions/exception-filter';
|
|
3
|
+
import { CanActivate } from '../guards';
|
|
3
4
|
import { Interceptor } from '../interceptor/interceptor';
|
|
4
5
|
import { ModuleMetadata } from '../modules/module-decorator';
|
|
5
6
|
import { Class } from '../types/class';
|
|
@@ -13,6 +14,7 @@ export type ServerFactoryOptions = {
|
|
|
13
14
|
export declare class ServerFactory {
|
|
14
15
|
private globalPrefix;
|
|
15
16
|
private globalFilters;
|
|
17
|
+
private globalGuards;
|
|
16
18
|
private globalInterceptors;
|
|
17
19
|
private globalPipes;
|
|
18
20
|
private readonly module;
|
|
@@ -26,6 +28,7 @@ export declare class ServerFactory {
|
|
|
26
28
|
*/
|
|
27
29
|
setGlobalPrefix(prefix: string): void;
|
|
28
30
|
useGlobalFilters(...filters: ExceptionFilter[]): void;
|
|
31
|
+
useGlobalGuards(...guards: CanActivate[]): void;
|
|
29
32
|
useGlobalInterceptors(...interceptors: Interceptor[]): void;
|
|
30
33
|
useGlobalPipes(...pipes: PipeTransform[]): void;
|
|
31
34
|
/**
|
|
@@ -65,6 +68,13 @@ export declare class ServerFactory {
|
|
|
65
68
|
* @returns The route
|
|
66
69
|
*/
|
|
67
70
|
private _fetchRoute;
|
|
71
|
+
/**
|
|
72
|
+
* Fetch guards for a controller method
|
|
73
|
+
* @param controller - The controller instance
|
|
74
|
+
* @param methodName - The method name
|
|
75
|
+
* @returns Array of guard instances
|
|
76
|
+
*/
|
|
77
|
+
private _fetchGuards;
|
|
68
78
|
private _fetchInterceptors;
|
|
69
79
|
private _fetchHandler;
|
|
70
80
|
private _fetchExceptionFilters;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-factory.d.ts","sourceRoot":"","sources":["../../src/server/server-factory.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAI5D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"server-factory.d.ts","sourceRoot":"","sources":["../../src/server/server-factory.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAI5D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAgB,MAAM,UAAU,CAAA;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,EAAiB,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAK1E,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAErC,OAAO,EAAE,WAAW,EAAgB,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAIvD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAKtD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAE1D,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAA;CACjC,CAAA;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,aAAa,CAAiD;IACtE,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,WAAW,CAAsB;IAEzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAO;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAE7B,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE;WAQ3D,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,oBAAoB;IAgBlE;;;OAGG;IACI,eAAe,CAAC,MAAM,EAAE,MAAM;IAI9B,gBAAgB,CAAC,GAAG,OAAO,EAAE,eAAe,EAAE;IAI9C,eAAe,CAAC,GAAG,MAAM,EAAE,WAAW,EAAE;IAIxC,qBAAqB,CAAC,GAAG,YAAY,EAAE,WAAW,EAAE;IAIpD,cAAc,CAAC,GAAG,KAAK,EAAE,aAAa,EAAE;IAI/C;;;;;OAKG;IACI,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,CAAC;IAIjE;;;;;OAKG;IACI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC;IAIvE;;;;;OAKG;IACU,OAAO,CAClB,OAAO,EAAE,WAAW,EACpB,EAAE,MAAM,EAAE,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;KAAE;IAiGtC,OAAO,CAAC,MAAM,CAAC,eAAe;IAM9B;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAoBrB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAiBnB;;;;;OAKG;YACW,YAAY;YA0BZ,kBAAkB;IAwBhC,OAAO,CAAC,aAAa;YAiBP,sBAAsB;IAqBpC;;;;;OAKG;YACW,WAAW;CAyB1B"}
|
|
@@ -8,9 +8,11 @@ const container_1 = require("../dependency-injection/container");
|
|
|
8
8
|
const base_exception_filter_1 = require("../exceptions/base-exception-filter");
|
|
9
9
|
const catch_decorator_1 = require("../exceptions/decorators/catch-decorator");
|
|
10
10
|
const use_filters_decorator_1 = require("../exceptions/decorators/use-filters-decorator");
|
|
11
|
+
const guards_1 = require("../guards");
|
|
11
12
|
const use_interceptor_decorator_1 = require("../interceptor/decorators/use-interceptor-decorator");
|
|
12
13
|
const module_decorator_1 = require("../modules/module-decorator");
|
|
13
14
|
const filters_1 = require("../services/filters");
|
|
15
|
+
const guards_2 = require("../services/guards");
|
|
14
16
|
const interceptor_1 = require("../services/interceptor");
|
|
15
17
|
const request_1 = require("../services/request");
|
|
16
18
|
const url_match_1 = require("../utils/url/url-match");
|
|
@@ -26,6 +28,7 @@ class ServerFactory {
|
|
|
26
28
|
constructor(module, container, routes) {
|
|
27
29
|
this.globalPrefix = '';
|
|
28
30
|
this.globalFilters = [new base_exception_filter_1.BaseExceptionFilter()];
|
|
31
|
+
this.globalGuards = [];
|
|
29
32
|
this.globalInterceptors = [];
|
|
30
33
|
this.globalPipes = [];
|
|
31
34
|
this.module = module;
|
|
@@ -53,6 +56,9 @@ class ServerFactory {
|
|
|
53
56
|
useGlobalFilters(...filters) {
|
|
54
57
|
this.globalFilters.push(...filters);
|
|
55
58
|
}
|
|
59
|
+
useGlobalGuards(...guards) {
|
|
60
|
+
this.globalGuards.push(...guards);
|
|
61
|
+
}
|
|
56
62
|
useGlobalInterceptors(...interceptors) {
|
|
57
63
|
this.globalInterceptors.push(...interceptors);
|
|
58
64
|
}
|
|
@@ -94,6 +100,10 @@ class ServerFactory {
|
|
|
94
100
|
controller = await this.container.getAsync(match?.controller);
|
|
95
101
|
const handler = this._fetchHandler(controller, match?.methodName);
|
|
96
102
|
const executionContext = new execution_context_1.ExecutionContext(controller.constructor, handler, [request]);
|
|
103
|
+
// Check if there's any guards to execute
|
|
104
|
+
const guards = await this._fetchGuards(controller, match?.methodName);
|
|
105
|
+
// Execute guards - throws ForbiddenApiException if any guard returns false
|
|
106
|
+
await guards_1.GuardHandler.execute(executionContext, guards);
|
|
97
107
|
// Check if there's any interceptors to execute
|
|
98
108
|
const interceptors = await this._fetchInterceptors(controller);
|
|
99
109
|
// Check if there's any pipes to execute
|
|
@@ -116,6 +126,11 @@ class ServerFactory {
|
|
|
116
126
|
// Check if any specific type is registered, if none, it's a catch all filter
|
|
117
127
|
if (!type || error instanceof type) {
|
|
118
128
|
const response = await filter.catch(error, host);
|
|
129
|
+
// Add validation
|
|
130
|
+
if (response && !(response instanceof Response)) {
|
|
131
|
+
logger_1.Logger.error(`ExceptionFilter ${filter.constructor.name} returned invalid response type: ${response?.constructor?.name}`);
|
|
132
|
+
return server_1.NextResponse.json({ message: 'Internal server error' }, { status: 500 });
|
|
133
|
+
}
|
|
119
134
|
// If a response is returned from the filter, use it
|
|
120
135
|
if (response) {
|
|
121
136
|
return response;
|
|
@@ -170,6 +185,30 @@ class ServerFactory {
|
|
|
170
185
|
}
|
|
171
186
|
return route;
|
|
172
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Fetch guards for a controller method
|
|
190
|
+
* @param controller - The controller instance
|
|
191
|
+
* @param methodName - The method name
|
|
192
|
+
* @returns Array of guard instances
|
|
193
|
+
*/
|
|
194
|
+
async _fetchGuards(controller, methodName) {
|
|
195
|
+
const guards = [...this.globalGuards];
|
|
196
|
+
// Fetch all registered global guards
|
|
197
|
+
try {
|
|
198
|
+
const appGuards = await this.container.getAllAsync(guards_2.APP_GUARD);
|
|
199
|
+
if (appGuards.length > 0) {
|
|
200
|
+
guards.push(...appGuards);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
// No bindings found or error retrieving - continue without APP_GUARD providers
|
|
205
|
+
}
|
|
206
|
+
// Fetch controller and method guards
|
|
207
|
+
if (controller) {
|
|
208
|
+
guards.push(...(await guards_1.GuardHandler.fetch(this.container, controller, methodName)));
|
|
209
|
+
}
|
|
210
|
+
return guards;
|
|
211
|
+
}
|
|
173
212
|
async _fetchInterceptors(controller) {
|
|
174
213
|
const interceptors = [...this.globalInterceptors];
|
|
175
214
|
// Fetch all registered global interceptors
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-factory.js","sourceRoot":"","sources":["../../src/server/server-factory.ts"],"names":[],"mappings":";;;AAAA,6DAAwD;AACxD,mEAA8D;AAC9D,2CAAkD;AAElD,gEAA4D;AAC5D,8EAAwE;AACxE,6EAAsE;AACtE,yFAA6E;AAE7E,kGAAuF;AAEvF,iEAA0E;AAC1E,gDAA+C;AAC/C,wDAAwD;AACxD,gDAAgD;AAEhD,qDAAgD;AAChD,wCAAuD;AAEvD,4CAAwC;AACxC,8DAAiE;AACjE,mCAA8B;AAE9B,4CAA2C;AAC3C,4DAA0D;AAC1D,8EAAuE;AACvE,wEAA0E;AAO1E,MAAa,aAAa;
|
|
1
|
+
{"version":3,"file":"server-factory.js","sourceRoot":"","sources":["../../src/server/server-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/services/guards.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,eAAsB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/services/guards.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA"}
|