@warlock.js/auth 4.0.30 → 4.0.39

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/index.js +8 -1
  2. package/cjs/index.js.map +1 -1
  3. package/esm/index.js +8 -1
  4. package/esm/index.js.map +1 -1
  5. package/package.json +48 -34
  6. package/cjs/commands/auth-cleanup-command.d.ts +0 -10
  7. package/cjs/commands/auth-cleanup-command.d.ts.map +0 -1
  8. package/cjs/commands/auth-cleanup-command.js +0 -29
  9. package/cjs/commands/auth-cleanup-command.js.map +0 -1
  10. package/cjs/commands/jwt-secret-generator-command.d.ts +0 -2
  11. package/cjs/commands/jwt-secret-generator-command.d.ts.map +0 -1
  12. package/cjs/commands/jwt-secret-generator-command.js +0 -7
  13. package/cjs/commands/jwt-secret-generator-command.js.map +0 -1
  14. package/cjs/contracts/auth-contract.d.ts +0 -23
  15. package/cjs/contracts/auth-contract.d.ts.map +0 -1
  16. package/cjs/contracts/index.d.ts +0 -3
  17. package/cjs/contracts/index.d.ts.map +0 -1
  18. package/cjs/contracts/types.d.ts +0 -134
  19. package/cjs/contracts/types.d.ts.map +0 -1
  20. package/cjs/contracts/types.js +0 -20
  21. package/cjs/contracts/types.js.map +0 -1
  22. package/cjs/index.d.ts +0 -8
  23. package/cjs/index.d.ts.map +0 -1
  24. package/cjs/middleware/auth.middleware.d.ts +0 -2
  25. package/cjs/middleware/auth.middleware.d.ts.map +0 -1
  26. package/cjs/middleware/auth.middleware.js +0 -73
  27. package/cjs/middleware/auth.middleware.js.map +0 -1
  28. package/cjs/middleware/index.d.ts +0 -2
  29. package/cjs/middleware/index.d.ts.map +0 -1
  30. package/cjs/models/access-token/access-token.d.ts +0 -12
  31. package/cjs/models/access-token/access-token.d.ts.map +0 -1
  32. package/cjs/models/access-token/access-token.js +0 -16
  33. package/cjs/models/access-token/access-token.js.map +0 -1
  34. package/cjs/models/access-token/index.d.ts +0 -3
  35. package/cjs/models/access-token/index.d.ts.map +0 -1
  36. package/cjs/models/access-token/migration.d.ts +0 -3
  37. package/cjs/models/access-token/migration.d.ts.map +0 -1
  38. package/cjs/models/access-token/migration.js +0 -10
  39. package/cjs/models/access-token/migration.js.map +0 -1
  40. package/cjs/models/auth.d.ts +0 -47
  41. package/cjs/models/auth.d.ts.map +0 -1
  42. package/cjs/models/auth.js +0 -58
  43. package/cjs/models/auth.js.map +0 -1
  44. package/cjs/models/casts/cast-password.d.ts +0 -7
  45. package/cjs/models/casts/cast-password.d.ts.map +0 -1
  46. package/cjs/models/casts/cast-password.js +0 -9
  47. package/cjs/models/casts/cast-password.js.map +0 -1
  48. package/cjs/models/casts/index.d.ts +0 -2
  49. package/cjs/models/casts/index.d.ts.map +0 -1
  50. package/cjs/models/index.d.ts +0 -5
  51. package/cjs/models/index.d.ts.map +0 -1
  52. package/cjs/models/refresh-token/index.d.ts +0 -2
  53. package/cjs/models/refresh-token/index.d.ts.map +0 -1
  54. package/cjs/models/refresh-token/migration.d.ts +0 -3
  55. package/cjs/models/refresh-token/migration.d.ts.map +0 -1
  56. package/cjs/models/refresh-token/refresh-token.d.ts +0 -32
  57. package/cjs/models/refresh-token/refresh-token.d.ts.map +0 -1
  58. package/cjs/models/refresh-token/refresh-token.js +0 -52
  59. package/cjs/models/refresh-token/refresh-token.js.map +0 -1
  60. package/cjs/services/auth-events.d.ts +0 -84
  61. package/cjs/services/auth-events.d.ts.map +0 -1
  62. package/cjs/services/auth-events.js +0 -65
  63. package/cjs/services/auth-events.js.map +0 -1
  64. package/cjs/services/auth.service.d.ts +0 -78
  65. package/cjs/services/auth.service.d.ts.map +0 -1
  66. package/cjs/services/auth.service.js +0 -265
  67. package/cjs/services/auth.service.js.map +0 -1
  68. package/cjs/services/generate-jwt-secret.d.ts +0 -2
  69. package/cjs/services/generate-jwt-secret.d.ts.map +0 -1
  70. package/cjs/services/generate-jwt-secret.js +0 -26
  71. package/cjs/services/generate-jwt-secret.js.map +0 -1
  72. package/cjs/services/index.d.ts +0 -5
  73. package/cjs/services/index.d.ts.map +0 -1
  74. package/cjs/services/jwt.d.ts +0 -23
  75. package/cjs/services/jwt.d.ts.map +0 -1
  76. package/cjs/services/jwt.js +0 -39
  77. package/cjs/services/jwt.js.map +0 -1
  78. package/cjs/utils/auth-error-codes.d.ts +0 -18
  79. package/cjs/utils/auth-error-codes.d.ts.map +0 -1
  80. package/cjs/utils/auth-error-codes.js +0 -18
  81. package/cjs/utils/auth-error-codes.js.map +0 -1
  82. package/cjs/utils/duration.d.ts +0 -45
  83. package/cjs/utils/duration.d.ts.map +0 -1
  84. package/cjs/utils/duration.js +0 -93
  85. package/cjs/utils/duration.js.map +0 -1
  86. package/cjs/utils/index.d.ts +0 -3
  87. package/cjs/utils/index.d.ts.map +0 -1
  88. package/esm/commands/auth-cleanup-command.d.ts +0 -10
  89. package/esm/commands/auth-cleanup-command.d.ts.map +0 -1
  90. package/esm/commands/auth-cleanup-command.js +0 -29
  91. package/esm/commands/auth-cleanup-command.js.map +0 -1
  92. package/esm/commands/jwt-secret-generator-command.d.ts +0 -2
  93. package/esm/commands/jwt-secret-generator-command.d.ts.map +0 -1
  94. package/esm/commands/jwt-secret-generator-command.js +0 -7
  95. package/esm/commands/jwt-secret-generator-command.js.map +0 -1
  96. package/esm/contracts/auth-contract.d.ts +0 -23
  97. package/esm/contracts/auth-contract.d.ts.map +0 -1
  98. package/esm/contracts/index.d.ts +0 -3
  99. package/esm/contracts/index.d.ts.map +0 -1
  100. package/esm/contracts/types.d.ts +0 -134
  101. package/esm/contracts/types.d.ts.map +0 -1
  102. package/esm/contracts/types.js +0 -20
  103. package/esm/contracts/types.js.map +0 -1
  104. package/esm/index.d.ts +0 -8
  105. package/esm/index.d.ts.map +0 -1
  106. package/esm/middleware/auth.middleware.d.ts +0 -2
  107. package/esm/middleware/auth.middleware.d.ts.map +0 -1
  108. package/esm/middleware/auth.middleware.js +0 -73
  109. package/esm/middleware/auth.middleware.js.map +0 -1
  110. package/esm/middleware/index.d.ts +0 -2
  111. package/esm/middleware/index.d.ts.map +0 -1
  112. package/esm/models/access-token/access-token.d.ts +0 -12
  113. package/esm/models/access-token/access-token.d.ts.map +0 -1
  114. package/esm/models/access-token/access-token.js +0 -16
  115. package/esm/models/access-token/access-token.js.map +0 -1
  116. package/esm/models/access-token/index.d.ts +0 -3
  117. package/esm/models/access-token/index.d.ts.map +0 -1
  118. package/esm/models/access-token/migration.d.ts +0 -3
  119. package/esm/models/access-token/migration.d.ts.map +0 -1
  120. package/esm/models/access-token/migration.js +0 -10
  121. package/esm/models/access-token/migration.js.map +0 -1
  122. package/esm/models/auth.d.ts +0 -47
  123. package/esm/models/auth.d.ts.map +0 -1
  124. package/esm/models/auth.js +0 -58
  125. package/esm/models/auth.js.map +0 -1
  126. package/esm/models/casts/cast-password.d.ts +0 -7
  127. package/esm/models/casts/cast-password.d.ts.map +0 -1
  128. package/esm/models/casts/cast-password.js +0 -9
  129. package/esm/models/casts/cast-password.js.map +0 -1
  130. package/esm/models/casts/index.d.ts +0 -2
  131. package/esm/models/casts/index.d.ts.map +0 -1
  132. package/esm/models/index.d.ts +0 -5
  133. package/esm/models/index.d.ts.map +0 -1
  134. package/esm/models/refresh-token/index.d.ts +0 -2
  135. package/esm/models/refresh-token/index.d.ts.map +0 -1
  136. package/esm/models/refresh-token/migration.d.ts +0 -3
  137. package/esm/models/refresh-token/migration.d.ts.map +0 -1
  138. package/esm/models/refresh-token/refresh-token.d.ts +0 -32
  139. package/esm/models/refresh-token/refresh-token.d.ts.map +0 -1
  140. package/esm/models/refresh-token/refresh-token.js +0 -52
  141. package/esm/models/refresh-token/refresh-token.js.map +0 -1
  142. package/esm/services/auth-events.d.ts +0 -84
  143. package/esm/services/auth-events.d.ts.map +0 -1
  144. package/esm/services/auth-events.js +0 -65
  145. package/esm/services/auth-events.js.map +0 -1
  146. package/esm/services/auth.service.d.ts +0 -78
  147. package/esm/services/auth.service.d.ts.map +0 -1
  148. package/esm/services/auth.service.js +0 -265
  149. package/esm/services/auth.service.js.map +0 -1
  150. package/esm/services/generate-jwt-secret.d.ts +0 -2
  151. package/esm/services/generate-jwt-secret.d.ts.map +0 -1
  152. package/esm/services/generate-jwt-secret.js +0 -26
  153. package/esm/services/generate-jwt-secret.js.map +0 -1
  154. package/esm/services/index.d.ts +0 -5
  155. package/esm/services/index.d.ts.map +0 -1
  156. package/esm/services/jwt.d.ts +0 -23
  157. package/esm/services/jwt.d.ts.map +0 -1
  158. package/esm/services/jwt.js +0 -39
  159. package/esm/services/jwt.js.map +0 -1
  160. package/esm/utils/auth-error-codes.d.ts +0 -18
  161. package/esm/utils/auth-error-codes.d.ts.map +0 -1
  162. package/esm/utils/auth-error-codes.js +0 -18
  163. package/esm/utils/auth-error-codes.js.map +0 -1
  164. package/esm/utils/duration.d.ts +0 -45
  165. package/esm/utils/duration.d.ts.map +0 -1
  166. package/esm/utils/duration.js +0 -93
  167. package/esm/utils/duration.js.map +0 -1
  168. package/esm/utils/index.d.ts +0 -3
  169. package/esm/utils/index.d.ts.map +0 -1
