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