@ozdao/martyrs 0.2.492 → 0.2.494
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.
- package/dist/_virtual/index.cjs +4 -4
- package/dist/_virtual/index.js +4 -4
- package/dist/_virtual/index2.cjs +4 -4
- package/dist/_virtual/index2.js +4 -4
- package/dist/builder.cjs +53 -90
- package/dist/builder.js +54 -91
- package/dist/{crud-B-kQw3Z5.cjs → crud-JN_LFj01.cjs} +3 -0
- package/dist/{crud-Cwx5VlSm.js → crud-sE7GLPbj.js} +3 -0
- package/dist/globals.server.cjs +322 -3
- package/dist/globals.server.js +303 -1
- package/dist/{globals.verifier-D68mHEBl.cjs → globals.verifier-C0zj_LLo.cjs} +8 -1
- package/dist/{globals.verifier-CWFz5Gh2.js → globals.verifier-DFqKQ7hK.js} +8 -1
- package/dist/inventory.server.cjs +2 -2
- package/dist/inventory.server.js +2 -2
- package/dist/{main-SZQ1QjeP.js → main-CJm5myDI.js} +631 -607
- package/dist/{main-MzmGbSxs.cjs → main-DTaE01lg.cjs} +6 -6
- package/dist/martyrs/src/components/Calendar/Calendar.vue2.cjs +1 -1
- package/dist/martyrs/src/components/Calendar/Calendar.vue2.cjs.map +1 -1
- package/dist/martyrs/src/components/Calendar/Calendar.vue2.js +1 -1
- package/dist/martyrs/src/components/Calendar/Calendar.vue2.js.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs +33 -7
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +33 -7
- package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
- package/dist/martyrs/src/components/Field/{Field.vue2.cjs → Field.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Field/{Field.vue2.js.map → Field.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Field/{Field.vue2.js → Field.vue.js} +2 -2
- package/dist/martyrs/src/components/Field/Field.vue.js.map +1 -0
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +1 -1
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +1 -1
- package/dist/martyrs/src/components/Menu/{Menu.vue.cjs → Menu.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Menu/Menu.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Menu/{Menu.vue.js → Menu.vue2.js} +2 -2
- package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Menu/MenuItem.vue.js +2 -2
- package/dist/martyrs/src/components/Menu/MenuItem.vue.js.map +1 -1
- package/dist/martyrs/src/components/PhotoViewer/PhotoViewer.vue.js +4 -4
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +2 -2
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +2 -2
- package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.cjs +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.cjs +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +5 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +5 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/entities/IconTime.vue.cjs +2 -2
- package/dist/martyrs/src/modules/icons/entities/IconTime.vue.js +2 -2
- package/dist/martyrs/src/modules/icons/navigation/IconChevronLeft.vue.cjs +2 -2
- package/dist/martyrs/src/modules/icons/navigation/IconChevronLeft.vue.js +2 -2
- package/dist/martyrs/src/modules/icons/navigation/IconChevronRight.vue.cjs +2 -2
- package/dist/martyrs/src/modules/icons/navigation/IconChevronRight.vue.js +2 -2
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js +6 -6
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs +22 -15
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +23 -16
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs +31 -13
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +33 -15
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs +39 -22
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +39 -22
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +385 -125
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +391 -131
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +24 -7
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +25 -8
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +99 -87
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +111 -99
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.cjs +21 -0
- package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.js +21 -0
- package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +442 -210
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +445 -213
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs +92 -117
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +93 -118
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.cjs +72 -113
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js +78 -119
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +15 -12
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +15 -12
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +558 -429
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +560 -431
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +146 -284
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +149 -287
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +460 -63
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +462 -65
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs +126 -136
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +129 -139
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.cjs +18 -15
- package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.js +18 -15
- package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.cjs +28 -23
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +29 -24
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/music.client.cjs +3 -6
- package/dist/martyrs/src/modules/music/music.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/music.client.js +9 -12
- package/dist/martyrs/src/modules/music/music.client.js.map +1 -1
- package/dist/martyrs/src/modules/music/router/music.cjs +27 -1
- package/dist/martyrs/src/modules/music/router/music.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/router/music.js +27 -1
- package/dist/martyrs/src/modules/music/router/music.js.map +1 -1
- package/dist/martyrs/src/modules/music/store/artists.cjs +6 -4
- package/dist/martyrs/src/modules/music/store/artists.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/store/artists.js +6 -4
- package/dist/martyrs/src/modules/music/store/artists.js.map +1 -1
- package/dist/martyrs/src/modules/music/store/player.cjs +5 -0
- package/dist/martyrs/src/modules/music/store/player.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/store/player.js +5 -0
- package/dist/martyrs/src/modules/music/store/player.js.map +1 -1
- package/dist/martyrs/src/modules/music/store/tracks.cjs +22 -0
- package/dist/martyrs/src/modules/music/store/tracks.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/store/tracks.js +22 -0
- package/dist/martyrs/src/modules/music/store/tracks.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/router/organizations.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/router/organizations.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +1 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttBar.vue.cjs +4 -3
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttBar.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttBar.vue.js +4 -3
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttBar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttChart.vue.cjs +37 -70
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttChart.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttChart.vue.js +38 -71
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttChart.vue.js.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +2 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +6 -5
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.cjs +45 -52
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +46 -53
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +1 -1
- package/dist/martyrs.cjs.js +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/music.server.cjs +124 -31
- package/dist/music.server.js +124 -31
- package/dist/organizations.server.cjs +1 -1
- package/dist/organizations.server.js +1 -1
- package/dist/products.server.cjs +2 -2
- package/dist/products.server.js +2 -2
- package/dist/rents.server.cjs +3 -3
- package/dist/rents.server.js +3 -3
- package/dist/style.css +373 -80
- package/dist/{web-D7lZjuC0.js → web-Dkk0_7TA.js} +1 -1
- package/dist/{web-D-YZ9KHz.cjs → web-stVkXd0l.cjs} +1 -1
- package/package.json +1 -1
- package/src/builder/modes/ssr.prod.js +21 -5
- package/src/builder/rspack/rspack.config.spa.client.js +0 -44
- package/src/builder/rspack/rspack.config.ssr.client.js +40 -40
- package/src/components/Calendar/Calendar.vue +378 -377
- package/src/components/Feed/Feed.vue +28 -2
- package/src/modules/globals/controllers/classes/crud/crud.policies.js +5 -0
- package/src/modules/globals/controllers/classes/globals.validator.js +8 -1
- package/src/modules/globals/views/components/layouts/Client.vue +7 -0
- package/src/modules/music/README.md +8 -0
- package/src/modules/music/components/SidebarMusic.vue +6 -9
- package/src/modules/music/components/cards/AlbumCard.vue +20 -14
- package/src/modules/music/components/cards/ArtistCard.vue +1 -1
- package/src/modules/music/components/cards/PlaylistCard.vue +31 -11
- package/src/modules/music/components/cards/TrackListCard.vue +24 -13
- package/src/modules/music/components/forms/PlaylistForm.vue +417 -107
- package/src/modules/music/components/forms/SearchForm.vue +31 -8
- package/src/modules/music/components/forms/TrackForm.vue +50 -32
- package/src/modules/music/components/layouts/MusicBottomPlayer.vue +17 -0
- package/src/modules/music/components/pages/Album.vue +373 -186
- package/src/modules/music/components/pages/Artist.vue +54 -94
- package/src/modules/music/components/pages/MusicHome.vue +59 -56
- package/src/modules/music/components/pages/MusicLibrary.vue +13 -11
- package/src/modules/music/components/pages/Playlist.vue +495 -379
- package/src/modules/music/components/pages/SearchResults.vue +185 -313
- package/src/modules/music/components/pages/Track.vue +363 -69
- package/src/modules/music/components/player/MusicPlayer.vue +368 -97
- package/src/modules/music/components/player/TrackProgress.vue +76 -22
- package/src/modules/music/components/player/VolumeControl.vue +61 -28
- package/src/modules/music/controllers/search.controller.js +3 -0
- package/src/modules/music/controllers/stream.controller.js +11 -3
- package/src/modules/music/middlewares/playlists.verifier.js +1 -1
- package/src/modules/music/music.client.js +3 -6
- package/src/modules/music/music.server.js +8 -4
- package/src/modules/music/router/music.js +8 -1
- package/src/modules/music/routes/albums.routes.js +37 -5
- package/src/modules/music/routes/artists.routes.js +14 -4
- package/src/modules/music/routes/genres.routes.js +5 -1
- package/src/modules/music/routes/playlists.routes.js +42 -9
- package/src/modules/music/routes/tracks.routes.js +27 -2
- package/src/modules/music/store/artists.js +6 -2
- package/src/modules/music/store/player.js +6 -0
- package/src/modules/music/store/tracks.js +31 -0
- package/src/modules/music/websocket/streaming.handler.js +7 -1
- package/src/modules/rents/controllers/services/rents.services.js +2 -2
- package/src/modules/rents/views/components/pages/Gant/GanttBar.vue +4 -3
- package/src/modules/rents/views/components/pages/Gant/GanttChart.vue +42 -40
- package/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue +3 -1
- package/src/modules/rents/views/components/pages/Rents.vue +60 -56
- package/dist/globals.websocket-DzvdIBf6.js +0 -306
- package/dist/globals.websocket-k6_B1T7k.cjs +0 -322
- package/dist/martyrs/src/components/Field/Field.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Menu/Menu.vue.cjs.map +0 -1
- package/dist/martyrs/src/components/Menu/Menu.vue.js.map +0 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.cjs +0 -69
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.js +0 -69
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.js.map +0 -1
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.cjs +0 -104
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.js +0 -104
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.js.map +0 -1
- package/src/modules/music/components/cards/TrackCard.vue +0 -86
- package/src/modules/music/components/layouts/MusicLayout.vue +0 -83
package/dist/martyrs.es.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as e, a as o, b as d, C as r, k as t, c as l, d as i, e as p, f as u, g as n, h as M, i as S, j as c, F as m, l as C, n as F, o as g, L as h, p as b, M as k, q as x, H as B, r as T, s as U, t as f, u as w, S as D, v as E, w as I, x as L, y as P, z as q, A as y, B as A, D as j, U as v, E as z, G, m as H } from "./main-
|
|
1
|
+
import { _ as e, a as o, b as d, C as r, k as t, c as l, d as i, e as p, f as u, g as n, h as M, i as S, j as c, F as m, l as C, n as F, o as g, L as h, p as b, M as k, q as x, H as B, r as T, s as U, t as f, u as w, S as D, v as E, w as I, x as L, y as P, z as q, A as y, B as A, D as j, U as v, E as z, G, m as H } from "./main-CJm5myDI.js";
|
|
2
2
|
export {
|
|
3
3
|
e as Address,
|
|
4
4
|
o as Breadcrumbs,
|
package/dist/music.server.cjs
CHANGED
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const globals_abac = require("./globals.abac-CPXLas7N.cjs");
|
|
4
4
|
const globals_logger = require("./globals.logger-CZMgIMlM.cjs");
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
require("cookie");
|
|
6
|
+
require("jsonwebtoken");
|
|
7
|
+
require("uWebSockets.js");
|
|
8
|
+
const crud = require("./crud-JN_LFj01.cjs");
|
|
7
9
|
const abac = require("./abac-6LjoG9u-.cjs");
|
|
8
|
-
const globals_verifier = require("./globals.verifier-
|
|
10
|
+
const globals_verifier = require("./globals.verifier-C0zj_LLo.cjs");
|
|
9
11
|
const fs$1 = require("fs");
|
|
10
12
|
const path$1 = require("path");
|
|
11
13
|
const common_schema = require("./common.schema-BzFEVNn3.cjs");
|
|
@@ -199,7 +201,7 @@ function setupTracksRoutes(app, db) {
|
|
|
199
201
|
model: db.track,
|
|
200
202
|
modelName: "track",
|
|
201
203
|
basePath: "/api/tracks",
|
|
202
|
-
auth:
|
|
204
|
+
auth: { read: false },
|
|
203
205
|
verifiers: {
|
|
204
206
|
create: verifier.createVerifier,
|
|
205
207
|
read: verifier.readVerifier,
|
|
@@ -207,6 +209,9 @@ function setupTracksRoutes(app, db) {
|
|
|
207
209
|
delete: verifier.deleteVerifier
|
|
208
210
|
},
|
|
209
211
|
abac: abac2,
|
|
212
|
+
policies: {
|
|
213
|
+
read: { enabled: false }
|
|
214
|
+
},
|
|
210
215
|
cache: {
|
|
211
216
|
enabled: true,
|
|
212
217
|
ttl: 300,
|
|
@@ -217,13 +222,18 @@ function setupTracksRoutes(app, db) {
|
|
|
217
222
|
logReads: false
|
|
218
223
|
}
|
|
219
224
|
});
|
|
225
|
+
tracksCRUD.policies.disableForAction("get-by-url");
|
|
226
|
+
tracksCRUD.policies.disableForAction("recent");
|
|
227
|
+
tracksCRUD.policies.disableForAction("popular");
|
|
228
|
+
tracksCRUD.policies.disableForAction("by-genre");
|
|
220
229
|
tracksCRUD.addAction("get-by-url", {
|
|
221
230
|
method: "get",
|
|
222
231
|
path: "/url/:url",
|
|
223
232
|
auth: false,
|
|
233
|
+
abac: { enabled: false },
|
|
224
234
|
handler: async (req, res) => {
|
|
225
235
|
try {
|
|
226
|
-
const track = await db.track.findOne({ url: req.params.url });
|
|
236
|
+
const track = await db.track.findOne({ url: req.params.url }).populate("artist", "name url photoUrl isVerified").populate("album", "title url coverArt").populate("genre", "name url");
|
|
227
237
|
if (!track) {
|
|
228
238
|
return res.status(404).json({ error: "Track not found" });
|
|
229
239
|
}
|
|
@@ -250,13 +260,14 @@ function setupTracksRoutes(app, db) {
|
|
|
250
260
|
method: "get",
|
|
251
261
|
path: "/recent",
|
|
252
262
|
auth: false,
|
|
263
|
+
abac: { enabled: false },
|
|
253
264
|
handler: async (req, res) => {
|
|
254
265
|
try {
|
|
255
266
|
const limit = parseInt(req.query.limit) || 10;
|
|
256
267
|
const recentTracks = await db.track.find({
|
|
257
268
|
status: "published",
|
|
258
269
|
isPublic: true
|
|
259
|
-
}).sort({ createdAt: -1 }).limit(limit);
|
|
270
|
+
}).populate("artist", "name url photoUrl isVerified").populate("album", "title url coverArt").sort({ createdAt: -1 }).limit(limit);
|
|
260
271
|
res.json(recentTracks);
|
|
261
272
|
} catch (error) {
|
|
262
273
|
console.error(error);
|
|
@@ -268,13 +279,14 @@ function setupTracksRoutes(app, db) {
|
|
|
268
279
|
method: "get",
|
|
269
280
|
path: "/popular",
|
|
270
281
|
auth: false,
|
|
282
|
+
abac: { enabled: false },
|
|
271
283
|
handler: async (req, res) => {
|
|
272
284
|
try {
|
|
273
285
|
const limit = parseInt(req.query.limit) || 10;
|
|
274
286
|
const popularTracks = await db.track.find({
|
|
275
287
|
status: "published",
|
|
276
288
|
isPublic: true
|
|
277
|
-
}).sort({ playCount: -1 }).limit(limit);
|
|
289
|
+
}).populate("artist", "name url photoUrl isVerified").populate("album", "title url coverArt").sort({ playCount: -1 }).limit(limit);
|
|
278
290
|
res.json(popularTracks);
|
|
279
291
|
} catch (error) {
|
|
280
292
|
console.error(error);
|
|
@@ -286,13 +298,14 @@ function setupTracksRoutes(app, db) {
|
|
|
286
298
|
method: "get",
|
|
287
299
|
path: "/genre/:genreId",
|
|
288
300
|
auth: false,
|
|
301
|
+
abac: { enabled: false },
|
|
289
302
|
handler: async (req, res) => {
|
|
290
303
|
try {
|
|
291
304
|
const tracks = await db.track.find({
|
|
292
305
|
genre: req.params.genreId,
|
|
293
306
|
status: "published",
|
|
294
307
|
isPublic: true
|
|
295
|
-
}).sort({ releaseDate: -1 });
|
|
308
|
+
}).populate("artist", "name url photoUrl isVerified").populate("album", "title url coverArt").sort({ releaseDate: -1 });
|
|
296
309
|
res.json(tracks);
|
|
297
310
|
} catch (error) {
|
|
298
311
|
console.error(error);
|
|
@@ -450,7 +463,7 @@ function setupArtistsRoutes(app, db) {
|
|
|
450
463
|
model: db.artist,
|
|
451
464
|
modelName: "artist",
|
|
452
465
|
basePath: "/api/artists",
|
|
453
|
-
auth:
|
|
466
|
+
auth: { read: false },
|
|
454
467
|
verifiers: {
|
|
455
468
|
create: verifier.createVerifier,
|
|
456
469
|
read: verifier.readVerifier,
|
|
@@ -458,6 +471,9 @@ function setupArtistsRoutes(app, db) {
|
|
|
458
471
|
delete: verifier.deleteVerifier
|
|
459
472
|
},
|
|
460
473
|
abac: abac2,
|
|
474
|
+
policies: {
|
|
475
|
+
read: { enabled: false }
|
|
476
|
+
},
|
|
461
477
|
cache: {
|
|
462
478
|
enabled: true,
|
|
463
479
|
ttl: 300,
|
|
@@ -472,6 +488,7 @@ function setupArtistsRoutes(app, db) {
|
|
|
472
488
|
method: "get",
|
|
473
489
|
path: "/url/:url",
|
|
474
490
|
auth: false,
|
|
491
|
+
abac: { enabled: false },
|
|
475
492
|
handler: async (req, res) => {
|
|
476
493
|
try {
|
|
477
494
|
const artist = await db.artist.findOne({ url: req.params.url });
|
|
@@ -489,6 +506,7 @@ function setupArtistsRoutes(app, db) {
|
|
|
489
506
|
method: "get",
|
|
490
507
|
path: "/:artistId/discography",
|
|
491
508
|
auth: false,
|
|
509
|
+
abac: { enabled: false },
|
|
492
510
|
handler: async (req, res) => {
|
|
493
511
|
try {
|
|
494
512
|
const { artistId } = req.params;
|
|
@@ -497,10 +515,12 @@ function setupArtistsRoutes(app, db) {
|
|
|
497
515
|
artist: artistId,
|
|
498
516
|
status: "published",
|
|
499
517
|
isPublic: true
|
|
500
|
-
}).populate("album", "title").sort({
|
|
518
|
+
}).populate("album", "title url coverArt").populate("genre", "name").sort({ playCount: -1 }).limit(10);
|
|
501
519
|
res.json({
|
|
502
520
|
albums,
|
|
503
521
|
tracks,
|
|
522
|
+
singles: tracks.filter((track) => !track.album),
|
|
523
|
+
// треки без альбома считаем синглами
|
|
504
524
|
artist: artistId
|
|
505
525
|
});
|
|
506
526
|
} catch (error) {
|
|
@@ -543,6 +563,7 @@ function setupArtistsRoutes(app, db) {
|
|
|
543
563
|
method: "get",
|
|
544
564
|
path: "/:artistId/related",
|
|
545
565
|
auth: false,
|
|
566
|
+
abac: { enabled: false },
|
|
546
567
|
handler: async (req, res) => {
|
|
547
568
|
try {
|
|
548
569
|
const { artistId } = req.params;
|
|
@@ -725,7 +746,7 @@ function setupAlbumsRoutes(app, db) {
|
|
|
725
746
|
model: db.album,
|
|
726
747
|
modelName: "album",
|
|
727
748
|
basePath: "/api/albums",
|
|
728
|
-
auth:
|
|
749
|
+
auth: { read: false },
|
|
729
750
|
verifiers: {
|
|
730
751
|
create: verifier.createVerifier,
|
|
731
752
|
read: verifier.readVerifier,
|
|
@@ -733,6 +754,9 @@ function setupAlbumsRoutes(app, db) {
|
|
|
733
754
|
delete: verifier.deleteVerifier
|
|
734
755
|
},
|
|
735
756
|
abac: abac2,
|
|
757
|
+
policies: {
|
|
758
|
+
read: { enabled: false }
|
|
759
|
+
},
|
|
736
760
|
cache: {
|
|
737
761
|
enabled: true,
|
|
738
762
|
ttl: 300,
|
|
@@ -747,12 +771,21 @@ function setupAlbumsRoutes(app, db) {
|
|
|
747
771
|
method: "get",
|
|
748
772
|
path: "/url/:url",
|
|
749
773
|
auth: false,
|
|
774
|
+
abac: { enabled: false },
|
|
750
775
|
handler: async (req, res) => {
|
|
751
776
|
try {
|
|
752
|
-
const album = await db.album.findOne({ url: req.params.url }).populate("artists", "name url");
|
|
777
|
+
const album = await db.album.findOne({ url: req.params.url }).populate("artists", "name url photoUrl isVerified");
|
|
753
778
|
if (!album) {
|
|
754
779
|
return res.status(404).json({ error: "Album not found" });
|
|
755
780
|
}
|
|
781
|
+
const trackCount = await db.track.countDocuments({
|
|
782
|
+
album: album._id,
|
|
783
|
+
status: "published"
|
|
784
|
+
});
|
|
785
|
+
if (album.totalTracks !== trackCount) {
|
|
786
|
+
album.totalTracks = trackCount;
|
|
787
|
+
await album.save();
|
|
788
|
+
}
|
|
756
789
|
res.json(album);
|
|
757
790
|
} catch (error) {
|
|
758
791
|
console.error(error);
|
|
@@ -764,6 +797,7 @@ function setupAlbumsRoutes(app, db) {
|
|
|
764
797
|
method: "get",
|
|
765
798
|
path: "/:albumId/tracks",
|
|
766
799
|
auth: false,
|
|
800
|
+
abac: { enabled: false },
|
|
767
801
|
handler: async (req, res) => {
|
|
768
802
|
try {
|
|
769
803
|
const { albumId } = req.params;
|
|
@@ -771,7 +805,7 @@ function setupAlbumsRoutes(app, db) {
|
|
|
771
805
|
album: albumId,
|
|
772
806
|
status: "published",
|
|
773
807
|
isPublic: true
|
|
774
|
-
}).populate("artist", "name url").populate("genre", "name").sort({ trackNumber: 1, createdAt: 1 });
|
|
808
|
+
}).populate("artist", "name url photoUrl isVerified").populate("album", "title url coverArt").populate("genre", "name url").sort({ trackNumber: 1, createdAt: 1 });
|
|
775
809
|
res.json(tracks);
|
|
776
810
|
} catch (error) {
|
|
777
811
|
console.error(error);
|
|
@@ -783,6 +817,7 @@ function setupAlbumsRoutes(app, db) {
|
|
|
783
817
|
method: "get",
|
|
784
818
|
path: "/featured",
|
|
785
819
|
auth: false,
|
|
820
|
+
abac: { enabled: false },
|
|
786
821
|
handler: async (req, res) => {
|
|
787
822
|
try {
|
|
788
823
|
const limit = parseInt(req.query.limit) || 10;
|
|
@@ -792,7 +827,17 @@ function setupAlbumsRoutes(app, db) {
|
|
|
792
827
|
$gte: new Date(Date.now() - 90 * 24 * 60 * 60 * 1e3)
|
|
793
828
|
// последние 90 дней
|
|
794
829
|
}
|
|
795
|
-
}).populate("artists", "name url").sort({ createdAt: -1 }).limit(limit);
|
|
830
|
+
}).populate("artists", "name url photoUrl isVerified").sort({ createdAt: -1 }).limit(limit);
|
|
831
|
+
for (const album of featuredAlbums) {
|
|
832
|
+
const trackCount = await db.track.countDocuments({
|
|
833
|
+
album: album._id,
|
|
834
|
+
status: "published"
|
|
835
|
+
});
|
|
836
|
+
if (album.totalTracks !== trackCount) {
|
|
837
|
+
album.totalTracks = trackCount;
|
|
838
|
+
await album.save();
|
|
839
|
+
}
|
|
840
|
+
}
|
|
796
841
|
res.json(featuredAlbums);
|
|
797
842
|
} catch (error) {
|
|
798
843
|
console.error(error);
|
|
@@ -913,7 +958,7 @@ function playlistsVerifierFactory(db) {
|
|
|
913
958
|
},
|
|
914
959
|
status: {
|
|
915
960
|
rule: "optional",
|
|
916
|
-
validator: globals_verifier.Validator.schema().string().oneOf(["draft", "published", "archived"])
|
|
961
|
+
validator: globals_verifier.Validator.schema().string().oneOf(["draft", "published", "archived", "featured"])
|
|
917
962
|
},
|
|
918
963
|
skip: {
|
|
919
964
|
rule: "optional",
|
|
@@ -958,7 +1003,7 @@ function setupPlaylistsRoutes(app, db) {
|
|
|
958
1003
|
model: db.playlist,
|
|
959
1004
|
modelName: "playlist",
|
|
960
1005
|
basePath: "/api/playlists",
|
|
961
|
-
auth:
|
|
1006
|
+
auth: { read: false },
|
|
962
1007
|
verifiers: {
|
|
963
1008
|
create: verifier.createVerifier,
|
|
964
1009
|
read: verifier.readVerifier,
|
|
@@ -966,6 +1011,9 @@ function setupPlaylistsRoutes(app, db) {
|
|
|
966
1011
|
delete: verifier.deleteVerifier
|
|
967
1012
|
},
|
|
968
1013
|
abac: abac2,
|
|
1014
|
+
policies: {
|
|
1015
|
+
read: { enabled: false }
|
|
1016
|
+
},
|
|
969
1017
|
cache: {
|
|
970
1018
|
enabled: true,
|
|
971
1019
|
ttl: 300,
|
|
@@ -980,23 +1028,38 @@ function setupPlaylistsRoutes(app, db) {
|
|
|
980
1028
|
method: "get",
|
|
981
1029
|
path: "/url/:url",
|
|
982
1030
|
auth: false,
|
|
1031
|
+
abac: { enabled: false },
|
|
983
1032
|
handler: async (req, res) => {
|
|
984
1033
|
try {
|
|
985
1034
|
const playlist = await db.playlist.findOne({ url: req.params.url }).populate({
|
|
986
1035
|
path: "tracks.track",
|
|
987
|
-
select: "-lyrics"
|
|
1036
|
+
select: "-lyrics",
|
|
1037
|
+
populate: [
|
|
1038
|
+
{
|
|
1039
|
+
path: "artist",
|
|
1040
|
+
select: "name url photoUrl isVerified"
|
|
1041
|
+
},
|
|
1042
|
+
{
|
|
1043
|
+
path: "album",
|
|
1044
|
+
select: "title url coverArt"
|
|
1045
|
+
},
|
|
1046
|
+
{
|
|
1047
|
+
path: "genre",
|
|
1048
|
+
select: "name url"
|
|
1049
|
+
}
|
|
1050
|
+
]
|
|
988
1051
|
});
|
|
989
1052
|
if (!playlist) {
|
|
990
1053
|
return res.status(404).json({ error: "Playlist not found" });
|
|
991
1054
|
}
|
|
992
|
-
if (!playlist.isPublic) {
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
1055
|
+
if (!playlist.isPublic && !req.userId) {
|
|
1056
|
+
return res.status(404).json({ error: "Playlist not found" });
|
|
1057
|
+
}
|
|
1058
|
+
if (!playlist.isPublic && req.userId) {
|
|
996
1059
|
const isOwner = playlist.owner.target.toString() === req.userId;
|
|
997
1060
|
const isCollaborator = playlist.collaborators.some((collab) => collab.toString() === req.userId);
|
|
998
1061
|
if (!isOwner && !isCollaborator) {
|
|
999
|
-
return res.status(
|
|
1062
|
+
return res.status(404).json({ error: "Playlist not found" });
|
|
1000
1063
|
}
|
|
1001
1064
|
}
|
|
1002
1065
|
res.json(playlist);
|
|
@@ -1017,7 +1080,20 @@ function setupPlaylistsRoutes(app, db) {
|
|
|
1017
1080
|
if (userId !== req.userId) {
|
|
1018
1081
|
query.isPublic = true;
|
|
1019
1082
|
}
|
|
1020
|
-
const playlists = await db.playlist.find(query).populate(
|
|
1083
|
+
const playlists = await db.playlist.find(query).populate({
|
|
1084
|
+
path: "tracks.track",
|
|
1085
|
+
select: "title artist album genre duration",
|
|
1086
|
+
populate: [
|
|
1087
|
+
{
|
|
1088
|
+
path: "artist",
|
|
1089
|
+
select: "name url photoUrl isVerified"
|
|
1090
|
+
},
|
|
1091
|
+
{
|
|
1092
|
+
path: "album",
|
|
1093
|
+
select: "title url coverArt"
|
|
1094
|
+
}
|
|
1095
|
+
]
|
|
1096
|
+
}).sort({ updatedAt: -1 });
|
|
1021
1097
|
res.json(playlists);
|
|
1022
1098
|
} catch (error) {
|
|
1023
1099
|
console.error(error);
|
|
@@ -1227,7 +1303,7 @@ function setupGenresRoutes(app, db) {
|
|
|
1227
1303
|
model: db.genre,
|
|
1228
1304
|
modelName: "genre",
|
|
1229
1305
|
basePath: "/api/genres",
|
|
1230
|
-
auth:
|
|
1306
|
+
auth: { read: false },
|
|
1231
1307
|
verifiers: {
|
|
1232
1308
|
create: verifier.createVerifier,
|
|
1233
1309
|
read: verifier.readVerifier,
|
|
@@ -1235,6 +1311,9 @@ function setupGenresRoutes(app, db) {
|
|
|
1235
1311
|
delete: verifier.deleteVerifier
|
|
1236
1312
|
},
|
|
1237
1313
|
abac: abac2,
|
|
1314
|
+
policies: {
|
|
1315
|
+
read: { enabled: false }
|
|
1316
|
+
},
|
|
1238
1317
|
cache: {
|
|
1239
1318
|
enabled: true,
|
|
1240
1319
|
ttl: 300,
|
|
@@ -1321,7 +1400,7 @@ const SearchController = function(app, db) {
|
|
|
1321
1400
|
$or: [{ title: searchRegex }, { tags: searchRegex }],
|
|
1322
1401
|
status: "published",
|
|
1323
1402
|
isPublic: true
|
|
1324
|
-
}).limit(limitNum);
|
|
1403
|
+
}).populate("artist", "name url photoUrl isVerified").populate("album", "title url coverArt").populate("genre", "name url").limit(limitNum);
|
|
1325
1404
|
}
|
|
1326
1405
|
if (types.includes("albums") || types.includes("all")) {
|
|
1327
1406
|
results.albums = await db.album.find({
|
|
@@ -1384,7 +1463,6 @@ const StreamController = function(app, db, publicPath) {
|
|
|
1384
1463
|
});
|
|
1385
1464
|
}
|
|
1386
1465
|
const fileUrl = track.fileUrl;
|
|
1387
|
-
console.log("public is", publicPath);
|
|
1388
1466
|
const filePath = path$1.join(publicPath, fileUrl);
|
|
1389
1467
|
if (!fs$1.existsSync(filePath)) {
|
|
1390
1468
|
logger.error(`File not found: ${filePath}`);
|
|
@@ -1393,6 +1471,7 @@ const StreamController = function(app, db, publicPath) {
|
|
|
1393
1471
|
const stat = fs$1.statSync(filePath);
|
|
1394
1472
|
const fileSize = stat.size;
|
|
1395
1473
|
const range = req.headers.range;
|
|
1474
|
+
const isFirstRequest = !range || range === "bytes=0-";
|
|
1396
1475
|
if (req.userId) {
|
|
1397
1476
|
try {
|
|
1398
1477
|
await db.playHistory.create({
|
|
@@ -1403,10 +1482,16 @@ const StreamController = function(app, db, publicPath) {
|
|
|
1403
1482
|
playedFrom: req.query.from || "other",
|
|
1404
1483
|
contextId: req.query.contextId || null
|
|
1405
1484
|
});
|
|
1406
|
-
await db.track.findByIdAndUpdate(trackId, { $inc: { playCount: 1 } });
|
|
1485
|
+
const updatedTrack = await db.track.findByIdAndUpdate(trackId, { $inc: { playCount: 1 } }, { new: true });
|
|
1407
1486
|
} catch (error) {
|
|
1408
1487
|
logger.error(`Error logging play history: ${error.message}`);
|
|
1409
1488
|
}
|
|
1489
|
+
} else {
|
|
1490
|
+
try {
|
|
1491
|
+
const updatedTrack = await db.track.findByIdAndUpdate(trackId, { $inc: { playCount: 1 } }, { new: true });
|
|
1492
|
+
} catch (error) {
|
|
1493
|
+
logger.error(`Error incrementing playCount: ${error.message}`);
|
|
1494
|
+
}
|
|
1410
1495
|
}
|
|
1411
1496
|
if (range) {
|
|
1412
1497
|
const parts = range.replace(/bytes=/, "").split("-");
|
|
@@ -1858,9 +1943,11 @@ const StreamingHandler = function(db) {
|
|
|
1858
1943
|
// Handle WebSocket messages for music streaming
|
|
1859
1944
|
handleStreamingMessage: async (ws, message) => {
|
|
1860
1945
|
try {
|
|
1946
|
+
console.log("StreamingHandler: Received message:", { action: message.action, data: message.data });
|
|
1861
1947
|
const { action, data } = message;
|
|
1862
1948
|
switch (action) {
|
|
1863
1949
|
case "startPlaying":
|
|
1950
|
+
console.log("StreamingHandler: Processing startPlaying event for track:", data.trackId, "user:", ws.userId);
|
|
1864
1951
|
if (ws.userId && data.trackId) {
|
|
1865
1952
|
await db.playHistory.create({
|
|
1866
1953
|
user: ws.userId,
|
|
@@ -1870,7 +1957,9 @@ const StreamingHandler = function(db) {
|
|
|
1870
1957
|
playedFrom: data.from || "other",
|
|
1871
1958
|
contextId: data.contextId || null
|
|
1872
1959
|
});
|
|
1873
|
-
|
|
1960
|
+
console.log("StreamingHandler: Created play history record");
|
|
1961
|
+
const trackUpdate = await db.track.findByIdAndUpdate(data.trackId, { $inc: { playCount: 1 } }, { new: true });
|
|
1962
|
+
console.log("StreamingHandler: Updated track playCount to:", trackUpdate?.playCount);
|
|
1874
1963
|
ws.send(
|
|
1875
1964
|
JSON.stringify({
|
|
1876
1965
|
type: "playAcknowledged",
|
|
@@ -1979,9 +2068,13 @@ function initializeMusic({ app, db, wss, origins, publicPath }) {
|
|
|
1979
2068
|
const { getInstance: getInstance2 } = globals_abac.globalsabac;
|
|
1980
2069
|
const abac2 = getInstance2(db);
|
|
1981
2070
|
musicPolicies(abac2);
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
2071
|
+
if (wss) {
|
|
2072
|
+
console.log("Music Server: Registering music-streaming WebSocket handler");
|
|
2073
|
+
const handler = StreamingHandler(db);
|
|
2074
|
+
wss.registerModule("music-streaming", handler.handleStreamingMessage);
|
|
2075
|
+
console.log("Music Server: WebSocket handler registered successfully");
|
|
2076
|
+
} else {
|
|
2077
|
+
console.log("Music Server: WebSocket server (wss) not provided, streaming handler not registered");
|
|
1985
2078
|
}
|
|
1986
2079
|
new globals_logger.Cache({ ttlSeconds: 60 * 15 });
|
|
1987
2080
|
const musicLogger = new globals_logger.Logger(db);
|