@rapidrest/service-core 1.8.0 → 2.1.0

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 (87) hide show
  1. package/dist/lib/ApiErrors.js +10 -0
  2. package/dist/lib/ApiErrors.js.map +1 -1
  3. package/dist/lib/BackgroundServiceManager.js +51 -9
  4. package/dist/lib/BackgroundServiceManager.js.map +1 -1
  5. package/dist/lib/EventListenerManager.js +35 -2
  6. package/dist/lib/EventListenerManager.js.map +1 -1
  7. package/dist/lib/NetUtils.js +215 -21
  8. package/dist/lib/NetUtils.js.map +1 -1
  9. package/dist/lib/ObjectFactory.js +7 -2
  10. package/dist/lib/ObjectFactory.js.map +1 -1
  11. package/dist/lib/RateLimiter.js.map +1 -1
  12. package/dist/lib/Server.js +121 -80
  13. package/dist/lib/Server.js.map +1 -1
  14. package/dist/lib/auth/AuthMiddleware.js +160 -100
  15. package/dist/lib/auth/AuthMiddleware.js.map +1 -1
  16. package/dist/lib/auth/JWTStrategy.js +6 -2
  17. package/dist/lib/auth/JWTStrategy.js.map +1 -1
  18. package/dist/lib/database/ConnectionManager.js +47 -1
  19. package/dist/lib/database/ConnectionManager.js.map +1 -1
  20. package/dist/lib/database/DatabaseErrors.js +88 -0
  21. package/dist/lib/database/DatabaseErrors.js.map +1 -0
  22. package/dist/lib/database/MongoRepository.js +31 -3
  23. package/dist/lib/database/MongoRepository.js.map +1 -1
  24. package/dist/lib/database/MongoSchemaSync.js +7 -1
  25. package/dist/lib/database/MongoSchemaSync.js.map +1 -1
  26. package/dist/lib/database/TypeOrmSupport.js +56 -6
  27. package/dist/lib/database/TypeOrmSupport.js.map +1 -1
  28. package/dist/lib/database/index.js +1 -0
  29. package/dist/lib/database/index.js.map +1 -1
  30. package/dist/lib/decorators/PersistenceDecorators.js +23 -0
  31. package/dist/lib/decorators/PersistenceDecorators.js.map +1 -1
  32. package/dist/lib/decorators/RouteDecorators.js +4 -2
  33. package/dist/lib/decorators/RouteDecorators.js.map +1 -1
  34. package/dist/lib/http/bun/BunRouter.js +119 -9
  35. package/dist/lib/http/bun/BunRouter.js.map +1 -1
  36. package/dist/lib/http/index.js +1 -0
  37. package/dist/lib/http/index.js.map +1 -1
  38. package/dist/lib/http/session/sessionMiddleware.js +62 -14
  39. package/dist/lib/http/session/sessionMiddleware.js.map +1 -1
  40. package/dist/lib/http/types.js +10 -1
  41. package/dist/lib/http/types.js.map +1 -1
  42. package/dist/lib/http/uWS/Adapters.js +31 -13
  43. package/dist/lib/http/uWS/Adapters.js.map +1 -1
  44. package/dist/lib/http/uWS/Router.js +80 -16
  45. package/dist/lib/http/uWS/Router.js.map +1 -1
  46. package/dist/lib/http/uWS/WebSocket.js +4 -2
  47. package/dist/lib/http/uWS/WebSocket.js.map +1 -1
  48. package/dist/lib/models/ModelUtils.js +910 -227
  49. package/dist/lib/models/ModelUtils.js.map +1 -1
  50. package/dist/lib/models/RepoUtils.js +863 -266
  51. package/dist/lib/models/RepoUtils.js.map +1 -1
  52. package/dist/lib/routes/BaseAdminRoute.js +5 -4
  53. package/dist/lib/routes/BaseAdminRoute.js.map +1 -1
  54. package/dist/lib/routes/BasePushRoute.js +104 -40
  55. package/dist/lib/routes/BasePushRoute.js.map +1 -1
  56. package/dist/lib/routes/CRUDRoute.js +31 -17
  57. package/dist/lib/routes/CRUDRoute.js.map +1 -1
  58. package/dist/lib/routes/RouteUtils.js +120 -29
  59. package/dist/lib/routes/RouteUtils.js.map +1 -1
  60. package/dist/lib/security/ACLUtils.js +170 -34
  61. package/dist/lib/security/ACLUtils.js.map +1 -1
  62. package/dist/types/ApiErrors.d.ts +10 -0
  63. package/dist/types/BackgroundServiceManager.d.ts +6 -0
  64. package/dist/types/EventListenerManager.d.ts +4 -0
  65. package/dist/types/NetUtils.d.ts +65 -6
  66. package/dist/types/RateLimiter.d.ts +4 -3
  67. package/dist/types/Server.d.ts +33 -2
  68. package/dist/types/auth/AuthMiddleware.d.ts +35 -4
  69. package/dist/types/database/ConnectionManager.d.ts +18 -0
  70. package/dist/types/database/DatabaseErrors.d.ts +26 -0
  71. package/dist/types/database/MongoRepository.d.ts +21 -2
  72. package/dist/types/database/index.d.ts +1 -0
  73. package/dist/types/decorators/PersistenceDecorators.d.ts +31 -0
  74. package/dist/types/decorators/RouteDecorators.d.ts +4 -2
  75. package/dist/types/http/bun/BunRouter.d.ts +23 -2
  76. package/dist/types/http/index.d.ts +2 -1
  77. package/dist/types/http/session/sessionMiddleware.d.ts +14 -4
  78. package/dist/types/http/types.d.ts +40 -0
  79. package/dist/types/http/uWS/Adapters.d.ts +10 -1
  80. package/dist/types/http/uWS/Router.d.ts +15 -2
  81. package/dist/types/models/ModelUtils.d.ts +301 -47
  82. package/dist/types/models/RepoUtils.d.ts +240 -4
  83. package/dist/types/routes/BasePushRoute.d.ts +5 -0
  84. package/dist/types/routes/CRUDRoute.d.ts +10 -0
  85. package/dist/types/routes/RouteUtils.d.ts +37 -1
  86. package/dist/types/security/ACLUtils.d.ts +68 -7
  87. package/package.json +1 -1
