node-server-engine 1.4.9 → 1.5.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.
Files changed (277) hide show
  1. package/.commitlintrc.js +27 -0
  2. package/.releaserc.js +56 -0
  3. package/README.md +154 -2
  4. package/dist/const/tokenIssuer.js +1 -0
  5. package/dist/const/tokenIssuer.js.map +1 -1
  6. package/dist/db/models/SequelizeMeta.js +3 -1
  7. package/dist/db/models/SequelizeMeta.js.map +1 -1
  8. package/dist/entities/ElasticSearch/ElasticSearch.js +1 -2
  9. package/dist/entities/ElasticSearch/ElasticSearch.js.map +1 -1
  10. package/dist/entities/Sequelize/Sequelize.js +4 -1
  11. package/dist/entities/Sequelize/Sequelize.js.map +1 -1
  12. package/dist/entities/Server/Server.js +8 -11
  13. package/dist/entities/Server/Server.js.map +1 -1
  14. package/dist/entities/SocketClient/SocketClient.d.ts +4 -1
  15. package/dist/entities/SocketClient/SocketClient.js +5 -1
  16. package/dist/entities/SocketClient/SocketClient.js.map +1 -1
  17. package/dist/index.js +1 -2
  18. package/dist/index.js.map +1 -1
  19. package/dist/middleware/checkPermission/checkPermission.d.ts +1 -1
  20. package/dist/middleware/checkPermission/checkPermission.js +4 -2
  21. package/dist/middleware/checkPermission/checkPermission.js.map +1 -1
  22. package/dist/utils/createSortedObject/createSortedObject.d.ts +5 -1
  23. package/dist/utils/createSortedObject/createSortedObject.js +13 -4
  24. package/dist/utils/createSortedObject/createSortedObject.js.map +1 -1
  25. package/dist/utils/dbMigration/dbMigration.js +34 -15
  26. package/dist/utils/dbMigration/dbMigration.js.map +1 -1
  27. package/dist/utils/geminiFileUpload/geminiFileUpload.js +2 -1
  28. package/dist/utils/geminiFileUpload/geminiFileUpload.js.map +1 -1
  29. package/dist/utils/jwt/jwt.js +1 -1
  30. package/dist/utils/jwt/jwt.js.map +1 -1
  31. package/dist/utils/report/report.d.ts +9 -3
  32. package/dist/utils/report/report.js +29 -12
  33. package/dist/utils/report/report.js.map +1 -1
  34. package/dist/utils/secretManager/secretLoader.js +5 -1
  35. package/dist/utils/secretManager/secretLoader.js.map +1 -1
  36. package/dist/utils/semverCompare/semverCompare.d.ts +4 -4
  37. package/dist/utils/semverCompare/semverCompare.js +16 -18
  38. package/dist/utils/semverCompare/semverCompare.js.map +1 -1
  39. package/package.json +30 -19
  40. package/.env.example +0 -186
  41. package/.github/workflows/publish.yml +0 -41
  42. package/.prettierrc +0 -7
  43. package/Dockerfile +0 -31
  44. package/babel.config.json +0 -34
  45. package/eslint.config.mjs +0 -11
  46. package/src/const/DebeziumEvent.ts +0 -6
  47. package/src/const/LogSeverity.ts +0 -7
  48. package/src/const/index.ts +0 -5
  49. package/src/const/metrics.ts +0 -6
  50. package/src/const/mime.ts +0 -37
  51. package/src/const/tokenIssuer.ts +0 -7
  52. package/src/db/migrations/20241030121500-create-sequelize-meta-table.ts +0 -29
  53. package/src/db/models/SequelizeMeta.ts +0 -16
  54. package/src/db/models/index.ts +0 -2
  55. package/src/entities/ElasticSearch/ElasticSearch.ts +0 -103
  56. package/src/entities/ElasticSearch/ElasticSearch.types.ts +0 -7
  57. package/src/entities/ElasticSearch/index.ts +0 -2
  58. package/src/entities/Endpoint/Endpoint.test.ts +0 -248
  59. package/src/entities/Endpoint/Endpoint.ts +0 -221
  60. package/src/entities/Endpoint/Endpoint.types.ts +0 -181
  61. package/src/entities/Endpoint/index.ts +0 -2
  62. package/src/entities/EngineError/EngineError.ts +0 -28
  63. package/src/entities/EngineError/EngineError.types.ts +0 -15
  64. package/src/entities/EngineError/index.ts +0 -2
  65. package/src/entities/KeySet/KeySet.test.ts +0 -126
  66. package/src/entities/KeySet/KeySet.ts +0 -172
  67. package/src/entities/KeySet/KeySet.types.ts +0 -28
  68. package/src/entities/KeySet/index.ts +0 -2
  69. package/src/entities/LifecycleController/LifecycleController.test.ts +0 -48
  70. package/src/entities/LifecycleController/LifecycleController.ts +0 -24
  71. package/src/entities/LifecycleController/LifecycleController.types.ts +0 -5
  72. package/src/entities/LifecycleController/index.ts +0 -2
  73. package/src/entities/Localizator/Localizator.ts +0 -139
  74. package/src/entities/Localizator/Localizator.types.ts +0 -52
  75. package/src/entities/Localizator/guessNamingConvention/guessNamingConvention.test.ts +0 -165
  76. package/src/entities/Localizator/guessNamingConvention/guessNamingConvention.ts +0 -58
  77. package/src/entities/Localizator/guessNamingConvention/index.ts +0 -1
  78. package/src/entities/Localizator/index.ts +0 -2
  79. package/src/entities/MessageHandler/MessageHandler.test.ts +0 -130
  80. package/src/entities/MessageHandler/MessageHandler.ts +0 -72
  81. package/src/entities/MessageHandler/MessageHandler.types.ts +0 -15
  82. package/src/entities/MessageHandler/index.ts +0 -2
  83. package/src/entities/PubSub/PubSub.test.ts +0 -297
  84. package/src/entities/PubSub/PubSub.ts +0 -202
  85. package/src/entities/PubSub/PubSub.types.ts +0 -76
  86. package/src/entities/PubSub/handleMessage/handleMessage.test.ts +0 -102
  87. package/src/entities/PubSub/handleMessage/handleMessage.ts +0 -65
  88. package/src/entities/PubSub/handleMessage/index.ts +0 -1
  89. package/src/entities/PubSub/index.ts +0 -2
  90. package/src/entities/PushNotification/PushNotification.test.ts +0 -35
  91. package/src/entities/PushNotification/PushNotification.ts +0 -44
  92. package/src/entities/PushNotification/PushNotification.types.ts +0 -25
  93. package/src/entities/PushNotification/index.ts +0 -2
  94. package/src/entities/Redis/Redis.ts +0 -71
  95. package/src/entities/Redis/Redis.types.ts +0 -19
  96. package/src/entities/Redis/Redis.validate.ts +0 -17
  97. package/src/entities/Redis/index.ts +0 -2
  98. package/src/entities/Sequelize/Sequelize.config.ts +0 -59
  99. package/src/entities/Sequelize/Sequelize.test.ts +0 -21
  100. package/src/entities/Sequelize/Sequelize.ts +0 -75
  101. package/src/entities/Sequelize/Sequelize.types.ts +0 -10
  102. package/src/entities/Sequelize/Sequelize.validate.ts +0 -15
  103. package/src/entities/Sequelize/index.ts +0 -2
  104. package/src/entities/Server/Server.const.ts +0 -56
  105. package/src/entities/Server/Server.test.ts +0 -272
  106. package/src/entities/Server/Server.ts +0 -471
  107. package/src/entities/Server/Server.types.ts +0 -88
  108. package/src/entities/Server/index.ts +0 -2
  109. package/src/entities/SocketClient/SocketClient.test.ts +0 -392
  110. package/src/entities/SocketClient/SocketClient.ts +0 -401
  111. package/src/entities/SocketClient/SocketClient.types.ts +0 -62
  112. package/src/entities/SocketClient/index.ts +0 -2
  113. package/src/entities/SocketClient/parseMessage/index.ts +0 -1
  114. package/src/entities/SocketClient/parseMessage/parseMessage.test.ts +0 -20
  115. package/src/entities/SocketClient/parseMessage/parseMessage.ts +0 -26
  116. package/src/entities/Storage/Storage.test.ts +0 -58
  117. package/src/entities/Storage/Storage.ts +0 -219
  118. package/src/entities/Storage/Storage.types.ts +0 -57
  119. package/src/entities/Storage/index.ts +0 -2
  120. package/src/entities/ValidationError/ValidationError.ts +0 -34
  121. package/src/entities/ValidationError/index.ts +0 -1
  122. package/src/entities/WebError/WebError.test.ts +0 -18
  123. package/src/entities/WebError/WebError.ts +0 -23
  124. package/src/entities/WebError/WebError.types.ts +0 -9
  125. package/src/entities/WebError/index.ts +0 -2
  126. package/src/entities/index.ts +0 -16
  127. package/src/index.ts +0 -6
  128. package/src/metrics/debug.ts +0 -10
  129. package/src/metrics/index.ts +0 -2
  130. package/src/metrics/request.ts +0 -17
  131. package/src/middleware/authHmac/authHmac.test.ts +0 -86
  132. package/src/middleware/authHmac/authHmac.ts +0 -56
  133. package/src/middleware/authHmac/authHmac.types.ts +0 -7
  134. package/src/middleware/authHmac/index.ts +0 -2
  135. package/src/middleware/authJwt/authJwt.test.ts +0 -54
  136. package/src/middleware/authJwt/authJwt.ts +0 -55
  137. package/src/middleware/authJwt/authJwt.types.ts +0 -14
  138. package/src/middleware/authJwt/index.ts +0 -2
  139. package/src/middleware/authStatic/authStatic.test.ts +0 -36
  140. package/src/middleware/authStatic/authStatic.ts +0 -45
  141. package/src/middleware/authStatic/index.ts +0 -1
  142. package/src/middleware/authTls/authTls.test.ts +0 -138
  143. package/src/middleware/authTls/authTls.ts +0 -119
  144. package/src/middleware/authTls/authTls.types.ts +0 -13
  145. package/src/middleware/authTls/index.ts +0 -2
  146. package/src/middleware/checkPermission/checkPermission.ts +0 -33
  147. package/src/middleware/checkPermission/index.ts +0 -1
  148. package/src/middleware/error/error.test.ts +0 -60
  149. package/src/middleware/error/error.ts +0 -25
  150. package/src/middleware/error/index.ts +0 -1
  151. package/src/middleware/fileUploader/fileUploader.ts +0 -154
  152. package/src/middleware/fileUploader/fileUploader.types.ts +0 -35
  153. package/src/middleware/fileUploader/index.ts +0 -2
  154. package/src/middleware/fileUploader/isMultiPart/index.ts +0 -1
  155. package/src/middleware/fileUploader/isMultiPart/isMultipart.ts +0 -9
  156. package/src/middleware/fileUploader/validate/index.ts +0 -1
  157. package/src/middleware/fileUploader/validate/validate.ts +0 -27
  158. package/src/middleware/fourOhFour/fourOhFour.test.ts +0 -14
  159. package/src/middleware/fourOhFour/fourOhFour.ts +0 -13
  160. package/src/middleware/fourOhFour/index.ts +0 -1
  161. package/src/middleware/geminiFileUploader/geminiFileUploader.ts +0 -68
  162. package/src/middleware/geminiFileUploader/index.ts +0 -1
  163. package/src/middleware/healthCheck/healthCheck.test.ts +0 -12
  164. package/src/middleware/healthCheck/healthCheck.ts +0 -14
  165. package/src/middleware/healthCheck/index.ts +0 -1
  166. package/src/middleware/index.ts +0 -17
  167. package/src/middleware/metrics/index.ts +0 -1
  168. package/src/middleware/metrics/metrics.test.ts +0 -46
  169. package/src/middleware/metrics/metrics.ts +0 -24
  170. package/src/middleware/multiPartFileUploader/index.ts +0 -2
  171. package/src/middleware/multiPartFileUploader/multiPartFileUploader.ts +0 -249
  172. package/src/middleware/multiPartFileUploader/multiPartFileUploader.types.ts +0 -23
  173. package/src/middleware/multiPartFileUploader/validate/index.ts +0 -1
  174. package/src/middleware/multiPartFileUploader/validate/validate.ts +0 -27
  175. package/src/middleware/requestMetrics/index.ts +0 -1
  176. package/src/middleware/requestMetrics/requestMetrics.test.ts +0 -77
  177. package/src/middleware/requestMetrics/requestMetrics.ts +0 -20
  178. package/src/middleware/swaggerDocs/index.ts +0 -2
  179. package/src/middleware/swaggerDocs/swaggerDocs.ts +0 -114
  180. package/src/middleware/swaggerDocs/swaggerDocs.types.ts +0 -41
  181. package/src/middleware/userResolver/index.ts +0 -1
  182. package/src/middleware/userResolver/userResolver.ts +0 -53
  183. package/src/middleware/validate/index.ts +0 -1
  184. package/src/middleware/validate/validate.test.ts +0 -43
  185. package/src/middleware/validate/validate.ts +0 -25
  186. package/src/middleware/version/index.ts +0 -1
  187. package/src/middleware/version/version.test.ts +0 -23
  188. package/src/middleware/version/version.ts +0 -12
  189. package/src/utils/checkEnvironment/index.ts +0 -49
  190. package/src/utils/createHttpServer/createHttpServer.test.ts +0 -24
  191. package/src/utils/createHttpServer/createHttpServer.ts +0 -34
  192. package/src/utils/createHttpServer/createHttpServer.validate.ts +0 -17
  193. package/src/utils/createHttpServer/index.ts +0 -1
  194. package/src/utils/createSortedObject/createSortedObject.ts +0 -20
  195. package/src/utils/createSortedObject/createSortedObjet.test.ts +0 -47
  196. package/src/utils/createSortedObject/index.ts +0 -1
  197. package/src/utils/dbMigration/dbMigration.test.ts +0 -209
  198. package/src/utils/dbMigration/dbMigration.ts +0 -199
  199. package/src/utils/dbMigration/dbMigration.types.ts +0 -11
  200. package/src/utils/dbMigration/index.ts +0 -2
  201. package/src/utils/dbMigration/migrateMetadataTable/index.ts +0 -1
  202. package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.test.ts +0 -59
  203. package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.ts +0 -102
  204. package/src/utils/envAssert/envAssert.ts +0 -31
  205. package/src/utils/envAssert/index.ts +0 -1
  206. package/src/utils/envAssert/validators/hostList.ts +0 -17
  207. package/src/utils/envAssert/validators/index.ts +0 -5
  208. package/src/utils/envAssert/validators/ipList.ts +0 -13
  209. package/src/utils/envAssert/validators/path.ts +0 -13
  210. package/src/utils/envAssert/validators/string.ts +0 -9
  211. package/src/utils/envAssert/validators/stringList.ts +0 -13
  212. package/src/utils/filter/filter.ts +0 -17
  213. package/src/utils/filter/index.ts +0 -1
  214. package/src/utils/geminiFileUpload/geminiFileUpload.ts +0 -93
  215. package/src/utils/geminiFileUpload/index.ts +0 -1
  216. package/src/utils/hmac/checkEnv/checkEnv.test.ts +0 -18
  217. package/src/utils/hmac/checkEnv/checkEnv.ts +0 -9
  218. package/src/utils/hmac/checkEnv/index.ts +0 -1
  219. package/src/utils/hmac/createHmac/createHmac.ts +0 -33
  220. package/src/utils/hmac/createHmac/index.ts +0 -1
  221. package/src/utils/hmac/index.ts +0 -4
  222. package/src/utils/hmac/index.types.ts +0 -13
  223. package/src/utils/hmac/signPayload/index.ts +0 -1
  224. package/src/utils/hmac/signPayload/signPayload.ts +0 -16
  225. package/src/utils/hmac/verifySignature/index.ts +0 -1
  226. package/src/utils/hmac/verifySignature/verifySignature.ts +0 -24
  227. package/src/utils/index.ts +0 -29
  228. package/src/utils/jwt/index.ts +0 -2
  229. package/src/utils/jwt/jwt.test.ts +0 -28
  230. package/src/utils/jwt/jwt.ts +0 -182
  231. package/src/utils/jwt/jwt.types.ts +0 -21
  232. package/src/utils/report/index.ts +0 -3
  233. package/src/utils/report/output.ts +0 -45
  234. package/src/utils/report/output.types.ts +0 -70
  235. package/src/utils/report/report.test.ts +0 -133
  236. package/src/utils/report/report.ts +0 -133
  237. package/src/utils/report/report.types.ts +0 -13
  238. package/src/utils/request/index.ts +0 -1
  239. package/src/utils/request/request.test.ts +0 -26
  240. package/src/utils/request/request.ts +0 -48
  241. package/src/utils/secretManager/index.ts +0 -2
  242. package/src/utils/secretManager/secretLoader.ts +0 -62
  243. package/src/utils/secretManager/secretResolver.ts +0 -35
  244. package/src/utils/semverCompare/index.ts +0 -1
  245. package/src/utils/semverCompare/semverCompare.test.ts +0 -49
  246. package/src/utils/semverCompare/semverCompare.ts +0 -60
  247. package/src/utils/sendEmail/index.ts +0 -2
  248. package/src/utils/sendEmail/sendEmail.ts +0 -61
  249. package/src/utils/sendEmail/sendEmail.types.ts +0 -61
  250. package/src/utils/sendPush/index.ts +0 -2
  251. package/src/utils/sendPush/sendPush.ts +0 -20
  252. package/src/utils/sendPush/sendPush.types.ts +0 -25
  253. package/src/utils/tlsConfig/index.ts +0 -2
  254. package/src/utils/tlsConfig/tlsConfig.test.ts +0 -32
  255. package/src/utils/tlsConfig/tlsConfig.ts +0 -47
  256. package/src/utils/tlsConfig/tlsConfig.types.ts +0 -11
  257. package/src/utils/tlsConfig/tlsConfig.validate.ts +0 -25
  258. package/src/utils/tlsRequest/index.ts +0 -1
  259. package/src/utils/tlsRequest/tlsRequest.test.ts +0 -63
  260. package/src/utils/tlsRequest/tlsRequest.ts +0 -12
  261. package/src/utils/trimPathSlash/index.ts +0 -1
  262. package/src/utils/trimPathSlash/trimPathSlash.test.ts +0 -26
  263. package/src/utils/trimPathSlash/trimPathSlash.ts +0 -8
  264. package/test/env.ts +0 -53
  265. package/test/factory/index.ts +0 -8
  266. package/test/factory/sequelizeMeta.ts +0 -12
  267. package/test/hooks.ts +0 -35
  268. package/test/index.ts +0 -3
  269. package/test/stub/index.ts +0 -3
  270. package/test/stub/stubLocales.ts +0 -68
  271. package/test/stub/stubPubSub.ts +0 -7
  272. package/test/stub/stubStorage.ts +0 -77
  273. package/test/stub/stubStorage.types.ts +0 -11
  274. package/test/utils/app.ts +0 -31
  275. package/test/utils/index.ts +0 -1
  276. package/tsconfig.build.json +0 -5
  277. package/tsconfig.json +0 -32
