| 
					
				 | 
			
			
				@@ -0,0 +1,140 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import config from "config"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { UserRole } from "./schemas/user"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const user = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const dj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.autofill": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.blacklist": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.index": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.playback.toggle": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.queue.remove": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.queue.reposition": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.queue.reset": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.request": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.skip": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.view": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.view.manage": true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const owner = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	...dj, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.djs.add": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.djs.remove": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.remove": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.update": true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const moderator = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	...owner, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.import": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.news": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.playlists": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.punishments": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.reports": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.songs": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.stations": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.users": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.youtubeVideos": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"apis.searchDiscogs": !!config.get("apis.discogs.enabled"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"news.create": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"news.update": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"playlists.create.admin": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"playlists.get": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"playlists.update.displayName": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"playlists.update.privacy": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"playlists.songs.add": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"playlists.songs.remove": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"playlists.songs.reposition": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"playlists.view.others": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"punishments.banIP": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"punishments.get": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"reports.get": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"reports.update": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"songs.create": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"songs.get": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"songs.update": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"songs.verify": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.create.official": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.index": false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.index.other": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.remove": false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"users.get": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"users.ban": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"users.requestPasswordReset": !!config.get("mail.enabled"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"users.resendVerifyEmail": !!config.get("mail.enabled"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"users.update": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"youtube.requestSetAdmin": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	...(config.get("experimental.soundcloud") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		? { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"admin.view.soundcloudTracks": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"admin.view.soundcloud": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"soundcloud.getArtist": true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		: {}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	...(config.get("experimental.spotify") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		? { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"admin.view.spotify": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"spotify.getTracksFromMediaSources": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"spotify.getAlbumsFromIds": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"spotify.getArtistsFromIds": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"spotify.getAlternativeArtistSourcesForArtists": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"spotify.getAlternativeAlbumSourcesForAlbums": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"spotify.getAlternativeMediaSourcesForTracks": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"admin.view.youtubeChannels": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"youtube.getChannel": true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		: {}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const admin = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	...moderator, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.dataRequests": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.statistics": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"admin.view.youtube": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"dataRequests.resolve": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"media.recalculateAllRatings": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"media.removeImportJobs": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"news.remove": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"playlists.clearAndRefill": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"playlists.clearAndRefillAll": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"playlists.createMissing": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"playlists.deleteOrphaned": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"playlists.removeAdmin": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"playlists.requestOrphanedPlaylistSongs": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"punishments.deactivate": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"reports.remove": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"songs.remove": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"songs.updateAll": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.clearEveryStationQueue": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"stations.remove": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"users.remove": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"users.remove.sessions": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"users.update.restricted": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"utils.getModules": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"youtube.getApiRequest": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"youtube.getMissingVideos": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"youtube.resetStoredApiRequests": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"youtube.removeStoredApiRequest": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"youtube.removeVideos": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"youtube.updateVideosV1ToV2": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	...(config.get("experimental.soundcloud") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		? { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"soundcloud.fetchNewApiKey": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"soundcloud.testApiKey": true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		: {}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	...(config.get("experimental.spotify") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		? { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"youtube.getMissingChannels": true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		: {}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const permissions: Record< 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	UserRole | "owner" | "dj", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Record<string, boolean> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+> = { user, dj, owner, moderator, admin }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export default permissions; 
			 |