@ackplus/nest-auth 0.0.23

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 (186) hide show
  1. package/README.md +226 -0
  2. package/package.json +51 -0
  3. package/src/index.d.ts +11 -0
  4. package/src/index.js +15 -0
  5. package/src/index.js.map +1 -0
  6. package/src/lib/auth.constants.d.ts +17 -0
  7. package/src/lib/auth.constants.js +21 -0
  8. package/src/lib/auth.constants.js.map +1 -0
  9. package/src/lib/controllers/auth.controller.d.ts +26 -0
  10. package/src/lib/controllers/auth.controller.js +214 -0
  11. package/src/lib/controllers/auth.controller.js.map +1 -0
  12. package/src/lib/controllers/mfa.controller.d.ts +23 -0
  13. package/src/lib/controllers/mfa.controller.js +132 -0
  14. package/src/lib/controllers/mfa.controller.js.map +1 -0
  15. package/src/lib/decorators/skip-mfa.decorator.d.ts +2 -0
  16. package/src/lib/decorators/skip-mfa.decorator.js +8 -0
  17. package/src/lib/decorators/skip-mfa.decorator.js.map +1 -0
  18. package/src/lib/dto/index.d.ts +12 -0
  19. package/src/lib/dto/index.js +16 -0
  20. package/src/lib/dto/index.js.map +1 -0
  21. package/src/lib/dto/requests/forgot-password.request.dto.d.ts +5 -0
  22. package/src/lib/dto/requests/forgot-password.request.dto.js +30 -0
  23. package/src/lib/dto/requests/forgot-password.request.dto.js.map +1 -0
  24. package/src/lib/dto/requests/login.request.dto.d.ts +6 -0
  25. package/src/lib/dto/requests/login.request.dto.js +34 -0
  26. package/src/lib/dto/requests/login.request.dto.js.map +1 -0
  27. package/src/lib/dto/requests/refresh-token.request.dto.d.ts +3 -0
  28. package/src/lib/dto/requests/refresh-token.request.dto.js +15 -0
  29. package/src/lib/dto/requests/refresh-token.request.dto.js.map +1 -0
  30. package/src/lib/dto/requests/reset-password.request.dto.d.ts +7 -0
  31. package/src/lib/dto/requests/reset-password.request.dto.js +42 -0
  32. package/src/lib/dto/requests/reset-password.request.dto.js.map +1 -0
  33. package/src/lib/dto/requests/send-mfa-code.request.dto.d.ts +4 -0
  34. package/src/lib/dto/requests/send-mfa-code.request.dto.js +16 -0
  35. package/src/lib/dto/requests/send-mfa-code.request.dto.js.map +1 -0
  36. package/src/lib/dto/requests/signup.request.dto.d.ts +6 -0
  37. package/src/lib/dto/requests/signup.request.dto.js +37 -0
  38. package/src/lib/dto/requests/signup.request.dto.js.map +1 -0
  39. package/src/lib/dto/requests/social-login.request.dto.d.ts +3 -0
  40. package/src/lib/dto/requests/social-login.request.dto.js +16 -0
  41. package/src/lib/dto/requests/social-login.request.dto.js.map +1 -0
  42. package/src/lib/dto/requests/update-user.dto.d.ts +5 -0
  43. package/src/lib/dto/requests/update-user.dto.js +24 -0
  44. package/src/lib/dto/requests/update-user.dto.js.map +1 -0
  45. package/src/lib/dto/requests/verify-2fa.request.dto.d.ts +5 -0
  46. package/src/lib/dto/requests/verify-2fa.request.dto.js +21 -0
  47. package/src/lib/dto/requests/verify-2fa.request.dto.js.map +1 -0
  48. package/src/lib/dto/requests/verify-totp-setup.request.dto.d.ts +4 -0
  49. package/src/lib/dto/requests/verify-totp-setup.request.dto.js +20 -0
  50. package/src/lib/dto/requests/verify-totp-setup.request.dto.js.map +1 -0
  51. package/src/lib/dto/responses/auth.response.dto.d.ts +16 -0
  52. package/src/lib/dto/responses/auth.response.dto.js +55 -0
  53. package/src/lib/dto/responses/auth.response.dto.js.map +1 -0
  54. package/src/lib/dto/responses/device-info.response.dto.d.ts +6 -0
  55. package/src/lib/dto/responses/device-info.response.dto.js +25 -0
  56. package/src/lib/dto/responses/device-info.response.dto.js.map +1 -0
  57. package/src/lib/dto/responses/message.response.dto.d.ts +3 -0
  58. package/src/lib/dto/responses/message.response.dto.js +13 -0
  59. package/src/lib/dto/responses/message.response.dto.js.map +1 -0
  60. package/src/lib/entities/auth-identity.entity.d.ts +11 -0
  61. package/src/lib/entities/auth-identity.entity.js +47 -0
  62. package/src/lib/entities/auth-identity.entity.js.map +1 -0
  63. package/src/lib/entities/index.d.ts +10 -0
  64. package/src/lib/entities/index.js +26 -0
  65. package/src/lib/entities/index.js.map +1 -0
  66. package/src/lib/entities/mfa-secret.entity.d.ts +12 -0
  67. package/src/lib/entities/mfa-secret.entity.js +51 -0
  68. package/src/lib/entities/mfa-secret.entity.js.map +1 -0
  69. package/src/lib/entities/otp.entity.d.ts +16 -0
  70. package/src/lib/entities/otp.entity.js +52 -0
  71. package/src/lib/entities/otp.entity.js.map +1 -0
  72. package/src/lib/entities/permission.entity.d.ts +9 -0
  73. package/src/lib/entities/permission.entity.js +37 -0
  74. package/src/lib/entities/permission.entity.js.map +1 -0
  75. package/src/lib/entities/role-permission.entity.d.ts +8 -0
  76. package/src/lib/entities/role-permission.entity.js +30 -0
  77. package/src/lib/entities/role-permission.entity.js.map +1 -0
  78. package/src/lib/entities/role.entity.d.ts +11 -0
  79. package/src/lib/entities/role.entity.js +42 -0
  80. package/src/lib/entities/role.entity.js.map +1 -0
  81. package/src/lib/entities/session.entity.d.ts +16 -0
  82. package/src/lib/entities/session.entity.js +63 -0
  83. package/src/lib/entities/session.entity.js.map +1 -0
  84. package/src/lib/entities/tenant.entity.d.ts +10 -0
  85. package/src/lib/entities/tenant.entity.js +41 -0
  86. package/src/lib/entities/tenant.entity.js.map +1 -0
  87. package/src/lib/entities/user-role.entity.d.ts +13 -0
  88. package/src/lib/entities/user-role.entity.js +47 -0
  89. package/src/lib/entities/user-role.entity.js.map +1 -0
  90. package/src/lib/entities/user.entity.d.ts +38 -0
  91. package/src/lib/entities/user.entity.js +155 -0
  92. package/src/lib/entities/user.entity.js.map +1 -0
  93. package/src/lib/guards/auth.guard.d.ts +18 -0
  94. package/src/lib/guards/auth.guard.js +106 -0
  95. package/src/lib/guards/auth.guard.js.map +1 -0
  96. package/src/lib/interceptors/token.interceptor.d.ts +10 -0
  97. package/src/lib/interceptors/token.interceptor.js +41 -0
  98. package/src/lib/interceptors/token.interceptor.js.map +1 -0
  99. package/src/lib/interfaces/auth-module-options.interface.d.ts +51 -0
  100. package/src/lib/interfaces/auth-module-options.interface.js +3 -0
  101. package/src/lib/interfaces/auth-module-options.interface.js.map +1 -0
  102. package/src/lib/interfaces/mfa-options.interface.d.ts +25 -0
  103. package/src/lib/interfaces/mfa-options.interface.js +10 -0
  104. package/src/lib/interfaces/mfa-options.interface.js.map +1 -0
  105. package/src/lib/interfaces/session-options.interface.d.ts +12 -0
  106. package/src/lib/interfaces/session-options.interface.js +9 -0
  107. package/src/lib/interfaces/session-options.interface.js.map +1 -0
  108. package/src/lib/interfaces/token-payload.interface.d.ts +39 -0
  109. package/src/lib/interfaces/token-payload.interface.js +3 -0
  110. package/src/lib/interfaces/token-payload.interface.js.map +1 -0
  111. package/src/lib/migrations/1746242659133-migration.d.ts +6 -0
  112. package/src/lib/migrations/1746242659133-migration.js +66 -0
  113. package/src/lib/migrations/1746242659133-migration.js.map +1 -0
  114. package/src/lib/migrations/1746244352713-migration.d.ts +6 -0
  115. package/src/lib/migrations/1746244352713-migration.js +16 -0
  116. package/src/lib/migrations/1746244352713-migration.js.map +1 -0
  117. package/src/lib/nest-auth.module.d.ts +13 -0
  118. package/src/lib/nest-auth.module.js +247 -0
  119. package/src/lib/nest-auth.module.js.map +1 -0
  120. package/src/lib/providers/apple-auth.provider.d.ts +23 -0
  121. package/src/lib/providers/apple-auth.provider.js +61 -0
  122. package/src/lib/providers/apple-auth.provider.js.map +1 -0
  123. package/src/lib/providers/base-auth.provider.d.ts +24 -0
  124. package/src/lib/providers/base-auth.provider.js +54 -0
  125. package/src/lib/providers/base-auth.provider.js.map +1 -0
  126. package/src/lib/providers/email-auth.provider.d.ts +21 -0
  127. package/src/lib/providers/email-auth.provider.js +45 -0
  128. package/src/lib/providers/email-auth.provider.js.map +1 -0
  129. package/src/lib/providers/facebook-auth.provider.d.ts +23 -0
  130. package/src/lib/providers/facebook-auth.provider.js +61 -0
  131. package/src/lib/providers/facebook-auth.provider.js.map +1 -0
  132. package/src/lib/providers/google-auth.provider.d.ts +26 -0
  133. package/src/lib/providers/google-auth.provider.js +63 -0
  134. package/src/lib/providers/google-auth.provider.js.map +1 -0
  135. package/src/lib/providers/index.d.ts +7 -0
  136. package/src/lib/providers/index.js +16 -0
  137. package/src/lib/providers/index.js.map +1 -0
  138. package/src/lib/providers/jwt-auth.provider.d.ts +38 -0
  139. package/src/lib/providers/jwt-auth.provider.js +54 -0
  140. package/src/lib/providers/jwt-auth.provider.js.map +1 -0
  141. package/src/lib/providers/phone-auth.provider.d.ts +22 -0
  142. package/src/lib/providers/phone-auth.provider.js +48 -0
  143. package/src/lib/providers/phone-auth.provider.js.map +1 -0
  144. package/src/lib/request-context/request-context.d.ts +22 -0
  145. package/src/lib/request-context/request-context.js +108 -0
  146. package/src/lib/request-context/request-context.js.map +1 -0
  147. package/src/lib/request-context/request-context.middleware.d.ts +4 -0
  148. package/src/lib/request-context/request-context.middleware.js +16 -0
  149. package/src/lib/request-context/request-context.middleware.js.map +1 -0
  150. package/src/lib/services/auth-migration-service.d.ts +22 -0
  151. package/src/lib/services/auth-migration-service.js +125 -0
  152. package/src/lib/services/auth-migration-service.js.map +1 -0
  153. package/src/lib/services/auth-provider-registry.service.d.ts +25 -0
  154. package/src/lib/services/auth-provider-registry.service.js +72 -0
  155. package/src/lib/services/auth-provider-registry.service.js.map +1 -0
  156. package/src/lib/services/auth.service.d.ts +45 -0
  157. package/src/lib/services/auth.service.js +344 -0
  158. package/src/lib/services/auth.service.js.map +1 -0
  159. package/src/lib/services/cookie.service.d.ts +10 -0
  160. package/src/lib/services/cookie.service.js +43 -0
  161. package/src/lib/services/cookie.service.js.map +1 -0
  162. package/src/lib/services/jwt.service.d.ts +15 -0
  163. package/src/lib/services/jwt.service.js +93 -0
  164. package/src/lib/services/jwt.service.js.map +1 -0
  165. package/src/lib/services/mfa.service.d.ts +40 -0
  166. package/src/lib/services/mfa.service.js +254 -0
  167. package/src/lib/services/mfa.service.js.map +1 -0
  168. package/src/lib/services/session/base-session.service.d.ts +23 -0
  169. package/src/lib/services/session/base-session.service.js +64 -0
  170. package/src/lib/services/session/base-session.service.js.map +1 -0
  171. package/src/lib/services/session/database-session.service.d.ts +19 -0
  172. package/src/lib/services/session/database-session.service.js +55 -0
  173. package/src/lib/services/session/database-session.service.js.map +1 -0
  174. package/src/lib/services/session/redis-session.service.d.ts +22 -0
  175. package/src/lib/services/session/redis-session.service.js +120 -0
  176. package/src/lib/services/session/redis-session.service.js.map +1 -0
  177. package/src/lib/utils/database.utils.d.ts +2 -0
  178. package/src/lib/utils/database.utils.js +8 -0
  179. package/src/lib/utils/database.utils.js.map +1 -0
  180. package/src/lib/utils/otp.d.ts +1 -0
  181. package/src/lib/utils/otp.js +7 -0
  182. package/src/lib/utils/otp.js.map +1 -0
  183. package/src/typeorm.config.d.ts +2 -0
  184. package/src/typeorm.config.js +18 -0
  185. package/src/typeorm.config.js.map +1 -0
  186. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Tenant = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const typeorm_1 = require("typeorm");
