node-server-engine 1.10.14 → 1.11.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 (47) hide show
  1. package/README.md +200 -1
  2. package/dist/entities/PubSub/handleMessage/handleMessage.js +1 -1
  3. package/dist/entities/PubSub/handleMessage/handleMessage.js.map +1 -1
  4. package/dist/entities/Redis/Redis.d.ts +66 -24
  5. package/dist/entities/Redis/Redis.js +272 -144
  6. package/dist/entities/Redis/Redis.js.map +1 -1
  7. package/dist/entities/Redis/index.d.ts +1 -1
  8. package/dist/entities/Redis/index.js +10 -38
  9. package/dist/entities/Redis/index.js.map +1 -1
  10. package/dist/entities/SecretManager/SecretManager.d.ts +87 -0
  11. package/dist/entities/SecretManager/SecretManager.js +385 -0
  12. package/dist/entities/SecretManager/SecretManager.js.map +1 -0
  13. package/dist/entities/SecretManager/SecretManager.types.d.ts +71 -0
  14. package/dist/entities/SecretManager/SecretManager.types.js +2 -0
  15. package/dist/entities/SecretManager/SecretManager.types.js.map +1 -0
  16. package/dist/entities/SecretManager/index.d.ts +2 -0
  17. package/dist/entities/SecretManager/index.js +28 -0
  18. package/dist/entities/SecretManager/index.js.map +1 -0
  19. package/dist/entities/Sequelize/Sequelize.js +5 -3
  20. package/dist/entities/Sequelize/Sequelize.js.map +1 -1
  21. package/dist/entities/Server/Server.d.ts +2 -0
  22. package/dist/entities/Server/Server.js +9 -0
  23. package/dist/entities/Server/Server.js.map +1 -1
  24. package/dist/entities/Server/Server.types.d.ts +3 -0
  25. package/dist/entities/Server/Server.types.js.map +1 -1
  26. package/dist/entities/index.d.ts +1 -0
  27. package/dist/entities/index.js +11 -0
  28. package/dist/entities/index.js.map +1 -1
  29. package/dist/middleware/requestMetrics/requestMetrics.js +15 -5
  30. package/dist/middleware/requestMetrics/requestMetrics.js.map +1 -1
  31. package/dist/utils/index.d.ts +0 -1
  32. package/dist/utils/index.js +0 -11
  33. package/dist/utils/index.js.map +1 -1
  34. package/dist/utils/jwt/jwt.js +25 -2
  35. package/dist/utils/jwt/jwt.js.map +1 -1
  36. package/dist/utils/sendEmail/sendEmail.js +4 -2
  37. package/dist/utils/sendEmail/sendEmail.js.map +1 -1
  38. package/package.json +1 -1
  39. package/dist/utils/secretManager/index.d.ts +0 -2
  40. package/dist/utils/secretManager/index.js +0 -28
  41. package/dist/utils/secretManager/index.js.map +0 -1
  42. package/dist/utils/secretManager/secretLoader.d.ts +0 -8
  43. package/dist/utils/secretManager/secretLoader.js +0 -68
  44. package/dist/utils/secretManager/secretLoader.js.map +0 -1
  45. package/dist/utils/secretManager/secretResolver.d.ts +0 -5
  46. package/dist/utils/secretManager/secretResolver.js +0 -41
  47. package/dist/utils/secretManager/secretResolver.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-server-engine",
3
- "version": "1.10.14",
3
+ "version": "1.11.0",
4
4
  "description": "Framework used to develop backend services. This package ships with a lot of features to standardize the creation of services, letting you focus on the business logic.",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -1,2 +0,0 @@
