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
package/babel.config.json DELETED
@@ -1,34 +0,0 @@
1
- {
2
- "presets": [
3
- "@babel/preset-typescript",
4
- [
5
- "@babel/preset-env",
6
- {
7
- "targets": { "node": 20 },
8
- "useBuiltIns": "entry",
9
- "corejs": 3
10
- }
11
- ]
12
- ],
13
- "plugins": [
14
- [
15
- "module-resolver",
16
- {
17
- "root": "src",
18
- "alias": {
19
- "test": "test"
20
- },
21
- "extensions": [".js", ".ts"]
22
- }
23
- ],
24
- ["@babel/plugin-proposal-decorators", { "legacy": true }],
25
- "@babel/plugin-transform-class-properties",
26
- "@babel/plugin-transform-classes",
27
- "@babel/plugin-transform-runtime"
28
- ],
29
- "env": {
30
- "test": {
31
- "plugins": ["istanbul"]
32
- }
33
- }
34
- }
package/eslint.config.mjs DELETED
@@ -1,11 +0,0 @@
1
- import globals from 'globals';
2
- import pluginJs from '@eslint/js';
3
- import tseslint from 'typescript-eslint';
4
-
5
- export default [
6
- { files: ['.src/', '**/*.{js,mjs,cjs,ts}'] },
7
- { languageOptions: { globals: { ...globals.browser, ...globals.node } } },
8
- pluginJs.configs.recommended,
9
- { ignores: ['**/*.test.ts', '**/*.d.ts'] },
10
- ...tseslint.configs.recommended
11
- ];
@@ -1,6 +0,0 @@
1
- /** Debezium event types */
2
- export enum DebeziumEvent {
3
- Create = 'c',
4
- Update = 'u',
5
- Delete = 'd'
6
- }
@@ -1,7 +0,0 @@
1
- export enum LogSeverity {
2
- DEBUG = 'DEBUG',
3
- INFO = 'INFO',
4
- WARNING = 'WARNING',
5
- ERROR = 'ERROR',
6
- CRITICAL = 'CRITICAL'
7
- }
@@ -1,5 +0,0 @@
1
- export * from './mime';
2
- export * from './metrics';
3
- export * from './DebeziumEvent';
4
- export * from './LogSeverity';
5
- export * from './tokenIssuer';
@@ -1,6 +0,0 @@
1
- import { Registry } from 'prom-client';
2
-
3
- // Registry for metrics that apply to this specific instance of the service
4
- export const instanceRegistry = new Registry();
5
- // Registry for metrics that apply to the service as a whole
6
- export const serviceRegistry = new Registry();
package/src/const/mime.ts DELETED
@@ -1,37 +0,0 @@
1
- export const IMAGE_BASIC_MIME = ['image/jpeg', 'image/png'];
2
-
3
- export const IMAGE_MIME = [...IMAGE_BASIC_MIME, 'image/gif', 'image/bmp'];
4
-
5
- export const AUDIO_MIME = [
6
- 'audio/aac',
7
- 'audio/mpeg',
8
- 'audio/wave',
9
- 'audio/wav'
10
- ];
11
-
12
- export const VIDEO_MIME = [
13
- 'video/mpeg',
14
- 'video/mp4',
15
- 'video/3gpp',
16
- 'video/3gp2'
17
- ];
18
-
19
- export const PDF_MIME = ['application/pdf'];
20
-
21
- export const WORD_MIME = [
22
- 'application/msword',
23
- 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
24
- ];
25
-
26
- export const EXCEL_MIME = [
27
- 'application/vnd.ms-excel',
28
- 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
29
- ];
30
-
31
- export const POWERPOINT_MIME = [
32
- 'application/vnd.ms-powerpoint',
33
- 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
34
- 'application/vnd.openxmlformats-officedocument.presentationml.slideshow'
35
- ];
36
-
37
- export const OFFICE_MIME = [...WORD_MIME, ...EXCEL_MIME, ...POWERPOINT_MIME];
@@ -1,7 +0,0 @@
1
- /** Enum to identify access tokens JWT issuers */
2
- export enum TokenIssuer {
3
- /** For tokens issued by the auth service */
4
- AUTH_SERVICE
5
- }
6
-
7
- export const TOKEN_ISSUERS = Object.values(TokenIssuer);
@@ -1,29 +0,0 @@
1
- import { QueryInterface, DataTypes } from 'sequelize';
2
-
3
- export async function up(queryInterface: QueryInterface): Promise<void> {
4
- await queryInterface.createTable(
5
- 'SequelizeMeta',
6
- {
7
- id: {
8
- type: DataTypes.INTEGER,
9
- autoIncrement: true,
10
- primaryKey: true
11
- },
12
- name: {
13
- type: DataTypes.STRING,
14
- allowNull: false
15
- },
16
- version: {
17
- type: DataTypes.STRING,
18
- allowNull: false
19
- }
20
- },
21
- {
22
- charset: 'utf8mb4',
23
- collate: 'utf8mb4_unicode_ci' // Change this to a valid collation
24
- }
25
- );
26
- }
27
- export async function down(queryInterface: QueryInterface): Promise<void> {
28
- await queryInterface.dropTable('SequelizeMeta');
29
- }
@@ -1,16 +0,0 @@
1
- import { Table, Column, Model, DataType } from 'sequelize-typescript';
2
-
3
- @Table
4
- export class SequelizeMeta extends Model {
5
- @Column({
6
- type: DataType.STRING,
7
- allowNull: false
8
- })
9
- name!: string;
10
-
11
- @Column({
12
- type: DataType.STRING,
13
- allowNull: false
14
- })
15
- version!: string;
16
- }
@@ -1,2 +0,0 @@
1
- export * from './SequelizeMeta';
2
-
@@ -1,103 +0,0 @@
1
- import { readdirSync } from 'fs';
2
- import path from 'path';
3
- import { Client } from '@elastic/elasticsearch';
4
- import { ElasticSearchMigration } from './ElasticSearch.types';
5
- import { EngineError } from 'entities/EngineError';
6
- import { LifecycleController } from 'entities/LifecycleController';
7
- import { envAssert, reportError, reportInfo } from 'utils';
8
- import { checkEnvironment } from 'utils/checkEnvironment';
9
-
10
- /** Elastic search client */
11
- let client: undefined | Client;
12
-
13
- export const ElasticSearch = {
14
- /**
15
- * Init function that should be called on server startup to establish the connection
16
- */
17
- async init(): Promise<void> {
18
- checkEnvironment({
19
- ELASTIC_SEARCH_HOST: envAssert.isString(),
20
- ELASTIC_SEARCH_USERNAME: envAssert.isString(),
21
- ELASTIC_SEARCH_PASSWORD: envAssert.isString(),
22
- ELASTIC_SEARCH_MIGRATION_PATH: envAssert.isString()
23
- });
24
-
25
- if (!process.env.ELASTIC_SEARCH_HOST)
26
- throw new EngineError({
27
- message: 'ElasticSearch Hosts not set in environment'
28
- });
29
-
30
- client = new Client({
31
- node: process.env.ELASTIC_SEARCH_HOST,
32
- auth: {
33
- username: process.env.ELASTIC_SEARCH_USERNAME as string,
34
- password: process.env.ELASTIC_SEARCH_PASSWORD as string
35
- }
36
- });
37
- // In test environment flush the database before running migrations
38
- if (process.env.NODE_ENV === 'test')
39
- await client.indices.delete({ index: '*' });
40
- await this.migrate();
41
- LifecycleController.register(this);
42
- },
43
-
44
- /**
45
- * Migration function called during the init process
46
- * Manages the database structure
47
- */
48
- async migrate(): Promise<void> {
49
- if (!client) throw new EngineError('ElasticSearch was not initialized');
50
- const migrationPath = path.resolve(
51
- process.env.ELASTIC_SEARCH_MIGRATION_PATH as string
52
- );
53
- const files = readdirSync(`${migrationPath}`);
54
- const indexExists = await client.indices.exists({
55
- index: 'migrations'
56
- });
57
- const ran = [];
58
- for (const file of files) {
59
- if (indexExists) {
60
- const {
61
- hits: { total }
62
- } = await client.search({
63
- index: 'migrations',
64
- body: { query: { match: { file } } }
65
- });
66
- let tot = 0;
67
- if (typeof total === 'number') {
68
- tot = total;
69
- } else {
70
- tot = total?.value ?? 0;
71
- }
72
- if (tot > 0) continue;
73
- }
74
- ran.push(file);
75
- const migration = (await import(
76
- `${migrationPath}/${file}`
77
- )) as ElasticSearchMigration;
78
- try {
79
- await migration.migrate(client);
80
- } catch (error) {
81
- reportError(error);
82
- process.exit(1);
83
- }
84
-
85
- await client.create({
86
- index: 'migrations',
87
- id: file,
88
- body: { file, ranAt: new Date() }
89
- });
90
- }
91
- reportInfo({
92
- message: `ElasticSearch: ran ${ran.length} migrations`,
93
- data: { files: ran }
94
- });
95
- },
96
-
97
- /**
98
- * Shutdown function that should be called on server stop to close the connection
99
- */
100
- async shutdown(): Promise<void> {
101
- if (client) await client.close();
102
- }
103
- };
@@ -1,7 +0,0 @@
1
- import { Client } from '@elastic/elasticsearch';
2
-
3
- /** Represents a migration that should be executed on ElasticSearch */
4
- export interface ElasticSearchMigration {
5
- /** Migration function */
6
- migrate: (client: Client) => Promise<void>;
7
- }
@@ -1,2 +0,0 @@
1
- export * from './ElasticSearch';
2
- export * from './ElasticSearch.types';
@@ -1,248 +0,0 @@
1
- import { randomUUID } from 'crypto';
2
- import { generateAccessToken } from 'backend-test-tools';
3
- import { expect } from 'chai';
4
- import express, { Request, Response, NextFunction } from 'express';
5
- import { faker } from '@faker-js/faker';
6
- import { fake } from 'sinon';
7
- import request from 'supertest';
8
- import { Endpoint } from './Endpoint';
9
- import {
10
- EndpointMethod,
11
- EndpointAuthType,
12
- EndpointOptions
13
- } from './Endpoint.types';
14
- import { Server } from 'entities/Server';
15
- import { request as httpRequest } from 'utils/request';
16
- import { tlsRequest } from 'utils/tlsRequest';
17
-
18
- const PATH = '/test';
19
- let app = express();
20
-
21
- const config: EndpointOptions<EndpointAuthType.NONE> = {
22
- method: EndpointMethod.GET,
23
- path: PATH,
24
- handler: (req: Request, res: Response) => {
25
- res.sendStatus(200);
26
- },
27
- validator: {},
28
- authType: EndpointAuthType.NONE
29
- };
30
-
31
- describe('Entity - Endpoint', () => {
32
- beforeEach(() => {
33
- app = express();
34
- });
35
-
36
- // Base
37
-
38
- it('should create a valid Endpoint', async () => {
39
- const endpoint = new Endpoint(config);
40
- endpoint.register(app);
41
- await request(app).get(PATH).expect(200);
42
- });
43
-
44
- // Async
45
-
46
- it('should handle asynchronous errors', async () => {
47
- const endpoint = new Endpoint({
48
- ...config,
49
- handler: async (): Promise<void> => {
50
- return new Promise((resolve, reject) => {
51
- reject(new Error());
52
- });
53
- }
54
- });
55
- endpoint.register(app);
56
- await request(app).get(PATH).expect(500);
57
- });
58
-
59
- // Middleware
60
-
61
- it('should handle specific middleware', async () => {
62
- const middleware = fake(
63
- (req: Request, res: Response, next: NextFunction) => {
64
- next();
65
- }
66
- );
67
- const endpoint = new Endpoint({
68
- ...config,
69
- middleware: [middleware]
70
- });
71
- endpoint.register(app);
72
- await request(app).get(PATH).expect(200);
73
- expect(middleware).to.have.been.called;
74
- });
75
-
76
- it('should handle specific error middleware', async () => {
77
- const middleware = fake(
78
- (err: Error, req: Request, res: Response, next: NextFunction) => {
79
- res.sendStatus(200);
80
- }
81
- );
82
- const endpoint = new Endpoint({
83
- ...config,
84
- handler: (): void => {
85
- throw new Error();
86
- },
87
- errorMiddleware: [middleware]
88
- });
89
- endpoint.register(app);
90
- await request(app).get(PATH).expect(200);
91
- expect(middleware).to.have.been.called;
92
- });
93
-
94
- // Validator
95
-
96
- it('should accept request with a valid shape', async () => {
97
- const endpoint = new Endpoint({
98
- ...config,
99
- validator: { number: { in: 'query', isInt: true } }
100
- });
101
- endpoint.register(app);
102
- await request(app)
103
- .get(PATH)
104
- .query({ number: faker.number.int() })
105
- .expect(200);
106
- });
107
-
108
- it('should reject request with an invalid shape', async () => {
109
- const endpoint = new Endpoint({
110
- ...config,
111
- validator: { number: { in: 'query', isInt: true } }
112
- });
113
- endpoint.register(app);
114
- await request(app)
115
- .get(PATH)
116
- .query({ number: faker.lorem.word() })
117
- .expect(400);
118
- });
119
-
120
- // Middleware
121
- it('should inject middlewares', async () => {
122
- const middleware = fake(
123
- (req: Request, res: Response, next: NextFunction) => {
124
- next();
125
- }
126
- );
127
- const endpoint = new Endpoint({
128
- ...config,
129
- middleware
130
- });
131
- endpoint.register(app);
132
- await request(app).get(PATH).expect(200);
133
- expect(middleware.called).to.be.true;
134
- });
135
-
136
- it('should inject multiple middlewares', async () => {
137
- const middleware = [
138
- fake((req: Request, res: Response, next: NextFunction) => {
139
- next();
140
- }),
141
- fake((req: Request, res: Response, next: NextFunction) => {
142
- next();
143
- })
144
- ];
145
- const endpoint = new Endpoint({
146
- ...config,
147
- middleware
148
- });
149
- endpoint.register(app);
150
- await request(app).get(PATH).expect(200);
151
- expect(middleware[0].called).to.be.true;
152
- expect(middleware[1].called).to.be.true;
153
- });
154
-
155
- // AUTH JWT
156
-
157
- it('it should authenticate with authJwt middleware', async () => {
158
- const id = randomUUID();
159
- const token = generateAccessToken(id);
160
- const endpoint = new Endpoint({
161
- ...config,
162
- authType: EndpointAuthType.JWT,
163
- handler: (req: Request, res: Response) => {
164
- res.sendStatus(200);
165
- }
166
- } as EndpointOptions<EndpointAuthType.JWT>);
167
- const server = new Server({ endpoints: [endpoint] });
168
-
169
- await server.init();
170
-
171
- await request(server.getApp())
172
- .get(PATH)
173
- .set('Authorization', 'Bearer ' + token)
174
- .expect(200);
175
-
176
- await server.shutdown();
177
- });
178
-
179
- it('it should reject if the user has no valid JWT', async () => {
180
- const endpoint = new Endpoint({
181
- ...config,
182
- authType: EndpointAuthType.JWT,
183
- handler: (req: Request, res: Response) => {
184
- res.sendStatus(200);
185
- }
186
- } as EndpointOptions<EndpointAuthType.JWT>);
187
- endpoint.register(app);
188
- await request(app).get(PATH).expect(401);
189
- });
190
-
191
- it('it should not trigger JWT error if acceptInvalid is set', async () => {
192
- const endpoint = new Endpoint({
193
- ...config,
194
- authType: EndpointAuthType.JWT,
195
- authParams: { acceptInvalid: true },
196
- handler: (req: Request, res: Response) => {
197
- res.sendStatus(200);
198
- }
199
- } as EndpointOptions<EndpointAuthType.JWT>);
200
- endpoint.register(app);
201
- await request(app).get(PATH).expect(200);
202
- });
203
-
204
- // TLS
205
- it('it should authenticate with authTLS middleware', async () => {
206
- const endpoint = new Endpoint({
207
- ...config,
208
- authType: EndpointAuthType.TLS,
209
- handler: (req: Request, res: Response) => {
210
- res.sendStatus(200);
211
- }
212
- } as EndpointOptions<EndpointAuthType.TLS>);
213
- const server = new Server({ endpoints: [endpoint] });
214
-
215
- await server.init();
216
-
217
- await expect(
218
- tlsRequest({
219
- method: 'get',
220
- url: `https://127.0.0.1:${process.env.PORT as string}${PATH}`
221
- })
222
- ).to.not.be.rejected;
223
-
224
- await server.shutdown();
225
- });
226
-
227
- it('it should reject if the user has no valid TLS credentials', async () => {
228
- const endpoint = new Endpoint({
229
- ...config,
230
- authType: EndpointAuthType.TLS,
231
- handler: (req: Request, res: Response) => {
232
- res.sendStatus(200);
233
- }
234
- } as EndpointOptions<EndpointAuthType.TLS>);
235
- const server = new Server({ endpoints: [endpoint] });
236
-
237
- await server.init();
238
-
239
- await expect(
240
- httpRequest({
241
- method: 'get',
242
- url: `https://127.0.0.1:${process.env.PORT as string}${PATH}`
243
- })
244
- ).to.be.rejected;
245
-
246
- await server.shutdown();
247
- });
248
- });