@@ -11,7 +11,8 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  // Copyright (C) 2020-2026 Jean-Philippe Steinmetz. All rights reserved.
12
12
  // SPDX-License-Identifier: MPL-2.0
13
13
  ///////////////////////////////////////////////////////////////////////////////
14
- import { ObjectDecorators, UserUtils, sleep } from "@rapidrest/core";
14
+ import { ApiError, ObjectDecorators, UserUtils, sleep } from "@rapidrest/core";
15
+ import { ApiErrorMessages, ApiErrors } from "../ApiErrors.js";
15
16
  import { AccessControlListSQL } from "./AccessControlListSQL.js";
16
17
  import { AccessControlListMongo } from "./AccessControlListMongo.js";
17
18
  import { ACLAction } from "./AccessControlList.js";
@@ -21,6 +22,7 @@ import { MongoConnection } from "../database/MongoConnection.js";
21
22
  import { MongoRepository } from "../database/MongoRepository.js";
22
23
  import { RedisCache } from "../database/RedisCache.js";
23
24
  import { Transactional, transactionContext } from "../decorators/DatabaseDecorators.js";
25
+ import { isDuplicateKeyError } from "../database/DatabaseErrors.js";
24
26
  const { Config, Init, Inject, Logger } = ObjectDecorators;
25
27
  /**
26
28
  * Common utility functions for working with `AccessControlList` objects and validating user permissions.
@@ -30,6 +32,11 @@ const { Config, Init, Inject, Logger } = ObjectDecorators;
30
32
  export class ACLUtils {
31
33
  constructor() {
32
34
  this.enabled = true;
35
+ /**
36
+ * The uids of every code-defined (class, route and endpoint) ACL registered via `saveDefaultACL()` in this
37
+ * process, together with their `default_<uid>` counterparts. See `isReservedUid()`.
38
+ */
39
+ this.reservedUids = new Set();
33
40
  this.trustedRoles = ["admin"];
34
41
  }
