@ozdao/martyrs 0.2.584 → 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 (436) hide show
  1. package/dist/auth.server.js +161 -96
  2. package/dist/{authJwt-J1csaMWA.js → authJwt-DKbMMjw0.js} +33 -0
  3. package/dist/builder.js +2 -0
  4. package/dist/chats.server.js +2 -2
  5. package/dist/community.server.js +1 -1
  6. package/dist/core.server.js +191 -2
  7. package/dist/{core.websocket-C2FxNmZ1.js → core.websocket-Cl76z2wT.js} +41 -5
  8. package/dist/{crud-q1ye5IhV.js → crud-DpOXTZep.js} +1 -1
  9. package/dist/events.server.js +2 -2
  10. package/dist/files.server.js +1 -1
  11. package/dist/gallery.server.js +1 -1
  12. package/dist/index-kvBwwb0w.js +427 -0
  13. package/dist/inventory.server.js +2 -2
  14. package/dist/{mailing-DuEFRsa3.js → mailing-DT7nbNjZ.js} +16 -3
  15. package/dist/{main-fmp55tJF.js → main-BIf-WirR.js} +864 -865
  16. package/dist/marketplace.server.js +1 -1
  17. package/dist/martyrs/dist/{main-fmp55tJF.js → main-BIf-WirR.js} +193 -38
  18. package/dist/martyrs/dist/main-BIf-WirR.js.map +1 -0
  19. package/dist/martyrs/dist/{web-BDuQSQKS.js → web-O7lXcjg0.js} +2 -2
  20. package/dist/martyrs/dist/{web-BDuQSQKS.js.map → web-O7lXcjg0.js.map} +1 -1
  21. package/dist/martyrs/src/components/Button/{Button.vue2.js → Button.vue.js} +8 -7
  22. package/dist/martyrs/src/components/Button/Button.vue.js.map +1 -0
  23. package/dist/martyrs/src/components/EditImages/{EditImages.vue2.js → EditImages.vue.js} +2 -2
  24. package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +1 -0
  25. package/dist/martyrs/src/components/Feed/Feed.vue.js +1 -1
  26. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +1 -1
  27. package/dist/martyrs/src/components/Loader/Loader.vue.js +1 -1
  28. package/dist/martyrs/src/components/Loader/Loader.vue.js.map +1 -1
  29. package/dist/martyrs/src/components/Spoiler/{Spoiler.vue2.js → Spoiler.vue.js} +2 -2
  30. package/dist/martyrs/src/components/Spoiler/Spoiler.vue.js.map +1 -0
  31. package/dist/martyrs/src/components/Tab/{Tab.vue.js → Tab.vue2.js} +2 -2
  32. package/dist/martyrs/src/components/Tab/Tab.vue2.js.map +1 -0
  33. package/dist/martyrs/src/components/Tooltip/Tooltip.vue2.js +17 -22
  34. package/dist/martyrs/src/components/Tooltip/Tooltip.vue2.js.map +1 -1
  35. package/dist/martyrs/src/modules/auth/auth.client.js +18 -24
  36. package/dist/martyrs/src/modules/auth/auth.client.js.map +1 -1
  37. package/dist/martyrs/src/modules/auth/views/components/blocks/OtpDialog.vue.js +178 -0
  38. package/dist/martyrs/src/modules/auth/views/components/blocks/OtpDialog.vue.js.map +1 -0
  39. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +2 -2
  40. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +104 -77
  41. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
  42. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
  43. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +198 -14
  44. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js.map +1 -1
  45. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +1 -1
  46. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +71 -30
  47. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js.map +1 -1
  48. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +3 -3
  49. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js.map +1 -1
  50. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +87 -31
  51. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js.map +1 -1
  52. package/dist/martyrs/src/modules/auth/views/plugins/otp.plugin.js +100 -0
  53. package/dist/martyrs/src/modules/auth/views/plugins/otp.plugin.js.map +1 -0
  54. package/dist/martyrs/src/modules/auth/views/router/auth.router.js +2 -31
  55. package/dist/martyrs/src/modules/auth/views/router/auth.router.js.map +1 -1
  56. package/dist/martyrs/src/modules/auth/views/router/users.router.js +0 -14
  57. package/dist/martyrs/src/modules/auth/views/router/users.router.js.map +1 -1
  58. package/dist/martyrs/src/modules/auth/views/store/auth.js +1 -56
  59. package/dist/martyrs/src/modules/auth/views/store/auth.js.map +1 -1
  60. package/dist/martyrs/src/modules/auth/views/store/users.js +5 -1
  61. package/dist/martyrs/src/modules/auth/views/store/users.js.map +1 -1
  62. package/dist/martyrs/src/modules/backoffice/backoffice.client.js +3 -15
  63. package/dist/martyrs/src/modules/backoffice/backoffice.client.js.map +1 -1
  64. package/dist/martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js +99 -0
  65. package/dist/martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js.map +1 -0
  66. package/dist/martyrs/src/modules/backoffice/{backoffice.router.js → router/backoffice.router.js} +9 -7
  67. package/dist/martyrs/src/modules/backoffice/router/backoffice.router.js.map +1 -0
  68. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +7 -1
  69. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js.map +1 -1
  70. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
  71. package/dist/martyrs/src/modules/core/core.client.js.map +1 -1
  72. package/dist/martyrs/src/modules/core/views/classes/core.app.js +5 -1
  73. package/dist/martyrs/src/modules/core/views/classes/core.app.js.map +1 -1
  74. package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js +0 -1
  75. package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js.map +1 -1
  76. package/dist/martyrs/src/modules/core/views/components/blocks/PopupAuth.vue.js +1 -1
  77. package/dist/martyrs/src/modules/core/views/components/blocks/PopupDateSelector.vue.js +1 -1
  78. package/dist/martyrs/src/modules/core/views/components/elements/OnlineIndicator.vue.js +74 -0
  79. package/dist/martyrs/src/modules/core/views/components/elements/OnlineIndicator.vue.js.map +1 -0
  80. package/dist/martyrs/src/modules/core/views/components/layouts/App.vue.js.map +1 -1
  81. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +77 -67
  82. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
  83. package/dist/martyrs/src/modules/core/views/components/pages/404.vue.js +76 -7
  84. package/dist/martyrs/src/modules/core/views/components/pages/404.vue.js.map +1 -1
  85. package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js +1 -1
  86. package/dist/martyrs/src/modules/core/views/components/partials/Navigation.vue.js +1 -1
  87. package/dist/martyrs/src/modules/core/views/components/partials/NavigationBar.vue.js +1 -1
  88. package/dist/martyrs/src/modules/core/views/components/sections/{Filters.vue2.js → Filters.vue.js} +2 -2
  89. package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue.js.map +1 -0
  90. package/dist/martyrs/src/modules/core/views/components/sections/SectionPageTitle.vue.js +1 -1
  91. package/dist/martyrs/src/modules/core/views/store/core.store.js +1 -0
  92. package/dist/martyrs/src/modules/core/views/store/core.store.js.map +1 -1
  93. package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js +2 -1
  94. package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js.map +1 -1
  95. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
  96. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
  97. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +2 -2
  98. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
  99. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -1
  100. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
  101. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
  102. package/dist/martyrs/src/modules/events/components/sections/EditTickets.vue.js +1 -1
  103. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +2 -2
  104. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +1 -1
  105. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +1 -1
  106. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +1 -1
  107. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +1 -1
  108. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
  109. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js +1 -1
  110. package/dist/martyrs/src/modules/marketplace/views/components/pages/Marketplace.vue.js +1 -1
  111. package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js +1 -1
  112. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
  113. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +1 -1
  114. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
  115. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
  116. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +1 -1
  117. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
  118. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +1 -1
  119. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
  120. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +1 -1
  121. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +1 -1
  122. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +1 -1
  123. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
  124. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +1 -1
  125. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +1 -1
  126. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +1 -1
  127. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +0 -1
  128. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js.map +1 -1
  129. package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js +1 -1
  130. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
  131. package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js +1 -1
  132. package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +1 -1
  133. package/dist/martyrs/src/modules/notifications/components/sections/NotificationPreferences.vue.js +1 -1
  134. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +1 -1
  135. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +1 -1
  136. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +1 -2
  137. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js.map +1 -1
  138. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
  139. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
  140. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +2 -2
  141. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
  142. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +1 -1
  143. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +1 -1
  144. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +1 -1
  145. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +1 -1
  146. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
  147. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +1 -1
  148. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +2 -2
  149. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +1 -1
  150. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +1 -1
  151. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +4 -3
  152. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
  153. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
  154. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -2
  155. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js.map +1 -1
  156. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
  157. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -2
  158. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js.map +1 -1
  159. package/dist/martyrs/src/modules/pages/pages.router.js +7 -5
  160. package/dist/martyrs/src/modules/pages/pages.router.js.map +1 -1
  161. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +0 -1
  162. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js.map +1 -1
  163. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
  164. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
  165. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +0 -1
  166. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js.map +1 -1
  167. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +2 -2
  168. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -2
  169. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js.map +1 -1
  170. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +3 -3
  171. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +4 -4
  172. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
  173. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +1 -1
  174. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +1 -1
  175. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +2 -2
  176. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js +1 -1
  177. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
  178. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
  179. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +2 -2
  180. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +2 -2
  181. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
  182. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +1 -1
  183. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
  184. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  185. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
  186. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js +1 -1
  187. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +2 -2
  188. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +1 -1
  189. package/dist/martyrs.css +1 -1
  190. package/dist/martyrs.es.js +1 -1
  191. package/dist/music.server.js +1 -1
  192. package/dist/notifications.server.js +1 -1
  193. package/dist/orders.server.js +7 -6
  194. package/dist/organizations.server.js +2 -2
  195. package/dist/products.server.js +2 -2
  196. package/dist/profile.schema-C31Lynn3.js +21 -0
  197. package/dist/rents.server.js +1 -1
  198. package/dist/sessions.service-COcwjd0f.js +86 -0
  199. package/dist/style.css +183 -108
  200. package/dist/{tickets.controller-B7r0mK-5.js → tickets.controller-DdF85W-i.js} +1 -1
  201. package/dist/visitors.service-B1dhhuSo.js +83 -0
  202. package/dist/wallet.server.js +2 -2
  203. package/dist/{web-BDuQSQKS.js → web-O7lXcjg0.js} +1 -1
  204. package/package.json +5 -1
  205. package/src/builder/modes/ssr.rspack.dev.js +2 -0
  206. package/src/cli/commands/create.js +106 -0
  207. package/src/cli/index.js +25 -0
  208. package/src/cli/templates/app/.env.development.mustache +14 -0
  209. package/src/cli/templates/app/.env.production.mustache +14 -0
  210. package/src/cli/templates/app/Dockerfile +36 -0
  211. package/src/cli/templates/app/babel.config.js +14 -0
  212. package/src/cli/templates/app/env.js +3 -0
  213. package/src/cli/templates/app/index.js +46 -0
  214. package/src/cli/templates/app/mongodb.config.js +18 -0
  215. package/src/cli/templates/app/package.json.mustache +65 -0
  216. package/src/cli/templates/app/src/client.js +22 -0
  217. package/src/cli/templates/app/src/components/pages/Index.vue +11 -0
  218. package/src/cli/templates/app/src/configs/global.config.js.mustache +40 -0
  219. package/src/cli/templates/app/src/localization/extensions.js +2 -0
  220. package/src/cli/templates/app/src/localization/index.js +44 -0
  221. package/src/cli/templates/app/src/localization/overrides.js +2 -0
  222. package/src/cli/templates/app/src/localization/translations.js +10 -0
  223. package/src/cli/templates/app/src/models/index.js +9 -0
  224. package/src/cli/templates/app/src/router/index.js +48 -0
  225. package/src/cli/templates/app/src/scss/theme.scss +18 -0
  226. package/src/cli/templates/app/src/server.js +68 -0
  227. package/src/cli/templates/app/src/store/index.js +9 -0
  228. package/src/cli/templates/docker-compose.yaml.mustache +47 -0
  229. package/src/cli/templates/nginx/Dockerfile +5 -0
  230. package/src/cli/templates/nginx/default.conf.mustache +55 -0
  231. package/src/cli/templates/public/favicon/.gitkeep +0 -0
  232. package/src/cli/templates/start-dev.sh.mustache +131 -0
  233. package/src/cli/templates/start-prod.sh.mustache +12 -0
  234. package/src/components/Button/Button.vue +61 -15
  235. package/src/components/Loader/Loader.vue +1 -1
  236. package/src/components/Tooltip/Tooltip.vue +31 -23
  237. package/src/modules/TASKS.MD +30 -1
  238. package/src/modules/auth/CLAUDE.md +381 -0
  239. package/src/modules/auth/FIXES.md +0 -38
  240. package/src/modules/auth/auth.client.js +4 -6
  241. package/src/modules/auth/auth.server.js +4 -15
  242. package/src/modules/auth/controllers/middlewares/authJwt.js +59 -17
  243. package/src/modules/auth/controllers/middlewares/index.js +4 -1
  244. package/src/modules/auth/controllers/middlewares/otp.middleware.js +166 -0
  245. package/src/modules/auth/controllers/middlewares/verifySignUp.js +0 -1
  246. package/src/modules/auth/controllers/middlewares/verifyUser.js +58 -11
  247. package/src/modules/auth/controllers/routes/auth.routes.js +48 -6
  248. package/src/modules/auth/controllers/routes/users.routes.js +29 -8
  249. package/src/modules/auth/controllers/services/auth.service.js +62 -12
  250. package/src/modules/auth/controllers/services/otp.service.js +109 -0
  251. package/src/modules/auth/controllers/services/users.service.js +46 -6
  252. package/src/modules/auth/models/otp.model.js +20 -0
  253. package/src/modules/auth/views/components/blocks/OtpDialog.vue +168 -0
  254. package/src/modules/auth/views/components/pages/Profile.vue +51 -18
  255. package/src/modules/auth/views/components/pages/ProfileEditAccount.vue +199 -45
  256. package/src/modules/auth/views/components/pages/ResetPassword.vue +170 -132
  257. package/src/modules/auth/views/components/pages/SignIn.vue +2 -1
  258. package/src/modules/auth/views/components/pages/SignUp.vue +203 -147
  259. package/src/modules/auth/views/plugins/otp.plugin.js +104 -0
  260. package/src/modules/auth/views/router/auth.router.js +1 -24
  261. package/src/modules/auth/views/router/users.router.js +1 -12
  262. package/src/modules/auth/views/store/auth.js +0 -68
  263. package/src/modules/auth/views/store/users.js +6 -2
  264. package/src/modules/backoffice/backoffice.client.js +1 -25
  265. package/src/modules/backoffice/configs/navigation.backoffice.config.js +99 -0
  266. package/src/modules/backoffice/router/backoffice.router.js +8 -7
  267. package/src/modules/community/components/pages/BlogPost.vue +9 -1
  268. package/src/modules/core/controllers/classes/core.websocket.js +57 -6
  269. package/src/modules/core/controllers/middlewares/visitor.logger.js +49 -0
  270. package/src/modules/core/controllers/services/requests.service.js +53 -0
  271. package/src/modules/core/controllers/services/sessions.service.js +98 -0
  272. package/src/modules/core/controllers/services/visitors.service.js +102 -0
  273. package/src/modules/core/controllers/utils/mailing.js +16 -3
  274. package/src/modules/core/core.client.js +1 -0
  275. package/src/modules/core/core.server.js +45 -3
  276. package/src/modules/core/models/request.model.js +30 -0
  277. package/src/modules/core/models/session.model.js +43 -0
  278. package/src/modules/core/models/visitor.model.js +28 -0
  279. package/src/modules/core/views/classes/core.app.js +8 -3
  280. package/src/modules/core/views/components/elements/OnlineIndicator.vue +115 -0
  281. package/src/modules/core/views/components/layouts/App.vue +2 -2
  282. package/src/modules/core/views/components/layouts/Client.vue +444 -479
  283. package/src/modules/core/views/components/pages/404.vue +55 -3
  284. package/src/modules/core/views/store/core.store.js +1 -0
  285. package/src/modules/core/views/utils/vue-app-renderer.js +9 -1
  286. package/src/modules/orders/controllers/orders.controller.js +3 -3
  287. package/src/modules/pages/pages.router.js +4 -2
  288. package/src/modules/pages/views/router/pages.backoffice.router.js +4 -3
  289. package/src/modules/products/components/pages/Products.vue +1 -1
  290. package/dist/_virtual/alignment-pattern.js +0 -5
  291. package/dist/_virtual/alignment-pattern.js.map +0 -1
  292. package/dist/_virtual/browser.js +0 -8
  293. package/dist/_virtual/browser.js.map +0 -1
  294. package/dist/_virtual/browser2.js +0 -5
  295. package/dist/_virtual/browser2.js.map +0 -1
  296. package/dist/_virtual/canvas.js +0 -5
  297. package/dist/_virtual/canvas.js.map +0 -1
  298. package/dist/_virtual/dijkstra.js +0 -5
  299. package/dist/_virtual/dijkstra.js.map +0 -1
  300. package/dist/_virtual/error-correction-code.js +0 -5
  301. package/dist/_virtual/error-correction-code.js.map +0 -1
  302. package/dist/_virtual/error-correction-level.js +0 -5
  303. package/dist/_virtual/error-correction-level.js.map +0 -1
  304. package/dist/_virtual/finder-pattern.js +0 -5
  305. package/dist/_virtual/finder-pattern.js.map +0 -1
  306. package/dist/_virtual/format-info.js +0 -5
  307. package/dist/_virtual/format-info.js.map +0 -1
  308. package/dist/_virtual/galois-field.js +0 -5
  309. package/dist/_virtual/galois-field.js.map +0 -1
  310. package/dist/_virtual/mask-pattern.js +0 -5
  311. package/dist/_virtual/mask-pattern.js.map +0 -1
  312. package/dist/_virtual/mode.js +0 -5
  313. package/dist/_virtual/mode.js.map +0 -1
  314. package/dist/_virtual/polynomial.js +0 -5
  315. package/dist/_virtual/polynomial.js.map +0 -1
  316. package/dist/_virtual/qrcode.js +0 -5
  317. package/dist/_virtual/qrcode.js.map +0 -1
  318. package/dist/_virtual/regex.js +0 -5
  319. package/dist/_virtual/regex.js.map +0 -1
  320. package/dist/_virtual/segments.js +0 -5
  321. package/dist/_virtual/segments.js.map +0 -1
  322. package/dist/_virtual/svg-tag.js +0 -5
  323. package/dist/_virtual/svg-tag.js.map +0 -1
  324. package/dist/_virtual/utils.js +0 -5
  325. package/dist/_virtual/utils.js.map +0 -1
  326. package/dist/_virtual/utils2.js +0 -5
  327. package/dist/_virtual/utils2.js.map +0 -1
  328. package/dist/_virtual/version-check.js +0 -5
  329. package/dist/_virtual/version-check.js.map +0 -1
  330. package/dist/_virtual/version.js +0 -5
  331. package/dist/_virtual/version.js.map +0 -1
  332. package/dist/index-_Edcmck_.js +0 -170
  333. package/dist/martyrs/dist/main-fmp55tJF.js.map +0 -1
  334. package/dist/martyrs/node_modules/.pnpm/bignumber.js@9.1.2/node_modules/bignumber.js/bignumber.js +0 -1336
  335. package/dist/martyrs/node_modules/.pnpm/bignumber.js@9.1.2/node_modules/bignumber.js/bignumber.js.map +0 -1
  336. package/dist/martyrs/src/components/Button/Button.vue2.js.map +0 -1
  337. package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +0 -1
  338. package/dist/martyrs/src/components/Spoiler/Spoiler.vue2.js.map +0 -1
  339. package/dist/martyrs/src/components/Tab/Tab.vue.js.map +0 -1
  340. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +0 -166
  341. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js.map +0 -1
  342. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +0 -118
  343. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js.map +0 -1
  344. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +0 -360
  345. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js.map +0 -1
  346. package/dist/martyrs/src/modules/auth/views/store/twofa.js +0 -40
  347. package/dist/martyrs/src/modules/auth/views/store/twofa.js.map +0 -1
  348. package/dist/martyrs/src/modules/backoffice/backoffice.router.js.map +0 -1
  349. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +0 -150
  350. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js.map +0 -1
  351. package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue2.js.map +0 -1
  352. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardBalanceReplenished.vue.js +0 -43
  353. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardBalanceReplenished.vue.js.map +0 -1
  354. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js +0 -47
  355. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js.map +0 -1
  356. package/dist/martyrs/src/modules/wallet/views/components/blocks/CashDeposit.vue.js +0 -29
  357. package/dist/martyrs/src/modules/wallet/views/components/blocks/CashDeposit.vue.js.map +0 -1
  358. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +0 -89
  359. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js.map +0 -1
  360. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDepositProcessing.vue.js +0 -136
  361. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDepositProcessing.vue.js.map +0 -1
  362. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +0 -238
  363. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js.map +0 -1
  364. package/dist/martyrs/src/modules/wallet/views/localization/wallet.json.js +0 -9
  365. package/dist/martyrs/src/modules/wallet/views/localization/wallet.json.js.map +0 -1
  366. package/dist/martyrs/src/modules/wallet/views/store/wallet.store.js +0 -134
  367. package/dist/martyrs/src/modules/wallet/views/store/wallet.store.js.map +0 -1
  368. package/dist/node_modules/.pnpm/dijkstrajs@1.0.3/node_modules/dijkstrajs/dijkstra.js +0 -106
  369. package/dist/node_modules/.pnpm/dijkstrajs@1.0.3/node_modules/dijkstrajs/dijkstra.js.map +0 -1
  370. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/browser.js +0 -79
  371. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/browser.js.map +0 -1
  372. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/can-promise.js +0 -14
  373. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/can-promise.js.map +0 -1
  374. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alignment-pattern.js +0 -43
  375. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alignment-pattern.js.map +0 -1
  376. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alphanumeric-data.js +0 -85
  377. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alphanumeric-data.js.map +0 -1
  378. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-buffer.js +0 -40
  379. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-buffer.js.map +0 -1
  380. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-matrix.js +0 -34
  381. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-matrix.js.map +0 -1
  382. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/byte-data.js +0 -36
  383. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/byte-data.js.map +0 -1
  384. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-code.js +0 -367
  385. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-code.js.map +0 -1
  386. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-level.js +0 -52
  387. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-level.js.map +0 -1
  388. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/finder-pattern.js +0 -25
  389. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/finder-pattern.js.map +0 -1
  390. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/format-info.js +0 -24
  391. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/format-info.js.map +0 -1
  392. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/galois-field.js +0 -38
  393. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/galois-field.js.map +0 -1
  394. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/kanji-data.js +0 -46
  395. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/kanji-data.js.map +0 -1
  396. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mask-pattern.js +0 -149
  397. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mask-pattern.js.map +0 -1
  398. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mode.js +0 -90
  399. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mode.js.map +0 -1
  400. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/numeric-data.js +0 -41
  401. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/numeric-data.js.map +0 -1
  402. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/polynomial.js +0 -44
  403. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/polynomial.js.map +0 -1
  404. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/qrcode.js +0 -279
  405. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/qrcode.js.map +0 -1
  406. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/reed-solomon-encoder.js +0 -38
  407. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/reed-solomon-encoder.js.map +0 -1
  408. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/regex.js +0 -33
  409. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/regex.js.map +0 -1
  410. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/segments.js +0 -201
  411. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/segments.js.map +0 -1
  412. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js +0 -84
  413. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js.map +0 -1
  414. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version-check.js +0 -14
  415. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version-check.js.map +0 -1
  416. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version.js +0 -107
  417. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version.js.map +0 -1
  418. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/canvas.js +0 -61
  419. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/canvas.js.map +0 -1
  420. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/svg-tag.js +0 -64
  421. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/svg-tag.js.map +0 -1
  422. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js +0 -87
  423. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js.map +0 -1
  424. package/dist/profile.schema-CjLOfG7b.js +0 -92
  425. package/src/modules/auth/controllers/middlewares/visitor.logger.js +0 -75
  426. package/src/modules/auth/controllers/routes/twofa.routes.js +0 -8
  427. package/src/modules/auth/controllers/services/twofa.service.js +0 -30
  428. package/src/modules/auth/models/request.model.js +0 -14
  429. package/src/modules/auth/models/visitor.model.js +0 -11
  430. package/src/modules/auth/views/components/pages/EnterCode.vue +0 -204
  431. package/src/modules/auth/views/components/pages/EnterPassword.vue +0 -123
  432. package/src/modules/auth/views/components/sections/ProfileEditCredentials.vue +0 -329
  433. package/src/modules/auth/views/store/twofa.js +0 -70
  434. 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
  435. package/src/modules/backoffice/backoffice.router.js +0 -69
  436. package/src/modules/backoffice/components/partials/Sidebar.vue +0 -165
