@syngrisi/syngrisi 2.2.2 → 2.2.6-alpha.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 (613) hide show
  1. package/README.md +49 -27
  2. package/dist/server/api-docs/openAPIDocumentGenerator.js +6489 -0
  3. package/dist/server/api-docs/openAPIDocumentGenerator.js.map +1 -0
  4. package/dist/server/api-docs/openAPIResponseBuilders.js +89 -0
  5. package/dist/server/api-docs/openAPIResponseBuilders.js.map +1 -0
  6. package/dist/server/api-docs/openAPIRouter.js +6505 -0
  7. package/dist/server/api-docs/openAPIRouter.js.map +1 -0
  8. package/dist/server/api-docs/serviceResponse.js +39 -0
  9. package/dist/server/api-docs/serviceResponse.js.map +1 -0
  10. package/dist/server/app.js +6751 -0
  11. package/dist/server/app.js.map +1 -0
  12. package/dist/server/config.js +1055 -0
  13. package/dist/server/config.js.map +1 -0
  14. package/dist/server/controllers/app.controller.js +1949 -0
  15. package/dist/server/controllers/app.controller.js.map +1 -0
  16. package/dist/server/controllers/auth.controller.js +2079 -0
  17. package/dist/server/controllers/auth.controller.js.map +1 -0
  18. package/dist/server/controllers/baseline.controller.js +1976 -0
  19. package/dist/server/controllers/baseline.controller.js.map +1 -0
  20. package/dist/server/controllers/check.controller.js +2289 -0
  21. package/dist/server/controllers/check.controller.js.map +1 -0
  22. package/dist/server/controllers/client.controller.js +2994 -0
  23. package/dist/server/controllers/client.controller.js.map +1 -0
  24. package/dist/server/controllers/index.js +4289 -0
  25. package/dist/server/controllers/index.js.map +1 -0
  26. package/dist/server/controllers/logs.controller.js +1954 -0
  27. package/dist/server/controllers/logs.controller.js.map +1 -0
  28. package/dist/server/controllers/runs.controller.js +2293 -0
  29. package/dist/server/controllers/runs.controller.js.map +1 -0
  30. package/dist/server/controllers/settings.controller.js +843 -0
  31. package/dist/server/controllers/settings.controller.js.map +1 -0
  32. package/dist/server/controllers/snapshots.controller.js +1953 -0
  33. package/dist/server/controllers/snapshots.controller.js.map +1 -0
  34. package/dist/server/controllers/suite.controller.js +2288 -0
  35. package/dist/server/controllers/suite.controller.js.map +1 -0
  36. package/dist/server/controllers/tasks.controller.js +2378 -0
  37. package/dist/server/controllers/tasks.controller.js.map +1 -0
  38. package/dist/server/controllers/test.controller.js +2312 -0
  39. package/dist/server/controllers/test.controller.js.map +1 -0
  40. package/dist/server/controllers/users.controller.js +2056 -0
  41. package/dist/server/controllers/users.controller.js.map +1 -0
  42. package/dist/server/envConfig.js +70 -0
  43. package/dist/server/envConfig.js.map +1 -0
  44. package/dist/server/lib/AppSettings/AppSettings.js +814 -0
  45. package/dist/server/lib/AppSettings/AppSettings.js.map +1 -0
  46. package/dist/server/lib/AppSettings/index.js +814 -0
  47. package/dist/server/lib/AppSettings/index.js.map +1 -0
  48. package/dist/server/lib/connectDb.js +1873 -0
  49. package/dist/server/lib/connectDb.js.map +1 -0
  50. package/dist/server/lib/dbItems/createAppIfNotExist.js +1878 -0
  51. package/dist/server/lib/dbItems/createAppIfNotExist.js.map +1 -0
  52. package/dist/server/lib/dbItems/createItemIfNotExist.js +1883 -0
  53. package/dist/server/lib/dbItems/createItemIfNotExist.js.map +1 -0
  54. package/dist/server/lib/dbItems/createItemProm.js +1877 -0
  55. package/dist/server/lib/dbItems/createItemProm.js.map +1 -0
  56. package/dist/server/lib/dbItems/createRunIfNotExist.js +1898 -0
  57. package/dist/server/lib/dbItems/createRunIfNotExist.js.map +1 -0
  58. package/dist/server/lib/dbItems/createSuiteIfNotExist.js +1878 -0
  59. package/dist/server/lib/dbItems/createSuiteIfNotExist.js.map +1 -0
  60. package/dist/server/lib/dbItems/createTest.js +1884 -0
  61. package/dist/server/lib/dbItems/createTest.js.map +1 -0
  62. package/dist/server/lib/dbItems/createUser.js +1884 -0
  63. package/dist/server/lib/dbItems/createUser.js.map +1 -0
  64. package/dist/server/lib/dbItems/index.js +2043 -0
  65. package/dist/server/lib/dbItems/index.js.map +1 -0
  66. package/dist/server/lib/dbItems/updateItem.js +1873 -0
  67. package/dist/server/lib/dbItems/updateItem.js.map +1 -0
  68. package/dist/server/lib/dbItems/updateItemDate.js +1872 -0
  69. package/dist/server/lib/dbItems/updateItemDate.js.map +1 -0
  70. package/dist/server/lib/httpLogger.js +1066 -0
  71. package/dist/server/lib/httpLogger.js.map +1 -0
  72. package/dist/server/lib/logger.js +1852 -0
  73. package/dist/server/lib/logger.js.map +1 -0
  74. package/dist/server/lib/startup/createBasicUsers.js +1901 -0
  75. package/dist/server/lib/startup/createBasicUsers.js.map +1 -0
  76. package/dist/server/lib/startup/createInitialSettings.js +820 -0
  77. package/dist/server/lib/startup/createInitialSettings.js.map +1 -0
  78. package/dist/server/lib/startup/createTempDir.js +1066 -0
  79. package/dist/server/lib/startup/createTempDir.js.map +1 -0
  80. package/dist/server/lib/startup/createTestsUsers.js +1916 -0
  81. package/dist/server/lib/startup/createTestsUsers.js.map +1 -0
  82. package/dist/server/lib/startup/index.js +2071 -0
  83. package/dist/server/lib/startup/index.js.map +1 -0
  84. package/dist/server/lib//321/201omparison/comparator.js +1955 -0
  85. package/dist/server/lib//321/201omparison/comparator.js.map +1 -0
  86. package/dist/server/lib//321/201omparison/compareImagesNode.js +91 -0
  87. package/dist/server/lib//321/201omparison/compareImagesNode.js.map +1 -0
  88. package/dist/server/lib//321/201omparison/index.js +1955 -0
  89. package/dist/server/lib//321/201omparison/index.js.map +1 -0
  90. package/dist/server/middlewares/authorization.js +1994 -0
  91. package/dist/server/middlewares/authorization.js.map +1 -0
  92. package/dist/server/middlewares/compressionFilter.js +47 -0
  93. package/dist/server/middlewares/compressionFilter.js.map +1 -0
  94. package/dist/server/middlewares/disableCors.js +1073 -0
  95. package/dist/server/middlewares/disableCors.js.map +1 -0
  96. package/dist/server/middlewares/ensureLogin/ensureLoggedIn.js +2103 -0
  97. package/dist/server/middlewares/ensureLogin/ensureLoggedIn.js.map +1 -0
  98. package/dist/server/middlewares/ensureLogin/index.js +2087 -0
  99. package/dist/server/middlewares/ensureLogin/index.js.map +1 -0
  100. package/dist/server/middlewares/errorHandler.js +1886 -0
  101. package/dist/server/middlewares/errorHandler.js.map +1 -0
  102. package/dist/server/middlewares/index.js +2025 -0
  103. package/dist/server/middlewares/index.js.map +1 -0
  104. package/dist/server/models/App.model.js +145 -0
  105. package/dist/server/models/App.model.js.map +1 -0
  106. package/dist/server/models/AppSettings.model.js +105 -0
  107. package/dist/server/models/AppSettings.model.js.map +1 -0
  108. package/dist/server/models/Baseline.model.js +187 -0
  109. package/dist/server/models/Baseline.model.js.map +1 -0
  110. package/dist/server/models/Check.model.js +241 -0
  111. package/dist/server/models/Check.model.js.map +1 -0
  112. package/dist/server/models/Log.model.js +139 -0
  113. package/dist/server/models/Log.model.js.map +1 -0
  114. package/dist/server/models/Run.model.js +154 -0
  115. package/dist/server/models/Run.model.js.map +1 -0
  116. package/dist/server/models/Snapshot.model.js +148 -0
  117. package/dist/server/models/Snapshot.model.js.map +1 -0
  118. package/dist/server/models/Suite.model.js +151 -0
  119. package/dist/server/models/Suite.model.js.map +1 -0
  120. package/dist/server/models/Test.model.js +248 -0
  121. package/dist/server/models/Test.model.js.map +1 -0
  122. package/dist/server/models/User.model.js +169 -0
  123. package/dist/server/models/User.model.js.map +1 -0
  124. package/dist/server/models/index.js +720 -0
  125. package/dist/server/models/index.js.map +1 -0
  126. package/dist/server/models/plugins/index.js +159 -0
  127. package/dist/server/models/plugins/index.js.map +1 -0
  128. package/dist/server/models/plugins/paginate.plugin.js +68 -0
  129. package/dist/server/models/plugins/paginate.plugin.js.map +1 -0
  130. package/dist/server/models/plugins/paginateDistinct.plugin.js +73 -0
  131. package/dist/server/models/plugins/paginateDistinct.plugin.js.map +1 -0
  132. package/dist/server/models/plugins/toJSON.plugin.js +56 -0
  133. package/dist/server/models/plugins/toJSON.plugin.js.map +1 -0
  134. package/dist/server/models/plugins/utils.js +19 -0
  135. package/dist/server/models/plugins/utils.js.map +1 -0
  136. package/dist/server/routes/ui/admin.js +2082 -0
  137. package/dist/server/routes/ui/admin.js.map +1 -0
  138. package/dist/server/routes/ui/auth.js +711 -0
  139. package/dist/server/routes/ui/auth.js.map +1 -0
  140. package/dist/server/routes/ui/index.js +2036 -0
  141. package/dist/server/routes/ui/index.js.map +1 -0
  142. package/dist/server/routes/v1/app.route.js +4372 -0
  143. package/dist/server/routes/v1/app.route.js.map +1 -0
  144. package/dist/server/routes/v1/auth.route.js +2325 -0
  145. package/dist/server/routes/v1/auth.route.js.map +1 -0
  146. package/dist/server/routes/v1/baselines.route.js +2487 -0
  147. package/dist/server/routes/v1/baselines.route.js.map +1 -0
  148. package/dist/server/routes/v1/checks.route.js +2840 -0
  149. package/dist/server/routes/v1/checks.route.js.map +1 -0
  150. package/dist/server/routes/v1/client.route.js +3764 -0
  151. package/dist/server/routes/v1/client.route.js.map +1 -0
  152. package/dist/server/routes/v1/index.route.js +6536 -0
  153. package/dist/server/routes/v1/index.route.js.map +1 -0
  154. package/dist/server/routes/v1/logs.route.js +2426 -0
  155. package/dist/server/routes/v1/logs.route.js.map +1 -0
  156. package/dist/server/routes/v1/runs.route.js +2771 -0
  157. package/dist/server/routes/v1/runs.route.js.map +1 -0
  158. package/dist/server/routes/v1/settings.route.js +2349 -0
  159. package/dist/server/routes/v1/settings.route.js.map +1 -0
  160. package/dist/server/routes/v1/snapshots.route.js +2361 -0
  161. package/dist/server/routes/v1/snapshots.route.js.map +1 -0
  162. package/dist/server/routes/v1/suites.route.js +2713 -0
  163. package/dist/server/routes/v1/suites.route.js.map +1 -0
  164. package/dist/server/routes/v1/tasks.route.js +2761 -0
  165. package/dist/server/routes/v1/tasks.route.js.map +1 -0
  166. package/dist/server/routes/v1/test_distinct.route.js +2714 -0
  167. package/dist/server/routes/v1/test_distinct.route.js.map +1 -0
  168. package/dist/server/routes/v1/tests.route.js +2895 -0
  169. package/dist/server/routes/v1/tests.route.js.map +1 -0
  170. package/dist/server/routes/v1/users.route.js +4619 -0
  171. package/dist/server/routes/v1/users.route.js.map +1 -0
  172. package/dist/server/schemas/App.schema.js +102 -0
  173. package/dist/server/schemas/App.schema.js.map +1 -0
  174. package/dist/server/schemas/Auth.schema.js +116 -0
  175. package/dist/server/schemas/Auth.schema.js.map +1 -0
  176. package/dist/server/schemas/Baseline.schema.js +183 -0
  177. package/dist/server/schemas/Baseline.schema.js.map +1 -0
  178. package/dist/server/schemas/Check.schema.js +198 -0
  179. package/dist/server/schemas/Check.schema.js.map +1 -0
  180. package/dist/server/schemas/Client.schema.js +455 -0
  181. package/dist/server/schemas/Client.schema.js.map +1 -0
  182. package/dist/server/schemas/CreateCheck.shema.js +47 -0
  183. package/dist/server/schemas/CreateCheck.shema.js.map +1 -0
  184. package/dist/server/schemas/GetBaseline.shema.js +56 -0
  185. package/dist/server/schemas/GetBaseline.shema.js.map +1 -0
  186. package/dist/server/schemas/Logs.schema.js +140 -0
  187. package/dist/server/schemas/Logs.schema.js.map +1 -0
  188. package/dist/server/schemas/Runs.schema.js +128 -0
  189. package/dist/server/schemas/Runs.schema.js.map +1 -0
  190. package/dist/server/schemas/Settings.schema.js +156 -0
  191. package/dist/server/schemas/Settings.schema.js.map +1 -0
  192. package/dist/server/schemas/SkipValid.schema.js +32 -0
  193. package/dist/server/schemas/SkipValid.schema.js.map +1 -0
  194. package/dist/server/schemas/SnapshotDiff.schema.js +44 -0
  195. package/dist/server/schemas/SnapshotDiff.schema.js.map +1 -0
  196. package/dist/server/schemas/Snapshots.schema.js +115 -0
  197. package/dist/server/schemas/Snapshots.schema.js.map +1 -0
  198. package/dist/server/schemas/Suite.schema.js +114 -0
  199. package/dist/server/schemas/Suite.schema.js.map +1 -0
  200. package/dist/server/schemas/Test.schema.js +204 -0
  201. package/dist/server/schemas/Test.schema.js.map +1 -0
  202. package/dist/server/schemas/TestDistinct.schema.js +63 -0
  203. package/dist/server/schemas/TestDistinct.schema.js.map +1 -0
  204. package/dist/server/schemas/User.schema.js +139 -0
  205. package/dist/server/schemas/User.schema.js.map +1 -0
  206. package/dist/server/schemas/common/ApiError.schema.js +51 -0
  207. package/dist/server/schemas/common/ApiError.schema.js.map +1 -0
  208. package/dist/server/schemas/common/Error.schema.js +47 -0
  209. package/dist/server/schemas/common/Error.schema.js.map +1 -0
  210. package/dist/server/schemas/common/RequestPagination.schema.js +121 -0
  211. package/dist/server/schemas/common/RequestPagination.schema.js.map +1 -0
  212. package/dist/server/schemas/common/Version.schema.js +36 -0
  213. package/dist/server/schemas/common/Version.schema.js.map +1 -0
  214. package/dist/server/schemas/common/requestQueryFilterSchema.schema.js +53 -0
  215. package/dist/server/schemas/common/requestQueryFilterSchema.schema.js.map +1 -0
  216. package/dist/server/schemas/index.js +155 -0
  217. package/dist/server/schemas/index.js.map +1 -0
  218. package/dist/server/schemas/utils/commonValidations.js +82 -0
  219. package/dist/server/schemas/utils/commonValidations.js.map +1 -0
  220. package/dist/server/schemas/utils/createRequestBodySchema.js +32 -0
  221. package/dist/server/schemas/utils/createRequestBodySchema.js.map +1 -0
  222. package/dist/server/schemas/utils/createRequestOpenApiBodySchema.js +35 -0
  223. package/dist/server/schemas/utils/createRequestOpenApiBodySchema.js.map +1 -0
  224. package/dist/server/schemas/utils/createRequestParamsSchema.js +93 -0
  225. package/dist/server/schemas/utils/createRequestParamsSchema.js.map +1 -0
  226. package/dist/server/schemas/utils/createRequestQuerySchema.js +32 -0
  227. package/dist/server/schemas/utils/createRequestQuerySchema.js.map +1 -0
  228. package/dist/server/schemas/utils/index.js +84 -0
  229. package/dist/server/schemas/utils/index.js.map +1 -0
  230. package/dist/server/server.js +6921 -0
  231. package/dist/server/server.js.map +1 -0
  232. package/dist/server/server_old.js +7284 -0
  233. package/dist/server/server_old.js.map +1 -0
  234. package/dist/server/services/app.service.js +696 -0
  235. package/dist/server/services/app.service.js.map +1 -0
  236. package/dist/server/services/auth.service.js +2025 -0
  237. package/dist/server/services/auth.service.js.map +1 -0
  238. package/dist/server/services/check.service.js +2149 -0
  239. package/dist/server/services/check.service.js.map +1 -0
  240. package/dist/server/services/client.service.js +2648 -0
  241. package/dist/server/services/client.service.js.map +1 -0
  242. package/dist/server/services/generic.service.js +1888 -0
  243. package/dist/server/services/generic.service.js.map +1 -0
  244. package/dist/server/services/index.js +3548 -0
  245. package/dist/server/services/index.js.map +1 -0
  246. package/dist/server/services/logs.service.js +1875 -0
  247. package/dist/server/services/logs.service.js.map +1 -0
  248. package/dist/server/services/run.service.js +2221 -0
  249. package/dist/server/services/run.service.js.map +1 -0
  250. package/dist/server/services/snapshot.service.js +1921 -0
  251. package/dist/server/services/snapshot.service.js.map +1 -0
  252. package/dist/server/services/suite.service.js +2218 -0
  253. package/dist/server/services/suite.service.js.map +1 -0
  254. package/dist/server/services/tasks.service.js +2288 -0
  255. package/dist/server/services/tasks.service.js.map +1 -0
  256. package/dist/server/services/test.service.js +2230 -0
  257. package/dist/server/services/test.service.js.map +1 -0
  258. package/dist/server/services/user.service.js +1925 -0
  259. package/dist/server/services/user.service.js.map +1 -0
  260. package/dist/server/utils/ApiError.js +39 -0
  261. package/dist/server/utils/ApiError.js.map +1 -0
  262. package/dist/server/utils/ProgressBar.js +54 -0
  263. package/dist/server/utils/ProgressBar.js.map +1 -0
  264. package/dist/server/utils/ServiceResponse.js +45 -0
  265. package/dist/server/utils/ServiceResponse.js.map +1 -0
  266. package/dist/server/utils/buildIdentObject.js +52 -0
  267. package/dist/server/utils/buildIdentObject.js.map +1 -0
  268. package/dist/server/utils/calculateAcceptedStatus.js +710 -0
  269. package/dist/server/utils/calculateAcceptedStatus.js.map +1 -0
  270. package/dist/server/utils/catchAsync.js +32 -0
  271. package/dist/server/utils/catchAsync.js.map +1 -0
  272. package/dist/server/utils/checkIdent.js +36 -0
  273. package/dist/server/utils/checkIdent.js.map +1 -0
  274. package/dist/server/utils/dateToISO8601.js +30 -0
  275. package/dist/server/utils/dateToISO8601.js.map +1 -0
  276. package/dist/server/utils/deserializeIfJSON.js +706 -0
  277. package/dist/server/utils/deserializeIfJSON.js.map +1 -0
  278. package/dist/server/utils/errMsg.js +33 -0
  279. package/dist/server/utils/errMsg.js.map +1 -0
  280. package/dist/server/utils/formatISOToDateTime.js +31 -0
  281. package/dist/server/utils/formatISOToDateTime.js.map +1 -0
  282. package/dist/server/utils/ident.js +31 -0
  283. package/dist/server/utils/ident.js.map +1 -0
  284. package/dist/server/utils/index.js +910 -0
  285. package/dist/server/utils/index.js.map +1 -0
  286. package/dist/server/utils/isJSON.js +34 -0
  287. package/dist/server/utils/isJSON.js.map +1 -0
  288. package/dist/server/utils/paramsGuard.js +45 -0
  289. package/dist/server/utils/paramsGuard.js.map +1 -0
  290. package/dist/server/utils/pick.js +35 -0
  291. package/dist/server/utils/pick.js.map +1 -0
  292. package/dist/server/utils/prettyCheckParams.js +37 -0
  293. package/dist/server/utils/prettyCheckParams.js.map +1 -0
  294. package/dist/server/utils/removeEmptyProperties.js +34 -0
  295. package/dist/server/utils/removeEmptyProperties.js.map +1 -0
  296. package/dist/server/utils/subDays.js +32 -0
  297. package/dist/server/utils/subDays.js.map +1 -0
  298. package/dist/server/utils/validateRequest.js +1922 -0
  299. package/dist/server/utils/validateRequest.js.map +1 -0
  300. package/dist/server/utils/waitUntil.js +43 -0
  301. package/dist/server/utils/waitUntil.js.map +1 -0
  302. package/dist/tasks/backup.js +1085 -0
  303. package/dist/tasks/backup.js.map +1 -0
  304. package/dist/tasks/lib/index.js +717 -0
  305. package/dist/tasks/lib/index.js.map +1 -0
  306. package/dist/tasks/lib/utils.js +1070 -0
  307. package/dist/tasks/lib/utils.js.map +1 -0
  308. package/dist/tasks/migrations/2.0.migration.js +908 -0
  309. package/dist/tasks/migrations/2.0.migration.js.map +1 -0
  310. package/dist/tasks/reindex.js +1742 -0
  311. package/dist/tasks/reindex.js.map +1 -0
  312. package/dist/tasks/restore.js +1097 -0
  313. package/dist/tasks/restore.js.map +1 -0
  314. package/docker-compose.yml +3 -3
  315. package/mvc/views/react/admin/index.html +4 -4
  316. package/mvc/views/react/assets/{LogicalGroup.6c0a9f4a.js → LogicalGroup.80e37bbf.js} +1 -22
  317. package/mvc/views/react/assets/{PasswordInput.b97a4ef7.js → PasswordInput.eb05d2ed.js} +1 -1
  318. package/mvc/views/react/assets/{admin.6d843d1b.js → admin.d6aa02f7.js} +3 -3
  319. package/mvc/views/react/assets/{auth.ecf25364.js → auth.e49d0968.js} +3 -2
  320. package/mvc/views/react/assets/{root.25abcc85.js → root.b071750f.js} +7 -9
  321. package/mvc/views/react/assets/{use-form.10003abf.js → use-form.c4a2cf47.js} +203 -151
  322. package/mvc/views/react/auth/index.html +3 -3
  323. package/mvc/views/react/index2/index.html +3 -3
  324. package/package.json +45 -14
  325. package/src/seeds/testAdmin.json +10 -0
  326. package/src/server/api-docs/openAPIDocumentGenerator.ts +48 -0
  327. package/src/server/api-docs/openAPIResponseBuilders.ts +38 -0
  328. package/src/server/api-docs/openAPIRouter.ts +18 -0
  329. package/src/server/api-docs/serviceResponse.ts +11 -0
  330. package/src/server/app.ts +77 -0
  331. package/src/server/config.ts +57 -0
  332. package/src/server/controllers/app.controller.ts +23 -0
  333. package/src/server/controllers/auth.controller.ts +149 -0
  334. package/src/server/controllers/baseline.controller.ts +32 -0
  335. package/src/server/controllers/{check.controller.js → check.controller.ts} +17 -14
  336. package/src/server/controllers/client.controller.ts +134 -0
  337. package/src/server/controllers/index.ts +27 -0
  338. package/src/server/controllers/logs.controller.ts +36 -0
  339. package/src/server/controllers/runs.controller.ts +32 -0
  340. package/src/server/controllers/settings.controller.ts +28 -0
  341. package/src/server/controllers/snapshots.controller.ts +24 -0
  342. package/src/server/controllers/suite.controller.ts +30 -0
  343. package/src/server/controllers/tasks.controller.ts +47 -0
  344. package/src/server/controllers/test.controller.ts +62 -0
  345. package/src/server/controllers/users.controller.ts +89 -0
  346. package/src/server/envConfig.ts +36 -0
  347. package/src/server/lib/AppSettings/AppSettings.ts +88 -0
  348. package/src/server/lib/AppSettings/index.ts +1 -0
  349. package/src/server/lib/connectDb.ts +18 -0
  350. package/src/server/lib/dbItems/createAppIfNotExist.ts +26 -0
  351. package/src/server/lib/dbItems/createItemIfNotExist.ts +29 -0
  352. package/src/server/lib/dbItems/createItemProm.ts +22 -0
  353. package/src/server/lib/dbItems/createRunIfNotExist.ts +44 -0
  354. package/src/server/lib/dbItems/createSuiteIfNotExist.ts +26 -0
  355. package/src/server/lib/dbItems/createTest.ts +7 -0
  356. package/src/server/lib/dbItems/createUser.ts +7 -0
  357. package/src/server/lib/dbItems/index.ts +12 -0
  358. package/src/server/lib/dbItems/updateItem.ts +17 -0
  359. package/src/server/lib/dbItems/updateItemDate.ts +18 -0
  360. package/src/server/lib/httpLogger.ts +14 -0
  361. package/src/server/lib/logger.ts +147 -0
  362. package/src/server/lib/startup/createBasicUsers.ts +25 -0
  363. package/src/server/lib/startup/createInitialSettings.ts +8 -0
  364. package/src/server/lib/startup/createTempDir.ts +9 -0
  365. package/src/server/lib/startup/createTestsUsers.ts +17 -0
  366. package/src/server/lib/startup/index.ts +4 -0
  367. package/src/server/lib//321/201omparison/comparator.ts +49 -0
  368. package/src/server/lib//321/201omparison/compareImagesNode.ts +61 -0
  369. package/src/server/lib//321/201omparison/index.ts +1 -0
  370. package/src/server/middlewares/{authorization.js → authorization.ts} +23 -14
  371. package/src/server/middlewares/compressionFilter.ts +9 -0
  372. package/src/server/middlewares/disableCors.ts +32 -0
  373. package/src/server/{lib/ensureLogin/ensureLoggedIn.js → middlewares/ensureLogin/ensureLoggedIn.ts} +60 -63
  374. package/src/server/middlewares/ensureLogin/index.ts +2 -0
  375. package/src/server/middlewares/errorHandler.ts +42 -0
  376. package/src/server/middlewares/index.ts +4 -0
  377. package/src/server/models/App.model.ts +42 -0
  378. package/src/server/models/AppSettings.model.ts +48 -0
  379. package/src/server/models/Baseline.model.ts +98 -0
  380. package/src/server/models/Check.model.ts +166 -0
  381. package/src/server/models/Log.model.ts +36 -0
  382. package/src/server/models/Run.model.ts +55 -0
  383. package/src/server/models/Snapshot.model.ts +47 -0
  384. package/src/server/models/Suite.model.ts +50 -0
  385. package/src/server/models/Test.model.ts +117 -0
  386. package/src/server/models/User.model.ts +77 -0
  387. package/src/server/models/index.ts +11 -0
  388. package/src/server/models/plugins/index.ts +3 -0
  389. package/src/server/models/plugins/paginate.plugin.ts +74 -0
  390. package/src/server/models/plugins/paginateDistinct.plugin.ts +90 -0
  391. package/src/server/models/plugins/toJSON.plugin.ts +41 -0
  392. package/src/server/models/plugins/utils.ts +34 -0
  393. package/src/server/routes/ui/admin.ts +29 -0
  394. package/src/server/routes/ui/auth.ts +22 -0
  395. package/src/server/routes/ui/index.ts +25 -0
  396. package/src/server/routes/v1/app.route.ts +48 -0
  397. package/src/server/routes/v1/auth.route.ts +88 -0
  398. package/src/server/routes/v1/baselines.route.ts +52 -0
  399. package/src/server/routes/v1/checks.route.ts +85 -0
  400. package/src/server/routes/v1/client.route.ts +123 -0
  401. package/src/server/routes/v1/{index.js → index.route.ts} +16 -16
  402. package/src/server/routes/v1/logs.route.ts +65 -0
  403. package/src/server/routes/v1/runs.route.ts +55 -0
  404. package/src/server/routes/v1/settings.route.ts +54 -0
  405. package/src/server/routes/v1/snapshots.route.ts +32 -0
  406. package/src/server/routes/v1/suites.route.ts +52 -0
  407. package/src/server/routes/v1/tasks.route.ts +121 -0
  408. package/src/server/routes/v1/test_distinct.route.ts +32 -0
  409. package/src/server/routes/v1/tests.route.ts +90 -0
  410. package/src/server/routes/v1/users.route.ts +115 -0
  411. package/src/server/schemas/App.schema.ts +19 -0
  412. package/src/server/schemas/Auth.schema.ts +27 -0
  413. package/src/server/schemas/Baseline.schema.ts +106 -0
  414. package/src/server/schemas/Check.schema.ts +117 -0
  415. package/src/server/schemas/Client.schema.ts +380 -0
  416. package/src/server/schemas/GetBaseline.shema.ts +34 -0
  417. package/src/server/schemas/Logs.schema.ts +61 -0
  418. package/src/server/schemas/Runs.schema.ts +45 -0
  419. package/src/server/schemas/Settings.schema.ts +71 -0
  420. package/src/server/schemas/SkipValid.schema.ts +2 -0
  421. package/src/server/schemas/SnapshotDiff.schema.ts +18 -0
  422. package/src/server/schemas/Snapshots.schema.ts +42 -0
  423. package/src/server/schemas/Suite.schema.ts +34 -0
  424. package/src/server/schemas/Test.schema.ts +126 -0
  425. package/src/server/schemas/TestDistinct.schema.ts +36 -0
  426. package/src/server/schemas/User.schema.ts +59 -0
  427. package/src/server/schemas/common/ApiError.schema.ts +23 -0
  428. package/src/server/schemas/common/Error.schema.ts +19 -0
  429. package/src/server/schemas/common/RequestPagination.schema.ts +16 -0
  430. package/src/server/schemas/common/Version.schema.ts +14 -0
  431. package/src/server/schemas/common/requestQueryFilterSchema.schema.ts +32 -0
  432. package/src/server/schemas/index.ts +4 -0
  433. package/src/server/schemas/utils/commonValidations.ts +51 -0
  434. package/src/server/schemas/utils/createRequestBodySchema.ts +2 -0
  435. package/src/server/schemas/utils/createRequestOpenApiBodySchema.ts +6 -0
  436. package/src/server/schemas/utils/createRequestParamsSchema.ts +7 -0
  437. package/src/server/schemas/utils/createRequestQuerySchema.ts +2 -0
  438. package/src/server/schemas/utils/index.ts +3 -0
  439. package/src/server/server.ts +54 -0
  440. package/src/server/server_old.ts +185 -0
  441. package/src/server/services/app.service.ts +9 -0
  442. package/src/server/services/auth.service.ts +94 -0
  443. package/src/server/services/check.service.ts +241 -0
  444. package/src/server/services/client.service.ts +691 -0
  445. package/src/server/services/generic.service.ts +37 -0
  446. package/src/server/services/index.ts +24 -0
  447. package/src/server/services/logs.service.ts +27 -0
  448. package/src/server/services/run.service.ts +32 -0
  449. package/src/server/services/snapshot.service.ts +78 -0
  450. package/src/server/services/suite.service.ts +30 -0
  451. package/src/server/services/{tasks.service.js → tasks.service.ts} +157 -228
  452. package/src/server/services/test.service.ts +65 -0
  453. package/src/server/services/user.service.ts +90 -0
  454. package/src/server/utils/{ApiError.js → ApiError.ts} +5 -2
  455. package/src/server/utils/ProgressBar.ts +35 -0
  456. package/src/server/utils/ServiceResponse.ts +18 -0
  457. package/src/server/utils/buildIdentObject.ts +34 -0
  458. package/src/server/utils/calculateAcceptedStatus.ts +22 -0
  459. package/src/server/utils/catchAsync.ts +11 -0
  460. package/src/server/utils/checkIdent.ts +4 -0
  461. package/src/server/utils/dateToISO8601.ts +5 -0
  462. package/src/server/utils/deserializeIfJSON.ts +9 -0
  463. package/src/server/utils/errMsg.ts +3 -0
  464. package/src/server/utils/{formatISOToDateTime.js → formatISOToDateTime.ts} +2 -2
  465. package/src/server/utils/ident.ts +1 -0
  466. package/src/server/utils/index.ts +24 -0
  467. package/src/server/utils/isJSON.ts +14 -0
  468. package/src/server/utils/paramsGuard.ts +7 -6
  469. package/src/server/utils/pick.ts +17 -0
  470. package/src/server/utils/prettyCheckParams.ts +18 -0
  471. package/src/server/utils/removeEmptyProperties.ts +5 -0
  472. package/src/server/utils/{subDays.js → subDays.ts} +2 -2
  473. package/src/server/utils/validateRequest.ts +56 -0
  474. package/src/server/utils/waitUntil.ts +14 -0
  475. package/src/tasks/backup.ts +1 -1
  476. package/src/tasks/lib/index.ts +13 -0
  477. package/src/tasks/lib/utils.ts +14 -0
  478. package/src/tasks/migrations/2.0.migration.ts +2 -2
  479. package/src/tasks/reindex.ts +34 -0
  480. package/src/tasks/restore.ts +1 -1
  481. package/src/types/ExtRequest.ts +10 -0
  482. package/src/types/LogOpts.ts +20 -0
  483. package/src/types/Midleware.ts +3 -0
  484. package/src/types/RequestUser.ts +14 -0
  485. package/src/types/index.ts +4 -0
  486. package/src/ui-app/README.md +2 -2
  487. package/src/ui-app/auth/components/ChangePasswordForm.tsx +1 -1
  488. package/src/ui-app/index2/components/Tests/Table/Checks/CheckDetails/Canvas/mainView.ts +3 -3
  489. package/src/ui-app/index2/components/Tests/Table/Checks/Checks.tsx +30 -2
  490. package/src/ui-app/package-lock.json +10 -16
  491. package/src/ui-app/package.json +2 -2
  492. package/src/ui-app/shared/services/checks.service.ts +1 -1
  493. package/src/ui-app/shared/services/generic.service.ts +0 -28
  494. package/src/ui-app/tsconfig.json +3 -2
  495. package/config.js +0 -17
  496. package/dist/config.js +0 -16
  497. package/dist/src/server/models/index.js +0 -508
  498. package/dist/src/server/models/plugins/index.js +0 -4
  499. package/dist/src/server/models/plugins/paginate.plugin.js +0 -76
  500. package/dist/src/server/models/plugins/paginateDistinct.plugin.js +0 -76
  501. package/dist/src/server/models/plugins/toJSON.plugin.js +0 -39
  502. package/dist/src/server/schemas/createCheck.shema.js +0 -17
  503. package/dist/src/server/schemas/getBaseline.shema.js +0 -12
  504. package/dist/src/server/utils/paramsGuard.js +0 -18
  505. package/dist/src/tasks/backup.js +0 -68
  506. package/dist/src/tasks/lib/common.js +0 -14
  507. package/dist/src/tasks/lib/utils.js +0 -14
  508. package/dist/src/tasks/migrations/2.0.migration.js +0 -86
  509. package/dist/src/tasks/migrations/2.0.migration_mql.js +0 -57
  510. package/dist/src/tasks/reindex.js +0 -28
  511. package/dist/src/tasks/restore.js +0 -86
  512. package/dist/tsconfig.tsbuildinfo +0 -1
  513. package/mvc/views/react/index.html +0 -19
  514. package/server.js +0 -166
  515. package/src/server/controllers/app.controller.js +0 -21
  516. package/src/server/controllers/auth.controller.js +0 -156
  517. package/src/server/controllers/baseline.controller.js +0 -24
  518. package/src/server/controllers/client.controller.js +0 -173
  519. package/src/server/controllers/index.js +0 -12
  520. package/src/server/controllers/logs.controller.js +0 -30
  521. package/src/server/controllers/runs.controller.js +0 -25
  522. package/src/server/controllers/settings.controller.js +0 -23
  523. package/src/server/controllers/snapshots.controller.js +0 -17
  524. package/src/server/controllers/suite.controller.js +0 -24
  525. package/src/server/controllers/tasks.controller.js +0 -47
  526. package/src/server/controllers/test.controller.js +0 -70
  527. package/src/server/controllers/users.controller.js +0 -79
  528. package/src/server/data/custom_devices.json +0 -8
  529. package/src/server/lib/AppSettings.js +0 -56
  530. package/src/server/lib/comparator.js +0 -147
  531. package/src/server/lib/compareImagesNode.js +0 -60
  532. package/src/server/lib/dbItems.js +0 -215
  533. package/src/server/lib/ensureLogin/ensureLoggedOut.js +0 -44
  534. package/src/server/lib/getElementsByPixPositionsFromDump.js +0 -72
  535. package/src/server/lib/logger.js +0 -95
  536. package/src/server/lib/onStart.js +0 -53
  537. package/src/server/lib/parseDiff.js.bak +0 -72
  538. package/src/server/middlewares/disableCors.js +0 -19
  539. package/src/server/models/index.js +0 -534
  540. package/src/server/models/plugins/index.js +0 -3
  541. package/src/server/models/plugins/paginate.plugin.js +0 -83
  542. package/src/server/models/plugins/paginateDistinct.plugin.js +0 -80
  543. package/src/server/models/plugins/toJSON.plugin.js +0 -44
  544. package/src/server/routes/ui/admin.js +0 -20
  545. package/src/server/routes/ui/auth.js +0 -15
  546. package/src/server/routes/ui/index.js +0 -19
  547. package/src/server/routes/v1/app.route.js +0 -9
  548. package/src/server/routes/v1/auth.route.js +0 -12
  549. package/src/server/routes/v1/baselines.route.js +0 -14
  550. package/src/server/routes/v1/checks.route.js +0 -25
  551. package/src/server/routes/v1/client.route.js +0 -39
  552. package/src/server/routes/v1/logs.route.js +0 -16
  553. package/src/server/routes/v1/runs.route.js +0 -15
  554. package/src/server/routes/v1/settings.route.js +0 -23
  555. package/src/server/routes/v1/snapshots.route.js +0 -11
  556. package/src/server/routes/v1/suites.route.js +0 -15
  557. package/src/server/routes/v1/tasks.route.js +0 -59
  558. package/src/server/routes/v1/test.route.js +0 -20
  559. package/src/server/routes/v1/test_distinct.route.js +0 -14
  560. package/src/server/routes/v1/users.route.js +0 -36
  561. package/src/server/schemas/getBaseline.shema.ts +0 -12
  562. package/src/server/services/app.service.js +0 -23
  563. package/src/server/services/check.service.js +0 -178
  564. package/src/server/services/client.service.js +0 -648
  565. package/src/server/services/generic.service.js +0 -51
  566. package/src/server/services/index.js +0 -12
  567. package/src/server/services/logs.service.js +0 -38
  568. package/src/server/services/run.service.js +0 -40
  569. package/src/server/services/suite.service.js +0 -39
  570. package/src/server/services/test.service.js +0 -72
  571. package/src/server/services/user.service.js +0 -128
  572. package/src/server/utils/catchAsync.js +0 -8
  573. package/src/server/utils/check.js +0 -58
  574. package/src/server/utils/dateToISO8601.js +0 -2
  575. package/src/server/utils/deserializeIfJSON.js +0 -9
  576. package/src/server/utils/index.js +0 -10
  577. package/src/server/utils/isJSON.js +0 -6
  578. package/src/server/utils/pick.js +0 -15
  579. package/src/server/utils/prettyCheckParams.js +0 -13
  580. package/src/server/utils/snapshots.js +0 -73
  581. package/src/server/utils/tests.js +0 -36
  582. package/src/server/utils/utils.js +0 -146
  583. package/src/tasks/backup.js.bak +0 -84
  584. package/src/tasks/lib/common.js +0 -24
  585. package/src/tasks/lib/utils.js +0 -15
  586. package/src/tasks/reindex.js +0 -36
  587. package/src/tasks/restore.js.bak +0 -100
  588. package/src/ui-app/tsconfig.node.json +0 -12
  589. package/static/js/canvasjs.min.js.bak +0 -957
  590. package/static/js/chart.js.bak +0 -92
  591. package/static/js/jquery-3.3.1.slim.js.bak +0 -8269
  592. package/static/js/jquery-3.3.1.slim.min.js.bak +0 -2
  593. package/static/js/moment.min.js.bak +0 -2
  594. /package/src/{server/lib → seeds}/admin.json +0 -0
  595. /package/src/{server/lib → seeds}/guest.json +0 -0
  596. /package/src/{server/lib → seeds}/initialAppSettings.json +0 -0
  597. /package/src/{server/lib/testAdmin.json → seeds/testAdmin copy.json} +0 -0
  598. /package/src/{server/lib → seeds}/testUsers.json +0 -0
  599. /package/src/server/schemas/{createCheck.shema.ts → CreateCheck.shema.ts} +0 -0
  600. /package/{static → src/server/static/static}/A.png +0 -0
  601. /package/{static → src/server/static/static}/B.png +0 -0
  602. /package/{static → src/server/static/static}/affected.html +0 -0
  603. /package/{static → src/server/static/static}/affected_2.html +0 -0
  604. /package/{static → src/server/static/static}/data/custom_devices.json +0 -0
  605. /package/{static → src/server/static/static}/grids/desktop-higher.html +0 -0
  606. /package/{static → src/server/static/static}/grids/desktop-wider.html +0 -0
  607. /package/{static → src/server/static/static}/grids/desktop.html +0 -0
  608. /package/{static → src/server/static/static}/grids/fit-in-view.html +0 -0
  609. /package/{static → src/server/static/static}/low_diff_0.png +0 -0
  610. /package/{static → src/server/static/static}/low_diff_1.png +0 -0
  611. /package/{static → src/server/static/static}/vShift.png +0 -0
  612. /package/{static → src/server/static/static}/vShift_bottom.png +0 -0
  613. /package/{static → src/server/static/static}/vShift_top.png +0 -0