35
42
  get repo() {
@@ -85,6 +92,39 @@ export class ACLUtils {
85
92
  return "wildcard";
86
93
  return "none";
87
94
  }
95
+ /**
96
+ * Determines whether `uid` names a code-defined ACL: any `default_<uid>` ACL, or a class/route/endpoint ACL (or
97
+ * its `default_` counterpart) registered through `saveDefaultACL()`. Such an ACL governs a whole model or route,
98
+ * so a record must never be created at, adopt, or remove it (see `RepoUtils.create()`/`delete()`/`truncate()`).
99
+ *
100
+ * @param uid The ACL uid to check.
101
+ */
102
+ isReservedUid(uid) {
103
+ return typeof uid === "string" && (uid.startsWith("default_") || this.reservedUids.has(uid));
104
+ }
105
+ /**
106
+ * Determines whether `acl` is a code-defined ACL: its uid is reserved (see `isReservedUid()`), or it has the
107
+ * shape of the user-editable half of a default ACL (its parent is `default_<uid>`). The latter also catches one
108
+ * registered by a route or model that this process doesn't load.
109
+ *
110
+ * @param acl The ACL to check.
111
+ */
112
+ isProtectedACL(acl) {
113
+ return !!acl && (this.isReservedUid(acl.uid) || acl.parentUid === `default_${acl.uid}`);
114
+ }
115
+ /**
116
+ * Drops the cached copies of the given ACLs, so the next permission check reads them from the database. Any code
117
+ * that writes ACL documents without going through `saveACL()`/`removeACL()` must call this (e.g. `RepoUtils`
118
+ * serving the ACL REST routes).
119
+ *
120
+ * @param uids The uids of the ACLs to invalidate.
121
+ */
122
+ async invalidateACLs(uids) {
123
+ if (!this.cache || uids.length === 0) {
124
+ return;
125
+ }
126
+ await this.cache.deleteMany(uids);
127
+ }
88
128
  /**
89
129
  * Validates that the user has permission to perform the request operation against the URL path for the
90
130
  * provided request. If ACLUtils has not been initialized or the `acl` datasource has not been configured
@@ -172,8 +212,9 @@ export class ACLUtils {
172
212
  * @param entityId The unique identifier of the ACL to retrieve.
173
213
  * @param parentUids The list of already found parent UIDs. This is used to break circular dependencies.
174
214
  * @param options Set `skipCache: true` to bypass the cache and always read the current database state —
175
- * mirrors `RepoUtils`'s `RepoFindOptions.skipCache`. The result is still written back into the cache
176
- * afterward, same as a normal (non-skipped) lookup.
215
+ * mirrors `RepoUtils`'s `RepoFindOptions.skipCache` (applies to the whole parent chain). A database read is
216
+ * written back into the cache afterward. Set `skipParents: true` to not populate the parent chain at all, when
217
+ * only the ACL itself is needed.
177
218
  */
178
219
  async findACL(entityId, parentUids = [], options) {
179
220
  if (!this.enabled || !this.repo) {
@@ -182,8 +223,12 @@ export class ACLUtils {
182
223
  // Retrieve the ACL from the cache if present. A cache hit must still fall through to the parent-chain
183
224
  // population below (not return early) — a cached ACL was stored via its own plain, unpopulated `.parent`
184
225
  // (see the cache write below), so skipping that step here would silently return an ACL with no parent
185
- // chain, which `hasPermission()` needs to find inherited records.
226
+ // chain, which `hasPermission()` needs to find inherited records. A cached entry that isn't the requested
227
+ // ACL is ignored (defense in depth: the key space is shared with `RepoUtils`' cache of the ACL model).
186
228
  let acl = options?.skipCache ? undefined : await this.cache?.load(entityId);
229
+ if (acl && acl.uid !== entityId) {
230
+ acl = undefined;
231
+ }
187
232
  // If the acl wasn't found in the cache (or the cache was skipped) look in the database
188
233
  if (!acl) {
189
234
  if (this.repo instanceof MongoRepository) {
@@ -194,17 +239,19 @@ export class ACLUtils {
194
239
  acl = await this.repo.findOne({ where: { uid: entityId } });
195
240
  acl = acl ? new AccessControlListSQL(acl) : undefined;
196
241
  }
197
- }
198
- // Store a copy in the cache for faster retrieval next time.
199
- if (acl && this.cache) {
200
- this.cache.save(entityId, acl).catch((err) => {
201
- this.logger?.warn(`ACLUtils: Cache save failed for ACL ${entityId}.`);
202
- this.logger?.debug(err);
203
- });
242
+ // Store a copy in the cache for faster retrieval next time. Only after a database read: re-saving on
243
+ // every cache hit would keep renewing (and re-publishing to Redis) an entry that has since gone stale,
244
+ // for as long as someone keeps making requests against it.
245
+ if (acl && this.cache) {
246
+ this.cache.save(entityId, acl).catch((err) => {
247
+ this.logger?.warn(`ACLUtils: Cache save failed for ACL ${entityId}.`);
248
+ this.logger?.debug(err);
249
+ });
250
+ }
204
251
  }
205
252
  // Retrieve the parent ACL and assign it if available. Don't populate parents we've
206
253
  // already found to prevent a circular dependency.
207
- if (acl && acl.parentUid && !parentUids.includes(acl.parentUid)) {
254
+ if (acl && acl.parentUid && !options?.skipParents && !parentUids.includes(acl.parentUid)) {
208
255
  parentUids.push(acl.parentUid);
209
256
  acl.parent = await this.findACL(acl.parentUid, parentUids, options);
210
257
  }
@@ -226,26 +273,38 @@ export class ACLUtils {
226
273
  * actually belongs to the same physical connection this repo does. Reusing it directly used to throw
227
274
  * (Mongo) or silently target the wrong connection (SQL).
228
275
  *
276
+ * Pass `unlessProtected: true` to leave a code-defined ACL (see `isProtectedACL()`) in place, resolving to
277
+ * `undefined` as if there had been nothing to remove. `RepoUtils` uses this when cleaning up after a record, so a
278
+ * record that shares a class/route ACL's uid can never delete that ACL.
279
+ *
229
280
  * @param uid The unique identifier of the ACL to remove.
281
+ * @param options Set `unlessProtected: true` to never remove a code-defined ACL.
230
282
  */
231
- async removeACL(uid) {
283
+ async removeACL(uid, options) {
232
284
  if (!this.enabled) {
233
285
  return undefined;
234
286
  }
235
287
  if (!this.repo) {
236
288
  throw new Error("repo is not set.");
237
289
  }
290
+ if (options?.unlessProtected && this.isReservedUid(uid)) {
291
+ return undefined;
292
+ }
238
293
  const ctx = transactionContext.getStore();
239
294
  let removed;
240
295
  try {
241
296
  if (this.repo instanceof MongoRepository) {
242
- const deleted = await this.repo.findOneAndDelete({ uid }, { session: ctx?.session });
297
+ // The parent condition is part of the atomic delete itself, so a protected ACL is never removed.
298
+ const filter = options?.unlessProtected
299
+ ? { uid, parentUid: { $ne: `default_${uid}` } }
300
+ : { uid };
301
+ const deleted = await this.repo.findOneAndDelete(filter, { session: ctx?.session });
243
302
  removed = deleted ? new AccessControlListMongo(deleted) : undefined;
244
303
  }
245
304
  else {
246
305
  const repo = ctx?.entityManager ? ctx.entityManager.getRepository(AccessControlListSQL) : this.repo;
247
306
  const existing = await repo.findOne({ where: { uid } });
248
- if (existing) {
307
+ if (existing && !(options?.unlessProtected && this.isProtectedACL(existing))) {
249
308
  await repo.delete({ uid });
250
309
  removed = new AccessControlListSQL(existing);
251
310
  }
@@ -343,9 +402,15 @@ export class ACLUtils {
343
402
  * need the entity-side write and this ACL save to stay consistent should register a compensating action
344
403
  * via `registerRollbackHook()`.
345
404
  *
405
+ * Pass `createOnly: true` to claim a brand new ACL: it is only ever inserted (at version `0`), never merged
406
+ * into or overwritten on top of an ACL that already exists at the same uid. If one already exists - including
407
+ * one a concurrent caller inserted first, caught by the ACL collection's unique key - an `IDENTIFIER_EXISTS`
408
+ * `ApiError` (400) is thrown instead. Used by `RepoUtils.create()` so that a create can never adopt (and grant
409
+ * its creator rights on) an ACL that belongs to some other record.
410
+ *
346
411
  * @param acl The ACL to store.
347
412
  * @param options Set `preserveVersion: true` to restore `acl` exactly as given (see above) instead of the
348
- * normal optimistic-locking update semantics.
413
+ * normal optimistic-locking update semantics. Set `createOnly: true` to only ever insert a new ACL (see above).
349
414
  * @return Returns the ACL that was stored in the database.
350
415
  */
351
416
  async saveACL(acl, options) {
@@ -358,7 +423,10 @@ export class ACLUtils {
358
423
  }
359
424
  const ctx = transactionContext.getStore();
360
425
  const preserveVersion = !!options?.preserveVersion;
361
- if (this.repo instanceof MongoRepository) {
426
+ if (options?.createOnly) {
427
+ result = await this.insertNewACL(acl, ctx);
428
+ }
429
+ else if (this.repo instanceof MongoRepository) {
362
430
  const mACL = new AccessControlListMongo(acl);
363
431
  const existing = await this.repo.findOne({ uid: acl.uid }, {
364
432
  session: ctx?.session,
@@ -423,6 +491,61 @@ export class ACLUtils {
423
491
  }
424
492
  return result;
425
493
  }
494
+ /**
495
+ * Implements `saveACL()`'s `createOnly` mode: inserts `acl` as a brand new version `0` document, refusing with
496
+ * `IDENTIFIER_EXISTS` if an ACL already exists at its uid (checked up front, and again via the unique key if a
497
+ * concurrent insert wins the race in between).
498
+ */
499
+ async insertNewACL(acl, ctx) {
500
+ const exists = () => new ApiError(ApiErrors.IDENTIFIER_EXISTS, 400, ApiErrorMessages.IDENTIFIER_EXISTS);
501
+ if (this.repo instanceof MongoRepository) {
502
+ const repo = this.repo;
503
+ if (await repo.findOne({ uid: acl.uid }, { session: ctx?.session })) {
504
+ throw exists();
505
+ }
506
+ const aclMongo = new AccessControlListMongo({
507
+ ...acl,
508
+ _id: undefined,
509
+ dateModifed: new Date(),
510
+ version: 0,
511
+ });
512
+ try {
513
+ // `insertOnly` so this can never replace an existing document, whatever `_id` it carries.
514
+ return await repo.save(aclMongo, { session: ctx?.session, insertOnly: true });
515
+ }
516
+ catch (err) {
517
+ // (uid, version) is unique for ACL documents, so a concurrent claim of the same uid fails here.
518
+ if (isDuplicateKeyError(err)) {
519
+ throw exists();
520
+ }
521
+ throw err;
522
+ }
523
+ }
524
+ const repo = ctx?.entityManager
525
+ ? ctx.entityManager.getRepository(AccessControlListSQL)
526
+ : this.repo;
527
+ if (await repo.findOne({ where: { uid: acl.uid } })) {
528
+ throw exists();
529
+ }
530
+ const aclSQL = new AccessControlListSQL({
531
+ ...acl,
532
+ dateModifed: new Date(),
533
+ version: 0,
534
+ });
535
+ try {
536
+ // `insert()` rather than `save()`: TypeORM's `save()` turns into an UPDATE when the row already exists.
537
+ await repo.insert(aclSQL);
538
+ }
539
+ catch (err) {
540
+ // `uid` is the primary key for ACL rows, so a concurrent claim of the same uid fails here. The failed
541
+ // statement may have poisoned the active transaction, so check for the winner outside of it.
542
+ if (await this.repo.findOne({ where: { uid: acl.uid } })) {
543
+ throw exists();
544
+ }
545
+ throw err;
546
+ }
547
+ return aclSQL;
548
+ }
426
549
  /**
427
550
  * Stores the given default access control list into the ACL database. A default ACL is a special type of ACL
428
551
  * that is primarily defined and maintained within the code but allows for user-specific overrides. To accomplish
@@ -432,8 +555,15 @@ export class ACLUtils {
432
555
  * overrides. As the `default_<uid>` record is always overwritten with the lastest version of the code, any
433
556
  * user-defined changes made to it are lost on service restart.
434
557
  *
435
- * @param defaultAcl
436
- * @returns
558
+ * Both uids are reserved (see `isReservedUid()`), so no record can be created at, adopt or remove either ACL.
559
+ *
560
+ * Contract: when RBAC is enabled and `acl` is given, this either resolves to the user-editable ACL (whose `uid`
561
+ * is `acl.uid`) or throws; it never resolves to `null` then. A missing user-editable ACL (e.g. one deleted since
562
+ * the last start) is recreated, with no records, under `default_<uid>`. It resolves to `null` only when RBAC is
563
+ * disabled or no `acl` is given, and then stores nothing.
564
+ *
565
+ * @param acl The code-defined ACL to store.
566
+ * @returns The user-editable ACL, or `null` when RBAC is disabled or no ACL was given.
437
567
  */
438
568
  async saveDefaultACL(acl) {
439
569
  let result = null;
@@ -445,6 +575,8 @@ export class ACLUtils {
445
575
  ...acl,
446
576
  uid: `default_${acl.uid}`,
447
577
  };
578
+ this.reservedUids.add(acl.uid);
579
+ this.reservedUids.add(defaultAcl.uid);
448
580
  // Attempt to update the default ACL record. If a version mismatch occurs we will try again.
449
581
  const maxAttempts = 3;
450
582
  let attempts = 0;
@@ -454,22 +586,25 @@ export class ACLUtils {
454
586
  // and another named `<NAME>`. The `<NAME>` record stores the user-defined
455
587
  // overrides that overlay the `default_<NAME>` document. The `default_<NAME>` is
456
588
  // therefore always updated with whatever is provided as the `defaultAcl` argument.
457
- const existing = await this.findACL(defaultAcl.uid);
589
+ // Read from the database, not the cache: these reads decide whether the ACLs must be (re)created.
590
+ const existing = await this.findACL(defaultAcl.uid, [], {
591
+ skipCache: true,
592
+ skipParents: true,
593
+ });
458
594
  if (existing) {
459
595
  // Copy over the new records from code
460
596
  existing.records = defaultAcl.records;
461
597
  defaultAcl = existing;
462
- // The user-defined override record was already created on a previous run. Look it
463
- // up so callers still receive a valid ACL to register routes against instead of `null`.
464
- result = (await this.findACL(acl.uid)) ?? null;
465
598
  }
466
- else {
467
- // Create the user-defined override record
468
- result = await this.saveACL({
469
- uid: acl.uid,
470
- parentUid: defaultAcl.uid,
471
- records: [],
472
- });
599
+ // The user-defined override record normally exists from a previous run. When it's missing (never
600
+ // created, or deleted since) it is recreated: without it `checkRequestPerms()` has nothing to find,
601
+ // and a route registered against `null` would silently lose its permission checks.
602
+ result = (await this.findACL(acl.uid, [], { skipCache: true })) ?? null;
603
+ if (!result) {
604
+ result = await this.saveACL({ uid: acl.uid, parentUid: defaultAcl.uid, records: [] }, { createOnly: true });
605
+ }
606
+ else if (result.parentUid !== defaultAcl.uid) {
607
+ this.logger?.warn(`ACLUtils: ACL ${acl.uid} does not inherit from ${defaultAcl.uid} (parentUid=${result.parentUid}).`);
473
608
  }
474
609
  // Always save the ACL into the datasource
475
610
  await this.saveACL(defaultAcl);
@@ -499,11 +634,12 @@ export class ACLUtils {
499
634
  * would issue overlapping commands against one session, which drivers reject or misorder.
500
635
  *
501
636
  * @param uids The unique identifiers of the ACLs to remove.
637
+ * @param options Set `unlessProtected: true` to never remove a code-defined ACL (see `removeACL()`).
502
638
  */
503
- async removeACLs(uids) {
639
+ async removeACLs(uids, options) {
504
640
  const removed = [];
505
641
  for (const uid of uids) {
506
- const acl = await this.removeACL(uid);
642
+ const acl = await this.removeACL(uid, options);
507
643
  if (acl) {
508
644
  removed.push(acl);
509
645
  }
@@ -640,7 +776,7 @@ __decorate([
640
776
  __decorate([
641
777
  Transactional("acl"),
642
778
  __metadata("design:type", Function),
643
- __metadata("design:paramtypes", [String]),
779
+ __metadata("design:paramtypes", [String, Object]),
644
780
  __metadata("design:returntype", Promise)
645
781
  ], ACLUtils.prototype, "removeACL", null);
646
782
  __decorate([
@@ -652,7 +788,7 @@ __decorate([
652
788
  __decorate([
653
789
  Transactional("acl"),
654
790
  __metadata("design:type", Function),
655
- __metadata("design:paramtypes", [Array]),
791
+ __metadata("design:paramtypes", [Array, Object]),
656
792
  __metadata("design:returntype", Promise)
657
793
  ], ACLUtils.prototype, "removeACLs", null);
658
794
  __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"ACLUtils.js","sourceRoot":"","sources":["../../../src/security/ACLUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ACLUtils.js","sourceRoot":"","sources":["../../../src/security/ACLUtils.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,11 @@ export declare enum ApiErrors {
12
12
  OBJECT_ID_MISMATCH = "api-013",
13
13
  SEARCH_INVALID_RANGE = "api-014",
14
14
  SEARCH_INVALID_ME_REFERENCE = "api-015",
15
+ SEARCH_UNKNOWN_OPERATOR = "api-016",
16
+ SEARCH_INVALID_OPERAND_TYPE = "api-017",
17
+ SEARCH_INVALID_SORT_FIELD = "api-018",
18
+ SEARCH_QUERY_TOO_COMPLEX = "api-019",
19
+ SEARCH_OPERATOR_NOT_SUPPORTED = "api-020",
15
20
  BULK_CREATE_FAILURE = "api-021",
16
21
  BULK_UPDATE_FAILURE = "api-022",
17
22
  AUTH_REQUIRED = "api-100",
@@ -34,6 +39,11 @@ export declare enum ApiErrorMessages {
34
39
  OBJECT_ID_MISMATCH = "The object provided does not match the identifier given.",
35
40
  SEARCH_INVALID_RANGE = "Invalid range value: '{{value}}'. Expected 2 arguments, got {{length}}",
36
41
  SEARCH_INVALID_ME_REFERENCE = "Use of the `me` reference requires authentication.",
42
+ SEARCH_UNKNOWN_OPERATOR = "Unknown search operator '{{operator}}'. Use eq() to search for a literal value shaped like an operator call.",
43
+ SEARCH_INVALID_OPERAND_TYPE = "Invalid value '{{value}}' for field '{{field}}'. Expected a {{type}}.",
44
+ SEARCH_INVALID_SORT_FIELD = "Cannot sort by unknown field '{{field}}'.",
45
+ SEARCH_QUERY_TOO_COMPLEX = "The search query is too deeply nested or has too many conditions.",
46
+ SEARCH_OPERATOR_NOT_SUPPORTED = "The '{{operator}}' operator is not supported by the configured datasource.",
37
47
  BULK_CREATE_FAILURE = "Failed to create one or more objects.",
38
48
  BULK_UPDATE_FAILURE = "Failed to update one or more objects.",
39
49
  AUTH_REQUIRED = "Authorization is required to access this resource.",
@@ -54,6 +54,12 @@ export declare class BackgroundServiceManager {
54
54
  * @param args The list of arguments to pass into the service constructor
55
55
  */
56
56
  start(serviceName: string, clazz?: any, ...args: any): Promise<void>;
57
+ /**
58
+ * Returns `true` if node-schedule accepts the given schedule, without scheduling anything.
59
+ *
60
+ * @param spec The cron string, date or recurrence rule to validate.
61
+ */
62
+ private static isValidSchedule;
57
63
  /**
58
64
  * Stops all currently active background services that are owned by the manager.
59
65
  */
@@ -18,6 +18,10 @@ export declare class EventListenerManager {
18
18
  private readonly redis;
19
19
  constructor(objectFactory: ObjectFactory, redis: RedisClientType);
20
20
  init(): Promise<void>;
21
+ /**
22
+ * Unsubscribes from all channels, closes this manager's own (duplicated) redis client and removes all
23
+ * registered handlers. Safe to call more than once.
24
+ */
21
25
  destroy(): Promise<void>;
22
26
  /**
23
27
  * Handler function for events that arrive from redis.
@@ -1,10 +1,14 @@
1
1
  import type { HttpRequest as XRequest } from "./http/index.js";
2
+ /** The list of trusted proxies accepted by `NetUtils`: an array of entries, or one comma-separated string. */
3
+ export type TrustedProxies = readonly string[] | string;
2
4
  /**
3
5
  * Provides common utilities and functions for working with networking related problems.
4
6
  *
5
7
  * @author Jean-Philippe Steinmetz <rapidrests@gmail.com>
6
8
  */
7
9
  export declare class NetUtils {
10
+ /** Compiled `trustedProxies` lists, keyed by their normalized, `|`-joined entries. */
11
+ private static readonly proxyListCache;
8
12
  /**
9
13
  * Performs DNS lookup of the IP address from a given url.
10
14
  *
@@ -13,17 +17,72 @@ export declare class NetUtils {
13
17
  * @returns A `string` containing the IP address if found, otherwise `undefined`.
14
18
  */
15
19
  static lookupIPAddress(url: string, family?: number): Promise<string | undefined>;
20
+ /**
21
+ * Parses and canonicalizes a single IP address so that two spellings of the same address always compare
22
+ * equal. Accepts an optional port (`1.2.3.4:80`, `[::1]:80`), brackets and an IPv6 zone id, all of which are
23
+ * removed.
24
+ *
25
+ * - IPv4 addresses are returned unchanged (e.g. `10.0.0.1`).
26
+ * - IPv4-mapped IPv6 addresses are unmapped to plain IPv4, in either spelling: `::ffff:127.0.0.1` and uWS's
27
+ * fully expanded `0000:0000:0000:0000:0000:ffff:7f00:0001` both become `127.0.0.1`.
28
+ * - Other IPv6 addresses are returned in RFC 5952 form: lowercase, no leading zeros, and the longest run of
29
+ * two or more zero groups compressed to `::` (e.g. `2001:0DB8:0:0:0:0:0:1` becomes `2001:db8::1`).
30
+ *
31
+ * @param value The address to normalize.
32
+ * @returns The canonical address, or `undefined` if `value` is not a valid IPv4/IPv6 address.
33
+ */
34
+ static normalizeIP(value: string | undefined | null): string | undefined;
35
+ /** Expands an already validated IPv6 address (no zone id) into its eight 16-bit groups. */
36
+ private static expandIPv6;
37
+ /** Formats eight 16-bit groups as an RFC 5952 IPv6 address. */
38
+ private static compressIPv6;
39
+ /**
40
+ * Compiles (and caches) a `trustedProxies` list into a `BlockList`. Each entry is a single IPv4/IPv6 address or a
41
+ * CIDR range (`10.0.0.0/8`, `fd00::/8`). Entries are normalized the same way as `normalizeIP()`. Invalid entries
42
+ * are ignored.
43
+ */
44
+ private static compileTrustedProxies;
45
+ /**
46
+ * Returns `true` if `address` matches an entry of `trustedProxies`. Both sides are normalized first (see
47
+ * `normalizeIP()`), so e.g. `::ffff:10.0.0.1` matches a `10.0.0.1` entry, and CIDR range entries are supported.
48
+ *
49
+ * @param address The address to check.
50
+ * @param trustedProxies The trusted proxy addresses and/or CIDR ranges, as an array or a comma-separated string.
51
+ */
52
+ static isTrustedProxy(address: string | undefined, trustedProxies?: TrustedProxies): boolean;
53
+ /**
54
+ * Returns the IP address of the client that made the given request, in canonical form (see `normalizeIP()`).
55
+ * This is the address that should be used for rate limiting, audit logs and any other per-client keying.
56
+ *
57
+ * The result is determined as follows:
58
+ * 1. If the socket's remote address is not a valid IP, it is returned as-is (or `undefined` if empty) and no
59
+ * header is consulted.
60
+ * 2. If `trustedProxies` is empty or the remote address is not a trusted proxy, the remote address is returned.
61
+ * Forwarding headers are ignored, so an untrusted client cannot choose its own address.
62
+ * 3. Otherwise `X-Forwarded-For` is walked from right to left (every `X-Forwarded-For` value is taken into
63
+ * account). Addresses of trusted proxies are skipped and the first address that is not a trusted proxy is
64
+ * returned. If an entry is not a valid IP address, the walk stops and the last trusted hop is returned, since
65
+ * nothing left of it can be trusted. If every entry is a trusted proxy, the left-most entry is returned.
66
+ * 4. If there is no `X-Forwarded-For` header, a valid `X-Real-IP` header is returned, else the remote address.
67
+ *
68
+ * `X-Original-Forwarded-For` is never consulted.
69
+ *
70
+ * @param req The HTTP request to extract the client address from.
71
+ * @param trustedProxies The addresses and/or CIDR ranges of reverse proxies whose forwarding headers are
72
+ * trusted, as an array or a comma-separated string.
73
+ * @returns The client's canonical IP address, or `undefined` if the request has no remote address.
74
+ */
75
+ static getClientIP(req: XRequest, trustedProxies?: TrustedProxies): string | undefined;
16
76
  /**
17
77
  * Extracts the IP address from a given url or HTTP request.
18
78
  *
19
- * When `trustedProxies` is provided, forwarding headers (`X-Forwarded-For`, etc.) are
20
- * only trusted when the direct connection's `remoteAddress` is in that list. Without a
21
- * trusted-proxy list the headers are ignored and the socket address is returned directly,
22
- * preventing clients from spoofing their IP in audit logs.
79
+ * For an HTTP request this is identical to `getClientIP()`: forwarding headers are only trusted when the
80
+ * direct connection's remote address is one of `trustedProxies`, and the result is normalized.
23
81
  *
24
82
  * @param urlOrRequest The url or HTTP request to extract the IP from.
25
- * @param trustedProxies Optional list of proxy IP addresses whose forwarding headers should be trusted.
83
+ * @param trustedProxies Optional list of proxy IP addresses and/or CIDR ranges whose forwarding headers should
84
+ * be trusted.
26
85
  * @returns A `string` containing the IP address if found, otherwise `undefined`.
27
86
  */
28
- static getIPAddress(urlOrRequest: string | XRequest, trustedProxies?: string[]): string | undefined;
87
+ static getIPAddress(urlOrRequest: string | XRequest, trustedProxies?: TrustedProxies): string | undefined;
29
88
  }
@@ -28,9 +28,10 @@ export interface IPRateLimitConfig {
28
28
  export interface RateLimitConfig {
29
29
  /**
30
30
  * The maximum number of attempts allowed within `windowSeconds` before being rejected. Default is `100`.
31
- * Note that when driven by the `@RateLimit` decorator this counts attempts against the identifier
32
- * `<method> <path>` (see `RouteUtils.checkRateLimiter()`), i.e. combined across *every* caller of that
33
- * route, not per-caller - the default is set well above the per-IP default below for that reason.
31
+ * Note that when driven by the `@RateLimit` decorator without `perUser`, this counts attempts against the
32
+ * identifier `<method>|<path>` (see `RouteUtils.checkRateLimiter()`), i.e. combined across *every* caller of that
33
+ * route, not per-caller - the default is set well above the per-IP default below for that reason. With
34
+ * `perUser` the identifier is scoped to the user's uid, or to the client IP for anonymous callers.
34
35
  */
35
36
  maxAttempts?: number;
36
37
  /** The length of the sliding window, in seconds, that `maxAttempts` applies to. Default is `60`. */
@@ -7,8 +7,12 @@ import { BackgroundServiceManager } from "./BackgroundServiceManager.js";
7
7
  import { RouteUtils } from "./routes/RouteUtils.js";
8
8
  import { OpenApiSpec } from "./OpenApiSpec.js";
9
9
  import { EventListenerManager } from "./EventListenerManager.js";
10
- import type { IHttpRouter } from "./http/types.js";
10
+ import type { HttpRequest, HttpResponse, IHttpRouter, NextFunction } from "./http/types.js";
11
11
  import { SessionManager } from "./http/session/SessionManager.js";
12
+ /** The metrics label used for every request that didn't match a registered application route. */
13
+ export declare const UNMATCHED_ROUTE_LABEL = "<unmatched>";
14
+ /** Default time `Server.stop()` waits for in-flight requests to finish, in milliseconds (`shutdown:drain_timeout`). */
15
+ export declare const DEFAULT_DRAIN_TIMEOUT_MS = 10000;
12
16
  /**
13
17
  * The configuration options to use when constructing a new Server instance.
14
18
  */
@@ -188,7 +192,34 @@ export declare class Server {
188
192
  */
189
193
  start(): Promise<void>;
190
194
  /**
191
- * Stops the HTTP listen server.
195
+ * Serializes one error for a client response. An `ApiError` keeps its own fields (`code`, `status`, `message`,
196
+ * ...). Anything else, such as a raw database driver error carrying the failed SQL `query` and its `parameters`,
197
+ * is replaced by the generic internal error so none of its details reach the client. Stack traces are never
198
+ * included.
199
+ *
200
+ * @param err The error to serialize.
201
+ */
202
+ protected serializeError(err: any): any;
203
+ /**
204
+ * The final error handling middleware. Logs the error and sends it to the client as JSON (see `serializeError()`).
205
+ */
206
+ protected handleError(err: any, _req: HttpRequest, res: HttpResponse, next: NextFunction): void;
207
+ /**
208
+ * The final middleware of every request: records the request metrics and ends the response if nothing else did.
209
+ * Metrics are labeled with `req.routePattern` rather than the raw path, so their cardinality is bounded by the
210
+ * application's routes.
211
+ */
212
+ protected recordRequestMetrics(req: HttpRequest, res: HttpResponse): void;
213
+ /**
214
+ * Stops the server gracefully:
215
+ *
216
+ * 1. Stops all background services.
217
+ * 2. Stops accepting new connections and waits up to `shutdown:drain_timeout` milliseconds (default 10000) for
218
+ * in-flight requests to finish, then closes the remaining keep-alive and WebSocket connections.
219
+ * 3. Destroys the event listener manager, closing its redis subscription.
220
+ * 4. Closes all database connections.
221
+ *
222
+ * The whole sequence is bounded by a 30 second watchdog.
192
223
  */
193
224
  stop(): Promise<void>;
194
225
  /**