prime-sdk 3.0.7 → 3.0.9-beta.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 (99) hide show
  1. package/.eslintrc.js +4 -0
  2. package/.yarn/install-state.gz +0 -0
  3. package/README.md +307 -0
  4. package/dist/index.d.ts +15 -1
  5. package/dist/index.js +25 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/lib/entraID/customError/entraID.exception.d.ts +5 -0
  8. package/dist/lib/entraID/customError/entraID.exception.js +43 -0
  9. package/dist/lib/entraID/customError/entraID.exception.js.map +1 -0
  10. package/dist/lib/entraID/decorators/current-user.decorator.d.ts +1 -0
  11. package/dist/lib/entraID/decorators/current-user.decorator.js +9 -0
  12. package/dist/lib/entraID/decorators/current-user.decorator.js.map +1 -0
  13. package/dist/lib/entraID/decorators/public.decorator.d.ts +2 -0
  14. package/dist/lib/entraID/decorators/public.decorator.js +8 -0
  15. package/dist/lib/entraID/decorators/public.decorator.js.map +1 -0
  16. package/dist/lib/entraID/decorators/roles.decorator.d.ts +2 -0
  17. package/dist/lib/entraID/decorators/roles.decorator.js +8 -0
  18. package/dist/lib/entraID/decorators/roles.decorator.js.map +1 -0
  19. package/dist/lib/entraID/entraID.constants.d.ts +2 -0
  20. package/dist/lib/entraID/entraID.constants.js +6 -0
  21. package/dist/lib/entraID/entraID.constants.js.map +1 -0
  22. package/dist/lib/entraID/entraID.module.d.ts +14 -0
  23. package/dist/lib/entraID/entraID.module.js +56 -0
  24. package/dist/lib/entraID/entraID.module.js.map +1 -0
  25. package/dist/lib/entraID/entraID.service.d.ts +25 -0
  26. package/dist/lib/entraID/entraID.service.js +166 -0
  27. package/dist/lib/entraID/entraID.service.js.map +1 -0
  28. package/dist/lib/entraID/guards/entra-auth.guard.d.ts +21 -0
  29. package/dist/lib/entraID/guards/entra-auth.guard.js +70 -0
  30. package/dist/lib/entraID/guards/entra-auth.guard.js.map +1 -0
  31. package/dist/lib/entraID/guards/roles.guard.d.ts +7 -0
  32. package/dist/lib/entraID/guards/roles.guard.js +41 -0
  33. package/dist/lib/entraID/guards/roles.guard.js.map +1 -0
  34. package/dist/lib/entraID/interfaces/entraID-service.interface.d.ts +7 -0
  35. package/dist/lib/entraID/interfaces/entraID-service.interface.js +3 -0
  36. package/dist/lib/entraID/interfaces/entraID-service.interface.js.map +1 -0
  37. package/dist/lib/entraID/internal-token/internal-token.module.d.ts +2 -0
  38. package/dist/lib/entraID/internal-token/internal-token.module.js +21 -0
  39. package/dist/lib/entraID/internal-token/internal-token.module.js.map +1 -0
  40. package/dist/lib/entraID/internal-token/internal-token.service.d.ts +10 -0
  41. package/dist/lib/entraID/internal-token/internal-token.service.js +76 -0
  42. package/dist/lib/entraID/internal-token/internal-token.service.js.map +1 -0
  43. package/dist/lib/entraID/microsoft/microsoft.module.d.ts +2 -0
  44. package/dist/lib/entraID/microsoft/microsoft.module.js +21 -0
  45. package/dist/lib/entraID/microsoft/microsoft.module.js.map +1 -0
  46. package/dist/lib/entraID/microsoft/microsoft.service.d.ts +14 -0
  47. package/dist/lib/entraID/microsoft/microsoft.service.js +132 -0
  48. package/dist/lib/entraID/microsoft/microsoft.service.js.map +1 -0
  49. package/dist/lib/entraID/security/security.module.d.ts +2 -0
  50. package/dist/lib/entraID/security/security.module.js +21 -0
  51. package/dist/lib/entraID/security/security.module.js.map +1 -0
  52. package/dist/lib/entraID/security/security.service.d.ts +9 -0
  53. package/dist/lib/entraID/security/security.service.js +65 -0
  54. package/dist/lib/entraID/security/security.service.js.map +1 -0
  55. package/dist/lib/entraID/types/entraID-module-init.types.d.ts +18 -0
  56. package/dist/lib/entraID/types/entraID-module-init.types.js +3 -0
  57. package/dist/lib/entraID/types/entraID-module-init.types.js.map +1 -0
  58. package/dist/lib/entraID/types/entraID.type.d.ts +55 -0
  59. package/dist/lib/entraID/types/entraID.type.js +3 -0
  60. package/dist/lib/entraID/types/entraID.type.js.map +1 -0
  61. package/dist/lib/entraID/utils/cookie.utils.d.ts +8 -0
  62. package/dist/lib/entraID/utils/cookie.utils.js +46 -0
  63. package/dist/lib/entraID/utils/cookie.utils.js.map +1 -0
  64. package/dist/lib/entraID/utils/crypto.utils.d.ts +9 -0
  65. package/dist/lib/entraID/utils/crypto.utils.js +47 -0
  66. package/dist/lib/entraID/utils/crypto.utils.js.map +1 -0
  67. package/dist/lib/entraID/utils/index.d.ts +2 -0
  68. package/dist/lib/entraID/utils/index.js +8 -0
  69. package/dist/lib/entraID/utils/index.js.map +1 -0
  70. package/dist/lib/entraID/utils/token.utils.d.ts +6 -0
  71. package/dist/lib/entraID/utils/token.utils.js +24 -0
  72. package/dist/lib/entraID/utils/token.utils.js.map +1 -0
  73. package/dist/tsconfig.build.tsbuildinfo +1 -1
  74. package/package.json +4 -1
  75. package/src/index.ts +44 -0
  76. package/src/lib/entraID/customError/entraID.exception.ts +43 -0
  77. package/src/lib/entraID/decorators/current-user.decorator.ts +8 -0
  78. package/src/lib/entraID/decorators/public.decorator.ts +5 -0
  79. package/src/lib/entraID/decorators/roles.decorator.ts +5 -0
  80. package/src/lib/entraID/entraID.constants.ts +2 -0
  81. package/src/lib/entraID/entraID.module.ts +78 -0
  82. package/src/lib/entraID/entraID.service.ts +206 -0
  83. package/src/lib/entraID/guards/entra-auth.guard.ts +77 -0
  84. package/src/lib/entraID/guards/roles.guard.ts +34 -0
  85. package/src/lib/entraID/interfaces/entraID-service.interface.ts +12 -0
  86. package/src/lib/entraID/internal-token/internal-token.module.ts +8 -0
  87. package/src/lib/entraID/internal-token/internal-token.service.ts +66 -0
  88. package/src/lib/entraID/microsoft/microsoft.module.ts +8 -0
  89. package/src/lib/entraID/microsoft/microsoft.service.ts +158 -0
  90. package/src/lib/entraID/security/security.module.ts +8 -0
  91. package/src/lib/entraID/security/security.service.ts +68 -0
  92. package/src/lib/entraID/types/entraID-module-init.types.ts +25 -0
  93. package/src/lib/entraID/types/entraID.type.ts +61 -0
  94. package/src/lib/entraID/utils/cookie.utils.ts +60 -0
  95. package/src/lib/entraID/utils/crypto.utils.ts +53 -0
  96. package/src/lib/entraID/utils/index.ts +2 -0
  97. package/src/lib/entraID/utils/token.utils.ts +20 -0
  98. package/tsconfig.json +1 -0
  99. package/.vscode/settings.json +0 -4
