@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,2288 @@
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/services/tasks.service.ts
31
+ var tasks_service_exports = {};
32
+ __export(tasks_service_exports, {
33
+ loadTestUser: () => loadTestUser,
34
+ screenshots: () => screenshots,
35
+ status: () => status,
36
+ task_handle_database_consistency: () => task_handle_database_consistency,
37
+ task_handle_old_checks: () => task_handle_old_checks,
38
+ task_remove_old_logs: () => task_remove_old_logs,
39
+ task_test: () => task_test
40
+ });
41
+ module.exports = __toCommonJS(tasks_service_exports);
42
+
43
+ // src/server/envConfig.ts
44
+ var import_envalid = require("envalid");
45
+ var import_crypto = __toESM(require("crypto"));
46
+ var import_path = __toESM(require("path"));
47
+ var import_dotenv = __toESM(require("dotenv"));
48
+ import_dotenv.default.config();
49
+ var env = (0, import_envalid.cleanEnv)(process.env, {
50
+ NODE_ENV: (0, import_envalid.str)({ choices: ["development", "production", "test"] }),
51
+ SYNGRISI_DB_URI: (0, import_envalid.str)({ devDefault: "mongodb://127.0.0.1:27017/SyngrisiDb" }),
52
+ SYNGRISI_APP_PORT: (0, import_envalid.port)({ devDefault: 3e3 }),
53
+ SYNGRISI_IMAGES_PATH: (0, import_envalid.str)({ devDefault: "./.snapshots-images/" }),
54
+ SYNGRISI_TMP_DIR: (0, import_envalid.str)({ default: import_path.default.join(process.cwd(), ".tmp") }),
55
+ SYNGRISI_HTTP_LOG: (0, import_envalid.bool)({ devDefault: false }),
56
+ SYNGRISI_COVERAGE: (0, import_envalid.bool)({ devDefault: false }),
57
+ SYNGRISI_HOSTNAME: (0, import_envalid.host)({ devDefault: "localhost" }),
58
+ SYNGRISI_AUTH: (0, import_envalid.bool)({ default: true }),
59
+ SYNGRISI_TEST_MODE: (0, import_envalid.bool)({ default: false }),
60
+ SYNGRISI_DISABLE_FIRST_RUN: (0, import_envalid.bool)({ default: false }),
61
+ MONGODB_ROOT_USERNAME: (0, import_envalid.str)({ default: "" }),
62
+ MONGODB_ROOT_PASSWORD: (0, import_envalid.str)({ default: "" }),
63
+ LOGLEVEL: (0, import_envalid.str)({ choices: ["error", "warn", "info", "verbose", "debug", "silly"], default: "debug" }),
64
+ SYNGRISI_PAGINATION_SIZE: (0, import_envalid.num)({ default: 50 }),
65
+ SYNGRISI_DISABLE_DEV_CORS: (0, import_envalid.bool)({ default: false, devDefault: true }),
66
+ SYNGRISI_SESSION_STORE_KEY: (0, import_envalid.str)({ default: import_crypto.default.randomBytes(64).toString("hex") }),
67
+ SYNGRISI_LOG_LEVEL: (0, import_envalid.str)({ default: "debug" }),
68
+ // trunk features
69
+ SYNGRISI_TRUNK_FEATURE_AI_SEVERITY: (0, import_envalid.bool)({ default: false }),
70
+ SYNGRISI_AI_KEY: (0, import_envalid.str)({ default: "" }),
71
+ OPENAI_API_BASE_URL: (0, import_envalid.str)({ default: "https://api.openai.com/v1" }),
72
+ OPENAI_API_KEY: (0, import_envalid.str)({ default: "" })
73
+ });
74
+
75
+ // src/server/services/tasks.service.ts
76
+ var import_fs2 = __toESM(require("fs"));
77
+ var import_string_table = __toESM(require("string-table"));
78
+
79
+ // src/server/config.ts
80
+ var import_fs = __toESM(require("fs"));
81
+ var import_dotenv2 = __toESM(require("dotenv"));
82
+
83
+ // package.json
84
+ var version = "2.2.3";
85
+
86
+ // src/server/config.ts
87
+ var import_crypto2 = __toESM(require("crypto"));
88
+
89
+ // src/server/data/devices.json
90
+ var devices_default = [
91
+ {
92
+ os: "ios",
93
+ os_version: "16",
94
+ device: "iPhone 14 Pro Max",
95
+ realMobile: true
96
+ },
97
+ {
98
+ os: "ios",
99
+ os_version: "16",
100
+ device: "iPhone 14 Pro",
101
+ realMobile: true
102
+ },
103
+ {
104
+ os: "ios",
105
+ os_version: "16",
106
+ device: "iPhone 14 Plus",
107
+ realMobile: true
108
+ },
109
+ {
110
+ os: "ios",
111
+ os_version: "16",
112
+ device: "iPhone 14",
113
+ realMobile: true
114
+ },
115
+ {
116
+ os: "ios",
117
+ os_version: "16",
118
+ device: "iPhone 12 Pro Max",
119
+ realMobile: true
120
+ },
121
+ {
122
+ os: "ios",
123
+ os_version: "16",
124
+ device: "iPhone 12 Pro",
125
+ realMobile: true
126
+ },
127
+ {
128
+ os: "ios",
129
+ os_version: "16",
130
+ device: "iPhone 12 Mini",
131
+ realMobile: true
132
+ },
133
+ {
134
+ os: "ios",
135
+ os_version: "16",
136
+ device: "iPhone 11 Pro Max",
137
+ realMobile: true
138
+ },
139
+ {
140
+ os: "ios",
141
+ os_version: "15",
142
+ device: "iPhone XS",
143
+ realMobile: true
144
+ },
145
+ {
146
+ os: "ios",
147
+ os_version: "15",
148
+ device: "iPhone 13 Pro Max",
149
+ realMobile: true
150
+ },
151
+ {
152
+ os: "ios",
153
+ os_version: "15",
154
+ device: "iPhone 13 Pro",
155
+ realMobile: true
156
+ },
157
+ {
158
+ os: "ios",
159
+ os_version: "15",
160
+ device: "iPhone 13 Mini",
161
+ realMobile: true
162
+ },
163
+ {
164
+ os: "ios",
165
+ os_version: "15",
166
+ device: "iPhone 13",
167
+ realMobile: true
168
+ },
169
+ {
170
+ os: "ios",
171
+ os_version: "15",
172
+ device: "iPhone 11 Pro",
173
+ realMobile: true
174
+ },
175
+ {
176
+ os: "ios",
177
+ os_version: "15",
178
+ device: "iPhone 11",
179
+ realMobile: true
180
+ },
181
+ {
182
+ os: "ios",
183
+ os_version: "14",
184
+ device: "iPhone XS",
185
+ realMobile: true
186
+ },
187
+ {
188
+ os: "ios",
189
+ os_version: "14",
190
+ device: "iPhone 12 Pro Max",
191
+ realMobile: true
192
+ },
193
+ {
194
+ os: "ios",
195
+ os_version: "14",
196
+ device: "iPhone 12 Pro",
197
+ realMobile: true
198
+ },
199
+ {
200
+ os: "ios",
201
+ os_version: "14",
202
+ device: "iPhone 12 Mini",
203
+ realMobile: true
204
+ },
205
+ {
206
+ os: "ios",
207
+ os_version: "14",
208
+ device: "iPhone 12",
209
+ realMobile: true
210
+ },
211
+ {
212
+ os: "ios",
213
+ os_version: "14",
214
+ device: "iPhone 11 Pro Max",
215
+ realMobile: true
216
+ },
217
+ {
218
+ os: "ios",
219
+ os_version: "14",
220
+ device: "iPhone 11",
221
+ realMobile: true
222
+ },
223
+ {
224
+ os: "ios",
225
+ os_version: "13",
226
+ device: "iPhone XS",
227
+ realMobile: true
228
+ },
229
+ {
230
+ os: "ios",
231
+ os_version: "13",
232
+ device: "iPhone 11 Pro Max",
233
+ realMobile: true
234
+ },
235
+ {
236
+ os: "ios",
237
+ os_version: "13",
238
+ device: "iPhone 11 Pro",
239
+ realMobile: true
240
+ },
241
+ {
242
+ os: "ios",
243
+ os_version: "13",
244
+ device: "iPhone 11",
245
+ realMobile: true
246
+ },
247
+ {
248
+ os: "ios",
249
+ os_version: "12",
250
+ device: "iPhone XS",
251
+ realMobile: true
252
+ },
253
+ {
254
+ os: "ios",
255
+ os_version: "12",
256
+ device: "iPhone XS Max",
257
+ realMobile: true
258
+ },
259
+ {
260
+ os: "ios",
261
+ os_version: "15",
262
+ device: "iPhone XR",
263
+ realMobile: true
264
+ },
265
+ {
266
+ os: "ios",
267
+ os_version: "12",
268
+ device: "iPhone XR",
269
+ realMobile: true
270
+ },
271
+ {
272
+ os: "ios",
273
+ os_version: "11",
274
+ device: "iPhone X",
275
+ realMobile: true
276
+ },
277
+ {
278
+ os: "ios",
279
+ os_version: "15",
280
+ device: "iPhone 8",
281
+ realMobile: true
282
+ },
283
+ {
284
+ os: "ios",
285
+ os_version: "13",
286
+ device: "iPhone 8",
287
+ realMobile: true
288
+ },
289
+ {
290
+ os: "ios",
291
+ os_version: "12",
292
+ device: "iPhone 8",
293
+ realMobile: true
294
+ },
295
+ {
296
+ os: "ios",
297
+ os_version: "11",
298
+ device: "iPhone 8",
299
+ realMobile: true
300
+ },
301
+ {
302
+ os: "ios",
303
+ os_version: "12",
304
+ device: "iPhone 8 Plus",
305
+ realMobile: true
306
+ },
307
+ {
308
+ os: "ios",
309
+ os_version: "11",
310
+ device: "iPhone 8 Plus",
311
+ realMobile: true
312
+ },
313
+ {
314
+ os: "ios",
315
+ os_version: "12",
316
+ device: "iPhone 7",
317
+ realMobile: true
318
+ },
319
+ {
320
+ os: "ios",
321
+ os_version: "10",
322
+ device: "iPhone 7",
323
+ realMobile: true
324
+ },
325
+ {
326
+ os: "ios",
327
+ os_version: "12",
328
+ device: "iPhone 6S",
329
+ realMobile: true
330
+ },
331
+ {
332
+ os: "ios",
333
+ os_version: "11",
334
+ device: "iPhone 6S",
335
+ realMobile: true
336
+ },
337
+ {
338
+ os: "ios",
339
+ os_version: "11",
340
+ device: "iPhone 6S Plus",
341
+ realMobile: true
342
+ },
343
+ {
344
+ os: "ios",
345
+ os_version: "11",
346
+ device: "iPhone 6",
347
+ realMobile: true
348
+ },
349
+ {
350
+ os: "ios",
351
+ os_version: "15",
352
+ device: "iPhone SE 2022",
353
+ realMobile: true
354
+ },
355
+ {
356
+ os: "ios",
357
+ os_version: "13",
358
+ device: "iPhone SE 2020",
359
+ realMobile: true
360
+ },
361
+ {
362
+ os: "ios",
363
+ os_version: "11",
364
+ device: "iPhone SE",
365
+ realMobile: true
366
+ },
367
+ {
368
+ os: "ios",
369
+ os_version: "14",
370
+ device: "iPad Air 4",
371
+ realMobile: true
372
+ },
373
+ {
374
+ os: "ios",
375
+ os_version: "15",
376
+ device: "iPad 9th",
377
+ realMobile: true
378
+ },
379
+ {
380
+ os: "ios",
381
+ os_version: "16",
382
+ device: "iPad Pro 12.9 2022",
383
+ realMobile: true
384
+ },
385
+ {
386
+ os: "ios",
387
+ os_version: "16",
388
+ device: "iPad Pro 12.9 2020",
389
+ realMobile: true
390
+ },
391
+ {
392
+ os: "ios",
393
+ os_version: "16",
394
+ device: "iPad Pro 11 2022",
395
+ realMobile: true
396
+ },
397
+ {
398
+ os: "ios",
399
+ os_version: "16",
400
+ device: "iPad 10th",
401
+ realMobile: true
402
+ },
403
+ {
404
+ os: "ios",
405
+ os_version: "15",
406
+ device: "iPad Air 5",
407
+ realMobile: true
408
+ },
409
+ {
410
+ os: "ios",
411
+ os_version: "14",
412
+ device: "iPad Pro 12.9 2021",
413
+ realMobile: true
414
+ },
415
+ {
416
+ os: "ios",
417
+ os_version: "14",
418
+ device: "iPad Pro 12.9 2020",
419
+ realMobile: true
420
+ },
421
+ {
422
+ os: "ios",
423
+ os_version: "14",
424
+ device: "iPad Pro 11 2021",
425
+ realMobile: true
426
+ },
427
+ {
428
+ os: "ios",
429
+ os_version: "13",
430
+ device: "iPad Pro 12.9 2020",
431
+ realMobile: true
432
+ },
433
+ {
434
+ os: "ios",
435
+ os_version: "16",
436
+ device: "iPad 8th",
437
+ realMobile: true
438
+ },
439
+ {
440
+ os: "ios",
441
+ os_version: "15",
442
+ device: "iPad Pro 12.9 2018",
443
+ realMobile: true
444
+ },
445
+ {
446
+ os: "ios",
447
+ os_version: "15",
448
+ device: "iPad Mini 2021",
449
+ realMobile: true
450
+ },
451
+ {
452
+ os: "ios",
453
+ os_version: "14",
454
+ device: "iPad 8th",
455
+ realMobile: true
456
+ },
457
+ {
458
+ os: "ios",
459
+ os_version: "13",
460
+ device: "iPad Pro 12.9 2018",
461
+ realMobile: true
462
+ },
463
+ {
464
+ os: "ios",
465
+ os_version: "13",
466
+ device: "iPad Pro 11 2020",
467
+ realMobile: true
468
+ },
469
+ {
470
+ os: "ios",
471
+ os_version: "13",
472
+ device: "iPad Mini 2019",
473
+ realMobile: true
474
+ },
475
+ {
476
+ os: "ios",
477
+ os_version: "13",
478
+ device: "iPad Air 2019",
479
+ realMobile: true
480
+ },
481
+ {
482
+ os: "ios",
483
+ os_version: "13",
484
+ device: "iPad 7th",
485
+ realMobile: true
486
+ },
487
+ {
488
+ os: "ios",
489
+ os_version: "12",
490
+ device: "iPad Pro 12.9 2018",
491
+ realMobile: true
492
+ },
493
+ {
494
+ os: "ios",
495
+ os_version: "12",
496
+ device: "iPad Pro 11 2018",
497
+ realMobile: true
498
+ },
499
+ {
500
+ os: "ios",
501
+ os_version: "12",
502
+ device: "iPad Mini 2019",
503
+ realMobile: true
504
+ },
505
+ {
506
+ os: "ios",
507
+ os_version: "12",
508
+ device: "iPad Air 2019",
509
+ realMobile: true
510
+ },
511
+ {
512
+ os: "ios",
513
+ os_version: "11",
514
+ device: "iPad Pro 9.7 2016",
515
+ realMobile: true
516
+ },
517
+ {
518
+ os: "ios",
519
+ os_version: "11",
520
+ device: "iPad Pro 12.9 2017",
521
+ realMobile: true
522
+ },
523
+ {
524
+ os: "ios",
525
+ os_version: "11",
526
+ device: "iPad Mini 4",
527
+ realMobile: true
528
+ },
529
+ {
530
+ os: "ios",
531
+ os_version: "11",
532
+ device: "iPad 6th",
533
+ realMobile: true
534
+ },
535
+ {
536
+ os: "ios",
537
+ os_version: "11",
538
+ device: "iPad 5th",
539
+ realMobile: true
540
+ },
541
+ {
542
+ os: "android",
543
+ os_version: "12.0",
544
+ device: "Samsung Galaxy S22 Ultra",
545
+ realMobile: true
546
+ },
547
+ {
548
+ os: "android",
549
+ os_version: "12.0",
550
+ device: "Samsung Galaxy S22 Plus",
551
+ realMobile: true
552
+ },
553
+ {
554
+ os: "android",
555
+ os_version: "12.0",
556
+ device: "Samsung Galaxy S22",
557
+ realMobile: true
558
+ },
559
+ {
560
+ os: "android",
561
+ os_version: "12.0",
562
+ device: "Samsung Galaxy S21",
563
+ realMobile: true
564
+ },
565
+ {
566
+ os: "android",
567
+ os_version: "11.0",
568
+ device: "Samsung Galaxy S21 Ultra",
569
+ realMobile: true
570
+ },
571
+ {
572
+ os: "android",
573
+ os_version: "11.0",
574
+ device: "Samsung Galaxy S21",
575
+ realMobile: true
576
+ },
577
+ {
578
+ os: "android",
579
+ os_version: "11.0",
580
+ device: "Samsung Galaxy S21 Plus",
581
+ realMobile: true
582
+ },
583
+ {
584
+ os: "android",
585
+ os_version: "10.0",
586
+ device: "Samsung Galaxy S20",
587
+ realMobile: true
588
+ },
589
+ {
590
+ os: "android",
591
+ os_version: "10.0",
592
+ device: "Samsung Galaxy S20 Plus",
593
+ realMobile: true
594
+ },
595
+ {
596
+ os: "android",
597
+ os_version: "10.0",
598
+ device: "Samsung Galaxy S20 Ultra",
599
+ realMobile: true
600
+ },
601
+ {
602
+ os: "android",
603
+ os_version: "11.0",
604
+ device: "Samsung Galaxy M52",
605
+ realMobile: true
606
+ },
607
+ {
608
+ os: "android",
609
+ os_version: "11.0",
610
+ device: "Samsung Galaxy M32",
611
+ realMobile: true
612
+ },
613
+ {
614
+ os: "android",
615
+ os_version: "11.0",
616
+ device: "Samsung Galaxy A52",
617
+ realMobile: true
618
+ },
619
+ {
620
+ os: "android",
621
+ os_version: "10.0",
622
+ device: "Samsung Galaxy Note 20 Ultra",
623
+ realMobile: true
624
+ },
625
+ {
626
+ os: "android",
627
+ os_version: "10.0",
628
+ device: "Samsung Galaxy Note 20",
629
+ realMobile: true
630
+ },
631
+ {
632
+ os: "android",
633
+ os_version: "10.0",
634
+ device: "Samsung Galaxy A51",
635
+ realMobile: true
636
+ },
637
+ {
638
+ os: "android",
639
+ os_version: "10.0",
640
+ device: "Samsung Galaxy A11",
641
+ realMobile: true
642
+ },
643
+ {
644
+ os: "android",
645
+ os_version: "9.0",
646
+ device: "Samsung Galaxy S9 Plus",
647
+ realMobile: true
648
+ },
649
+ {
650
+ os: "android",
651
+ os_version: "9.0",
652
+ device: "Samsung Galaxy S10e",
653
+ realMobile: true
654
+ },
655
+ {
656
+ os: "android",
657
+ os_version: "9.0",
658
+ device: "Samsung Galaxy S10 Plus",
659
+ realMobile: true
660
+ },
661
+ {
662
+ os: "android",
663
+ os_version: "9.0",
664
+ device: "Samsung Galaxy S10",
665
+ realMobile: true
666
+ },
667
+ {
668
+ os: "android",
669
+ os_version: "9.0",
670
+ device: "Samsung Galaxy Note 10 Plus",
671
+ realMobile: true
672
+ },
673
+ {
674
+ os: "android",
675
+ os_version: "9.0",
676
+ device: "Samsung Galaxy Note 10",
677
+ realMobile: true
678
+ },
679
+ {
680
+ os: "android",
681
+ os_version: "9.0",
682
+ device: "Samsung Galaxy A10",
683
+ realMobile: true
684
+ },
685
+ {
686
+ os: "android",
687
+ os_version: "8.1",
688
+ device: "Samsung Galaxy Note 9",
689
+ realMobile: true
690
+ },
691
+ {
692
+ os: "android",
693
+ os_version: "8.1",
694
+ device: "Samsung Galaxy J7 Prime",
695
+ realMobile: true
696
+ },
697
+ {
698
+ os: "android",
699
+ os_version: "8.0",
700
+ device: "Samsung Galaxy S9 Plus",
701
+ realMobile: true
702
+ },
703
+ {
704
+ os: "android",
705
+ os_version: "8.0",
706
+ device: "Samsung Galaxy S9",
707
+ realMobile: true
708
+ },
709
+ {
710
+ os: "android",
711
+ os_version: "7.1",
712
+ device: "Samsung Galaxy Note 8",
713
+ realMobile: true
714
+ },
715
+ {
716
+ os: "android",
717
+ os_version: "7.1",
718
+ device: "Samsung Galaxy A8",
719
+ realMobile: true
720
+ },
721
+ {
722
+ os: "android",
723
+ os_version: "7.0",
724
+ device: "Samsung Galaxy S8 Plus",
725
+ realMobile: true
726
+ },
727
+ {
728
+ os: "android",
729
+ os_version: "7.0",
730
+ device: "Samsung Galaxy S8",
731
+ realMobile: true
732
+ },
733
+ {
734
+ os: "android",
735
+ os_version: "6.0",
736
+ device: "Samsung Galaxy S7",
737
+ realMobile: true
738
+ },
739
+ {
740
+ os: "android",
741
+ os_version: "5.0",
742
+ device: "Samsung Galaxy S6",
743
+ realMobile: true
744
+ },
745
+ {
746
+ os: "android",
747
+ os_version: "13.0",
748
+ device: "Google Pixel 7 Pro",
749
+ realMobile: true
750
+ },
751
+ {
752
+ os: "android",
753
+ os_version: "13.0",
754
+ device: "Google Pixel 7",
755
+ realMobile: true
756
+ },
757
+ {
758
+ os: "android",
759
+ os_version: "13.0",
760
+ device: "Google Pixel 6 Pro",
761
+ realMobile: true
762
+ },
763
+ {
764
+ os: "android",
765
+ os_version: "12.0",
766
+ device: "Google Pixel 6 Pro",
767
+ realMobile: true
768
+ },
769
+ {
770
+ os: "android",
771
+ os_version: "12.0",
772
+ device: "Google Pixel 6",
773
+ realMobile: true
774
+ },
775
+ {
776
+ os: "android",
777
+ os_version: "12.0",
778
+ device: "Google Pixel 5",
779
+ realMobile: true
780
+ },
781
+ {
782
+ os: "android",
783
+ os_version: "11.0",
784
+ device: "Google Pixel 5",
785
+ realMobile: true
786
+ },
787
+ {
788
+ os: "android",
789
+ os_version: "11.0",
790
+ device: "Google Pixel 4",
791
+ realMobile: true
792
+ },
793
+ {
794
+ os: "android",
795
+ os_version: "10.0",
796
+ device: "Google Pixel 4 XL",
797
+ realMobile: true
798
+ },
799
+ {
800
+ os: "android",
801
+ os_version: "10.0",
802
+ device: "Google Pixel 4",
803
+ realMobile: true
804
+ },
805
+ {
806
+ os: "android",
807
+ os_version: "10.0",
808
+ device: "Google Pixel 3",
809
+ realMobile: true
810
+ },
811
+ {
812
+ os: "android",
813
+ os_version: "9.0",
814
+ device: "Google Pixel 3a XL",
815
+ realMobile: true
816
+ },
817
+ {
818
+ os: "android",
819
+ os_version: "9.0",
820
+ device: "Google Pixel 3a",
821
+ realMobile: true
822
+ },
823
+ {
824
+ os: "android",
825
+ os_version: "9.0",
826
+ device: "Google Pixel 3 XL",
827
+ realMobile: true
828
+ },
829
+ {
830
+ os: "android",
831
+ os_version: "9.0",
832
+ device: "Google Pixel 3",
833
+ realMobile: true
834
+ },
835
+ {
836
+ os: "android",
837
+ os_version: "9.0",
838
+ device: "Google Pixel 2",
839
+ realMobile: true
840
+ },
841
+ {
842
+ os: "android",
843
+ os_version: "8.0",
844
+ device: "Google Pixel 2",
845
+ realMobile: true
846
+ },
847
+ {
848
+ os: "android",
849
+ os_version: "7.1",
850
+ device: "Google Pixel",
851
+ realMobile: true
852
+ },
853
+ {
854
+ os: "android",
855
+ os_version: "6.0",
856
+ device: "Google Nexus 6",
857
+ realMobile: true
858
+ },
859
+ {
860
+ os: "android",
861
+ os_version: "4.4",
862
+ device: "Google Nexus 5",
863
+ realMobile: true
864
+ },
865
+ {
866
+ os: "android",
867
+ os_version: "11.0",
868
+ device: "OnePlus 9",
869
+ realMobile: true
870
+ },
871
+ {
872
+ os: "android",
873
+ os_version: "10.0",
874
+ device: "OnePlus 8",
875
+ realMobile: true
876
+ },
877
+ {
878
+ os: "android",
879
+ os_version: "10.0",
880
+ device: "OnePlus 7T",
881
+ realMobile: true
882
+ },
883
+ {
884
+ os: "android",
885
+ os_version: "9.0",
886
+ device: "OnePlus 7",
887
+ realMobile: true
888
+ },
889
+ {
890
+ os: "android",
891
+ os_version: "9.0",
892
+ device: "OnePlus 6T",
893
+ realMobile: true
894
+ },
895
+ {
896
+ os: "android",
897
+ os_version: "11.0",
898
+ device: "Xiaomi Redmi Note 11",
899
+ realMobile: true
900
+ },
901
+ {
902
+ os: "android",
903
+ os_version: "10.0",
904
+ device: "Xiaomi Redmi Note 9",
905
+ realMobile: true
906
+ },
907
+ {
908
+ os: "android",
909
+ os_version: "9.0",
910
+ device: "Xiaomi Redmi Note 8",
911
+ realMobile: true
912
+ },
913
+ {
914
+ os: "android",
915
+ os_version: "9.0",
916
+ device: "Xiaomi Redmi Note 7",
917
+ realMobile: true
918
+ },
919
+ {
920
+ os: "android",
921
+ os_version: "11.0",
922
+ device: "Vivo Y21",
923
+ realMobile: true
924
+ },
925
+ {
926
+ os: "android",
927
+ os_version: "11.0",
928
+ device: "Vivo V21",
929
+ realMobile: true
930
+ },
931
+ {
932
+ os: "android",
933
+ os_version: "10.0",
934
+ device: "Vivo Y50",
935
+ realMobile: true
936
+ },
937
+ {
938
+ os: "android",
939
+ os_version: "11.0",
940
+ device: "Oppo Reno 6",
941
+ realMobile: true
942
+ },
943
+ {
944
+ os: "android",
945
+ os_version: "11.0",
946
+ device: "Oppo A96",
947
+ realMobile: true
948
+ },
949
+ {
950
+ os: "android",
951
+ os_version: "10.0",
952
+ device: "Oppo Reno 3 Pro",
953
+ realMobile: true
954
+ },
955
+ {
956
+ os: "android",
957
+ os_version: "11.0",
958
+ device: "Motorola Moto G71 5G",
959
+ realMobile: true
960
+ },
961
+ {
962
+ os: "android",
963
+ os_version: "10.0",
964
+ device: "Motorola Moto G9 Play",
965
+ realMobile: true
966
+ },
967
+ {
968
+ os: "android",
969
+ os_version: "9.0",
970
+ device: "Motorola Moto G7 Play",
971
+ realMobile: true
972
+ },
973
+ {
974
+ os: "android",
975
+ os_version: "9.0",
976
+ device: "Huawei P30",
977
+ realMobile: true
978
+ },
979
+ {
980
+ os: "android",
981
+ os_version: "12.0",
982
+ device: "Samsung Galaxy Tab S8",
983
+ realMobile: true
984
+ },
985
+ {
986
+ os: "android",
987
+ os_version: "11.0",
988
+ device: "Samsung Galaxy Tab S7",
989
+ realMobile: true
990
+ },
991
+ {
992
+ os: "android",
993
+ os_version: "10.0",
994
+ device: "Samsung Galaxy Tab S7",
995
+ realMobile: true
996
+ },
997
+ {
998
+ os: "android",
999
+ os_version: "9.0",
1000
+ device: "Samsung Galaxy Tab S6",
1001
+ realMobile: true
1002
+ },
1003
+ {
1004
+ os: "android",
1005
+ os_version: "9.0",
1006
+ device: "Samsung Galaxy Tab S5e",
1007
+ realMobile: true
1008
+ },
1009
+ {
1010
+ os: "android",
1011
+ os_version: "8.1",
1012
+ device: "Samsung Galaxy Tab S4",
1013
+ realMobile: true
1014
+ }
1015
+ ];
1016
+
1017
+ // src/server/config.ts
1018
+ var customDevicesPath = "./server/data/custom_devices.json";
1019
+ var logsFolder = "./logs";
1020
+ import_dotenv2.default.config();
1021
+ var config = {
1022
+ version,
1023
+ // this isn't used
1024
+ getDevices: async () => {
1025
+ if (import_fs.default.existsSync(customDevicesPath)) {
1026
+ return [...devices_default, ...(await import(customDevicesPath)).default];
1027
+ }
1028
+ return devices_default;
1029
+ },
1030
+ defaultImagesPath: env.SYNGRISI_IMAGES_PATH,
1031
+ connectionString: env.SYNGRISI_DB_URI || "mongodb://127.0.0.1:27017/SyngrisiDb",
1032
+ host: env.SYNGRISI_HOSTNAME,
1033
+ port: env.SYNGRISI_APP_PORT || 3e3,
1034
+ backupsFolder: "./backups",
1035
+ enableHttpLogger: env.SYNGRISI_HTTP_LOG,
1036
+ httpLoggerFilePath: `${logsFolder}/http.log`,
1037
+ storeSessionKey: env.SYNGRISI_SESSION_STORE_KEY || import_crypto2.default.randomBytes(64).toString("hex"),
1038
+ codeCoverage: env.SYNGRISI_COVERAGE,
1039
+ disableCors: env.SYNGRISI_DISABLE_DEV_CORS,
1040
+ fileUploadMaxSize: 50 * 1024 * 1024,
1041
+ testMode: env.SYNGRISI_TEST_MODE,
1042
+ jsonLimit: "50mb",
1043
+ tmpDir: env.SYNGRISI_TMP_DIR,
1044
+ helmet: {
1045
+ crossOriginEmbedderPolicy: !env.SYNGRISI_DISABLE_DEV_CORS,
1046
+ crossOriginResourcePolicy: !env.SYNGRISI_DISABLE_DEV_CORS,
1047
+ contentSecurityPolicy: {
1048
+ directives: {
1049
+ frameAncestors: ["'self'", "vscode-webview:", "vscode-resource:", "https:", "http:"],
1050
+ frameSrc: ["'self'", "vscode-webview:", "https:", "http:"],
1051
+ scriptSrc: ["'self'", "'unsafe-inline'"],
1052
+ styleSrc: ["'self'", "'unsafe-inline'"]
1053
+ }
1054
+ }
1055
+ }
1056
+ };
1057
+ if (!import_fs.default.existsSync(config.defaultImagesPath)) {
1058
+ import_fs.default.mkdirSync(config.defaultImagesPath, { recursive: true });
1059
+ }
1060
+ if (!import_fs.default.existsSync(logsFolder)) {
1061
+ import_fs.default.mkdirSync(logsFolder, { recursive: true });
1062
+ }
1063
+
1064
+ // src/server/utils/dateToISO8601.ts
1065
+ var dateToISO8601 = (date) => {
1066
+ return new Date(new Date(date)).toISOString().split("T")[0];
1067
+ };
1068
+ var dateToISO8601_default = dateToISO8601;
1069
+
1070
+ // src/server/utils/ProgressBar.ts
1071
+ var ProgressBar = class {
1072
+ constructor(length) {
1073
+ this.length = length;
1074
+ this.percentLenght = parseFloat((length / 100).toString());
1075
+ this.prevPercent = 0;
1076
+ this.currentPercent = 0;
1077
+ this.progressString = "";
1078
+ }
1079
+ isChange(current) {
1080
+ this.currentPercent = parseInt((current / this.percentLenght).toString(), 10);
1081
+ if (this.prevPercent === this.currentPercent) {
1082
+ return false;
1083
+ }
1084
+ this.prevPercent = this.currentPercent;
1085
+ this.progressString += "#";
1086
+ return true;
1087
+ }
1088
+ writeIfChange(index, count, fn, res) {
1089
+ if (this.isChange(index)) {
1090
+ const placeholderString = Array.from(new Array(99 - this.currentPercent)).reduce((accum) => accum += ".", "");
1091
+ fn(`[${this.progressString}${placeholderString}](${index}/${count})`, res);
1092
+ }
1093
+ }
1094
+ };
1095
+
1096
+ // src/server/utils/ApiError.ts
1097
+ var ApiError = class extends Error {
1098
+ constructor(statusCode, message, isOperational = true, stack = "") {
1099
+ super(message);
1100
+ this.statusCode = statusCode;
1101
+ this.isOperational = isOperational;
1102
+ if (stack) {
1103
+ this.stack = stack;
1104
+ } else {
1105
+ Error.captureStackTrace(this, this.constructor);
1106
+ }
1107
+ }
1108
+ };
1109
+ var ApiError_default = ApiError;
1110
+
1111
+ // src/server/utils/deserializeIfJSON.ts
1112
+ var import_bson = require("bson");
1113
+
1114
+ // src/server/models/Check.model.ts
1115
+ var import_mongoose = __toESM(require("mongoose"));
1116
+
1117
+ // src/server/models/plugins/paginate.plugin.ts
1118
+ var paginate = (schema) => {
1119
+ schema.statics.paginate = async function(filter, options) {
1120
+ let sort;
1121
+ if (options.sortBy) {
1122
+ const sortingCriteria = [];
1123
+ options.sortBy.split(",").forEach((sortOption) => {
1124
+ const [key, order] = sortOption.split(":");
1125
+ sortingCriteria.push((order === "desc" ? "-" : "") + key);
1126
+ });
1127
+ sort = sortingCriteria.join(" ");
1128
+ } else {
1129
+ sort = { _id: -1 };
1130
+ }
1131
+ const limit = options.limit && parseInt(options.limit.toString(), 10) >= 0 ? parseInt(options.limit.toString(), 10) : 10;
1132
+ const page = options.page && parseInt(options.page.toString(), 10) > 0 ? parseInt(options.page.toString(), 10) : 1;
1133
+ const skip = (page - 1) * limit;
1134
+ const countPromise = this.countDocuments(filter).exec();
1135
+ let docsPromise = this.find(filter).sort(sort).skip(skip).limit(limit);
1136
+ if (options.populate) {
1137
+ options.populate.split(",").forEach((populateOption) => {
1138
+ docsPromise = docsPromise.populate(
1139
+ populateOption.split(".").reverse().reduce((a, b) => ({ path: b, populate: a }))
1140
+ );
1141
+ });
1142
+ }
1143
+ docsPromise = docsPromise.exec();
1144
+ return Promise.all([countPromise, docsPromise]).then((values) => {
1145
+ const [totalResults, results] = values;
1146
+ const totalPages = Math.ceil(totalResults / limit);
1147
+ const result = {
1148
+ results,
1149
+ page,
1150
+ limit,
1151
+ totalPages,
1152
+ totalResults,
1153
+ timestamp: Number(Date.now() + String(process.hrtime()[1]).slice(3, 6))
1154
+ };
1155
+ return Promise.resolve(result);
1156
+ });
1157
+ };
1158
+ };
1159
+ var paginate_plugin_default = paginate;
1160
+
1161
+ // src/server/models/plugins/toJSON.plugin.ts
1162
+ var deleteAtPath = (obj, path3, index) => {
1163
+ if (index === path3.length - 1) {
1164
+ delete obj[path3[index]];
1165
+ return;
1166
+ }
1167
+ deleteAtPath(obj[path3[index]], path3, index + 1);
1168
+ };
1169
+ var toJSON = (schema) => {
1170
+ let transform;
1171
+ if (schema.options.toJSON && schema.options.toJSON.transform) {
1172
+ transform = schema.options.toJSON.transform;
1173
+ }
1174
+ schema.options.toJSON = Object.assign(schema.options.toJSON || {}, {
1175
+ transform(doc, ret, options) {
1176
+ Object.keys(schema.paths).forEach((path3) => {
1177
+ if (schema.paths[path3].options && schema.paths[path3].options.private) {
1178
+ deleteAtPath(ret, path3.split("."), 0);
1179
+ }
1180
+ });
1181
+ ret.id = ret._id.toString();
1182
+ delete ret.__v;
1183
+ delete ret.createdAt;
1184
+ delete ret.updatedAt;
1185
+ if (transform) {
1186
+ return transform(doc, ret, options);
1187
+ }
1188
+ }
1189
+ });
1190
+ };
1191
+ var toJSON_plugin_default = toJSON;
1192
+
1193
+ // src/server/models/plugins/paginateDistinct.plugin.ts
1194
+ var import_bson2 = require("bson");
1195
+ var paginateDistinct = (schema) => {
1196
+ schema.statics.paginateDistinct = async function(filter, options) {
1197
+ let sort;
1198
+ if (options.sortBy) {
1199
+ options.sortBy.split(",").forEach((sortOption) => {
1200
+ const [key, order] = sortOption.split(":");
1201
+ sort[key] = order === "desc" ? -1 : 1;
1202
+ });
1203
+ } else {
1204
+ sort = { _id: -1 };
1205
+ }
1206
+ let limit = options.limit && parseInt(options.limit.toString(), 10) >= 0 ? parseInt(options.limit.toString(), 10) : 10;
1207
+ limit = limit === 0 ? 9007199254740991 : limit;
1208
+ const page = options.page && parseInt(options.page.toString(), 10) > 0 ? parseInt(options.page.toString(), 10) : 1;
1209
+ const skip = (page - 1) * limit;
1210
+ const groupAggregateObj = { $group: { _id: `$${options.field}` } };
1211
+ const documentsCount = (await this.aggregate([groupAggregateObj]).exec()).length;
1212
+ const aggregateArr = [
1213
+ { $match: import_bson2.EJSON.parse(filter.filter || "{}") },
1214
+ groupAggregateObj,
1215
+ { $sort: sort },
1216
+ { $skip: skip },
1217
+ { $limit: limit }
1218
+ ];
1219
+ const aggregatedDocs = (await this.aggregate(aggregateArr)).filter((x) => x._id).map((x) => {
1220
+ if (x[options.field]) {
1221
+ return x[options.field][0];
1222
+ }
1223
+ return { name: x._id };
1224
+ });
1225
+ return Promise.all([documentsCount, aggregatedDocs]).then((values) => {
1226
+ const [totalResults, results] = values;
1227
+ const totalPages = Math.ceil(totalResults / limit);
1228
+ const result = {
1229
+ results,
1230
+ page,
1231
+ limit,
1232
+ totalPages,
1233
+ totalResults,
1234
+ timestamp: (/* @__PURE__ */ new Date()).getTime()
1235
+ };
1236
+ return Promise.resolve(result);
1237
+ });
1238
+ };
1239
+ };
1240
+ var paginateDistinct_plugin_default = paginateDistinct;
1241
+
1242
+ // src/server/models/Check.model.ts
1243
+ var CheckSchema = new import_mongoose.Schema({
1244
+ name: {
1245
+ type: String,
1246
+ required: [true, 'CheckSchema: The "name" field must be required']
1247
+ },
1248
+ test: {
1249
+ type: import_mongoose.Schema.Types.ObjectId,
1250
+ ref: "VRSTest",
1251
+ required: [true, 'CheckSchema: The "test" field must be required']
1252
+ },
1253
+ suite: {
1254
+ type: import_mongoose.Schema.Types.ObjectId,
1255
+ ref: "VRSSuite",
1256
+ required: [true, 'CheckSchema: The "suite" field must be required']
1257
+ },
1258
+ app: {
1259
+ type: import_mongoose.Schema.Types.ObjectId,
1260
+ ref: "VRSApp",
1261
+ required: [true, 'CheckSchema: The "app" field must be required']
1262
+ },
1263
+ branch: {
1264
+ type: String
1265
+ },
1266
+ realBaselineId: {
1267
+ type: import_mongoose.Schema.Types.ObjectId,
1268
+ ref: "VRSBaseline"
1269
+ },
1270
+ baselineId: {
1271
+ type: import_mongoose.Schema.Types.ObjectId,
1272
+ ref: "VRSSnapshot"
1273
+ },
1274
+ actualSnapshotId: {
1275
+ type: import_mongoose.Schema.Types.ObjectId,
1276
+ ref: "VRSSnapshot"
1277
+ },
1278
+ diffId: {
1279
+ type: import_mongoose.Schema.Types.ObjectId,
1280
+ ref: "VRSSnapshot"
1281
+ },
1282
+ createdDate: {
1283
+ type: Date,
1284
+ required: true,
1285
+ default: Date.now
1286
+ },
1287
+ updatedDate: {
1288
+ type: Date
1289
+ },
1290
+ status: {
1291
+ type: [{
1292
+ type: String,
1293
+ enum: {
1294
+ values: ["new", "pending", "approved", "running", "passed", "failed", "aborted"],
1295
+ message: "status is required"
1296
+ }
1297
+ }],
1298
+ default: ["new"]
1299
+ },
1300
+ browserName: {
1301
+ type: String
1302
+ },
1303
+ browserVersion: {
1304
+ type: String
1305
+ },
1306
+ browserFullVersion: {
1307
+ type: String
1308
+ },
1309
+ viewport: {
1310
+ type: String
1311
+ },
1312
+ os: {
1313
+ type: String
1314
+ },
1315
+ domDump: {
1316
+ type: String
1317
+ },
1318
+ result: {
1319
+ type: String,
1320
+ default: "{}"
1321
+ },
1322
+ run: {
1323
+ type: import_mongoose.Schema.Types.ObjectId
1324
+ },
1325
+ markedAs: {
1326
+ type: String,
1327
+ enum: ["bug", "accepted"]
1328
+ },
1329
+ markedDate: {
1330
+ type: Date
1331
+ },
1332
+ markedById: {
1333
+ type: import_mongoose.Schema.Types.ObjectId,
1334
+ ref: "VRSUser"
1335
+ },
1336
+ markedByUsername: {
1337
+ type: String
1338
+ },
1339
+ markedBugComment: {
1340
+ type: String
1341
+ },
1342
+ creatorId: {
1343
+ type: import_mongoose.Schema.Types.ObjectId,
1344
+ ref: "VRSUser"
1345
+ },
1346
+ creatorUsername: {
1347
+ type: String
1348
+ },
1349
+ failReasons: {
1350
+ type: [String]
1351
+ },
1352
+ vOffset: {
1353
+ type: String
1354
+ },
1355
+ topStablePixels: {
1356
+ type: String
1357
+ },
1358
+ meta: {
1359
+ type: Object
1360
+ }
1361
+ });
1362
+ CheckSchema.plugin(toJSON_plugin_default);
1363
+ CheckSchema.plugin(paginate_plugin_default);
1364
+ var Check = import_mongoose.default.model("VRSCheck", CheckSchema);
1365
+ var Check_model_default = Check;
1366
+
1367
+ // src/server/models/Log.model.ts
1368
+ var import_mongoose2 = __toESM(require("mongoose"));
1369
+ var LogSchema = new import_mongoose2.Schema({
1370
+ timestamp: {
1371
+ type: Date
1372
+ },
1373
+ level: {
1374
+ type: String
1375
+ },
1376
+ message: {
1377
+ type: String
1378
+ },
1379
+ meta: {
1380
+ type: Object
1381
+ },
1382
+ hostname: {
1383
+ type: Object
1384
+ }
1385
+ });
1386
+ LogSchema.plugin(toJSON_plugin_default);
1387
+ LogSchema.plugin(paginate_plugin_default);
1388
+ var Log = import_mongoose2.default.model("VRSLog", LogSchema);
1389
+ var Log_model_default = Log;
1390
+
1391
+ // src/server/models/App.model.ts
1392
+ var import_mongoose3 = __toESM(require("mongoose"));
1393
+ var AppSchema = new import_mongoose3.Schema({
1394
+ name: {
1395
+ type: String,
1396
+ default: "Others",
1397
+ unique: true,
1398
+ required: [true, 'AppSchema: The "name" field must be required']
1399
+ },
1400
+ description: {
1401
+ type: String
1402
+ },
1403
+ version: {
1404
+ type: String
1405
+ },
1406
+ updatedDate: {
1407
+ type: Date
1408
+ },
1409
+ createdDate: {
1410
+ type: Date
1411
+ },
1412
+ meta: {
1413
+ type: Object
1414
+ }
1415
+ });
1416
+ AppSchema.plugin(paginate_plugin_default);
1417
+ AppSchema.plugin(toJSON_plugin_default);
1418
+ var App = import_mongoose3.default.model("VRSApp", AppSchema);
1419
+
1420
+ // src/server/models/Snapshot.model.ts
1421
+ var import_mongoose4 = __toESM(require("mongoose"));
1422
+ var SnapshotSchema = new import_mongoose4.Schema({
1423
+ name: {
1424
+ type: String,
1425
+ required: [true, 'SnapshotSchema: The "name" field must be required']
1426
+ },
1427
+ path: {
1428
+ type: String
1429
+ },
1430
+ filename: {
1431
+ type: String
1432
+ },
1433
+ imghash: {
1434
+ type: String,
1435
+ required: [true, 'SnapshotSchema: The "imghash" field must be required']
1436
+ },
1437
+ createdDate: {
1438
+ type: Date,
1439
+ default: Date.now
1440
+ },
1441
+ vOffset: {
1442
+ type: Number
1443
+ },
1444
+ hOffset: {
1445
+ type: Number
1446
+ }
1447
+ });
1448
+ SnapshotSchema.plugin(toJSON_plugin_default);
1449
+ SnapshotSchema.plugin(paginate_plugin_default);
1450
+ var Snapshot = import_mongoose4.default.model("VRSSnapshot", SnapshotSchema);
1451
+ var Snapshot_model_default = Snapshot;
1452
+
1453
+ // src/server/models/AppSettings.model.ts
1454
+ var import_mongoose5 = __toESM(require("mongoose"));
1455
+ var AppSettingsSchema = new import_mongoose5.Schema({
1456
+ name: {
1457
+ type: String,
1458
+ unique: true,
1459
+ required: [true, 'AppSettingsSchema: The "name" field must be required']
1460
+ },
1461
+ label: {
1462
+ type: String,
1463
+ required: [true, 'AppSettingsSchema: The "label" field must be required']
1464
+ },
1465
+ description: {
1466
+ type: String
1467
+ },
1468
+ type: {
1469
+ type: String,
1470
+ required: [true, 'AppSettingsSchema: The "type" field must be required']
1471
+ },
1472
+ value: {
1473
+ type: import_mongoose5.Schema.Types.Mixed,
1474
+ required: [true, 'AppSettingsSchema: The "value" field must be required']
1475
+ },
1476
+ env_variable: {
1477
+ type: String
1478
+ },
1479
+ enabled: {
1480
+ type: Boolean
1481
+ }
1482
+ });
1483
+ AppSettingsSchema.plugin(toJSON_plugin_default);
1484
+ var AppSettings = import_mongoose5.default.model("VRSAppSettings", AppSettingsSchema);
1485
+
1486
+ // src/server/models/Suite.model.ts
1487
+ var import_mongoose6 = __toESM(require("mongoose"));
1488
+ var SuiteSchema = new import_mongoose6.Schema({
1489
+ name: {
1490
+ type: String,
1491
+ default: "Others",
1492
+ unique: true,
1493
+ required: [true, 'SuiteSchema: The "name" field must be required']
1494
+ },
1495
+ tags: {
1496
+ type: [String]
1497
+ },
1498
+ app: {
1499
+ type: import_mongoose6.Schema.Types.ObjectId,
1500
+ ref: "VRSApp",
1501
+ required: [true, 'SuiteSchema: The "app" field must be required']
1502
+ },
1503
+ description: {
1504
+ type: String
1505
+ },
1506
+ updatedDate: {
1507
+ type: Date,
1508
+ default: Date.now
1509
+ },
1510
+ createdDate: {
1511
+ type: Date
1512
+ },
1513
+ meta: {
1514
+ type: Object
1515
+ }
1516
+ });
1517
+ SuiteSchema.plugin(paginate_plugin_default);
1518
+ SuiteSchema.plugin(toJSON_plugin_default);
1519
+ var Suite = import_mongoose6.default.model("VRSSuite", SuiteSchema);
1520
+ var Suite_model_default = Suite;
1521
+
1522
+ // src/server/models/Run.model.ts
1523
+ var import_mongoose7 = __toESM(require("mongoose"));
1524
+ var RunSchema = new import_mongoose7.Schema({
1525
+ name: {
1526
+ type: String,
1527
+ required: [true, 'RunSchema: The "name" field must be required']
1528
+ },
1529
+ app: {
1530
+ type: import_mongoose7.Schema.Types.ObjectId,
1531
+ ref: "VRSApp",
1532
+ required: [true, 'RunSchema: The "app" field must be required']
1533
+ },
1534
+ ident: {
1535
+ type: String,
1536
+ unique: true,
1537
+ required: [true, 'RunSchema: The "ident" field must be required']
1538
+ },
1539
+ description: {
1540
+ type: String
1541
+ },
1542
+ updatedDate: {
1543
+ type: Date,
1544
+ default: Date.now
1545
+ },
1546
+ createdDate: {
1547
+ type: Date
1548
+ },
1549
+ parameters: {
1550
+ type: [String]
1551
+ },
1552
+ meta: {
1553
+ type: Object
1554
+ }
1555
+ });
1556
+ RunSchema.plugin(paginate_plugin_default);
1557
+ RunSchema.plugin(toJSON_plugin_default);
1558
+ var Run = import_mongoose7.default.model("VRSRun", RunSchema);
1559
+ var Run_model_default = Run;
1560
+
1561
+ // src/server/models/User.model.ts
1562
+ var import_mongoose8 = __toESM(require("mongoose"));
1563
+ var import_passport_local_mongoose = __toESM(require("passport-local-mongoose"));
1564
+ var UserSchema = new import_mongoose8.Schema({
1565
+ username: {
1566
+ type: String,
1567
+ unique: true,
1568
+ required: [true, 'UserSchema: The "username" field must be required']
1569
+ },
1570
+ firstName: {
1571
+ type: String,
1572
+ required: [true, 'UserSchema: The "firstName" field must be required']
1573
+ },
1574
+ lastName: {
1575
+ type: String,
1576
+ required: [true, 'UserSchema: The "lastName" field must be required']
1577
+ },
1578
+ role: {
1579
+ type: String,
1580
+ enum: ["admin", "reviewer", "user"],
1581
+ required: [true, 'UserSchema: The "role" field must be required']
1582
+ },
1583
+ password: {
1584
+ type: String
1585
+ },
1586
+ token: {
1587
+ type: String
1588
+ },
1589
+ apiKey: {
1590
+ type: String
1591
+ },
1592
+ createdDate: {
1593
+ type: Date
1594
+ },
1595
+ updatedDate: {
1596
+ type: Date
1597
+ },
1598
+ expiration: {
1599
+ type: Date
1600
+ },
1601
+ meta: {
1602
+ type: Object
1603
+ }
1604
+ });
1605
+ UserSchema.statics.isEmailTaken = async function(username, excludeUserId) {
1606
+ const user = await this.findOne({ username, _id: { $ne: excludeUserId } });
1607
+ return !!user;
1608
+ };
1609
+ UserSchema.plugin(toJSON_plugin_default);
1610
+ UserSchema.plugin(paginate_plugin_default);
1611
+ UserSchema.plugin(import_passport_local_mongoose.default, { hashField: "password" });
1612
+ var User = import_mongoose8.default.model("VRSUser", UserSchema);
1613
+ var User_model_default = User;
1614
+
1615
+ // src/server/models/Baseline.model.ts
1616
+ var import_mongoose9 = __toESM(require("mongoose"));
1617
+ var BaselineSchema = new import_mongoose9.Schema({
1618
+ snapshootId: {
1619
+ type: import_mongoose9.Schema.Types.ObjectId
1620
+ },
1621
+ name: {
1622
+ type: String,
1623
+ required: [true, 'VRSBaselineSchema: The "name" field must be required']
1624
+ },
1625
+ app: {
1626
+ type: import_mongoose9.Schema.Types.ObjectId,
1627
+ ref: "VRSApp",
1628
+ required: [true, 'VRSBaselineSchema: The "app" field must be required']
1629
+ },
1630
+ branch: {
1631
+ type: String
1632
+ },
1633
+ browserName: {
1634
+ type: String
1635
+ },
1636
+ browserVersion: {
1637
+ type: String
1638
+ },
1639
+ browserFullVersion: {
1640
+ type: String
1641
+ },
1642
+ viewport: {
1643
+ type: String
1644
+ },
1645
+ os: {
1646
+ type: String
1647
+ },
1648
+ markedAs: {
1649
+ type: String,
1650
+ enum: ["bug", "accepted"]
1651
+ },
1652
+ lastMarkedDate: {
1653
+ type: Date
1654
+ },
1655
+ createdDate: {
1656
+ type: Date
1657
+ },
1658
+ updatedDate: {
1659
+ type: Date
1660
+ },
1661
+ markedById: {
1662
+ type: import_mongoose9.Schema.Types.ObjectId,
1663
+ ref: "VRSUser"
1664
+ },
1665
+ markedByUsername: {
1666
+ type: String
1667
+ },
1668
+ ignoreRegions: {
1669
+ type: String
1670
+ },
1671
+ boundRegions: {
1672
+ type: String
1673
+ },
1674
+ matchType: {
1675
+ type: String,
1676
+ enum: ["antialiasing", "nothing", "colors"]
1677
+ },
1678
+ meta: {
1679
+ type: Object
1680
+ }
1681
+ });
1682
+ BaselineSchema.plugin(toJSON_plugin_default);
1683
+ BaselineSchema.plugin(paginate_plugin_default);
1684
+ var Baseline = import_mongoose9.default.model("VRSBaseline", BaselineSchema);
1685
+ var Baseline_model_default = Baseline;
1686
+
1687
+ // src/server/models/Test.model.ts
1688
+ var import_mongoose10 = __toESM(require("mongoose"));
1689
+ var TestSchema = new import_mongoose10.Schema(
1690
+ {
1691
+ name: {
1692
+ type: String,
1693
+ required: "TestSchema: the test name is empty"
1694
+ },
1695
+ description: {
1696
+ type: String
1697
+ },
1698
+ status: {
1699
+ type: String
1700
+ },
1701
+ browserName: {
1702
+ type: String
1703
+ },
1704
+ browserVersion: {
1705
+ type: String
1706
+ },
1707
+ branch: {
1708
+ type: String
1709
+ },
1710
+ tags: {
1711
+ type: [String]
1712
+ },
1713
+ viewport: {
1714
+ type: String
1715
+ },
1716
+ calculatedViewport: {
1717
+ type: String
1718
+ },
1719
+ os: {
1720
+ type: String
1721
+ },
1722
+ app: {
1723
+ type: import_mongoose10.Schema.Types.ObjectId,
1724
+ ref: "VRSApp",
1725
+ required: [true, 'TestSchema: The "app" field must be required']
1726
+ },
1727
+ blinking: {
1728
+ type: Number,
1729
+ default: 0
1730
+ },
1731
+ updatedDate: {
1732
+ type: Date
1733
+ },
1734
+ startDate: {
1735
+ type: Date
1736
+ },
1737
+ checks: [
1738
+ {
1739
+ type: import_mongoose10.default.Schema.Types.ObjectId,
1740
+ ref: "VRSCheck"
1741
+ }
1742
+ ],
1743
+ suite: {
1744
+ type: import_mongoose10.Schema.Types.ObjectId,
1745
+ ref: "VRSSuite"
1746
+ },
1747
+ run: {
1748
+ type: import_mongoose10.Schema.Types.ObjectId,
1749
+ ref: "VRSRun"
1750
+ },
1751
+ markedAs: {
1752
+ type: String,
1753
+ enum: ["Bug", "Accepted", "Unaccepted", "Partially"]
1754
+ },
1755
+ creatorId: {
1756
+ type: import_mongoose10.Schema.Types.ObjectId,
1757
+ ref: "VRSUser"
1758
+ },
1759
+ creatorUsername: {
1760
+ type: String
1761
+ },
1762
+ meta: {
1763
+ type: Object
1764
+ }
1765
+ },
1766
+ { strictQuery: true }
1767
+ );
1768
+ TestSchema.plugin(toJSON_plugin_default);
1769
+ TestSchema.plugin(paginate_plugin_default);
1770
+ TestSchema.plugin(paginateDistinct_plugin_default);
1771
+ var Test = import_mongoose10.default.model("VRSTest", TestSchema);
1772
+ var Test_model_default = Test;
1773
+
1774
+ // src/server/utils/subDays.ts
1775
+ var subDays = (date, days) => {
1776
+ const result = new Date(date);
1777
+ result.setDate(result.getDate() - days);
1778
+ return result;
1779
+ };
1780
+ var subDays_default = subDays;
1781
+
1782
+ // src/server/lib/logger.ts
1783
+ var import_winston = __toESM(require("winston"));
1784
+ var import_winston_mongodb = require("winston-mongodb");
1785
+ var import_chalk = require("chalk");
1786
+
1787
+ // src/server/utils/formatISOToDateTime.ts
1788
+ function formatISOToDateTime(isoDateString) {
1789
+ const date = new Date(isoDateString);
1790
+ return `${date.toISOString().slice(0, 10)} ${date.toTimeString().slice(0, 8)}`;
1791
+ }
1792
+ var formatISOToDateTime_default = formatISOToDateTime;
1793
+
1794
+ // src/server/lib/logger.ts
1795
+ var import_path2 = __toESM(require("path"));
1796
+ var logLevel = env.SYNGRISI_LOG_LEVEL;
1797
+ function getScriptLine() {
1798
+ const stack = new Error().stack;
1799
+ if (stack) {
1800
+ const stackLines = stack.split("\n");
1801
+ let loggerLineIndex = -1;
1802
+ for (let i = 0; i < stackLines.length; i++) {
1803
+ if (stackLines[i].includes("lib/logger")) {
1804
+ loggerLineIndex = i;
1805
+ }
1806
+ }
1807
+ const targetLineIndex = loggerLineIndex + 1;
1808
+ if (targetLineIndex >= 0 && targetLineIndex < stackLines.length) {
1809
+ const targetLine = stackLines[targetLineIndex];
1810
+ const match = targetLine.match(/at\s+(?:.+\s+\()?(.+):(\d+):(\d+)\)?/);
1811
+ if (match) {
1812
+ const scriptPath = match[1];
1813
+ const relativePath = import_path2.default.relative(process.cwd(), scriptPath);
1814
+ const lineNumber = match[2];
1815
+ return `${relativePath}:${lineNumber}`;
1816
+ }
1817
+ }
1818
+ }
1819
+ return "unknown";
1820
+ }
1821
+ function createWinstonLogger(opts) {
1822
+ return import_winston.default.createLogger({
1823
+ transports: [
1824
+ new import_winston.default.transports.Console({
1825
+ level: logLevel || "silly",
1826
+ format: import_winston.default.format.combine(
1827
+ import_winston.default.format.colorize(),
1828
+ import_winston.default.format.timestamp(),
1829
+ import_winston.default.format.ms(),
1830
+ import_winston.default.format.metadata(),
1831
+ import_winston.default.format.printf((info) => {
1832
+ const user = info.metadata.user ? (0, import_chalk.blue)(` <${info.metadata.user}>`) : "";
1833
+ const ref = info.metadata.ref ? (0, import_chalk.gray)(` ${info.metadata.ref}`) : "";
1834
+ const msgType = info.metadata.msgType ? ` ${info.metadata.msgType}` : "";
1835
+ const itemType = info.metadata.itemType ? (0, import_chalk.magenta)(` ${info.metadata.itemType}`) : "";
1836
+ const scope = info.metadata.scope ? (0, import_chalk.magenta)(` [${info.metadata.scope}] `) : (0, import_chalk.magenta)(` [${getScriptLine()}] `);
1837
+ const msg = typeof info.message === "object" ? `
1838
+ ${JSON.stringify(info.message, null, 2)}` : info.message;
1839
+ return `${info.level} ${scope}${formatISOToDateTime_default(info.metadata.timestamp)} ${info.metadata.ms}${user}${ref}${msgType}${itemType} '${msg}'`;
1840
+ }),
1841
+ import_winston.default.format.padLevels()
1842
+ )
1843
+ }),
1844
+ new import_winston.default.transports.MongoDB({
1845
+ level: logLevel || "debug",
1846
+ format: import_winston.default.format.combine(
1847
+ import_winston.default.format.timestamp(),
1848
+ import_winston.default.format.json(),
1849
+ import_winston.default.format.metadata()
1850
+ ),
1851
+ options: {
1852
+ useUnifiedTopology: true
1853
+ },
1854
+ db: opts.dbConnectionString,
1855
+ collection: "vrslogs"
1856
+ })
1857
+ ]
1858
+ });
1859
+ }
1860
+ var Logger = class _Logger {
1861
+ constructor(opts = { dbConnectionString: config.connectionString }) {
1862
+ this.winstonLogger = createWinstonLogger(opts);
1863
+ }
1864
+ static mergeMeta(objects) {
1865
+ return objects.reduce((acc, obj) => {
1866
+ return { ...acc, ...obj };
1867
+ }, {});
1868
+ }
1869
+ log(severity, msg, meta) {
1870
+ const mergedMeta = _Logger.mergeMeta(meta);
1871
+ if (!mergedMeta.scope) {
1872
+ mergedMeta.scope = getScriptLine();
1873
+ }
1874
+ const formattedMsg = typeof msg === "object" ? JSON.stringify(msg, null, 2) : msg;
1875
+ this.winstonLogger.log(severity, formattedMsg, mergedMeta);
1876
+ }
1877
+ error(msg, ...meta) {
1878
+ let message = String(msg);
1879
+ let code = 0;
1880
+ if (msg instanceof Object) {
1881
+ message = JSON.stringify(msg);
1882
+ }
1883
+ if (msg instanceof Error) {
1884
+ message = msg.stack;
1885
+ }
1886
+ if (msg instanceof ApiError_default) {
1887
+ code = msg.statusCode;
1888
+ }
1889
+ this.log("error", `${code !== 0 ? "[" + code + "]" : ""}${message}
1890
+ stacktrace: ${new Error().stack}`, meta);
1891
+ }
1892
+ warn(msg, ...meta) {
1893
+ this.log("warn", `${msg}
1894
+ stacktrace: ${new Error().stack}`, meta);
1895
+ }
1896
+ info(msg, ...meta) {
1897
+ this.log("info", msg, meta);
1898
+ }
1899
+ verbose(msg, ...meta) {
1900
+ this.log("verbose", msg, meta);
1901
+ }
1902
+ debug(msg, ...meta) {
1903
+ this.log("debug", msg, meta);
1904
+ }
1905
+ silly(msg, ...meta) {
1906
+ this.log("silly", msg, meta);
1907
+ }
1908
+ };
1909
+ var logger_default = new Logger();
1910
+
1911
+ // src/seeds/testAdmin.json
1912
+ var testAdmin_default = {
1913
+ username: "Test",
1914
+ firstName: "Test",
1915
+ lastName: "Admin",
1916
+ role: "admin",
1917
+ openPassw: "123456aA-",
1918
+ password: "5b8d4960316d1fb0c92498c90da6c397cdf247cae71f01467a88e2b42d7af6f5ac7ca75d3bea6e3e0078111a2e5dfc1611f9a9a8908a5a3af5bcd64c42989608977de192829bdf8ada113a60f8f0704443c659789761865e29a3103dbf0773f5bf31e4685d475ece56afaceb949b6e7467eaa287a02e4142d095bcbf84acaefe47ee080799a28188890d39d3397e285d8b46c9a0efe9517428825b64ee1ebcc96d92c084733db866c767341381b6254aaa1ef36d1bf3d24e3f5b8d8b6b4080589b130e9c90914a3da74e5b6adf5f569bfd77460abae8ae4f87c2a375397a37f09861b9e114cead0cc34fff2d631fd4294260dea17e4fe098940dbee2cb80c62eb3701d40f5b204de776b8252d55e5f567c599b1fbcdae79278d1f375a4c8244a26a3b721dbeec56c8f39b3eb810942d392aae371ea81ded6b820dd4b489566a33c495f5c291ff238d07202d2ff04c52426828e44af98ec056a42d13f4b166ec170083e2fff9efe2b8cfdde529f3bce56b8427cf2d188861808ad07fd13e073b2a804e818b2882c13f559d52420b49f301263a9de34fe22b6df4a82ae70e7e4c29c88479878d2c21fbb810532532e7ad9a28f610b63033520e703f178e7b44d3e101ec0d4339c085ccc8bb290b3cb996c75c2b8deaacba8098b9ec02c7e47542891da3bd887c31cd8e0bdfa56bb844b1703368afe8dc42d668ff2e3374b939b4f",
1919
+ apiKey: "",
1920
+ salt: "c6211751bdc372f491a86bcbd8e4196dc393d14e14e5f17019d5c317afd5bc27"
1921
+ };
1922
+
1923
+ // src/server/services/tasks.service.ts
1924
+ var stringTable = import_string_table.default;
1925
+ function taskOutput(msg, res) {
1926
+ res.write(`${msg.toString()}
1927
+ `);
1928
+ logger_default.debug(msg.toString());
1929
+ }
1930
+ function parseHrtimeToSeconds(hrtime) {
1931
+ return (hrtime[0] + hrtime[1] / 1e9).toFixed(3);
1932
+ }
1933
+ var status = async (currentUser) => {
1934
+ const count = await User_model_default.countDocuments().exec();
1935
+ logger_default.silly(`server status: check users counts: ${count}`);
1936
+ if (count > 1) {
1937
+ return { alive: true, currentUser: currentUser?.username };
1938
+ }
1939
+ return { alive: false };
1940
+ };
1941
+ var screenshots = async () => {
1942
+ const files = import_fs2.default.readdirSync(config.defaultImagesPath);
1943
+ return files;
1944
+ };
1945
+ var loadTestUser = async () => {
1946
+ const logOpts = {
1947
+ itemType: "user",
1948
+ msgType: "LOAD",
1949
+ ref: "Administrator"
1950
+ };
1951
+ if (!env.SYNGRISI_TEST_MODE) {
1952
+ return { message: "the feature works only in test mode" };
1953
+ }
1954
+ const testAdmin = await User_model_default.findOne({ username: "Test" }).exec();
1955
+ if (!testAdmin) {
1956
+ logger_default.info("create the test Administrator", logOpts);
1957
+ const admin = await User_model_default.create(testAdmin_default);
1958
+ logger_default.info(`test Administrator with id: '${admin._id}' was created`, logOpts);
1959
+ return admin;
1960
+ }
1961
+ logger_default.info(`test admin is exists: ${JSON.stringify(testAdmin, null, 2)}`, logOpts);
1962
+ return { msg: `already exist '${testAdmin}'` };
1963
+ };
1964
+ var task_handle_database_consistency = async (options, res) => {
1965
+ res.writeHead(200, {
1966
+ "Content-Type": "text/event-stream",
1967
+ "Cache-Control": "no-cache",
1968
+ "Content-Encoding": "none",
1969
+ "x-no-compression": "true"
1970
+ });
1971
+ try {
1972
+ const startTime = process.hrtime();
1973
+ taskOutput("- starting...\n", res);
1974
+ taskOutput("---------------------------------", res);
1975
+ taskOutput("STAGE #1: Calculate Common stats", res);
1976
+ taskOutput("get runs data", res);
1977
+ const allRunsBefore = await Run_model_default.find().exec();
1978
+ taskOutput("get suites data", res);
1979
+ const allSuitesBefore = await Suite_model_default.find().exec();
1980
+ taskOutput("get tests data", res);
1981
+ const allTestsBefore = await Test_model_default.find().lean().exec();
1982
+ taskOutput("get checks data", res);
1983
+ const allChecksBefore = await Check_model_default.find().lean().exec();
1984
+ taskOutput("get snapshots data", res);
1985
+ const allSnapshotsBefore = await Snapshot_model_default.find().lean().exec();
1986
+ taskOutput("get files data", res);
1987
+ const allFilesBefore = (await import_fs2.promises.readdir(config.defaultImagesPath, { withFileTypes: true })).filter((item) => !item.isDirectory()).map((x) => x.name).filter((x) => x.includes(".png"));
1988
+ taskOutput("-----------------------------", res);
1989
+ const beforeStatTable = stringTable.create([
1990
+ { item: "suites", count: allSuitesBefore.length },
1991
+ { item: "runs", count: allRunsBefore.length },
1992
+ { item: "tests", count: allTestsBefore.length },
1993
+ { item: "checks", count: allChecksBefore.length },
1994
+ { item: "snapshots", count: allSnapshotsBefore.length },
1995
+ { item: "files", count: allFilesBefore.length }
1996
+ ]);
1997
+ res.flush();
1998
+ taskOutput(beforeStatTable, res);
1999
+ taskOutput("---------------------------------", res);
2000
+ taskOutput("STAGE #2: Calculate Inconsistent Items", res);
2001
+ taskOutput("> calculate abandoned snapshots", res);
2002
+ const abandonedSnapshots = allSnapshotsBefore.filter((sn) => !import_fs2.default.existsSync(`${config.defaultImagesPath}/${sn.filename}`));
2003
+ taskOutput("> calculate abandoned files", res);
2004
+ const snapshotsUniqueFiles = Array.from(new Set(allSnapshotsBefore.map((x) => x.filename)));
2005
+ const abandonedFiles = [];
2006
+ const progress = new ProgressBar(allFilesBefore.length);
2007
+ for (const [index, file] of allFilesBefore.entries()) {
2008
+ setTimeout(() => {
2009
+ progress.writeIfChange(index, allFilesBefore.length, taskOutput, res);
2010
+ }, 10);
2011
+ if (!snapshotsUniqueFiles.includes(file.toString())) {
2012
+ abandonedFiles.push(file);
2013
+ }
2014
+ }
2015
+ taskOutput("> calculate abandoned checks", res);
2016
+ const allSnapshotsBeforeIds = allSnapshotsBefore.map((x) => x._id.valueOf());
2017
+ const allChecksBeforeLight = allChecksBefore.map((x) => ({
2018
+ _id: x._id.valueOf(),
2019
+ baselineId: x.baselineId.valueOf(),
2020
+ actualSnapshotId: x.actualSnapshotId.valueOf()
2021
+ }));
2022
+ const abandonedChecks = [];
2023
+ const progressChecks = new ProgressBar(allChecksBefore.length);
2024
+ for (const [index, check] of allChecksBeforeLight.entries()) {
2025
+ progressChecks.writeIfChange(index, allChecksBeforeLight.length, taskOutput, res);
2026
+ if (!allSnapshotsBeforeIds.includes(check.baselineId) || !allSnapshotsBeforeIds.includes(check.actualSnapshotId.valueOf())) {
2027
+ abandonedChecks.push(check._id.valueOf());
2028
+ }
2029
+ }
2030
+ taskOutput("> calculate empty tests", res);
2031
+ const checksUniqueTests = (await Check_model_default.find().lean().distinct("test").exec()).map((x) => x.valueOf());
2032
+ const emptyTests = [];
2033
+ for (const [index, test] of allTestsBefore.entries()) {
2034
+ if (!checksUniqueTests.includes(test._id.valueOf())) {
2035
+ emptyTests.push(test._id.valueOf());
2036
+ }
2037
+ }
2038
+ taskOutput("> calculate empty runs", res);
2039
+ const checksUniqueRuns = (await Check_model_default.find().distinct("run").exec()).map((x) => x.valueOf());
2040
+ const emptyRuns = [];
2041
+ for (const run of allRunsBefore) {
2042
+ if (!checksUniqueRuns.includes(run._id.valueOf())) {
2043
+ emptyRuns.push(run._id.valueOf());
2044
+ }
2045
+ }
2046
+ taskOutput("> calculate empty suites", res);
2047
+ const checksUniqueSuites = (await Check_model_default.find().distinct("suite").exec()).map((x) => x.valueOf());
2048
+ const emptySuites = [];
2049
+ for (const suite of allSuitesBefore) {
2050
+ if (!checksUniqueSuites.includes(suite._id.valueOf())) {
2051
+ emptySuites.push(suite._id.valueOf());
2052
+ }
2053
+ }
2054
+ taskOutput("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~", res);
2055
+ taskOutput("Current inconsistent items:", res);
2056
+ const inconsistentStatTable = stringTable.create([
2057
+ { item: "empty suites", count: emptySuites.length },
2058
+ { item: "empty runs", count: emptyRuns.length },
2059
+ { item: "empty tests", count: emptyTests.length },
2060
+ { item: "abandoned checks", count: abandonedChecks.length },
2061
+ { item: "abandoned snapshots", count: abandonedSnapshots.length },
2062
+ { item: "abandoned files", count: abandonedFiles.length }
2063
+ ]);
2064
+ taskOutput(inconsistentStatTable, res);
2065
+ if (options.clean) {
2066
+ taskOutput("---------------------------------", res);
2067
+ taskOutput("STAGE #3: Remove non consistent items", res);
2068
+ taskOutput("> remove empty suites", res);
2069
+ await Suite_model_default.deleteMany({ _id: { $in: emptySuites } });
2070
+ taskOutput("> remove empty runs", res);
2071
+ await Run_model_default.deleteMany({ _id: { $in: emptyRuns } });
2072
+ taskOutput("> remove empty tests", res);
2073
+ await Test_model_default.deleteMany({ _id: { $in: emptyTests } });
2074
+ taskOutput("> remove abandoned checks", res);
2075
+ await Check_model_default.deleteMany({ _id: { $in: abandonedChecks } });
2076
+ taskOutput("> remove abandoned snapshots", res);
2077
+ await Snapshot_model_default.deleteMany({ _id: { $in: abandonedSnapshots } });
2078
+ taskOutput("> remove abandoned files", res);
2079
+ await Promise.all(abandonedFiles.map((filename) => import_fs2.promises.unlink(`${config.defaultImagesPath}/${filename}`)));
2080
+ const allFilesAfter = import_fs2.default.readdirSync(config.defaultImagesPath, { withFileTypes: true }).filter((item) => !item.isDirectory()).map((x) => x.name).filter((x) => x.includes(".png"));
2081
+ taskOutput("STAGE #4: Calculate Common stats after cleaning", res);
2082
+ taskOutput("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~", res);
2083
+ taskOutput("Current items:", res);
2084
+ const afterStatTable = stringTable.create([
2085
+ { item: "suites", count: await Suite_model_default.countDocuments() },
2086
+ { item: "runs", count: await Run_model_default.countDocuments() },
2087
+ { item: "tests", count: await Test_model_default.countDocuments() },
2088
+ { item: "checks", count: await Check_model_default.countDocuments() },
2089
+ { item: "snapshots", count: await Snapshot_model_default.countDocuments() },
2090
+ { item: "files", count: allFilesAfter.length }
2091
+ ]);
2092
+ taskOutput(afterStatTable, res);
2093
+ }
2094
+ const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(startTime));
2095
+ taskOutput(`> Done in ${elapsedSeconds} seconds, ${elapsedSeconds / 60} min`, res);
2096
+ taskOutput("- end...\n", res);
2097
+ } catch (e) {
2098
+ const errMsg2 = e instanceof Error ? e.message : String(e);
2099
+ logger_default.error(errMsg2);
2100
+ taskOutput(errMsg2, res);
2101
+ } finally {
2102
+ res.end();
2103
+ }
2104
+ };
2105
+ var task_remove_old_logs = async (options, res) => {
2106
+ res.writeHead(200, {
2107
+ "Content-Type": "text/event-stream",
2108
+ "Cache-Control": "no-cache",
2109
+ "Content-Encoding": "none"
2110
+ });
2111
+ const trashHoldDate = subDays_default(/* @__PURE__ */ new Date(), parseInt(options.days, 10));
2112
+ const filter = { timestamp: { $lt: trashHoldDate } };
2113
+ const allLogsCountBefore = await Log_model_default.find({}).countDocuments();
2114
+ const oldLogsCount = await Log_model_default.find(filter).countDocuments();
2115
+ taskOutput(`- the count of all documents is: '${allLogsCountBefore}'
2116
+ `, res);
2117
+ taskOutput(`- the count of documents to be removed is: '${oldLogsCount}'
2118
+ `, res);
2119
+ if (options.statistics === "false") {
2120
+ taskOutput(`- will remove all logs older that: '${options.days}' days, '${dateToISO8601_default(trashHoldDate)}'
2121
+ `, res);
2122
+ await Log_model_default.deleteMany(filter);
2123
+ const allLogsCountAfter = await Log_model_default.find({}).countDocuments();
2124
+ taskOutput(`- the count of all documents now is: '${allLogsCountAfter}'
2125
+ `, res);
2126
+ }
2127
+ taskOutput("> Done", res);
2128
+ res.end();
2129
+ };
2130
+ var task_handle_old_checks = async (options, res) => {
2131
+ res.writeHead(200, {
2132
+ "Content-Type": "text/event-stream",
2133
+ "Cache-Control": "no-cache",
2134
+ "Content-Encoding": "none"
2135
+ });
2136
+ try {
2137
+ const startTime = process.hrtime();
2138
+ taskOutput("- starting...\n", res);
2139
+ taskOutput("STAGE #1 Calculate common stats", res);
2140
+ const trashHoldDate = subDays_default(/* @__PURE__ */ new Date(), parseInt(options.days, 10));
2141
+ taskOutput("> get all checks data", res);
2142
+ const allChecksBefore = await Check_model_default.find().lean().exec();
2143
+ taskOutput("> get snapshots data", res);
2144
+ const allSnapshotsBefore = await Snapshot_model_default.find().lean().exec();
2145
+ taskOutput("> get files data", res);
2146
+ const allFilesBefore = (await import_fs2.promises.readdir(config.defaultImagesPath, { withFileTypes: true })).filter((item) => !item.isDirectory()).map((x) => x.name).filter((x) => x.includes(".png"));
2147
+ taskOutput("> get old checks data", res);
2148
+ const oldChecks = await Check_model_default.find({ createdDate: { $lt: trashHoldDate } }).lean().exec();
2149
+ taskOutput(">>> collect all baselineIds for old Checks ", res);
2150
+ const oldSnapshotsBaselineIdIds = oldChecks.map((x) => x.baselineId).filter((x) => x);
2151
+ taskOutput(">>> collect all actualSnapshotId for old Checks ", res);
2152
+ const oldSnapshotsActualSnapshotIdIds = oldChecks.map((x) => x.actualSnapshotId).filter((x) => x);
2153
+ taskOutput(">>> collect all diffId for old Checks ", res);
2154
+ const oldSnapshotsDiffIds = oldChecks.map((x) => x.diffId).filter((x) => x);
2155
+ taskOutput(">>> calculate all unique snapshots ids for old Checks ", res);
2156
+ const allOldSnapshotsUniqueIds = Array.from(/* @__PURE__ */ new Set([...oldSnapshotsBaselineIdIds, ...oldSnapshotsActualSnapshotIdIds, ...oldSnapshotsDiffIds])).map((x) => x.valueOf());
2157
+ taskOutput(">>> collect all old snapshots", res);
2158
+ const oldSnapshots = await Snapshot_model_default.find({ _id: { $in: allOldSnapshotsUniqueIds } }).lean();
2159
+ const outTable = stringTable.create([
2160
+ { item: "all checks", count: allChecksBefore.length },
2161
+ { item: "all snapshots", count: allSnapshotsBefore.length },
2162
+ { item: "all files", count: allFilesBefore.length },
2163
+ { item: `checks older than: '${options.days}' days`, count: oldChecks.length },
2164
+ { item: "old snapshots baseline ids", count: oldSnapshotsBaselineIdIds.length },
2165
+ { item: "old snapshots actual snapshotId", count: oldSnapshotsActualSnapshotIdIds.length },
2166
+ { item: "old snapshots diffIds", count: oldSnapshotsDiffIds.length },
2167
+ { item: "all old snapshots unique Ids", count: allOldSnapshotsUniqueIds.length },
2168
+ { item: "all old snapshots", count: oldSnapshots.length }
2169
+ ]);
2170
+ taskOutput(outTable, res);
2171
+ if (options.remove === "true") {
2172
+ taskOutput(`STAGE #2 Remove checks that older that: '${options.days}' days, '${dateToISO8601_default(trashHoldDate)}'
2173
+ `, res);
2174
+ taskOutput("> remove checks", res);
2175
+ const checkRemovingResult = await Check_model_default.deleteMany({ createdDate: { $lt: trashHoldDate } });
2176
+ taskOutput(`>>> removed: '${checkRemovingResult.deletedCount}'`, res);
2177
+ taskOutput("> remove snapshots", res);
2178
+ taskOutput(">> collect data to removing", res);
2179
+ taskOutput(">>> get all baselines snapshots id`s", res);
2180
+ const baselinesSnapshotsIds = await Baseline_model_default.find({}).distinct("snapshootId");
2181
+ taskOutput(">>> get all checks snapshots baselineId", res);
2182
+ const checksSnapshotsBaselineId = await Check_model_default.find({}).distinct("baselineId");
2183
+ taskOutput(">>> get all checks snapshots actualSnapshotId", res);
2184
+ const checksSnapshotsActualSnapshotId = await Check_model_default.find({}).distinct("actualSnapshotId");
2185
+ taskOutput(">> remove baselines snapshots", res);
2186
+ taskOutput(">> remove all old snapshots that not related to new baseline and check items", res);
2187
+ const removedByBaselineSnapshotsResult = await Snapshot_model_default.deleteMany({
2188
+ $and: [
2189
+ { _id: { $nin: checksSnapshotsBaselineId } },
2190
+ { _id: { $nin: checksSnapshotsActualSnapshotId } },
2191
+ { _id: { $nin: baselinesSnapshotsIds } },
2192
+ { _id: { $in: oldSnapshotsBaselineIdIds } }
2193
+ ]
2194
+ });
2195
+ taskOutput(`>>> removed: '${removedByBaselineSnapshotsResult.deletedCount}'`, res);
2196
+ taskOutput(">> remove actual snapshots", res);
2197
+ taskOutput(">> remove all old snapshots that not related to new baseline and check items", res);
2198
+ const removedByActualSnapshotsResult = await Snapshot_model_default.deleteMany({
2199
+ $and: [
2200
+ { _id: { $nin: checksSnapshotsBaselineId } },
2201
+ { _id: { $nin: checksSnapshotsActualSnapshotId } },
2202
+ { _id: { $nin: baselinesSnapshotsIds } },
2203
+ { _id: { $in: oldSnapshotsActualSnapshotIdIds } }
2204
+ ]
2205
+ });
2206
+ taskOutput(`>>> removed: '${removedByActualSnapshotsResult.deletedCount}'`, res);
2207
+ taskOutput(">> remove all old diff snapshots", res);
2208
+ const removedByDiffSnapshotsResult = await Snapshot_model_default.deleteMany({
2209
+ $and: [
2210
+ { _id: { $in: oldSnapshotsDiffIds } }
2211
+ ]
2212
+ });
2213
+ taskOutput(`>>> removed: '${removedByDiffSnapshotsResult.deletedCount}'`, res);
2214
+ taskOutput("> remove files", res);
2215
+ taskOutput(">>> collect all old snapshots filenames", res);
2216
+ const oldSnapshotsUniqueFilenames = Array.from(new Set(oldSnapshots.map((x) => x.filename)));
2217
+ taskOutput(`>> found: ${oldSnapshotsUniqueFilenames.length}`, res);
2218
+ taskOutput("> get all current snapshots filenames", res);
2219
+ const allCurrentSnapshotsFilenames = await Snapshot_model_default.find().distinct("filename").exec();
2220
+ taskOutput(">> calculate interception between all current snapshot filenames and old shapshots filenames", res);
2221
+ const arrayIntersection = (arr1, arr2) => arr1.filter((x) => arr2.includes(x));
2222
+ const filesInterception = arrayIntersection(allCurrentSnapshotsFilenames, oldSnapshotsUniqueFilenames);
2223
+ taskOutput(`>> found: ${filesInterception.length}`, res);
2224
+ taskOutput(">> calculate filenames to remove", res);
2225
+ const arrayDiff = (arr1, arr2) => arr1.filter((x) => !arr2.includes(x));
2226
+ const filesToDelete = arrayDiff(oldSnapshotsUniqueFilenames, filesInterception);
2227
+ taskOutput(`>> found: ${filesToDelete.length}`, res);
2228
+ taskOutput(`>> remove these files: ${filesToDelete.length}`, res);
2229
+ await Promise.all(filesToDelete.map((filename) => import_fs2.promises.unlink(`${config.defaultImagesPath}/${filename}`)));
2230
+ taskOutput(`>> done: ${filesToDelete.length}`, res);
2231
+ taskOutput("STAGE #3 Calculate common stats after Removing", res);
2232
+ taskOutput("> get all checks data", res);
2233
+ const allChecksAfter = await Check_model_default.find().lean().exec();
2234
+ taskOutput("> get snapshots data", res);
2235
+ const allSnapshotsAfter = await Snapshot_model_default.find().lean().exec();
2236
+ taskOutput("> get files data", res);
2237
+ const allFilesAfter = (await import_fs2.promises.readdir(config.defaultImagesPath, { withFileTypes: true })).filter((item) => !item.isDirectory()).map((x) => x.name).filter((x) => x.includes(".png"));
2238
+ const outTableAfter = stringTable.create([
2239
+ { item: "all checks", count: allChecksAfter.length },
2240
+ { item: "all snapshots", count: allSnapshotsAfter.length },
2241
+ { item: "all files", count: allFilesAfter.length }
2242
+ ]);
2243
+ taskOutput(outTableAfter, res);
2244
+ }
2245
+ const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(startTime));
2246
+ taskOutput(`> done in ${elapsedSeconds} seconds ${elapsedSeconds / 60} min`, res);
2247
+ } catch (e) {
2248
+ const errMsg2 = e instanceof Error ? e.message : String(e);
2249
+ logger_default.error(errMsg2);
2250
+ taskOutput(errMsg2, res);
2251
+ } finally {
2252
+ res.end();
2253
+ }
2254
+ };
2255
+ var task_test = async (options = "empty", req, res) => {
2256
+ res.writeHead(200, {
2257
+ "Content-Type": "text/event-stream",
2258
+ "Cache-Control": "no-cache",
2259
+ "Content-Encoding": "none"
2260
+ });
2261
+ const x = 1e3;
2262
+ let isAborted = false;
2263
+ req.on("close", () => {
2264
+ isAborted = true;
2265
+ });
2266
+ for (let i = 0; i < x; i += 1) {
2267
+ taskOutput(`- Task Output: '${i}', options: ${options}
2268
+ `, res);
2269
+ if (isAborted) {
2270
+ taskOutput("the task was aborted\n", res);
2271
+ logger_default.warn("the task was aborted");
2272
+ res.flush();
2273
+ return res.end();
2274
+ }
2275
+ }
2276
+ return res.end();
2277
+ };
2278
+ // Annotate the CommonJS export names for ESM import in node:
2279
+ 0 && (module.exports = {
2280
+ loadTestUser,
2281
+ screenshots,
2282
+ status,
2283
+ task_handle_database_consistency,
2284
+ task_handle_old_checks,
2285
+ task_remove_old_logs,
2286
+ task_test
2287
+ });
2288
+ //# sourceMappingURL=tasks.service.js.map