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

Add CLI lexicons, Drizzle schema and DB setup

+14294 -4
+17
apps/cli/drizzle.config.ts
··· 1 + import { defineConfig } from "drizzle-kit"; 2 + import envpaths from "env-paths"; 3 + import fs from "node:fs"; 4 + import chalk from "chalk"; 5 + 6 + fs.mkdirSync(envpaths("rocksky", { suffix: "" }).data, { recursive: true }); 7 + const url = `${envpaths("rocksky", { suffix: "" }).data}/rocksky.sqlite`; 8 + 9 + console.log(`Database URL: ${chalk.greenBright(url)}`); 10 + 11 + export default defineConfig({ 12 + dialect: "sqlite", 13 + schema: "./src/schema", 14 + dbCredentials: { 15 + url, 16 + }, 17 + });
+159
apps/cli/drizzle/0000_amazing_redwing.sql
··· 1 + CREATE TABLE `album_tracks` ( 2 + `id` text PRIMARY KEY NOT NULL, 3 + `album_id` text NOT NULL, 4 + `track_id` text NOT NULL, 5 + `created_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL, 6 + `updated_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL, 7 + FOREIGN KEY (`album_id`) REFERENCES `albums`(`id`) ON UPDATE no action ON DELETE no action, 8 + FOREIGN KEY (`track_id`) REFERENCES `tracks`(`id`) ON UPDATE no action ON DELETE no action 9 + ); 10 + --> statement-breakpoint 11 + CREATE TABLE `albums` ( 12 + `id` text PRIMARY KEY NOT NULL, 13 + `title` text NOT NULL, 14 + `artist` text NOT NULL, 15 + `release_date` text, 16 + `year` integer, 17 + `album_art` text, 18 + `uri` text, 19 + `artist_uri` text, 20 + `apple_music_link` text, 21 + `spotify_link` text, 22 + `tidal_link` text, 23 + `youtube_link` text, 24 + `sha256` text NOT NULL, 25 + `created_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL, 26 + `updated_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL 27 + ); 28 + --> statement-breakpoint 29 + CREATE UNIQUE INDEX `albums_uri_unique` ON `albums` (`uri`);--> statement-breakpoint 30 + CREATE UNIQUE INDEX `albums_apple_music_link_unique` ON `albums` (`apple_music_link`);--> statement-breakpoint 31 + CREATE UNIQUE INDEX `albums_spotify_link_unique` ON `albums` (`spotify_link`);--> statement-breakpoint 32 + CREATE UNIQUE INDEX `albums_tidal_link_unique` ON `albums` (`tidal_link`);--> statement-breakpoint 33 + CREATE UNIQUE INDEX `albums_youtube_link_unique` ON `albums` (`youtube_link`);--> statement-breakpoint 34 + CREATE UNIQUE INDEX `albums_sha256_unique` ON `albums` (`sha256`);--> statement-breakpoint 35 + CREATE TABLE `artist_albums` ( 36 + `id` text PRIMARY KEY NOT NULL, 37 + `artist_id` text NOT NULL, 38 + `album_id` text NOT NULL, 39 + `created_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL, 40 + `updated_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL, 41 + FOREIGN KEY (`artist_id`) REFERENCES `artists`(`id`) ON UPDATE no action ON DELETE no action, 42 + FOREIGN KEY (`album_id`) REFERENCES `albums`(`id`) ON UPDATE no action ON DELETE no action 43 + ); 44 + --> statement-breakpoint 45 + CREATE TABLE `artist_tracks` ( 46 + `id` text PRIMARY KEY NOT NULL, 47 + `artist_id` text NOT NULL, 48 + `track_id` text NOT NULL, 49 + `created_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL, 50 + `updated_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL, 51 + FOREIGN KEY (`artist_id`) REFERENCES `artists`(`id`) ON UPDATE no action ON DELETE no action, 52 + FOREIGN KEY (`track_id`) REFERENCES `tracks`(`id`) ON UPDATE no action ON DELETE no action 53 + ); 54 + --> statement-breakpoint 55 + CREATE TABLE `artists` ( 56 + `id` text PRIMARY KEY NOT NULL, 57 + `name` text NOT NULL, 58 + `biography` text, 59 + `born` integer, 60 + `born_in` text, 61 + `died` integer, 62 + `picture` text, 63 + `sha256` text NOT NULL, 64 + `uri` text, 65 + `apple_music_link` text, 66 + `spotify_link` text, 67 + `tidal_link` text, 68 + `youtube_link` text, 69 + `genres` text, 70 + `created_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL, 71 + `updated_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL 72 + ); 73 + --> statement-breakpoint 74 + CREATE UNIQUE INDEX `artists_sha256_unique` ON `artists` (`sha256`);--> statement-breakpoint 75 + CREATE UNIQUE INDEX `artists_uri_unique` ON `artists` (`uri`);--> statement-breakpoint 76 + CREATE TABLE `loved_tracks` ( 77 + `id` text PRIMARY KEY NOT NULL, 78 + `user_id` text NOT NULL, 79 + `track_id` text NOT NULL, 80 + `uri` text, 81 + `created_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL, 82 + FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action, 83 + FOREIGN KEY (`track_id`) REFERENCES `tracks`(`id`) ON UPDATE no action ON DELETE no action 84 + ); 85 + --> statement-breakpoint 86 + CREATE UNIQUE INDEX `loved_tracks_uri_unique` ON `loved_tracks` (`uri`);--> statement-breakpoint 87 + CREATE TABLE `tracks` ( 88 + `id` text PRIMARY KEY NOT NULL, 89 + `title` text NOT NULL, 90 + `artist` text NOT NULL, 91 + `album_artist` text NOT NULL, 92 + `album_art` text, 93 + `album` text NOT NULL, 94 + `track_number` integer, 95 + `duration` integer NOT NULL, 96 + `mb_id` text, 97 + `youtube_link` text, 98 + `spotify_link` text, 99 + `apple_music_link` text, 100 + `tidal_link` text, 101 + `sha256` text NOT NULL, 102 + `disc_number` integer, 103 + `lyrics` text, 104 + `composer` text, 105 + `genre` text, 106 + `label` text, 107 + `copyright_message` text, 108 + `uri` text, 109 + `album_uri` text, 110 + `artist_uri` text, 111 + `created_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL, 112 + `updated_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL 113 + ); 114 + --> statement-breakpoint 115 + CREATE UNIQUE INDEX `tracks_mb_id_unique` ON `tracks` (`mb_id`);--> statement-breakpoint 116 + CREATE UNIQUE INDEX `tracks_youtube_link_unique` ON `tracks` (`youtube_link`);--> statement-breakpoint 117 + CREATE UNIQUE INDEX `tracks_spotify_link_unique` ON `tracks` (`spotify_link`);--> statement-breakpoint 118 + CREATE UNIQUE INDEX `tracks_apple_music_link_unique` ON `tracks` (`apple_music_link`);--> statement-breakpoint 119 + CREATE UNIQUE INDEX `tracks_tidal_link_unique` ON `tracks` (`tidal_link`);--> statement-breakpoint 120 + CREATE UNIQUE INDEX `tracks_sha256_unique` ON `tracks` (`sha256`);--> statement-breakpoint 121 + CREATE UNIQUE INDEX `tracks_uri_unique` ON `tracks` (`uri`);--> statement-breakpoint 122 + CREATE TABLE `user_albums` ( 123 + `id` text PRIMARY KEY NOT NULL, 124 + `user_id` text NOT NULL, 125 + `artist_id` text NOT NULL, 126 + `created_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL, 127 + `updated_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL, 128 + `scrobbles` integer, 129 + `uri` text NOT NULL, 130 + FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action, 131 + FOREIGN KEY (`artist_id`) REFERENCES `artists`(`id`) ON UPDATE no action ON DELETE no action 132 + ); 133 + --> statement-breakpoint 134 + CREATE UNIQUE INDEX `user_albums_uri_unique` ON `user_albums` (`uri`);--> statement-breakpoint 135 + CREATE TABLE `user_tracks` ( 136 + `id` text PRIMARY KEY NOT NULL, 137 + `user_id` text NOT NULL, 138 + `track_id` text NOT NULL, 139 + `created_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL, 140 + `updated_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL, 141 + `scrobbles` integer, 142 + `uri` text NOT NULL, 143 + FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action, 144 + FOREIGN KEY (`track_id`) REFERENCES `tracks`(`id`) ON UPDATE no action ON DELETE no action 145 + ); 146 + --> statement-breakpoint 147 + CREATE UNIQUE INDEX `user_tracks_uri_unique` ON `user_tracks` (`uri`);--> statement-breakpoint 148 + CREATE TABLE `users` ( 149 + `id` text PRIMARY KEY NOT NULL, 150 + `did` text NOT NULL, 151 + `display_name` text, 152 + `handle` text NOT NULL, 153 + `avatar` text NOT NULL, 154 + `created_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL, 155 + `updated_at` integer DEFAULT CURRENT_TIMESTAMP NOT NULL 156 + ); 157 + --> statement-breakpoint 158 + CREATE UNIQUE INDEX `users_did_unique` ON `users` (`did`);--> statement-breakpoint 159 + CREATE UNIQUE INDEX `users_handle_unique` ON `users` (`handle`);
+1125
apps/cli/drizzle/meta/0000_snapshot.json
··· 1 + { 2 + "version": "6", 3 + "dialect": "sqlite", 4 + "id": "a549f070-9d4d-4d38-bd6a-c04bc9a4889b", 5 + "prevId": "00000000-0000-0000-0000-000000000000", 6 + "tables": { 7 + "album_tracks": { 8 + "name": "album_tracks", 9 + "columns": { 10 + "id": { 11 + "name": "id", 12 + "type": "text", 13 + "primaryKey": true, 14 + "notNull": true, 15 + "autoincrement": false 16 + }, 17 + "album_id": { 18 + "name": "album_id", 19 + "type": "text", 20 + "primaryKey": false, 21 + "notNull": true, 22 + "autoincrement": false 23 + }, 24 + "track_id": { 25 + "name": "track_id", 26 + "type": "text", 27 + "primaryKey": false, 28 + "notNull": true, 29 + "autoincrement": false 30 + }, 31 + "created_at": { 32 + "name": "created_at", 33 + "type": "integer", 34 + "primaryKey": false, 35 + "notNull": true, 36 + "autoincrement": false, 37 + "default": "CURRENT_TIMESTAMP" 38 + }, 39 + "updated_at": { 40 + "name": "updated_at", 41 + "type": "integer", 42 + "primaryKey": false, 43 + "notNull": true, 44 + "autoincrement": false, 45 + "default": "CURRENT_TIMESTAMP" 46 + } 47 + }, 48 + "indexes": {}, 49 + "foreignKeys": { 50 + "album_tracks_album_id_albums_id_fk": { 51 + "name": "album_tracks_album_id_albums_id_fk", 52 + "tableFrom": "album_tracks", 53 + "tableTo": "albums", 54 + "columnsFrom": [ 55 + "album_id" 56 + ], 57 + "columnsTo": [ 58 + "id" 59 + ], 60 + "onDelete": "no action", 61 + "onUpdate": "no action" 62 + }, 63 + "album_tracks_track_id_tracks_id_fk": { 64 + "name": "album_tracks_track_id_tracks_id_fk", 65 + "tableFrom": "album_tracks", 66 + "tableTo": "tracks", 67 + "columnsFrom": [ 68 + "track_id" 69 + ], 70 + "columnsTo": [ 71 + "id" 72 + ], 73 + "onDelete": "no action", 74 + "onUpdate": "no action" 75 + } 76 + }, 77 + "compositePrimaryKeys": {}, 78 + "uniqueConstraints": {}, 79 + "checkConstraints": {} 80 + }, 81 + "albums": { 82 + "name": "albums", 83 + "columns": { 84 + "id": { 85 + "name": "id", 86 + "type": "text", 87 + "primaryKey": true, 88 + "notNull": true, 89 + "autoincrement": false 90 + }, 91 + "title": { 92 + "name": "title", 93 + "type": "text", 94 + "primaryKey": false, 95 + "notNull": true, 96 + "autoincrement": false 97 + }, 98 + "artist": { 99 + "name": "artist", 100 + "type": "text", 101 + "primaryKey": false, 102 + "notNull": true, 103 + "autoincrement": false 104 + }, 105 + "release_date": { 106 + "name": "release_date", 107 + "type": "text", 108 + "primaryKey": false, 109 + "notNull": false, 110 + "autoincrement": false 111 + }, 112 + "year": { 113 + "name": "year", 114 + "type": "integer", 115 + "primaryKey": false, 116 + "notNull": false, 117 + "autoincrement": false 118 + }, 119 + "album_art": { 120 + "name": "album_art", 121 + "type": "text", 122 + "primaryKey": false, 123 + "notNull": false, 124 + "autoincrement": false 125 + }, 126 + "uri": { 127 + "name": "uri", 128 + "type": "text", 129 + "primaryKey": false, 130 + "notNull": false, 131 + "autoincrement": false 132 + }, 133 + "artist_uri": { 134 + "name": "artist_uri", 135 + "type": "text", 136 + "primaryKey": false, 137 + "notNull": false, 138 + "autoincrement": false 139 + }, 140 + "apple_music_link": { 141 + "name": "apple_music_link", 142 + "type": "text", 143 + "primaryKey": false, 144 + "notNull": false, 145 + "autoincrement": false 146 + }, 147 + "spotify_link": { 148 + "name": "spotify_link", 149 + "type": "text", 150 + "primaryKey": false, 151 + "notNull": false, 152 + "autoincrement": false 153 + }, 154 + "tidal_link": { 155 + "name": "tidal_link", 156 + "type": "text", 157 + "primaryKey": false, 158 + "notNull": false, 159 + "autoincrement": false 160 + }, 161 + "youtube_link": { 162 + "name": "youtube_link", 163 + "type": "text", 164 + "primaryKey": false, 165 + "notNull": false, 166 + "autoincrement": false 167 + }, 168 + "sha256": { 169 + "name": "sha256", 170 + "type": "text", 171 + "primaryKey": false, 172 + "notNull": true, 173 + "autoincrement": false 174 + }, 175 + "created_at": { 176 + "name": "created_at", 177 + "type": "integer", 178 + "primaryKey": false, 179 + "notNull": true, 180 + "autoincrement": false, 181 + "default": "CURRENT_TIMESTAMP" 182 + }, 183 + "updated_at": { 184 + "name": "updated_at", 185 + "type": "integer", 186 + "primaryKey": false, 187 + "notNull": true, 188 + "autoincrement": false, 189 + "default": "CURRENT_TIMESTAMP" 190 + } 191 + }, 192 + "indexes": { 193 + "albums_uri_unique": { 194 + "name": "albums_uri_unique", 195 + "columns": [ 196 + "uri" 197 + ], 198 + "isUnique": true 199 + }, 200 + "albums_apple_music_link_unique": { 201 + "name": "albums_apple_music_link_unique", 202 + "columns": [ 203 + "apple_music_link" 204 + ], 205 + "isUnique": true 206 + }, 207 + "albums_spotify_link_unique": { 208 + "name": "albums_spotify_link_unique", 209 + "columns": [ 210 + "spotify_link" 211 + ], 212 + "isUnique": true 213 + }, 214 + "albums_tidal_link_unique": { 215 + "name": "albums_tidal_link_unique", 216 + "columns": [ 217 + "tidal_link" 218 + ], 219 + "isUnique": true 220 + }, 221 + "albums_youtube_link_unique": { 222 + "name": "albums_youtube_link_unique", 223 + "columns": [ 224 + "youtube_link" 225 + ], 226 + "isUnique": true 227 + }, 228 + "albums_sha256_unique": { 229 + "name": "albums_sha256_unique", 230 + "columns": [ 231 + "sha256" 232 + ], 233 + "isUnique": true 234 + } 235 + }, 236 + "foreignKeys": {}, 237 + "compositePrimaryKeys": {}, 238 + "uniqueConstraints": {}, 239 + "checkConstraints": {} 240 + }, 241 + "artist_albums": { 242 + "name": "artist_albums", 243 + "columns": { 244 + "id": { 245 + "name": "id", 246 + "type": "text", 247 + "primaryKey": true, 248 + "notNull": true, 249 + "autoincrement": false 250 + }, 251 + "artist_id": { 252 + "name": "artist_id", 253 + "type": "text", 254 + "primaryKey": false, 255 + "notNull": true, 256 + "autoincrement": false 257 + }, 258 + "album_id": { 259 + "name": "album_id", 260 + "type": "text", 261 + "primaryKey": false, 262 + "notNull": true, 263 + "autoincrement": false 264 + }, 265 + "created_at": { 266 + "name": "created_at", 267 + "type": "integer", 268 + "primaryKey": false, 269 + "notNull": true, 270 + "autoincrement": false, 271 + "default": "CURRENT_TIMESTAMP" 272 + }, 273 + "updated_at": { 274 + "name": "updated_at", 275 + "type": "integer", 276 + "primaryKey": false, 277 + "notNull": true, 278 + "autoincrement": false, 279 + "default": "CURRENT_TIMESTAMP" 280 + } 281 + }, 282 + "indexes": {}, 283 + "foreignKeys": { 284 + "artist_albums_artist_id_artists_id_fk": { 285 + "name": "artist_albums_artist_id_artists_id_fk", 286 + "tableFrom": "artist_albums", 287 + "tableTo": "artists", 288 + "columnsFrom": [ 289 + "artist_id" 290 + ], 291 + "columnsTo": [ 292 + "id" 293 + ], 294 + "onDelete": "no action", 295 + "onUpdate": "no action" 296 + }, 297 + "artist_albums_album_id_albums_id_fk": { 298 + "name": "artist_albums_album_id_albums_id_fk", 299 + "tableFrom": "artist_albums", 300 + "tableTo": "albums", 301 + "columnsFrom": [ 302 + "album_id" 303 + ], 304 + "columnsTo": [ 305 + "id" 306 + ], 307 + "onDelete": "no action", 308 + "onUpdate": "no action" 309 + } 310 + }, 311 + "compositePrimaryKeys": {}, 312 + "uniqueConstraints": {}, 313 + "checkConstraints": {} 314 + }, 315 + "artist_tracks": { 316 + "name": "artist_tracks", 317 + "columns": { 318 + "id": { 319 + "name": "id", 320 + "type": "text", 321 + "primaryKey": true, 322 + "notNull": true, 323 + "autoincrement": false 324 + }, 325 + "artist_id": { 326 + "name": "artist_id", 327 + "type": "text", 328 + "primaryKey": false, 329 + "notNull": true, 330 + "autoincrement": false 331 + }, 332 + "track_id": { 333 + "name": "track_id", 334 + "type": "text", 335 + "primaryKey": false, 336 + "notNull": true, 337 + "autoincrement": false 338 + }, 339 + "created_at": { 340 + "name": "created_at", 341 + "type": "integer", 342 + "primaryKey": false, 343 + "notNull": true, 344 + "autoincrement": false, 345 + "default": "CURRENT_TIMESTAMP" 346 + }, 347 + "updated_at": { 348 + "name": "updated_at", 349 + "type": "integer", 350 + "primaryKey": false, 351 + "notNull": true, 352 + "autoincrement": false, 353 + "default": "CURRENT_TIMESTAMP" 354 + } 355 + }, 356 + "indexes": {}, 357 + "foreignKeys": { 358 + "artist_tracks_artist_id_artists_id_fk": { 359 + "name": "artist_tracks_artist_id_artists_id_fk", 360 + "tableFrom": "artist_tracks", 361 + "tableTo": "artists", 362 + "columnsFrom": [ 363 + "artist_id" 364 + ], 365 + "columnsTo": [ 366 + "id" 367 + ], 368 + "onDelete": "no action", 369 + "onUpdate": "no action" 370 + }, 371 + "artist_tracks_track_id_tracks_id_fk": { 372 + "name": "artist_tracks_track_id_tracks_id_fk", 373 + "tableFrom": "artist_tracks", 374 + "tableTo": "tracks", 375 + "columnsFrom": [ 376 + "track_id" 377 + ], 378 + "columnsTo": [ 379 + "id" 380 + ], 381 + "onDelete": "no action", 382 + "onUpdate": "no action" 383 + } 384 + }, 385 + "compositePrimaryKeys": {}, 386 + "uniqueConstraints": {}, 387 + "checkConstraints": {} 388 + }, 389 + "artists": { 390 + "name": "artists", 391 + "columns": { 392 + "id": { 393 + "name": "id", 394 + "type": "text", 395 + "primaryKey": true, 396 + "notNull": true, 397 + "autoincrement": false 398 + }, 399 + "name": { 400 + "name": "name", 401 + "type": "text", 402 + "primaryKey": false, 403 + "notNull": true, 404 + "autoincrement": false 405 + }, 406 + "biography": { 407 + "name": "biography", 408 + "type": "text", 409 + "primaryKey": false, 410 + "notNull": false, 411 + "autoincrement": false 412 + }, 413 + "born": { 414 + "name": "born", 415 + "type": "integer", 416 + "primaryKey": false, 417 + "notNull": false, 418 + "autoincrement": false 419 + }, 420 + "born_in": { 421 + "name": "born_in", 422 + "type": "text", 423 + "primaryKey": false, 424 + "notNull": false, 425 + "autoincrement": false 426 + }, 427 + "died": { 428 + "name": "died", 429 + "type": "integer", 430 + "primaryKey": false, 431 + "notNull": false, 432 + "autoincrement": false 433 + }, 434 + "picture": { 435 + "name": "picture", 436 + "type": "text", 437 + "primaryKey": false, 438 + "notNull": false, 439 + "autoincrement": false 440 + }, 441 + "sha256": { 442 + "name": "sha256", 443 + "type": "text", 444 + "primaryKey": false, 445 + "notNull": true, 446 + "autoincrement": false 447 + }, 448 + "uri": { 449 + "name": "uri", 450 + "type": "text", 451 + "primaryKey": false, 452 + "notNull": false, 453 + "autoincrement": false 454 + }, 455 + "apple_music_link": { 456 + "name": "apple_music_link", 457 + "type": "text", 458 + "primaryKey": false, 459 + "notNull": false, 460 + "autoincrement": false 461 + }, 462 + "spotify_link": { 463 + "name": "spotify_link", 464 + "type": "text", 465 + "primaryKey": false, 466 + "notNull": false, 467 + "autoincrement": false 468 + }, 469 + "tidal_link": { 470 + "name": "tidal_link", 471 + "type": "text", 472 + "primaryKey": false, 473 + "notNull": false, 474 + "autoincrement": false 475 + }, 476 + "youtube_link": { 477 + "name": "youtube_link", 478 + "type": "text", 479 + "primaryKey": false, 480 + "notNull": false, 481 + "autoincrement": false 482 + }, 483 + "genres": { 484 + "name": "genres", 485 + "type": "text", 486 + "primaryKey": false, 487 + "notNull": false, 488 + "autoincrement": false 489 + }, 490 + "created_at": { 491 + "name": "created_at", 492 + "type": "integer", 493 + "primaryKey": false, 494 + "notNull": true, 495 + "autoincrement": false, 496 + "default": "CURRENT_TIMESTAMP" 497 + }, 498 + "updated_at": { 499 + "name": "updated_at", 500 + "type": "integer", 501 + "primaryKey": false, 502 + "notNull": true, 503 + "autoincrement": false, 504 + "default": "CURRENT_TIMESTAMP" 505 + } 506 + }, 507 + "indexes": { 508 + "artists_sha256_unique": { 509 + "name": "artists_sha256_unique", 510 + "columns": [ 511 + "sha256" 512 + ], 513 + "isUnique": true 514 + }, 515 + "artists_uri_unique": { 516 + "name": "artists_uri_unique", 517 + "columns": [ 518 + "uri" 519 + ], 520 + "isUnique": true 521 + } 522 + }, 523 + "foreignKeys": {}, 524 + "compositePrimaryKeys": {}, 525 + "uniqueConstraints": {}, 526 + "checkConstraints": {} 527 + }, 528 + "loved_tracks": { 529 + "name": "loved_tracks", 530 + "columns": { 531 + "id": { 532 + "name": "id", 533 + "type": "text", 534 + "primaryKey": true, 535 + "notNull": true, 536 + "autoincrement": false 537 + }, 538 + "user_id": { 539 + "name": "user_id", 540 + "type": "text", 541 + "primaryKey": false, 542 + "notNull": true, 543 + "autoincrement": false 544 + }, 545 + "track_id": { 546 + "name": "track_id", 547 + "type": "text", 548 + "primaryKey": false, 549 + "notNull": true, 550 + "autoincrement": false 551 + }, 552 + "uri": { 553 + "name": "uri", 554 + "type": "text", 555 + "primaryKey": false, 556 + "notNull": false, 557 + "autoincrement": false 558 + }, 559 + "created_at": { 560 + "name": "created_at", 561 + "type": "integer", 562 + "primaryKey": false, 563 + "notNull": true, 564 + "autoincrement": false, 565 + "default": "CURRENT_TIMESTAMP" 566 + } 567 + }, 568 + "indexes": { 569 + "loved_tracks_uri_unique": { 570 + "name": "loved_tracks_uri_unique", 571 + "columns": [ 572 + "uri" 573 + ], 574 + "isUnique": true 575 + } 576 + }, 577 + "foreignKeys": { 578 + "loved_tracks_user_id_users_id_fk": { 579 + "name": "loved_tracks_user_id_users_id_fk", 580 + "tableFrom": "loved_tracks", 581 + "tableTo": "users", 582 + "columnsFrom": [ 583 + "user_id" 584 + ], 585 + "columnsTo": [ 586 + "id" 587 + ], 588 + "onDelete": "no action", 589 + "onUpdate": "no action" 590 + }, 591 + "loved_tracks_track_id_tracks_id_fk": { 592 + "name": "loved_tracks_track_id_tracks_id_fk", 593 + "tableFrom": "loved_tracks", 594 + "tableTo": "tracks", 595 + "columnsFrom": [ 596 + "track_id" 597 + ], 598 + "columnsTo": [ 599 + "id" 600 + ], 601 + "onDelete": "no action", 602 + "onUpdate": "no action" 603 + } 604 + }, 605 + "compositePrimaryKeys": {}, 606 + "uniqueConstraints": {}, 607 + "checkConstraints": {} 608 + }, 609 + "tracks": { 610 + "name": "tracks", 611 + "columns": { 612 + "id": { 613 + "name": "id", 614 + "type": "text", 615 + "primaryKey": true, 616 + "notNull": true, 617 + "autoincrement": false 618 + }, 619 + "title": { 620 + "name": "title", 621 + "type": "text", 622 + "primaryKey": false, 623 + "notNull": true, 624 + "autoincrement": false 625 + }, 626 + "artist": { 627 + "name": "artist", 628 + "type": "text", 629 + "primaryKey": false, 630 + "notNull": true, 631 + "autoincrement": false 632 + }, 633 + "album_artist": { 634 + "name": "album_artist", 635 + "type": "text", 636 + "primaryKey": false, 637 + "notNull": true, 638 + "autoincrement": false 639 + }, 640 + "album_art": { 641 + "name": "album_art", 642 + "type": "text", 643 + "primaryKey": false, 644 + "notNull": false, 645 + "autoincrement": false 646 + }, 647 + "album": { 648 + "name": "album", 649 + "type": "text", 650 + "primaryKey": false, 651 + "notNull": true, 652 + "autoincrement": false 653 + }, 654 + "track_number": { 655 + "name": "track_number", 656 + "type": "integer", 657 + "primaryKey": false, 658 + "notNull": false, 659 + "autoincrement": false 660 + }, 661 + "duration": { 662 + "name": "duration", 663 + "type": "integer", 664 + "primaryKey": false, 665 + "notNull": true, 666 + "autoincrement": false 667 + }, 668 + "mb_id": { 669 + "name": "mb_id", 670 + "type": "text", 671 + "primaryKey": false, 672 + "notNull": false, 673 + "autoincrement": false 674 + }, 675 + "youtube_link": { 676 + "name": "youtube_link", 677 + "type": "text", 678 + "primaryKey": false, 679 + "notNull": false, 680 + "autoincrement": false 681 + }, 682 + "spotify_link": { 683 + "name": "spotify_link", 684 + "type": "text", 685 + "primaryKey": false, 686 + "notNull": false, 687 + "autoincrement": false 688 + }, 689 + "apple_music_link": { 690 + "name": "apple_music_link", 691 + "type": "text", 692 + "primaryKey": false, 693 + "notNull": false, 694 + "autoincrement": false 695 + }, 696 + "tidal_link": { 697 + "name": "tidal_link", 698 + "type": "text", 699 + "primaryKey": false, 700 + "notNull": false, 701 + "autoincrement": false 702 + }, 703 + "sha256": { 704 + "name": "sha256", 705 + "type": "text", 706 + "primaryKey": false, 707 + "notNull": true, 708 + "autoincrement": false 709 + }, 710 + "disc_number": { 711 + "name": "disc_number", 712 + "type": "integer", 713 + "primaryKey": false, 714 + "notNull": false, 715 + "autoincrement": false 716 + }, 717 + "lyrics": { 718 + "name": "lyrics", 719 + "type": "text", 720 + "primaryKey": false, 721 + "notNull": false, 722 + "autoincrement": false 723 + }, 724 + "composer": { 725 + "name": "composer", 726 + "type": "text", 727 + "primaryKey": false, 728 + "notNull": false, 729 + "autoincrement": false 730 + }, 731 + "genre": { 732 + "name": "genre", 733 + "type": "text", 734 + "primaryKey": false, 735 + "notNull": false, 736 + "autoincrement": false 737 + }, 738 + "label": { 739 + "name": "label", 740 + "type": "text", 741 + "primaryKey": false, 742 + "notNull": false, 743 + "autoincrement": false 744 + }, 745 + "copyright_message": { 746 + "name": "copyright_message", 747 + "type": "text", 748 + "primaryKey": false, 749 + "notNull": false, 750 + "autoincrement": false 751 + }, 752 + "uri": { 753 + "name": "uri", 754 + "type": "text", 755 + "primaryKey": false, 756 + "notNull": false, 757 + "autoincrement": false 758 + }, 759 + "album_uri": { 760 + "name": "album_uri", 761 + "type": "text", 762 + "primaryKey": false, 763 + "notNull": false, 764 + "autoincrement": false 765 + }, 766 + "artist_uri": { 767 + "name": "artist_uri", 768 + "type": "text", 769 + "primaryKey": false, 770 + "notNull": false, 771 + "autoincrement": false 772 + }, 773 + "created_at": { 774 + "name": "created_at", 775 + "type": "integer", 776 + "primaryKey": false, 777 + "notNull": true, 778 + "autoincrement": false, 779 + "default": "CURRENT_TIMESTAMP" 780 + }, 781 + "updated_at": { 782 + "name": "updated_at", 783 + "type": "integer", 784 + "primaryKey": false, 785 + "notNull": true, 786 + "autoincrement": false, 787 + "default": "CURRENT_TIMESTAMP" 788 + } 789 + }, 790 + "indexes": { 791 + "tracks_mb_id_unique": { 792 + "name": "tracks_mb_id_unique", 793 + "columns": [ 794 + "mb_id" 795 + ], 796 + "isUnique": true 797 + }, 798 + "tracks_youtube_link_unique": { 799 + "name": "tracks_youtube_link_unique", 800 + "columns": [ 801 + "youtube_link" 802 + ], 803 + "isUnique": true 804 + }, 805 + "tracks_spotify_link_unique": { 806 + "name": "tracks_spotify_link_unique", 807 + "columns": [ 808 + "spotify_link" 809 + ], 810 + "isUnique": true 811 + }, 812 + "tracks_apple_music_link_unique": { 813 + "name": "tracks_apple_music_link_unique", 814 + "columns": [ 815 + "apple_music_link" 816 + ], 817 + "isUnique": true 818 + }, 819 + "tracks_tidal_link_unique": { 820 + "name": "tracks_tidal_link_unique", 821 + "columns": [ 822 + "tidal_link" 823 + ], 824 + "isUnique": true 825 + }, 826 + "tracks_sha256_unique": { 827 + "name": "tracks_sha256_unique", 828 + "columns": [ 829 + "sha256" 830 + ], 831 + "isUnique": true 832 + }, 833 + "tracks_uri_unique": { 834 + "name": "tracks_uri_unique", 835 + "columns": [ 836 + "uri" 837 + ], 838 + "isUnique": true 839 + } 840 + }, 841 + "foreignKeys": {}, 842 + "compositePrimaryKeys": {}, 843 + "uniqueConstraints": {}, 844 + "checkConstraints": {} 845 + }, 846 + "user_albums": { 847 + "name": "user_albums", 848 + "columns": { 849 + "id": { 850 + "name": "id", 851 + "type": "text", 852 + "primaryKey": true, 853 + "notNull": true, 854 + "autoincrement": false 855 + }, 856 + "user_id": { 857 + "name": "user_id", 858 + "type": "text", 859 + "primaryKey": false, 860 + "notNull": true, 861 + "autoincrement": false 862 + }, 863 + "artist_id": { 864 + "name": "artist_id", 865 + "type": "text", 866 + "primaryKey": false, 867 + "notNull": true, 868 + "autoincrement": false 869 + }, 870 + "created_at": { 871 + "name": "created_at", 872 + "type": "integer", 873 + "primaryKey": false, 874 + "notNull": true, 875 + "autoincrement": false, 876 + "default": "CURRENT_TIMESTAMP" 877 + }, 878 + "updated_at": { 879 + "name": "updated_at", 880 + "type": "integer", 881 + "primaryKey": false, 882 + "notNull": true, 883 + "autoincrement": false, 884 + "default": "CURRENT_TIMESTAMP" 885 + }, 886 + "scrobbles": { 887 + "name": "scrobbles", 888 + "type": "integer", 889 + "primaryKey": false, 890 + "notNull": false, 891 + "autoincrement": false 892 + }, 893 + "uri": { 894 + "name": "uri", 895 + "type": "text", 896 + "primaryKey": false, 897 + "notNull": true, 898 + "autoincrement": false 899 + } 900 + }, 901 + "indexes": { 902 + "user_albums_uri_unique": { 903 + "name": "user_albums_uri_unique", 904 + "columns": [ 905 + "uri" 906 + ], 907 + "isUnique": true 908 + } 909 + }, 910 + "foreignKeys": { 911 + "user_albums_user_id_users_id_fk": { 912 + "name": "user_albums_user_id_users_id_fk", 913 + "tableFrom": "user_albums", 914 + "tableTo": "users", 915 + "columnsFrom": [ 916 + "user_id" 917 + ], 918 + "columnsTo": [ 919 + "id" 920 + ], 921 + "onDelete": "no action", 922 + "onUpdate": "no action" 923 + }, 924 + "user_albums_artist_id_artists_id_fk": { 925 + "name": "user_albums_artist_id_artists_id_fk", 926 + "tableFrom": "user_albums", 927 + "tableTo": "artists", 928 + "columnsFrom": [ 929 + "artist_id" 930 + ], 931 + "columnsTo": [ 932 + "id" 933 + ], 934 + "onDelete": "no action", 935 + "onUpdate": "no action" 936 + } 937 + }, 938 + "compositePrimaryKeys": {}, 939 + "uniqueConstraints": {}, 940 + "checkConstraints": {} 941 + }, 942 + "user_tracks": { 943 + "name": "user_tracks", 944 + "columns": { 945 + "id": { 946 + "name": "id", 947 + "type": "text", 948 + "primaryKey": true, 949 + "notNull": true, 950 + "autoincrement": false 951 + }, 952 + "user_id": { 953 + "name": "user_id", 954 + "type": "text", 955 + "primaryKey": false, 956 + "notNull": true, 957 + "autoincrement": false 958 + }, 959 + "track_id": { 960 + "name": "track_id", 961 + "type": "text", 962 + "primaryKey": false, 963 + "notNull": true, 964 + "autoincrement": false 965 + }, 966 + "created_at": { 967 + "name": "created_at", 968 + "type": "integer", 969 + "primaryKey": false, 970 + "notNull": true, 971 + "autoincrement": false, 972 + "default": "CURRENT_TIMESTAMP" 973 + }, 974 + "updated_at": { 975 + "name": "updated_at", 976 + "type": "integer", 977 + "primaryKey": false, 978 + "notNull": true, 979 + "autoincrement": false, 980 + "default": "CURRENT_TIMESTAMP" 981 + }, 982 + "scrobbles": { 983 + "name": "scrobbles", 984 + "type": "integer", 985 + "primaryKey": false, 986 + "notNull": false, 987 + "autoincrement": false 988 + }, 989 + "uri": { 990 + "name": "uri", 991 + "type": "text", 992 + "primaryKey": false, 993 + "notNull": true, 994 + "autoincrement": false 995 + } 996 + }, 997 + "indexes": { 998 + "user_tracks_uri_unique": { 999 + "name": "user_tracks_uri_unique", 1000 + "columns": [ 1001 + "uri" 1002 + ], 1003 + "isUnique": true 1004 + } 1005 + }, 1006 + "foreignKeys": { 1007 + "user_tracks_user_id_users_id_fk": { 1008 + "name": "user_tracks_user_id_users_id_fk", 1009 + "tableFrom": "user_tracks", 1010 + "tableTo": "users", 1011 + "columnsFrom": [ 1012 + "user_id" 1013 + ], 1014 + "columnsTo": [ 1015 + "id" 1016 + ], 1017 + "onDelete": "no action", 1018 + "onUpdate": "no action" 1019 + }, 1020 + "user_tracks_track_id_tracks_id_fk": { 1021 + "name": "user_tracks_track_id_tracks_id_fk", 1022 + "tableFrom": "user_tracks", 1023 + "tableTo": "tracks", 1024 + "columnsFrom": [ 1025 + "track_id" 1026 + ], 1027 + "columnsTo": [ 1028 + "id" 1029 + ], 1030 + "onDelete": "no action", 1031 + "onUpdate": "no action" 1032 + } 1033 + }, 1034 + "compositePrimaryKeys": {}, 1035 + "uniqueConstraints": {}, 1036 + "checkConstraints": {} 1037 + }, 1038 + "users": { 1039 + "name": "users", 1040 + "columns": { 1041 + "id": { 1042 + "name": "id", 1043 + "type": "text", 1044 + "primaryKey": true, 1045 + "notNull": true, 1046 + "autoincrement": false 1047 + }, 1048 + "did": { 1049 + "name": "did", 1050 + "type": "text", 1051 + "primaryKey": false, 1052 + "notNull": true, 1053 + "autoincrement": false 1054 + }, 1055 + "display_name": { 1056 + "name": "display_name", 1057 + "type": "text", 1058 + "primaryKey": false, 1059 + "notNull": false, 1060 + "autoincrement": false 1061 + }, 1062 + "handle": { 1063 + "name": "handle", 1064 + "type": "text", 1065 + "primaryKey": false, 1066 + "notNull": true, 1067 + "autoincrement": false 1068 + }, 1069 + "avatar": { 1070 + "name": "avatar", 1071 + "type": "text", 1072 + "primaryKey": false, 1073 + "notNull": true, 1074 + "autoincrement": false 1075 + }, 1076 + "created_at": { 1077 + "name": "created_at", 1078 + "type": "integer", 1079 + "primaryKey": false, 1080 + "notNull": true, 1081 + "autoincrement": false, 1082 + "default": "CURRENT_TIMESTAMP" 1083 + }, 1084 + "updated_at": { 1085 + "name": "updated_at", 1086 + "type": "integer", 1087 + "primaryKey": false, 1088 + "notNull": true, 1089 + "autoincrement": false, 1090 + "default": "CURRENT_TIMESTAMP" 1091 + } 1092 + }, 1093 + "indexes": { 1094 + "users_did_unique": { 1095 + "name": "users_did_unique", 1096 + "columns": [ 1097 + "did" 1098 + ], 1099 + "isUnique": true 1100 + }, 1101 + "users_handle_unique": { 1102 + "name": "users_handle_unique", 1103 + "columns": [ 1104 + "handle" 1105 + ], 1106 + "isUnique": true 1107 + } 1108 + }, 1109 + "foreignKeys": {}, 1110 + "compositePrimaryKeys": {}, 1111 + "uniqueConstraints": {}, 1112 + "checkConstraints": {} 1113 + } 1114 + }, 1115 + "views": {}, 1116 + "enums": {}, 1117 + "_meta": { 1118 + "schemas": {}, 1119 + "tables": {}, 1120 + "columns": {} 1121 + }, 1122 + "internal": { 1123 + "indexes": {} 1124 + } 1125 + }
+13
apps/cli/drizzle/meta/_journal.json
··· 1 + { 2 + "version": "7", 3 + "dialect": "sqlite", 4 + "entries": [ 5 + { 6 + "idx": 0, 7 + "version": "6", 8 + "when": 1767904137315, 9 + "tag": "0000_amazing_redwing", 10 + "breakpoints": true 11 + } 12 + ] 13 + }
+1
apps/cli/lexicons
··· 1 + ../api/lexicons
+18 -1
apps/cli/package.json
··· 8 8 "rocksky": "./dist/index.js" 9 9 }, 10 10 "scripts": { 11 + "lexgen": "lex gen-server ./src/lexicon ./lexicons/**/* ./lexicons/*", 11 12 "test": "echo \"Error: no test specified\" && exit 1", 12 13 "dev": "tsx ./src/index.ts", 13 14 "build": "pkgroll && chmod +x ./dist/index.js" ··· 22 23 "author": "Tsiry Sandratraina <tsiry.sndr@rocksky.app>", 23 24 "license": "Apache-2.0", 24 25 "dependencies": { 26 + "@atcute/jetstream": "^1.1.2", 27 + "@atproto/api": "^0.13.31", 28 + "@atproto/common": "^0.4.6", 29 + "@atproto/identity": "^0.4.5", 30 + "@atproto/jwk-jose": "0.1.5", 31 + "@atproto/lex-cli": "^0.5.6", 32 + "@atproto/lexicon": "^0.4.5", 33 + "@atproto/sync": "^0.1.11", 34 + "@atproto/syntax": "^0.3.1", 25 35 "@modelcontextprotocol/sdk": "^1.10.2", 36 + "@paralleldrive/cuid2": "^3.0.6", 37 + "@types/better-sqlite3": "^7.6.13", 26 38 "axios": "^1.8.4", 39 + "better-sqlite3": "^12.4.1", 27 40 "chalk": "^5.4.1", 28 41 "commander": "^13.1.0", 29 42 "cors": "^2.8.5", 30 43 "dayjs": "^1.11.13", 44 + "drizzle-kit": "^0.31.1", 45 + "drizzle-orm": "^0.45.1", 46 + "effect": "^3.19.14", 47 + "env-paths": "^3.0.0", 31 48 "express": "^5.1.0", 32 49 "md5": "^2.3.0", 33 50 "open": "^10.1.0", ··· 46 63 "import": "./dist/index.js" 47 64 } 48 65 } 49 - } 66 + }
+5
apps/cli/src/context.ts
··· 1 + import drizzle from "./drizzle"; 2 + 3 + export const context = { 4 + db: drizzle.db, 5 + };
+10
apps/cli/src/drizzle.ts
··· 1 + import { drizzle } from "drizzle-orm/better-sqlite3"; 2 + import envpaths from "env-paths"; 3 + import fs from "node:fs"; 4 + 5 + fs.mkdirSync(envpaths("rocksky", { suffix: "" }).data, { recursive: true }); 6 + const url = `${envpaths("rocksky", { suffix: "" }).data}/rocksky.sqlite`; 7 + 8 + const db = drizzle(url); 9 + 10 + export default { db };
apps/cli/src/jetstream.ts

This is a binary file and will not be displayed.

+1321
apps/cli/src/lexicon/index.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { 5 + createServer as createXrpcServer, 6 + Server as XrpcServer, 7 + Options as XrpcOptions, 8 + AuthVerifier, 9 + StreamAuthVerifier, 10 + } from '@atproto/xrpc-server' 11 + import { schemas } from './lexicons' 12 + import * as AppRockskyActorGetActorAlbums from './types/app/rocksky/actor/getActorAlbums' 13 + import * as AppRockskyActorGetActorArtists from './types/app/rocksky/actor/getActorArtists' 14 + import * as AppRockskyActorGetActorCompatibility from './types/app/rocksky/actor/getActorCompatibility' 15 + import * as AppRockskyActorGetActorLovedSongs from './types/app/rocksky/actor/getActorLovedSongs' 16 + import * as AppRockskyActorGetActorNeighbours from './types/app/rocksky/actor/getActorNeighbours' 17 + import * as AppRockskyActorGetActorPlaylists from './types/app/rocksky/actor/getActorPlaylists' 18 + import * as AppRockskyActorGetActorScrobbles from './types/app/rocksky/actor/getActorScrobbles' 19 + import * as AppRockskyActorGetActorSongs from './types/app/rocksky/actor/getActorSongs' 20 + import * as AppRockskyActorGetProfile from './types/app/rocksky/actor/getProfile' 21 + import * as AppRockskyAlbumGetAlbum from './types/app/rocksky/album/getAlbum' 22 + import * as AppRockskyAlbumGetAlbums from './types/app/rocksky/album/getAlbums' 23 + import * as AppRockskyAlbumGetAlbumTracks from './types/app/rocksky/album/getAlbumTracks' 24 + import * as AppRockskyApikeyCreateApikey from './types/app/rocksky/apikey/createApikey' 25 + import * as AppRockskyApikeyGetApikeys from './types/app/rocksky/apikey/getApikeys' 26 + import * as AppRockskyApikeyRemoveApikey from './types/app/rocksky/apikey/removeApikey' 27 + import * as AppRockskyApikeyUpdateApikey from './types/app/rocksky/apikey/updateApikey' 28 + import * as AppRockskyArtistGetArtist from './types/app/rocksky/artist/getArtist' 29 + import * as AppRockskyArtistGetArtistAlbums from './types/app/rocksky/artist/getArtistAlbums' 30 + import * as AppRockskyArtistGetArtistListeners from './types/app/rocksky/artist/getArtistListeners' 31 + import * as AppRockskyArtistGetArtists from './types/app/rocksky/artist/getArtists' 32 + import * as AppRockskyArtistGetArtistTracks from './types/app/rocksky/artist/getArtistTracks' 33 + import * as AppRockskyChartsGetScrobblesChart from './types/app/rocksky/charts/getScrobblesChart' 34 + import * as AppRockskyDropboxDownloadFile from './types/app/rocksky/dropbox/downloadFile' 35 + import * as AppRockskyDropboxGetFiles from './types/app/rocksky/dropbox/getFiles' 36 + import * as AppRockskyDropboxGetMetadata from './types/app/rocksky/dropbox/getMetadata' 37 + import * as AppRockskyDropboxGetTemporaryLink from './types/app/rocksky/dropbox/getTemporaryLink' 38 + import * as AppRockskyFeedDescribeFeedGenerator from './types/app/rocksky/feed/describeFeedGenerator' 39 + import * as AppRockskyFeedGetFeed from './types/app/rocksky/feed/getFeed' 40 + import * as AppRockskyFeedGetFeedGenerator from './types/app/rocksky/feed/getFeedGenerator' 41 + import * as AppRockskyFeedGetFeedGenerators from './types/app/rocksky/feed/getFeedGenerators' 42 + import * as AppRockskyFeedGetFeedSkeleton from './types/app/rocksky/feed/getFeedSkeleton' 43 + import * as AppRockskyFeedGetNowPlayings from './types/app/rocksky/feed/getNowPlayings' 44 + import * as AppRockskyFeedSearch from './types/app/rocksky/feed/search' 45 + import * as AppRockskyGoogledriveDownloadFile from './types/app/rocksky/googledrive/downloadFile' 46 + import * as AppRockskyGoogledriveGetFile from './types/app/rocksky/googledrive/getFile' 47 + import * as AppRockskyGoogledriveGetFiles from './types/app/rocksky/googledrive/getFiles' 48 + import * as AppRockskyGraphFollowAccount from './types/app/rocksky/graph/followAccount' 49 + import * as AppRockskyGraphGetFollowers from './types/app/rocksky/graph/getFollowers' 50 + import * as AppRockskyGraphGetFollows from './types/app/rocksky/graph/getFollows' 51 + import * as AppRockskyGraphGetKnownFollowers from './types/app/rocksky/graph/getKnownFollowers' 52 + import * as AppRockskyGraphUnfollowAccount from './types/app/rocksky/graph/unfollowAccount' 53 + import * as AppRockskyLikeDislikeShout from './types/app/rocksky/like/dislikeShout' 54 + import * as AppRockskyLikeDislikeSong from './types/app/rocksky/like/dislikeSong' 55 + import * as AppRockskyLikeLikeShout from './types/app/rocksky/like/likeShout' 56 + import * as AppRockskyLikeLikeSong from './types/app/rocksky/like/likeSong' 57 + import * as AppRockskyPlayerAddDirectoryToQueue from './types/app/rocksky/player/addDirectoryToQueue' 58 + import * as AppRockskyPlayerAddItemsToQueue from './types/app/rocksky/player/addItemsToQueue' 59 + import * as AppRockskyPlayerGetCurrentlyPlaying from './types/app/rocksky/player/getCurrentlyPlaying' 60 + import * as AppRockskyPlayerGetPlaybackQueue from './types/app/rocksky/player/getPlaybackQueue' 61 + import * as AppRockskyPlayerNext from './types/app/rocksky/player/next' 62 + import * as AppRockskyPlayerPause from './types/app/rocksky/player/pause' 63 + import * as AppRockskyPlayerPlay from './types/app/rocksky/player/play' 64 + import * as AppRockskyPlayerPlayDirectory from './types/app/rocksky/player/playDirectory' 65 + import * as AppRockskyPlayerPlayFile from './types/app/rocksky/player/playFile' 66 + import * as AppRockskyPlayerPrevious from './types/app/rocksky/player/previous' 67 + import * as AppRockskyPlayerSeek from './types/app/rocksky/player/seek' 68 + import * as AppRockskyPlaylistCreatePlaylist from './types/app/rocksky/playlist/createPlaylist' 69 + import * as AppRockskyPlaylistGetPlaylist from './types/app/rocksky/playlist/getPlaylist' 70 + import * as AppRockskyPlaylistGetPlaylists from './types/app/rocksky/playlist/getPlaylists' 71 + import * as AppRockskyPlaylistInsertDirectory from './types/app/rocksky/playlist/insertDirectory' 72 + import * as AppRockskyPlaylistInsertFiles from './types/app/rocksky/playlist/insertFiles' 73 + import * as AppRockskyPlaylistRemovePlaylist from './types/app/rocksky/playlist/removePlaylist' 74 + import * as AppRockskyPlaylistRemoveTrack from './types/app/rocksky/playlist/removeTrack' 75 + import * as AppRockskyPlaylistStartPlaylist from './types/app/rocksky/playlist/startPlaylist' 76 + import * as AppRockskyScrobbleCreateScrobble from './types/app/rocksky/scrobble/createScrobble' 77 + import * as AppRockskyScrobbleGetScrobble from './types/app/rocksky/scrobble/getScrobble' 78 + import * as AppRockskyScrobbleGetScrobbles from './types/app/rocksky/scrobble/getScrobbles' 79 + import * as AppRockskyShoutCreateShout from './types/app/rocksky/shout/createShout' 80 + import * as AppRockskyShoutGetAlbumShouts from './types/app/rocksky/shout/getAlbumShouts' 81 + import * as AppRockskyShoutGetArtistShouts from './types/app/rocksky/shout/getArtistShouts' 82 + import * as AppRockskyShoutGetProfileShouts from './types/app/rocksky/shout/getProfileShouts' 83 + import * as AppRockskyShoutGetShoutReplies from './types/app/rocksky/shout/getShoutReplies' 84 + import * as AppRockskyShoutGetTrackShouts from './types/app/rocksky/shout/getTrackShouts' 85 + import * as AppRockskyShoutRemoveShout from './types/app/rocksky/shout/removeShout' 86 + import * as AppRockskyShoutReplyShout from './types/app/rocksky/shout/replyShout' 87 + import * as AppRockskyShoutReportShout from './types/app/rocksky/shout/reportShout' 88 + import * as AppRockskySongCreateSong from './types/app/rocksky/song/createSong' 89 + import * as AppRockskySongGetSong from './types/app/rocksky/song/getSong' 90 + import * as AppRockskySongGetSongs from './types/app/rocksky/song/getSongs' 91 + import * as AppRockskySpotifyGetCurrentlyPlaying from './types/app/rocksky/spotify/getCurrentlyPlaying' 92 + import * as AppRockskySpotifyNext from './types/app/rocksky/spotify/next' 93 + import * as AppRockskySpotifyPause from './types/app/rocksky/spotify/pause' 94 + import * as AppRockskySpotifyPlay from './types/app/rocksky/spotify/play' 95 + import * as AppRockskySpotifyPrevious from './types/app/rocksky/spotify/previous' 96 + import * as AppRockskySpotifySeek from './types/app/rocksky/spotify/seek' 97 + import * as AppRockskyStatsGetStats from './types/app/rocksky/stats/getStats' 98 + 99 + export function createServer(options?: XrpcOptions): Server { 100 + return new Server(options) 101 + } 102 + 103 + export class Server { 104 + xrpc: XrpcServer 105 + app: AppNS 106 + com: ComNS 107 + 108 + constructor(options?: XrpcOptions) { 109 + this.xrpc = createXrpcServer(schemas, options) 110 + this.app = new AppNS(this) 111 + this.com = new ComNS(this) 112 + } 113 + } 114 + 115 + export class AppNS { 116 + _server: Server 117 + rocksky: AppRockskyNS 118 + bsky: AppBskyNS 119 + 120 + constructor(server: Server) { 121 + this._server = server 122 + this.rocksky = new AppRockskyNS(server) 123 + this.bsky = new AppBskyNS(server) 124 + } 125 + } 126 + 127 + export class AppRockskyNS { 128 + _server: Server 129 + actor: AppRockskyActorNS 130 + album: AppRockskyAlbumNS 131 + apikey: AppRockskyApikeyNS 132 + artist: AppRockskyArtistNS 133 + charts: AppRockskyChartsNS 134 + dropbox: AppRockskyDropboxNS 135 + feed: AppRockskyFeedNS 136 + googledrive: AppRockskyGoogledriveNS 137 + graph: AppRockskyGraphNS 138 + like: AppRockskyLikeNS 139 + player: AppRockskyPlayerNS 140 + playlist: AppRockskyPlaylistNS 141 + scrobble: AppRockskyScrobbleNS 142 + shout: AppRockskyShoutNS 143 + song: AppRockskySongNS 144 + spotify: AppRockskySpotifyNS 145 + stats: AppRockskyStatsNS 146 + 147 + constructor(server: Server) { 148 + this._server = server 149 + this.actor = new AppRockskyActorNS(server) 150 + this.album = new AppRockskyAlbumNS(server) 151 + this.apikey = new AppRockskyApikeyNS(server) 152 + this.artist = new AppRockskyArtistNS(server) 153 + this.charts = new AppRockskyChartsNS(server) 154 + this.dropbox = new AppRockskyDropboxNS(server) 155 + this.feed = new AppRockskyFeedNS(server) 156 + this.googledrive = new AppRockskyGoogledriveNS(server) 157 + this.graph = new AppRockskyGraphNS(server) 158 + this.like = new AppRockskyLikeNS(server) 159 + this.player = new AppRockskyPlayerNS(server) 160 + this.playlist = new AppRockskyPlaylistNS(server) 161 + this.scrobble = new AppRockskyScrobbleNS(server) 162 + this.shout = new AppRockskyShoutNS(server) 163 + this.song = new AppRockskySongNS(server) 164 + this.spotify = new AppRockskySpotifyNS(server) 165 + this.stats = new AppRockskyStatsNS(server) 166 + } 167 + } 168 + 169 + export class AppRockskyActorNS { 170 + _server: Server 171 + 172 + constructor(server: Server) { 173 + this._server = server 174 + } 175 + 176 + getActorAlbums<AV extends AuthVerifier>( 177 + cfg: ConfigOf< 178 + AV, 179 + AppRockskyActorGetActorAlbums.Handler<ExtractAuth<AV>>, 180 + AppRockskyActorGetActorAlbums.HandlerReqCtx<ExtractAuth<AV>> 181 + >, 182 + ) { 183 + const nsid = 'app.rocksky.actor.getActorAlbums' // @ts-ignore 184 + return this._server.xrpc.method(nsid, cfg) 185 + } 186 + 187 + getActorArtists<AV extends AuthVerifier>( 188 + cfg: ConfigOf< 189 + AV, 190 + AppRockskyActorGetActorArtists.Handler<ExtractAuth<AV>>, 191 + AppRockskyActorGetActorArtists.HandlerReqCtx<ExtractAuth<AV>> 192 + >, 193 + ) { 194 + const nsid = 'app.rocksky.actor.getActorArtists' // @ts-ignore 195 + return this._server.xrpc.method(nsid, cfg) 196 + } 197 + 198 + getActorCompatibility<AV extends AuthVerifier>( 199 + cfg: ConfigOf< 200 + AV, 201 + AppRockskyActorGetActorCompatibility.Handler<ExtractAuth<AV>>, 202 + AppRockskyActorGetActorCompatibility.HandlerReqCtx<ExtractAuth<AV>> 203 + >, 204 + ) { 205 + const nsid = 'app.rocksky.actor.getActorCompatibility' // @ts-ignore 206 + return this._server.xrpc.method(nsid, cfg) 207 + } 208 + 209 + getActorLovedSongs<AV extends AuthVerifier>( 210 + cfg: ConfigOf< 211 + AV, 212 + AppRockskyActorGetActorLovedSongs.Handler<ExtractAuth<AV>>, 213 + AppRockskyActorGetActorLovedSongs.HandlerReqCtx<ExtractAuth<AV>> 214 + >, 215 + ) { 216 + const nsid = 'app.rocksky.actor.getActorLovedSongs' // @ts-ignore 217 + return this._server.xrpc.method(nsid, cfg) 218 + } 219 + 220 + getActorNeighbours<AV extends AuthVerifier>( 221 + cfg: ConfigOf< 222 + AV, 223 + AppRockskyActorGetActorNeighbours.Handler<ExtractAuth<AV>>, 224 + AppRockskyActorGetActorNeighbours.HandlerReqCtx<ExtractAuth<AV>> 225 + >, 226 + ) { 227 + const nsid = 'app.rocksky.actor.getActorNeighbours' // @ts-ignore 228 + return this._server.xrpc.method(nsid, cfg) 229 + } 230 + 231 + getActorPlaylists<AV extends AuthVerifier>( 232 + cfg: ConfigOf< 233 + AV, 234 + AppRockskyActorGetActorPlaylists.Handler<ExtractAuth<AV>>, 235 + AppRockskyActorGetActorPlaylists.HandlerReqCtx<ExtractAuth<AV>> 236 + >, 237 + ) { 238 + const nsid = 'app.rocksky.actor.getActorPlaylists' // @ts-ignore 239 + return this._server.xrpc.method(nsid, cfg) 240 + } 241 + 242 + getActorScrobbles<AV extends AuthVerifier>( 243 + cfg: ConfigOf< 244 + AV, 245 + AppRockskyActorGetActorScrobbles.Handler<ExtractAuth<AV>>, 246 + AppRockskyActorGetActorScrobbles.HandlerReqCtx<ExtractAuth<AV>> 247 + >, 248 + ) { 249 + const nsid = 'app.rocksky.actor.getActorScrobbles' // @ts-ignore 250 + return this._server.xrpc.method(nsid, cfg) 251 + } 252 + 253 + getActorSongs<AV extends AuthVerifier>( 254 + cfg: ConfigOf< 255 + AV, 256 + AppRockskyActorGetActorSongs.Handler<ExtractAuth<AV>>, 257 + AppRockskyActorGetActorSongs.HandlerReqCtx<ExtractAuth<AV>> 258 + >, 259 + ) { 260 + const nsid = 'app.rocksky.actor.getActorSongs' // @ts-ignore 261 + return this._server.xrpc.method(nsid, cfg) 262 + } 263 + 264 + getProfile<AV extends AuthVerifier>( 265 + cfg: ConfigOf< 266 + AV, 267 + AppRockskyActorGetProfile.Handler<ExtractAuth<AV>>, 268 + AppRockskyActorGetProfile.HandlerReqCtx<ExtractAuth<AV>> 269 + >, 270 + ) { 271 + const nsid = 'app.rocksky.actor.getProfile' // @ts-ignore 272 + return this._server.xrpc.method(nsid, cfg) 273 + } 274 + } 275 + 276 + export class AppRockskyAlbumNS { 277 + _server: Server 278 + 279 + constructor(server: Server) { 280 + this._server = server 281 + } 282 + 283 + getAlbum<AV extends AuthVerifier>( 284 + cfg: ConfigOf< 285 + AV, 286 + AppRockskyAlbumGetAlbum.Handler<ExtractAuth<AV>>, 287 + AppRockskyAlbumGetAlbum.HandlerReqCtx<ExtractAuth<AV>> 288 + >, 289 + ) { 290 + const nsid = 'app.rocksky.album.getAlbum' // @ts-ignore 291 + return this._server.xrpc.method(nsid, cfg) 292 + } 293 + 294 + getAlbums<AV extends AuthVerifier>( 295 + cfg: ConfigOf< 296 + AV, 297 + AppRockskyAlbumGetAlbums.Handler<ExtractAuth<AV>>, 298 + AppRockskyAlbumGetAlbums.HandlerReqCtx<ExtractAuth<AV>> 299 + >, 300 + ) { 301 + const nsid = 'app.rocksky.album.getAlbums' // @ts-ignore 302 + return this._server.xrpc.method(nsid, cfg) 303 + } 304 + 305 + getAlbumTracks<AV extends AuthVerifier>( 306 + cfg: ConfigOf< 307 + AV, 308 + AppRockskyAlbumGetAlbumTracks.Handler<ExtractAuth<AV>>, 309 + AppRockskyAlbumGetAlbumTracks.HandlerReqCtx<ExtractAuth<AV>> 310 + >, 311 + ) { 312 + const nsid = 'app.rocksky.album.getAlbumTracks' // @ts-ignore 313 + return this._server.xrpc.method(nsid, cfg) 314 + } 315 + } 316 + 317 + export class AppRockskyApikeyNS { 318 + _server: Server 319 + 320 + constructor(server: Server) { 321 + this._server = server 322 + } 323 + 324 + createApikey<AV extends AuthVerifier>( 325 + cfg: ConfigOf< 326 + AV, 327 + AppRockskyApikeyCreateApikey.Handler<ExtractAuth<AV>>, 328 + AppRockskyApikeyCreateApikey.HandlerReqCtx<ExtractAuth<AV>> 329 + >, 330 + ) { 331 + const nsid = 'app.rocksky.apikey.createApikey' // @ts-ignore 332 + return this._server.xrpc.method(nsid, cfg) 333 + } 334 + 335 + getApikeys<AV extends AuthVerifier>( 336 + cfg: ConfigOf< 337 + AV, 338 + AppRockskyApikeyGetApikeys.Handler<ExtractAuth<AV>>, 339 + AppRockskyApikeyGetApikeys.HandlerReqCtx<ExtractAuth<AV>> 340 + >, 341 + ) { 342 + const nsid = 'app.rocksky.apikey.getApikeys' // @ts-ignore 343 + return this._server.xrpc.method(nsid, cfg) 344 + } 345 + 346 + removeApikey<AV extends AuthVerifier>( 347 + cfg: ConfigOf< 348 + AV, 349 + AppRockskyApikeyRemoveApikey.Handler<ExtractAuth<AV>>, 350 + AppRockskyApikeyRemoveApikey.HandlerReqCtx<ExtractAuth<AV>> 351 + >, 352 + ) { 353 + const nsid = 'app.rocksky.apikey.removeApikey' // @ts-ignore 354 + return this._server.xrpc.method(nsid, cfg) 355 + } 356 + 357 + updateApikey<AV extends AuthVerifier>( 358 + cfg: ConfigOf< 359 + AV, 360 + AppRockskyApikeyUpdateApikey.Handler<ExtractAuth<AV>>, 361 + AppRockskyApikeyUpdateApikey.HandlerReqCtx<ExtractAuth<AV>> 362 + >, 363 + ) { 364 + const nsid = 'app.rocksky.apikey.updateApikey' // @ts-ignore 365 + return this._server.xrpc.method(nsid, cfg) 366 + } 367 + } 368 + 369 + export class AppRockskyArtistNS { 370 + _server: Server 371 + 372 + constructor(server: Server) { 373 + this._server = server 374 + } 375 + 376 + getArtist<AV extends AuthVerifier>( 377 + cfg: ConfigOf< 378 + AV, 379 + AppRockskyArtistGetArtist.Handler<ExtractAuth<AV>>, 380 + AppRockskyArtistGetArtist.HandlerReqCtx<ExtractAuth<AV>> 381 + >, 382 + ) { 383 + const nsid = 'app.rocksky.artist.getArtist' // @ts-ignore 384 + return this._server.xrpc.method(nsid, cfg) 385 + } 386 + 387 + getArtistAlbums<AV extends AuthVerifier>( 388 + cfg: ConfigOf< 389 + AV, 390 + AppRockskyArtistGetArtistAlbums.Handler<ExtractAuth<AV>>, 391 + AppRockskyArtistGetArtistAlbums.HandlerReqCtx<ExtractAuth<AV>> 392 + >, 393 + ) { 394 + const nsid = 'app.rocksky.artist.getArtistAlbums' // @ts-ignore 395 + return this._server.xrpc.method(nsid, cfg) 396 + } 397 + 398 + getArtistListeners<AV extends AuthVerifier>( 399 + cfg: ConfigOf< 400 + AV, 401 + AppRockskyArtistGetArtistListeners.Handler<ExtractAuth<AV>>, 402 + AppRockskyArtistGetArtistListeners.HandlerReqCtx<ExtractAuth<AV>> 403 + >, 404 + ) { 405 + const nsid = 'app.rocksky.artist.getArtistListeners' // @ts-ignore 406 + return this._server.xrpc.method(nsid, cfg) 407 + } 408 + 409 + getArtists<AV extends AuthVerifier>( 410 + cfg: ConfigOf< 411 + AV, 412 + AppRockskyArtistGetArtists.Handler<ExtractAuth<AV>>, 413 + AppRockskyArtistGetArtists.HandlerReqCtx<ExtractAuth<AV>> 414 + >, 415 + ) { 416 + const nsid = 'app.rocksky.artist.getArtists' // @ts-ignore 417 + return this._server.xrpc.method(nsid, cfg) 418 + } 419 + 420 + getArtistTracks<AV extends AuthVerifier>( 421 + cfg: ConfigOf< 422 + AV, 423 + AppRockskyArtistGetArtistTracks.Handler<ExtractAuth<AV>>, 424 + AppRockskyArtistGetArtistTracks.HandlerReqCtx<ExtractAuth<AV>> 425 + >, 426 + ) { 427 + const nsid = 'app.rocksky.artist.getArtistTracks' // @ts-ignore 428 + return this._server.xrpc.method(nsid, cfg) 429 + } 430 + } 431 + 432 + export class AppRockskyChartsNS { 433 + _server: Server 434 + 435 + constructor(server: Server) { 436 + this._server = server 437 + } 438 + 439 + getScrobblesChart<AV extends AuthVerifier>( 440 + cfg: ConfigOf< 441 + AV, 442 + AppRockskyChartsGetScrobblesChart.Handler<ExtractAuth<AV>>, 443 + AppRockskyChartsGetScrobblesChart.HandlerReqCtx<ExtractAuth<AV>> 444 + >, 445 + ) { 446 + const nsid = 'app.rocksky.charts.getScrobblesChart' // @ts-ignore 447 + return this._server.xrpc.method(nsid, cfg) 448 + } 449 + } 450 + 451 + export class AppRockskyDropboxNS { 452 + _server: Server 453 + 454 + constructor(server: Server) { 455 + this._server = server 456 + } 457 + 458 + downloadFile<AV extends AuthVerifier>( 459 + cfg: ConfigOf< 460 + AV, 461 + AppRockskyDropboxDownloadFile.Handler<ExtractAuth<AV>>, 462 + AppRockskyDropboxDownloadFile.HandlerReqCtx<ExtractAuth<AV>> 463 + >, 464 + ) { 465 + const nsid = 'app.rocksky.dropbox.downloadFile' // @ts-ignore 466 + return this._server.xrpc.method(nsid, cfg) 467 + } 468 + 469 + getFiles<AV extends AuthVerifier>( 470 + cfg: ConfigOf< 471 + AV, 472 + AppRockskyDropboxGetFiles.Handler<ExtractAuth<AV>>, 473 + AppRockskyDropboxGetFiles.HandlerReqCtx<ExtractAuth<AV>> 474 + >, 475 + ) { 476 + const nsid = 'app.rocksky.dropbox.getFiles' // @ts-ignore 477 + return this._server.xrpc.method(nsid, cfg) 478 + } 479 + 480 + getMetadata<AV extends AuthVerifier>( 481 + cfg: ConfigOf< 482 + AV, 483 + AppRockskyDropboxGetMetadata.Handler<ExtractAuth<AV>>, 484 + AppRockskyDropboxGetMetadata.HandlerReqCtx<ExtractAuth<AV>> 485 + >, 486 + ) { 487 + const nsid = 'app.rocksky.dropbox.getMetadata' // @ts-ignore 488 + return this._server.xrpc.method(nsid, cfg) 489 + } 490 + 491 + getTemporaryLink<AV extends AuthVerifier>( 492 + cfg: ConfigOf< 493 + AV, 494 + AppRockskyDropboxGetTemporaryLink.Handler<ExtractAuth<AV>>, 495 + AppRockskyDropboxGetTemporaryLink.HandlerReqCtx<ExtractAuth<AV>> 496 + >, 497 + ) { 498 + const nsid = 'app.rocksky.dropbox.getTemporaryLink' // @ts-ignore 499 + return this._server.xrpc.method(nsid, cfg) 500 + } 501 + } 502 + 503 + export class AppRockskyFeedNS { 504 + _server: Server 505 + 506 + constructor(server: Server) { 507 + this._server = server 508 + } 509 + 510 + describeFeedGenerator<AV extends AuthVerifier>( 511 + cfg: ConfigOf< 512 + AV, 513 + AppRockskyFeedDescribeFeedGenerator.Handler<ExtractAuth<AV>>, 514 + AppRockskyFeedDescribeFeedGenerator.HandlerReqCtx<ExtractAuth<AV>> 515 + >, 516 + ) { 517 + const nsid = 'app.rocksky.feed.describeFeedGenerator' // @ts-ignore 518 + return this._server.xrpc.method(nsid, cfg) 519 + } 520 + 521 + getFeed<AV extends AuthVerifier>( 522 + cfg: ConfigOf< 523 + AV, 524 + AppRockskyFeedGetFeed.Handler<ExtractAuth<AV>>, 525 + AppRockskyFeedGetFeed.HandlerReqCtx<ExtractAuth<AV>> 526 + >, 527 + ) { 528 + const nsid = 'app.rocksky.feed.getFeed' // @ts-ignore 529 + return this._server.xrpc.method(nsid, cfg) 530 + } 531 + 532 + getFeedGenerator<AV extends AuthVerifier>( 533 + cfg: ConfigOf< 534 + AV, 535 + AppRockskyFeedGetFeedGenerator.Handler<ExtractAuth<AV>>, 536 + AppRockskyFeedGetFeedGenerator.HandlerReqCtx<ExtractAuth<AV>> 537 + >, 538 + ) { 539 + const nsid = 'app.rocksky.feed.getFeedGenerator' // @ts-ignore 540 + return this._server.xrpc.method(nsid, cfg) 541 + } 542 + 543 + getFeedGenerators<AV extends AuthVerifier>( 544 + cfg: ConfigOf< 545 + AV, 546 + AppRockskyFeedGetFeedGenerators.Handler<ExtractAuth<AV>>, 547 + AppRockskyFeedGetFeedGenerators.HandlerReqCtx<ExtractAuth<AV>> 548 + >, 549 + ) { 550 + const nsid = 'app.rocksky.feed.getFeedGenerators' // @ts-ignore 551 + return this._server.xrpc.method(nsid, cfg) 552 + } 553 + 554 + getFeedSkeleton<AV extends AuthVerifier>( 555 + cfg: ConfigOf< 556 + AV, 557 + AppRockskyFeedGetFeedSkeleton.Handler<ExtractAuth<AV>>, 558 + AppRockskyFeedGetFeedSkeleton.HandlerReqCtx<ExtractAuth<AV>> 559 + >, 560 + ) { 561 + const nsid = 'app.rocksky.feed.getFeedSkeleton' // @ts-ignore 562 + return this._server.xrpc.method(nsid, cfg) 563 + } 564 + 565 + getNowPlayings<AV extends AuthVerifier>( 566 + cfg: ConfigOf< 567 + AV, 568 + AppRockskyFeedGetNowPlayings.Handler<ExtractAuth<AV>>, 569 + AppRockskyFeedGetNowPlayings.HandlerReqCtx<ExtractAuth<AV>> 570 + >, 571 + ) { 572 + const nsid = 'app.rocksky.feed.getNowPlayings' // @ts-ignore 573 + return this._server.xrpc.method(nsid, cfg) 574 + } 575 + 576 + search<AV extends AuthVerifier>( 577 + cfg: ConfigOf< 578 + AV, 579 + AppRockskyFeedSearch.Handler<ExtractAuth<AV>>, 580 + AppRockskyFeedSearch.HandlerReqCtx<ExtractAuth<AV>> 581 + >, 582 + ) { 583 + const nsid = 'app.rocksky.feed.search' // @ts-ignore 584 + return this._server.xrpc.method(nsid, cfg) 585 + } 586 + } 587 + 588 + export class AppRockskyGoogledriveNS { 589 + _server: Server 590 + 591 + constructor(server: Server) { 592 + this._server = server 593 + } 594 + 595 + downloadFile<AV extends AuthVerifier>( 596 + cfg: ConfigOf< 597 + AV, 598 + AppRockskyGoogledriveDownloadFile.Handler<ExtractAuth<AV>>, 599 + AppRockskyGoogledriveDownloadFile.HandlerReqCtx<ExtractAuth<AV>> 600 + >, 601 + ) { 602 + const nsid = 'app.rocksky.googledrive.downloadFile' // @ts-ignore 603 + return this._server.xrpc.method(nsid, cfg) 604 + } 605 + 606 + getFile<AV extends AuthVerifier>( 607 + cfg: ConfigOf< 608 + AV, 609 + AppRockskyGoogledriveGetFile.Handler<ExtractAuth<AV>>, 610 + AppRockskyGoogledriveGetFile.HandlerReqCtx<ExtractAuth<AV>> 611 + >, 612 + ) { 613 + const nsid = 'app.rocksky.googledrive.getFile' // @ts-ignore 614 + return this._server.xrpc.method(nsid, cfg) 615 + } 616 + 617 + getFiles<AV extends AuthVerifier>( 618 + cfg: ConfigOf< 619 + AV, 620 + AppRockskyGoogledriveGetFiles.Handler<ExtractAuth<AV>>, 621 + AppRockskyGoogledriveGetFiles.HandlerReqCtx<ExtractAuth<AV>> 622 + >, 623 + ) { 624 + const nsid = 'app.rocksky.googledrive.getFiles' // @ts-ignore 625 + return this._server.xrpc.method(nsid, cfg) 626 + } 627 + } 628 + 629 + export class AppRockskyGraphNS { 630 + _server: Server 631 + 632 + constructor(server: Server) { 633 + this._server = server 634 + } 635 + 636 + followAccount<AV extends AuthVerifier>( 637 + cfg: ConfigOf< 638 + AV, 639 + AppRockskyGraphFollowAccount.Handler<ExtractAuth<AV>>, 640 + AppRockskyGraphFollowAccount.HandlerReqCtx<ExtractAuth<AV>> 641 + >, 642 + ) { 643 + const nsid = 'app.rocksky.graph.followAccount' // @ts-ignore 644 + return this._server.xrpc.method(nsid, cfg) 645 + } 646 + 647 + getFollowers<AV extends AuthVerifier>( 648 + cfg: ConfigOf< 649 + AV, 650 + AppRockskyGraphGetFollowers.Handler<ExtractAuth<AV>>, 651 + AppRockskyGraphGetFollowers.HandlerReqCtx<ExtractAuth<AV>> 652 + >, 653 + ) { 654 + const nsid = 'app.rocksky.graph.getFollowers' // @ts-ignore 655 + return this._server.xrpc.method(nsid, cfg) 656 + } 657 + 658 + getFollows<AV extends AuthVerifier>( 659 + cfg: ConfigOf< 660 + AV, 661 + AppRockskyGraphGetFollows.Handler<ExtractAuth<AV>>, 662 + AppRockskyGraphGetFollows.HandlerReqCtx<ExtractAuth<AV>> 663 + >, 664 + ) { 665 + const nsid = 'app.rocksky.graph.getFollows' // @ts-ignore 666 + return this._server.xrpc.method(nsid, cfg) 667 + } 668 + 669 + getKnownFollowers<AV extends AuthVerifier>( 670 + cfg: ConfigOf< 671 + AV, 672 + AppRockskyGraphGetKnownFollowers.Handler<ExtractAuth<AV>>, 673 + AppRockskyGraphGetKnownFollowers.HandlerReqCtx<ExtractAuth<AV>> 674 + >, 675 + ) { 676 + const nsid = 'app.rocksky.graph.getKnownFollowers' // @ts-ignore 677 + return this._server.xrpc.method(nsid, cfg) 678 + } 679 + 680 + unfollowAccount<AV extends AuthVerifier>( 681 + cfg: ConfigOf< 682 + AV, 683 + AppRockskyGraphUnfollowAccount.Handler<ExtractAuth<AV>>, 684 + AppRockskyGraphUnfollowAccount.HandlerReqCtx<ExtractAuth<AV>> 685 + >, 686 + ) { 687 + const nsid = 'app.rocksky.graph.unfollowAccount' // @ts-ignore 688 + return this._server.xrpc.method(nsid, cfg) 689 + } 690 + } 691 + 692 + export class AppRockskyLikeNS { 693 + _server: Server 694 + 695 + constructor(server: Server) { 696 + this._server = server 697 + } 698 + 699 + dislikeShout<AV extends AuthVerifier>( 700 + cfg: ConfigOf< 701 + AV, 702 + AppRockskyLikeDislikeShout.Handler<ExtractAuth<AV>>, 703 + AppRockskyLikeDislikeShout.HandlerReqCtx<ExtractAuth<AV>> 704 + >, 705 + ) { 706 + const nsid = 'app.rocksky.like.dislikeShout' // @ts-ignore 707 + return this._server.xrpc.method(nsid, cfg) 708 + } 709 + 710 + dislikeSong<AV extends AuthVerifier>( 711 + cfg: ConfigOf< 712 + AV, 713 + AppRockskyLikeDislikeSong.Handler<ExtractAuth<AV>>, 714 + AppRockskyLikeDislikeSong.HandlerReqCtx<ExtractAuth<AV>> 715 + >, 716 + ) { 717 + const nsid = 'app.rocksky.like.dislikeSong' // @ts-ignore 718 + return this._server.xrpc.method(nsid, cfg) 719 + } 720 + 721 + likeShout<AV extends AuthVerifier>( 722 + cfg: ConfigOf< 723 + AV, 724 + AppRockskyLikeLikeShout.Handler<ExtractAuth<AV>>, 725 + AppRockskyLikeLikeShout.HandlerReqCtx<ExtractAuth<AV>> 726 + >, 727 + ) { 728 + const nsid = 'app.rocksky.like.likeShout' // @ts-ignore 729 + return this._server.xrpc.method(nsid, cfg) 730 + } 731 + 732 + likeSong<AV extends AuthVerifier>( 733 + cfg: ConfigOf< 734 + AV, 735 + AppRockskyLikeLikeSong.Handler<ExtractAuth<AV>>, 736 + AppRockskyLikeLikeSong.HandlerReqCtx<ExtractAuth<AV>> 737 + >, 738 + ) { 739 + const nsid = 'app.rocksky.like.likeSong' // @ts-ignore 740 + return this._server.xrpc.method(nsid, cfg) 741 + } 742 + } 743 + 744 + export class AppRockskyPlayerNS { 745 + _server: Server 746 + 747 + constructor(server: Server) { 748 + this._server = server 749 + } 750 + 751 + addDirectoryToQueue<AV extends AuthVerifier>( 752 + cfg: ConfigOf< 753 + AV, 754 + AppRockskyPlayerAddDirectoryToQueue.Handler<ExtractAuth<AV>>, 755 + AppRockskyPlayerAddDirectoryToQueue.HandlerReqCtx<ExtractAuth<AV>> 756 + >, 757 + ) { 758 + const nsid = 'app.rocksky.player.addDirectoryToQueue' // @ts-ignore 759 + return this._server.xrpc.method(nsid, cfg) 760 + } 761 + 762 + addItemsToQueue<AV extends AuthVerifier>( 763 + cfg: ConfigOf< 764 + AV, 765 + AppRockskyPlayerAddItemsToQueue.Handler<ExtractAuth<AV>>, 766 + AppRockskyPlayerAddItemsToQueue.HandlerReqCtx<ExtractAuth<AV>> 767 + >, 768 + ) { 769 + const nsid = 'app.rocksky.player.addItemsToQueue' // @ts-ignore 770 + return this._server.xrpc.method(nsid, cfg) 771 + } 772 + 773 + getCurrentlyPlaying<AV extends AuthVerifier>( 774 + cfg: ConfigOf< 775 + AV, 776 + AppRockskyPlayerGetCurrentlyPlaying.Handler<ExtractAuth<AV>>, 777 + AppRockskyPlayerGetCurrentlyPlaying.HandlerReqCtx<ExtractAuth<AV>> 778 + >, 779 + ) { 780 + const nsid = 'app.rocksky.player.getCurrentlyPlaying' // @ts-ignore 781 + return this._server.xrpc.method(nsid, cfg) 782 + } 783 + 784 + getPlaybackQueue<AV extends AuthVerifier>( 785 + cfg: ConfigOf< 786 + AV, 787 + AppRockskyPlayerGetPlaybackQueue.Handler<ExtractAuth<AV>>, 788 + AppRockskyPlayerGetPlaybackQueue.HandlerReqCtx<ExtractAuth<AV>> 789 + >, 790 + ) { 791 + const nsid = 'app.rocksky.player.getPlaybackQueue' // @ts-ignore 792 + return this._server.xrpc.method(nsid, cfg) 793 + } 794 + 795 + next<AV extends AuthVerifier>( 796 + cfg: ConfigOf< 797 + AV, 798 + AppRockskyPlayerNext.Handler<ExtractAuth<AV>>, 799 + AppRockskyPlayerNext.HandlerReqCtx<ExtractAuth<AV>> 800 + >, 801 + ) { 802 + const nsid = 'app.rocksky.player.next' // @ts-ignore 803 + return this._server.xrpc.method(nsid, cfg) 804 + } 805 + 806 + pause<AV extends AuthVerifier>( 807 + cfg: ConfigOf< 808 + AV, 809 + AppRockskyPlayerPause.Handler<ExtractAuth<AV>>, 810 + AppRockskyPlayerPause.HandlerReqCtx<ExtractAuth<AV>> 811 + >, 812 + ) { 813 + const nsid = 'app.rocksky.player.pause' // @ts-ignore 814 + return this._server.xrpc.method(nsid, cfg) 815 + } 816 + 817 + play<AV extends AuthVerifier>( 818 + cfg: ConfigOf< 819 + AV, 820 + AppRockskyPlayerPlay.Handler<ExtractAuth<AV>>, 821 + AppRockskyPlayerPlay.HandlerReqCtx<ExtractAuth<AV>> 822 + >, 823 + ) { 824 + const nsid = 'app.rocksky.player.play' // @ts-ignore 825 + return this._server.xrpc.method(nsid, cfg) 826 + } 827 + 828 + playDirectory<AV extends AuthVerifier>( 829 + cfg: ConfigOf< 830 + AV, 831 + AppRockskyPlayerPlayDirectory.Handler<ExtractAuth<AV>>, 832 + AppRockskyPlayerPlayDirectory.HandlerReqCtx<ExtractAuth<AV>> 833 + >, 834 + ) { 835 + const nsid = 'app.rocksky.player.playDirectory' // @ts-ignore 836 + return this._server.xrpc.method(nsid, cfg) 837 + } 838 + 839 + playFile<AV extends AuthVerifier>( 840 + cfg: ConfigOf< 841 + AV, 842 + AppRockskyPlayerPlayFile.Handler<ExtractAuth<AV>>, 843 + AppRockskyPlayerPlayFile.HandlerReqCtx<ExtractAuth<AV>> 844 + >, 845 + ) { 846 + const nsid = 'app.rocksky.player.playFile' // @ts-ignore 847 + return this._server.xrpc.method(nsid, cfg) 848 + } 849 + 850 + previous<AV extends AuthVerifier>( 851 + cfg: ConfigOf< 852 + AV, 853 + AppRockskyPlayerPrevious.Handler<ExtractAuth<AV>>, 854 + AppRockskyPlayerPrevious.HandlerReqCtx<ExtractAuth<AV>> 855 + >, 856 + ) { 857 + const nsid = 'app.rocksky.player.previous' // @ts-ignore 858 + return this._server.xrpc.method(nsid, cfg) 859 + } 860 + 861 + seek<AV extends AuthVerifier>( 862 + cfg: ConfigOf< 863 + AV, 864 + AppRockskyPlayerSeek.Handler<ExtractAuth<AV>>, 865 + AppRockskyPlayerSeek.HandlerReqCtx<ExtractAuth<AV>> 866 + >, 867 + ) { 868 + const nsid = 'app.rocksky.player.seek' // @ts-ignore 869 + return this._server.xrpc.method(nsid, cfg) 870 + } 871 + } 872 + 873 + export class AppRockskyPlaylistNS { 874 + _server: Server 875 + 876 + constructor(server: Server) { 877 + this._server = server 878 + } 879 + 880 + createPlaylist<AV extends AuthVerifier>( 881 + cfg: ConfigOf< 882 + AV, 883 + AppRockskyPlaylistCreatePlaylist.Handler<ExtractAuth<AV>>, 884 + AppRockskyPlaylistCreatePlaylist.HandlerReqCtx<ExtractAuth<AV>> 885 + >, 886 + ) { 887 + const nsid = 'app.rocksky.playlist.createPlaylist' // @ts-ignore 888 + return this._server.xrpc.method(nsid, cfg) 889 + } 890 + 891 + getPlaylist<AV extends AuthVerifier>( 892 + cfg: ConfigOf< 893 + AV, 894 + AppRockskyPlaylistGetPlaylist.Handler<ExtractAuth<AV>>, 895 + AppRockskyPlaylistGetPlaylist.HandlerReqCtx<ExtractAuth<AV>> 896 + >, 897 + ) { 898 + const nsid = 'app.rocksky.playlist.getPlaylist' // @ts-ignore 899 + return this._server.xrpc.method(nsid, cfg) 900 + } 901 + 902 + getPlaylists<AV extends AuthVerifier>( 903 + cfg: ConfigOf< 904 + AV, 905 + AppRockskyPlaylistGetPlaylists.Handler<ExtractAuth<AV>>, 906 + AppRockskyPlaylistGetPlaylists.HandlerReqCtx<ExtractAuth<AV>> 907 + >, 908 + ) { 909 + const nsid = 'app.rocksky.playlist.getPlaylists' // @ts-ignore 910 + return this._server.xrpc.method(nsid, cfg) 911 + } 912 + 913 + insertDirectory<AV extends AuthVerifier>( 914 + cfg: ConfigOf< 915 + AV, 916 + AppRockskyPlaylistInsertDirectory.Handler<ExtractAuth<AV>>, 917 + AppRockskyPlaylistInsertDirectory.HandlerReqCtx<ExtractAuth<AV>> 918 + >, 919 + ) { 920 + const nsid = 'app.rocksky.playlist.insertDirectory' // @ts-ignore 921 + return this._server.xrpc.method(nsid, cfg) 922 + } 923 + 924 + insertFiles<AV extends AuthVerifier>( 925 + cfg: ConfigOf< 926 + AV, 927 + AppRockskyPlaylistInsertFiles.Handler<ExtractAuth<AV>>, 928 + AppRockskyPlaylistInsertFiles.HandlerReqCtx<ExtractAuth<AV>> 929 + >, 930 + ) { 931 + const nsid = 'app.rocksky.playlist.insertFiles' // @ts-ignore 932 + return this._server.xrpc.method(nsid, cfg) 933 + } 934 + 935 + removePlaylist<AV extends AuthVerifier>( 936 + cfg: ConfigOf< 937 + AV, 938 + AppRockskyPlaylistRemovePlaylist.Handler<ExtractAuth<AV>>, 939 + AppRockskyPlaylistRemovePlaylist.HandlerReqCtx<ExtractAuth<AV>> 940 + >, 941 + ) { 942 + const nsid = 'app.rocksky.playlist.removePlaylist' // @ts-ignore 943 + return this._server.xrpc.method(nsid, cfg) 944 + } 945 + 946 + removeTrack<AV extends AuthVerifier>( 947 + cfg: ConfigOf< 948 + AV, 949 + AppRockskyPlaylistRemoveTrack.Handler<ExtractAuth<AV>>, 950 + AppRockskyPlaylistRemoveTrack.HandlerReqCtx<ExtractAuth<AV>> 951 + >, 952 + ) { 953 + const nsid = 'app.rocksky.playlist.removeTrack' // @ts-ignore 954 + return this._server.xrpc.method(nsid, cfg) 955 + } 956 + 957 + startPlaylist<AV extends AuthVerifier>( 958 + cfg: ConfigOf< 959 + AV, 960 + AppRockskyPlaylistStartPlaylist.Handler<ExtractAuth<AV>>, 961 + AppRockskyPlaylistStartPlaylist.HandlerReqCtx<ExtractAuth<AV>> 962 + >, 963 + ) { 964 + const nsid = 'app.rocksky.playlist.startPlaylist' // @ts-ignore 965 + return this._server.xrpc.method(nsid, cfg) 966 + } 967 + } 968 + 969 + export class AppRockskyScrobbleNS { 970 + _server: Server 971 + 972 + constructor(server: Server) { 973 + this._server = server 974 + } 975 + 976 + createScrobble<AV extends AuthVerifier>( 977 + cfg: ConfigOf< 978 + AV, 979 + AppRockskyScrobbleCreateScrobble.Handler<ExtractAuth<AV>>, 980 + AppRockskyScrobbleCreateScrobble.HandlerReqCtx<ExtractAuth<AV>> 981 + >, 982 + ) { 983 + const nsid = 'app.rocksky.scrobble.createScrobble' // @ts-ignore 984 + return this._server.xrpc.method(nsid, cfg) 985 + } 986 + 987 + getScrobble<AV extends AuthVerifier>( 988 + cfg: ConfigOf< 989 + AV, 990 + AppRockskyScrobbleGetScrobble.Handler<ExtractAuth<AV>>, 991 + AppRockskyScrobbleGetScrobble.HandlerReqCtx<ExtractAuth<AV>> 992 + >, 993 + ) { 994 + const nsid = 'app.rocksky.scrobble.getScrobble' // @ts-ignore 995 + return this._server.xrpc.method(nsid, cfg) 996 + } 997 + 998 + getScrobbles<AV extends AuthVerifier>( 999 + cfg: ConfigOf< 1000 + AV, 1001 + AppRockskyScrobbleGetScrobbles.Handler<ExtractAuth<AV>>, 1002 + AppRockskyScrobbleGetScrobbles.HandlerReqCtx<ExtractAuth<AV>> 1003 + >, 1004 + ) { 1005 + const nsid = 'app.rocksky.scrobble.getScrobbles' // @ts-ignore 1006 + return this._server.xrpc.method(nsid, cfg) 1007 + } 1008 + } 1009 + 1010 + export class AppRockskyShoutNS { 1011 + _server: Server 1012 + 1013 + constructor(server: Server) { 1014 + this._server = server 1015 + } 1016 + 1017 + createShout<AV extends AuthVerifier>( 1018 + cfg: ConfigOf< 1019 + AV, 1020 + AppRockskyShoutCreateShout.Handler<ExtractAuth<AV>>, 1021 + AppRockskyShoutCreateShout.HandlerReqCtx<ExtractAuth<AV>> 1022 + >, 1023 + ) { 1024 + const nsid = 'app.rocksky.shout.createShout' // @ts-ignore 1025 + return this._server.xrpc.method(nsid, cfg) 1026 + } 1027 + 1028 + getAlbumShouts<AV extends AuthVerifier>( 1029 + cfg: ConfigOf< 1030 + AV, 1031 + AppRockskyShoutGetAlbumShouts.Handler<ExtractAuth<AV>>, 1032 + AppRockskyShoutGetAlbumShouts.HandlerReqCtx<ExtractAuth<AV>> 1033 + >, 1034 + ) { 1035 + const nsid = 'app.rocksky.shout.getAlbumShouts' // @ts-ignore 1036 + return this._server.xrpc.method(nsid, cfg) 1037 + } 1038 + 1039 + getArtistShouts<AV extends AuthVerifier>( 1040 + cfg: ConfigOf< 1041 + AV, 1042 + AppRockskyShoutGetArtistShouts.Handler<ExtractAuth<AV>>, 1043 + AppRockskyShoutGetArtistShouts.HandlerReqCtx<ExtractAuth<AV>> 1044 + >, 1045 + ) { 1046 + const nsid = 'app.rocksky.shout.getArtistShouts' // @ts-ignore 1047 + return this._server.xrpc.method(nsid, cfg) 1048 + } 1049 + 1050 + getProfileShouts<AV extends AuthVerifier>( 1051 + cfg: ConfigOf< 1052 + AV, 1053 + AppRockskyShoutGetProfileShouts.Handler<ExtractAuth<AV>>, 1054 + AppRockskyShoutGetProfileShouts.HandlerReqCtx<ExtractAuth<AV>> 1055 + >, 1056 + ) { 1057 + const nsid = 'app.rocksky.shout.getProfileShouts' // @ts-ignore 1058 + return this._server.xrpc.method(nsid, cfg) 1059 + } 1060 + 1061 + getShoutReplies<AV extends AuthVerifier>( 1062 + cfg: ConfigOf< 1063 + AV, 1064 + AppRockskyShoutGetShoutReplies.Handler<ExtractAuth<AV>>, 1065 + AppRockskyShoutGetShoutReplies.HandlerReqCtx<ExtractAuth<AV>> 1066 + >, 1067 + ) { 1068 + const nsid = 'app.rocksky.shout.getShoutReplies' // @ts-ignore 1069 + return this._server.xrpc.method(nsid, cfg) 1070 + } 1071 + 1072 + getTrackShouts<AV extends AuthVerifier>( 1073 + cfg: ConfigOf< 1074 + AV, 1075 + AppRockskyShoutGetTrackShouts.Handler<ExtractAuth<AV>>, 1076 + AppRockskyShoutGetTrackShouts.HandlerReqCtx<ExtractAuth<AV>> 1077 + >, 1078 + ) { 1079 + const nsid = 'app.rocksky.shout.getTrackShouts' // @ts-ignore 1080 + return this._server.xrpc.method(nsid, cfg) 1081 + } 1082 + 1083 + removeShout<AV extends AuthVerifier>( 1084 + cfg: ConfigOf< 1085 + AV, 1086 + AppRockskyShoutRemoveShout.Handler<ExtractAuth<AV>>, 1087 + AppRockskyShoutRemoveShout.HandlerReqCtx<ExtractAuth<AV>> 1088 + >, 1089 + ) { 1090 + const nsid = 'app.rocksky.shout.removeShout' // @ts-ignore 1091 + return this._server.xrpc.method(nsid, cfg) 1092 + } 1093 + 1094 + replyShout<AV extends AuthVerifier>( 1095 + cfg: ConfigOf< 1096 + AV, 1097 + AppRockskyShoutReplyShout.Handler<ExtractAuth<AV>>, 1098 + AppRockskyShoutReplyShout.HandlerReqCtx<ExtractAuth<AV>> 1099 + >, 1100 + ) { 1101 + const nsid = 'app.rocksky.shout.replyShout' // @ts-ignore 1102 + return this._server.xrpc.method(nsid, cfg) 1103 + } 1104 + 1105 + reportShout<AV extends AuthVerifier>( 1106 + cfg: ConfigOf< 1107 + AV, 1108 + AppRockskyShoutReportShout.Handler<ExtractAuth<AV>>, 1109 + AppRockskyShoutReportShout.HandlerReqCtx<ExtractAuth<AV>> 1110 + >, 1111 + ) { 1112 + const nsid = 'app.rocksky.shout.reportShout' // @ts-ignore 1113 + return this._server.xrpc.method(nsid, cfg) 1114 + } 1115 + } 1116 + 1117 + export class AppRockskySongNS { 1118 + _server: Server 1119 + 1120 + constructor(server: Server) { 1121 + this._server = server 1122 + } 1123 + 1124 + createSong<AV extends AuthVerifier>( 1125 + cfg: ConfigOf< 1126 + AV, 1127 + AppRockskySongCreateSong.Handler<ExtractAuth<AV>>, 1128 + AppRockskySongCreateSong.HandlerReqCtx<ExtractAuth<AV>> 1129 + >, 1130 + ) { 1131 + const nsid = 'app.rocksky.song.createSong' // @ts-ignore 1132 + return this._server.xrpc.method(nsid, cfg) 1133 + } 1134 + 1135 + getSong<AV extends AuthVerifier>( 1136 + cfg: ConfigOf< 1137 + AV, 1138 + AppRockskySongGetSong.Handler<ExtractAuth<AV>>, 1139 + AppRockskySongGetSong.HandlerReqCtx<ExtractAuth<AV>> 1140 + >, 1141 + ) { 1142 + const nsid = 'app.rocksky.song.getSong' // @ts-ignore 1143 + return this._server.xrpc.method(nsid, cfg) 1144 + } 1145 + 1146 + getSongs<AV extends AuthVerifier>( 1147 + cfg: ConfigOf< 1148 + AV, 1149 + AppRockskySongGetSongs.Handler<ExtractAuth<AV>>, 1150 + AppRockskySongGetSongs.HandlerReqCtx<ExtractAuth<AV>> 1151 + >, 1152 + ) { 1153 + const nsid = 'app.rocksky.song.getSongs' // @ts-ignore 1154 + return this._server.xrpc.method(nsid, cfg) 1155 + } 1156 + } 1157 + 1158 + export class AppRockskySpotifyNS { 1159 + _server: Server 1160 + 1161 + constructor(server: Server) { 1162 + this._server = server 1163 + } 1164 + 1165 + getCurrentlyPlaying<AV extends AuthVerifier>( 1166 + cfg: ConfigOf< 1167 + AV, 1168 + AppRockskySpotifyGetCurrentlyPlaying.Handler<ExtractAuth<AV>>, 1169 + AppRockskySpotifyGetCurrentlyPlaying.HandlerReqCtx<ExtractAuth<AV>> 1170 + >, 1171 + ) { 1172 + const nsid = 'app.rocksky.spotify.getCurrentlyPlaying' // @ts-ignore 1173 + return this._server.xrpc.method(nsid, cfg) 1174 + } 1175 + 1176 + next<AV extends AuthVerifier>( 1177 + cfg: ConfigOf< 1178 + AV, 1179 + AppRockskySpotifyNext.Handler<ExtractAuth<AV>>, 1180 + AppRockskySpotifyNext.HandlerReqCtx<ExtractAuth<AV>> 1181 + >, 1182 + ) { 1183 + const nsid = 'app.rocksky.spotify.next' // @ts-ignore 1184 + return this._server.xrpc.method(nsid, cfg) 1185 + } 1186 + 1187 + pause<AV extends AuthVerifier>( 1188 + cfg: ConfigOf< 1189 + AV, 1190 + AppRockskySpotifyPause.Handler<ExtractAuth<AV>>, 1191 + AppRockskySpotifyPause.HandlerReqCtx<ExtractAuth<AV>> 1192 + >, 1193 + ) { 1194 + const nsid = 'app.rocksky.spotify.pause' // @ts-ignore 1195 + return this._server.xrpc.method(nsid, cfg) 1196 + } 1197 + 1198 + play<AV extends AuthVerifier>( 1199 + cfg: ConfigOf< 1200 + AV, 1201 + AppRockskySpotifyPlay.Handler<ExtractAuth<AV>>, 1202 + AppRockskySpotifyPlay.HandlerReqCtx<ExtractAuth<AV>> 1203 + >, 1204 + ) { 1205 + const nsid = 'app.rocksky.spotify.play' // @ts-ignore 1206 + return this._server.xrpc.method(nsid, cfg) 1207 + } 1208 + 1209 + previous<AV extends AuthVerifier>( 1210 + cfg: ConfigOf< 1211 + AV, 1212 + AppRockskySpotifyPrevious.Handler<ExtractAuth<AV>>, 1213 + AppRockskySpotifyPrevious.HandlerReqCtx<ExtractAuth<AV>> 1214 + >, 1215 + ) { 1216 + const nsid = 'app.rocksky.spotify.previous' // @ts-ignore 1217 + return this._server.xrpc.method(nsid, cfg) 1218 + } 1219 + 1220 + seek<AV extends AuthVerifier>( 1221 + cfg: ConfigOf< 1222 + AV, 1223 + AppRockskySpotifySeek.Handler<ExtractAuth<AV>>, 1224 + AppRockskySpotifySeek.HandlerReqCtx<ExtractAuth<AV>> 1225 + >, 1226 + ) { 1227 + const nsid = 'app.rocksky.spotify.seek' // @ts-ignore 1228 + return this._server.xrpc.method(nsid, cfg) 1229 + } 1230 + } 1231 + 1232 + export class AppRockskyStatsNS { 1233 + _server: Server 1234 + 1235 + constructor(server: Server) { 1236 + this._server = server 1237 + } 1238 + 1239 + getStats<AV extends AuthVerifier>( 1240 + cfg: ConfigOf< 1241 + AV, 1242 + AppRockskyStatsGetStats.Handler<ExtractAuth<AV>>, 1243 + AppRockskyStatsGetStats.HandlerReqCtx<ExtractAuth<AV>> 1244 + >, 1245 + ) { 1246 + const nsid = 'app.rocksky.stats.getStats' // @ts-ignore 1247 + return this._server.xrpc.method(nsid, cfg) 1248 + } 1249 + } 1250 + 1251 + export class AppBskyNS { 1252 + _server: Server 1253 + actor: AppBskyActorNS 1254 + 1255 + constructor(server: Server) { 1256 + this._server = server 1257 + this.actor = new AppBskyActorNS(server) 1258 + } 1259 + } 1260 + 1261 + export class AppBskyActorNS { 1262 + _server: Server 1263 + 1264 + constructor(server: Server) { 1265 + this._server = server 1266 + } 1267 + } 1268 + 1269 + export class ComNS { 1270 + _server: Server 1271 + atproto: ComAtprotoNS 1272 + 1273 + constructor(server: Server) { 1274 + this._server = server 1275 + this.atproto = new ComAtprotoNS(server) 1276 + } 1277 + } 1278 + 1279 + export class ComAtprotoNS { 1280 + _server: Server 1281 + repo: ComAtprotoRepoNS 1282 + 1283 + constructor(server: Server) { 1284 + this._server = server 1285 + this.repo = new ComAtprotoRepoNS(server) 1286 + } 1287 + } 1288 + 1289 + export class ComAtprotoRepoNS { 1290 + _server: Server 1291 + 1292 + constructor(server: Server) { 1293 + this._server = server 1294 + } 1295 + } 1296 + 1297 + type SharedRateLimitOpts<T> = { 1298 + name: string 1299 + calcKey?: (ctx: T) => string | null 1300 + calcPoints?: (ctx: T) => number 1301 + } 1302 + type RouteRateLimitOpts<T> = { 1303 + durationMs: number 1304 + points: number 1305 + calcKey?: (ctx: T) => string | null 1306 + calcPoints?: (ctx: T) => number 1307 + } 1308 + type HandlerOpts = { blobLimit?: number } 1309 + type HandlerRateLimitOpts<T> = SharedRateLimitOpts<T> | RouteRateLimitOpts<T> 1310 + type ConfigOf<Auth, Handler, ReqCtx> = 1311 + | Handler 1312 + | { 1313 + auth?: Auth 1314 + opts?: HandlerOpts 1315 + rateLimit?: HandlerRateLimitOpts<ReqCtx> | HandlerRateLimitOpts<ReqCtx>[] 1316 + handler: Handler 1317 + } 1318 + type ExtractAuth<AV extends AuthVerifier | StreamAuthVerifier> = Extract< 1319 + Awaited<ReturnType<AV>>, 1320 + { credentials: unknown } 1321 + >
+5453
apps/cli/src/lexicon/lexicons.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { LexiconDoc, Lexicons } from '@atproto/lexicon' 5 + 6 + export const schemaDict = { 7 + AppRockskyActorDefs: { 8 + lexicon: 1, 9 + id: 'app.rocksky.actor.defs', 10 + defs: { 11 + profileViewDetailed: { 12 + type: 'object', 13 + properties: { 14 + id: { 15 + type: 'string', 16 + description: 'The unique identifier of the actor.', 17 + }, 18 + did: { 19 + type: 'string', 20 + description: 'The DID of the actor.', 21 + }, 22 + handle: { 23 + type: 'string', 24 + description: 'The handle of the actor.', 25 + }, 26 + displayName: { 27 + type: 'string', 28 + description: 'The display name of the actor.', 29 + }, 30 + avatar: { 31 + type: 'string', 32 + description: "The URL of the actor's avatar image.", 33 + format: 'uri', 34 + }, 35 + createdAt: { 36 + type: 'string', 37 + description: 'The date and time when the actor was created.', 38 + format: 'datetime', 39 + }, 40 + updatedAt: { 41 + type: 'string', 42 + description: 'The date and time when the actor was last updated.', 43 + format: 'datetime', 44 + }, 45 + }, 46 + }, 47 + profileViewBasic: { 48 + type: 'object', 49 + properties: { 50 + id: { 51 + type: 'string', 52 + description: 'The unique identifier of the actor.', 53 + }, 54 + did: { 55 + type: 'string', 56 + description: 'The DID of the actor.', 57 + }, 58 + handle: { 59 + type: 'string', 60 + description: 'The handle of the actor.', 61 + }, 62 + displayName: { 63 + type: 'string', 64 + description: 'The display name of the actor.', 65 + }, 66 + avatar: { 67 + type: 'string', 68 + description: "The URL of the actor's avatar image.", 69 + format: 'uri', 70 + }, 71 + createdAt: { 72 + type: 'string', 73 + description: 'The date and time when the actor was created.', 74 + format: 'datetime', 75 + }, 76 + updatedAt: { 77 + type: 'string', 78 + description: 'The date and time when the actor was last updated.', 79 + format: 'datetime', 80 + }, 81 + }, 82 + }, 83 + neighbourViewBasic: { 84 + type: 'object', 85 + properties: { 86 + userId: { 87 + type: 'string', 88 + }, 89 + did: { 90 + type: 'string', 91 + }, 92 + handle: { 93 + type: 'string', 94 + }, 95 + displayName: { 96 + type: 'string', 97 + }, 98 + avatar: { 99 + type: 'string', 100 + description: "The URL of the actor's avatar image.", 101 + format: 'uri', 102 + }, 103 + sharedArtistsCount: { 104 + type: 'integer', 105 + description: 'The number of artists shared with the actor.', 106 + }, 107 + similarityScore: { 108 + type: 'integer', 109 + description: 'The similarity score with the actor.', 110 + }, 111 + topSharedArtistNames: { 112 + type: 'array', 113 + description: 'The top shared artist names with the actor.', 114 + items: { 115 + type: 'string', 116 + }, 117 + }, 118 + topSharedArtistsDetails: { 119 + type: 'array', 120 + description: 'The top shared artist details with the actor.', 121 + items: { 122 + type: 'ref', 123 + ref: 'lex:app.rocksky.artist.defs#artistViewBasic', 124 + }, 125 + }, 126 + }, 127 + }, 128 + compatibilityViewBasic: { 129 + type: 'object', 130 + properties: { 131 + compatibilityLevel: { 132 + type: 'integer', 133 + }, 134 + compatibilityPercentage: { 135 + type: 'integer', 136 + }, 137 + sharedArtists: { 138 + type: 'integer', 139 + }, 140 + topSharedArtistNames: { 141 + type: 'array', 142 + items: { 143 + type: 'string', 144 + }, 145 + }, 146 + topSharedDetailedArtists: { 147 + type: 'array', 148 + items: { 149 + type: 'ref', 150 + ref: 'lex:app.rocksky.actor.defs#artistViewBasic', 151 + }, 152 + }, 153 + user1ArtistCount: { 154 + type: 'integer', 155 + }, 156 + user2ArtistCount: { 157 + type: 'integer', 158 + }, 159 + }, 160 + }, 161 + artistViewBasic: { 162 + type: 'object', 163 + properties: { 164 + id: { 165 + type: 'string', 166 + }, 167 + name: { 168 + type: 'string', 169 + }, 170 + picture: { 171 + type: 'string', 172 + format: 'uri', 173 + }, 174 + uri: { 175 + type: 'string', 176 + format: 'at-uri', 177 + }, 178 + user1Rank: { 179 + type: 'integer', 180 + }, 181 + user2Rank: { 182 + type: 'integer', 183 + }, 184 + weight: { 185 + type: 'integer', 186 + }, 187 + }, 188 + }, 189 + }, 190 + }, 191 + AppRockskyActorGetActorAlbums: { 192 + lexicon: 1, 193 + id: 'app.rocksky.actor.getActorAlbums', 194 + defs: { 195 + main: { 196 + type: 'query', 197 + description: 'Get albums for an actor', 198 + parameters: { 199 + type: 'params', 200 + required: ['did'], 201 + properties: { 202 + did: { 203 + type: 'string', 204 + description: 'The DID or handle of the actor', 205 + format: 'at-identifier', 206 + }, 207 + limit: { 208 + type: 'integer', 209 + description: 'The maximum number of albums to return', 210 + minimum: 1, 211 + }, 212 + offset: { 213 + type: 'integer', 214 + description: 'The offset for pagination', 215 + minimum: 0, 216 + }, 217 + startDate: { 218 + type: 'string', 219 + description: 220 + 'The start date to filter albums from (ISO 8601 format)', 221 + format: 'datetime', 222 + }, 223 + endDate: { 224 + type: 'string', 225 + description: 'The end date to filter albums to (ISO 8601 format)', 226 + format: 'datetime', 227 + }, 228 + }, 229 + }, 230 + output: { 231 + encoding: 'application/json', 232 + schema: { 233 + type: 'object', 234 + properties: { 235 + albums: { 236 + type: 'array', 237 + items: { 238 + type: 'ref', 239 + ref: 'lex:app.rocksky.album.defs#albumViewBasic', 240 + }, 241 + }, 242 + }, 243 + }, 244 + }, 245 + }, 246 + }, 247 + }, 248 + AppRockskyActorGetActorArtists: { 249 + lexicon: 1, 250 + id: 'app.rocksky.actor.getActorArtists', 251 + defs: { 252 + main: { 253 + type: 'query', 254 + description: 'Get artists for an actor', 255 + parameters: { 256 + type: 'params', 257 + required: ['did'], 258 + properties: { 259 + did: { 260 + type: 'string', 261 + description: 'The DID or handle of the actor', 262 + format: 'at-identifier', 263 + }, 264 + limit: { 265 + type: 'integer', 266 + description: 'The maximum number of albums to return', 267 + minimum: 1, 268 + }, 269 + offset: { 270 + type: 'integer', 271 + description: 'The offset for pagination', 272 + minimum: 0, 273 + }, 274 + startDate: { 275 + type: 'string', 276 + description: 277 + 'The start date to filter albums from (ISO 8601 format)', 278 + format: 'datetime', 279 + }, 280 + endDate: { 281 + type: 'string', 282 + description: 'The end date to filter albums to (ISO 8601 format)', 283 + format: 'datetime', 284 + }, 285 + }, 286 + }, 287 + output: { 288 + encoding: 'application/json', 289 + schema: { 290 + type: 'object', 291 + properties: { 292 + artists: { 293 + type: 'array', 294 + items: { 295 + type: 'ref', 296 + ref: 'lex:app.rocksky.artist.defs#artistViewBasic', 297 + }, 298 + }, 299 + }, 300 + }, 301 + }, 302 + }, 303 + }, 304 + }, 305 + AppRockskyActorGetActorCompatibility: { 306 + lexicon: 1, 307 + id: 'app.rocksky.actor.getActorCompatibility', 308 + defs: { 309 + main: { 310 + type: 'query', 311 + description: 'Get compatibility for an actor', 312 + parameters: { 313 + type: 'params', 314 + required: ['did'], 315 + properties: { 316 + did: { 317 + type: 'string', 318 + description: 'DID or handle to get compatibility for', 319 + format: 'at-identifier', 320 + }, 321 + }, 322 + }, 323 + output: { 324 + encoding: 'application/json', 325 + schema: { 326 + type: 'object', 327 + properties: { 328 + compatibility: { 329 + type: 'ref', 330 + ref: 'lex:app.rocksky.actor.defs#compatibilityViewBasic', 331 + }, 332 + }, 333 + }, 334 + }, 335 + }, 336 + }, 337 + }, 338 + AppRockskyActorGetActorLovedSongs: { 339 + lexicon: 1, 340 + id: 'app.rocksky.actor.getActorLovedSongs', 341 + defs: { 342 + main: { 343 + type: 'query', 344 + description: 'Get loved songs for an actor', 345 + parameters: { 346 + type: 'params', 347 + required: ['did'], 348 + properties: { 349 + did: { 350 + type: 'string', 351 + description: 'The DID or handle of the actor', 352 + format: 'at-identifier', 353 + }, 354 + limit: { 355 + type: 'integer', 356 + description: 'The maximum number of albums to return', 357 + minimum: 1, 358 + }, 359 + offset: { 360 + type: 'integer', 361 + description: 'The offset for pagination', 362 + minimum: 0, 363 + }, 364 + }, 365 + }, 366 + output: { 367 + encoding: 'application/json', 368 + schema: { 369 + type: 'object', 370 + properties: { 371 + tracks: { 372 + type: 'array', 373 + items: { 374 + type: 'ref', 375 + ref: 'lex:app.rocksky.song.defs#songViewBasic', 376 + }, 377 + }, 378 + }, 379 + }, 380 + }, 381 + }, 382 + }, 383 + }, 384 + AppRockskyActorGetActorNeighbours: { 385 + lexicon: 1, 386 + id: 'app.rocksky.actor.getActorNeighbours', 387 + defs: { 388 + main: { 389 + type: 'query', 390 + description: 'Get neighbours for an actor', 391 + parameters: { 392 + type: 'params', 393 + required: ['did'], 394 + properties: { 395 + did: { 396 + type: 'string', 397 + description: 'The DID or handle of the actor', 398 + format: 'at-identifier', 399 + }, 400 + }, 401 + }, 402 + output: { 403 + encoding: 'application/json', 404 + schema: { 405 + type: 'object', 406 + properties: { 407 + neighbours: { 408 + type: 'array', 409 + items: { 410 + type: 'ref', 411 + ref: 'lex:app.rocksky.actor.defs#neighbourViewBasic', 412 + }, 413 + }, 414 + }, 415 + }, 416 + }, 417 + }, 418 + }, 419 + }, 420 + AppRockskyActorGetActorPlaylists: { 421 + lexicon: 1, 422 + id: 'app.rocksky.actor.getActorPlaylists', 423 + defs: { 424 + main: { 425 + type: 'query', 426 + description: 'Get playlists for an actor', 427 + parameters: { 428 + type: 'params', 429 + required: ['did'], 430 + properties: { 431 + did: { 432 + type: 'string', 433 + description: 'The DID or handle of the actor', 434 + format: 'at-identifier', 435 + }, 436 + limit: { 437 + type: 'integer', 438 + description: 'The maximum number of albums to return', 439 + minimum: 1, 440 + }, 441 + offset: { 442 + type: 'integer', 443 + description: 'The offset for pagination', 444 + minimum: 0, 445 + }, 446 + }, 447 + }, 448 + output: { 449 + encoding: 'application/json', 450 + schema: { 451 + type: 'object', 452 + properties: { 453 + playlists: { 454 + type: 'array', 455 + items: { 456 + type: 'ref', 457 + ref: 'lex:app.rocksky.playlist.defs#playlistViewBasic', 458 + }, 459 + }, 460 + }, 461 + }, 462 + }, 463 + }, 464 + }, 465 + }, 466 + AppRockskyActorGetActorScrobbles: { 467 + lexicon: 1, 468 + id: 'app.rocksky.actor.getActorScrobbles', 469 + defs: { 470 + main: { 471 + type: 'query', 472 + description: 'Get scrobbles for an actor', 473 + parameters: { 474 + type: 'params', 475 + required: ['did'], 476 + properties: { 477 + did: { 478 + type: 'string', 479 + description: 'The DID or handle of the actor', 480 + format: 'at-identifier', 481 + }, 482 + limit: { 483 + type: 'integer', 484 + description: 'The maximum number of albums to return', 485 + minimum: 1, 486 + }, 487 + offset: { 488 + type: 'integer', 489 + description: 'The offset for pagination', 490 + minimum: 0, 491 + }, 492 + }, 493 + }, 494 + output: { 495 + encoding: 'application/json', 496 + schema: { 497 + type: 'object', 498 + properties: { 499 + scrobbles: { 500 + type: 'array', 501 + items: { 502 + type: 'ref', 503 + ref: 'lex:app.rocksky.scrobble.defs#scrobbleViewBasic', 504 + }, 505 + }, 506 + }, 507 + }, 508 + }, 509 + }, 510 + }, 511 + }, 512 + AppRockskyActorGetActorSongs: { 513 + lexicon: 1, 514 + id: 'app.rocksky.actor.getActorSongs', 515 + defs: { 516 + main: { 517 + type: 'query', 518 + description: 'Get songs for an actor', 519 + parameters: { 520 + type: 'params', 521 + required: ['did'], 522 + properties: { 523 + did: { 524 + type: 'string', 525 + description: 'The DID or handle of the actor', 526 + format: 'at-identifier', 527 + }, 528 + limit: { 529 + type: 'integer', 530 + description: 'The maximum number of albums to return', 531 + minimum: 1, 532 + }, 533 + offset: { 534 + type: 'integer', 535 + description: 'The offset for pagination', 536 + minimum: 0, 537 + }, 538 + startDate: { 539 + type: 'string', 540 + description: 541 + 'The start date to filter albums from (ISO 8601 format)', 542 + format: 'datetime', 543 + }, 544 + endDate: { 545 + type: 'string', 546 + description: 'The end date to filter albums to (ISO 8601 format)', 547 + format: 'datetime', 548 + }, 549 + }, 550 + }, 551 + output: { 552 + encoding: 'application/json', 553 + schema: { 554 + type: 'object', 555 + properties: { 556 + songs: { 557 + type: 'array', 558 + items: { 559 + type: 'ref', 560 + ref: 'lex:app.rocksky.song.defs#songViewBasic', 561 + }, 562 + }, 563 + }, 564 + }, 565 + }, 566 + }, 567 + }, 568 + }, 569 + AppRockskyActorGetProfile: { 570 + lexicon: 1, 571 + id: 'app.rocksky.actor.getProfile', 572 + defs: { 573 + main: { 574 + type: 'query', 575 + description: 'Get the profile of an actor', 576 + parameters: { 577 + type: 'params', 578 + properties: { 579 + did: { 580 + type: 'string', 581 + description: 'The DID or handle of the actor', 582 + format: 'at-identifier', 583 + }, 584 + }, 585 + }, 586 + output: { 587 + encoding: 'application/json', 588 + schema: { 589 + type: 'ref', 590 + ref: 'lex:app.rocksky.actor.defs#profileViewDetailed', 591 + }, 592 + }, 593 + }, 594 + }, 595 + }, 596 + AppBskyActorProfile: { 597 + lexicon: 1, 598 + id: 'app.bsky.actor.profile', 599 + defs: { 600 + main: { 601 + type: 'record', 602 + description: 'A declaration of a Bluesky account profile.', 603 + key: 'literal:self', 604 + record: { 605 + type: 'object', 606 + properties: { 607 + displayName: { 608 + type: 'string', 609 + maxGraphemes: 64, 610 + maxLength: 640, 611 + }, 612 + description: { 613 + type: 'string', 614 + description: 'Free-form profile description text.', 615 + maxGraphemes: 256, 616 + maxLength: 2560, 617 + }, 618 + avatar: { 619 + type: 'blob', 620 + description: 621 + "Small image to be displayed next to posts from account. AKA, 'profile picture'", 622 + accept: ['image/png', 'image/jpeg'], 623 + maxSize: 1000000, 624 + }, 625 + banner: { 626 + type: 'blob', 627 + description: 628 + 'Larger horizontal image to display behind profile view.', 629 + accept: ['image/png', 'image/jpeg'], 630 + maxSize: 10000000, 631 + }, 632 + labels: { 633 + type: 'union', 634 + description: 635 + 'Self-label values, specific to the Bluesky application, on the overall account.', 636 + refs: ['lex:com.atproto.label.defs#selfLabels'], 637 + }, 638 + joinedViaStarterPack: { 639 + type: 'ref', 640 + ref: 'lex:com.atproto.repo.strongRef', 641 + }, 642 + createdAt: { 643 + type: 'string', 644 + format: 'datetime', 645 + }, 646 + }, 647 + }, 648 + }, 649 + }, 650 + }, 651 + AppRockskyAlbum: { 652 + lexicon: 1, 653 + id: 'app.rocksky.album', 654 + defs: { 655 + main: { 656 + type: 'record', 657 + description: 'A declaration of an album.', 658 + key: 'tid', 659 + record: { 660 + type: 'object', 661 + required: ['title', 'artist', 'createdAt'], 662 + properties: { 663 + title: { 664 + type: 'string', 665 + description: 'The title of the album.', 666 + minLength: 1, 667 + maxLength: 512, 668 + }, 669 + artist: { 670 + type: 'string', 671 + description: 'The artist of the album.', 672 + minLength: 1, 673 + maxLength: 256, 674 + }, 675 + duration: { 676 + type: 'integer', 677 + description: 'The duration of the album in seconds.', 678 + }, 679 + releaseDate: { 680 + type: 'string', 681 + description: 'The release date of the album.', 682 + format: 'datetime', 683 + }, 684 + year: { 685 + type: 'integer', 686 + description: 'The year the album was released.', 687 + }, 688 + genre: { 689 + type: 'string', 690 + description: 'The genre of the album.', 691 + maxLength: 256, 692 + }, 693 + albumArt: { 694 + type: 'blob', 695 + description: 'The album art of the album.', 696 + accept: ['image/png', 'image/jpeg'], 697 + maxSize: 2000000, 698 + }, 699 + albumArtUrl: { 700 + type: 'string', 701 + description: 'The URL of the album art of the album.', 702 + format: 'uri', 703 + }, 704 + tags: { 705 + type: 'array', 706 + description: 'The tags of the album.', 707 + items: { 708 + type: 'string', 709 + minLength: 1, 710 + maxLength: 256, 711 + }, 712 + }, 713 + youtubeLink: { 714 + type: 'string', 715 + description: 'The YouTube link of the album.', 716 + format: 'uri', 717 + }, 718 + spotifyLink: { 719 + type: 'string', 720 + description: 'The Spotify link of the album.', 721 + format: 'uri', 722 + }, 723 + tidalLink: { 724 + type: 'string', 725 + description: 'The tidal link of the album.', 726 + format: 'uri', 727 + }, 728 + appleMusicLink: { 729 + type: 'string', 730 + description: 'The Apple Music link of the album.', 731 + format: 'uri', 732 + }, 733 + createdAt: { 734 + type: 'string', 735 + description: 'The date and time when the album was created.', 736 + format: 'datetime', 737 + }, 738 + }, 739 + }, 740 + }, 741 + }, 742 + }, 743 + AppRockskyAlbumDefs: { 744 + lexicon: 1, 745 + id: 'app.rocksky.album.defs', 746 + defs: { 747 + albumViewBasic: { 748 + type: 'object', 749 + properties: { 750 + id: { 751 + type: 'string', 752 + description: 'The unique identifier of the album.', 753 + }, 754 + uri: { 755 + type: 'string', 756 + description: 'The URI of the album.', 757 + format: 'at-uri', 758 + }, 759 + title: { 760 + type: 'string', 761 + description: 'The title of the album.', 762 + }, 763 + artist: { 764 + type: 'string', 765 + description: 'The artist of the album.', 766 + }, 767 + artistUri: { 768 + type: 'string', 769 + description: "The URI of the album's artist.", 770 + format: 'at-uri', 771 + }, 772 + year: { 773 + type: 'integer', 774 + description: 'The year the album was released.', 775 + }, 776 + albumArt: { 777 + type: 'string', 778 + description: 'The URL of the album art image.', 779 + format: 'uri', 780 + }, 781 + releaseDate: { 782 + type: 'string', 783 + description: 'The release date of the album.', 784 + }, 785 + sha256: { 786 + type: 'string', 787 + description: 'The SHA256 hash of the album.', 788 + }, 789 + playCount: { 790 + type: 'integer', 791 + description: 'The number of times the album has been played.', 792 + minimum: 0, 793 + }, 794 + uniqueListeners: { 795 + type: 'integer', 796 + description: 797 + 'The number of unique listeners who have played the album.', 798 + minimum: 0, 799 + }, 800 + }, 801 + }, 802 + albumViewDetailed: { 803 + type: 'object', 804 + properties: { 805 + id: { 806 + type: 'string', 807 + description: 'The unique identifier of the album.', 808 + }, 809 + uri: { 810 + type: 'string', 811 + description: 'The URI of the album.', 812 + format: 'at-uri', 813 + }, 814 + title: { 815 + type: 'string', 816 + description: 'The title of the album.', 817 + }, 818 + artist: { 819 + type: 'string', 820 + description: 'The artist of the album.', 821 + }, 822 + artistUri: { 823 + type: 'string', 824 + description: "The URI of the album's artist.", 825 + format: 'at-uri', 826 + }, 827 + year: { 828 + type: 'integer', 829 + description: 'The year the album was released.', 830 + }, 831 + albumArt: { 832 + type: 'string', 833 + description: 'The URL of the album art image.', 834 + format: 'uri', 835 + }, 836 + releaseDate: { 837 + type: 'string', 838 + description: 'The release date of the album.', 839 + }, 840 + sha256: { 841 + type: 'string', 842 + description: 'The SHA256 hash of the album.', 843 + }, 844 + playCount: { 845 + type: 'integer', 846 + description: 'The number of times the album has been played.', 847 + minimum: 0, 848 + }, 849 + uniqueListeners: { 850 + type: 'integer', 851 + description: 852 + 'The number of unique listeners who have played the album.', 853 + minimum: 0, 854 + }, 855 + tracks: { 856 + type: 'array', 857 + items: { 858 + type: 'ref', 859 + ref: 'lex:app.rocksky.song.defs.songViewBasic', 860 + }, 861 + }, 862 + }, 863 + }, 864 + }, 865 + }, 866 + AppRockskyAlbumGetAlbum: { 867 + lexicon: 1, 868 + id: 'app.rocksky.album.getAlbum', 869 + defs: { 870 + main: { 871 + type: 'query', 872 + description: 'Get detailed album view', 873 + parameters: { 874 + type: 'params', 875 + required: ['uri'], 876 + properties: { 877 + uri: { 878 + type: 'string', 879 + description: 'The URI of the album to retrieve.', 880 + format: 'at-uri', 881 + }, 882 + }, 883 + }, 884 + output: { 885 + encoding: 'application/json', 886 + schema: { 887 + type: 'ref', 888 + ref: 'lex:app.rocksky.album.defs#albumViewDetailed', 889 + }, 890 + }, 891 + }, 892 + }, 893 + }, 894 + AppRockskyAlbumGetAlbums: { 895 + lexicon: 1, 896 + id: 'app.rocksky.album.getAlbums', 897 + defs: { 898 + main: { 899 + type: 'query', 900 + description: 'Get albums', 901 + parameters: { 902 + type: 'params', 903 + properties: { 904 + limit: { 905 + type: 'integer', 906 + description: 'The maximum number of albums to return', 907 + minimum: 1, 908 + }, 909 + offset: { 910 + type: 'integer', 911 + description: 'The offset for pagination', 912 + minimum: 0, 913 + }, 914 + }, 915 + }, 916 + output: { 917 + encoding: 'application/json', 918 + schema: { 919 + type: 'object', 920 + properties: { 921 + albums: { 922 + type: 'array', 923 + items: { 924 + type: 'ref', 925 + ref: 'lex:app.rocksky.album.defs#albumViewBasic', 926 + }, 927 + }, 928 + }, 929 + }, 930 + }, 931 + }, 932 + }, 933 + }, 934 + AppRockskyAlbumGetAlbumTracks: { 935 + lexicon: 1, 936 + id: 'app.rocksky.album.getAlbumTracks', 937 + defs: { 938 + main: { 939 + type: 'query', 940 + description: 'Get tracks for an album', 941 + parameters: { 942 + type: 'params', 943 + required: ['uri'], 944 + properties: { 945 + uri: { 946 + type: 'string', 947 + description: 'The URI of the album to retrieve tracks from', 948 + format: 'at-uri', 949 + }, 950 + }, 951 + }, 952 + output: { 953 + encoding: 'application/json', 954 + schema: { 955 + type: 'object', 956 + properties: { 957 + tracks: { 958 + type: 'array', 959 + items: { 960 + type: 'ref', 961 + ref: 'lex:app.rocksky.song.defs#songViewBasic', 962 + }, 963 + }, 964 + }, 965 + }, 966 + }, 967 + }, 968 + }, 969 + }, 970 + AppRockskyApikeyCreateApikey: { 971 + lexicon: 1, 972 + id: 'app.rocksky.apikey.createApikey', 973 + defs: { 974 + main: { 975 + type: 'procedure', 976 + description: 'Create a new API key for the authenticated user', 977 + input: { 978 + encoding: 'application/json', 979 + schema: { 980 + type: 'object', 981 + required: ['name'], 982 + properties: { 983 + name: { 984 + type: 'string', 985 + description: 'The name of the API key.', 986 + }, 987 + description: { 988 + type: 'string', 989 + description: 'A description for the API key.', 990 + }, 991 + }, 992 + }, 993 + }, 994 + output: { 995 + encoding: 'application/json', 996 + schema: { 997 + type: 'ref', 998 + ref: 'lex:app.rocksky.apikey.defs#apiKey', 999 + }, 1000 + }, 1001 + }, 1002 + }, 1003 + }, 1004 + AppRockskyApikeyDefs: { 1005 + lexicon: 1, 1006 + id: 'app.rocksky.apikey.defs', 1007 + defs: { 1008 + apiKeyView: { 1009 + type: 'object', 1010 + properties: { 1011 + id: { 1012 + type: 'string', 1013 + description: 'The unique identifier of the API key.', 1014 + }, 1015 + name: { 1016 + type: 'string', 1017 + description: 'The name of the API key.', 1018 + }, 1019 + description: { 1020 + type: 'string', 1021 + description: 'A description for the API key.', 1022 + }, 1023 + createdAt: { 1024 + type: 'string', 1025 + description: 'The date and time when the API key was created.', 1026 + format: 'datetime', 1027 + }, 1028 + }, 1029 + }, 1030 + }, 1031 + }, 1032 + AppRockskyApikeysDefs: { 1033 + lexicon: 1, 1034 + id: 'app.rocksky.apikeys.defs', 1035 + defs: {}, 1036 + }, 1037 + AppRockskyApikeyGetApikeys: { 1038 + lexicon: 1, 1039 + id: 'app.rocksky.apikey.getApikeys', 1040 + defs: { 1041 + main: { 1042 + type: 'query', 1043 + description: 'Get a list of API keys for the authenticated user', 1044 + parameters: { 1045 + type: 'params', 1046 + properties: { 1047 + offset: { 1048 + type: 'integer', 1049 + description: 1050 + 'The number of API keys to skip before starting to collect the result set.', 1051 + }, 1052 + limit: { 1053 + type: 'integer', 1054 + description: 'The number of API keys to return per page.', 1055 + }, 1056 + }, 1057 + }, 1058 + output: { 1059 + encoding: 'application/json', 1060 + schema: { 1061 + type: 'object', 1062 + properties: { 1063 + apiKeys: { 1064 + type: 'array', 1065 + items: { 1066 + type: 'ref', 1067 + ref: 'lex:app.rocksky.apikey.defs#apikeyView', 1068 + }, 1069 + }, 1070 + }, 1071 + }, 1072 + }, 1073 + }, 1074 + }, 1075 + }, 1076 + AppRockskyApikeyRemoveApikey: { 1077 + lexicon: 1, 1078 + id: 'app.rocksky.apikey.removeApikey', 1079 + defs: { 1080 + main: { 1081 + type: 'procedure', 1082 + description: 'Remove an API key for the authenticated user', 1083 + parameters: { 1084 + type: 'params', 1085 + required: ['id'], 1086 + properties: { 1087 + id: { 1088 + type: 'string', 1089 + description: 'The ID of the API key to remove.', 1090 + }, 1091 + }, 1092 + }, 1093 + output: { 1094 + encoding: 'application/json', 1095 + schema: { 1096 + type: 'ref', 1097 + ref: 'lex:app.rocksky.apikey.defs#apiKey', 1098 + }, 1099 + }, 1100 + }, 1101 + }, 1102 + }, 1103 + AppRockskyApikeyUpdateApikey: { 1104 + lexicon: 1, 1105 + id: 'app.rocksky.apikey.updateApikey', 1106 + defs: { 1107 + main: { 1108 + type: 'procedure', 1109 + description: 'Update an existing API key for the authenticated user', 1110 + input: { 1111 + encoding: 'application/json', 1112 + schema: { 1113 + type: 'object', 1114 + required: ['id', 'name'], 1115 + properties: { 1116 + id: { 1117 + type: 'string', 1118 + description: 'The ID of the API key to update.', 1119 + }, 1120 + name: { 1121 + type: 'string', 1122 + description: 'The new name of the API key.', 1123 + }, 1124 + description: { 1125 + type: 'string', 1126 + description: 'A new description for the API key.', 1127 + }, 1128 + }, 1129 + }, 1130 + }, 1131 + output: { 1132 + encoding: 'application/json', 1133 + schema: { 1134 + type: 'ref', 1135 + ref: 'lex:app.rocksky.apikey.defs#apiKey', 1136 + }, 1137 + }, 1138 + }, 1139 + }, 1140 + }, 1141 + AppRockskyArtist: { 1142 + lexicon: 1, 1143 + id: 'app.rocksky.artist', 1144 + defs: { 1145 + main: { 1146 + type: 'record', 1147 + description: 'A declaration of an artist.', 1148 + key: 'tid', 1149 + record: { 1150 + type: 'object', 1151 + required: ['name', 'createdAt'], 1152 + properties: { 1153 + name: { 1154 + type: 'string', 1155 + description: 'The name of the artist.', 1156 + minLength: 1, 1157 + maxLength: 512, 1158 + }, 1159 + bio: { 1160 + type: 'string', 1161 + description: 'The biography of the artist.', 1162 + maxLength: 1000, 1163 + }, 1164 + picture: { 1165 + type: 'blob', 1166 + description: 'The picture of the artist.', 1167 + accept: ['image/png', 'image/jpeg'], 1168 + maxSize: 2000000, 1169 + }, 1170 + pictureUrl: { 1171 + type: 'string', 1172 + description: 'The URL of the picture of the artist.', 1173 + format: 'uri', 1174 + }, 1175 + tags: { 1176 + type: 'array', 1177 + description: 'The tags of the artist.', 1178 + items: { 1179 + type: 'string', 1180 + minLength: 1, 1181 + maxLength: 256, 1182 + }, 1183 + }, 1184 + born: { 1185 + type: 'string', 1186 + description: 'The birth date of the artist.', 1187 + format: 'datetime', 1188 + }, 1189 + died: { 1190 + type: 'string', 1191 + description: 'The death date of the artist.', 1192 + format: 'datetime', 1193 + }, 1194 + bornIn: { 1195 + type: 'string', 1196 + description: 'The birth place of the artist.', 1197 + maxLength: 256, 1198 + }, 1199 + createdAt: { 1200 + type: 'string', 1201 + description: 'The date when the artist was created.', 1202 + format: 'datetime', 1203 + }, 1204 + }, 1205 + }, 1206 + }, 1207 + }, 1208 + }, 1209 + AppRockskyArtistDefs: { 1210 + lexicon: 1, 1211 + id: 'app.rocksky.artist.defs', 1212 + defs: { 1213 + artistViewBasic: { 1214 + type: 'object', 1215 + properties: { 1216 + id: { 1217 + type: 'string', 1218 + description: 'The unique identifier of the artist.', 1219 + }, 1220 + uri: { 1221 + type: 'string', 1222 + description: 'The URI of the artist.', 1223 + format: 'at-uri', 1224 + }, 1225 + name: { 1226 + type: 'string', 1227 + description: 'The name of the artist.', 1228 + }, 1229 + picture: { 1230 + type: 'string', 1231 + description: 'The picture of the artist.', 1232 + }, 1233 + sha256: { 1234 + type: 'string', 1235 + description: 'The SHA256 hash of the artist.', 1236 + }, 1237 + playCount: { 1238 + type: 'integer', 1239 + description: 'The number of times the artist has been played.', 1240 + minimum: 0, 1241 + }, 1242 + uniqueListeners: { 1243 + type: 'integer', 1244 + description: 1245 + 'The number of unique listeners who have played the artist.', 1246 + minimum: 0, 1247 + }, 1248 + }, 1249 + }, 1250 + artistViewDetailed: { 1251 + type: 'object', 1252 + properties: { 1253 + id: { 1254 + type: 'string', 1255 + description: 'The unique identifier of the artist.', 1256 + }, 1257 + uri: { 1258 + type: 'string', 1259 + description: 'The URI of the artist.', 1260 + format: 'at-uri', 1261 + }, 1262 + name: { 1263 + type: 'string', 1264 + description: 'The name of the artist.', 1265 + }, 1266 + picture: { 1267 + type: 'string', 1268 + description: 'The picture of the artist.', 1269 + }, 1270 + sha256: { 1271 + type: 'string', 1272 + description: 'The SHA256 hash of the artist.', 1273 + }, 1274 + playCount: { 1275 + type: 'integer', 1276 + description: 'The number of times the artist has been played.', 1277 + minimum: 0, 1278 + }, 1279 + uniqueListeners: { 1280 + type: 'integer', 1281 + description: 1282 + 'The number of unique listeners who have played the artist.', 1283 + minimum: 0, 1284 + }, 1285 + }, 1286 + }, 1287 + songViewBasic: { 1288 + type: 'object', 1289 + properties: { 1290 + uri: { 1291 + type: 'string', 1292 + description: 'The URI of the song.', 1293 + format: 'at-uri', 1294 + }, 1295 + title: { 1296 + type: 'string', 1297 + description: 'The title of the song.', 1298 + }, 1299 + playCount: { 1300 + type: 'integer', 1301 + description: 'The number of times the song has been played.', 1302 + minimum: 0, 1303 + }, 1304 + }, 1305 + }, 1306 + listenerViewBasic: { 1307 + type: 'object', 1308 + properties: { 1309 + id: { 1310 + type: 'string', 1311 + description: 'The unique identifier of the actor.', 1312 + }, 1313 + did: { 1314 + type: 'string', 1315 + description: 'The DID of the listener.', 1316 + }, 1317 + handle: { 1318 + type: 'string', 1319 + description: 'The handle of the listener.', 1320 + }, 1321 + displayName: { 1322 + type: 'string', 1323 + description: 'The display name of the listener.', 1324 + }, 1325 + avatar: { 1326 + type: 'string', 1327 + description: "The URL of the listener's avatar image.", 1328 + format: 'uri', 1329 + }, 1330 + mostListenedSong: { 1331 + type: 'ref', 1332 + ref: 'lex:app.rocksky.artist.defs#songViewBasic', 1333 + }, 1334 + totalPlays: { 1335 + type: 'integer', 1336 + description: 'The total number of plays by the listener.', 1337 + minimum: 0, 1338 + }, 1339 + rank: { 1340 + type: 'integer', 1341 + description: 1342 + 'The rank of the listener among all listeners of the artist.', 1343 + minimum: 1, 1344 + }, 1345 + }, 1346 + }, 1347 + artistMbid: { 1348 + type: 'object', 1349 + properties: { 1350 + mbid: { 1351 + type: 'string', 1352 + description: 'The MusicBrainz Identifier (MBID) of the artist.', 1353 + }, 1354 + name: { 1355 + type: 'string', 1356 + description: 'The name of the artist.', 1357 + minLength: 1, 1358 + maxLength: 256, 1359 + }, 1360 + }, 1361 + }, 1362 + }, 1363 + }, 1364 + AppRockskyArtistGetArtist: { 1365 + lexicon: 1, 1366 + id: 'app.rocksky.artist.getArtist', 1367 + defs: { 1368 + main: { 1369 + type: 'query', 1370 + description: 'Get artist details', 1371 + parameters: { 1372 + type: 'params', 1373 + required: ['uri'], 1374 + properties: { 1375 + uri: { 1376 + type: 'string', 1377 + description: 'The URI of the artist to retrieve details from', 1378 + format: 'at-uri', 1379 + }, 1380 + }, 1381 + }, 1382 + output: { 1383 + encoding: 'application/json', 1384 + schema: { 1385 + type: 'ref', 1386 + ref: 'lex:app.rocksky.artist.defs#artistViewDetailed', 1387 + }, 1388 + }, 1389 + }, 1390 + }, 1391 + }, 1392 + AppRockskyArtistGetArtistAlbums: { 1393 + lexicon: 1, 1394 + id: 'app.rocksky.artist.getArtistAlbums', 1395 + defs: { 1396 + main: { 1397 + type: 'query', 1398 + description: "Get artist's albums", 1399 + parameters: { 1400 + type: 'params', 1401 + required: ['uri'], 1402 + properties: { 1403 + uri: { 1404 + type: 'string', 1405 + description: 'The URI of the artist to retrieve albums from', 1406 + format: 'at-uri', 1407 + }, 1408 + }, 1409 + }, 1410 + output: { 1411 + encoding: 'application/json', 1412 + schema: { 1413 + type: 'object', 1414 + properties: { 1415 + albums: { 1416 + type: 'array', 1417 + items: { 1418 + type: 'ref', 1419 + ref: 'lex:app.rocksky.album.defs#albumViewBasic', 1420 + }, 1421 + }, 1422 + }, 1423 + }, 1424 + }, 1425 + }, 1426 + }, 1427 + }, 1428 + AppRockskyArtistGetArtistListeners: { 1429 + lexicon: 1, 1430 + id: 'app.rocksky.artist.getArtistListeners', 1431 + defs: { 1432 + main: { 1433 + type: 'query', 1434 + description: 'Get artist listeners', 1435 + parameters: { 1436 + type: 'params', 1437 + required: ['uri'], 1438 + properties: { 1439 + uri: { 1440 + type: 'string', 1441 + description: 'The URI of the artist to retrieve listeners from', 1442 + format: 'at-uri', 1443 + }, 1444 + offset: { 1445 + type: 'integer', 1446 + description: 'Number of items to skip before returning results', 1447 + }, 1448 + limit: { 1449 + type: 'integer', 1450 + description: 'Maximum number of results to return', 1451 + }, 1452 + }, 1453 + }, 1454 + output: { 1455 + encoding: 'application/json', 1456 + schema: { 1457 + type: 'object', 1458 + properties: { 1459 + listeners: { 1460 + type: 'array', 1461 + items: { 1462 + type: 'ref', 1463 + ref: 'lex:app.rocksky.artist.defs#listenerViewBasic', 1464 + }, 1465 + }, 1466 + }, 1467 + }, 1468 + }, 1469 + }, 1470 + }, 1471 + }, 1472 + AppRockskyArtistGetArtists: { 1473 + lexicon: 1, 1474 + id: 'app.rocksky.artist.getArtists', 1475 + defs: { 1476 + main: { 1477 + type: 'query', 1478 + description: 'Get artists', 1479 + parameters: { 1480 + type: 'params', 1481 + properties: { 1482 + limit: { 1483 + type: 'integer', 1484 + description: 'The maximum number of artists to return', 1485 + minimum: 1, 1486 + }, 1487 + offset: { 1488 + type: 'integer', 1489 + description: 'The offset for pagination', 1490 + minimum: 0, 1491 + }, 1492 + names: { 1493 + type: 'string', 1494 + description: 'The names of the artists to return', 1495 + }, 1496 + }, 1497 + }, 1498 + output: { 1499 + encoding: 'application/json', 1500 + schema: { 1501 + type: 'object', 1502 + properties: { 1503 + artists: { 1504 + type: 'array', 1505 + items: { 1506 + type: 'ref', 1507 + ref: 'lex:app.rocksky.artist.defs#artistViewBasic', 1508 + }, 1509 + }, 1510 + }, 1511 + }, 1512 + }, 1513 + }, 1514 + }, 1515 + }, 1516 + AppRockskyArtistGetArtistTracks: { 1517 + lexicon: 1, 1518 + id: 'app.rocksky.artist.getArtistTracks', 1519 + defs: { 1520 + main: { 1521 + type: 'query', 1522 + description: "Get artist's tracks", 1523 + parameters: { 1524 + type: 'params', 1525 + properties: { 1526 + uri: { 1527 + type: 'string', 1528 + description: 'The URI of the artist to retrieve albums from', 1529 + format: 'at-uri', 1530 + }, 1531 + limit: { 1532 + type: 'integer', 1533 + description: 'The maximum number of tracks to return', 1534 + minimum: 1, 1535 + }, 1536 + offset: { 1537 + type: 'integer', 1538 + description: 'The offset for pagination', 1539 + minimum: 0, 1540 + }, 1541 + }, 1542 + }, 1543 + output: { 1544 + encoding: 'application/json', 1545 + schema: { 1546 + type: 'object', 1547 + properties: { 1548 + tracks: { 1549 + type: 'array', 1550 + items: { 1551 + type: 'ref', 1552 + ref: 'lex:app.rocksky.song.defs#songViewBasic', 1553 + }, 1554 + }, 1555 + }, 1556 + }, 1557 + }, 1558 + }, 1559 + }, 1560 + }, 1561 + AppRockskyChartsDefs: { 1562 + lexicon: 1, 1563 + id: 'app.rocksky.charts.defs', 1564 + defs: { 1565 + chartsView: { 1566 + type: 'object', 1567 + properties: { 1568 + scrobbles: { 1569 + type: 'array', 1570 + items: { 1571 + type: 'ref', 1572 + ref: 'lex:app.rocksky.charts.defs#scrobbleViewBasic', 1573 + }, 1574 + }, 1575 + }, 1576 + }, 1577 + scrobbleViewBasic: { 1578 + type: 'object', 1579 + properties: { 1580 + date: { 1581 + type: 'string', 1582 + description: 'The date of the scrobble.', 1583 + format: 'datetime', 1584 + }, 1585 + count: { 1586 + type: 'integer', 1587 + description: 'The number of scrobbles on this date.', 1588 + }, 1589 + }, 1590 + }, 1591 + }, 1592 + }, 1593 + AppRockskyChartsGetScrobblesChart: { 1594 + lexicon: 1, 1595 + id: 'app.rocksky.charts.getScrobblesChart', 1596 + defs: { 1597 + main: { 1598 + type: 'query', 1599 + description: 'Get the scrobbles chart', 1600 + parameters: { 1601 + type: 'params', 1602 + properties: { 1603 + did: { 1604 + type: 'string', 1605 + description: 'The DID or handle of the actor', 1606 + format: 'at-identifier', 1607 + }, 1608 + artisturi: { 1609 + type: 'string', 1610 + description: 'The URI of the artist to filter by', 1611 + format: 'at-uri', 1612 + }, 1613 + albumuri: { 1614 + type: 'string', 1615 + description: 'The URI of the album to filter by', 1616 + format: 'at-uri', 1617 + }, 1618 + songuri: { 1619 + type: 'string', 1620 + description: 'The URI of the track to filter by', 1621 + format: 'at-uri', 1622 + }, 1623 + }, 1624 + }, 1625 + output: { 1626 + encoding: 'application/json', 1627 + schema: { 1628 + type: 'ref', 1629 + ref: 'lex:app.rocksky.charts.defs#chartsView', 1630 + }, 1631 + }, 1632 + }, 1633 + }, 1634 + }, 1635 + AppRockskyDropboxDefs: { 1636 + lexicon: 1, 1637 + id: 'app.rocksky.dropbox.defs', 1638 + defs: { 1639 + fileView: { 1640 + type: 'object', 1641 + properties: { 1642 + id: { 1643 + type: 'string', 1644 + description: 'The unique identifier of the file.', 1645 + }, 1646 + name: { 1647 + type: 'string', 1648 + description: 'The name of the file.', 1649 + }, 1650 + pathLower: { 1651 + type: 'string', 1652 + description: 'The lowercased path of the file.', 1653 + }, 1654 + pathDisplay: { 1655 + type: 'string', 1656 + description: 'The display path of the file.', 1657 + }, 1658 + clientModified: { 1659 + type: 'string', 1660 + description: 1661 + 'The last modified date and time of the file on the client.', 1662 + format: 'datetime', 1663 + }, 1664 + serverModified: { 1665 + type: 'string', 1666 + description: 1667 + 'The last modified date and time of the file on the server.', 1668 + format: 'datetime', 1669 + }, 1670 + }, 1671 + }, 1672 + fileListView: { 1673 + type: 'object', 1674 + properties: { 1675 + files: { 1676 + type: 'array', 1677 + description: 'A list of files in the Dropbox.', 1678 + items: { 1679 + type: 'ref', 1680 + ref: 'lex:app.rocksky.dropbox.defs#fileView', 1681 + }, 1682 + }, 1683 + }, 1684 + }, 1685 + temporaryLinkView: { 1686 + type: 'object', 1687 + properties: { 1688 + link: { 1689 + type: 'string', 1690 + description: 'The temporary link to access the file.', 1691 + format: 'uri', 1692 + }, 1693 + }, 1694 + }, 1695 + }, 1696 + }, 1697 + AppRockskyDropboxDownloadFile: { 1698 + lexicon: 1, 1699 + id: 'app.rocksky.dropbox.downloadFile', 1700 + defs: { 1701 + main: { 1702 + type: 'query', 1703 + description: 'Download a file from Dropbox by its unique identifier', 1704 + parameters: { 1705 + type: 'params', 1706 + required: ['fileId'], 1707 + properties: { 1708 + fileId: { 1709 + type: 'string', 1710 + description: 'The unique identifier of the file to download', 1711 + }, 1712 + }, 1713 + }, 1714 + output: { 1715 + encoding: 'application/octet-stream', 1716 + }, 1717 + }, 1718 + }, 1719 + }, 1720 + AppRockskyDropboxGetFiles: { 1721 + lexicon: 1, 1722 + id: 'app.rocksky.dropbox.getFiles', 1723 + defs: { 1724 + main: { 1725 + type: 'query', 1726 + description: 'Retrieve a list of files from Dropbox', 1727 + parameters: { 1728 + type: 'params', 1729 + properties: { 1730 + at: { 1731 + type: 'string', 1732 + description: 'Path to the Dropbox folder or root directory', 1733 + }, 1734 + }, 1735 + }, 1736 + output: { 1737 + encoding: 'application/json', 1738 + schema: { 1739 + type: 'ref', 1740 + ref: 'lex:app.rocksky.dropbox.defs#fileListView', 1741 + }, 1742 + }, 1743 + }, 1744 + }, 1745 + }, 1746 + AppRockskyDropboxGetMetadata: { 1747 + lexicon: 1, 1748 + id: 'app.rocksky.dropbox.getMetadata', 1749 + defs: { 1750 + main: { 1751 + type: 'query', 1752 + description: 'Retrieve metadata of a file or folder in Dropbox', 1753 + parameters: { 1754 + type: 'params', 1755 + required: ['path'], 1756 + properties: { 1757 + path: { 1758 + type: 'string', 1759 + description: 'Path to the file or folder in Dropbox', 1760 + }, 1761 + }, 1762 + }, 1763 + output: { 1764 + encoding: 'application/json', 1765 + schema: { 1766 + type: 'ref', 1767 + ref: 'lex:app.rocksky.dropbox.defs#fileView', 1768 + }, 1769 + }, 1770 + }, 1771 + }, 1772 + }, 1773 + AppRockskyDropboxGetTemporaryLink: { 1774 + lexicon: 1, 1775 + id: 'app.rocksky.dropbox.getTemporaryLink', 1776 + defs: { 1777 + main: { 1778 + type: 'query', 1779 + description: 'Retrieve a temporary link to access a file in Dropbox', 1780 + parameters: { 1781 + type: 'params', 1782 + required: ['path'], 1783 + properties: { 1784 + path: { 1785 + type: 'string', 1786 + description: 'Path to the file in Dropbox', 1787 + }, 1788 + }, 1789 + }, 1790 + output: { 1791 + encoding: 'application/json', 1792 + schema: { 1793 + type: 'ref', 1794 + ref: 'lex:app.rocksky.dropbox.defs#temporaryLinkView', 1795 + }, 1796 + }, 1797 + }, 1798 + }, 1799 + }, 1800 + AppRockskyFeedDefs: { 1801 + lexicon: 1, 1802 + id: 'app.rocksky.feed.defs', 1803 + defs: { 1804 + searchResultsView: { 1805 + type: 'object', 1806 + properties: { 1807 + hits: { 1808 + type: 'array', 1809 + items: { 1810 + type: 'union', 1811 + refs: [ 1812 + 'lex:app.rocksky.song.defs#songViewBasic', 1813 + 'lex:app.rocksky.album.defs#albumViewBasic', 1814 + 'lex:app.rocksky.artist.defs#artistViewBasic', 1815 + 'lex:app.rocksky.playlist.defs#playlistViewBasic', 1816 + 'lex:app.rocksky.actor.defs#profileViewBasic', 1817 + ], 1818 + }, 1819 + }, 1820 + processingTimeMs: { 1821 + type: 'integer', 1822 + }, 1823 + limit: { 1824 + type: 'integer', 1825 + }, 1826 + offset: { 1827 + type: 'integer', 1828 + }, 1829 + estimatedTotalHits: { 1830 + type: 'integer', 1831 + }, 1832 + }, 1833 + }, 1834 + nowPlayingView: { 1835 + type: 'object', 1836 + properties: { 1837 + album: { 1838 + type: 'string', 1839 + }, 1840 + albumArt: { 1841 + type: 'string', 1842 + format: 'uri', 1843 + }, 1844 + albumArtist: { 1845 + type: 'string', 1846 + }, 1847 + albumUri: { 1848 + type: 'string', 1849 + format: 'at-uri', 1850 + }, 1851 + artist: { 1852 + type: 'string', 1853 + }, 1854 + artistUri: { 1855 + type: 'string', 1856 + format: 'at-uri', 1857 + }, 1858 + avatar: { 1859 + type: 'string', 1860 + format: 'uri', 1861 + }, 1862 + createdAt: { 1863 + type: 'string', 1864 + }, 1865 + did: { 1866 + type: 'string', 1867 + format: 'at-identifier', 1868 + }, 1869 + handle: { 1870 + type: 'string', 1871 + }, 1872 + id: { 1873 + type: 'string', 1874 + }, 1875 + title: { 1876 + type: 'string', 1877 + }, 1878 + trackId: { 1879 + type: 'string', 1880 + }, 1881 + trackUri: { 1882 + type: 'string', 1883 + format: 'at-uri', 1884 + }, 1885 + uri: { 1886 + type: 'string', 1887 + format: 'at-uri', 1888 + }, 1889 + }, 1890 + }, 1891 + nowPlayingsView: { 1892 + type: 'object', 1893 + properties: { 1894 + nowPlayings: { 1895 + type: 'array', 1896 + items: { 1897 + type: 'ref', 1898 + ref: 'lex:app.rocksky.feed.defs#nowPlayingView', 1899 + }, 1900 + }, 1901 + }, 1902 + }, 1903 + feedGeneratorsView: { 1904 + type: 'object', 1905 + properties: { 1906 + feeds: { 1907 + type: 'array', 1908 + items: { 1909 + type: 'ref', 1910 + ref: 'lex:app.rocksky.feed.defs#feedGeneratorView', 1911 + }, 1912 + }, 1913 + }, 1914 + }, 1915 + feedGeneratorView: { 1916 + type: 'object', 1917 + properties: { 1918 + id: { 1919 + type: 'string', 1920 + }, 1921 + name: { 1922 + type: 'string', 1923 + }, 1924 + description: { 1925 + type: 'string', 1926 + }, 1927 + uri: { 1928 + type: 'string', 1929 + format: 'at-uri', 1930 + }, 1931 + avatar: { 1932 + type: 'string', 1933 + format: 'uri', 1934 + }, 1935 + creator: { 1936 + type: 'ref', 1937 + ref: 'lex:app.rocksky.actor.defs#profileViewBasic', 1938 + }, 1939 + }, 1940 + }, 1941 + feedUriView: { 1942 + type: 'object', 1943 + properties: { 1944 + uri: { 1945 + type: 'string', 1946 + description: 'The feed URI.', 1947 + format: 'at-uri', 1948 + }, 1949 + }, 1950 + }, 1951 + feedItemView: { 1952 + type: 'object', 1953 + properties: { 1954 + scrobble: { 1955 + type: 'ref', 1956 + ref: 'lex:app.rocksky.scrobble.defs#scrobbleViewBasic', 1957 + }, 1958 + }, 1959 + }, 1960 + feedView: { 1961 + type: 'object', 1962 + properties: { 1963 + feed: { 1964 + type: 'array', 1965 + items: { 1966 + type: 'ref', 1967 + ref: 'lex:app.rocksky.feed.defs#feedItemView', 1968 + }, 1969 + }, 1970 + cursor: { 1971 + type: 'string', 1972 + description: 'The pagination cursor for the next set of results.', 1973 + }, 1974 + }, 1975 + }, 1976 + }, 1977 + }, 1978 + AppRockskyFeedDescribeFeedGenerator: { 1979 + lexicon: 1, 1980 + id: 'app.rocksky.feed.describeFeedGenerator', 1981 + defs: { 1982 + main: { 1983 + type: 'query', 1984 + description: 'Get information about a feed generator', 1985 + parameters: { 1986 + type: 'params', 1987 + properties: {}, 1988 + }, 1989 + output: { 1990 + encoding: 'application/json', 1991 + schema: { 1992 + type: 'object', 1993 + properties: { 1994 + did: { 1995 + type: 'string', 1996 + description: 'The DID of the feed generator.', 1997 + format: 'at-identifier', 1998 + }, 1999 + feeds: { 2000 + type: 'array', 2001 + description: 2002 + 'List of feed URIs generated by this feed generator.', 2003 + items: { 2004 + type: 'ref', 2005 + ref: 'lex:app.rocksky.feed.defs#feedUriView', 2006 + }, 2007 + }, 2008 + }, 2009 + }, 2010 + }, 2011 + }, 2012 + }, 2013 + }, 2014 + AppRockskyFeedGenerator: { 2015 + lexicon: 1, 2016 + id: 'app.rocksky.feed.generator', 2017 + defs: { 2018 + main: { 2019 + type: 'record', 2020 + description: 2021 + 'Record declaring of the existence of a feed generator, and containing metadata about it. The record can exist in any repository.', 2022 + key: 'tid', 2023 + record: { 2024 + type: 'object', 2025 + required: ['did', 'displayName', 'createdAt'], 2026 + properties: { 2027 + did: { 2028 + type: 'string', 2029 + format: 'did', 2030 + }, 2031 + avatar: { 2032 + type: 'blob', 2033 + accept: ['image/png', 'image/jpeg'], 2034 + maxSize: 1000000, 2035 + }, 2036 + displayName: { 2037 + type: 'string', 2038 + maxGraphemes: 24, 2039 + maxLength: 240, 2040 + }, 2041 + description: { 2042 + type: 'string', 2043 + maxGraphemes: 300, 2044 + maxLength: 3000, 2045 + }, 2046 + createdAt: { 2047 + type: 'string', 2048 + format: 'datetime', 2049 + }, 2050 + }, 2051 + }, 2052 + }, 2053 + }, 2054 + }, 2055 + AppRockskyFeedGetFeed: { 2056 + lexicon: 1, 2057 + id: 'app.rocksky.feed.getFeed', 2058 + defs: { 2059 + main: { 2060 + type: 'query', 2061 + description: 'Get the feed by uri', 2062 + parameters: { 2063 + type: 'params', 2064 + required: ['feed'], 2065 + properties: { 2066 + feed: { 2067 + type: 'string', 2068 + description: 'The feed URI.', 2069 + format: 'at-uri', 2070 + }, 2071 + limit: { 2072 + type: 'integer', 2073 + description: 'The maximum number of scrobbles to return', 2074 + minimum: 1, 2075 + }, 2076 + cursor: { 2077 + type: 'string', 2078 + description: 'The cursor for pagination', 2079 + }, 2080 + }, 2081 + }, 2082 + output: { 2083 + encoding: 'application/json', 2084 + schema: { 2085 + type: 'ref', 2086 + ref: 'lex:app.rocksky.feed.defs#feedView', 2087 + }, 2088 + }, 2089 + }, 2090 + }, 2091 + }, 2092 + AppRockskyFeedGetFeedGenerator: { 2093 + lexicon: 1, 2094 + id: 'app.rocksky.feed.getFeedGenerator', 2095 + defs: { 2096 + main: { 2097 + type: 'query', 2098 + description: 'Get information about a feed generator', 2099 + parameters: { 2100 + type: 'params', 2101 + required: ['feed'], 2102 + properties: { 2103 + feed: { 2104 + type: 'string', 2105 + description: 'AT-URI of the feed generator record.', 2106 + format: 'at-uri', 2107 + }, 2108 + }, 2109 + }, 2110 + output: { 2111 + encoding: 'application/json', 2112 + schema: { 2113 + type: 'object', 2114 + properties: { 2115 + view: { 2116 + type: 'ref', 2117 + ref: 'lex:app.rocksky.feed.defs#feedGeneratorView', 2118 + }, 2119 + }, 2120 + }, 2121 + }, 2122 + }, 2123 + }, 2124 + }, 2125 + AppRockskyFeedGetFeedGenerators: { 2126 + lexicon: 1, 2127 + id: 'app.rocksky.feed.getFeedGenerators', 2128 + defs: { 2129 + main: { 2130 + type: 'query', 2131 + description: 'Get all feed generators', 2132 + parameters: { 2133 + type: 'params', 2134 + properties: { 2135 + size: { 2136 + type: 'integer', 2137 + description: 'The maximum number of feed generators to return.', 2138 + minimum: 1, 2139 + }, 2140 + }, 2141 + }, 2142 + output: { 2143 + encoding: 'application/json', 2144 + schema: { 2145 + type: 'ref', 2146 + ref: 'lex:app.rocksky.feed.defs#feedGeneratorsView', 2147 + }, 2148 + }, 2149 + }, 2150 + }, 2151 + }, 2152 + AppRockskyFeedGetFeedSkeleton: { 2153 + lexicon: 1, 2154 + id: 'app.rocksky.feed.getFeedSkeleton', 2155 + defs: { 2156 + main: { 2157 + type: 'query', 2158 + description: 'Get the feed by uri', 2159 + parameters: { 2160 + type: 'params', 2161 + required: ['feed'], 2162 + properties: { 2163 + feed: { 2164 + type: 'string', 2165 + description: 'The feed URI.', 2166 + format: 'at-uri', 2167 + }, 2168 + limit: { 2169 + type: 'integer', 2170 + description: 'The maximum number of scrobbles to return', 2171 + minimum: 1, 2172 + }, 2173 + offset: { 2174 + type: 'integer', 2175 + description: 'The offset for pagination', 2176 + minimum: 0, 2177 + }, 2178 + cursor: { 2179 + type: 'string', 2180 + description: 'The pagination cursor.', 2181 + }, 2182 + }, 2183 + }, 2184 + output: { 2185 + encoding: 'application/json', 2186 + schema: { 2187 + type: 'object', 2188 + properties: { 2189 + scrobbles: { 2190 + type: 'array', 2191 + items: { 2192 + type: 'ref', 2193 + ref: 'lex:app.rocksky.scrobble.defs#scrobbleViewBasic', 2194 + }, 2195 + }, 2196 + cursor: { 2197 + type: 'string', 2198 + description: 2199 + 'The pagination cursor for the next set of results.', 2200 + }, 2201 + }, 2202 + }, 2203 + }, 2204 + }, 2205 + }, 2206 + }, 2207 + AppRockskyFeedGetNowPlayings: { 2208 + lexicon: 1, 2209 + id: 'app.rocksky.feed.getNowPlayings', 2210 + defs: { 2211 + main: { 2212 + type: 'query', 2213 + description: 'Get all currently playing tracks by users', 2214 + parameters: { 2215 + type: 'params', 2216 + properties: { 2217 + size: { 2218 + type: 'integer', 2219 + description: 2220 + 'The maximum number of now playing tracks to return.', 2221 + minimum: 1, 2222 + }, 2223 + }, 2224 + }, 2225 + output: { 2226 + encoding: 'application/json', 2227 + schema: { 2228 + type: 'ref', 2229 + ref: 'lex:app.rocksky.feed.defs#nowPlayingsView', 2230 + }, 2231 + }, 2232 + }, 2233 + }, 2234 + }, 2235 + AppRockskyFeedSearch: { 2236 + lexicon: 1, 2237 + id: 'app.rocksky.feed.search', 2238 + defs: { 2239 + main: { 2240 + type: 'query', 2241 + description: 'Search for content in the feed', 2242 + parameters: { 2243 + type: 'params', 2244 + required: ['query'], 2245 + properties: { 2246 + query: { 2247 + type: 'string', 2248 + description: 'The search query string', 2249 + }, 2250 + }, 2251 + }, 2252 + output: { 2253 + encoding: 'application/json', 2254 + schema: { 2255 + type: 'ref', 2256 + ref: 'lex:app.rocksky.feed.defs#searchResultsView', 2257 + }, 2258 + }, 2259 + }, 2260 + }, 2261 + }, 2262 + AppRockskyGoogledriveDefs: { 2263 + lexicon: 1, 2264 + id: 'app.rocksky.googledrive.defs', 2265 + defs: { 2266 + fileView: { 2267 + type: 'object', 2268 + properties: { 2269 + id: { 2270 + type: 'string', 2271 + description: 'The unique identifier of the file.', 2272 + }, 2273 + }, 2274 + }, 2275 + fileListView: { 2276 + type: 'object', 2277 + properties: { 2278 + files: { 2279 + type: 'array', 2280 + items: { 2281 + type: 'ref', 2282 + ref: 'lex:app.rocksky.googledrive.defs#fileView', 2283 + }, 2284 + }, 2285 + }, 2286 + }, 2287 + }, 2288 + }, 2289 + AppRockskyGoogledriveDownloadFile: { 2290 + lexicon: 1, 2291 + id: 'app.rocksky.googledrive.downloadFile', 2292 + defs: { 2293 + main: { 2294 + type: 'query', 2295 + description: 2296 + 'Download a file from Google Drive by its unique identifier', 2297 + parameters: { 2298 + type: 'params', 2299 + required: ['fileId'], 2300 + properties: { 2301 + fileId: { 2302 + type: 'string', 2303 + description: 'The unique identifier of the file to download', 2304 + }, 2305 + }, 2306 + }, 2307 + output: { 2308 + encoding: 'application/octet-stream', 2309 + }, 2310 + }, 2311 + }, 2312 + }, 2313 + AppRockskyGoogledriveGetFile: { 2314 + lexicon: 1, 2315 + id: 'app.rocksky.googledrive.getFile', 2316 + defs: { 2317 + main: { 2318 + type: 'query', 2319 + description: 'Get a file from Google Drive by its unique identifier', 2320 + parameters: { 2321 + type: 'params', 2322 + required: ['fileId'], 2323 + properties: { 2324 + fileId: { 2325 + type: 'string', 2326 + description: 'The unique identifier of the file to retrieve', 2327 + }, 2328 + }, 2329 + }, 2330 + output: { 2331 + encoding: 'application/json', 2332 + schema: { 2333 + type: 'ref', 2334 + ref: 'lex:app.rocksky.googledrive.defs#fileView', 2335 + }, 2336 + }, 2337 + }, 2338 + }, 2339 + }, 2340 + AppRockskyGoogledriveGetFiles: { 2341 + lexicon: 1, 2342 + id: 'app.rocksky.googledrive.getFiles', 2343 + defs: { 2344 + main: { 2345 + type: 'query', 2346 + description: 'Get a list of files from Google Drive', 2347 + parameters: { 2348 + type: 'params', 2349 + properties: { 2350 + at: { 2351 + type: 'string', 2352 + description: 'Path to the Google Drive folder or root directory', 2353 + }, 2354 + }, 2355 + }, 2356 + output: { 2357 + encoding: 'application/json', 2358 + schema: { 2359 + type: 'ref', 2360 + ref: 'lex:app.rocksky.googledrive.defs#fileListView', 2361 + }, 2362 + }, 2363 + }, 2364 + }, 2365 + }, 2366 + AppRockskyGraphDefs: { 2367 + lexicon: 1, 2368 + id: 'app.rocksky.graph.defs', 2369 + defs: { 2370 + notFoundActor: { 2371 + type: 'object', 2372 + description: 'indicates that a handle or DID could not be resolved', 2373 + required: ['actor', 'notFound'], 2374 + properties: { 2375 + actor: { 2376 + type: 'string', 2377 + format: 'at-identifier', 2378 + }, 2379 + notFound: { 2380 + type: 'boolean', 2381 + }, 2382 + }, 2383 + }, 2384 + relationship: { 2385 + type: 'object', 2386 + required: ['did'], 2387 + properties: { 2388 + did: { 2389 + type: 'string', 2390 + format: 'did', 2391 + }, 2392 + following: { 2393 + type: 'string', 2394 + description: 2395 + 'if the actor follows this DID, this is the AT-URI of the follow record', 2396 + format: 'at-uri', 2397 + }, 2398 + followedBy: { 2399 + type: 'string', 2400 + description: 2401 + 'if the actor is followed by this DID, contains the AT-URI of the follow record', 2402 + format: 'at-uri', 2403 + }, 2404 + }, 2405 + }, 2406 + }, 2407 + }, 2408 + AppRockskyGraphFollow: { 2409 + lexicon: 1, 2410 + id: 'app.rocksky.graph.follow', 2411 + defs: { 2412 + main: { 2413 + type: 'record', 2414 + description: 2415 + "Record declaring a social 'follow' relationship of another account.", 2416 + key: 'tid', 2417 + record: { 2418 + type: 'object', 2419 + required: ['createdAt', 'subject'], 2420 + properties: { 2421 + createdAt: { 2422 + type: 'string', 2423 + format: 'datetime', 2424 + }, 2425 + subject: { 2426 + type: 'string', 2427 + format: 'did', 2428 + }, 2429 + via: { 2430 + type: 'ref', 2431 + ref: 'lex:com.atproto.repo.strongRef', 2432 + }, 2433 + }, 2434 + }, 2435 + }, 2436 + }, 2437 + }, 2438 + AppRockskyGraphFollowAccount: { 2439 + lexicon: 1, 2440 + id: 'app.rocksky.graph.followAccount', 2441 + defs: { 2442 + main: { 2443 + type: 'procedure', 2444 + description: 2445 + "Creates a 'follow' relationship from the authenticated account to a specified account.", 2446 + parameters: { 2447 + type: 'params', 2448 + required: ['account'], 2449 + properties: { 2450 + account: { 2451 + type: 'string', 2452 + format: 'at-identifier', 2453 + }, 2454 + }, 2455 + }, 2456 + output: { 2457 + encoding: 'application/json', 2458 + schema: { 2459 + type: 'object', 2460 + required: ['subject', 'followers'], 2461 + properties: { 2462 + subject: { 2463 + type: 'ref', 2464 + ref: 'lex:app.rocksky.actor.defs#profileViewBasic', 2465 + }, 2466 + followers: { 2467 + type: 'array', 2468 + items: { 2469 + type: 'ref', 2470 + ref: 'lex:app.rocksky.actor.defs#profileViewBasic', 2471 + }, 2472 + }, 2473 + cursor: { 2474 + type: 'string', 2475 + description: 2476 + 'A cursor value to pass to subsequent calls to get the next page of results.', 2477 + }, 2478 + }, 2479 + }, 2480 + }, 2481 + }, 2482 + }, 2483 + }, 2484 + AppRockskyGraphGetFollowers: { 2485 + lexicon: 1, 2486 + id: 'app.rocksky.graph.getFollowers', 2487 + defs: { 2488 + main: { 2489 + type: 'query', 2490 + description: 2491 + 'Enumerates accounts which follow a specified account (actor).', 2492 + parameters: { 2493 + type: 'params', 2494 + required: ['actor'], 2495 + properties: { 2496 + actor: { 2497 + type: 'string', 2498 + format: 'at-identifier', 2499 + }, 2500 + limit: { 2501 + type: 'integer', 2502 + maximum: 100, 2503 + minimum: 1, 2504 + default: 50, 2505 + }, 2506 + dids: { 2507 + type: 'array', 2508 + description: 2509 + 'If provided, filters the followers to only include those with DIDs in this list.', 2510 + items: { 2511 + type: 'string', 2512 + format: 'did', 2513 + }, 2514 + }, 2515 + cursor: { 2516 + type: 'string', 2517 + }, 2518 + }, 2519 + }, 2520 + output: { 2521 + encoding: 'application/json', 2522 + schema: { 2523 + type: 'object', 2524 + required: ['subject', 'followers'], 2525 + properties: { 2526 + subject: { 2527 + type: 'ref', 2528 + ref: 'lex:app.rocksky.actor.defs#profileViewBasic', 2529 + }, 2530 + followers: { 2531 + type: 'array', 2532 + items: { 2533 + type: 'ref', 2534 + ref: 'lex:app.rocksky.actor.defs#profileViewBasic', 2535 + }, 2536 + }, 2537 + cursor: { 2538 + type: 'string', 2539 + description: 2540 + 'A cursor value to pass to subsequent calls to get the next page of results.', 2541 + }, 2542 + count: { 2543 + type: 'integer', 2544 + description: 'The total number of followers.', 2545 + }, 2546 + }, 2547 + }, 2548 + }, 2549 + }, 2550 + }, 2551 + }, 2552 + AppRockskyGraphGetFollows: { 2553 + lexicon: 1, 2554 + id: 'app.rocksky.graph.getFollows', 2555 + defs: { 2556 + main: { 2557 + type: 'query', 2558 + description: 2559 + 'Enumerates accounts which a specified account (actor) follows.', 2560 + parameters: { 2561 + type: 'params', 2562 + required: ['actor'], 2563 + properties: { 2564 + actor: { 2565 + type: 'string', 2566 + format: 'at-identifier', 2567 + }, 2568 + limit: { 2569 + type: 'integer', 2570 + maximum: 100, 2571 + minimum: 1, 2572 + default: 50, 2573 + }, 2574 + dids: { 2575 + type: 'array', 2576 + description: 2577 + 'If provided, filters the follows to only include those with DIDs in this list.', 2578 + items: { 2579 + type: 'string', 2580 + format: 'did', 2581 + }, 2582 + }, 2583 + cursor: { 2584 + type: 'string', 2585 + }, 2586 + }, 2587 + }, 2588 + output: { 2589 + encoding: 'application/json', 2590 + schema: { 2591 + type: 'object', 2592 + required: ['subject', 'follows'], 2593 + properties: { 2594 + subject: { 2595 + type: 'ref', 2596 + ref: 'lex:app.rocksky.actor.defs#profileViewBasic', 2597 + }, 2598 + follows: { 2599 + type: 'array', 2600 + items: { 2601 + type: 'ref', 2602 + ref: 'lex:app.rocksky.actor.defs#profileViewBasic', 2603 + }, 2604 + }, 2605 + cursor: { 2606 + type: 'string', 2607 + description: 2608 + 'A cursor value to pass to subsequent calls to get the next page of results.', 2609 + }, 2610 + count: { 2611 + type: 'integer', 2612 + description: 'The total number of follows.', 2613 + }, 2614 + }, 2615 + }, 2616 + }, 2617 + }, 2618 + }, 2619 + }, 2620 + AppRockskyGraphGetKnownFollowers: { 2621 + lexicon: 1, 2622 + id: 'app.rocksky.graph.getKnownFollowers', 2623 + defs: { 2624 + main: { 2625 + type: 'query', 2626 + description: 2627 + 'Enumerates accounts which follow a specified account (actor) and are followed by the viewer.', 2628 + parameters: { 2629 + type: 'params', 2630 + required: ['actor'], 2631 + properties: { 2632 + actor: { 2633 + type: 'string', 2634 + format: 'at-identifier', 2635 + }, 2636 + limit: { 2637 + type: 'integer', 2638 + maximum: 100, 2639 + minimum: 1, 2640 + default: 50, 2641 + }, 2642 + cursor: { 2643 + type: 'string', 2644 + }, 2645 + }, 2646 + }, 2647 + output: { 2648 + encoding: 'application/json', 2649 + schema: { 2650 + type: 'object', 2651 + required: ['subject', 'followers'], 2652 + properties: { 2653 + subject: { 2654 + type: 'ref', 2655 + ref: 'lex:app.rocksky.actor.defs#profileViewBasic', 2656 + }, 2657 + followers: { 2658 + type: 'array', 2659 + items: { 2660 + type: 'ref', 2661 + ref: 'lex:app.rocksky.actor.defs#profileViewBasic', 2662 + }, 2663 + }, 2664 + cursor: { 2665 + type: 'string', 2666 + description: 2667 + 'A cursor value to pass to subsequent calls to get the next page of results.', 2668 + }, 2669 + }, 2670 + }, 2671 + }, 2672 + }, 2673 + }, 2674 + }, 2675 + AppRockskyGraphUnfollowAccount: { 2676 + lexicon: 1, 2677 + id: 'app.rocksky.graph.unfollowAccount', 2678 + defs: { 2679 + main: { 2680 + type: 'procedure', 2681 + description: 2682 + "Removes a 'follow' relationship from the authenticated account to a specified account.", 2683 + parameters: { 2684 + type: 'params', 2685 + required: ['account'], 2686 + properties: { 2687 + account: { 2688 + type: 'string', 2689 + format: 'at-identifier', 2690 + }, 2691 + }, 2692 + }, 2693 + output: { 2694 + encoding: 'application/json', 2695 + schema: { 2696 + type: 'object', 2697 + required: ['subject', 'followers'], 2698 + properties: { 2699 + subject: { 2700 + type: 'ref', 2701 + ref: 'lex:app.rocksky.actor.defs#profileViewBasic', 2702 + }, 2703 + followers: { 2704 + type: 'array', 2705 + items: { 2706 + type: 'ref', 2707 + ref: 'lex:app.rocksky.actor.defs#profileViewBasic', 2708 + }, 2709 + }, 2710 + cursor: { 2711 + type: 'string', 2712 + description: 2713 + 'A cursor value to pass to subsequent calls to get the next page of results.', 2714 + }, 2715 + }, 2716 + }, 2717 + }, 2718 + }, 2719 + }, 2720 + }, 2721 + AppRockskyLikeDislikeShout: { 2722 + lexicon: 1, 2723 + id: 'app.rocksky.like.dislikeShout', 2724 + defs: { 2725 + main: { 2726 + type: 'procedure', 2727 + description: 'Dislike a shout', 2728 + input: { 2729 + encoding: 'application/json', 2730 + schema: { 2731 + type: 'object', 2732 + properties: { 2733 + uri: { 2734 + type: 'string', 2735 + description: 'The unique identifier of the shout to dislike', 2736 + format: 'at-uri', 2737 + }, 2738 + }, 2739 + }, 2740 + }, 2741 + output: { 2742 + encoding: 'application/json', 2743 + schema: { 2744 + type: 'ref', 2745 + ref: 'lex:app.rocksky.shout.defs#shoutView', 2746 + }, 2747 + }, 2748 + }, 2749 + }, 2750 + }, 2751 + AppRockskyLikeDislikeSong: { 2752 + lexicon: 1, 2753 + id: 'app.rocksky.like.dislikeSong', 2754 + defs: { 2755 + main: { 2756 + type: 'procedure', 2757 + description: 'Dislike a song', 2758 + input: { 2759 + encoding: 'application/json', 2760 + schema: { 2761 + type: 'object', 2762 + properties: { 2763 + uri: { 2764 + type: 'string', 2765 + description: 'The unique identifier of the song to dislike', 2766 + format: 'at-uri', 2767 + }, 2768 + }, 2769 + }, 2770 + }, 2771 + output: { 2772 + encoding: 'application/json', 2773 + schema: { 2774 + type: 'ref', 2775 + ref: 'lex:app.rocksky.song.defs#songViewDetailed', 2776 + }, 2777 + }, 2778 + }, 2779 + }, 2780 + }, 2781 + AppRockskyLike: { 2782 + lexicon: 1, 2783 + id: 'app.rocksky.like', 2784 + defs: { 2785 + main: { 2786 + type: 'record', 2787 + description: 'A declaration of a like.', 2788 + key: 'tid', 2789 + record: { 2790 + type: 'object', 2791 + required: ['createdAt', 'subject'], 2792 + properties: { 2793 + createdAt: { 2794 + type: 'string', 2795 + description: 'The date when the like was created.', 2796 + format: 'datetime', 2797 + }, 2798 + subject: { 2799 + type: 'ref', 2800 + ref: 'lex:com.atproto.repo.strongRef', 2801 + }, 2802 + }, 2803 + }, 2804 + }, 2805 + }, 2806 + }, 2807 + AppRockskyLikeLikeShout: { 2808 + lexicon: 1, 2809 + id: 'app.rocksky.like.likeShout', 2810 + defs: { 2811 + main: { 2812 + type: 'procedure', 2813 + description: 'Like a shout', 2814 + input: { 2815 + encoding: 'application/json', 2816 + schema: { 2817 + type: 'object', 2818 + properties: { 2819 + uri: { 2820 + type: 'string', 2821 + description: 'The unique identifier of the shout to like', 2822 + format: 'at-uri', 2823 + }, 2824 + }, 2825 + }, 2826 + }, 2827 + output: { 2828 + encoding: 'application/json', 2829 + schema: { 2830 + type: 'ref', 2831 + ref: 'lex:app.rocksky.shout.defs#shoutView', 2832 + }, 2833 + }, 2834 + }, 2835 + }, 2836 + }, 2837 + AppRockskyLikeLikeSong: { 2838 + lexicon: 1, 2839 + id: 'app.rocksky.like.likeSong', 2840 + defs: { 2841 + main: { 2842 + type: 'procedure', 2843 + description: 'Like a song', 2844 + input: { 2845 + encoding: 'application/json', 2846 + schema: { 2847 + type: 'object', 2848 + properties: { 2849 + uri: { 2850 + type: 'string', 2851 + description: 'The unique identifier of the song to like', 2852 + format: 'at-uri', 2853 + }, 2854 + }, 2855 + }, 2856 + }, 2857 + output: { 2858 + encoding: 'application/json', 2859 + schema: { 2860 + type: 'ref', 2861 + ref: 'lex:app.rocksky.song.defs#songViewDetailed', 2862 + }, 2863 + }, 2864 + }, 2865 + }, 2866 + }, 2867 + AppRockskyPlayerAddDirectoryToQueue: { 2868 + lexicon: 1, 2869 + id: 'app.rocksky.player.addDirectoryToQueue', 2870 + defs: { 2871 + main: { 2872 + type: 'procedure', 2873 + description: "Add directory to the player's queue", 2874 + parameters: { 2875 + type: 'params', 2876 + required: ['directory'], 2877 + properties: { 2878 + playerId: { 2879 + type: 'string', 2880 + }, 2881 + directory: { 2882 + type: 'string', 2883 + description: 'The directory to add to the queue', 2884 + }, 2885 + position: { 2886 + type: 'integer', 2887 + description: 2888 + 'Position in the queue to insert the directory at, defaults to the end if not specified', 2889 + }, 2890 + shuffle: { 2891 + type: 'boolean', 2892 + description: 2893 + 'Whether to shuffle the added directory in the queue', 2894 + }, 2895 + }, 2896 + }, 2897 + }, 2898 + }, 2899 + }, 2900 + AppRockskyPlayerAddItemsToQueue: { 2901 + lexicon: 1, 2902 + id: 'app.rocksky.player.addItemsToQueue', 2903 + defs: { 2904 + main: { 2905 + type: 'procedure', 2906 + description: "Add items to the player's queue", 2907 + parameters: { 2908 + type: 'params', 2909 + required: ['items'], 2910 + properties: { 2911 + playerId: { 2912 + type: 'string', 2913 + }, 2914 + items: { 2915 + type: 'array', 2916 + items: { 2917 + type: 'string', 2918 + description: 'List of file identifiers to add to the queue', 2919 + }, 2920 + }, 2921 + position: { 2922 + type: 'integer', 2923 + description: 2924 + 'Position in the queue to insert the items at, defaults to the end if not specified', 2925 + }, 2926 + shuffle: { 2927 + type: 'boolean', 2928 + description: 'Whether to shuffle the added items in the queue', 2929 + }, 2930 + }, 2931 + }, 2932 + }, 2933 + }, 2934 + }, 2935 + AppRockskyPlayerDefs: { 2936 + lexicon: 1, 2937 + id: 'app.rocksky.player.defs', 2938 + defs: { 2939 + currentlyPlayingViewDetailed: { 2940 + type: 'object', 2941 + properties: { 2942 + title: { 2943 + type: 'string', 2944 + description: 'The title of the currently playing track', 2945 + }, 2946 + }, 2947 + }, 2948 + playbackQueueViewDetailed: { 2949 + type: 'object', 2950 + properties: { 2951 + tracks: { 2952 + type: 'array', 2953 + items: { 2954 + type: 'ref', 2955 + ref: 'lex:app.rocksky.song.defs.songViewBasic', 2956 + }, 2957 + }, 2958 + }, 2959 + }, 2960 + }, 2961 + }, 2962 + AppRockskyPlayerGetCurrentlyPlaying: { 2963 + lexicon: 1, 2964 + id: 'app.rocksky.player.getCurrentlyPlaying', 2965 + defs: { 2966 + main: { 2967 + type: 'query', 2968 + description: 'Get the currently playing track', 2969 + parameters: { 2970 + type: 'params', 2971 + properties: { 2972 + playerId: { 2973 + type: 'string', 2974 + }, 2975 + actor: { 2976 + type: 'string', 2977 + description: 2978 + 'Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user.', 2979 + format: 'at-identifier', 2980 + }, 2981 + }, 2982 + }, 2983 + output: { 2984 + encoding: 'application/json', 2985 + schema: { 2986 + type: 'ref', 2987 + ref: 'lex:app.rocksky.player.defs#currentlyPlayingViewDetailed', 2988 + }, 2989 + }, 2990 + }, 2991 + }, 2992 + }, 2993 + AppRockskyPlayerGetPlaybackQueue: { 2994 + lexicon: 1, 2995 + id: 'app.rocksky.player.getPlaybackQueue', 2996 + defs: { 2997 + main: { 2998 + type: 'query', 2999 + description: 'Retrieve the current playback queue', 3000 + parameters: { 3001 + type: 'params', 3002 + properties: { 3003 + playerId: { 3004 + type: 'string', 3005 + }, 3006 + }, 3007 + }, 3008 + output: { 3009 + encoding: 'application/json', 3010 + schema: { 3011 + type: 'ref', 3012 + ref: 'lex:app.rocksky.player.defs#playbackQueueViewDetailed', 3013 + }, 3014 + }, 3015 + }, 3016 + }, 3017 + }, 3018 + AppRockskyPlayerNext: { 3019 + lexicon: 1, 3020 + id: 'app.rocksky.player.next', 3021 + defs: { 3022 + main: { 3023 + type: 'procedure', 3024 + description: 'Play the next track in the queue', 3025 + parameters: { 3026 + type: 'params', 3027 + properties: { 3028 + playerId: { 3029 + type: 'string', 3030 + }, 3031 + }, 3032 + }, 3033 + }, 3034 + }, 3035 + }, 3036 + AppRockskyPlayerPause: { 3037 + lexicon: 1, 3038 + id: 'app.rocksky.player.pause', 3039 + defs: { 3040 + main: { 3041 + type: 'procedure', 3042 + description: 'Pause the currently playing track', 3043 + parameters: { 3044 + type: 'params', 3045 + properties: { 3046 + playerId: { 3047 + type: 'string', 3048 + }, 3049 + }, 3050 + }, 3051 + }, 3052 + }, 3053 + }, 3054 + AppRockskyPlayerPlay: { 3055 + lexicon: 1, 3056 + id: 'app.rocksky.player.play', 3057 + defs: { 3058 + main: { 3059 + type: 'procedure', 3060 + description: 'Resume playback of the currently paused track', 3061 + parameters: { 3062 + type: 'params', 3063 + properties: { 3064 + playerId: { 3065 + type: 'string', 3066 + }, 3067 + }, 3068 + }, 3069 + }, 3070 + }, 3071 + }, 3072 + AppRockskyPlayerPlayDirectory: { 3073 + lexicon: 1, 3074 + id: 'app.rocksky.player.playDirectory', 3075 + defs: { 3076 + main: { 3077 + type: 'procedure', 3078 + description: 'Play all tracks in a directory', 3079 + parameters: { 3080 + type: 'params', 3081 + required: ['directoryId'], 3082 + properties: { 3083 + playerId: { 3084 + type: 'string', 3085 + }, 3086 + directoryId: { 3087 + type: 'string', 3088 + }, 3089 + shuffle: { 3090 + type: 'boolean', 3091 + }, 3092 + recurse: { 3093 + type: 'boolean', 3094 + }, 3095 + position: { 3096 + type: 'integer', 3097 + }, 3098 + }, 3099 + }, 3100 + }, 3101 + }, 3102 + }, 3103 + AppRockskyPlayerPlayFile: { 3104 + lexicon: 1, 3105 + id: 'app.rocksky.player.playFile', 3106 + defs: { 3107 + main: { 3108 + type: 'procedure', 3109 + description: 'Play a specific audio file', 3110 + parameters: { 3111 + type: 'params', 3112 + required: ['fileId'], 3113 + properties: { 3114 + playerId: { 3115 + type: 'string', 3116 + }, 3117 + fileId: { 3118 + type: 'string', 3119 + }, 3120 + }, 3121 + }, 3122 + }, 3123 + }, 3124 + }, 3125 + AppRockskyPlayerPrevious: { 3126 + lexicon: 1, 3127 + id: 'app.rocksky.player.previous', 3128 + defs: { 3129 + main: { 3130 + type: 'procedure', 3131 + description: 'Play the previous track in the queue', 3132 + parameters: { 3133 + type: 'params', 3134 + properties: { 3135 + playerId: { 3136 + type: 'string', 3137 + }, 3138 + }, 3139 + }, 3140 + }, 3141 + }, 3142 + }, 3143 + AppRockskyPlayerSeek: { 3144 + lexicon: 1, 3145 + id: 'app.rocksky.player.seek', 3146 + defs: { 3147 + main: { 3148 + type: 'procedure', 3149 + description: 3150 + 'Seek to a specific position in the currently playing track', 3151 + parameters: { 3152 + type: 'params', 3153 + required: ['position'], 3154 + properties: { 3155 + playerId: { 3156 + type: 'string', 3157 + }, 3158 + position: { 3159 + type: 'integer', 3160 + description: 'The position in seconds to seek to', 3161 + }, 3162 + }, 3163 + }, 3164 + }, 3165 + }, 3166 + }, 3167 + AppRockskyPlaylistCreatePlaylist: { 3168 + lexicon: 1, 3169 + id: 'app.rocksky.playlist.createPlaylist', 3170 + defs: { 3171 + main: { 3172 + type: 'procedure', 3173 + description: 'Create a new playlist', 3174 + parameters: { 3175 + type: 'params', 3176 + required: ['name'], 3177 + properties: { 3178 + name: { 3179 + type: 'string', 3180 + description: 'The name of the playlist', 3181 + }, 3182 + description: { 3183 + type: 'string', 3184 + description: 'A brief description of the playlist', 3185 + }, 3186 + }, 3187 + }, 3188 + }, 3189 + }, 3190 + }, 3191 + AppRockskyPlaylistDefs: { 3192 + lexicon: 1, 3193 + id: 'app.rocksky.playlist.defs', 3194 + defs: { 3195 + playlistViewDetailed: { 3196 + type: 'object', 3197 + description: 3198 + 'Detailed view of a playlist, including its tracks and metadata', 3199 + properties: { 3200 + id: { 3201 + type: 'string', 3202 + description: 'The unique identifier of the playlist.', 3203 + }, 3204 + title: { 3205 + type: 'string', 3206 + description: 'The title of the playlist.', 3207 + }, 3208 + uri: { 3209 + type: 'string', 3210 + description: 'The URI of the playlist.', 3211 + format: 'at-uri', 3212 + }, 3213 + curatorDid: { 3214 + type: 'string', 3215 + description: 'The DID of the curator of the playlist.', 3216 + format: 'at-identifier', 3217 + }, 3218 + curatorHandle: { 3219 + type: 'string', 3220 + description: 'The handle of the curator of the playlist.', 3221 + format: 'at-identifier', 3222 + }, 3223 + curatorName: { 3224 + type: 'string', 3225 + description: 'The name of the curator of the playlist.', 3226 + }, 3227 + curatorAvatarUrl: { 3228 + type: 'string', 3229 + description: 'The URL of the avatar image of the curator.', 3230 + format: 'uri', 3231 + }, 3232 + description: { 3233 + type: 'string', 3234 + description: 'A description of the playlist.', 3235 + }, 3236 + coverImageUrl: { 3237 + type: 'string', 3238 + description: 'The URL of the cover image for the playlist.', 3239 + format: 'uri', 3240 + }, 3241 + createdAt: { 3242 + type: 'string', 3243 + description: 'The date and time when the playlist was created.', 3244 + format: 'datetime', 3245 + }, 3246 + tracks: { 3247 + type: 'array', 3248 + description: 'A list of tracks in the playlist.', 3249 + items: { 3250 + type: 'ref', 3251 + ref: 'lex:app.rocksky.song.defs#songViewBasic', 3252 + }, 3253 + }, 3254 + }, 3255 + }, 3256 + playlistViewBasic: { 3257 + type: 'object', 3258 + description: 'Basic view of a playlist, including its metadata', 3259 + properties: { 3260 + id: { 3261 + type: 'string', 3262 + description: 'The unique identifier of the playlist.', 3263 + }, 3264 + title: { 3265 + type: 'string', 3266 + description: 'The title of the playlist.', 3267 + }, 3268 + uri: { 3269 + type: 'string', 3270 + description: 'The URI of the playlist.', 3271 + format: 'at-uri', 3272 + }, 3273 + curatorDid: { 3274 + type: 'string', 3275 + description: 'The DID of the curator of the playlist.', 3276 + format: 'at-identifier', 3277 + }, 3278 + curatorHandle: { 3279 + type: 'string', 3280 + description: 'The handle of the curator of the playlist.', 3281 + format: 'at-identifier', 3282 + }, 3283 + curatorName: { 3284 + type: 'string', 3285 + description: 'The name of the curator of the playlist.', 3286 + }, 3287 + curatorAvatarUrl: { 3288 + type: 'string', 3289 + description: 'The URL of the avatar image of the curator.', 3290 + format: 'uri', 3291 + }, 3292 + description: { 3293 + type: 'string', 3294 + description: 'A description of the playlist.', 3295 + }, 3296 + coverImageUrl: { 3297 + type: 'string', 3298 + description: 'The URL of the cover image for the playlist.', 3299 + format: 'uri', 3300 + }, 3301 + createdAt: { 3302 + type: 'string', 3303 + description: 'The date and time when the playlist was created.', 3304 + format: 'datetime', 3305 + }, 3306 + trackCount: { 3307 + type: 'integer', 3308 + description: 'The number of tracks in the playlist.', 3309 + minimum: 0, 3310 + }, 3311 + }, 3312 + }, 3313 + }, 3314 + }, 3315 + AppRockskyPlaylistGetPlaylist: { 3316 + lexicon: 1, 3317 + id: 'app.rocksky.playlist.getPlaylist', 3318 + defs: { 3319 + main: { 3320 + type: 'query', 3321 + description: 'Retrieve a playlist by its ID', 3322 + parameters: { 3323 + type: 'params', 3324 + required: ['uri'], 3325 + properties: { 3326 + uri: { 3327 + type: 'string', 3328 + description: 'The URI of the playlist to retrieve.', 3329 + format: 'at-uri', 3330 + }, 3331 + }, 3332 + }, 3333 + output: { 3334 + encoding: 'application/json', 3335 + schema: { 3336 + type: 'ref', 3337 + ref: 'lex:app.rocksky.playlist.defs#playlistViewDetailed', 3338 + }, 3339 + }, 3340 + }, 3341 + }, 3342 + }, 3343 + AppRockskyPlaylistGetPlaylists: { 3344 + lexicon: 1, 3345 + id: 'app.rocksky.playlist.getPlaylists', 3346 + defs: { 3347 + main: { 3348 + type: 'query', 3349 + description: 'Retrieve a list of playlists', 3350 + parameters: { 3351 + type: 'params', 3352 + properties: { 3353 + limit: { 3354 + type: 'integer', 3355 + description: 'The maximum number of playlists to return.', 3356 + }, 3357 + offset: { 3358 + type: 'integer', 3359 + description: 3360 + 'The offset for pagination, used to skip a number of playlists.', 3361 + }, 3362 + }, 3363 + }, 3364 + output: { 3365 + encoding: 'application/json', 3366 + schema: { 3367 + type: 'object', 3368 + properties: { 3369 + playlists: { 3370 + type: 'array', 3371 + items: { 3372 + type: 'ref', 3373 + ref: 'lex:app.rocksky.playlist.defs#playlistViewBasic', 3374 + }, 3375 + }, 3376 + }, 3377 + }, 3378 + }, 3379 + }, 3380 + }, 3381 + }, 3382 + AppRockskyPlaylistInsertDirectory: { 3383 + lexicon: 1, 3384 + id: 'app.rocksky.playlist.insertDirectory', 3385 + defs: { 3386 + main: { 3387 + type: 'procedure', 3388 + description: 'Insert a directory into a playlist', 3389 + parameters: { 3390 + type: 'params', 3391 + required: ['uri', 'directory'], 3392 + properties: { 3393 + uri: { 3394 + type: 'string', 3395 + description: 'The URI of the playlist to start', 3396 + format: 'at-uri', 3397 + }, 3398 + directory: { 3399 + type: 'string', 3400 + description: 'The directory (id) to insert into the playlist', 3401 + }, 3402 + position: { 3403 + type: 'integer', 3404 + description: 3405 + 'The position in the playlist to insert the directory at, if not specified, the directory will be appended', 3406 + }, 3407 + }, 3408 + }, 3409 + }, 3410 + }, 3411 + }, 3412 + AppRockskyPlaylistInsertFiles: { 3413 + lexicon: 1, 3414 + id: 'app.rocksky.playlist.insertFiles', 3415 + defs: { 3416 + main: { 3417 + type: 'procedure', 3418 + description: 'Insert files into a playlist', 3419 + parameters: { 3420 + type: 'params', 3421 + required: ['uri', 'files'], 3422 + properties: { 3423 + uri: { 3424 + type: 'string', 3425 + description: 'The URI of the playlist to start', 3426 + format: 'at-uri', 3427 + }, 3428 + files: { 3429 + type: 'array', 3430 + items: { 3431 + type: 'string', 3432 + description: 'List of file (id) to insert into the playlist', 3433 + }, 3434 + }, 3435 + position: { 3436 + type: 'integer', 3437 + description: 3438 + 'The position in the playlist to insert the files at, if not specified, files will be appended', 3439 + }, 3440 + }, 3441 + }, 3442 + }, 3443 + }, 3444 + }, 3445 + AppRockskyPlaylist: { 3446 + lexicon: 1, 3447 + id: 'app.rocksky.playlist', 3448 + defs: { 3449 + main: { 3450 + type: 'record', 3451 + description: 'A declaration of a playlist.', 3452 + key: 'tid', 3453 + record: { 3454 + type: 'object', 3455 + required: ['name', 'createdAt'], 3456 + properties: { 3457 + name: { 3458 + type: 'string', 3459 + description: 'The name of the playlist.', 3460 + minLength: 1, 3461 + maxLength: 512, 3462 + }, 3463 + description: { 3464 + type: 'string', 3465 + description: 'The playlist description.', 3466 + minLength: 1, 3467 + maxLength: 256, 3468 + }, 3469 + picture: { 3470 + type: 'blob', 3471 + description: 'The picture of the playlist.', 3472 + accept: ['image/png', 'image/jpeg'], 3473 + maxSize: 2000000, 3474 + }, 3475 + tracks: { 3476 + type: 'array', 3477 + description: 'The tracks in the playlist.', 3478 + items: { 3479 + type: 'ref', 3480 + ref: 'lex:app.rocksky.song#record', 3481 + }, 3482 + }, 3483 + createdAt: { 3484 + type: 'string', 3485 + description: 'The date the playlist was created.', 3486 + format: 'datetime', 3487 + }, 3488 + spotifyLink: { 3489 + type: 'string', 3490 + description: 'The Spotify link of the playlist.', 3491 + }, 3492 + tidalLink: { 3493 + type: 'string', 3494 + description: 'The Tidal link of the playlist.', 3495 + }, 3496 + youtubeLink: { 3497 + type: 'string', 3498 + description: 'The YouTube link of the playlist.', 3499 + }, 3500 + appleMusicLink: { 3501 + type: 'string', 3502 + description: 'The Apple Music link of the playlist.', 3503 + }, 3504 + }, 3505 + }, 3506 + }, 3507 + }, 3508 + }, 3509 + AppRockskyPlaylistRemovePlaylist: { 3510 + lexicon: 1, 3511 + id: 'app.rocksky.playlist.removePlaylist', 3512 + defs: { 3513 + main: { 3514 + type: 'procedure', 3515 + description: 'Remove a playlist', 3516 + parameters: { 3517 + type: 'params', 3518 + required: ['uri'], 3519 + properties: { 3520 + uri: { 3521 + type: 'string', 3522 + description: 'The URI of the playlist to remove', 3523 + format: 'at-uri', 3524 + }, 3525 + }, 3526 + }, 3527 + }, 3528 + }, 3529 + }, 3530 + AppRockskyPlaylistRemoveTrack: { 3531 + lexicon: 1, 3532 + id: 'app.rocksky.playlist.removeTrack', 3533 + defs: { 3534 + main: { 3535 + type: 'procedure', 3536 + description: 'Remove a track from a playlist', 3537 + parameters: { 3538 + type: 'params', 3539 + required: ['uri', 'position'], 3540 + properties: { 3541 + uri: { 3542 + type: 'string', 3543 + description: 'The URI of the playlist to remove the track from', 3544 + format: 'at-uri', 3545 + }, 3546 + position: { 3547 + type: 'integer', 3548 + description: 3549 + 'The position of the track to remove in the playlist', 3550 + }, 3551 + }, 3552 + }, 3553 + }, 3554 + }, 3555 + }, 3556 + AppRockskyPlaylistStartPlaylist: { 3557 + lexicon: 1, 3558 + id: 'app.rocksky.playlist.startPlaylist', 3559 + defs: { 3560 + main: { 3561 + type: 'procedure', 3562 + description: 'Start a playlist', 3563 + parameters: { 3564 + type: 'params', 3565 + required: ['uri'], 3566 + properties: { 3567 + uri: { 3568 + type: 'string', 3569 + description: 'The URI of the playlist to start', 3570 + format: 'at-uri', 3571 + }, 3572 + shuffle: { 3573 + type: 'boolean', 3574 + description: 'Whether to shuffle the playlist when starting it', 3575 + }, 3576 + position: { 3577 + type: 'integer', 3578 + description: 3579 + 'The position in the playlist to start from, if not specified, starts from the beginning', 3580 + }, 3581 + }, 3582 + }, 3583 + }, 3584 + }, 3585 + }, 3586 + AppRockskyRadioDefs: { 3587 + lexicon: 1, 3588 + id: 'app.rocksky.radio.defs', 3589 + defs: { 3590 + radioViewBasic: { 3591 + type: 'object', 3592 + properties: { 3593 + id: { 3594 + type: 'string', 3595 + description: 'The unique identifier of the radio.', 3596 + }, 3597 + name: { 3598 + type: 'string', 3599 + description: 'The name of the radio.', 3600 + }, 3601 + description: { 3602 + type: 'string', 3603 + description: 'A brief description of the radio.', 3604 + }, 3605 + createdAt: { 3606 + type: 'string', 3607 + description: 'The date and time when the radio was created.', 3608 + format: 'datetime', 3609 + }, 3610 + }, 3611 + }, 3612 + radioViewDetailed: { 3613 + type: 'object', 3614 + properties: { 3615 + id: { 3616 + type: 'string', 3617 + description: 'The unique identifier of the radio.', 3618 + }, 3619 + name: { 3620 + type: 'string', 3621 + description: 'The name of the radio.', 3622 + }, 3623 + description: { 3624 + type: 'string', 3625 + description: 'A brief description of the radio.', 3626 + }, 3627 + website: { 3628 + type: 'string', 3629 + description: 'The website of the radio.', 3630 + format: 'uri', 3631 + }, 3632 + url: { 3633 + type: 'string', 3634 + description: 'The streaming URL of the radio.', 3635 + format: 'uri', 3636 + }, 3637 + genre: { 3638 + type: 'string', 3639 + description: 'The genre of the radio.', 3640 + }, 3641 + logo: { 3642 + type: 'string', 3643 + description: 'The logo of the radio station.', 3644 + }, 3645 + createdAt: { 3646 + type: 'string', 3647 + description: 'The date and time when the radio was created.', 3648 + format: 'datetime', 3649 + }, 3650 + }, 3651 + }, 3652 + }, 3653 + }, 3654 + AppRockskyRadio: { 3655 + lexicon: 1, 3656 + id: 'app.rocksky.radio', 3657 + defs: { 3658 + main: { 3659 + type: 'record', 3660 + description: 'A declaration of a radio station.', 3661 + key: 'tid', 3662 + record: { 3663 + type: 'object', 3664 + required: ['name', 'url', 'createdAt'], 3665 + properties: { 3666 + name: { 3667 + type: 'string', 3668 + description: 'The name of the radio station.', 3669 + minLength: 1, 3670 + maxLength: 512, 3671 + }, 3672 + url: { 3673 + type: 'string', 3674 + description: 'The URL of the radio station.', 3675 + format: 'uri', 3676 + }, 3677 + description: { 3678 + type: 'string', 3679 + description: 'A description of the radio station.', 3680 + minLength: 1, 3681 + maxLength: 1000, 3682 + }, 3683 + genre: { 3684 + type: 'string', 3685 + description: 'The genre of the radio station.', 3686 + minLength: 1, 3687 + maxLength: 256, 3688 + }, 3689 + logo: { 3690 + type: 'blob', 3691 + description: 'The logo of the radio station.', 3692 + accept: ['image/png', 'image/jpeg'], 3693 + maxSize: 2000000, 3694 + }, 3695 + website: { 3696 + type: 'string', 3697 + description: 'The website of the radio station.', 3698 + format: 'uri', 3699 + }, 3700 + createdAt: { 3701 + type: 'string', 3702 + description: 'The date when the radio station was created.', 3703 + format: 'datetime', 3704 + }, 3705 + }, 3706 + }, 3707 + }, 3708 + }, 3709 + }, 3710 + AppRockskyScrobbleCreateScrobble: { 3711 + lexicon: 1, 3712 + id: 'app.rocksky.scrobble.createScrobble', 3713 + defs: { 3714 + main: { 3715 + type: 'procedure', 3716 + description: 'Create a new scrobble', 3717 + input: { 3718 + encoding: 'application/json', 3719 + schema: { 3720 + type: 'object', 3721 + required: ['title', 'artist'], 3722 + properties: { 3723 + title: { 3724 + type: 'string', 3725 + description: 'The title of the track being scrobbled', 3726 + }, 3727 + artist: { 3728 + type: 'string', 3729 + description: 'The artist of the track being scrobbled', 3730 + }, 3731 + album: { 3732 + type: 'string', 3733 + description: 'The album of the track being scrobbled', 3734 + }, 3735 + duration: { 3736 + type: 'integer', 3737 + description: 'The duration of the track in seconds', 3738 + }, 3739 + mbId: { 3740 + type: 'string', 3741 + description: 'The MusicBrainz ID of the track, if available', 3742 + }, 3743 + albumArt: { 3744 + type: 'string', 3745 + description: 'The URL of the album art for the track', 3746 + format: 'uri', 3747 + }, 3748 + trackNumber: { 3749 + type: 'integer', 3750 + description: 'The track number of the track in the album', 3751 + }, 3752 + releaseDate: { 3753 + type: 'string', 3754 + description: 3755 + 'The release date of the track, formatted as YYYY-MM-DD', 3756 + }, 3757 + year: { 3758 + type: 'integer', 3759 + description: 'The year the track was released', 3760 + }, 3761 + discNumber: { 3762 + type: 'integer', 3763 + description: 3764 + 'The disc number of the track in the album, if applicable', 3765 + }, 3766 + lyrics: { 3767 + type: 'string', 3768 + description: 'The lyrics of the track, if available', 3769 + }, 3770 + composer: { 3771 + type: 'string', 3772 + description: 'The composer of the track, if available', 3773 + }, 3774 + copyrightMessage: { 3775 + type: 'string', 3776 + description: 3777 + 'The copyright message for the track, if available', 3778 + }, 3779 + label: { 3780 + type: 'string', 3781 + description: 'The record label of the track, if available', 3782 + }, 3783 + artistPicture: { 3784 + type: 'string', 3785 + description: "The URL of the artist's picture, if available", 3786 + format: 'uri', 3787 + }, 3788 + spotifyLink: { 3789 + type: 'string', 3790 + description: 'The Spotify link for the track, if available', 3791 + format: 'uri', 3792 + }, 3793 + lastfmLink: { 3794 + type: 'string', 3795 + description: 'The Last.fm link for the track, if available', 3796 + format: 'uri', 3797 + }, 3798 + tidalLink: { 3799 + type: 'string', 3800 + description: 'The Tidal link for the track, if available', 3801 + format: 'uri', 3802 + }, 3803 + appleMusicLink: { 3804 + type: 'string', 3805 + description: 'The Apple Music link for the track, if available', 3806 + format: 'uri', 3807 + }, 3808 + youtubeLink: { 3809 + type: 'string', 3810 + description: 'The Youtube link for the track, if available', 3811 + format: 'uri', 3812 + }, 3813 + deezerLink: { 3814 + type: 'string', 3815 + description: 'The Deezer link for the track, if available', 3816 + format: 'uri', 3817 + }, 3818 + timestamp: { 3819 + type: 'integer', 3820 + description: 3821 + 'The timestamp of the scrobble in milliseconds since epoch', 3822 + }, 3823 + }, 3824 + }, 3825 + }, 3826 + output: { 3827 + encoding: 'application/json', 3828 + schema: { 3829 + type: 'ref', 3830 + ref: 'lex:app.rocksky.scrobble.defs#scrobbleViewBasic', 3831 + }, 3832 + }, 3833 + }, 3834 + }, 3835 + }, 3836 + AppRockskyScrobbleDefs: { 3837 + lexicon: 1, 3838 + id: 'app.rocksky.scrobble.defs', 3839 + defs: { 3840 + scrobbleViewBasic: { 3841 + type: 'object', 3842 + properties: { 3843 + id: { 3844 + type: 'string', 3845 + description: 'The unique identifier of the scrobble.', 3846 + }, 3847 + user: { 3848 + type: 'string', 3849 + description: 'The handle of the user who created the scrobble.', 3850 + }, 3851 + userDisplayName: { 3852 + type: 'string', 3853 + description: 3854 + 'The display name of the user who created the scrobble.', 3855 + }, 3856 + userAvatar: { 3857 + type: 'string', 3858 + description: 'The avatar URL of the user who created the scrobble.', 3859 + format: 'uri', 3860 + }, 3861 + title: { 3862 + type: 'string', 3863 + description: 'The title of the scrobble.', 3864 + }, 3865 + artist: { 3866 + type: 'string', 3867 + description: 'The artist of the song.', 3868 + }, 3869 + artistUri: { 3870 + type: 'string', 3871 + description: 'The URI of the artist.', 3872 + format: 'at-uri', 3873 + }, 3874 + album: { 3875 + type: 'string', 3876 + description: 'The album of the song.', 3877 + }, 3878 + albumUri: { 3879 + type: 'string', 3880 + description: 'The URI of the album.', 3881 + format: 'at-uri', 3882 + }, 3883 + cover: { 3884 + type: 'string', 3885 + description: 'The album art URL of the song.', 3886 + format: 'uri', 3887 + }, 3888 + date: { 3889 + type: 'string', 3890 + description: 'The timestamp when the scrobble was created.', 3891 + format: 'datetime', 3892 + }, 3893 + uri: { 3894 + type: 'string', 3895 + description: 'The URI of the scrobble.', 3896 + format: 'uri', 3897 + }, 3898 + sha256: { 3899 + type: 'string', 3900 + description: 'The SHA256 hash of the scrobble data.', 3901 + }, 3902 + liked: { 3903 + type: 'boolean', 3904 + }, 3905 + likesCount: { 3906 + type: 'integer', 3907 + }, 3908 + }, 3909 + }, 3910 + scrobbleViewDetailed: { 3911 + type: 'object', 3912 + properties: { 3913 + id: { 3914 + type: 'string', 3915 + description: 'The unique identifier of the scrobble.', 3916 + }, 3917 + user: { 3918 + type: 'string', 3919 + description: 'The handle of the user who created the scrobble.', 3920 + }, 3921 + title: { 3922 + type: 'string', 3923 + description: 'The title of the scrobble.', 3924 + }, 3925 + artist: { 3926 + type: 'string', 3927 + description: 'The artist of the song.', 3928 + }, 3929 + artistUri: { 3930 + type: 'string', 3931 + description: 'The URI of the artist.', 3932 + format: 'at-uri', 3933 + }, 3934 + album: { 3935 + type: 'string', 3936 + description: 'The album of the song.', 3937 + }, 3938 + albumUri: { 3939 + type: 'string', 3940 + description: 'The URI of the album.', 3941 + format: 'at-uri', 3942 + }, 3943 + cover: { 3944 + type: 'string', 3945 + description: 'The album art URL of the song.', 3946 + format: 'uri', 3947 + }, 3948 + date: { 3949 + type: 'string', 3950 + description: 'The timestamp when the scrobble was created.', 3951 + format: 'datetime', 3952 + }, 3953 + uri: { 3954 + type: 'string', 3955 + description: 'The URI of the scrobble.', 3956 + format: 'uri', 3957 + }, 3958 + sha256: { 3959 + type: 'string', 3960 + description: 'The SHA256 hash of the scrobble data.', 3961 + }, 3962 + listeners: { 3963 + type: 'integer', 3964 + description: 'The number of listeners', 3965 + }, 3966 + scrobbles: { 3967 + type: 'integer', 3968 + description: 'The number of scrobbles for this song', 3969 + }, 3970 + }, 3971 + }, 3972 + }, 3973 + }, 3974 + AppRockskyScrobbleGetScrobble: { 3975 + lexicon: 1, 3976 + id: 'app.rocksky.scrobble.getScrobble', 3977 + defs: { 3978 + main: { 3979 + type: 'query', 3980 + description: 'Get a scrobble by its unique identifier', 3981 + parameters: { 3982 + type: 'params', 3983 + required: ['uri'], 3984 + properties: { 3985 + uri: { 3986 + type: 'string', 3987 + description: 'The unique identifier of the scrobble', 3988 + format: 'at-uri', 3989 + }, 3990 + }, 3991 + }, 3992 + output: { 3993 + encoding: 'application/json', 3994 + schema: { 3995 + type: 'ref', 3996 + ref: 'lex:app.rocksky.scrobble.defs#scrobbleViewDetailed', 3997 + }, 3998 + }, 3999 + }, 4000 + }, 4001 + }, 4002 + AppRockskyScrobbleGetScrobbles: { 4003 + lexicon: 1, 4004 + id: 'app.rocksky.scrobble.getScrobbles', 4005 + defs: { 4006 + main: { 4007 + type: 'query', 4008 + description: 'Get scrobbles all scrobbles', 4009 + parameters: { 4010 + type: 'params', 4011 + properties: { 4012 + did: { 4013 + type: 'string', 4014 + description: 'The DID or handle of the actor', 4015 + format: 'at-identifier', 4016 + }, 4017 + following: { 4018 + type: 'boolean', 4019 + description: 4020 + 'If true, only return scrobbles from actors the viewer is following.', 4021 + }, 4022 + limit: { 4023 + type: 'integer', 4024 + description: 'The maximum number of scrobbles to return', 4025 + minimum: 1, 4026 + }, 4027 + offset: { 4028 + type: 'integer', 4029 + description: 'The offset for pagination', 4030 + minimum: 0, 4031 + }, 4032 + }, 4033 + }, 4034 + output: { 4035 + encoding: 'application/json', 4036 + schema: { 4037 + type: 'object', 4038 + properties: { 4039 + scrobbles: { 4040 + type: 'array', 4041 + items: { 4042 + type: 'ref', 4043 + ref: 'lex:app.rocksky.scrobble.defs#scrobbleViewBasic', 4044 + }, 4045 + }, 4046 + }, 4047 + }, 4048 + }, 4049 + }, 4050 + }, 4051 + }, 4052 + AppRockskyScrobble: { 4053 + lexicon: 1, 4054 + id: 'app.rocksky.scrobble', 4055 + defs: { 4056 + main: { 4057 + type: 'record', 4058 + description: 'A declaration of a scrobble.', 4059 + key: 'tid', 4060 + record: { 4061 + type: 'object', 4062 + required: [ 4063 + 'title', 4064 + 'artist', 4065 + 'album', 4066 + 'albumArtist', 4067 + 'duration', 4068 + 'createdAt', 4069 + ], 4070 + properties: { 4071 + title: { 4072 + type: 'string', 4073 + description: 'The title of the song.', 4074 + minLength: 1, 4075 + maxLength: 512, 4076 + }, 4077 + artist: { 4078 + type: 'string', 4079 + description: 'The artist of the song.', 4080 + minLength: 1, 4081 + maxLength: 256, 4082 + }, 4083 + artists: { 4084 + type: 'array', 4085 + description: 'The artists of the song with MusicBrainz IDs.', 4086 + items: { 4087 + type: 'ref', 4088 + ref: 'lex:app.rocksky.artist.defs#artistMbid', 4089 + }, 4090 + }, 4091 + albumArtist: { 4092 + type: 'string', 4093 + description: 'The album artist of the song.', 4094 + minLength: 1, 4095 + maxLength: 256, 4096 + }, 4097 + album: { 4098 + type: 'string', 4099 + description: 'The album of the song.', 4100 + minLength: 1, 4101 + maxLength: 256, 4102 + }, 4103 + duration: { 4104 + type: 'integer', 4105 + description: 'The duration of the song in seconds.', 4106 + minimum: 1, 4107 + }, 4108 + trackNumber: { 4109 + type: 'integer', 4110 + description: 'The track number of the song in the album.', 4111 + minimum: 1, 4112 + }, 4113 + discNumber: { 4114 + type: 'integer', 4115 + description: 'The disc number of the song in the album.', 4116 + minimum: 1, 4117 + }, 4118 + releaseDate: { 4119 + type: 'string', 4120 + description: 'The release date of the song.', 4121 + format: 'datetime', 4122 + }, 4123 + year: { 4124 + type: 'integer', 4125 + description: 'The year the song was released.', 4126 + }, 4127 + genre: { 4128 + type: 'string', 4129 + description: 'The genre of the song.', 4130 + maxLength: 256, 4131 + }, 4132 + tags: { 4133 + type: 'array', 4134 + description: 'The tags of the song.', 4135 + items: { 4136 + type: 'string', 4137 + minLength: 1, 4138 + maxLength: 256, 4139 + }, 4140 + }, 4141 + composer: { 4142 + type: 'string', 4143 + description: 'The composer of the song.', 4144 + maxLength: 256, 4145 + }, 4146 + lyrics: { 4147 + type: 'string', 4148 + description: 'The lyrics of the song.', 4149 + maxLength: 10000, 4150 + }, 4151 + copyrightMessage: { 4152 + type: 'string', 4153 + description: 'The copyright message of the song.', 4154 + maxLength: 256, 4155 + }, 4156 + wiki: { 4157 + type: 'string', 4158 + description: 'Informations about the song', 4159 + maxLength: 10000, 4160 + }, 4161 + albumArt: { 4162 + type: 'blob', 4163 + description: 'The album art of the song.', 4164 + accept: ['image/png', 'image/jpeg'], 4165 + maxSize: 2000000, 4166 + }, 4167 + albumArtUrl: { 4168 + type: 'string', 4169 + description: 'The URL of the album art of the song.', 4170 + format: 'uri', 4171 + }, 4172 + youtubeLink: { 4173 + type: 'string', 4174 + description: 'The YouTube link of the song.', 4175 + format: 'uri', 4176 + }, 4177 + spotifyLink: { 4178 + type: 'string', 4179 + description: 'The Spotify link of the song.', 4180 + format: 'uri', 4181 + }, 4182 + tidalLink: { 4183 + type: 'string', 4184 + description: 'The Tidal link of the song.', 4185 + format: 'uri', 4186 + }, 4187 + appleMusicLink: { 4188 + type: 'string', 4189 + description: 'The Apple Music link of the song.', 4190 + format: 'uri', 4191 + }, 4192 + createdAt: { 4193 + type: 'string', 4194 + description: 'The date when the song was created.', 4195 + format: 'datetime', 4196 + }, 4197 + mbid: { 4198 + type: 'string', 4199 + description: 'The MusicBrainz ID of the song.', 4200 + }, 4201 + label: { 4202 + type: 'string', 4203 + description: 'The label of the song.', 4204 + maxLength: 256, 4205 + }, 4206 + }, 4207 + }, 4208 + }, 4209 + }, 4210 + }, 4211 + AppRockskyShoutCreateShout: { 4212 + lexicon: 1, 4213 + id: 'app.rocksky.shout.createShout', 4214 + defs: { 4215 + main: { 4216 + type: 'procedure', 4217 + description: 'Create a new shout', 4218 + input: { 4219 + encoding: 'application/json', 4220 + schema: { 4221 + type: 'object', 4222 + properties: { 4223 + message: { 4224 + type: 'string', 4225 + description: 'The content of the shout', 4226 + minLength: 1, 4227 + }, 4228 + }, 4229 + }, 4230 + }, 4231 + output: { 4232 + encoding: 'application/json', 4233 + schema: { 4234 + type: 'ref', 4235 + ref: 'lex:app.rocksky.shout.defs#shoutView', 4236 + }, 4237 + }, 4238 + }, 4239 + }, 4240 + }, 4241 + AppRockskyShoutDefs: { 4242 + lexicon: 1, 4243 + id: 'app.rocksky.shout.defs', 4244 + defs: { 4245 + author: { 4246 + type: 'object', 4247 + properties: { 4248 + id: { 4249 + type: 'string', 4250 + description: 'The unique identifier of the author.', 4251 + }, 4252 + did: { 4253 + type: 'string', 4254 + description: 'The decentralized identifier (DID) of the author.', 4255 + format: 'at-identifier', 4256 + }, 4257 + handle: { 4258 + type: 'string', 4259 + description: 'The handle of the author.', 4260 + format: 'at-identifier', 4261 + }, 4262 + displayName: { 4263 + type: 'string', 4264 + description: 'The display name of the author.', 4265 + }, 4266 + avatar: { 4267 + type: 'string', 4268 + description: "The URL of the author's avatar image.", 4269 + format: 'uri', 4270 + }, 4271 + }, 4272 + }, 4273 + shoutView: { 4274 + type: 'object', 4275 + properties: { 4276 + id: { 4277 + type: 'string', 4278 + description: 'The unique identifier of the shout.', 4279 + }, 4280 + message: { 4281 + type: 'string', 4282 + description: 'The content of the shout.', 4283 + }, 4284 + parent: { 4285 + type: 'string', 4286 + description: 4287 + 'The ID of the parent shout if this is a reply, otherwise null.', 4288 + }, 4289 + createdAt: { 4290 + type: 'string', 4291 + description: 'The date and time when the shout was created.', 4292 + format: 'datetime', 4293 + }, 4294 + author: { 4295 + type: 'ref', 4296 + description: 'The author of the shout.', 4297 + ref: 'lex:app.rocksky.shout.defs#author', 4298 + }, 4299 + }, 4300 + }, 4301 + }, 4302 + }, 4303 + AppRockskyShoutGetAlbumShouts: { 4304 + lexicon: 1, 4305 + id: 'app.rocksky.shout.getAlbumShouts', 4306 + defs: { 4307 + main: { 4308 + type: 'query', 4309 + description: 'Get shouts for an album', 4310 + parameters: { 4311 + type: 'params', 4312 + required: ['uri'], 4313 + properties: { 4314 + uri: { 4315 + type: 'string', 4316 + description: 4317 + 'The unique identifier of the album to retrieve shouts for', 4318 + format: 'at-uri', 4319 + }, 4320 + limit: { 4321 + type: 'integer', 4322 + description: 'The maximum number of shouts to return', 4323 + minimum: 1, 4324 + }, 4325 + offset: { 4326 + type: 'integer', 4327 + description: 4328 + 'The number of shouts to skip before starting to collect the result set', 4329 + minimum: 0, 4330 + }, 4331 + }, 4332 + }, 4333 + output: { 4334 + encoding: 'application/json', 4335 + schema: { 4336 + type: 'object', 4337 + properties: { 4338 + shouts: { 4339 + type: 'array', 4340 + items: { 4341 + type: 'ref', 4342 + ref: 'lex:app.rocksky.shout.defs#shoutViewBasic', 4343 + }, 4344 + }, 4345 + }, 4346 + }, 4347 + }, 4348 + }, 4349 + }, 4350 + }, 4351 + AppRockskyShoutGetArtistShouts: { 4352 + lexicon: 1, 4353 + id: 'app.rocksky.shout.getArtistShouts', 4354 + defs: { 4355 + main: { 4356 + type: 'query', 4357 + description: 'Get shouts for an artist', 4358 + parameters: { 4359 + type: 'params', 4360 + required: ['uri'], 4361 + properties: { 4362 + uri: { 4363 + type: 'string', 4364 + description: 'The URI of the artist to retrieve shouts for', 4365 + format: 'at-uri', 4366 + }, 4367 + limit: { 4368 + type: 'integer', 4369 + description: 'The maximum number of shouts to return', 4370 + minimum: 1, 4371 + }, 4372 + offset: { 4373 + type: 'integer', 4374 + description: 4375 + 'The number of shouts to skip before starting to collect the result set', 4376 + minimum: 0, 4377 + }, 4378 + }, 4379 + }, 4380 + output: { 4381 + encoding: 'application/json', 4382 + schema: { 4383 + type: 'object', 4384 + properties: { 4385 + shouts: { 4386 + type: 'array', 4387 + items: { 4388 + type: 'ref', 4389 + ref: 'lex:app.rocksky.shout.defs#shoutViewBasic', 4390 + }, 4391 + }, 4392 + }, 4393 + }, 4394 + }, 4395 + }, 4396 + }, 4397 + }, 4398 + AppRockskyShoutGetProfileShouts: { 4399 + lexicon: 1, 4400 + id: 'app.rocksky.shout.getProfileShouts', 4401 + defs: { 4402 + main: { 4403 + type: 'query', 4404 + description: "Get the shouts of an actor's profile", 4405 + parameters: { 4406 + type: 'params', 4407 + required: ['did'], 4408 + properties: { 4409 + did: { 4410 + type: 'string', 4411 + description: 'The DID or handle of the actor', 4412 + format: 'at-identifier', 4413 + }, 4414 + offset: { 4415 + type: 'integer', 4416 + description: 'The offset for pagination', 4417 + minimum: 0, 4418 + }, 4419 + limit: { 4420 + type: 'integer', 4421 + description: 'The maximum number of shouts to return', 4422 + minimum: 1, 4423 + }, 4424 + }, 4425 + }, 4426 + output: { 4427 + encoding: 'application/json', 4428 + schema: { 4429 + type: 'object', 4430 + properties: { 4431 + shouts: { 4432 + type: 'array', 4433 + items: { 4434 + type: 'ref', 4435 + ref: 'lex:app.rocksky.shout.defs#shoutViewBasic', 4436 + }, 4437 + }, 4438 + }, 4439 + }, 4440 + }, 4441 + }, 4442 + }, 4443 + }, 4444 + AppRockskyShoutGetShoutReplies: { 4445 + lexicon: 1, 4446 + id: 'app.rocksky.shout.getShoutReplies', 4447 + defs: { 4448 + main: { 4449 + type: 'query', 4450 + description: 'Get replies to a shout', 4451 + parameters: { 4452 + type: 'params', 4453 + required: ['uri'], 4454 + properties: { 4455 + uri: { 4456 + type: 'string', 4457 + description: 'The URI of the shout to retrieve replies for', 4458 + format: 'at-uri', 4459 + }, 4460 + limit: { 4461 + type: 'integer', 4462 + description: 'The maximum number of shouts to return', 4463 + minimum: 1, 4464 + }, 4465 + offset: { 4466 + type: 'integer', 4467 + description: 4468 + 'The number of shouts to skip before starting to collect the result set', 4469 + minimum: 0, 4470 + }, 4471 + }, 4472 + }, 4473 + output: { 4474 + encoding: 'application/json', 4475 + schema: { 4476 + type: 'object', 4477 + properties: { 4478 + shouts: { 4479 + type: 'array', 4480 + items: { 4481 + type: 'ref', 4482 + ref: 'lex:app.rocksky.shout.defs#shoutViewBasic', 4483 + }, 4484 + }, 4485 + }, 4486 + }, 4487 + }, 4488 + }, 4489 + }, 4490 + }, 4491 + AppRockskyShoutGetTrackShouts: { 4492 + lexicon: 1, 4493 + id: 'app.rocksky.shout.getTrackShouts', 4494 + defs: { 4495 + main: { 4496 + type: 'query', 4497 + description: 'Get all shouts for a specific track', 4498 + parameters: { 4499 + type: 'params', 4500 + required: ['uri'], 4501 + properties: { 4502 + uri: { 4503 + type: 'string', 4504 + description: 'The URI of the track to retrieve shouts for', 4505 + format: 'at-uri', 4506 + }, 4507 + }, 4508 + }, 4509 + output: { 4510 + encoding: 'application/json', 4511 + schema: { 4512 + type: 'object', 4513 + properties: { 4514 + shouts: { 4515 + type: 'array', 4516 + items: { 4517 + type: 'ref', 4518 + ref: 'lex:app.rocksky.shout.defs#shoutViewBasic', 4519 + }, 4520 + }, 4521 + }, 4522 + }, 4523 + }, 4524 + }, 4525 + }, 4526 + }, 4527 + AppRockskyShoutRemoveShout: { 4528 + lexicon: 1, 4529 + id: 'app.rocksky.shout.removeShout', 4530 + defs: { 4531 + main: { 4532 + type: 'procedure', 4533 + description: 'Remove a shout by its ID', 4534 + parameters: { 4535 + type: 'params', 4536 + required: ['id'], 4537 + properties: { 4538 + id: { 4539 + type: 'string', 4540 + description: 'The ID of the shout to be removed', 4541 + }, 4542 + }, 4543 + }, 4544 + output: { 4545 + encoding: 'application/json', 4546 + schema: { 4547 + type: 'ref', 4548 + ref: 'lex:app.rocksky.shout.defs#shoutView', 4549 + }, 4550 + }, 4551 + }, 4552 + }, 4553 + }, 4554 + AppRockskyShoutReplyShout: { 4555 + lexicon: 1, 4556 + id: 'app.rocksky.shout.replyShout', 4557 + defs: { 4558 + main: { 4559 + type: 'procedure', 4560 + description: 'Reply to a shout', 4561 + input: { 4562 + encoding: 'application/json', 4563 + schema: { 4564 + type: 'object', 4565 + required: ['shoutId', 'message'], 4566 + properties: { 4567 + shoutId: { 4568 + type: 'string', 4569 + description: 'The unique identifier of the shout to reply to', 4570 + }, 4571 + message: { 4572 + type: 'string', 4573 + description: 'The content of the reply', 4574 + minLength: 1, 4575 + }, 4576 + }, 4577 + }, 4578 + }, 4579 + output: { 4580 + encoding: 'application/json', 4581 + schema: { 4582 + type: 'ref', 4583 + ref: 'lex:app.rocksky.shout.defs#shoutView', 4584 + }, 4585 + }, 4586 + }, 4587 + }, 4588 + }, 4589 + AppRockskyShoutReportShout: { 4590 + lexicon: 1, 4591 + id: 'app.rocksky.shout.reportShout', 4592 + defs: { 4593 + main: { 4594 + type: 'procedure', 4595 + description: 'Report a shout for moderation', 4596 + input: { 4597 + encoding: 'application/json', 4598 + schema: { 4599 + type: 'object', 4600 + required: ['shoutId'], 4601 + properties: { 4602 + shoutId: { 4603 + type: 'string', 4604 + description: 'The unique identifier of the shout to report', 4605 + }, 4606 + reason: { 4607 + type: 'string', 4608 + description: 'The reason for reporting the shout', 4609 + minLength: 1, 4610 + }, 4611 + }, 4612 + }, 4613 + }, 4614 + output: { 4615 + encoding: 'application/json', 4616 + schema: { 4617 + type: 'ref', 4618 + ref: 'lex:app.rocksky.shout.defs#shoutView', 4619 + }, 4620 + }, 4621 + }, 4622 + }, 4623 + }, 4624 + AppRockskyShout: { 4625 + lexicon: 1, 4626 + id: 'app.rocksky.shout', 4627 + defs: { 4628 + main: { 4629 + type: 'record', 4630 + description: 'A declaration of a shout.', 4631 + key: 'tid', 4632 + record: { 4633 + type: 'object', 4634 + required: ['message', 'createdAt', 'subject'], 4635 + properties: { 4636 + message: { 4637 + type: 'string', 4638 + description: 'The message of the shout.', 4639 + minLength: 1, 4640 + maxLength: 1000, 4641 + }, 4642 + createdAt: { 4643 + type: 'string', 4644 + description: 'The date when the shout was created.', 4645 + format: 'datetime', 4646 + }, 4647 + parent: { 4648 + type: 'ref', 4649 + ref: 'lex:com.atproto.repo.strongRef', 4650 + }, 4651 + subject: { 4652 + type: 'ref', 4653 + ref: 'lex:com.atproto.repo.strongRef', 4654 + }, 4655 + }, 4656 + }, 4657 + }, 4658 + }, 4659 + }, 4660 + AppRockskySongCreateSong: { 4661 + lexicon: 1, 4662 + id: 'app.rocksky.song.createSong', 4663 + defs: { 4664 + main: { 4665 + type: 'procedure', 4666 + description: 'Create a new song', 4667 + input: { 4668 + encoding: 'application/json', 4669 + schema: { 4670 + type: 'object', 4671 + required: ['title', 'artist', 'album', 'albumArtist'], 4672 + properties: { 4673 + title: { 4674 + type: 'string', 4675 + description: 'The title of the song', 4676 + }, 4677 + artist: { 4678 + type: 'string', 4679 + description: 'The artist of the song', 4680 + }, 4681 + albumArtist: { 4682 + type: 'string', 4683 + description: 4684 + 'The album artist of the song, if different from the main artist', 4685 + }, 4686 + album: { 4687 + type: 'string', 4688 + description: 'The album of the song, if applicable', 4689 + }, 4690 + duration: { 4691 + type: 'integer', 4692 + description: 'The duration of the song in seconds', 4693 + }, 4694 + mbId: { 4695 + type: 'string', 4696 + description: 'The MusicBrainz ID of the song, if available', 4697 + }, 4698 + albumArt: { 4699 + type: 'string', 4700 + description: 'The URL of the album art for the song', 4701 + format: 'uri', 4702 + }, 4703 + trackNumber: { 4704 + type: 'integer', 4705 + description: 4706 + 'The track number of the song in the album, if applicable', 4707 + }, 4708 + releaseDate: { 4709 + type: 'string', 4710 + description: 4711 + 'The release date of the song, formatted as YYYY-MM-DD', 4712 + }, 4713 + year: { 4714 + type: 'integer', 4715 + description: 'The year the song was released', 4716 + }, 4717 + discNumber: { 4718 + type: 'integer', 4719 + description: 4720 + 'The disc number of the song in the album, if applicable', 4721 + }, 4722 + lyrics: { 4723 + type: 'string', 4724 + description: 'The lyrics of the song, if available', 4725 + }, 4726 + }, 4727 + }, 4728 + }, 4729 + output: { 4730 + encoding: 'application/json', 4731 + schema: { 4732 + type: 'ref', 4733 + ref: 'lex:app.rocksky.song.defs#songViewDetailed', 4734 + }, 4735 + }, 4736 + }, 4737 + }, 4738 + }, 4739 + AppRockskySongDefs: { 4740 + lexicon: 1, 4741 + id: 'app.rocksky.song.defs', 4742 + defs: { 4743 + songViewBasic: { 4744 + type: 'object', 4745 + properties: { 4746 + id: { 4747 + type: 'string', 4748 + description: 'The unique identifier of the song.', 4749 + }, 4750 + title: { 4751 + type: 'string', 4752 + description: 'The title of the song.', 4753 + }, 4754 + artist: { 4755 + type: 'string', 4756 + description: 'The artist of the song.', 4757 + }, 4758 + albumArtist: { 4759 + type: 'string', 4760 + description: 'The artist of the album the song belongs to.', 4761 + }, 4762 + albumArt: { 4763 + type: 'string', 4764 + description: 'The URL of the album art image.', 4765 + format: 'uri', 4766 + }, 4767 + uri: { 4768 + type: 'string', 4769 + description: 'The URI of the song.', 4770 + format: 'at-uri', 4771 + }, 4772 + album: { 4773 + type: 'string', 4774 + description: 'The album of the song.', 4775 + }, 4776 + duration: { 4777 + type: 'integer', 4778 + description: 'The duration of the song in milliseconds.', 4779 + }, 4780 + trackNumber: { 4781 + type: 'integer', 4782 + description: 'The track number of the song in the album.', 4783 + }, 4784 + discNumber: { 4785 + type: 'integer', 4786 + description: 'The disc number of the song in the album.', 4787 + }, 4788 + playCount: { 4789 + type: 'integer', 4790 + description: 'The number of times the song has been played.', 4791 + minimum: 0, 4792 + }, 4793 + uniqueListeners: { 4794 + type: 'integer', 4795 + description: 4796 + 'The number of unique listeners who have played the song.', 4797 + minimum: 0, 4798 + }, 4799 + albumUri: { 4800 + type: 'string', 4801 + description: 'The URI of the album the song belongs to.', 4802 + format: 'at-uri', 4803 + }, 4804 + artistUri: { 4805 + type: 'string', 4806 + description: 'The URI of the artist of the song.', 4807 + format: 'at-uri', 4808 + }, 4809 + sha256: { 4810 + type: 'string', 4811 + description: 'The SHA256 hash of the song.', 4812 + }, 4813 + createdAt: { 4814 + type: 'string', 4815 + description: 'The timestamp when the song was created.', 4816 + format: 'datetime', 4817 + }, 4818 + }, 4819 + }, 4820 + songViewDetailed: { 4821 + type: 'object', 4822 + properties: { 4823 + id: { 4824 + type: 'string', 4825 + description: 'The unique identifier of the song.', 4826 + }, 4827 + title: { 4828 + type: 'string', 4829 + description: 'The title of the song.', 4830 + }, 4831 + artist: { 4832 + type: 'string', 4833 + description: 'The artist of the song.', 4834 + }, 4835 + albumArtist: { 4836 + type: 'string', 4837 + description: 'The artist of the album the song belongs to.', 4838 + }, 4839 + albumArt: { 4840 + type: 'string', 4841 + description: 'The URL of the album art image.', 4842 + format: 'uri', 4843 + }, 4844 + uri: { 4845 + type: 'string', 4846 + description: 'The URI of the song.', 4847 + format: 'at-uri', 4848 + }, 4849 + album: { 4850 + type: 'string', 4851 + description: 'The album of the song.', 4852 + }, 4853 + duration: { 4854 + type: 'integer', 4855 + description: 'The duration of the song in milliseconds.', 4856 + }, 4857 + trackNumber: { 4858 + type: 'integer', 4859 + description: 'The track number of the song in the album.', 4860 + }, 4861 + discNumber: { 4862 + type: 'integer', 4863 + description: 'The disc number of the song in the album.', 4864 + }, 4865 + playCount: { 4866 + type: 'integer', 4867 + description: 'The number of times the song has been played.', 4868 + minimum: 0, 4869 + }, 4870 + uniqueListeners: { 4871 + type: 'integer', 4872 + description: 4873 + 'The number of unique listeners who have played the song.', 4874 + minimum: 0, 4875 + }, 4876 + albumUri: { 4877 + type: 'string', 4878 + description: 'The URI of the album the song belongs to.', 4879 + format: 'at-uri', 4880 + }, 4881 + artistUri: { 4882 + type: 'string', 4883 + description: 'The URI of the artist of the song.', 4884 + format: 'at-uri', 4885 + }, 4886 + sha256: { 4887 + type: 'string', 4888 + description: 'The SHA256 hash of the song.', 4889 + }, 4890 + createdAt: { 4891 + type: 'string', 4892 + description: 'The timestamp when the song was created.', 4893 + format: 'datetime', 4894 + }, 4895 + }, 4896 + }, 4897 + }, 4898 + }, 4899 + AppRockskySongGetSong: { 4900 + lexicon: 1, 4901 + id: 'app.rocksky.song.getSong', 4902 + defs: { 4903 + main: { 4904 + type: 'query', 4905 + description: 'Get a song by its uri', 4906 + parameters: { 4907 + type: 'params', 4908 + required: ['uri'], 4909 + properties: { 4910 + uri: { 4911 + type: 'string', 4912 + description: 'The unique identifier of the song to retrieve', 4913 + format: 'at-uri', 4914 + }, 4915 + }, 4916 + }, 4917 + output: { 4918 + encoding: 'application/json', 4919 + schema: { 4920 + type: 'ref', 4921 + ref: 'lex:app.rocksky.song.defs#songViewDetailed', 4922 + }, 4923 + }, 4924 + }, 4925 + }, 4926 + }, 4927 + AppRockskySongGetSongs: { 4928 + lexicon: 1, 4929 + id: 'app.rocksky.song.getSongs', 4930 + defs: { 4931 + main: { 4932 + type: 'query', 4933 + description: 'Get songs', 4934 + parameters: { 4935 + type: 'params', 4936 + properties: { 4937 + limit: { 4938 + type: 'integer', 4939 + description: 'The maximum number of songs to return', 4940 + minimum: 1, 4941 + }, 4942 + offset: { 4943 + type: 'integer', 4944 + description: 'The offset for pagination', 4945 + minimum: 0, 4946 + }, 4947 + }, 4948 + }, 4949 + output: { 4950 + encoding: 'application/json', 4951 + schema: { 4952 + type: 'object', 4953 + properties: { 4954 + songs: { 4955 + type: 'array', 4956 + items: { 4957 + type: 'ref', 4958 + ref: 'lex:app.rocksky.song.defs#songViewBasic', 4959 + }, 4960 + }, 4961 + }, 4962 + }, 4963 + }, 4964 + }, 4965 + }, 4966 + }, 4967 + AppRockskySong: { 4968 + lexicon: 1, 4969 + id: 'app.rocksky.song', 4970 + defs: { 4971 + main: { 4972 + type: 'record', 4973 + description: 'A declaration of a song.', 4974 + key: 'tid', 4975 + record: { 4976 + type: 'object', 4977 + required: [ 4978 + 'title', 4979 + 'artist', 4980 + 'album', 4981 + 'albumArtist', 4982 + 'duration', 4983 + 'createdAt', 4984 + ], 4985 + properties: { 4986 + title: { 4987 + type: 'string', 4988 + description: 'The title of the song.', 4989 + minLength: 1, 4990 + maxLength: 512, 4991 + }, 4992 + artist: { 4993 + type: 'string', 4994 + description: 'The artist of the song.', 4995 + minLength: 1, 4996 + maxLength: 256, 4997 + }, 4998 + artists: { 4999 + type: 'array', 5000 + description: 'The artists of the song with MusicBrainz IDs.', 5001 + items: { 5002 + type: 'ref', 5003 + ref: 'lex:app.rocksky.artist.defs#artistMbid', 5004 + }, 5005 + }, 5006 + albumArtist: { 5007 + type: 'string', 5008 + description: 'The album artist of the song.', 5009 + minLength: 1, 5010 + maxLength: 256, 5011 + }, 5012 + album: { 5013 + type: 'string', 5014 + description: 'The album of the song.', 5015 + minLength: 1, 5016 + maxLength: 256, 5017 + }, 5018 + duration: { 5019 + type: 'integer', 5020 + description: 'The duration of the song in seconds.', 5021 + minimum: 1, 5022 + }, 5023 + trackNumber: { 5024 + type: 'integer', 5025 + description: 'The track number of the song in the album.', 5026 + minimum: 1, 5027 + }, 5028 + discNumber: { 5029 + type: 'integer', 5030 + description: 'The disc number of the song in the album.', 5031 + minimum: 1, 5032 + }, 5033 + releaseDate: { 5034 + type: 'string', 5035 + description: 'The release date of the song.', 5036 + format: 'datetime', 5037 + }, 5038 + year: { 5039 + type: 'integer', 5040 + description: 'The year the song was released.', 5041 + }, 5042 + genre: { 5043 + type: 'string', 5044 + description: 'The genre of the song.', 5045 + minLength: 1, 5046 + maxLength: 256, 5047 + }, 5048 + tags: { 5049 + type: 'array', 5050 + description: 'The tags of the song.', 5051 + items: { 5052 + type: 'string', 5053 + minLength: 1, 5054 + maxLength: 256, 5055 + }, 5056 + }, 5057 + composer: { 5058 + type: 'string', 5059 + description: 'The composer of the song.', 5060 + maxLength: 256, 5061 + }, 5062 + lyrics: { 5063 + type: 'string', 5064 + description: 'The lyrics of the song.', 5065 + maxLength: 10000, 5066 + }, 5067 + copyrightMessage: { 5068 + type: 'string', 5069 + description: 'The copyright message of the song.', 5070 + maxLength: 256, 5071 + }, 5072 + wiki: { 5073 + type: 'string', 5074 + description: 'Informations about the song', 5075 + maxLength: 10000, 5076 + }, 5077 + albumArt: { 5078 + type: 'blob', 5079 + description: 'The album art of the song.', 5080 + accept: ['image/png', 'image/jpeg'], 5081 + maxSize: 2000000, 5082 + }, 5083 + albumArtUrl: { 5084 + type: 'string', 5085 + description: 'The URL of the album art of the song.', 5086 + format: 'uri', 5087 + }, 5088 + youtubeLink: { 5089 + type: 'string', 5090 + description: 'The YouTube link of the song.', 5091 + format: 'uri', 5092 + }, 5093 + spotifyLink: { 5094 + type: 'string', 5095 + description: 'The Spotify link of the song.', 5096 + format: 'uri', 5097 + }, 5098 + tidalLink: { 5099 + type: 'string', 5100 + description: 'The Tidal link of the song.', 5101 + format: 'uri', 5102 + }, 5103 + appleMusicLink: { 5104 + type: 'string', 5105 + description: 'The Apple Music link of the song.', 5106 + format: 'uri', 5107 + }, 5108 + createdAt: { 5109 + type: 'string', 5110 + description: 'The date when the song was created.', 5111 + format: 'datetime', 5112 + }, 5113 + mbid: { 5114 + type: 'string', 5115 + description: 'The MusicBrainz ID of the song.', 5116 + }, 5117 + label: { 5118 + type: 'string', 5119 + description: 'The label of the song.', 5120 + maxLength: 256, 5121 + }, 5122 + }, 5123 + }, 5124 + }, 5125 + }, 5126 + }, 5127 + AppRockskySpotifyDefs: { 5128 + lexicon: 1, 5129 + id: 'app.rocksky.spotify.defs', 5130 + defs: { 5131 + spotifyTrackView: { 5132 + type: 'object', 5133 + properties: { 5134 + id: { 5135 + type: 'string', 5136 + description: 'The unique identifier of the Spotify track.', 5137 + }, 5138 + name: { 5139 + type: 'string', 5140 + description: 'The name of the track.', 5141 + }, 5142 + artist: { 5143 + type: 'string', 5144 + description: 'The name of the artist.', 5145 + }, 5146 + album: { 5147 + type: 'string', 5148 + description: 'The name of the album.', 5149 + }, 5150 + duration: { 5151 + type: 'integer', 5152 + description: 'The duration of the track in milliseconds.', 5153 + }, 5154 + previewUrl: { 5155 + type: 'string', 5156 + description: 'A URL to a preview of the track.', 5157 + }, 5158 + }, 5159 + }, 5160 + }, 5161 + }, 5162 + AppRockskySpotifyGetCurrentlyPlaying: { 5163 + lexicon: 1, 5164 + id: 'app.rocksky.spotify.getCurrentlyPlaying', 5165 + defs: { 5166 + main: { 5167 + type: 'query', 5168 + description: 'Get the currently playing track', 5169 + parameters: { 5170 + type: 'params', 5171 + properties: { 5172 + actor: { 5173 + type: 'string', 5174 + description: 5175 + 'Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user.', 5176 + format: 'at-identifier', 5177 + }, 5178 + }, 5179 + }, 5180 + output: { 5181 + encoding: 'application/json', 5182 + schema: { 5183 + type: 'ref', 5184 + ref: 'lex:app.rocksky.player.defs#currentlyPlayingViewDetailed', 5185 + }, 5186 + }, 5187 + }, 5188 + }, 5189 + }, 5190 + AppRockskySpotifyNext: { 5191 + lexicon: 1, 5192 + id: 'app.rocksky.spotify.next', 5193 + defs: { 5194 + main: { 5195 + type: 'procedure', 5196 + description: 'Play the next track in the queue', 5197 + }, 5198 + }, 5199 + }, 5200 + AppRockskySpotifyPause: { 5201 + lexicon: 1, 5202 + id: 'app.rocksky.spotify.pause', 5203 + defs: { 5204 + main: { 5205 + type: 'procedure', 5206 + description: 'Pause the currently playing track', 5207 + }, 5208 + }, 5209 + }, 5210 + AppRockskySpotifyPlay: { 5211 + lexicon: 1, 5212 + id: 'app.rocksky.spotify.play', 5213 + defs: { 5214 + main: { 5215 + type: 'procedure', 5216 + description: 'Resume playback of the currently paused track', 5217 + }, 5218 + }, 5219 + }, 5220 + AppRockskySpotifyPrevious: { 5221 + lexicon: 1, 5222 + id: 'app.rocksky.spotify.previous', 5223 + defs: { 5224 + main: { 5225 + type: 'procedure', 5226 + description: 'Play the previous track in the queue', 5227 + }, 5228 + }, 5229 + }, 5230 + AppRockskySpotifySeek: { 5231 + lexicon: 1, 5232 + id: 'app.rocksky.spotify.seek', 5233 + defs: { 5234 + main: { 5235 + type: 'procedure', 5236 + description: 5237 + 'Seek to a specific position in the currently playing track', 5238 + parameters: { 5239 + type: 'params', 5240 + required: ['position'], 5241 + properties: { 5242 + position: { 5243 + type: 'integer', 5244 + description: 'The position in seconds to seek to', 5245 + }, 5246 + }, 5247 + }, 5248 + }, 5249 + }, 5250 + }, 5251 + AppRockskyStatsDefs: { 5252 + lexicon: 1, 5253 + id: 'app.rocksky.stats.defs', 5254 + defs: { 5255 + statsView: { 5256 + type: 'object', 5257 + properties: { 5258 + scrobbles: { 5259 + type: 'integer', 5260 + description: 'The total number of scrobbles.', 5261 + }, 5262 + artists: { 5263 + type: 'integer', 5264 + description: 'The total number of unique artists scrobbled.', 5265 + }, 5266 + lovedTracks: { 5267 + type: 'integer', 5268 + description: 'The total number of tracks marked as loved.', 5269 + }, 5270 + albums: { 5271 + type: 'integer', 5272 + description: 'The total number of unique albums scrobbled.', 5273 + }, 5274 + tracks: { 5275 + type: 'integer', 5276 + description: 'The total number of unique tracks scrobbled.', 5277 + }, 5278 + }, 5279 + }, 5280 + }, 5281 + }, 5282 + AppRockskyStatsGetStats: { 5283 + lexicon: 1, 5284 + id: 'app.rocksky.stats.getStats', 5285 + defs: { 5286 + main: { 5287 + type: 'query', 5288 + parameters: { 5289 + type: 'params', 5290 + required: ['did'], 5291 + properties: { 5292 + did: { 5293 + type: 'string', 5294 + description: 'The DID or handle of the user to get stats for.', 5295 + format: 'at-identifier', 5296 + }, 5297 + }, 5298 + }, 5299 + output: { 5300 + encoding: 'application/json', 5301 + schema: { 5302 + type: 'ref', 5303 + ref: 'lex:app.rocksky.stats.defs#statsView', 5304 + }, 5305 + }, 5306 + }, 5307 + }, 5308 + }, 5309 + ComAtprotoRepoStrongRef: { 5310 + lexicon: 1, 5311 + id: 'com.atproto.repo.strongRef', 5312 + description: 'A URI with a content-hash fingerprint.', 5313 + defs: { 5314 + main: { 5315 + type: 'object', 5316 + required: ['uri', 'cid'], 5317 + properties: { 5318 + uri: { 5319 + type: 'string', 5320 + format: 'at-uri', 5321 + }, 5322 + cid: { 5323 + type: 'string', 5324 + format: 'cid', 5325 + }, 5326 + }, 5327 + }, 5328 + }, 5329 + }, 5330 + } as const satisfies Record<string, LexiconDoc> 5331 + 5332 + export const schemas = Object.values(schemaDict) 5333 + export const lexicons: Lexicons = new Lexicons(schemas) 5334 + export const ids = { 5335 + AppRockskyActorDefs: 'app.rocksky.actor.defs', 5336 + AppRockskyActorGetActorAlbums: 'app.rocksky.actor.getActorAlbums', 5337 + AppRockskyActorGetActorArtists: 'app.rocksky.actor.getActorArtists', 5338 + AppRockskyActorGetActorCompatibility: 5339 + 'app.rocksky.actor.getActorCompatibility', 5340 + AppRockskyActorGetActorLovedSongs: 'app.rocksky.actor.getActorLovedSongs', 5341 + AppRockskyActorGetActorNeighbours: 'app.rocksky.actor.getActorNeighbours', 5342 + AppRockskyActorGetActorPlaylists: 'app.rocksky.actor.getActorPlaylists', 5343 + AppRockskyActorGetActorScrobbles: 'app.rocksky.actor.getActorScrobbles', 5344 + AppRockskyActorGetActorSongs: 'app.rocksky.actor.getActorSongs', 5345 + AppRockskyActorGetProfile: 'app.rocksky.actor.getProfile', 5346 + AppBskyActorProfile: 'app.bsky.actor.profile', 5347 + AppRockskyAlbum: 'app.rocksky.album', 5348 + AppRockskyAlbumDefs: 'app.rocksky.album.defs', 5349 + AppRockskyAlbumGetAlbum: 'app.rocksky.album.getAlbum', 5350 + AppRockskyAlbumGetAlbums: 'app.rocksky.album.getAlbums', 5351 + AppRockskyAlbumGetAlbumTracks: 'app.rocksky.album.getAlbumTracks', 5352 + AppRockskyApikeyCreateApikey: 'app.rocksky.apikey.createApikey', 5353 + AppRockskyApikeyDefs: 'app.rocksky.apikey.defs', 5354 + AppRockskyApikeysDefs: 'app.rocksky.apikeys.defs', 5355 + AppRockskyApikeyGetApikeys: 'app.rocksky.apikey.getApikeys', 5356 + AppRockskyApikeyRemoveApikey: 'app.rocksky.apikey.removeApikey', 5357 + AppRockskyApikeyUpdateApikey: 'app.rocksky.apikey.updateApikey', 5358 + AppRockskyArtist: 'app.rocksky.artist', 5359 + AppRockskyArtistDefs: 'app.rocksky.artist.defs', 5360 + AppRockskyArtistGetArtist: 'app.rocksky.artist.getArtist', 5361 + AppRockskyArtistGetArtistAlbums: 'app.rocksky.artist.getArtistAlbums', 5362 + AppRockskyArtistGetArtistListeners: 'app.rocksky.artist.getArtistListeners', 5363 + AppRockskyArtistGetArtists: 'app.rocksky.artist.getArtists', 5364 + AppRockskyArtistGetArtistTracks: 'app.rocksky.artist.getArtistTracks', 5365 + AppRockskyChartsDefs: 'app.rocksky.charts.defs', 5366 + AppRockskyChartsGetScrobblesChart: 'app.rocksky.charts.getScrobblesChart', 5367 + AppRockskyDropboxDefs: 'app.rocksky.dropbox.defs', 5368 + AppRockskyDropboxDownloadFile: 'app.rocksky.dropbox.downloadFile', 5369 + AppRockskyDropboxGetFiles: 'app.rocksky.dropbox.getFiles', 5370 + AppRockskyDropboxGetMetadata: 'app.rocksky.dropbox.getMetadata', 5371 + AppRockskyDropboxGetTemporaryLink: 'app.rocksky.dropbox.getTemporaryLink', 5372 + AppRockskyFeedDefs: 'app.rocksky.feed.defs', 5373 + AppRockskyFeedDescribeFeedGenerator: 'app.rocksky.feed.describeFeedGenerator', 5374 + AppRockskyFeedGenerator: 'app.rocksky.feed.generator', 5375 + AppRockskyFeedGetFeed: 'app.rocksky.feed.getFeed', 5376 + AppRockskyFeedGetFeedGenerator: 'app.rocksky.feed.getFeedGenerator', 5377 + AppRockskyFeedGetFeedGenerators: 'app.rocksky.feed.getFeedGenerators', 5378 + AppRockskyFeedGetFeedSkeleton: 'app.rocksky.feed.getFeedSkeleton', 5379 + AppRockskyFeedGetNowPlayings: 'app.rocksky.feed.getNowPlayings', 5380 + AppRockskyFeedSearch: 'app.rocksky.feed.search', 5381 + AppRockskyGoogledriveDefs: 'app.rocksky.googledrive.defs', 5382 + AppRockskyGoogledriveDownloadFile: 'app.rocksky.googledrive.downloadFile', 5383 + AppRockskyGoogledriveGetFile: 'app.rocksky.googledrive.getFile', 5384 + AppRockskyGoogledriveGetFiles: 'app.rocksky.googledrive.getFiles', 5385 + AppRockskyGraphDefs: 'app.rocksky.graph.defs', 5386 + AppRockskyGraphFollow: 'app.rocksky.graph.follow', 5387 + AppRockskyGraphFollowAccount: 'app.rocksky.graph.followAccount', 5388 + AppRockskyGraphGetFollowers: 'app.rocksky.graph.getFollowers', 5389 + AppRockskyGraphGetFollows: 'app.rocksky.graph.getFollows', 5390 + AppRockskyGraphGetKnownFollowers: 'app.rocksky.graph.getKnownFollowers', 5391 + AppRockskyGraphUnfollowAccount: 'app.rocksky.graph.unfollowAccount', 5392 + AppRockskyLikeDislikeShout: 'app.rocksky.like.dislikeShout', 5393 + AppRockskyLikeDislikeSong: 'app.rocksky.like.dislikeSong', 5394 + AppRockskyLike: 'app.rocksky.like', 5395 + AppRockskyLikeLikeShout: 'app.rocksky.like.likeShout', 5396 + AppRockskyLikeLikeSong: 'app.rocksky.like.likeSong', 5397 + AppRockskyPlayerAddDirectoryToQueue: 'app.rocksky.player.addDirectoryToQueue', 5398 + AppRockskyPlayerAddItemsToQueue: 'app.rocksky.player.addItemsToQueue', 5399 + AppRockskyPlayerDefs: 'app.rocksky.player.defs', 5400 + AppRockskyPlayerGetCurrentlyPlaying: 'app.rocksky.player.getCurrentlyPlaying', 5401 + AppRockskyPlayerGetPlaybackQueue: 'app.rocksky.player.getPlaybackQueue', 5402 + AppRockskyPlayerNext: 'app.rocksky.player.next', 5403 + AppRockskyPlayerPause: 'app.rocksky.player.pause', 5404 + AppRockskyPlayerPlay: 'app.rocksky.player.play', 5405 + AppRockskyPlayerPlayDirectory: 'app.rocksky.player.playDirectory', 5406 + AppRockskyPlayerPlayFile: 'app.rocksky.player.playFile', 5407 + AppRockskyPlayerPrevious: 'app.rocksky.player.previous', 5408 + AppRockskyPlayerSeek: 'app.rocksky.player.seek', 5409 + AppRockskyPlaylistCreatePlaylist: 'app.rocksky.playlist.createPlaylist', 5410 + AppRockskyPlaylistDefs: 'app.rocksky.playlist.defs', 5411 + AppRockskyPlaylistGetPlaylist: 'app.rocksky.playlist.getPlaylist', 5412 + AppRockskyPlaylistGetPlaylists: 'app.rocksky.playlist.getPlaylists', 5413 + AppRockskyPlaylistInsertDirectory: 'app.rocksky.playlist.insertDirectory', 5414 + AppRockskyPlaylistInsertFiles: 'app.rocksky.playlist.insertFiles', 5415 + AppRockskyPlaylist: 'app.rocksky.playlist', 5416 + AppRockskyPlaylistRemovePlaylist: 'app.rocksky.playlist.removePlaylist', 5417 + AppRockskyPlaylistRemoveTrack: 'app.rocksky.playlist.removeTrack', 5418 + AppRockskyPlaylistStartPlaylist: 'app.rocksky.playlist.startPlaylist', 5419 + AppRockskyRadioDefs: 'app.rocksky.radio.defs', 5420 + AppRockskyRadio: 'app.rocksky.radio', 5421 + AppRockskyScrobbleCreateScrobble: 'app.rocksky.scrobble.createScrobble', 5422 + AppRockskyScrobbleDefs: 'app.rocksky.scrobble.defs', 5423 + AppRockskyScrobbleGetScrobble: 'app.rocksky.scrobble.getScrobble', 5424 + AppRockskyScrobbleGetScrobbles: 'app.rocksky.scrobble.getScrobbles', 5425 + AppRockskyScrobble: 'app.rocksky.scrobble', 5426 + AppRockskyShoutCreateShout: 'app.rocksky.shout.createShout', 5427 + AppRockskyShoutDefs: 'app.rocksky.shout.defs', 5428 + AppRockskyShoutGetAlbumShouts: 'app.rocksky.shout.getAlbumShouts', 5429 + AppRockskyShoutGetArtistShouts: 'app.rocksky.shout.getArtistShouts', 5430 + AppRockskyShoutGetProfileShouts: 'app.rocksky.shout.getProfileShouts', 5431 + AppRockskyShoutGetShoutReplies: 'app.rocksky.shout.getShoutReplies', 5432 + AppRockskyShoutGetTrackShouts: 'app.rocksky.shout.getTrackShouts', 5433 + AppRockskyShoutRemoveShout: 'app.rocksky.shout.removeShout', 5434 + AppRockskyShoutReplyShout: 'app.rocksky.shout.replyShout', 5435 + AppRockskyShoutReportShout: 'app.rocksky.shout.reportShout', 5436 + AppRockskyShout: 'app.rocksky.shout', 5437 + AppRockskySongCreateSong: 'app.rocksky.song.createSong', 5438 + AppRockskySongDefs: 'app.rocksky.song.defs', 5439 + AppRockskySongGetSong: 'app.rocksky.song.getSong', 5440 + AppRockskySongGetSongs: 'app.rocksky.song.getSongs', 5441 + AppRockskySong: 'app.rocksky.song', 5442 + AppRockskySpotifyDefs: 'app.rocksky.spotify.defs', 5443 + AppRockskySpotifyGetCurrentlyPlaying: 5444 + 'app.rocksky.spotify.getCurrentlyPlaying', 5445 + AppRockskySpotifyNext: 'app.rocksky.spotify.next', 5446 + AppRockskySpotifyPause: 'app.rocksky.spotify.pause', 5447 + AppRockskySpotifyPlay: 'app.rocksky.spotify.play', 5448 + AppRockskySpotifyPrevious: 'app.rocksky.spotify.previous', 5449 + AppRockskySpotifySeek: 'app.rocksky.spotify.seek', 5450 + AppRockskyStatsDefs: 'app.rocksky.stats.defs', 5451 + AppRockskyStatsGetStats: 'app.rocksky.stats.getStats', 5452 + ComAtprotoRepoStrongRef: 'com.atproto.repo.strongRef', 5453 + }
+38
apps/cli/src/lexicon/types/app/bsky/actor/profile.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 + import * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs' 9 + import * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef' 10 + 11 + export interface Record { 12 + displayName?: string 13 + /** Free-form profile description text. */ 14 + description?: string 15 + /** Small image to be displayed next to posts from account. AKA, 'profile picture' */ 16 + avatar?: BlobRef 17 + /** Larger horizontal image to display behind profile view. */ 18 + banner?: BlobRef 19 + labels?: 20 + | ComAtprotoLabelDefs.SelfLabels 21 + | { $type: string; [k: string]: unknown } 22 + joinedViaStarterPack?: ComAtprotoRepoStrongRef.Main 23 + createdAt?: string 24 + [k: string]: unknown 25 + } 26 + 27 + export function isRecord(v: unknown): v is Record { 28 + return ( 29 + isObj(v) && 30 + hasProp(v, '$type') && 31 + (v.$type === 'app.bsky.actor.profile#main' || 32 + v.$type === 'app.bsky.actor.profile') 33 + ) 34 + } 35 + 36 + export function validateRecord(v: unknown): ValidationResult { 37 + return lexicons.validate('app.bsky.actor.profile#main', v) 38 + }
+146
apps/cli/src/lexicon/types/app/rocksky/actor/defs.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 + import * as AppRockskyArtistDefs from '../artist/defs' 9 + 10 + export interface ProfileViewDetailed { 11 + /** The unique identifier of the actor. */ 12 + id?: string 13 + /** The DID of the actor. */ 14 + did?: string 15 + /** The handle of the actor. */ 16 + handle?: string 17 + /** The display name of the actor. */ 18 + displayName?: string 19 + /** The URL of the actor's avatar image. */ 20 + avatar?: string 21 + /** The date and time when the actor was created. */ 22 + createdAt?: string 23 + /** The date and time when the actor was last updated. */ 24 + updatedAt?: string 25 + [k: string]: unknown 26 + } 27 + 28 + export function isProfileViewDetailed(v: unknown): v is ProfileViewDetailed { 29 + return ( 30 + isObj(v) && 31 + hasProp(v, '$type') && 32 + v.$type === 'app.rocksky.actor.defs#profileViewDetailed' 33 + ) 34 + } 35 + 36 + export function validateProfileViewDetailed(v: unknown): ValidationResult { 37 + return lexicons.validate('app.rocksky.actor.defs#profileViewDetailed', v) 38 + } 39 + 40 + export interface ProfileViewBasic { 41 + /** The unique identifier of the actor. */ 42 + id?: string 43 + /** The DID of the actor. */ 44 + did?: string 45 + /** The handle of the actor. */ 46 + handle?: string 47 + /** The display name of the actor. */ 48 + displayName?: string 49 + /** The URL of the actor's avatar image. */ 50 + avatar?: string 51 + /** The date and time when the actor was created. */ 52 + createdAt?: string 53 + /** The date and time when the actor was last updated. */ 54 + updatedAt?: string 55 + [k: string]: unknown 56 + } 57 + 58 + export function isProfileViewBasic(v: unknown): v is ProfileViewBasic { 59 + return ( 60 + isObj(v) && 61 + hasProp(v, '$type') && 62 + v.$type === 'app.rocksky.actor.defs#profileViewBasic' 63 + ) 64 + } 65 + 66 + export function validateProfileViewBasic(v: unknown): ValidationResult { 67 + return lexicons.validate('app.rocksky.actor.defs#profileViewBasic', v) 68 + } 69 + 70 + export interface NeighbourViewBasic { 71 + userId?: string 72 + did?: string 73 + handle?: string 74 + displayName?: string 75 + /** The URL of the actor's avatar image. */ 76 + avatar?: string 77 + /** The number of artists shared with the actor. */ 78 + sharedArtistsCount?: number 79 + /** The similarity score with the actor. */ 80 + similarityScore?: number 81 + /** The top shared artist names with the actor. */ 82 + topSharedArtistNames?: string[] 83 + /** The top shared artist details with the actor. */ 84 + topSharedArtistsDetails?: AppRockskyArtistDefs.ArtistViewBasic[] 85 + [k: string]: unknown 86 + } 87 + 88 + export function isNeighbourViewBasic(v: unknown): v is NeighbourViewBasic { 89 + return ( 90 + isObj(v) && 91 + hasProp(v, '$type') && 92 + v.$type === 'app.rocksky.actor.defs#neighbourViewBasic' 93 + ) 94 + } 95 + 96 + export function validateNeighbourViewBasic(v: unknown): ValidationResult { 97 + return lexicons.validate('app.rocksky.actor.defs#neighbourViewBasic', v) 98 + } 99 + 100 + export interface CompatibilityViewBasic { 101 + compatibilityLevel?: number 102 + compatibilityPercentage?: number 103 + sharedArtists?: number 104 + topSharedArtistNames?: string[] 105 + topSharedDetailedArtists?: ArtistViewBasic[] 106 + user1ArtistCount?: number 107 + user2ArtistCount?: number 108 + [k: string]: unknown 109 + } 110 + 111 + export function isCompatibilityViewBasic( 112 + v: unknown, 113 + ): v is CompatibilityViewBasic { 114 + return ( 115 + isObj(v) && 116 + hasProp(v, '$type') && 117 + v.$type === 'app.rocksky.actor.defs#compatibilityViewBasic' 118 + ) 119 + } 120 + 121 + export function validateCompatibilityViewBasic(v: unknown): ValidationResult { 122 + return lexicons.validate('app.rocksky.actor.defs#compatibilityViewBasic', v) 123 + } 124 + 125 + export interface ArtistViewBasic { 126 + id?: string 127 + name?: string 128 + picture?: string 129 + uri?: string 130 + user1Rank?: number 131 + user2Rank?: number 132 + weight?: number 133 + [k: string]: unknown 134 + } 135 + 136 + export function isArtistViewBasic(v: unknown): v is ArtistViewBasic { 137 + return ( 138 + isObj(v) && 139 + hasProp(v, '$type') && 140 + v.$type === 'app.rocksky.actor.defs#artistViewBasic' 141 + ) 142 + } 143 + 144 + export function validateArtistViewBasic(v: unknown): ValidationResult { 145 + return lexicons.validate('app.rocksky.actor.defs#artistViewBasic', v) 146 + }
+56
apps/cli/src/lexicon/types/app/rocksky/actor/getActorAlbums.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 AppRockskyAlbumDefs from '../album/defs' 11 + 12 + export interface QueryParams { 13 + /** The DID or handle of the actor */ 14 + did: string 15 + /** The maximum number of albums to return */ 16 + limit?: number 17 + /** The offset for pagination */ 18 + offset?: number 19 + /** The start date to filter albums from (ISO 8601 format) */ 20 + startDate?: string 21 + /** The end date to filter albums to (ISO 8601 format) */ 22 + endDate?: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + 27 + export interface OutputSchema { 28 + albums?: AppRockskyAlbumDefs.AlbumViewBasic[] 29 + [k: string]: unknown 30 + } 31 + 32 + export type HandlerInput = undefined 33 + 34 + export interface HandlerSuccess { 35 + encoding: 'application/json' 36 + body: OutputSchema 37 + headers?: { [key: string]: string } 38 + } 39 + 40 + export interface HandlerError { 41 + status: number 42 + message?: string 43 + } 44 + 45 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 46 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 47 + auth: HA 48 + params: QueryParams 49 + input: HandlerInput 50 + req: express.Request 51 + res: express.Response 52 + resetRouteRateLimits: () => Promise<void> 53 + } 54 + export type Handler<HA extends HandlerAuth = never> = ( 55 + ctx: HandlerReqCtx<HA>, 56 + ) => Promise<HandlerOutput> | HandlerOutput
+56
apps/cli/src/lexicon/types/app/rocksky/actor/getActorArtists.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 AppRockskyArtistDefs from '../artist/defs' 11 + 12 + export interface QueryParams { 13 + /** The DID or handle of the actor */ 14 + did: string 15 + /** The maximum number of albums to return */ 16 + limit?: number 17 + /** The offset for pagination */ 18 + offset?: number 19 + /** The start date to filter albums from (ISO 8601 format) */ 20 + startDate?: string 21 + /** The end date to filter albums to (ISO 8601 format) */ 22 + endDate?: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + 27 + export interface OutputSchema { 28 + artists?: AppRockskyArtistDefs.ArtistViewBasic[] 29 + [k: string]: unknown 30 + } 31 + 32 + export type HandlerInput = undefined 33 + 34 + export interface HandlerSuccess { 35 + encoding: 'application/json' 36 + body: OutputSchema 37 + headers?: { [key: string]: string } 38 + } 39 + 40 + export interface HandlerError { 41 + status: number 42 + message?: string 43 + } 44 + 45 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 46 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 47 + auth: HA 48 + params: QueryParams 49 + input: HandlerInput 50 + req: express.Request 51 + res: express.Response 52 + resetRouteRateLimits: () => Promise<void> 53 + } 54 + export type Handler<HA extends HandlerAuth = never> = ( 55 + ctx: HandlerReqCtx<HA>, 56 + ) => Promise<HandlerOutput> | HandlerOutput
+48
apps/cli/src/lexicon/types/app/rocksky/actor/getActorCompatibility.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 AppRockskyActorDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** DID or handle to get compatibility for */ 14 + did: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + 19 + export interface OutputSchema { 20 + compatibility?: AppRockskyActorDefs.CompatibilityViewBasic 21 + [k: string]: unknown 22 + } 23 + 24 + export type HandlerInput = undefined 25 + 26 + export interface HandlerSuccess { 27 + encoding: 'application/json' 28 + body: OutputSchema 29 + headers?: { [key: string]: string } 30 + } 31 + 32 + export interface HandlerError { 33 + status: number 34 + message?: string 35 + } 36 + 37 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 38 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 39 + auth: HA 40 + params: QueryParams 41 + input: HandlerInput 42 + req: express.Request 43 + res: express.Response 44 + resetRouteRateLimits: () => Promise<void> 45 + } 46 + export type Handler<HA extends HandlerAuth = never> = ( 47 + ctx: HandlerReqCtx<HA>, 48 + ) => Promise<HandlerOutput> | HandlerOutput
+52
apps/cli/src/lexicon/types/app/rocksky/actor/getActorLovedSongs.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 AppRockskySongDefs from '../song/defs' 11 + 12 + export interface QueryParams { 13 + /** The DID or handle of the actor */ 14 + did: string 15 + /** The maximum number of albums to return */ 16 + limit?: number 17 + /** The offset for pagination */ 18 + offset?: number 19 + } 20 + 21 + export type InputSchema = undefined 22 + 23 + export interface OutputSchema { 24 + tracks?: AppRockskySongDefs.SongViewBasic[] 25 + [k: string]: unknown 26 + } 27 + 28 + export type HandlerInput = undefined 29 + 30 + export interface HandlerSuccess { 31 + encoding: 'application/json' 32 + body: OutputSchema 33 + headers?: { [key: string]: string } 34 + } 35 + 36 + export interface HandlerError { 37 + status: number 38 + message?: string 39 + } 40 + 41 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 42 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 43 + auth: HA 44 + params: QueryParams 45 + input: HandlerInput 46 + req: express.Request 47 + res: express.Response 48 + resetRouteRateLimits: () => Promise<void> 49 + } 50 + export type Handler<HA extends HandlerAuth = never> = ( 51 + ctx: HandlerReqCtx<HA>, 52 + ) => Promise<HandlerOutput> | HandlerOutput
+48
apps/cli/src/lexicon/types/app/rocksky/actor/getActorNeighbours.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 AppRockskyActorDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The DID or handle of the actor */ 14 + did: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + 19 + export interface OutputSchema { 20 + neighbours?: AppRockskyActorDefs.NeighbourViewBasic[] 21 + [k: string]: unknown 22 + } 23 + 24 + export type HandlerInput = undefined 25 + 26 + export interface HandlerSuccess { 27 + encoding: 'application/json' 28 + body: OutputSchema 29 + headers?: { [key: string]: string } 30 + } 31 + 32 + export interface HandlerError { 33 + status: number 34 + message?: string 35 + } 36 + 37 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 38 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 39 + auth: HA 40 + params: QueryParams 41 + input: HandlerInput 42 + req: express.Request 43 + res: express.Response 44 + resetRouteRateLimits: () => Promise<void> 45 + } 46 + export type Handler<HA extends HandlerAuth = never> = ( 47 + ctx: HandlerReqCtx<HA>, 48 + ) => Promise<HandlerOutput> | HandlerOutput
+52
apps/cli/src/lexicon/types/app/rocksky/actor/getActorPlaylists.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 AppRockskyPlaylistDefs from '../playlist/defs' 11 + 12 + export interface QueryParams { 13 + /** The DID or handle of the actor */ 14 + did: string 15 + /** The maximum number of albums to return */ 16 + limit?: number 17 + /** The offset for pagination */ 18 + offset?: number 19 + } 20 + 21 + export type InputSchema = undefined 22 + 23 + export interface OutputSchema { 24 + playlists?: AppRockskyPlaylistDefs.PlaylistViewBasic[] 25 + [k: string]: unknown 26 + } 27 + 28 + export type HandlerInput = undefined 29 + 30 + export interface HandlerSuccess { 31 + encoding: 'application/json' 32 + body: OutputSchema 33 + headers?: { [key: string]: string } 34 + } 35 + 36 + export interface HandlerError { 37 + status: number 38 + message?: string 39 + } 40 + 41 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 42 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 43 + auth: HA 44 + params: QueryParams 45 + input: HandlerInput 46 + req: express.Request 47 + res: express.Response 48 + resetRouteRateLimits: () => Promise<void> 49 + } 50 + export type Handler<HA extends HandlerAuth = never> = ( 51 + ctx: HandlerReqCtx<HA>, 52 + ) => Promise<HandlerOutput> | HandlerOutput
+52
apps/cli/src/lexicon/types/app/rocksky/actor/getActorScrobbles.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 AppRockskyScrobbleDefs from '../scrobble/defs' 11 + 12 + export interface QueryParams { 13 + /** The DID or handle of the actor */ 14 + did: string 15 + /** The maximum number of albums to return */ 16 + limit?: number 17 + /** The offset for pagination */ 18 + offset?: number 19 + } 20 + 21 + export type InputSchema = undefined 22 + 23 + export interface OutputSchema { 24 + scrobbles?: AppRockskyScrobbleDefs.ScrobbleViewBasic[] 25 + [k: string]: unknown 26 + } 27 + 28 + export type HandlerInput = undefined 29 + 30 + export interface HandlerSuccess { 31 + encoding: 'application/json' 32 + body: OutputSchema 33 + headers?: { [key: string]: string } 34 + } 35 + 36 + export interface HandlerError { 37 + status: number 38 + message?: string 39 + } 40 + 41 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 42 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 43 + auth: HA 44 + params: QueryParams 45 + input: HandlerInput 46 + req: express.Request 47 + res: express.Response 48 + resetRouteRateLimits: () => Promise<void> 49 + } 50 + export type Handler<HA extends HandlerAuth = never> = ( 51 + ctx: HandlerReqCtx<HA>, 52 + ) => Promise<HandlerOutput> | HandlerOutput
+56
apps/cli/src/lexicon/types/app/rocksky/actor/getActorSongs.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 AppRockskySongDefs from '../song/defs' 11 + 12 + export interface QueryParams { 13 + /** The DID or handle of the actor */ 14 + did: string 15 + /** The maximum number of albums to return */ 16 + limit?: number 17 + /** The offset for pagination */ 18 + offset?: number 19 + /** The start date to filter albums from (ISO 8601 format) */ 20 + startDate?: string 21 + /** The end date to filter albums to (ISO 8601 format) */ 22 + endDate?: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + 27 + export interface OutputSchema { 28 + songs?: AppRockskySongDefs.SongViewBasic[] 29 + [k: string]: unknown 30 + } 31 + 32 + export type HandlerInput = undefined 33 + 34 + export interface HandlerSuccess { 35 + encoding: 'application/json' 36 + body: OutputSchema 37 + headers?: { [key: string]: string } 38 + } 39 + 40 + export interface HandlerError { 41 + status: number 42 + message?: string 43 + } 44 + 45 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 46 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 47 + auth: HA 48 + params: QueryParams 49 + input: HandlerInput 50 + req: express.Request 51 + res: express.Response 52 + resetRouteRateLimits: () => Promise<void> 53 + } 54 + export type Handler<HA extends HandlerAuth = never> = ( 55 + ctx: HandlerReqCtx<HA>, 56 + ) => Promise<HandlerOutput> | HandlerOutput
+43
apps/cli/src/lexicon/types/app/rocksky/actor/getProfile.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 AppRockskyActorDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The DID or handle of the actor */ 14 + did?: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type OutputSchema = AppRockskyActorDefs.ProfileViewDetailed 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerSuccess { 22 + encoding: 'application/json' 23 + body: OutputSchema 24 + headers?: { [key: string]: string } 25 + } 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 33 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 34 + auth: HA 35 + params: QueryParams 36 + input: HandlerInput 37 + req: express.Request 38 + res: express.Response 39 + resetRouteRateLimits: () => Promise<void> 40 + } 41 + export type Handler<HA extends HandlerAuth = never> = ( 42 + ctx: HandlerReqCtx<HA>, 43 + ) => Promise<HandlerOutput> | HandlerOutput
+51
apps/cli/src/lexicon/types/app/rocksky/album.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 album. */ 11 + title: string 12 + /** The artist of the album. */ 13 + artist: string 14 + /** The duration of the album in seconds. */ 15 + duration?: number 16 + /** The release date of the album. */ 17 + releaseDate?: string 18 + /** The year the album was released. */ 19 + year?: number 20 + /** The genre of the album. */ 21 + genre?: string 22 + /** The album art of the album. */ 23 + albumArt?: BlobRef 24 + /** The URL of the album art of the album. */ 25 + albumArtUrl?: string 26 + /** The tags of the album. */ 27 + tags?: string[] 28 + /** The YouTube link of the album. */ 29 + youtubeLink?: string 30 + /** The Spotify link of the album. */ 31 + spotifyLink?: string 32 + /** The tidal link of the album. */ 33 + tidalLink?: string 34 + /** The Apple Music link of the album. */ 35 + appleMusicLink?: string 36 + /** The date and time when the album was created. */ 37 + createdAt: string 38 + [k: string]: unknown 39 + } 40 + 41 + export function isRecord(v: unknown): v is Record { 42 + return ( 43 + isObj(v) && 44 + hasProp(v, '$type') && 45 + (v.$type === 'app.rocksky.album#main' || v.$type === 'app.rocksky.album') 46 + ) 47 + } 48 + 49 + export function validateRecord(v: unknown): ValidationResult { 50 + return lexicons.validate('app.rocksky.album#main', v) 51 + }
+85
apps/cli/src/lexicon/types/app/rocksky/album/defs.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 + import * as AppRockskySongDefsSongViewBasic from '../song/defs/songViewBasic' 9 + 10 + export interface AlbumViewBasic { 11 + /** The unique identifier of the album. */ 12 + id?: string 13 + /** The URI of the album. */ 14 + uri?: string 15 + /** The title of the album. */ 16 + title?: string 17 + /** The artist of the album. */ 18 + artist?: string 19 + /** The URI of the album's artist. */ 20 + artistUri?: string 21 + /** The year the album was released. */ 22 + year?: number 23 + /** The URL of the album art image. */ 24 + albumArt?: string 25 + /** The release date of the album. */ 26 + releaseDate?: string 27 + /** The SHA256 hash of the album. */ 28 + sha256?: string 29 + /** The number of times the album has been played. */ 30 + playCount?: number 31 + /** The number of unique listeners who have played the album. */ 32 + uniqueListeners?: number 33 + [k: string]: unknown 34 + } 35 + 36 + export function isAlbumViewBasic(v: unknown): v is AlbumViewBasic { 37 + return ( 38 + isObj(v) && 39 + hasProp(v, '$type') && 40 + v.$type === 'app.rocksky.album.defs#albumViewBasic' 41 + ) 42 + } 43 + 44 + export function validateAlbumViewBasic(v: unknown): ValidationResult { 45 + return lexicons.validate('app.rocksky.album.defs#albumViewBasic', v) 46 + } 47 + 48 + export interface AlbumViewDetailed { 49 + /** The unique identifier of the album. */ 50 + id?: string 51 + /** The URI of the album. */ 52 + uri?: string 53 + /** The title of the album. */ 54 + title?: string 55 + /** The artist of the album. */ 56 + artist?: string 57 + /** The URI of the album's artist. */ 58 + artistUri?: string 59 + /** The year the album was released. */ 60 + year?: number 61 + /** The URL of the album art image. */ 62 + albumArt?: string 63 + /** The release date of the album. */ 64 + releaseDate?: string 65 + /** The SHA256 hash of the album. */ 66 + sha256?: string 67 + /** The number of times the album has been played. */ 68 + playCount?: number 69 + /** The number of unique listeners who have played the album. */ 70 + uniqueListeners?: number 71 + tracks?: AppRockskySongDefsSongViewBasic.Main[] 72 + [k: string]: unknown 73 + } 74 + 75 + export function isAlbumViewDetailed(v: unknown): v is AlbumViewDetailed { 76 + return ( 77 + isObj(v) && 78 + hasProp(v, '$type') && 79 + v.$type === 'app.rocksky.album.defs#albumViewDetailed' 80 + ) 81 + } 82 + 83 + export function validateAlbumViewDetailed(v: unknown): ValidationResult { 84 + return lexicons.validate('app.rocksky.album.defs#albumViewDetailed', v) 85 + }
+43
apps/cli/src/lexicon/types/app/rocksky/album/getAlbum.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 AppRockskyAlbumDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The URI of the album to retrieve. */ 14 + uri: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type OutputSchema = AppRockskyAlbumDefs.AlbumViewDetailed 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerSuccess { 22 + encoding: 'application/json' 23 + body: OutputSchema 24 + headers?: { [key: string]: string } 25 + } 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 33 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 34 + auth: HA 35 + params: QueryParams 36 + input: HandlerInput 37 + req: express.Request 38 + res: express.Response 39 + resetRouteRateLimits: () => Promise<void> 40 + } 41 + export type Handler<HA extends HandlerAuth = never> = ( 42 + ctx: HandlerReqCtx<HA>, 43 + ) => Promise<HandlerOutput> | HandlerOutput
+48
apps/cli/src/lexicon/types/app/rocksky/album/getAlbumTracks.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 AppRockskySongDefs from '../song/defs' 11 + 12 + export interface QueryParams { 13 + /** The URI of the album to retrieve tracks from */ 14 + uri: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + 19 + export interface OutputSchema { 20 + tracks?: AppRockskySongDefs.SongViewBasic[] 21 + [k: string]: unknown 22 + } 23 + 24 + export type HandlerInput = undefined 25 + 26 + export interface HandlerSuccess { 27 + encoding: 'application/json' 28 + body: OutputSchema 29 + headers?: { [key: string]: string } 30 + } 31 + 32 + export interface HandlerError { 33 + status: number 34 + message?: string 35 + } 36 + 37 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 38 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 39 + auth: HA 40 + params: QueryParams 41 + input: HandlerInput 42 + req: express.Request 43 + res: express.Response 44 + resetRouteRateLimits: () => Promise<void> 45 + } 46 + export type Handler<HA extends HandlerAuth = never> = ( 47 + ctx: HandlerReqCtx<HA>, 48 + ) => Promise<HandlerOutput> | HandlerOutput
+50
apps/cli/src/lexicon/types/app/rocksky/album/getAlbums.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 AppRockskyAlbumDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The maximum number of albums to return */ 14 + limit?: number 15 + /** The offset for pagination */ 16 + offset?: number 17 + } 18 + 19 + export type InputSchema = undefined 20 + 21 + export interface OutputSchema { 22 + albums?: AppRockskyAlbumDefs.AlbumViewBasic[] 23 + [k: string]: unknown 24 + } 25 + 26 + export type HandlerInput = undefined 27 + 28 + export interface HandlerSuccess { 29 + encoding: 'application/json' 30 + body: OutputSchema 31 + headers?: { [key: string]: string } 32 + } 33 + 34 + export interface HandlerError { 35 + status: number 36 + message?: string 37 + } 38 + 39 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 40 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 41 + auth: HA 42 + params: QueryParams 43 + input: HandlerInput 44 + req: express.Request 45 + res: express.Response 46 + resetRouteRateLimits: () => Promise<void> 47 + } 48 + export type Handler<HA extends HandlerAuth = never> = ( 49 + ctx: HandlerReqCtx<HA>, 50 + ) => Promise<HandlerOutput> | HandlerOutput
+51
apps/cli/src/lexicon/types/app/rocksky/apikey/createApikey.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 AppRockskyApikeyDefs from './defs' 11 + 12 + export interface QueryParams {} 13 + 14 + export interface InputSchema { 15 + /** The name of the API key. */ 16 + name: string 17 + /** A description for the API key. */ 18 + description?: string 19 + [k: string]: unknown 20 + } 21 + 22 + export type OutputSchema = AppRockskyApikeyDefs.ApiKey 23 + 24 + export interface HandlerInput { 25 + encoding: 'application/json' 26 + body: InputSchema 27 + } 28 + 29 + export interface HandlerSuccess { 30 + encoding: 'application/json' 31 + body: OutputSchema 32 + headers?: { [key: string]: string } 33 + } 34 + 35 + export interface HandlerError { 36 + status: number 37 + message?: string 38 + } 39 + 40 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 41 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 42 + auth: HA 43 + params: QueryParams 44 + input: HandlerInput 45 + req: express.Request 46 + res: express.Response 47 + resetRouteRateLimits: () => Promise<void> 48 + } 49 + export type Handler<HA extends HandlerAuth = never> = ( 50 + ctx: HandlerReqCtx<HA>, 51 + ) => Promise<HandlerOutput> | HandlerOutput
+31
apps/cli/src/lexicon/types/app/rocksky/apikey/defs.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 ApiKeyView { 10 + /** The unique identifier of the API key. */ 11 + id?: string 12 + /** The name of the API key. */ 13 + name?: string 14 + /** A description for the API key. */ 15 + description?: string 16 + /** The date and time when the API key was created. */ 17 + createdAt?: string 18 + [k: string]: unknown 19 + } 20 + 21 + export function isApiKeyView(v: unknown): v is ApiKeyView { 22 + return ( 23 + isObj(v) && 24 + hasProp(v, '$type') && 25 + v.$type === 'app.rocksky.apikey.defs#apiKeyView' 26 + ) 27 + } 28 + 29 + export function validateApiKeyView(v: unknown): ValidationResult { 30 + return lexicons.validate('app.rocksky.apikey.defs#apiKeyView', v) 31 + }
+50
apps/cli/src/lexicon/types/app/rocksky/apikey/getApikeys.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 AppRockskyApikeyDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The number of API keys to skip before starting to collect the result set. */ 14 + offset?: number 15 + /** The number of API keys to return per page. */ 16 + limit?: number 17 + } 18 + 19 + export type InputSchema = undefined 20 + 21 + export interface OutputSchema { 22 + apiKeys?: AppRockskyApikeyDefs.ApikeyView[] 23 + [k: string]: unknown 24 + } 25 + 26 + export type HandlerInput = undefined 27 + 28 + export interface HandlerSuccess { 29 + encoding: 'application/json' 30 + body: OutputSchema 31 + headers?: { [key: string]: string } 32 + } 33 + 34 + export interface HandlerError { 35 + status: number 36 + message?: string 37 + } 38 + 39 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 40 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 41 + auth: HA 42 + params: QueryParams 43 + input: HandlerInput 44 + req: express.Request 45 + res: express.Response 46 + resetRouteRateLimits: () => Promise<void> 47 + } 48 + export type Handler<HA extends HandlerAuth = never> = ( 49 + ctx: HandlerReqCtx<HA>, 50 + ) => Promise<HandlerOutput> | HandlerOutput
+43
apps/cli/src/lexicon/types/app/rocksky/apikey/removeApikey.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 AppRockskyApikeyDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The ID of the API key to remove. */ 14 + id: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type OutputSchema = AppRockskyApikeyDefs.ApiKey 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerSuccess { 22 + encoding: 'application/json' 23 + body: OutputSchema 24 + headers?: { [key: string]: string } 25 + } 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 33 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 34 + auth: HA 35 + params: QueryParams 36 + input: HandlerInput 37 + req: express.Request 38 + res: express.Response 39 + resetRouteRateLimits: () => Promise<void> 40 + } 41 + export type Handler<HA extends HandlerAuth = never> = ( 42 + ctx: HandlerReqCtx<HA>, 43 + ) => Promise<HandlerOutput> | HandlerOutput
+53
apps/cli/src/lexicon/types/app/rocksky/apikey/updateApikey.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 AppRockskyApikeyDefs from './defs' 11 + 12 + export interface QueryParams {} 13 + 14 + export interface InputSchema { 15 + /** The ID of the API key to update. */ 16 + id: string 17 + /** The new name of the API key. */ 18 + name: string 19 + /** A new description for the API key. */ 20 + description?: string 21 + [k: string]: unknown 22 + } 23 + 24 + export type OutputSchema = AppRockskyApikeyDefs.ApiKey 25 + 26 + export interface HandlerInput { 27 + encoding: 'application/json' 28 + body: InputSchema 29 + } 30 + 31 + export interface HandlerSuccess { 32 + encoding: 'application/json' 33 + body: OutputSchema 34 + headers?: { [key: string]: string } 35 + } 36 + 37 + export interface HandlerError { 38 + status: number 39 + message?: string 40 + } 41 + 42 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 43 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 44 + auth: HA 45 + params: QueryParams 46 + input: HandlerInput 47 + req: express.Request 48 + res: express.Response 49 + resetRouteRateLimits: () => Promise<void> 50 + } 51 + export type Handler<HA extends HandlerAuth = never> = ( 52 + ctx: HandlerReqCtx<HA>, 53 + ) => Promise<HandlerOutput> | HandlerOutput
+7
apps/cli/src/lexicon/types/app/rocksky/apikeys/defs.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'
+41
apps/cli/src/lexicon/types/app/rocksky/artist.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 name of the artist. */ 11 + name: string 12 + /** The biography of the artist. */ 13 + bio?: string 14 + /** The picture of the artist. */ 15 + picture?: BlobRef 16 + /** The URL of the picture of the artist. */ 17 + pictureUrl?: string 18 + /** The tags of the artist. */ 19 + tags?: string[] 20 + /** The birth date of the artist. */ 21 + born?: string 22 + /** The death date of the artist. */ 23 + died?: string 24 + /** The birth place of the artist. */ 25 + bornIn?: string 26 + /** The date when the artist was created. */ 27 + createdAt: string 28 + [k: string]: unknown 29 + } 30 + 31 + export function isRecord(v: unknown): v is Record { 32 + return ( 33 + isObj(v) && 34 + hasProp(v, '$type') && 35 + (v.$type === 'app.rocksky.artist#main' || v.$type === 'app.rocksky.artist') 36 + ) 37 + } 38 + 39 + export function validateRecord(v: unknown): ValidationResult { 40 + return lexicons.validate('app.rocksky.artist#main', v) 41 + }
+140
apps/cli/src/lexicon/types/app/rocksky/artist/defs.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 ArtistViewBasic { 10 + /** The unique identifier of the artist. */ 11 + id?: string 12 + /** The URI of the artist. */ 13 + uri?: string 14 + /** The name of the artist. */ 15 + name?: string 16 + /** The picture of the artist. */ 17 + picture?: string 18 + /** The SHA256 hash of the artist. */ 19 + sha256?: string 20 + /** The number of times the artist has been played. */ 21 + playCount?: number 22 + /** The number of unique listeners who have played the artist. */ 23 + uniqueListeners?: number 24 + [k: string]: unknown 25 + } 26 + 27 + export function isArtistViewBasic(v: unknown): v is ArtistViewBasic { 28 + return ( 29 + isObj(v) && 30 + hasProp(v, '$type') && 31 + v.$type === 'app.rocksky.artist.defs#artistViewBasic' 32 + ) 33 + } 34 + 35 + export function validateArtistViewBasic(v: unknown): ValidationResult { 36 + return lexicons.validate('app.rocksky.artist.defs#artistViewBasic', v) 37 + } 38 + 39 + export interface ArtistViewDetailed { 40 + /** The unique identifier of the artist. */ 41 + id?: string 42 + /** The URI of the artist. */ 43 + uri?: string 44 + /** The name of the artist. */ 45 + name?: string 46 + /** The picture of the artist. */ 47 + picture?: string 48 + /** The SHA256 hash of the artist. */ 49 + sha256?: string 50 + /** The number of times the artist has been played. */ 51 + playCount?: number 52 + /** The number of unique listeners who have played the artist. */ 53 + uniqueListeners?: number 54 + [k: string]: unknown 55 + } 56 + 57 + export function isArtistViewDetailed(v: unknown): v is ArtistViewDetailed { 58 + return ( 59 + isObj(v) && 60 + hasProp(v, '$type') && 61 + v.$type === 'app.rocksky.artist.defs#artistViewDetailed' 62 + ) 63 + } 64 + 65 + export function validateArtistViewDetailed(v: unknown): ValidationResult { 66 + return lexicons.validate('app.rocksky.artist.defs#artistViewDetailed', v) 67 + } 68 + 69 + export interface SongViewBasic { 70 + /** The URI of the song. */ 71 + uri?: string 72 + /** The title of the song. */ 73 + title?: string 74 + /** The number of times the song has been played. */ 75 + playCount?: number 76 + [k: string]: unknown 77 + } 78 + 79 + export function isSongViewBasic(v: unknown): v is SongViewBasic { 80 + return ( 81 + isObj(v) && 82 + hasProp(v, '$type') && 83 + v.$type === 'app.rocksky.artist.defs#songViewBasic' 84 + ) 85 + } 86 + 87 + export function validateSongViewBasic(v: unknown): ValidationResult { 88 + return lexicons.validate('app.rocksky.artist.defs#songViewBasic', v) 89 + } 90 + 91 + export interface ListenerViewBasic { 92 + /** The unique identifier of the actor. */ 93 + id?: string 94 + /** The DID of the listener. */ 95 + did?: string 96 + /** The handle of the listener. */ 97 + handle?: string 98 + /** The display name of the listener. */ 99 + displayName?: string 100 + /** The URL of the listener's avatar image. */ 101 + avatar?: string 102 + mostListenedSong?: SongViewBasic 103 + /** The total number of plays by the listener. */ 104 + totalPlays?: number 105 + /** The rank of the listener among all listeners of the artist. */ 106 + rank?: number 107 + [k: string]: unknown 108 + } 109 + 110 + export function isListenerViewBasic(v: unknown): v is ListenerViewBasic { 111 + return ( 112 + isObj(v) && 113 + hasProp(v, '$type') && 114 + v.$type === 'app.rocksky.artist.defs#listenerViewBasic' 115 + ) 116 + } 117 + 118 + export function validateListenerViewBasic(v: unknown): ValidationResult { 119 + return lexicons.validate('app.rocksky.artist.defs#listenerViewBasic', v) 120 + } 121 + 122 + export interface ArtistMbid { 123 + /** The MusicBrainz Identifier (MBID) of the artist. */ 124 + mbid?: string 125 + /** The name of the artist. */ 126 + name?: string 127 + [k: string]: unknown 128 + } 129 + 130 + export function isArtistMbid(v: unknown): v is ArtistMbid { 131 + return ( 132 + isObj(v) && 133 + hasProp(v, '$type') && 134 + v.$type === 'app.rocksky.artist.defs#artistMbid' 135 + ) 136 + } 137 + 138 + export function validateArtistMbid(v: unknown): ValidationResult { 139 + return lexicons.validate('app.rocksky.artist.defs#artistMbid', v) 140 + }
+43
apps/cli/src/lexicon/types/app/rocksky/artist/getArtist.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 AppRockskyArtistDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The URI of the artist to retrieve details from */ 14 + uri: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type OutputSchema = AppRockskyArtistDefs.ArtistViewDetailed 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerSuccess { 22 + encoding: 'application/json' 23 + body: OutputSchema 24 + headers?: { [key: string]: string } 25 + } 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 33 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 34 + auth: HA 35 + params: QueryParams 36 + input: HandlerInput 37 + req: express.Request 38 + res: express.Response 39 + resetRouteRateLimits: () => Promise<void> 40 + } 41 + export type Handler<HA extends HandlerAuth = never> = ( 42 + ctx: HandlerReqCtx<HA>, 43 + ) => Promise<HandlerOutput> | HandlerOutput
+48
apps/cli/src/lexicon/types/app/rocksky/artist/getArtistAlbums.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 AppRockskyAlbumDefs from '../album/defs' 11 + 12 + export interface QueryParams { 13 + /** The URI of the artist to retrieve albums from */ 14 + uri: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + 19 + export interface OutputSchema { 20 + albums?: AppRockskyAlbumDefs.AlbumViewBasic[] 21 + [k: string]: unknown 22 + } 23 + 24 + export type HandlerInput = undefined 25 + 26 + export interface HandlerSuccess { 27 + encoding: 'application/json' 28 + body: OutputSchema 29 + headers?: { [key: string]: string } 30 + } 31 + 32 + export interface HandlerError { 33 + status: number 34 + message?: string 35 + } 36 + 37 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 38 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 39 + auth: HA 40 + params: QueryParams 41 + input: HandlerInput 42 + req: express.Request 43 + res: express.Response 44 + resetRouteRateLimits: () => Promise<void> 45 + } 46 + export type Handler<HA extends HandlerAuth = never> = ( 47 + ctx: HandlerReqCtx<HA>, 48 + ) => Promise<HandlerOutput> | HandlerOutput
+52
apps/cli/src/lexicon/types/app/rocksky/artist/getArtistListeners.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 AppRockskyArtistDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The URI of the artist to retrieve listeners from */ 14 + uri: string 15 + /** Number of items to skip before returning results */ 16 + offset?: number 17 + /** Maximum number of results to return */ 18 + limit?: number 19 + } 20 + 21 + export type InputSchema = undefined 22 + 23 + export interface OutputSchema { 24 + listeners?: AppRockskyArtistDefs.ListenerViewBasic[] 25 + [k: string]: unknown 26 + } 27 + 28 + export type HandlerInput = undefined 29 + 30 + export interface HandlerSuccess { 31 + encoding: 'application/json' 32 + body: OutputSchema 33 + headers?: { [key: string]: string } 34 + } 35 + 36 + export interface HandlerError { 37 + status: number 38 + message?: string 39 + } 40 + 41 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 42 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 43 + auth: HA 44 + params: QueryParams 45 + input: HandlerInput 46 + req: express.Request 47 + res: express.Response 48 + resetRouteRateLimits: () => Promise<void> 49 + } 50 + export type Handler<HA extends HandlerAuth = never> = ( 51 + ctx: HandlerReqCtx<HA>, 52 + ) => Promise<HandlerOutput> | HandlerOutput
+52
apps/cli/src/lexicon/types/app/rocksky/artist/getArtistTracks.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 AppRockskySongDefs from '../song/defs' 11 + 12 + export interface QueryParams { 13 + /** The URI of the artist to retrieve albums from */ 14 + uri?: string 15 + /** The maximum number of tracks to return */ 16 + limit?: number 17 + /** The offset for pagination */ 18 + offset?: number 19 + } 20 + 21 + export type InputSchema = undefined 22 + 23 + export interface OutputSchema { 24 + tracks?: AppRockskySongDefs.SongViewBasic[] 25 + [k: string]: unknown 26 + } 27 + 28 + export type HandlerInput = undefined 29 + 30 + export interface HandlerSuccess { 31 + encoding: 'application/json' 32 + body: OutputSchema 33 + headers?: { [key: string]: string } 34 + } 35 + 36 + export interface HandlerError { 37 + status: number 38 + message?: string 39 + } 40 + 41 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 42 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 43 + auth: HA 44 + params: QueryParams 45 + input: HandlerInput 46 + req: express.Request 47 + res: express.Response 48 + resetRouteRateLimits: () => Promise<void> 49 + } 50 + export type Handler<HA extends HandlerAuth = never> = ( 51 + ctx: HandlerReqCtx<HA>, 52 + ) => Promise<HandlerOutput> | HandlerOutput
+52
apps/cli/src/lexicon/types/app/rocksky/artist/getArtists.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 AppRockskyArtistDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The maximum number of artists to return */ 14 + limit?: number 15 + /** The offset for pagination */ 16 + offset?: number 17 + /** The names of the artists to return */ 18 + names?: string 19 + } 20 + 21 + export type InputSchema = undefined 22 + 23 + export interface OutputSchema { 24 + artists?: AppRockskyArtistDefs.ArtistViewBasic[] 25 + [k: string]: unknown 26 + } 27 + 28 + export type HandlerInput = undefined 29 + 30 + export interface HandlerSuccess { 31 + encoding: 'application/json' 32 + body: OutputSchema 33 + headers?: { [key: string]: string } 34 + } 35 + 36 + export interface HandlerError { 37 + status: number 38 + message?: string 39 + } 40 + 41 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 42 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 43 + auth: HA 44 + params: QueryParams 45 + input: HandlerInput 46 + req: express.Request 47 + res: express.Response 48 + resetRouteRateLimits: () => Promise<void> 49 + } 50 + export type Handler<HA extends HandlerAuth = never> = ( 51 + ctx: HandlerReqCtx<HA>, 52 + ) => Promise<HandlerOutput> | HandlerOutput
+44
apps/cli/src/lexicon/types/app/rocksky/charts/defs.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 ChartsView { 10 + scrobbles?: ScrobbleViewBasic[] 11 + [k: string]: unknown 12 + } 13 + 14 + export function isChartsView(v: unknown): v is ChartsView { 15 + return ( 16 + isObj(v) && 17 + hasProp(v, '$type') && 18 + v.$type === 'app.rocksky.charts.defs#chartsView' 19 + ) 20 + } 21 + 22 + export function validateChartsView(v: unknown): ValidationResult { 23 + return lexicons.validate('app.rocksky.charts.defs#chartsView', v) 24 + } 25 + 26 + export interface ScrobbleViewBasic { 27 + /** The date of the scrobble. */ 28 + date?: string 29 + /** The number of scrobbles on this date. */ 30 + count?: number 31 + [k: string]: unknown 32 + } 33 + 34 + export function isScrobbleViewBasic(v: unknown): v is ScrobbleViewBasic { 35 + return ( 36 + isObj(v) && 37 + hasProp(v, '$type') && 38 + v.$type === 'app.rocksky.charts.defs#scrobbleViewBasic' 39 + ) 40 + } 41 + 42 + export function validateScrobbleViewBasic(v: unknown): ValidationResult { 43 + return lexicons.validate('app.rocksky.charts.defs#scrobbleViewBasic', v) 44 + }
+49
apps/cli/src/lexicon/types/app/rocksky/charts/getScrobblesChart.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 AppRockskyChartsDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The DID or handle of the actor */ 14 + did?: string 15 + /** The URI of the artist to filter by */ 16 + artisturi?: string 17 + /** The URI of the album to filter by */ 18 + albumuri?: string 19 + /** The URI of the track to filter by */ 20 + songuri?: string 21 + } 22 + 23 + export type InputSchema = undefined 24 + export type OutputSchema = AppRockskyChartsDefs.ChartsView 25 + export type HandlerInput = undefined 26 + 27 + export interface HandlerSuccess { 28 + encoding: 'application/json' 29 + body: OutputSchema 30 + headers?: { [key: string]: string } 31 + } 32 + 33 + export interface HandlerError { 34 + status: number 35 + message?: string 36 + } 37 + 38 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 39 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 40 + auth: HA 41 + params: QueryParams 42 + input: HandlerInput 43 + req: express.Request 44 + res: express.Response 45 + resetRouteRateLimits: () => Promise<void> 46 + } 47 + export type Handler<HA extends HandlerAuth = never> = ( 48 + ctx: HandlerReqCtx<HA>, 49 + ) => Promise<HandlerOutput> | HandlerOutput
+71
apps/cli/src/lexicon/types/app/rocksky/dropbox/defs.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 FileView { 10 + /** The unique identifier of the file. */ 11 + id?: string 12 + /** The name of the file. */ 13 + name?: string 14 + /** The lowercased path of the file. */ 15 + pathLower?: string 16 + /** The display path of the file. */ 17 + pathDisplay?: string 18 + /** The last modified date and time of the file on the client. */ 19 + clientModified?: string 20 + /** The last modified date and time of the file on the server. */ 21 + serverModified?: string 22 + [k: string]: unknown 23 + } 24 + 25 + export function isFileView(v: unknown): v is FileView { 26 + return ( 27 + isObj(v) && 28 + hasProp(v, '$type') && 29 + v.$type === 'app.rocksky.dropbox.defs#fileView' 30 + ) 31 + } 32 + 33 + export function validateFileView(v: unknown): ValidationResult { 34 + return lexicons.validate('app.rocksky.dropbox.defs#fileView', v) 35 + } 36 + 37 + export interface FileListView { 38 + /** A list of files in the Dropbox. */ 39 + files?: FileView[] 40 + [k: string]: unknown 41 + } 42 + 43 + export function isFileListView(v: unknown): v is FileListView { 44 + return ( 45 + isObj(v) && 46 + hasProp(v, '$type') && 47 + v.$type === 'app.rocksky.dropbox.defs#fileListView' 48 + ) 49 + } 50 + 51 + export function validateFileListView(v: unknown): ValidationResult { 52 + return lexicons.validate('app.rocksky.dropbox.defs#fileListView', v) 53 + } 54 + 55 + export interface TemporaryLinkView { 56 + /** The temporary link to access the file. */ 57 + link?: string 58 + [k: string]: unknown 59 + } 60 + 61 + export function isTemporaryLinkView(v: unknown): v is TemporaryLinkView { 62 + return ( 63 + isObj(v) && 64 + hasProp(v, '$type') && 65 + v.$type === 'app.rocksky.dropbox.defs#temporaryLinkView' 66 + ) 67 + } 68 + 69 + export function validateTemporaryLinkView(v: unknown): ValidationResult { 70 + return lexicons.validate('app.rocksky.dropbox.defs#temporaryLinkView', v) 71 + }
+42
apps/cli/src/lexicon/types/app/rocksky/dropbox/downloadFile.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import stream from 'stream' 6 + import { ValidationResult, BlobRef } from '@atproto/lexicon' 7 + import { lexicons } from '../../../../lexicons' 8 + import { isObj, hasProp } from '../../../../util' 9 + import { CID } from 'multiformats/cid' 10 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 11 + 12 + export interface QueryParams { 13 + /** The unique identifier of the file to download */ 14 + fileId: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type HandlerInput = undefined 19 + 20 + export interface HandlerSuccess { 21 + encoding: 'application/octet-stream' 22 + body: Uint8Array | stream.Readable 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
+43
apps/cli/src/lexicon/types/app/rocksky/dropbox/getFiles.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 AppRockskyDropboxDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** Path to the Dropbox folder or root directory */ 14 + at?: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type OutputSchema = AppRockskyDropboxDefs.FileListView 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerSuccess { 22 + encoding: 'application/json' 23 + body: OutputSchema 24 + headers?: { [key: string]: string } 25 + } 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 33 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 34 + auth: HA 35 + params: QueryParams 36 + input: HandlerInput 37 + req: express.Request 38 + res: express.Response 39 + resetRouteRateLimits: () => Promise<void> 40 + } 41 + export type Handler<HA extends HandlerAuth = never> = ( 42 + ctx: HandlerReqCtx<HA>, 43 + ) => Promise<HandlerOutput> | HandlerOutput
+43
apps/cli/src/lexicon/types/app/rocksky/dropbox/getMetadata.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 AppRockskyDropboxDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** Path to the file or folder in Dropbox */ 14 + path: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type OutputSchema = AppRockskyDropboxDefs.FileView 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerSuccess { 22 + encoding: 'application/json' 23 + body: OutputSchema 24 + headers?: { [key: string]: string } 25 + } 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 33 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 34 + auth: HA 35 + params: QueryParams 36 + input: HandlerInput 37 + req: express.Request 38 + res: express.Response 39 + resetRouteRateLimits: () => Promise<void> 40 + } 41 + export type Handler<HA extends HandlerAuth = never> = ( 42 + ctx: HandlerReqCtx<HA>, 43 + ) => Promise<HandlerOutput> | HandlerOutput
+43
apps/cli/src/lexicon/types/app/rocksky/dropbox/getTemporaryLink.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 AppRockskyDropboxDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** Path to the file in Dropbox */ 14 + path: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type OutputSchema = AppRockskyDropboxDefs.TemporaryLinkView 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerSuccess { 22 + encoding: 'application/json' 23 + body: OutputSchema 24 + headers?: { [key: string]: string } 25 + } 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 33 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 34 + auth: HA 35 + params: QueryParams 36 + input: HandlerInput 37 + req: express.Request 38 + res: express.Response 39 + resetRouteRateLimits: () => Promise<void> 40 + } 41 + export type Handler<HA extends HandlerAuth = never> = ( 42 + ctx: HandlerReqCtx<HA>, 43 + ) => Promise<HandlerOutput> | HandlerOutput
+182
apps/cli/src/lexicon/types/app/rocksky/feed/defs.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 + import * as AppRockskySongDefs from '../song/defs' 9 + import * as AppRockskyAlbumDefs from '../album/defs' 10 + import * as AppRockskyArtistDefs from '../artist/defs' 11 + import * as AppRockskyPlaylistDefs from '../playlist/defs' 12 + import * as AppRockskyActorDefs from '../actor/defs' 13 + import * as AppRockskyScrobbleDefs from '../scrobble/defs' 14 + 15 + export interface SearchResultsView { 16 + hits?: ( 17 + | AppRockskySongDefs.SongViewBasic 18 + | AppRockskyAlbumDefs.AlbumViewBasic 19 + | AppRockskyArtistDefs.ArtistViewBasic 20 + | AppRockskyPlaylistDefs.PlaylistViewBasic 21 + | AppRockskyActorDefs.ProfileViewBasic 22 + | { $type: string; [k: string]: unknown } 23 + )[] 24 + processingTimeMs?: number 25 + limit?: number 26 + offset?: number 27 + estimatedTotalHits?: number 28 + [k: string]: unknown 29 + } 30 + 31 + export function isSearchResultsView(v: unknown): v is SearchResultsView { 32 + return ( 33 + isObj(v) && 34 + hasProp(v, '$type') && 35 + v.$type === 'app.rocksky.feed.defs#searchResultsView' 36 + ) 37 + } 38 + 39 + export function validateSearchResultsView(v: unknown): ValidationResult { 40 + return lexicons.validate('app.rocksky.feed.defs#searchResultsView', v) 41 + } 42 + 43 + export interface NowPlayingView { 44 + album?: string 45 + albumArt?: string 46 + albumArtist?: string 47 + albumUri?: string 48 + artist?: string 49 + artistUri?: string 50 + avatar?: string 51 + createdAt?: string 52 + did?: string 53 + handle?: string 54 + id?: string 55 + title?: string 56 + trackId?: string 57 + trackUri?: string 58 + uri?: string 59 + [k: string]: unknown 60 + } 61 + 62 + export function isNowPlayingView(v: unknown): v is NowPlayingView { 63 + return ( 64 + isObj(v) && 65 + hasProp(v, '$type') && 66 + v.$type === 'app.rocksky.feed.defs#nowPlayingView' 67 + ) 68 + } 69 + 70 + export function validateNowPlayingView(v: unknown): ValidationResult { 71 + return lexicons.validate('app.rocksky.feed.defs#nowPlayingView', v) 72 + } 73 + 74 + export interface NowPlayingsView { 75 + nowPlayings?: NowPlayingView[] 76 + [k: string]: unknown 77 + } 78 + 79 + export function isNowPlayingsView(v: unknown): v is NowPlayingsView { 80 + return ( 81 + isObj(v) && 82 + hasProp(v, '$type') && 83 + v.$type === 'app.rocksky.feed.defs#nowPlayingsView' 84 + ) 85 + } 86 + 87 + export function validateNowPlayingsView(v: unknown): ValidationResult { 88 + return lexicons.validate('app.rocksky.feed.defs#nowPlayingsView', v) 89 + } 90 + 91 + export interface FeedGeneratorsView { 92 + feeds?: FeedGeneratorView[] 93 + [k: string]: unknown 94 + } 95 + 96 + export function isFeedGeneratorsView(v: unknown): v is FeedGeneratorsView { 97 + return ( 98 + isObj(v) && 99 + hasProp(v, '$type') && 100 + v.$type === 'app.rocksky.feed.defs#feedGeneratorsView' 101 + ) 102 + } 103 + 104 + export function validateFeedGeneratorsView(v: unknown): ValidationResult { 105 + return lexicons.validate('app.rocksky.feed.defs#feedGeneratorsView', v) 106 + } 107 + 108 + export interface FeedGeneratorView { 109 + id?: string 110 + name?: string 111 + description?: string 112 + uri?: string 113 + avatar?: string 114 + creator?: AppRockskyActorDefs.ProfileViewBasic 115 + [k: string]: unknown 116 + } 117 + 118 + export function isFeedGeneratorView(v: unknown): v is FeedGeneratorView { 119 + return ( 120 + isObj(v) && 121 + hasProp(v, '$type') && 122 + v.$type === 'app.rocksky.feed.defs#feedGeneratorView' 123 + ) 124 + } 125 + 126 + export function validateFeedGeneratorView(v: unknown): ValidationResult { 127 + return lexicons.validate('app.rocksky.feed.defs#feedGeneratorView', v) 128 + } 129 + 130 + export interface FeedUriView { 131 + /** The feed URI. */ 132 + uri?: string 133 + [k: string]: unknown 134 + } 135 + 136 + export function isFeedUriView(v: unknown): v is FeedUriView { 137 + return ( 138 + isObj(v) && 139 + hasProp(v, '$type') && 140 + v.$type === 'app.rocksky.feed.defs#feedUriView' 141 + ) 142 + } 143 + 144 + export function validateFeedUriView(v: unknown): ValidationResult { 145 + return lexicons.validate('app.rocksky.feed.defs#feedUriView', v) 146 + } 147 + 148 + export interface FeedItemView { 149 + scrobble?: AppRockskyScrobbleDefs.ScrobbleViewBasic 150 + [k: string]: unknown 151 + } 152 + 153 + export function isFeedItemView(v: unknown): v is FeedItemView { 154 + return ( 155 + isObj(v) && 156 + hasProp(v, '$type') && 157 + v.$type === 'app.rocksky.feed.defs#feedItemView' 158 + ) 159 + } 160 + 161 + export function validateFeedItemView(v: unknown): ValidationResult { 162 + return lexicons.validate('app.rocksky.feed.defs#feedItemView', v) 163 + } 164 + 165 + export interface FeedView { 166 + feed?: FeedItemView[] 167 + /** The pagination cursor for the next set of results. */ 168 + cursor?: string 169 + [k: string]: unknown 170 + } 171 + 172 + export function isFeedView(v: unknown): v is FeedView { 173 + return ( 174 + isObj(v) && 175 + hasProp(v, '$type') && 176 + v.$type === 'app.rocksky.feed.defs#feedView' 177 + ) 178 + } 179 + 180 + export function validateFeedView(v: unknown): ValidationResult { 181 + return lexicons.validate('app.rocksky.feed.defs#feedView', v) 182 + }
+48
apps/cli/src/lexicon/types/app/rocksky/feed/describeFeedGenerator.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 AppRockskyFeedDefs from './defs' 11 + 12 + export interface QueryParams {} 13 + 14 + export type InputSchema = undefined 15 + 16 + export interface OutputSchema { 17 + /** The DID of the feed generator. */ 18 + did?: string 19 + /** List of feed URIs generated by this feed generator. */ 20 + feeds?: AppRockskyFeedDefs.FeedUriView[] 21 + [k: string]: unknown 22 + } 23 + 24 + export type HandlerInput = undefined 25 + 26 + export interface HandlerSuccess { 27 + encoding: 'application/json' 28 + body: OutputSchema 29 + headers?: { [key: string]: string } 30 + } 31 + 32 + export interface HandlerError { 33 + status: number 34 + message?: string 35 + } 36 + 37 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 38 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 39 + auth: HA 40 + params: QueryParams 41 + input: HandlerInput 42 + req: express.Request 43 + res: express.Response 44 + resetRouteRateLimits: () => Promise<void> 45 + } 46 + export type Handler<HA extends HandlerAuth = never> = ( 47 + ctx: HandlerReqCtx<HA>, 48 + ) => Promise<HandlerOutput> | HandlerOutput
+29
apps/cli/src/lexicon/types/app/rocksky/feed/generator.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 + did: string 11 + avatar?: BlobRef 12 + displayName: string 13 + description?: string 14 + createdAt: string 15 + [k: string]: unknown 16 + } 17 + 18 + export function isRecord(v: unknown): v is Record { 19 + return ( 20 + isObj(v) && 21 + hasProp(v, '$type') && 22 + (v.$type === 'app.rocksky.feed.generator#main' || 23 + v.$type === 'app.rocksky.feed.generator') 24 + ) 25 + } 26 + 27 + export function validateRecord(v: unknown): ValidationResult { 28 + return lexicons.validate('app.rocksky.feed.generator#main', v) 29 + }
+47
apps/cli/src/lexicon/types/app/rocksky/feed/getFeed.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 AppRockskyFeedDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The feed URI. */ 14 + feed: string 15 + /** The maximum number of scrobbles to return */ 16 + limit?: number 17 + /** The cursor for pagination */ 18 + cursor?: string 19 + } 20 + 21 + export type InputSchema = undefined 22 + export type OutputSchema = AppRockskyFeedDefs.FeedView 23 + export type HandlerInput = undefined 24 + 25 + export interface HandlerSuccess { 26 + encoding: 'application/json' 27 + body: OutputSchema 28 + headers?: { [key: string]: string } 29 + } 30 + 31 + export interface HandlerError { 32 + status: number 33 + message?: string 34 + } 35 + 36 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 37 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 38 + auth: HA 39 + params: QueryParams 40 + input: HandlerInput 41 + req: express.Request 42 + res: express.Response 43 + resetRouteRateLimits: () => Promise<void> 44 + } 45 + export type Handler<HA extends HandlerAuth = never> = ( 46 + ctx: HandlerReqCtx<HA>, 47 + ) => Promise<HandlerOutput> | HandlerOutput
+48
apps/cli/src/lexicon/types/app/rocksky/feed/getFeedGenerator.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 AppRockskyFeedDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** AT-URI of the feed generator record. */ 14 + feed: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + 19 + export interface OutputSchema { 20 + view?: AppRockskyFeedDefs.FeedGeneratorView 21 + [k: string]: unknown 22 + } 23 + 24 + export type HandlerInput = undefined 25 + 26 + export interface HandlerSuccess { 27 + encoding: 'application/json' 28 + body: OutputSchema 29 + headers?: { [key: string]: string } 30 + } 31 + 32 + export interface HandlerError { 33 + status: number 34 + message?: string 35 + } 36 + 37 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 38 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 39 + auth: HA 40 + params: QueryParams 41 + input: HandlerInput 42 + req: express.Request 43 + res: express.Response 44 + resetRouteRateLimits: () => Promise<void> 45 + } 46 + export type Handler<HA extends HandlerAuth = never> = ( 47 + ctx: HandlerReqCtx<HA>, 48 + ) => Promise<HandlerOutput> | HandlerOutput
+43
apps/cli/src/lexicon/types/app/rocksky/feed/getFeedGenerators.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 AppRockskyFeedDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The maximum number of feed generators to return. */ 14 + size?: number 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type OutputSchema = AppRockskyFeedDefs.FeedGeneratorsView 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerSuccess { 22 + encoding: 'application/json' 23 + body: OutputSchema 24 + headers?: { [key: string]: string } 25 + } 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 33 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 34 + auth: HA 35 + params: QueryParams 36 + input: HandlerInput 37 + req: express.Request 38 + res: express.Response 39 + resetRouteRateLimits: () => Promise<void> 40 + } 41 + export type Handler<HA extends HandlerAuth = never> = ( 42 + ctx: HandlerReqCtx<HA>, 43 + ) => Promise<HandlerOutput> | HandlerOutput
+56
apps/cli/src/lexicon/types/app/rocksky/feed/getFeedSkeleton.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 AppRockskyScrobbleDefs from '../scrobble/defs' 11 + 12 + export interface QueryParams { 13 + /** The feed URI. */ 14 + feed: string 15 + /** The maximum number of scrobbles to return */ 16 + limit?: number 17 + /** The offset for pagination */ 18 + offset?: number 19 + /** The pagination cursor. */ 20 + cursor?: string 21 + } 22 + 23 + export type InputSchema = undefined 24 + 25 + export interface OutputSchema { 26 + scrobbles?: AppRockskyScrobbleDefs.ScrobbleViewBasic[] 27 + /** The pagination cursor for the next set of results. */ 28 + cursor?: string 29 + [k: string]: unknown 30 + } 31 + 32 + export type HandlerInput = undefined 33 + 34 + export interface HandlerSuccess { 35 + encoding: 'application/json' 36 + body: OutputSchema 37 + headers?: { [key: string]: string } 38 + } 39 + 40 + export interface HandlerError { 41 + status: number 42 + message?: string 43 + } 44 + 45 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 46 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 47 + auth: HA 48 + params: QueryParams 49 + input: HandlerInput 50 + req: express.Request 51 + res: express.Response 52 + resetRouteRateLimits: () => Promise<void> 53 + } 54 + export type Handler<HA extends HandlerAuth = never> = ( 55 + ctx: HandlerReqCtx<HA>, 56 + ) => Promise<HandlerOutput> | HandlerOutput
+43
apps/cli/src/lexicon/types/app/rocksky/feed/getNowPlayings.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 AppRockskyFeedDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The maximum number of now playing tracks to return. */ 14 + size?: number 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type OutputSchema = AppRockskyFeedDefs.NowPlayingsView 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerSuccess { 22 + encoding: 'application/json' 23 + body: OutputSchema 24 + headers?: { [key: string]: string } 25 + } 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 33 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 34 + auth: HA 35 + params: QueryParams 36 + input: HandlerInput 37 + req: express.Request 38 + res: express.Response 39 + resetRouteRateLimits: () => Promise<void> 40 + } 41 + export type Handler<HA extends HandlerAuth = never> = ( 42 + ctx: HandlerReqCtx<HA>, 43 + ) => Promise<HandlerOutput> | HandlerOutput
+43
apps/cli/src/lexicon/types/app/rocksky/feed/search.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 AppRockskyFeedDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The search query string */ 14 + query: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type OutputSchema = AppRockskyFeedDefs.SearchResultsView 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerSuccess { 22 + encoding: 'application/json' 23 + body: OutputSchema 24 + headers?: { [key: string]: string } 25 + } 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 33 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 34 + auth: HA 35 + params: QueryParams 36 + input: HandlerInput 37 + req: express.Request 38 + res: express.Response 39 + resetRouteRateLimits: () => Promise<void> 40 + } 41 + export type Handler<HA extends HandlerAuth = never> = ( 42 + ctx: HandlerReqCtx<HA>, 43 + ) => Promise<HandlerOutput> | HandlerOutput
+42
apps/cli/src/lexicon/types/app/rocksky/googledrive/defs.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 FileView { 10 + /** The unique identifier of the file. */ 11 + id?: string 12 + [k: string]: unknown 13 + } 14 + 15 + export function isFileView(v: unknown): v is FileView { 16 + return ( 17 + isObj(v) && 18 + hasProp(v, '$type') && 19 + v.$type === 'app.rocksky.googledrive.defs#fileView' 20 + ) 21 + } 22 + 23 + export function validateFileView(v: unknown): ValidationResult { 24 + return lexicons.validate('app.rocksky.googledrive.defs#fileView', v) 25 + } 26 + 27 + export interface FileListView { 28 + files?: FileView[] 29 + [k: string]: unknown 30 + } 31 + 32 + export function isFileListView(v: unknown): v is FileListView { 33 + return ( 34 + isObj(v) && 35 + hasProp(v, '$type') && 36 + v.$type === 'app.rocksky.googledrive.defs#fileListView' 37 + ) 38 + } 39 + 40 + export function validateFileListView(v: unknown): ValidationResult { 41 + return lexicons.validate('app.rocksky.googledrive.defs#fileListView', v) 42 + }
+42
apps/cli/src/lexicon/types/app/rocksky/googledrive/downloadFile.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import stream from 'stream' 6 + import { ValidationResult, BlobRef } from '@atproto/lexicon' 7 + import { lexicons } from '../../../../lexicons' 8 + import { isObj, hasProp } from '../../../../util' 9 + import { CID } from 'multiformats/cid' 10 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 11 + 12 + export interface QueryParams { 13 + /** The unique identifier of the file to download */ 14 + fileId: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type HandlerInput = undefined 19 + 20 + export interface HandlerSuccess { 21 + encoding: 'application/octet-stream' 22 + body: Uint8Array | stream.Readable 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
+43
apps/cli/src/lexicon/types/app/rocksky/googledrive/getFile.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 AppRockskyGoogledriveDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The unique identifier of the file to retrieve */ 14 + fileId: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type OutputSchema = AppRockskyGoogledriveDefs.FileView 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerSuccess { 22 + encoding: 'application/json' 23 + body: OutputSchema 24 + headers?: { [key: string]: string } 25 + } 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 33 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 34 + auth: HA 35 + params: QueryParams 36 + input: HandlerInput 37 + req: express.Request 38 + res: express.Response 39 + resetRouteRateLimits: () => Promise<void> 40 + } 41 + export type Handler<HA extends HandlerAuth = never> = ( 42 + ctx: HandlerReqCtx<HA>, 43 + ) => Promise<HandlerOutput> | HandlerOutput
+43
apps/cli/src/lexicon/types/app/rocksky/googledrive/getFiles.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 AppRockskyGoogledriveDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** Path to the Google Drive folder or root directory */ 14 + at?: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type OutputSchema = AppRockskyGoogledriveDefs.FileListView 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerSuccess { 22 + encoding: 'application/json' 23 + body: OutputSchema 24 + headers?: { [key: string]: string } 25 + } 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 33 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 34 + auth: HA 35 + params: QueryParams 36 + input: HandlerInput 37 + req: express.Request 38 + res: express.Response 39 + resetRouteRateLimits: () => Promise<void> 40 + } 41 + export type Handler<HA extends HandlerAuth = never> = ( 42 + ctx: HandlerReqCtx<HA>, 43 + ) => Promise<HandlerOutput> | HandlerOutput
+47
apps/cli/src/lexicon/types/app/rocksky/graph/defs.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 + /** indicates that a handle or DID could not be resolved */ 10 + export interface NotFoundActor { 11 + actor: string 12 + notFound: boolean 13 + [k: string]: unknown 14 + } 15 + 16 + export function isNotFoundActor(v: unknown): v is NotFoundActor { 17 + return ( 18 + isObj(v) && 19 + hasProp(v, '$type') && 20 + v.$type === 'app.rocksky.graph.defs#notFoundActor' 21 + ) 22 + } 23 + 24 + export function validateNotFoundActor(v: unknown): ValidationResult { 25 + return lexicons.validate('app.rocksky.graph.defs#notFoundActor', v) 26 + } 27 + 28 + export interface Relationship { 29 + did: string 30 + /** if the actor follows this DID, this is the AT-URI of the follow record */ 31 + following?: string 32 + /** if the actor is followed by this DID, contains the AT-URI of the follow record */ 33 + followedBy?: string 34 + [k: string]: unknown 35 + } 36 + 37 + export function isRelationship(v: unknown): v is Relationship { 38 + return ( 39 + isObj(v) && 40 + hasProp(v, '$type') && 41 + v.$type === 'app.rocksky.graph.defs#relationship' 42 + ) 43 + } 44 + 45 + export function validateRelationship(v: unknown): ValidationResult { 46 + return lexicons.validate('app.rocksky.graph.defs#relationship', v) 47 + }
+28
apps/cli/src/lexicon/types/app/rocksky/graph/follow.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 + import * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef' 9 + 10 + export interface Record { 11 + createdAt: string 12 + subject: string 13 + via?: ComAtprotoRepoStrongRef.Main 14 + [k: string]: unknown 15 + } 16 + 17 + export function isRecord(v: unknown): v is Record { 18 + return ( 19 + isObj(v) && 20 + hasProp(v, '$type') && 21 + (v.$type === 'app.rocksky.graph.follow#main' || 22 + v.$type === 'app.rocksky.graph.follow') 23 + ) 24 + } 25 + 26 + export function validateRecord(v: unknown): ValidationResult { 27 + return lexicons.validate('app.rocksky.graph.follow#main', v) 28 + }
+50
apps/cli/src/lexicon/types/app/rocksky/graph/followAccount.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 AppRockskyActorDefs from '../actor/defs' 11 + 12 + export interface QueryParams { 13 + account: string 14 + } 15 + 16 + export type InputSchema = undefined 17 + 18 + export interface OutputSchema { 19 + subject: AppRockskyActorDefs.ProfileViewBasic 20 + followers: AppRockskyActorDefs.ProfileViewBasic[] 21 + /** A cursor value to pass to subsequent calls to get the next page of results. */ 22 + cursor?: string 23 + [k: string]: unknown 24 + } 25 + 26 + export type HandlerInput = undefined 27 + 28 + export interface HandlerSuccess { 29 + encoding: 'application/json' 30 + body: OutputSchema 31 + headers?: { [key: string]: string } 32 + } 33 + 34 + export interface HandlerError { 35 + status: number 36 + message?: string 37 + } 38 + 39 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 40 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 41 + auth: HA 42 + params: QueryParams 43 + input: HandlerInput 44 + req: express.Request 45 + res: express.Response 46 + resetRouteRateLimits: () => Promise<void> 47 + } 48 + export type Handler<HA extends HandlerAuth = never> = ( 49 + ctx: HandlerReqCtx<HA>, 50 + ) => Promise<HandlerOutput> | HandlerOutput
+56
apps/cli/src/lexicon/types/app/rocksky/graph/getFollowers.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 AppRockskyActorDefs from '../actor/defs' 11 + 12 + export interface QueryParams { 13 + actor: string 14 + limit: number 15 + /** If provided, filters the followers to only include those with DIDs in this list. */ 16 + dids?: string[] 17 + cursor?: string 18 + } 19 + 20 + export type InputSchema = undefined 21 + 22 + export interface OutputSchema { 23 + subject: AppRockskyActorDefs.ProfileViewBasic 24 + followers: AppRockskyActorDefs.ProfileViewBasic[] 25 + /** A cursor value to pass to subsequent calls to get the next page of results. */ 26 + cursor?: string 27 + /** The total number of followers. */ 28 + count?: number 29 + [k: string]: unknown 30 + } 31 + 32 + export type HandlerInput = undefined 33 + 34 + export interface HandlerSuccess { 35 + encoding: 'application/json' 36 + body: OutputSchema 37 + headers?: { [key: string]: string } 38 + } 39 + 40 + export interface HandlerError { 41 + status: number 42 + message?: string 43 + } 44 + 45 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 46 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 47 + auth: HA 48 + params: QueryParams 49 + input: HandlerInput 50 + req: express.Request 51 + res: express.Response 52 + resetRouteRateLimits: () => Promise<void> 53 + } 54 + export type Handler<HA extends HandlerAuth = never> = ( 55 + ctx: HandlerReqCtx<HA>, 56 + ) => Promise<HandlerOutput> | HandlerOutput
+56
apps/cli/src/lexicon/types/app/rocksky/graph/getFollows.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 AppRockskyActorDefs from '../actor/defs' 11 + 12 + export interface QueryParams { 13 + actor: string 14 + limit: number 15 + /** If provided, filters the follows to only include those with DIDs in this list. */ 16 + dids?: string[] 17 + cursor?: string 18 + } 19 + 20 + export type InputSchema = undefined 21 + 22 + export interface OutputSchema { 23 + subject: AppRockskyActorDefs.ProfileViewBasic 24 + follows: AppRockskyActorDefs.ProfileViewBasic[] 25 + /** A cursor value to pass to subsequent calls to get the next page of results. */ 26 + cursor?: string 27 + /** The total number of follows. */ 28 + count?: number 29 + [k: string]: unknown 30 + } 31 + 32 + export type HandlerInput = undefined 33 + 34 + export interface HandlerSuccess { 35 + encoding: 'application/json' 36 + body: OutputSchema 37 + headers?: { [key: string]: string } 38 + } 39 + 40 + export interface HandlerError { 41 + status: number 42 + message?: string 43 + } 44 + 45 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 46 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 47 + auth: HA 48 + params: QueryParams 49 + input: HandlerInput 50 + req: express.Request 51 + res: express.Response 52 + resetRouteRateLimits: () => Promise<void> 53 + } 54 + export type Handler<HA extends HandlerAuth = never> = ( 55 + ctx: HandlerReqCtx<HA>, 56 + ) => Promise<HandlerOutput> | HandlerOutput
+52
apps/cli/src/lexicon/types/app/rocksky/graph/getKnownFollowers.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 AppRockskyActorDefs from '../actor/defs' 11 + 12 + export interface QueryParams { 13 + actor: string 14 + limit: number 15 + cursor?: string 16 + } 17 + 18 + export type InputSchema = undefined 19 + 20 + export interface OutputSchema { 21 + subject: AppRockskyActorDefs.ProfileViewBasic 22 + followers: AppRockskyActorDefs.ProfileViewBasic[] 23 + /** A cursor value to pass to subsequent calls to get the next page of results. */ 24 + cursor?: string 25 + [k: string]: unknown 26 + } 27 + 28 + export type HandlerInput = undefined 29 + 30 + export interface HandlerSuccess { 31 + encoding: 'application/json' 32 + body: OutputSchema 33 + headers?: { [key: string]: string } 34 + } 35 + 36 + export interface HandlerError { 37 + status: number 38 + message?: string 39 + } 40 + 41 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 42 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 43 + auth: HA 44 + params: QueryParams 45 + input: HandlerInput 46 + req: express.Request 47 + res: express.Response 48 + resetRouteRateLimits: () => Promise<void> 49 + } 50 + export type Handler<HA extends HandlerAuth = never> = ( 51 + ctx: HandlerReqCtx<HA>, 52 + ) => Promise<HandlerOutput> | HandlerOutput
+50
apps/cli/src/lexicon/types/app/rocksky/graph/unfollowAccount.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 AppRockskyActorDefs from '../actor/defs' 11 + 12 + export interface QueryParams { 13 + account: string 14 + } 15 + 16 + export type InputSchema = undefined 17 + 18 + export interface OutputSchema { 19 + subject: AppRockskyActorDefs.ProfileViewBasic 20 + followers: AppRockskyActorDefs.ProfileViewBasic[] 21 + /** A cursor value to pass to subsequent calls to get the next page of results. */ 22 + cursor?: string 23 + [k: string]: unknown 24 + } 25 + 26 + export type HandlerInput = undefined 27 + 28 + export interface HandlerSuccess { 29 + encoding: 'application/json' 30 + body: OutputSchema 31 + headers?: { [key: string]: string } 32 + } 33 + 34 + export interface HandlerError { 35 + status: number 36 + message?: string 37 + } 38 + 39 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 40 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 41 + auth: HA 42 + params: QueryParams 43 + input: HandlerInput 44 + req: express.Request 45 + res: express.Response 46 + resetRouteRateLimits: () => Promise<void> 47 + } 48 + export type Handler<HA extends HandlerAuth = never> = ( 49 + ctx: HandlerReqCtx<HA>, 50 + ) => Promise<HandlerOutput> | HandlerOutput
+27
apps/cli/src/lexicon/types/app/rocksky/like.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 + import * as ComAtprotoRepoStrongRef from '../../com/atproto/repo/strongRef' 9 + 10 + export interface Record { 11 + /** The date when the like was created. */ 12 + createdAt: string 13 + subject: ComAtprotoRepoStrongRef.Main 14 + [k: string]: unknown 15 + } 16 + 17 + export function isRecord(v: unknown): v is Record { 18 + return ( 19 + isObj(v) && 20 + hasProp(v, '$type') && 21 + (v.$type === 'app.rocksky.like#main' || v.$type === 'app.rocksky.like') 22 + ) 23 + } 24 + 25 + export function validateRecord(v: unknown): ValidationResult { 26 + return lexicons.validate('app.rocksky.like#main', v) 27 + }
+49
apps/cli/src/lexicon/types/app/rocksky/like/dislikeShout.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 AppRockskyShoutDefs from '../shout/defs' 11 + 12 + export interface QueryParams {} 13 + 14 + export interface InputSchema { 15 + /** The unique identifier of the shout to dislike */ 16 + uri?: string 17 + [k: string]: unknown 18 + } 19 + 20 + export type OutputSchema = AppRockskyShoutDefs.ShoutView 21 + 22 + export interface HandlerInput { 23 + encoding: 'application/json' 24 + body: InputSchema 25 + } 26 + 27 + export interface HandlerSuccess { 28 + encoding: 'application/json' 29 + body: OutputSchema 30 + headers?: { [key: string]: string } 31 + } 32 + 33 + export interface HandlerError { 34 + status: number 35 + message?: string 36 + } 37 + 38 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 39 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 40 + auth: HA 41 + params: QueryParams 42 + input: HandlerInput 43 + req: express.Request 44 + res: express.Response 45 + resetRouteRateLimits: () => Promise<void> 46 + } 47 + export type Handler<HA extends HandlerAuth = never> = ( 48 + ctx: HandlerReqCtx<HA>, 49 + ) => Promise<HandlerOutput> | HandlerOutput
+49
apps/cli/src/lexicon/types/app/rocksky/like/dislikeSong.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 AppRockskySongDefs from '../song/defs' 11 + 12 + export interface QueryParams {} 13 + 14 + export interface InputSchema { 15 + /** The unique identifier of the song to dislike */ 16 + uri?: string 17 + [k: string]: unknown 18 + } 19 + 20 + export type OutputSchema = AppRockskySongDefs.SongViewDetailed 21 + 22 + export interface HandlerInput { 23 + encoding: 'application/json' 24 + body: InputSchema 25 + } 26 + 27 + export interface HandlerSuccess { 28 + encoding: 'application/json' 29 + body: OutputSchema 30 + headers?: { [key: string]: string } 31 + } 32 + 33 + export interface HandlerError { 34 + status: number 35 + message?: string 36 + } 37 + 38 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 39 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 40 + auth: HA 41 + params: QueryParams 42 + input: HandlerInput 43 + req: express.Request 44 + res: express.Response 45 + resetRouteRateLimits: () => Promise<void> 46 + } 47 + export type Handler<HA extends HandlerAuth = never> = ( 48 + ctx: HandlerReqCtx<HA>, 49 + ) => Promise<HandlerOutput> | HandlerOutput
+49
apps/cli/src/lexicon/types/app/rocksky/like/likeShout.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 AppRockskyShoutDefs from '../shout/defs' 11 + 12 + export interface QueryParams {} 13 + 14 + export interface InputSchema { 15 + /** The unique identifier of the shout to like */ 16 + uri?: string 17 + [k: string]: unknown 18 + } 19 + 20 + export type OutputSchema = AppRockskyShoutDefs.ShoutView 21 + 22 + export interface HandlerInput { 23 + encoding: 'application/json' 24 + body: InputSchema 25 + } 26 + 27 + export interface HandlerSuccess { 28 + encoding: 'application/json' 29 + body: OutputSchema 30 + headers?: { [key: string]: string } 31 + } 32 + 33 + export interface HandlerError { 34 + status: number 35 + message?: string 36 + } 37 + 38 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 39 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 40 + auth: HA 41 + params: QueryParams 42 + input: HandlerInput 43 + req: express.Request 44 + res: express.Response 45 + resetRouteRateLimits: () => Promise<void> 46 + } 47 + export type Handler<HA extends HandlerAuth = never> = ( 48 + ctx: HandlerReqCtx<HA>, 49 + ) => Promise<HandlerOutput> | HandlerOutput
+49
apps/cli/src/lexicon/types/app/rocksky/like/likeSong.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 AppRockskySongDefs from '../song/defs' 11 + 12 + export interface QueryParams {} 13 + 14 + export interface InputSchema { 15 + /** The unique identifier of the song to like */ 16 + uri?: string 17 + [k: string]: unknown 18 + } 19 + 20 + export type OutputSchema = AppRockskySongDefs.SongViewDetailed 21 + 22 + export interface HandlerInput { 23 + encoding: 'application/json' 24 + body: InputSchema 25 + } 26 + 27 + export interface HandlerSuccess { 28 + encoding: 'application/json' 29 + body: OutputSchema 30 + headers?: { [key: string]: string } 31 + } 32 + 33 + export interface HandlerError { 34 + status: number 35 + message?: string 36 + } 37 + 38 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 39 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 40 + auth: HA 41 + params: QueryParams 42 + input: HandlerInput 43 + req: express.Request 44 + res: express.Response 45 + resetRouteRateLimits: () => Promise<void> 46 + } 47 + export type Handler<HA extends HandlerAuth = never> = ( 48 + ctx: HandlerReqCtx<HA>, 49 + ) => Promise<HandlerOutput> | HandlerOutput
+40
apps/cli/src/lexicon/types/app/rocksky/player/addDirectoryToQueue.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 + /** The directory to add to the queue */ 14 + directory: string 15 + /** Position in the queue to insert the directory at, defaults to the end if not specified */ 16 + position?: number 17 + /** Whether to shuffle the added directory in the queue */ 18 + shuffle?: boolean 19 + } 20 + 21 + export type InputSchema = undefined 22 + export type HandlerInput = undefined 23 + 24 + export interface HandlerError { 25 + status: number 26 + message?: string 27 + } 28 + 29 + export type HandlerOutput = HandlerError | void 30 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 31 + auth: HA 32 + params: QueryParams 33 + input: HandlerInput 34 + req: express.Request 35 + res: express.Response 36 + resetRouteRateLimits: () => Promise<void> 37 + } 38 + export type Handler<HA extends HandlerAuth = never> = ( 39 + ctx: HandlerReqCtx<HA>, 40 + ) => Promise<HandlerOutput> | HandlerOutput
+39
apps/cli/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 + /** Whether to shuffle the added items in the queue */ 17 + shuffle?: boolean 18 + } 19 + 20 + export type InputSchema = undefined 21 + export type HandlerInput = undefined 22 + 23 + export interface HandlerError { 24 + status: number 25 + message?: string 26 + } 27 + 28 + export type HandlerOutput = HandlerError | void 29 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 30 + auth: HA 31 + params: QueryParams 32 + input: HandlerInput 33 + req: express.Request 34 + res: express.Response 35 + resetRouteRateLimits: () => Promise<void> 36 + } 37 + export type Handler<HA extends HandlerAuth = never> = ( 38 + ctx: HandlerReqCtx<HA>, 39 + ) => Promise<HandlerOutput> | HandlerOutput
+57
apps/cli/src/lexicon/types/app/rocksky/player/defs.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 + import * as AppRockskySongDefsSongViewBasic from '../song/defs/songViewBasic' 9 + 10 + export interface CurrentlyPlayingViewDetailed { 11 + /** The title of the currently playing track */ 12 + title?: string 13 + [k: string]: unknown 14 + } 15 + 16 + export function isCurrentlyPlayingViewDetailed( 17 + v: unknown, 18 + ): v is CurrentlyPlayingViewDetailed { 19 + return ( 20 + isObj(v) && 21 + hasProp(v, '$type') && 22 + v.$type === 'app.rocksky.player.defs#currentlyPlayingViewDetailed' 23 + ) 24 + } 25 + 26 + export function validateCurrentlyPlayingViewDetailed( 27 + v: unknown, 28 + ): ValidationResult { 29 + return lexicons.validate( 30 + 'app.rocksky.player.defs#currentlyPlayingViewDetailed', 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 + }
+44
apps/cli/src/lexicon/types/app/rocksky/player/getCurrentlyPlaying.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 + /** 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 + } 17 + 18 + export type InputSchema = undefined 19 + export type OutputSchema = AppRockskyPlayerDefs.CurrentlyPlayingViewDetailed 20 + export type HandlerInput = undefined 21 + 22 + export interface HandlerSuccess { 23 + encoding: 'application/json' 24 + body: OutputSchema 25 + headers?: { [key: string]: string } 26 + } 27 + 28 + export interface HandlerError { 29 + status: number 30 + message?: string 31 + } 32 + 33 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 34 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 35 + auth: HA 36 + params: QueryParams 37 + input: HandlerInput 38 + req: express.Request 39 + res: express.Response 40 + resetRouteRateLimits: () => Promise<void> 41 + } 42 + export type Handler<HA extends HandlerAuth = never> = ( 43 + ctx: HandlerReqCtx<HA>, 44 + ) => Promise<HandlerOutput> | HandlerOutput
+42
apps/cli/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
+34
apps/cli/src/lexicon/types/app/rocksky/player/next.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 + } 14 + 15 + export type InputSchema = undefined 16 + export type HandlerInput = undefined 17 + 18 + export interface HandlerError { 19 + status: number 20 + message?: string 21 + } 22 + 23 + export type HandlerOutput = HandlerError | void 24 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 25 + auth: HA 26 + params: QueryParams 27 + input: HandlerInput 28 + req: express.Request 29 + res: express.Response 30 + resetRouteRateLimits: () => Promise<void> 31 + } 32 + export type Handler<HA extends HandlerAuth = never> = ( 33 + ctx: HandlerReqCtx<HA>, 34 + ) => Promise<HandlerOutput> | HandlerOutput
+34
apps/cli/src/lexicon/types/app/rocksky/player/pause.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 + } 14 + 15 + export type InputSchema = undefined 16 + export type HandlerInput = undefined 17 + 18 + export interface HandlerError { 19 + status: number 20 + message?: string 21 + } 22 + 23 + export type HandlerOutput = HandlerError | void 24 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 25 + auth: HA 26 + params: QueryParams 27 + input: HandlerInput 28 + req: express.Request 29 + res: express.Response 30 + resetRouteRateLimits: () => Promise<void> 31 + } 32 + export type Handler<HA extends HandlerAuth = never> = ( 33 + ctx: HandlerReqCtx<HA>, 34 + ) => Promise<HandlerOutput> | HandlerOutput
+34
apps/cli/src/lexicon/types/app/rocksky/player/play.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 + } 14 + 15 + export type InputSchema = undefined 16 + export type HandlerInput = undefined 17 + 18 + export interface HandlerError { 19 + status: number 20 + message?: string 21 + } 22 + 23 + export type HandlerOutput = HandlerError | void 24 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 25 + auth: HA 26 + params: QueryParams 27 + input: HandlerInput 28 + req: express.Request 29 + res: express.Response 30 + resetRouteRateLimits: () => Promise<void> 31 + } 32 + export type Handler<HA extends HandlerAuth = never> = ( 33 + ctx: HandlerReqCtx<HA>, 34 + ) => Promise<HandlerOutput> | HandlerOutput
+38
apps/cli/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 + shuffle?: boolean 15 + recurse?: boolean 16 + position?: number 17 + } 18 + 19 + export type InputSchema = undefined 20 + export type HandlerInput = undefined 21 + 22 + export interface HandlerError { 23 + status: number 24 + message?: string 25 + } 26 + 27 + export type HandlerOutput = HandlerError | void 28 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 29 + auth: HA 30 + params: QueryParams 31 + input: HandlerInput 32 + req: express.Request 33 + res: express.Response 34 + resetRouteRateLimits: () => Promise<void> 35 + } 36 + export type Handler<HA extends HandlerAuth = never> = ( 37 + ctx: HandlerReqCtx<HA>, 38 + ) => Promise<HandlerOutput> | HandlerOutput
+35
apps/cli/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
+34
apps/cli/src/lexicon/types/app/rocksky/player/previous.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 + } 14 + 15 + export type InputSchema = undefined 16 + export type HandlerInput = undefined 17 + 18 + export interface HandlerError { 19 + status: number 20 + message?: string 21 + } 22 + 23 + export type HandlerOutput = HandlerError | void 24 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 25 + auth: HA 26 + params: QueryParams 27 + input: HandlerInput 28 + req: express.Request 29 + res: express.Response 30 + resetRouteRateLimits: () => Promise<void> 31 + } 32 + export type Handler<HA extends HandlerAuth = never> = ( 33 + ctx: HandlerReqCtx<HA>, 34 + ) => Promise<HandlerOutput> | HandlerOutput
+36
apps/cli/src/lexicon/types/app/rocksky/player/seek.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 + /** The position in seconds to seek to */ 14 + position: number 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
+43
apps/cli/src/lexicon/types/app/rocksky/playlist.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 + import * as AppRockskySong from './song' 9 + 10 + export interface Record { 11 + /** The name of the playlist. */ 12 + name: string 13 + /** The playlist description. */ 14 + description?: string 15 + /** The picture of the playlist. */ 16 + picture?: BlobRef 17 + /** The tracks in the playlist. */ 18 + tracks?: AppRockskySong.Record[] 19 + /** The date the playlist was created. */ 20 + createdAt: string 21 + /** The Spotify link of the playlist. */ 22 + spotifyLink?: string 23 + /** The Tidal link of the playlist. */ 24 + tidalLink?: string 25 + /** The YouTube link of the playlist. */ 26 + youtubeLink?: string 27 + /** The Apple Music link of the playlist. */ 28 + appleMusicLink?: string 29 + [k: string]: unknown 30 + } 31 + 32 + export function isRecord(v: unknown): v is Record { 33 + return ( 34 + isObj(v) && 35 + hasProp(v, '$type') && 36 + (v.$type === 'app.rocksky.playlist#main' || 37 + v.$type === 'app.rocksky.playlist') 38 + ) 39 + } 40 + 41 + export function validateRecord(v: unknown): ValidationResult { 42 + return lexicons.validate('app.rocksky.playlist#main', v) 43 + }
+37
apps/cli/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
+86
apps/cli/src/lexicon/types/app/rocksky/playlist/defs.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 + import * as AppRockskySongDefs from '../song/defs' 9 + 10 + /** Detailed view of a playlist, including its tracks and metadata */ 11 + export interface PlaylistViewDetailed { 12 + /** The unique identifier of the playlist. */ 13 + id?: string 14 + /** The title of the playlist. */ 15 + title?: string 16 + /** The URI of the playlist. */ 17 + uri?: string 18 + /** The DID of the curator of the playlist. */ 19 + curatorDid?: string 20 + /** The handle of the curator of the playlist. */ 21 + curatorHandle?: string 22 + /** The name of the curator of the playlist. */ 23 + curatorName?: string 24 + /** The URL of the avatar image of the curator. */ 25 + curatorAvatarUrl?: string 26 + /** A description of the playlist. */ 27 + description?: string 28 + /** The URL of the cover image for the playlist. */ 29 + coverImageUrl?: string 30 + /** The date and time when the playlist was created. */ 31 + createdAt?: string 32 + /** A list of tracks in the playlist. */ 33 + tracks?: AppRockskySongDefs.SongViewBasic[] 34 + [k: string]: unknown 35 + } 36 + 37 + export function isPlaylistViewDetailed(v: unknown): v is PlaylistViewDetailed { 38 + return ( 39 + isObj(v) && 40 + hasProp(v, '$type') && 41 + v.$type === 'app.rocksky.playlist.defs#playlistViewDetailed' 42 + ) 43 + } 44 + 45 + export function validatePlaylistViewDetailed(v: unknown): ValidationResult { 46 + return lexicons.validate('app.rocksky.playlist.defs#playlistViewDetailed', v) 47 + } 48 + 49 + /** Basic view of a playlist, including its metadata */ 50 + export interface PlaylistViewBasic { 51 + /** The unique identifier of the playlist. */ 52 + id?: string 53 + /** The title of the playlist. */ 54 + title?: string 55 + /** The URI of the playlist. */ 56 + uri?: string 57 + /** The DID of the curator of the playlist. */ 58 + curatorDid?: string 59 + /** The handle of the curator of the playlist. */ 60 + curatorHandle?: string 61 + /** The name of the curator of the playlist. */ 62 + curatorName?: string 63 + /** The URL of the avatar image of the curator. */ 64 + curatorAvatarUrl?: string 65 + /** A description of the playlist. */ 66 + description?: string 67 + /** The URL of the cover image for the playlist. */ 68 + coverImageUrl?: string 69 + /** The date and time when the playlist was created. */ 70 + createdAt?: string 71 + /** The number of tracks in the playlist. */ 72 + trackCount?: number 73 + [k: string]: unknown 74 + } 75 + 76 + export function isPlaylistViewBasic(v: unknown): v is PlaylistViewBasic { 77 + return ( 78 + isObj(v) && 79 + hasProp(v, '$type') && 80 + v.$type === 'app.rocksky.playlist.defs#playlistViewBasic' 81 + ) 82 + } 83 + 84 + export function validatePlaylistViewBasic(v: unknown): ValidationResult { 85 + return lexicons.validate('app.rocksky.playlist.defs#playlistViewBasic', v) 86 + }
+43
apps/cli/src/lexicon/types/app/rocksky/playlist/getPlaylist.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 AppRockskyPlaylistDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The URI of the playlist to retrieve. */ 14 + uri: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type OutputSchema = AppRockskyPlaylistDefs.PlaylistViewDetailed 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerSuccess { 22 + encoding: 'application/json' 23 + body: OutputSchema 24 + headers?: { [key: string]: string } 25 + } 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 33 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 34 + auth: HA 35 + params: QueryParams 36 + input: HandlerInput 37 + req: express.Request 38 + res: express.Response 39 + resetRouteRateLimits: () => Promise<void> 40 + } 41 + export type Handler<HA extends HandlerAuth = never> = ( 42 + ctx: HandlerReqCtx<HA>, 43 + ) => Promise<HandlerOutput> | HandlerOutput
+50
apps/cli/src/lexicon/types/app/rocksky/playlist/getPlaylists.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 AppRockskyPlaylistDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The maximum number of playlists to return. */ 14 + limit?: number 15 + /** The offset for pagination, used to skip a number of playlists. */ 16 + offset?: number 17 + } 18 + 19 + export type InputSchema = undefined 20 + 21 + export interface OutputSchema { 22 + playlists?: AppRockskyPlaylistDefs.PlaylistViewBasic[] 23 + [k: string]: unknown 24 + } 25 + 26 + export type HandlerInput = undefined 27 + 28 + export interface HandlerSuccess { 29 + encoding: 'application/json' 30 + body: OutputSchema 31 + headers?: { [key: string]: string } 32 + } 33 + 34 + export interface HandlerError { 35 + status: number 36 + message?: string 37 + } 38 + 39 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 40 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 41 + auth: HA 42 + params: QueryParams 43 + input: HandlerInput 44 + req: express.Request 45 + res: express.Response 46 + resetRouteRateLimits: () => Promise<void> 47 + } 48 + export type Handler<HA extends HandlerAuth = never> = ( 49 + ctx: HandlerReqCtx<HA>, 50 + ) => Promise<HandlerOutput> | HandlerOutput
+39
apps/cli/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 + /** The position in the playlist to insert the directory at, if not specified, the directory will be appended */ 17 + position?: number 18 + } 19 + 20 + export type InputSchema = undefined 21 + export type HandlerInput = undefined 22 + 23 + export interface HandlerError { 24 + status: number 25 + message?: string 26 + } 27 + 28 + export type HandlerOutput = HandlerError | void 29 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 30 + auth: HA 31 + params: QueryParams 32 + input: HandlerInput 33 + req: express.Request 34 + res: express.Response 35 + resetRouteRateLimits: () => Promise<void> 36 + } 37 + export type Handler<HA extends HandlerAuth = never> = ( 38 + ctx: HandlerReqCtx<HA>, 39 + ) => Promise<HandlerOutput> | HandlerOutput
+38
apps/cli/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 + /** The position in the playlist to insert the files at, if not specified, files will be appended */ 16 + position?: number 17 + } 18 + 19 + export type InputSchema = undefined 20 + export type HandlerInput = undefined 21 + 22 + export interface HandlerError { 23 + status: number 24 + message?: string 25 + } 26 + 27 + export type HandlerOutput = HandlerError | void 28 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 29 + auth: HA 30 + params: QueryParams 31 + input: HandlerInput 32 + req: express.Request 33 + res: express.Response 34 + resetRouteRateLimits: () => Promise<void> 35 + } 36 + export type Handler<HA extends HandlerAuth = never> = ( 37 + ctx: HandlerReqCtx<HA>, 38 + ) => Promise<HandlerOutput> | HandlerOutput
+35
apps/cli/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/cli/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
+39
apps/cli/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 + /** Whether to shuffle the playlist when starting it */ 15 + shuffle?: boolean 16 + /** The position in the playlist to start from, if not specified, starts from the beginning */ 17 + position?: number 18 + } 19 + 20 + export type InputSchema = undefined 21 + export type HandlerInput = undefined 22 + 23 + export interface HandlerError { 24 + status: number 25 + message?: string 26 + } 27 + 28 + export type HandlerOutput = HandlerError | void 29 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 30 + auth: HA 31 + params: QueryParams 32 + input: HandlerInput 33 + req: express.Request 34 + res: express.Response 35 + resetRouteRateLimits: () => Promise<void> 36 + } 37 + export type Handler<HA extends HandlerAuth = never> = ( 38 + ctx: HandlerReqCtx<HA>, 39 + ) => Promise<HandlerOutput> | HandlerOutput
+37
apps/cli/src/lexicon/types/app/rocksky/radio.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 name of the radio station. */ 11 + name: string 12 + /** The URL of the radio station. */ 13 + url: string 14 + /** A description of the radio station. */ 15 + description?: string 16 + /** The genre of the radio station. */ 17 + genre?: string 18 + /** The logo of the radio station. */ 19 + logo?: BlobRef 20 + /** The website of the radio station. */ 21 + website?: string 22 + /** The date when the radio station was created. */ 23 + createdAt: string 24 + [k: string]: unknown 25 + } 26 + 27 + export function isRecord(v: unknown): v is Record { 28 + return ( 29 + isObj(v) && 30 + hasProp(v, '$type') && 31 + (v.$type === 'app.rocksky.radio#main' || v.$type === 'app.rocksky.radio') 32 + ) 33 + } 34 + 35 + export function validateRecord(v: unknown): ValidationResult { 36 + return lexicons.validate('app.rocksky.radio#main', v) 37 + }
+63
apps/cli/src/lexicon/types/app/rocksky/radio/defs.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 RadioViewBasic { 10 + /** The unique identifier of the radio. */ 11 + id?: string 12 + /** The name of the radio. */ 13 + name?: string 14 + /** A brief description of the radio. */ 15 + description?: string 16 + /** The date and time when the radio was created. */ 17 + createdAt?: string 18 + [k: string]: unknown 19 + } 20 + 21 + export function isRadioViewBasic(v: unknown): v is RadioViewBasic { 22 + return ( 23 + isObj(v) && 24 + hasProp(v, '$type') && 25 + v.$type === 'app.rocksky.radio.defs#radioViewBasic' 26 + ) 27 + } 28 + 29 + export function validateRadioViewBasic(v: unknown): ValidationResult { 30 + return lexicons.validate('app.rocksky.radio.defs#radioViewBasic', v) 31 + } 32 + 33 + export interface RadioViewDetailed { 34 + /** The unique identifier of the radio. */ 35 + id?: string 36 + /** The name of the radio. */ 37 + name?: string 38 + /** A brief description of the radio. */ 39 + description?: string 40 + /** The website of the radio. */ 41 + website?: string 42 + /** The streaming URL of the radio. */ 43 + url?: string 44 + /** The genre of the radio. */ 45 + genre?: string 46 + /** The logo of the radio station. */ 47 + logo?: string 48 + /** The date and time when the radio was created. */ 49 + createdAt?: string 50 + [k: string]: unknown 51 + } 52 + 53 + export function isRadioViewDetailed(v: unknown): v is RadioViewDetailed { 54 + return ( 55 + isObj(v) && 56 + hasProp(v, '$type') && 57 + v.$type === 'app.rocksky.radio.defs#radioViewDetailed' 58 + ) 59 + } 60 + 61 + export function validateRadioViewDetailed(v: unknown): ValidationResult { 62 + return lexicons.validate('app.rocksky.radio.defs#radioViewDetailed', v) 63 + }
+75
apps/cli/src/lexicon/types/app/rocksky/scrobble.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 + import * as AppRockskyArtistDefs from './artist/defs' 9 + 10 + export interface Record { 11 + /** The title of the song. */ 12 + title: string 13 + /** The artist of the song. */ 14 + artist: string 15 + /** The artists of the song with MusicBrainz IDs. */ 16 + artists?: AppRockskyArtistDefs.ArtistMbid[] 17 + /** The album artist of the song. */ 18 + albumArtist: string 19 + /** The album of the song. */ 20 + album: string 21 + /** The duration of the song in seconds. */ 22 + duration: number 23 + /** The track number of the song in the album. */ 24 + trackNumber?: number 25 + /** The disc number of the song in the album. */ 26 + discNumber?: number 27 + /** The release date of the song. */ 28 + releaseDate?: string 29 + /** The year the song was released. */ 30 + year?: number 31 + /** The genre of the song. */ 32 + genre?: string 33 + /** The tags of the song. */ 34 + tags?: string[] 35 + /** The composer of the song. */ 36 + composer?: string 37 + /** The lyrics of the song. */ 38 + lyrics?: string 39 + /** The copyright message of the song. */ 40 + copyrightMessage?: string 41 + /** Informations about the song */ 42 + wiki?: string 43 + /** The album art of the song. */ 44 + albumArt?: BlobRef 45 + /** The URL of the album art of the song. */ 46 + albumArtUrl?: string 47 + /** The YouTube link of the song. */ 48 + youtubeLink?: string 49 + /** The Spotify link of the song. */ 50 + spotifyLink?: string 51 + /** The Tidal link of the song. */ 52 + tidalLink?: string 53 + /** The Apple Music link of the song. */ 54 + appleMusicLink?: string 55 + /** The date when the song was created. */ 56 + createdAt: string 57 + /** The MusicBrainz ID of the song. */ 58 + mbid?: string 59 + /** The label of the song. */ 60 + label?: string 61 + [k: string]: unknown 62 + } 63 + 64 + export function isRecord(v: unknown): v is Record { 65 + return ( 66 + isObj(v) && 67 + hasProp(v, '$type') && 68 + (v.$type === 'app.rocksky.scrobble#main' || 69 + v.$type === 'app.rocksky.scrobble') 70 + ) 71 + } 72 + 73 + export function validateRecord(v: unknown): ValidationResult { 74 + return lexicons.validate('app.rocksky.scrobble#main', v) 75 + }
+91
apps/cli/src/lexicon/types/app/rocksky/scrobble/createScrobble.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 AppRockskyScrobbleDefs from './defs' 11 + 12 + export interface QueryParams {} 13 + 14 + export interface InputSchema { 15 + /** The title of the track being scrobbled */ 16 + title: string 17 + /** The artist of the track being scrobbled */ 18 + artist: string 19 + /** The album of the track being scrobbled */ 20 + album?: string 21 + /** The duration of the track in seconds */ 22 + duration?: number 23 + /** The MusicBrainz ID of the track, if available */ 24 + mbId?: string 25 + /** The URL of the album art for the track */ 26 + albumArt?: string 27 + /** The track number of the track in the album */ 28 + trackNumber?: number 29 + /** The release date of the track, formatted as YYYY-MM-DD */ 30 + releaseDate?: string 31 + /** The year the track was released */ 32 + year?: number 33 + /** The disc number of the track in the album, if applicable */ 34 + discNumber?: number 35 + /** The lyrics of the track, if available */ 36 + lyrics?: string 37 + /** The composer of the track, if available */ 38 + composer?: string 39 + /** The copyright message for the track, if available */ 40 + copyrightMessage?: string 41 + /** The record label of the track, if available */ 42 + label?: string 43 + /** The URL of the artist's picture, if available */ 44 + artistPicture?: string 45 + /** The Spotify link for the track, if available */ 46 + spotifyLink?: string 47 + /** The Last.fm link for the track, if available */ 48 + lastfmLink?: string 49 + /** The Tidal link for the track, if available */ 50 + tidalLink?: string 51 + /** The Apple Music link for the track, if available */ 52 + appleMusicLink?: string 53 + /** The Youtube link for the track, if available */ 54 + youtubeLink?: string 55 + /** The Deezer link for the track, if available */ 56 + deezerLink?: string 57 + /** The timestamp of the scrobble in milliseconds since epoch */ 58 + timestamp?: number 59 + [k: string]: unknown 60 + } 61 + 62 + export type OutputSchema = AppRockskyScrobbleDefs.ScrobbleViewBasic 63 + 64 + export interface HandlerInput { 65 + encoding: 'application/json' 66 + body: InputSchema 67 + } 68 + 69 + export interface HandlerSuccess { 70 + encoding: 'application/json' 71 + body: OutputSchema 72 + headers?: { [key: string]: string } 73 + } 74 + 75 + export interface HandlerError { 76 + status: number 77 + message?: string 78 + } 79 + 80 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 81 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 82 + auth: HA 83 + params: QueryParams 84 + input: HandlerInput 85 + req: express.Request 86 + res: express.Response 87 + resetRouteRateLimits: () => Promise<void> 88 + } 89 + export type Handler<HA extends HandlerAuth = never> = ( 90 + ctx: HandlerReqCtx<HA>, 91 + ) => Promise<HandlerOutput> | HandlerOutput
+93
apps/cli/src/lexicon/types/app/rocksky/scrobble/defs.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 ScrobbleViewBasic { 10 + /** The unique identifier of the scrobble. */ 11 + id?: string 12 + /** The handle of the user who created the scrobble. */ 13 + user?: string 14 + /** The display name of the user who created the scrobble. */ 15 + userDisplayName?: string 16 + /** The avatar URL of the user who created the scrobble. */ 17 + userAvatar?: string 18 + /** The title of the scrobble. */ 19 + title?: string 20 + /** The artist of the song. */ 21 + artist?: string 22 + /** The URI of the artist. */ 23 + artistUri?: string 24 + /** The album of the song. */ 25 + album?: string 26 + /** The URI of the album. */ 27 + albumUri?: string 28 + /** The album art URL of the song. */ 29 + cover?: string 30 + /** The timestamp when the scrobble was created. */ 31 + date?: string 32 + /** The URI of the scrobble. */ 33 + uri?: string 34 + /** The SHA256 hash of the scrobble data. */ 35 + sha256?: string 36 + liked?: boolean 37 + likesCount?: number 38 + [k: string]: unknown 39 + } 40 + 41 + export function isScrobbleViewBasic(v: unknown): v is ScrobbleViewBasic { 42 + return ( 43 + isObj(v) && 44 + hasProp(v, '$type') && 45 + v.$type === 'app.rocksky.scrobble.defs#scrobbleViewBasic' 46 + ) 47 + } 48 + 49 + export function validateScrobbleViewBasic(v: unknown): ValidationResult { 50 + return lexicons.validate('app.rocksky.scrobble.defs#scrobbleViewBasic', v) 51 + } 52 + 53 + export interface ScrobbleViewDetailed { 54 + /** The unique identifier of the scrobble. */ 55 + id?: string 56 + /** The handle of the user who created the scrobble. */ 57 + user?: string 58 + /** The title of the scrobble. */ 59 + title?: string 60 + /** The artist of the song. */ 61 + artist?: string 62 + /** The URI of the artist. */ 63 + artistUri?: string 64 + /** The album of the song. */ 65 + album?: string 66 + /** The URI of the album. */ 67 + albumUri?: string 68 + /** The album art URL of the song. */ 69 + cover?: string 70 + /** The timestamp when the scrobble was created. */ 71 + date?: string 72 + /** The URI of the scrobble. */ 73 + uri?: string 74 + /** The SHA256 hash of the scrobble data. */ 75 + sha256?: string 76 + /** The number of listeners */ 77 + listeners?: number 78 + /** The number of scrobbles for this song */ 79 + scrobbles?: number 80 + [k: string]: unknown 81 + } 82 + 83 + export function isScrobbleViewDetailed(v: unknown): v is ScrobbleViewDetailed { 84 + return ( 85 + isObj(v) && 86 + hasProp(v, '$type') && 87 + v.$type === 'app.rocksky.scrobble.defs#scrobbleViewDetailed' 88 + ) 89 + } 90 + 91 + export function validateScrobbleViewDetailed(v: unknown): ValidationResult { 92 + return lexicons.validate('app.rocksky.scrobble.defs#scrobbleViewDetailed', v) 93 + }
+43
apps/cli/src/lexicon/types/app/rocksky/scrobble/getScrobble.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 AppRockskyScrobbleDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The unique identifier of the scrobble */ 14 + uri: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type OutputSchema = AppRockskyScrobbleDefs.ScrobbleViewDetailed 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerSuccess { 22 + encoding: 'application/json' 23 + body: OutputSchema 24 + headers?: { [key: string]: string } 25 + } 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 33 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 34 + auth: HA 35 + params: QueryParams 36 + input: HandlerInput 37 + req: express.Request 38 + res: express.Response 39 + resetRouteRateLimits: () => Promise<void> 40 + } 41 + export type Handler<HA extends HandlerAuth = never> = ( 42 + ctx: HandlerReqCtx<HA>, 43 + ) => Promise<HandlerOutput> | HandlerOutput
+54
apps/cli/src/lexicon/types/app/rocksky/scrobble/getScrobbles.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 AppRockskyScrobbleDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The DID or handle of the actor */ 14 + did?: string 15 + /** If true, only return scrobbles from actors the viewer is following. */ 16 + following?: boolean 17 + /** The maximum number of scrobbles to return */ 18 + limit?: number 19 + /** The offset for pagination */ 20 + offset?: number 21 + } 22 + 23 + export type InputSchema = undefined 24 + 25 + export interface OutputSchema { 26 + scrobbles?: AppRockskyScrobbleDefs.ScrobbleViewBasic[] 27 + [k: string]: unknown 28 + } 29 + 30 + export type HandlerInput = undefined 31 + 32 + export interface HandlerSuccess { 33 + encoding: 'application/json' 34 + body: OutputSchema 35 + headers?: { [key: string]: string } 36 + } 37 + 38 + export interface HandlerError { 39 + status: number 40 + message?: string 41 + } 42 + 43 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 44 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 45 + auth: HA 46 + params: QueryParams 47 + input: HandlerInput 48 + req: express.Request 49 + res: express.Response 50 + resetRouteRateLimits: () => Promise<void> 51 + } 52 + export type Handler<HA extends HandlerAuth = never> = ( 53 + ctx: HandlerReqCtx<HA>, 54 + ) => Promise<HandlerOutput> | HandlerOutput
+30
apps/cli/src/lexicon/types/app/rocksky/shout.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 + import * as ComAtprotoRepoStrongRef from '../../com/atproto/repo/strongRef' 9 + 10 + export interface Record { 11 + /** The message of the shout. */ 12 + message: string 13 + /** The date when the shout was created. */ 14 + createdAt: string 15 + parent?: ComAtprotoRepoStrongRef.Main 16 + subject: ComAtprotoRepoStrongRef.Main 17 + [k: string]: unknown 18 + } 19 + 20 + export function isRecord(v: unknown): v is Record { 21 + return ( 22 + isObj(v) && 23 + hasProp(v, '$type') && 24 + (v.$type === 'app.rocksky.shout#main' || v.$type === 'app.rocksky.shout') 25 + ) 26 + } 27 + 28 + export function validateRecord(v: unknown): ValidationResult { 29 + return lexicons.validate('app.rocksky.shout#main', v) 30 + }
+49
apps/cli/src/lexicon/types/app/rocksky/shout/createShout.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 AppRockskyShoutDefs from './defs' 11 + 12 + export interface QueryParams {} 13 + 14 + export interface InputSchema { 15 + /** The content of the shout */ 16 + message?: string 17 + [k: string]: unknown 18 + } 19 + 20 + export type OutputSchema = AppRockskyShoutDefs.ShoutView 21 + 22 + export interface HandlerInput { 23 + encoding: 'application/json' 24 + body: InputSchema 25 + } 26 + 27 + export interface HandlerSuccess { 28 + encoding: 'application/json' 29 + body: OutputSchema 30 + headers?: { [key: string]: string } 31 + } 32 + 33 + export interface HandlerError { 34 + status: number 35 + message?: string 36 + } 37 + 38 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 39 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 40 + auth: HA 41 + params: QueryParams 42 + input: HandlerInput 43 + req: express.Request 44 + res: express.Response 45 + resetRouteRateLimits: () => Promise<void> 46 + } 47 + export type Handler<HA extends HandlerAuth = never> = ( 48 + ctx: HandlerReqCtx<HA>, 49 + ) => Promise<HandlerOutput> | HandlerOutput
+58
apps/cli/src/lexicon/types/app/rocksky/shout/defs.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 Author { 10 + /** The unique identifier of the author. */ 11 + id?: string 12 + /** The decentralized identifier (DID) of the author. */ 13 + did?: string 14 + /** The handle of the author. */ 15 + handle?: string 16 + /** The display name of the author. */ 17 + displayName?: string 18 + /** The URL of the author's avatar image. */ 19 + avatar?: string 20 + [k: string]: unknown 21 + } 22 + 23 + export function isAuthor(v: unknown): v is Author { 24 + return ( 25 + isObj(v) && 26 + hasProp(v, '$type') && 27 + v.$type === 'app.rocksky.shout.defs#author' 28 + ) 29 + } 30 + 31 + export function validateAuthor(v: unknown): ValidationResult { 32 + return lexicons.validate('app.rocksky.shout.defs#author', v) 33 + } 34 + 35 + export interface ShoutView { 36 + /** The unique identifier of the shout. */ 37 + id?: string 38 + /** The content of the shout. */ 39 + message?: string 40 + /** The ID of the parent shout if this is a reply, otherwise null. */ 41 + parent?: string 42 + /** The date and time when the shout was created. */ 43 + createdAt?: string 44 + author?: Author 45 + [k: string]: unknown 46 + } 47 + 48 + export function isShoutView(v: unknown): v is ShoutView { 49 + return ( 50 + isObj(v) && 51 + hasProp(v, '$type') && 52 + v.$type === 'app.rocksky.shout.defs#shoutView' 53 + ) 54 + } 55 + 56 + export function validateShoutView(v: unknown): ValidationResult { 57 + return lexicons.validate('app.rocksky.shout.defs#shoutView', v) 58 + }
+52
apps/cli/src/lexicon/types/app/rocksky/shout/getAlbumShouts.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 AppRockskyShoutDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The unique identifier of the album to retrieve shouts for */ 14 + uri: string 15 + /** The maximum number of shouts to return */ 16 + limit?: number 17 + /** The number of shouts to skip before starting to collect the result set */ 18 + offset?: number 19 + } 20 + 21 + export type InputSchema = undefined 22 + 23 + export interface OutputSchema { 24 + shouts?: AppRockskyShoutDefs.ShoutViewBasic[] 25 + [k: string]: unknown 26 + } 27 + 28 + export type HandlerInput = undefined 29 + 30 + export interface HandlerSuccess { 31 + encoding: 'application/json' 32 + body: OutputSchema 33 + headers?: { [key: string]: string } 34 + } 35 + 36 + export interface HandlerError { 37 + status: number 38 + message?: string 39 + } 40 + 41 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 42 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 43 + auth: HA 44 + params: QueryParams 45 + input: HandlerInput 46 + req: express.Request 47 + res: express.Response 48 + resetRouteRateLimits: () => Promise<void> 49 + } 50 + export type Handler<HA extends HandlerAuth = never> = ( 51 + ctx: HandlerReqCtx<HA>, 52 + ) => Promise<HandlerOutput> | HandlerOutput
+52
apps/cli/src/lexicon/types/app/rocksky/shout/getArtistShouts.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 AppRockskyShoutDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The URI of the artist to retrieve shouts for */ 14 + uri: string 15 + /** The maximum number of shouts to return */ 16 + limit?: number 17 + /** The number of shouts to skip before starting to collect the result set */ 18 + offset?: number 19 + } 20 + 21 + export type InputSchema = undefined 22 + 23 + export interface OutputSchema { 24 + shouts?: AppRockskyShoutDefs.ShoutViewBasic[] 25 + [k: string]: unknown 26 + } 27 + 28 + export type HandlerInput = undefined 29 + 30 + export interface HandlerSuccess { 31 + encoding: 'application/json' 32 + body: OutputSchema 33 + headers?: { [key: string]: string } 34 + } 35 + 36 + export interface HandlerError { 37 + status: number 38 + message?: string 39 + } 40 + 41 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 42 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 43 + auth: HA 44 + params: QueryParams 45 + input: HandlerInput 46 + req: express.Request 47 + res: express.Response 48 + resetRouteRateLimits: () => Promise<void> 49 + } 50 + export type Handler<HA extends HandlerAuth = never> = ( 51 + ctx: HandlerReqCtx<HA>, 52 + ) => Promise<HandlerOutput> | HandlerOutput
+52
apps/cli/src/lexicon/types/app/rocksky/shout/getProfileShouts.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 AppRockskyShoutDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The DID or handle of the actor */ 14 + did: string 15 + /** The offset for pagination */ 16 + offset?: number 17 + /** The maximum number of shouts to return */ 18 + limit?: number 19 + } 20 + 21 + export type InputSchema = undefined 22 + 23 + export interface OutputSchema { 24 + shouts?: AppRockskyShoutDefs.ShoutViewBasic[] 25 + [k: string]: unknown 26 + } 27 + 28 + export type HandlerInput = undefined 29 + 30 + export interface HandlerSuccess { 31 + encoding: 'application/json' 32 + body: OutputSchema 33 + headers?: { [key: string]: string } 34 + } 35 + 36 + export interface HandlerError { 37 + status: number 38 + message?: string 39 + } 40 + 41 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 42 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 43 + auth: HA 44 + params: QueryParams 45 + input: HandlerInput 46 + req: express.Request 47 + res: express.Response 48 + resetRouteRateLimits: () => Promise<void> 49 + } 50 + export type Handler<HA extends HandlerAuth = never> = ( 51 + ctx: HandlerReqCtx<HA>, 52 + ) => Promise<HandlerOutput> | HandlerOutput
+52
apps/cli/src/lexicon/types/app/rocksky/shout/getShoutReplies.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 AppRockskyShoutDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The URI of the shout to retrieve replies for */ 14 + uri: string 15 + /** The maximum number of shouts to return */ 16 + limit?: number 17 + /** The number of shouts to skip before starting to collect the result set */ 18 + offset?: number 19 + } 20 + 21 + export type InputSchema = undefined 22 + 23 + export interface OutputSchema { 24 + shouts?: AppRockskyShoutDefs.ShoutViewBasic[] 25 + [k: string]: unknown 26 + } 27 + 28 + export type HandlerInput = undefined 29 + 30 + export interface HandlerSuccess { 31 + encoding: 'application/json' 32 + body: OutputSchema 33 + headers?: { [key: string]: string } 34 + } 35 + 36 + export interface HandlerError { 37 + status: number 38 + message?: string 39 + } 40 + 41 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 42 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 43 + auth: HA 44 + params: QueryParams 45 + input: HandlerInput 46 + req: express.Request 47 + res: express.Response 48 + resetRouteRateLimits: () => Promise<void> 49 + } 50 + export type Handler<HA extends HandlerAuth = never> = ( 51 + ctx: HandlerReqCtx<HA>, 52 + ) => Promise<HandlerOutput> | HandlerOutput
+48
apps/cli/src/lexicon/types/app/rocksky/shout/getTrackShouts.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 AppRockskyShoutDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The URI of the track to retrieve shouts for */ 14 + uri: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + 19 + export interface OutputSchema { 20 + shouts?: AppRockskyShoutDefs.ShoutViewBasic[] 21 + [k: string]: unknown 22 + } 23 + 24 + export type HandlerInput = undefined 25 + 26 + export interface HandlerSuccess { 27 + encoding: 'application/json' 28 + body: OutputSchema 29 + headers?: { [key: string]: string } 30 + } 31 + 32 + export interface HandlerError { 33 + status: number 34 + message?: string 35 + } 36 + 37 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 38 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 39 + auth: HA 40 + params: QueryParams 41 + input: HandlerInput 42 + req: express.Request 43 + res: express.Response 44 + resetRouteRateLimits: () => Promise<void> 45 + } 46 + export type Handler<HA extends HandlerAuth = never> = ( 47 + ctx: HandlerReqCtx<HA>, 48 + ) => Promise<HandlerOutput> | HandlerOutput
+43
apps/cli/src/lexicon/types/app/rocksky/shout/removeShout.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 AppRockskyShoutDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The ID of the shout to be removed */ 14 + id: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type OutputSchema = AppRockskyShoutDefs.ShoutView 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerSuccess { 22 + encoding: 'application/json' 23 + body: OutputSchema 24 + headers?: { [key: string]: string } 25 + } 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 33 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 34 + auth: HA 35 + params: QueryParams 36 + input: HandlerInput 37 + req: express.Request 38 + res: express.Response 39 + resetRouteRateLimits: () => Promise<void> 40 + } 41 + export type Handler<HA extends HandlerAuth = never> = ( 42 + ctx: HandlerReqCtx<HA>, 43 + ) => Promise<HandlerOutput> | HandlerOutput
+51
apps/cli/src/lexicon/types/app/rocksky/shout/replyShout.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 AppRockskyShoutDefs from './defs' 11 + 12 + export interface QueryParams {} 13 + 14 + export interface InputSchema { 15 + /** The unique identifier of the shout to reply to */ 16 + shoutId: string 17 + /** The content of the reply */ 18 + message: string 19 + [k: string]: unknown 20 + } 21 + 22 + export type OutputSchema = AppRockskyShoutDefs.ShoutView 23 + 24 + export interface HandlerInput { 25 + encoding: 'application/json' 26 + body: InputSchema 27 + } 28 + 29 + export interface HandlerSuccess { 30 + encoding: 'application/json' 31 + body: OutputSchema 32 + headers?: { [key: string]: string } 33 + } 34 + 35 + export interface HandlerError { 36 + status: number 37 + message?: string 38 + } 39 + 40 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 41 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 42 + auth: HA 43 + params: QueryParams 44 + input: HandlerInput 45 + req: express.Request 46 + res: express.Response 47 + resetRouteRateLimits: () => Promise<void> 48 + } 49 + export type Handler<HA extends HandlerAuth = never> = ( 50 + ctx: HandlerReqCtx<HA>, 51 + ) => Promise<HandlerOutput> | HandlerOutput
+51
apps/cli/src/lexicon/types/app/rocksky/shout/reportShout.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 AppRockskyShoutDefs from './defs' 11 + 12 + export interface QueryParams {} 13 + 14 + export interface InputSchema { 15 + /** The unique identifier of the shout to report */ 16 + shoutId: string 17 + /** The reason for reporting the shout */ 18 + reason?: string 19 + [k: string]: unknown 20 + } 21 + 22 + export type OutputSchema = AppRockskyShoutDefs.ShoutView 23 + 24 + export interface HandlerInput { 25 + encoding: 'application/json' 26 + body: InputSchema 27 + } 28 + 29 + export interface HandlerSuccess { 30 + encoding: 'application/json' 31 + body: OutputSchema 32 + headers?: { [key: string]: string } 33 + } 34 + 35 + export interface HandlerError { 36 + status: number 37 + message?: string 38 + } 39 + 40 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 41 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 42 + auth: HA 43 + params: QueryParams 44 + input: HandlerInput 45 + req: express.Request 46 + res: express.Response 47 + resetRouteRateLimits: () => Promise<void> 48 + } 49 + export type Handler<HA extends HandlerAuth = never> = ( 50 + ctx: HandlerReqCtx<HA>, 51 + ) => Promise<HandlerOutput> | HandlerOutput
+74
apps/cli/src/lexicon/types/app/rocksky/song.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 + import * as AppRockskyArtistDefs from './artist/defs' 9 + 10 + export interface Record { 11 + /** The title of the song. */ 12 + title: string 13 + /** The artist of the song. */ 14 + artist: string 15 + /** The artists of the song with MusicBrainz IDs. */ 16 + artists?: AppRockskyArtistDefs.ArtistMbid[] 17 + /** The album artist of the song. */ 18 + albumArtist: string 19 + /** The album of the song. */ 20 + album: string 21 + /** The duration of the song in seconds. */ 22 + duration: number 23 + /** The track number of the song in the album. */ 24 + trackNumber?: number 25 + /** The disc number of the song in the album. */ 26 + discNumber?: number 27 + /** The release date of the song. */ 28 + releaseDate?: string 29 + /** The year the song was released. */ 30 + year?: number 31 + /** The genre of the song. */ 32 + genre?: string 33 + /** The tags of the song. */ 34 + tags?: string[] 35 + /** The composer of the song. */ 36 + composer?: string 37 + /** The lyrics of the song. */ 38 + lyrics?: string 39 + /** The copyright message of the song. */ 40 + copyrightMessage?: string 41 + /** Informations about the song */ 42 + wiki?: string 43 + /** The album art of the song. */ 44 + albumArt?: BlobRef 45 + /** The URL of the album art of the song. */ 46 + albumArtUrl?: string 47 + /** The YouTube link of the song. */ 48 + youtubeLink?: string 49 + /** The Spotify link of the song. */ 50 + spotifyLink?: string 51 + /** The Tidal link of the song. */ 52 + tidalLink?: string 53 + /** The Apple Music link of the song. */ 54 + appleMusicLink?: string 55 + /** The date when the song was created. */ 56 + createdAt: string 57 + /** The MusicBrainz ID of the song. */ 58 + mbid?: string 59 + /** The label of the song. */ 60 + label?: string 61 + [k: string]: unknown 62 + } 63 + 64 + export function isRecord(v: unknown): v is Record { 65 + return ( 66 + isObj(v) && 67 + hasProp(v, '$type') && 68 + (v.$type === 'app.rocksky.song#main' || v.$type === 'app.rocksky.song') 69 + ) 70 + } 71 + 72 + export function validateRecord(v: unknown): ValidationResult { 73 + return lexicons.validate('app.rocksky.song#main', v) 74 + }
+71
apps/cli/src/lexicon/types/app/rocksky/song/createSong.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 AppRockskySongDefs from './defs' 11 + 12 + export interface QueryParams {} 13 + 14 + export interface InputSchema { 15 + /** The title of the song */ 16 + title: string 17 + /** The artist of the song */ 18 + artist: string 19 + /** The album artist of the song, if different from the main artist */ 20 + albumArtist: string 21 + /** The album of the song, if applicable */ 22 + album: string 23 + /** The duration of the song in seconds */ 24 + duration?: number 25 + /** The MusicBrainz ID of the song, if available */ 26 + mbId?: string 27 + /** The URL of the album art for the song */ 28 + albumArt?: string 29 + /** The track number of the song in the album, if applicable */ 30 + trackNumber?: number 31 + /** The release date of the song, formatted as YYYY-MM-DD */ 32 + releaseDate?: string 33 + /** The year the song was released */ 34 + year?: number 35 + /** The disc number of the song in the album, if applicable */ 36 + discNumber?: number 37 + /** The lyrics of the song, if available */ 38 + lyrics?: string 39 + [k: string]: unknown 40 + } 41 + 42 + export type OutputSchema = AppRockskySongDefs.SongViewDetailed 43 + 44 + export interface HandlerInput { 45 + encoding: 'application/json' 46 + body: InputSchema 47 + } 48 + 49 + export interface HandlerSuccess { 50 + encoding: 'application/json' 51 + body: OutputSchema 52 + headers?: { [key: string]: string } 53 + } 54 + 55 + export interface HandlerError { 56 + status: number 57 + message?: string 58 + } 59 + 60 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 61 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 62 + auth: HA 63 + params: QueryParams 64 + input: HandlerInput 65 + req: express.Request 66 + res: express.Response 67 + resetRouteRateLimits: () => Promise<void> 68 + } 69 + export type Handler<HA extends HandlerAuth = never> = ( 70 + ctx: HandlerReqCtx<HA>, 71 + ) => Promise<HandlerOutput> | HandlerOutput
+103
apps/cli/src/lexicon/types/app/rocksky/song/defs.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 SongViewBasic { 10 + /** The unique identifier of the song. */ 11 + id?: string 12 + /** The title of the song. */ 13 + title?: string 14 + /** The artist of the song. */ 15 + artist?: string 16 + /** The artist of the album the song belongs to. */ 17 + albumArtist?: string 18 + /** The URL of the album art image. */ 19 + albumArt?: string 20 + /** The URI of the song. */ 21 + uri?: string 22 + /** The album of the song. */ 23 + album?: string 24 + /** The duration of the song in milliseconds. */ 25 + duration?: number 26 + /** The track number of the song in the album. */ 27 + trackNumber?: number 28 + /** The disc number of the song in the album. */ 29 + discNumber?: number 30 + /** The number of times the song has been played. */ 31 + playCount?: number 32 + /** The number of unique listeners who have played the song. */ 33 + uniqueListeners?: number 34 + /** The URI of the album the song belongs to. */ 35 + albumUri?: string 36 + /** The URI of the artist of the song. */ 37 + artistUri?: string 38 + /** The SHA256 hash of the song. */ 39 + sha256?: string 40 + /** The timestamp when the song was created. */ 41 + createdAt?: string 42 + [k: string]: unknown 43 + } 44 + 45 + export function isSongViewBasic(v: unknown): v is SongViewBasic { 46 + return ( 47 + isObj(v) && 48 + hasProp(v, '$type') && 49 + v.$type === 'app.rocksky.song.defs#songViewBasic' 50 + ) 51 + } 52 + 53 + export function validateSongViewBasic(v: unknown): ValidationResult { 54 + return lexicons.validate('app.rocksky.song.defs#songViewBasic', v) 55 + } 56 + 57 + export interface SongViewDetailed { 58 + /** The unique identifier of the song. */ 59 + id?: string 60 + /** The title of the song. */ 61 + title?: string 62 + /** The artist of the song. */ 63 + artist?: string 64 + /** The artist of the album the song belongs to. */ 65 + albumArtist?: string 66 + /** The URL of the album art image. */ 67 + albumArt?: string 68 + /** The URI of the song. */ 69 + uri?: string 70 + /** The album of the song. */ 71 + album?: string 72 + /** The duration of the song in milliseconds. */ 73 + duration?: number 74 + /** The track number of the song in the album. */ 75 + trackNumber?: number 76 + /** The disc number of the song in the album. */ 77 + discNumber?: number 78 + /** The number of times the song has been played. */ 79 + playCount?: number 80 + /** The number of unique listeners who have played the song. */ 81 + uniqueListeners?: number 82 + /** The URI of the album the song belongs to. */ 83 + albumUri?: string 84 + /** The URI of the artist of the song. */ 85 + artistUri?: string 86 + /** The SHA256 hash of the song. */ 87 + sha256?: string 88 + /** The timestamp when the song was created. */ 89 + createdAt?: string 90 + [k: string]: unknown 91 + } 92 + 93 + export function isSongViewDetailed(v: unknown): v is SongViewDetailed { 94 + return ( 95 + isObj(v) && 96 + hasProp(v, '$type') && 97 + v.$type === 'app.rocksky.song.defs#songViewDetailed' 98 + ) 99 + } 100 + 101 + export function validateSongViewDetailed(v: unknown): ValidationResult { 102 + return lexicons.validate('app.rocksky.song.defs#songViewDetailed', v) 103 + }
+43
apps/cli/src/lexicon/types/app/rocksky/song/getSong.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 AppRockskySongDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The unique identifier of the song to retrieve */ 14 + uri: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type OutputSchema = AppRockskySongDefs.SongViewDetailed 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerSuccess { 22 + encoding: 'application/json' 23 + body: OutputSchema 24 + headers?: { [key: string]: string } 25 + } 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 33 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 34 + auth: HA 35 + params: QueryParams 36 + input: HandlerInput 37 + req: express.Request 38 + res: express.Response 39 + resetRouteRateLimits: () => Promise<void> 40 + } 41 + export type Handler<HA extends HandlerAuth = never> = ( 42 + ctx: HandlerReqCtx<HA>, 43 + ) => Promise<HandlerOutput> | HandlerOutput
+50
apps/cli/src/lexicon/types/app/rocksky/song/getSongs.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 AppRockskySongDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The maximum number of songs to return */ 14 + limit?: number 15 + /** The offset for pagination */ 16 + offset?: number 17 + } 18 + 19 + export type InputSchema = undefined 20 + 21 + export interface OutputSchema { 22 + songs?: AppRockskySongDefs.SongViewBasic[] 23 + [k: string]: unknown 24 + } 25 + 26 + export type HandlerInput = undefined 27 + 28 + export interface HandlerSuccess { 29 + encoding: 'application/json' 30 + body: OutputSchema 31 + headers?: { [key: string]: string } 32 + } 33 + 34 + export interface HandlerError { 35 + status: number 36 + message?: string 37 + } 38 + 39 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 40 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 41 + auth: HA 42 + params: QueryParams 43 + input: HandlerInput 44 + req: express.Request 45 + res: express.Response 46 + resetRouteRateLimits: () => Promise<void> 47 + } 48 + export type Handler<HA extends HandlerAuth = never> = ( 49 + ctx: HandlerReqCtx<HA>, 50 + ) => Promise<HandlerOutput> | HandlerOutput
+35
apps/cli/src/lexicon/types/app/rocksky/spotify/defs.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 SpotifyTrackView { 10 + /** The unique identifier of the Spotify track. */ 11 + id?: string 12 + /** The name of the track. */ 13 + name?: string 14 + /** The name of the artist. */ 15 + artist?: string 16 + /** The name of the album. */ 17 + album?: string 18 + /** The duration of the track in milliseconds. */ 19 + duration?: number 20 + /** A URL to a preview of the track. */ 21 + previewUrl?: string 22 + [k: string]: unknown 23 + } 24 + 25 + export function isSpotifyTrackView(v: unknown): v is SpotifyTrackView { 26 + return ( 27 + isObj(v) && 28 + hasProp(v, '$type') && 29 + v.$type === 'app.rocksky.spotify.defs#spotifyTrackView' 30 + ) 31 + } 32 + 33 + export function validateSpotifyTrackView(v: unknown): ValidationResult { 34 + return lexicons.validate('app.rocksky.spotify.defs#spotifyTrackView', v) 35 + }
+43
apps/cli/src/lexicon/types/app/rocksky/spotify/getCurrentlyPlaying.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 '../player/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 + } 16 + 17 + export type InputSchema = undefined 18 + export type OutputSchema = AppRockskyPlayerDefs.CurrentlyPlayingViewDetailed 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerSuccess { 22 + encoding: 'application/json' 23 + body: OutputSchema 24 + headers?: { [key: string]: string } 25 + } 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 33 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 34 + auth: HA 35 + params: QueryParams 36 + input: HandlerInput 37 + req: express.Request 38 + res: express.Response 39 + resetRouteRateLimits: () => Promise<void> 40 + } 41 + export type Handler<HA extends HandlerAuth = never> = ( 42 + ctx: HandlerReqCtx<HA>, 43 + ) => Promise<HandlerOutput> | HandlerOutput
+32
apps/cli/src/lexicon/types/app/rocksky/spotify/next.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 + 13 + export type InputSchema = undefined 14 + export type HandlerInput = undefined 15 + 16 + export interface HandlerError { 17 + status: number 18 + message?: string 19 + } 20 + 21 + export type HandlerOutput = HandlerError | void 22 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 23 + auth: HA 24 + params: QueryParams 25 + input: HandlerInput 26 + req: express.Request 27 + res: express.Response 28 + resetRouteRateLimits: () => Promise<void> 29 + } 30 + export type Handler<HA extends HandlerAuth = never> = ( 31 + ctx: HandlerReqCtx<HA>, 32 + ) => Promise<HandlerOutput> | HandlerOutput
+32
apps/cli/src/lexicon/types/app/rocksky/spotify/pause.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 + 13 + export type InputSchema = undefined 14 + export type HandlerInput = undefined 15 + 16 + export interface HandlerError { 17 + status: number 18 + message?: string 19 + } 20 + 21 + export type HandlerOutput = HandlerError | void 22 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 23 + auth: HA 24 + params: QueryParams 25 + input: HandlerInput 26 + req: express.Request 27 + res: express.Response 28 + resetRouteRateLimits: () => Promise<void> 29 + } 30 + export type Handler<HA extends HandlerAuth = never> = ( 31 + ctx: HandlerReqCtx<HA>, 32 + ) => Promise<HandlerOutput> | HandlerOutput
+32
apps/cli/src/lexicon/types/app/rocksky/spotify/play.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 + 13 + export type InputSchema = undefined 14 + export type HandlerInput = undefined 15 + 16 + export interface HandlerError { 17 + status: number 18 + message?: string 19 + } 20 + 21 + export type HandlerOutput = HandlerError | void 22 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 23 + auth: HA 24 + params: QueryParams 25 + input: HandlerInput 26 + req: express.Request 27 + res: express.Response 28 + resetRouteRateLimits: () => Promise<void> 29 + } 30 + export type Handler<HA extends HandlerAuth = never> = ( 31 + ctx: HandlerReqCtx<HA>, 32 + ) => Promise<HandlerOutput> | HandlerOutput
+32
apps/cli/src/lexicon/types/app/rocksky/spotify/previous.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 + 13 + export type InputSchema = undefined 14 + export type HandlerInput = undefined 15 + 16 + export interface HandlerError { 17 + status: number 18 + message?: string 19 + } 20 + 21 + export type HandlerOutput = HandlerError | void 22 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 23 + auth: HA 24 + params: QueryParams 25 + input: HandlerInput 26 + req: express.Request 27 + res: express.Response 28 + resetRouteRateLimits: () => Promise<void> 29 + } 30 + export type Handler<HA extends HandlerAuth = never> = ( 31 + ctx: HandlerReqCtx<HA>, 32 + ) => Promise<HandlerOutput> | HandlerOutput
+35
apps/cli/src/lexicon/types/app/rocksky/spotify/seek.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 position in seconds to seek to */ 13 + position: number 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
+33
apps/cli/src/lexicon/types/app/rocksky/stats/defs.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 StatsView { 10 + /** The total number of scrobbles. */ 11 + scrobbles?: number 12 + /** The total number of unique artists scrobbled. */ 13 + artists?: number 14 + /** The total number of tracks marked as loved. */ 15 + lovedTracks?: number 16 + /** The total number of unique albums scrobbled. */ 17 + albums?: number 18 + /** The total number of unique tracks scrobbled. */ 19 + tracks?: number 20 + [k: string]: unknown 21 + } 22 + 23 + export function isStatsView(v: unknown): v is StatsView { 24 + return ( 25 + isObj(v) && 26 + hasProp(v, '$type') && 27 + v.$type === 'app.rocksky.stats.defs#statsView' 28 + ) 29 + } 30 + 31 + export function validateStatsView(v: unknown): ValidationResult { 32 + return lexicons.validate('app.rocksky.stats.defs#statsView', v) 33 + }
+43
apps/cli/src/lexicon/types/app/rocksky/stats/getStats.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 AppRockskyStatsDefs from './defs' 11 + 12 + export interface QueryParams { 13 + /** The DID or handle of the user to get stats for. */ 14 + did: string 15 + } 16 + 17 + export type InputSchema = undefined 18 + export type OutputSchema = AppRockskyStatsDefs.StatsView 19 + export type HandlerInput = undefined 20 + 21 + export interface HandlerSuccess { 22 + encoding: 'application/json' 23 + body: OutputSchema 24 + headers?: { [key: string]: string } 25 + } 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 33 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 34 + auth: HA 35 + params: QueryParams 36 + input: HandlerInput 37 + req: express.Request 38 + res: express.Response 39 + resetRouteRateLimits: () => Promise<void> 40 + } 41 + export type Handler<HA extends HandlerAuth = never> = ( 42 + ctx: HandlerReqCtx<HA>, 43 + ) => Promise<HandlerOutput> | HandlerOutput
+26
apps/cli/src/lexicon/types/com/atproto/repo/strongRef.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 Main { 10 + uri: string 11 + cid: string 12 + [k: string]: unknown 13 + } 14 + 15 + export function isMain(v: unknown): v is Main { 16 + return ( 17 + isObj(v) && 18 + hasProp(v, '$type') && 19 + (v.$type === 'com.atproto.repo.strongRef#main' || 20 + v.$type === 'com.atproto.repo.strongRef') 21 + ) 22 + } 23 + 24 + export function validateMain(v: unknown): ValidationResult { 25 + return lexicons.validate('com.atproto.repo.strongRef#main', v) 26 + }
+13
apps/cli/src/lexicon/util.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + export function isObj(v: unknown): v is Record<string, unknown> { 5 + return typeof v === 'object' && v !== null 6 + } 7 + 8 + export function hasProp<K extends PropertyKey>( 9 + data: object, 10 + prop: K, 11 + ): data is Record<K, unknown> { 12 + return prop in data 13 + }
+25
apps/cli/src/schema/album-tracks.ts
··· 1 + import { type InferInsertModel, type InferSelectModel, sql } from "drizzle-orm"; 2 + import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; 3 + import albums from "./albums"; 4 + import tracks from "./tracks"; 5 + 6 + const albumTracks = sqliteTable("album_tracks", { 7 + id: text("id").primaryKey().notNull(), 8 + albumId: text("album_id") 9 + .notNull() 10 + .references(() => albums.id), 11 + trackId: text("track_id") 12 + .notNull() 13 + .references(() => tracks.id), 14 + createdAt: integer("created_at") 15 + .notNull() 16 + .default(sql`CURRENT_TIMESTAMP`), 17 + updatedAt: integer("updated_at") 18 + .notNull() 19 + .default(sql`CURRENT_TIMESTAMP`), 20 + }); 21 + 22 + export type SelectAlbumTrack = InferSelectModel<typeof albumTracks>; 23 + export type InsertAlbumTrack = InferInsertModel<typeof albumTracks>; 24 + 25 + export default albumTracks;
+29
apps/cli/src/schema/albums.ts
··· 1 + import { type InferInsertModel, type InferSelectModel, sql } from "drizzle-orm"; 2 + import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; 3 + 4 + const albums = sqliteTable("albums", { 5 + id: text("id").primaryKey().notNull(), 6 + title: text("title").notNull(), 7 + artist: text("artist").notNull(), 8 + releaseDate: text("release_date"), 9 + year: integer("year"), 10 + albumArt: text("album_art"), 11 + uri: text("uri").unique(), 12 + artistUri: text("artist_uri"), 13 + appleMusicLink: text("apple_music_link").unique(), 14 + spotifyLink: text("spotify_link").unique(), 15 + tidalLink: text("tidal_link").unique(), 16 + youtubeLink: text("youtube_link").unique(), 17 + sha256: text("sha256").unique().notNull(), 18 + createdAt: integer("created_at", { mode: "timestamp" }) 19 + .notNull() 20 + .default(sql`CURRENT_TIMESTAMP`), 21 + updatedAt: integer("updated_at", { mode: "timestamp" }) 22 + .notNull() 23 + .default(sql`CURRENT_TIMESTAMP`), 24 + }); 25 + 26 + export type SelectAlbum = InferSelectModel<typeof albums>; 27 + export type InsertAlbum = InferInsertModel<typeof albums>; 28 + 29 + export default albums;
+25
apps/cli/src/schema/artist-albums.ts
··· 1 + import { type InferInsertModel, type InferSelectModel, sql } from "drizzle-orm"; 2 + import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; 3 + import albums from "./albums"; 4 + import artists from "./artists"; 5 + 6 + const artistAlbums = sqliteTable("artist_albums", { 7 + id: text("id").primaryKey().notNull(), 8 + artistId: text("artist_id") 9 + .notNull() 10 + .references(() => artists.id), 11 + albumId: text("album_id") 12 + .notNull() 13 + .references(() => albums.id), 14 + createdAt: integer("created_at") 15 + .notNull() 16 + .default(sql`CURRENT_TIMESTAMP`), 17 + updatedAt: integer("updated_at") 18 + .notNull() 19 + .default(sql`CURRENT_TIMESTAMP`), 20 + }); 21 + 22 + export type SelectArtistAlbum = InferSelectModel<typeof artistAlbums>; 23 + export type InsertArtistAlbum = InferInsertModel<typeof artistAlbums>; 24 + 25 + export default artistAlbums;
+25
apps/cli/src/schema/artist-tracks.ts
··· 1 + import { type InferInsertModel, type InferSelectModel, sql } from "drizzle-orm"; 2 + import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; 3 + import artists from "./artists"; 4 + import tracks from "./tracks"; 5 + 6 + const artistTracks = sqliteTable("artist_tracks", { 7 + id: text("id").primaryKey().notNull(), 8 + artistId: text("artist_id") 9 + .notNull() 10 + .references(() => artists.id), 11 + trackId: text("track_id") 12 + .notNull() 13 + .references(() => tracks.id), 14 + createdAt: integer("created_at", { mode: "timestamp" }) 15 + .notNull() 16 + .default(sql`CURRENT_TIMESTAMP`), 17 + updatedAt: integer("updated_at", { mode: "timestamp" }) 18 + .notNull() 19 + .default(sql`CURRENT_TIMESTAMP`), 20 + }); 21 + 22 + export type SelectArtistTrack = InferSelectModel<typeof artistTracks>; 23 + export type InsertArtistTrack = InferInsertModel<typeof artistTracks>; 24 + 25 + export default artistTracks;
+30
apps/cli/src/schema/artists.ts
··· 1 + import { type InferInsertModel, type InferSelectModel, sql } from "drizzle-orm"; 2 + import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; 3 + 4 + const artists = sqliteTable("artists", { 5 + id: text("id").primaryKey().notNull(), 6 + name: text("name").notNull(), 7 + biography: text("biography"), 8 + born: integer("born", { mode: "timestamp" }), 9 + bornIn: text("born_in"), 10 + died: integer("died", { mode: "timestamp" }), 11 + picture: text("picture"), 12 + sha256: text("sha256").unique().notNull(), 13 + uri: text("uri").unique(), 14 + appleMusicLink: text("apple_music_link"), 15 + spotifyLink: text("spotify_link"), 16 + tidalLink: text("tidal_link"), 17 + youtubeLink: text("youtube_link"), 18 + genres: text("genres"), 19 + createdAt: integer("created_at", { mode: "timestamp" }) 20 + .notNull() 21 + .default(sql`CURRENT_TIMESTAMP`), 22 + updatedAt: integer("updated_at", { mode: "timestamp" }) 23 + .notNull() 24 + .default(sql`CURRENT_TIMESTAMP`), 25 + }); 26 + 27 + export type SelectArtist = InferSelectModel<typeof artists>; 28 + export type InsertArtist = InferInsertModel<typeof artists>; 29 + 30 + export default artists;
+13
apps/cli/src/schema/index.ts
··· 1 + import albumTracks from "./album-tracks"; 2 + import albums from "./albums"; 3 + import artists from "./artists"; 4 + import tracks from "./tracks"; 5 + import users from "./users"; 6 + 7 + export default { 8 + users, 9 + tracks, 10 + artists, 11 + albums, 12 + albumTracks, 13 + };
+23
apps/cli/src/schema/loved-tracks.ts
··· 1 + import { type InferInsertModel, type InferSelectModel, sql } from "drizzle-orm"; 2 + import { sqliteTable, integer, text } from "drizzle-orm/sqlite-core"; 3 + import tracks from "./tracks"; 4 + import users from "./users"; 5 + 6 + const lovedTracks = sqliteTable("loved_tracks", { 7 + id: text("id").primaryKey().notNull(), 8 + userId: text("user_id") 9 + .notNull() 10 + .references(() => users.id), 11 + trackId: text("track_id") 12 + .notNull() 13 + .references(() => tracks.id), 14 + uri: text("uri").unique(), 15 + createdAt: integer("created_at") 16 + .notNull() 17 + .default(sql`CURRENT_TIMESTAMP`), 18 + }); 19 + 20 + export type SelectLovedTrack = InferSelectModel<typeof lovedTracks>; 21 + export type InsertLovedTrack = InferInsertModel<typeof lovedTracks>; 22 + 23 + export default lovedTracks;
+39
apps/cli/src/schema/tracks.ts
··· 1 + import { type InferInsertModel, type InferSelectModel, sql } from "drizzle-orm"; 2 + import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; 3 + 4 + const tracks = sqliteTable("tracks", { 5 + id: text("id").primaryKey().notNull(), 6 + title: text("title").notNull(), 7 + artist: text("artist").notNull(), 8 + albumArtist: text("album_artist").notNull(), 9 + albumArt: text("album_art"), 10 + album: text("album").notNull(), 11 + trackNumber: integer("track_number"), 12 + duration: integer("duration").notNull(), 13 + mbId: text("mb_id").unique(), 14 + youtubeLink: text("youtube_link").unique(), 15 + spotifyLink: text("spotify_link").unique(), 16 + appleMusicLink: text("apple_music_link").unique(), 17 + tidalLink: text("tidal_link").unique(), 18 + sha256: text("sha256").unique().notNull(), 19 + discNumber: integer("disc_number"), 20 + lyrics: text("lyrics"), 21 + composer: text("composer"), 22 + genre: text("genre"), 23 + label: text("label"), 24 + copyrightMessage: text("copyright_message"), 25 + uri: text("uri").unique(), 26 + albumUri: text("album_uri"), 27 + artistUri: text("artist_uri"), 28 + createdAt: integer("created_at", { mode: "timestamp" }) 29 + .notNull() 30 + .default(sql`CURRENT_TIMESTAMP`), 31 + updatedAt: integer("updated_at", { mode: "timestamp" }) 32 + .notNull() 33 + .default(sql`CURRENT_TIMESTAMP`), 34 + }); 35 + 36 + export type SelectTrack = InferSelectModel<typeof tracks>; 37 + export type InsertTrack = InferInsertModel<typeof tracks>; 38 + 39 + export default tracks;
+27
apps/cli/src/schema/user-albums.ts
··· 1 + import { type InferInsertModel, type InferSelectModel, sql } from "drizzle-orm"; 2 + import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; 3 + import albums from "./albums"; 4 + import users from "./users"; 5 + 6 + const userAlbums = sqliteTable("user_albums", { 7 + id: text("id").primaryKey().notNull(), 8 + userId: text("user_id") 9 + .notNull() 10 + .references(() => users.id), 11 + albumId: text("album_id") 12 + .notNull() 13 + .references(() => albums.id), 14 + createdAt: integer("created_at", { mode: "timestamp" }) 15 + .notNull() 16 + .default(sql`CURRENT_TIMESTAMP`), 17 + updatedAt: integer("updated_at", { mode: "timestamp" }) 18 + .notNull() 19 + .default(sql`CURRENT_TIMESTAMP`), 20 + scrobbles: integer("scrobbles"), 21 + uri: text("uri").unique().notNull(), 22 + }); 23 + 24 + export type SelectUserAlbum = InferSelectModel<typeof userAlbums>; 25 + export type InsertUserAlbum = InferInsertModel<typeof userAlbums>; 26 + 27 + export default userAlbums;
+27
apps/cli/src/schema/user-artists.ts
··· 1 + import { type InferInsertModel, type InferSelectModel, sql } from "drizzle-orm"; 2 + import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; 3 + import artists from "./artists"; 4 + import users from "./users"; 5 + 6 + const userArtists = sqliteTable("user_albums", { 7 + id: text("id").primaryKey().notNull(), 8 + userId: text("user_id") 9 + .notNull() 10 + .references(() => users.id), 11 + albumId: text("artist_id") 12 + .notNull() 13 + .references(() => artists.id), 14 + createdAt: integer("created_at", { mode: "timestamp" }) 15 + .notNull() 16 + .default(sql`CURRENT_TIMESTAMP`), 17 + updatedAt: integer("updated_at", { mode: "timestamp" }) 18 + .notNull() 19 + .default(sql`CURRENT_TIMESTAMP`), 20 + scrobbles: integer("scrobbles"), 21 + uri: text("uri").unique().notNull(), 22 + }); 23 + 24 + export type SelectUserArtist = InferSelectModel<typeof userArtists>; 25 + export type InsertUserArtist = InferInsertModel<typeof userArtists>; 26 + 27 + export default userArtists;
+27
apps/cli/src/schema/user-tracks.ts
··· 1 + import { type InferInsertModel, type InferSelectModel, sql } from "drizzle-orm"; 2 + import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; 3 + import tracks from "./tracks"; 4 + import users from "./users"; 5 + 6 + const userTracks = sqliteTable("user_tracks", { 7 + id: text("id").primaryKey().notNull(), 8 + userId: text("user_id") 9 + .notNull() 10 + .references(() => users.id), 11 + albumId: text("track_id") 12 + .notNull() 13 + .references(() => tracks.id), 14 + createdAt: integer("created_at", { mode: "timestamp" }) 15 + .notNull() 16 + .default(sql`CURRENT_TIMESTAMP`), 17 + updatedAt: integer("updated_at", { mode: "timestamp" }) 18 + .notNull() 19 + .default(sql`CURRENT_TIMESTAMP`), 20 + scrobbles: integer("scrobbles"), 21 + uri: text("uri").unique().notNull(), 22 + }); 23 + 24 + export type SelectUser = InferSelectModel<typeof userTracks>; 25 + export type InsertUserTrack = InferInsertModel<typeof userTracks>; 26 + 27 + export default userTracks;
+21
apps/cli/src/schema/users.ts
··· 1 + import { type InferSelectModel, sql } from "drizzle-orm"; 2 + import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; 3 + 4 + const users = sqliteTable("users", { 5 + id: text("id").primaryKey().notNull(), 6 + did: text("did").unique().notNull(), 7 + displayName: text("display_name"), 8 + handle: text("handle").unique().notNull(), 9 + avatar: text("avatar").notNull(), 10 + createdAt: integer("created_at", { mode: "timestamp" }) 11 + .notNull() 12 + .default(sql`CURRENT_TIMESTAMP`), 13 + updatedAt: integer("updated_at", { mode: "timestamp" }) 14 + .notNull() 15 + .default(sql`CURRENT_TIMESTAMP`), 16 + }); 17 + 18 + export type SelectUser = InferSelectModel<typeof users>; 19 + export type InsertUser = InferSelectModel<typeof users>; 20 + 21 + export default users;
apps/cli/src/sync.ts

This is a binary file and will not be displayed.

+63 -3
bun.lock
··· 107 107 "rocksky": "./dist/index.js", 108 108 }, 109 109 "dependencies": { 110 + "@atcute/jetstream": "^1.1.2", 111 + "@atproto/api": "^0.13.31", 112 + "@atproto/common": "^0.4.6", 113 + "@atproto/identity": "^0.4.5", 114 + "@atproto/jwk-jose": "0.1.5", 115 + "@atproto/lex-cli": "^0.5.6", 116 + "@atproto/lexicon": "^0.4.5", 117 + "@atproto/sync": "^0.1.11", 118 + "@atproto/syntax": "^0.3.1", 110 119 "@modelcontextprotocol/sdk": "^1.10.2", 120 + "@paralleldrive/cuid2": "^3.0.6", 121 + "@types/better-sqlite3": "^7.6.13", 111 122 "axios": "^1.8.4", 123 + "better-sqlite3": "^12.4.1", 112 124 "chalk": "^5.4.1", 113 125 "commander": "^13.1.0", 114 126 "cors": "^2.8.5", 115 127 "dayjs": "^1.11.13", 128 + "drizzle-kit": "^0.31.1", 129 + "drizzle-orm": "^0.45.1", 130 + "effect": "^3.19.14", 131 + "env-paths": "^3.0.0", 116 132 "express": "^5.1.0", 117 133 "md5": "^2.3.0", 118 134 "open": "^10.1.0", ··· 342 358 343 359 "@asteasolutions/zod-to-openapi": ["@asteasolutions/zod-to-openapi@7.3.4", "", { "dependencies": { "openapi3-ts": "^4.1.2" }, "peerDependencies": { "zod": "^3.20.2" } }, "sha512-/2rThQ5zPi9OzVwes6U7lK1+Yvug0iXu25olp7S0XsYmOqnyMfxH7gdSQjn/+DSOHRg7wnotwGJSyL+fBKdnEA=="], 344 360 361 + "@atcute/jetstream": ["@atcute/jetstream@1.1.2", "", { "dependencies": { "@atcute/lexicons": "^1.2.2", "@badrap/valita": "^0.4.6", "@mary-ext/event-iterator": "^1.0.0", "@mary-ext/simple-event-emitter": "^1.0.0", "partysocket": "^1.1.5", "type-fest": "^4.41.0", "yocto-queue": "^1.2.1" } }, "sha512-u6p/h2xppp7LE6W/9xErAJ6frfN60s8adZuCKtfAaaBBiiYbb1CfpzN8Uc+2qtJZNorqGvuuDb5572Jmh7yHBQ=="], 362 + 363 + "@atcute/lexicons": ["@atcute/lexicons@1.2.6", "", { "dependencies": { "@atcute/uint8array": "^1.0.6", "@atcute/util-text": "^0.0.1", "@standard-schema/spec": "^1.1.0", "esm-env": "^1.2.2" } }, "sha512-s76UQd8D+XmHIzrjD9CJ9SOOeeLPHc+sMmcj7UFakAW/dDFXc579fcRdRfuUKvXBL5v1Gs2VgDdlh/IvvQZAwA=="], 364 + 365 + "@atcute/uint8array": ["@atcute/uint8array@1.0.6", "", {}, "sha512-ucfRBQc7BFT8n9eCyGOzDHEMKF/nZwhS2pPao4Xtab1ML3HdFYcX2DM1tadCzas85QTGxHe5urnUAAcNKGRi9A=="], 366 + 367 + "@atcute/util-text": ["@atcute/util-text@0.0.1", "", { "dependencies": { "unicode-segmenter": "^0.14.4" } }, "sha512-t1KZqvn0AYy+h2KcJyHnKF9aEqfRfMUmyY8j1ELtAEIgqN9CxINAjxnoRCJIFUlvWzb+oY3uElQL/Vyk3yss0g=="], 368 + 345 369 "@atproto-labs/did-resolver": ["@atproto-labs/did-resolver@0.1.11", "", { "dependencies": { "@atproto-labs/fetch": "0.2.2", "@atproto-labs/pipe": "0.1.0", "@atproto-labs/simple-store": "0.1.2", "@atproto-labs/simple-store-memory": "0.1.2", "@atproto/did": "0.1.5", "zod": "^3.23.8" } }, "sha512-qXNzIX2GPQnxT1gl35nv/8ErDdc4Fj/+RlJE7oyE7JGkFAPUyuY03TvKJ79SmWFsWE8wyTXEpLuphr9Da1Vhkw=="], 346 370 347 371 "@atproto-labs/fetch": ["@atproto-labs/fetch@0.2.2", "", { "dependencies": { "@atproto-labs/pipe": "0.1.0" } }, "sha512-QyafkedbFeVaN20DYUpnY2hcArYxjdThPXbYMqOSoZhcvkrUqaw4xDND4wZB5TBD9cq2yqe9V6mcw9P4XQKQuQ=="], ··· 456 480 457 481 "@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], 458 482 483 + "@badrap/valita": ["@badrap/valita@0.4.6", "", {}, "sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg=="], 484 + 459 485 "@biomejs/biome": ["@biomejs/biome@2.2.5", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.2.5", "@biomejs/cli-darwin-x64": "2.2.5", "@biomejs/cli-linux-arm64": "2.2.5", "@biomejs/cli-linux-arm64-musl": "2.2.5", "@biomejs/cli-linux-x64": "2.2.5", "@biomejs/cli-linux-x64-musl": "2.2.5", "@biomejs/cli-win32-arm64": "2.2.5", "@biomejs/cli-win32-x64": "2.2.5" }, "bin": { "biome": "bin/biome" } }, "sha512-zcIi+163Rc3HtyHbEO7CjeHq8DjQRs40HsGbW6vx2WI0tg8mYQOPouhvHSyEnCBAorfYNnKdR64/IxO7xQ5faw=="], 460 486 461 487 "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.2.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-MYT+nZ38wEIWVcL5xLyOhYQQ7nlWD0b/4mgATW2c8dvq7R4OQjt/XGXFkXrmtWmQofaIM14L7V8qIz/M+bx5QQ=="], ··· 726 752 727 753 "@mapbox/whoots-js": ["@mapbox/whoots-js@3.1.0", "", {}, "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q=="], 728 754 755 + "@mary-ext/event-iterator": ["@mary-ext/event-iterator@1.0.0", "", { "dependencies": { "yocto-queue": "^1.2.1" } }, "sha512-l6gCPsWJ8aRCe/s7/oCmero70kDHgIK5m4uJvYgwEYTqVxoBOIXbKr5tnkLqUHEg6mNduB4IWvms3h70Hp9ADQ=="], 756 + 757 + "@mary-ext/simple-event-emitter": ["@mary-ext/simple-event-emitter@1.0.0", "", {}, "sha512-meA/zJZKIN1RVBNEYIbjufkUrW7/tRjHH60FjolpG1ixJKo76TB208qefQLNdOVDA7uIG0CGEDuhmMirtHKLAg=="], 758 + 729 759 "@math.gl/web-mercator": ["@math.gl/web-mercator@3.6.3", "", { "dependencies": { "@babel/runtime": "^7.12.0", "gl-matrix": "^3.4.0" } }, "sha512-UVrkSOs02YLehKaehrxhAejYMurehIHPfFQvPFZmdJHglHOU4V2cCUApTVEwOksvCp161ypEqVp+9H6mGhTTcw=="], 730 760 731 761 "@mdx-js/react": ["@mdx-js/react@3.1.1", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw=="], ··· 734 764 735 765 "@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], 736 766 737 - "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], 767 + "@noble/hashes": ["@noble/hashes@2.0.1", "", {}, "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw=="], 738 768 739 769 "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], 740 770 ··· 896 926 897 927 "@opentelemetry/sql-common": ["@opentelemetry/sql-common@0.41.2", "", { "dependencies": { "@opentelemetry/core": "^2.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0" } }, "sha512-4mhWm3Z8z+i508zQJ7r6Xi7y4mmoJpdvH0fZPFRkWrdp5fq7hhZ2HhYokEOLkfqSMgPR4Z9EyB3DBkbKGOqZiQ=="], 898 928 929 + "@paralleldrive/cuid2": ["@paralleldrive/cuid2@3.0.6", "", { "dependencies": { "@noble/hashes": "^2.0.1", "bignumber.js": "^9.3.1", "error-causes": "^3.0.2" }, "bin": { "cuid2": "bin/cuid2.js" } }, "sha512-ujtxTTvr4fwPrzuQT7o6VLKs5BzdWetR9+/zRQ0SyK9hVIwZQllEccxgcHYXN6I3Z429y1yg3F6+uiVxMDPrLQ=="], 930 + 899 931 "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], 900 932 901 933 "@pkl-community/pkl": ["@pkl-community/pkl@0.28.2", "", { "optionalDependencies": { "@pkl-community/pkl-darwin-arm64": "0.28.2", "@pkl-community/pkl-darwin-x64": "0.28.2", "@pkl-community/pkl-linux-arm64": "0.28.2", "@pkl-community/pkl-linux-x64": "0.28.2" }, "bin": { "pkl": "lib/main.js" } }, "sha512-seSZrwGvDEd1BeT9+dRRnqvyNit8vpFL2I+YBEJ+t3pBYpnpHaVHwQNPlMLvDQ0KZUCQkiWGZnbCMF9WtaxHNA=="], ··· 1245 1277 "@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], 1246 1278 1247 1279 "@types/babel__traverse": ["@types/babel__traverse@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="], 1280 + 1281 + "@types/better-sqlite3": ["@types/better-sqlite3@7.6.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA=="], 1248 1282 1249 1283 "@types/body-parser": ["@types/body-parser@1.19.6", "", { "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g=="], 1250 1284 ··· 1742 1776 1743 1777 "enhanced-resolve": ["enhanced-resolve@5.18.3", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww=="], 1744 1778 1779 + "env-paths": ["env-paths@3.0.0", "", {}, "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A=="], 1780 + 1745 1781 "envalid": ["envalid@8.1.0", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-OT6+qVhKVyCidaGoXflb2iK1tC8pd0OV2Q+v9n33wNhUJ+lus+rJobUj4vJaQBPxPZ0vYrPGuxdrenyCAIJcow=="], 1782 + 1783 + "error-causes": ["error-causes@3.0.2", "", {}, "sha512-i0B8zq1dHL6mM85FGoxaJnVtx6LD5nL2v0hlpGdntg5FOSyzQ46c9lmz5qx0xRS2+PWHGOHcYxGIBC5Le2dRMw=="], 1746 1784 1747 1785 "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], 1748 1786 ··· 1779 1817 "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="], 1780 1818 1781 1819 "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], 1820 + 1821 + "esm-env": ["esm-env@1.2.2", "", {}, "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA=="], 1782 1822 1783 1823 "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], 1784 1824 ··· 1796 1836 1797 1837 "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], 1798 1838 1839 + "event-target-polyfill": ["event-target-polyfill@0.0.4", "", {}, "sha512-Gs6RLjzlLRdT8X9ZipJdIZI/Y6/HhRLyq9RdDlCsnpxr/+Nn6bU2EFGuC94GjxqhM+Nmij2Vcq98yoHrU8uNFQ=="], 1840 + 1799 1841 "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], 1800 1842 1801 1843 "eventemitter3": ["eventemitter3@4.0.7", "", {}, "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="], ··· 2314 2356 2315 2357 "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], 2316 2358 2359 + "partysocket": ["partysocket@1.1.10", "", { "dependencies": { "event-target-polyfill": "^0.0.4" } }, "sha512-ACfn0P6lQuj8/AqB4L5ZDFcIEbpnIteNNObrlxqV1Ge80GTGhjuJ2sNKwNQlFzhGi4kI7fP/C1Eqh8TR78HjDQ=="], 2360 + 2317 2361 "path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="], 2318 2362 2319 2363 "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], ··· 2768 2812 2769 2813 "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], 2770 2814 2771 - "type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="], 2815 + "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], 2772 2816 2773 2817 "type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="], 2774 2818 ··· 2789 2833 "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], 2790 2834 2791 2835 "unenv": ["unenv@2.0.0-rc.14", "", { "dependencies": { "defu": "^6.1.4", "exsolve": "^1.0.1", "ohash": "^2.0.10", "pathe": "^2.0.3", "ufo": "^1.5.4" } }, "sha512-od496pShMen7nOy5VmVJCnq8rptd45vh6Nx/r2iPbrba6pa6p+tS2ywuIHRZ/OBvSbQZB0kWvpO9XBNVFXHD3Q=="], 2836 + 2837 + "unicode-segmenter": ["unicode-segmenter@0.14.5", "", {}, "sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g=="], 2792 2838 2793 2839 "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], 2794 2840 ··· 2884 2930 2885 2931 "yesno": ["yesno@0.4.0", "", {}, "sha512-tdBxmHvbXPBKYIg81bMCB7bVeDmHkRzk5rVJyYYXurwKkHq/MCd8rz4HSJUP7hW0H2NlXiq8IFiWvYKEHhlotA=="], 2886 2932 2887 - "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], 2933 + "yocto-queue": ["yocto-queue@1.2.2", "", {}, "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ=="], 2888 2934 2889 2935 "youch": ["youch@3.2.3", "", { "dependencies": { "cookie": "^0.5.0", "mustache": "^4.2.0", "stacktracey": "^2.1.8" } }, "sha512-ZBcWz/uzZaQVdCvfV4uk616Bbpf2ee+F/AvuKDR5EwX/Y4v06xWdtMluqTD7+KlZdM93lLm9gMZYo0sKBS0pgw=="], 2890 2936 ··· 2896 2942 2897 2943 "zx": ["zx@8.8.4", "", { "bin": { "zx": "build/cli.js" } }, "sha512-44GcD+ZlM/v1OQtbwnSxLPcoE1ZEUICmR+RSbJZLAqfIixNLuMjLyh0DcS75OyfJ/sWYAwCWDmDvJ4hdnANAPQ=="], 2898 2944 2945 + "@atcute/lexicons/@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], 2946 + 2899 2947 "@atproto-labs/fetch-node/ipaddr.js": ["ipaddr.js@2.2.0", "", {}, "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA=="], 2900 2948 2901 2949 "@atproto-labs/fetch-node/undici": ["undici@6.22.0", "", {}, "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw=="], 2902 2950 2903 2951 "@atproto-labs/identity-resolver/@atproto/syntax": ["@atproto/syntax@0.4.0", "", {}, "sha512-b9y5ceHS8YKOfP3mdKmwAx5yVj9294UN7FG2XzP6V5aKUdFazEYRnR9m5n5ZQFKa3GNvz7de9guZCJ/sUTcOAA=="], 2952 + 2953 + "@atproto/crypto/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], 2904 2954 2905 2955 "@atproto/jwk-jose/jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], 2906 2956 ··· 2961 3011 "@jridgewell/gen-mapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], 2962 3012 2963 3013 "@jridgewell/remapping/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], 3014 + 3015 + "@noble/curves/@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], 2964 3016 2965 3017 "@opentelemetry/exporter-logs-otlp-grpc/@opentelemetry/core": ["@opentelemetry/core@2.0.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ=="], 2966 3018 ··· 3046 3098 3047 3099 "@poppinss/dumper/supports-color": ["supports-color@10.2.2", "", {}, "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g=="], 3048 3100 3101 + "@rocksky/cli/drizzle-orm": ["drizzle-orm@0.45.1", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-Te0FOdKIistGNPMq2jscdqngBRfBpC8uMFVwqjf6gtTVJHIQ/dosgV/CLBU2N4ZJBsXL5savCba9b0YJskKdcA=="], 3102 + 3103 + "@rocksky/cli/effect": ["effect@3.19.14", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-3vwdq0zlvQOxXzXNKRIPKTqZNMyGCdaFUBfMPqpsyzZDre67kgC1EEHDV4EoQTovJ4w5fmJW756f86kkuz7WFA=="], 3104 + 3049 3105 "@rocksky/doc/vitest": ["vitest@2.1.9", "", { "dependencies": { "@vitest/expect": "2.1.9", "@vitest/mocker": "2.1.9", "@vitest/pretty-format": "^2.1.9", "@vitest/runner": "2.1.9", "@vitest/snapshot": "2.1.9", "@vitest/spy": "2.1.9", "@vitest/utils": "2.1.9", "chai": "^5.1.2", "debug": "^4.3.7", "expect-type": "^1.1.0", "magic-string": "^0.30.12", "pathe": "^1.1.2", "std-env": "^3.8.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.1", "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", "vite-node": "2.1.9", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", "@vitest/browser": "2.1.9", "@vitest/ui": "2.1.9", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q=="], 3050 3106 3051 3107 "@rocksky/spotify-proxy/@cloudflare/vitest-pool-workers": ["@cloudflare/vitest-pool-workers@0.8.71", "", { "dependencies": { "birpc": "0.2.14", "cjs-module-lexer": "^1.2.3", "devalue": "^5.3.2", "miniflare": "4.20250906.0", "semver": "^7.7.1", "wrangler": "4.35.0", "zod": "^3.22.3" }, "peerDependencies": { "@vitest/runner": "2.0.x - 3.2.x", "@vitest/snapshot": "2.0.x - 3.2.x", "vitest": "2.0.x - 3.2.x" } }, "sha512-keu2HCLQfRNwbmLBCDXJgCFpANTaYnQpE01fBOo4CNwiWHUT7SZGN7w64RKiSWRHyYppStXBuE5Ng7F42+flpg=="], ··· 3067 3123 "@rocksky/web-mobile/vitest": ["vitest@3.0.9", "", { "dependencies": { "@vitest/expect": "3.0.9", "@vitest/mocker": "3.0.9", "@vitest/pretty-format": "^3.0.9", "@vitest/runner": "3.0.9", "@vitest/snapshot": "3.0.9", "@vitest/spy": "3.0.9", "@vitest/utils": "3.0.9", "chai": "^5.2.0", "debug": "^4.4.0", "expect-type": "^1.1.0", "magic-string": "^0.30.17", "pathe": "^2.0.3", "std-env": "^3.8.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinypool": "^1.0.2", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0", "vite-node": "3.0.9", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.0.9", "@vitest/ui": "3.0.9", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-BbcFDqNyBlfSpATmTtXOAOj71RNKDDvjBM/uPfnxxVGrG+FSH2RQIwgeEngTaTkuU/h0ScFvf+tRcKfYXzBybQ=="], 3068 3124 3069 3125 "@storybook/addon-actions/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], 3126 + 3127 + "@storybook/csf/type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="], 3070 3128 3071 3129 "@storybook/csf-plugin/unplugin": ["unplugin@1.16.1", "", { "dependencies": { "acorn": "^8.14.0", "webpack-virtual-modules": "^0.6.2" } }, "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w=="], 3072 3130 ··· 3193 3251 "mlly/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], 3194 3252 3195 3253 "mlly/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], 3254 + 3255 + "p-limit/yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], 3196 3256 3197 3257 "pkg-types/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], 3198 3258