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