@@ -0,0 +1,2025 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/server/middlewares/index.ts
31
+ var middlewares_exports = {};
32
+ __export(middlewares_exports, {
33
+ authorization: () => authorization,
34
+ compressionFilter: () => compressionFilter,
35
+ disableCors: () => disableCors
36
+ });
37
+ module.exports = __toCommonJS(middlewares_exports);
38
+
39
+ // src/server/config.ts
40
+ var import_fs = __toESM(require("fs"));
41
+ var import_dotenv2 = __toESM(require("dotenv"));
42
+
43
+ // package.json
44
+ var version = "2.2.3";
45
+
46
+ // src/server/config.ts
47
+ var import_crypto2 = __toESM(require("crypto"));
48
+
49
+ // src/server/envConfig.ts
50
+ var import_envalid = require("envalid");
51
+ var import_crypto = __toESM(require("crypto"));
52
+ var import_path = __toESM(require("path"));
53
+ var import_dotenv = __toESM(require("dotenv"));
54
+ import_dotenv.default.config();
55
+ var env = (0, import_envalid.cleanEnv)(process.env, {
56
+ NODE_ENV: (0, import_envalid.str)({ choices: ["development", "production", "test"] }),
57
+ SYNGRISI_DB_URI: (0, import_envalid.str)({ devDefault: "mongodb://127.0.0.1:27017/SyngrisiDb" }),
58
+ SYNGRISI_APP_PORT: (0, import_envalid.port)({ devDefault: 3e3 }),
59
+ SYNGRISI_IMAGES_PATH: (0, import_envalid.str)({ devDefault: "./.snapshots-images/" }),
60
+ SYNGRISI_TMP_DIR: (0, import_envalid.str)({ default: import_path.default.join(process.cwd(), ".tmp") }),
61
+ SYNGRISI_HTTP_LOG: (0, import_envalid.bool)({ devDefault: false }),
62
+ SYNGRISI_COVERAGE: (0, import_envalid.bool)({ devDefault: false }),
63
+ SYNGRISI_HOSTNAME: (0, import_envalid.host)({ devDefault: "localhost" }),
64
+ SYNGRISI_AUTH: (0, import_envalid.bool)({ default: true }),
65
+ SYNGRISI_TEST_MODE: (0, import_envalid.bool)({ default: false }),
66
+ SYNGRISI_DISABLE_FIRST_RUN: (0, import_envalid.bool)({ default: false }),
67
+ MONGODB_ROOT_USERNAME: (0, import_envalid.str)({ default: "" }),
68
+ MONGODB_ROOT_PASSWORD: (0, import_envalid.str)({ default: "" }),
69
+ LOGLEVEL: (0, import_envalid.str)({ choices: ["error", "warn", "info", "verbose", "debug", "silly"], default: "debug" }),
70
+ SYNGRISI_PAGINATION_SIZE: (0, import_envalid.num)({ default: 50 }),
71
+ SYNGRISI_DISABLE_DEV_CORS: (0, import_envalid.bool)({ default: false, devDefault: true }),
72
+ SYNGRISI_SESSION_STORE_KEY: (0, import_envalid.str)({ default: import_crypto.default.randomBytes(64).toString("hex") }),
73
+ SYNGRISI_LOG_LEVEL: (0, import_envalid.str)({ default: "debug" }),
74
+ // trunk features
75
+ SYNGRISI_TRUNK_FEATURE_AI_SEVERITY: (0, import_envalid.bool)({ default: false }),
76
+ SYNGRISI_AI_KEY: (0, import_envalid.str)({ default: "" }),
77
+ OPENAI_API_BASE_URL: (0, import_envalid.str)({ default: "https://api.openai.com/v1" }),
78
+ OPENAI_API_KEY: (0, import_envalid.str)({ default: "" })
79
+ });
80
+
81
+ // src/server/data/devices.json
82
+ var devices_default = [
83
+ {
84
+ os: "ios",
85
+ os_version: "16",
86
+ device: "iPhone 14 Pro Max",
87
+ realMobile: true
88
+ },
89
+ {
90
+ os: "ios",
91
+ os_version: "16",
92
+ device: "iPhone 14 Pro",
93
+ realMobile: true
94
+ },
95
+ {
96
+ os: "ios",
97
+ os_version: "16",
98
+ device: "iPhone 14 Plus",
99
+ realMobile: true
100
+ },
101
+ {
102
+ os: "ios",
103
+ os_version: "16",
104
+ device: "iPhone 14",
105
+ realMobile: true
106
+ },
107
+ {
108
+ os: "ios",
109
+ os_version: "16",
110
+ device: "iPhone 12 Pro Max",
111
+ realMobile: true
112
+ },
113
+ {
114
+ os: "ios",
115
+ os_version: "16",
116
+ device: "iPhone 12 Pro",
117
+ realMobile: true
118
+ },
119
+ {
120
+ os: "ios",
121
+ os_version: "16",
122
+ device: "iPhone 12 Mini",
123
+ realMobile: true
124
+ },
125
+ {
126
+ os: "ios",
127
+ os_version: "16",
128
+ device: "iPhone 11 Pro Max",
129
+ realMobile: true
130
+ },
131
+ {
132
+ os: "ios",
133
+ os_version: "15",
134
+ device: "iPhone XS",
135
+ realMobile: true
136
+ },
137
+ {
138
+ os: "ios",
139
+ os_version: "15",
140
+ device: "iPhone 13 Pro Max",
141
+ realMobile: true
142
+ },
143
+ {
144
+ os: "ios",
145
+ os_version: "15",
146
+ device: "iPhone 13 Pro",
147
+ realMobile: true
148
+ },
149
+ {
150
+ os: "ios",
151
+ os_version: "15",
152
+ device: "iPhone 13 Mini",
153
+ realMobile: true
154
+ },
155
+ {
156
+ os: "ios",
157
+ os_version: "15",
158
+ device: "iPhone 13",
159
+ realMobile: true
160
+ },
161
+ {
162
+ os: "ios",
163
+ os_version: "15",
164
+ device: "iPhone 11 Pro",
165
+ realMobile: true
166
+ },
167
+ {
168
+ os: "ios",
169
+ os_version: "15",
170
+ device: "iPhone 11",
171
+ realMobile: true
172
+ },
173
+ {
174
+ os: "ios",
175
+ os_version: "14",
176
+ device: "iPhone XS",
177
+ realMobile: true
178
+ },
179
+ {
180
+ os: "ios",
181
+ os_version: "14",
182
+ device: "iPhone 12 Pro Max",
183
+ realMobile: true
184
+ },
185
+ {
186
+ os: "ios",
187
+ os_version: "14",
188
+ device: "iPhone 12 Pro",
189
+ realMobile: true
190
+ },
191
+ {
192
+ os: "ios",
193
+ os_version: "14",
194
+ device: "iPhone 12 Mini",
195
+ realMobile: true
196
+ },
197
+ {
198
+ os: "ios",
199
+ os_version: "14",
200
+ device: "iPhone 12",
201
+ realMobile: true
202
+ },
203
+ {
204
+ os: "ios",
205
+ os_version: "14",
206
+ device: "iPhone 11 Pro Max",
207
+ realMobile: true
208
+ },
209
+ {
210
+ os: "ios",
211
+ os_version: "14",
212
+ device: "iPhone 11",
213
+ realMobile: true
214
+ },
215
+ {
216
+ os: "ios",
217
+ os_version: "13",
218
+ device: "iPhone XS",
219
+ realMobile: true
220
+ },
221
+ {
222
+ os: "ios",
223
+ os_version: "13",
224
+ device: "iPhone 11 Pro Max",
225
+ realMobile: true
226
+ },
227
+ {
228
+ os: "ios",
229
+ os_version: "13",
230
+ device: "iPhone 11 Pro",
231
+ realMobile: true
232
+ },
233
+ {
234
+ os: "ios",
235
+ os_version: "13",
236
+ device: "iPhone 11",
237
+ realMobile: true
238
+ },
239
+ {
240
+ os: "ios",
241
+ os_version: "12",
242
+ device: "iPhone XS",
243
+ realMobile: true
244
+ },
245
+ {
246
+ os: "ios",
247
+ os_version: "12",
248
+ device: "iPhone XS Max",
249
+ realMobile: true
250
+ },
251
+ {
252
+ os: "ios",
253
+ os_version: "15",
254
+ device: "iPhone XR",
255
+ realMobile: true
256
+ },
257
+ {
258
+ os: "ios",
259
+ os_version: "12",
260
+ device: "iPhone XR",
261
+ realMobile: true
262
+ },
263
+ {
264
+ os: "ios",
265
+ os_version: "11",
266
+ device: "iPhone X",
267
+ realMobile: true
268
+ },
269
+ {
270
+ os: "ios",
271
+ os_version: "15",
272
+ device: "iPhone 8",
273
+ realMobile: true
274
+ },
275
+ {
276
+ os: "ios",
277
+ os_version: "13",
278
+ device: "iPhone 8",
279
+ realMobile: true
280
+ },
281
+ {
282
+ os: "ios",
283
+ os_version: "12",
284
+ device: "iPhone 8",
285
+ realMobile: true
286
+ },
287
+ {
288
+ os: "ios",
289
+ os_version: "11",
290
+ device: "iPhone 8",
291
+ realMobile: true
292
+ },
293
+ {
294
+ os: "ios",
295
+ os_version: "12",
296
+ device: "iPhone 8 Plus",
297
+ realMobile: true
298
+ },
299
+ {
300
+ os: "ios",
301
+ os_version: "11",
302
+ device: "iPhone 8 Plus",
303
+ realMobile: true
304
+ },
305
+ {
306
+ os: "ios",
307
+ os_version: "12",
308
+ device: "iPhone 7",
309
+ realMobile: true
310
+ },
311
+ {
312
+ os: "ios",
313
+ os_version: "10",
314
+ device: "iPhone 7",
315
+ realMobile: true
316
+ },
317
+ {
318
+ os: "ios",
319
+ os_version: "12",
320
+ device: "iPhone 6S",
321
+ realMobile: true
322
+ },
323
+ {
324
+ os: "ios",
325
+ os_version: "11",
326
+ device: "iPhone 6S",
327
+ realMobile: true
328
+ },
329
+ {
330
+ os: "ios",
331
+ os_version: "11",
332
+ device: "iPhone 6S Plus",
333
+ realMobile: true
334
+ },
335
+ {
336
+ os: "ios",
337
+ os_version: "11",
338
+ device: "iPhone 6",
339
+ realMobile: true
340
+ },
341
+ {
342
+ os: "ios",
343
+ os_version: "15",
344
+ device: "iPhone SE 2022",
345
+ realMobile: true
346
+ },
347
+ {
348
+ os: "ios",
349
+ os_version: "13",
350
+ device: "iPhone SE 2020",
351
+ realMobile: true
352
+ },
353
+ {
354
+ os: "ios",
355
+ os_version: "11",
356
+ device: "iPhone SE",
357
+ realMobile: true
358
+ },
359
+ {
360
+ os: "ios",
361
+ os_version: "14",
362
+ device: "iPad Air 4",
363
+ realMobile: true
364
+ },
365
+ {
366
+ os: "ios",
367
+ os_version: "15",
368
+ device: "iPad 9th",
369
+ realMobile: true
370
+ },
371
+ {
372
+ os: "ios",
373
+ os_version: "16",
374
+ device: "iPad Pro 12.9 2022",
375
+ realMobile: true
376
+ },
377
+ {
378
+ os: "ios",
379
+ os_version: "16",
380
+ device: "iPad Pro 12.9 2020",
381
+ realMobile: true
382
+ },
383
+ {
384
+ os: "ios",
385
+ os_version: "16",
386
+ device: "iPad Pro 11 2022",
387
+ realMobile: true
388
+ },
389
+ {
390
+ os: "ios",
391
+ os_version: "16",
392
+ device: "iPad 10th",
393
+ realMobile: true
394
+ },
395
+ {
396
+ os: "ios",
397
+ os_version: "15",
398
+ device: "iPad Air 5",
399
+ realMobile: true
400
+ },
401
+ {
402
+ os: "ios",
403
+ os_version: "14",
404
+ device: "iPad Pro 12.9 2021",
405
+ realMobile: true
406
+ },
407
+ {
408
+ os: "ios",
409
+ os_version: "14",
410
+ device: "iPad Pro 12.9 2020",
411
+ realMobile: true
412
+ },
413
+ {
414
+ os: "ios",
415
+ os_version: "14",
416
+ device: "iPad Pro 11 2021",
417
+ realMobile: true
418
+ },
419
+ {
420
+ os: "ios",
421
+ os_version: "13",
422
+ device: "iPad Pro 12.9 2020",
423
+ realMobile: true
424
+ },
425
+ {
426
+ os: "ios",
427
+ os_version: "16",
428
+ device: "iPad 8th",
429
+ realMobile: true
430
+ },
431
+ {
432
+ os: "ios",
433
+ os_version: "15",
434
+ device: "iPad Pro 12.9 2018",
435
+ realMobile: true
436
+ },
437
+ {
438
+ os: "ios",
439
+ os_version: "15",
440
+ device: "iPad Mini 2021",
441
+ realMobile: true
442
+ },
443
+ {
444
+ os: "ios",
445
+ os_version: "14",
446
+ device: "iPad 8th",
447
+ realMobile: true
448
+ },
449
+ {
450
+ os: "ios",
451
+ os_version: "13",
452
+ device: "iPad Pro 12.9 2018",
453
+ realMobile: true
454
+ },
455
+ {
456
+ os: "ios",
457
+ os_version: "13",
458
+ device: "iPad Pro 11 2020",
459
+ realMobile: true
460
+ },
461
+ {
462
+ os: "ios",
463
+ os_version: "13",
464
+ device: "iPad Mini 2019",
465
+ realMobile: true
466
+ },
467
+ {
468
+ os: "ios",
469
+ os_version: "13",
470
+ device: "iPad Air 2019",
471
+ realMobile: true
472
+ },
473
+ {
474
+ os: "ios",
475
+ os_version: "13",
476
+ device: "iPad 7th",
477
+ realMobile: true
478
+ },
479
+ {
480
+ os: "ios",
481
+ os_version: "12",
482
+ device: "iPad Pro 12.9 2018",
483
+ realMobile: true
484
+ },
485
+ {
486
+ os: "ios",
487
+ os_version: "12",
488
+ device: "iPad Pro 11 2018",
489
+ realMobile: true
490
+ },
491
+ {
492
+ os: "ios",
493
+ os_version: "12",
494
+ device: "iPad Mini 2019",
495
+ realMobile: true
496
+ },
497
+ {
498
+ os: "ios",
499
+ os_version: "12",
500
+ device: "iPad Air 2019",
501
+ realMobile: true
502
+ },
503
+ {
504
+ os: "ios",
505
+ os_version: "11",
506
+ device: "iPad Pro 9.7 2016",
507
+ realMobile: true
508
+ },
509
+ {
510
+ os: "ios",
511
+ os_version: "11",
512
+ device: "iPad Pro 12.9 2017",
513
+ realMobile: true
514
+ },
515
+ {
516
+ os: "ios",
517
+ os_version: "11",
518
+ device: "iPad Mini 4",
519
+ realMobile: true
520
+ },
521
+ {
522
+ os: "ios",
523
+ os_version: "11",
524
+ device: "iPad 6th",
525
+ realMobile: true
526
+ },
527
+ {
528
+ os: "ios",
529
+ os_version: "11",
530
+ device: "iPad 5th",
531
+ realMobile: true
532
+ },
533
+ {
534
+ os: "android",
535
+ os_version: "12.0",
536
+ device: "Samsung Galaxy S22 Ultra",
537
+ realMobile: true
538
+ },
539
+ {
540
+ os: "android",
541
+ os_version: "12.0",
542
+ device: "Samsung Galaxy S22 Plus",
543
+ realMobile: true
544
+ },
545
+ {
546
+ os: "android",
547
+ os_version: "12.0",
548
+ device: "Samsung Galaxy S22",
549
+ realMobile: true
550
+ },
551
+ {
552
+ os: "android",
553
+ os_version: "12.0",
554
+ device: "Samsung Galaxy S21",
555
+ realMobile: true
556
+ },
557
+ {
558
+ os: "android",
559
+ os_version: "11.0",
560
+ device: "Samsung Galaxy S21 Ultra",
561
+ realMobile: true
562
+ },
563
+ {
564
+ os: "android",
565
+ os_version: "11.0",
566
+ device: "Samsung Galaxy S21",
567
+ realMobile: true
568
+ },
569
+ {
570
+ os: "android",
571
+ os_version: "11.0",
572
+ device: "Samsung Galaxy S21 Plus",
573
+ realMobile: true
574
+ },
575
+ {
576
+ os: "android",
577
+ os_version: "10.0",
578
+ device: "Samsung Galaxy S20",
579
+ realMobile: true
580
+ },
581
+ {
582
+ os: "android",
583
+ os_version: "10.0",
584
+ device: "Samsung Galaxy S20 Plus",
585
+ realMobile: true
586
+ },
587
+ {
588
+ os: "android",
589
+ os_version: "10.0",
590
+ device: "Samsung Galaxy S20 Ultra",
591
+ realMobile: true
592
+ },
593
+ {
594
+ os: "android",
595
+ os_version: "11.0",
596
+ device: "Samsung Galaxy M52",
597
+ realMobile: true
598
+ },
599
+ {
600
+ os: "android",
601
+ os_version: "11.0",
602
+ device: "Samsung Galaxy M32",
603
+ realMobile: true
604
+ },
605
+ {
606
+ os: "android",
607
+ os_version: "11.0",
608
+ device: "Samsung Galaxy A52",
609
+ realMobile: true
610
+ },
611
+ {
612
+ os: "android",
613
+ os_version: "10.0",
614
+ device: "Samsung Galaxy Note 20 Ultra",
615
+ realMobile: true
616
+ },
617
+ {
618
+ os: "android",
619
+ os_version: "10.0",
620
+ device: "Samsung Galaxy Note 20",
621
+ realMobile: true
622
+ },
623
+ {
624
+ os: "android",
625
+ os_version: "10.0",
626
+ device: "Samsung Galaxy A51",
627
+ realMobile: true
628
+ },
629
+ {
630
+ os: "android",
631
+ os_version: "10.0",
632
+ device: "Samsung Galaxy A11",
633
+ realMobile: true
634
+ },
635
+ {
636
+ os: "android",
637
+ os_version: "9.0",
638
+ device: "Samsung Galaxy S9 Plus",
639
+ realMobile: true
640
+ },
641
+ {
642
+ os: "android",
643
+ os_version: "9.0",
644
+ device: "Samsung Galaxy S10e",
645
+ realMobile: true
646
+ },
647
+ {
648
+ os: "android",
649
+ os_version: "9.0",
650
+ device: "Samsung Galaxy S10 Plus",
651
+ realMobile: true
652
+ },
653
+ {
654
+ os: "android",
655
+ os_version: "9.0",
656
+ device: "Samsung Galaxy S10",
657
+ realMobile: true
658
+ },
659
+ {
660
+ os: "android",
661
+ os_version: "9.0",
662
+ device: "Samsung Galaxy Note 10 Plus",
663
+ realMobile: true
664
+ },
665
+ {
666
+ os: "android",
667
+ os_version: "9.0",
668
+ device: "Samsung Galaxy Note 10",
669
+ realMobile: true
670
+ },
671
+ {
672
+ os: "android",
673
+ os_version: "9.0",
674
+ device: "Samsung Galaxy A10",
675
+ realMobile: true
676
+ },
677
+ {
678
+ os: "android",
679
+ os_version: "8.1",
680
+ device: "Samsung Galaxy Note 9",
681
+ realMobile: true
682
+ },
683
+ {
684
+ os: "android",
685
+ os_version: "8.1",
686
+ device: "Samsung Galaxy J7 Prime",
687
+ realMobile: true
688
+ },
689
+ {
690
+ os: "android",
691
+ os_version: "8.0",
692
+ device: "Samsung Galaxy S9 Plus",
693
+ realMobile: true
694
+ },
695
+ {
696
+ os: "android",
697
+ os_version: "8.0",
698
+ device: "Samsung Galaxy S9",
699
+ realMobile: true
700
+ },
701
+ {
702
+ os: "android",
703
+ os_version: "7.1",
704
+ device: "Samsung Galaxy Note 8",
705
+ realMobile: true
706
+ },
707
+ {
708
+ os: "android",
709
+ os_version: "7.1",
710
+ device: "Samsung Galaxy A8",
711
+ realMobile: true
712
+ },
713
+ {
714
+ os: "android",
715
+ os_version: "7.0",
716
+ device: "Samsung Galaxy S8 Plus",
717
+ realMobile: true
718
+ },
719
+ {
720
+ os: "android",
721
+ os_version: "7.0",
722
+ device: "Samsung Galaxy S8",
723
+ realMobile: true
724
+ },
725
+ {
726
+ os: "android",
727
+ os_version: "6.0",
728
+ device: "Samsung Galaxy S7",
729
+ realMobile: true
730
+ },
731
+ {
732
+ os: "android",
733
+ os_version: "5.0",
734
+ device: "Samsung Galaxy S6",
735
+ realMobile: true
736
+ },
737
+ {
738
+ os: "android",
739
+ os_version: "13.0",
740
+ device: "Google Pixel 7 Pro",
741
+ realMobile: true
742
+ },
743
+ {
744
+ os: "android",
745
+ os_version: "13.0",
746
+ device: "Google Pixel 7",
747
+ realMobile: true
748
+ },
749
+ {
750
+ os: "android",
751
+ os_version: "13.0",
752
+ device: "Google Pixel 6 Pro",
753
+ realMobile: true
754
+ },
755
+ {
756
+ os: "android",
757
+ os_version: "12.0",
758
+ device: "Google Pixel 6 Pro",
759
+ realMobile: true
760
+ },
761
+ {
762
+ os: "android",
763
+ os_version: "12.0",
764
+ device: "Google Pixel 6",
765
+ realMobile: true
766
+ },
767
+ {
768
+ os: "android",
769
+ os_version: "12.0",
770
+ device: "Google Pixel 5",
771
+ realMobile: true
772
+ },
773
+ {
774
+ os: "android",
775
+ os_version: "11.0",
776
+ device: "Google Pixel 5",
777
+ realMobile: true
778
+ },
779
+ {
780
+ os: "android",
781
+ os_version: "11.0",
782
+ device: "Google Pixel 4",
783
+ realMobile: true
784
+ },
785
+ {
786
+ os: "android",
787
+ os_version: "10.0",
788
+ device: "Google Pixel 4 XL",
789
+ realMobile: true
790
+ },
791
+ {
792
+ os: "android",
793
+ os_version: "10.0",
794
+ device: "Google Pixel 4",
795
+ realMobile: true
796
+ },
797
+ {
798
+ os: "android",
799
+ os_version: "10.0",
800
+ device: "Google Pixel 3",
801
+ realMobile: true
802
+ },
803
+ {
804
+ os: "android",
805
+ os_version: "9.0",
806
+ device: "Google Pixel 3a XL",
807
+ realMobile: true
808
+ },
809
+ {
810
+ os: "android",
811
+ os_version: "9.0",
812
+ device: "Google Pixel 3a",
813
+ realMobile: true
814
+ },
815
+ {
816
+ os: "android",
817
+ os_version: "9.0",
818
+ device: "Google Pixel 3 XL",
819
+ realMobile: true
820
+ },
821
+ {
822
+ os: "android",
823
+ os_version: "9.0",
824
+ device: "Google Pixel 3",
825
+ realMobile: true
826
+ },
827
+ {
828
+ os: "android",
829
+ os_version: "9.0",
830
+ device: "Google Pixel 2",
831
+ realMobile: true
832
+ },
833
+ {
834
+ os: "android",
835
+ os_version: "8.0",
836
+ device: "Google Pixel 2",
837
+ realMobile: true
838
+ },
839
+ {
840
+ os: "android",
841
+ os_version: "7.1",
842
+ device: "Google Pixel",
843
+ realMobile: true
844
+ },
845
+ {
846
+ os: "android",
847
+ os_version: "6.0",
848
+ device: "Google Nexus 6",
849
+ realMobile: true
850
+ },
851
+ {
852
+ os: "android",
853
+ os_version: "4.4",
854
+ device: "Google Nexus 5",
855
+ realMobile: true
856
+ },
857
+ {
858
+ os: "android",
859
+ os_version: "11.0",
860
+ device: "OnePlus 9",
861
+ realMobile: true
862
+ },
863
+ {
864
+ os: "android",
865
+ os_version: "10.0",
866
+ device: "OnePlus 8",
867
+ realMobile: true
868
+ },
869
+ {
870
+ os: "android",
871
+ os_version: "10.0",
872
+ device: "OnePlus 7T",
873
+ realMobile: true
874
+ },
875
+ {
876
+ os: "android",
877
+ os_version: "9.0",
878
+ device: "OnePlus 7",
879
+ realMobile: true
880
+ },
881
+ {
882
+ os: "android",
883
+ os_version: "9.0",
884
+ device: "OnePlus 6T",
885
+ realMobile: true
886
+ },
887
+ {
888
+ os: "android",
889
+ os_version: "11.0",
890
+ device: "Xiaomi Redmi Note 11",
891
+ realMobile: true
892
+ },
893
+ {
894
+ os: "android",
895
+ os_version: "10.0",
896
+ device: "Xiaomi Redmi Note 9",
897
+ realMobile: true
898
+ },
899
+ {
900
+ os: "android",
901
+ os_version: "9.0",
902
+ device: "Xiaomi Redmi Note 8",
903
+ realMobile: true
904
+ },
905
+ {
906
+ os: "android",
907
+ os_version: "9.0",
908
+ device: "Xiaomi Redmi Note 7",
909
+ realMobile: true
910
+ },
911
+ {
912
+ os: "android",
913
+ os_version: "11.0",
914
+ device: "Vivo Y21",
915
+ realMobile: true
916
+ },
917
+ {
918
+ os: "android",
919
+ os_version: "11.0",
920
+ device: "Vivo V21",
921
+ realMobile: true
922
+ },
923
+ {
924
+ os: "android",
925
+ os_version: "10.0",
926
+ device: "Vivo Y50",
927
+ realMobile: true
928
+ },
929
+ {
930
+ os: "android",
931
+ os_version: "11.0",
932
+ device: "Oppo Reno 6",
933
+ realMobile: true
934
+ },
935
+ {
936
+ os: "android",
937
+ os_version: "11.0",
938
+ device: "Oppo A96",
939
+ realMobile: true
940
+ },
941
+ {
942
+ os: "android",
943
+ os_version: "10.0",
944
+ device: "Oppo Reno 3 Pro",
945
+ realMobile: true
946
+ },
947
+ {
948
+ os: "android",
949
+ os_version: "11.0",
950
+ device: "Motorola Moto G71 5G",
951
+ realMobile: true
952
+ },
953
+ {
954
+ os: "android",
955
+ os_version: "10.0",
956
+ device: "Motorola Moto G9 Play",
957
+ realMobile: true
958
+ },
959
+ {
960
+ os: "android",
961
+ os_version: "9.0",
962
+ device: "Motorola Moto G7 Play",
963
+ realMobile: true
964
+ },
965
+ {
966
+ os: "android",
967
+ os_version: "9.0",
968
+ device: "Huawei P30",
969
+ realMobile: true
970
+ },
971
+ {
972
+ os: "android",
973
+ os_version: "12.0",
974
+ device: "Samsung Galaxy Tab S8",
975
+ realMobile: true
976
+ },
977
+ {
978
+ os: "android",
979
+ os_version: "11.0",
980
+ device: "Samsung Galaxy Tab S7",
981
+ realMobile: true
982
+ },
983
+ {
984
+ os: "android",
985
+ os_version: "10.0",
986
+ device: "Samsung Galaxy Tab S7",
987
+ realMobile: true
988
+ },
989
+ {
990
+ os: "android",
991
+ os_version: "9.0",
992
+ device: "Samsung Galaxy Tab S6",
993
+ realMobile: true
994
+ },
995
+ {
996
+ os: "android",
997
+ os_version: "9.0",
998
+ device: "Samsung Galaxy Tab S5e",
999
+ realMobile: true
1000
+ },
1001
+ {
1002
+ os: "android",
1003
+ os_version: "8.1",
1004
+ device: "Samsung Galaxy Tab S4",
1005
+ realMobile: true
1006
+ }
1007
+ ];
1008
+
1009
+ // src/server/config.ts
1010
+ var customDevicesPath = "./server/data/custom_devices.json";
1011
+ var logsFolder = "./logs";
1012
+ import_dotenv2.default.config();
1013
+ var config = {
1014
+ version,
1015
+ // this isn't used
1016
+ getDevices: async () => {
1017
+ if (import_fs.default.existsSync(customDevicesPath)) {
1018
+ return [...devices_default, ...(await import(customDevicesPath)).default];
1019
+ }
1020
+ return devices_default;
1021
+ },
1022
+ defaultImagesPath: env.SYNGRISI_IMAGES_PATH,
1023
+ connectionString: env.SYNGRISI_DB_URI || "mongodb://127.0.0.1:27017/SyngrisiDb",
1024
+ host: env.SYNGRISI_HOSTNAME,
1025
+ port: env.SYNGRISI_APP_PORT || 3e3,
1026
+ backupsFolder: "./backups",
1027
+ enableHttpLogger: env.SYNGRISI_HTTP_LOG,
1028
+ httpLoggerFilePath: `${logsFolder}/http.log`,
1029
+ storeSessionKey: env.SYNGRISI_SESSION_STORE_KEY || import_crypto2.default.randomBytes(64).toString("hex"),
1030
+ codeCoverage: env.SYNGRISI_COVERAGE,
1031
+ disableCors: env.SYNGRISI_DISABLE_DEV_CORS,
1032
+ fileUploadMaxSize: 50 * 1024 * 1024,
1033
+ testMode: env.SYNGRISI_TEST_MODE,
1034
+ jsonLimit: "50mb",
1035
+ tmpDir: env.SYNGRISI_TMP_DIR,
1036
+ helmet: {
1037
+ crossOriginEmbedderPolicy: !env.SYNGRISI_DISABLE_DEV_CORS,
1038
+ crossOriginResourcePolicy: !env.SYNGRISI_DISABLE_DEV_CORS,
1039
+ contentSecurityPolicy: {
1040
+ directives: {
1041
+ frameAncestors: ["'self'", "vscode-webview:", "vscode-resource:", "https:", "http:"],
1042
+ frameSrc: ["'self'", "vscode-webview:", "https:", "http:"],
1043
+ scriptSrc: ["'self'", "'unsafe-inline'"],
1044
+ styleSrc: ["'self'", "'unsafe-inline'"]
1045
+ }
1046
+ }
1047
+ }
1048
+ };
1049
+ if (!import_fs.default.existsSync(config.defaultImagesPath)) {
1050
+ import_fs.default.mkdirSync(config.defaultImagesPath, { recursive: true });
1051
+ }
1052
+ if (!import_fs.default.existsSync(logsFolder)) {
1053
+ import_fs.default.mkdirSync(logsFolder, { recursive: true });
1054
+ }
1055
+
1056
+ // src/server/middlewares/disableCors.ts
1057
+ var disableCors = (req, res, next) => {
1058
+ if (!config.disableCors) return next();
1059
+ res.setHeader("Access-Control-Allow-Origin", "*");
1060
+ res.setHeader("X-Frame-Options", "ALLOWALL");
1061
+ res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
1062
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, PATCH, DELETE");
1063
+ res.setHeader("Access-Control-Allow-Headers", "X-Requested-With,content-type");
1064
+ res.setHeader("Access-Control-Allow-Credentials", "true");
1065
+ if (req.method === "OPTIONS") {
1066
+ res.status(200).end();
1067
+ return;
1068
+ }
1069
+ return next();
1070
+ };
1071
+
1072
+ // src/server/middlewares/authorization.ts
1073
+ var import_http_status = __toESM(require("http-status"));
1074
+
1075
+ // src/server/utils/catchAsync.ts
1076
+ var catchAsync = (fn) => (req, res, next) => {
1077
+ Promise.resolve(fn(req, res, next)).catch((err) => {
1078
+ return next(err);
1079
+ });
1080
+ };
1081
+ var catchAsync_default = catchAsync;
1082
+
1083
+ // src/server/utils/ApiError.ts
1084
+ var ApiError = class extends Error {
1085
+ constructor(statusCode, message, isOperational = true, stack = "") {
1086
+ super(message);
1087
+ this.statusCode = statusCode;
1088
+ this.isOperational = isOperational;
1089
+ if (stack) {
1090
+ this.stack = stack;
1091
+ } else {
1092
+ Error.captureStackTrace(this, this.constructor);
1093
+ }
1094
+ }
1095
+ };
1096
+ var ApiError_default = ApiError;
1097
+
1098
+ // src/server/utils/deserializeIfJSON.ts
1099
+ var import_bson = require("bson");
1100
+
1101
+ // src/server/models/Check.model.ts
1102
+ var import_mongoose = __toESM(require("mongoose"));
1103
+
1104
+ // src/server/models/plugins/paginate.plugin.ts
1105
+ var paginate = (schema) => {
1106
+ schema.statics.paginate = async function(filter, options) {
1107
+ let sort;
1108
+ if (options.sortBy) {
1109
+ const sortingCriteria = [];
1110
+ options.sortBy.split(",").forEach((sortOption) => {
1111
+ const [key, order] = sortOption.split(":");
1112
+ sortingCriteria.push((order === "desc" ? "-" : "") + key);
1113
+ });
1114
+ sort = sortingCriteria.join(" ");
1115
+ } else {
1116
+ sort = { _id: -1 };
1117
+ }
1118
+ const limit = options.limit && parseInt(options.limit.toString(), 10) >= 0 ? parseInt(options.limit.toString(), 10) : 10;
1119
+ const page = options.page && parseInt(options.page.toString(), 10) > 0 ? parseInt(options.page.toString(), 10) : 1;
1120
+ const skip = (page - 1) * limit;
1121
+ const countPromise = this.countDocuments(filter).exec();
1122
+ let docsPromise = this.find(filter).sort(sort).skip(skip).limit(limit);
1123
+ if (options.populate) {
1124
+ options.populate.split(",").forEach((populateOption) => {
1125
+ docsPromise = docsPromise.populate(
1126
+ populateOption.split(".").reverse().reduce((a, b) => ({ path: b, populate: a }))
1127
+ );
1128
+ });
1129
+ }
1130
+ docsPromise = docsPromise.exec();
1131
+ return Promise.all([countPromise, docsPromise]).then((values) => {
1132
+ const [totalResults, results] = values;
1133
+ const totalPages = Math.ceil(totalResults / limit);
1134
+ const result = {
1135
+ results,
1136
+ page,
1137
+ limit,
1138
+ totalPages,
1139
+ totalResults,
1140
+ timestamp: Number(Date.now() + String(process.hrtime()[1]).slice(3, 6))
1141
+ };
1142
+ return Promise.resolve(result);
1143
+ });
1144
+ };
1145
+ };
1146
+ var paginate_plugin_default = paginate;
1147
+
1148
+ // src/server/models/plugins/toJSON.plugin.ts
1149
+ var deleteAtPath = (obj, path3, index) => {
1150
+ if (index === path3.length - 1) {
1151
+ delete obj[path3[index]];
1152
+ return;
1153
+ }
1154
+ deleteAtPath(obj[path3[index]], path3, index + 1);
1155
+ };
1156
+ var toJSON = (schema) => {
1157
+ let transform;
1158
+ if (schema.options.toJSON && schema.options.toJSON.transform) {
1159
+ transform = schema.options.toJSON.transform;
1160
+ }
1161
+ schema.options.toJSON = Object.assign(schema.options.toJSON || {}, {
1162
+ transform(doc, ret, options) {
1163
+ Object.keys(schema.paths).forEach((path3) => {
1164
+ if (schema.paths[path3].options && schema.paths[path3].options.private) {
1165
+ deleteAtPath(ret, path3.split("."), 0);
1166
+ }
1167
+ });
1168
+ ret.id = ret._id.toString();
1169
+ delete ret.__v;
1170
+ delete ret.createdAt;
1171
+ delete ret.updatedAt;
1172
+ if (transform) {
1173
+ return transform(doc, ret, options);
1174
+ }
1175
+ }
1176
+ });
1177
+ };
1178
+ var toJSON_plugin_default = toJSON;
1179
+
1180
+ // src/server/models/plugins/paginateDistinct.plugin.ts
1181
+ var import_bson2 = require("bson");
1182
+ var paginateDistinct = (schema) => {
1183
+ schema.statics.paginateDistinct = async function(filter, options) {
1184
+ let sort;
1185
+ if (options.sortBy) {
1186
+ options.sortBy.split(",").forEach((sortOption) => {
1187
+ const [key, order] = sortOption.split(":");
1188
+ sort[key] = order === "desc" ? -1 : 1;
1189
+ });
1190
+ } else {
1191
+ sort = { _id: -1 };
1192
+ }
1193
+ let limit = options.limit && parseInt(options.limit.toString(), 10) >= 0 ? parseInt(options.limit.toString(), 10) : 10;
1194
+ limit = limit === 0 ? 9007199254740991 : limit;
1195
+ const page = options.page && parseInt(options.page.toString(), 10) > 0 ? parseInt(options.page.toString(), 10) : 1;
1196
+ const skip = (page - 1) * limit;
1197
+ const groupAggregateObj = { $group: { _id: `$${options.field}` } };
1198
+ const documentsCount = (await this.aggregate([groupAggregateObj]).exec()).length;
1199
+ const aggregateArr = [
1200
+ { $match: import_bson2.EJSON.parse(filter.filter || "{}") },
1201
+ groupAggregateObj,
1202
+ { $sort: sort },
1203
+ { $skip: skip },
1204
+ { $limit: limit }
1205
+ ];
1206
+ const aggregatedDocs = (await this.aggregate(aggregateArr)).filter((x) => x._id).map((x) => {
1207
+ if (x[options.field]) {
1208
+ return x[options.field][0];
1209
+ }
1210
+ return { name: x._id };
1211
+ });
1212
+ return Promise.all([documentsCount, aggregatedDocs]).then((values) => {
1213
+ const [totalResults, results] = values;
1214
+ const totalPages = Math.ceil(totalResults / limit);
1215
+ const result = {
1216
+ results,
1217
+ page,
1218
+ limit,
1219
+ totalPages,
1220
+ totalResults,
1221
+ timestamp: (/* @__PURE__ */ new Date()).getTime()
1222
+ };
1223
+ return Promise.resolve(result);
1224
+ });
1225
+ };
1226
+ };
1227
+ var paginateDistinct_plugin_default = paginateDistinct;
1228
+
1229
+ // src/server/models/Check.model.ts
1230
+ var CheckSchema = new import_mongoose.Schema({
1231
+ name: {
1232
+ type: String,
1233
+ required: [true, 'CheckSchema: The "name" field must be required']
1234
+ },
1235
+ test: {
1236
+ type: import_mongoose.Schema.Types.ObjectId,
1237
+ ref: "VRSTest",
1238
+ required: [true, 'CheckSchema: The "test" field must be required']
1239
+ },
1240
+ suite: {
1241
+ type: import_mongoose.Schema.Types.ObjectId,
1242
+ ref: "VRSSuite",
1243
+ required: [true, 'CheckSchema: The "suite" field must be required']
1244
+ },
1245
+ app: {
1246
+ type: import_mongoose.Schema.Types.ObjectId,
1247
+ ref: "VRSApp",
1248
+ required: [true, 'CheckSchema: The "app" field must be required']
1249
+ },
1250
+ branch: {
1251
+ type: String
1252
+ },
1253
+ realBaselineId: {
1254
+ type: import_mongoose.Schema.Types.ObjectId,
1255
+ ref: "VRSBaseline"
1256
+ },
1257
+ baselineId: {
1258
+ type: import_mongoose.Schema.Types.ObjectId,
1259
+ ref: "VRSSnapshot"
1260
+ },
1261
+ actualSnapshotId: {
1262
+ type: import_mongoose.Schema.Types.ObjectId,
1263
+ ref: "VRSSnapshot"
1264
+ },
1265
+ diffId: {
1266
+ type: import_mongoose.Schema.Types.ObjectId,
1267
+ ref: "VRSSnapshot"
1268
+ },
1269
+ createdDate: {
1270
+ type: Date,
1271
+ required: true,
1272
+ default: Date.now
1273
+ },
1274
+ updatedDate: {
1275
+ type: Date
1276
+ },
1277
+ status: {
1278
+ type: [{
1279
+ type: String,
1280
+ enum: {
1281
+ values: ["new", "pending", "approved", "running", "passed", "failed", "aborted"],
1282
+ message: "status is required"
1283
+ }
1284
+ }],
1285
+ default: ["new"]
1286
+ },
1287
+ browserName: {
1288
+ type: String
1289
+ },
1290
+ browserVersion: {
1291
+ type: String
1292
+ },
1293
+ browserFullVersion: {
1294
+ type: String
1295
+ },
1296
+ viewport: {
1297
+ type: String
1298
+ },
1299
+ os: {
1300
+ type: String
1301
+ },
1302
+ domDump: {
1303
+ type: String
1304
+ },
1305
+ result: {
1306
+ type: String,
1307
+ default: "{}"
1308
+ },
1309
+ run: {
1310
+ type: import_mongoose.Schema.Types.ObjectId
1311
+ },
1312
+ markedAs: {
1313
+ type: String,
1314
+ enum: ["bug", "accepted"]
1315
+ },
1316
+ markedDate: {
1317
+ type: Date
1318
+ },
1319
+ markedById: {
1320
+ type: import_mongoose.Schema.Types.ObjectId,
1321
+ ref: "VRSUser"
1322
+ },
1323
+ markedByUsername: {
1324
+ type: String
1325
+ },
1326
+ markedBugComment: {
1327
+ type: String
1328
+ },
1329
+ creatorId: {
1330
+ type: import_mongoose.Schema.Types.ObjectId,
1331
+ ref: "VRSUser"
1332
+ },
1333
+ creatorUsername: {
1334
+ type: String
1335
+ },
1336
+ failReasons: {
1337
+ type: [String]
1338
+ },
1339
+ vOffset: {
1340
+ type: String
1341
+ },
1342
+ topStablePixels: {
1343
+ type: String
1344
+ },
1345
+ meta: {
1346
+ type: Object
1347
+ }
1348
+ });
1349
+ CheckSchema.plugin(toJSON_plugin_default);
1350
+ CheckSchema.plugin(paginate_plugin_default);
1351
+ var Check = import_mongoose.default.model("VRSCheck", CheckSchema);
1352
+
1353
+ // src/server/models/Log.model.ts
1354
+ var import_mongoose2 = __toESM(require("mongoose"));
1355
+ var LogSchema = new import_mongoose2.Schema({
1356
+ timestamp: {
1357
+ type: Date
1358
+ },
1359
+ level: {
1360
+ type: String
1361
+ },
1362
+ message: {
1363
+ type: String
1364
+ },
1365
+ meta: {
1366
+ type: Object
1367
+ },
1368
+ hostname: {
1369
+ type: Object
1370
+ }
1371
+ });
1372
+ LogSchema.plugin(toJSON_plugin_default);
1373
+ LogSchema.plugin(paginate_plugin_default);
1374
+ var Log = import_mongoose2.default.model("VRSLog", LogSchema);
1375
+
1376
+ // src/server/models/App.model.ts
1377
+ var import_mongoose3 = __toESM(require("mongoose"));
1378
+ var AppSchema = new import_mongoose3.Schema({
1379
+ name: {
1380
+ type: String,
1381
+ default: "Others",
1382
+ unique: true,
1383
+ required: [true, 'AppSchema: The "name" field must be required']
1384
+ },
1385
+ description: {
1386
+ type: String
1387
+ },
1388
+ version: {
1389
+ type: String
1390
+ },
1391
+ updatedDate: {
1392
+ type: Date
1393
+ },
1394
+ createdDate: {
1395
+ type: Date
1396
+ },
1397
+ meta: {
1398
+ type: Object
1399
+ }
1400
+ });
1401
+ AppSchema.plugin(paginate_plugin_default);
1402
+ AppSchema.plugin(toJSON_plugin_default);
1403
+ var App = import_mongoose3.default.model("VRSApp", AppSchema);
1404
+
1405
+ // src/server/models/Snapshot.model.ts
1406
+ var import_mongoose4 = __toESM(require("mongoose"));
1407
+ var SnapshotSchema = new import_mongoose4.Schema({
1408
+ name: {
1409
+ type: String,
1410
+ required: [true, 'SnapshotSchema: The "name" field must be required']
1411
+ },
1412
+ path: {
1413
+ type: String
1414
+ },
1415
+ filename: {
1416
+ type: String
1417
+ },
1418
+ imghash: {
1419
+ type: String,
1420
+ required: [true, 'SnapshotSchema: The "imghash" field must be required']
1421
+ },
1422
+ createdDate: {
1423
+ type: Date,
1424
+ default: Date.now
1425
+ },
1426
+ vOffset: {
1427
+ type: Number
1428
+ },
1429
+ hOffset: {
1430
+ type: Number
1431
+ }
1432
+ });
1433
+ SnapshotSchema.plugin(toJSON_plugin_default);
1434
+ SnapshotSchema.plugin(paginate_plugin_default);
1435
+ var Snapshot = import_mongoose4.default.model("VRSSnapshot", SnapshotSchema);
1436
+
1437
+ // src/server/models/AppSettings.model.ts
1438
+ var import_mongoose5 = __toESM(require("mongoose"));
1439
+ var AppSettingsSchema = new import_mongoose5.Schema({
1440
+ name: {
1441
+ type: String,
1442
+ unique: true,
1443
+ required: [true, 'AppSettingsSchema: The "name" field must be required']
1444
+ },
1445
+ label: {
1446
+ type: String,
1447
+ required: [true, 'AppSettingsSchema: The "label" field must be required']
1448
+ },
1449
+ description: {
1450
+ type: String
1451
+ },
1452
+ type: {
1453
+ type: String,
1454
+ required: [true, 'AppSettingsSchema: The "type" field must be required']
1455
+ },
1456
+ value: {
1457
+ type: import_mongoose5.Schema.Types.Mixed,
1458
+ required: [true, 'AppSettingsSchema: The "value" field must be required']
1459
+ },
1460
+ env_variable: {
1461
+ type: String
1462
+ },
1463
+ enabled: {
1464
+ type: Boolean
1465
+ }
1466
+ });
1467
+ AppSettingsSchema.plugin(toJSON_plugin_default);
1468
+ var AppSettings = import_mongoose5.default.model("VRSAppSettings", AppSettingsSchema);
1469
+ var AppSettings_model_default = AppSettings;
1470
+
1471
+ // src/server/models/Suite.model.ts
1472
+ var import_mongoose6 = __toESM(require("mongoose"));
1473
+ var SuiteSchema = new import_mongoose6.Schema({
1474
+ name: {
1475
+ type: String,
1476
+ default: "Others",
1477
+ unique: true,
1478
+ required: [true, 'SuiteSchema: The "name" field must be required']
1479
+ },
1480
+ tags: {
1481
+ type: [String]
1482
+ },
1483
+ app: {
1484
+ type: import_mongoose6.Schema.Types.ObjectId,
1485
+ ref: "VRSApp",
1486
+ required: [true, 'SuiteSchema: The "app" field must be required']
1487
+ },
1488
+ description: {
1489
+ type: String
1490
+ },
1491
+ updatedDate: {
1492
+ type: Date,
1493
+ default: Date.now
1494
+ },
1495
+ createdDate: {
1496
+ type: Date
1497
+ },
1498
+ meta: {
1499
+ type: Object
1500
+ }
1501
+ });
1502
+ SuiteSchema.plugin(paginate_plugin_default);
1503
+ SuiteSchema.plugin(toJSON_plugin_default);
1504
+ var Suite = import_mongoose6.default.model("VRSSuite", SuiteSchema);
1505
+
1506
+ // src/server/models/Run.model.ts
1507
+ var import_mongoose7 = __toESM(require("mongoose"));
1508
+ var RunSchema = new import_mongoose7.Schema({
1509
+ name: {
1510
+ type: String,
1511
+ required: [true, 'RunSchema: The "name" field must be required']
1512
+ },
1513
+ app: {
1514
+ type: import_mongoose7.Schema.Types.ObjectId,
1515
+ ref: "VRSApp",
1516
+ required: [true, 'RunSchema: The "app" field must be required']
1517
+ },
1518
+ ident: {
1519
+ type: String,
1520
+ unique: true,
1521
+ required: [true, 'RunSchema: The "ident" field must be required']
1522
+ },
1523
+ description: {
1524
+ type: String
1525
+ },
1526
+ updatedDate: {
1527
+ type: Date,
1528
+ default: Date.now
1529
+ },
1530
+ createdDate: {
1531
+ type: Date
1532
+ },
1533
+ parameters: {
1534
+ type: [String]
1535
+ },
1536
+ meta: {
1537
+ type: Object
1538
+ }
1539
+ });
1540
+ RunSchema.plugin(paginate_plugin_default);
1541
+ RunSchema.plugin(toJSON_plugin_default);
1542
+ var Run = import_mongoose7.default.model("VRSRun", RunSchema);
1543
+
1544
+ // src/server/models/User.model.ts
1545
+ var import_mongoose8 = __toESM(require("mongoose"));
1546
+ var import_passport_local_mongoose = __toESM(require("passport-local-mongoose"));
1547
+ var UserSchema = new import_mongoose8.Schema({
1548
+ username: {
1549
+ type: String,
1550
+ unique: true,
1551
+ required: [true, 'UserSchema: The "username" field must be required']
1552
+ },
1553
+ firstName: {
1554
+ type: String,
1555
+ required: [true, 'UserSchema: The "firstName" field must be required']
1556
+ },
1557
+ lastName: {
1558
+ type: String,
1559
+ required: [true, 'UserSchema: The "lastName" field must be required']
1560
+ },
1561
+ role: {
1562
+ type: String,
1563
+ enum: ["admin", "reviewer", "user"],
1564
+ required: [true, 'UserSchema: The "role" field must be required']
1565
+ },
1566
+ password: {
1567
+ type: String
1568
+ },
1569
+ token: {
1570
+ type: String
1571
+ },
1572
+ apiKey: {
1573
+ type: String
1574
+ },
1575
+ createdDate: {
1576
+ type: Date
1577
+ },
1578
+ updatedDate: {
1579
+ type: Date
1580
+ },
1581
+ expiration: {
1582
+ type: Date
1583
+ },
1584
+ meta: {
1585
+ type: Object
1586
+ }
1587
+ });
1588
+ UserSchema.statics.isEmailTaken = async function(username, excludeUserId) {
1589
+ const user = await this.findOne({ username, _id: { $ne: excludeUserId } });
1590
+ return !!user;
1591
+ };
1592
+ UserSchema.plugin(toJSON_plugin_default);
1593
+ UserSchema.plugin(paginate_plugin_default);
1594
+ UserSchema.plugin(import_passport_local_mongoose.default, { hashField: "password" });
1595
+ var User = import_mongoose8.default.model("VRSUser", UserSchema);
1596
+
1597
+ // src/server/models/Baseline.model.ts
1598
+ var import_mongoose9 = __toESM(require("mongoose"));
1599
+ var BaselineSchema = new import_mongoose9.Schema({
1600
+ snapshootId: {
1601
+ type: import_mongoose9.Schema.Types.ObjectId
1602
+ },
1603
+ name: {
1604
+ type: String,
1605
+ required: [true, 'VRSBaselineSchema: The "name" field must be required']
1606
+ },
1607
+ app: {
1608
+ type: import_mongoose9.Schema.Types.ObjectId,
1609
+ ref: "VRSApp",
1610
+ required: [true, 'VRSBaselineSchema: The "app" field must be required']
1611
+ },
1612
+ branch: {
1613
+ type: String
1614
+ },
1615
+ browserName: {
1616
+ type: String
1617
+ },
1618
+ browserVersion: {
1619
+ type: String
1620
+ },
1621
+ browserFullVersion: {
1622
+ type: String
1623
+ },
1624
+ viewport: {
1625
+ type: String
1626
+ },
1627
+ os: {
1628
+ type: String
1629
+ },
1630
+ markedAs: {
1631
+ type: String,
1632
+ enum: ["bug", "accepted"]
1633
+ },
1634
+ lastMarkedDate: {
1635
+ type: Date
1636
+ },
1637
+ createdDate: {
1638
+ type: Date
1639
+ },
1640
+ updatedDate: {
1641
+ type: Date
1642
+ },
1643
+ markedById: {
1644
+ type: import_mongoose9.Schema.Types.ObjectId,
1645
+ ref: "VRSUser"
1646
+ },
1647
+ markedByUsername: {
1648
+ type: String
1649
+ },
1650
+ ignoreRegions: {
1651
+ type: String
1652
+ },
1653
+ boundRegions: {
1654
+ type: String
1655
+ },
1656
+ matchType: {
1657
+ type: String,
1658
+ enum: ["antialiasing", "nothing", "colors"]
1659
+ },
1660
+ meta: {
1661
+ type: Object
1662
+ }
1663
+ });
1664
+ BaselineSchema.plugin(toJSON_plugin_default);
1665
+ BaselineSchema.plugin(paginate_plugin_default);
1666
+ var Baseline = import_mongoose9.default.model("VRSBaseline", BaselineSchema);
1667
+
1668
+ // src/server/models/Test.model.ts
1669
+ var import_mongoose10 = __toESM(require("mongoose"));
1670
+ var TestSchema = new import_mongoose10.Schema(
1671
+ {
1672
+ name: {
1673
+ type: String,
1674
+ required: "TestSchema: the test name is empty"
1675
+ },
1676
+ description: {
1677
+ type: String
1678
+ },
1679
+ status: {
1680
+ type: String
1681
+ },
1682
+ browserName: {
1683
+ type: String
1684
+ },
1685
+ browserVersion: {
1686
+ type: String
1687
+ },
1688
+ branch: {
1689
+ type: String
1690
+ },
1691
+ tags: {
1692
+ type: [String]
1693
+ },
1694
+ viewport: {
1695
+ type: String
1696
+ },
1697
+ calculatedViewport: {
1698
+ type: String
1699
+ },
1700
+ os: {
1701
+ type: String
1702
+ },
1703
+ app: {
1704
+ type: import_mongoose10.Schema.Types.ObjectId,
1705
+ ref: "VRSApp",
1706
+ required: [true, 'TestSchema: The "app" field must be required']
1707
+ },
1708
+ blinking: {
1709
+ type: Number,
1710
+ default: 0
1711
+ },
1712
+ updatedDate: {
1713
+ type: Date
1714
+ },
1715
+ startDate: {
1716
+ type: Date
1717
+ },
1718
+ checks: [
1719
+ {
1720
+ type: import_mongoose10.default.Schema.Types.ObjectId,
1721
+ ref: "VRSCheck"
1722
+ }
1723
+ ],
1724
+ suite: {
1725
+ type: import_mongoose10.Schema.Types.ObjectId,
1726
+ ref: "VRSSuite"
1727
+ },
1728
+ run: {
1729
+ type: import_mongoose10.Schema.Types.ObjectId,
1730
+ ref: "VRSRun"
1731
+ },
1732
+ markedAs: {
1733
+ type: String,
1734
+ enum: ["Bug", "Accepted", "Unaccepted", "Partially"]
1735
+ },
1736
+ creatorId: {
1737
+ type: import_mongoose10.Schema.Types.ObjectId,
1738
+ ref: "VRSUser"
1739
+ },
1740
+ creatorUsername: {
1741
+ type: String
1742
+ },
1743
+ meta: {
1744
+ type: Object
1745
+ }
1746
+ },
1747
+ { strictQuery: true }
1748
+ );
1749
+ TestSchema.plugin(toJSON_plugin_default);
1750
+ TestSchema.plugin(paginate_plugin_default);
1751
+ TestSchema.plugin(paginateDistinct_plugin_default);
1752
+ var Test = import_mongoose10.default.model("VRSTest", TestSchema);
1753
+
1754
+ // src/server/lib/logger.ts
1755
+ var import_winston = __toESM(require("winston"));
1756
+ var import_winston_mongodb = require("winston-mongodb");
1757
+ var import_chalk = require("chalk");
1758
+
1759
+ // src/server/utils/formatISOToDateTime.ts
1760
+ function formatISOToDateTime(isoDateString) {
1761
+ const date = new Date(isoDateString);
1762
+ return `${date.toISOString().slice(0, 10)} ${date.toTimeString().slice(0, 8)}`;
1763
+ }
1764
+ var formatISOToDateTime_default = formatISOToDateTime;
1765
+
1766
+ // src/server/lib/logger.ts
1767
+ var import_path2 = __toESM(require("path"));
1768
+ var logLevel = env.SYNGRISI_LOG_LEVEL;
1769
+ function getScriptLine() {
1770
+ const stack = new Error().stack;
1771
+ if (stack) {
1772
+ const stackLines = stack.split("\n");
1773
+ let loggerLineIndex = -1;
1774
+ for (let i = 0; i < stackLines.length; i++) {
1775
+ if (stackLines[i].includes("lib/logger")) {
1776
+ loggerLineIndex = i;
1777
+ }
1778
+ }
1779
+ const targetLineIndex = loggerLineIndex + 1;
1780
+ if (targetLineIndex >= 0 && targetLineIndex < stackLines.length) {
1781
+ const targetLine = stackLines[targetLineIndex];
1782
+ const match = targetLine.match(/at\s+(?:.+\s+\()?(.+):(\d+):(\d+)\)?/);
1783
+ if (match) {
1784
+ const scriptPath = match[1];
1785
+ const relativePath = import_path2.default.relative(process.cwd(), scriptPath);
1786
+ const lineNumber = match[2];
1787
+ return `${relativePath}:${lineNumber}`;
1788
+ }
1789
+ }
1790
+ }
1791
+ return "unknown";
1792
+ }
1793
+ function createWinstonLogger(opts) {
1794
+ return import_winston.default.createLogger({
1795
+ transports: [
1796
+ new import_winston.default.transports.Console({
1797
+ level: logLevel || "silly",
1798
+ format: import_winston.default.format.combine(
1799
+ import_winston.default.format.colorize(),
1800
+ import_winston.default.format.timestamp(),
1801
+ import_winston.default.format.ms(),
1802
+ import_winston.default.format.metadata(),
1803
+ import_winston.default.format.printf((info) => {
1804
+ const user = info.metadata.user ? (0, import_chalk.blue)(` <${info.metadata.user}>`) : "";
1805
+ const ref = info.metadata.ref ? (0, import_chalk.gray)(` ${info.metadata.ref}`) : "";
1806
+ const msgType = info.metadata.msgType ? ` ${info.metadata.msgType}` : "";
1807
+ const itemType = info.metadata.itemType ? (0, import_chalk.magenta)(` ${info.metadata.itemType}`) : "";
1808
+ const scope = info.metadata.scope ? (0, import_chalk.magenta)(` [${info.metadata.scope}] `) : (0, import_chalk.magenta)(` [${getScriptLine()}] `);
1809
+ const msg = typeof info.message === "object" ? `
1810
+ ${JSON.stringify(info.message, null, 2)}` : info.message;
1811
+ return `${info.level} ${scope}${formatISOToDateTime_default(info.metadata.timestamp)} ${info.metadata.ms}${user}${ref}${msgType}${itemType} '${msg}'`;
1812
+ }),
1813
+ import_winston.default.format.padLevels()
1814
+ )
1815
+ }),
1816
+ new import_winston.default.transports.MongoDB({
1817
+ level: logLevel || "debug",
1818
+ format: import_winston.default.format.combine(
1819
+ import_winston.default.format.timestamp(),
1820
+ import_winston.default.format.json(),
1821
+ import_winston.default.format.metadata()
1822
+ ),
1823
+ options: {
1824
+ useUnifiedTopology: true
1825
+ },
1826
+ db: opts.dbConnectionString,
1827
+ collection: "vrslogs"
1828
+ })
1829
+ ]
1830
+ });
1831
+ }
1832
+ var Logger = class _Logger {
1833
+ constructor(opts = { dbConnectionString: config.connectionString }) {
1834
+ this.winstonLogger = createWinstonLogger(opts);
1835
+ }
1836
+ static mergeMeta(objects) {
1837
+ return objects.reduce((acc, obj) => {
1838
+ return { ...acc, ...obj };
1839
+ }, {});
1840
+ }
1841
+ log(severity, msg, meta) {
1842
+ const mergedMeta = _Logger.mergeMeta(meta);
1843
+ if (!mergedMeta.scope) {
1844
+ mergedMeta.scope = getScriptLine();
1845
+ }
1846
+ const formattedMsg = typeof msg === "object" ? JSON.stringify(msg, null, 2) : msg;
1847
+ this.winstonLogger.log(severity, formattedMsg, mergedMeta);
1848
+ }
1849
+ error(msg, ...meta) {
1850
+ let message = String(msg);
1851
+ let code = 0;
1852
+ if (msg instanceof Object) {
1853
+ message = JSON.stringify(msg);
1854
+ }
1855
+ if (msg instanceof Error) {
1856
+ message = msg.stack;
1857
+ }
1858
+ if (msg instanceof ApiError_default) {
1859
+ code = msg.statusCode;
1860
+ }
1861
+ this.log("error", `${code !== 0 ? "[" + code + "]" : ""}${message}
1862
+ stacktrace: ${new Error().stack}`, meta);
1863
+ }
1864
+ warn(msg, ...meta) {
1865
+ this.log("warn", `${msg}
1866
+ stacktrace: ${new Error().stack}`, meta);
1867
+ }
1868
+ info(msg, ...meta) {
1869
+ this.log("info", msg, meta);
1870
+ }
1871
+ verbose(msg, ...meta) {
1872
+ this.log("verbose", msg, meta);
1873
+ }
1874
+ debug(msg, ...meta) {
1875
+ this.log("debug", msg, meta);
1876
+ }
1877
+ silly(msg, ...meta) {
1878
+ this.log("silly", msg, meta);
1879
+ }
1880
+ };
1881
+ var logger_default = new Logger();
1882
+
1883
+ // src/seeds/initialAppSettings.json
1884
+ var initialAppSettings_default = [
1885
+ {
1886
+ name: "first_run",
1887
+ label: "First Run",
1888
+ description: "Indicates if the application is running the first time",
1889
+ type: "Boolean",
1890
+ value: "true",
1891
+ enabled: true
1892
+ },
1893
+ {
1894
+ name: "authentication",
1895
+ label: "Authentication",
1896
+ description: "Enable application authentication",
1897
+ type: "Boolean",
1898
+ value: "false",
1899
+ enabled: true
1900
+ }
1901
+ ];
1902
+
1903
+ // src/server/lib/AppSettings/AppSettings.ts
1904
+ var AppSettings2 = class {
1905
+ constructor() {
1906
+ this.model = AppSettings_model_default;
1907
+ this.cache = null;
1908
+ }
1909
+ async init() {
1910
+ this.cache = await this.model.find().lean().exec();
1911
+ return this;
1912
+ }
1913
+ ensureInitialized() {
1914
+ if (!this.cache) {
1915
+ throw new Error("AppSettings is not initialized. Please call init() before using this method.");
1916
+ }
1917
+ }
1918
+ async count() {
1919
+ this.ensureInitialized();
1920
+ return this.model.countDocuments().exec();
1921
+ }
1922
+ async loadInitialFromFile() {
1923
+ this.ensureInitialized();
1924
+ const settings = initialAppSettings_default;
1925
+ await this.model.insertMany(settings);
1926
+ this.cache = settings;
1927
+ }
1928
+ async get(name) {
1929
+ this.ensureInitialized();
1930
+ return this.cache.find((x) => x.name === name) || this.model.findOne({ name }).exec();
1931
+ }
1932
+ async set(name, value) {
1933
+ this.ensureInitialized();
1934
+ const item = await this.model.findOneAndUpdate({ name }, { value });
1935
+ await item.save();
1936
+ const cachedItem = this.cache.find((x) => x.name === name);
1937
+ if (cachedItem) {
1938
+ cachedItem["value"] = value;
1939
+ }
1940
+ }
1941
+ async enable(name) {
1942
+ this.ensureInitialized();
1943
+ const item = await this.model.findOneAndUpdate({ name }, { enabled: true });
1944
+ await item.save();
1945
+ const cachedItem = this.cache.find((x) => x.name === name);
1946
+ if (cachedItem) {
1947
+ cachedItem["enabled"] = true;
1948
+ }
1949
+ }
1950
+ async disable(name) {
1951
+ this.ensureInitialized();
1952
+ const item = await this.model.findOneAndUpdate({ name }, { enabled: false });
1953
+ await item.save();
1954
+ const cachedItem = this.cache.find((x) => x.name === name);
1955
+ if (cachedItem) {
1956
+ cachedItem["enabled"] = false;
1957
+ }
1958
+ }
1959
+ async isAuthEnabled() {
1960
+ this.ensureInitialized();
1961
+ return env.SYNGRISI_AUTH || (await this.get("authentication"))?.value === "true";
1962
+ }
1963
+ async isFirstRun() {
1964
+ this.ensureInitialized();
1965
+ return (await this.get("first_run"))?.value === "true";
1966
+ }
1967
+ };
1968
+ var appSettings = new AppSettings2().init();
1969
+
1970
+ // src/server/middlewares/authorization.ts
1971
+ var authorization = (type) => {
1972
+ const types = {
1973
+ admin: catchAsync_default(async (req, res, next) => {
1974
+ const AppSettings3 = await appSettings;
1975
+ if (!await AppSettings3.isAuthEnabled()) {
1976
+ return next();
1977
+ }
1978
+ if (req.user?.role === "admin") {
1979
+ logger_default.silly(`user: '${req.user?.username}' was successfully authorized, type: '${type}'`);
1980
+ return next();
1981
+ }
1982
+ logger_default.warn(`user authorization: '${req.user?.username}' wrong role, type: '${type}'`);
1983
+ throw new ApiError_default(import_http_status.default.FORBIDDEN, "Authorization Error - wrong Role");
1984
+ }),
1985
+ user: catchAsync_default(async (req, res, next) => {
1986
+ const AppSettings3 = await appSettings;
1987
+ if (!await AppSettings3.isAuthEnabled()) {
1988
+ return next();
1989
+ }
1990
+ if (req.user?.role === "admin") {
1991
+ logger_default.silly(`user: '${req.user?.username}' was successfully authorized, type: '${type}'`);
1992
+ return next();
1993
+ }
1994
+ if (type === "user" && (req.user?.role === "user" || req.user?.role === "reviewer")) {
1995
+ logger_default.silly(`user: '${req.user?.username}' was successfully authorized, type: '${type}'`);
1996
+ return next();
1997
+ }
1998
+ logger_default.warn(`user authorization: '${req.user?.username}' wrong role, type: '${type}'`);
1999
+ throw new ApiError_default(import_http_status.default.FORBIDDEN, "Authorization Error - wrong Role");
2000
+ })
2001
+ };
2002
+ if (types[type]) return types[type];
2003
+ return catchAsync_default(
2004
+ () => {
2005
+ logger_default.error(JSON.stringify(new ApiError_default(import_http_status.default.FORBIDDEN, "Wrong type of authorization")));
2006
+ throw new ApiError_default(import_http_status.default.FORBIDDEN, "Authorization Error - wrong type of authorization");
2007
+ }
2008
+ );
2009
+ };
2010
+
2011
+ // src/server/middlewares/compressionFilter.ts
2012
+ var import_compression = __toESM(require("compression"));
2013
+ function compressionFilter(req, res) {
2014
+ if (req.headers["x-no-compression"]) {
2015
+ return false;
2016
+ }
2017
+ return import_compression.default.filter(req, res);
2018
+ }
2019
+ // Annotate the CommonJS export names for ESM import in node:
2020
+ 0 && (module.exports = {
2021
+ authorization,
2022
+ compressionFilter,
2023
+ disableCors
2024
+ });
2025
+ //# sourceMappingURL=index.js.map