@warlock.js/auth 4.0.4 → 4.0.10

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 (169) hide show
  1. package/cjs/commands/auth-cleanup-command.d.ts +10 -0
  2. package/cjs/commands/auth-cleanup-command.d.ts.map +1 -0
  3. package/cjs/commands/auth-cleanup-command.js +29 -0
  4. package/cjs/commands/auth-cleanup-command.js.map +1 -0
  5. package/cjs/commands/jwt-secret-generator-command.d.ts.map +1 -1
  6. package/cjs/commands/jwt-secret-generator-command.js +5 -1
  7. package/cjs/commands/jwt-secret-generator-command.js.map +1 -1
  8. package/cjs/contracts/types.d.ts +100 -1
  9. package/cjs/contracts/types.d.ts.map +1 -1
  10. package/cjs/contracts/types.js +20 -0
  11. package/cjs/contracts/types.js.map +1 -0
  12. package/cjs/index.d.ts +2 -1
  13. package/cjs/index.d.ts.map +1 -1
  14. package/cjs/index.js +1 -1
  15. package/cjs/middleware/auth.middleware.d.ts.map +1 -1
  16. package/cjs/middleware/auth.middleware.js +14 -37
  17. package/cjs/middleware/auth.middleware.js.map +1 -1
  18. package/cjs/models/auth.d.ts +24 -2
  19. package/cjs/models/auth.d.ts.map +1 -1
  20. package/cjs/models/auth.js +39 -40
  21. package/cjs/models/auth.js.map +1 -1
  22. package/cjs/models/casts/cast-password.d.ts.map +1 -1
  23. package/cjs/models/casts/cast-password.js +2 -2
  24. package/cjs/models/casts/cast-password.js.map +1 -1
  25. package/cjs/models/index.d.ts +1 -1
  26. package/cjs/models/index.d.ts.map +1 -1
  27. package/cjs/models/refresh-token/index.d.ts +2 -0
  28. package/cjs/models/refresh-token/index.d.ts.map +1 -0
  29. package/cjs/models/refresh-token/migration.d.ts.map +1 -0
  30. package/cjs/models/refresh-token/refresh-token.d.ts +32 -0
  31. package/cjs/models/refresh-token/refresh-token.d.ts.map +1 -0
  32. package/cjs/models/refresh-token/refresh-token.js +52 -0
  33. package/cjs/models/refresh-token/refresh-token.js.map +1 -0
  34. package/cjs/services/auth-events.d.ts +84 -0
  35. package/cjs/services/auth-events.d.ts.map +1 -0
  36. package/cjs/services/auth-events.js +65 -0
  37. package/cjs/services/auth-events.js.map +1 -0
  38. package/cjs/services/auth.service.d.ts +78 -0
  39. package/cjs/services/auth.service.d.ts.map +1 -0
  40. package/cjs/services/auth.service.js +265 -0
  41. package/cjs/services/auth.service.js.map +1 -0
  42. package/cjs/services/generate-jwt-secret.d.ts.map +1 -1
  43. package/cjs/services/generate-jwt-secret.js +4 -4
  44. package/cjs/services/generate-jwt-secret.js.map +1 -1
  45. package/cjs/services/index.d.ts +2 -1
  46. package/cjs/services/index.d.ts.map +1 -1
  47. package/cjs/services/jwt.d.ts +2 -2
  48. package/cjs/services/jwt.d.ts.map +1 -1
  49. package/cjs/services/jwt.js +4 -4
  50. package/cjs/services/jwt.js.map +1 -1
  51. package/cjs/utils/auth-error-codes.d.ts +18 -0
  52. package/cjs/utils/auth-error-codes.d.ts.map +1 -0
  53. package/cjs/utils/auth-error-codes.js +18 -0
  54. package/cjs/utils/auth-error-codes.js.map +1 -0
  55. package/cjs/utils/duration.d.ts +45 -0
  56. package/cjs/utils/duration.d.ts.map +1 -0
  57. package/cjs/utils/duration.js +93 -0
  58. package/cjs/utils/duration.js.map +1 -0
  59. package/cjs/utils/index.d.ts +3 -0
  60. package/cjs/utils/index.d.ts.map +1 -0
  61. package/esm/commands/auth-cleanup-command.d.ts +10 -0
  62. package/esm/commands/auth-cleanup-command.d.ts.map +1 -0
  63. package/esm/commands/auth-cleanup-command.js +29 -0
  64. package/esm/commands/auth-cleanup-command.js.map +1 -0
  65. package/esm/commands/jwt-secret-generator-command.d.ts.map +1 -1
  66. package/esm/commands/jwt-secret-generator-command.js +5 -1
  67. package/esm/commands/jwt-secret-generator-command.js.map +1 -1
  68. package/esm/contracts/types.d.ts +100 -1
  69. package/esm/contracts/types.d.ts.map +1 -1
  70. package/esm/contracts/types.js +20 -0
  71. package/esm/contracts/types.js.map +1 -0
  72. package/esm/index.d.ts +2 -1
  73. package/esm/index.d.ts.map +1 -1
  74. package/esm/index.js +1 -1
  75. package/esm/middleware/auth.middleware.d.ts.map +1 -1
  76. package/esm/middleware/auth.middleware.js +14 -37
  77. package/esm/middleware/auth.middleware.js.map +1 -1
  78. package/esm/models/auth.d.ts +24 -2
  79. package/esm/models/auth.d.ts.map +1 -1
  80. package/esm/models/auth.js +38 -39
  81. package/esm/models/auth.js.map +1 -1
  82. package/esm/models/casts/cast-password.d.ts.map +1 -1
  83. package/esm/models/casts/cast-password.js +2 -2
  84. package/esm/models/casts/cast-password.js.map +1 -1
  85. package/esm/models/index.d.ts +1 -1
  86. package/esm/models/index.d.ts.map +1 -1
  87. package/esm/models/refresh-token/index.d.ts +2 -0
  88. package/esm/models/refresh-token/index.d.ts.map +1 -0
  89. package/esm/models/refresh-token/migration.d.ts.map +1 -0
  90. package/esm/models/refresh-token/refresh-token.d.ts +32 -0
  91. package/esm/models/refresh-token/refresh-token.d.ts.map +1 -0
  92. package/esm/models/refresh-token/refresh-token.js +52 -0
  93. package/esm/models/refresh-token/refresh-token.js.map +1 -0
  94. package/esm/services/auth-events.d.ts +84 -0
  95. package/esm/services/auth-events.d.ts.map +1 -0
  96. package/esm/services/auth-events.js +65 -0
  97. package/esm/services/auth-events.js.map +1 -0
  98. package/esm/services/auth.service.d.ts +78 -0
  99. package/esm/services/auth.service.d.ts.map +1 -0
  100. package/esm/services/auth.service.js +265 -0
  101. package/esm/services/auth.service.js.map +1 -0
  102. package/esm/services/generate-jwt-secret.d.ts.map +1 -1
  103. package/esm/services/generate-jwt-secret.js +5 -5
  104. package/esm/services/generate-jwt-secret.js.map +1 -1
  105. package/esm/services/index.d.ts +2 -1
  106. package/esm/services/index.d.ts.map +1 -1
  107. package/esm/services/jwt.d.ts +2 -2
  108. package/esm/services/jwt.d.ts.map +1 -1
  109. package/esm/services/jwt.js +4 -4
  110. package/esm/services/jwt.js.map +1 -1
  111. package/esm/utils/auth-error-codes.d.ts +18 -0
  112. package/esm/utils/auth-error-codes.d.ts.map +1 -0
  113. package/esm/utils/auth-error-codes.js +18 -0
  114. package/esm/utils/auth-error-codes.js.map +1 -0
  115. package/esm/utils/duration.d.ts +45 -0
  116. package/esm/utils/duration.d.ts.map +1 -0
  117. package/esm/utils/duration.js +93 -0
  118. package/esm/utils/duration.js.map +1 -0
  119. package/esm/utils/index.d.ts +3 -0
  120. package/esm/utils/index.d.ts.map +1 -0
  121. package/package.json +12 -9
  122. package/cjs/commands/index.d.ts +0 -2
  123. package/cjs/commands/index.d.ts.map +0 -1
  124. package/cjs/controllers/guest-login.d.ts +0 -3
  125. package/cjs/controllers/guest-login.d.ts.map +0 -1
  126. package/cjs/controllers/guest-login.js +0 -5
  127. package/cjs/controllers/guest-login.js.map +0 -1
  128. package/cjs/controllers/index.d.ts +0 -2
  129. package/cjs/controllers/index.d.ts.map +0 -1
  130. package/cjs/middleware/auth-middleware.d.ts +0 -2
  131. package/cjs/middleware/auth-middleware.d.ts.map +0 -1
  132. package/cjs/models/guest/guest.d.ts +0 -26
  133. package/cjs/models/guest/guest.d.ts.map +0 -1
  134. package/cjs/models/guest/guest.js +0 -39
  135. package/cjs/models/guest/guest.js.map +0 -1
  136. package/cjs/models/guest/index.d.ts +0 -3
  137. package/cjs/models/guest/index.d.ts.map +0 -1
  138. package/cjs/models/guest/migration.d.ts.map +0 -1
  139. package/cjs/models/guest/migration.js +0 -10
  140. package/cjs/models/guest/migration.js.map +0 -1
  141. package/cjs/services/generate-guest-token.d.ts +0 -2
  142. package/cjs/services/generate-guest-token.d.ts.map +0 -1
  143. package/cjs/services/generate-guest-token.js +0 -11
  144. package/cjs/services/generate-guest-token.js.map +0 -1
  145. package/esm/commands/index.d.ts +0 -2
  146. package/esm/commands/index.d.ts.map +0 -1
  147. package/esm/controllers/guest-login.d.ts +0 -3
  148. package/esm/controllers/guest-login.d.ts.map +0 -1
  149. package/esm/controllers/guest-login.js +0 -5
  150. package/esm/controllers/guest-login.js.map +0 -1
  151. package/esm/controllers/index.d.ts +0 -2
  152. package/esm/controllers/index.d.ts.map +0 -1
  153. package/esm/middleware/auth-middleware.d.ts +0 -2
  154. package/esm/middleware/auth-middleware.d.ts.map +0 -1
  155. package/esm/models/guest/guest.d.ts +0 -26
  156. package/esm/models/guest/guest.d.ts.map +0 -1
  157. package/esm/models/guest/guest.js +0 -39
  158. package/esm/models/guest/guest.js.map +0 -1
  159. package/esm/models/guest/index.d.ts +0 -3
  160. package/esm/models/guest/index.d.ts.map +0 -1
  161. package/esm/models/guest/migration.d.ts.map +0 -1
  162. package/esm/models/guest/migration.js +0 -10
  163. package/esm/models/guest/migration.js.map +0 -1
  164. package/esm/services/generate-guest-token.d.ts +0 -2
  165. package/esm/services/generate-guest-token.d.ts.map +0 -1
  166. package/esm/services/generate-guest-token.js +0 -11
  167. package/esm/services/generate-guest-token.js.map +0 -1
  168. /package/cjs/models/{guest → refresh-token}/migration.d.ts +0 -0
  169. /package/esm/models/{guest → refresh-token}/migration.d.ts +0 -0
