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