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