@@ -1,18 +1,40 @@
1
1
  import type { ChildModel } from "@warlock.js/cascade";
2
2
  import { Model } from "@warlock.js/cascade";
3
+ import type { DeviceInfo, TokenPair } from "../contracts/types";
4
+ import type { RefreshToken } from "./refresh-token/refresh-token";
3
5
  export declare abstract class Auth extends Model {
4
6
  /**
5
7
  * Get user type
6
8
  */
7
9
  abstract get userType(): string;
8
10
  /**
9
- * Generate jwt token
11
+ * Get access token payload
12
+ */
13
+ accessTokenPayload(): any;
14
+ /**
15
+ * Create both access and refresh tokens
16
+ */
17
+ createTokenPair(deviceInfo?: DeviceInfo): Promise<TokenPair>;
18
+ /**
19
+ * Generate access token
10
20
  */
11
21
  generateAccessToken(data?: any): Promise<string>;
22
+ /**
23
+ * Generate refresh token
24
+ */
25
+ generateRefreshToken(deviceInfo?: DeviceInfo): Promise<RefreshToken>;
12
26
  /**
13
27
  * Remove current access token
14
28
  */
15
29
  removeAccessToken(token: string): Promise<void>;
30
+ /**
31
+ * Revoke all tokens (logout from all devices)
32
+ */
33
+ revokeAllTokens(): Promise<void>;
34
+ /**
35
+ * Get active sessions
36
+ */
37
+ activeSessions(): Promise<RefreshToken[]>;
16
38
  /**
17
39
  * Attempt to login the user
18
40
  */
@@ -20,6 +42,6 @@ export declare abstract class Auth extends Model {
20
42
  /**
21
43
  * Confirm password
22
44
  */
23
- confirmPassword(password: string): any;
45
+ confirmPassword(password: string): boolean;
24
46
  }
25
47
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/models/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAI5C,8BAAsB,IAAK,SAAQ,KAAK;IACtC;;OAEG;IACH,aAAoB,QAAQ,IAAI,MAAM,CAAC;IAEvC;;OAEG;IACU,mBAAmB,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IA2B7D;;OAEG;IACU,iBAAiB,CAAC,KAAK,EAAE,MAAM;IAO5C;;OAEG;WACiB,OAAO,CAAC,CAAC,EAC3B,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EACnB,IAAI,EAAE,GAAG,GACR,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAkBpB;;OAEG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM;CAGxC"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/models/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,8BAAsB,IAAK,SAAQ,KAAK;IACtC;;OAEG;IACH,aAAoB,QAAQ,IAAI,MAAM,CAAC;IAEvC;;OAEG;IACI,kBAAkB;IAMzB;;OAEG;IACU,eAAe,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAIzE;;OAEG;IACU,mBAAmB,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7D;;OAEG;IACU,oBAAoB,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAIjF;;OAEG;IACU,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D;;OAEG;IACU,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7C;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAItD;;OAEG;WACiB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAIjF;;OAEG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAGlD"}
@@ -1,59 +1,58 @@
1
- import {verify}from'@mongez/password';import {Model}from'@warlock.js/cascade';import {jwt}from'../services/jwt.js';import {AccessToken}from'./access-token/access-token.js';import'./access-token/migration.js';class Auth extends Model {
1
+ import {Model}from'@warlock.js/cascade';import'@mongez/events';import {authService}from'../services/auth.service.js';import'@mongez/fs';import'@mongez/reinforcements';import'@warlock.js/core';import'@warlock.js/logger';import'fast-jwt';class Auth extends Model {
2
2
  /**
3
- * Generate jwt token
3
+ * Get access token payload
4
+ */
5
+ accessTokenPayload() {
6
+ // Dynamically import to avoid circular dependency
7
+ const { authService } = require("../services/auth.service");
8
+ return authService.buildAccessTokenPayload(this);
9
+ }
10
+ /**
11
+ * Create both access and refresh tokens
12
+ */
13
+ async createTokenPair(deviceInfo) {
14
+ return authService.createTokenPair(this, deviceInfo);
15
+ }
16
+ /**
17
+ * Generate access token
4
18
  */
5
19
  async generateAccessToken(data) {
6
- // store the main data in the data object
7
- // we need to store the user data in an object
8
- // that we'll sue to generate the token
9
- // and also it will be saved in the Access Token model under `user` column
10
- if (!data) {
11
- data = {
12
- ...this.only(["id", "_id"]),
13
- userType: this.userType,
14
- createdAt: Date.now(),
15
- };
16
- }
17
- // use our own jwt generator to generate a token for the guest
18
- const token = await jwt.generate(data);
19
- // store token and the auth model data in the access token model
20
- // note that we didn't make it sync because we don't want to wait for the token to be stored in the database
21
- // as nothing depends on it
22
- AccessToken.create({
23
- token,
24
- user: data,
25
- });
26
- return token;
20
+ return authService.generateAccessToken(this, data);
21
+ }
22
+ /**
23
+ * Generate refresh token
24
+ */
25
+ async generateRefreshToken(deviceInfo) {
26
+ return authService.createRefreshToken(this, deviceInfo);
27
27
  }
28
28
  /**
29
29
  * Remove current access token
30
30
  */
31
31
  async removeAccessToken(token) {
32
- AccessToken.delete({
33
- token: token,
34
- "user.id": this.id,
35
- });
32
+ return authService.removeAccessToken(this, token);
33
+ }
34
+ /**
35
+ * Revoke all tokens (logout from all devices)
36
+ */
37
+ async revokeAllTokens() {
38
+ return authService.revokeAllTokens(this);
39
+ }
40
+ /**
41
+ * Get active sessions
42
+ */
43
+ async activeSessions() {
44
+ return authService.getActiveSessions(this);
36
45
  }
37
46
  /**
38
47
  * Attempt to login the user
39
48
  */
40
49
  static async attempt(data) {
41
- // find first user with the given data, but exclude from it the password
42
- const { password, ...otherData } = data;
43
- const user = (await this.first(otherData));
44
- if (!user) {
45
- return null;
46
- }
47
- // now verify the password
48
- if (!user.confirmPassword(password)) {
49
- return null;
50
- }
51
- return user;
50
+ return authService.attemptLogin(this, data);
52
51
  }
53
52
  /**
54
53
  * Confirm password
55
54
  */
56
55
  confirmPassword(password) {
57
- return verify(String(this.get("password")), String(password));
56
+ return authService.verifyPassword(this.get("password"), password);
58
57
  }
59
58
  }export{Auth};//# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sources":["../../src/models/auth.ts"],"sourcesContent":[null],"names":[],"mappings":"gNAMM,MAAgB,IAAK,SAAQ,KAAK,CAAA;AAMtC;;AAEG;IACI,MAAM,mBAAmB,CAAC,IAAU,EAAA;;;;;QAKzC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,IAAI,GAAG;gBACL,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,gBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;AACH,SAAA;;QAGD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;;;QAKvC,WAAW,CAAC,MAAM,CAAC;YACjB,KAAK;AACL,YAAA,IAAI,EAAE,IAAI;AACX,SAAA,CAAC,CAAC;AAEH,QAAA,OAAO,KAAK,CAAC;KACd;AAED;;AAEG;IACI,MAAM,iBAAiB,CAAC,KAAa,EAAA;QAC1C,WAAW,CAAC,MAAM,CAAC;AACjB,YAAA,KAAK,EAAE,KAAK;YACZ,SAAS,EAAE,IAAI,CAAC,EAAE;AACnB,SAAA,CAAC,CAAC;KACJ;AAED;;AAEG;AACI,IAAA,aAAa,OAAO,CAEzB,IAAS,EAAA;;QAGT,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC;QAExC,MAAM,IAAI,IAAI,MAAM,IAAI,CAAC,KAAK,CAAI,SAAS,CAAC,CAAgB,CAAC;QAE7D,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;AACnC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,OAAO,IAAS,CAAC;KAClB;AAED;;AAEG;AACI,IAAA,eAAe,CAAC,QAAgB,EAAA;AACrC,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC/D;AACF"}
1
+ {"version":3,"file":"auth.js","sources":["../../src/models/auth.ts"],"sourcesContent":[null],"names":[],"mappings":"4OAMM,MAAgB,IAAK,SAAQ,KAAK,CAAA;AAMtC;;AAEG;IACI,kBAAkB,GAAA;;QAEvB,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAC5D,QAAA,OAAO,WAAW,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;KAClD;AAED;;AAEG;IACI,MAAM,eAAe,CAAC,UAAuB,EAAA;QAClD,OAAO,WAAW,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;KACtD;AAED;;AAEG;IACI,MAAM,mBAAmB,CAAC,IAAU,EAAA;QACzC,OAAO,WAAW,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACpD;AAED;;AAEG;IACI,MAAM,oBAAoB,CAAC,UAAuB,EAAA;QACvD,OAAO,WAAW,CAAC,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;KACzD;AAED;;AAEG;IACI,MAAM,iBAAiB,CAAC,KAAa,EAAA;QAC1C,OAAO,WAAW,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACnD;AAED;;AAEG;AACI,IAAA,MAAM,eAAe,GAAA;AAC1B,QAAA,OAAO,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KAC1C;AAED;;AAEG;AACI,IAAA,MAAM,cAAc,GAAA;AACzB,QAAA,OAAO,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;KAC5C;AAED;;AAEG;AACI,IAAA,aAAa,OAAO,CAAyB,IAAS,EAAA;QAC3D,OAAO,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KAC7C;AAED;;AAEG;AACI,IAAA,eAAe,CAAC,QAAgB,EAAA;AACrC,QAAA,OAAO,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;KACnE;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"cast-password.d.ts","sourceRoot":"","sources":["../../../src/models/casts/cast-password.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,OAIpE"}
1
+ {"version":3,"file":"cast-password.d.ts","sourceRoot":"","sources":["../../../src/models/casts/cast-password.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAGjD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,OAIpE"}
@@ -1,9 +1,9 @@
1
- import config from'@mongez/config';import {hash}from'@mongez/password';/**
1
+ import {hash}from'@mongez/password';import {config}from'@warlock.js/core';/**
2
2
  * Cast password on model save
3
3
  * If the password is not changed, keep it as is
4
4
  */
5
5
  function castPassword(value, column, model) {
6
6
  return value
7
- ? hash(String(value), config.get("auth.password.salt", 12))
7
+ ? hash(String(value), config.key("auth.password.salt", 12))
8
8
  : model.getInitial(column);
9
9
  }export{castPassword};//# sourceMappingURL=cast-password.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cast-password.js","sources":["../../../src/models/casts/cast-password.ts"],"sourcesContent":[null],"names":[],"mappings":"uEAIA;;;AAGG;SACa,YAAY,CAAC,KAAU,EAAE,MAAc,EAAE,KAAY,EAAA;AACnE,IAAA,OAAO,KAAK;AACV,UAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;AAC3D,UAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC/B"}
1
+ {"version":3,"file":"cast-password.js","sources":["../../../src/models/casts/cast-password.ts"],"sourcesContent":[null],"names":[],"mappings":"0EAIA;;;AAGG;SACa,YAAY,CAAC,KAAU,EAAE,MAAc,EAAE,KAAY,EAAA;AACnE,IAAA,OAAO,KAAK;AACV,UAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;AAC3D,UAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC/B"}
@@ -1,5 +1,5 @@
1
1
  export * from "./access-token";
2
2
  export * from "./auth";
3
3
  export * from "./casts";
4
- export * from "./guest";
4
+ export * from "./refresh-token";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./refresh-token";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/models/refresh-token/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../../src/models/refresh-token/migration.ts"],"names":[],"mappings":";AAGA,wBAeG"}
@@ -0,0 +1,32 @@
1
+ import { Model, type Casts } from "@warlock.js/cascade";
2
+ export declare class RefreshToken extends Model {
3
+ /**
4
+ * {@inheritDoc}
5
+ */
6
+ static collection: string;
7
+ /**
8
+ * {@inheritDoc}
9
+ */
10
+ protected casts: Casts;
11
+ /**
12
+ * Check if token is expired
13
+ */
14
+ get isExpired(): boolean;
15
+ /**
16
+ * Check if token is revoked
17
+ */
18
+ get isRevoked(): boolean;
19
+ /**
20
+ * Check if token is valid (not expired and not revoked)
21
+ */
22
+ get isValid(): boolean;
23
+ /**
24
+ * Revoke this token
25
+ */
26
+ revoke(): Promise<this>;
27
+ /**
28
+ * Mark token as used (update lastUsedAt)
29
+ */
30
+ markAsUsed(): Promise<void>;
31
+ }
32
+ //# sourceMappingURL=refresh-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh-token.d.ts","sourceRoot":"","sources":["../../../src/models/refresh-token/refresh-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAa,YAAa,SAAQ,KAAK;IACrC;;OAEG;IACH,OAAc,UAAU,SAAmB;IAE3C;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,CASpB;IAEF;;OAEG;IACH,IAAW,SAAS,IAAI,OAAO,CAI9B;IAED;;OAEG;IACH,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,OAAO,CAE5B;IAED;;OAEG;IACU,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGzC"}
@@ -0,0 +1,52 @@
1
+ import {Model}from'@warlock.js/cascade';class RefreshToken extends Model {
2
+ /**
3
+ * {@inheritDoc}
4
+ */
5
+ static collection = "refreshTokens";
6
+ /**
7
+ * {@inheritDoc}
8
+ */
9
+ casts = {
10
+ token: "string",
11
+ userId: "int",
12
+ userType: "string",
13
+ familyId: "string",
14
+ expiresAt: "date",
15
+ lastUsedAt: "date",
16
+ revokedAt: "date",
17
+ deviceInfo: "object",
18
+ };
19
+ /**
20
+ * Check if token is expired
21
+ */
22
+ get isExpired() {
23
+ const expiresAt = this.get("expiresAt");
24
+ if (!expiresAt)
25
+ return false;
26
+ return new Date() > new Date(expiresAt);
27
+ }
28
+ /**
29
+ * Check if token is revoked
30
+ */
31
+ get isRevoked() {
32
+ return !!this.get("revokedAt");
33
+ }
34
+ /**
35
+ * Check if token is valid (not expired and not revoked)
36
+ */
37
+ get isValid() {
38
+ return !this.isExpired && !this.isRevoked;
39
+ }
40
+ /**
41
+ * Revoke this token
42
+ */
43
+ async revoke() {
44
+ return this.save({ revokedAt: new Date() });
45
+ }
46
+ /**
47
+ * Mark token as used (update lastUsedAt)
48
+ */
49
+ async markAsUsed() {
50
+ this.silentSaving({ lastUsedAt: new Date() });
51
+ }
52
+ }export{RefreshToken};//# sourceMappingURL=refresh-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh-token.js","sources":["../../../src/models/refresh-token/refresh-token.ts"],"sourcesContent":[null],"names":[],"mappings":"wCAEM,MAAO,YAAa,SAAQ,KAAK,CAAA;AACrC;;AAEG;AACI,IAAA,OAAO,UAAU,GAAG,eAAe,CAAC;AAE3C;;AAEG;AACO,IAAA,KAAK,GAAU;AACvB,QAAA,KAAK,EAAE,QAAQ;AACf,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,UAAU,EAAE,QAAQ;KACrB,CAAC;AAEF;;AAEG;AACH,IAAA,IAAW,SAAS,GAAA;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,KAAK,CAAC;QAC7B,OAAO,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;KACzC;AAED;;AAEG;AACH,IAAA,IAAW,SAAS,GAAA;QAClB,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;KAChC;AAED;;AAEG;AACH,IAAA,IAAW,OAAO,GAAA;QAChB,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;KAC3C;AAED;;AAEG;AACI,IAAA,MAAM,MAAM,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;KAC7C;AAED;;AAEG;AACI,IAAA,MAAM,UAAU,GAAA;QACrB,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;KAC/C;"}
@@ -0,0 +1,84 @@
1
+ import { type EventSubscription } from "@mongez/events";
2
+ import type { DeviceInfo, TokenPair } from "../contracts/types";
3
+ import type { Auth } from "../models/auth";
4
+ import type { RefreshToken } from "../models/refresh-token";
5
+ /**
6
+ * Auth event payload types
7
+ */
8
+ export type AuthEventPayloads = {
9
+ "login.success": [user: Auth, tokenPair: TokenPair, deviceInfo?: DeviceInfo];
10
+ "login.failed": [credentials: {
11
+ email?: string;
12
+ username?: string;
13
+ }, reason: string];
14
+ "login.attempt": [credentials: {
15
+ email?: string;
16
+ username?: string;
17
+ }];
18
+ logout: [user: Auth];
19
+ "logout.all": [user: Auth];
20
+ "token.created": [user: Auth, tokenPair: TokenPair];
21
+ "token.refreshed": [user: Auth, newTokenPair: TokenPair, oldRefreshToken: RefreshToken];
22
+ "token.revoked": [user: Auth, token: RefreshToken];
23
+ "token.expired": [token: RefreshToken];
24
+ "token.familyRevoked": [familyId: string, tokens: RefreshToken[]];
25
+ "password.changed": [user: Auth];
26
+ "password.resetRequested": [user: Auth, resetToken: string];
27
+ "password.reset": [user: Auth];
28
+ "session.created": [user: Auth, refreshToken: RefreshToken, deviceInfo?: DeviceInfo];
29
+ "session.destroyed": [user: Auth, refreshToken: RefreshToken];
30
+ "cleanup.completed": [expiredCount: number];
31
+ };
32
+ /**
33
+ * Auth event names
34
+ */
35
+ export type AuthEventName = keyof AuthEventPayloads;
36
+ /**
37
+ * Callback type for a specific event
38
+ */
39
+ export type AuthEventCallback<T extends AuthEventName> = (...args: AuthEventPayloads[T]) => void | Promise<void>;
40
+ /**
41
+ * Type-safe auth events manager
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * // Subscribe to events with full autocomplete
46
+ * authEvents.on("login.success", (user, tokenPair, deviceInfo) => {
47
+ * console.log(`User ${user.id} logged in`);
48
+ * });
49
+ *
50
+ * authEvents.on("token.refreshed", (user, newPair, oldToken) => {
51
+ * console.log(`Token refreshed for user ${user.id}`);
52
+ * });
53
+ *
54
+ * // Trigger events
55
+ * authEvents.emit("login.success", user, tokenPair, deviceInfo);
56
+ * ```
57
+ */
58
+ export declare const authEvents: {
59
+ /**
60
+ * Subscribe to an auth event
61
+ */
62
+ on<T extends keyof AuthEventPayloads>(event: T, callback: AuthEventCallback<T>): EventSubscription;
63
+ /**
64
+ * Subscribe to an auth event (alias for `on`)
65
+ */
66
+ subscribe<T_1 extends keyof AuthEventPayloads>(event: T_1, callback: AuthEventCallback<T_1>): EventSubscription;
67
+ /**
68
+ * Emit an auth event
69
+ */
70
+ emit<T_2 extends keyof AuthEventPayloads>(event: T_2, ...args: AuthEventPayloads[T_2]): void;
71
+ /**
72
+ * Emit an auth event (alias for `emit`)
73
+ */
74
+ trigger<T_3 extends keyof AuthEventPayloads>(event: T_3, ...args: AuthEventPayloads[T_3]): void;
75
+ /**
76
+ * Unsubscribe from all auth events
77
+ */
78
+ unsubscribeAll(): void;
79
+ /**
80
+ * Unsubscribe from a specific auth event
81
+ */
82
+ off(event?: AuthEventName): void;
83
+ };
84
+ //# sourceMappingURL=auth-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-events.d.ts","sourceRoot":"","sources":["../../src/services/auth-events.ts"],"names":[],"mappings":"AAAA,OAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAE9B,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7E,cAAc,EAAE,CAAC,WAAW,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACrF,eAAe,EAAE,CAAC,WAAW,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAGtE,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACrB,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAG3B,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACpD,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;IACxF,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IACnD,eAAe,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACvC,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAGlE,kBAAkB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,yBAAyB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC5D,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAG/B,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;IACrF,mBAAmB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IAG9D,mBAAmB,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;CAC7C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,aAAa,IAAI,CACvD,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAC1B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAO1B;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,UAAU;IACrB;;OAEG;qFACoE,iBAAiB;IAIxF;;OAEG;kGAC2E,iBAAiB;IAI/F;;OAEG;4FACqE,IAAI;IAI5E;;OAEG;+FACwE,IAAI;IAI/E;;OAEG;sBACe,IAAI;IAItB;;OAEG;gBACS,aAAa,GAAG,IAAI;CAOjC,CAAC"}
@@ -0,0 +1,65 @@
1
+ import events from'@mongez/events';/**
2
+ * Event namespace prefix for auth events
3
+ */
4
+ const AUTH_EVENT_PREFIX = "auth.";
5
+ /**
6
+ * Type-safe auth events manager
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * // Subscribe to events with full autocomplete
11
+ * authEvents.on("login.success", (user, tokenPair, deviceInfo) => {
12
+ * console.log(`User ${user.id} logged in`);
13
+ * });
14
+ *
15
+ * authEvents.on("token.refreshed", (user, newPair, oldToken) => {
16
+ * console.log(`Token refreshed for user ${user.id}`);
17
+ * });
18
+ *
19
+ * // Trigger events
20
+ * authEvents.emit("login.success", user, tokenPair, deviceInfo);
21
+ * ```
22
+ */
23
+ const authEvents = {
24
+ /**
25
+ * Subscribe to an auth event
26
+ */
27
+ on(event, callback) {
28
+ return events.subscribe(AUTH_EVENT_PREFIX + event, callback);
29
+ },
30
+ /**
31
+ * Subscribe to an auth event (alias for `on`)
32
+ */
33
+ subscribe(event, callback) {
34
+ return this.on(event, callback);
35
+ },
36
+ /**
37
+ * Emit an auth event
38
+ */
39
+ emit(event, ...args) {
40
+ events.trigger(AUTH_EVENT_PREFIX + event, ...args);
41
+ },
42
+ /**
43
+ * Emit an auth event (alias for `emit`)
44
+ */
45
+ trigger(event, ...args) {
46
+ this.emit(event, ...args);
47
+ },
48
+ /**
49
+ * Unsubscribe from all auth events
50
+ */
51
+ unsubscribeAll() {
52
+ events.unsubscribeNamespace(AUTH_EVENT_PREFIX.slice(0, -1));
53
+ },
54
+ /**
55
+ * Unsubscribe from a specific auth event
56
+ */
57
+ off(event) {
58
+ if (event) {
59
+ events.unsubscribe(AUTH_EVENT_PREFIX + event);
60
+ }
61
+ else {
62
+ this.unsubscribeAll();
63
+ }
64
+ },
65
+ };export{authEvents};//# sourceMappingURL=auth-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-events.js","sources":["../../src/services/auth-events.ts"],"sourcesContent":[null],"names":[],"mappings":"mCAkDA;;AAEG;AACH,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAElC;;;;;;;;;;;;;;;;;AAiBG;AACU,MAAA,UAAU,GAAG;AACxB;;AAEG;IACH,EAAE,CAA0B,KAAQ,EAAE,QAA8B,EAAA;QAClE,OAAO,MAAM,CAAC,SAAS,CAAC,iBAAiB,GAAG,KAAK,EAAE,QAAoB,CAAC,CAAC;KAC1E;AAED;;AAEG;IACH,SAAS,CAA0B,KAAQ,EAAE,QAA8B,EAAA;QACzE,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;KACjC;AAED;;AAEG;AACH,IAAA,IAAI,CAA0B,KAAQ,EAAE,GAAG,IAA0B,EAAA;QACnE,MAAM,CAAC,OAAO,CAAC,iBAAiB,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;KACpD;AAED;;AAEG;AACH,IAAA,OAAO,CAA0B,KAAQ,EAAE,GAAG,IAA0B,EAAA;QACtE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;KAC3B;AAED;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,MAAM,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAC7D;AAED;;AAEG;AACH,IAAA,GAAG,CAAC,KAAqB,EAAA;AACvB,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,MAAM,CAAC,WAAW,CAAC,iBAAiB,GAAG,KAAK,CAAC,CAAC;AAC/C,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,SAAA;KACF;"}
@@ -0,0 +1,78 @@
1
+ import type { ChildModel } from "@warlock.js/cascade";
2
+ import type { DeviceInfo, TokenPair } from "../contracts/types";
3
+ import type { Auth } from "../models/auth";
4
+ import { RefreshToken } from "../models/refresh-token";
5
+ declare class AuthService {
6
+ /**
7
+ * Build access token payload from user
8
+ */
9
+ buildAccessTokenPayload(user: Auth): {
10
+ id: any;
11
+ _id: any;
12
+ userType: string;
13
+ createdAt: number;
14
+ };
15
+ /**
16
+ * Generate access token for user
17
+ */
18
+ generateAccessToken(user: Auth, payload?: any): Promise<string>;
19
+ /**
20
+ * Create refresh token for user
21
+ */
22
+ createRefreshToken(user: Auth, deviceInfo?: DeviceInfo): Promise<RefreshToken>;
23
+ /**
24
+ * Create both access and refresh tokens
25
+ */
26
+ createTokenPair(user: Auth, deviceInfo?: DeviceInfo): Promise<TokenPair>;
27
+ /**
28
+ * Refresh tokens using a refresh token
29
+ */
30
+ refreshTokens(refreshTokenString: string, deviceInfo?: DeviceInfo): Promise<TokenPair | null>;
31
+ /**
32
+ * Verify password
33
+ */
34
+ verifyPassword(hashedPassword: string, plainPassword: string): boolean;
35
+ /**
36
+ * Attempt to login user with given credentials
37
+ */
38
+ attemptLogin<T>(Model: ChildModel<T>, data: any): Promise<T | null>;
39
+ /**
40
+ * Full login flow: validate credentials, create tokens, emit events
41
+ * Returns token pair on success, null on failure
42
+ */
43
+ login<T extends Auth>(Model: ChildModel<T>, credentials: any, deviceInfo?: DeviceInfo): Promise<{
44
+ user: T;
45
+ tokens: TokenPair;
46
+ } | null>;
47
+ /**
48
+ * Logout user (revoke specific refresh token)
49
+ */
50
+ logout(user: Auth, refreshToken?: RefreshToken): Promise<void>;
51
+ /**
52
+ * Remove specific access token
53
+ */
54
+ removeAccessToken(user: Auth, token: string): Promise<void>;
55
+ /**
56
+ * Revoke all tokens for a user
57
+ */
58
+ revokeAllTokens(user: Auth): Promise<void>;
59
+ /**
60
+ * Revoke entire token family (for rotation breach detection)
61
+ */
62
+ revokeTokenFamily(familyId: string): Promise<void>;
63
+ /**
64
+ * Cleanup expired tokens
65
+ */
66
+ cleanupExpiredTokens(): Promise<number>;
67
+ /**
68
+ * Enforce max refresh tokens per user
69
+ */
70
+ private enforceMaxRefreshTokens;
71
+ /**
72
+ * Get active sessions for user
73
+ */
74
+ getActiveSessions(user: Auth): Promise<RefreshToken[]>;
75
+ }
76
+ export declare const authService: AuthService;
77
+ export {};
78
+ //# sourceMappingURL=auth.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../src/services/auth.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEhE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAKvD,cAAM,WAAW;IACf;;OAEG;IACI,uBAAuB,CAAC,IAAI,EAAE,IAAI;;;;;;IASzC;;OAEG;IACU,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAiB5E;;OAEG;IACU,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAsC3F;;OAEG;IACU,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAiBrF;;OAEG;IACU,aAAa,CACxB,kBAAkB,EAAE,MAAM,EAC1B,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAoD5B;;OAEG;IACI,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO;IAI7E;;OAEG;IACU,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAqBhF;;;OAGG;IACU,KAAK,CAAC,CAAC,SAAS,IAAI,EAC/B,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EACpB,WAAW,EAAE,GAAG,EAChB,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE,GAAG,IAAI,CAAC;IAejD;;OAEG;IACU,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3E;;OAEG;IACU,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxE;;OAEG;IACU,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBvD;;OAEG;IACU,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/D;;OAEG;IACU,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAcpD;;OAEG;YACW,uBAAuB;IAmBrC;;OAEG;IACU,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CASpE;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}