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