@rapidrest/core 1.14.0 → 1.15.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 (41) hide show
  1. package/dist/lib/AlertUtils.js +18 -19
  2. package/dist/lib/AlertUtils.js.map +1 -1
  3. package/dist/lib/ClassLoader.js +11 -0
  4. package/dist/lib/ClassLoader.js.map +1 -1
  5. package/dist/lib/FileUtils.js +19 -21
  6. package/dist/lib/FileUtils.js.map +1 -1
  7. package/dist/lib/JWTUtils.js +112 -42
  8. package/dist/lib/JWTUtils.js.map +1 -1
  9. package/dist/lib/Logger.js +7 -4
  10. package/dist/lib/Logger.js.map +1 -1
  11. package/dist/lib/MessagingUtils.js +8 -1
  12. package/dist/lib/MessagingUtils.js.map +1 -1
  13. package/dist/lib/NotificationsUtils.js +37 -3
  14. package/dist/lib/NotificationsUtils.js.map +1 -1
  15. package/dist/lib/OASUtils.js +22 -4
  16. package/dist/lib/OASUtils.js.map +1 -1
  17. package/dist/lib/ObjectFactory.js +27 -16
  18. package/dist/lib/ObjectFactory.js.map +1 -1
  19. package/dist/lib/ObjectUtils.js +34 -6
  20. package/dist/lib/ObjectUtils.js.map +1 -1
  21. package/dist/lib/StringUtils.js +11 -4
  22. package/dist/lib/StringUtils.js.map +1 -1
  23. package/dist/lib/TelemetryUtils.js +13 -3
  24. package/dist/lib/TelemetryUtils.js.map +1 -1
  25. package/dist/lib/UserUtils.js +1 -1
  26. package/dist/lib/UserUtils.js.map +1 -1
  27. package/dist/lib/ValidationUtils.js +6 -1
  28. package/dist/lib/ValidationUtils.js.map +1 -1
  29. package/dist/lib/index.js +1 -0
  30. package/dist/lib/index.js.map +1 -1
  31. package/dist/lib/threads/ThreadPool.js +77 -13
  32. package/dist/lib/threads/ThreadPool.js.map +1 -1
  33. package/dist/types/FileUtils.d.ts +4 -1
  34. package/dist/types/JWTUtils.d.ts +25 -0
  35. package/dist/types/MessagingUtils.d.ts +2 -0
  36. package/dist/types/NotificationsUtils.d.ts +8 -0
  37. package/dist/types/ObjectUtils.d.ts +10 -0
  38. package/dist/types/TelemetryUtils.d.ts +9 -1
  39. package/dist/types/index.d.ts +1 -0
  40. package/dist/types/threads/ThreadPool.d.ts +4 -1
  41. package/package.json +1 -1