@@ -72,31 +72,43 @@ function reportError(error, request) {
72
72
  }
73
73
  let NAMESPACE_SELECTORS = exports.NAMESPACE_SELECTORS = void 0;
74
74
 
75
- /** Generate the namespace selectors based on the debug variable */
75
+ /**
76
+ * Generate the namespace selectors based on the DEBUG environment variable
77
+ */
76
78
  function initNamespaceSelector() {
77
- if (process.env.DEBUG) exports.NAMESPACE_SELECTORS = NAMESPACE_SELECTORS = process.env.DEBUG.split(',').map(namespace => new RegExp('^' + namespace.replace(/\*/g, '.*?') + '$'));
79
+ if (process.env.DEBUG) {
80
+ exports.NAMESPACE_SELECTORS = NAMESPACE_SELECTORS = process.env.DEBUG.split(',').map(namespace => new RegExp(`^${namespace.replace(/\*/g, '.*?')}$`));
81
+ }
78
82
  }
79
83
 
80
- /** Reset the namespace selectors */
84
+ /**
85
+ * Reset the namespace selectors
86
+ */
81
87
  function resetNamespaceSelector() {
82
88
  exports.NAMESPACE_SELECTORS = NAMESPACE_SELECTORS = undefined;
83
89
  }
84
90
  let debugNamespace;
