@rapidrest/service-core 2.0.0 → 2.1.1
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.
- package/dist/lib/BackgroundServiceManager.js +51 -9
- package/dist/lib/BackgroundServiceManager.js.map +1 -1
- package/dist/lib/EventListenerManager.js +35 -2
- package/dist/lib/EventListenerManager.js.map +1 -1
- package/dist/lib/NetUtils.js +215 -21
- package/dist/lib/NetUtils.js.map +1 -1
- package/dist/lib/ObjectFactory.js +7 -2
- package/dist/lib/ObjectFactory.js.map +1 -1
- package/dist/lib/RateLimiter.js.map +1 -1
- package/dist/lib/Server.js +121 -80
- package/dist/lib/Server.js.map +1 -1
- package/dist/lib/auth/AuthMiddleware.js +160 -100
- package/dist/lib/auth/AuthMiddleware.js.map +1 -1
- package/dist/lib/auth/JWTStrategy.js +6 -2
- package/dist/lib/auth/JWTStrategy.js.map +1 -1
- package/dist/lib/database/ConnectionManager.js +50 -2
- package/dist/lib/database/ConnectionManager.js.map +1 -1
- package/dist/lib/database/DatabaseErrors.js +88 -0
- package/dist/lib/database/DatabaseErrors.js.map +1 -0
- package/dist/lib/database/MongoRepository.js +31 -3
- package/dist/lib/database/MongoRepository.js.map +1 -1
- package/dist/lib/database/MongoSchemaSync.js +7 -1
- package/dist/lib/database/MongoSchemaSync.js.map +1 -1
- package/dist/lib/database/TypeOrmSupport.js +49 -15
- package/dist/lib/database/TypeOrmSupport.js.map +1 -1
- package/dist/lib/database/index.js +1 -0
- package/dist/lib/database/index.js.map +1 -1
- package/dist/lib/decorators/PersistenceDecorators.js +23 -0
- package/dist/lib/decorators/PersistenceDecorators.js.map +1 -1
- package/dist/lib/decorators/RouteDecorators.js +4 -2
- package/dist/lib/decorators/RouteDecorators.js.map +1 -1
- package/dist/lib/http/bun/BunRouter.js +119 -9
- package/dist/lib/http/bun/BunRouter.js.map +1 -1
- package/dist/lib/http/index.js +1 -0
- package/dist/lib/http/index.js.map +1 -1
- package/dist/lib/http/session/sessionMiddleware.js +62 -14
- package/dist/lib/http/session/sessionMiddleware.js.map +1 -1
- package/dist/lib/http/types.js +10 -1
- package/dist/lib/http/types.js.map +1 -1
- package/dist/lib/http/uWS/Adapters.js +31 -13
- package/dist/lib/http/uWS/Adapters.js.map +1 -1
- package/dist/lib/http/uWS/Router.js +80 -16
- package/dist/lib/http/uWS/Router.js.map +1 -1
- package/dist/lib/http/uWS/WebSocket.js +4 -2
- package/dist/lib/http/uWS/WebSocket.js.map +1 -1
- package/dist/lib/models/ModelUtils.js +255 -81
- package/dist/lib/models/ModelUtils.js.map +1 -1
- package/dist/lib/models/RepoUtils.js +863 -266
- package/dist/lib/models/RepoUtils.js.map +1 -1
- package/dist/lib/routes/BaseAdminRoute.js +5 -4
- package/dist/lib/routes/BaseAdminRoute.js.map +1 -1
- package/dist/lib/routes/BasePushRoute.js +104 -40
- package/dist/lib/routes/BasePushRoute.js.map +1 -1
- package/dist/lib/routes/CRUDRoute.js +31 -17
- package/dist/lib/routes/CRUDRoute.js.map +1 -1
- package/dist/lib/routes/RouteUtils.js +120 -29
- package/dist/lib/routes/RouteUtils.js.map +1 -1
- package/dist/lib/security/ACLUtils.js +170 -34
- package/dist/lib/security/ACLUtils.js.map +1 -1
- package/dist/types/BackgroundServiceManager.d.ts +6 -0
- package/dist/types/EventListenerManager.d.ts +4 -0
- package/dist/types/NetUtils.d.ts +65 -6
- package/dist/types/RateLimiter.d.ts +4 -3
- package/dist/types/Server.d.ts +33 -2
- package/dist/types/auth/AuthMiddleware.d.ts +35 -4
- package/dist/types/database/ConnectionManager.d.ts +18 -0
- package/dist/types/database/DatabaseErrors.d.ts +26 -0
- package/dist/types/database/MongoRepository.d.ts +21 -2
- package/dist/types/database/TypeOrmSupport.d.ts +11 -2
- package/dist/types/database/index.d.ts +1 -0
- package/dist/types/decorators/PersistenceDecorators.d.ts +31 -0
- package/dist/types/decorators/RouteDecorators.d.ts +4 -2
- package/dist/types/http/bun/BunRouter.d.ts +23 -2
- package/dist/types/http/index.d.ts +2 -1
- package/dist/types/http/session/sessionMiddleware.d.ts +14 -4
- package/dist/types/http/types.d.ts +40 -0
- package/dist/types/http/uWS/Adapters.d.ts +10 -1
- package/dist/types/http/uWS/Router.d.ts +15 -2
- package/dist/types/models/ModelUtils.d.ts +96 -1
- package/dist/types/models/RepoUtils.d.ts +240 -4
- package/dist/types/routes/BasePushRoute.d.ts +5 -0
- package/dist/types/routes/CRUDRoute.d.ts +10 -0
- package/dist/types/routes/RouteUtils.d.ts +37 -1
- package/dist/types/security/ACLUtils.d.ts +68 -7
- package/package.json +1 -1
|
@@ -11,7 +11,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
// Copyright (C) 2020-2026 Jean-Philippe Steinmetz
|
|
12
12
|
// SPDX-License-Identifier: MPL-2.0
|
|
13
13
|
///////////////////////////////////////////////////////////////////////////////
|
|
14
|
-
import { ApiError,
|
|
14
|
+
import { ApiError, ObjectDecorators } from "@rapidrest/core";
|
|
15
15
|
import { ApiErrors, ApiErrorMessages } from "../ApiErrors.js";
|
|
16
16
|
import { JWTStrategy } from "./JWTStrategy.js";
|
|
17
17
|
const { Config, Init } = ObjectDecorators;
|
|
@@ -39,35 +39,38 @@ export class AuthMiddleware {
|
|
|
39
39
|
/**
|
|
40
40
|
* Performs authentication of the given request using one of the provided strategies.
|
|
41
41
|
*
|
|
42
|
+
* Each strategy is tried in order until one succeeds. A strategy that throws doesn't stop the others from
|
|
43
|
+
* being tried, since several strategies can claim the same credential (e.g. `jwt` and `oauth_bearer` both
|
|
44
|
+
* read an `Authorization: Bearer` header). If no strategy succeeds and at least one threw, the first error
|
|
45
|
+
* thrown is rethrown, whether or not `required` is set, so callers can still tell a bad credential from a
|
|
46
|
+
* missing one.
|
|
47
|
+
*
|
|
42
48
|
* @param strategies The list of strategy names to attempt authentication with.
|
|
43
49
|
* @param req The request containing data to perform authenticate with.
|
|
44
50
|
* @param res The response to use when writing back directly to the client.
|
|
45
51
|
* @param required Set to `true` to if authentication is required to pass, otherwise set to `false`.
|
|
46
52
|
*/
|
|
47
53
|
async authenticate(strategies, req, res, required) {
|
|
54
|
+
const errors = [];
|
|
48
55
|
for (const name of strategies) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (strategy) {
|
|
56
|
+
const strategy = this.getStrategy(name);
|
|
57
|
+
try {
|
|
52
58
|
const authResult = await strategy.authenticate(req, res);
|
|
53
|
-
// Was it successful?
|
|
54
59
|
if (authResult) {
|
|
55
60
|
return authResult;
|
|
56
61
|
}
|
|
57
62
|
}
|
|
58
|
-
|
|
59
|
-
|
|
63
|
+
catch (err) {
|
|
64
|
+
errors.push(err);
|
|
60
65
|
}
|
|
61
66
|
}
|
|
62
|
-
|
|
63
|
-
throw new Error("Authentication failed.");
|
|
64
|
-
}
|
|
65
|
-
return undefined;
|
|
67
|
+
return this.authFailed(errors, required);
|
|
66
68
|
}
|
|
67
69
|
/**
|
|
68
70
|
* Performs authentication of the given request using one of the provided strategies.
|
|
69
71
|
*
|
|
70
|
-
* This is the synchronous version of `authenticate` that performs blocking based authentication.
|
|
72
|
+
* This is the synchronous version of `authenticate` that performs blocking based authentication. It follows
|
|
73
|
+
* the same rules for strategies that throw.
|
|
71
74
|
*
|
|
72
75
|
* @param strategies The list of strategy names to attempt authentication with.
|
|
73
76
|
* @param req The request containing data to perform authenticate with.
|
|
@@ -75,38 +78,79 @@ export class AuthMiddleware {
|
|
|
75
78
|
* @param required Set to `true` to if authentication is required to pass, otherwise set to `false`.
|
|
76
79
|
*/
|
|
77
80
|
authenticateSync(strategies, req, res, required) {
|
|
78
|
-
|
|
81
|
+
const errors = [];
|
|
79
82
|
for (const name of strategies) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
throw new Error("No authentication strategy has been registered with name: " + name);
|
|
83
|
+
const strategy = this.getStrategy(name);
|
|
84
|
+
try {
|
|
85
|
+
const authResult = strategy.authenticateSync(req, res);
|
|
86
|
+
if (authResult) {
|
|
87
|
+
return authResult;
|
|
88
|
+
}
|
|
87
89
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
break;
|
|
90
|
+
catch (err) {
|
|
91
|
+
errors.push(err);
|
|
91
92
|
}
|
|
92
93
|
}
|
|
93
|
-
|
|
94
|
+
return this.authFailed(errors, required);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Returns the registered strategy with the given name, throwing if there is none. A missing strategy is a
|
|
98
|
+
* configuration error, so it is never treated as an ordinary authentication failure.
|
|
99
|
+
*/
|
|
100
|
+
getStrategy(name) {
|
|
101
|
+
const strategy = this.strategies.get(name);
|
|
102
|
+
if (!strategy) {
|
|
103
|
+
throw new Error("No authentication strategy has been registered with name: " + name);
|
|
104
|
+
}
|
|
105
|
+
return strategy;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Handles the case where no strategy authenticated the request: rethrows the first strategy error if there was
|
|
109
|
+
* one, throws if authentication is required, and otherwise returns `undefined`.
|
|
110
|
+
*/
|
|
111
|
+
authFailed(errors, required) {
|
|
112
|
+
if (errors.length > 0) {
|
|
113
|
+
throw errors[0];
|
|
114
|
+
}
|
|
115
|
+
if (required) {
|
|
94
116
|
throw new Error("Authentication failed.");
|
|
95
117
|
}
|
|
96
|
-
return
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Builds a copy of `req` that carries only the given token, as an `Authorization: Bearer` header. Used to run
|
|
122
|
+
* a WebSocket `LOGIN` message's token through the route's strategies. Query parameters and cookies from the
|
|
123
|
+
* upgrade request are removed, so a strategy can't authenticate from a credential other than the one supplied.
|
|
124
|
+
*/
|
|
125
|
+
createTokenRequest(req, token) {
|
|
126
|
+
const headers = { ...req.headers, authorization: `Bearer ${token}` };
|
|
127
|
+
return Object.create(req, {
|
|
128
|
+
cookies: { value: {}, enumerable: true, writable: true },
|
|
129
|
+
headers: { value: headers, enumerable: true, writable: true },
|
|
130
|
+
query: { value: {}, enumerable: true, writable: true },
|
|
131
|
+
signedCookies: { value: {}, enumerable: true, writable: true },
|
|
132
|
+
});
|
|
97
133
|
}
|
|
98
134
|
/**
|
|
99
135
|
* Returns a request handler function that will perform authentication of a websocket connection. Authentication
|
|
100
136
|
* can be handled in two ways:
|
|
101
137
|
*
|
|
102
|
-
* 1. Authorization header
|
|
138
|
+
* 1. Authorization header (or any other credential a strategy reads from the upgrade request)
|
|
103
139
|
* 2. Negotiation via handshake
|
|
104
140
|
*
|
|
105
|
-
*
|
|
141
|
+
* Pre-upgrade auth (see `RouteUtils.registerRoute()`) can only run strategies synchronously. When it didn't
|
|
142
|
+
* authenticate the connection, this handler first runs the strategies asynchronously against the upgrade
|
|
143
|
+
* request, which covers async-only strategies such as `oauth_bearer`. If that doesn't authenticate either, it
|
|
144
|
+
* waits for a `LOGIN` message whose `data` token is also verified through `strategies`, sent to them as an
|
|
145
|
+
* `Authorization: Bearer` header.
|
|
146
|
+
*
|
|
147
|
+
* When `required` is `false`, a failed or missing credential never closes the connection; the handler proceeds
|
|
148
|
+
* anonymously.
|
|
106
149
|
*
|
|
107
150
|
* @param required Set to `true` to indicate that auth is required, otherwise `false`.
|
|
151
|
+
* @param strategies The strategy names to authenticate with. Defaults to `["jwt"]`, matching `RouteUtils`.
|
|
108
152
|
*/
|
|
109
|
-
authWebSocket(required) {
|
|
153
|
+
authWebSocket(required, strategies = ["jwt"]) {
|
|
110
154
|
return (req, _res, next) => {
|
|
111
155
|
const sock = req.websocket || req.socket;
|
|
112
156
|
const user = req.user;
|
|
@@ -128,104 +172,120 @@ export class AuthMiddleware {
|
|
|
128
172
|
sock.removeListener("close", onClose);
|
|
129
173
|
fn();
|
|
130
174
|
};
|
|
175
|
+
const accept = (result) => {
|
|
176
|
+
req.user = result.user;
|
|
177
|
+
// Set req.auth so @User decorator in wrapMiddleware resolves correctly
|
|
178
|
+
req.auth = result;
|
|
179
|
+
next();
|
|
180
|
+
};
|
|
181
|
+
const rejectAuth = (id) => {
|
|
182
|
+
const error = new ApiError(ApiErrors.AUTH_FAILED, 401, ApiErrorMessages.AUTH_FAILED);
|
|
183
|
+
if (id !== undefined) {
|
|
184
|
+
sock.send(JSON.stringify({ id, type: "LOGIN_RESPONSE", success: false, data: error.message }));
|
|
185
|
+
}
|
|
186
|
+
sock.close(1002, error.message);
|
|
187
|
+
next(error);
|
|
188
|
+
};
|
|
189
|
+
const rejectInvalid = () => {
|
|
190
|
+
if (required) {
|
|
191
|
+
const error = new ApiError(ApiErrors.INVALID_REQUEST, 400, ApiErrorMessages.INVALID_REQUEST);
|
|
192
|
+
sock.close(1002, error.code);
|
|
193
|
+
next(error);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
next();
|
|
197
|
+
}
|
|
198
|
+
};
|
|
131
199
|
const onClose = () => {
|
|
132
200
|
// Socket closed before auth completed — unblock runChain so the open handler can
|
|
133
201
|
// finish. The readyState === 3 guard in the router's ws() open handler (uWS/Router.ts
|
|
134
202
|
// and bun/BunRouter.ts both implement it) will skip the final ws.close().
|
|
135
203
|
settle(() => next());
|
|
136
204
|
};
|
|
137
|
-
const
|
|
138
|
-
|
|
205
|
+
const login = async (message) => {
|
|
206
|
+
let result = undefined;
|
|
207
|
+
try {
|
|
208
|
+
if (typeof message.data === "string" && message.data.length > 0) {
|
|
209
|
+
result = await this.authenticate(strategies, this.createTokenRequest(req, message.data));
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
// A malformed token makes a strategy throw. Keep the established response for that case:
|
|
214
|
+
// close with `INVALID_REQUEST` when auth is required, otherwise proceed anonymously.
|
|
215
|
+
settle(rejectInvalid);
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
if (result?.user?.uid) {
|
|
219
|
+
const loginResult = result;
|
|
139
220
|
settle(() => {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
sock.close(1002, error.code);
|
|
143
|
-
next(error);
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
next();
|
|
147
|
-
}
|
|
221
|
+
sock.send(JSON.stringify({ id: message.id, type: "LOGIN_RESPONSE", success: true }));
|
|
222
|
+
accept(loginResult);
|
|
148
223
|
});
|
|
224
|
+
}
|
|
225
|
+
else if (required) {
|
|
226
|
+
settle(() => rejectAuth(message.id));
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
settle(() => {
|
|
230
|
+
sock.send(JSON.stringify({
|
|
231
|
+
id: message.id,
|
|
232
|
+
type: "LOGIN_RESPONSE",
|
|
233
|
+
success: false,
|
|
234
|
+
data: "Invalid authentication token.",
|
|
235
|
+
}));
|
|
236
|
+
next();
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
const onMessage = (data, isBinary) => {
|
|
241
|
+
if (isBinary) {
|
|
242
|
+
settle(rejectInvalid);
|
|
149
243
|
return;
|
|
150
244
|
}
|
|
245
|
+
let message = undefined;
|
|
151
246
|
try {
|
|
152
|
-
|
|
153
|
-
if (message.type === "LOGIN") {
|
|
154
|
-
const payload = JWTUtils.decodeTokenSync(this.authConfig, message.data);
|
|
155
|
-
const loginUser = payload && payload.profile ? payload.profile : null;
|
|
156
|
-
if (loginUser && loginUser.uid) {
|
|
157
|
-
settle(() => {
|
|
158
|
-
sock.send(JSON.stringify({ id: message.id, type: "LOGIN_RESPONSE", success: true }));
|
|
159
|
-
req.user = loginUser;
|
|
160
|
-
// Set req.auth so @User decorator in wrapMiddleware resolves correctly
|
|
161
|
-
req.auth = { user: loginUser, method: "jwt", data: message.data, payload };
|
|
162
|
-
next();
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
else if (required) {
|
|
166
|
-
settle(() => {
|
|
167
|
-
const error = new ApiError(ApiErrors.AUTH_FAILED, 401, ApiErrorMessages.AUTH_FAILED);
|
|
168
|
-
sock.send(JSON.stringify({
|
|
169
|
-
id: message.id,
|
|
170
|
-
type: "LOGIN_RESPONSE",
|
|
171
|
-
success: false,
|
|
172
|
-
data: error.message,
|
|
173
|
-
}));
|
|
174
|
-
sock.close(1002, error.message);
|
|
175
|
-
next(error);
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
settle(() => {
|
|
180
|
-
sock.send(JSON.stringify({
|
|
181
|
-
id: message.id,
|
|
182
|
-
type: "LOGIN_RESPONSE",
|
|
183
|
-
success: false,
|
|
184
|
-
data: "Invalid authentication token.",
|
|
185
|
-
}));
|
|
186
|
-
next();
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
else if (required) {
|
|
191
|
-
settle(() => {
|
|
192
|
-
const error = new ApiError(ApiErrors.INVALID_REQUEST, 400, ApiErrorMessages.INVALID_REQUEST);
|
|
193
|
-
sock.close(1002, error.code);
|
|
194
|
-
next(error);
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
settle(() => next());
|
|
199
|
-
}
|
|
247
|
+
message = JSON.parse(data);
|
|
200
248
|
}
|
|
201
249
|
catch {
|
|
202
|
-
settle(
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
250
|
+
settle(rejectInvalid);
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
if (message?.type === "LOGIN") {
|
|
254
|
+
// Stop listening now. The login verification is async, and the timer or a close can still
|
|
255
|
+
// settle first while it runs.
|
|
256
|
+
sock.removeListener("message", onMessage);
|
|
257
|
+
void login(message);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
settle(rejectInvalid);
|
|
212
261
|
}
|
|
213
262
|
};
|
|
263
|
+
// Attach listeners before any await, so a LOGIN frame sent right after the upgrade isn't missed.
|
|
214
264
|
sock.once("message", onMessage);
|
|
215
265
|
sock.once("close", onClose);
|
|
216
266
|
const timer = setTimeout(() => {
|
|
217
267
|
settle(() => {
|
|
218
268
|
if (required) {
|
|
219
|
-
|
|
220
|
-
error.status = 401;
|
|
221
|
-
sock.close(1002, error.message);
|
|
222
|
-
next(error);
|
|
269
|
+
rejectAuth();
|
|
223
270
|
}
|
|
224
271
|
else {
|
|
225
272
|
next();
|
|
226
273
|
}
|
|
227
274
|
});
|
|
228
275
|
}, this.authSocketTimeout);
|
|
276
|
+
// Try the strategies against the upgrade request itself. This covers credentials that the synchronous
|
|
277
|
+
// pre-upgrade auth couldn't verify, e.g. an `Authorization` header for an async-only strategy.
|
|
278
|
+
this.authenticate(strategies, req).then((result) => {
|
|
279
|
+
if (result?.user?.uid) {
|
|
280
|
+
settle(() => accept(result));
|
|
281
|
+
}
|
|
282
|
+
}, () => {
|
|
283
|
+
// A credential was sent but is invalid. Only reject when auth is required; otherwise keep
|
|
284
|
+
// waiting for a LOGIN message, the same as when no credential was sent.
|
|
285
|
+
if (required) {
|
|
286
|
+
settle(() => rejectAuth());
|
|
287
|
+
}
|
|
288
|
+
});
|
|
229
289
|
};
|
|
230
290
|
}
|
|
231
291
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthMiddleware.js","sourceRoot":"","sources":["../../../src/auth/AuthMiddleware.ts"],"names":[],"mappings":";;;;;;;;;AAAA,gFAAgF;AAChF,kDAAkD;AAClD,mCAAmC;AACnC,+EAA+E;AAC/E,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"AuthMiddleware.js","sourceRoot":"","sources":["../../../src/auth/AuthMiddleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -154,7 +154,9 @@ export class JWTStrategy {
|
|
|
154
154
|
authPayload = payload;
|
|
155
155
|
if (user) {
|
|
156
156
|
// If sessions are enabled, update the stored information about the authenticated user
|
|
157
|
-
|
|
157
|
+
// Only a session the client already holds: a cookie-less bearer client would otherwise get a new
|
|
158
|
+
// session persisted on every request (see sessionMiddleware's `sessionIsNew`).
|
|
159
|
+
if (req.session && !req.sessionIsNew) {
|
|
158
160
|
const now = Date.now();
|
|
159
161
|
req.session.ip = NetUtils.getIPAddress(req);
|
|
160
162
|
req.session.lastAccess = now;
|
|
@@ -186,7 +188,9 @@ export class JWTStrategy {
|
|
|
186
188
|
authPayload = payload;
|
|
187
189
|
if (user) {
|
|
188
190
|
// If sessions are enabled, update the stored information about the authenticated user
|
|
189
|
-
|
|
191
|
+
// Only a session the client already holds: a cookie-less bearer client would otherwise get a new
|
|
192
|
+
// session persisted on every request (see sessionMiddleware's `sessionIsNew`).
|
|
193
|
+
if (req.session && !req.sessionIsNew) {
|
|
190
194
|
const now = Date.now();
|
|
191
195
|
req.session.ip = NetUtils.getIPAddress(req);
|
|
192
196
|
req.session.lastAccess = now;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JWTStrategy.js","sourceRoot":"","sources":["../../../src/auth/JWTStrategy.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"JWTStrategy.js","sourceRoot":"","sources":["../../../src/auth/JWTStrategy.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,52 @@ import { importRedis, isSqlDataSource } from "./ConnectionKinds.js";
|
|
|
16
16
|
import { MongoConnection } from "./MongoConnection.js";
|
|
17
17
|
import { MongoSchemaSync } from "./MongoSchemaSync.js";
|
|
18
18
|
const { Destroy, Logger } = ObjectDecorators;
|
|
19
|
+
/** Marks a redis client that already has the listeners from `attachRedisErrorHandler()`. */
|
|
20
|
+
const REDIS_ERROR_HANDLER = Symbol("rrst:redisErrorHandler");
|
|
21
|
+
/**
|
|
22
|
+
* Attaches `error`, `reconnecting` and `ready` listeners that log a redis client's connection problems.
|
|
23
|
+
*
|
|
24
|
+
* A node-redis client emits `error` whenever its socket fails (e.g. the server restarts or the network drops). An
|
|
25
|
+
* `EventEmitter` with no `error` listener throws on that event, which crashes the whole process. With a listener,
|
|
26
|
+
* the client's own reconnect strategy (exponential backoff, retried indefinitely by default) takes over and pending
|
|
27
|
+
* subscriptions are restored once it reconnects.
|
|
28
|
+
*
|
|
29
|
+
* To avoid flooding the log while a server is unreachable, the first error of an outage is logged as an error and
|
|
30
|
+
* the following ones as debug messages, until the client is `ready` again. Every client this library creates, and
|
|
31
|
+
* every `duplicate()` of one, must be passed through this function. Calling it again on the same client does nothing.
|
|
32
|
+
*
|
|
33
|
+
* @param client The redis client to attach the listeners to. Clients without an `on()` method are ignored.
|
|
34
|
+
* @param logger The logger to report errors to.
|
|
35
|
+
* @param name A name for the client, used in log messages.
|
|
36
|
+
* @returns The given client.
|
|
37
|
+
*/
|
|
38
|
+
export function attachRedisErrorHandler(client, logger, name) {
|
|
39
|
+
const emitter = client;
|
|
40
|
+
if (!emitter || typeof emitter.on !== "function" || emitter[REDIS_ERROR_HANDLER]) {
|
|
41
|
+
return client;
|
|
42
|
+
}
|
|
43
|
+
Object.defineProperty(emitter, REDIS_ERROR_HANDLER, { value: true });
|
|
44
|
+
let failing = false;
|
|
45
|
+
emitter.on("error", (err) => {
|
|
46
|
+
if (!failing) {
|
|
47
|
+
failing = true;
|
|
48
|
+
logger?.error(`Redis connection '${name}' failed: ${err?.message ?? err}`);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
logger?.debug(`Redis connection '${name}' is still failing: ${err?.message ?? err}`);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
emitter.on("reconnecting", () => {
|
|
55
|
+
logger?.debug(`Redis connection '${name}' is reconnecting...`);
|
|
56
|
+
});
|
|
57
|
+
emitter.on("ready", () => {
|
|
58
|
+
if (failing) {
|
|
59
|
+
failing = false;
|
|
60
|
+
logger?.info(`Redis connection '${name}' re-established.`);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
return client;
|
|
64
|
+
}
|
|
19
65
|
/**
|
|
20
66
|
* Provides database connection management.
|
|
21
67
|
*
|
|
@@ -142,7 +188,7 @@ export class ConnectionManager {
|
|
|
142
188
|
// generic importOptionalDependency(pkg, ...) helper, whose variable specifier bundler/test
|
|
143
189
|
// tooling (e.g. Vitest's module mocking) can't always statically analyze and intercept.
|
|
144
190
|
const { createClient } = await importRedis();
|
|
145
|
-
const redisConn = createClient({ url });
|
|
191
|
+
const redisConn = attachRedisErrorHandler(createClient({ url }), this.logger, name);
|
|
146
192
|
await redisConn.connect();
|
|
147
193
|
connection = redisConn;
|
|
148
194
|
}
|
|
@@ -192,7 +238,7 @@ export class ConnectionManager {
|
|
|
192
238
|
* Attempts to disconnect all active database connections.
|
|
193
239
|
*/
|
|
194
240
|
async disconnect() {
|
|
195
|
-
for (const conn of this.connections.
|
|
241
|
+
for (const [name, conn] of this.connections.entries()) {
|
|
196
242
|
if (conn) {
|
|
197
243
|
if (conn instanceof MongoConnection) {
|
|
198
244
|
if (conn.isConnected) {
|
|
@@ -204,6 +250,8 @@ export class ConnectionManager {
|
|
|
204
250
|
if (sqlConn.isInitialized) {
|
|
205
251
|
await sqlConn.destroy();
|
|
206
252
|
}
|
|
253
|
+
const orm = await import("./TypeOrmSupport.js");
|
|
254
|
+
orm.release(name, sqlConn);
|
|
207
255
|
}
|
|
208
256
|
else if (typeof conn.disconnect === "function") {
|
|
209
257
|
// The only other connection kind this class ever creates is a redis client. Duck-typed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectionManager.js","sourceRoot":"","sources":["../../../src/database/ConnectionManager.ts"],"names":[],"mappings":";;;;;;;;;AAAA,gFAAgF;AAChF,kDAAkD;AAClD,mCAAmC;AACnC,+EAA+E;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC;AAE7C;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IAA9B;QACW,gBAAW,GAAgE,IAAI,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ConnectionManager.js","sourceRoot":"","sources":["../../../src/database/ConnectionManager.ts"],"names":[],"mappings":"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"}
|