@@ -1,445 +0,0 @@
1
- # Модуль Auth - Техническая архитектура
2
-
3
- ## 1. Назначение модуля
4
-
5
- Модуль `auth` представляет собой изоморфное решение для аутентификации и управления пользователями в приложении OZDAO Martyrs. Модуль обеспечивает:
6
-
7
- - **Аутентификацию пользователей** через email, телефон или Apple ID
8
- - **Регистрацию новых пользователей** с поддержкой приглашений
9
- - **Двухфакторную аутентификацию** (2FA) для повышения безопасности
10
- - **Управление профилями пользователей** (CRUD операции)
11
- - **Восстановление паролей** через email или SMS
12
- - **Ролевую модель доступа** с поддержкой различных ролей
13
- - **JWT-токены** для безопасной авторизации
14
- - **Логирование посетителей** для аналитики
15
-
16
- ## 2. Архитектура взаимодействия клиент ⇄ сервер
17
-
18
- ```
19
- ┌─────────────────────────────────┐ ┌──────────────────────────────────┐
20
- │ КЛИЕНТ (Vue) │ │ СЕРВЕР (Express) │
21
- ├─────────────────────────────────┤ ├──────────────────────────────────┤
22
- │ Views/Components │ │ Routes │
23
- │ ├─ SignIn/SignUp │◄────────┤ ├─ /api/auth/signin │
24
- │ ├─ Profile/ProfileEdit │ │ ├─ /api/auth/signup │
25
- │ ├─ ResetPassword │ │ ├─ /api/auth/reset-password │
26
- │ └─ EnterCode/EnterPassword │ │ └─ /api/auth/update-password │
27
- │ │ │ │
28
- │ Stores (State Management) │ │ Services (Controllers) │
29
- │ ├─ auth.js (login/signup) │◄────────┤ ├─ auth.service.js │
30
- │ ├─ twofa.js (2FA codes) │ │ ├─ twofa.service.js │
31
- │ └─ users.js (CRUD operations) │ │ └─ users.service.js │
32
- │ │ │ │
33
- │ Router + Middleware │ │ Middleware │
34
- │ ├─ auth.validation.js │ │ ├─ authJwt.js (токены) │
35
- │ └─ ownership.validation.js │ │ ├─ verifySignUp.js │
36
- │ │ │ └─ verifyUser.js │
37
- │ │ │ │
38
- │ Cookie/Storage Management │ │ Models (MongoDB) │
39
- │ ├─ JWT tokens │ │ ├─ User │
40
- │ ├─ User data │ │ ├─ Role │
41
- │ └─ Capacitor support │ │ └─ Visitor │
42
- └─────────────────────────────────┘ └──────────────────────────────────┘
43
- ```
44
-
45
- ## 3. Точки входа и инициализация
46
-
47
- ### 3.1 Клиентская инициализация
48
-
49
- **Файл**: `auth.client.js:34`
50
-
51
- ```javascript
52
- function initializeAuth(app, store, router, options = {}) {
53
- const route = options.route || 'Home';
54
-
55
- // Регистрация локализации
56
- i18nManager.register('auth', locales);
57
-
58
- // Добавление маршрутов
59
- router.addRoute(route, routerAuth);
60
- router.addRoute(route, routerUsers);
61
-
62
- // Регистрация хранилищ
63
- store.addStore('auth', storeAuth);
64
- store.addStore('twofa', storeTwofa);
65
- store.addStore('users', storeUsers);
66
- }
67
- ```
68
-
69
- ### 3.2 Серверная инициализация
70
-
71
- **Файл**: `auth.server.js:12`
72
-
73
- ```javascript
74
- function initializeAuth(app, db, origins, publicPath) {
75
- // Настройка моделей
76
- db.role = RoleModel(db);
77
- db.user = UserModel(db);
78
- db.visitor = VisitorModel(db);
79
- db.request = RequestModel(db);
80
-
81
- // Подключение маршрутов
82
- authRoutes(app, db, origins, publicPath);
83
- twofaRoutes(app, db, origins, publicPath);
84
- usersRoutes(app, db, origins, publicPath);
85
-
86
- // Логирование посетителей
87
- const visitorModule = visitors(db);
88
- app.use(visitorModule.visitorLogger);
89
- }
90
- ```
91
-
92
- ## 4. Потоки аутентификации
93
-
94
- ### 4.1 Поток входа (Login)
95
-
96
- ```
97
- 1. Пользователь → SignIn.vue
98
- 2. Ввод email/phone + пароль
99
- 3. store/auth.js:login() → POST /api/auth/signin
100
- 4. Сервер:
101
- ├─ Проверка пользователя в БД
102
- ├─ Валидация пароля (bcrypt)
103
- ├─ Генерация JWT токена (10 дней)
104
- └─ Возврат данных пользователя + токен
105
- 5. Клиент:
106
- ├─ Сохранение в cookie/storage
107
- ├─ Установка токена в axios
108
- └─ GET /api/organizations/check-accesses для прав доступа
109
- ```
110
-
111
- ### 4.2 Поток регистрации (Signup)
112
-
113
- ```
114
- 1. Пользователь → SignUp.vue
115
- 2. Ввод данных + опциональный invite код
116
- 3. store/auth.js:signup() → POST /api/auth/signup
117
- 4. Сервер:
118
- ├─ Проверка дублирования (middleware)
119
- ├─ Хеширование пароля (bcrypt, salt:8)
120
- ├─ Создание пользователя
121
- ├─ Присвоение роли 'user'
122
- ├─ Обработка приглашения (если есть)
123
- └─ Генерация JWT токена
124
- 5. Клиент: как при входе
125
- ```
126
-
127
- ### 4.3 Поток 2FA и восстановления пароля
128
-
129
- ```
130
- 1. Запрос сброса → ResetPassword.vue
131
- 2. store/auth.js:resetPassword() → POST /api/auth/reset-password
132
- 3. Сервер:
133
- ├─ Проверка существования пользователя
134
- ├─ Генерация 4-значного кода
135
- └─ Отправка email/SMS
136
- 4. Клиент → EnterCode.vue
137
- 5. Ввод кода → EnterPassword.vue
138
- 6. store/auth.js:updatePassword() → POST /api/auth/update-password
139
- 7. Сервер: обновление пароля + новый JWT
140
- ```
141
-
142
- ### 4.4 Поток проверки доступов
143
-
144
- ```
145
- 1. Инициализация → store/auth.js:initialize()
146
- 2. GET /api/organizations/check-accesses (в модуле organizations!)
147
- 3. Сервер:
148
- ├─ Проверка JWT токена
149
- ├─ Поиск департаментов пользователя
150
- ├─ Поиск организаций в собственности
151
- └─ Формирование массива прав доступа
152
- 4. Клиент: сохранение в state.accesses
153
- ```
154
-
155
- ## 5. Структура файлов и их связи
156
-
157
- ### 5.1 Клиентская часть
158
-
159
- ```
160
- views/
161
- ├── components/
162
- │ ├── layouts/Auth.vue # Общий layout для auth страниц
163
- │ ├── pages/ # Страницы аутентификации
164
- │ │ ├── SignIn.vue # Вход в систему
165
- │ │ ├── SignUp.vue # Регистрация
166
- │ │ ├── ResetPassword.vue # Сброс пароля
167
- │ │ ├── EnterCode.vue # Ввод 2FA кода
168
- │ │ ├── EnterPassword.vue # Новый пароль
169
- │ │ ├── Invite.vue # Регистрация по приглашению
170
- │ │ ├── Profile.vue # Профиль пользователя
171
- │ │ └── ProfileEdit.vue # Редактирование профиля
172
- │ └── sections/ # Переиспользуемые секции
173
- ├── store/ # Vuex-подобные хранилища
174
- │ ├── auth.js # Основная аутентификация
175
- │ ├── twofa.js # Двухфакторная аутентификация
176
- │ └── users.js # Управление пользователями
177
- ├── router/ # Маршрутизация
178
- │ ├── auth.js # Маршруты аутентификации
179
- │ └── users.js # Маршруты пользователей
180
- ├── middlewares/ # Валидация на клиенте
181
- │ ├── auth.validation.js # Проверка аутентификации
182
- │ └── ownership.validation.js # Проверка прав доступа
183
- └── validations/
184
- └── inputs.validation.js # Валидация форм
185
- ```
186
-
187
- ### 5.2 Серверная часть
188
-
189
- ```
190
- controllers/
191
- ├── services/ # Бизнес-логика
192
- │ ├── auth.service.js # Аутентификация
193
- │ ├── twofa.service.js # 2FA коды
194
- │ └── users.service.js # CRUD пользователей
195
- ├── routes/ # API маршруты
196
- │ ├── auth.routes.js # /api/auth/*
197
- │ ├── twofa.routes.js # /api/twofa/*
198
- │ └── users.routes.js # /api/users/*
199
- ├── middlewares/ # Серверные middleware
200
- │ ├── authJwt.js # JWT валидация
201
- │ ├── verifySignUp.js # Валидация регистрации
202
- │ ├── verifyUser.js # Проверка пользователей
203
- │ └── visitor.logger.js # Логирование посещений
204
- └── utils/
205
- └── verifyAppleIdToken.js # Apple ID интеграция
206
- ```
207
-
208
- ### 5.3 Модели данных
209
-
210
- ```
211
- models/
212
- ├── user.model.js # Пользователи
213
- ├── role.model.js # Роли
214
- ├── visitor.model.js # Логи посещений
215
- └── request.model.js # Запросы
216
- ```
217
-
218
- ## 6. API Endpoints
219
-
220
- ### 6.1 Аутентификация (/api/auth/*)
221
-
222
- | Endpoint | Method | Middleware | Описание |
223
- |----------|---------|------------|----------|
224
- | `/api/auth/signin` | POST | - | Вход в систему |
225
- | `/api/auth/signup` | POST | `checkDuplicateUsernameOrEmail` | Регистрация |
226
- | `/api/auth/reset-password` | POST | `checkUserExist` | Сброс пароля |
227
- | `/api/auth/update-password` | POST | - | Обновление пароля |
228
-
229
- ### 6.2 Двухфакторная аутентификация (/api/twofa/*)
230
-
231
- | Endpoint | Method | Описание |
232
- |----------|---------|----------|
233
- | `/api/twofa/sendcode` | POST | Отправка кода при регистрации |
234
- | `/api/twofa/sendcodereset` | POST | Отправка кода для сброса пароля |
235
-
236
- ### 6.3 Пользователи (/api/users/*)
237
-
238
- | Endpoint | Method | Middleware | Описание |
239
- |----------|---------|------------|----------|
240
- | `/api/users` | GET | - | Получение пользователей |
241
- | `/api/users` | POST | `verifyToken, checkDuplicateUsername` | Создание |
242
- | `/api/users/:_id` | PUT | `verifyToken, checkDuplicateUsername` | Обновление |
243
- | `/api/users/:_id` | DELETE | `verifyToken` | Удаление |
244
-
245
- ### 6.4 Проверка доступов
246
-
247
- | Endpoint | Method | Middleware | Модуль | Описание |
248
- |----------|---------|------------|---------|----------|
249
- | `/api/organizations/check-accesses` | GET | `verifyToken` | **organizations** | Получение прав доступа |
250
-
251
- ## 7. Безопасность
252
-
253
- ### 7.1 Хеширование паролей
254
-
255
- **Файл**: `auth.service.js:93, 164`
256
-
257
- - Библиотека: `bcrypt`
258
- - Salt rounds: 8
259
- - Асинхронное хеширование при обновлении
260
-
261
- ### 7.2 JWT Токены
262
-
263
- **Конфигурация**:
264
- - Секретный ключ: `process.env.SECRET_KEY`
265
- - Время жизни: 864000 секунд (10 дней)
266
- - Содержит: `{ _id: userId, organization: orgId }`
267
-
268
- ### 7.3 Middleware безопасности
269
-
270
- **authJwt.js**:
271
- - `verifyToken(continueOnFail)` - проверка JWT
272
- - Поддержка сервисных ключей (`x-service-key`)
273
- - Извлечение токенов из headers или cookies
274
- - Роли: `isAdmin`, `isModerator`
275
-
276
- ### 7.4 CORS и Cookie
277
-
278
- **Настройки cookie**:
279
- ```javascript
280
- development: { secure: false, expires: 7, sameSite: 'Lax' }
281
- production: {
282
- expires: 7,
283
- domain: process.env.DOMAIN_URL,
284
- sameSite: 'strict',
285
- secure: true
286
- }
287
- ```
288
-
289
- ## 8. Интеграция в проект
290
-
291
- ### 8.1 Основная инициализация
292
-
293
- ```javascript
294
- // Клиент
295
- import ModuleAuth from '@martyrs/src/modules/auth/auth.client.js';
296
- ModuleAuth.initialize(app, store, router, { route: 'Home' });
297
-
298
- // Сервер
299
- import AuthModule from '@martyrs/src/modules/auth/auth.server.js';
300
- AuthModule.initialize(app, db, origins, publicPath);
301
- ```
302
-
303
- ### 8.2 Использование в компонентах
304
-
305
- ```javascript
306
- // Аутентификация
307
- import * as auth from '@martyrs/src/modules/auth/views/store/auth.js';
308
- await auth.actions.login({ email: 'user@example.com', password: '123' }, 'email');
309
-
310
- // Управление пользователями
311
- import * as users from '@martyrs/src/modules/auth/views/store/users.js';
312
- const users = await users.actions.read();
313
- ```
314
-
315
- ### 8.3 Защищенные маршруты
316
-
317
- ```javascript
318
- // Клиент
319
- import * as authValidation from '@martyrs/src/modules/auth/views/middlewares/auth.validation.js';
320
-
321
- {
322
- path: '/profile',
323
- beforeEnter: [authValidation.requiresAuth]
324
- }
325
-
326
- // Сервер
327
- import middlewareFactory from '@martyrs/src/modules/auth/controllers/middlewares/index.js';
328
- const { authJwt } = middlewareFactory(db);
329
-
330
- app.get('/api/protected', [authJwt.verifyToken()], controller);
331
- ```
332
-
333
- ## 9. Расширение и конфигурация
334
-
335
- ### 9.1 Добавление новой роли
336
-
337
- 1. **База данных**:
338
- ```javascript
339
- db.role.create({ name: 'editor' })
340
- ```
341
-
342
- 2. **Middleware**:
343
- ```javascript
344
- const isEditor = middlewareFactory(db).authJwt.checkRole('editor');
345
- ```
346
-
347
- 3. **Маршрут**:
348
- ```javascript
349
- app.post('/api/content', [authJwt.verifyToken(), isEditor], controller);
350
- ```
351
-
352
- ### 9.2 Добавление провайдера аутентификации
353
-
354
- 1. **Сервер** (`auth.service.js`):
355
- ```javascript
356
- if (type === 'google' && authorization.id_token) {
357
- payload = await verifyGoogleIdToken(authorization.id_token);
358
- // ...
359
- }
360
- ```
361
-
362
- 2. **Клиент** (`auth.js`):
363
- ```javascript
364
- await auth.actions.login({ authorization: googleToken }, 'google');
365
- ```
366
-
367
- ### 9.3 Переменные окружения
368
-
369
- ```bash
370
- SECRET_KEY=your-jwt-secret # JWT секрет
371
- DOMAIN_URL=example.com # Домен для cookies
372
- SERVICE_KEY=service-secret # Сервисные запросы
373
- NODE_ENV=production # Окружение
374
- MOBILE_APP=true # Мобильное приложение
375
- APP_NAME=MyApp # Название в письмах
376
- ```
377
-
378
- ### 9.4 Мобильная поддержка
379
-
380
- Модуль поддерживает Capacitor через `@capacitor/preferences`:
381
- - Автоматическое переключение между cookies и Capacitor storage
382
- - Определение через `process.env.MOBILE_APP`
383
-
384
- ## 10. Ключевые сценарии использования
385
-
386
- ### 10.1 Полный цикл аутентификации
387
-
388
- ```javascript
389
- // 1. Инициализация приложения
390
- const cookie = await getCookie('user');
391
- await auth.actions.initialize(cookie);
392
-
393
- // 2. Вход пользователя
394
- await auth.actions.login({
395
- email: 'user@example.com',
396
- password: 'password123'
397
- }, 'email');
398
-
399
- // 3. Проверка прав доступа происходит автоматически
400
- // state.accesses теперь содержит права пользователя
401
-
402
- // 4. Выход
403
- await auth.actions.logout();
404
- ```
405
-
406
- ### 10.2 Регистрация с приглашением
407
-
408
- ```javascript
409
- // 1. Переход по приглашению → /auth/invite?code=INVITE123
410
- // 2. Заполнение формы
411
- await auth.actions.signup({
412
- email: 'newuser@example.com',
413
- password: 'password123'
414
- }, 'email', 'INVITE123');
415
-
416
- // 3. Автоматическое создание membership в организации
417
- ```
418
-
419
- ### 10.3 Восстановление пароля
420
-
421
- ```javascript
422
- // 1. Запрос сброса
423
- await auth.actions.resetPassword({ email: 'user@example.com' }, 'email');
424
-
425
- // 2. Отправка кода → state.twofa.code.isSended = true
426
-
427
- // 3. Новый пароль
428
- state.user.password = 'newpassword123';
429
- state.user.passwordRepeat = 'newpassword123';
430
- await auth.actions.updatePassword({ email: 'user@example.com' }, 'email');
431
- ```
432
-
433
- ### 10.4 Управление профилем
434
-
435
- ```javascript
436
- // Получение данных профиля
437
- await users.actions.read({ _id: userId });
438
-
439
- // Обновление профиля
440
- await users.actions.update({
441
- _id: userId,
442
- profile: { name: 'New Name' },
443
- socials: { twitter: '@username' }
444
- });
445
- ```
@@ -1,69 +0,0 @@
1
- // backoffice.meta.js
2
- import Sidebar from './components/partials/Sidebar.vue';
3
-
4
- export function getRoutes(options = {}) {
5
- const route = options.route || 'Home';
6
- const routes = [];
7
-
8
- routes.push({
9
- parentName: route,
10
- config: {
11
- basePath: 'backoffice',
12
- routes: [
13
- {
14
- path: '',
15
- name: 'Backoffice Root',
16
- meta: {
17
- sidebar_navigation: Sidebar,
18
- sidebar_width_hidden: 'w-0',
19
- },
20
- props: {
21
- newsletterPopup: 12344,
22
- },
23
- beforeEnter: [
24
- () => import(/* webpackChunkName: "auth-validation" */ '@martyrs/src/modules/auth/views/middlewares/auth.validation.js').then(m => m.requiresAdmin),
25
- ],
26
- children: [
27
- {
28
- path: '',
29
- name: 'Backoffice Admin',
30
- meta: {
31
- title: {
32
- en: 'Backoffice',
33
- ru: 'Управление',
34
- },
35
- },
36
- component: () => import(/* webpackChunkName: 'BackofficeGallery' */ './components/pages/Dashboard.vue'),
37
- },
38
- {
39
- path: 'organizations',
40
- name: 'Backoffice Organizations',
41
- meta: {
42
- title: {
43
- en: 'Backoffice Organizations',
44
- ru: 'Управление Организациями',
45
- },
46
- authorize: [],
47
- },
48
- component: () => import(/* webpackChunkName: 'BackofficeOrganizations' */ '@martyrs/src/modules/organizations/components/pages/Organizations.vue'),
49
- },
50
- {
51
- path: 'community',
52
- name: 'Backoffice Community',
53
- meta: {
54
- title: {
55
- en: 'Backoffice Community',
56
- ru: 'Управление Сообществом',
57
- },
58
- authorize: [],
59
- },
60
- component: () => import(/* webpackChunkName: 'BackofficeCommunity' */ '@martyrs/src/modules/community/components/pages/Blog.vue'),
61
- },
62
- ],
63
- }
64
- ],
65
- }
66
- });
67
-
68
- return routes;
69
- }
@@ -1,165 +0,0 @@
1
- <template>
2
- <div class="pos-relative o-y-scroll o-x-hidden h-100">
3
- <div class="br-b-1px h3 h-4r pd-semi br-black-transp-10">Backoffice</div>
4
- <div class="pd-semi">
5
- <span class="pd-thin uppercase fw-medium t-transp">Menu</span>
6
- <div
7
- v-for="item in menuItems"
8
- :key="item.name"
9
- @click="router.push(item.to || { name: item.routeName })"
10
- class="flex pd-thin flex-v-center cursor-pointer">
11
- <component
12
- v-if="item.icon"
13
- :is="item.icon"
14
- class="i-medium mn-r-thin"
15
- :icon="true"
16
- :fill="'rgba(var(--black),0.25)'"
17
- />
18
- <span class="fw-medium">{{ item.title }}</span>
19
- </div>
20
-
21
- <span class="pd-thin d-block mn-t-medium uppercase fw-medium t-transp">General</span>
22
- <div
23
- v-for="item in generalItems"
24
- :key="item.name"
25
- @click="router.push(item.to || { name: item.routeName })"
26
- class="flex pd-thin flex-v-center cursor-pointer">
27
- <component
28
- v-if="item.icon"
29
- :is="item.icon"
30
- class="i-medium mn-r-thin"
31
- :icon="true"
32
- :fill="'rgba(var(--black),0.25)'"
33
- />
34
- <span class="fw-medium">{{ item.title }}</span>
35
- </div>
36
- </div>
37
- </div>
38
- </template>
39
-
40
- <script setup="props">
41
- /////////////////////////////
42
- // COMPONENT DEPENDENCIES
43
- /////////////////////////////
44
- import { ref, onMounted } from 'vue';
45
-
46
- // Mobile Module
47
- import SelectMulti from '@martyrs/src/components/SelectMulti/SelectMulti.vue'
48
-
49
- import IconProducts from '@martyrs/src/modules/icons/entities/IconProducts.vue'
50
- import IconPayments from '@martyrs/src/modules/icons/entities/IconPayments.vue'
51
- import IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'
52
- import IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'
53
- import IconCommunity from '@martyrs/src/modules/icons/entities/IconCommunity.vue'
54
- import IconGallery from '@martyrs/src/modules/icons/entities/IconGallery.vue'
55
- import IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue'
56
- import IconLeftovers from '@martyrs/src/modules/icons/entities/IconLeftovers.vue'
57
- /////////////////////////////
58
- // HELPERS
59
- /////////////////////////////
60
- import { useRoute, useRouter } from 'vue-router'
61
-
62
- import * as auth from '@martyrs/src/modules/auth/views/store/auth.js'
63
- import * as organizations from '@martyrs/src/modules/organizations/store/organizations.js'
64
-
65
- const route = useRoute()
66
- const router = useRouter()
67
- /////////////////////////////
68
- // CREATED
69
- /////////////////////////////
70
- const props = defineProps({
71
- favorites: Array,
72
- });
73
-
74
- const selectedOrganization = ref(null);
75
- const publics = ref([]);
76
-
77
- // Define menu items
78
- const menuItems = [
79
- {
80
- name: 'organizations',
81
- title: 'Organizations',
82
- to: '/backoffice/organizations',
83
- icon: IconGroups
84
- },
85
- {
86
- name: 'community',
87
- title: 'Community',
88
- routeName: 'Backoffice Community',
89
- icon: IconCommunity
90
- },
91
- {
92
- name: 'products',
93
- title: 'Products',
94
- routeName: 'Products',
95
- icon: IconProducts
96
- },
97
- {
98
- name: 'inventory',
99
- title: 'Inventory',
100
- routeName: 'BackofficeInventoryList',
101
- icon: IconLeftovers
102
- },
103
- {
104
- name: 'orders',
105
- title: 'Orders',
106
- routeName: 'BackofficeOrdersList',
107
- icon: IconOrders
108
- },
109
- {
110
- name: 'gallery',
111
- title: 'Gallery',
112
- routeName: 'Backoffice Gallery',
113
- icon: IconGallery
114
- },
115
- {
116
- name: 'applications',
117
- title: 'Applications',
118
- routeName: 'BackofficeApplications',
119
- icon: IconEvents
120
- },
121
- {
122
- name: 'events',
123
- title: 'Events',
124
- routeName: 'BackofficeEvents Backoffice',
125
- icon: IconEvents
126
- }
127
- ];
128
-
129
- // Define general items
130
- const generalItems = [
131
- {
132
- name: 'payments',
133
- title: 'Payments',
134
- routeName: 'Payments',
135
- icon: IconPayments
136
- },
137
- {
138
- name: 'users',
139
- title: 'Users',
140
- routeName: 'Users',
141
- icon: null
142
- },
143
- {
144
- name: 'pages',
145
- title: 'Pages',
146
- routeName: 'Backoffice Pages',
147
- icon: null
148
- },
149
- {
150
- name: 'reports',
151
- title: 'Reports',
152
- routeName: 'Backoffice Reports',
153
- icon: null
154
- }
155
- ];
156
-
157
- /////////////////////////////
158
- // MOUNTED
159
- /////////////////////////////
160
- onMounted(async () => {
161
- });
162
- </script>
163
-
164
- <style lang="scss">
165
- </style>