@ozdao/martyrs 0.2.585 → 0.2.586

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 (386) hide show
  1. package/dist/auth.server.js +161 -96
  2. package/dist/{authJwt-J1csaMWA.js → authJwt-DKbMMjw0.js} +33 -0
  3. package/dist/chats.server.js +2 -2
  4. package/dist/community.server.js +1 -1
  5. package/dist/core.server.js +191 -2
  6. package/dist/{core.websocket-C2FxNmZ1.js → core.websocket-Cl76z2wT.js} +41 -5
  7. package/dist/{crud-q1ye5IhV.js → crud-DpOXTZep.js} +1 -1
  8. package/dist/events.server.js +2 -2
  9. package/dist/files.server.js +1 -1
  10. package/dist/gallery.server.js +1 -1
  11. package/dist/index-kvBwwb0w.js +427 -0
  12. package/dist/inventory.server.js +2 -2
  13. package/dist/{mailing-DuEFRsa3.js → mailing-DT7nbNjZ.js} +16 -3
  14. package/dist/{main-xL-jtBkT.js → main-BIf-WirR.js} +863 -865
  15. package/dist/marketplace.server.js +1 -1
  16. package/dist/martyrs/dist/{main-xL-jtBkT.js → main-BIf-WirR.js} +192 -38
  17. package/dist/martyrs/dist/main-BIf-WirR.js.map +1 -0
  18. package/dist/martyrs/dist/{web-BA6h6Z8P.js → web-O7lXcjg0.js} +2 -2
  19. package/dist/martyrs/dist/{web-BA6h6Z8P.js.map → web-O7lXcjg0.js.map} +1 -1
  20. package/dist/martyrs/src/components/Button/{Button.vue2.js → Button.vue.js} +8 -7
  21. package/dist/martyrs/src/components/Button/Button.vue.js.map +1 -0
  22. package/dist/martyrs/src/components/Feed/Feed.vue.js +1 -1
  23. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +1 -1
  24. package/dist/martyrs/src/components/Loader/Loader.vue.js +1 -1
  25. package/dist/martyrs/src/components/Loader/Loader.vue.js.map +1 -1
  26. package/dist/martyrs/src/components/Spoiler/{Spoiler.vue2.js → Spoiler.vue.js} +2 -2
  27. package/dist/martyrs/src/components/Spoiler/Spoiler.vue.js.map +1 -0
  28. package/dist/martyrs/src/components/Tooltip/Tooltip.vue2.js +17 -22
  29. package/dist/martyrs/src/components/Tooltip/Tooltip.vue2.js.map +1 -1
  30. package/dist/martyrs/src/modules/auth/auth.client.js +18 -24
  31. package/dist/martyrs/src/modules/auth/auth.client.js.map +1 -1
  32. package/dist/martyrs/src/modules/auth/views/components/blocks/OtpDialog.vue.js +178 -0
  33. package/dist/martyrs/src/modules/auth/views/components/blocks/OtpDialog.vue.js.map +1 -0
  34. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
  35. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +53 -45
  36. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
  37. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +198 -14
  38. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js.map +1 -1
  39. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +1 -1
  40. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +70 -29
  41. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js.map +1 -1
  42. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +2 -2
  43. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js.map +1 -1
  44. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +86 -30
  45. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js.map +1 -1
  46. package/dist/martyrs/src/modules/auth/views/plugins/otp.plugin.js +100 -0
  47. package/dist/martyrs/src/modules/auth/views/plugins/otp.plugin.js.map +1 -0
  48. package/dist/martyrs/src/modules/auth/views/router/auth.router.js +2 -31
  49. package/dist/martyrs/src/modules/auth/views/router/auth.router.js.map +1 -1
  50. package/dist/martyrs/src/modules/auth/views/router/users.router.js +0 -14
  51. package/dist/martyrs/src/modules/auth/views/router/users.router.js.map +1 -1
  52. package/dist/martyrs/src/modules/auth/views/store/auth.js +1 -56
  53. package/dist/martyrs/src/modules/auth/views/store/auth.js.map +1 -1
  54. package/dist/martyrs/src/modules/auth/views/store/users.js +5 -1
  55. package/dist/martyrs/src/modules/auth/views/store/users.js.map +1 -1
  56. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
  57. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
  58. package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js +0 -1
  59. package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js.map +1 -1
  60. package/dist/martyrs/src/modules/core/views/components/blocks/PopupAuth.vue.js +1 -1
  61. package/dist/martyrs/src/modules/core/views/components/blocks/PopupDateSelector.vue.js +1 -1
  62. package/dist/martyrs/src/modules/core/views/components/elements/OnlineIndicator.vue.js +74 -0
  63. package/dist/martyrs/src/modules/core/views/components/elements/OnlineIndicator.vue.js.map +1 -0
  64. package/dist/martyrs/src/modules/core/views/components/layouts/App.vue.js.map +1 -1
  65. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +63 -47
  66. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
  67. package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js +1 -1
  68. package/dist/martyrs/src/modules/core/views/components/partials/Navigation.vue.js +1 -1
  69. package/dist/martyrs/src/modules/core/views/components/partials/NavigationBar.vue.js +1 -1
  70. package/dist/martyrs/src/modules/core/views/components/sections/{Filters.vue2.js → Filters.vue.js} +2 -2
  71. package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue.js.map +1 -0
  72. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
  73. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
  74. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
  75. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
  76. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +1 -1
  77. package/dist/martyrs/src/modules/events/components/sections/EditTickets.vue.js +1 -1
  78. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
  79. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +1 -1
  80. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +1 -1
  81. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +1 -1
  82. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +1 -1
  83. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
  84. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js +1 -1
  85. package/dist/martyrs/src/modules/marketplace/views/components/pages/Marketplace.vue.js +1 -1
  86. package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js +1 -1
  87. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
  88. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +1 -1
  89. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
  90. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
  91. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +1 -1
  92. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
  93. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +1 -1
  94. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
  95. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +1 -1
  96. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +1 -1
  97. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +1 -1
  98. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
  99. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +1 -1
  100. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +1 -1
  101. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +1 -1
  102. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +0 -1
  103. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js.map +1 -1
  104. package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js +1 -1
  105. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
  106. package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js +1 -1
  107. package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +1 -1
  108. package/dist/martyrs/src/modules/notifications/components/sections/NotificationPreferences.vue.js +1 -1
  109. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +1 -1
  110. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +1 -1
  111. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +1 -2
  112. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js.map +1 -1
  113. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
  114. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
  115. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
  116. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +1 -1
  117. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +1 -1
  118. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +1 -1
  119. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +1 -1
  120. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
  121. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +1 -1
  122. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +2 -2
  123. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +1 -1
  124. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +1 -1
  125. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +2 -2
  126. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -2
  127. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js.map +1 -1
  128. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
  129. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +0 -1
  130. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js.map +1 -1
  131. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +0 -1
  132. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js.map +1 -1
  133. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
  134. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
  135. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +0 -1
  136. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js.map +1 -1
  137. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +2 -2
  138. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +0 -1
  139. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js.map +1 -1
  140. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
  141. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +3 -3
  142. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
  143. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +1 -1
  144. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +1 -1
  145. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +1 -1
  146. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js +1 -1
  147. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
  148. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
  149. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +1 -1
  150. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
  151. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +1 -1
  152. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
  153. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  154. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
  155. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js +1 -1
  156. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +1 -1
  157. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +1 -1
  158. package/dist/martyrs.css +1 -1
  159. package/dist/martyrs.es.js +1 -1
  160. package/dist/music.server.js +1 -1
  161. package/dist/notifications.server.js +1 -1
  162. package/dist/orders.server.js +7 -6
  163. package/dist/organizations.server.js +2 -2
  164. package/dist/products.server.js +2 -2
  165. package/dist/profile.schema-C31Lynn3.js +21 -0
  166. package/dist/rents.server.js +1 -1
  167. package/dist/sessions.service-COcwjd0f.js +86 -0
  168. package/dist/style.css +178 -108
  169. package/dist/{tickets.controller-B7r0mK-5.js → tickets.controller-DdF85W-i.js} +1 -1
  170. package/dist/visitors.service-B1dhhuSo.js +83 -0
  171. package/dist/wallet.server.js +2 -2
  172. package/dist/{web-BA6h6Z8P.js → web-O7lXcjg0.js} +1 -1
  173. package/package.json +5 -1
  174. package/src/cli/commands/create.js +106 -0
  175. package/src/cli/index.js +25 -0
  176. package/src/cli/templates/app/.env.development.mustache +14 -0
  177. package/src/cli/templates/app/.env.production.mustache +14 -0
  178. package/src/cli/templates/app/Dockerfile +36 -0
  179. package/src/cli/templates/app/babel.config.js +14 -0
  180. package/src/cli/templates/app/env.js +3 -0
  181. package/src/cli/templates/app/index.js +46 -0
  182. package/src/cli/templates/app/mongodb.config.js +18 -0
  183. package/src/cli/templates/app/package.json.mustache +65 -0
  184. package/src/cli/templates/app/src/client.js +22 -0
  185. package/src/cli/templates/app/src/components/pages/Index.vue +11 -0
  186. package/src/cli/templates/app/src/configs/global.config.js.mustache +40 -0
  187. package/src/cli/templates/app/src/localization/extensions.js +2 -0
  188. package/src/cli/templates/app/src/localization/index.js +44 -0
  189. package/src/cli/templates/app/src/localization/overrides.js +2 -0
  190. package/src/cli/templates/app/src/localization/translations.js +10 -0
  191. package/src/cli/templates/app/src/models/index.js +9 -0
  192. package/src/cli/templates/app/src/router/index.js +48 -0
  193. package/src/cli/templates/app/src/scss/theme.scss +18 -0
  194. package/src/cli/templates/app/src/server.js +68 -0
  195. package/src/cli/templates/app/src/store/index.js +9 -0
  196. package/src/cli/templates/docker-compose.yaml.mustache +47 -0
  197. package/src/cli/templates/nginx/Dockerfile +5 -0
  198. package/src/cli/templates/nginx/default.conf.mustache +55 -0
  199. package/src/cli/templates/public/favicon/.gitkeep +0 -0
  200. package/src/cli/templates/start-dev.sh.mustache +131 -0
  201. package/src/cli/templates/start-prod.sh.mustache +12 -0
  202. package/src/components/Button/Button.vue +61 -15
  203. package/src/components/Loader/Loader.vue +1 -1
  204. package/src/components/Tooltip/Tooltip.vue +31 -23
  205. package/src/modules/TASKS.MD +30 -1
  206. package/src/modules/auth/CLAUDE.md +381 -0
  207. package/src/modules/auth/FIXES.md +0 -38
  208. package/src/modules/auth/auth.client.js +4 -6
  209. package/src/modules/auth/auth.server.js +4 -15
  210. package/src/modules/auth/controllers/middlewares/authJwt.js +59 -17
  211. package/src/modules/auth/controllers/middlewares/index.js +4 -1
  212. package/src/modules/auth/controllers/middlewares/otp.middleware.js +166 -0
  213. package/src/modules/auth/controllers/middlewares/verifySignUp.js +0 -1
  214. package/src/modules/auth/controllers/middlewares/verifyUser.js +58 -11
  215. package/src/modules/auth/controllers/routes/auth.routes.js +48 -6
  216. package/src/modules/auth/controllers/routes/users.routes.js +29 -8
  217. package/src/modules/auth/controllers/services/auth.service.js +62 -12
  218. package/src/modules/auth/controllers/services/otp.service.js +109 -0
  219. package/src/modules/auth/controllers/services/users.service.js +46 -6
  220. package/src/modules/auth/models/otp.model.js +20 -0
  221. package/src/modules/auth/views/components/blocks/OtpDialog.vue +168 -0
  222. package/src/modules/auth/views/components/pages/Profile.vue +18 -13
  223. package/src/modules/auth/views/components/pages/ProfileEditAccount.vue +199 -45
  224. package/src/modules/auth/views/components/pages/ResetPassword.vue +170 -132
  225. package/src/modules/auth/views/components/pages/SignIn.vue +2 -1
  226. package/src/modules/auth/views/components/pages/SignUp.vue +203 -147
  227. package/src/modules/auth/views/plugins/otp.plugin.js +104 -0
  228. package/src/modules/auth/views/router/auth.router.js +1 -24
  229. package/src/modules/auth/views/router/users.router.js +1 -12
  230. package/src/modules/auth/views/store/auth.js +0 -68
  231. package/src/modules/auth/views/store/users.js +6 -2
  232. package/src/modules/core/controllers/classes/core.websocket.js +57 -6
  233. package/src/modules/core/controllers/middlewares/visitor.logger.js +49 -0
  234. package/src/modules/core/controllers/services/requests.service.js +53 -0
  235. package/src/modules/core/controllers/services/sessions.service.js +98 -0
  236. package/src/modules/core/controllers/services/visitors.service.js +102 -0
  237. package/src/modules/core/controllers/utils/mailing.js +16 -3
  238. package/src/modules/core/core.server.js +45 -3
  239. package/src/modules/core/models/request.model.js +30 -0
  240. package/src/modules/core/models/session.model.js +43 -0
  241. package/src/modules/core/models/visitor.model.js +28 -0
  242. package/src/modules/core/views/components/elements/OnlineIndicator.vue +115 -0
  243. package/src/modules/core/views/components/layouts/App.vue +2 -2
  244. package/src/modules/core/views/components/layouts/Client.vue +443 -477
  245. package/src/modules/orders/controllers/orders.controller.js +3 -3
  246. package/src/modules/products/components/pages/Products.vue +1 -1
  247. package/dist/_virtual/alignment-pattern.js +0 -5
  248. package/dist/_virtual/alignment-pattern.js.map +0 -1
  249. package/dist/_virtual/browser.js +0 -8
  250. package/dist/_virtual/browser.js.map +0 -1
  251. package/dist/_virtual/browser2.js +0 -5
  252. package/dist/_virtual/browser2.js.map +0 -1
  253. package/dist/_virtual/canvas.js +0 -5
  254. package/dist/_virtual/canvas.js.map +0 -1
  255. package/dist/_virtual/dijkstra.js +0 -5
  256. package/dist/_virtual/dijkstra.js.map +0 -1
  257. package/dist/_virtual/error-correction-code.js +0 -5
  258. package/dist/_virtual/error-correction-code.js.map +0 -1
  259. package/dist/_virtual/error-correction-level.js +0 -5
  260. package/dist/_virtual/error-correction-level.js.map +0 -1
  261. package/dist/_virtual/finder-pattern.js +0 -5
  262. package/dist/_virtual/finder-pattern.js.map +0 -1
  263. package/dist/_virtual/format-info.js +0 -5
  264. package/dist/_virtual/format-info.js.map +0 -1
  265. package/dist/_virtual/galois-field.js +0 -5
  266. package/dist/_virtual/galois-field.js.map +0 -1
  267. package/dist/_virtual/mask-pattern.js +0 -5
  268. package/dist/_virtual/mask-pattern.js.map +0 -1
  269. package/dist/_virtual/mode.js +0 -5
  270. package/dist/_virtual/mode.js.map +0 -1
  271. package/dist/_virtual/polynomial.js +0 -5
  272. package/dist/_virtual/polynomial.js.map +0 -1
  273. package/dist/_virtual/qrcode.js +0 -5
  274. package/dist/_virtual/qrcode.js.map +0 -1
  275. package/dist/_virtual/regex.js +0 -5
  276. package/dist/_virtual/regex.js.map +0 -1
  277. package/dist/_virtual/segments.js +0 -5
  278. package/dist/_virtual/segments.js.map +0 -1
  279. package/dist/_virtual/svg-tag.js +0 -5
  280. package/dist/_virtual/svg-tag.js.map +0 -1
  281. package/dist/_virtual/utils.js +0 -5
  282. package/dist/_virtual/utils.js.map +0 -1
  283. package/dist/_virtual/utils2.js +0 -5
  284. package/dist/_virtual/utils2.js.map +0 -1
  285. package/dist/_virtual/version-check.js +0 -5
  286. package/dist/_virtual/version-check.js.map +0 -1
  287. package/dist/_virtual/version.js +0 -5
  288. package/dist/_virtual/version.js.map +0 -1
  289. package/dist/index-_Edcmck_.js +0 -170
  290. package/dist/martyrs/dist/main-xL-jtBkT.js.map +0 -1
  291. package/dist/martyrs/node_modules/.pnpm/bignumber.js@9.1.2/node_modules/bignumber.js/bignumber.js +0 -1336
  292. package/dist/martyrs/node_modules/.pnpm/bignumber.js@9.1.2/node_modules/bignumber.js/bignumber.js.map +0 -1
  293. package/dist/martyrs/src/components/Button/Button.vue2.js.map +0 -1
  294. package/dist/martyrs/src/components/Spoiler/Spoiler.vue2.js.map +0 -1
  295. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +0 -166
  296. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js.map +0 -1
  297. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +0 -118
  298. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js.map +0 -1
  299. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +0 -360
  300. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js.map +0 -1
  301. package/dist/martyrs/src/modules/auth/views/store/twofa.js +0 -40
  302. package/dist/martyrs/src/modules/auth/views/store/twofa.js.map +0 -1
  303. package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue2.js.map +0 -1
  304. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardBalanceReplenished.vue.js +0 -43
  305. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardBalanceReplenished.vue.js.map +0 -1
  306. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js +0 -47
  307. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js.map +0 -1
  308. package/dist/martyrs/src/modules/wallet/views/components/blocks/CashDeposit.vue.js +0 -29
  309. package/dist/martyrs/src/modules/wallet/views/components/blocks/CashDeposit.vue.js.map +0 -1
  310. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +0 -89
  311. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js.map +0 -1
  312. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDepositProcessing.vue.js +0 -136
  313. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDepositProcessing.vue.js.map +0 -1
  314. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +0 -238
  315. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js.map +0 -1
  316. package/dist/martyrs/src/modules/wallet/views/localization/wallet.json.js +0 -9
  317. package/dist/martyrs/src/modules/wallet/views/localization/wallet.json.js.map +0 -1
  318. package/dist/martyrs/src/modules/wallet/views/store/wallet.store.js +0 -134
  319. package/dist/martyrs/src/modules/wallet/views/store/wallet.store.js.map +0 -1
  320. package/dist/node_modules/.pnpm/dijkstrajs@1.0.3/node_modules/dijkstrajs/dijkstra.js +0 -106
  321. package/dist/node_modules/.pnpm/dijkstrajs@1.0.3/node_modules/dijkstrajs/dijkstra.js.map +0 -1
  322. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/browser.js +0 -79
  323. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/browser.js.map +0 -1
  324. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/can-promise.js +0 -14
  325. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/can-promise.js.map +0 -1
  326. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alignment-pattern.js +0 -43
  327. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alignment-pattern.js.map +0 -1
  328. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alphanumeric-data.js +0 -85
  329. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alphanumeric-data.js.map +0 -1
  330. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-buffer.js +0 -40
  331. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-buffer.js.map +0 -1
  332. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-matrix.js +0 -34
  333. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-matrix.js.map +0 -1
  334. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/byte-data.js +0 -36
  335. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/byte-data.js.map +0 -1
  336. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-code.js +0 -367
  337. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-code.js.map +0 -1
  338. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-level.js +0 -52
  339. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-level.js.map +0 -1
  340. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/finder-pattern.js +0 -25
  341. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/finder-pattern.js.map +0 -1
  342. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/format-info.js +0 -24
  343. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/format-info.js.map +0 -1
  344. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/galois-field.js +0 -38
  345. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/galois-field.js.map +0 -1
  346. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/kanji-data.js +0 -46
  347. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/kanji-data.js.map +0 -1
  348. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mask-pattern.js +0 -149
  349. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mask-pattern.js.map +0 -1
  350. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mode.js +0 -90
  351. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mode.js.map +0 -1
  352. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/numeric-data.js +0 -41
  353. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/numeric-data.js.map +0 -1
  354. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/polynomial.js +0 -44
  355. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/polynomial.js.map +0 -1
  356. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/qrcode.js +0 -279
  357. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/qrcode.js.map +0 -1
  358. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/reed-solomon-encoder.js +0 -38
  359. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/reed-solomon-encoder.js.map +0 -1
  360. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/regex.js +0 -33
  361. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/regex.js.map +0 -1
  362. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/segments.js +0 -201
  363. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/segments.js.map +0 -1
  364. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js +0 -84
  365. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js.map +0 -1
  366. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version-check.js +0 -14
  367. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version-check.js.map +0 -1
  368. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version.js +0 -107
  369. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version.js.map +0 -1
  370. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/canvas.js +0 -61
  371. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/canvas.js.map +0 -1
  372. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/svg-tag.js +0 -64
  373. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/svg-tag.js.map +0 -1
  374. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js +0 -87
  375. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js.map +0 -1
  376. package/dist/profile.schema-CjLOfG7b.js +0 -92
  377. package/src/modules/auth/controllers/middlewares/visitor.logger.js +0 -75
  378. package/src/modules/auth/controllers/routes/twofa.routes.js +0 -8
  379. package/src/modules/auth/controllers/services/twofa.service.js +0 -30
  380. package/src/modules/auth/models/request.model.js +0 -14
  381. package/src/modules/auth/models/visitor.model.js +0 -11
  382. package/src/modules/auth/views/components/pages/EnterCode.vue +0 -204
  383. package/src/modules/auth/views/components/pages/EnterPassword.vue +0 -123
  384. package/src/modules/auth/views/components/sections/ProfileEditCredentials.vue +0 -329
  385. package/src/modules/auth/views/store/twofa.js +0 -70
  386. package/src/modules/auth//320/220/320/240/320/245/320/230/320/242/320/225/320/232/320/242/320/243/320/240/320/220.md +0 -445
