node-server-engine 1.3.2 → 1.3.4

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/.env.example +14 -1
  2. package/dist/entities/Server/Server.d.ts +2 -2
  3. package/dist/entities/Server/Server.js +8 -16
  4. package/dist/entities/Server/Server.js.map +1 -1
  5. package/dist/middleware/userResolver/userResolver.d.ts +4 -0
  6. package/dist/middleware/userResolver/userResolver.js +18 -4
  7. package/dist/middleware/userResolver/userResolver.js.map +1 -1
  8. package/dist/utils/createHttpServer/createHttpServer.d.ts +5 -2
  9. package/dist/utils/createHttpServer/createHttpServer.js +17 -12
  10. package/dist/utils/createHttpServer/createHttpServer.js.map +1 -1
  11. package/dist/utils/index.d.ts +1 -0
  12. package/dist/utils/index.js +11 -0
  13. package/dist/utils/index.js.map +1 -1
  14. package/dist/utils/jwt/jwt.js +5 -5
  15. package/dist/utils/jwt/jwt.js.map +1 -1
  16. package/dist/utils/secretManager/index.d.ts +2 -0
  17. package/dist/utils/secretManager/index.js +28 -0
  18. package/dist/utils/secretManager/index.js.map +1 -0
  19. package/dist/utils/secretManager/secretLoader.d.ts +8 -0
  20. package/dist/utils/secretManager/secretLoader.js +64 -0
  21. package/dist/utils/secretManager/secretLoader.js.map +1 -0
  22. package/dist/utils/secretManager/secretResolver.d.ts +5 -0
  23. package/dist/utils/secretManager/secretResolver.js +42 -0
  24. package/dist/utils/secretManager/secretResolver.js.map +1 -0
  25. package/dist/utils/tlsConfig/httpsAgent.js +8 -4
  26. package/dist/utils/tlsConfig/httpsAgent.js.map +1 -1
  27. package/dist/utils/tlsConfig/tlsConfig.d.ts +1 -1
  28. package/dist/utils/tlsConfig/tlsConfig.js +14 -8
  29. package/dist/utils/tlsConfig/tlsConfig.js.map +1 -1
  30. package/package.json +2 -1
  31. package/src/entities/Server/Server.ts +7 -25
  32. package/src/middleware/userResolver/userResolver.ts +19 -1
  33. package/src/utils/createHttpServer/createHttpServer.ts +18 -13
  34. package/src/utils/index.ts +2 -0
  35. package/src/utils/jwt/jwt.ts +8 -7
  36. package/src/utils/secretManager/index.ts +2 -0
  37. package/src/utils/secretManager/secretLoader.ts +62 -0
  38. package/src/utils/secretManager/secretResolver.ts +36 -0
  39. package/src/utils/tlsConfig/httpsAgent.ts +22 -13
  40. package/src/utils/tlsConfig/tlsConfig.ts +22 -20
  41. package/src/middleware/userResolver/userResolver.test.ts +0 -35
@@ -1,37 +1,38 @@
1
- import fs from 'fs';
2
1
  import https, { Agent } from 'https';
3
2
  import { TlsConfig } from './tlsConfig.types';
4
3
  import { validateTlsConfig } from './tlsConfig.validate';
5
4
  import { EngineError } from 'entities/EngineError';
5
+ import { getSecretOrFile } from 'utils';
6
6
 
7
7
  export let tlsConfig: undefined | TlsConfig;
8
8
  export let httpsAgent: undefined | Agent;
9
9
 
10
10
  /**
11
- * Load TLS config by its Environment setting.
11
+ * Load TLS config by its environment setting (local files or GCP secrets)
12
12
  */
13
13
  export function loadTlsConfig(): void {
14
- // Check that environment variables are correctly set
15
14
  validateTlsConfig();
16
15
  tlsConfig = undefined;
17
16
 
18
17
  if (process.env.TLS_REQUEST_KEY || process.env.TLS_SERVER_KEY) {
19
- tlsConfig = {
20
- key: fs.readFileSync(
21
- (process.env.TLS_REQUEST_KEY ?? process.env.TLS_SERVER_KEY) as string,
22
- 'utf-8'
23
- ),
24
- cert: fs.readFileSync(
25
- (process.env.TLS_REQUEST_CERT ?? process.env.TLS_SERVER_CERT) as string,
26
- 'utf-8'
27
- ),
28
- ca: fs.readFileSync(
29
- (process.env.TLS_REQUEST_CA ?? process.env.TLS_CA) as string,
30
- 'utf-8'
31
- ),
32
- passphrase: (process.env.TLS_REQUEST_KEY_PASSPHRASE ??
33
- process.env.TLS_SERVER_KEY_PASSPHRASE) as string
34
- } as TlsConfig;
18
+ // Fetch TLS secrets using unified utility
19
+ const key = getSecretOrFile(
20
+ process.env.TLS_REQUEST_KEY ?? process.env.TLS_SERVER_KEY!
21
+ );
22
+ const cert = getSecretOrFile(
23
+ process.env.TLS_REQUEST_CERT ?? process.env.TLS_SERVER_CERT!
24
+ );
25
+ const ca = getSecretOrFile(
26
+ process.env.TLS_REQUEST_CA ?? process.env.TLS_CA!
27
+ );
28
+
29
+ // Passphrase is read directly from env variables
30
+ const passphrase =
31
+ process.env.TLS_REQUEST_KEY_PASSPHRASE ??
32
+ process.env.TLS_SERVER_KEY_PASSPHRASE;
33
+
34
+ tlsConfig = { key, cert, ca, passphrase } as TlsConfig;
35
+
35
36
  httpsAgent = new https.Agent({
36
37
  key: tlsConfig.key,
37
38
  cert: tlsConfig.cert,
@@ -39,7 +40,8 @@ export function loadTlsConfig(): void {
39
40
  passphrase: tlsConfig.passphrase
40
41
  });
41
42
  }
42
- if (!tlsConfig || !(tlsConfig.ca && tlsConfig.cert && tlsConfig.key)) {
43
+
44
+ if (!tlsConfig || !(tlsConfig.key && tlsConfig.cert && tlsConfig.ca)) {
43
45
  throw new EngineError({
44
46
  message: 'TLS environment variables are not set correctly'
45
47
  });
@@ -1,35 +0,0 @@
1
- import { factory } from 'backend-test-tools';
2
- import { expect } from 'chai';
3
- import { Request, Response } from 'express';
4
- import { stub, fake } from 'sinon';
5
- import { userResolver } from './userResolver';
6
-
7
- describe('Middleware - User Resolver', function () {
8
- it('should expand the user object with its data using its userId', async function () {
9
- const me = factory.build('user');
10
- const next = fake();
11
- const request: Partial<Request> = { user: { id: me.id } };
12
-
13
- // Call the resolver with the mocked request
14
- await userResolver(request as Request, undefined as unknown as Response, next);
15
-
16
- expect(next).to.have.been.called;
17
- // expect(request.user).to.deep.equal(me);
18
- });
19
-
20
- it('should throw an error if there is no userId', async function () {
21
- const me = factory.build('user');
22
- const next = fake();
23
- const request = {} as Request;
24
- await expect(userResolver(request, undefined as unknown as Response, next))
25
- .to.eventually.be.rejected;
26
- });
27
-
28
- // it('should throw an error if there is no such user', async function () {
29
- // const { id } = factory.build('user');
30
- // const next = fake();
31
- // const request = { user: { id } } as Request;
32
- // await expect(userResolver(request, undefined as unknown as Response, next))
33
- // .to.eventually.be.rejected;
34
- // });
35
- });