@arikajs/auth 0.0.4 → 0.0.6

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 (148) hide show
  1. package/README.md +175 -53
  2. package/dist/AuthContext.d.ts +24 -0
  3. package/dist/AuthContext.d.ts.map +1 -0
  4. package/dist/AuthContext.js +65 -0
  5. package/dist/AuthContext.js.map +1 -0
  6. package/dist/AuthManager.d.ts +33 -8
  7. package/dist/AuthManager.d.ts.map +1 -1
  8. package/dist/AuthManager.js +194 -51
  9. package/dist/AuthManager.js.map +1 -1
  10. package/dist/Contracts/CanResetPassword.d.ts +11 -0
  11. package/dist/Contracts/CanResetPassword.d.ts.map +1 -0
  12. package/dist/Contracts/CanResetPassword.js +3 -0
  13. package/dist/Contracts/CanResetPassword.js.map +1 -0
  14. package/dist/Contracts/CanVerifyEmail.d.ts +19 -0
  15. package/dist/Contracts/CanVerifyEmail.d.ts.map +1 -0
  16. package/dist/Contracts/CanVerifyEmail.js +3 -0
  17. package/dist/Contracts/CanVerifyEmail.js.map +1 -0
  18. package/dist/Contracts/EventDispatcher.d.ts +7 -0
  19. package/dist/Contracts/EventDispatcher.d.ts.map +1 -0
  20. package/dist/Contracts/EventDispatcher.js +3 -0
  21. package/dist/Contracts/EventDispatcher.js.map +1 -0
  22. package/dist/Contracts/PasswordBroker.d.ts +18 -0
  23. package/dist/Contracts/PasswordBroker.d.ts.map +1 -0
  24. package/dist/Contracts/PasswordBroker.js +11 -0
  25. package/dist/Contracts/PasswordBroker.js.map +1 -0
  26. package/dist/Contracts/RateLimiter.d.ts +15 -0
  27. package/dist/Contracts/RateLimiter.d.ts.map +1 -0
  28. package/dist/Contracts/RateLimiter.js +3 -0
  29. package/dist/Contracts/RateLimiter.js.map +1 -0
  30. package/dist/Contracts/UserProvider.d.ts +4 -0
  31. package/dist/Contracts/UserProvider.d.ts.map +1 -1
  32. package/dist/Guards/BasicGuard.d.ts +17 -0
  33. package/dist/Guards/BasicGuard.d.ts.map +1 -0
  34. package/dist/Guards/BasicGuard.js +59 -0
  35. package/dist/Guards/BasicGuard.js.map +1 -0
  36. package/dist/Guards/JwtGuard.d.ts +36 -0
  37. package/dist/Guards/JwtGuard.d.ts.map +1 -0
  38. package/dist/Guards/JwtGuard.js +158 -0
  39. package/dist/Guards/JwtGuard.js.map +1 -0
  40. package/dist/Guards/SessionGuard.d.ts +7 -3
  41. package/dist/Guards/SessionGuard.d.ts.map +1 -1
  42. package/dist/Guards/SessionGuard.js +104 -10
  43. package/dist/Guards/SessionGuard.js.map +1 -1
  44. package/dist/Hasher.d.ts +4 -0
  45. package/dist/Hasher.d.ts.map +1 -1
  46. package/dist/Hasher.js +6 -0
  47. package/dist/Hasher.js.map +1 -1
  48. package/dist/Middleware/Authenticate.d.ts +11 -2
  49. package/dist/Middleware/Authenticate.d.ts.map +1 -1
  50. package/dist/Middleware/Authenticate.js +42 -14
  51. package/dist/Middleware/Authenticate.js.map +1 -1
  52. package/dist/Middleware/EnsureEmailIsVerified.d.ts +8 -0
  53. package/dist/Middleware/EnsureEmailIsVerified.d.ts.map +1 -0
  54. package/dist/Middleware/EnsureEmailIsVerified.js +27 -0
  55. package/dist/Middleware/EnsureEmailIsVerified.js.map +1 -0
  56. package/dist/Passwords/PasswordResetBroker.d.ts +37 -0
  57. package/dist/Passwords/PasswordResetBroker.d.ts.map +1 -0
  58. package/dist/Passwords/PasswordResetBroker.js +128 -0
  59. package/dist/Passwords/PasswordResetBroker.js.map +1 -0
  60. package/dist/Providers/EloquentUserProvider.d.ts +30 -0
  61. package/dist/Providers/EloquentUserProvider.d.ts.map +1 -0
  62. package/dist/Providers/EloquentUserProvider.js +63 -0
  63. package/dist/Providers/EloquentUserProvider.js.map +1 -0
  64. package/dist/index.d.ts +11 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +11 -0
  67. package/dist/index.js.map +1 -1
  68. package/dist/src/AuthContext.d.ts +24 -0
  69. package/dist/src/AuthContext.d.ts.map +1 -0
  70. package/dist/src/AuthContext.js +65 -0
  71. package/dist/src/AuthContext.js.map +1 -0
  72. package/dist/src/AuthManager.d.ts +52 -0
  73. package/dist/src/AuthManager.d.ts.map +1 -0
  74. package/dist/src/AuthManager.js +255 -0
  75. package/dist/src/AuthManager.js.map +1 -0
  76. package/dist/src/Contracts/CanResetPassword.d.ts +11 -0
  77. package/dist/src/Contracts/CanResetPassword.d.ts.map +1 -0
  78. package/dist/src/Contracts/CanResetPassword.js +3 -0
  79. package/dist/src/Contracts/CanResetPassword.js.map +1 -0
  80. package/dist/src/Contracts/CanVerifyEmail.d.ts +19 -0
  81. package/dist/src/Contracts/CanVerifyEmail.d.ts.map +1 -0
  82. package/dist/src/Contracts/CanVerifyEmail.js +3 -0
  83. package/dist/src/Contracts/CanVerifyEmail.js.map +1 -0
  84. package/dist/src/Contracts/EventDispatcher.d.ts +7 -0
  85. package/dist/src/Contracts/EventDispatcher.d.ts.map +1 -0
  86. package/dist/src/Contracts/EventDispatcher.js +3 -0
  87. package/dist/src/Contracts/EventDispatcher.js.map +1 -0
  88. package/dist/src/Contracts/PasswordBroker.d.ts +18 -0
  89. package/dist/src/Contracts/PasswordBroker.d.ts.map +1 -0
  90. package/dist/src/Contracts/PasswordBroker.js +11 -0
  91. package/dist/src/Contracts/PasswordBroker.js.map +1 -0
  92. package/dist/src/Contracts/RateLimiter.d.ts +15 -0
  93. package/dist/src/Contracts/RateLimiter.d.ts.map +1 -0
  94. package/dist/src/Contracts/RateLimiter.js +3 -0
  95. package/dist/src/Contracts/RateLimiter.js.map +1 -0
  96. package/dist/src/Contracts/UserProvider.d.ts +10 -0
  97. package/dist/src/Contracts/UserProvider.d.ts.map +1 -0
  98. package/dist/src/Contracts/UserProvider.js +3 -0
  99. package/dist/src/Contracts/UserProvider.js.map +1 -0
  100. package/dist/src/Guard.d.ts +10 -0
  101. package/dist/src/Guard.d.ts.map +1 -0
  102. package/dist/src/Guard.js +3 -0
  103. package/dist/src/Guard.js.map +1 -0
  104. package/dist/src/Guards/BasicGuard.d.ts +17 -0
  105. package/dist/src/Guards/BasicGuard.d.ts.map +1 -0
  106. package/dist/src/Guards/BasicGuard.js +59 -0
  107. package/dist/src/Guards/BasicGuard.js.map +1 -0
  108. package/dist/src/Guards/JwtGuard.d.ts +36 -0
  109. package/dist/src/Guards/JwtGuard.d.ts.map +1 -0
  110. package/dist/src/Guards/JwtGuard.js +158 -0
  111. package/dist/src/Guards/JwtGuard.js.map +1 -0
  112. package/dist/src/Guards/SessionGuard.d.ts +23 -0
  113. package/dist/src/Guards/SessionGuard.d.ts.map +1 -0
  114. package/dist/src/Guards/SessionGuard.js +162 -0
  115. package/dist/src/Guards/SessionGuard.js.map +1 -0
  116. package/dist/src/Guards/TokenGuard.d.ts +17 -0
  117. package/dist/src/Guards/TokenGuard.d.ts.map +1 -0
  118. package/dist/src/Guards/TokenGuard.js +60 -0
  119. package/dist/src/Guards/TokenGuard.js.map +1 -0
  120. package/dist/src/Hasher.d.ts +15 -0
  121. package/dist/src/Hasher.d.ts.map +1 -0
  122. package/dist/src/Hasher.js +59 -0
  123. package/dist/src/Hasher.js.map +1 -0
  124. package/dist/src/Middleware/Authenticate.d.ts +24 -0
  125. package/dist/src/Middleware/Authenticate.d.ts.map +1 -0
  126. package/dist/src/Middleware/Authenticate.js +66 -0
  127. package/dist/src/Middleware/Authenticate.js.map +1 -0
  128. package/dist/src/Middleware/EnsureEmailIsVerified.d.ts +8 -0
  129. package/dist/src/Middleware/EnsureEmailIsVerified.d.ts.map +1 -0
  130. package/dist/src/Middleware/EnsureEmailIsVerified.js +27 -0
  131. package/dist/src/Middleware/EnsureEmailIsVerified.js.map +1 -0
  132. package/dist/src/Passwords/PasswordResetBroker.d.ts +37 -0
  133. package/dist/src/Passwords/PasswordResetBroker.d.ts.map +1 -0
  134. package/dist/src/Passwords/PasswordResetBroker.js +128 -0
  135. package/dist/src/Passwords/PasswordResetBroker.js.map +1 -0
  136. package/dist/src/Providers/EloquentUserProvider.d.ts +30 -0
  137. package/dist/src/Providers/EloquentUserProvider.d.ts.map +1 -0
  138. package/dist/src/Providers/EloquentUserProvider.js +63 -0
  139. package/dist/src/Providers/EloquentUserProvider.js.map +1 -0
  140. package/dist/src/index.d.ts +19 -0
  141. package/dist/src/index.d.ts.map +1 -0
  142. package/dist/src/index.js +35 -0
  143. package/dist/src/index.js.map +1 -0
  144. package/dist/tests/Auth.test.d.ts +2 -0
  145. package/dist/tests/Auth.test.d.ts.map +1 -0
  146. package/dist/tests/Auth.test.js +177 -0
  147. package/dist/tests/Auth.test.js.map +1 -0
  148. package/package.json +51 -47
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.JwtGuard = void 0;
37
+ const jwt = __importStar(require("jsonwebtoken"));
38
+ const crypto = __importStar(require("crypto"));
39
+ class JwtGuard {
40
+ constructor(provider, request, secret, options = {}) {
41
+ this.loggedUser = null;
42
+ this.provider = provider;
43
+ this.request = request;
44
+ this.secret = secret;
45
+ this.options = options;
46
+ }
47
+ async check() {
48
+ return !!(await this.user());
49
+ }
50
+ async guest() {
51
+ return !(await this.check());
52
+ }
53
+ async user() {
54
+ if (this.loggedUser)
55
+ return this.loggedUser;
56
+ const token = this.getTokenForRequest();
57
+ if (!token)
58
+ return null;
59
+ try {
60
+ const decoded = jwt.verify(token, this.secret, this.options);
61
+ if (decoded && decoded.sub) {
62
+ // If the provider supports retrieving by ID, use it for stateless verification payload validation
63
+ // In a purely stateless app, you might just return the decoded payload or a Model proxy instead
64
+ // of querying the DB. But to ensure user is active/exists, we retrieve it:
65
+ this.loggedUser = await this.provider.retrieveById(decoded.sub);
66
+ return this.loggedUser;
67
+ }
68
+ }
69
+ catch (e) {
70
+ return null; // Invalid token
71
+ }
72
+ return null;
73
+ }
74
+ async id() {
75
+ if (this.loggedUser)
76
+ return this.loggedUser.id;
77
+ const token = this.getTokenForRequest();
78
+ if (!token)
79
+ return null;
80
+ try {
81
+ const decoded = jwt.verify(token, this.secret, this.options);
82
+ return decoded ? decoded.sub : null;
83
+ }
84
+ catch (e) {
85
+ return null;
86
+ }
87
+ }
88
+ async validate(credentials) {
89
+ const user = await this.provider.retrieveByCredentials(credentials);
90
+ if (!user)
91
+ return false;
92
+ return await this.provider.validateCredentials(user, credentials);
93
+ }
94
+ /**
95
+ * Authenticate a user and return a JWT token and refresh token
96
+ */
97
+ async attempt(credentials) {
98
+ const user = await this.provider.retrieveByCredentials(credentials);
99
+ if (user && await this.provider.validateCredentials(user, credentials)) {
100
+ this.login(user);
101
+ return await this.issueTokens(user);
102
+ }
103
+ return false;
104
+ }
105
+ async issueTokens(user, additionalPayload = {}) {
106
+ const payload = { sub: user.id, ...additionalPayload };
107
+ const access_token = jwt.sign(payload, this.secret, this.options);
108
+ const response = { access_token };
109
+ if (this.provider.updateRefreshToken) {
110
+ const refresh_token = crypto.randomBytes(40).toString('hex');
111
+ await this.provider.updateRefreshToken(user, refresh_token);
112
+ response.refresh_token = refresh_token;
113
+ }
114
+ return response;
115
+ }
116
+ async refresh(refreshToken) {
117
+ if (!this.provider.retrieveByRefreshToken) {
118
+ throw new Error('UserProvider does not support retrieveByRefreshToken');
119
+ }
120
+ const user = await this.provider.retrieveByRefreshToken(refreshToken);
121
+ if (!user) {
122
+ throw new Error('Invalid or expired refresh token');
123
+ }
124
+ return await this.issueTokens(user);
125
+ }
126
+ login(user) {
127
+ this.setUser(user);
128
+ }
129
+ logout() {
130
+ this.loggedUser = null;
131
+ }
132
+ setUser(user) {
133
+ this.loggedUser = user;
134
+ if (this.request) {
135
+ this.request.user = user;
136
+ }
137
+ }
138
+ setRequest(request) {
139
+ this.request = request;
140
+ }
141
+ getTokenForRequest() {
142
+ let authHeader;
143
+ // Support ArikaJS Request with header() method
144
+ if (typeof this.request?.header === 'function') {
145
+ authHeader = this.request.header('authorization');
146
+ }
147
+ // Fallback to raw headers object
148
+ if (!authHeader && this.request?.headers?.['authorization']) {
149
+ authHeader = this.request.headers['authorization'];
150
+ }
151
+ if (authHeader && authHeader.startsWith('Bearer ')) {
152
+ return authHeader.substring(7);
153
+ }
154
+ return null;
155
+ }
156
+ }
157
+ exports.JwtGuard = JwtGuard;
158
+ //# sourceMappingURL=JwtGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JwtGuard.js","sourceRoot":"","sources":["../../../src/Guards/JwtGuard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { Guard } from '../Guard';
2
+ import { UserProvider } from '../Contracts/UserProvider';
3
+ export declare class SessionGuard implements Guard {
4
+ private provider;
5
+ private session;
6
+ private loggedUser;
7
+ constructor(provider: UserProvider, session: any);
8
+ check(): Promise<boolean>;
9
+ guest(): Promise<boolean>;
10
+ user(): Promise<any>;
11
+ id(): Promise<string | number | null>;
12
+ validate(credentials: Record<string, any>): Promise<boolean>;
13
+ attempt(credentials: Record<string, any>, remember?: boolean): Promise<boolean>;
14
+ login(user: any, remember?: boolean): Promise<void>;
15
+ logout(): Promise<void>;
16
+ setUser(user: any): void;
17
+ private request;
18
+ setRequest(request: any): void;
19
+ private getRememberCookie;
20
+ private queueRememberCookie;
21
+ private clearRememberCookie;
22
+ }
23
+ //# sourceMappingURL=SessionGuard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionGuard.d.ts","sourceRoot":"","sources":["../../../src/Guards/SessionGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,qBAAa,YAAa,YAAW,KAAK;IACtC,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,UAAU,CAAa;gBAEnB,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG;IAiBnC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAIzB,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAIzB,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC;IA4BpB,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAKrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAS5D,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAStF,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB1D,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB7B,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAI/B,OAAO,CAAC,OAAO,CAAM;IAEd,UAAU,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IAOrC,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,mBAAmB;CAK9B"}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SessionGuard = void 0;
37
+ const crypto = __importStar(require("crypto"));
38
+ class SessionGuard {
39
+ constructor(provider, session) {
40
+ this.loggedUser = null;
41
+ this.provider = provider;
42
+ // Accept any session-like object (sync or async API).
43
+ // The @arikajs/session Session class has async get/put;
44
+ // the legacy fallback below is sync — both work because we await all calls.
45
+ if (session && (typeof session.get === 'function' || typeof session.put === 'function')) {
46
+ this.session = session;
47
+ }
48
+ else {
49
+ const store = {};
50
+ this.session = {
51
+ get(key) { return store[key] ?? null; },
52
+ put(key, value) { store[key] = value; },
53
+ forget(key) { delete store[key]; },
54
+ };
55
+ }
56
+ }
57
+ async check() {
58
+ return !!(await this.user());
59
+ }
60
+ async guest() {
61
+ return !(await this.check());
62
+ }
63
+ async user() {
64
+ if (this.loggedUser) {
65
+ return this.loggedUser;
66
+ }
67
+ // Await to support both sync (legacy) and async (Session class) APIs
68
+ const id = this.session.get ? await Promise.resolve(this.session.get('auth_user_id')) : null;
69
+ if (id) {
70
+ this.loggedUser = await this.provider.retrieveById(id);
71
+ }
72
+ else {
73
+ // Check for remember me cookie
74
+ const rememberTokenString = this.getRememberCookie();
75
+ if (rememberTokenString) {
76
+ const [userId, token] = rememberTokenString.split('|');
77
+ if (userId && token && this.provider.retrieveByToken) {
78
+ const user = await this.provider.retrieveByToken(userId, token);
79
+ if (user) {
80
+ this.login(user, true); // re-authenticate
81
+ this.loggedUser = user;
82
+ }
83
+ }
84
+ }
85
+ }
86
+ return this.loggedUser;
87
+ }
88
+ async id() {
89
+ const user = await this.user();
90
+ return user ? user.id : null;
91
+ }
92
+ async validate(credentials) {
93
+ const user = await this.provider.retrieveByCredentials(credentials);
94
+ if (!user) {
95
+ return false;
96
+ }
97
+ return await this.provider.validateCredentials(user, credentials);
98
+ }
99
+ async attempt(credentials, remember = false) {
100
+ if (await this.validate(credentials)) {
101
+ const user = await this.provider.retrieveByCredentials(credentials);
102
+ await this.login(user, remember);
103
+ return true;
104
+ }
105
+ return false;
106
+ }
107
+ async login(user, remember = false) {
108
+ this.loggedUser = user;
109
+ if (this.session.put) {
110
+ // Await to support both sync and async session APIs
111
+ await Promise.resolve(this.session.put('auth_user_id', user.id));
112
+ }
113
+ if (remember) {
114
+ const token = crypto.randomBytes(32).toString('hex');
115
+ if (this.provider.updateRememberToken) {
116
+ await this.provider.updateRememberToken(user, token);
117
+ }
118
+ this.queueRememberCookie(user.id, token);
119
+ }
120
+ }
121
+ async logout() {
122
+ const userId = this.loggedUser?.id;
123
+ this.loggedUser = null;
124
+ if (this.session.forget) {
125
+ await Promise.resolve(this.session.forget('auth_user_id'));
126
+ }
127
+ this.clearRememberCookie();
128
+ if (userId && this.provider.updateRememberToken) {
129
+ // Invalidate token in provider asynchronously
130
+ this.provider.updateRememberToken({ id: userId }, null).catch(() => { });
131
+ }
132
+ }
133
+ setUser(user) {
134
+ this.loggedUser = user;
135
+ }
136
+ setRequest(request) {
137
+ this.request = request;
138
+ if (request && request.session) {
139
+ this.session = request.session;
140
+ }
141
+ }
142
+ getRememberCookie() {
143
+ if (this.request?.cookies && typeof this.request.cookies === 'function') {
144
+ return this.request.cookies('remember_web');
145
+ }
146
+ return this.request?.cookies?.['remember_web'] || null;
147
+ }
148
+ queueRememberCookie(userId, token) {
149
+ const val = `${userId}|${token}`;
150
+ if (this.request?.cookie && typeof this.request.cookie === 'function') {
151
+ // Expires in 5 years essentially "forever" in internet time
152
+ this.request.cookie('remember_web', val, { maxAge: 5 * 365 * 24 * 60 * 60 * 1000, httpOnly: true });
153
+ }
154
+ }
155
+ clearRememberCookie() {
156
+ if (this.request?.clearCookie && typeof this.request.clearCookie === 'function') {
157
+ this.request.clearCookie('remember_web');
158
+ }
159
+ }
160
+ }
161
+ exports.SessionGuard = SessionGuard;
162
+ //# sourceMappingURL=SessionGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionGuard.js","sourceRoot":"","sources":["../../../src/Guards/SessionGuard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { Guard } from '../Guard';
2
+ export declare class TokenGuard implements Guard {
3
+ private provider;
4
+ private storageKey;
5
+ private inputKey;
6
+ private request;
7
+ constructor(provider: any, request: any, inputKey?: string, storageKey?: string);
8
+ user(): Promise<any>;
9
+ check(): Promise<boolean>;
10
+ guest(): Promise<boolean>;
11
+ id(): Promise<string | number | null>;
12
+ validate(credentials: Record<string, any>): Promise<boolean>;
13
+ setUser(user: any): void;
14
+ setRequest(request: any): void;
15
+ protected getTokenForRequest(): string | null;
16
+ }
17
+ //# sourceMappingURL=TokenGuard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenGuard.d.ts","sourceRoot":"","sources":["../../../src/Guards/TokenGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,qBAAa,UAAW,YAAW,KAAK;IACpC,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,OAAO,CAAM;gBAET,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAE,MAAoB,EAAE,UAAU,GAAE,MAAoB;IAO5F,IAAI;IASJ,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAIzB,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAIzB,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAKrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlE,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAMxB,UAAU,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IAIrC,SAAS,CAAC,kBAAkB,IAAI,MAAM,GAAG,IAAI;CAmBhD"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TokenGuard = void 0;
4
+ class TokenGuard {
5
+ constructor(provider, request, inputKey = 'api_token', storageKey = 'api_token') {
6
+ this.storageKey = 'api_token';
7
+ this.inputKey = 'api_token';
8
+ this.provider = provider;
9
+ this.request = request;
10
+ this.inputKey = inputKey;
11
+ this.storageKey = storageKey;
12
+ }
13
+ async user() {
14
+ if (!this.request)
15
+ return null;
16
+ let token = this.getTokenForRequest();
17
+ if (!token)
18
+ return null;
19
+ return await this.provider.retrieveByCredentials({ [this.storageKey]: token });
20
+ }
21
+ async check() {
22
+ return !!(await this.user());
23
+ }
24
+ async guest() {
25
+ return !(await this.check());
26
+ }
27
+ async id() {
28
+ const user = await this.user();
29
+ return user ? user.id : null;
30
+ }
31
+ async validate(credentials) {
32
+ return !!(await this.provider.retrieveByCredentials(credentials));
33
+ }
34
+ setUser(user) {
35
+ if (this.request) {
36
+ this.request.user = user;
37
+ }
38
+ }
39
+ setRequest(request) {
40
+ this.request = request;
41
+ }
42
+ getTokenForRequest() {
43
+ // Simple implementation: check query param, input body, or Bearer token
44
+ if (this.request.query && this.request.query[this.inputKey]) {
45
+ return this.request.query[this.inputKey];
46
+ }
47
+ if (this.request.body && this.request.body[this.inputKey]) {
48
+ return this.request.body[this.inputKey];
49
+ }
50
+ if (this.request.headers && this.request.headers['authorization']) {
51
+ const authHeader = this.request.headers['authorization'];
52
+ if (authHeader.startsWith('Bearer ')) {
53
+ return authHeader.substring(7);
54
+ }
55
+ }
56
+ return null;
57
+ }
58
+ }
59
+ exports.TokenGuard = TokenGuard;
60
+ //# sourceMappingURL=TokenGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenGuard.js","sourceRoot":"","sources":["../../../src/Guards/TokenGuard.ts"],"names":[],"mappings":";;;AAEA,MAAa,UAAU;IAMnB,YAAY,QAAa,EAAE,OAAY,EAAE,WAAmB,WAAW,EAAE,aAAqB,WAAW;QAJjG,eAAU,GAAW,WAAW,CAAC;QACjC,aAAQ,GAAW,WAAW,CAAC;QAInC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,IAAI;QACb,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE/B,IAAI,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACnF,CAAC;IAEM,KAAK,CAAC,KAAK;QACd,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,KAAK;QACd,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,EAAE;QACX,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,WAAgC;QAClD,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC;IACtE,CAAC;IAEM,OAAO,CAAC,IAAS;QACpB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QAC7B,CAAC;IACL,CAAC;IAEM,UAAU,CAAC,OAAY;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAES,kBAAkB;QACxB,wEAAwE;QACxE,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1D,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YAChE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACzD,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnC,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AApED,gCAoEC"}
@@ -0,0 +1,15 @@
1
+ export declare class Hasher {
2
+ /**
3
+ * Create a hash from a plain text value.
4
+ */
5
+ static make(value: string, rounds?: number): Promise<string>;
6
+ /**
7
+ * Check if a plain text value matches a hash.
8
+ */
9
+ static check(value: string, hash: string): Promise<boolean>;
10
+ /**
11
+ * Check if a hash needs to be rehashed.
12
+ */
13
+ static needsRehash(hash: string): boolean;
14
+ }
15
+ //# sourceMappingURL=Hasher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Hasher.d.ts","sourceRoot":"","sources":["../../src/Hasher.ts"],"names":[],"mappings":"AAEA,qBAAa,MAAM;IACf;;OAEG;WACiB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7E;;OAEG;WACiB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxE;;OAEG;WACW,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAGnD"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Hasher = void 0;
37
+ const bcrypt = __importStar(require("bcryptjs"));
38
+ class Hasher {
39
+ /**
40
+ * Create a hash from a plain text value.
41
+ */
42
+ static async make(value, rounds = 10) {
43
+ return await bcrypt.hash(value, rounds);
44
+ }
45
+ /**
46
+ * Check if a plain text value matches a hash.
47
+ */
48
+ static async check(value, hash) {
49
+ return await bcrypt.compare(value, hash);
50
+ }
51
+ /**
52
+ * Check if a hash needs to be rehashed.
53
+ */
54
+ static needsRehash(hash) {
55
+ return false; // Implement proper check later
56
+ }
57
+ }
58
+ exports.Hasher = Hasher;
59
+ //# sourceMappingURL=Hasher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Hasher.js","sourceRoot":"","sources":["../../src/Hasher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmC;AAEnC,MAAa,MAAM;IACf;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,SAAiB,EAAE;QACvD,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,IAAY;QACjD,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,WAAW,CAAC,IAAY;QAClC,OAAO,KAAK,CAAC,CAAC,+BAA+B;IACjD,CAAC;CACJ;AArBD,wBAqBC"}
@@ -0,0 +1,24 @@
1
+ import { AuthManager } from '../AuthManager';
2
+ export declare class Authenticate {
3
+ protected guards: string[];
4
+ private auth;
5
+ constructor(auth: AuthManager);
6
+ /**
7
+ * Set the guards that should be checked.
8
+ */
9
+ using(...guards: string[]): this;
10
+ /**
11
+ * Handle the incoming request.
12
+ * Creates a per-request AuthContext and binds it to req.auth
13
+ */
14
+ handle(request: any, next: (request: any) => Promise<any> | any, response?: any, ...guards: string[]): Promise<any>;
15
+ /**
16
+ * Handle an unauthenticated user.
17
+ */
18
+ protected unauthenticated(request: any, guards: string[], response?: any): any;
19
+ /**
20
+ * Get the path the user should be redirected to when they are not authenticated.
21
+ */
22
+ protected redirectTo(request: any): string | null;
23
+ }
24
+ //# sourceMappingURL=Authenticate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Authenticate.d.ts","sourceRoot":"","sources":["../../../src/Middleware/Authenticate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,qBAAa,YAAY;IACrB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,CAAM;IAEhC,OAAO,CAAC,IAAI,CAAc;gBACd,IAAI,EAAE,WAAW;IAI7B;;OAEG;IACI,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAKvC;;;OAGG;IACU,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IA4BhI;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG;IAa9E;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI;CAGpD"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Authenticate = void 0;
4
+ const AuthManager_1 = require("../AuthManager");
5
+ class Authenticate {
6
+ constructor(auth) {
7
+ this.guards = [];
8
+ this.auth = auth instanceof AuthManager_1.AuthManager ? auth : auth.resolve(AuthManager_1.AuthManager);
9
+ }
10
+ /**
11
+ * Set the guards that should be checked.
12
+ */
13
+ using(...guards) {
14
+ this.guards = guards;
15
+ return this;
16
+ }
17
+ /**
18
+ * Handle the incoming request.
19
+ * Creates a per-request AuthContext and binds it to req.auth
20
+ */
21
+ async handle(request, next, response, ...guards) {
22
+ // 1. Create an isolated AuthContext for this request (binds to req.auth)
23
+ const context = this.auth.createContext(request);
24
+ // 2. Run the rest of the request within this context (for global facade support)
25
+ return await this.auth.runWithContext(context, async () => {
26
+ // 3. Determine guards to check
27
+ // Priority:
28
+ // 1. Guards passed via middleware string (e.g., 'auth:web,admin')
29
+ // 2. Guards set via .using() in code
30
+ // 3. Default guard from config
31
+ const guardsToCheck = guards.length > 0
32
+ ? guards
33
+ : (this.guards.length === 0 ? [this.auth.getDefaultGuard()] : this.guards);
34
+ // 4. Check each guard
35
+ for (const guard of guardsToCheck) {
36
+ if (await context.guard(guard).check()) {
37
+ this.auth.shouldUse(guard);
38
+ return next(request);
39
+ }
40
+ }
41
+ // 5. Fail if no guard authenticated
42
+ return this.unauthenticated(request, guardsToCheck, response);
43
+ });
44
+ }
45
+ /**
46
+ * Handle an unauthenticated user.
47
+ */
48
+ unauthenticated(request, guards, response) {
49
+ if (request && typeof request.expectsJson === 'function' && request.expectsJson()) {
50
+ return response.json({ message: 'Unauthenticated.' }, 401);
51
+ }
52
+ const redirectTo = this.redirectTo(request);
53
+ if (redirectTo && response) {
54
+ return response.redirect(redirectTo);
55
+ }
56
+ throw new Error('Unauthenticated.');
57
+ }
58
+ /**
59
+ * Get the path the user should be redirected to when they are not authenticated.
60
+ */
61
+ redirectTo(request) {
62
+ return '/auth/login';
63
+ }
64
+ }
65
+ exports.Authenticate = Authenticate;
66
+ //# sourceMappingURL=Authenticate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Authenticate.js","sourceRoot":"","sources":["../../../src/Middleware/Authenticate.ts"],"names":[],"mappings":";;;AAAA,gDAA6C;AAE7C,MAAa,YAAY;IAIrB,YAAY,IAAiB;QAHnB,WAAM,GAAa,EAAE,CAAC;QAI5B,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,yBAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,IAAY,CAAC,OAAO,CAAC,yBAAW,CAAC,CAAC;IACxF,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,GAAG,MAAgB;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,MAAM,CAAC,OAAY,EAAE,IAA0C,EAAE,QAAc,EAAE,GAAG,MAAgB;QAC7G,yEAAyE;QACzE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAEjD,iFAAiF;QACjF,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YACtD,+BAA+B;YAC/B,YAAY;YACZ,kEAAkE;YAClE,qCAAqC;YACrC,+BAA+B;YAC/B,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;gBACnC,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAE/E,sBAAsB;YACtB,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;gBAChC,IAAI,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;oBACrC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzB,CAAC;YACL,CAAC;YAED,oCAAoC;YACpC,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACO,eAAe,CAAC,OAAY,EAAE,MAAgB,EAAE,QAAc;QACpE,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,UAAU,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAChF,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;YACzB,OAAO,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACO,UAAU,CAAC,OAAY;QAC7B,OAAO,aAAa,CAAC;IACzB,CAAC;CACJ;AAtED,oCAsEC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Middleware that ensures the authenticated user has verified their email.
3
+ * Use as: .middleware(['verified'])
4
+ */
5
+ export declare class EnsureEmailIsVerified {
6
+ handle(request: any, next: (req: any) => Promise<any> | any, response?: any): Promise<any>;
7
+ }
8
+ //# sourceMappingURL=EnsureEmailIsVerified.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnsureEmailIsVerified.d.ts","sourceRoot":"","sources":["../../../src/Middleware/EnsureEmailIsVerified.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,qBAAqB;IACjB,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;CAmB1G"}