A decentralized music tracking and discovery platform built on AT Protocol 🎵

[api] update lexicons

+1444 -501
+32
apps/api/lexicons/player/addItemsToQueue.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.player.addItemsToQueue", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Add items to the player's queue", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "items" 12 + ], 13 + "properties": { 14 + "playerId": { 15 + "type": "string" 16 + }, 17 + "items": { 18 + "type": "array", 19 + "items": { 20 + "type": "string", 21 + "description": "List of file identifiers to add to the queue" 22 + } 23 + }, 24 + "position": { 25 + "type": "integer", 26 + "description": "Position in the queue to insert the items at, defaults to the end if not specified" 27 + } 28 + } 29 + } 30 + } 31 + } 32 + }
+12
apps/api/lexicons/player/defs.json
··· 10 "description": "The title of the currently playing track" 11 } 12 } 13 } 14 } 15 }
··· 10 "description": "The title of the currently playing track" 11 } 12 } 13 + }, 14 + "playbackQueueViewDetailed": { 15 + "type": "object", 16 + "properties": { 17 + "tracks": { 18 + "type": "array", 19 + "items": { 20 + "type": "ref", 21 + "ref": "app.rocksky.song.defs.songViewBasic" 22 + } 23 + } 24 + } 25 } 26 } 27 }
+3
apps/api/lexicons/player/getCurrentlyPlaying.json
··· 8 "parameters": { 9 "type": "params", 10 "properties": { 11 "actor": { 12 "type": "string", 13 "description": "Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user.",
··· 8 "parameters": { 9 "type": "params", 10 "properties": { 11 + "playerId": { 12 + "type": "string" 13 + }, 14 "actor": { 15 "type": "string", 16 "description": "Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user.",
+25
apps/api/lexicons/player/getPlaybackQueue.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.player.getPlaybackQueue", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Retrieve the current playback queue", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "playerId": { 12 + "type": "string" 13 + } 14 + } 15 + }, 16 + "output": { 17 + "encoding": "application/json", 18 + "schema": { 19 + "type": "ref", 20 + "ref": "app.rocksky.player.defs#playbackQueueViewDetailed" 21 + } 22 + } 23 + } 24 + } 25 + }
+9 -1
apps/api/lexicons/player/next.json
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 - "description": "Play the next track in the queue" 8 } 9 } 10 }
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 + "description": "Play the next track in the queue", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "playerId": { 12 + "type": "string" 13 + } 14 + } 15 + } 16 } 17 } 18 }
+9 -1
apps/api/lexicons/player/pause.json
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 - "description": "Pause the currently playing track" 8 } 9 } 10 }
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 + "description": "Pause the currently playing track", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "playerId": { 12 + "type": "string" 13 + } 14 + } 15 + } 16 } 17 } 18 }
+9 -1
apps/api/lexicons/player/play.json
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 - "description": "Resume playback of the currently paused track" 8 } 9 } 10 }
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 + "description": "Resume playback of the currently paused track", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "playerId": { 12 + "type": "string" 13 + } 14 + } 15 + } 16 } 17 } 18 }
+24
apps/api/lexicons/player/playDirectory.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.player.playDirectory", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Play all tracks in a directory", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "directoryId" 12 + ], 13 + "properties": { 14 + "playerId": { 15 + "type": "string" 16 + }, 17 + "directoryId": { 18 + "type": "string" 19 + } 20 + } 21 + } 22 + } 23 + } 24 + }
+24
apps/api/lexicons/player/playFile.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.player.playFile", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Play a specific audio file", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "fileId" 12 + ], 13 + "properties": { 14 + "playerId": { 15 + "type": "string" 16 + }, 17 + "fileId": { 18 + "type": "string" 19 + } 20 + } 21 + } 22 + } 23 + } 24 + }
+9 -1
apps/api/lexicons/player/previous.json
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 - "description": "Play the previous track in the queue" 8 } 9 } 10 }
··· 4 "defs": { 5 "main": { 6 "type": "procedure", 7 + "description": "Play the previous track in the queue", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "playerId": { 12 + "type": "string" 13 + } 14 + } 15 + } 16 } 17 } 18 }
+3
apps/api/lexicons/player/seek.json
··· 11 "position" 12 ], 13 "properties": { 14 "position": { 15 "type": "integer", 16 "description": "The position in seconds to seek to"
··· 11 "position" 12 ], 13 "properties": { 14 + "playerId": { 15 + "type": "string" 16 + }, 17 "position": { 18 "type": "integer", 19 "description": "The position in seconds to seek to"
+26
apps/api/lexicons/playlist/createPlaylist.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.playlist.createPlaylist", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Create a new playlist", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "name" 12 + ], 13 + "properties": { 14 + "name": { 15 + "type": "string", 16 + "description": "The name of the playlist" 17 + }, 18 + "description": { 19 + "type": "string", 20 + "description": "A brief description of the playlist" 21 + } 22 + } 23 + } 24 + } 25 + } 26 + }
+27
apps/api/lexicons/playlist/insertDirectory.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.playlist.insertDirectory", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Insert a directory into a playlist", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The URI of the playlist to start", 17 + "format": "at-uri" 18 + }, 19 + "directory": { 20 + "type": "string", 21 + "description": "The directory (id) to insert into the playlist" 22 + } 23 + } 24 + } 25 + } 26 + } 27 + }
+30
apps/api/lexicons/playlist/insertFiles.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.playlist.insertFiles", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Insert files into a playlist", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The URI of the playlist to start", 17 + "format": "at-uri" 18 + }, 19 + "files": { 20 + "type": "array", 21 + "items": { 22 + "type": "string", 23 + "description": "List of file (id) to insert into the playlist" 24 + } 25 + } 26 + } 27 + } 28 + } 29 + } 30 + }
+23
apps/api/lexicons/playlist/removePlaylist.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.playlist.removePlaylist", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Remove a playlist", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The URI of the playlist to remove", 17 + "format": "at-uri" 18 + } 19 + } 20 + } 21 + } 22 + } 23 + }
+28
apps/api/lexicons/playlist/removeTrack.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.playlist.removeTrack", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Remove a track from a playlist", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri", 12 + "position" 13 + ], 14 + "properties": { 15 + "uri": { 16 + "type": "string", 17 + "description": "The URI of the playlist to remove the track from", 18 + "format": "at-uri" 19 + }, 20 + "position": { 21 + "type": "integer", 22 + "description": "The position of the track to remove in the playlist" 23 + } 24 + } 25 + } 26 + } 27 + } 28 + }
+23
apps/api/lexicons/playlist/startPlaylist.json
···
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.playlist.startPlaylist", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Start a playlist", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The URI of the playlist to start", 17 + "format": "at-uri" 18 + } 19 + } 20 + } 21 + } 22 + } 23 + }
-140
apps/api/lexicons/song/lovedSong.json
··· 1 - { 2 - "lexicon": 1, 3 - "id": "app.rocksky.lovedSong", 4 - "defs": { 5 - "main": { 6 - "type": "record", 7 - "description": "A declaration of a song.", 8 - "key": "tid", 9 - "record": { 10 - "type": "object", 11 - "required": [ 12 - "title", 13 - "artist", 14 - "album", 15 - "duration", 16 - "createdAt" 17 - ], 18 - "properties": { 19 - "title": { 20 - "type": "string", 21 - "description": "The title of the song.", 22 - "minLength": 1, 23 - "maxLength": 512 24 - }, 25 - "artist": { 26 - "type": "string", 27 - "description": "The artist of the song.", 28 - "minLength": 1, 29 - "maxLength": 256 30 - }, 31 - "albumArtist": { 32 - "type": "string", 33 - "description": "The album artist of the song.", 34 - "minLength": 1, 35 - "maxLength": 256 36 - }, 37 - "album": { 38 - "type": "string", 39 - "description": "The album of the song.", 40 - "minLength": 1, 41 - "maxLength": 256 42 - }, 43 - "duration": { 44 - "type": "integer", 45 - "description": "The duration of the song in seconds.", 46 - "minimum": 1 47 - }, 48 - "trackNumber": { 49 - "type": "integer", 50 - "description": "The track number of the song in the album.", 51 - "minimum": 1 52 - }, 53 - "discNumber": { 54 - "type": "integer", 55 - "description": "The disc number of the song in the album.", 56 - "minimum": 1 57 - }, 58 - "releaseDate": { 59 - "type": "string", 60 - "description": "The release date of the song.", 61 - "format": "datetime" 62 - }, 63 - "year": { 64 - "type": "integer", 65 - "description": "The year the song was released." 66 - }, 67 - "genre": { 68 - "type": "string", 69 - "description": "The genre of the song.", 70 - "maxLength": 256 71 - }, 72 - "tags": { 73 - "type": "array", 74 - "description": "The tags of the song.", 75 - "items": { 76 - "type": "string", 77 - "minLength": 1, 78 - "maxLength": 256 79 - } 80 - }, 81 - "composer": { 82 - "type": "string", 83 - "description": "The composer of the song.", 84 - "maxLength": 256 85 - }, 86 - "lyrics": { 87 - "type": "string", 88 - "description": "The lyrics of the song.", 89 - "maxLength": 10000 90 - }, 91 - "copyrightMessage": { 92 - "type": "string", 93 - "description": "The copyright message of the song.", 94 - "minLength": 1, 95 - "maxLength": 256 96 - }, 97 - "wiki": { 98 - "type": "string", 99 - "description": "Informations about the song", 100 - "maxLength": 10000 101 - }, 102 - "albumArt": { 103 - "type": "blob", 104 - "description": "The album art of the song.", 105 - "accept": [ 106 - "image/png", 107 - "image/jpeg" 108 - ], 109 - "maxSize": 2000000 110 - }, 111 - "youtubeLink": { 112 - "type": "string", 113 - "description": "The YouTube link of the song.", 114 - "format": "uri" 115 - }, 116 - "spotifyLink": { 117 - "type": "string", 118 - "description": "The Spotify link of the song.", 119 - "format": "uri" 120 - }, 121 - "tidalLink": { 122 - "type": "string", 123 - "description": "The Tidal link of the song.", 124 - "format": "uri" 125 - }, 126 - "appleMusicLink": { 127 - "type": "string", 128 - "description": "The Apple Music link of the song.", 129 - "format": "uri" 130 - }, 131 - "createdAt": { 132 - "type": "string", 133 - "description": "The date when the song was created.", 134 - "format": "datetime" 135 - } 136 - } 137 - } 138 - } 139 - } 140 - }
···
+1
apps/api/package.json
··· 16 "pkl:eval": "pkl eval -f json", 17 "pkl:gen": "tsx ./scripts/pkl.ts", 18 "dev:xrpc": "tsx --watch ./src/server.ts", 19 "db:migrate": "drizzle-kit migrate" 20 }, 21 "dependencies": {
··· 16 "pkl:eval": "pkl eval -f json", 17 "pkl:gen": "tsx ./scripts/pkl.ts", 18 "dev:xrpc": "tsx --watch ./src/server.ts", 19 + "prod:xrpc": "tsx ./src/server.ts", 20 "db:migrate": "drizzle-kit migrate" 21 }, 22 "dependencies": {
+30
apps/api/pkl/defs/player/addItemsToQueue.pkl
···
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.player.addItemsToQueue" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Add items to the player's queue" 9 + parameters { 10 + type = "params" 11 + required = List("items") 12 + properties { 13 + ["playerId"] = new StringType { 14 + type = "string" 15 + } 16 + ["items"] = new Array { 17 + type = "array" 18 + items = new StringType { 19 + type = "string" 20 + description = "List of file identifiers to add to the queue" 21 + } 22 + } 23 + ["position"] = new IntegerType { 24 + type = "integer" 25 + description = "Position in the queue to insert the items at, defaults to the end if not specified" 26 + } 27 + } 28 + } 29 + } 30 + }
+12
apps/api/pkl/defs/player/defs.pkl
··· 12 } 13 } 14 } 15 }
··· 12 } 13 } 14 } 15 + ["playbackQueueViewDetailed"] { 16 + type = "object" 17 + properties { 18 + ["tracks"] = new Array { 19 + type = "array" 20 + items = new Ref { 21 + type = "ref" 22 + ref = "app.rocksky.song.defs.songViewBasic" 23 + } 24 + } 25 + } 26 + } 27 }
+3
apps/api/pkl/defs/player/getCurrentlyPlaying.pkl
··· 9 parameters { 10 type = "params" 11 properties { 12 ["actor"] = new StringType { 13 type = "string" 14 format = "at-identifier"
··· 9 parameters { 10 type = "params" 11 properties { 12 + ["playerId"] = new StringType { 13 + type = "string" 14 + } 15 ["actor"] = new StringType { 16 type = "string" 17 format = "at-identifier"
+25
apps/api/pkl/defs/player/getPlaybackQueue.pkl
···
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.player.getPlaybackQueue" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Retrieve the current playback queue" 9 + parameters { 10 + type = "params" 11 + properties { 12 + ["playerId"] = new StringType { 13 + type = "string" 14 + } 15 + } 16 + } 17 + output { 18 + encoding = "application/json" 19 + schema = new Ref { 20 + type = "ref" 21 + ref = "app.rocksky.player.defs#playbackQueueViewDetailed" 22 + } 23 + } 24 + } 25 + }
+8
apps/api/pkl/defs/player/next.pkl
··· 6 ["main"] { 7 type = "procedure" 8 description = "Play the next track in the queue" 9 } 10 }
··· 6 ["main"] { 7 type = "procedure" 8 description = "Play the next track in the queue" 9 + parameters { 10 + type = "params" 11 + properties { 12 + ["playerId"] = new StringType { 13 + type = "string" 14 + } 15 + } 16 + } 17 } 18 }
+8
apps/api/pkl/defs/player/pause.pkl
··· 6 ["main"] { 7 type = "procedure" 8 description = "Pause the currently playing track" 9 } 10 }
··· 6 ["main"] { 7 type = "procedure" 8 description = "Pause the currently playing track" 9 + parameters { 10 + type = "params" 11 + properties { 12 + ["playerId"] = new StringType { 13 + type = "string" 14 + } 15 + } 16 + } 17 } 18 }
+8
apps/api/pkl/defs/player/play.pkl
··· 6 ["main"] { 7 type = "procedure" 8 description = "Resume playback of the currently paused track" 9 } 10 }
··· 6 ["main"] { 7 type = "procedure" 8 description = "Resume playback of the currently paused track" 9 + parameters { 10 + type = "params" 11 + properties { 12 + ["playerId"] = new StringType { 13 + type = "string" 14 + } 15 + } 16 + } 17 } 18 }
+22
apps/api/pkl/defs/player/playDirectory.pkl
···
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.player.playDirectory" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Play all tracks in a directory" 9 + parameters { 10 + type = "params" 11 + required = List("directoryId") 12 + properties { 13 + ["playerId"] = new StringType { 14 + type = "string" 15 + } 16 + ["directoryId"] = new StringType { 17 + type = "string" 18 + } 19 + } 20 + } 21 + } 22 + }
+22
apps/api/pkl/defs/player/playFile.pkl
···
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.player.playFile" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Play a specific audio file" 9 + parameters { 10 + type = "params" 11 + required = List("fileId") 12 + properties { 13 + ["playerId"] = new StringType { 14 + type = "string" 15 + } 16 + ["fileId"] = new StringType { 17 + type = "string" 18 + } 19 + } 20 + } 21 + } 22 + }
+8
apps/api/pkl/defs/player/previous.pkl
··· 6 ["main"] { 7 type = "procedure" 8 description = "Play the previous track in the queue" 9 } 10 }
··· 6 ["main"] { 7 type = "procedure" 8 description = "Play the previous track in the queue" 9 + parameters { 10 + type = "params" 11 + properties { 12 + ["playerId"] = new StringType { 13 + type = "string" 14 + } 15 + } 16 + } 17 } 18 }
+5 -2
apps/api/pkl/defs/player/seek.pkl
··· 9 parameters { 10 type = "params" 11 required = List("position") 12 - properties = new Mapping<String, IntegerType> { 13 - ["position"] { 14 type = "integer" 15 description = "The position in seconds to seek to" 16 }
··· 9 parameters { 10 type = "params" 11 required = List("position") 12 + properties = new Mapping<String, StringType | IntegerType> { 13 + ["playerId"] = new StringType { 14 + type = "string" 15 + } 16 + ["position"] = new IntegerType { 17 type = "integer" 18 description = "The position in seconds to seek to" 19 }
+24
apps/api/pkl/defs/playlist/createPlaylist.pkl
···
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.playlist.createPlaylist" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Create a new playlist" 9 + parameters { 10 + type = "params" 11 + required = List("name") 12 + properties { 13 + ["name"] = new StringType { 14 + type = "string" 15 + description = "The name of the playlist" 16 + } 17 + ["description"] = new StringType { 18 + type = "string" 19 + description = "A brief description of the playlist" 20 + } 21 + } 22 + } 23 + } 24 + }
+25
apps/api/pkl/defs/playlist/insertDirectory.pkl
···
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.playlist.insertDirectory" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Insert a directory into a playlist" 9 + parameters { 10 + type = "params" 11 + required = List("uri") 12 + properties { 13 + ["uri"] = new StringType { 14 + type = "string" 15 + description = "The URI of the playlist to start" 16 + format = "at-uri" 17 + } 18 + ["directory"] = new StringType { 19 + type = "string" 20 + description = "The directory (id) to insert into the playlist" 21 + } 22 + } 23 + } 24 + } 25 + }
+28
apps/api/pkl/defs/playlist/insertFiles.pkl
···
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.playlist.insertFiles" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Insert files into a playlist" 9 + parameters { 10 + type = "params" 11 + required = List("uri") 12 + properties { 13 + ["uri"] = new StringType { 14 + type = "string" 15 + description = "The URI of the playlist to start" 16 + format = "at-uri" 17 + } 18 + ["files"] = new Array { 19 + type = "array" 20 + items = new StringType { 21 + type = "string" 22 + description = "List of file (id) to insert into the playlist" 23 + } 24 + } 25 + } 26 + } 27 + } 28 + }
+21
apps/api/pkl/defs/playlist/removePlaylist.pkl
···
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.playlist.removePlaylist" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Remove a playlist" 9 + parameters { 10 + type = "params" 11 + required = List("uri") 12 + properties { 13 + ["uri"] = new StringType { 14 + type = "string" 15 + description = "The URI of the playlist to remove" 16 + format = "at-uri" 17 + } 18 + } 19 + } 20 + } 21 + }
+25
apps/api/pkl/defs/playlist/removeTrack.pkl
···
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.playlist.removeTrack" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Remove a track from a playlist" 9 + parameters { 10 + type = "params" 11 + required = List("uri", "position") 12 + properties { 13 + ["uri"] = new StringType { 14 + type = "string" 15 + description = "The URI of the playlist to remove the track from" 16 + format = "at-uri" 17 + } 18 + ["position"] = new IntegerType { 19 + type = "integer" 20 + description = "The position of the track to remove in the playlist" 21 + } 22 + } 23 + } 24 + } 25 + }
+21
apps/api/pkl/defs/playlist/startPlaylist.pkl
···
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.playlist.startPlaylist" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Start a playlist" 9 + parameters { 10 + type = "params" 11 + required = List("uri") 12 + properties { 13 + ["uri"] = new StringType { 14 + type = "string" 15 + description = "The URI of the playlist to start" 16 + format = "at-uri" 17 + } 18 + } 19 + } 20 + } 21 + }
-151
apps/api/pkl/defs/song/lovedSong.pkl
··· 1 - amends "../../schema/lexicon.pkl" 2 - 3 - lexicon = 1 4 - id = "app.rocksky.lovedSong" 5 - defs = new Mapping<String, Record> { 6 - ["main"] { 7 - type = "record" 8 - key = "tid" 9 - description = "A declaration of a song." 10 - `record` { 11 - type = "object" 12 - required = List("title", "artist", "album", "duration", "createdAt") 13 - properties { 14 - ["title"] = new StringType { 15 - type = "string" 16 - description = "The title of the song." 17 - minLength = 1 18 - maxLength = 512 19 - } 20 - 21 - ["artist"] = new StringType { 22 - type = "string" 23 - description = "The artist of the song." 24 - minLength = 1 25 - maxLength = 256 26 - } 27 - 28 - ["albumArtist"] = new StringType { 29 - type = "string" 30 - description = "The album artist of the song." 31 - minLength = 1 32 - maxLength = 256 33 - } 34 - 35 - ["album"] = new StringType { 36 - type = "string" 37 - description = "The album of the song." 38 - minLength = 1 39 - maxLength = 256 40 - } 41 - 42 - ["duration"] = new IntegerType { 43 - type = "integer" 44 - description = "The duration of the song in seconds." 45 - minimum = 1 46 - } 47 - 48 - ["trackNumber"] = new IntegerType { 49 - type = "integer" 50 - description = "The track number of the song in the album." 51 - minimum = 1 52 - } 53 - 54 - ["discNumber"] = new IntegerType { 55 - type = "integer" 56 - description = "The disc number of the song in the album." 57 - minimum = 1 58 - } 59 - 60 - ["releaseDate"] = new StringType { 61 - type = "string" 62 - description = "The release date of the song." 63 - format = "datetime" 64 - } 65 - 66 - ["year"] = new IntegerType { 67 - type = "integer" 68 - description = "The year the song was released." 69 - } 70 - 71 - ["genre"] = new StringType { 72 - type = "string" 73 - description = "The genre of the song." 74 - maxLength = 256 75 - } 76 - 77 - ["tags"] = new Array { 78 - type = "array" 79 - description = "The tags of the song." 80 - items = new StringType { 81 - type = "string" 82 - minLength = 1 83 - maxLength = 256 84 - } 85 - } 86 - 87 - ["composer"] = new StringType { 88 - type = "string" 89 - description = "The composer of the song." 90 - maxLength = 256 91 - } 92 - 93 - ["lyrics"] = new StringType { 94 - type = "string" 95 - description = "The lyrics of the song." 96 - maxLength = 10000 97 - } 98 - 99 - ["copyrightMessage"] = new StringType { 100 - type = "string" 101 - description = "The copyright message of the song." 102 - minLength = 1 103 - maxLength = 256 104 - } 105 - 106 - ["wiki"] = new StringType { 107 - type = "string" 108 - description = "Informations about the song" 109 - maxLength = 10000 110 - } 111 - 112 - ["albumArt"] = new Blob { 113 - type = "blob" 114 - description = "The album art of the song." 115 - accept = List("image/png", "image/jpeg") 116 - maxSize = 2000000 117 - } 118 - 119 - ["youtubeLink"] = new StringType { 120 - type = "string" 121 - description = "The YouTube link of the song." 122 - format = "uri" 123 - } 124 - 125 - ["spotifyLink"] = new StringType { 126 - type = "string" 127 - description = "The Spotify link of the song." 128 - format = "uri" 129 - } 130 - 131 - ["tidalLink"] = new StringType { 132 - type = "string" 133 - description = "The Tidal link of the song." 134 - format = "uri" 135 - } 136 - 137 - ["appleMusicLink"] = new StringType { 138 - type = "string" 139 - description = "The Apple Music link of the song." 140 - format = "uri" 141 - } 142 - 143 - ["createdAt"] = new StringType { 144 - type = "string" 145 - description = "The date when the song was created." 146 - format = "datetime" 147 - } 148 - } 149 - } 150 - } 151 - }
···
+120
apps/api/src/lexicon/index.ts
··· 41 import * as AppRockskyLikeDislikeSong from './types/app/rocksky/like/dislikeSong' 42 import * as AppRockskyLikeLikeShout from './types/app/rocksky/like/likeShout' 43 import * as AppRockskyLikeLikeSong from './types/app/rocksky/like/likeSong' 44 import * as AppRockskyPlayerGetCurrentlyPlaying from './types/app/rocksky/player/getCurrentlyPlaying' 45 import * as AppRockskyPlayerNext from './types/app/rocksky/player/next' 46 import * as AppRockskyPlayerPause from './types/app/rocksky/player/pause' 47 import * as AppRockskyPlayerPlay from './types/app/rocksky/player/play' 48 import * as AppRockskyPlayerPrevious from './types/app/rocksky/player/previous' 49 import * as AppRockskyPlayerSeek from './types/app/rocksky/player/seek' 50 import * as AppRockskyPlaylistGetPlaylist from './types/app/rocksky/playlist/getPlaylist' 51 import * as AppRockskyPlaylistGetPlaylists from './types/app/rocksky/playlist/getPlaylists' 52 import * as AppRockskyScrobbleCreateScrobble from './types/app/rocksky/scrobble/createScrobble' 53 import * as AppRockskyScrobbleGetScrobble from './types/app/rocksky/scrobble/getScrobble' 54 import * as AppRockskyScrobbleGetScrobbles from './types/app/rocksky/scrobble/getScrobbles' ··· 571 this._server = server 572 } 573 574 getCurrentlyPlaying<AV extends AuthVerifier>( 575 cfg: ConfigOf< 576 AV, ··· 582 return this._server.xrpc.method(nsid, cfg) 583 } 584 585 next<AV extends AuthVerifier>( 586 cfg: ConfigOf< 587 AV, ··· 604 return this._server.xrpc.method(nsid, cfg) 605 } 606 607 play<AV extends AuthVerifier>( 608 cfg: ConfigOf< 609 AV, ··· 643 644 constructor(server: Server) { 645 this._server = server 646 } 647 648 getPlaylist<AV extends AuthVerifier>( ··· 664 >, 665 ) { 666 const nsid = 'app.rocksky.playlist.getPlaylists' // @ts-ignore 667 return this._server.xrpc.method(nsid, cfg) 668 } 669 }
··· 41 import * as AppRockskyLikeDislikeSong from './types/app/rocksky/like/dislikeSong' 42 import * as AppRockskyLikeLikeShout from './types/app/rocksky/like/likeShout' 43 import * as AppRockskyLikeLikeSong from './types/app/rocksky/like/likeSong' 44 + import * as AppRockskyPlayerAddItemsToQueue from './types/app/rocksky/player/addItemsToQueue' 45 import * as AppRockskyPlayerGetCurrentlyPlaying from './types/app/rocksky/player/getCurrentlyPlaying' 46 + import * as AppRockskyPlayerGetPlaybackQueue from './types/app/rocksky/player/getPlaybackQueue' 47 import * as AppRockskyPlayerNext from './types/app/rocksky/player/next' 48 import * as AppRockskyPlayerPause from './types/app/rocksky/player/pause' 49 + import * as AppRockskyPlayerPlayDirectory from './types/app/rocksky/player/playDirectory' 50 + import * as AppRockskyPlayerPlayFile from './types/app/rocksky/player/playFile' 51 import * as AppRockskyPlayerPlay from './types/app/rocksky/player/play' 52 import * as AppRockskyPlayerPrevious from './types/app/rocksky/player/previous' 53 import * as AppRockskyPlayerSeek from './types/app/rocksky/player/seek' 54 + import * as AppRockskyPlaylistCreatePlaylist from './types/app/rocksky/playlist/createPlaylist' 55 import * as AppRockskyPlaylistGetPlaylist from './types/app/rocksky/playlist/getPlaylist' 56 import * as AppRockskyPlaylistGetPlaylists from './types/app/rocksky/playlist/getPlaylists' 57 + import * as AppRockskyPlaylistInsertDirectory from './types/app/rocksky/playlist/insertDirectory' 58 + import * as AppRockskyPlaylistInsertFiles from './types/app/rocksky/playlist/insertFiles' 59 + import * as AppRockskyPlaylistRemovePlaylist from './types/app/rocksky/playlist/removePlaylist' 60 + import * as AppRockskyPlaylistRemoveTrack from './types/app/rocksky/playlist/removeTrack' 61 + import * as AppRockskyPlaylistStartPlaylist from './types/app/rocksky/playlist/startPlaylist' 62 import * as AppRockskyScrobbleCreateScrobble from './types/app/rocksky/scrobble/createScrobble' 63 import * as AppRockskyScrobbleGetScrobble from './types/app/rocksky/scrobble/getScrobble' 64 import * as AppRockskyScrobbleGetScrobbles from './types/app/rocksky/scrobble/getScrobbles' ··· 581 this._server = server 582 } 583 584 + addItemsToQueue<AV extends AuthVerifier>( 585 + cfg: ConfigOf< 586 + AV, 587 + AppRockskyPlayerAddItemsToQueue.Handler<ExtractAuth<AV>>, 588 + AppRockskyPlayerAddItemsToQueue.HandlerReqCtx<ExtractAuth<AV>> 589 + >, 590 + ) { 591 + const nsid = 'app.rocksky.player.addItemsToQueue' // @ts-ignore 592 + return this._server.xrpc.method(nsid, cfg) 593 + } 594 + 595 getCurrentlyPlaying<AV extends AuthVerifier>( 596 cfg: ConfigOf< 597 AV, ··· 603 return this._server.xrpc.method(nsid, cfg) 604 } 605 606 + getPlaybackQueue<AV extends AuthVerifier>( 607 + cfg: ConfigOf< 608 + AV, 609 + AppRockskyPlayerGetPlaybackQueue.Handler<ExtractAuth<AV>>, 610 + AppRockskyPlayerGetPlaybackQueue.HandlerReqCtx<ExtractAuth<AV>> 611 + >, 612 + ) { 613 + const nsid = 'app.rocksky.player.getPlaybackQueue' // @ts-ignore 614 + return this._server.xrpc.method(nsid, cfg) 615 + } 616 + 617 next<AV extends AuthVerifier>( 618 cfg: ConfigOf< 619 AV, ··· 636 return this._server.xrpc.method(nsid, cfg) 637 } 638 639 + playDirectory<AV extends AuthVerifier>( 640 + cfg: ConfigOf< 641 + AV, 642 + AppRockskyPlayerPlayDirectory.Handler<ExtractAuth<AV>>, 643 + AppRockskyPlayerPlayDirectory.HandlerReqCtx<ExtractAuth<AV>> 644 + >, 645 + ) { 646 + const nsid = 'app.rocksky.player.playDirectory' // @ts-ignore 647 + return this._server.xrpc.method(nsid, cfg) 648 + } 649 + 650 + playFile<AV extends AuthVerifier>( 651 + cfg: ConfigOf< 652 + AV, 653 + AppRockskyPlayerPlayFile.Handler<ExtractAuth<AV>>, 654 + AppRockskyPlayerPlayFile.HandlerReqCtx<ExtractAuth<AV>> 655 + >, 656 + ) { 657 + const nsid = 'app.rocksky.player.playFile' // @ts-ignore 658 + return this._server.xrpc.method(nsid, cfg) 659 + } 660 + 661 play<AV extends AuthVerifier>( 662 cfg: ConfigOf< 663 AV, ··· 697 698 constructor(server: Server) { 699 this._server = server 700 + } 701 + 702 + createPlaylist<AV extends AuthVerifier>( 703 + cfg: ConfigOf< 704 + AV, 705 + AppRockskyPlaylistCreatePlaylist.Handler<ExtractAuth<AV>>, 706 + AppRockskyPlaylistCreatePlaylist.HandlerReqCtx<ExtractAuth<AV>> 707 + >, 708 + ) { 709 + const nsid = 'app.rocksky.playlist.createPlaylist' // @ts-ignore 710 + return this._server.xrpc.method(nsid, cfg) 711 } 712 713 getPlaylist<AV extends AuthVerifier>( ··· 729 >, 730 ) { 731 const nsid = 'app.rocksky.playlist.getPlaylists' // @ts-ignore 732 + return this._server.xrpc.method(nsid, cfg) 733 + } 734 + 735 + insertDirectory<AV extends AuthVerifier>( 736 + cfg: ConfigOf< 737 + AV, 738 + AppRockskyPlaylistInsertDirectory.Handler<ExtractAuth<AV>>, 739 + AppRockskyPlaylistInsertDirectory.HandlerReqCtx<ExtractAuth<AV>> 740 + >, 741 + ) { 742 + const nsid = 'app.rocksky.playlist.insertDirectory' // @ts-ignore 743 + return this._server.xrpc.method(nsid, cfg) 744 + } 745 + 746 + insertFiles<AV extends AuthVerifier>( 747 + cfg: ConfigOf< 748 + AV, 749 + AppRockskyPlaylistInsertFiles.Handler<ExtractAuth<AV>>, 750 + AppRockskyPlaylistInsertFiles.HandlerReqCtx<ExtractAuth<AV>> 751 + >, 752 + ) { 753 + const nsid = 'app.rocksky.playlist.insertFiles' // @ts-ignore 754 + return this._server.xrpc.method(nsid, cfg) 755 + } 756 + 757 + removePlaylist<AV extends AuthVerifier>( 758 + cfg: ConfigOf< 759 + AV, 760 + AppRockskyPlaylistRemovePlaylist.Handler<ExtractAuth<AV>>, 761 + AppRockskyPlaylistRemovePlaylist.HandlerReqCtx<ExtractAuth<AV>> 762 + >, 763 + ) { 764 + const nsid = 'app.rocksky.playlist.removePlaylist' // @ts-ignore 765 + return this._server.xrpc.method(nsid, cfg) 766 + } 767 + 768 + removeTrack<AV extends AuthVerifier>( 769 + cfg: ConfigOf< 770 + AV, 771 + AppRockskyPlaylistRemoveTrack.Handler<ExtractAuth<AV>>, 772 + AppRockskyPlaylistRemoveTrack.HandlerReqCtx<ExtractAuth<AV>> 773 + >, 774 + ) { 775 + const nsid = 'app.rocksky.playlist.removeTrack' // @ts-ignore 776 + return this._server.xrpc.method(nsid, cfg) 777 + } 778 + 779 + startPlaylist<AV extends AuthVerifier>( 780 + cfg: ConfigOf< 781 + AV, 782 + AppRockskyPlaylistStartPlaylist.Handler<ExtractAuth<AV>>, 783 + AppRockskyPlaylistStartPlaylist.HandlerReqCtx<ExtractAuth<AV>> 784 + >, 785 + ) { 786 + const nsid = 'app.rocksky.playlist.startPlaylist' // @ts-ignore 787 return this._server.xrpc.method(nsid, cfg) 788 } 789 }
+305 -132
apps/api/src/lexicon/lexicons.ts
··· 1866 }, 1867 }, 1868 }, 1869 AppRockskyPlayerDefs: { 1870 lexicon: 1, 1871 id: 'app.rocksky.player.defs', ··· 1879 }, 1880 }, 1881 }, 1882 }, 1883 }, 1884 AppRockskyPlayerGetCurrentlyPlaying: { ··· 1891 parameters: { 1892 type: 'params', 1893 properties: { 1894 actor: { 1895 type: 'string', 1896 description: ··· 1909 }, 1910 }, 1911 }, 1912 AppRockskyPlayerNext: { 1913 lexicon: 1, 1914 id: 'app.rocksky.player.next', ··· 1916 main: { 1917 type: 'procedure', 1918 description: 'Play the next track in the queue', 1919 }, 1920 }, 1921 }, ··· 1926 main: { 1927 type: 'procedure', 1928 description: 'Pause the currently playing track', 1929 }, 1930 }, 1931 }, ··· 1936 main: { 1937 type: 'procedure', 1938 description: 'Resume playback of the currently paused track', 1939 }, 1940 }, 1941 }, ··· 1946 main: { 1947 type: 'procedure', 1948 description: 'Play the previous track in the queue', 1949 }, 1950 }, 1951 }, ··· 1961 type: 'params', 1962 required: ['position'], 1963 properties: { 1964 position: { 1965 type: 'integer', 1966 description: 'The position in seconds to seek to', 1967 }, 1968 }, 1969 }, ··· 2161 }, 2162 }, 2163 }, 2164 AppRockskyPlaylist: { 2165 lexicon: 1, 2166 id: 'app.rocksky.playlist', ··· 2219 appleMusicLink: { 2220 type: 'string', 2221 description: 'The Apple Music link of the playlist.', 2222 }, 2223 }, 2224 }, ··· 3572 }, 3573 }, 3574 }, 3575 - AppRockskyLovedSong: { 3576 - lexicon: 1, 3577 - id: 'app.rocksky.lovedSong', 3578 - defs: { 3579 - main: { 3580 - type: 'record', 3581 - description: 'A declaration of a song.', 3582 - key: 'tid', 3583 - record: { 3584 - type: 'object', 3585 - required: ['title', 'artist', 'album', 'duration', 'createdAt'], 3586 - properties: { 3587 - title: { 3588 - type: 'string', 3589 - description: 'The title of the song.', 3590 - minLength: 1, 3591 - maxLength: 512, 3592 - }, 3593 - artist: { 3594 - type: 'string', 3595 - description: 'The artist of the song.', 3596 - minLength: 1, 3597 - maxLength: 256, 3598 - }, 3599 - albumArtist: { 3600 - type: 'string', 3601 - description: 'The album artist of the song.', 3602 - minLength: 1, 3603 - maxLength: 256, 3604 - }, 3605 - album: { 3606 - type: 'string', 3607 - description: 'The album of the song.', 3608 - minLength: 1, 3609 - maxLength: 256, 3610 - }, 3611 - duration: { 3612 - type: 'integer', 3613 - description: 'The duration of the song in seconds.', 3614 - minimum: 1, 3615 - }, 3616 - trackNumber: { 3617 - type: 'integer', 3618 - description: 'The track number of the song in the album.', 3619 - minimum: 1, 3620 - }, 3621 - discNumber: { 3622 - type: 'integer', 3623 - description: 'The disc number of the song in the album.', 3624 - minimum: 1, 3625 - }, 3626 - releaseDate: { 3627 - type: 'string', 3628 - description: 'The release date of the song.', 3629 - format: 'datetime', 3630 - }, 3631 - year: { 3632 - type: 'integer', 3633 - description: 'The year the song was released.', 3634 - }, 3635 - genre: { 3636 - type: 'string', 3637 - description: 'The genre of the song.', 3638 - maxLength: 256, 3639 - }, 3640 - tags: { 3641 - type: 'array', 3642 - description: 'The tags of the song.', 3643 - items: { 3644 - type: 'string', 3645 - minLength: 1, 3646 - maxLength: 256, 3647 - }, 3648 - }, 3649 - composer: { 3650 - type: 'string', 3651 - description: 'The composer of the song.', 3652 - maxLength: 256, 3653 - }, 3654 - lyrics: { 3655 - type: 'string', 3656 - description: 'The lyrics of the song.', 3657 - maxLength: 10000, 3658 - }, 3659 - copyrightMessage: { 3660 - type: 'string', 3661 - description: 'The copyright message of the song.', 3662 - minLength: 1, 3663 - maxLength: 256, 3664 - }, 3665 - wiki: { 3666 - type: 'string', 3667 - description: 'Informations about the song', 3668 - maxLength: 10000, 3669 - }, 3670 - albumArt: { 3671 - type: 'blob', 3672 - description: 'The album art of the song.', 3673 - accept: ['image/png', 'image/jpeg'], 3674 - maxSize: 2000000, 3675 - }, 3676 - youtubeLink: { 3677 - type: 'string', 3678 - description: 'The YouTube link of the song.', 3679 - format: 'uri', 3680 - }, 3681 - spotifyLink: { 3682 - type: 'string', 3683 - description: 'The Spotify link of the song.', 3684 - format: 'uri', 3685 - }, 3686 - tidalLink: { 3687 - type: 'string', 3688 - description: 'The Tidal link of the song.', 3689 - format: 'uri', 3690 - }, 3691 - appleMusicLink: { 3692 - type: 'string', 3693 - description: 'The Apple Music link of the song.', 3694 - format: 'uri', 3695 - }, 3696 - createdAt: { 3697 - type: 'string', 3698 - description: 'The date when the song was created.', 3699 - format: 'datetime', 3700 - }, 3701 - }, 3702 - }, 3703 - }, 3704 - }, 3705 - }, 3706 AppRockskySong: { 3707 lexicon: 1, 3708 id: 'app.rocksky.song', ··· 4103 AppRockskyLike: 'app.rocksky.like', 4104 AppRockskyLikeLikeShout: 'app.rocksky.like.likeShout', 4105 AppRockskyLikeLikeSong: 'app.rocksky.like.likeSong', 4106 AppRockskyPlayerDefs: 'app.rocksky.player.defs', 4107 AppRockskyPlayerGetCurrentlyPlaying: 'app.rocksky.player.getCurrentlyPlaying', 4108 AppRockskyPlayerNext: 'app.rocksky.player.next', 4109 AppRockskyPlayerPause: 'app.rocksky.player.pause', 4110 AppRockskyPlayerPlay: 'app.rocksky.player.play', 4111 AppRockskyPlayerPrevious: 'app.rocksky.player.previous', 4112 AppRockskyPlayerSeek: 'app.rocksky.player.seek', 4113 AppRockskyPlaylistDefs: 'app.rocksky.playlist.defs', 4114 AppRockskyPlaylistGetPlaylist: 'app.rocksky.playlist.getPlaylist', 4115 AppRockskyPlaylistGetPlaylists: 'app.rocksky.playlist.getPlaylists', 4116 AppRockskyPlaylist: 'app.rocksky.playlist', 4117 AppRockskyRadioDefs: 'app.rocksky.radio.defs', 4118 AppRockskyRadio: 'app.rocksky.radio', 4119 AppRockskyScrobbleCreateScrobble: 'app.rocksky.scrobble.createScrobble', ··· 4136 AppRockskySongDefs: 'app.rocksky.song.defs', 4137 AppRockskySongGetSong: 'app.rocksky.song.getSong', 4138 AppRockskySongGetSongs: 'app.rocksky.song.getSongs', 4139 - AppRockskyLovedSong: 'app.rocksky.lovedSong', 4140 AppRockskySong: 'app.rocksky.song', 4141 AppRockskySpotifyDefs: 'app.rocksky.spotify.defs', 4142 AppRockskySpotifyGetCurrentlyPlaying:
··· 1866 }, 1867 }, 1868 }, 1869 + AppRockskyPlayerAddItemsToQueue: { 1870 + lexicon: 1, 1871 + id: 'app.rocksky.player.addItemsToQueue', 1872 + defs: { 1873 + main: { 1874 + type: 'procedure', 1875 + description: "Add items to the player's queue", 1876 + parameters: { 1877 + type: 'params', 1878 + required: ['items'], 1879 + properties: { 1880 + playerId: { 1881 + type: 'string', 1882 + }, 1883 + items: { 1884 + type: 'array', 1885 + items: { 1886 + type: 'string', 1887 + description: 'List of file identifiers to add to the queue', 1888 + }, 1889 + }, 1890 + position: { 1891 + type: 'integer', 1892 + description: 1893 + 'Position in the queue to insert the items at, defaults to the end if not specified', 1894 + }, 1895 + }, 1896 + }, 1897 + }, 1898 + }, 1899 + }, 1900 AppRockskyPlayerDefs: { 1901 lexicon: 1, 1902 id: 'app.rocksky.player.defs', ··· 1910 }, 1911 }, 1912 }, 1913 + playbackQueueViewDetailed: { 1914 + type: 'object', 1915 + properties: { 1916 + tracks: { 1917 + type: 'array', 1918 + items: { 1919 + type: 'ref', 1920 + ref: 'lex:app.rocksky.song.defs.songViewBasic', 1921 + }, 1922 + }, 1923 + }, 1924 + }, 1925 }, 1926 }, 1927 AppRockskyPlayerGetCurrentlyPlaying: { ··· 1934 parameters: { 1935 type: 'params', 1936 properties: { 1937 + playerId: { 1938 + type: 'string', 1939 + }, 1940 actor: { 1941 type: 'string', 1942 description: ··· 1955 }, 1956 }, 1957 }, 1958 + AppRockskyPlayerGetPlaybackQueue: { 1959 + lexicon: 1, 1960 + id: 'app.rocksky.player.getPlaybackQueue', 1961 + defs: { 1962 + main: { 1963 + type: 'query', 1964 + description: 'Retrieve the current playback queue', 1965 + parameters: { 1966 + type: 'params', 1967 + properties: { 1968 + playerId: { 1969 + type: 'string', 1970 + }, 1971 + }, 1972 + }, 1973 + output: { 1974 + encoding: 'application/json', 1975 + schema: { 1976 + type: 'ref', 1977 + ref: 'lex:app.rocksky.player.defs#playbackQueueViewDetailed', 1978 + }, 1979 + }, 1980 + }, 1981 + }, 1982 + }, 1983 AppRockskyPlayerNext: { 1984 lexicon: 1, 1985 id: 'app.rocksky.player.next', ··· 1987 main: { 1988 type: 'procedure', 1989 description: 'Play the next track in the queue', 1990 + parameters: { 1991 + type: 'params', 1992 + properties: { 1993 + playerId: { 1994 + type: 'string', 1995 + }, 1996 + }, 1997 + }, 1998 }, 1999 }, 2000 }, ··· 2005 main: { 2006 type: 'procedure', 2007 description: 'Pause the currently playing track', 2008 + parameters: { 2009 + type: 'params', 2010 + properties: { 2011 + playerId: { 2012 + type: 'string', 2013 + }, 2014 + }, 2015 + }, 2016 + }, 2017 + }, 2018 + }, 2019 + AppRockskyPlayerPlayDirectory: { 2020 + lexicon: 1, 2021 + id: 'app.rocksky.player.playDirectory', 2022 + defs: { 2023 + main: { 2024 + type: 'procedure', 2025 + description: 'Play all tracks in a directory', 2026 + parameters: { 2027 + type: 'params', 2028 + required: ['directoryId'], 2029 + properties: { 2030 + playerId: { 2031 + type: 'string', 2032 + }, 2033 + directoryId: { 2034 + type: 'string', 2035 + }, 2036 + }, 2037 + }, 2038 + }, 2039 + }, 2040 + }, 2041 + AppRockskyPlayerPlayFile: { 2042 + lexicon: 1, 2043 + id: 'app.rocksky.player.playFile', 2044 + defs: { 2045 + main: { 2046 + type: 'procedure', 2047 + description: 'Play a specific audio file', 2048 + parameters: { 2049 + type: 'params', 2050 + required: ['fileId'], 2051 + properties: { 2052 + playerId: { 2053 + type: 'string', 2054 + }, 2055 + fileId: { 2056 + type: 'string', 2057 + }, 2058 + }, 2059 + }, 2060 }, 2061 }, 2062 }, ··· 2067 main: { 2068 type: 'procedure', 2069 description: 'Resume playback of the currently paused track', 2070 + parameters: { 2071 + type: 'params', 2072 + properties: { 2073 + playerId: { 2074 + type: 'string', 2075 + }, 2076 + }, 2077 + }, 2078 }, 2079 }, 2080 }, ··· 2085 main: { 2086 type: 'procedure', 2087 description: 'Play the previous track in the queue', 2088 + parameters: { 2089 + type: 'params', 2090 + properties: { 2091 + playerId: { 2092 + type: 'string', 2093 + }, 2094 + }, 2095 + }, 2096 }, 2097 }, 2098 }, ··· 2108 type: 'params', 2109 required: ['position'], 2110 properties: { 2111 + playerId: { 2112 + type: 'string', 2113 + }, 2114 position: { 2115 type: 'integer', 2116 description: 'The position in seconds to seek to', 2117 + }, 2118 + }, 2119 + }, 2120 + }, 2121 + }, 2122 + }, 2123 + AppRockskyPlaylistCreatePlaylist: { 2124 + lexicon: 1, 2125 + id: 'app.rocksky.playlist.createPlaylist', 2126 + defs: { 2127 + main: { 2128 + type: 'procedure', 2129 + description: 'Create a new playlist', 2130 + parameters: { 2131 + type: 'params', 2132 + required: ['name'], 2133 + properties: { 2134 + name: { 2135 + type: 'string', 2136 + description: 'The name of the playlist', 2137 + }, 2138 + description: { 2139 + type: 'string', 2140 + description: 'A brief description of the playlist', 2141 }, 2142 }, 2143 }, ··· 2335 }, 2336 }, 2337 }, 2338 + AppRockskyPlaylistInsertDirectory: { 2339 + lexicon: 1, 2340 + id: 'app.rocksky.playlist.insertDirectory', 2341 + defs: { 2342 + main: { 2343 + type: 'procedure', 2344 + description: 'Insert a directory into a playlist', 2345 + parameters: { 2346 + type: 'params', 2347 + required: ['uri'], 2348 + properties: { 2349 + uri: { 2350 + type: 'string', 2351 + description: 'The URI of the playlist to start', 2352 + format: 'at-uri', 2353 + }, 2354 + directory: { 2355 + type: 'string', 2356 + description: 'The directory (id) to insert into the playlist', 2357 + }, 2358 + }, 2359 + }, 2360 + }, 2361 + }, 2362 + }, 2363 + AppRockskyPlaylistInsertFiles: { 2364 + lexicon: 1, 2365 + id: 'app.rocksky.playlist.insertFiles', 2366 + defs: { 2367 + main: { 2368 + type: 'procedure', 2369 + description: 'Insert files into a playlist', 2370 + parameters: { 2371 + type: 'params', 2372 + required: ['uri'], 2373 + properties: { 2374 + uri: { 2375 + type: 'string', 2376 + description: 'The URI of the playlist to start', 2377 + format: 'at-uri', 2378 + }, 2379 + files: { 2380 + type: 'array', 2381 + items: { 2382 + type: 'string', 2383 + description: 'List of file (id) to insert into the playlist', 2384 + }, 2385 + }, 2386 + }, 2387 + }, 2388 + }, 2389 + }, 2390 + }, 2391 AppRockskyPlaylist: { 2392 lexicon: 1, 2393 id: 'app.rocksky.playlist', ··· 2446 appleMusicLink: { 2447 type: 'string', 2448 description: 'The Apple Music link of the playlist.', 2449 + }, 2450 + }, 2451 + }, 2452 + }, 2453 + }, 2454 + }, 2455 + AppRockskyPlaylistRemovePlaylist: { 2456 + lexicon: 1, 2457 + id: 'app.rocksky.playlist.removePlaylist', 2458 + defs: { 2459 + main: { 2460 + type: 'procedure', 2461 + description: 'Remove a playlist', 2462 + parameters: { 2463 + type: 'params', 2464 + required: ['uri'], 2465 + properties: { 2466 + uri: { 2467 + type: 'string', 2468 + description: 'The URI of the playlist to remove', 2469 + format: 'at-uri', 2470 + }, 2471 + }, 2472 + }, 2473 + }, 2474 + }, 2475 + }, 2476 + AppRockskyPlaylistRemoveTrack: { 2477 + lexicon: 1, 2478 + id: 'app.rocksky.playlist.removeTrack', 2479 + defs: { 2480 + main: { 2481 + type: 'procedure', 2482 + description: 'Remove a track from a playlist', 2483 + parameters: { 2484 + type: 'params', 2485 + required: ['uri', 'position'], 2486 + properties: { 2487 + uri: { 2488 + type: 'string', 2489 + description: 'The URI of the playlist to remove the track from', 2490 + format: 'at-uri', 2491 + }, 2492 + position: { 2493 + type: 'integer', 2494 + description: 2495 + 'The position of the track to remove in the playlist', 2496 + }, 2497 + }, 2498 + }, 2499 + }, 2500 + }, 2501 + }, 2502 + AppRockskyPlaylistStartPlaylist: { 2503 + lexicon: 1, 2504 + id: 'app.rocksky.playlist.startPlaylist', 2505 + defs: { 2506 + main: { 2507 + type: 'procedure', 2508 + description: 'Start a playlist', 2509 + parameters: { 2510 + type: 'params', 2511 + required: ['uri'], 2512 + properties: { 2513 + uri: { 2514 + type: 'string', 2515 + description: 'The URI of the playlist to start', 2516 + format: 'at-uri', 2517 }, 2518 }, 2519 }, ··· 3867 }, 3868 }, 3869 }, 3870 AppRockskySong: { 3871 lexicon: 1, 3872 id: 'app.rocksky.song', ··· 4267 AppRockskyLike: 'app.rocksky.like', 4268 AppRockskyLikeLikeShout: 'app.rocksky.like.likeShout', 4269 AppRockskyLikeLikeSong: 'app.rocksky.like.likeSong', 4270 + AppRockskyPlayerAddItemsToQueue: 'app.rocksky.player.addItemsToQueue', 4271 AppRockskyPlayerDefs: 'app.rocksky.player.defs', 4272 AppRockskyPlayerGetCurrentlyPlaying: 'app.rocksky.player.getCurrentlyPlaying', 4273 + AppRockskyPlayerGetPlaybackQueue: 'app.rocksky.player.getPlaybackQueue', 4274 AppRockskyPlayerNext: 'app.rocksky.player.next', 4275 AppRockskyPlayerPause: 'app.rocksky.player.pause', 4276 + AppRockskyPlayerPlayDirectory: 'app.rocksky.player.playDirectory', 4277 + AppRockskyPlayerPlayFile: 'app.rocksky.player.playFile', 4278 AppRockskyPlayerPlay: 'app.rocksky.player.play', 4279 AppRockskyPlayerPrevious: 'app.rocksky.player.previous', 4280 AppRockskyPlayerSeek: 'app.rocksky.player.seek', 4281 + AppRockskyPlaylistCreatePlaylist: 'app.rocksky.playlist.createPlaylist', 4282 AppRockskyPlaylistDefs: 'app.rocksky.playlist.defs', 4283 AppRockskyPlaylistGetPlaylist: 'app.rocksky.playlist.getPlaylist', 4284 AppRockskyPlaylistGetPlaylists: 'app.rocksky.playlist.getPlaylists', 4285 + AppRockskyPlaylistInsertDirectory: 'app.rocksky.playlist.insertDirectory', 4286 + AppRockskyPlaylistInsertFiles: 'app.rocksky.playlist.insertFiles', 4287 AppRockskyPlaylist: 'app.rocksky.playlist', 4288 + AppRockskyPlaylistRemovePlaylist: 'app.rocksky.playlist.removePlaylist', 4289 + AppRockskyPlaylistRemoveTrack: 'app.rocksky.playlist.removeTrack', 4290 + AppRockskyPlaylistStartPlaylist: 'app.rocksky.playlist.startPlaylist', 4291 AppRockskyRadioDefs: 'app.rocksky.radio.defs', 4292 AppRockskyRadio: 'app.rocksky.radio', 4293 AppRockskyScrobbleCreateScrobble: 'app.rocksky.scrobble.createScrobble', ··· 4310 AppRockskySongDefs: 'app.rocksky.song.defs', 4311 AppRockskySongGetSong: 'app.rocksky.song.getSong', 4312 AppRockskySongGetSongs: 'app.rocksky.song.getSongs', 4313 AppRockskySong: 'app.rocksky.song', 4314 AppRockskySpotifyDefs: 'app.rocksky.spotify.defs', 4315 AppRockskySpotifyGetCurrentlyPlaying:
-66
apps/api/src/lexicon/types/app/rocksky/lovedSong.ts
··· 1 - /** 2 - * GENERATED CODE - DO NOT MODIFY 3 - */ 4 - import { ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { lexicons } from '../../../lexicons' 6 - import { isObj, hasProp } from '../../../util' 7 - import { CID } from 'multiformats/cid' 8 - 9 - export interface Record { 10 - /** The title of the song. */ 11 - title: string 12 - /** The artist of the song. */ 13 - artist: string 14 - /** The album artist of the song. */ 15 - albumArtist?: string 16 - /** The album of the song. */ 17 - album: string 18 - /** The duration of the song in seconds. */ 19 - duration: number 20 - /** The track number of the song in the album. */ 21 - trackNumber?: number 22 - /** The disc number of the song in the album. */ 23 - discNumber?: number 24 - /** The release date of the song. */ 25 - releaseDate?: string 26 - /** The year the song was released. */ 27 - year?: number 28 - /** The genre of the song. */ 29 - genre?: string 30 - /** The tags of the song. */ 31 - tags?: string[] 32 - /** The composer of the song. */ 33 - composer?: string 34 - /** The lyrics of the song. */ 35 - lyrics?: string 36 - /** The copyright message of the song. */ 37 - copyrightMessage?: string 38 - /** Informations about the song */ 39 - wiki?: string 40 - /** The album art of the song. */ 41 - albumArt?: BlobRef 42 - /** The YouTube link of the song. */ 43 - youtubeLink?: string 44 - /** The Spotify link of the song. */ 45 - spotifyLink?: string 46 - /** The Tidal link of the song. */ 47 - tidalLink?: string 48 - /** The Apple Music link of the song. */ 49 - appleMusicLink?: string 50 - /** The date when the song was created. */ 51 - createdAt: string 52 - [k: string]: unknown 53 - } 54 - 55 - export function isRecord(v: unknown): v is Record { 56 - return ( 57 - isObj(v) && 58 - hasProp(v, '$type') && 59 - (v.$type === 'app.rocksky.lovedSong#main' || 60 - v.$type === 'app.rocksky.lovedSong') 61 - ) 62 - } 63 - 64 - export function validateRecord(v: unknown): ValidationResult { 65 - return lexicons.validate('app.rocksky.lovedSong#main', v) 66 - }
···
+37
apps/api/src/lexicon/types/app/rocksky/player/addItemsToQueue.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { lexicons } from '../../../../lexicons' 7 + import { isObj, hasProp } from '../../../../util' 8 + import { CID } from 'multiformats/cid' 9 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 + 11 + export interface QueryParams { 12 + playerId?: string 13 + items: string[] 14 + /** Position in the queue to insert the items at, defaults to the end if not specified */ 15 + position?: number 16 + } 17 + 18 + export type InputSchema = undefined 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerError { 22 + status: number 23 + message?: string 24 + } 25 + 26 + export type HandlerOutput = HandlerError | void 27 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 28 + auth: HA 29 + params: QueryParams 30 + input: HandlerInput 31 + req: express.Request 32 + res: express.Response 33 + resetRouteRateLimits: () => Promise<void> 34 + } 35 + export type Handler<HA extends HandlerAuth = never> = ( 36 + ctx: HandlerReqCtx<HA>, 37 + ) => Promise<HandlerOutput> | HandlerOutput
+25
apps/api/src/lexicon/types/app/rocksky/player/defs.ts
··· 5 import { lexicons } from '../../../../lexicons' 6 import { isObj, hasProp } from '../../../../util' 7 import { CID } from 'multiformats/cid' 8 9 export interface CurrentlyPlayingViewDetailed { 10 /** The title of the currently playing track */ ··· 30 v, 31 ) 32 }
··· 5 import { lexicons } from '../../../../lexicons' 6 import { isObj, hasProp } from '../../../../util' 7 import { CID } from 'multiformats/cid' 8 + import * as AppRockskySongDefsSongViewBasic from '../song/defs/songViewBasic' 9 10 export interface CurrentlyPlayingViewDetailed { 11 /** The title of the currently playing track */ ··· 31 v, 32 ) 33 } 34 + 35 + export interface PlaybackQueueViewDetailed { 36 + tracks?: AppRockskySongDefsSongViewBasic.Main[] 37 + [k: string]: unknown 38 + } 39 + 40 + export function isPlaybackQueueViewDetailed( 41 + v: unknown, 42 + ): v is PlaybackQueueViewDetailed { 43 + return ( 44 + isObj(v) && 45 + hasProp(v, '$type') && 46 + v.$type === 'app.rocksky.player.defs#playbackQueueViewDetailed' 47 + ) 48 + } 49 + 50 + export function validatePlaybackQueueViewDetailed( 51 + v: unknown, 52 + ): ValidationResult { 53 + return lexicons.validate( 54 + 'app.rocksky.player.defs#playbackQueueViewDetailed', 55 + v, 56 + ) 57 + }
+1
apps/api/src/lexicon/types/app/rocksky/player/getCurrentlyPlaying.ts
··· 10 import * as AppRockskyPlayerDefs from './defs' 11 12 export interface QueryParams { 13 /** Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user. */ 14 actor?: string 15 }
··· 10 import * as AppRockskyPlayerDefs from './defs' 11 12 export interface QueryParams { 13 + playerId?: string 14 /** Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user. */ 15 actor?: string 16 }
+42
apps/api/src/lexicon/types/app/rocksky/player/getPlaybackQueue.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { lexicons } from '../../../../lexicons' 7 + import { isObj, hasProp } from '../../../../util' 8 + import { CID } from 'multiformats/cid' 9 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 + import * as AppRockskyPlayerDefs from './defs' 11 + 12 + export interface QueryParams { 13 + playerId?: string 14 + } 15 + 16 + export type InputSchema = undefined 17 + export type OutputSchema = AppRockskyPlayerDefs.PlaybackQueueViewDetailed 18 + export type HandlerInput = undefined 19 + 20 + export interface HandlerSuccess { 21 + encoding: 'application/json' 22 + body: OutputSchema 23 + headers?: { [key: string]: string } 24 + } 25 + 26 + export interface HandlerError { 27 + status: number 28 + message?: string 29 + } 30 + 31 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 32 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 33 + auth: HA 34 + params: QueryParams 35 + input: HandlerInput 36 + req: express.Request 37 + res: express.Response 38 + resetRouteRateLimits: () => Promise<void> 39 + } 40 + export type Handler<HA extends HandlerAuth = never> = ( 41 + ctx: HandlerReqCtx<HA>, 42 + ) => Promise<HandlerOutput> | HandlerOutput
+3 -1
apps/api/src/lexicon/types/app/rocksky/player/next.ts
··· 8 import { CID } from 'multiformats/cid' 9 import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 11 - export interface QueryParams {} 12 13 export type InputSchema = undefined 14 export type HandlerInput = undefined
··· 8 import { CID } from 'multiformats/cid' 9 import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 11 + export interface QueryParams { 12 + playerId?: string 13 + } 14 15 export type InputSchema = undefined 16 export type HandlerInput = undefined
+3 -1
apps/api/src/lexicon/types/app/rocksky/player/pause.ts
··· 8 import { CID } from 'multiformats/cid' 9 import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 11 - export interface QueryParams {} 12 13 export type InputSchema = undefined 14 export type HandlerInput = undefined
··· 8 import { CID } from 'multiformats/cid' 9 import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 11 + export interface QueryParams { 12 + playerId?: string 13 + } 14 15 export type InputSchema = undefined 16 export type HandlerInput = undefined
+3 -1
apps/api/src/lexicon/types/app/rocksky/player/play.ts
··· 8 import { CID } from 'multiformats/cid' 9 import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 11 - export interface QueryParams {} 12 13 export type InputSchema = undefined 14 export type HandlerInput = undefined
··· 8 import { CID } from 'multiformats/cid' 9 import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 11 + export interface QueryParams { 12 + playerId?: string 13 + } 14 15 export type InputSchema = undefined 16 export type HandlerInput = undefined
+35
apps/api/src/lexicon/types/app/rocksky/player/playDirectory.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { lexicons } from '../../../../lexicons' 7 + import { isObj, hasProp } from '../../../../util' 8 + import { CID } from 'multiformats/cid' 9 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 + 11 + export interface QueryParams { 12 + playerId?: string 13 + directoryId: string 14 + } 15 + 16 + export type InputSchema = undefined 17 + export type HandlerInput = undefined 18 + 19 + export interface HandlerError { 20 + status: number 21 + message?: string 22 + } 23 + 24 + export type HandlerOutput = HandlerError | void 25 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 26 + auth: HA 27 + params: QueryParams 28 + input: HandlerInput 29 + req: express.Request 30 + res: express.Response 31 + resetRouteRateLimits: () => Promise<void> 32 + } 33 + export type Handler<HA extends HandlerAuth = never> = ( 34 + ctx: HandlerReqCtx<HA>, 35 + ) => Promise<HandlerOutput> | HandlerOutput
+35
apps/api/src/lexicon/types/app/rocksky/player/playFile.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { lexicons } from '../../../../lexicons' 7 + import { isObj, hasProp } from '../../../../util' 8 + import { CID } from 'multiformats/cid' 9 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 + 11 + export interface QueryParams { 12 + playerId?: string 13 + fileId: string 14 + } 15 + 16 + export type InputSchema = undefined 17 + export type HandlerInput = undefined 18 + 19 + export interface HandlerError { 20 + status: number 21 + message?: string 22 + } 23 + 24 + export type HandlerOutput = HandlerError | void 25 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 26 + auth: HA 27 + params: QueryParams 28 + input: HandlerInput 29 + req: express.Request 30 + res: express.Response 31 + resetRouteRateLimits: () => Promise<void> 32 + } 33 + export type Handler<HA extends HandlerAuth = never> = ( 34 + ctx: HandlerReqCtx<HA>, 35 + ) => Promise<HandlerOutput> | HandlerOutput
+3 -1
apps/api/src/lexicon/types/app/rocksky/player/previous.ts
··· 8 import { CID } from 'multiformats/cid' 9 import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 11 - export interface QueryParams {} 12 13 export type InputSchema = undefined 14 export type HandlerInput = undefined
··· 8 import { CID } from 'multiformats/cid' 9 import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 11 + export interface QueryParams { 12 + playerId?: string 13 + } 14 15 export type InputSchema = undefined 16 export type HandlerInput = undefined
+1
apps/api/src/lexicon/types/app/rocksky/player/seek.ts
··· 9 import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 11 export interface QueryParams { 12 /** The position in seconds to seek to */ 13 position: number 14 }
··· 9 import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 11 export interface QueryParams { 12 + playerId?: string 13 /** The position in seconds to seek to */ 14 position: number 15 }
+37
apps/api/src/lexicon/types/app/rocksky/playlist/createPlaylist.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { lexicons } from '../../../../lexicons' 7 + import { isObj, hasProp } from '../../../../util' 8 + import { CID } from 'multiformats/cid' 9 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 + 11 + export interface QueryParams { 12 + /** The name of the playlist */ 13 + name: string 14 + /** A brief description of the playlist */ 15 + description?: string 16 + } 17 + 18 + export type InputSchema = undefined 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerError { 22 + status: number 23 + message?: string 24 + } 25 + 26 + export type HandlerOutput = HandlerError | void 27 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 28 + auth: HA 29 + params: QueryParams 30 + input: HandlerInput 31 + req: express.Request 32 + res: express.Response 33 + resetRouteRateLimits: () => Promise<void> 34 + } 35 + export type Handler<HA extends HandlerAuth = never> = ( 36 + ctx: HandlerReqCtx<HA>, 37 + ) => Promise<HandlerOutput> | HandlerOutput
+37
apps/api/src/lexicon/types/app/rocksky/playlist/insertDirectory.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { lexicons } from '../../../../lexicons' 7 + import { isObj, hasProp } from '../../../../util' 8 + import { CID } from 'multiformats/cid' 9 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 + 11 + export interface QueryParams { 12 + /** The URI of the playlist to start */ 13 + uri: string 14 + /** The directory (id) to insert into the playlist */ 15 + directory?: string 16 + } 17 + 18 + export type InputSchema = undefined 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerError { 22 + status: number 23 + message?: string 24 + } 25 + 26 + export type HandlerOutput = HandlerError | void 27 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 28 + auth: HA 29 + params: QueryParams 30 + input: HandlerInput 31 + req: express.Request 32 + res: express.Response 33 + resetRouteRateLimits: () => Promise<void> 34 + } 35 + export type Handler<HA extends HandlerAuth = never> = ( 36 + ctx: HandlerReqCtx<HA>, 37 + ) => Promise<HandlerOutput> | HandlerOutput
+36
apps/api/src/lexicon/types/app/rocksky/playlist/insertFiles.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { lexicons } from '../../../../lexicons' 7 + import { isObj, hasProp } from '../../../../util' 8 + import { CID } from 'multiformats/cid' 9 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 + 11 + export interface QueryParams { 12 + /** The URI of the playlist to start */ 13 + uri: string 14 + files?: string[] 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type HandlerInput = undefined 19 + 20 + export interface HandlerError { 21 + status: number 22 + message?: string 23 + } 24 + 25 + export type HandlerOutput = HandlerError | void 26 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 27 + auth: HA 28 + params: QueryParams 29 + input: HandlerInput 30 + req: express.Request 31 + res: express.Response 32 + resetRouteRateLimits: () => Promise<void> 33 + } 34 + export type Handler<HA extends HandlerAuth = never> = ( 35 + ctx: HandlerReqCtx<HA>, 36 + ) => Promise<HandlerOutput> | HandlerOutput
+35
apps/api/src/lexicon/types/app/rocksky/playlist/removePlaylist.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { lexicons } from '../../../../lexicons' 7 + import { isObj, hasProp } from '../../../../util' 8 + import { CID } from 'multiformats/cid' 9 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 + 11 + export interface QueryParams { 12 + /** The URI of the playlist to remove */ 13 + uri: string 14 + } 15 + 16 + export type InputSchema = undefined 17 + export type HandlerInput = undefined 18 + 19 + export interface HandlerError { 20 + status: number 21 + message?: string 22 + } 23 + 24 + export type HandlerOutput = HandlerError | void 25 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 26 + auth: HA 27 + params: QueryParams 28 + input: HandlerInput 29 + req: express.Request 30 + res: express.Response 31 + resetRouteRateLimits: () => Promise<void> 32 + } 33 + export type Handler<HA extends HandlerAuth = never> = ( 34 + ctx: HandlerReqCtx<HA>, 35 + ) => Promise<HandlerOutput> | HandlerOutput
+37
apps/api/src/lexicon/types/app/rocksky/playlist/removeTrack.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { lexicons } from '../../../../lexicons' 7 + import { isObj, hasProp } from '../../../../util' 8 + import { CID } from 'multiformats/cid' 9 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 + 11 + export interface QueryParams { 12 + /** The URI of the playlist to remove the track from */ 13 + uri: string 14 + /** The position of the track to remove in the playlist */ 15 + position: number 16 + } 17 + 18 + export type InputSchema = undefined 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerError { 22 + status: number 23 + message?: string 24 + } 25 + 26 + export type HandlerOutput = HandlerError | void 27 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 28 + auth: HA 29 + params: QueryParams 30 + input: HandlerInput 31 + req: express.Request 32 + res: express.Response 33 + resetRouteRateLimits: () => Promise<void> 34 + } 35 + export type Handler<HA extends HandlerAuth = never> = ( 36 + ctx: HandlerReqCtx<HA>, 37 + ) => Promise<HandlerOutput> | HandlerOutput
+35
apps/api/src/lexicon/types/app/rocksky/playlist/startPlaylist.ts
···
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { lexicons } from '../../../../lexicons' 7 + import { isObj, hasProp } from '../../../../util' 8 + import { CID } from 'multiformats/cid' 9 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 + 11 + export interface QueryParams { 12 + /** The URI of the playlist to start */ 13 + uri: string 14 + } 15 + 16 + export type InputSchema = undefined 17 + export type HandlerInput = undefined 18 + 19 + export interface HandlerError { 20 + status: number 21 + message?: string 22 + } 23 + 24 + export type HandlerOutput = HandlerError | void 25 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 26 + auth: HA 27 + params: QueryParams 28 + input: HandlerInput 29 + req: express.Request 30 + res: express.Response 31 + resetRouteRateLimits: () => Promise<void> 32 + } 33 + export type Handler<HA extends HandlerAuth = never> = ( 34 + ctx: HandlerReqCtx<HA>, 35 + ) => Promise<HandlerOutput> | HandlerOutput
+2 -2
apps/web/src/components/ContextMenu/ContextMenu.tsx
··· 142 }, 143 }} 144 > 145 - <div className="text-[var(--color-text)] cursor-pointer"> 146 <EllipsisHorizontal size={24} /> 147 - </div> 148 </StatefulPopover> 149 </> 150 );
··· 142 }, 143 }} 144 > 145 + <button className="text-[var(--color-text-muted)] cursor-pointer bg-transparent border-none hover:bg-transparent"> 146 <EllipsisHorizontal size={24} /> 147 + </button> 148 </StatefulPopover> 149 </> 150 );