6
+ const user_entity_1 = require("./user.entity");
7
+ let Tenant = class Tenant {
8
+ };
9
+ exports.Tenant = Tenant;
10
+ tslib_1.__decorate([
11
+ (0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
12
+ tslib_1.__metadata("design:type", String)
13
+ ], Tenant.prototype, "id", void 0);
14
+ tslib_1.__decorate([
15
+ (0, typeorm_1.Column)(),
16
+ tslib_1.__metadata("design:type", String)
17
+ ], Tenant.prototype, "name", void 0);
18
+ tslib_1.__decorate([
19
+ (0, typeorm_1.Column)({ unique: true, nullable: true }),
20
+ tslib_1.__metadata("design:type", String)
21
+ ], Tenant.prototype, "domain", void 0);
22
+ tslib_1.__decorate([
23
+ (0, typeorm_1.Column)({ nullable: true }),
24
+ tslib_1.__metadata("design:type", String)
25
+ ], Tenant.prototype, "createdByUserId", void 0);
26
+ tslib_1.__decorate([
27
+ (0, typeorm_1.CreateDateColumn)(),
28
+ tslib_1.__metadata("design:type", Date)
29
+ ], Tenant.prototype, "createdAt", void 0);
30
+ tslib_1.__decorate([
31
+ (0, typeorm_1.UpdateDateColumn)(),
32
+ tslib_1.__metadata("design:type", Date)
33
+ ], Tenant.prototype, "updatedAt", void 0);
34
+ tslib_1.__decorate([
35
+ (0, typeorm_1.OneToMany)(() => user_entity_1.User, user => user.tenant),
36
+ tslib_1.__metadata("design:type", Array)
37
+ ], Tenant.prototype, "users", void 0);
38
+ exports.Tenant = Tenant = tslib_1.__decorate([
39
+ (0, typeorm_1.Entity)('nest_auth_tenants')
40
+ ], Tenant);
41
+ //# sourceMappingURL=tenant.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.entity.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/entities/tenant.entity.ts"],"names":[],"mappings":";;;;AAAA,qCAAgH;AAChH,+CAAqC;AAG9B,IAAM,MAAM,GAAZ,MAAM,MAAM;CAqBlB,CAAA;AArBY,wBAAM;AAEf;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;kCACpB;AAGX;IADC,IAAA,gBAAM,GAAE;;oCACI;AAGb;IADC,IAAA,gBAAM,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sCAC1B;AAGf;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CACH;AAGxB;IADC,IAAA,0BAAgB,GAAE;sCACR,IAAI;yCAAC;AAGhB;IADC,IAAA,0BAAgB,GAAE;sCACR,IAAI;yCAAC;AAGhB;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,kBAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;;qCAC7B;iBApBL,MAAM;IADlB,IAAA,gBAAM,EAAC,mBAAmB,CAAC;GACf,MAAM,CAqBlB"}
@@ -0,0 +1,13 @@
1
+ import { User } from "./user.entity";
2
+ import { Role } from "./role.entity";
3
+ import { Tenant } from "./tenant.entity";
4
+ export declare class UserRole {
5
+ userId: string;
6
+ roleId: string;
7
+ tenantId: string;
8
+ user: User;
9
+ role: Role;
10
+ tenant: Tenant;
11
+ createdAt: Date;
12
+ updatedAt: Date;
13
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserRole = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const typeorm_1 = require("typeorm");
6
+ const user_entity_1 = require("./user.entity");
7
+ const role_entity_1 = require("./role.entity");
8
+ const tenant_entity_1 = require("./tenant.entity");
9
+ let UserRole = class UserRole {
10
+ };
11
+ exports.UserRole = UserRole;
12
+ tslib_1.__decorate([
13
+ (0, typeorm_1.PrimaryColumn)('uuid'),
14
+ tslib_1.__metadata("design:type", String)
15
+ ], UserRole.prototype, "userId", void 0);
16
+ tslib_1.__decorate([
17
+ (0, typeorm_1.PrimaryColumn)('uuid'),
18
+ tslib_1.__metadata("design:type", String)
19
+ ], UserRole.prototype, "roleId", void 0);
20
+ tslib_1.__decorate([
21
+ (0, typeorm_1.PrimaryColumn)('uuid'),
22
+ tslib_1.__metadata("design:type", String)
23
+ ], UserRole.prototype, "tenantId", void 0);
24
+ tslib_1.__decorate([
25
+ (0, typeorm_1.ManyToOne)(() => user_entity_1.User, user => user.userRoles, { onDelete: 'CASCADE' }),
26
+ tslib_1.__metadata("design:type", user_entity_1.User)
27
+ ], UserRole.prototype, "user", void 0);
28
+ tslib_1.__decorate([
29
+ (0, typeorm_1.ManyToOne)(() => role_entity_1.Role, role => role.userRoles, { onDelete: 'CASCADE' }),
30
+ tslib_1.__metadata("design:type", role_entity_1.Role)
31
+ ], UserRole.prototype, "role", void 0);
32
+ tslib_1.__decorate([
33
+ (0, typeorm_1.ManyToOne)(() => tenant_entity_1.Tenant),
34
+ tslib_1.__metadata("design:type", tenant_entity_1.Tenant)
35
+ ], UserRole.prototype, "tenant", void 0);
36
+ tslib_1.__decorate([
37
+ (0, typeorm_1.CreateDateColumn)(),
38
+ tslib_1.__metadata("design:type", Date)
39
+ ], UserRole.prototype, "createdAt", void 0);
40
+ tslib_1.__decorate([
41
+ (0, typeorm_1.UpdateDateColumn)(),
42
+ tslib_1.__metadata("design:type", Date)
43
+ ], UserRole.prototype, "updatedAt", void 0);
44
+ exports.UserRole = UserRole = tslib_1.__decorate([
45
+ (0, typeorm_1.Entity)('nest_auth_user_roles')
46
+ ], UserRole);
47
+ //# sourceMappingURL=user-role.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-role.entity.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/entities/user-role.entity.ts"],"names":[],"mappings":";;;;AAAA,qCAAuG;AACvG,+CAAqC;AACrC,+CAAqC;AACrC,mDAAyC;AAGlC,IAAM,QAAQ,GAAd,MAAM,QAAQ;CAwBpB,CAAA;AAxBY,4BAAQ;AAEjB;IADC,IAAA,uBAAa,EAAC,MAAM,CAAC;;wCACP;AAGf;IADC,IAAA,uBAAa,EAAC,MAAM,CAAC;;wCACP;AAGf;IADC,IAAA,uBAAa,EAAC,MAAM,CAAC;;0CACL;AAGjB;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,kBAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;sCACjE,kBAAI;sCAAC;AAGX;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,kBAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;sCACjE,kBAAI;sCAAC;AAGX;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,sBAAM,CAAC;sCAChB,sBAAM;wCAAC;AAGf;IADC,IAAA,0BAAgB,GAAE;sCACR,IAAI;2CAAC;AAGhB;IADC,IAAA,0BAAgB,GAAE;sCACR,IAAI;2CAAC;mBAvBP,QAAQ;IADpB,IAAA,gBAAM,EAAC,sBAAsB,CAAC;GAClB,QAAQ,CAwBpB"}
@@ -0,0 +1,38 @@
1
+ import { BaseEntity } from "typeorm";
2
+ import { Tenant } from "./tenant.entity";
3
+ import { UserRole } from "./user-role.entity";
4
+ import { AuthIdentity } from "./auth-identity.entity";
5
+ import { MFASecret } from "./mfa-secret.entity";
6
+ import { Session } from "./session.entity";
7
+ import { OTP } from "./otp.entity";
8
+ export declare class User extends BaseEntity {
9
+ id: string;
10
+ firstName?: string;
11
+ lastName?: string;
12
+ email: string;
13
+ emailVerifiedAt: Date;
14
+ phone: string;
15
+ phoneVerifiedAt: Date;
16
+ passwordHash: string;
17
+ isVerified: boolean;
18
+ isActive: boolean;
19
+ metadata?: Record<string, any>;
20
+ tenantId?: string;
21
+ isMfaEnabled: boolean;
22
+ mfaRecoveryCode?: string;
23
+ tenant: Tenant;
24
+ createdAt: Date;
25
+ updatedAt: Date;
26
+ identities: AuthIdentity[];
27
+ mfaSecrets: MFASecret[];
28
+ sessions: Session[];
29
+ otps: OTP[];
30
+ userRoles: UserRole[];
31
+ emailTenant: string;
32
+ phoneTenant: string;
33
+ updateTenantFields(): void;
34
+ getPermissions(): string[];
35
+ getRoles(): string[];
36
+ validatePassword(password: string): Promise<boolean>;
37
+ setPassword(password: string): Promise<void>;
38
+ }
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.User = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const typeorm_1 = require("typeorm");
6
+ const tenant_entity_1 = require("./tenant.entity");
7
+ const user_role_entity_1 = require("./user-role.entity");
8
+ const auth_identity_entity_1 = require("./auth-identity.entity");
9
+ const mfa_secret_entity_1 = require("./mfa-secret.entity");
10
+ const session_entity_1 = require("./session.entity");
11
+ const otp_entity_1 = require("./otp.entity");
12
+ const bcrypt_1 = tslib_1.__importDefault(require("bcrypt"));
13
+ const lodash_1 = require("lodash");
14
+ let User = class User extends typeorm_1.BaseEntity {
15
+ updateTenantFields() {
16
+ this.emailTenant = this.email ? `${this.email}:${this.tenantId || 'global'}` : null;
17
+ this.phoneTenant = this.phone ? `${this.phone}:${this.tenantId || 'global'}` : null;
18
+ }
19
+ getPermissions() {
20
+ return (0, lodash_1.chain)(this.userRoles)
21
+ .map(role => (0, lodash_1.map)(role.role.rolePermissions, 'permission.name'))
22
+ .flatten()
23
+ .uniq()
24
+ .value();
25
+ }
26
+ getRoles() {
27
+ return (0, lodash_1.chain)(this.userRoles)
28
+ .map(role => role.role.name)
29
+ .uniq()
30
+ .value();
31
+ }
32
+ async validatePassword(password) {
33
+ if (!this.passwordHash)
34
+ return false;
35
+ return bcrypt_1.default.compare(password, this.passwordHash);
36
+ }
37
+ async setPassword(password) {
38
+ const salt = await bcrypt_1.default.genSalt();
39
+ this.passwordHash = await bcrypt_1.default.hash(password, salt);
40
+ }
41
+ };
42
+ exports.User = User;
43
+ tslib_1.__decorate([
44
+ (0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
45
+ tslib_1.__metadata("design:type", String)
46
+ ], User.prototype, "id", void 0);
47
+ tslib_1.__decorate([
48
+ (0, typeorm_1.Column)({ nullable: true }),
49
+ tslib_1.__metadata("design:type", String)
50
+ ], User.prototype, "firstName", void 0);
51
+ tslib_1.__decorate([
52
+ (0, typeorm_1.Column)({ nullable: true }),
53
+ tslib_1.__metadata("design:type", String)
54
+ ], User.prototype, "lastName", void 0);
55
+ tslib_1.__decorate([
56
+ (0, typeorm_1.Column)({ nullable: true }),
57
+ (0, typeorm_1.Index)(),
58
+ tslib_1.__metadata("design:type", String)
59
+ ], User.prototype, "email", void 0);
60
+ tslib_1.__decorate([
61
+ (0, typeorm_1.Column)({ nullable: true }),
62
+ (0, typeorm_1.Index)(),
63
+ tslib_1.__metadata("design:type", Date)
64
+ ], User.prototype, "emailVerifiedAt", void 0);
65
+ tslib_1.__decorate([
66
+ (0, typeorm_1.Column)({ nullable: true }),
67
+ (0, typeorm_1.Index)(),
68
+ tslib_1.__metadata("design:type", String)
69
+ ], User.prototype, "phone", void 0);
70
+ tslib_1.__decorate([
71
+ (0, typeorm_1.Column)({ nullable: true }),
72
+ (0, typeorm_1.Index)(),
73
+ tslib_1.__metadata("design:type", Date)
74
+ ], User.prototype, "phoneVerifiedAt", void 0);
75
+ tslib_1.__decorate([
76
+ (0, typeorm_1.Column)({ nullable: true }),
77
+ tslib_1.__metadata("design:type", String)
78
+ ], User.prototype, "passwordHash", void 0);
79
+ tslib_1.__decorate([
80
+ (0, typeorm_1.Column)({ default: false }),
81
+ tslib_1.__metadata("design:type", Boolean)
82
+ ], User.prototype, "isVerified", void 0);
83
+ tslib_1.__decorate([
84
+ (0, typeorm_1.Column)({ default: true }),
85
+ tslib_1.__metadata("design:type", Boolean)
86
+ ], User.prototype, "isActive", void 0);
87
+ tslib_1.__decorate([
88
+ (0, typeorm_1.Column)({ type: 'simple-json', nullable: true, default: '{}' }),
89
+ tslib_1.__metadata("design:type", Object)
90
+ ], User.prototype, "metadata", void 0);
91
+ tslib_1.__decorate([
92
+ (0, typeorm_1.Column)({ nullable: true }),
93
+ tslib_1.__metadata("design:type", String)
94
+ ], User.prototype, "tenantId", void 0);
95
+ tslib_1.__decorate([
96
+ (0, typeorm_1.Column)({ default: false }),
97
+ tslib_1.__metadata("design:type", Boolean)
98
+ ], User.prototype, "isMfaEnabled", void 0);
99
+ tslib_1.__decorate([
100
+ (0, typeorm_1.Column)({ nullable: true }),
101
+ tslib_1.__metadata("design:type", String)
102
+ ], User.prototype, "mfaRecoveryCode", void 0);
103
+ tslib_1.__decorate([
104
+ (0, typeorm_1.ManyToOne)(() => tenant_entity_1.Tenant, tenant => tenant.users),
105
+ tslib_1.__metadata("design:type", tenant_entity_1.Tenant)
106
+ ], User.prototype, "tenant", void 0);
107
+ tslib_1.__decorate([
108
+ (0, typeorm_1.CreateDateColumn)(),
109
+ tslib_1.__metadata("design:type", Date)
110
+ ], User.prototype, "createdAt", void 0);
111
+ tslib_1.__decorate([
112
+ (0, typeorm_1.UpdateDateColumn)(),
113
+ tslib_1.__metadata("design:type", Date)
114
+ ], User.prototype, "updatedAt", void 0);
115
+ tslib_1.__decorate([
116
+ (0, typeorm_1.OneToMany)(() => auth_identity_entity_1.AuthIdentity, identity => identity.user),
117
+ tslib_1.__metadata("design:type", Array)
118
+ ], User.prototype, "identities", void 0);
119
+ tslib_1.__decorate([
120
+ (0, typeorm_1.OneToMany)(() => mfa_secret_entity_1.MFASecret, mfaSecret => mfaSecret.user),
121
+ tslib_1.__metadata("design:type", Array)
122
+ ], User.prototype, "mfaSecrets", void 0);
123
+ tslib_1.__decorate([
124
+ (0, typeorm_1.OneToMany)(() => session_entity_1.Session, session => session.user),
125
+ tslib_1.__metadata("design:type", Array)
126
+ ], User.prototype, "sessions", void 0);
127
+ tslib_1.__decorate([
128
+ (0, typeorm_1.OneToMany)(() => otp_entity_1.OTP, otp => otp.user),
129
+ tslib_1.__metadata("design:type", Array)
130
+ ], User.prototype, "otps", void 0);
131
+ tslib_1.__decorate([
132
+ (0, typeorm_1.OneToMany)(() => user_role_entity_1.UserRole, userRole => userRole.user),
133
+ tslib_1.__metadata("design:type", Array)
134
+ ], User.prototype, "userRoles", void 0);
135
+ tslib_1.__decorate([
136
+ (0, typeorm_1.Index)('IDX_USER_EMAIL_TENANT', { unique: true }),
137
+ (0, typeorm_1.Column)({ nullable: true }),
138
+ tslib_1.__metadata("design:type", String)
139
+ ], User.prototype, "emailTenant", void 0);
140
+ tslib_1.__decorate([
141
+ (0, typeorm_1.Index)('IDX_USER_PHONE_TENANT', { unique: true }),
142
+ (0, typeorm_1.Column)({ nullable: true }),
143
+ tslib_1.__metadata("design:type", String)
144
+ ], User.prototype, "phoneTenant", void 0);
145
+ tslib_1.__decorate([
146
+ (0, typeorm_1.BeforeInsert)(),
147
+ (0, typeorm_1.BeforeUpdate)(),
148
+ tslib_1.__metadata("design:type", Function),
149
+ tslib_1.__metadata("design:paramtypes", []),
150
+ tslib_1.__metadata("design:returntype", void 0)
151
+ ], User.prototype, "updateTenantFields", null);
152
+ exports.User = User = tslib_1.__decorate([
153
+ (0, typeorm_1.Entity)('nest_auth_users')
154
+ ], User);
155
+ //# sourceMappingURL=user.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.entity.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/entities/user.entity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { ExecutionContext } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ import { JwtService } from '../services/jwt.service';
4
+ import { AuthService } from '../services/auth.service';
5
+ import { BaseSessionService } from '../services/session/base-session.service';
6
+ import { CookieService } from '../services/cookie.service';
7
+ export declare class AuthGuard {
8
+ private jwtService;
9
+ private authService;
10
+ private sessionService;
11
+ private cookieService;
12
+ private reflector;
13
+ constructor(jwtService: JwtService, authService: AuthService, sessionService: BaseSessionService, cookieService: CookieService, reflector: Reflector);
14
+ canActivate(context: ExecutionContext): Promise<boolean>;
15
+ private extractTokenFromRequest;
16
+ private extractRefreshToken;
17
+ private checkMfa;
18
+ }
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthGuard = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const auth_constants_1 = require("../auth.constants");
7
+ const skip_mfa_decorator_1 = require("../decorators/skip-mfa.decorator");
8
+ const core_1 = require("@nestjs/core");
9
+ const jwt_service_1 = require("../services/jwt.service");
10
+ const auth_service_1 = require("../services/auth.service");
11
+ const base_session_service_1 = require("../services/session/base-session.service");
12
+ const cookie_service_1 = require("../services/cookie.service");
13
+ let AuthGuard = class AuthGuard {
14
+ constructor(jwtService, authService, sessionService, cookieService, reflector) {
15
+ this.jwtService = jwtService;
16
+ this.authService = authService;
17
+ this.sessionService = sessionService;
18
+ this.cookieService = cookieService;
19
+ this.reflector = reflector;
20
+ }
21
+ async canActivate(context) {
22
+ const request = context.switchToHttp().getRequest();
23
+ const response = context.switchToHttp().getResponse();
24
+ const accessToken = this.extractTokenFromRequest(request);
25
+ if (!accessToken) {
26
+ throw new common_1.UnauthorizedException({
27
+ message: 'No token provided',
28
+ code: auth_constants_1.UNAUTHORIZED_EXCEPTION_CODE
29
+ });
30
+ }
31
+ try {
32
+ const payload = await this.jwtService.verifyToken(accessToken);
33
+ if (payload.type === 'access') {
34
+ const session = await this.sessionService.getSession(payload.sessionId);
35
+ if (!session) {
36
+ throw new common_1.UnauthorizedException({
37
+ message: 'Session not found',
38
+ code: auth_constants_1.UNAUTHORIZED_EXCEPTION_CODE
39
+ });
40
+ }
41
+ request.user = payload;
42
+ request.session = session;
43
+ await this.checkMfa(context, payload);
44
+ return true;
45
+ }
46
+ else {
47
+ throw new common_1.UnauthorizedException({
48
+ message: 'Invalid token',
49
+ code: auth_constants_1.UNAUTHORIZED_EXCEPTION_CODE
50
+ });
51
+ }
52
+ }
53
+ catch (error) {
54
+ const refreshToken = this.extractRefreshToken(request);
55
+ const newSession = await this.authService.refreshToken(refreshToken);
56
+ this.cookieService.setTokens(response, newSession.accessToken, newSession.refreshToken);
57
+ return true;
58
+ }
59
+ }
60
+ extractTokenFromRequest(request) {
61
+ const tokenFromCookie = request.cookies?.[auth_constants_1.ACCESS_TOKEN_COOKIE_NAME];
62
+ if (tokenFromCookie) {
63
+ return tokenFromCookie;
64
+ }
65
+ const authHeader = request.headers.authorization;
66
+ if (authHeader && authHeader.startsWith('Bearer ')) {
67
+ return authHeader.substring(7);
68
+ }
69
+ return null;
70
+ }
71
+ extractRefreshToken(request) {
72
+ const tokenFromCookie = request.cookies?.[auth_constants_1.REFRESH_TOKEN_COOKIE_NAME];
73
+ if (tokenFromCookie) {
74
+ return tokenFromCookie;
75
+ }
76
+ const authHeader = request.headers['x-refresh-token'];
77
+ if (authHeader) {
78
+ return authHeader;
79
+ }
80
+ return null;
81
+ }
82
+ async checkMfa(context, payload) {
83
+ const skipMfa = this.reflector.getAllAndOverride(skip_mfa_decorator_1.SKIP_MFA_KEY, [
84
+ context.getHandler(),
85
+ context.getClass(),
86
+ ]);
87
+ const isMfaEnabled = payload.isMfaEnabled;
88
+ const isMfaVerified = payload.isMfaVerified;
89
+ if (isMfaEnabled && !isMfaVerified && !skipMfa) {
90
+ throw new common_1.UnauthorizedException({
91
+ message: 'Multi-factor authentication is required',
92
+ code: auth_constants_1.UNAUTHORIZED_EXCEPTION_CODE
93
+ });
94
+ }
95
+ }
96
+ };
97
+ exports.AuthGuard = AuthGuard;
98
+ exports.AuthGuard = AuthGuard = tslib_1.__decorate([
99
+ (0, common_1.Injectable)(),
100
+ tslib_1.__metadata("design:paramtypes", [jwt_service_1.JwtService,
101
+ auth_service_1.AuthService,
102
+ base_session_service_1.BaseSessionService,
103
+ cookie_service_1.CookieService,
104
+ core_1.Reflector])
105
+ ], AuthGuard);
106
+ //# sourceMappingURL=auth.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.guard.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/guards/auth.guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
2
+ import { Observable } from 'rxjs';
3
+ import { CookieService } from '../services/cookie.service';
4
+ import { BaseSessionService } from '../services/session/base-session.service';
5
+ export declare class TokenInterceptor implements NestInterceptor {
6
+ private readonly sessionService;
7
+ private readonly cookieService;
8
+ constructor(sessionService: BaseSessionService, cookieService: CookieService);
9
+ intercept(context: ExecutionContext, next: CallHandler): Promise<Observable<any>>;
10
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TokenInterceptor = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const operators_1 = require("rxjs/operators");
7
+ const cookie_service_1 = require("../services/cookie.service");
8
+ const base_session_service_1 = require("../services/session/base-session.service");
9
+ let TokenInterceptor = class TokenInterceptor {
10
+ constructor(sessionService, cookieService) {
11
+ this.sessionService = sessionService;
12
+ this.cookieService = cookieService;
13
+ }
14
+ async intercept(context, next) {
15
+ const request = context.switchToHttp().getRequest();
16
+ const response = context.switchToHttp().getResponse();
17
+ return next.handle().pipe((0, operators_1.tap)(async () => {
18
+ if (request.newTokens) {
19
+ const { accessToken, refreshToken } = request.newTokens;
20
+ this.cookieService.setTokens(response, accessToken, refreshToken);
21
+ if (request.user) {
22
+ const session = await this.sessionService.getSession(request.user.id);
23
+ if (session) {
24
+ await this.sessionService.updateSession(request.user.id, {
25
+ ...session,
26
+ refreshToken,
27
+ lastActive: new Date(),
28
+ });
29
+ }
30
+ }
31
+ }
32
+ }));
33
+ }
34
+ };
35
+ exports.TokenInterceptor = TokenInterceptor;
36
+ exports.TokenInterceptor = TokenInterceptor = tslib_1.__decorate([
37
+ (0, common_1.Injectable)(),
38
+ tslib_1.__metadata("design:paramtypes", [base_session_service_1.BaseSessionService,
39
+ cookie_service_1.CookieService])
40
+ ], TokenInterceptor);
41
+ //# sourceMappingURL=token.interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.interceptor.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/interceptors/token.interceptor.ts"],"names":[],"mappings":";;;;AAAA,2CAA4F;AAE5F,8CAAqC;AAGrC,+DAA2D;AAC3D,mFAA8E;AAGvE,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IACzB,YACqB,cAAkC,EAClC,aAA4B;QAD5B,mBAAc,GAAd,cAAc,CAAoB;QAClC,kBAAa,GAAb,aAAa,CAAe;IAC7C,CAAC;IAEL,KAAK,CAAC,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACxD,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,WAAW,EAAY,CAAC;QAEhE,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACrB,IAAA,eAAG,EAAC,KAAK,IAAI,EAAE;YAEX,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACpB,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;gBAGxD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;gBAGlE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;oBACf,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACtE,IAAI,OAAO,EAAE,CAAC;wBACV,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE;4BACrD,GAAG,OAAO;4BACV,YAAY;4BACZ,UAAU,EAAE,IAAI,IAAI,EAAE;yBACzB,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CACL,CAAC;IACN,CAAC;CACJ,CAAA;AAlCY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;6CAG4B,yCAAkB;QACnB,8BAAa;GAHxC,gBAAgB,CAkC5B"}
@@ -0,0 +1,51 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { BaseAuthProvider } from '../providers/base-auth.provider';
3
+ import { MFAOptions } from './mfa-options.interface';
4
+ import { CookieOptions, SessionOptions } from './session-options.interface';
5
+ export interface AuthModuleOptions {
6
+ accessTokenType?: 'header' | 'cookie';
7
+ cookieOptions?: CookieOptions;
8
+ jwt: {
9
+ secret: string;
10
+ accessTokenExpiresIn?: number | string;
11
+ refreshTokenExpiresIn?: number | string;
12
+ };
13
+ google?: {
14
+ clientId: string;
15
+ clientSecret: string;
16
+ redirectUri: string;
17
+ };
18
+ facebook?: {
19
+ appId: string;
20
+ appSecret: string;
21
+ redirectUri: string;
22
+ };
23
+ apple?: {
24
+ clientId: string;
25
+ teamId: string;
26
+ keyId: string;
27
+ privateKey: string;
28
+ privateKeyMethod?: string;
29
+ redirectUri: string;
30
+ };
31
+ phoneAuth?: {
32
+ enabled: boolean;
33
+ };
34
+ emailAuth?: {
35
+ enabled: boolean;
36
+ };
37
+ mfa?: MFAOptions;
38
+ session?: SessionOptions;
39
+ customAuthProviders?: BaseAuthProvider[];
40
+ passwordResetOtpExpiresIn?: number | string;
41
+ }
42
+ export interface AuthModuleAsyncOptions {
43
+ imports?: any[];
44
+ useFactory: (...args: any[]) => Promise<AuthModuleOptions> | AuthModuleOptions;
45
+ inject?: any[];
46
+ useClass?: Type<AuthModuleOptionsFactory>;
47
+ useExisting?: Type<AuthModuleOptionsFactory>;
48
+ }
49
+ export interface AuthModuleOptionsFactory {
50
+ createAuthModuleOptions(): Promise<AuthModuleOptions> | AuthModuleOptions;
51
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=auth-module-options.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-module-options.interface.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/interfaces/auth-module-options.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ export interface MFAOptions {
2
+ enabled?: boolean;
3
+ required?: boolean;
4
+ methods?: MFAMethodEnum[];
5
+ otpLength?: number;
6
+ totp?: {
7
+ issuer: string;
8
+ period: number;
9
+ };
10
+ sms?: {
11
+ provider: string;
12
+ template: string;
13
+ };
14
+ email?: {
15
+ template: string;
16
+ };
17
+ allowUserToggle?: boolean;
18
+ allowMethodSelection?: boolean;
19
+ otpExpiresIn?: string | number;
20
+ }
21
+ export declare enum MFAMethodEnum {
22
+ TOTP = "totp",
23
+ SMS = "sms",
24
+ EMAIL = "email"
25
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MFAMethodEnum = void 0;
4
+ var MFAMethodEnum;
5
+ (function (MFAMethodEnum) {
6
+ MFAMethodEnum["TOTP"] = "totp";
7
+ MFAMethodEnum["SMS"] = "sms";
8
+ MFAMethodEnum["EMAIL"] = "email";
9
+ })(MFAMethodEnum || (exports.MFAMethodEnum = MFAMethodEnum = {}));
10
+ //# sourceMappingURL=mfa-options.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mfa-options.interface.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/interfaces/mfa-options.interface.ts"],"names":[],"mappings":";;;AAyCA,IAAY,aAIX;AAJD,WAAY,aAAa;IACrB,8BAAa,CAAA;IACb,4BAAW,CAAA;IACX,gCAAe,CAAA;AACnB,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB"}
@@ -0,0 +1,12 @@
1
+ import { CookieOptions as ExpressCookieOptions } from 'express';
2
+ export declare enum SessionStorageType {
3
+ REDIS = "redis",
4
+ DATABASE = "database"
5
+ }
6
+ export interface SessionOptions {
7
+ storageType: SessionStorageType;
8
+ redisUrl?: string;
9
+ sessionExpiry?: number | string;
10
+ refreshTokenExpiry?: number | string;
11
+ }
12
+ export type CookieOptions = Omit<ExpressCookieOptions, 'maxAge'>;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionStorageType = void 0;
4
+ var SessionStorageType;
5
+ (function (SessionStorageType) {
6
+ SessionStorageType["REDIS"] = "redis";
7
+ SessionStorageType["DATABASE"] = "database";
8
+ })(SessionStorageType || (exports.SessionStorageType = SessionStorageType = {}));
9
+ //# sourceMappingURL=session-options.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-options.interface.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/interfaces/session-options.interface.ts"],"names":[],"mappings":";;;AAEA,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC1B,qCAAe,CAAA;IACf,2CAAqB,CAAA;AACzB,CAAC,EAHW,kBAAkB,kCAAlB,kBAAkB,QAG7B"}