@@ -82,7 +82,9 @@ export class ValidationUtils {
82
82
  * Validates that the provided object is not null or empty.
83
83
  */
84
84
  static checkNull(val) {
85
- if (typeof val !== "boolean" && !val) {
85
+ // `0` is a valid, non-null value (matching `ObjectUtils.validate`'s own nullable convention), so numbers
86
+ // are excluded from the falsy check alongside booleans.
87
+ if (typeof val !== "boolean" && typeof val !== "number" && !val) {
86
88
  throw new Error("Value cannot be null.");
87
89
  }
88
90
  return val;
@@ -128,6 +130,9 @@ export class ValidationUtils {
128
130
  */
129
131
  static checkVersion(val) {
130
132
  const num = Number(val);
133
+ if (isNaN(num)) {
134
+ throw new Error("Value is not a valid version number.");
135
+ }
131
136
  return Math.max(num, 0);
132
137
  }
133
138
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ValidationUtils.js","sourceRoot":"","sources":["../../src/ValidationUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ValidationUtils.js","sourceRoot":"","sources":["../../src/ValidationUtils.ts"],"names":[],"mappings":"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"}
package/dist/lib/index.js CHANGED
@@ -7,6 +7,7 @@ export * from "./JWTUtils.js";
7
7
  export * from "./Logger.js";
8
8
  export * from "./MemoryStore.js";
9
9
  export * from "./MessagingUtils.js";
10
+ export * from "./NotificationsUtils.js";
10
11
  export * from "./ObjectFactory.js";
11
12
  export * from "./ObjectUtils.js";
12
13
  export * from "./OASUtils.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC"}
@@ -152,34 +152,89 @@ export class ThreadPool {
152
152
  */
153
153
  start(options, num = this.max) {
154
154
  this.shutdown = false;
155
+ // Terminate any workers left over from a previous start() call so they aren't leaked (their thread and
156
+ // listeners would otherwise become unreachable once `this.workers[i]` is overwritten below).
157
+ for (const worker of this.workers) {
158
+ worker.removeAllListeners();
159
+ void worker.terminate();
160
+ }
161
+ this.workers.length = 0;
155
162
  return new Promise((resolve, reject) => {
156
163
  let numReady = 0;
164
+ let settled = false;
157
165
  if (!options) {
158
166
  options = {};
159
167
  }
160
168
  options.allowTs = "allowTs" in options ? options.allowTs : true;
161
- for (let i = 0; i < num && i < this.maxThreads; i++) {
169
+ const target = Math.min(num, this.maxThreads);
170
+ if (target <= 0) {
171
+ // Nothing to create; resolve immediately instead of hanging forever waiting for readiness signals
172
+ // that will never arrive.
173
+ this.logger?.debug("No worker threads to create.");
174
+ resolve();
175
+ return;
176
+ }
177
+ // If any worker fails to start, terminate every worker created during this start() call (the
178
+ // failed one and any siblings that succeeded) before rejecting. Without this, a failed start()
179
+ // leaks running worker threads that the caller has no reference to, since the returned promise
180
+ // is the only thing that told them startup failed - they have no reason to call stop(). `shutdown`
181
+ // is set first (mirroring stop()) so createWorker()'s persistent "exit" handler treats this as a
182
+ // controlled teardown rather than a crash to restart via `restartOnExit`. Listeners are
183
+ // deliberately left attached (unlike the leftover-worker cleanup above) rather than calling
184
+ // `removeAllListeners()`: a worker mid-teardown that still fires a genuine "error" event with no
185
+ // listener left on it would make Node throw and crash the whole process.
186
+ const failStartup = (error) => {
187
+ if (settled) {
188
+ return;
189
+ }
190
+ settled = true;
191
+ this.shutdown = true;
192
+ for (const worker of this.workers) {
193
+ void worker.terminate();
194
+ }
195
+ this.workers.length = 0;
196
+ reject(error);
197
+ };
198
+ for (let i = 0; i < target; i++) {
162
199
  const worker = this.createWorker(i, options);
200
+ let ready = false;
163
201
  worker.on("online", () => {
202
+ if (settled) {
203
+ return;
204
+ }
164
205
  if (options && !options.worker) {
206
+ ready = true;
165
207
  numReady++;
166
208
  }
167
209
  // When all workers have finished being created resolve
168
- if (numReady >= num || numReady >= this.maxThreads) {
210
+ if (numReady >= target) {
211
+ settled = true;
169
212
  resolve();
170
213
  }
171
214
  });
215
+ // If a worker fails to start before it ever reaches readiness, reject instead of leaving the
216
+ // returned promise hanging forever.
217
+ worker.on("error", (error) => {
218
+ if (!ready) {
219
+ failStartup(error);
220
+ }
221
+ });
172
222
  worker.on("message", (msg) => {
223
+ if (settled) {
224
+ return;
225
+ }
173
226
  switch (msg.type) {
174
227
  case WorkerMessageType.ERROR:
175
- reject(msg.data);
176
- break;
228
+ failStartup(msg.data);
229
+ return;
177
230
  case WorkerMessageType.ONLINE:
231
+ ready = true;
178
232
  numReady++;
179
233
  break;
180
234
  }
181
235
  // When all workers have finished being created resolve
182
- if (numReady >= num || numReady >= this.maxThreads) {
236
+ if (numReady >= target) {
237
+ settled = true;
183
238
  resolve();
184
239
  }
185
240
  });
@@ -189,24 +244,31 @@ export class ThreadPool {
189
244
  });
190
245
  }
191
246
  /**
192
- * Stops all running thread executions.
247
+ * Stops all running thread executions. Each worker is given `ThreadPool.STOP_GRACE_PERIOD_MS` to gracefully
248
+ * finish its own `stop()` and exit on its own before being force-terminated.
193
249
  */
194
250
  async stop() {
195
251
  const listeners = this.callbacks.get("exit");
196
252
  this.shutdown = true;
197
- // Send the stop signal so the workers know to terminate
253
+ // Send the stop signal so the workers know to shut down gracefully
198
254
  this.sendAll({ type: WorkerMessageType.STOP });
199
- // Give the message above a chance to propogate
200
- await sleep(10);
201
- for (let idx = 0; idx < this.workers.length; idx++) {
202
- const worker = this.workers[idx];
203
- const exitCode = await worker.terminate();
255
+ // Terminate all workers concurrently so shutdown latency is bounded by the slowest worker rather than
256
+ // scaling linearly with pool size. Each worker gets a grace period to exit on its own (i.e. for its
257
+ // ThreadWorker.stop() to actually finish) before being force-terminated, so in-flight cleanup work
258
+ // (flushing writes, closing connections, etc.) isn't cut off by an arbitrary fixed delay.
259
+ await Promise.all(this.workers.map(async (worker, idx) => {
260
+ const exitedOnOwn = new Promise((resolve) => worker.once("exit", resolve));
261
+ const timedOut = sleep(ThreadPool.STOP_GRACE_PERIOD_MS).then(() => undefined);
262
+ let exitCode = await Promise.race([exitedOnOwn, timedOut]);
263
+ if (exitCode === undefined) {
264
+ exitCode = await worker.terminate();
265
+ }
204
266
  if (listeners) {
205
267
  for (const callback of listeners) {
206
268
  callback(idx, exitCode);
207
269
  }
208
270
  }
209
- }
271
+ }));
210
272
  // Drop all terminated workers so `size`/`send()` don't keep referencing dead workers across a
211
273
  // subsequent start()/stop() cycle. `workers` is a `readonly` array reference, so it's truncated in place.
212
274
  this.workers.length = 0;
@@ -266,6 +328,8 @@ export class ThreadPool {
266
328
  }
267
329
  }
268
330
  }
331
+ /** The maximum amount of time, in milliseconds, `stop()` waits for a worker to exit on its own before force-terminating it. */
332
+ ThreadPool.STOP_GRACE_PERIOD_MS = 5000;
269
333
  __decorate([
270
334
  Logger,
271
335
  __metadata("design:type", Object)
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadPool.js","sourceRoot":"","sources":["../../../src/threads/ThreadPool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ThreadPool.js","sourceRoot":"","sources":["../../../src/threads/ThreadPool.ts"],"names":[],"mappings":"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"}
@@ -45,8 +45,11 @@ export declare class FileUtils {
45
45
  * @param {Map<string,string>} variables The map of variable names to values to swap. Applies to outPath only.
46
46
  * @param {string} rootDir Optional. When provided, all resolved source and destination paths must be contained
47
47
  * within this directory, otherwise an error is thrown.
48
+ * @param {boolean} overwrite Set to `true` to overwrite an existing file at the destination. Default is `false`,
49
+ * matching the behavior of `writeFile`/`copyFile`. Appended after `rootDir` to preserve the existing positional
50
+ * call signature.
48
51
  */
49
- static copyBinaryFile(srcPath: string, outPath: string, variables?: any, rootDir?: string): Promise<void>;
52
+ static copyBinaryFile(srcPath: string, outPath: string, variables?: any, rootDir?: string, overwrite?: boolean): Promise<void>;
50
53
  /**
51
54
  * Performs a deep copy of a directory tree at the given srcPath to the specified output directory. Performs
52
55
  * template replacement for all variables given and skips any files in the specified filter.
@@ -148,6 +148,31 @@ export declare class JWTUtils {
148
148
  * @param user The user to encode into the token's payload.
149
149
  */
150
150
  private static deriveKeySync;
151
+ /**
152
+ * Encrypts `plaintext` for `publicKey` using hybrid encryption: `plaintext` is encrypted with a fresh
153
+ * AES-256-GCM key, which is itself wrapped with RSA. This avoids `crypto.publicEncrypt`'s fixed plaintext-size
154
+ * limit (e.g. ~214 bytes for a 2048-bit key with OAEP padding), which a raw JSON user profile easily exceeds.
155
+ *
156
+ * @param publicKey The RSA public key to wrap the AES key with.
157
+ * @param plaintext The data to encrypt.
158
+ * @returns The encrypted data, encoded as `<wrapped-key>.<iv>.<authTag>.<ciphertext>`, all base64.
159
+ */
160
+ private static hybridEncrypt;
161
+ /**
162
+ * Returns `true` if `algorithm` is an AEAD cipher (GCM/CCM/OCB/ChaCha20-Poly1305), which produces an
163
+ * authentication tag that must be captured on encryption and supplied back on decryption via
164
+ * `getAuthTag()`/`setAuthTag()`.
165
+ *
166
+ * @param algorithm The cipher algorithm name (e.g. `aes-256-gcm`).
167
+ */
168
+ private static isAEADCipher;
169
+ /**
170
+ * Decrypts data produced by `hybridEncrypt`.
171
+ *
172
+ * @param privateKey The RSA private key to unwrap the AES key with.
173
+ * @param encoded The encrypted data, as produced by `hybridEncrypt`.
174
+ */
175
+ private static hybridDecrypt;
151
176
  static createToken(config: JWTUtilsConfig, user: JWTUser, data?: any): Promise<string>;
152
177
  static createTokenSync(config: JWTUtilsConfig, user: JWTUser, data?: any): string;
153
178
  /**
@@ -57,6 +57,8 @@ export declare class MessagingUtils {
57
57
  private _transporter;
58
58
  /** Cache of compiled Handlebars delegates keyed by "<templateName>:<field>". */
59
59
  private _compiledTemplates;
60
+ /** Names of templates already compiled into `_compiledTemplates` for this instance. See `loadTemplate()`. */
61
+ private _loadedTemplates;
60
62
  init(): Promise<void>;
61
63
  /**
62
64
  * Loads the template with the given name and returns its contents as a string.
@@ -6,12 +6,20 @@
6
6
  export declare class NotificationUtils {
7
7
  /** The redis client to use for broadcasting messages. */
8
8
  private redis;
9
+ /** The logging utility to use. */
10
+ private logger?;
9
11
  /**
10
12
  * Initializes the utility using the given redis connection.
11
13
  *
12
14
  * @param {any} redis The redis connection to publish to.
15
+ * @param {any} logger The logging utility to use.
13
16
  */
14
17
  constructor(redis: any);
18
+ /**
19
+ * Publishes to the given redis channel, logging (rather than crashing the process via an unhandled rejection)
20
+ * if the underlying client's `publish()` rejects.
21
+ */
22
+ private publish;
15
23
  /**
16
24
  * Broadcasts a given message to all users.
17
25
  *
@@ -15,6 +15,11 @@ export declare class ObjectUtils {
15
15
  * @param recurse Set to `true` to validate all child objects.
16
16
  */
17
17
  static deleteScopedProps(obj: any, user?: JWTUser, clazz?: any, recurse?: boolean): void;
18
+ /**
19
+ * Internal implementation of `deleteScopedProps` that tracks already-visited objects so that circular
20
+ * references (e.g. ORM-populated relations that reference each other) don't cause infinite recursion.
21
+ */
22
+ private static _deleteScopedProps;
18
23
  /**
19
24
  * Performs validation of the given object or array. Validation is performed by scanning the object class for properties
20
25
  * decorated with `@Validator` and executing the provided validation function.
@@ -24,4 +29,9 @@ export declare class ObjectUtils {
24
29
  * @param recurse Set to `true` to validate all child objects.
25
30
  */
26
31
  static validate(obj: any, clazz?: any, recurse?: boolean): void;
32
+ /**
33
+ * Internal implementation of `validate` that tracks already-visited objects so that circular references
34
+ * (e.g. ORM-populated relations that reference each other) don't cause infinite recursion.
35
+ */
36
+ private static _validate;
27
37
  }
@@ -49,6 +49,14 @@ export declare class Event implements NewEvent {
49
49
  * The `on` function allows code within the same application or service to listen for outgoing events that have been
50
50
  * sent via the `record` function.
51
51
  *
52
+ * The utility uses an application specific JWT access token for sending telemetry events. The purpose of using an
53
+ * application specific JWT token versus user token is to identify a potentially compromised application server. This
54
+ * also allows the server to send telemetry events on behalf of the user that the user may not otherwise have permission
55
+ * to send.
56
+ *
57
+ * Note: This class is considered a runtime singleton and intentionally uses static state. Do not initialize this
58
+ * class more than once in your application.
59
+ *
52
60
  * @author Jean-Philippe Steinmetz <rapidrests@gmail.com>
53
61
  */
54
62
  export declare class EventUtils {
@@ -63,7 +71,7 @@ export declare class EventUtils {
63
71
  *
64
72
  * @param config The application configuration to use.
65
73
  * @param logger The logging utility to use.
66
- * @param jwtToken The user's JWT token to send telemetry events on behalf of.
74
+ * @param jwtToken The application's JWT token to send telemetry events on behalf of.
67
75
  */
68
76
  static init(config: any, logger: any, jwtToken: string): Promise<void>;
69
77
  /**
@@ -7,6 +7,7 @@ export * from "./JWTUtils.js";
7
7
  export * from "./Logger.js";
8
8
  export * from "./MemoryStore.js";
9
9
  export * from "./MessagingUtils.js";
10
+ export * from "./NotificationsUtils.js";
10
11
  export * from "./ObjectFactory.js";
11
12
  export * from "./ObjectUtils.js";
12
13
  export * from "./OASUtils.js";
@@ -49,6 +49,8 @@ export interface WorkerOptions {
49
49
  * @author Jean-Philippe Steinmetz
50
50
  */
51
51
  export declare class ThreadPool {
52
+ /** The maximum amount of time, in milliseconds, `stop()` waits for a worker to exit on its own before force-terminating it. */
53
+ private static readonly STOP_GRACE_PERIOD_MS;
52
54
  /** The map of event types to a list of callback functions. */
53
55
  private callbacks;
54
56
  /** The index of the last worker that was assigned work. */
@@ -85,7 +87,8 @@ export declare class ThreadPool {
85
87
  */
86
88
  start(options?: WorkerOptions, num?: number): Promise<void>;
87
89
  /**
88
- * Stops all running thread executions.
90
+ * Stops all running thread executions. Each worker is given `ThreadPool.STOP_GRACE_PERIOD_MS` to gracefully
91
+ * finish its own `stop()` and exit on its own before being force-terminated.
89
92
  */
90
93
  stop(): Promise<void>;
91
94
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rapidrest/core",
3
- "version": "1.14.0",
3
+ "version": "1.15.0",
4
4
  "description": "A collection of common utilities and core functionality for rapidly building RESTful applications.",
5
5
  "repository": "https://github.com/rapidrest/core.git",
6
6
  "author": "RapidREST <rapidrests@gmail.com>",