85
91
 
86
- /** Log a message for debugging purpose, based on a namespace specified in an environment variable */
92
+ /**
93
+ * Log a message for debugging purposes, based on a namespace specified in an environment variable
94
+ * @param data - Debug log entry data
95
+ * @returns The full log entry if namespace matches, undefined otherwise
96
+ */
87
97
  function reportDebug(data) {
88
- if (!NAMESPACE_SELECTORS) initNamespaceSelector();
98
+ if (!NAMESPACE_SELECTORS) {
99
+ initNamespaceSelector();
100
+ }
89
101
  let {
90
102
  namespace
91
103
  } = data;
92
- const isEngineReport = namespace ? namespace.startsWith('engine') : false;
93
- if (debugNamespace && !isEngineReport) {
94
- namespace = debugNamespace + ':' + namespace;
104
+ const isEngineReport = namespace?.startsWith('engine') ?? false;
105
+ if (debugNamespace && !isEngineReport && namespace) {
106
+ namespace = `${debugNamespace}:${namespace}`;
95
107
  }
96
108
  const match = namespace && NAMESPACE_SELECTORS && NAMESPACE_SELECTORS.some(selector => selector.test(namespace));
97
- if (!match) return;
109
+ if (!match) return undefined;
98
110
 
99
- // Generate a prefix with the right most part of the namespace
111
+ // Generate a prefix with the rightmost part of the namespace
100
112
  const spaces = namespace.split(':');
101
113
  const prefix = spaces[spaces.length - 1];
102
114
  return (0, _output.output)({
@@ -106,12 +118,17 @@ function reportDebug(data) {
106
118
  });
107
119
  }
108
120
 
109
- /** Specify a global debugging namespace */
121
+ /**
122
+ * Specify a global debugging namespace
123
+ * @param globalNamespace - The namespace to set globally
124
+ */
110
125
  reportDebug.setNameSpace = function (globalNamespace) {
111
126
  debugNamespace = globalNamespace;
112
127
  };
113
128
 
114
- /** Remove any defined global namespace */
129
+ /**
130
+ * Remove any defined global namespace
131
+ */
115
132
  reportDebug.clearNamespace = function () {
116
133
  debugNamespace = undefined;
117
134
  };
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","names":["_output","require","_const","_EngineError","_WebError","reportInfo","data","output","severity","LogSeverity","INFO","message","reportError","error","request","logEntry","Error","stack_trace","stack","ERROR","CRITICAL","EngineError","errorType","constructor","name","WebError","statusCode","undefined","errorCode","context","user","id","hosts","join","httpRequest","url","originalUrl","method","referrer","header","userAgent","remoteIp","ip","responseStatusCode","NAMESPACE_SELECTORS","exports","initNamespaceSelector","process","env","DEBUG","split","map","namespace","RegExp","replace","resetNamespaceSelector","debugNamespace","reportDebug","isEngineReport","startsWith","match","some","selector","test","spaces","prefix","length","setNameSpace","globalNamespace","clearNamespace"],"sources":["../../../src/utils/report/report.ts"],"sourcesContent":["import { Request } from 'express';\nimport { output } from './output';\nimport { LogEntry, FullLogEntry } from './output.types';\nimport { DebugLogEntry, InfoLogEntry } from './report.types';\nimport { LogSeverity } from 'const';\nimport { EngineError } from 'entities/EngineError';\nimport { WebError } from 'entities/WebError';\nimport {} from 'middleware/authHmac/authHmac.types';\nimport {} from 'middleware/authJwt/authJwt.types';\nimport {} from 'middleware/authTls/authTls.types';\n\n/** Default generic logger */\nexport function reportInfo(data: InfoLogEntry | string): FullLogEntry {\n return output({\n severity: LogSeverity.INFO,\n ...(typeof data === 'string' ? { message: data } : data)\n });\n}\n\n/** Error specific logger */\nexport function reportError(\n error: unknown | Error | EngineError | WebError,\n request?: Request\n): FullLogEntry {\n let logEntry: LogEntry =\n error instanceof Error\n ? {\n message: error.message,\n stack_trace: error.stack,\n severity: LogSeverity.ERROR\n }\n : {\n message: 'An unknown error occurred',\n data: error,\n severity: LogSeverity.CRITICAL\n };\n\n if (error instanceof EngineError) {\n logEntry = {\n ...logEntry,\n severity: error.severity,\n errorType: error.constructor.name,\n data: error.data,\n '@type':\n !(error instanceof WebError) || error.statusCode >= 500\n ? 'type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent'\n : undefined\n };\n }\n\n if (error instanceof WebError) {\n logEntry = {\n ...logEntry,\n errorCode: error.errorCode,\n statusCode: error.statusCode\n };\n }\n\n if (request) {\n logEntry = {\n ...logEntry,\n context: {\n user:\n request.user?.id ?? request.hosts?.join(','),\n httpRequest: {\n url: request.originalUrl,\n method: request.method,\n referrer: request.header('Referer'),\n userAgent: request.header('User-Agent'),\n remoteIp: request.ip,\n responseStatusCode:\n error instanceof WebError ? error.statusCode : undefined\n }\n }\n };\n }\n\n return output(logEntry);\n}\n\nexport let NAMESPACE_SELECTORS: undefined | Array<RegExp>;\n\n/** Generate the namespace selectors based on the debug variable */\nfunction initNamespaceSelector(): void {\n if (process.env.DEBUG)\n NAMESPACE_SELECTORS = process.env.DEBUG.split(',').map(\n (namespace) => new RegExp('^' + namespace.replace(/\\*/g, '.*?') + '$')\n );\n}\n\n/** Reset the namespace selectors */\nexport function resetNamespaceSelector(): void {\n NAMESPACE_SELECTORS = undefined;\n}\n\nlet debugNamespace: string | undefined;\n\n/** Log a message for debugging purpose, based on a namespace specified in an environment variable */\nexport function reportDebug(data: DebugLogEntry): FullLogEntry | undefined {\n if (!NAMESPACE_SELECTORS) initNamespaceSelector();\n let { namespace } = data;\n const isEngineReport = namespace ? namespace.startsWith('engine') : false;\n\n if (debugNamespace && !isEngineReport) {\n namespace = debugNamespace + ':' + namespace;\n }\n\n const match =\n namespace &&\n NAMESPACE_SELECTORS &&\n NAMESPACE_SELECTORS.some((selector) => selector.test(namespace));\n if (!match) return;\n\n // Generate a prefix with the right most part of the namespace\n const spaces = namespace.split(':');\n const prefix = spaces[spaces.length - 1];\n\n return output({\n severity: LogSeverity.DEBUG,\n ...data,\n message: `[${prefix}] ${data.message}`\n });\n}\n\n/** Specify a global debugging namespace */\nreportDebug.setNameSpace = function (globalNamespace: string): void {\n debugNamespace = globalNamespace;\n};\n\n/** Remove any defined global namespace */\nreportDebug.clearNamespace = function (): void {\n debugNamespace = undefined;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"report.js","names":["_output","require","_const","_EngineError","_WebError","reportInfo","data","output","severity","LogSeverity","INFO","message","reportError","error","request","logEntry","Error","stack_trace","stack","ERROR","CRITICAL","EngineError","errorType","constructor","name","WebError","statusCode","undefined","errorCode","context","user","id","hosts","join","httpRequest","url","originalUrl","method","referrer","header","userAgent","remoteIp","ip","responseStatusCode","NAMESPACE_SELECTORS","exports","initNamespaceSelector","process","env","DEBUG","split","map","namespace","RegExp","replace","resetNamespaceSelector","debugNamespace","reportDebug","isEngineReport","startsWith","match","some","selector","test","spaces","prefix","length","setNameSpace","globalNamespace","clearNamespace"],"sources":["../../../src/utils/report/report.ts"],"sourcesContent":["import { Request } from 'express';\nimport { output } from './output';\nimport { LogEntry, FullLogEntry } from './output.types';\nimport { DebugLogEntry, InfoLogEntry } from './report.types';\nimport { LogSeverity } from 'const';\nimport { EngineError } from 'entities/EngineError';\nimport { WebError } from 'entities/WebError';\nimport {} from 'middleware/authHmac/authHmac.types';\nimport {} from 'middleware/authJwt/authJwt.types';\nimport {} from 'middleware/authTls/authTls.types';\n\n/** Default generic logger */\nexport function reportInfo(data: InfoLogEntry | string): FullLogEntry {\n return output({\n severity: LogSeverity.INFO,\n ...(typeof data === 'string' ? { message: data } : data)\n });\n}\n\n/** Error specific logger */\nexport function reportError(\n error: unknown | Error | EngineError | WebError,\n request?: Request\n): FullLogEntry {\n let logEntry: LogEntry =\n error instanceof Error\n ? {\n message: error.message,\n stack_trace: error.stack,\n severity: LogSeverity.ERROR\n }\n : {\n message: 'An unknown error occurred',\n data: error,\n severity: LogSeverity.CRITICAL\n };\n\n if (error instanceof EngineError) {\n logEntry = {\n ...logEntry,\n severity: error.severity,\n errorType: error.constructor.name,\n data: error.data,\n '@type':\n !(error instanceof WebError) || error.statusCode >= 500\n ? 'type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent'\n : undefined\n };\n }\n\n if (error instanceof WebError) {\n logEntry = {\n ...logEntry,\n errorCode: error.errorCode,\n statusCode: error.statusCode\n };\n }\n\n if (request) {\n logEntry = {\n ...logEntry,\n context: {\n user:\n request.user?.id ?? request.hosts?.join(','),\n httpRequest: {\n url: request.originalUrl,\n method: request.method,\n referrer: request.header('Referer'),\n userAgent: request.header('User-Agent'),\n remoteIp: request.ip,\n responseStatusCode:\n error instanceof WebError ? error.statusCode : undefined\n }\n }\n };\n }\n\n return output(logEntry);\n}\n\nexport let NAMESPACE_SELECTORS: Array<RegExp> | undefined;\n\n/**\n * Generate the namespace selectors based on the DEBUG environment variable\n */\nfunction initNamespaceSelector(): void {\n if (process.env.DEBUG) {\n NAMESPACE_SELECTORS = process.env.DEBUG.split(',').map(\n (namespace) => new RegExp(`^${namespace.replace(/\\*/g, '.*?')}$`)\n );\n }\n}\n\n/**\n * Reset the namespace selectors\n */\nexport function resetNamespaceSelector(): void {\n NAMESPACE_SELECTORS = undefined;\n}\n\nlet debugNamespace: string | undefined;\n\n/**\n * Log a message for debugging purposes, based on a namespace specified in an environment variable\n * @param data - Debug log entry data\n * @returns The full log entry if namespace matches, undefined otherwise\n */\nexport function reportDebug(data: DebugLogEntry): FullLogEntry | undefined {\n if (!NAMESPACE_SELECTORS) {\n initNamespaceSelector();\n }\n \n let { namespace } = data;\n const isEngineReport = namespace?.startsWith('engine') ?? false;\n\n if (debugNamespace && !isEngineReport && namespace) {\n namespace = `${debugNamespace}:${namespace}`;\n }\n\n const match =\n namespace &&\n NAMESPACE_SELECTORS &&\n NAMESPACE_SELECTORS.some((selector) => selector.test(namespace));\n \n if (!match) return undefined;\n\n // Generate a prefix with the rightmost part of the namespace\n const spaces = namespace.split(':');\n const prefix = spaces[spaces.length - 1];\n\n return output({\n severity: LogSeverity.DEBUG,\n ...data,\n message: `[${prefix}] ${data.message}`\n });\n}\n\n/**\n * Specify a global debugging namespace\n * @param globalNamespace - The namespace to set globally\n */\nreportDebug.setNameSpace = function (globalNamespace: string): void {\n debugNamespace = globalNamespace;\n};\n\n/**\n * Remove any defined global namespace\n */\nreportDebug.clearNamespace = function (): void {\n debugNamespace = undefined;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.secretCache = exports.initializeSecrets = void 0;
7
7
  var _secretManager = require("@google-cloud/secret-manager");
8
8
  var _EngineError = require("../../entities/EngineError");
9
+ var _report = require("../report");
9
10
  // Cache to store preloaded secrets
10
11
  const secretCache = exports.secretCache = {};
11
12
  let secretClient;
@@ -16,7 +17,10 @@ let secretClient;
16
17
  */
17
18
  const initializeSecrets = async secretEnvVars => {
18
19
  if (process.env.NODE_ENV !== 'production') {
19
- console.log('Development mode → using local files for secrets');
20
+ (0, _report.reportDebug)({
21
+ namespace: 'engine:secretManager',
22
+ message: 'Development mode → using local files for secrets'
23
+ });
20
24
  return; // No need to preload anything
21
25
  }
22
26
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"secretLoader.js","names":["_secretManager","require","_EngineError","secretCache","exports","secretClient","initializeSecrets","secretEnvVars","process","env","NODE_ENV","console","log","SecretManagerServiceClient","secretNames","filter","name","length","EngineError","message","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';\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 console.log('Development mode → using local files for secrets');\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;AAEA;AACO,MAAME,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;IACzCC,OAAO,CAACC,GAAG,CAAC,kDAAkD,CAAC;IAC/D,OAAO,CAAC;EACV;EAEA,IAAI;IACF;IACAP,YAAY,GAAG,IAAIQ,yCAA0B,CAAC,CAAC;IAE/C,MAAMC,WAAW,GAAGP,aAAa,CAACQ,MAAM,CAAEC,IAAI,IAAKR,OAAO,CAACC,GAAG,CAACO,IAAI,CAAC,CAAC;IACrE,IAAIF,WAAW,CAACG,MAAM,KAAK,CAAC,EAAE;MAC5B,MAAM,IAAIC,wBAAW,CAAC;QACpBC,OAAO,EAAE;MACX,CAAC,CAAC;IACJ;;IAEA;IACA,KAAK,MAAMH,IAAI,IAAIF,WAAW,EAAE;MAC9B,MAAMM,UAAU,GAAGZ,OAAO,CAACC,GAAG,CAACO,IAAI,CAAC;MACpC,IAAI,CAACI,UAAU,EAAE;QACf,MAAM,IAAIF,wBAAW,CAAC;UACpBC,OAAO,EAAE,mBAAmBH,IAAI;QAClC,CAAC,CAAC;MACJ;MAEA,IAAI;QACF,MAAM,CAACK,OAAO,CAAC,GAAG,MAAMhB,YAAY,CAACiB,mBAAmB,CAAC;UACvDN,IAAI,EAAEI;QACR,CAAC,CAAC;QACF,MAAMG,OAAO,GAAGF,OAAO,CAACE,OAAO,EAAEC,IAAI,EAAEC,QAAQ,CAAC,OAAO,CAAC;QACxD,IAAI,CAACF,OAAO,EAAE;UACZ,MAAM,IAAIL,wBAAW,CAAC;YACpBC,OAAO,EAAE,UAAUH,IAAI;UACzB,CAAC,CAAC;QACJ;QACAb,WAAW,CAACa,IAAI,CAAC,GAAGO,OAAO;MAC7B,CAAC,CAAC,OAAOG,GAAG,EAAE;QACZ,MAAM,IAAIR,wBAAW,CAAC;UACpBC,OAAO,EAAE,0BAA0BH,IAAI,KAAMU,GAAG,CAAWP,OAAO;QACpE,CAAC,CAAC;MACJ;IACF;EACF,CAAC,CAAC,OAAOO,GAAG,EAAE;IACZ,MAAM,IAAIR,wBAAW,CAAC;MACpBC,OAAO,EAAE,iCAAkCO,GAAG,CAAWP,OAAO;IAClE,CAAC,CAAC;EACJ;AACF,CAAC;AAACf,OAAA,CAAAE,iBAAA,GAAAA,iBAAA","ignoreList":[]}
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,7 +1,7 @@
1
1
  /**
2
- * Comparison function for our SemVer strings, includes support ofr pre-releases
3
- * @param {string} v1
4
- * @param {string} v2
5
- * @return {number} - -1 if v1 < v2, 0 if v1 = v2, +1 if v1 > v2
2
+ * Comparison function for our SemVer strings, includes support for pre-releases
3
+ * @param v1 - First version string to compare
4
+ * @param v2 - Second version string to compare
5
+ * @returns -1 if v1 < v2, 0 if v1 = v2, +1 if v1 > v2
6
6
  */
7
7
  export declare function semverCompare(v1: string, v2: string): 1 | -1 | 0;
@@ -11,27 +11,25 @@ var _EngineError = require("../../entities/EngineError");
11
11
  const SEMVER_REGEX = /^v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-(?:(alpha|beta|rc)(?:\.(0|[1-9]\d*))))?$/;
12
12
 
13
13
  /**
14
- * Comparison function for our SemVer strings, includes support ofr pre-releases
15
- * @param {string} v1
16
- * @param {string} v2
17
- * @return {number} - -1 if v1 < v2, 0 if v1 = v2, +1 if v1 > v2
14
+ * Comparison function for our SemVer strings, includes support for pre-releases
15
+ * @param v1 - First version string to compare
16
+ * @param v2 - Second version string to compare
17
+ * @returns -1 if v1 < v2, 0 if v1 = v2, +1 if v1 > v2
18
18
  */
19
19
  function semverCompare(v1, v2) {
20
20
  const [match1, match2] = [v1, v2].map(v => v.match(SEMVER_REGEX));
21
- if (!match1 || !match2) throw new _EngineError.EngineError({
22
- message: 'Provided invalid SemVer string, can not compare',
23
- data: {
24
- v1,
25
- v2
26
- }
27
- });
28
- const [
29
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
30
- [_1, major1, minor1, patch1, preType1, preVersion1],
31
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
32
- [_2, major2, minor2, patch2, preType2, preVersion2]] = [match1, match2].map(group =>
33
- // We parse to int the parts that can be
34
- group.map(item => item && _validator.default.isInt(item) ? parseInt(item) : item));
21
+ if (!match1 || !match2) {
22
+ throw new _EngineError.EngineError({
23
+ message: 'Provided invalid SemVer string, cannot compare',
24
+ data: {
25
+ v1,
26
+ v2
27
+ }
28
+ });
29
+ }
30
+ const [[, major1, minor1, patch1, preType1, preVersion1], [, major2, minor2, patch2, preType2, preVersion2]] = [match1, match2].map(group =>
31
+ // Parse numeric values
32
+ group.map(item => item && _validator.default.isInt(item) ? parseInt(item, 10) : item));
35
33
 
36
34
  // Compare majors first
37
35
  if (major1 < major2) return -1;
@@ -1 +1 @@
1
- {"version":3,"file":"semverCompare.js","names":["_validator","_interopRequireDefault","require","_EngineError","SEMVER_REGEX","semverCompare","v1","v2","match1","match2","map","v","match","EngineError","message","data","_1","major1","minor1","patch1","preType1","preVersion1","_2","major2","minor2","patch2","preType2","preVersion2","group","item","validator","isInt","parseInt"],"sources":["../../../src/utils/semverCompare/semverCompare.ts"],"sourcesContent":["import validator from 'validator';\nimport { EngineError } from 'entities/EngineError';\n\n// Regex to validate our SemVer style and capture the different parts\nconst SEMVER_REGEX =\n /^v?(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-(?:(alpha|beta|rc)(?:\\.(0|[1-9]\\d*))))?$/;\n\n/**\n * Comparison function for our SemVer strings, includes support ofr pre-releases\n * @param {string} v1\n * @param {string} v2\n * @return {number} - -1 if v1 < v2, 0 if v1 = v2, +1 if v1 > v2\n */\nexport function semverCompare(v1: string, v2: string): 1 | -1 | 0 {\n const [match1, match2] = [v1, v2].map((v) => v.match(SEMVER_REGEX));\n if (!match1 || !match2)\n throw new EngineError({\n message: 'Provided invalid SemVer string, can not compare',\n data: { v1, v2 }\n });\n const [\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n [_1, major1, minor1, patch1, preType1, preVersion1],\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n [_2, major2, minor2, patch2, preType2, preVersion2]\n ] = [match1, match2].map((group) =>\n // We parse to int the parts that can be\n group.map((item) => (item && validator.isInt(item) ? parseInt(item) : item))\n );\n\n // Compare majors first\n if (major1 < major2) return -1;\n if (major1 > major2) return 1;\n\n // Compare minors second\n if (minor1 < minor2) return -1;\n if (minor1 > minor2) return 1;\n\n // Compare patch third\n if (patch1 < patch2) return -1;\n if (patch1 > patch2) return 1;\n\n // Compare pre-release type\n // Release > pre-release\n if (!preType1 && !preType2) return 0;\n if (preType1 && !preType2) return -1;\n if (!preType1 && preType2) return 1;\n\n // RC > Beta > Alpha\n if (preType1 !== 'rc' && preType2 === 'rc') return -1;\n if (preType1 === 'rc' && preType2 !== 'rc') return 1;\n if (preType1 !== 'beta' && preType2 === 'beta') return -1;\n if (preType1 === 'beta' && preType2 !== 'beta') return 1;\n\n // Finally compare the pre-release versions\n if (preVersion1 < preVersion2) return -1;\n if (preVersion1 > preVersion2) return 1;\n\n return 0;\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA;AACA,MAAME,YAAY,GAChB,yFAAyF;;AAE3F;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,aAAaA,CAACC,EAAU,EAAEC,EAAU,EAAc;EAChE,MAAM,CAACC,MAAM,EAAEC,MAAM,CAAC,GAAG,CAACH,EAAE,EAAEC,EAAE,CAAC,CAACG,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACR,YAAY,CAAC,CAAC;EACnE,IAAI,CAACI,MAAM,IAAI,CAACC,MAAM,EACpB,MAAM,IAAII,wBAAW,CAAC;IACpBC,OAAO,EAAE,iDAAiD;IAC1DC,IAAI,EAAE;MAAET,EAAE;MAAEC;IAAG;EACjB,CAAC,CAAC;EACJ,MAAM;EACJ;EACA,CAACS,EAAE,EAAEC,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,WAAW,CAAC;EACnD;EACA,CAACC,EAAE,EAAEC,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,WAAW,CAAC,CACpD,GAAG,CAACnB,MAAM,EAAEC,MAAM,CAAC,CAACC,GAAG,CAAEkB,KAAK;EAC7B;EACAA,KAAK,CAAClB,GAAG,CAAEmB,IAAI,IAAMA,IAAI,IAAIC,kBAAS,CAACC,KAAK,CAACF,IAAI,CAAC,GAAGG,QAAQ,CAACH,IAAI,CAAC,GAAGA,IAAK,CAC7E,CAAC;;EAED;EACA,IAAIZ,MAAM,GAAGM,MAAM,EAAE,OAAO,CAAC,CAAC;EAC9B,IAAIN,MAAM,GAAGM,MAAM,EAAE,OAAO,CAAC;;EAE7B;EACA,IAAIL,MAAM,GAAGM,MAAM,EAAE,OAAO,CAAC,CAAC;EAC9B,IAAIN,MAAM,GAAGM,MAAM,EAAE,OAAO,CAAC;;EAE7B;EACA,IAAIL,MAAM,GAAGM,MAAM,EAAE,OAAO,CAAC,CAAC;EAC9B,IAAIN,MAAM,GAAGM,MAAM,EAAE,OAAO,CAAC;;EAE7B;EACA;EACA,IAAI,CAACL,QAAQ,IAAI,CAACM,QAAQ,EAAE,OAAO,CAAC;EACpC,IAAIN,QAAQ,IAAI,CAACM,QAAQ,EAAE,OAAO,CAAC,CAAC;EACpC,IAAI,CAACN,QAAQ,IAAIM,QAAQ,EAAE,OAAO,CAAC;;EAEnC;EACA,IAAIN,QAAQ,KAAK,IAAI,IAAIM,QAAQ,KAAK,IAAI,EAAE,OAAO,CAAC,CAAC;EACrD,IAAIN,QAAQ,KAAK,IAAI,IAAIM,QAAQ,KAAK,IAAI,EAAE,OAAO,CAAC;EACpD,IAAIN,QAAQ,KAAK,MAAM,IAAIM,QAAQ,KAAK,MAAM,EAAE,OAAO,CAAC,CAAC;EACzD,IAAIN,QAAQ,KAAK,MAAM,IAAIM,QAAQ,KAAK,MAAM,EAAE,OAAO,CAAC;;EAExD;EACA,IAAIL,WAAW,GAAGM,WAAW,EAAE,OAAO,CAAC,CAAC;EACxC,IAAIN,WAAW,GAAGM,WAAW,EAAE,OAAO,CAAC;EAEvC,OAAO,CAAC;AACV","ignoreList":[]}
1
+ {"version":3,"file":"semverCompare.js","names":["_validator","_interopRequireDefault","require","_EngineError","SEMVER_REGEX","semverCompare","v1","v2","match1","match2","map","v","match","EngineError","message","data","major1","minor1","patch1","preType1","preVersion1","major2","minor2","patch2","preType2","preVersion2","group","item","validator","isInt","parseInt"],"sources":["../../../src/utils/semverCompare/semverCompare.ts"],"sourcesContent":["import validator from 'validator';\nimport { EngineError } from 'entities/EngineError';\n\n// Regex to validate our SemVer style and capture the different parts\nconst SEMVER_REGEX =\n /^v?(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-(?:(alpha|beta|rc)(?:\\.(0|[1-9]\\d*))))?$/;\n\n/**\n * Comparison function for our SemVer strings, includes support for pre-releases\n * @param v1 - First version string to compare\n * @param v2 - Second version string to compare\n * @returns -1 if v1 < v2, 0 if v1 = v2, +1 if v1 > v2\n */\nexport function semverCompare(v1: string, v2: string): 1 | -1 | 0 {\n const [match1, match2] = [v1, v2].map((v) => v.match(SEMVER_REGEX));\n \n if (!match1 || !match2) {\n throw new EngineError({\n message: 'Provided invalid SemVer string, cannot compare',\n data: { v1, v2 }\n });\n }\n\n const [\n [, major1, minor1, patch1, preType1, preVersion1],\n [, major2, minor2, patch2, preType2, preVersion2]\n ] = [match1, match2].map((group) =>\n // Parse numeric values\n group.map((item) => (item && validator.isInt(item) ? parseInt(item, 10) : item))\n );\n\n // Compare majors first\n if (major1 < major2) return -1;\n if (major1 > major2) return 1;\n\n // Compare minors second\n if (minor1 < minor2) return -1;\n if (minor1 > minor2) return 1;\n\n // Compare patch third\n if (patch1 < patch2) return -1;\n if (patch1 > patch2) return 1;\n\n // Compare pre-release type\n // Release > pre-release\n if (!preType1 && !preType2) return 0;\n if (preType1 && !preType2) return -1;\n if (!preType1 && preType2) return 1;\n\n // RC > Beta > Alpha\n if (preType1 !== 'rc' && preType2 === 'rc') return -1;\n if (preType1 === 'rc' && preType2 !== 'rc') return 1;\n if (preType1 !== 'beta' && preType2 === 'beta') return -1;\n if (preType1 === 'beta' && preType2 !== 'beta') return 1;\n\n // Finally compare the pre-release versions\n if (preVersion1 < preVersion2) return -1;\n if (preVersion1 > preVersion2) return 1;\n\n return 0;\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA;AACA,MAAME,YAAY,GAChB,yFAAyF;;AAE3F;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,aAAaA,CAACC,EAAU,EAAEC,EAAU,EAAc;EAChE,MAAM,CAACC,MAAM,EAAEC,MAAM,CAAC,GAAG,CAACH,EAAE,EAAEC,EAAE,CAAC,CAACG,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACR,YAAY,CAAC,CAAC;EAEnE,IAAI,CAACI,MAAM,IAAI,CAACC,MAAM,EAAE;IACtB,MAAM,IAAII,wBAAW,CAAC;MACpBC,OAAO,EAAE,gDAAgD;MACzDC,IAAI,EAAE;QAAET,EAAE;QAAEC;MAAG;IACjB,CAAC,CAAC;EACJ;EAEA,MAAM,CACJ,GAAGS,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,WAAW,CAAC,EACjD,GAAGC,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,WAAW,CAAC,CAClD,GAAG,CAACjB,MAAM,EAAEC,MAAM,CAAC,CAACC,GAAG,CAAEgB,KAAK;EAC7B;EACAA,KAAK,CAAChB,GAAG,CAAEiB,IAAI,IAAMA,IAAI,IAAIC,kBAAS,CAACC,KAAK,CAACF,IAAI,CAAC,GAAGG,QAAQ,CAACH,IAAI,EAAE,EAAE,CAAC,GAAGA,IAAK,CACjF,CAAC;;EAED;EACA,IAAIX,MAAM,GAAGK,MAAM,EAAE,OAAO,CAAC,CAAC;EAC9B,IAAIL,MAAM,GAAGK,MAAM,EAAE,OAAO,CAAC;;EAE7B;EACA,IAAIJ,MAAM,GAAGK,MAAM,EAAE,OAAO,CAAC,CAAC;EAC9B,IAAIL,MAAM,GAAGK,MAAM,EAAE,OAAO,CAAC;;EAE7B;EACA,IAAIJ,MAAM,GAAGK,MAAM,EAAE,OAAO,CAAC,CAAC;EAC9B,IAAIL,MAAM,GAAGK,MAAM,EAAE,OAAO,CAAC;;EAE7B;EACA;EACA,IAAI,CAACJ,QAAQ,IAAI,CAACK,QAAQ,EAAE,OAAO,CAAC;EACpC,IAAIL,QAAQ,IAAI,CAACK,QAAQ,EAAE,OAAO,CAAC,CAAC;EACpC,IAAI,CAACL,QAAQ,IAAIK,QAAQ,EAAE,OAAO,CAAC;;EAEnC;EACA,IAAIL,QAAQ,KAAK,IAAI,IAAIK,QAAQ,KAAK,IAAI,EAAE,OAAO,CAAC,CAAC;EACrD,IAAIL,QAAQ,KAAK,IAAI,IAAIK,QAAQ,KAAK,IAAI,EAAE,OAAO,CAAC;EACpD,IAAIL,QAAQ,KAAK,MAAM,IAAIK,QAAQ,KAAK,MAAM,EAAE,OAAO,CAAC,CAAC;EACzD,IAAIL,QAAQ,KAAK,MAAM,IAAIK,QAAQ,KAAK,MAAM,EAAE,OAAO,CAAC;;EAExD;EACA,IAAIJ,WAAW,GAAGK,WAAW,EAAE,OAAO,CAAC,CAAC;EACxC,IAAIL,WAAW,GAAGK,WAAW,EAAE,OAAO,CAAC;EAEvC,OAAO,CAAC;AACV","ignoreList":[]}
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "node-server-engine",
3
- "version": "1.4.9",
3
+ "version": "1.5.1",
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": {
7
7
  "build": "rimraf dist && tsc -p tsconfig.build.json && shx mv dist/src/* dist && rimraf dist/src && tsc-alias -p tsconfig.build.json && npx babel src --out-dir dist --source-maps --extensions \".ts\" --ignore \"**/*.test.ts\" --copy-files --no-copy-ignored",
8
8
  "format": "prettier --write .",
9
+ "format:check": "prettier --check .",
9
10
  "lint": "eslint ./src",
10
11
  "lint:fix": "eslint ./src --fix",
11
12
  "prepublish": "npm run build",
@@ -15,18 +16,22 @@
15
16
  "coverage": "nyc report --report-dir=./.test-coverage --reporter=html --reporter=text",
16
17
  "coverage:ci": "nyc report --reporter=text-summary",
17
18
  "test:ci": "npm run test -- --reporter spec",
18
- "test:compose": "docker-compose up --abort-on-container-exit --build"
19
+ "test:compose": "docker-compose up --abort-on-container-exit --build",
20
+ "prepare": "husky"
19
21
  },
20
- "husky": {
21
- "hooks": {
22
- "pre-commit": "lint-staged && npm run test && npm run coverage"
23
- }
24
- },
25
- "lint-staged": {
26
- "*.js": "eslint",
27
- "*.ts": "eslint"
28
- },
29
- "keywords": [],
22
+ "keywords": [
23
+ "node",
24
+ "express",
25
+ "server",
26
+ "backend",
27
+ "framework",
28
+ "rest-api",
29
+ "typescript",
30
+ "microservices",
31
+ "jwt",
32
+ "websocket",
33
+ "sequelize"
34
+ ],
30
35
  "author": "Ram",
31
36
  "license": "ISC",
32
37
  "repository": {
@@ -46,7 +51,7 @@
46
51
  "@google/generative-ai": "^0.21.0",
47
52
  "ajv": "^8.17.1",
48
53
  "axios": "^1.7.9",
49
- "backend-test-tools": "^1.0.7",
54
+ "backend-test-tools": "^1.1.2",
50
55
  "body-parser": "^1.20.3",
51
56
  "busboy": "^1.6.0",
52
57
  "bytes": "^3.1.2",
@@ -71,18 +76,18 @@
71
76
  "mime-types": "^2.1.35",
72
77
  "morgan": "^1.10.0",
73
78
  "ms": "^2.1.3",
74
- "multer": "^1.4.5-lts.1",
79
+ "multer": "^2.0.1",
75
80
  "mysql2": "^3.11.5",
76
81
  "nock": "^13.5.6",
77
- "nodemailer": "^6.10.0",
82
+ "nodemailer": "^7.0.11",
78
83
  "nodemon": "^3.1.9",
79
84
  "pg": "^8.13.1",
80
85
  "prom-client": "^15.1.3",
81
86
  "request-ip": "^3.3.0",
82
87
  "response-time": "^2.3.3",
83
88
  "semver-compare": "^1.0.0",
84
- "sequelize": "^6.37.5",
85
- "sequelize-cli": "^6.6.2",
89
+ "sequelize": "^6.37.7",
90
+ "sequelize-cli": "^6.6.3",
86
91
  "sequelize-typescript": "^2.1.6",
87
92
  "sharp": "^0.33.5",
88
93
  "swagger-ui-express": "^5.0.1",
@@ -103,8 +108,12 @@
103
108
  "@babel/preset-env": "^7.26.0",
104
109
  "@babel/preset-typescript": "^7.26.0",
105
110
  "@babel/register": "^7.25.9",
111
+ "@commitlint/cli": "^19.8.1",
112
+ "@commitlint/config-conventional": "^19.8.1",
106
113
  "@faker-js/faker": "^9.3.0",
107
114
  "@google-cloud/precise-date": "^4.0.0",
115
+ "@semantic-release/changelog": "^6.0.3",
116
+ "@semantic-release/git": "^10.0.1",
108
117
  "@types/busboy": "^1.5.4",
109
118
  "@types/bytes": "^3.1.5",
110
119
  "@types/callsite": "^1.0.34",
@@ -127,7 +136,7 @@
127
136
  "@types/node": "^22.10.2",
128
137
  "@types/nodemailer": "^6.4.17",
129
138
  "@types/response-time": "^2.3.8",
130
- "@types/sequelize": "^4.28.20",
139
+ "@types/sequelize": "^6.12.0",
131
140
  "@types/sinon-chai": "^4.0.0",
132
141
  "@types/supertest": "^6.0.2",
133
142
  "@types/swagger-ui-express": "^4.1.7",
@@ -141,6 +150,7 @@
141
150
  "babel-plugin-module-resolver": "^5.0.2",
142
151
  "chai": "^4.5.0",
143
152
  "chai-as-promised": "^7.1.2",
153
+ "conventional-changelog-conventionalcommits": "^8.0.0",
144
154
  "cross-env": "^7.0.3",
145
155
  "eslint": "^9.17.0",
146
156
  "factory-waifu": "^1.0.1",
@@ -154,11 +164,12 @@
154
164
  "nyc": "^17.1.0",
155
165
  "prettier": "^3.4.2",
156
166
  "rimraf": "^6.0.1",
167
+ "semantic-release": "^25.0.2",
157
168
  "shx": "^0.3.4",
158
169
  "sinon": "^19.0.2",
159
170
  "sinon-chai": "^3.5.0",
160
171
  "supertest": "^7.0.0",
161
- "tmp": "^0.2.3",
172
+ "tmp": "^0.2.4",
162
173
  "ts-node": "^10.9.2",
163
174
  "tsc-alias": "^1.8.10",
164
175
  "tsconfig-paths": "^4.2.0",
package/.env.example DELETED
@@ -1,186 +0,0 @@
1
- ## DEV ENV
2
- NODE_ENV=
3
-
4
- # Port on which the business logic endpoints are served
5
- PORT=
6
-
7
- # Port on which metrics and analytics data is served. It is used to allow different firewall rules for accessing the service
8
- SECONDARY_PORT=
9
-
10
- # Server host name
11
- HOST_NAME=
12
-
13
- # Timeout (in ms) for the websocket connections to close gracefully on server shutdown. After that, the connection is destroyed unilateraly
14
- WEBSOCKET_CLOSE_TIMEOUT=
15
-
16
- # Google Gemini AI key
17
- GOOGLE_AI_KEY=
18
-
19
- #######
20
- # TLS #
21
- #######
22
-
23
- # Private key of the server
24
- TLS_SERVER_KEY=
25
-
26
- # Passphrase to decrypt the private key
27
- TLS_SERVER_KEY_PASSPHRASE=
28
-
29
- # Certificate of the server
30
- TLS_SERVER_CERT=
31
-
32
- # Certificate of the certifying authority
33
- TLS_CA=
34
-
35
- # Private key used to make a TLS request
36
- # Defaults to the server key if not specified
37
- TLS_REQUEST_KEY=
38
-
39
- # Passphrase to decrypt the private key used to make a TLS request
40
- # Defaults to the server passphrase if not specified
41
- TLS_REQUEST_KEY_PASSPHRASE=
42
-
43
- # Certificate used to make a TLS request
44
- # Defaults to the server certificate if not specified
45
- TLS_REQUEST_CERT=
46
-
47
- # Certificate of the certifying authority used to make a TLS request
48
- # Defaults to the server certificate of the certifying authority if not specified
49
- TLS_REQUEST_CA=
50
-
51
- # List of clients hosts allowed to make a request
52
- # Comma separated string
53
- ALLOWED_CLIENT_HOSTS=
54
-
55
- ########################
56
- # Token Authentication #
57
- ########################
58
-
59
- # Audience requirement of the current service
60
- ACCESS_TOKEN_AUDIENCE=
61
-
62
- # URL of the authorization service, serves as an issuer requirement
63
- AUTH_SERVICE_URL=
64
-
65
- PRIVATE_KEY_PATH=
66
-
67
- #########
68
- # Redis #
69
- #########
70
-
71
- # Host for redis
72
- REDIS_HOST=
73
-
74
- # Port for redis connection
75
- REDIS_PORT=
76
-
77
- # Password to connect to redis
78
- REDIS_PASSWORD=
79
-
80
- # Is redis setup as a cluster ('true'/'false')
81
- REDIS_CLUSTER=
82
-
83
- # CORS
84
- CORS_ORIGIN=localhost
85
-
86
- # IP FILTER
87
- VALID_IPS='::ffff:127.0.0.1,127.0.0.1,::1'
88
-
89
- # testing secret
90
- JWT_SECRET='bad example secret'
91
-
92
- # hmac testing secret
93
- PAYLOAD_SIGNATURE_SECRET='bad signature secret'
94
-
95
- ###########
96
- # Pub/Sub #
97
- ###########
98
-
99
- # Google Cloud project
100
- GC_PROJECT=
101
-
102
- # Key file to connecto to Google Cloud
103
- GC_KEYFILE=
104
-
105
- # Default Pub/Sub topic
106
- PUBSUB_EVENT_TOPIC=
107
-
108
- # Pub/Sub topic for analytics
109
- PUBSUB_ANALYTICS_TOPIC=
110
-
111
- # Pub/Sub topic for cache invalidation
112
- PUBSUB_CACHE_TOPIC=
113
-
114
- # Subscriptions for the legacy topic on which model updates are propagated
115
- PUBSUB_UPDATE_SUBSCRIPTION=
116
-
117
- # secret Hash params
118
- HASH_SECRET=
119
- HASH_SALT=
120
-
121
-
122
- ##########
123
- # Elastic Search #
124
- ##########
125
-
126
- # The path link to Elastic Search migration data
127
- ELASTIC_SEARCH_MIGRATION_PATH=
128
-
129
- # The elastic search host url
130
- ELASTIC_SEARCH_HOST=
131
-
132
- # The elastic search user name
133
- ELASTIC_SEARCH_USERNAME=''
134
-
135
- # The elastic search password
136
- ELASTIC_SEARCH_PASSWORD=''
137
-
138
-
139
- ###########
140
- # Database #
141
- ###########
142
-
143
- # Indicates whether trigger the run migrations automatically or not
144
- RUN_MIGRATION=
145
-
146
- # Indicates whether trigger the run un migrations automatically or not
147
- UNDO_MIGRATION=
148
-
149
- # Indicate the path of the directory where the datbase migrations are
150
- DB_MIGRATIONS_DIR=
151
-
152
- # Default message Audience
153
- DEFAULT_MESSAGE_AUDIENCE=
154
-
155
-
156
- ###########
157
- # SMTP Configuration #
158
- ###########
159
-
160
- # The SMTP server host (e.g., smtp.gmail.com, smtp.mailtrap.io)
161
- SMTP_HOST=smtp.example.com
162
-
163
- # The SMTP port (e.g., 587 for TLS, 465 for SSL, 25 for insecure)
164
- SMTP_PORT=587
165
-
166
- # SMTP authentication username (your email address or username)
167
- SMTP_USER=your-email@example.com
168
-
169
- # SMTP authentication password (your email password or app password)
170
- SMTP_PASS=your-email-password
171
-
172
-
173
- FILE_STORAGE_FOLDER=./uploads
174
-
175
-
176
- ################
177
- # User Service #
178
- ################
179
-
180
- # URL where the user service is located
181
- USER_SERVICE_URL=
182
-
183
- # Attributes of the users to fetch
184
- # Comma separated list of attributes to fetch from the user Service
185
- # (ex: name,permissions,..) all -> for retrun everything
186
- USER_FETCHED_ATTRIBUTES=
@@ -1,41 +0,0 @@
1
- name: Publish to npm
2
-
3
- on:
4
- push:
5
- branches:
6
- - main
7
-
8
- jobs:
9
- publish:
10
- runs-on: ubuntu-latest
11
-
12
- permissions:
13
- contents: write
14
- id-token: write
15
-
16
- steps:
17
- - name: Checkout code
18
- uses: actions/checkout@v4
19
-
20
- - name: Setup Node.js
21
- uses: actions/setup-node@v4
22
- with:
23
- node-version: 20
24
- registry-url: 'https://registry.npmjs.org/'
25
-
26
- - name: Install dependencies
27
- run: npm ci
28
-
29
- - name: Lint
30
- run: npm run lint
31
-
32
- # - name: Test
33
- # run: npm run test
34
-
35
- - name: Build package
36
- run: npm run build --if-present
37
-
38
- - name: Publish to npm
39
- run: npm publish
40
- env:
41
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
package/.prettierrc DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "semi": true,
3
- "singleQuote": true,
4
- "tabWidth": 2,
5
- "printWidth": 80,
6
- "trailingComma": "none"
7
- }
package/Dockerfile DELETED
@@ -1,31 +0,0 @@
1
- # Instal package dependencies
2
- FROM node:20 AS dependency
3
-
4
- ARG GITHUB_TOKEN
5
- ENV GITHUB_TOKEN=$GITHUB_TOKEN
6
-
7
- WORKDIR /node
8
-
9
- COPY package*.json ./
10
- COPY .npmrc .
11
- RUN npm ci
12
-
13
- # Build source
14
- FROM dependency AS base
15
- COPY . .
16
-
17
- # Build source
18
- FROM base AS build
19
- RUN npm run build
20
-
21
- # Ship compiled sources
22
- FROM dependency
23
-
24
- ARG BUILD_ID
25
- ENV BUILD_ID=$BUILD_ID
26
-
27
- COPY --from=build /node/dist ./dist
28
-
29
- RUN npm prune --production
30
-
31
- CMD ["node", "--enable-source-maps", "-r" , "./dist/index.js"]