1
- export * from './secretResolver';
2
- export * from './secretLoader';
@@ -1,28 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- var _secretResolver = require("./secretResolver");
7
- Object.keys(_secretResolver).forEach(function (key) {
8
- if (key === "default" || key === "__esModule") return;
9
- if (key in exports && exports[key] === _secretResolver[key]) return;
10
- Object.defineProperty(exports, key, {
11
- enumerable: true,
12
- get: function () {
13
- return _secretResolver[key];
14
- }
15
- });
16
- });
17
- var _secretLoader = require("./secretLoader");
18
- Object.keys(_secretLoader).forEach(function (key) {
19
- if (key === "default" || key === "__esModule") return;
20
- if (key in exports && exports[key] === _secretLoader[key]) return;
21
- Object.defineProperty(exports, key, {
22
- enumerable: true,
23
- get: function () {
24
- return _secretLoader[key];
25
- }
26
- });
27
- });
28
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["_secretResolver","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_secretLoader"],"sources":["../../../src/utils/secretManager/index.ts"],"sourcesContent":["export * from './secretResolver';\nexport * from './secretLoader';\n"],"mappings":";;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,eAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,eAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,eAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,aAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,aAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,aAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,aAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -1,8 +0,0 @@
1
- export declare const secretCache: {
2
- [key: string]: string;
3
- };
4
- /**
5
- * Initialize the Secret Manager client and preload secrets.
6
- * @param secretEnvVars List of env var names that contain secret paths
7
- */
8
- export declare const initializeSecrets: (secretEnvVars: string[]) => Promise<void>;
@@ -1,68 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.secretCache = exports.initializeSecrets = void 0;
7
- var _secretManager = require("@google-cloud/secret-manager");
8
- var _EngineError = require("../../entities/EngineError");
9
- var _report = require("../report");
10
- // Cache to store preloaded secrets
11
- const secretCache = exports.secretCache = {};
12
- let secretClient;
13
-
14
- /**
15
- * Initialize the Secret Manager client and preload secrets.
16
- * @param secretEnvVars List of env var names that contain secret paths
17
- */
18
- const initializeSecrets = async secretEnvVars => {
19
- if (process.env.NODE_ENV !== 'production') {
20
- (0, _report.reportDebug)({
21
- namespace: 'engine:secretManager',
22
- message: 'Development mode → using local files for secrets'
23
- });
24
- return; // No need to preload anything
25
- }
26
- try {
27
- // Default creds (for GCP runtime)
28
- secretClient = new _secretManager.SecretManagerServiceClient();
29
- const secretNames = secretEnvVars.filter(name => process.env[name]);
30
- if (secretNames.length === 0) {
31
- throw new _EngineError.EngineError({
32
- message: 'No secret names defined in environment variables'
33
- });
34
- }
35
-
36
- // Fetch all secrets from GCP Secret Manager
37
- for (const name of secretNames) {
38
- const secretPath = process.env[name];
39
- if (!secretPath) {
40
- throw new _EngineError.EngineError({
41
- message: `Secret path for ${name} is not defined`
42
- });
43
- }
44
- try {
45
- const [version] = await secretClient.accessSecretVersion({
46
- name: secretPath
47
- });
48
- const payload = version.payload?.data?.toString('utf-8');
49
- if (!payload) {
50
- throw new _EngineError.EngineError({
51
- message: `Secret ${name} not found or empty`
52
- });
53
- }
54
- secretCache[name] = payload;
55
- } catch (err) {
56
- throw new _EngineError.EngineError({
57
- message: `Error accessing secret ${name}: ${err.message}`
58
- });
59
- }
60
- }
61
- } catch (err) {
62
- throw new _EngineError.EngineError({
63
- message: `Failed to initialize secrets: ${err.message}`
64
- });
65
- }
66
- };
67
- exports.initializeSecrets = initializeSecrets;
68
- //# sourceMappingURL=secretLoader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"secretLoader.js","names":["_secretManager","require","_EngineError","_report","secretCache","exports","secretClient","initializeSecrets","secretEnvVars","process","env","NODE_ENV","reportDebug","namespace","message","SecretManagerServiceClient","secretNames","filter","name","length","EngineError","secretPath","version","accessSecretVersion","payload","data","toString","err"],"sources":["../../../src/utils/secretManager/secretLoader.ts"],"sourcesContent":["import { SecretManagerServiceClient } from '@google-cloud/secret-manager';\nimport { EngineError } from 'entities/EngineError';\nimport { reportDebug } from 'utils/report';\n\n// Cache to store preloaded secrets\nexport const secretCache: { [key: string]: string } = {};\nlet secretClient: SecretManagerServiceClient;\n\n/**\n * Initialize the Secret Manager client and preload secrets.\n * @param secretEnvVars List of env var names that contain secret paths\n */\nexport const initializeSecrets = async (\n secretEnvVars: string[]\n): Promise<void> => {\n if (process.env.NODE_ENV !== 'production') {\n reportDebug({\n namespace: 'engine:secretManager',\n message: 'Development mode → using local files for secrets'\n });\n return; // No need to preload anything\n }\n\n try {\n // Default creds (for GCP runtime)\n secretClient = new SecretManagerServiceClient();\n\n const secretNames = secretEnvVars.filter((name) => process.env[name]);\n if (secretNames.length === 0) {\n throw new EngineError({\n message: 'No secret names defined in environment variables'\n });\n }\n\n // Fetch all secrets from GCP Secret Manager\n for (const name of secretNames) {\n const secretPath = process.env[name];\n if (!secretPath) {\n throw new EngineError({\n message: `Secret path for ${name} is not defined`\n });\n }\n\n try {\n const [version] = await secretClient.accessSecretVersion({\n name: secretPath\n });\n const payload = version.payload?.data?.toString('utf-8');\n if (!payload) {\n throw new EngineError({\n message: `Secret ${name} not found or empty`\n });\n }\n secretCache[name] = payload;\n } catch (err) {\n throw new EngineError({\n message: `Error accessing secret ${name}: ${(err as Error).message}`\n });\n }\n }\n } catch (err) {\n throw new EngineError({\n message: `Failed to initialize secrets: ${(err as Error).message}`\n });\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAEA;AACO,MAAMG,WAAsC,GAAAC,OAAA,CAAAD,WAAA,GAAG,CAAC,CAAC;AACxD,IAAIE,YAAwC;;AAE5C;AACA;AACA;AACA;AACO,MAAMC,iBAAiB,GAAG,MAC/BC,aAAuB,IACL;EAClB,IAAIC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;IACzC,IAAAC,mBAAW,EAAC;MACVC,SAAS,EAAE,sBAAsB;MACjCC,OAAO,EAAE;IACX,CAAC,CAAC;IACF,OAAO,CAAC;EACV;EAEA,IAAI;IACF;IACAR,YAAY,GAAG,IAAIS,yCAA0B,CAAC,CAAC;IAE/C,MAAMC,WAAW,GAAGR,aAAa,CAACS,MAAM,CAAEC,IAAI,IAAKT,OAAO,CAACC,GAAG,CAACQ,IAAI,CAAC,CAAC;IACrE,IAAIF,WAAW,CAACG,MAAM,KAAK,CAAC,EAAE;MAC5B,MAAM,IAAIC,wBAAW,CAAC;QACpBN,OAAO,EAAE;MACX,CAAC,CAAC;IACJ;;IAEA;IACA,KAAK,MAAMI,IAAI,IAAIF,WAAW,EAAE;MAC9B,MAAMK,UAAU,GAAGZ,OAAO,CAACC,GAAG,CAACQ,IAAI,CAAC;MACpC,IAAI,CAACG,UAAU,EAAE;QACf,MAAM,IAAID,wBAAW,CAAC;UACpBN,OAAO,EAAE,mBAAmBI,IAAI;QAClC,CAAC,CAAC;MACJ;MAEA,IAAI;QACF,MAAM,CAACI,OAAO,CAAC,GAAG,MAAMhB,YAAY,CAACiB,mBAAmB,CAAC;UACvDL,IAAI,EAAEG;QACR,CAAC,CAAC;QACF,MAAMG,OAAO,GAAGF,OAAO,CAACE,OAAO,EAAEC,IAAI,EAAEC,QAAQ,CAAC,OAAO,CAAC;QACxD,IAAI,CAACF,OAAO,EAAE;UACZ,MAAM,IAAIJ,wBAAW,CAAC;YACpBN,OAAO,EAAE,UAAUI,IAAI;UACzB,CAAC,CAAC;QACJ;QACAd,WAAW,CAACc,IAAI,CAAC,GAAGM,OAAO;MAC7B,CAAC,CAAC,OAAOG,GAAG,EAAE;QACZ,MAAM,IAAIP,wBAAW,CAAC;UACpBN,OAAO,EAAE,0BAA0BI,IAAI,KAAMS,GAAG,CAAWb,OAAO;QACpE,CAAC,CAAC;MACJ;IACF;EACF,CAAC,CAAC,OAAOa,GAAG,EAAE;IACZ,MAAM,IAAIP,wBAAW,CAAC;MACpBN,OAAO,EAAE,iCAAkCa,GAAG,CAAWb,OAAO;IAClE,CAAC,CAAC;EACJ;AACF,CAAC;AAACT,OAAA,CAAAE,iBAAA,GAAAA,iBAAA","ignoreList":[]}
@@ -1,5 +0,0 @@
1
- /**
2
- * Retrieve a secret value (production) or file content (development).
3
- * @param name The env var name that contains either the secret path (prod) or local file path (dev)
4
- */
5
- export declare const getSecretOrFile: (name: string) => string;
@@ -1,41 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.getSecretOrFile = void 0;
8
- var _fs = _interopRequireDefault(require("fs"));
9
- var _EngineError = require("../../entities/EngineError");
10
- var _secretLoader = require("./secretLoader");
11
- /**
12
- * Retrieve a secret value (production) or file content (development).
13
- * @param name The env var name that contains either the secret path (prod) or local file path (dev)
14
- */
15
- const getSecretOrFile = name => {
16
- if (process.env.NODE_ENV === 'production') {
17
- const secretValue = _secretLoader.secretCache[name];
18
- if (!secretValue) {
19
- throw new _EngineError.EngineError({
20
- message: `Secret value for ${name} not found in cache`
21
- });
22
- }
23
- return secretValue;
24
- } else {
25
- const localPath = process.env[name];
26
- if (!localPath) {
27
- throw new _EngineError.EngineError({
28
- message: `Local path for ${name} is not defined`
29
- });
30
- }
31
- try {
32
- return _fs.default.readFileSync(localPath, 'utf-8');
33
- } catch (err) {
34
- throw new _EngineError.EngineError({
35
- message: `Error reading local file for ${name}: ${err.message}`
36
- });
37
- }
38
- }
39
- };
40
- exports.getSecretOrFile = getSecretOrFile;
41
- //# sourceMappingURL=secretResolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"secretResolver.js","names":["_fs","_interopRequireDefault","require","_EngineError","_secretLoader","getSecretOrFile","name","process","env","NODE_ENV","secretValue","secretCache","EngineError","message","localPath","fs","readFileSync","err","exports"],"sources":["../../../src/utils/secretManager/secretResolver.ts"],"sourcesContent":["import fs from 'fs';\nimport { EngineError } from 'entities/EngineError';\nimport { secretCache } from './secretLoader';\n\n/**\n * Retrieve a secret value (production) or file content (development).\n * @param name The env var name that contains either the secret path (prod) or local file path (dev)\n */\nexport const getSecretOrFile = (name: string): string => {\n if (process.env.NODE_ENV === 'production') {\n const secretValue = secretCache[name];\n\n if (!secretValue) {\n throw new EngineError({\n message: `Secret value for ${name} not found in cache`\n });\n }\n return secretValue;\n } else {\n const localPath = process.env[name];\n if (!localPath) {\n throw new EngineError({\n message: `Local path for ${name} is not defined`\n });\n }\n\n try {\n return fs.readFileSync(localPath, 'utf-8');\n } catch (err) {\n throw new EngineError({\n message: `Error reading local file for ${name}: ${(err as Error).message}`\n });\n }\n }\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,GAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,aAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACO,MAAMG,eAAe,GAAIC,IAAY,IAAa;EACvD,IAAIC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;IACzC,MAAMC,WAAW,GAAGC,yBAAW,CAACL,IAAI,CAAC;IAErC,IAAI,CAACI,WAAW,EAAE;MAChB,MAAM,IAAIE,wBAAW,CAAC;QACpBC,OAAO,EAAE,oBAAoBP,IAAI;MACnC,CAAC,CAAC;IACJ;IACA,OAAOI,WAAW;EACpB,CAAC,MAAM;IACL,MAAMI,SAAS,GAAGP,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC;IACnC,IAAI,CAACQ,SAAS,EAAE;MACd,MAAM,IAAIF,wBAAW,CAAC;QACpBC,OAAO,EAAE,kBAAkBP,IAAI;MACjC,CAAC,CAAC;IACJ;IAEA,IAAI;MACF,OAAOS,WAAE,CAACC,YAAY,CAACF,SAAS,EAAE,OAAO,CAAC;IAC5C,CAAC,CAAC,OAAOG,GAAG,EAAE;MACZ,MAAM,IAAIL,wBAAW,CAAC;QACpBC,OAAO,EAAE,gCAAgCP,IAAI,KAAMW,GAAG,CAAWJ,OAAO;MAC1E,CAAC,CAAC;IACJ;EACF;AACF,CAAC;AAACK,OAAA,CAAAb,eAAA,GAAAA,eAAA","ignoreList":[]}