prime-sdk 3.0.7 → 3.0.8-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 +52 -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 +7 -0
  62. package/dist/lib/entraID/utils/cookie.utils.js +42 -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 +42 -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 +57 -0
  94. package/src/lib/entraID/utils/cookie.utils.ts +50 -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
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.EntraIDService = void 0;
19
+ const common_1 = require("@nestjs/common");
20
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
21
+ const jwks_rsa_1 = __importDefault(require("jwks-rsa"));
22
+ const entraID_constants_1 = require("./entraID.constants");
23
+ const internal_token_service_1 = require("./internal-token/internal-token.service");
24
+ const microsoft_service_1 = require("./microsoft/microsoft.service");
25
+ const security_service_1 = require("./security/security.service");
26
+ const entraID_exception_1 = require("./customError/entraID.exception");
27
+ const crypto_utils_1 = require("./utils/crypto.utils");
28
+ const STATE_TTL_MS = 600_000;
29
+ let EntraIDService = class EntraIDService {
30
+ constructor(config, microsoftService, securityService, internalTokenService) {
31
+ this.config = config;
32
+ this.microsoftService = microsoftService;
33
+ this.securityService = securityService;
34
+ this.internalTokenService = internalTokenService;
35
+ }
36
+ onModuleInit() {
37
+ const { tenantID, clientID, clientSecret, stateSecret, redirectUri } = this.config;
38
+ if (!tenantID ||
39
+ !clientID ||
40
+ !clientSecret ||
41
+ !stateSecret ||
42
+ !redirectUri) {
43
+ throw new entraID_exception_1.EntraIDException('INVALID_CONFIG');
44
+ }
45
+ const authorityUrl = this.config.authorityUrl ?? entraID_constants_1.MICROSOFT_AUTHORITY_URL;
46
+ this.jwksClientRsa = (0, jwks_rsa_1.default)({
47
+ jwksUri: `${authorityUrl}/${tenantID}/discovery/v2.0/keys`,
48
+ cache: true,
49
+ cacheMaxAge: 10 * 60 * 1000,
50
+ });
51
+ }
52
+ async handleCallback(params) {
53
+ this.securityService.validateCallbackParams(params);
54
+ const nonce = this.verifyStateAndReturnNonce(params.state);
55
+ const tokens = await this.microsoftService.exchangeCode(params.code);
56
+ const payload = await this.verifyIdToken(tokens.id_token, nonce);
57
+ const email = payload.preferred_username ?? payload.email ?? payload.upn;
58
+ if (!email) {
59
+ throw new entraID_exception_1.EntraIDException('PAYLOAD_ID_TOKEN_INVALID');
60
+ }
61
+ const result = await this.buildUserJwt(tokens.access_token, email, payload.name);
62
+ return { ...result, refreshToken: tokens.refresh_token };
63
+ }
64
+ async refresh(refreshToken) {
65
+ const tokens = await this.microsoftService.refreshToken(refreshToken);
66
+ const result = await this.buildUserJwt(tokens.access_token, '', '');
67
+ return { ...result, refreshToken: tokens.refresh_token };
68
+ }
69
+ async logout(userId) {
70
+ await this.microsoftService.revokeUserSessions(userId);
71
+ }
72
+ async initiateLogin() {
73
+ const { state, nonce } = this.createSignedState();
74
+ const { clientID, redirectUri, tenantID, scope, prompt } = this.config;
75
+ const authorityUrl = this.config.authorityUrl ?? entraID_constants_1.MICROSOFT_AUTHORITY_URL;
76
+ const params = new URLSearchParams({
77
+ client_id: clientID,
78
+ response_type: 'code',
79
+ redirect_uri: redirectUri,
80
+ response_mode: 'form_post',
81
+ scope: scope ?? 'openid profile email User.Read GroupMember.Read.All',
82
+ state,
83
+ nonce,
84
+ prompt: prompt ?? 'select_account',
85
+ });
86
+ return `${authorityUrl}/${tenantID}/oauth2/v2.0/authorize?${params.toString()}`;
87
+ }
88
+ decodeLocalToken(token) {
89
+ return this.internalTokenService.verify(token);
90
+ }
91
+ async verifyIdToken(idToken, nonce) {
92
+ const decoded = jsonwebtoken_1.default.decode(idToken, { complete: true });
93
+ if (!decoded?.header) {
94
+ throw new entraID_exception_1.EntraIDException('TOKEN_INVALID_HEADER');
95
+ }
96
+ const publicKey = await crypto_utils_1.CryptoUtils.getPublicKeyRsa(decoded.header.kid, this.jwksClientRsa);
97
+ const expectedIssuers = [
98
+ `https://login.microsoftonline.com/${this.config.tenantID}/v2.0`,
99
+ `https://sts.windows.net/${this.config.tenantID}/`,
100
+ ];
101
+ const payload = jsonwebtoken_1.default.verify(idToken, publicKey, {
102
+ algorithms: ['RS256'],
103
+ audience: this.config.clientID,
104
+ issuer: expectedIssuers,
105
+ });
106
+ if (payload.nonce !== nonce) {
107
+ throw new entraID_exception_1.EntraIDException('INVALID_NONCE');
108
+ }
109
+ return payload;
110
+ }
111
+ async buildUserJwt(accessToken, email, name) {
112
+ const msUser = await this.microsoftService.getMe(accessToken);
113
+ let groups = [];
114
+ try {
115
+ const raw = await this.microsoftService.getMemberOf(accessToken);
116
+ groups = raw.filter((g) => !!g.displayName);
117
+ }
118
+ catch { }
119
+ const user = {
120
+ entraId: msUser.id,
121
+ email: msUser.mail ?? msUser.userPrincipalName ?? email,
122
+ name: msUser.displayName ?? name,
123
+ tenantId: this.config.tenantID,
124
+ matricula: msUser.employeeId,
125
+ groups,
126
+ };
127
+ const token = await this.internalTokenService.sign({ user, accessToken });
128
+ return { token, user };
129
+ }
130
+ createSignedState() {
131
+ const { stateSecret } = this.config;
132
+ const nonce = crypto_utils_1.CryptoUtils.generateHash();
133
+ const payload = Buffer.from(JSON.stringify({ nonce, ts: Date.now() })).toString('base64url');
134
+ const state = crypto_utils_1.CryptoUtils.createSignedPayloadWithHMAC(payload, stateSecret);
135
+ return { nonce, state };
136
+ }
137
+ verifyStateAndReturnNonce(state) {
138
+ const { stateSecret } = this.config;
139
+ const parts = state.split('.');
140
+ crypto_utils_1.CryptoUtils.verifyPayloadWithHMAC(parts, stateSecret);
141
+ const payload = parts[0];
142
+ let nonce;
143
+ let ts;
144
+ try {
145
+ const parsed = JSON.parse(Buffer.from(payload, 'base64url').toString());
146
+ nonce = parsed.nonce;
147
+ ts = parsed.ts;
148
+ }
149
+ catch {
150
+ throw new entraID_exception_1.EntraIDException('STATE_MISMATCH');
151
+ }
152
+ if (Date.now() - ts > STATE_TTL_MS) {
153
+ throw new entraID_exception_1.EntraIDException('STATE_MISMATCH');
154
+ }
155
+ return nonce;
156
+ }
157
+ };
158
+ exports.EntraIDService = EntraIDService;
159
+ exports.EntraIDService = EntraIDService = __decorate([
160
+ (0, common_1.Injectable)(),
161
+ __param(0, (0, common_1.Inject)(entraID_constants_1.ENTRA_ID_CONFIG)),
162
+ __metadata("design:paramtypes", [Object, microsoft_service_1.MicrosoftService,
163
+ security_service_1.SecurityService,
164
+ internal_token_service_1.InternalTokenService])
165
+ ], EntraIDService);
166
+ //# sourceMappingURL=entraID.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entraID.service.js","sourceRoot":"","sources":["../../../src/lib/entraID/entraID.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { CanActivate, ExecutionContext } from '@nestjs/common';
2
+ import type { Request } from 'express';
3
+ import { InternalTokenService } from '../internal-token/internal-token.service';
4
+ import { EntraUser } from '../types/entraID.type';
5
+ import { Reflector } from '@nestjs/core';
6
+ export declare class EntraAuthGuard implements CanActivate {
7
+ private readonly internalTokenService;
8
+ private readonly reflector;
9
+ constructor(internalTokenService: InternalTokenService, reflector: Reflector);
10
+ canActivate(context: ExecutionContext): Promise<boolean>;
11
+ protected isTokenRevoked(_payload: EntraUser, _request: Request): Promise<boolean>;
12
+ protected transformPayload(payload: EntraUser): Promise<unknown>;
13
+ protected extractToken(request: {
14
+ headers: {
15
+ authorization?: string;
16
+ };
17
+ cookies?: {
18
+ auth_token?: string;
19
+ };
20
+ }): string | undefined;
21
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.EntraAuthGuard = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const internal_token_service_1 = require("../internal-token/internal-token.service");
15
+ const entraID_exception_1 = require("../customError/entraID.exception");
16
+ const core_1 = require("@nestjs/core");
17
+ const public_decorator_1 = require("../decorators/public.decorator");
18
+ let EntraAuthGuard = class EntraAuthGuard {
19
+ constructor(internalTokenService, reflector) {
20
+ this.internalTokenService = internalTokenService;
21
+ this.reflector = reflector;
22
+ }
23
+ async canActivate(context) {
24
+ const isPublic = this.reflector.getAllAndOverride(public_decorator_1.IS_PUBLIC_KEY, [
25
+ context.getHandler(),
26
+ context.getClass(),
27
+ ]);
28
+ if (isPublic)
29
+ return true;
30
+ const request = context.switchToHttp().getRequest();
31
+ const token = this.extractToken(request);
32
+ if (!token)
33
+ throw new common_1.UnauthorizedException();
34
+ let payload;
35
+ try {
36
+ payload = this.internalTokenService.verify(token);
37
+ }
38
+ catch (error) {
39
+ if (error instanceof entraID_exception_1.EntraIDException) {
40
+ throw new common_1.UnauthorizedException(error.message);
41
+ }
42
+ throw error;
43
+ }
44
+ const revoke = await this.isTokenRevoked(payload, request);
45
+ if (revoke) {
46
+ throw new common_1.UnauthorizedException('TOKEN_REVOKED');
47
+ }
48
+ request.user = await this.transformPayload(payload);
49
+ return true;
50
+ }
51
+ async isTokenRevoked(_payload, _request) {
52
+ return false;
53
+ }
54
+ async transformPayload(payload) {
55
+ return payload;
56
+ }
57
+ extractToken(request) {
58
+ const auth = request.headers.authorization;
59
+ if (auth?.startsWith('Bearer '))
60
+ return auth.slice(7);
61
+ return request.cookies?.auth_token;
62
+ }
63
+ };
64
+ exports.EntraAuthGuard = EntraAuthGuard;
65
+ exports.EntraAuthGuard = EntraAuthGuard = __decorate([
66
+ (0, common_1.Injectable)(),
67
+ __metadata("design:paramtypes", [internal_token_service_1.InternalTokenService,
68
+ core_1.Reflector])
69
+ ], EntraAuthGuard);
70
+ //# sourceMappingURL=entra-auth.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entra-auth.guard.js","sourceRoot":"","sources":["../../../../src/lib/entraID/guards/entra-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AAExB,qFAAgF;AAChF,wEAAoE;AAEpE,uCAAyC;AACzC,qEAA+D;AAGxD,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YACmB,oBAA0C,EAC1C,SAAoB;QADpB,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,cAAS,GAAT,SAAS,CAAW;IACpC,CAAC;IAEJ,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAU,gCAAa,EAAE;YACxE,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,CAAC;QAEH,IAAI,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE1B,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,8BAAqB,EAAE,CAAC;QAE9C,IAAI,OAAkB,CAAC;QACvB,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,oCAAgB,EAAE,CAAC;gBACtC,MAAM,IAAI,8BAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjD,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE3D,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,8BAAqB,CAAC,eAAe,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEpD,OAAO,IAAI,CAAC;IACd,CAAC;IAES,KAAK,CAAC,cAAc,CAE5B,QAAmB,EAGnB,QAAiB;QAEjB,OAAO,KAAK,CAAC;IACf,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,OAAkB;QACjD,OAAO,OAAO,CAAC;IACjB,CAAC;IAES,YAAY,CAAC,OAGtB;QACC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;IACrC,CAAC;CACF,CAAA;AA9DY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;qCAG8B,6CAAoB;QAC/B,gBAAS;GAH5B,cAAc,CA8D1B"}
@@ -0,0 +1,7 @@
1
+ import { CanActivate, ExecutionContext } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ export declare class RolesGuard implements CanActivate {
4
+ private readonly reflector;
5
+ constructor(reflector: Reflector);
6
+ canActivate(context: ExecutionContext): boolean;
7
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RolesGuard = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const core_1 = require("@nestjs/core");
15
+ const roles_decorator_1 = require("../decorators/roles.decorator");
16
+ let RolesGuard = class RolesGuard {
17
+ constructor(reflector) {
18
+ this.reflector = reflector;
19
+ }
20
+ canActivate(context) {
21
+ const required = this.reflector.getAllAndOverride(roles_decorator_1.ROLES_KEY, [
22
+ context.getHandler(),
23
+ context.getClass(),
24
+ ]);
25
+ if (!required?.length)
26
+ return true;
27
+ const { user } = context.switchToHttp().getRequest();
28
+ const userGroups = (user?.groups ?? []).map((g) => g.displayName);
29
+ const allowed = required.some((role) => userGroups.includes(role));
30
+ if (!allowed) {
31
+ throw new common_1.ForbiddenException('INVALID_GROUP');
32
+ }
33
+ return true;
34
+ }
35
+ };
36
+ exports.RolesGuard = RolesGuard;
37
+ exports.RolesGuard = RolesGuard = __decorate([
38
+ (0, common_1.Injectable)(),
39
+ __metadata("design:paramtypes", [core_1.Reflector])
40
+ ], RolesGuard);
41
+ //# sourceMappingURL=roles.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roles.guard.js","sourceRoot":"","sources":["../../../../src/lib/entraID/guards/roles.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAKwB;AACxB,uCAAyC;AACzC,mEAA0D;AAGnD,IAAM,UAAU,GAAhB,MAAM,UAAU;IACrB,YAA6B,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAErD,WAAW,CAAC,OAAyB;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAW,2BAAS,EAAE;YACrE,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,EAAE,MAAM;YAAE,OAAO,IAAI,CAAC;QAEnC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACrD,MAAM,UAAU,GAAa,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CACnD,CAAC,CAA0B,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAC9C,CAAC;QAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,2BAAkB,CAAC,eAAe,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAvBY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;qCAE6B,gBAAS;GADtC,UAAU,CAuBtB"}
@@ -0,0 +1,7 @@
1
+ import { AuthResult, CallbackParams, UrlRedirectSso } from '../types/entraID.type';
2
+ export interface IEntraIDService {
3
+ handleCallback(params: CallbackParams): Promise<AuthResult>;
4
+ initiateLogin(): Promise<UrlRedirectSso>;
5
+ refresh(refreshToken: string): Promise<AuthResult>;
6
+ logout(userId: string): Promise<void>;
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=entraID-service.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entraID-service.interface.js","sourceRoot":"","sources":["../../../../src/lib/entraID/interfaces/entraID-service.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare class InternalTokenModule {
2
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.InternalTokenModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const internal_token_service_1 = require("./internal-token.service");
12
+ let InternalTokenModule = class InternalTokenModule {
13
+ };
14
+ exports.InternalTokenModule = InternalTokenModule;
15
+ exports.InternalTokenModule = InternalTokenModule = __decorate([
16
+ (0, common_1.Module)({
17
+ providers: [internal_token_service_1.InternalTokenService],
18
+ exports: [internal_token_service_1.InternalTokenService],
19
+ })
20
+ ], InternalTokenModule);
21
+ //# sourceMappingURL=internal-token.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-token.module.js","sourceRoot":"","sources":["../../../../src/lib/entraID/internal-token/internal-token.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,qEAAgE;AAMzD,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;CAAG,CAAA;AAAtB,kDAAmB;8BAAnB,mBAAmB;IAJ/B,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,6CAAoB,CAAC;QACjC,OAAO,EAAE,CAAC,6CAAoB,CAAC;KAChC,CAAC;GACW,mBAAmB,CAAG"}
@@ -0,0 +1,10 @@
1
+ import { EntraIDSetup } from '../types/entraID-module-init.types';
2
+ import { EntraUser, TokenEnrichmentContext } from '../types/entraID.type';
3
+ export declare class InternalTokenService {
4
+ private readonly config;
5
+ constructor(config: EntraIDSetup);
6
+ sign(context: TokenEnrichmentContext): Promise<string>;
7
+ protected enrichTokenPayload(_context: TokenEnrichmentContext): Promise<Record<string, unknown>>;
8
+ verify(token: string): EntraUser;
9
+ private assertNoReservedClaimCollision;
10
+ }
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.InternalTokenService = void 0;
19
+ const common_1 = require("@nestjs/common");
20
+ const crypto_1 = require("crypto");
21
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
22
+ const entraID_constants_1 = require("../entraID.constants");
23
+ const entraID_exception_1 = require("../customError/entraID.exception");
24
+ let InternalTokenService = class InternalTokenService {
25
+ constructor(config) {
26
+ this.config = config;
27
+ }
28
+ async sign(context) {
29
+ const customClaims = await this.enrichTokenPayload(context);
30
+ this.assertNoReservedClaimCollision(customClaims);
31
+ return jsonwebtoken_1.default.sign({ jti: (0, crypto_1.randomUUID)(), ...context.user, ...customClaims }, this.config.jwtSecret, {
32
+ algorithm: 'HS256',
33
+ expiresIn: (this.config.jwtExpiresIn ??
34
+ '8h'),
35
+ });
36
+ }
37
+ async enrichTokenPayload(_context) {
38
+ return {};
39
+ }
40
+ verify(token) {
41
+ try {
42
+ return jsonwebtoken_1.default.verify(token, this.config.jwtSecret, {
43
+ algorithms: ['HS256'],
44
+ });
45
+ }
46
+ catch (err) {
47
+ if (err instanceof jsonwebtoken_1.default.TokenExpiredError) {
48
+ throw new entraID_exception_1.EntraIDException('TOKEN_EXPIRED');
49
+ }
50
+ throw new entraID_exception_1.EntraIDException('TOKEN_INVALID');
51
+ }
52
+ }
53
+ assertNoReservedClaimCollision(customClaims) {
54
+ const reserved = [
55
+ 'sub',
56
+ 'iss',
57
+ 'aud',
58
+ 'exp',
59
+ 'iat',
60
+ 'nbf',
61
+ 'jti',
62
+ 'groups',
63
+ ];
64
+ const collision = reserved.find((claim) => claim in customClaims);
65
+ if (collision) {
66
+ throw new entraID_exception_1.EntraIDException('RESERVED_CLAIM_OVERRIDE');
67
+ }
68
+ }
69
+ };
70
+ exports.InternalTokenService = InternalTokenService;
71
+ exports.InternalTokenService = InternalTokenService = __decorate([
72
+ (0, common_1.Injectable)(),
73
+ __param(0, (0, common_1.Inject)(entraID_constants_1.ENTRA_ID_CONFIG)),
74
+ __metadata("design:paramtypes", [Object])
75
+ ], InternalTokenService);
76
+ //# sourceMappingURL=internal-token.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-token.service.js","sourceRoot":"","sources":["../../../../src/lib/entraID/internal-token/internal-token.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,mCAAoC;AACpC,gEAA+B;AAC/B,4DAAuD;AACvD,wEAAoE;AAK7D,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YAAsD,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAE9E,KAAK,CAAC,IAAI,CAAC,OAA+B;QACxC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAE5D,IAAI,CAAC,8BAA8B,CAAC,YAAY,CAAC,CAAC;QAElD,OAAO,sBAAG,CAAC,IAAI,CACb,EAAE,GAAG,EAAE,IAAA,mBAAU,GAAE,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,YAAY,EAAE,EACvD,IAAI,CAAC,MAAM,CAAC,SAAS,EACrB;YACE,SAAS,EAAE,OAAO;YAClB,SAAS,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY;gBAClC,IAAI,CAAiC;SACxC,CACF,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,kBAAkB,CAChC,QAAgC;QAEhC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,IAAI,CAAC;YACH,OAAO,sBAAG,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;gBAC9C,UAAU,EAAE,CAAC,OAAO,CAAC;aACtB,CAAyB,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,sBAAG,CAAC,iBAAiB,EAAE,CAAC;gBACzC,MAAM,IAAI,oCAAgB,CAAC,eAAe,CAAC,CAAC;YAC9C,CAAC;YACD,MAAM,IAAI,oCAAgB,CAAC,eAAe,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAEO,8BAA8B,CACpC,YAAqC;QAErC,MAAM,QAAQ,GAAG;YACf,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,QAAQ;SACT,CAAC;QACF,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC;QAClE,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,oCAAgB,CAAC,yBAAyB,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;CACF,CAAA;AAxDY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;IAEE,WAAA,IAAA,eAAM,EAAC,mCAAe,CAAC,CAAA;;GADzB,oBAAoB,CAwDhC"}
@@ -0,0 +1,2 @@
1
+ export declare class MicrosoftModule {
2
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MicrosoftModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const microsoft_service_1 = require("./microsoft.service");
12
+ let MicrosoftModule = class MicrosoftModule {
13
+ };
14
+ exports.MicrosoftModule = MicrosoftModule;
15
+ exports.MicrosoftModule = MicrosoftModule = __decorate([
16
+ (0, common_1.Module)({
17
+ providers: [microsoft_service_1.MicrosoftService],
18
+ exports: [microsoft_service_1.MicrosoftService],
19
+ })
20
+ ], MicrosoftModule);
21
+ //# sourceMappingURL=microsoft.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"microsoft.module.js","sourceRoot":"","sources":["../../../../src/lib/entraID/microsoft/microsoft.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2DAAuD;AAMhD,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAJ3B,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,oCAAgB,CAAC;QAC7B,OAAO,EAAE,CAAC,oCAAgB,CAAC;KAC5B,CAAC;GACW,eAAe,CAAG"}
@@ -0,0 +1,14 @@
1
+ import { AzureTokenResponse, GraphUser } from '../types/entraID.type';
2
+ import { EntraIDSetup } from '../types/entraID-module-init.types';
3
+ export declare class MicrosoftService {
4
+ private readonly config;
5
+ constructor(config: EntraIDSetup);
6
+ exchangeCode(code: string): Promise<AzureTokenResponse>;
7
+ refreshToken(refreshToken: string): Promise<AzureTokenResponse>;
8
+ revokeUserSessions(userId: string): Promise<void>;
9
+ private getClientCredentialsToken;
10
+ getMe(accessToken: string): Promise<GraphUser>;
11
+ getMemberOf(accessToken: string): Promise<{
12
+ displayName: string;
13
+ }[]>;
14
+ }