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