package/.eslintrc.js CHANGED
@@ -21,5 +21,9 @@ module.exports = {
21
21
  '@typescript-eslint/explicit-function-return-type': 'off',
22
22
  '@typescript-eslint/explicit-module-boundary-types': 'off',
23
23
  '@typescript-eslint/no-explicit-any': 'off',
24
+ '@typescript-eslint/no-unused-vars': [
25
+ 'error',
26
+ { argsIgnorePattern: '^_', varsIgnorePattern: '^_' },
27
+ ],
24
28
  },
25
29
  };
Binary file
package/README.md CHANGED
@@ -270,3 +270,310 @@ export class AppService {
270
270
  #### Next steps
271
271
 
272
272
  - Interface for Class to facilite test
273
+
274
+ ---
275
+
276
+ ### EntraID (Microsoft Entra ID / Azure AD)
277
+
278
+ Módulo de autenticação SSO com Microsoft Entra ID via OAuth 2.0 + OIDC. Emite um JWT interno após validar o token do Azure, evitando expor o `access_token` da Microsoft para o frontend.
279
+
280
+ #### Pré-requisitos no Azure
281
+
282
+ No [Portal Azure](https://portal.azure.com), crie um **App Registration** e configure:
283
+
284
+ | Campo | Valor |
285
+ |---|---|
286
+ | Redirect URI | `https://seu-dominio.com/auth/sso/callback` (tipo: Web) |
287
+ | Client Secret | Gere em **Certificates & secrets** |
288
+ | API Permissions | `openid`, `profile`, `email`, `User.Read`, `User.ReadBasic.All` |
289
+
290
+ Anote o **Tenant ID**, **Client ID** e **Client Secret**.
291
+
292
+ #### Variáveis de ambiente
293
+
294
+ ```env
295
+ TENANT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
296
+ CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
297
+ CLIENT_SECRET=sua-secret-aqui
298
+ REDIRECT_URI=http://localhost:3000/auth/sso/callback
299
+ STATE_SECRET=string-aleatoria-32-chars
300
+ JWT_SECRET=string-aleatoria-32-chars
301
+ JWT_EXPIRES_IN=8h
302
+ ```
303
+
304
+ #### 1. Registrar o módulo
305
+
306
+ ```typescript
307
+ import { EntraIDModule } from 'prime-sdk';
308
+
309
+ @Module({
310
+ imports: [
311
+ EntraIDModule.forRoot({
312
+ tenantID: process.env.TENANT_ID!,
313
+ clientID: process.env.CLIENT_ID!,
314
+ clientSecret: process.env.CLIENT_SECRET!,
315
+ stateSecret: process.env.STATE_SECRET!,
316
+ redirectUri: process.env.REDIRECT_URI!,
317
+ jwtSecret: process.env.JWT_SECRET!,
318
+ jwtExpiresIn: process.env.JWT_EXPIRES_IN ?? '8h',
319
+ }),
320
+ ],
321
+ })
322
+ export class AppModule {}
323
+ ```
324
+
325
+ Com factory assíncrona (ex: usando `ConfigService`):
326
+
327
+ ```typescript
328
+ EntraIDModule.forRootAsync({
329
+ imports: [ConfigModule],
330
+ inject: [ConfigService],
331
+ useFactory: (config: ConfigService) => ({
332
+ tenantID: config.get('TENANT_ID')!,
333
+ clientID: config.get('CLIENT_ID')!,
334
+ clientSecret: config.get('CLIENT_SECRET')!,
335
+ stateSecret: config.get('STATE_SECRET')!,
336
+ redirectUri: config.get('REDIRECT_URI')!,
337
+ jwtSecret: config.get('JWT_SECRET')!,
338
+ }),
339
+ }),
340
+ ```
341
+
342
+ O módulo é registrado como **global** — não é necessário importá-lo em outros módulos.
343
+
344
+ #### 2. Implementar o controller de autenticação
345
+
346
+ ```typescript
347
+ // auth.controller.ts
348
+ import { Controller, Get, Post, Body, Res, HttpCode, Redirect } from '@nestjs/common';
349
+ import { Response } from 'express';
350
+ import { EntraIDService, CallbackParams, CookieUtils } from 'prime-sdk';
351
+
352
+ @Controller('auth')
353
+ export class AuthController {
354
+ constructor(private readonly entraService: EntraIDService) {}
355
+
356
+ @Get('login')
357
+ @Redirect()
358
+ async login() {
359
+ const url = await this.entraService.initiateLogin();
360
+ return { url };
361
+ }
362
+
363
+ // Passo 2: a Microsoft faz POST aqui após o login bem-sucedido
364
+ @Post('sso/callback')
365
+ @HttpCode(302)
366
+ @Redirect()
367
+ async callback(@Body() body: CallbackParams, @Res({ passthrough: true }) res: Response) {
368
+ const { token, user, refreshToken } = await this.entraService.handleCallback(body);
369
+
370
+ CookieUtils.setAuthCookie(res, token); // cookie httpOnly com o JWT
371
+ CookieUtils.setUserDataCookie(res, user);
372
+ if (refreshToken) {
373
+ res.cookie('refresh_token', refreshToken, { httpOnly: true, path: '/' });
374
+ }
375
+
376
+ return { url: 'http://localhost:9000/dashboard' };
377
+ }
378
+
379
+ // Renovar o JWT usando o refresh token
380
+ @Post('refresh')
381
+ @HttpCode(200)
382
+ async refresh(@Req() req: Request, @Res({ passthrough: true }) res: Response) {
383
+ const refreshToken = req.cookies?.refresh_token;
384
+ const { token, user } = await this.entraService.refresh(refreshToken);
385
+
386
+ CookieUtils.setAuthCookie(res, token);
387
+ CookieUtils.setUserDataCookie(res, user);
388
+ return { user };
389
+ }
390
+
391
+ // Logout: revoga sessões no Azure e limpa cookies
392
+ @Post('logout')
393
+ @HttpCode(200)
394
+ async logout(@Req() req: Request, @Res({ passthrough: true }) res: Response) {
395
+ const token = req.cookies?.auth_token;
396
+ if (token) {
397
+ try {
398
+ const user = this.entraService.decodeLocalToken(token);
399
+ await this.entraService.logout(user.id);
400
+ } catch {}
401
+ }
402
+ CookieUtils.clearAuthCookies(res);
403
+ return { message: 'Logout realizado com sucesso' };
404
+ }
405
+ }
406
+ ```
407
+
408
+ #### 3. Proteger rotas com `@UseGuards(EntraAuthGuard)`
409
+
410
+ ```typescript
411
+ // profile.controller.ts
412
+ import { Controller, Get, UseGuards } from '@nestjs/common';
413
+ import { EntraAuthGuard, CurrentUser, EntraUser } from 'prime-sdk';
414
+
415
+ @Controller('profile')
416
+ @UseGuards(EntraAuthGuard) // protege todos os endpoints da classe
417
+ export class ProfileController {
418
+
419
+ @Get()
420
+ getProfile(@CurrentUser() user: EntraUser) {
421
+ return { user };
422
+ }
423
+ }
424
+ ```
425
+
426
+ O `EntraAuthGuard` aceita o token via:
427
+ - Header `Authorization: Bearer <token>`
428
+ - Cookie `auth_token` (httpOnly)
429
+
430
+ #### 4. Controlar acesso por grupos do Azure AD com `@Roles()` e `RolesGuard`
431
+
432
+ As permissões vêm dos **grupos do Azure AD** aos quais o usuário pertence. Esses grupos são buscados automaticamente pelo SDK via Graph API e incluídos no JWT como `groups[]`. Não é necessário consultar banco de dados para autorização.
433
+
434
+ ```typescript
435
+ import { Controller, Get, UseGuards } from '@nestjs/common';
436
+ import { EntraAuthGuard, CurrentUser, EntraUser, RolesGuard, Roles } from 'prime-sdk';
437
+
438
+ @Controller('pedidos')
439
+ @UseGuards(EntraAuthGuard)
440
+ export class PedidosController {
441
+
442
+ @Get()
443
+ listar(@CurrentUser() user: EntraUser) {
444
+ return { pedidos: [] };
445
+ }
446
+
447
+ @Get('aprovar')
448
+ @UseGuards(RolesGuard)
449
+ @Roles('portal-promo-dpsp-comercial-hml', 'portal-promo-dpsp-price-hml')
450
+ aprovar(@CurrentUser() user: EntraUser) {
451
+ // só chega aqui se user.groups[] contiver ao menos um dos grupos acima
452
+ return { aprovado: true };
453
+ }
454
+ }
455
+ ```
456
+
457
+ O `RolesGuard` verifica se `user.groups[].displayName` contém **ao menos um** dos grupos declarados em `@Roles()`. Se nenhum grupo bater, retorna **403** com a mensagem indicando quais grupos são necessários.
458
+
459
+ > Os grupos são gerenciados exclusivamente pelo administrador do Azure AD — sem nenhuma alteração no código da aplicação.
460
+
461
+ #### 5. Liberar rotas com `@Public()`
462
+
463
+ Use `@Public()` em um método para que o guard **ignore a autenticação** naquele endpoint específico, mesmo que o controller inteiro seja protegido:
464
+
465
+ ```typescript
466
+ import { Controller, Get, UseGuards } from '@nestjs/common';
467
+ import { EntraAuthGuard, Public } from 'prime-sdk';
468
+
469
+ @Controller('info')
470
+ @UseGuards(EntraAuthGuard)
471
+ export class InfoController {
472
+
473
+ @Get('status')
474
+ @Public() // acessível sem token
475
+ getStatus() {
476
+ return { status: 'online', timestamp: new Date().toISOString() };
477
+ }
478
+
479
+ @Get('me') // ainda requer autenticação
480
+ getMe(@CurrentUser() user: EntraUser) {
481
+ return { user };
482
+ }
483
+ }
484
+ ```
485
+
486
+ #### 5. Enriquecer o JWT com dados da aplicação
487
+
488
+ Por padrão o JWT contém: `id`, `email`, `name`, `tenantId`, `matricula` e `groups`.
489
+
490
+ Para adicionar campos extras (ex: dados do banco de dados consultados pelo email), estenda o `InternalTokenService` e sobrescreva `enrichTokenPayload`:
491
+
492
+ ```typescript
493
+ // custom-token.service.ts
494
+ import { Injectable } from '@nestjs/common';
495
+ import { InternalTokenService, TokenEnrichmentContext } from 'prime-sdk';
496
+
497
+ @Injectable()
498
+ export class CustomTokenService extends InternalTokenService {
499
+ protected override async enrichTokenPayload(
500
+ context: TokenEnrichmentContext,
501
+ ): Promise<Record<string, unknown>> {
502
+ // context.user → dados base do usuário (EntraUser)
503
+ // context.accessToken → token da Microsoft (para chamadas ao Graph API)
504
+
505
+ // Exemplo: lookup no banco usando o email como chave
506
+ const profile = await this.userRepository.findByEmail(context.user.email);
507
+
508
+ return {
509
+ role: profile?.role ?? 'USER',
510
+ cargo: profile?.cargo,
511
+ departamento: profile?.departamento,
512
+ permissoes: profile?.permissoes ?? [],
513
+ };
514
+ }
515
+ }
516
+ ```
517
+
518
+ Registre o serviço customizado na opção `internalTokenService` do `forRoot`:
519
+
520
+ ```typescript
521
+ EntraIDModule.forRoot(
522
+ {
523
+ tenantID: process.env.TENANT_ID!,
524
+ // ... demais configurações
525
+ },
526
+ { internalTokenService: CustomTokenService }, // <-- aqui
527
+ ),
528
+ ```
529
+
530
+ > **Atenção:** `enrichTokenPayload` não pode retornar claims reservados do JWT (`sub`, `iss`, `aud`, `exp`, `iat`, `nbf`, `jti`). O SDK lança `RESERVED_CLAIM_OVERRIDE` caso isso ocorra.
531
+
532
+ #### 6. Tipar o usuário enriquecido
533
+
534
+ Como `EntraUser` usa `& Record<string, unknown>` para os campos extras, crie uma interface própria para ter tipagem completa no seu projeto:
535
+
536
+ ```typescript
537
+ // types/app-user.types.ts
538
+ export interface AppUser {
539
+ id: string;
540
+ email: string;
541
+ name: string;
542
+ tenantId: string;
543
+ matricula?: string | null;
544
+ groups: { displayName: string }[];
545
+ // campos adicionados pelo CustomTokenService
546
+ role: 'ADMIN' | 'USER';
547
+ cargo: string;
548
+ departamento: string;
549
+ permissoes: string[];
550
+ }
551
+ ```
552
+
553
+ ```typescript
554
+ @Get('profile')
555
+ getProfile(@CurrentUser() user: AppUser) {
556
+ return user;
557
+ }
558
+ ```
559
+
560
+ #### 7. Referência das exportações
561
+
562
+ | Exportação | Tipo | Descrição |
563
+ |---|---|---|
564
+ | `EntraIDModule` | Module | Módulo principal — use `forRoot()` ou `forRootAsync()` |
565
+ | `EntraIDService` | Service | `initiateLogin()`, `handleCallback()`, `refresh()`, `logout()`, `decodeLocalToken()` |
566
+ | `EntraAuthGuard` | Guard | Valida o JWT no header ou cookie |
567
+ | `RolesGuard` | Guard | Verifica se `user.groups[]` contém os grupos exigidos por `@Roles()` |
568
+ | `InternalTokenService` | Service | Estenda para enriquecer o JWT via `enrichTokenPayload()` |
569
+ | `CurrentUser` | Decorator | Injeta o usuário autenticado no parâmetro do método |
570
+ | `Public` | Decorator | Marca um endpoint como público, ignorado pelo `EntraAuthGuard` |
571
+ | `Roles` | Decorator | Define os grupos do Azure AD exigidos pelo `RolesGuard` |
572
+ | `CookieUtils` | Class | `setAuthCookie()`, `setUserDataCookie()`, `clearAuthCookies()` |
573
+ | `TokenUtils` | Class | `extractFromRequest()`, `extractUserDataFromCookie()` |
574
+ | `EntraIDException` | Error | Erros tipados do SDK — acesse o código via `.code` |
575
+ | `EntraUser` | Type | Tipo base do usuário no JWT |
576
+ | `EntraIDSetup` | Type | Configuração do `forRoot()` |
577
+ | `TokenEnrichmentContext` | Type | Parâmetro de `enrichTokenPayload()` |
578
+ | `CallbackParams` | Type | Body do callback OAuth (`code`, `state`, `error`) |
579
+ | `AuthResult` | Type | Retorno de `handleCallback()` e `refresh()` |
package/dist/index.d.ts CHANGED
@@ -20,5 +20,19 @@ import { DocumentsModule } from './lib/documents/documents.module';
20
20
  import { Documents } from './lib/documents/documents';
21
21
  import { IBedrock, ITextract } from './lib/documents/interfaces/documents.interface';
22
22
  import { SimpleRedisSetup, ClusterRedisSetup, TypeRedis, PubSubRedis } from './external/redis/types/ioredis.types';
23
+ import { EntraIDModule, ENTRA_ID_CONFIG } from './lib/entraID/entraID.module';
24
+ import type { EntraIDModuleOptions } from './lib/entraID/entraID.module';
25
+ import { EntraIDService } from './lib/entraID/entraID.service';
26
+ import { EntraAuthGuard } from './lib/entraID/guards/entra-auth.guard';
27
+ import { RolesGuard } from './lib/entraID/guards/roles.guard';
28
+ import { InternalTokenService } from './lib/entraID/internal-token/internal-token.service';
29
+ import { CurrentUser } from './lib/entraID/decorators/current-user.decorator';
30
+ import { Public } from './lib/entraID/decorators/public.decorator';
31
+ import { Roles } from './lib/entraID/decorators/roles.decorator';
32
+ import { CookieUtils, TokenUtils } from './lib/entraID/utils';
33
+ import { SecurityService } from './lib/entraID/security/security.service';
34
+ import { EntraIDException } from './lib/entraID/customError/entraID.exception';
35
+ import type { EntraUser, AuthResult, CallbackParams, TokenEnrichmentContext, CookieDomainOptions } from './lib/entraID/types/entraID.type';
36
+ import type { EntraIDSetup, EntraIDAsyncOptions } from './lib/entraID/types/entraID-module-init.types';
23
37
  import { SNSSetup } from './external/aws/sns/sns.provider';
24
- export { QueueModule, Queue, IConsumer, StorageModule, Storage, IStorage, EventModule, Events, IEvent, SNSSetup, EmailModule, Email, IEmail, CryptoModule, Crypto, ICrypto, CacheModule, Cache, ICache, DocumentsModule, Documents, IBedrock, ITextract, SimpleRedisSetup, ClusterRedisSetup, TypeRedis, PubSubRedis, };
38
+ export { QueueModule, Queue, IConsumer, StorageModule, Storage, IStorage, EventModule, Events, IEvent, SNSSetup, EmailModule, Email, IEmail, CryptoModule, Crypto, ICrypto, CacheModule, Cache, ICache, DocumentsModule, Documents, IBedrock, ITextract, SimpleRedisSetup, ClusterRedisSetup, TypeRedis, PubSubRedis, EntraIDModule, EntraIDModuleOptions, ENTRA_ID_CONFIG, EntraIDService, EntraAuthGuard, RolesGuard, InternalTokenService, CurrentUser, Public, Roles, CookieUtils, TokenUtils, SecurityService, EntraIDException, EntraIDSetup, EntraIDAsyncOptions, EntraUser, AuthResult, CallbackParams, TokenEnrichmentContext, CookieDomainOptions, };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TypeRedis = exports.ITextract = exports.IBedrock = exports.Documents = exports.DocumentsModule = exports.ICache = exports.Cache = exports.CacheModule = exports.ICrypto = exports.Crypto = exports.CryptoModule = exports.IEmail = exports.Email = exports.EmailModule = exports.IEvent = exports.Events = exports.EventModule = exports.IStorage = exports.Storage = exports.StorageModule = exports.IConsumer = exports.Queue = exports.QueueModule = void 0;
3
+ exports.EntraIDException = exports.SecurityService = exports.TokenUtils = exports.CookieUtils = exports.Roles = exports.Public = exports.CurrentUser = exports.InternalTokenService = exports.RolesGuard = exports.EntraAuthGuard = exports.EntraIDService = exports.ENTRA_ID_CONFIG = exports.EntraIDModule = exports.TypeRedis = exports.ITextract = exports.IBedrock = exports.Documents = exports.DocumentsModule = exports.ICache = exports.Cache = exports.CacheModule = exports.ICrypto = exports.Crypto = exports.CryptoModule = exports.IEmail = exports.Email = exports.EmailModule = exports.IEvent = exports.Events = exports.EventModule = exports.IStorage = exports.Storage = exports.StorageModule = exports.IConsumer = exports.Queue = exports.QueueModule = void 0;
4
4
  const queue_module_1 = require("./lib/queue/queue.module");
5
5
  Object.defineProperty(exports, "QueueModule", { enumerable: true, get: function () { return queue_module_1.QueueModule; } });
6
6
  const queue_1 = require("./lib/queue/queue");
@@ -46,4 +46,28 @@ Object.defineProperty(exports, "IBedrock", { enumerable: true, get: function ()
46
46
  Object.defineProperty(exports, "ITextract", { enumerable: true, get: function () { return documents_interface_1.ITextract; } });
47
47
  const ioredis_types_1 = require("./external/redis/types/ioredis.types");
48
48
  Object.defineProperty(exports, "TypeRedis", { enumerable: true, get: function () { return ioredis_types_1.TypeRedis; } });
49
+ const entraID_module_1 = require("./lib/entraID/entraID.module");
50
+ Object.defineProperty(exports, "EntraIDModule", { enumerable: true, get: function () { return entraID_module_1.EntraIDModule; } });
51
+ Object.defineProperty(exports, "ENTRA_ID_CONFIG", { enumerable: true, get: function () { return entraID_module_1.ENTRA_ID_CONFIG; } });
52
+ const entraID_service_1 = require("./lib/entraID/entraID.service");
53
+ Object.defineProperty(exports, "EntraIDService", { enumerable: true, get: function () { return entraID_service_1.EntraIDService; } });
54
+ const entra_auth_guard_1 = require("./lib/entraID/guards/entra-auth.guard");
55
+ Object.defineProperty(exports, "EntraAuthGuard", { enumerable: true, get: function () { return entra_auth_guard_1.EntraAuthGuard; } });
56
+ const roles_guard_1 = require("./lib/entraID/guards/roles.guard");
57
+ Object.defineProperty(exports, "RolesGuard", { enumerable: true, get: function () { return roles_guard_1.RolesGuard; } });
58
+ const internal_token_service_1 = require("./lib/entraID/internal-token/internal-token.service");
59
+ Object.defineProperty(exports, "InternalTokenService", { enumerable: true, get: function () { return internal_token_service_1.InternalTokenService; } });
60
+ const current_user_decorator_1 = require("./lib/entraID/decorators/current-user.decorator");
61
+ Object.defineProperty(exports, "CurrentUser", { enumerable: true, get: function () { return current_user_decorator_1.CurrentUser; } });
62
+ const public_decorator_1 = require("./lib/entraID/decorators/public.decorator");
63
+ Object.defineProperty(exports, "Public", { enumerable: true, get: function () { return public_decorator_1.Public; } });
64
+ const roles_decorator_1 = require("./lib/entraID/decorators/roles.decorator");
65
+ Object.defineProperty(exports, "Roles", { enumerable: true, get: function () { return roles_decorator_1.Roles; } });
66
+ const utils_1 = require("./lib/entraID/utils");
67
+ Object.defineProperty(exports, "CookieUtils", { enumerable: true, get: function () { return utils_1.CookieUtils; } });
68
+ Object.defineProperty(exports, "TokenUtils", { enumerable: true, get: function () { return utils_1.TokenUtils; } });
69
+ const security_service_1 = require("./lib/entraID/security/security.service");
70
+ Object.defineProperty(exports, "SecurityService", { enumerable: true, get: function () { return security_service_1.SecurityService; } });
71
+ const entraID_exception_1 = require("./lib/entraID/customError/entraID.exception");
72
+ Object.defineProperty(exports, "EntraIDException", { enumerable: true, get: function () { return entraID_exception_1.EntraIDException; } });
49
73
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2DAAuD;AAuCrD,4FAvCO,0BAAW,OAuCP;AAtCb,6CAA0C;AAuCxC,sFAvCO,aAAK,OAuCP;AAtCP,kFAAsE;AAuCpE,0FAvCO,8BAAS,OAuCP;AArCX,iEAA6D;AAsC3D,8FAtCO,8BAAa,OAsCP;AArCf,mDAAgD;AAsC9C,wFAtCO,iBAAO,OAsCP;AArCT,kFAAsE;AAsCpE,yFAtCO,4BAAQ,OAsCP;AApCV,4DAAwD;AAqCtD,4FArCO,0BAAW,OAqCP;AApCb,gDAA6C;AAqC3C,uFArCO,eAAM,OAqCP;AApCR,6EAAiE;AAqC/D,uFArCO,wBAAM,OAqCP;AAnCR,2DAAuD;AAqCrD,4FArCO,0BAAW,OAqCP;AApCb,6CAA0C;AAqCxC,sFArCO,aAAK,OAqCP;AApCP,4EAAgE;AAqC9D,uFArCO,wBAAM,OAqCP;AAnCR,8DAA0D;AAoCxD,6FApCO,4BAAY,OAoCP;AAnCd,gDAA6C;AAoC3C,uFApCO,eAAM,OAoCP;AAnCR,+EAAmE;AAoCjE,wFApCO,0BAAO,OAoCP;AAlCT,2DAAuD;AAmCrD,4FAnCO,0BAAW,OAmCP;AAlCb,6CAA0C;AAmCxC,sFAnCO,aAAK,OAmCP;AAlCP,4EAAgE;AAmC9D,uFAnCO,wBAAM,OAmCP;AAlCR,uEAAmE;AAmCjE,gGAnCO,kCAAe,OAmCP;AAlCjB,yDAAsD;AAmCpD,0FAnCO,qBAAS,OAmCP;AAlCX,wFAGwD;AAgCtD,yFAlCA,8BAAQ,OAkCA;AACR,0FAlCA,+BAAS,OAkCA;AAhCX,wEAK8C;AA8B5C,0FAhCA,yBAAS,OAgCA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2DAAuD;AA8DrD,4FA9DO,0BAAW,OA8DP;AA7Db,6CAA0C;AA8DxC,sFA9DO,aAAK,OA8DP;AA7DP,kFAAsE;AA8DpE,0FA9DO,8BAAS,OA8DP;AA5DX,iEAA6D;AA6D3D,8FA7DO,8BAAa,OA6DP;AA5Df,mDAAgD;AA6D9C,wFA7DO,iBAAO,OA6DP;AA5DT,kFAAsE;AA6DpE,yFA7DO,4BAAQ,OA6DP;AA3DV,4DAAwD;AA4DtD,4FA5DO,0BAAW,OA4DP;AA3Db,gDAA6C;AA4D3C,uFA5DO,eAAM,OA4DP;AA3DR,6EAAiE;AA4D/D,uFA5DO,wBAAM,OA4DP;AA1DR,2DAAuD;AA4DrD,4FA5DO,0BAAW,OA4DP;AA3Db,6CAA0C;AA4DxC,sFA5DO,aAAK,OA4DP;AA3DP,4EAAgE;AA4D9D,uFA5DO,wBAAM,OA4DP;AA1DR,8DAA0D;AA2DxD,6FA3DO,4BAAY,OA2DP;AA1Dd,gDAA6C;AA2D3C,uFA3DO,eAAM,OA2DP;AA1DR,+EAAmE;AA2DjE,wFA3DO,0BAAO,OA2DP;AAzDT,2DAAuD;AA0DrD,4FA1DO,0BAAW,OA0DP;AAzDb,6CAA0C;AA0DxC,sFA1DO,aAAK,OA0DP;AAzDP,4EAAgE;AA0D9D,uFA1DO,wBAAM,OA0DP;AAzDR,uEAAmE;AA0DjE,gGA1DO,kCAAe,OA0DP;AAzDjB,yDAAsD;AA0DpD,0FA1DO,qBAAS,OA0DP;AAzDX,wFAGwD;AAuDtD,yFAzDA,8BAAQ,OAyDA;AACR,0FAzDA,+BAAS,OAyDA;AAvDX,wEAK8C;AAqD5C,0FAvDA,yBAAS,OAuDA;AApDX,iEAA8E;AAsD5E,8FAtDO,8BAAa,OAsDP;AAEb,gGAxDsB,gCAAe,OAwDtB;AAtDjB,mEAA+D;AAuD7D,+FAvDO,gCAAc,OAuDP;AAtDhB,4EAAuE;AAuDrE,+FAvDO,iCAAc,OAuDP;AAtDhB,kEAA8D;AAuD5D,2FAvDO,wBAAU,OAuDP;AAtDZ,gGAA2F;AAuDzF,qGAvDO,6CAAoB,OAuDP;AAtDtB,4FAA8E;AAuD5E,4FAvDO,oCAAW,OAuDP;AAtDb,gFAAmE;AAuDjE,uFAvDO,yBAAM,OAuDP;AAtDR,8EAAiE;AAuD/D,sFAvDO,uBAAK,OAuDP;AAtDP,+CAA8D;AAuD5D,4FAvDO,mBAAW,OAuDP;AACX,2FAxDoB,kBAAU,OAwDpB;AAvDZ,8EAA0E;AAwDxE,gGAxDO,kCAAe,OAwDP;AAvDjB,mFAA+E;AAwD7E,iGAxDO,oCAAgB,OAwDP"}
@@ -0,0 +1,5 @@
1
+ export declare class EntraIDException extends Error {
2
+ readonly code: string;
3
+ readonly message: string;
4
+ constructor(code: string);
5
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EntraIDException = void 0;
4
+ const entraIDErrorMessages = {
5
+ INVALID_CONFIG: 'Configuração inválida do módulo EntraID',
6
+ TENANT_NOT_FOUND: 'Tenant não encontrado na configuração do EntraID',
7
+ INVALID_SECRET: 'Em Produção é necessário um secret válido',
8
+ STATE_MISMATCH: 'State OAuth inválido ou expirado',
9
+ TOKEN_INVALID_HEADER: 'Header da chave publica inválido',
10
+ PAYLOAD_ID_TOKEN_INVALID: 'Payload decodificado é inválido',
11
+ INVALID_NONCE: 'Nonce retornado é diferente do esperado',
12
+ CODE_EXCHANGE_FAILED: 'Falha ao trocar o código de autorização pelo token',
13
+ TOKEN_EXPIRED: 'Token de acesso expirado',
14
+ TOKEN_INVALID: 'Token de acesso inválido',
15
+ RESERVED_CLAIM_OVERRIDE: 'enrichTokenPayload tentou sobrescrever um claim reservado (sub/iss/aud/exp/iat/nbf/jti/groups)',
16
+ TOKEN_AUDIENCE_INVALID: 'Audience do token não corresponde ao esperado',
17
+ JWKS_FETCH_FAILED: 'Falha ao buscar chaves públicas do Azure',
18
+ JWKS_KEY_NOT_FOUND: 'Chave pública não encontrada no JWKS',
19
+ GRAPH_FETCH_FAILED: 'Falha ao buscar dados do usuário no Microsoft Graph',
20
+ GRAPH_USER_NOT_FOUND: 'Usuário não encontrado no Microsoft Entra ID',
21
+ SECURITY_PATH_TRAVERSAL: 'Tentativa de path traversal detectada',
22
+ SECURITY_NULL_BYTE: 'Caractere nulo detectado na entrada',
23
+ SECURITY_INVALID_CHARS: 'Caracteres inválidos ou perigosos na entrada',
24
+ SECURITY_OPEN_REDIRECT: 'Redirecionamento para URL não autorizada',
25
+ SECURITY_INVALID_URL: 'URL inválida',
26
+ OAUTH_PROVIDER_ERROR: 'Erro retornado pelo provedor OAuth',
27
+ OAUTH_MISSING_PARAMS: 'Parâmetros obrigatórios ausentes no callback OAuth',
28
+ REFRESH_TOKEN_FAILED: 'Falha ao renovar o token de acesso',
29
+ REVOKE_SESSIONS_FAILED: 'Falha ao revogar sessões do usuário no Microsoft Entra ID',
30
+ UNKNOWN_ERROR: 'Erro desconhecido',
31
+ };
32
+ class EntraIDException extends Error {
33
+ constructor(code) {
34
+ const message = entraIDErrorMessages[code] ?? entraIDErrorMessages['UNKNOWN_ERROR'];
35
+ super(message);
36
+ this.code = code;
37
+ this.message = message;
38
+ this.name = 'EntraIDException';
39
+ Object.setPrototypeOf(this, EntraIDException.prototype);
40
+ }
41
+ }
42
+ exports.EntraIDException = EntraIDException;
43
+ //# sourceMappingURL=entraID.exception.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entraID.exception.js","sourceRoot":"","sources":["../../../../src/lib/entraID/customError/entraID.exception.ts"],"names":[],"mappings":";;;AAAA,MAAM,oBAAoB,GAA2B;IACnD,cAAc,EAAE,yCAAyC;IACzD,gBAAgB,EAAE,kDAAkD;IACpE,cAAc,EAAE,2CAA2C;IAC3D,cAAc,EAAE,kCAAkC;IAClD,oBAAoB,EAAE,kCAAkC;IACxD,wBAAwB,EAAE,iCAAiC;IAC3D,aAAa,EAAE,yCAAyC;IACxD,oBAAoB,EAAE,oDAAoD;IAC1E,aAAa,EAAE,0BAA0B;IACzC,aAAa,EAAE,0BAA0B;IACzC,uBAAuB,EACrB,gGAAgG;IAClG,sBAAsB,EAAE,+CAA+C;IACvE,iBAAiB,EAAE,0CAA0C;IAC7D,kBAAkB,EAAE,sCAAsC;IAC1D,kBAAkB,EAAE,qDAAqD;IACzE,oBAAoB,EAAE,8CAA8C;IACpE,uBAAuB,EAAE,uCAAuC;IAChE,kBAAkB,EAAE,qCAAqC;IACzD,sBAAsB,EAAE,8CAA8C;IACtE,sBAAsB,EAAE,0CAA0C;IAClE,oBAAoB,EAAE,cAAc;IACpC,oBAAoB,EAAE,oCAAoC;IAC1D,oBAAoB,EAAE,oDAAoD;IAC1E,oBAAoB,EAAE,oCAAoC;IAC1D,sBAAsB,EACpB,2DAA2D;IAC7D,aAAa,EAAE,mBAAmB;CACnC,CAAC;AAEF,MAAa,gBAAiB,SAAQ,KAAK;IAGzC,YAA4B,IAAY;QACtC,MAAM,OAAO,GACX,oBAAoB,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,eAAe,CAAC,CAAC;QACtE,KAAK,CAAC,OAAO,CAAC,CAAC;QAHW,SAAI,GAAJ,IAAI,CAAQ;QAItC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;CACF;AAXD,4CAWC"}
@@ -0,0 +1 @@
1
+ export declare const CurrentUser: <T = Record<string, unknown>>(...dataOrPipes: unknown[]) => ParameterDecorator;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CurrentUser = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ exports.CurrentUser = (0, common_1.createParamDecorator)((_data, ctx) => {
6
+ const request = ctx.switchToHttp().getRequest();
7
+ return request.user;
8
+ });
9
+ //# sourceMappingURL=current-user.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"current-user.decorator.js","sourceRoot":"","sources":["../../../../src/lib/entraID/decorators/current-user.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAAwE;AAE3D,QAAA,WAAW,GAAG,IAAA,6BAAoB,EAC7C,CAA8B,KAAc,EAAE,GAAqB,EAAK,EAAE;IACxE,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;IAChD,OAAO,OAAO,CAAC,IAAS,CAAC;AAC3B,CAAC,CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const IS_PUBLIC_KEY = "isPublic";
2
+ export declare const Public: () => import("@nestjs/common").CustomDecorator<string>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Public = exports.IS_PUBLIC_KEY = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ exports.IS_PUBLIC_KEY = 'isPublic';
6
+ const Public = () => (0, common_1.SetMetadata)(exports.IS_PUBLIC_KEY, true);
7
+ exports.Public = Public;
8
+ //# sourceMappingURL=public.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public.decorator.js","sourceRoot":"","sources":["../../../../src/lib/entraID/decorators/public.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAEhC,QAAA,aAAa,GAAG,UAAU,CAAC;AAEjC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,IAAA,oBAAW,EAAC,qBAAa,EAAE,IAAI,CAAC,CAAC;AAAhD,QAAA,MAAM,UAA0C"}
@@ -0,0 +1,2 @@
1
+ export declare const ROLES_KEY = "roles";
2
+ export declare const Roles: (...roles: string[]) => import("@nestjs/common").CustomDecorator<string>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Roles = exports.ROLES_KEY = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ exports.ROLES_KEY = 'roles';
6
+ const Roles = (...roles) => (0, common_1.SetMetadata)(exports.ROLES_KEY, roles);
7
+ exports.Roles = Roles;
8
+ //# sourceMappingURL=roles.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roles.decorator.js","sourceRoot":"","sources":["../../../../src/lib/entraID/decorators/roles.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAEhC,QAAA,SAAS,GAAG,OAAO,CAAC;AAE1B,MAAM,KAAK,GAAG,CAAC,GAAG,KAAe,EAAE,EAAE,CAAC,IAAA,oBAAW,EAAC,iBAAS,EAAE,KAAK,CAAC,CAAC;AAA9D,QAAA,KAAK,SAAyD"}
@@ -0,0 +1,2 @@
1
+ export declare const ENTRA_ID_CONFIG = "ENTRA_ID_CONFIG";
2
+ export declare const MICROSOFT_AUTHORITY_URL = "https://login.microsoftonline.com";
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MICROSOFT_AUTHORITY_URL = exports.ENTRA_ID_CONFIG = void 0;
4
+ exports.ENTRA_ID_CONFIG = 'ENTRA_ID_CONFIG';
5
+ exports.MICROSOFT_AUTHORITY_URL = 'https://login.microsoftonline.com';
6
+ //# sourceMappingURL=entraID.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entraID.constants.js","sourceRoot":"","sources":["../../../src/lib/entraID/entraID.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG,iBAAiB,CAAC;AACpC,QAAA,uBAAuB,GAAG,mCAAmC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { DynamicModule, ModuleMetadata, Type } from '@nestjs/common';
2
+ import { InternalTokenService } from './internal-token/internal-token.service';
3
+ import { ENTRA_ID_CONFIG } from './entraID.constants';
4
+ import { EntraIDAsyncOptions, EntraIDSetup } from './types/entraID-module-init.types';
5
+ export { ENTRA_ID_CONFIG };
6
+ export type EntraIDModuleOptions = {
7
+ internalTokenService?: Type<InternalTokenService>;
8
+ imports?: ModuleMetadata['imports'];
9
+ };
10
+ export declare class EntraIDModule {
11
+ private static buildModule;
12
+ static forRoot(params: EntraIDSetup, options?: EntraIDModuleOptions): DynamicModule;
13
+ static forRootAsync(paramsAsync: EntraIDAsyncOptions, options?: EntraIDModuleOptions): DynamicModule;
14
+ }
@@ -0,0 +1,56 @@
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 EntraIDModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.EntraIDModule = exports.ENTRA_ID_CONFIG = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const entraID_service_1 = require("./entraID.service");
13
+ const entra_auth_guard_1 = require("./guards/entra-auth.guard");
14
+ const internal_token_service_1 = require("./internal-token/internal-token.service");
15
+ const microsoft_module_1 = require("./microsoft/microsoft.module");
16
+ const security_module_1 = require("./security/security.module");
17
+ const entraID_constants_1 = require("./entraID.constants");
18
+ Object.defineProperty(exports, "ENTRA_ID_CONFIG", { enumerable: true, get: function () { return entraID_constants_1.ENTRA_ID_CONFIG; } });
19
+ let EntraIDModule = EntraIDModule_1 = class EntraIDModule {
20
+ static buildModule(configProvider, imports = [], options = {}) {
21
+ const tokenServiceClass = options.internalTokenService ?? internal_token_service_1.InternalTokenService;
22
+ return {
23
+ global: true,
24
+ module: EntraIDModule_1,
25
+ imports: [...imports, ...(options.imports ?? []), microsoft_module_1.MicrosoftModule, security_module_1.SecurityModule],
26
+ providers: [
27
+ configProvider,
28
+ tokenServiceClass,
29
+ { provide: internal_token_service_1.InternalTokenService, useExisting: tokenServiceClass },
30
+ entraID_service_1.EntraIDService,
31
+ entra_auth_guard_1.EntraAuthGuard,
32
+ ],
33
+ exports: [
34
+ entraID_constants_1.ENTRA_ID_CONFIG,
35
+ internal_token_service_1.InternalTokenService,
36
+ entraID_service_1.EntraIDService,
37
+ entra_auth_guard_1.EntraAuthGuard,
38
+ ],
39
+ };
40
+ }
41
+ static forRoot(params, options) {
42
+ return this.buildModule({ provide: entraID_constants_1.ENTRA_ID_CONFIG, useValue: params }, [], options);
43
+ }
44
+ static forRootAsync(paramsAsync, options) {
45
+ return this.buildModule({
46
+ provide: entraID_constants_1.ENTRA_ID_CONFIG,
47
+ useFactory: paramsAsync.useFactory,
48
+ inject: paramsAsync.inject ?? [],
49
+ }, paramsAsync.imports ?? [], options);
50
+ }
51
+ };
52
+ exports.EntraIDModule = EntraIDModule;
53
+ exports.EntraIDModule = EntraIDModule = EntraIDModule_1 = __decorate([
54
+ (0, common_1.Module)({})
55
+ ], EntraIDModule);
56
+ //# sourceMappingURL=entraID.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entraID.module.js","sourceRoot":"","sources":["../../../src/lib/entraID/entraID.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAMwB;AACxB,uDAAmD;AACnD,gEAA2D;AAC3D,oFAA+E;AAC/E,mEAA+D;AAC/D,gEAA4D;AAC5D,2DAAsD;AAM7C,gGANA,mCAAe,OAMA;AAQjB,IAAM,aAAa,qBAAnB,MAAM,aAAa;IAChB,MAAM,CAAC,WAAW,CACxB,cAAwB,EACxB,UAAqC,EAAE,EACvC,UAAgC,EAAE;QAElC,MAAM,iBAAiB,GACrB,OAAO,CAAC,oBAAoB,IAAI,6CAAoB,CAAC;QAEvD,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,eAAa;YACrB,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,kCAAe,EAAE,gCAAc,CAAC;YAClF,SAAS,EAAE;gBACT,cAAc;gBACd,iBAAiB;gBACjB,EAAE,OAAO,EAAE,6CAAoB,EAAE,WAAW,EAAE,iBAAiB,EAAE;gBACjE,gCAAc;gBACd,iCAAc;aACf;YACD,OAAO,EAAE;gBACP,mCAAe;gBACf,6CAAoB;gBACpB,gCAAc;gBACd,iCAAc;aACf;SACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,MAAoB,EAAE,OAA8B;QACjE,OAAO,IAAI,CAAC,WAAW,CACrB,EAAE,OAAO,EAAE,mCAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,EAC9C,EAAE,EACF,OAAO,CACR,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,CACjB,WAAgC,EAChC,OAA8B;QAE9B,OAAO,IAAI,CAAC,WAAW,CACrB;YACE,OAAO,EAAE,mCAAe;YACxB,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,MAAM,EAAE,WAAW,CAAC,MAAM,IAAI,EAAE;SACjC,EACD,WAAW,CAAC,OAAO,IAAI,EAAE,EACzB,OAAO,CACR,CAAC;IACJ,CAAC;CACF,CAAA;AAnDY,sCAAa;wBAAb,aAAa;IADzB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,aAAa,CAmDzB"}
@@ -0,0 +1,25 @@
1
+ import { OnModuleInit } from '@nestjs/common';
2
+ import { InternalTokenService } from './internal-token/internal-token.service';
3
+ import { MicrosoftService } from './microsoft/microsoft.service';
4
+ import { SecurityService } from './security/security.service';
5
+ import { AuthResult, CallbackParams, CreateStateNonce, EntraUser, IdTokenPayload, UrlRedirectSso } from './types/entraID.type';
6
+ import { EntraIDSetup } from './types/entraID-module-init.types';
7
+ import { IEntraIDService } from './interfaces/entraID-service.interface';
8
+ export declare class EntraIDService implements OnModuleInit, IEntraIDService {
9
+ protected readonly config: EntraIDSetup;
10
+ protected readonly microsoftService: MicrosoftService;
11
+ protected readonly securityService: SecurityService;
12
+ protected readonly internalTokenService: InternalTokenService;
13
+ private jwksClientRsa;
14
+ constructor(config: EntraIDSetup, microsoftService: MicrosoftService, securityService: SecurityService, internalTokenService: InternalTokenService);
15
+ onModuleInit(): void;
16
+ handleCallback(params: CallbackParams): Promise<AuthResult>;
17
+ refresh(refreshToken: string): Promise<AuthResult>;
18
+ logout(userId: string): Promise<void>;
19
+ initiateLogin(): Promise<UrlRedirectSso>;
20
+ decodeLocalToken(token: string): EntraUser;
21
+ protected verifyIdToken(idToken: string, nonce: string): Promise<IdTokenPayload>;
22
+ protected buildUserJwt(accessToken: string, email: string, name: string): Promise<AuthResult>;
23
+ protected createSignedState(): CreateStateNonce;
24
+ protected verifyStateAndReturnNonce(state: string): string;
25
+ }