@@ -1,12 +1,13 @@
1
- import { a as applyProfileSchema, m as modelsFactory } from "./profile.schema-CjLOfG7b.js";
2
- import { m as middlewareIndexFactory } from "./index-_Edcmck_.js";
1
+ import { m as middlewareIndexFactory, i as initOtpService } from "./index-kvBwwb0w.js";
3
2
  import bcrypt from "bcryptjs";
4
3
  import jwt from "jsonwebtoken";
5
4
  import { Types } from "mongoose";
6
5
  import jwkToPem from "jwk-to-pem";
7
- import { m as mailing } from "./mailing-DuEFRsa3.js";
6
+ import { g as getSessionsService } from "./sessions.service-COcwjd0f.js";
7
+ import { g as getVisitorsService } from "./visitors.service-B1dhhuSo.js";
8
8
  import { a as addUserStatusFields, b as addMembersQuantity } from "./addUserStatusFields-Cc-JpmPo.js";
9
9
  import { a as applyCredentialsSchema } from "./credentials.schema--2vvcu8c.js";
10
+ import { a as applyProfileSchema } from "./profile.schema-C31Lynn3.js";
10
11
  import { a as applySocialsSchema } from "./socials.schema-DxnnaBgO.js";
11
12
  async function verifyAppleIdToken(id_token) {
12
13
  const decodedToken = jwt.decode(id_token, { complete: true });
@@ -43,7 +44,7 @@ async function verifyAppleIdToken(id_token) {
43
44
  return decodedToken.payload;
44
45
  }
45
46
  const ObjectId$1 = { Types }.Types.ObjectId;
46
- const controllerFactory$2 = (db) => {
47
+ const controllerFactory$1 = (db) => {
47
48
  const User = db.user;
48
49
  const Membership = db.membership;
49
50
  db.department;
@@ -91,9 +92,24 @@ const controllerFactory$2 = (db) => {
91
92
  return res.status(401).send({ errorCode: "INCORRECT_PASSWORD_ENTERED", accessToken: null });
92
93
  }
93
94
  }
95
+ const sessionsService = getSessionsService();
96
+ const session = await sessionsService.createSession({
97
+ userId: user._id,
98
+ visitorId: req.visitorId || null,
99
+ req
100
+ });
101
+ if (req.visitorId) {
102
+ const visitorsService = getVisitorsService();
103
+ await visitorsService.linkVisitorToUser({
104
+ visitorId: req.visitorId,
105
+ userId: user._id,
106
+ sessionId: session._id
107
+ });
108
+ }
94
109
  const token = jwt.sign(
95
110
  {
96
- _id: user._id
111
+ _id: user._id,
112
+ session_id: session._id
97
113
  },
98
114
  process.env.SECRET_KEY,
99
115
  {
@@ -167,9 +183,24 @@ const controllerFactory$2 = (db) => {
167
183
  console.log(err);
168
184
  }
169
185
  }
186
+ const sessionsService = getSessionsService();
187
+ const session = await sessionsService.createSession({
188
+ userId: user._id,
189
+ visitorId: req.visitorId || null,
190
+ req
191
+ });
192
+ if (req.visitorId) {
193
+ const visitorsService = getVisitorsService();
194
+ await visitorsService.linkVisitorToUser({
195
+ visitorId: req.visitorId,
196
+ userId: user._id,
197
+ sessionId: session._id
198
+ });
199
+ }
170
200
  const token = jwt.sign(
171
201
  {
172
202
  _id: user._id,
203
+ session_id: session._id,
173
204
  organization: invite ? invite.organization : null
174
205
  },
175
206
  process.env.SECRET_KEY,
@@ -189,17 +220,11 @@ const controllerFactory$2 = (db) => {
189
220
  };
190
221
  const updatePassword = async (req, res) => {
191
222
  try {
192
- const { phone, email, password, type } = req.body;
193
- let query;
194
- if (type === "phone" && phone) {
195
- query = { phone };
196
- }
197
- if (type === "email" && email) {
198
- query = { email };
199
- }
200
- if (!query || !password) {
223
+ const { identifier, password, type } = req.body;
224
+ if (!identifier || !type || !password) {
201
225
  return res.status(400).send({ errorCode: "MISSING_REQUIRED_PARAMETERS" });
202
226
  }
227
+ const query = type === "phone" ? { phone: identifier } : { email: identifier };
203
228
  const salt = await bcrypt.genSalt(8);
204
229
  const hashedPassword = await bcrypt.hash(password, salt);
205
230
  const user = await User.findOneAndUpdate(query, {
@@ -208,7 +233,14 @@ const controllerFactory$2 = (db) => {
208
233
  if (!user) {
209
234
  return res.status(404).send({ errorCode: "ERROR_UPDATING_USER" });
210
235
  }
211
- const token = jwt.sign({ _id: user._id }, process.env.SECRET_KEY, {
236
+ const sessionsService = getSessionsService();
237
+ await sessionsService.deactivateAllUserSessions(user._id);
238
+ const session = await sessionsService.createSession({
239
+ userId: user._id,
240
+ visitorId: req.visitorId || null,
241
+ req
242
+ });
243
+ const token = jwt.sign({ _id: user._id, session_id: session._id }, process.env.SECRET_KEY, {
212
244
  expiresIn: 86400
213
245
  });
214
246
  const authorities = user.roles.map((role) => `ROLE_${role.name.toUpperCase()}`);
@@ -231,54 +263,54 @@ const controllerFactory$2 = (db) => {
231
263
  updatePassword
232
264
  };
233
265
  };
234
- const { sendEmail, sendSms } = mailing;
235
- const controllerFactory$1 = (db) => {
236
- const sendcode = async (req, res) => {
237
- const code = Math.floor(1e3 + Math.random() * 9e3);
238
- const type = req.body.type;
239
- const method = req.body.method;
240
- if (type === "email") {
241
- const emailSent = await sendEmail(req.body.email, `${process.env.APP_NAME} Verification Code`, `Your ${process.env.APP_NAME} verification code is ${code}`);
242
- if (emailSent) {
243
- res.send({ code, type, method });
244
- } else {
245
- console.log(emailSent);
246
- res.status(500).send("Failed to send email");
247
- }
248
- } else if (type === "phone") {
249
- const smsSent = await sendSms(req.body.phone, `Your ${process.env.APP_NAME} verification code: ${code}`);
250
- if (smsSent) {
251
- res.send({ code, type, method });
252
- } else {
253
- res.status(500).send("Failed to send SMS");
254
- }
255
- }
256
- };
257
- return {
258
- sendcode
259
- };
260
- };
261
266
  const authRoutes = (function(app, db, origins) {
262
- const controller = controllerFactory$2(db);
263
- const controllerTwofa = controllerFactory$1();
264
- const { verifySignUp, verifyUser } = middlewareIndexFactory(db);
267
+ const controller = controllerFactory$1(db);
268
+ const { verifySignUp, verifyUser, otp, authJwt } = middlewareIndexFactory(db);
265
269
  app.post(
266
270
  "/api/auth/signup",
267
271
  [
268
- verifySignUp.checkDuplicateUsernameOrEmail
269
- // verifySignUp.checkRolesExisted
272
+ verifySignUp.checkDuplicateUsernameOrEmail,
273
+ otp.stepUp("signup", (req) => ({
274
+ identifier: req.body.type === "email" ? req.body.email : req.body.phone,
275
+ type: req.body.type
276
+ }))
270
277
  ],
271
278
  controller.signup
272
279
  );
273
280
  app.post("/api/auth/signin", controller.signin);
274
- app.post("/api/auth/reset-password", [verifyUser.checkUserExist], controllerTwofa.sendcode);
275
- app.post("/api/auth/update-password", controller.updatePassword);
276
- });
277
- const twofaRoutes = (function(app, db) {
278
- const controller = controllerFactory$1();
279
- const { verifySignUp, verifyUser } = middlewareIndexFactory(db);
280
- app.post("/api/twofa/sendcode", [verifySignUp.checkDuplicateUsernameOrEmail], controller.sendcode);
281
- app.post("/api/twofa/sendcodereset", [verifyUser.checkUserExist], controller.sendcode);
281
+ app.post(
282
+ "/api/auth/reset-password",
283
+ [
284
+ verifyUser.checkUserExist,
285
+ otp.stepUp("reset-password", (req) => ({
286
+ identifier: req.body.identifier,
287
+ type: req.body.type
288
+ }))
289
+ ],
290
+ controller.updatePassword
291
+ );
292
+ app.post("/api/auth/logout", [authJwt.verifyToken()], async (req, res) => {
293
+ try {
294
+ if (req.sessionId) {
295
+ const sessionsService = getSessionsService();
296
+ await sessionsService.deactivateSession(req.sessionId);
297
+ }
298
+ res.status(200).send({ success: true });
299
+ } catch (err) {
300
+ res.status(500).send({ message: err.message });
301
+ }
302
+ });
303
+ app.post("/api/auth/logout-all", [authJwt.verifyToken()], async (req, res) => {
304
+ try {
305
+ if (req.userId) {
306
+ const sessionsService = getSessionsService();
307
+ await sessionsService.deactivateAllUserSessions(req.userId);
308
+ }
309
+ res.status(200).send({ success: true });
310
+ } catch (err) {
311
+ res.status(500).send({ message: err.message });
312
+ }
313
+ });
282
314
  });
283
315
  const ObjectId = { Types }.Types.ObjectId;
284
316
  const controllerFactory = (db) => {
@@ -343,6 +375,13 @@ const controllerFactory = (db) => {
343
375
  });
344
376
  query.push(addMembersQuantity());
345
377
  if (req.query.user) query.push(addUserStatusFields(req.query.user));
378
+ query.push({
379
+ $project: {
380
+ password: 0,
381
+ refreshToken: 0,
382
+ __v: 0
383
+ }
384
+ });
346
385
  query.push({
347
386
  $skip: skip
348
387
  });
@@ -371,14 +410,16 @@ const controllerFactory = (db) => {
371
410
  if (!user) {
372
411
  return res.status(404).send({ errorCode: "USER_NOT_CREATED", message: "User is not created." });
373
412
  }
374
- res.status(200).send(user);
413
+ const { password, refreshToken, __v, ...safeUser } = user.toObject();
414
+ res.status(200).send(safeUser);
375
415
  } catch (err) {
376
416
  return res.status(500).send({ errorCode: "INTERNAL_SERVER_ERROR", message: err });
377
417
  }
378
418
  };
379
419
  const update = async (req, res) => {
380
420
  try {
381
- const user = await User.findOneAndUpdate({ _id: req.params._id }, req.body, { new: true });
421
+ const { email, phone, ...safeData } = req.body;
422
+ const user = await User.findOneAndUpdate({ _id: req.params._id }, safeData, { new: true }).select("-password -refreshToken -__v");
382
423
  if (!user) {
383
424
  return res.status(404).send({ errorCode: "UPDATE_FAILED", message: "Something wrong when updating user." });
384
425
  }
@@ -387,11 +428,30 @@ const controllerFactory = (db) => {
387
428
  return res.status(500).send({ errorCode: "INTERNAL_SERVER_ERROR", message: err });
388
429
  }
389
430
  };
390
- const remove = async (req, res) => {
431
+ const updateEmail = async (req, res) => {
391
432
  try {
392
- const user = await User.findOneAndDelete({ phone: req.params.phone });
433
+ const user = await User.findOneAndUpdate(
434
+ { _id: req.params._id },
435
+ { email: req.body.email },
436
+ { new: true }
437
+ ).select("-password -refreshToken -__v");
393
438
  if (!user) {
394
- return res.status(404).send({ errorCode: "DELETION_FAILED", message: "User is not deleted." });
439
+ return res.status(404).send({ errorCode: "UPDATE_FAILED", message: "Something wrong when updating email." });
440
+ }
441
+ res.status(200).send(user);
442
+ } catch (err) {
443
+ return res.status(500).send({ errorCode: "INTERNAL_SERVER_ERROR", message: err });
444
+ }
445
+ };
446
+ const updatePhone = async (req, res) => {
447
+ try {
448
+ const user = await User.findOneAndUpdate(
449
+ { _id: req.params._id },
450
+ { phone: req.body.phone },
451
+ { new: true }
452
+ ).select("-password -refreshToken -__v");
453
+ if (!user) {
454
+ return res.status(404).send({ errorCode: "UPDATE_FAILED", message: "Something wrong when updating phone." });
395
455
  }
396
456
  res.status(200).send(user);
397
457
  } catch (err) {
@@ -402,31 +462,35 @@ const controllerFactory = (db) => {
402
462
  read,
403
463
  create,
404
464
  update,
405
- remove
465
+ updateEmail,
466
+ updatePhone
406
467
  };
407
468
  };
408
469
  const usersRoutes = (function(app, db, origins) {
409
470
  const controller = controllerFactory(db);
410
- const { authJwt, verifyUser } = middlewareIndexFactory(db);
471
+ const { authJwt, verifyUser, otp } = middlewareIndexFactory(db);
411
472
  app.post("/api/users", [authJwt.verifyToken(), verifyUser.checkDuplicateUsername], controller.create);
412
473
  app.get("/api/users", controller.read);
413
- app.put("/api/users/:_id", [authJwt.verifyToken(), verifyUser.checkDuplicateUsername], controller.update);
414
- app.delete("/api/users/:_id", [authJwt.verifyToken()], controller.remove);
474
+ app.put("/api/users/:_id", [
475
+ authJwt.verifyToken(),
476
+ verifyUser.checkOwnership,
477
+ verifyUser.checkDuplicateUsername
478
+ ], controller.update);
479
+ app.put("/api/users/:_id/email", [
480
+ authJwt.verifyToken(),
481
+ authJwt.loadUser,
482
+ verifyUser.checkOwnership,
483
+ verifyUser.checkDuplicateEmail,
484
+ otp.dualVerify("email")
485
+ ], controller.updateEmail);
486
+ app.put("/api/users/:_id/phone", [
487
+ authJwt.verifyToken(),
488
+ authJwt.loadUser,
489
+ verifyUser.checkOwnership,
490
+ verifyUser.checkDuplicatePhone,
491
+ otp.dualVerify("phone")
492
+ ], controller.updatePhone);
415
493
  });
416
- const RequestModel = (db) => {
417
- const RequestSchema = new db.mongoose.Schema({
418
- visitor: {
419
- type: db.mongoose.Schema.Types.ObjectId,
420
- ref: "Visitor"
421
- },
422
- path: String,
423
- method: String,
424
- timestamp: { type: Date, default: Date.now }
425
- });
426
- RequestSchema.index({ visitor: 1 });
427
- const Request = db.mongoose.model("Request", RequestSchema);
428
- return Request;
429
- };
430
494
  const RoleModel = (db) => {
431
495
  const RoleSchema = new db.mongoose.Schema({
432
496
  name: String
@@ -476,42 +540,43 @@ const UserModel = (db) => {
476
540
  const User = db.mongoose.model("User", UserSchema);
477
541
  return User;
478
542
  };
479
- const VisitorModel = (db) => {
480
- const VisitorSchema = new db.mongoose.Schema({
481
- ip: String,
482
- userAgent: String,
483
- acceptLanguage: String,
484
- fingerprint: { type: String, unique: true }
543
+ const OtpModel = (db) => {
544
+ const OtpSchema = new db.mongoose.Schema({
545
+ challengeId: { type: String, required: true, unique: true },
546
+ identifier: { type: String, required: true },
547
+ target: { type: db.mongoose.Schema.Types.ObjectId, ref: "User", default: null },
548
+ code: { type: String, required: true },
549
+ type: { type: String, enum: ["email", "phone"], required: true },
550
+ purpose: { type: String, required: true },
551
+ attempts: { type: Number, default: 0 },
552
+ verifiedAt: { type: Date, default: null },
553
+ invalidatedAt: { type: Date, default: null },
554
+ createdAt: { type: Date, default: Date.now, expires: 600 }
485
555
  });
486
- const Visitor = db.mongoose.model("Visitor", VisitorSchema);
487
- return Visitor;
556
+ OtpSchema.index({ identifier: 1, purpose: 1 });
557
+ OtpSchema.index({ target: 1, purpose: 1 }, { sparse: true });
558
+ return db.mongoose.model("Otp", OtpSchema);
488
559
  };
489
560
  function initializeAuth(app, db, origins, publicPath) {
490
561
  db.role = RoleModel(db);
491
562
  db.user = UserModel(db);
492
- db.visitor = VisitorModel(db);
493
- db.request = RequestModel(db);
563
+ db.otp = OtpModel(db);
564
+ initOtpService(db);
494
565
  if (app) {
495
566
  authRoutes(app, db);
496
- twofaRoutes(app, db);
497
567
  usersRoutes(app, db);
498
- const visitorModule = modelsFactory(db);
499
- app.use(visitorModule.visitorLogger);
500
568
  }
501
569
  }
502
570
  const models = {
503
571
  RoleModel,
504
- UserModel,
505
- VisitorModel
572
+ UserModel
506
573
  };
507
574
  const routes = {
508
575
  authRoutes,
509
- twofaRoutes,
510
576
  usersRoutes
511
577
  };
512
578
  const controllers = {
513
- AuthController: controllerFactory$2,
514
- TwoFaController: controllerFactory$1,
579
+ AuthController: controllerFactory$1,
515
580
  UsersController: controllerFactory
516
581
  };
517
582
  const auth_server = {
@@ -1,4 +1,5 @@
1
1
  import jwt from "jsonwebtoken";
2
+ import { g as getSessionsService } from "./sessions.service-COcwjd0f.js";
2
3
  const middlewareFactory = (db) => {
3
4
  const User = db.user;
4
5
  const Role = db.role;
@@ -28,6 +29,22 @@ const middlewareFactory = (db) => {
28
29
  }
29
30
  }
30
31
  const decoded = jwt.verify(token, process.env.SECRET_KEY);
32
+ if (decoded.session_id) {
33
+ const sessionsService = getSessionsService();
34
+ const session = await sessionsService.validateSession({
35
+ sessionId: decoded.session_id,
36
+ userId: decoded._id
37
+ });
38
+ if (!session) {
39
+ req.userId = null;
40
+ if (continueOnFail) {
41
+ return next();
42
+ } else {
43
+ return res.status(401).send({ message: "Unauthorized: Session expired or revoked" });
44
+ }
45
+ }
46
+ req.sessionId = decoded.session_id;
47
+ }
31
48
  req.userId = decoded._id;
32
49
  req.user = {
33
50
  _id: decoded._id
@@ -43,6 +60,21 @@ const middlewareFactory = (db) => {
43
60
  }
44
61
  };
45
62
  };
63
+ const loadUser = async (req, res, next) => {
64
+ try {
65
+ if (!req.userId) {
66
+ return res.status(401).json({ errorCode: "AUTH_REQUIRED" });
67
+ }
68
+ const user = await User.findById(req.userId).exec();
69
+ if (!user) {
70
+ return res.status(404).json({ errorCode: "USER_NOT_FOUND" });
71
+ }
72
+ req.user = user;
73
+ next();
74
+ } catch (err) {
75
+ res.status(500).send({ message: err.message });
76
+ }
77
+ };
46
78
  const checkRole = (roleToCheck) => async (req, res, next) => {
47
79
  try {
48
80
  const user = await User.findById(req.userId).exec();
@@ -66,6 +98,7 @@ const middlewareFactory = (db) => {
66
98
  const isModerator = checkRole("moderator");
67
99
  const authJwt = {
68
100
  verifyToken,
101
+ loadUser,
69
102
  isAdmin,
70
103
  isModerator
71
104
  };
@@ -1,5 +1,5 @@
1
- import "./mailing-DuEFRsa3.js";
2
- import { m as middlewareIndexFactory } from "./index-_Edcmck_.js";
1
+ import "./mailing-DT7nbNjZ.js";
2
+ import { m as middlewareIndexFactory } from "./index-kvBwwb0w.js";
3
3
  const controllerFactory = (db) => {
4
4
  const ChatMessage = db.chat;
5
5
  const Department = db.department;
@@ -4,7 +4,7 @@ import { a as applyCommonSchema } from "./common.schema-DswiUXKB.js";
4
4
  import { a as applyEngagementSchema } from "./engagement.schema-fh6W1fb_.js";
5
5
  import { a as applyMetadataSchema } from "./metadata.schema-CIRR_WQ-.js";
6
6
  import { a as applyOwnershipSchema } from "./ownership.schema-fwwDf_e5.js";
7
- import { m as middlewareIndexFactory$1 } from "./index-_Edcmck_.js";
7
+ import { m as middlewareIndexFactory$1 } from "./index-kvBwwb0w.js";
8
8
  import { c as coreabac } from "./abac-BPl9Bmf9.js";
9
9
  const ObjectId$2 = { Types }.Types.ObjectId;
10
10
  function getCommentsLookupStage() {
@@ -1,4 +1,6 @@
1
1
  import { c as coreabac } from "./abac-BPl9Bmf9.js";
2
+ import { i as initSessionsService } from "./sessions.service-COcwjd0f.js";
3
+ import { g as getVisitorsService, i as initVisitorsService } from "./visitors.service-B1dhhuSo.js";
2
4
  const initCorePolicies = (function initializeDefaultPolicies(abacAccessControl) {
3
5
  abacAccessControl.registerGlobalPolicy("AdminModeratorAccessPolicy", async (context) => {
4
6
  const { user, req } = context;
@@ -101,17 +103,181 @@ const initCorePolicies = (function initializeDefaultPolicies(abacAccessControl)
101
103
  });
102
104
  return abacAccessControl;
103
105
  });
106
+ const SessionModel = (db) => {
107
+ const SessionSchema = new db.mongoose.Schema(
108
+ {
109
+ target: {
110
+ type: db.mongoose.Schema.Types.ObjectId,
111
+ ref: "User",
112
+ required: true
113
+ },
114
+ visitor: {
115
+ type: db.mongoose.Schema.Types.ObjectId,
116
+ ref: "Visitor",
117
+ default: null
118
+ },
119
+ isActive: {
120
+ type: Boolean,
121
+ default: true
122
+ },
123
+ ip: String,
124
+ userAgent: String,
125
+ lastSeenAt: {
126
+ type: Date,
127
+ default: Date.now
128
+ },
129
+ revokedAt: {
130
+ type: Date,
131
+ default: null
132
+ },
133
+ expiresAt: {
134
+ type: Date,
135
+ required: true
136
+ }
137
+ },
138
+ {
139
+ timestamps: true
140
+ }
141
+ );
142
+ SessionSchema.index({ target: 1, isActive: 1 });
143
+ SessionSchema.index({ expiresAt: 1 }, { expireAfterSeconds: 0 });
144
+ const Session = db.mongoose.models.Session || db.mongoose.model("Session", SessionSchema);
145
+ return Session;
146
+ };
147
+ const VisitorModel = (db) => {
148
+ const VisitorSchema = new db.mongoose.Schema(
149
+ {
150
+ ip: String,
151
+ userAgent: String,
152
+ acceptLanguage: String,
153
+ fingerprint: { type: String, unique: true },
154
+ target: {
155
+ type: db.mongoose.Schema.Types.ObjectId,
156
+ ref: "User",
157
+ default: null
158
+ },
159
+ linkedAt: {
160
+ type: Date,
161
+ default: null
162
+ }
163
+ },
164
+ {
165
+ timestamps: true
166
+ }
167
+ );
168
+ VisitorSchema.index({ target: 1 }, { sparse: true });
169
+ const Visitor = db.mongoose.models.Visitor || db.mongoose.model("Visitor", VisitorSchema);
170
+ return Visitor;
171
+ };
172
+ const RequestModel = (db) => {
173
+ const RequestSchema = new db.mongoose.Schema({
174
+ visitor: {
175
+ type: db.mongoose.Schema.Types.ObjectId,
176
+ ref: "Visitor"
177
+ },
178
+ target: {
179
+ type: db.mongoose.Schema.Types.ObjectId,
180
+ ref: "User",
181
+ default: null
182
+ },
183
+ session: {
184
+ type: db.mongoose.Schema.Types.ObjectId,
185
+ ref: "Session",
186
+ default: null
187
+ },
188
+ path: String,
189
+ method: String,
190
+ referer: String,
191
+ query: String,
192
+ timestamp: { type: Date, default: Date.now }
193
+ });
194
+ RequestSchema.index({ visitor: 1 });
195
+ RequestSchema.index({ target: 1 }, { sparse: true });
196
+ RequestSchema.index({ timestamp: -1 });
197
+ const Request = db.mongoose.models.Request || db.mongoose.model("Request", RequestSchema);
198
+ return Request;
199
+ };
200
+ let instance = null;
201
+ function initRequestsService(db) {
202
+ const Request = db.request;
203
+ async function logRequest({ visitorId, req, userId = null, sessionId = null }) {
204
+ const request = await Request.create({
205
+ visitor: visitorId ? new db.mongoose.Types.ObjectId(visitorId) : null,
206
+ target: userId ? new db.mongoose.Types.ObjectId(userId) : null,
207
+ session: sessionId ? new db.mongoose.Types.ObjectId(sessionId) : null,
208
+ path: req.path,
209
+ method: req.method,
210
+ referer: req.headers["referer"] || null,
211
+ query: req.query ? JSON.stringify(req.query) : null
212
+ });
213
+ return request;
214
+ }
215
+ async function getJourney(visitorId, { limit = 50, skip = 0 } = {}) {
216
+ const requests = await Request.find({ visitor: new db.mongoose.Types.ObjectId(visitorId) }).sort({ timestamp: -1 }).skip(skip).limit(limit).lean();
217
+ return requests;
218
+ }
219
+ async function getUserJourney(userId, { limit = 50, skip = 0 } = {}) {
220
+ const requests = await Request.find({ target: new db.mongoose.Types.ObjectId(userId) }).sort({ timestamp: -1 }).skip(skip).limit(limit).lean();
221
+ return requests;
222
+ }
223
+ instance = {
224
+ logRequest,
225
+ getJourney,
226
+ getUserJourney
227
+ };
228
+ return instance;
229
+ }
230
+ function getRequestsService() {
231
+ if (!instance) {
232
+ throw new Error("Requests service not initialized. Call initRequestsService(db) first.");
233
+ }
234
+ return instance;
235
+ }
236
+ const VISITOR_COOKIE_NAME = "visitorId";
237
+ const VISITOR_COOKIE_MAX_AGE = 365 * 24 * 60 * 60 * 1e3;
238
+ const createVisitorLogger = () => {
239
+ const visitorLogger = async (req, res, next) => {
240
+ try {
241
+ const visitorsService = getVisitorsService();
242
+ const requestsService = getRequestsService();
243
+ const visitor = await visitorsService.findOrCreateVisitor(req);
244
+ const cookieVisitorId = req.cookies?.visitorId;
245
+ if (!cookieVisitorId || cookieVisitorId !== visitor._id.toString()) {
246
+ res.cookie(VISITOR_COOKIE_NAME, visitor._id.toString(), {
247
+ maxAge: VISITOR_COOKIE_MAX_AGE,
248
+ httpOnly: true,
249
+ sameSite: "lax"
250
+ });
251
+ }
252
+ req.visitor = visitor;
253
+ req.visitorId = visitor._id;
254
+ res.on("finish", () => {
255
+ requestsService.logRequest({
256
+ visitorId: visitor._id,
257
+ req,
258
+ userId: req.userId || null,
259
+ sessionId: req.sessionId || null
260
+ }).catch((err) => console.error("Error logging request:", err));
261
+ });
262
+ next();
263
+ } catch (error) {
264
+ console.error("Error processing visitor:", error);
265
+ next();
266
+ }
267
+ };
268
+ return { visitorLogger };
269
+ };
104
270
  const { getInstance } = coreabac;
105
271
  let _WebSocketManagerClass = null;
106
272
  async function createWebSocketManager(...args) {
107
273
  if (!_WebSocketManagerClass) {
108
- const module = await import("./core.websocket-C2FxNmZ1.js");
274
+ const module = await import("./core.websocket-Cl76z2wT.js");
109
275
  _WebSocketManagerClass = module.default;
110
276
  }
111
277
  return new _WebSocketManagerClass(...args);
112
278
  }
113
279
  const WebSocketManager = createWebSocketManager;
114
- function initializeCore(app, db, origins, publicPath) {
280
+ function initializeCore(app, db, origins, publicPath, wss = null) {
115
281
  db.log = db.mongoose.models.Log || db.mongoose.model(
116
282
  "Log",
117
283
  new db.mongoose.Schema(
@@ -123,8 +289,31 @@ function initializeCore(app, db, origins, publicPath) {
123
289
  { versionKey: false }
124
290
  )
125
291
  );
292
+ db.session = SessionModel(db);
293
+ db.visitor = VisitorModel(db);
294
+ db.request = RequestModel(db);
295
+ initSessionsService(db);
296
+ initVisitorsService(db);
297
+ initRequestsService(db);
126
298
  const abac = getInstance(db);
127
299
  initCorePolicies(abac);
300
+ if (app) {
301
+ const { visitorLogger } = createVisitorLogger();
302
+ app.use(visitorLogger);
303
+ }
304
+ if (wss) {
305
+ wss.registerRpcMethod("core", "getOnlineStatus", async ({ userId }) => {
306
+ if (!userId) return { isOnline: false, lastSeenAt: null };
307
+ const isOnline = wss.userConnections.has(userId.toString());
308
+ if (isOnline) return { isOnline: true, lastSeenAt: /* @__PURE__ */ new Date() };
309
+ const session = await db.session.findOne(
310
+ { target: new db.mongoose.Types.ObjectId(userId), isActive: true },
311
+ { lastSeenAt: 1 },
312
+ { sort: { lastSeenAt: -1 } }
313
+ ).lean();
314
+ return { isOnline: false, lastSeenAt: session?.lastSeenAt || null };
315
+ }, { requireAuth: false });
316
+ }
128
317
  }
129
318
  const core_server = {
130
319
  initialize: initializeCore,