@@ -1,84 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,65 +0,0 @@
1
- 'use strict';var events=require('@mongez/events');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var events__default=/*#__PURE__*/_interopDefault(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__default.default.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__default.default.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__default.default.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__default.default.unsubscribe(AUTH_EVENT_PREFIX + event);
60
- }
61
- else {
62
- this.unsubscribeAll();
63
- }
64
- },
65
- };exports.authEvents=authEvents;//# sourceMappingURL=auth-events.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-events.js","sources":["../../src/services/auth-events.ts"],"sourcesContent":[null],"names":["events"],"mappings":"4KAkDA;;AAEG;AACH,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAElC;;;;;;;;;;;;;;;;;AAiBG;AACU,MAAA,UAAU,GAAG;AACxB;;AAEG;IACH,EAAE,CAA0B,KAAQ,EAAE,QAA8B,EAAA;QAClE,OAAOA,uBAAM,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;QACnEA,uBAAM,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,QAAAA,uBAAM,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,YAAAA,uBAAM,CAAC,WAAW,CAAC,iBAAiB,GAAG,KAAK,CAAC,CAAC;AAC/C,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,SAAA;KACF;"}
@@ -1,78 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,265 +0,0 @@
1
- 'use strict';var password=require('@mongez/password'),reinforcements=require('@mongez/reinforcements'),core=require('@warlock.js/core'),accessToken=require('../models/access-token/access-token.js');require('../models/access-token/migration.js');var refreshToken=require('../models/refresh-token/refresh-token.js'),duration=require('../utils/duration.js'),authEvents=require('./auth-events.js'),jwt=require('./jwt.js');class AuthService {
2
- /**
3
- * Build access token payload from user
4
- */
5
- buildAccessTokenPayload(user) {
6
- return {
7
- id: user.id,
8
- _id: user._id,
9
- userType: user.userType,
10
- createdAt: Date.now(),
11
- };
12
- }
13
- /**
14
- * Generate access token for user
15
- */
16
- async generateAccessToken(user, payload) {
17
- const data = payload || this.buildAccessTokenPayload(user);
18
- const expiresInConfig = core.config.key("auth.jwt.expiresIn");
19
- const expiresIn = duration.toJwtExpiresIn(expiresInConfig, 3600000); // default 1 hour
20
- // If expiresIn is undefined, token never expires
21
- const token = expiresIn ? await jwt.jwt.generate(data, { expiresIn }) : await jwt.jwt.generate(data);
22
- // Store in database (fire and forget)
23
- accessToken.AccessToken.create({
24
- token,
25
- user: data,
26
- });
27
- return token;
28
- }
29
- /**
30
- * Create refresh token for user
31
- */
32
- async createRefreshToken(user, deviceInfo) {
33
- const familyId = deviceInfo?.familyId || reinforcements.Random.string(32);
34
- const expiresInConfig = core.config.key("auth.jwt.refresh.expiresIn");
35
- const expiresInMs = duration.parseExpirationToMs(expiresInConfig, 7 * 24 * 60 * 60 * 1000); // default 7 days
36
- const payload = {
37
- userId: user.id,
38
- userType: user.userType,
39
- familyId,
40
- };
41
- const token = await jwt.jwt.generateRefreshToken(payload);
42
- // Enforce max tokens per user
43
- await this.enforceMaxRefreshTokens(user);
44
- // Calculate expiration date (undefined means never expires, but we still set a far future date)
45
- const expiresAt = expiresInMs
46
- ? new Date(Date.now() + expiresInMs)
47
- : new Date(Date.now() + 100 * 365 * 24 * 60 * 60 * 1000);
48
- // Store in database
49
- return refreshToken.RefreshToken.create({
50
- token,
51
- userId: user.id,
52
- userType: user.userType,
53
- familyId,
54
- expiresAt,
55
- deviceInfo: deviceInfo
56
- ? {
57
- userAgent: deviceInfo.userAgent,
58
- ip: deviceInfo.ip,
59
- deviceId: deviceInfo.deviceId,
60
- }
61
- : undefined,
62
- });
63
- }
64
- /**
65
- * Create both access and refresh tokens
66
- */
67
- async createTokenPair(user, deviceInfo) {
68
- const accessToken = await this.generateAccessToken(user);
69
- const refreshToken = await this.createRefreshToken(user, deviceInfo);
70
- const tokenPair = {
71
- accessToken,
72
- refreshToken: refreshToken.get("token"),
73
- expiresIn: core.config.key("auth.jwt.expiresIn", "1h"),
74
- };
75
- // Emit events
76
- authEvents.authEvents.emit("token.created", user, tokenPair);
77
- authEvents.authEvents.emit("session.created", user, refreshToken, deviceInfo);
78
- return tokenPair;
79
- }
80
- /**
81
- * Refresh tokens using a refresh token
82
- */
83
- async refreshTokens(refreshTokenString, deviceInfo) {
84
- try {
85
- // 1. Verify JWT signature
86
- const decoded = await jwt.jwt.verifyRefreshToken(refreshTokenString);
87
- if (!decoded)
88
- return null;
89
- // 2. Find token in database
90
- const refreshToken$1 = await refreshToken.RefreshToken.first({ token: refreshTokenString });
91
- if (!refreshToken$1?.isValid) {
92
- // If token was already used (rotation detection), revoke entire family
93
- if (refreshToken$1) {
94
- await this.revokeTokenFamily(refreshToken$1.get("familyId"));
95
- }
96
- return null;
97
- }
98
- // 3. Get user model and find user
99
- const UserModel = core.config.key(`auth.userType.${decoded.userType}`);
100
- if (!UserModel)
101
- return null;
102
- const user = (await UserModel.find(decoded.userId));
103
- if (!user)
104
- return null;
105
- // 4. Rotate token if enabled (revoke old token)
106
- const rotationEnabled = core.config.key("auth.jwt.refresh.rotation", true);
107
- if (rotationEnabled) {
108
- await refreshToken$1.revoke();
109
- }
110
- else {
111
- await refreshToken$1.markAsUsed();
112
- }
113
- // 5. Generate new token pair (keep same family)
114
- const newTokenPair = await this.createTokenPair(user, {
115
- ...deviceInfo,
116
- familyId: refreshToken$1.get("familyId"),
117
- });
118
- // Emit token refreshed event
119
- authEvents.authEvents.emit("token.refreshed", user, newTokenPair, refreshToken$1);
120
- return newTokenPair;
121
- }
122
- catch {
123
- return null;
124
- }
125
- }
126
- /**
127
- * Verify password
128
- */
129
- verifyPassword(hashedPassword, plainPassword) {
130
- return password.verify(String(hashedPassword), String(plainPassword));
131
- }
132
- /**
133
- * Attempt to login user with given credentials
134
- */
135
- async attemptLogin(Model, data) {
136
- const { password, ...otherData } = data;
137
- // Emit login attempt event
138
- authEvents.authEvents.emit("login.attempt", otherData);
139
- const user = (await Model.first(otherData));
140
- if (!user) {
141
- authEvents.authEvents.emit("login.failed", otherData, "User not found");
142
- return null;
143
- }
144
- if (!this.verifyPassword(user.get("password"), password)) {
145
- authEvents.authEvents.emit("login.failed", otherData, "Invalid password");
146
- return null;
147
- }
148
- return user;
149
- }
150
- /**
151
- * Full login flow: validate credentials, create tokens, emit events
152
- * Returns token pair on success, null on failure
153
- */
154
- async login(Model, credentials, deviceInfo) {
155
- const user = await this.attemptLogin(Model, credentials);
156
- if (!user) {
157
- return null;
158
- }
159
- const tokens = await this.createTokenPair(user, deviceInfo);
160
- // Emit login success event
161
- authEvents.authEvents.emit("login.success", user, tokens, deviceInfo);
162
- return { user, tokens };
163
- }
164
- /**
165
- * Logout user (revoke specific refresh token)
166
- */
167
- async logout(user, refreshToken) {
168
- if (refreshToken) {
169
- await refreshToken.revoke();
170
- authEvents.authEvents.emit("session.destroyed", user, refreshToken);
171
- }
172
- // Emit logout event
173
- authEvents.authEvents.emit("logout", user);
174
- }
175
- /**
176
- * Remove specific access token
177
- */
178
- async removeAccessToken(user, token) {
179
- accessToken.AccessToken.delete({
180
- token,
181
- "user.id": user.id,
182
- });
183
- }
184
- /**
185
- * Revoke all tokens for a user
186
- */
187
- async revokeAllTokens(user) {
188
- // Revoke all refresh tokens
189
- const refreshTokens = await refreshToken.RefreshToken.aggregate()
190
- .where("userId", user.id)
191
- .where("userType", user.userType)
192
- .where("revokedAt", null)
193
- .get();
194
- for (const token of refreshTokens) {
195
- await token.revoke();
196
- authEvents.authEvents.emit("token.revoked", user, token);
197
- }
198
- // Delete all access tokens
199
- await accessToken.AccessToken.delete({
200
- "user.id": user.id,
201
- "user.userType": user.userType,
202
- });
203
- // Emit logout all event
204
- authEvents.authEvents.emit("logout.all", user);
205
- }
206
- /**
207
- * Revoke entire token family (for rotation breach detection)
208
- */
209
- async revokeTokenFamily(familyId) {
210
- const tokens = await refreshToken.RefreshToken.aggregate()
211
- .where("familyId", familyId)
212
- .where("revokedAt", null)
213
- .get();
214
- for (const token of tokens) {
215
- await token.revoke();
216
- }
217
- // Emit family revoked event
218
- authEvents.authEvents.emit("token.familyRevoked", familyId, tokens);
219
- }
220
- /**
221
- * Cleanup expired tokens
222
- */
223
- async cleanupExpiredTokens() {
224
- const expiredTokens = await refreshToken.RefreshToken.aggregate().where("expiresAt", "<", new Date()).get();
225
- for (const token of expiredTokens) {
226
- authEvents.authEvents.emit("token.expired", token);
227
- await token.destroy();
228
- }
229
- // Emit cleanup completed event
230
- authEvents.authEvents.emit("cleanup.completed", expiredTokens.length);
231
- return expiredTokens.length;
232
- }
233
- /**
234
- * Enforce max refresh tokens per user
235
- */
236
- async enforceMaxRefreshTokens(user) {
237
- const maxPerUser = core.config.key("auth.jwt.refresh.maxPerUser", 5);
238
- const activeTokens = await refreshToken.RefreshToken.aggregate()
239
- .where("userId", user.id)
240
- .where("userType", user.userType)
241
- .where("revokedAt", null)
242
- .sort("createdAt", "asc")
243
- .get();
244
- // Revoke oldest tokens if exceeding limit
245
- if (activeTokens.length >= maxPerUser) {
246
- const tokensToRevoke = activeTokens.slice(0, activeTokens.length - maxPerUser + 1);
247
- for (const token of tokensToRevoke) {
248
- await token.revoke();
249
- }
250
- }
251
- }
252
- /**
253
- * Get active sessions for user
254
- */
255
- async getActiveSessions(user) {
256
- return refreshToken.RefreshToken.aggregate()
257
- .where("userId", user.id)
258
- .where("userType", user.userType)
259
- .where("revokedAt", null)
260
- .where("expiresAt", ">", new Date())
261
- .sort("createdAt", "desc")
262
- .get();
263
- }
264
- }
265
- const authService = new AuthService();exports.authService=authService;//# sourceMappingURL=auth.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.service.js","sources":["../../src/services/auth.service.ts"],"sourcesContent":[null],"names":["config","toJwtExpiresIn","jwt","AccessToken","Random","parseExpirationToMs","RefreshToken","authEvents","refreshToken","verify"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function generateJWTSecret(): Promise<void>;
2
- //# sourceMappingURL=generate-jwt-secret.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-jwt-secret.d.ts","sourceRoot":"","sources":["../../src/services/generate-jwt-secret.ts"],"names":[],"mappings":"AAKA,wBAAsB,iBAAiB,kBAmCtC"}
@@ -1,26 +0,0 @@
1
- 'use strict';var fs=require('@mongez/fs'),reinforcements=require('@mongez/reinforcements'),core=require('@warlock.js/core'),logger=require('@warlock.js/logger');async function generateJWTSecret() {
2
- let envFile = core.rootPath(".env");
3
- logger.log.info("jwt", "generating", "Generating jwt secret");
4
- const environmentMode = core.environment();
5
- if (!(await fs.fileExistsAsync(envFile))) {
6
- const envFileType = environmentMode === "production" ? ".env.production" : ".env.development";
7
- envFile = core.rootPath(envFileType);
8
- }
9
- if (!(await fs.fileExistsAsync(envFile))) {
10
- logger.log.error("jwt", "error", ".env file not found");
11
- return;
12
- }
13
- let contents = await fs.getFileAsync(envFile);
14
- if (contents.includes("JWT_SECRET")) {
15
- logger.log.warn("jwt", "exists", "JWT secret already exists in the .env file.");
16
- return;
17
- }
18
- const key = reinforcements.Random.string(32);
19
- contents += `
20
-
21
- # JWT Secret
22
- JWT_SECRET=${key}
23
- `;
24
- await fs.putFileAsync(envFile, contents);
25
- logger.log.success("jwt", "generated", `JWT secret key generated and added to the .env file.`);
26
- }exports.generateJWTSecret=generateJWTSecret;//# sourceMappingURL=generate-jwt-secret.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-jwt-secret.js","sources":["../../src/services/generate-jwt-secret.ts"],"sourcesContent":[null],"names":["rootPath","log","environment","fileExistsAsync","getFileAsync","Random","putFileAsync"],"mappings":"iKAKO,eAAe,iBAAiB,GAAA;AACrC,IAAA,IAAI,OAAO,GAAGA,aAAQ,CAAC,MAAM,CAAC,CAAC;IAE/BC,UAAG,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,uBAAuB,CAAC,CAAC;AAEvD,IAAA,MAAM,eAAe,GAAGC,gBAAW,EAAE,CAAC;IAEtC,IAAI,EAAE,MAAMC,kBAAe,CAAC,OAAO,CAAC,CAAC,EAAE;AACrC,QAAA,MAAM,WAAW,GAAG,eAAe,KAAK,YAAY,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;AAC9F,QAAA,OAAO,GAAGH,aAAQ,CAAC,WAAW,CAAC,CAAC;AACjC,KAAA;IAED,IAAI,EAAE,MAAMG,kBAAe,CAAC,OAAO,CAAC,CAAC,EAAE;QACrCF,UAAG,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC;QACjD,OAAO;AACR,KAAA;AAED,IAAA,IAAI,QAAQ,GAAG,MAAMG,eAAY,CAAC,OAAO,CAAC,CAAC;AAE3C,IAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;QACnCH,UAAG,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,6CAA6C,CAAC,CAAC;QACzE,OAAO;AACR,KAAA;IAED,MAAM,GAAG,GAAGI,qBAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAE9B,IAAA,QAAQ,IAAI,CAAA;;;aAGD,GAAG,CAAA;CACf,CAAC;AAEA,IAAA,MAAMC,eAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEtCL,UAAG,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,CAAsD,oDAAA,CAAA,CAAC,CAAC;AAC1F"}
@@ -1,5 +0,0 @@
1
- export * from "./auth-events";
2
- export * from "./auth.service";
3
- export * from "./generate-jwt-secret";
4
- export * from "./jwt";
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,OAAO,CAAC"}
@@ -1,23 +0,0 @@
1
- import { type SignerOptions, type VerifierOptions } from "fast-jwt";
2
- export declare const jwt: {
3
- /**
4
- * Generate a new JWT token for the user.
5
- * @param payload The payload to encode in the JWT token.
6
- */
7
- generate(payload: any, { key, algorithm, ...options }?: any): Promise<string>;
8
- /**
9
- * Verify the given token.
10
- * @param token The JWT token to verify.
11
- * @returns The decoded token payload if verification is successful.
12
- */
13
- verify<T = any>(token: string, { key, algorithms, ...options }?: any): Promise<T>;
14
- /**
15
- * Generate a new refresh token for the user.
16
- */
17
- generateRefreshToken(payload: any, { key, expiresIn, algorithm, ...options }?: any): Promise<string>;
18
- /**
19
- * Verify the given refresh token.
20
- */
21
- verifyRefreshToken<T_1 = any>(token: string, { key, algorithms, ...options }?: any): Promise<T_1>;
22
- };
23
- //# sourceMappingURL=jwt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/services/jwt.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,UAAU,CAAC;AASlB,eAAO,MAAM,GAAG;IACd;;;OAGG;sBAEQ,GAAG,yCAMX,QAAQ,MAAM,CAAC;IAOlB;;;;OAIG;2BAEM,MAAM;IAYf;;OAEG;kCAEQ,GAAG,oDAOX,QAAQ,MAAM,CAAC;IAKlB;;OAEG;yCAEM,MAAM;CAUhB,CAAC"}
@@ -1,39 +0,0 @@
1
- 'use strict';var core=require('@warlock.js/core'),fastJwt=require('fast-jwt');const getSecretKey = () => core.config.key("auth.jwt.secret");
2
- const getAlgorithm = () => core.config.key("auth.jwt.algorithm");
3
- const getRefreshSecretKey = () => core.config.key("auth.jwt.refresh.secret");
4
- // Assuming there's a separate config for refresh token validity, for example, '7d' for 7 days
5
- const getRefreshTokenValidity = () => core.config.key("auth.jwt.refresh.expiresIn");
6
- const jwt = {
7
- /**
8
- * Generate a new JWT token for the user.
9
- * @param payload The payload to encode in the JWT token.
10
- */
11
- async generate(payload, { key = getSecretKey(), algorithm = getAlgorithm(), ...options } = {}) {
12
- // Create a signer function with predefined options
13
- const sign = fastJwt.createSigner({ key, ...options, algorithm });
14
- return sign({ ...payload });
15
- },
16
- /**
17
- * Verify the given token.
18
- * @param token The JWT token to verify.
19
- * @returns The decoded token payload if verification is successful.
20
- */
21
- async verify(token, { key = getSecretKey(), algorithms = getAlgorithm() ? [getAlgorithm()] : undefined, ...options } = {}) {
22
- const verify = fastJwt.createVerifier({ key, ...options, algorithms });
23
- return await verify(token);
24
- },
25
- /**
26
- * Generate a new refresh token for the user.
27
- */
28
- async generateRefreshToken(payload, { key = getRefreshSecretKey(), expiresIn = getRefreshTokenValidity(), algorithm = getAlgorithm(), ...options } = {}) {
29
- const sign = fastJwt.createSigner({ key, expiresIn, algorithm, ...options });
30
- return sign({ ...payload });
31
- },
32
- /**
33
- * Verify the given refresh token.
34
- */
35
- async verifyRefreshToken(token, { key = getRefreshSecretKey(), algorithms = [getAlgorithm()], ...options } = {}) {
36
- const verify = fastJwt.createVerifier({ key, algorithms, ...options });
37
- return await verify(token);
38
- },
39
- };exports.jwt=jwt;//# sourceMappingURL=jwt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jwt.js","sources":["../../src/services/jwt.ts"],"sourcesContent":[null],"names":["config","createSigner","createVerifier"],"mappings":"8EASA,MAAM,YAAY,GAAG,MAAMA,WAAM,CAAC,GAAG,CAAC,iBAAiB,CAAW,CAAC;AACnE,MAAM,YAAY,GAAG,MAAMA,WAAM,CAAC,GAAG,CAAC,oBAAoB,CAAc,CAAC;AAEzE,MAAM,mBAAmB,GAAG,MAAMA,WAAM,CAAC,GAAG,CAAC,yBAAyB,CAAW,CAAC;AAClF;AACA,MAAM,uBAAuB,GAAG,MAAMA,WAAM,CAAC,GAAG,CAAC,4BAA4B,CAAoB,CAAC;AAErF,MAAA,GAAG,GAAG;AACjB;;;AAGG;AACH,IAAA,MAAM,QAAQ,CACZ,OAAY,EACZ,EACE,GAAG,GAAG,YAAY,EAAE,EACpB,SAAS,GAAG,YAAY,EAAE,EAC1B,GAAG,OAAO,KAC0B,EAAE,EAAA;;AAGxC,QAAA,MAAM,IAAI,GAAGC,oBAAY,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AAE1D,QAAA,OAAO,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;KAC7B;AAED;;;;AAIG;AACH,IAAA,MAAM,MAAM,CACV,KAAa,EACb,EACE,GAAG,GAAG,YAAY,EAAE,EACpB,UAAU,GAAG,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,SAAS,EAC1D,GAAG,OAAO,KAC4B,EAAE,EAAA;AAE1C,QAAA,MAAM,MAAM,GAAGC,sBAAc,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;AAE/D,QAAA,OAAO,MAAM,MAAM,CAAC,KAAe,CAAC,CAAC;KACtC;AAED;;AAEG;IACH,MAAM,oBAAoB,CACxB,OAAY,EACZ,EACE,GAAG,GAAG,mBAAmB,EAAE,EAC3B,SAAS,GAAG,uBAAuB,EAAE,EACrC,SAAS,GAAG,YAAY,EAAE,EAC1B,GAAG,OAAO,EAAA,GAC0B,EAAE,EAAA;AAExC,QAAA,MAAM,IAAI,GAAGD,oBAAY,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACrE,QAAA,OAAO,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;KAC7B;AAED;;AAEG;IACH,MAAM,kBAAkB,CACtB,KAAa,EACb,EACE,GAAG,GAAG,mBAAmB,EAAE,EAC3B,UAAU,GAAG,CAAC,YAAY,EAAE,CAAC,EAC7B,GAAG,OAAO,EAAA,GAC4B,EAAE,EAAA;AAE1C,QAAA,MAAM,MAAM,GAAGC,sBAAc,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AAC/D,QAAA,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;KAC5B;"}