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