validate and generate lexicons with pkl

Changed files
+17436 -96
lexicons
pkl
scripts
src
+1
README.md
··· 9 9 To generate typescript from lexicons: 10 10 11 11 ```bash 12 + bun run pkl:gen 12 13 bun run lexgen 13 14 ``` 14 15
+75
bun.lock
··· 13 13 "@atproto/sync": "^0.1.20", 14 14 "@atproto/syntax": "^0.4.0", 15 15 "@atproto/xrpc-server": "^0.7.15", 16 + "@pkl-community/pkl": "^0.28.2", 17 + "tsx": "^4.20.3", 18 + "zx": "^8.5.5", 16 19 }, 17 20 "devDependencies": { 18 21 "@types/bun": "latest", ··· 91 94 92 95 "@cbor-extract/cbor-extract-win32-x64": ["@cbor-extract/cbor-extract-win32-x64@2.2.0", "", { "os": "win32", "cpu": "x64" }, "sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w=="], 93 96 97 + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.5", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA=="], 98 + 99 + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.5", "", { "os": "android", "cpu": "arm" }, "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA=="], 100 + 101 + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.5", "", { "os": "android", "cpu": "arm64" }, "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg=="], 102 + 103 + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.5", "", { "os": "android", "cpu": "x64" }, "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw=="], 104 + 105 + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ=="], 106 + 107 + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ=="], 108 + 109 + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.5", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw=="], 110 + 111 + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw=="], 112 + 113 + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.5", "", { "os": "linux", "cpu": "arm" }, "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw=="], 114 + 115 + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg=="], 116 + 117 + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.5", "", { "os": "linux", "cpu": "ia32" }, "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA=="], 118 + 119 + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg=="], 120 + 121 + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg=="], 122 + 123 + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ=="], 124 + 125 + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.5", "", { "os": "linux", "cpu": "none" }, "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA=="], 126 + 127 + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ=="], 128 + 129 + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.5", "", { "os": "linux", "cpu": "x64" }, "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw=="], 130 + 131 + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.5", "", { "os": "none", "cpu": "arm64" }, "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw=="], 132 + 133 + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.5", "", { "os": "none", "cpu": "x64" }, "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ=="], 134 + 135 + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.5", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw=="], 136 + 137 + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.5", "", { "os": "openbsd", "cpu": "x64" }, "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg=="], 138 + 139 + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.5", "", { "os": "sunos", "cpu": "x64" }, "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA=="], 140 + 141 + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw=="], 142 + 143 + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ=="], 144 + 145 + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.5", "", { "os": "win32", "cpu": "x64" }, "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g=="], 146 + 94 147 "@ipld/dag-cbor": ["@ipld/dag-cbor@7.0.3", "", { "dependencies": { "cborg": "^1.6.0", "multiformats": "^9.5.4" } }, "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA=="], 95 148 96 149 "@noble/curves": ["@noble/curves@1.9.0", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-7YDlXiNMdO1YZeH6t/kvopHHbIZzlxrCV9WLqCY6QhcXOoXiNCMDqJIglZ9Yjx5+w7Dz30TITFrlTjnRg7sKEg=="], 97 150 98 151 "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], 99 152 153 + "@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=="], 154 + 155 + "@pkl-community/pkl-darwin-arm64": ["@pkl-community/pkl-darwin-arm64@0.28.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-1CP5VayKnZeL1BUTaQUltiBu5wbn/pNizP3aSK1zbWMHDGK/S/rIs1X0GWEyOHWG7P/h9EBsNzHmJqg4kCn5jw=="], 156 + 157 + "@pkl-community/pkl-darwin-x64": ["@pkl-community/pkl-darwin-x64@0.28.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-gGV3S9Hnyclga3/8wvspXWxKKEPMJrWzgeafIPpFPDa49DDlPCrf4zNkN0T29yylWd4aLwMUGRE15vswkjhdjA=="], 158 + 159 + "@pkl-community/pkl-linux-arm64": ["@pkl-community/pkl-linux-arm64@0.28.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-IGJDm0maESl7Q+x2XukC7ia39m7Z++/C92cknrvTtyNdEROufGDobUv96ekq4e1gdcEgDvvDqCXLEQNC871Trg=="], 160 + 161 + "@pkl-community/pkl-linux-x64": ["@pkl-community/pkl-linux-x64@0.28.2", "", { "os": "linux", "cpu": "x64" }, "sha512-9MndyTuiRhBRdrDqgcNadi6mT8mCNcLChwh28D5t5EDko8maUDTKHwHeuIzdBI5P0ZLNYPnT4McPufkeBu67vQ=="], 162 + 100 163 "@ts-morph/common": ["@ts-morph/common@0.25.0", "", { "dependencies": { "minimatch": "^9.0.4", "path-browserify": "^1.0.1", "tinyglobby": "^0.2.9" } }, "sha512-kMnZz+vGGHi4GoHnLmMhGNjm44kGtKUXGnOvrKmMwAuvNjM/PgKVGfUnL7IDvK7Jb2QQ82jq3Zmp04Gy+r3Dkg=="], 101 164 102 165 "@types/bun": ["@types/bun@1.2.10", "", { "dependencies": { "bun-types": "1.2.10" } }, "sha512-eilv6WFM3M0c9ztJt7/g80BDusK98z/FrFwseZgT4bXCq2vPhXD4z8R3oddmAn+R/Nmz9vBn4kweJKmGTZj+lg=="], ··· 177 240 178 241 "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], 179 242 243 + "esbuild": ["esbuild@0.25.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.5", "@esbuild/android-arm": "0.25.5", "@esbuild/android-arm64": "0.25.5", "@esbuild/android-x64": "0.25.5", "@esbuild/darwin-arm64": "0.25.5", "@esbuild/darwin-x64": "0.25.5", "@esbuild/freebsd-arm64": "0.25.5", "@esbuild/freebsd-x64": "0.25.5", "@esbuild/linux-arm": "0.25.5", "@esbuild/linux-arm64": "0.25.5", "@esbuild/linux-ia32": "0.25.5", "@esbuild/linux-loong64": "0.25.5", "@esbuild/linux-mips64el": "0.25.5", "@esbuild/linux-ppc64": "0.25.5", "@esbuild/linux-riscv64": "0.25.5", "@esbuild/linux-s390x": "0.25.5", "@esbuild/linux-x64": "0.25.5", "@esbuild/netbsd-arm64": "0.25.5", "@esbuild/netbsd-x64": "0.25.5", "@esbuild/openbsd-arm64": "0.25.5", "@esbuild/openbsd-x64": "0.25.5", "@esbuild/sunos-x64": "0.25.5", "@esbuild/win32-arm64": "0.25.5", "@esbuild/win32-ia32": "0.25.5", "@esbuild/win32-x64": "0.25.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ=="], 244 + 180 245 "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], 181 246 182 247 "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], ··· 199 264 200 265 "fresh": ["fresh@0.5.2", "", {}, "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="], 201 266 267 + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], 268 + 202 269 "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], 203 270 204 271 "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], 205 272 206 273 "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], 274 + 275 + "get-tsconfig": ["get-tsconfig@4.10.1", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ=="], 207 276 208 277 "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], 209 278 ··· 307 376 308 377 "real-require": ["real-require@0.2.0", "", {}, "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="], 309 378 379 + "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], 380 + 310 381 "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], 311 382 312 383 "safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="], ··· 347 418 348 419 "ts-morph": ["ts-morph@24.0.0", "", { "dependencies": { "@ts-morph/common": "~0.25.0", "code-block-writer": "^13.0.3" } }, "sha512-2OAOg/Ob5yx9Et7ZX4CvTCc0UFoZHwLEJ+dpDPSUi5TgwwlTlX47w+iFRrEwzUZwYACjq83cgjS/Da50Ga37uw=="], 349 420 421 + "tsx": ["tsx@4.20.3", "", { "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ=="], 422 + 350 423 "type-is": ["type-is@1.6.18", "", { "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="], 351 424 352 425 "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], ··· 370 443 "yesno": ["yesno@0.4.0", "", {}, "sha512-tdBxmHvbXPBKYIg81bMCB7bVeDmHkRzk5rVJyYYXurwKkHq/MCd8rz4HSJUP7hW0H2NlXiq8IFiWvYKEHhlotA=="], 371 444 372 445 "zod": ["zod@3.24.3", "", {}, "sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg=="], 446 + 447 + "zx": ["zx@8.5.5", "", { "bin": { "zx": "build/cli.js" } }, "sha512-kzkjV3uqyEthw1IBDbA7Co2djji77vCP1DRvt58aYSMwiX4nyvAkFE8OBSEsOUbDJAst0Yo4asNvMTGG5HGPXA=="], 373 448 374 449 "proxy-addr/ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], 375 450
+78
lexicons/actor/defs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.actor.defs", 4 + "defs": { 5 + "profileViewDetailed": { 6 + "type": "object", 7 + "properties": { 8 + "id": { 9 + "type": "string", 10 + "description": "The unique identifier of the actor." 11 + }, 12 + "did": { 13 + "type": "string", 14 + "description": "The DID of the actor." 15 + }, 16 + "handle": { 17 + "type": "string", 18 + "description": "The handle of the actor." 19 + }, 20 + "displayName": { 21 + "type": "string", 22 + "description": "The display name of the actor." 23 + }, 24 + "avatar": { 25 + "type": "string", 26 + "description": "The URL of the actor's avatar image.", 27 + "format": "uri" 28 + }, 29 + "createdAt": { 30 + "type": "string", 31 + "description": "The date and time when the actor was created.", 32 + "format": "datetime" 33 + }, 34 + "updatedAt": { 35 + "type": "string", 36 + "description": "The date and time when the actor was last updated.", 37 + "format": "datetime" 38 + } 39 + } 40 + }, 41 + "profileViewBasic": { 42 + "type": "object", 43 + "properties": { 44 + "id": { 45 + "type": "string", 46 + "description": "The unique identifier of the actor." 47 + }, 48 + "did": { 49 + "type": "string", 50 + "description": "The DID of the actor." 51 + }, 52 + "handle": { 53 + "type": "string", 54 + "description": "The handle of the actor." 55 + }, 56 + "displayName": { 57 + "type": "string", 58 + "description": "The display name of the actor." 59 + }, 60 + "avatar": { 61 + "type": "string", 62 + "description": "The URL of the actor's avatar image.", 63 + "format": "uri" 64 + }, 65 + "createdAt": { 66 + "type": "string", 67 + "description": "The date and time when the actor was created.", 68 + "format": "datetime" 69 + }, 70 + "updatedAt": { 71 + "type": "string", 72 + "description": "The date and time when the actor was last updated.", 73 + "format": "datetime" 74 + } 75 + } 76 + } 77 + } 78 + }
+48
lexicons/actor/getActorAlbums.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.actor.getActorAlbums", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get albums for an actor", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "did" 12 + ], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "description": "The DID or handle of the actor", 17 + "format": "at-identifier" 18 + }, 19 + "limit": { 20 + "type": "integer", 21 + "description": "The maximum number of albums to return", 22 + "minimum": 1 23 + }, 24 + "offset": { 25 + "type": "integer", 26 + "description": "The offset for pagination", 27 + "minimum": 0 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "albums": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.album.defs#albumViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+48
lexicons/actor/getActorArtists.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.actor.getActorArtists", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get artists for an actor", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "did" 12 + ], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "description": "The DID or handle of the actor", 17 + "format": "at-identifier" 18 + }, 19 + "limit": { 20 + "type": "integer", 21 + "description": "The maximum number of albums to return", 22 + "minimum": 1 23 + }, 24 + "offset": { 25 + "type": "integer", 26 + "description": "The offset for pagination", 27 + "minimum": 0 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "artists": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.artist.defs#artistViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+48
lexicons/actor/getActorLovedSongs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.actor.getActorLovedSongs", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get loved songs for an actor", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "did" 12 + ], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "description": "The DID or handle of the actor", 17 + "format": "at-identifier" 18 + }, 19 + "limit": { 20 + "type": "integer", 21 + "description": "The maximum number of albums to return", 22 + "minimum": 1 23 + }, 24 + "offset": { 25 + "type": "integer", 26 + "description": "The offset for pagination", 27 + "minimum": 0 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "tracks": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.song.defs#songViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+48
lexicons/actor/getActorPlaylists.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.actor.getActorPlaylists", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get playlists for an actor", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "did" 12 + ], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "description": "The DID or handle of the actor", 17 + "format": "at-identifier" 18 + }, 19 + "limit": { 20 + "type": "integer", 21 + "description": "The maximum number of albums to return", 22 + "minimum": 1 23 + }, 24 + "offset": { 25 + "type": "integer", 26 + "description": "The offset for pagination", 27 + "minimum": 0 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "playlists": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.playlist.defs#playlistViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+48
lexicons/actor/getActorScrobbles.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.actor.getActorScrobbles", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get scrobbles for an actor", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "did" 12 + ], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "description": "The DID or handle of the actor", 17 + "format": "at-identifier" 18 + }, 19 + "limit": { 20 + "type": "integer", 21 + "description": "The maximum number of albums to return", 22 + "minimum": 1 23 + }, 24 + "offset": { 25 + "type": "integer", 26 + "description": "The offset for pagination", 27 + "minimum": 0 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "scrobbles": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.scrobble.defs#scrobbleViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+48
lexicons/actor/getActorSongs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.actor.getActorSongs", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get songs for an actor", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "did" 12 + ], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "description": "The DID or handle of the actor", 17 + "format": "at-identifier" 18 + }, 19 + "limit": { 20 + "type": "integer", 21 + "description": "The maximum number of albums to return", 22 + "minimum": 1 23 + }, 24 + "offset": { 25 + "type": "integer", 26 + "description": "The offset for pagination", 27 + "minimum": 0 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "songs": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.song.defs#songViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+27
lexicons/actor/getProfile.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.actor.getProfile", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get the profile of an actor", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "did": { 12 + "type": "string", 13 + "description": "The DID or handle of the actor", 14 + "format": "at-identifier" 15 + } 16 + } 17 + }, 18 + "output": { 19 + "encoding": "application/json", 20 + "schema": { 21 + "type": "ref", 22 + "ref": "app.rocksky.actor.defs#profileViewDetailed" 23 + } 24 + } 25 + } 26 + } 27 + }
+60
lexicons/actor/profile.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.bsky.actor.profile", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A declaration of a Bluesky account profile.", 8 + "key": "literal:self", 9 + "record": { 10 + "type": "object", 11 + "properties": { 12 + "displayName": { 13 + "type": "string", 14 + "maxGraphemes": 64, 15 + "maxLength": 640 16 + }, 17 + "description": { 18 + "type": "string", 19 + "description": "Free-form profile description text.", 20 + "maxGraphemes": 256, 21 + "maxLength": 2560 22 + }, 23 + "avatar": { 24 + "type": "blob", 25 + "description": "Small image to be displayed next to posts from account. AKA, 'profile picture'", 26 + "accept": [ 27 + "image/png", 28 + "image/jpeg" 29 + ], 30 + "maxSize": 1000000 31 + }, 32 + "banner": { 33 + "type": "blob", 34 + "description": "Larger horizontal image to display behind profile view.", 35 + "accept": [ 36 + "image/png", 37 + "image/jpeg" 38 + ], 39 + "maxSize": 10000000 40 + }, 41 + "labels": { 42 + "type": "union", 43 + "description": "Self-label values, specific to the Bluesky application, on the overall account.", 44 + "refs": [ 45 + "com.atproto.label.defs#selfLabels" 46 + ] 47 + }, 48 + "joinedViaStarterPack": { 49 + "type": "ref", 50 + "ref": "com.atproto.repo.strongRef" 51 + }, 52 + "createdAt": { 53 + "type": "string", 54 + "format": "datetime" 55 + } 56 + } 57 + } 58 + } 59 + } 60 + }
+4 -4
lexicons/album.json lexicons/album/album.json
··· 4 4 "defs": { 5 5 "main": { 6 6 "type": "record", 7 - "key": "tid", 8 7 "description": "A declaration of an album.", 8 + "key": "tid", 9 9 "record": { 10 10 "type": "object", 11 11 "required": [ ··· 74 74 }, 75 75 "tidalLink": { 76 76 "type": "string", 77 - "description": "The Tidal link of the album.", 77 + "description": "The tidal link of the album.", 78 78 "format": "uri" 79 79 }, 80 80 "appleMusicLink": { ··· 84 84 }, 85 85 "createdAt": { 86 86 "type": "string", 87 - "description": "The date the song was created.", 87 + "description": "The date and time when the album was created.", 88 88 "format": "datetime" 89 89 } 90 90 } 91 91 } 92 92 } 93 93 } 94 - } 94 + }
+121
lexicons/album/defs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.album.defs", 4 + "defs": { 5 + "albumViewBasic": { 6 + "type": "object", 7 + "properties": { 8 + "id": { 9 + "type": "string", 10 + "description": "The unique identifier of the album." 11 + }, 12 + "uri": { 13 + "type": "string", 14 + "description": "The URI of the album.", 15 + "format": "at-uri" 16 + }, 17 + "title": { 18 + "type": "string", 19 + "description": "The title of the album." 20 + }, 21 + "artist": { 22 + "type": "string", 23 + "description": "The artist of the album." 24 + }, 25 + "artistUri": { 26 + "type": "string", 27 + "description": "The URI of the album's artist.", 28 + "format": "at-uri" 29 + }, 30 + "year": { 31 + "type": "integer", 32 + "description": "The year the album was released." 33 + }, 34 + "albumArt": { 35 + "type": "string", 36 + "description": "The URL of the album art image.", 37 + "format": "uri" 38 + }, 39 + "releaseDate": { 40 + "type": "string", 41 + "description": "The release date of the album." 42 + }, 43 + "sha256": { 44 + "type": "string", 45 + "description": "The SHA256 hash of the album." 46 + }, 47 + "playCount": { 48 + "type": "integer", 49 + "description": "The number of times the album has been played.", 50 + "minimum": 0 51 + }, 52 + "uniqueListeners": { 53 + "type": "integer", 54 + "description": "The number of unique listeners who have played the album.", 55 + "minimum": 0 56 + } 57 + } 58 + }, 59 + "albumViewDetailed": { 60 + "type": "object", 61 + "properties": { 62 + "id": { 63 + "type": "string", 64 + "description": "The unique identifier of the album." 65 + }, 66 + "uri": { 67 + "type": "string", 68 + "description": "The URI of the album.", 69 + "format": "at-uri" 70 + }, 71 + "title": { 72 + "type": "string", 73 + "description": "The title of the album." 74 + }, 75 + "artist": { 76 + "type": "string", 77 + "description": "The artist of the album." 78 + }, 79 + "artistUri": { 80 + "type": "string", 81 + "description": "The URI of the album's artist.", 82 + "format": "at-uri" 83 + }, 84 + "year": { 85 + "type": "integer", 86 + "description": "The year the album was released." 87 + }, 88 + "albumArt": { 89 + "type": "string", 90 + "description": "The URL of the album art image.", 91 + "format": "uri" 92 + }, 93 + "releaseDate": { 94 + "type": "string", 95 + "description": "The release date of the album." 96 + }, 97 + "sha256": { 98 + "type": "string", 99 + "description": "The SHA256 hash of the album." 100 + }, 101 + "playCount": { 102 + "type": "integer", 103 + "description": "The number of times the album has been played.", 104 + "minimum": 0 105 + }, 106 + "uniqueListeners": { 107 + "type": "integer", 108 + "description": "The number of unique listeners who have played the album.", 109 + "minimum": 0 110 + }, 111 + "tracks": { 112 + "type": "array", 113 + "items": { 114 + "type": "ref", 115 + "ref": "app.rocksky.song.defs.songViewBasic" 116 + } 117 + } 118 + } 119 + } 120 + } 121 + }
+30
lexicons/album/getAlbum.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.album.getAlbum", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get detailed album view", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The URI of the album to retrieve.", 17 + "format": "at-uri" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.album.defs#albumViewDetailed" 26 + } 27 + } 28 + } 29 + } 30 + }
+38
lexicons/album/getAlbumTracks.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.album.getAlbumTracks", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get tracks for an album", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The URI of the album to retrieve tracks from", 17 + "format": "at-uri" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "object", 25 + "properties": { 26 + "tracks": { 27 + "type": "array", 28 + "items": { 29 + "type": "ref", 30 + "ref": "app.rocksky.song.defs#songViewBasic" 31 + } 32 + } 33 + } 34 + } 35 + } 36 + } 37 + } 38 + }
+40
lexicons/album/getAlbums.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.album.getAlbums", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get albums", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "limit": { 12 + "type": "integer", 13 + "description": "The maximum number of albums to return", 14 + "minimum": 1 15 + }, 16 + "offset": { 17 + "type": "integer", 18 + "description": "The offset for pagination", 19 + "minimum": 0 20 + } 21 + } 22 + }, 23 + "output": { 24 + "encoding": "application/json", 25 + "schema": { 26 + "type": "object", 27 + "properties": { 28 + "albums": { 29 + "type": "array", 30 + "items": { 31 + "type": "ref", 32 + "ref": "app.rocksky.album.defs#albumViewBasic" 33 + } 34 + } 35 + } 36 + } 37 + } 38 + } 39 + } 40 + }
+36
lexicons/apikey/createApikey.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.apikey.createApikey", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Create a new API key for the authenticated user", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "name" 14 + ], 15 + "properties": { 16 + "name": { 17 + "type": "string", 18 + "description": "The name of the API key." 19 + }, 20 + "description": { 21 + "type": "string", 22 + "description": "A description for the API key." 23 + } 24 + } 25 + } 26 + }, 27 + "output": { 28 + "encoding": "application/json", 29 + "schema": { 30 + "type": "ref", 31 + "ref": "app.rocksky.apikey.defs#apiKey" 32 + } 33 + } 34 + } 35 + } 36 + }
+28
lexicons/apikey/def.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.apikey.defs", 4 + "defs": { 5 + "apiKeyView": { 6 + "type": "object", 7 + "properties": { 8 + "id": { 9 + "type": "string", 10 + "description": "The unique identifier of the API key." 11 + }, 12 + "name": { 13 + "type": "string", 14 + "description": "The name of the API key." 15 + }, 16 + "description": { 17 + "type": "string", 18 + "description": "A description for the API key." 19 + }, 20 + "createdAt": { 21 + "type": "string", 22 + "description": "The date and time when the API key was created.", 23 + "format": "datetime" 24 + } 25 + } 26 + } 27 + } 28 + }
+5
lexicons/apikey/defs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.apikeys.defs", 4 + "defs": {} 5 + }
+38
lexicons/apikey/getApikeys.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.apikey.getApikeys", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get a list of API keys for the authenticated user", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "offset": { 12 + "type": "integer", 13 + "description": "The number of API keys to skip before starting to collect the result set." 14 + }, 15 + "limit": { 16 + "type": "integer", 17 + "description": "The number of API keys to return per page." 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "object", 25 + "properties": { 26 + "apiKeys": { 27 + "type": "array", 28 + "items": { 29 + "type": "ref", 30 + "ref": "app.rocksky.apikey.defs#apikeyView" 31 + } 32 + } 33 + } 34 + } 35 + } 36 + } 37 + } 38 + }
+29
lexicons/apikey/removeApikey.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.apikey.removeApikey", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Remove an API key for the authenticated user", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "id" 12 + ], 13 + "properties": { 14 + "id": { 15 + "type": "string", 16 + "description": "The ID of the API key to remove." 17 + } 18 + } 19 + }, 20 + "output": { 21 + "encoding": "application/json", 22 + "schema": { 23 + "type": "ref", 24 + "ref": "app.rocksky.apikey.defs#apiKey" 25 + } 26 + } 27 + } 28 + } 29 + }
+41
lexicons/apikey/updateApikey.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.apikey.updateApikey", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Update an existing API key for the authenticated user", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "id", 14 + "name" 15 + ], 16 + "properties": { 17 + "id": { 18 + "type": "string", 19 + "description": "The ID of the API key to update." 20 + }, 21 + "name": { 22 + "type": "string", 23 + "description": "The new name of the API key." 24 + }, 25 + "description": { 26 + "type": "string", 27 + "description": "A new description for the API key." 28 + } 29 + } 30 + } 31 + }, 32 + "output": { 33 + "encoding": "application/json", 34 + "schema": { 35 + "type": "ref", 36 + "ref": "app.rocksky.apikey.defs#apiKey" 37 + } 38 + } 39 + } 40 + } 41 + }
+3 -3
lexicons/artist.json lexicons/artist/artist.json
··· 4 4 "defs": { 5 5 "main": { 6 6 "type": "record", 7 - "key": "tid", 8 7 "description": "A declaration of an artist.", 8 + "key": "tid", 9 9 "record": { 10 10 "type": "object", 11 11 "required": [ ··· 59 59 }, 60 60 "createdAt": { 61 61 "type": "string", 62 - "description": "The date the song was created.", 62 + "description": "The date when the artist was created.", 63 63 "format": "datetime" 64 64 } 65 65 } 66 66 } 67 67 } 68 68 } 69 - } 69 + }
+78
lexicons/artist/defs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.artist.defs", 4 + "defs": { 5 + "artistViewBasic": { 6 + "type": "object", 7 + "properties": { 8 + "id": { 9 + "type": "string", 10 + "description": "The unique identifier of the artist." 11 + }, 12 + "uri": { 13 + "type": "string", 14 + "description": "The URI of the artist.", 15 + "format": "at-uri" 16 + }, 17 + "name": { 18 + "type": "string", 19 + "description": "The name of the artist." 20 + }, 21 + "picture": { 22 + "type": "string", 23 + "description": "The picture of the artist." 24 + }, 25 + "sha256": { 26 + "type": "string", 27 + "description": "The SHA256 hash of the artist." 28 + }, 29 + "playCount": { 30 + "type": "integer", 31 + "description": "The number of times the artist has been played.", 32 + "minimum": 0 33 + }, 34 + "uniqueListeners": { 35 + "type": "integer", 36 + "description": "The number of unique listeners who have played the artist.", 37 + "minimum": 0 38 + } 39 + } 40 + }, 41 + "artistViewDetailed": { 42 + "type": "object", 43 + "properties": { 44 + "id": { 45 + "type": "string", 46 + "description": "The unique identifier of the artist." 47 + }, 48 + "uri": { 49 + "type": "string", 50 + "description": "The URI of the artist.", 51 + "format": "at-uri" 52 + }, 53 + "name": { 54 + "type": "string", 55 + "description": "The name of the artist." 56 + }, 57 + "picture": { 58 + "type": "string", 59 + "description": "The picture of the artist." 60 + }, 61 + "sha256": { 62 + "type": "string", 63 + "description": "The SHA256 hash of the artist." 64 + }, 65 + "playCount": { 66 + "type": "integer", 67 + "description": "The number of times the artist has been played.", 68 + "minimum": 0 69 + }, 70 + "uniqueListeners": { 71 + "type": "integer", 72 + "description": "The number of unique listeners who have played the artist.", 73 + "minimum": 0 74 + } 75 + } 76 + } 77 + } 78 + }
+30
lexicons/artist/getArtist.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.artist.getArtist", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get artist details", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The URI of the artist to retrieve details from", 17 + "format": "at-uri" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.artist.defs#artistViewDetailed" 26 + } 27 + } 28 + } 29 + } 30 + }
+38
lexicons/artist/getArtistAlbums.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.artist.getArtistAlbums", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get artist's albums", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The URI of the artist to retrieve albums from", 17 + "format": "at-uri" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "object", 25 + "properties": { 26 + "albums": { 27 + "type": "array", 28 + "items": { 29 + "type": "ref", 30 + "ref": "app.rocksky.album.defs#albumViewBasic" 31 + } 32 + } 33 + } 34 + } 35 + } 36 + } 37 + } 38 + }
+45
lexicons/artist/getArtistTracks.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.artist.getArtistTracks", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get artist's tracks", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "uri": { 12 + "type": "string", 13 + "description": "The URI of the artist to retrieve albums from", 14 + "format": "at-uri" 15 + }, 16 + "limit": { 17 + "type": "integer", 18 + "description": "The maximum number of tracks to return", 19 + "minimum": 1 20 + }, 21 + "offset": { 22 + "type": "integer", 23 + "description": "The offset for pagination", 24 + "minimum": 0 25 + } 26 + } 27 + }, 28 + "output": { 29 + "encoding": "application/json", 30 + "schema": { 31 + "type": "object", 32 + "properties": { 33 + "tracks": { 34 + "type": "array", 35 + "items": { 36 + "type": "ref", 37 + "ref": "app.rocksky.song.defs#songViewBasic" 38 + } 39 + } 40 + } 41 + } 42 + } 43 + } 44 + } 45 + }
+40
lexicons/artist/getArtists.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.artist.getArtists", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get artists", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "limit": { 12 + "type": "integer", 13 + "description": "The maximum number of artists to return", 14 + "minimum": 1 15 + }, 16 + "offset": { 17 + "type": "integer", 18 + "description": "The offset for pagination", 19 + "minimum": 0 20 + } 21 + } 22 + }, 23 + "output": { 24 + "encoding": "application/json", 25 + "schema": { 26 + "type": "object", 27 + "properties": { 28 + "artists": { 29 + "type": "array", 30 + "items": { 31 + "type": "ref", 32 + "ref": "app.rocksky.artist.defs#artistViewBasic" 33 + } 34 + } 35 + } 36 + } 37 + } 38 + } 39 + } 40 + }
+32
lexicons/charts/defs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.charts.defs", 4 + "defs": { 5 + "chartsView": { 6 + "type": "object", 7 + "properties": { 8 + "scrobbles": { 9 + "type": "array", 10 + "items": { 11 + "type": "ref", 12 + "ref": "app.rocksky.charts.defs#scrobbleViewBasic" 13 + } 14 + } 15 + } 16 + }, 17 + "scrobbleViewBasic": { 18 + "type": "object", 19 + "properties": { 20 + "date": { 21 + "type": "string", 22 + "description": "The date of the scrobble.", 23 + "format": "datetime" 24 + }, 25 + "count": { 26 + "type": "integer", 27 + "description": "The number of scrobbles on this date." 28 + } 29 + } 30 + } 31 + } 32 + }
+42
lexicons/charts/getScrobblesChart.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.charts.getScrobblesChart", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get the scrobbles chart", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "did": { 12 + "type": "string", 13 + "description": "The DID or handle of the actor", 14 + "format": "at-identifier" 15 + }, 16 + "artisturi": { 17 + "type": "string", 18 + "description": "The URI of the artist to filter by", 19 + "format": "at-uri" 20 + }, 21 + "albumuri": { 22 + "type": "string", 23 + "description": "The URI of the album to filter by", 24 + "format": "at-uri" 25 + }, 26 + "songuri": { 27 + "type": "string", 28 + "description": "The URI of the track to filter by", 29 + "format": "at-uri" 30 + } 31 + } 32 + }, 33 + "output": { 34 + "encoding": "application/json", 35 + "schema": { 36 + "type": "ref", 37 + "ref": "app.rocksky.charts.defs#chartsView" 38 + } 39 + } 40 + } 41 + } 42 + }
+60
lexicons/dropbox/defs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.dropbox.defs", 4 + "defs": { 5 + "fileView": { 6 + "type": "object", 7 + "properties": { 8 + "id": { 9 + "type": "string", 10 + "description": "The unique identifier of the file." 11 + }, 12 + "name": { 13 + "type": "string", 14 + "description": "The name of the file." 15 + }, 16 + "pathLower": { 17 + "type": "string", 18 + "description": "The lowercased path of the file." 19 + }, 20 + "pathDisplay": { 21 + "type": "string", 22 + "description": "The display path of the file." 23 + }, 24 + "clientModified": { 25 + "type": "string", 26 + "description": "The last modified date and time of the file on the client.", 27 + "format": "datetime" 28 + }, 29 + "serverModified": { 30 + "type": "string", 31 + "description": "The last modified date and time of the file on the server.", 32 + "format": "datetime" 33 + } 34 + } 35 + }, 36 + "fileListView": { 37 + "type": "object", 38 + "properties": { 39 + "files": { 40 + "type": "array", 41 + "description": "A list of files in the Dropbox.", 42 + "items": { 43 + "type": "ref", 44 + "ref": "app.rocksky.dropbox.defs#fileView" 45 + } 46 + } 47 + } 48 + }, 49 + "temporaryLinkView": { 50 + "type": "object", 51 + "properties": { 52 + "link": { 53 + "type": "string", 54 + "description": "The temporary link to access the file.", 55 + "format": "uri" 56 + } 57 + } 58 + } 59 + } 60 + }
+25
lexicons/dropbox/downloadFile.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.dropbox.downloadFile", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Download a file from Dropbox by its unique identifier", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "fileId" 12 + ], 13 + "properties": { 14 + "fileId": { 15 + "type": "string", 16 + "description": "The unique identifier of the file to download" 17 + } 18 + } 19 + }, 20 + "output": { 21 + "encoding": "application/octet-stream" 22 + } 23 + } 24 + } 25 + }
+26
lexicons/dropbox/getFiles.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.dropbox.getFiles", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Retrieve a list of files from Dropbox", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "at": { 12 + "type": "string", 13 + "description": "Path to the Dropbox folder or root directory" 14 + } 15 + } 16 + }, 17 + "output": { 18 + "encoding": "application/json", 19 + "schema": { 20 + "type": "ref", 21 + "ref": "app.rocksky.dropbox.defs#fileListView" 22 + } 23 + } 24 + } 25 + } 26 + }
+29
lexicons/dropbox/getMetadata.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.dropbox.getMetadata", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Retrieve metadata of a file or folder in Dropbox", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "path" 12 + ], 13 + "properties": { 14 + "path": { 15 + "type": "string", 16 + "description": "Path to the file or folder in Dropbox" 17 + } 18 + } 19 + }, 20 + "output": { 21 + "encoding": "application/json", 22 + "schema": { 23 + "type": "ref", 24 + "ref": "app.rocksky.dropbox.defs#fileView" 25 + } 26 + } 27 + } 28 + } 29 + }
+29
lexicons/dropbox/getTemporaryLink.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.dropbox.getTemporaryLink", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Retrieve a temporary link to access a file in Dropbox", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "path" 12 + ], 13 + "properties": { 14 + "path": { 15 + "type": "string", 16 + "description": "Path to the file in Dropbox" 17 + } 18 + } 19 + }, 20 + "output": { 21 + "encoding": "application/json", 22 + "schema": { 23 + "type": "ref", 24 + "ref": "app.rocksky.dropbox.defs#temporaryLinkView" 25 + } 26 + } 27 + } 28 + } 29 + }
+105
lexicons/feed/defs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.feed.defs", 4 + "defs": { 5 + "searchResultsView": { 6 + "type": "object", 7 + "properties": { 8 + "hits": { 9 + "type": "array", 10 + "items": { 11 + "type": "union", 12 + "refs": [ 13 + "app.rocksky.song.defs#songViewBasic", 14 + "app.rocksky.album.defs#albumViewBasic", 15 + "app.rocksky.artist.defs#artistViewBasic", 16 + "app.rocksky.playlist.defs#playlistViewBasic", 17 + "app.rocksky.actor.defs#profileViewBasic" 18 + ] 19 + } 20 + }, 21 + "processingTimeMs": { 22 + "type": "integer" 23 + }, 24 + "limit": { 25 + "type": "integer" 26 + }, 27 + "offset": { 28 + "type": "integer" 29 + }, 30 + "estimatedTotalHits": { 31 + "type": "integer" 32 + } 33 + } 34 + }, 35 + "nowPlayingView": { 36 + "type": "object", 37 + "properties": { 38 + "album": { 39 + "type": "string" 40 + }, 41 + "albumArt": { 42 + "type": "string", 43 + "format": "uri" 44 + }, 45 + "albumArtist": { 46 + "type": "string" 47 + }, 48 + "albumUri": { 49 + "type": "string", 50 + "format": "at-uri" 51 + }, 52 + "artist": { 53 + "type": "string" 54 + }, 55 + "artistUri": { 56 + "type": "string", 57 + "format": "at-uri" 58 + }, 59 + "avatar": { 60 + "type": "string", 61 + "format": "uri" 62 + }, 63 + "createdAt": { 64 + "type": "string" 65 + }, 66 + "did": { 67 + "type": "string", 68 + "format": "at-identifier" 69 + }, 70 + "handle": { 71 + "type": "string" 72 + }, 73 + "id": { 74 + "type": "string" 75 + }, 76 + "title": { 77 + "type": "string" 78 + }, 79 + "trackId": { 80 + "type": "string" 81 + }, 82 + "trackUri": { 83 + "type": "string", 84 + "format": "at-uri" 85 + }, 86 + "uri": { 87 + "type": "string", 88 + "format": "at-uri" 89 + } 90 + } 91 + }, 92 + "nowPlayingsView": { 93 + "type": "object", 94 + "properties": { 95 + "nowPlayings": { 96 + "type": "array", 97 + "items": { 98 + "type": "ref", 99 + "ref": "app.rocksky.feed.defs#nowPlayingView" 100 + } 101 + } 102 + } 103 + } 104 + } 105 + }
+27
lexicons/feed/getNowPlayings.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.feed.getNowPlayings", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get all currently playing tracks by users", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "size": { 12 + "type": "integer", 13 + "description": "The maximum number of now playing tracks to return.", 14 + "minimum": 1 15 + } 16 + } 17 + }, 18 + "output": { 19 + "encoding": "application/json", 20 + "schema": { 21 + "type": "ref", 22 + "ref": "app.rocksky.feed.defs#nowPlayingsView" 23 + } 24 + } 25 + } 26 + } 27 + }
+29
lexicons/feed/search.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.feed.search", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Search for content in the feed", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "query" 12 + ], 13 + "properties": { 14 + "query": { 15 + "type": "string", 16 + "description": "The search query string" 17 + } 18 + } 19 + }, 20 + "output": { 21 + "encoding": "application/json", 22 + "schema": { 23 + "type": "ref", 24 + "ref": "app.rocksky.feed.defs#searchResultsView" 25 + } 26 + } 27 + } 28 + } 29 + }
+27
lexicons/googledrive/defs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.googledrive.defs", 4 + "defs": { 5 + "fileView": { 6 + "type": "object", 7 + "properties": { 8 + "id": { 9 + "type": "string", 10 + "description": "The unique identifier of the file." 11 + } 12 + } 13 + }, 14 + "fileListView": { 15 + "type": "object", 16 + "properties": { 17 + "files": { 18 + "type": "array", 19 + "items": { 20 + "type": "ref", 21 + "ref": "app.rocksky.googledrive.defs#fileView" 22 + } 23 + } 24 + } 25 + } 26 + } 27 + }
+25
lexicons/googledrive/downloadFile.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.googledrive.downloadFile", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Download a file from Google Drive by its unique identifier", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "fileId" 12 + ], 13 + "properties": { 14 + "fileId": { 15 + "type": "string", 16 + "description": "The unique identifier of the file to download" 17 + } 18 + } 19 + }, 20 + "output": { 21 + "encoding": "application/octet-stream" 22 + } 23 + } 24 + } 25 + }
+29
lexicons/googledrive/getFile.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.googledrive.getFile", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get a file from Google Drive by its unique identifier", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "fileId" 12 + ], 13 + "properties": { 14 + "fileId": { 15 + "type": "string", 16 + "description": "The unique identifier of the file to retrieve" 17 + } 18 + } 19 + }, 20 + "output": { 21 + "encoding": "application/json", 22 + "schema": { 23 + "type": "ref", 24 + "ref": "app.rocksky.googledrive.defs#fileView" 25 + } 26 + } 27 + } 28 + } 29 + }
+26
lexicons/googledrive/getFiles.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.googledrive.getFiles", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get a list of files from Google Drive", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "at": { 12 + "type": "string", 13 + "description": "Path to the Google Drive folder or root directory" 14 + } 15 + } 16 + }, 17 + "output": { 18 + "encoding": "application/json", 19 + "schema": { 20 + "type": "ref", 21 + "ref": "app.rocksky.googledrive.defs#fileListView" 22 + } 23 + } 24 + } 25 + } 26 + }
+30
lexicons/like/dislikeShout.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.like.dislikeShout", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Dislike a shout", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "properties": { 13 + "uri": { 14 + "type": "string", 15 + "description": "The unique identifier of the shout to dislike", 16 + "format": "at-uri" 17 + } 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.shout.defs#shoutView" 26 + } 27 + } 28 + } 29 + } 30 + }
+30
lexicons/like/dislikeSong.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.like.dislikeSong", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Dislike a song", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "properties": { 13 + "uri": { 14 + "type": "string", 15 + "description": "The unique identifier of the song to dislike", 16 + "format": "at-uri" 17 + } 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.song.defs#songViewDetailed" 26 + } 27 + } 28 + } 29 + } 30 + }
+29
lexicons/like/like.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.like", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A declaration of a like.", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "createdAt", 13 + "subject" 14 + ], 15 + "properties": { 16 + "createdAt": { 17 + "type": "string", 18 + "description": "The date when the like was created.", 19 + "format": "datetime" 20 + }, 21 + "subject": { 22 + "type": "ref", 23 + "ref": "com.atproto.repo.strongRef" 24 + } 25 + } 26 + } 27 + } 28 + } 29 + }
+30
lexicons/like/likeShout.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.like.likeShout", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Like a shout", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "properties": { 13 + "uri": { 14 + "type": "string", 15 + "description": "The unique identifier of the shout to like", 16 + "format": "at-uri" 17 + } 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.shout.defs#shoutView" 26 + } 27 + } 28 + } 29 + } 30 + }
+30
lexicons/like/likeSong.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.like.likeSong", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Like a song", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "properties": { 13 + "uri": { 14 + "type": "string", 15 + "description": "The unique identifier of the song to like", 16 + "format": "at-uri" 17 + } 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.song.defs#songViewDetailed" 26 + } 27 + } 28 + } 29 + } 30 + }
+15
lexicons/player/defs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.player.defs", 4 + "defs": { 5 + "currentlyPlayingViewDetailed": { 6 + "type": "object", 7 + "properties": { 8 + "title": { 9 + "type": "string", 10 + "description": "The title of the currently playing track" 11 + } 12 + } 13 + } 14 + } 15 + }
+27
lexicons/player/getCurrentlyPlaying.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.player.getCurrentlyPlaying", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get the currently playing track", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "actor": { 12 + "type": "string", 13 + "description": "Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user.", 14 + "format": "at-identifier" 15 + } 16 + } 17 + }, 18 + "output": { 19 + "encoding": "application/json", 20 + "schema": { 21 + "type": "ref", 22 + "ref": "app.rocksky.player.defs#currentlyPlayingViewDetailed" 23 + } 24 + } 25 + } 26 + } 27 + }
+10
lexicons/player/next.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.player.next", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Play the next track in the queue" 8 + } 9 + } 10 + }
+10
lexicons/player/pause.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.player.pause", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Pause the currently playing track" 8 + } 9 + } 10 + }
+10
lexicons/player/play.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.player.play", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Resume playback of the currently paused track" 8 + } 9 + } 10 + }
+10
lexicons/player/previous.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.player.previous", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Play the previous track in the queue" 8 + } 9 + } 10 + }
+22
lexicons/player/seek.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.player.seek", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Seek to a specific position in the currently playing track", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "position" 12 + ], 13 + "properties": { 14 + "position": { 15 + "type": "integer", 16 + "description": "The position in seconds to seek to" 17 + } 18 + } 19 + } 20 + } 21 + } 22 + }
+123
lexicons/playlist/defs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.playlist.defs", 4 + "defs": { 5 + "playlistViewDetailed": { 6 + "type": "object", 7 + "description": "Detailed view of a playlist, including its tracks and metadata", 8 + "properties": { 9 + "id": { 10 + "type": "string", 11 + "description": "The unique identifier of the playlist." 12 + }, 13 + "title": { 14 + "type": "string", 15 + "description": "The title of the playlist." 16 + }, 17 + "uri": { 18 + "type": "string", 19 + "description": "The URI of the playlist.", 20 + "format": "at-uri" 21 + }, 22 + "curatorDid": { 23 + "type": "string", 24 + "description": "The DID of the curator of the playlist.", 25 + "format": "at-identifier" 26 + }, 27 + "curatorHandle": { 28 + "type": "string", 29 + "description": "The handle of the curator of the playlist.", 30 + "format": "at-identifier" 31 + }, 32 + "curatorName": { 33 + "type": "string", 34 + "description": "The name of the curator of the playlist." 35 + }, 36 + "curatorAvatarUrl": { 37 + "type": "string", 38 + "description": "The URL of the avatar image of the curator.", 39 + "format": "uri" 40 + }, 41 + "description": { 42 + "type": "string", 43 + "description": "A description of the playlist." 44 + }, 45 + "coverImageUrl": { 46 + "type": "string", 47 + "description": "The URL of the cover image for the playlist.", 48 + "format": "uri" 49 + }, 50 + "createdAt": { 51 + "type": "string", 52 + "description": "The date and time when the playlist was created.", 53 + "format": "datetime" 54 + }, 55 + "tracks": { 56 + "type": "array", 57 + "description": "A list of tracks in the playlist.", 58 + "items": { 59 + "type": "ref", 60 + "ref": "app.rocksky.song.defs#songViewBasic" 61 + } 62 + } 63 + } 64 + }, 65 + "playlistViewBasic": { 66 + "type": "object", 67 + "description": "Basic view of a playlist, including its metadata", 68 + "properties": { 69 + "id": { 70 + "type": "string", 71 + "description": "The unique identifier of the playlist." 72 + }, 73 + "title": { 74 + "type": "string", 75 + "description": "The title of the playlist." 76 + }, 77 + "uri": { 78 + "type": "string", 79 + "description": "The URI of the playlist.", 80 + "format": "at-uri" 81 + }, 82 + "curatorDid": { 83 + "type": "string", 84 + "description": "The DID of the curator of the playlist.", 85 + "format": "at-identifier" 86 + }, 87 + "curatorHandle": { 88 + "type": "string", 89 + "description": "The handle of the curator of the playlist.", 90 + "format": "at-identifier" 91 + }, 92 + "curatorName": { 93 + "type": "string", 94 + "description": "The name of the curator of the playlist." 95 + }, 96 + "curatorAvatarUrl": { 97 + "type": "string", 98 + "description": "The URL of the avatar image of the curator.", 99 + "format": "uri" 100 + }, 101 + "description": { 102 + "type": "string", 103 + "description": "A description of the playlist." 104 + }, 105 + "coverImageUrl": { 106 + "type": "string", 107 + "description": "The URL of the cover image for the playlist.", 108 + "format": "uri" 109 + }, 110 + "createdAt": { 111 + "type": "string", 112 + "description": "The date and time when the playlist was created.", 113 + "format": "datetime" 114 + }, 115 + "trackCount": { 116 + "type": "integer", 117 + "description": "The number of tracks in the playlist.", 118 + "minimum": 0 119 + } 120 + } 121 + } 122 + } 123 + }
+30
lexicons/playlist/getPlaylist.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.playlist.getPlaylist", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Retrieve a playlist by its ID", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The URI of the playlist to retrieve.", 17 + "format": "at-uri" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.playlist.defs#playlistViewDetailed" 26 + } 27 + } 28 + } 29 + } 30 + }
+38
lexicons/playlist/getPlaylists.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.playlist.getPlaylists", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Retrieve a list of playlists", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "limit": { 12 + "type": "integer", 13 + "description": "The maximum number of playlists to return." 14 + }, 15 + "offset": { 16 + "type": "integer", 17 + "description": "The offset for pagination, used to skip a number of playlists." 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "object", 25 + "properties": { 26 + "playlists": { 27 + "type": "array", 28 + "items": { 29 + "type": "ref", 30 + "ref": "app.rocksky.playlist.defs#playlistViewBasic" 31 + } 32 + } 33 + } 34 + } 35 + } 36 + } 37 + } 38 + }
+70
lexicons/playlist/playlist.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.playlist", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A declaration of a playlist.", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "name", 13 + "createdAt" 14 + ], 15 + "properties": { 16 + "name": { 17 + "type": "string", 18 + "description": "The name of the playlist.", 19 + "minLength": 1, 20 + "maxLength": 512 21 + }, 22 + "description": { 23 + "type": "string", 24 + "description": "The playlist description.", 25 + "minLength": 1, 26 + "maxLength": 256 27 + }, 28 + "picture": { 29 + "type": "blob", 30 + "description": "The picture of the playlist.", 31 + "accept": [ 32 + "image/png", 33 + "image/jpeg" 34 + ], 35 + "maxSize": 2000000 36 + }, 37 + "tracks": { 38 + "type": "array", 39 + "description": "The tracks in the playlist.", 40 + "items": { 41 + "type": "ref", 42 + "ref": "app.rocksky.song#record" 43 + } 44 + }, 45 + "createdAt": { 46 + "type": "string", 47 + "description": "The date the playlist was created.", 48 + "format": "datetime" 49 + }, 50 + "spotifyLink": { 51 + "type": "string", 52 + "description": "The Spotify link of the playlist." 53 + }, 54 + "tidalLink": { 55 + "type": "string", 56 + "description": "The Tidal link of the playlist." 57 + }, 58 + "youtubeLink": { 59 + "type": "string", 60 + "description": "The YouTube link of the playlist." 61 + }, 62 + "appleMusicLink": { 63 + "type": "string", 64 + "description": "The Apple Music link of the playlist." 65 + } 66 + } 67 + } 68 + } 69 + } 70 + }
+68
lexicons/radio/defs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.radio.defs", 4 + "defs": { 5 + "radioViewBasic": { 6 + "type": "object", 7 + "properties": { 8 + "id": { 9 + "type": "string", 10 + "description": "The unique identifier of the radio." 11 + }, 12 + "name": { 13 + "type": "string", 14 + "description": "The name of the radio." 15 + }, 16 + "description": { 17 + "type": "string", 18 + "description": "A brief description of the radio." 19 + }, 20 + "createdAt": { 21 + "type": "string", 22 + "description": "The date and time when the radio was created.", 23 + "format": "datetime" 24 + } 25 + } 26 + }, 27 + "radioViewDetailed": { 28 + "type": "object", 29 + "properties": { 30 + "id": { 31 + "type": "string", 32 + "description": "The unique identifier of the radio." 33 + }, 34 + "name": { 35 + "type": "string", 36 + "description": "The name of the radio." 37 + }, 38 + "description": { 39 + "type": "string", 40 + "description": "A brief description of the radio." 41 + }, 42 + "website": { 43 + "type": "string", 44 + "description": "The website of the radio.", 45 + "format": "uri" 46 + }, 47 + "url": { 48 + "type": "string", 49 + "description": "The streaming URL of the radio.", 50 + "format": "uri" 51 + }, 52 + "genre": { 53 + "type": "string", 54 + "description": "The genre of the radio." 55 + }, 56 + "logo": { 57 + "type": "string", 58 + "description": "The logo of the radio station." 59 + }, 60 + "createdAt": { 61 + "type": "string", 62 + "description": "The date and time when the radio was created.", 63 + "format": "datetime" 64 + } 65 + } 66 + } 67 + } 68 + }
+63
lexicons/radio/radio.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.radio", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A declaration of a radio station.", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "name", 13 + "url", 14 + "createdAt" 15 + ], 16 + "properties": { 17 + "name": { 18 + "type": "string", 19 + "description": "The name of the radio station.", 20 + "minLength": 1, 21 + "maxLength": 512 22 + }, 23 + "url": { 24 + "type": "string", 25 + "description": "The URL of the radio station.", 26 + "format": "uri" 27 + }, 28 + "description": { 29 + "type": "string", 30 + "description": "A description of the radio station.", 31 + "minLength": 1, 32 + "maxLength": 1000 33 + }, 34 + "genre": { 35 + "type": "string", 36 + "description": "The genre of the radio station.", 37 + "minLength": 1, 38 + "maxLength": 256 39 + }, 40 + "logo": { 41 + "type": "blob", 42 + "description": "The logo of the radio station.", 43 + "accept": [ 44 + "image/png", 45 + "image/jpeg" 46 + ], 47 + "maxSize": 2000000 48 + }, 49 + "website": { 50 + "type": "string", 51 + "description": "The website of the radio station.", 52 + "format": "uri" 53 + }, 54 + "createdAt": { 55 + "type": "string", 56 + "description": "The date when the radio station was created.", 57 + "format": "datetime" 58 + } 59 + } 60 + } 61 + } 62 + } 63 + }
+17 -17
lexicons/scrobble.json lexicons/scrobble/scrobble.json
··· 4 4 "defs": { 5 5 "main": { 6 6 "type": "record", 7 - "key": "tid", 8 7 "description": "A declaration of a scrobble.", 8 + "key": "tid", 9 9 "record": { 10 10 "type": "object", 11 11 "required": [ 12 12 "title", 13 13 "artist", 14 + "album", 14 15 "albumArtist", 15 - "album", 16 16 "duration", 17 17 "createdAt" 18 18 ], 19 19 "properties": { 20 - "trackNumber": { 21 - "type": "integer", 22 - "description": "The track number of the song in the album.", 23 - "minimum": 1 24 - }, 25 - "discNumber": { 26 - "type": "integer", 27 - "description": "The disc number of the song in the album.", 28 - "minimum": 1 29 - }, 30 20 "title": { 31 21 "type": "string", 32 22 "description": "The title of the song.", ··· 41 31 }, 42 32 "albumArtist": { 43 33 "type": "string", 44 - "description": "The artist of the album the song is from.", 34 + "description": "The album artist of the song.", 45 35 "minLength": 1, 46 36 "maxLength": 256 47 37 }, 48 38 "album": { 49 39 "type": "string", 50 - "description": "The album the song is from.", 40 + "description": "The album of the song.", 51 41 "minLength": 1, 52 42 "maxLength": 256 53 43 }, ··· 56 46 "description": "The duration of the song in seconds.", 57 47 "minimum": 1 58 48 }, 49 + "trackNumber": { 50 + "type": "integer", 51 + "description": "The track number of the song in the album.", 52 + "minimum": 1 53 + }, 54 + "discNumber": { 55 + "type": "integer", 56 + "description": "The disc number of the song in the album.", 57 + "minimum": 1 58 + }, 59 59 "releaseDate": { 60 60 "type": "string", 61 61 "description": "The release date of the song.", ··· 91 91 }, 92 92 "copyrightMessage": { 93 93 "type": "string", 94 - "description": "The copyright message.", 94 + "description": "The copyright message of the song.", 95 95 "maxLength": 256 96 96 }, 97 97 "wiki": { ··· 130 130 }, 131 131 "createdAt": { 132 132 "type": "string", 133 - "description": "The date the song was created.", 133 + "description": "The date when the song was created.", 134 134 "format": "datetime" 135 135 }, 136 136 "mbid": { ··· 146 146 } 147 147 } 148 148 } 149 - } 149 + }
+125
lexicons/scrobble/createScrobble.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.scrobble.createScrobble", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Create a new scrobble", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "title", 14 + "artist" 15 + ], 16 + "properties": { 17 + "title": { 18 + "type": "string", 19 + "description": "The title of the track being scrobbled" 20 + }, 21 + "artist": { 22 + "type": "string", 23 + "description": "The artist of the track being scrobbled" 24 + }, 25 + "album": { 26 + "type": "string", 27 + "description": "The album of the track being scrobbled" 28 + }, 29 + "duration": { 30 + "type": "integer", 31 + "description": "The duration of the track in seconds" 32 + }, 33 + "mbId": { 34 + "type": "string", 35 + "description": "The MusicBrainz ID of the track, if available" 36 + }, 37 + "albumArt": { 38 + "type": "string", 39 + "description": "The URL of the album art for the track", 40 + "format": "uri" 41 + }, 42 + "trackNumber": { 43 + "type": "integer", 44 + "description": "The track number of the track in the album" 45 + }, 46 + "releaseDate": { 47 + "type": "string", 48 + "description": "The release date of the track, formatted as YYYY-MM-DD" 49 + }, 50 + "year": { 51 + "type": "integer", 52 + "description": "The year the track was released" 53 + }, 54 + "discNumber": { 55 + "type": "integer", 56 + "description": "The disc number of the track in the album, if applicable" 57 + }, 58 + "lyrics": { 59 + "type": "string", 60 + "description": "The lyrics of the track, if available" 61 + }, 62 + "composer": { 63 + "type": "string", 64 + "description": "The composer of the track, if available" 65 + }, 66 + "copyrightMessage": { 67 + "type": "string", 68 + "description": "The copyright message for the track, if available" 69 + }, 70 + "label": { 71 + "type": "string", 72 + "description": "The record label of the track, if available" 73 + }, 74 + "artistPicture": { 75 + "type": "string", 76 + "description": "The URL of the artist's picture, if available", 77 + "format": "uri" 78 + }, 79 + "spotifyLink": { 80 + "type": "string", 81 + "description": "The Spotify link for the track, if available", 82 + "format": "uri" 83 + }, 84 + "lastfmLink": { 85 + "type": "string", 86 + "description": "The Last.fm link for the track, if available", 87 + "format": "uri" 88 + }, 89 + "tidalLink": { 90 + "type": "string", 91 + "description": "The Tidal link for the track, if available", 92 + "format": "uri" 93 + }, 94 + "appleMusicLink": { 95 + "type": "string", 96 + "description": "The Apple Music link for the track, if available", 97 + "format": "uri" 98 + }, 99 + "youtubeLink": { 100 + "type": "string", 101 + "description": "The Youtube link for the track, if available", 102 + "format": "uri" 103 + }, 104 + "deezerLink": { 105 + "type": "string", 106 + "description": "The Deezer link for the track, if available", 107 + "format": "uri" 108 + }, 109 + "timestamp": { 110 + "type": "integer", 111 + "description": "The timestamp of the scrobble in milliseconds since epoch" 112 + } 113 + } 114 + } 115 + }, 116 + "output": { 117 + "encoding": "application/json", 118 + "schema": { 119 + "type": "ref", 120 + "ref": "app.rocksky.scrobble.defs#scrobbleViewBasic" 121 + } 122 + } 123 + } 124 + } 125 + }
+122
lexicons/scrobble/defs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.scrobble.defs", 4 + "defs": { 5 + "scrobbleViewBasic": { 6 + "type": "object", 7 + "properties": { 8 + "id": { 9 + "type": "string", 10 + "description": "The unique identifier of the scrobble." 11 + }, 12 + "user": { 13 + "type": "string", 14 + "description": "The handle of the user who created the scrobble." 15 + }, 16 + "title": { 17 + "type": "string", 18 + "description": "The title of the scrobble." 19 + }, 20 + "artist": { 21 + "type": "string", 22 + "description": "The artist of the song." 23 + }, 24 + "artistUri": { 25 + "type": "string", 26 + "description": "The URI of the artist.", 27 + "format": "at-uri" 28 + }, 29 + "album": { 30 + "type": "string", 31 + "description": "The album of the song." 32 + }, 33 + "albumUri": { 34 + "type": "string", 35 + "description": "The URI of the album.", 36 + "format": "at-uri" 37 + }, 38 + "cover": { 39 + "type": "string", 40 + "description": "The album art URL of the song.", 41 + "format": "uri" 42 + }, 43 + "date": { 44 + "type": "string", 45 + "description": "The timestamp when the scrobble was created.", 46 + "format": "datetime" 47 + }, 48 + "uri": { 49 + "type": "string", 50 + "description": "The URI of the scrobble.", 51 + "format": "uri" 52 + }, 53 + "sha256": { 54 + "type": "string", 55 + "description": "The SHA256 hash of the scrobble data." 56 + } 57 + } 58 + }, 59 + "scrobbleViewDetailed": { 60 + "type": "object", 61 + "properties": { 62 + "id": { 63 + "type": "string", 64 + "description": "The unique identifier of the scrobble." 65 + }, 66 + "user": { 67 + "type": "string", 68 + "description": "The handle of the user who created the scrobble." 69 + }, 70 + "title": { 71 + "type": "string", 72 + "description": "The title of the scrobble." 73 + }, 74 + "artist": { 75 + "type": "string", 76 + "description": "The artist of the song." 77 + }, 78 + "artistUri": { 79 + "type": "string", 80 + "description": "The URI of the artist.", 81 + "format": "at-uri" 82 + }, 83 + "album": { 84 + "type": "string", 85 + "description": "The album of the song." 86 + }, 87 + "albumUri": { 88 + "type": "string", 89 + "description": "The URI of the album.", 90 + "format": "at-uri" 91 + }, 92 + "cover": { 93 + "type": "string", 94 + "description": "The album art URL of the song.", 95 + "format": "uri" 96 + }, 97 + "date": { 98 + "type": "string", 99 + "description": "The timestamp when the scrobble was created.", 100 + "format": "datetime" 101 + }, 102 + "uri": { 103 + "type": "string", 104 + "description": "The URI of the scrobble.", 105 + "format": "uri" 106 + }, 107 + "sha256": { 108 + "type": "string", 109 + "description": "The SHA256 hash of the scrobble data." 110 + }, 111 + "listeners": { 112 + "type": "integer", 113 + "description": "The number of listeners" 114 + }, 115 + "scrobbles": { 116 + "type": "integer", 117 + "description": "The number of scrobbles for this song" 118 + } 119 + } 120 + } 121 + } 122 + }
+30
lexicons/scrobble/getScrobble.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.scrobble.getScrobble", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get a scrobble by its unique identifier", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The unique identifier of the scrobble", 17 + "format": "at-uri" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.scrobble.defs#scrobbleViewDetailed" 26 + } 27 + } 28 + } 29 + } 30 + }
+45
lexicons/scrobble/getScrobbles.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.scrobble.getScrobbles", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get scrobbles all scrobbles", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "did": { 12 + "type": "string", 13 + "description": "The DID or handle of the actor", 14 + "format": "at-identifier" 15 + }, 16 + "limit": { 17 + "type": "integer", 18 + "description": "The maximum number of scrobbles to return", 19 + "minimum": 1 20 + }, 21 + "offset": { 22 + "type": "integer", 23 + "description": "The offset for pagination", 24 + "minimum": 0 25 + } 26 + } 27 + }, 28 + "output": { 29 + "encoding": "application/json", 30 + "schema": { 31 + "type": "object", 32 + "properties": { 33 + "scrobbles": { 34 + "type": "array", 35 + "items": { 36 + "type": "ref", 37 + "ref": "app.rocksky.scrobble.defs#scrobbleViewBasic" 38 + } 39 + } 40 + } 41 + } 42 + } 43 + } 44 + } 45 + }
+30
lexicons/shout/createShout.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.createShout", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Create a new shout", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "properties": { 13 + "message": { 14 + "type": "string", 15 + "description": "The content of the shout", 16 + "minLength": 1 17 + } 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.shout.defs#shoutView" 26 + } 27 + } 28 + } 29 + } 30 + }
+61
lexicons/shout/defs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.defs", 4 + "defs": { 5 + "author": { 6 + "type": "object", 7 + "properties": { 8 + "id": { 9 + "type": "string", 10 + "description": "The unique identifier of the author." 11 + }, 12 + "did": { 13 + "type": "string", 14 + "description": "The decentralized identifier (DID) of the author.", 15 + "format": "at-identifier" 16 + }, 17 + "handle": { 18 + "type": "string", 19 + "description": "The handle of the author.", 20 + "format": "at-identifier" 21 + }, 22 + "displayName": { 23 + "type": "string", 24 + "description": "The display name of the author." 25 + }, 26 + "avatar": { 27 + "type": "string", 28 + "description": "The URL of the author's avatar image.", 29 + "format": "uri" 30 + } 31 + } 32 + }, 33 + "shoutView": { 34 + "type": "object", 35 + "properties": { 36 + "id": { 37 + "type": "string", 38 + "description": "The unique identifier of the shout." 39 + }, 40 + "message": { 41 + "type": "string", 42 + "description": "The content of the shout." 43 + }, 44 + "parent": { 45 + "type": "string", 46 + "description": "The ID of the parent shout if this is a reply, otherwise null." 47 + }, 48 + "createdAt": { 49 + "type": "string", 50 + "description": "The date and time when the shout was created.", 51 + "format": "datetime" 52 + }, 53 + "author": { 54 + "type": "ref", 55 + "description": "The author of the shout.", 56 + "ref": "app.rocksky.shout.defs#author" 57 + } 58 + } 59 + } 60 + } 61 + }
+48
lexicons/shout/getAlbumShouts.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.getAlbumShouts", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get shouts for an album", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The unique identifier of the album to retrieve shouts for", 17 + "format": "at-uri" 18 + }, 19 + "limit": { 20 + "type": "integer", 21 + "description": "The maximum number of shouts to return", 22 + "minimum": 1 23 + }, 24 + "offset": { 25 + "type": "integer", 26 + "description": "The number of shouts to skip before starting to collect the result set", 27 + "minimum": 0 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "shouts": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.shout.defs#shoutViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+48
lexicons/shout/getArtistShouts.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.getArtistShouts", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get shouts for an artist", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The URI of the artist to retrieve shouts for", 17 + "format": "at-uri" 18 + }, 19 + "limit": { 20 + "type": "integer", 21 + "description": "The maximum number of shouts to return", 22 + "minimum": 1 23 + }, 24 + "offset": { 25 + "type": "integer", 26 + "description": "The number of shouts to skip before starting to collect the result set", 27 + "minimum": 0 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "shouts": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.shout.defs#shoutViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+48
lexicons/shout/getProfileShouts.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.getProfileShouts", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get the shouts of an actor's profile", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "did" 12 + ], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "description": "The DID or handle of the actor", 17 + "format": "at-identifier" 18 + }, 19 + "offset": { 20 + "type": "integer", 21 + "description": "The offset for pagination", 22 + "minimum": 0 23 + }, 24 + "limit": { 25 + "type": "integer", 26 + "description": "The maximum number of shouts to return", 27 + "minimum": 1 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "shouts": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.shout.defs#shoutViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+48
lexicons/shout/getShoutReplies.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.getShoutReplies", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get replies to a shout", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The URI of the shout to retrieve replies for", 17 + "format": "at-uri" 18 + }, 19 + "limit": { 20 + "type": "integer", 21 + "description": "The maximum number of shouts to return", 22 + "minimum": 1 23 + }, 24 + "offset": { 25 + "type": "integer", 26 + "description": "The number of shouts to skip before starting to collect the result set", 27 + "minimum": 0 28 + } 29 + } 30 + }, 31 + "output": { 32 + "encoding": "application/json", 33 + "schema": { 34 + "type": "object", 35 + "properties": { 36 + "shouts": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.rocksky.shout.defs#shoutViewBasic" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + }
+38
lexicons/shout/getTrackShouts.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.getTrackShouts", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get all shouts for a specific track", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The URI of the track to retrieve shouts for", 17 + "format": "at-uri" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "object", 25 + "properties": { 26 + "shouts": { 27 + "type": "array", 28 + "items": { 29 + "type": "ref", 30 + "ref": "app.rocksky.shout.defs#shoutViewBasic" 31 + } 32 + } 33 + } 34 + } 35 + } 36 + } 37 + } 38 + }
+29
lexicons/shout/removeShout.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.removeShout", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Remove a shout by its ID", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "id" 12 + ], 13 + "properties": { 14 + "id": { 15 + "type": "string", 16 + "description": "The ID of the shout to be removed" 17 + } 18 + } 19 + }, 20 + "output": { 21 + "encoding": "application/json", 22 + "schema": { 23 + "type": "ref", 24 + "ref": "app.rocksky.shout.defs#shoutView" 25 + } 26 + } 27 + } 28 + } 29 + }
+38
lexicons/shout/replyShout.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.replyShout", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Reply to a shout", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "shoutId", 14 + "message" 15 + ], 16 + "properties": { 17 + "shoutId": { 18 + "type": "string", 19 + "description": "The unique identifier of the shout to reply to" 20 + }, 21 + "message": { 22 + "type": "string", 23 + "description": "The content of the reply", 24 + "minLength": 1 25 + } 26 + } 27 + } 28 + }, 29 + "output": { 30 + "encoding": "application/json", 31 + "schema": { 32 + "type": "ref", 33 + "ref": "app.rocksky.shout.defs#shoutView" 34 + } 35 + } 36 + } 37 + } 38 + }
+37
lexicons/shout/reportShout.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout.reportShout", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Report a shout for moderation", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "shoutId" 14 + ], 15 + "properties": { 16 + "shoutId": { 17 + "type": "string", 18 + "description": "The unique identifier of the shout to report" 19 + }, 20 + "reason": { 21 + "type": "string", 22 + "description": "The reason for reporting the shout", 23 + "minLength": 1 24 + } 25 + } 26 + } 27 + }, 28 + "output": { 29 + "encoding": "application/json", 30 + "schema": { 31 + "type": "ref", 32 + "ref": "app.rocksky.shout.defs#shoutView" 33 + } 34 + } 35 + } 36 + } 37 + }
+40
lexicons/shout/shout.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.shout", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A declaration of a shout.", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "message", 13 + "createdAt", 14 + "subject" 15 + ], 16 + "properties": { 17 + "message": { 18 + "type": "string", 19 + "description": "The message of the shout.", 20 + "minLength": 1, 21 + "maxLength": 1000 22 + }, 23 + "createdAt": { 24 + "type": "string", 25 + "description": "The date when the shout was created.", 26 + "format": "datetime" 27 + }, 28 + "parent": { 29 + "type": "ref", 30 + "ref": "com.atproto.repo.strongRef" 31 + }, 32 + "subject": { 33 + "type": "ref", 34 + "ref": "com.atproto.repo.strongRef" 35 + } 36 + } 37 + } 38 + } 39 + } 40 + }
+16 -16
lexicons/song.json lexicons/song/song.json
··· 4 4 "defs": { 5 5 "main": { 6 6 "type": "record", 7 - "key": "tid", 8 7 "description": "A declaration of a song.", 8 + "key": "tid", 9 9 "record": { 10 10 "type": "object", 11 11 "required": [ ··· 17 17 "createdAt" 18 18 ], 19 19 "properties": { 20 - "trackNumber": { 21 - "type": "integer", 22 - "description": "The track number of the song in the album.", 23 - "minimum": 1 24 - }, 25 - "discNumber": { 26 - "type": "integer", 27 - "description": "The disc number of the song in the album.", 28 - "minimum": 1 29 - }, 30 20 "title": { 31 21 "type": "string", 32 22 "description": "The title of the song.", ··· 41 31 }, 42 32 "albumArtist": { 43 33 "type": "string", 44 - "description": "The artist of the album the song is from.", 34 + "description": "The album artist of the song.", 45 35 "minLength": 1, 46 36 "maxLength": 256 47 37 }, 48 38 "album": { 49 39 "type": "string", 50 - "description": "The album the song is from.", 40 + "description": "The album of the song.", 51 41 "minLength": 1, 52 42 "maxLength": 256 53 43 }, ··· 56 46 "description": "The duration of the song in seconds.", 57 47 "minimum": 1 58 48 }, 49 + "trackNumber": { 50 + "type": "integer", 51 + "description": "The track number of the song in the album.", 52 + "minimum": 1 53 + }, 54 + "discNumber": { 55 + "type": "integer", 56 + "description": "The disc number of the song in the album.", 57 + "minimum": 1 58 + }, 59 59 "releaseDate": { 60 60 "type": "string", 61 61 "description": "The release date of the song.", ··· 92 92 }, 93 93 "copyrightMessage": { 94 94 "type": "string", 95 - "description": "The copyright message.", 95 + "description": "The copyright message of the song.", 96 96 "maxLength": 256 97 97 }, 98 98 "wiki": { ··· 131 131 }, 132 132 "createdAt": { 133 133 "type": "string", 134 - "description": "The date the song was created.", 134 + "description": "The date when the song was created.", 135 135 "format": "datetime" 136 136 }, 137 137 "mbid": { ··· 147 147 } 148 148 } 149 149 } 150 - } 150 + }
+80
lexicons/song/createSong.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.song.createSong", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Create a new song", 8 + "input": { 9 + "encoding": "application/json", 10 + "schema": { 11 + "type": "object", 12 + "required": [ 13 + "title", 14 + "artist", 15 + "album", 16 + "albumArtist" 17 + ], 18 + "properties": { 19 + "title": { 20 + "type": "string", 21 + "description": "The title of the song" 22 + }, 23 + "artist": { 24 + "type": "string", 25 + "description": "The artist of the song" 26 + }, 27 + "albumArtist": { 28 + "type": "string", 29 + "description": "The album artist of the song, if different from the main artist" 30 + }, 31 + "album": { 32 + "type": "string", 33 + "description": "The album of the song, if applicable" 34 + }, 35 + "duration": { 36 + "type": "integer", 37 + "description": "The duration of the song in seconds" 38 + }, 39 + "mbId": { 40 + "type": "string", 41 + "description": "The MusicBrainz ID of the song, if available" 42 + }, 43 + "albumArt": { 44 + "type": "string", 45 + "description": "The URL of the album art for the song", 46 + "format": "uri" 47 + }, 48 + "trackNumber": { 49 + "type": "integer", 50 + "description": "The track number of the song in the album, if applicable" 51 + }, 52 + "releaseDate": { 53 + "type": "string", 54 + "description": "The release date of the song, formatted as YYYY-MM-DD" 55 + }, 56 + "year": { 57 + "type": "integer", 58 + "description": "The year the song was released" 59 + }, 60 + "discNumber": { 61 + "type": "integer", 62 + "description": "The disc number of the song in the album, if applicable" 63 + }, 64 + "lyrics": { 65 + "type": "string", 66 + "description": "The lyrics of the song, if available" 67 + } 68 + } 69 + } 70 + }, 71 + "output": { 72 + "encoding": "application/json", 73 + "schema": { 74 + "type": "ref", 75 + "ref": "app.rocksky.song.defs#songViewDetailed" 76 + } 77 + } 78 + } 79 + } 80 + }
+158
lexicons/song/defs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.song.defs", 4 + "defs": { 5 + "songViewBasic": { 6 + "type": "object", 7 + "properties": { 8 + "id": { 9 + "type": "string", 10 + "description": "The unique identifier of the song." 11 + }, 12 + "title": { 13 + "type": "string", 14 + "description": "The title of the song." 15 + }, 16 + "artist": { 17 + "type": "string", 18 + "description": "The artist of the song." 19 + }, 20 + "albumArtist": { 21 + "type": "string", 22 + "description": "The artist of the album the song belongs to." 23 + }, 24 + "albumArt": { 25 + "type": "string", 26 + "description": "The URL of the album art image.", 27 + "format": "uri" 28 + }, 29 + "uri": { 30 + "type": "string", 31 + "description": "The URI of the song.", 32 + "format": "at-uri" 33 + }, 34 + "album": { 35 + "type": "string", 36 + "description": "The album of the song." 37 + }, 38 + "duration": { 39 + "type": "integer", 40 + "description": "The duration of the song in milliseconds." 41 + }, 42 + "trackNumber": { 43 + "type": "integer", 44 + "description": "The track number of the song in the album." 45 + }, 46 + "discNumber": { 47 + "type": "integer", 48 + "description": "The disc number of the song in the album." 49 + }, 50 + "playCount": { 51 + "type": "integer", 52 + "description": "The number of times the song has been played.", 53 + "minimum": 0 54 + }, 55 + "uniqueListeners": { 56 + "type": "integer", 57 + "description": "The number of unique listeners who have played the song.", 58 + "minimum": 0 59 + }, 60 + "albumUri": { 61 + "type": "string", 62 + "description": "The URI of the album the song belongs to.", 63 + "format": "at-uri" 64 + }, 65 + "artistUri": { 66 + "type": "string", 67 + "description": "The URI of the artist of the song.", 68 + "format": "at-uri" 69 + }, 70 + "sha256": { 71 + "type": "string", 72 + "description": "The SHA256 hash of the song." 73 + }, 74 + "createdAt": { 75 + "type": "string", 76 + "description": "The timestamp when the song was created.", 77 + "format": "datetime" 78 + } 79 + } 80 + }, 81 + "songViewDetailed": { 82 + "type": "object", 83 + "properties": { 84 + "id": { 85 + "type": "string", 86 + "description": "The unique identifier of the song." 87 + }, 88 + "title": { 89 + "type": "string", 90 + "description": "The title of the song." 91 + }, 92 + "artist": { 93 + "type": "string", 94 + "description": "The artist of the song." 95 + }, 96 + "albumArtist": { 97 + "type": "string", 98 + "description": "The artist of the album the song belongs to." 99 + }, 100 + "albumArt": { 101 + "type": "string", 102 + "description": "The URL of the album art image.", 103 + "format": "uri" 104 + }, 105 + "uri": { 106 + "type": "string", 107 + "description": "The URI of the song.", 108 + "format": "at-uri" 109 + }, 110 + "album": { 111 + "type": "string", 112 + "description": "The album of the song." 113 + }, 114 + "duration": { 115 + "type": "integer", 116 + "description": "The duration of the song in milliseconds." 117 + }, 118 + "trackNumber": { 119 + "type": "integer", 120 + "description": "The track number of the song in the album." 121 + }, 122 + "discNumber": { 123 + "type": "integer", 124 + "description": "The disc number of the song in the album." 125 + }, 126 + "playCount": { 127 + "type": "integer", 128 + "description": "The number of times the song has been played.", 129 + "minimum": 0 130 + }, 131 + "uniqueListeners": { 132 + "type": "integer", 133 + "description": "The number of unique listeners who have played the song.", 134 + "minimum": 0 135 + }, 136 + "albumUri": { 137 + "type": "string", 138 + "description": "The URI of the album the song belongs to.", 139 + "format": "at-uri" 140 + }, 141 + "artistUri": { 142 + "type": "string", 143 + "description": "The URI of the artist of the song.", 144 + "format": "at-uri" 145 + }, 146 + "sha256": { 147 + "type": "string", 148 + "description": "The SHA256 hash of the song." 149 + }, 150 + "createdAt": { 151 + "type": "string", 152 + "description": "The timestamp when the song was created.", 153 + "format": "datetime" 154 + } 155 + } 156 + } 157 + } 158 + }
+30
lexicons/song/getSong.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.song.getSong", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get a song by its uri", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "uri" 12 + ], 13 + "properties": { 14 + "uri": { 15 + "type": "string", 16 + "description": "The unique identifier of the song to retrieve", 17 + "format": "at-uri" 18 + } 19 + } 20 + }, 21 + "output": { 22 + "encoding": "application/json", 23 + "schema": { 24 + "type": "ref", 25 + "ref": "app.rocksky.song.defs#songViewDetailed" 26 + } 27 + } 28 + } 29 + } 30 + }
+40
lexicons/song/getSongs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.song.getSongs", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get songs", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "limit": { 12 + "type": "integer", 13 + "description": "The maximum number of songs to return", 14 + "minimum": 1 15 + }, 16 + "offset": { 17 + "type": "integer", 18 + "description": "The offset for pagination", 19 + "minimum": 0 20 + } 21 + } 22 + }, 23 + "output": { 24 + "encoding": "application/json", 25 + "schema": { 26 + "type": "object", 27 + "properties": { 28 + "songs": { 29 + "type": "array", 30 + "items": { 31 + "type": "ref", 32 + "ref": "app.rocksky.song.defs#songViewBasic" 33 + } 34 + } 35 + } 36 + } 37 + } 38 + } 39 + } 40 + }
+140
lexicons/song/lovedSong.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.lovedSong", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A declaration of a song.", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": [ 12 + "title", 13 + "artist", 14 + "album", 15 + "duration", 16 + "createdAt" 17 + ], 18 + "properties": { 19 + "title": { 20 + "type": "string", 21 + "description": "The title of the song.", 22 + "minLength": 1, 23 + "maxLength": 512 24 + }, 25 + "artist": { 26 + "type": "string", 27 + "description": "The artist of the song.", 28 + "minLength": 1, 29 + "maxLength": 256 30 + }, 31 + "albumArtist": { 32 + "type": "string", 33 + "description": "The album artist of the song.", 34 + "minLength": 1, 35 + "maxLength": 256 36 + }, 37 + "album": { 38 + "type": "string", 39 + "description": "The album of the song.", 40 + "minLength": 1, 41 + "maxLength": 256 42 + }, 43 + "duration": { 44 + "type": "integer", 45 + "description": "The duration of the song in seconds.", 46 + "minimum": 1 47 + }, 48 + "trackNumber": { 49 + "type": "integer", 50 + "description": "The track number of the song in the album.", 51 + "minimum": 1 52 + }, 53 + "discNumber": { 54 + "type": "integer", 55 + "description": "The disc number of the song in the album.", 56 + "minimum": 1 57 + }, 58 + "releaseDate": { 59 + "type": "string", 60 + "description": "The release date of the song.", 61 + "format": "datetime" 62 + }, 63 + "year": { 64 + "type": "integer", 65 + "description": "The year the song was released." 66 + }, 67 + "genre": { 68 + "type": "string", 69 + "description": "The genre of the song.", 70 + "maxLength": 256 71 + }, 72 + "tags": { 73 + "type": "array", 74 + "description": "The tags of the song.", 75 + "items": { 76 + "type": "string", 77 + "minLength": 1, 78 + "maxLength": 256 79 + } 80 + }, 81 + "composer": { 82 + "type": "string", 83 + "description": "The composer of the song.", 84 + "maxLength": 256 85 + }, 86 + "lyrics": { 87 + "type": "string", 88 + "description": "The lyrics of the song.", 89 + "maxLength": 10000 90 + }, 91 + "copyrightMessage": { 92 + "type": "string", 93 + "description": "The copyright message of the song.", 94 + "minLength": 1, 95 + "maxLength": 256 96 + }, 97 + "wiki": { 98 + "type": "string", 99 + "description": "Informations about the song", 100 + "maxLength": 10000 101 + }, 102 + "albumArt": { 103 + "type": "blob", 104 + "description": "The album art of the song.", 105 + "accept": [ 106 + "image/png", 107 + "image/jpeg" 108 + ], 109 + "maxSize": 2000000 110 + }, 111 + "youtubeLink": { 112 + "type": "string", 113 + "description": "The YouTube link of the song.", 114 + "format": "uri" 115 + }, 116 + "spotifyLink": { 117 + "type": "string", 118 + "description": "The Spotify link of the song.", 119 + "format": "uri" 120 + }, 121 + "tidalLink": { 122 + "type": "string", 123 + "description": "The Tidal link of the song.", 124 + "format": "uri" 125 + }, 126 + "appleMusicLink": { 127 + "type": "string", 128 + "description": "The Apple Music link of the song.", 129 + "format": "uri" 130 + }, 131 + "createdAt": { 132 + "type": "string", 133 + "description": "The date when the song was created.", 134 + "format": "datetime" 135 + } 136 + } 137 + } 138 + } 139 + } 140 + }
+35
lexicons/spotify/defs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.spotify.defs", 4 + "defs": { 5 + "spotifyTrackView": { 6 + "type": "object", 7 + "properties": { 8 + "id": { 9 + "type": "string", 10 + "description": "The unique identifier of the Spotify track." 11 + }, 12 + "name": { 13 + "type": "string", 14 + "description": "The name of the track." 15 + }, 16 + "artist": { 17 + "type": "string", 18 + "description": "The name of the artist." 19 + }, 20 + "album": { 21 + "type": "string", 22 + "description": "The name of the album." 23 + }, 24 + "duration": { 25 + "type": "integer", 26 + "description": "The duration of the track in milliseconds." 27 + }, 28 + "previewUrl": { 29 + "type": "string", 30 + "description": "A URL to a preview of the track." 31 + } 32 + } 33 + } 34 + } 35 + }
+27
lexicons/spotify/getCurrentlyPlaying.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.spotify.getCurrentlyPlaying", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "description": "Get the currently playing track", 8 + "parameters": { 9 + "type": "params", 10 + "properties": { 11 + "actor": { 12 + "type": "string", 13 + "description": "Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user.", 14 + "format": "at-identifier" 15 + } 16 + } 17 + }, 18 + "output": { 19 + "encoding": "application/json", 20 + "schema": { 21 + "type": "ref", 22 + "ref": "app.rocksky.player.defs#currentlyPlayingViewDetailed" 23 + } 24 + } 25 + } 26 + } 27 + }
+10
lexicons/spotify/next.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.spotify.next", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Play the next track in the queue" 8 + } 9 + } 10 + }
+10
lexicons/spotify/pause.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.spotify.pause", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Pause the currently playing track" 8 + } 9 + } 10 + }
+10
lexicons/spotify/play.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.spotify.play", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Resume playback of the currently paused track" 8 + } 9 + } 10 + }
+10
lexicons/spotify/previous.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.spotify.previous", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Play the previous track in the queue" 8 + } 9 + } 10 + }
+22
lexicons/spotify/seek.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.spotify.seek", 4 + "defs": { 5 + "main": { 6 + "type": "procedure", 7 + "description": "Seek to a specific position in the currently playing track", 8 + "parameters": { 9 + "type": "params", 10 + "required": [ 11 + "position" 12 + ], 13 + "properties": { 14 + "position": { 15 + "type": "integer", 16 + "description": "The position in seconds to seek to" 17 + } 18 + } 19 + } 20 + } 21 + } 22 + }
+31
lexicons/stats/defs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.stats.defs", 4 + "defs": { 5 + "statsView": { 6 + "type": "object", 7 + "properties": { 8 + "scrobbles": { 9 + "type": "integer", 10 + "description": "The total number of scrobbles." 11 + }, 12 + "artists": { 13 + "type": "integer", 14 + "description": "The total number of unique artists scrobbled." 15 + }, 16 + "lovedTracks": { 17 + "type": "integer", 18 + "description": "The total number of tracks marked as loved." 19 + }, 20 + "albums": { 21 + "type": "integer", 22 + "description": "The total number of unique albums scrobbled." 23 + }, 24 + "tracks": { 25 + "type": "integer", 26 + "description": "The total number of unique tracks scrobbled." 27 + } 28 + } 29 + } 30 + } 31 + }
+29
lexicons/stats/getStats.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "app.rocksky.stats.getStats", 4 + "defs": { 5 + "main": { 6 + "type": "query", 7 + "parameters": { 8 + "type": "params", 9 + "required": [ 10 + "did" 11 + ], 12 + "properties": { 13 + "did": { 14 + "type": "string", 15 + "description": "The DID or handle of the user to get stats for.", 16 + "format": "at-identifier" 17 + } 18 + } 19 + }, 20 + "output": { 21 + "encoding": "application/json", 22 + "schema": { 23 + "type": "ref", 24 + "ref": "app.rocksky.stats.defs#statsView" 25 + } 26 + } 27 + } 28 + } 29 + }
+24
lexicons/strongRef.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "com.atproto.repo.strongRef", 4 + "description": "A URI with a content-hash fingerprint.", 5 + "defs": { 6 + "main": { 7 + "type": "object", 8 + "required": [ 9 + "uri", 10 + "cid" 11 + ], 12 + "properties": { 13 + "uri": { 14 + "type": "string", 15 + "format": "at-uri" 16 + }, 17 + "cid": { 18 + "type": "string", 19 + "format": "cid" 20 + } 21 + } 22 + } 23 + } 24 + }
+6 -2
package.json
··· 4 4 "type": "module", 5 5 "private": false, 6 6 "scripts": { 7 - "lexgen": "lex gen-server ./src/lexicon ./lexicons/*" 7 + "lexgen": "lex gen-server ./src/lexicon ./lexicons/**/* ./lexicons/*", 8 + "pkl:gen": "tsx ./scripts/pkl.ts" 8 9 }, 9 10 "devDependencies": { 10 11 "@types/bun": "latest" ··· 21 22 "@atproto/oauth-client-node": "^0.2.16", 22 23 "@atproto/sync": "^0.1.20", 23 24 "@atproto/syntax": "^0.4.0", 24 - "@atproto/xrpc-server": "^0.7.15" 25 + "@atproto/xrpc-server": "^0.7.15", 26 + "@pkl-community/pkl": "^0.28.2", 27 + "tsx": "^4.20.3", 28 + "zx": "^8.5.5" 25 29 } 26 30 }
+91
pkl/defs/actor/defs.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.actor.defs" 5 + defs = new Mapping<String, ObjectType> { 6 + ["profileViewDetailed"] { 7 + type = "object" 8 + properties { 9 + ["id"] = new StringType { 10 + type = "string" 11 + description = "The unique identifier of the actor." 12 + } 13 + 14 + ["did"] = new StringType { 15 + type = "string" 16 + description = "The DID of the actor." 17 + } 18 + 19 + ["handle"] = new StringType { 20 + type = "string" 21 + description = "The handle of the actor." 22 + } 23 + 24 + ["displayName"] = new StringType { 25 + type = "string" 26 + description = "The display name of the actor." 27 + } 28 + 29 + ["avatar"] = new StringType { 30 + type = "string" 31 + format = "uri" 32 + description = "The URL of the actor's avatar image." 33 + } 34 + 35 + ["createdAt"] = new StringType { 36 + type = "string" 37 + format = "datetime" 38 + description = "The date and time when the actor was created." 39 + } 40 + 41 + ["updatedAt"] = new StringType { 42 + type = "string" 43 + format = "datetime" 44 + description = "The date and time when the actor was last updated." 45 + } 46 + 47 + } 48 + } 49 + ["profileViewBasic"] { 50 + type = "object" 51 + properties { 52 + ["id"] = new StringType { 53 + type = "string" 54 + description = "The unique identifier of the actor." 55 + } 56 + 57 + ["did"] = new StringType { 58 + type = "string" 59 + description = "The DID of the actor." 60 + } 61 + 62 + ["handle"] = new StringType { 63 + type = "string" 64 + description = "The handle of the actor." 65 + } 66 + 67 + ["displayName"] = new StringType { 68 + type = "string" 69 + description = "The display name of the actor." 70 + } 71 + 72 + ["avatar"] = new StringType { 73 + type = "string" 74 + format = "uri" 75 + description = "The URL of the actor's avatar image." 76 + } 77 + 78 + ["createdAt"] = new StringType { 79 + type = "string" 80 + format = "datetime" 81 + description = "The date and time when the actor was created." 82 + } 83 + 84 + ["updatedAt"] = new StringType { 85 + type = "string" 86 + format = "datetime" 87 + description = "The date and time when the actor was last updated." 88 + } 89 + } 90 + } 91 + }
+43
pkl/defs/actor/getActorAlbums.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.actor.getActorAlbums" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get albums for an actor" 9 + parameters = new Params { 10 + required = List("did") 11 + properties { 12 + ["did"] = new StringType { 13 + description = "The DID or handle of the actor" 14 + format = "at-identifier" 15 + } 16 + ["limit"] = new IntegerType { 17 + type = "integer" 18 + description = "The maximum number of albums to return" 19 + minimum = 1 20 + } 21 + ["offset"] = new IntegerType { 22 + type = "integer" 23 + description = "The offset for pagination" 24 + minimum = 0 25 + } 26 + } 27 + } 28 + output { 29 + encoding = "application/json" 30 + schema = new ObjectType { 31 + type = "object" 32 + properties = new Mapping<String, Array> { 33 + ["albums"] = new Array { 34 + type = "array" 35 + items = new Ref { 36 + ref = "app.rocksky.album.defs#albumViewBasic" 37 + } 38 + } 39 + } 40 + } 41 + } 42 + } 43 + }
+43
pkl/defs/actor/getActorArtists.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.actor.getActorArtists" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get artists for an actor" 9 + parameters = new Params { 10 + required = List("did") 11 + properties { 12 + ["did"] = new StringType { 13 + description = "The DID or handle of the actor" 14 + format = "at-identifier" 15 + } 16 + ["limit"] = new IntegerType { 17 + type = "integer" 18 + description = "The maximum number of albums to return" 19 + minimum = 1 20 + } 21 + ["offset"] = new IntegerType { 22 + type = "integer" 23 + description = "The offset for pagination" 24 + minimum = 0 25 + } 26 + } 27 + } 28 + output { 29 + encoding = "application/json" 30 + schema = new ObjectType { 31 + type = "object" 32 + properties = new Mapping<String, Array> { 33 + ["artists"] = new Array { 34 + type = "array" 35 + items = new Ref { 36 + ref = "app.rocksky.artist.defs#artistViewBasic" 37 + } 38 + } 39 + } 40 + } 41 + } 42 + } 43 + }
+43
pkl/defs/actor/getActorLovedSongs.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.actor.getActorLovedSongs" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get loved songs for an actor" 9 + parameters = new Params { 10 + required = List("did") 11 + properties { 12 + ["did"] = new StringType { 13 + description = "The DID or handle of the actor" 14 + format = "at-identifier" 15 + } 16 + ["limit"] = new IntegerType { 17 + type = "integer" 18 + description = "The maximum number of albums to return" 19 + minimum = 1 20 + } 21 + ["offset"] = new IntegerType { 22 + type = "integer" 23 + description = "The offset for pagination" 24 + minimum = 0 25 + } 26 + } 27 + } 28 + output { 29 + encoding = "application/json" 30 + schema = new ObjectType { 31 + type = "object" 32 + properties = new Mapping<String, Array> { 33 + ["tracks"] = new Array { 34 + type = "array" 35 + items = new Ref { 36 + ref = "app.rocksky.song.defs#songViewBasic" 37 + } 38 + } 39 + } 40 + } 41 + } 42 + } 43 + }
+43
pkl/defs/actor/getActorPlaylists.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.actor.getActorPlaylists" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get playlists for an actor" 9 + parameters = new Params { 10 + required = List("did") 11 + properties { 12 + ["did"] = new StringType { 13 + description = "The DID or handle of the actor" 14 + format = "at-identifier" 15 + } 16 + ["limit"] = new IntegerType { 17 + type = "integer" 18 + description = "The maximum number of albums to return" 19 + minimum = 1 20 + } 21 + ["offset"] = new IntegerType { 22 + type = "integer" 23 + description = "The offset for pagination" 24 + minimum = 0 25 + } 26 + } 27 + } 28 + output { 29 + encoding = "application/json" 30 + schema = new ObjectType { 31 + type = "object" 32 + properties = new Mapping<String, Array> { 33 + ["playlists"] = new Array { 34 + type = "array" 35 + items = new Ref { 36 + ref = "app.rocksky.playlist.defs#playlistViewBasic" 37 + } 38 + } 39 + } 40 + } 41 + } 42 + } 43 + }
+43
pkl/defs/actor/getActorScrobbles.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.actor.getActorScrobbles" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get scrobbles for an actor" 9 + parameters = new Params { 10 + required = List("did") 11 + properties { 12 + ["did"] = new StringType { 13 + description = "The DID or handle of the actor" 14 + format = "at-identifier" 15 + } 16 + ["limit"] = new IntegerType { 17 + type = "integer" 18 + description = "The maximum number of albums to return" 19 + minimum = 1 20 + } 21 + ["offset"] = new IntegerType { 22 + type = "integer" 23 + description = "The offset for pagination" 24 + minimum = 0 25 + } 26 + } 27 + } 28 + output { 29 + encoding = "application/json" 30 + schema = new ObjectType { 31 + type = "object" 32 + properties = new Mapping<String, Array> { 33 + ["scrobbles"] = new Array { 34 + type = "array" 35 + items = new Ref { 36 + ref = "app.rocksky.scrobble.defs#scrobbleViewBasic" 37 + } 38 + } 39 + } 40 + } 41 + } 42 + } 43 + }
+43
pkl/defs/actor/getActorSongs.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.actor.getActorSongs" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get songs for an actor" 9 + parameters = new Params { 10 + required = List("did") 11 + properties { 12 + ["did"] = new StringType { 13 + description = "The DID or handle of the actor" 14 + format = "at-identifier" 15 + } 16 + ["limit"] = new IntegerType { 17 + type = "integer" 18 + description = "The maximum number of albums to return" 19 + minimum = 1 20 + } 21 + ["offset"] = new IntegerType { 22 + type = "integer" 23 + description = "The offset for pagination" 24 + minimum = 0 25 + } 26 + } 27 + } 28 + output { 29 + encoding = "application/json" 30 + schema = new ObjectType { 31 + type = "object" 32 + properties = new Mapping<String, Array> { 33 + ["songs"] = new Array { 34 + type = "array" 35 + items = new Ref { 36 + ref = "app.rocksky.song.defs#songViewBasic" 37 + } 38 + } 39 + } 40 + } 41 + } 42 + } 43 + }
+24
pkl/defs/actor/getProfile.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.actor.getProfile" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get the profile of an actor" 9 + parameters = new Params { 10 + properties { 11 + ["did"] = new StringType { 12 + description = "The DID or handle of the actor" 13 + format = "at-identifier" 14 + } 15 + } 16 + } 17 + output { 18 + encoding = "application/json" 19 + schema = new Ref { 20 + ref = "app.rocksky.actor.defs#profileViewDetailed" 21 + } 22 + } 23 + } 24 + }
+52
pkl/defs/actor/profile.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.bsky.actor.profile" 5 + defs = new Mapping<String, Record> { 6 + ["main"] { 7 + type = "record" 8 + description = "A declaration of a Bluesky account profile." 9 + key = "literal:self" 10 + `record` { 11 + type = "object" 12 + properties { 13 + ["displayName"] = new StringType { 14 + type = "string" 15 + maxGraphemes = 64 16 + maxLength = 640 17 + } 18 + ["description"] = new StringType { 19 + type = "string" 20 + description = "Free-form profile description text." 21 + maxGraphemes = 256 22 + maxLength = 2560 23 + } 24 + ["avatar"] = new Blob { 25 + type = "blob" 26 + description = "Small image to be displayed next to posts from account. AKA, 'profile picture'" 27 + accept = List("image/png", "image/jpeg") 28 + maxSize = 1000000 29 + } 30 + ["banner"] = new Blob { 31 + type = "blob" 32 + description = "Larger horizontal image to display behind profile view." 33 + accept = List("image/png", "image/jpeg") 34 + maxSize = 10000000 35 + } 36 + ["labels"] = new Union { 37 + type = "union" 38 + description = "Self-label values, specific to the Bluesky application, on the overall account." 39 + refs = List("com.atproto.label.defs#selfLabels") 40 + } 41 + ["joinedViaStarterPack"] = new Ref { 42 + type = "ref" 43 + ref = "com.atproto.repo.strongRef" 44 + } 45 + ["createdAt"] = new StringType { 46 + type = "string" 47 + format = "datetime" 48 + } 49 + } 50 + } 51 + } 52 + }
+99
pkl/defs/album/album.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.album" 5 + defs = new Mapping<String, Record> { 6 + ["main"] { 7 + type = "record" 8 + key = "tid" 9 + description = "A declaration of an album." 10 + `record` { 11 + type = "object" 12 + required = List("title", "artist", "createdAt") 13 + properties { 14 + ["title"] = new StringType { 15 + type = "string" 16 + description = "The title of the album." 17 + minLength = 1 18 + maxLength = 512 19 + } 20 + 21 + ["artist"] = new StringType { 22 + type = "string" 23 + description = "The artist of the album." 24 + minLength = 1 25 + maxLength = 256 26 + } 27 + 28 + ["duration"] = new IntegerType { 29 + type = "integer" 30 + description = "The duration of the album in seconds." 31 + } 32 + 33 + ["releaseDate"] = new StringType { 34 + type = "string" 35 + description = "The release date of the album." 36 + format = "datetime" 37 + } 38 + 39 + ["year"] = new IntegerType { 40 + type = "integer" 41 + description = "The year the album was released." 42 + } 43 + 44 + ["genre"] = new StringType { 45 + type = "string" 46 + description = "The genre of the album." 47 + maxLength = 256 48 + } 49 + 50 + ["albumArt"] = new Blob { 51 + type = "blob" 52 + description = "The album art of the album." 53 + accept = List("image/png", "image/jpeg") 54 + maxSize = 2000000 55 + } 56 + 57 + ["tags"] = new Array { 58 + type = "array" 59 + description = "The tags of the album." 60 + items = new StringType { 61 + type = "string" 62 + minLength = 1 63 + maxLength = 256 64 + } 65 + } 66 + 67 + ["youtubeLink"] = new StringType { 68 + type = "string" 69 + description = "The YouTube link of the album." 70 + format = "uri" 71 + } 72 + 73 + ["spotifyLink"] = new StringType { 74 + type = "string" 75 + description = "The Spotify link of the album." 76 + format = "uri" 77 + } 78 + 79 + ["tidalLink"] = new StringType { 80 + type = "string" 81 + description = "The tidal link of the album." 82 + format = "uri" 83 + } 84 + 85 + ["appleMusicLink"] = new StringType { 86 + type = "string" 87 + description = "The Apple Music link of the album." 88 + format = "uri" 89 + } 90 + 91 + ["createdAt"] = new StringType { 92 + type = "string" 93 + description = "The date and time when the album was created." 94 + format = "datetime" 95 + } 96 + } 97 + } 98 + } 99 + }
+142
pkl/defs/album/defs.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.album.defs" 5 + defs = new Mapping<String, ObjectType> { 6 + ["albumViewBasic"] { 7 + type = "object" 8 + properties { 9 + ["id"] = new StringType { 10 + type = "string" 11 + description = "The unique identifier of the album." 12 + } 13 + 14 + ["uri"] = new StringType { 15 + type = "string" 16 + format = "at-uri" 17 + description = "The URI of the album." 18 + } 19 + 20 + ["title"] = new StringType { 21 + type = "string" 22 + description = "The title of the album." 23 + } 24 + 25 + ["artist"] = new StringType { 26 + type = "string" 27 + description = "The artist of the album." 28 + } 29 + 30 + ["artistUri"] = new StringType { 31 + type = "string" 32 + format = "at-uri" 33 + description = "The URI of the album's artist." 34 + } 35 + 36 + ["year"] = new IntegerType { 37 + type = "integer" 38 + description = "The year the album was released." 39 + } 40 + 41 + ["albumArt"] = new StringType { 42 + type = "string" 43 + format = "uri" 44 + description = "The URL of the album art image." 45 + } 46 + 47 + ["releaseDate"] = new StringType { 48 + type = "string" 49 + description = "The release date of the album." 50 + } 51 + 52 + ["sha256"] = new StringType { 53 + type = "string" 54 + description = "The SHA256 hash of the album." 55 + } 56 + 57 + ["playCount"] = new IntegerType { 58 + type = "integer" 59 + description = "The number of times the album has been played." 60 + minimum = 0 61 + } 62 + 63 + ["uniqueListeners"] = new IntegerType { 64 + type = "integer" 65 + description = "The number of unique listeners who have played the album." 66 + minimum = 0 67 + } 68 + } 69 + } 70 + ["albumViewDetailed"] { 71 + type = "object" 72 + properties { 73 + ["id"] = new StringType { 74 + type = "string" 75 + description = "The unique identifier of the album." 76 + } 77 + 78 + ["uri"] = new StringType { 79 + type = "string" 80 + format = "at-uri" 81 + description = "The URI of the album." 82 + } 83 + 84 + ["title"] = new StringType { 85 + type = "string" 86 + description = "The title of the album." 87 + } 88 + 89 + ["artist"] = new StringType { 90 + type = "string" 91 + description = "The artist of the album." 92 + } 93 + 94 + ["artistUri"] = new StringType { 95 + type = "string" 96 + format = "at-uri" 97 + description = "The URI of the album's artist." 98 + } 99 + 100 + ["year"] = new IntegerType { 101 + type = "integer" 102 + description = "The year the album was released." 103 + } 104 + 105 + ["albumArt"] = new StringType { 106 + type = "string" 107 + format = "uri" 108 + description = "The URL of the album art image." 109 + } 110 + 111 + ["releaseDate"] = new StringType { 112 + type = "string" 113 + description = "The release date of the album." 114 + } 115 + 116 + ["sha256"] = new StringType { 117 + type = "string" 118 + description = "The SHA256 hash of the album." 119 + } 120 + 121 + ["playCount"] = new IntegerType { 122 + type = "integer" 123 + description = "The number of times the album has been played." 124 + minimum = 0 125 + } 126 + 127 + ["uniqueListeners"] = new IntegerType { 128 + type = "integer" 129 + description = "The number of unique listeners who have played the album." 130 + minimum = 0 131 + } 132 + 133 + ["tracks"] = new Array { 134 + type = "array" 135 + items = new Ref { 136 + type = "ref" 137 + ref = "app.rocksky.song.defs.songViewBasic" 138 + } 139 + } 140 + } 141 + } 142 + }
+28
pkl/defs/album/getAlbum.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.album.getAlbum" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get detailed album view" 9 + parameters { 10 + type = "params" 11 + required = List("uri") 12 + properties { 13 + ["uri"] = new StringType { 14 + type = "string" 15 + format = "at-uri" 16 + description = "The URI of the album to retrieve." 17 + } 18 + } 19 + } 20 + output { 21 + encoding = "application/json" 22 + schema = new Ref { 23 + type = "ref" 24 + ref = "app.rocksky.album.defs#albumViewDetailed" 25 + } 26 + } 27 + } 28 + }
+33
pkl/defs/album/getAlbumTracks.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.album.getAlbumTracks" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get tracks for an album" 9 + parameters = new Params { 10 + required = List("uri") 11 + properties { 12 + ["uri"] = new StringType { 13 + description = "The URI of the album to retrieve tracks from" 14 + format = "at-uri" 15 + } 16 + } 17 + } 18 + output { 19 + encoding = "application/json" 20 + schema = new ObjectType { 21 + type = "object" 22 + properties = new Mapping<String, Array> { 23 + ["tracks"] = new Array { 24 + type = "array" 25 + items = new Ref { 26 + ref = "app.rocksky.song.defs#songViewBasic" 27 + } 28 + } 29 + } 30 + } 31 + } 32 + } 33 + }
+38
pkl/defs/album/getAlbums.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.album.getAlbums" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get albums" 9 + parameters = new Params { 10 + properties { 11 + ["limit"] = new IntegerType { 12 + type = "integer" 13 + description = "The maximum number of albums to return" 14 + minimum = 1 15 + } 16 + ["offset"] = new IntegerType { 17 + type = "integer" 18 + description = "The offset for pagination" 19 + minimum = 0 20 + } 21 + } 22 + } 23 + output { 24 + encoding = "application/json" 25 + schema = new ObjectType { 26 + type = "object" 27 + properties = new Mapping<String, Array> { 28 + ["albums"] = new Array { 29 + type = "array" 30 + items = new Ref { 31 + ref = "app.rocksky.album.defs#albumViewBasic" 32 + } 33 + } 34 + } 35 + } 36 + } 37 + } 38 + }
+34
pkl/defs/apikey/createApikey.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.apikey.createApikey" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Create a new API key for the authenticated user" 9 + input { 10 + encoding = "application/json" 11 + schema = new ObjectType { 12 + type = "object" 13 + required = List("name") 14 + properties { 15 + ["name"] = new StringType { 16 + type = "string" 17 + description = "The name of the API key." 18 + } 19 + ["description"] = new StringType { 20 + type = "string" 21 + description = "A description for the API key." 22 + } 23 + } 24 + } 25 + } 26 + output { 27 + encoding = "application/json" 28 + schema = new Ref { 29 + type = "ref" 30 + ref = "app.rocksky.apikey.defs#apiKey" 31 + } 32 + } 33 + } 34 + }
+28
pkl/defs/apikey/def.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.apikey.defs" 5 + defs = new Mapping<String, ObjectType> { 6 + ["apiKeyView"] { 7 + type = "object" 8 + properties { 9 + ["id"] = new StringType { 10 + type = "string" 11 + description = "The unique identifier of the API key." 12 + } 13 + ["name"] = new StringType { 14 + type = "string" 15 + description = "The name of the API key." 16 + } 17 + ["description"] = new StringType { 18 + type = "string" 19 + description = "A description for the API key." 20 + } 21 + ["createdAt"] = new StringType { 22 + type = "string" 23 + format = "datetime" 24 + description = "The date and time when the API key was created." 25 + } 26 + } 27 + } 28 + }
+39
pkl/defs/apikey/getApikeys.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.apikey.getApikeys" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get a list of API keys for the authenticated user" 9 + parameters { 10 + type = "params" 11 + properties { 12 + ["offset"] = new IntegerType { 13 + type = "integer" 14 + description = "The number of API keys to skip before starting to collect the result set." 15 + } 16 + 17 + ["limit"] = new IntegerType { 18 + type = "integer" 19 + description = "The number of API keys to return per page." 20 + } 21 + 22 + } 23 + } 24 + output { 25 + encoding = "application/json" 26 + schema = new ObjectType { 27 + type = "object" 28 + properties = new Mapping<String, Array> { 29 + ["apiKeys"] = new Array { 30 + type = "array" 31 + items = new Ref { 32 + ref = "app.rocksky.apikey.defs#apikeyView" 33 + } 34 + } 35 + } 36 + } 37 + } 38 + } 39 + }
+27
pkl/defs/apikey/removeApikey.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.apikey.removeApikey" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Remove an API key for the authenticated user" 9 + parameters { 10 + type = "params" 11 + required = List("id") 12 + properties { 13 + ["id"] = new StringType { 14 + type = "string" 15 + description = "The ID of the API key to remove." 16 + } 17 + } 18 + } 19 + output { 20 + encoding = "application/json" 21 + schema = new Ref { 22 + type = "ref" 23 + ref = "app.rocksky.apikey.defs#apiKey" 24 + } 25 + } 26 + } 27 + }
+38
pkl/defs/apikey/updateApikey.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.apikey.updateApikey" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Update an existing API key for the authenticated user" 9 + input { 10 + encoding = "application/json" 11 + schema = new ObjectType { 12 + type = "object" 13 + required = List("id", "name") 14 + properties { 15 + ["id"] = new StringType { 16 + type = "string" 17 + description = "The ID of the API key to update." 18 + } 19 + ["name"] = new StringType { 20 + type = "string" 21 + description = "The new name of the API key." 22 + } 23 + ["description"] = new StringType { 24 + type = "string" 25 + description = "A new description for the API key." 26 + } 27 + } 28 + } 29 + } 30 + output { 31 + encoding = "application/json" 32 + schema = new Ref { 33 + type = "ref" 34 + ref = "app.rocksky.apikey.defs#apiKey" 35 + } 36 + } 37 + } 38 + }
+66
pkl/defs/artist/artist.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.artist" 5 + defs = new Mapping<String, Record> { 6 + ["main"] { 7 + type = "record" 8 + key = "tid" 9 + description = "A declaration of an artist." 10 + `record` { 11 + type = "object" 12 + required = List("name", "createdAt") 13 + properties { 14 + ["name"] = new StringType { 15 + type = "string" 16 + description = "The name of the artist." 17 + minLength = 1 18 + maxLength = 512 19 + } 20 + 21 + ["bio"] = new StringType { 22 + type = "string" 23 + description = "The biography of the artist." 24 + maxLength = 1000 25 + } 26 + 27 + ["picture"] = new Blob { 28 + type = "blob" 29 + description = "The picture of the artist." 30 + accept = List("image/png", "image/jpeg") 31 + maxSize = 2000000 32 + } 33 + 34 + ["tags"] = new Array { 35 + type = "array" 36 + description = "The tags of the artist." 37 + items = new StringType { 38 + type = "string" 39 + minLength = 1 40 + maxLength = 256 41 + } 42 + } 43 + ["born"] = new StringType { 44 + type = "string" 45 + description = "The birth date of the artist." 46 + format = "datetime" 47 + } 48 + ["died"] = new StringType { 49 + type = "string" 50 + description = "The death date of the artist." 51 + format = "datetime" 52 + } 53 + ["bornIn"] = new StringType { 54 + type = "string" 55 + description = "The birth place of the artist." 56 + maxLength = 256 57 + } 58 + ["createdAt"] = new StringType { 59 + type = "string" 60 + description = "The date when the artist was created." 61 + format = "datetime" 62 + } 63 + } 64 + } 65 + } 66 + }
+93
pkl/defs/artist/defs.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.artist.defs" 5 + defs = new Mapping<String, ObjectType> { 6 + ["artistViewBasic"] { 7 + type = "object" 8 + properties { 9 + ["id"] = new StringType { 10 + type = "string" 11 + description = "The unique identifier of the artist." 12 + } 13 + 14 + ["uri"] = new StringType { 15 + type = "string" 16 + format = "at-uri" 17 + description = "The URI of the artist." 18 + } 19 + 20 + ["name"] = new StringType { 21 + type = "string" 22 + description = "The name of the artist." 23 + } 24 + 25 + ["picture"] = new StringType { 26 + type = "string" 27 + description = "The picture of the artist." 28 + } 29 + 30 + ["sha256"] = new StringType { 31 + type = "string" 32 + description = "The SHA256 hash of the artist." 33 + } 34 + 35 + ["playCount"] = new IntegerType { 36 + type = "integer" 37 + description = "The number of times the artist has been played." 38 + minimum = 0 39 + } 40 + 41 + ["uniqueListeners"] = new IntegerType { 42 + type = "integer" 43 + description = "The number of unique listeners who have played the artist." 44 + minimum = 0 45 + } 46 + 47 + } 48 + } 49 + 50 + ["artistViewDetailed"] { 51 + type = "object" 52 + properties { 53 + ["id"] = new StringType { 54 + type = "string" 55 + description = "The unique identifier of the artist." 56 + } 57 + 58 + ["uri"] = new StringType { 59 + type = "string" 60 + format = "at-uri" 61 + description = "The URI of the artist." 62 + } 63 + 64 + ["name"] = new StringType { 65 + type = "string" 66 + description = "The name of the artist." 67 + } 68 + 69 + ["picture"] = new StringType { 70 + type = "string" 71 + description = "The picture of the artist." 72 + } 73 + 74 + ["sha256"] = new StringType { 75 + type = "string" 76 + description = "The SHA256 hash of the artist." 77 + } 78 + 79 + ["playCount"] = new IntegerType { 80 + type = "integer" 81 + description = "The number of times the artist has been played." 82 + minimum = 0 83 + } 84 + 85 + ["uniqueListeners"] = new IntegerType { 86 + type = "integer" 87 + description = "The number of unique listeners who have played the artist." 88 + minimum = 0 89 + } 90 + 91 + } 92 + } 93 + }
+26
pkl/defs/artist/getArtist.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.artist.getArtist" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get artist details" 9 + parameters = new Params { 10 + required = List("uri") 11 + properties { 12 + ["uri"] = new StringType { 13 + description = "The URI of the artist to retrieve details from" 14 + format = "at-uri" 15 + } 16 + } 17 + } 18 + output { 19 + encoding = "application/json" 20 + schema = new Ref { 21 + type = "ref" 22 + ref = "app.rocksky.artist.defs#artistViewDetailed" 23 + } 24 + } 25 + } 26 + }
+33
pkl/defs/artist/getArtistAlbums.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.artist.getArtistAlbums" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get artist's albums" 9 + parameters = new Params { 10 + required = List("uri") 11 + properties { 12 + ["uri"] = new StringType { 13 + description = "The URI of the artist to retrieve albums from" 14 + format = "at-uri" 15 + } 16 + } 17 + } 18 + output { 19 + encoding = "application/json" 20 + schema = new ObjectType { 21 + type = "object" 22 + properties = new Mapping<String, Array> { 23 + ["albums"] = new Array { 24 + type = "array" 25 + items = new Ref { 26 + ref = "app.rocksky.album.defs#albumViewBasic" 27 + } 28 + } 29 + } 30 + } 31 + } 32 + } 33 + }
+42
pkl/defs/artist/getArtistTracks.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.artist.getArtistTracks" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get artist's tracks" 9 + parameters = new Params { 10 + properties { 11 + ["uri"] = new StringType { 12 + description = "The URI of the artist to retrieve albums from" 13 + format = "at-uri" 14 + } 15 + ["limit"] = new IntegerType { 16 + type = "integer" 17 + description = "The maximum number of tracks to return" 18 + minimum = 1 19 + } 20 + ["offset"] = new IntegerType { 21 + type = "integer" 22 + description = "The offset for pagination" 23 + minimum = 0 24 + } 25 + } 26 + } 27 + output { 28 + encoding = "application/json" 29 + schema = new ObjectType { 30 + type = "object" 31 + properties = new Mapping<String, Array> { 32 + ["tracks"] = new Array { 33 + type = "array" 34 + items = new Ref { 35 + ref = "app.rocksky.song.defs#songViewBasic" 36 + } 37 + } 38 + } 39 + } 40 + } 41 + } 42 + }
+38
pkl/defs/artist/getArtists.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.artist.getArtists" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get artists" 9 + parameters = new Params { 10 + properties { 11 + ["limit"] = new IntegerType { 12 + type = "integer" 13 + description = "The maximum number of artists to return" 14 + minimum = 1 15 + } 16 + ["offset"] = new IntegerType { 17 + type = "integer" 18 + description = "The offset for pagination" 19 + minimum = 0 20 + } 21 + } 22 + } 23 + output { 24 + encoding = "application/json" 25 + schema = new ObjectType { 26 + type = "object" 27 + properties = new Mapping<String, Array> { 28 + ["artists"] = new Array { 29 + type = "array" 30 + items = new Ref { 31 + ref = "app.rocksky.artist.defs#artistViewBasic" 32 + } 33 + } 34 + } 35 + } 36 + } 37 + } 38 + }
+32
pkl/defs/charts/defs.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.charts.defs" 5 + defs = new Mapping<String, ObjectType> { 6 + ["chartsView"] { 7 + type = "object" 8 + properties { 9 + ["scrobbles"] = new Array { 10 + type = "array" 11 + items = new Ref { 12 + type = "ref" 13 + ref = "app.rocksky.charts.defs#scrobbleViewBasic" 14 + } 15 + } 16 + } 17 + } 18 + ["scrobbleViewBasic"] { 19 + type = "object" 20 + properties { 21 + ["date"] = new StringType { 22 + type = "string" 23 + description = "The date of the scrobble." 24 + format = "datetime" 25 + } 26 + ["count"] = new IntegerType { 27 + type = "integer" 28 + description = "The number of scrobbles on this date." 29 + } 30 + } 31 + } 32 + }
+39
pkl/defs/charts/getScrobblesChart.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.charts.getScrobblesChart" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get the scrobbles chart" 9 + parameters = new Params { 10 + properties { 11 + ["did"] = new StringType { 12 + description = "The DID or handle of the actor" 13 + format = "at-identifier" 14 + } 15 + 16 + ["artisturi"] = new StringType { 17 + description = "The URI of the artist to filter by" 18 + format = "at-uri" 19 + } 20 + 21 + ["albumuri"] = new StringType { 22 + description = "The URI of the album to filter by" 23 + format = "at-uri" 24 + } 25 + 26 + ["songuri"] = new StringType { 27 + description = "The URI of the track to filter by" 28 + format = "at-uri" 29 + } 30 + } 31 + } 32 + output { 33 + encoding = "application/json" 34 + schema = new Ref { 35 + ref = "app.rocksky.charts.defs#chartsView" 36 + } 37 + } 38 + } 39 + }
+65
pkl/defs/dropbox/defs.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.dropbox.defs" 5 + defs = new Mapping<String, ObjectType> { 6 + ["fileView"] { 7 + type = "object" 8 + properties { 9 + ["id"] = new StringType { 10 + type = "string" 11 + description = "The unique identifier of the file." 12 + } 13 + 14 + ["name"] = new StringType { 15 + type = "string" 16 + description = "The name of the file." 17 + } 18 + 19 + ["pathLower"] = new StringType { 20 + type = "string" 21 + description = "The lowercased path of the file." 22 + } 23 + 24 + ["pathDisplay"] = new StringType { 25 + type = "string" 26 + description = "The display path of the file." 27 + } 28 + 29 + ["clientModified"] = new StringType { 30 + type = "string" 31 + format = "datetime" 32 + description = "The last modified date and time of the file on the client." 33 + } 34 + 35 + ["serverModified"] = new StringType { 36 + type = "string" 37 + format = "datetime" 38 + description = "The last modified date and time of the file on the server." 39 + } 40 + } 41 + } 42 + ["fileListView"] { 43 + type = "object" 44 + properties { 45 + ["files"] = new Array { 46 + type = "array" 47 + items = new Ref { 48 + type = "ref" 49 + ref = "app.rocksky.dropbox.defs#fileView" 50 + } 51 + description = "A list of files in the Dropbox." 52 + } 53 + } 54 + } 55 + ["temporaryLinkView"] { 56 + type = "object" 57 + properties { 58 + ["link"] = new StringType { 59 + type = "string" 60 + format = "uri" 61 + description = "The temporary link to access the file." 62 + } 63 + } 64 + } 65 + }
+21
pkl/defs/dropbox/downloadFile.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.dropbox.downloadFile" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Download a file from Dropbox by its unique identifier" 9 + parameters = new Params { 10 + required = List("fileId") 11 + properties { 12 + ["fileId"] = new StringType { 13 + description = "The unique identifier of the file to download" 14 + } 15 + } 16 + } 17 + output { 18 + encoding = "application/octet-stream" 19 + } 20 + } 21 + }
+24
pkl/defs/dropbox/getFiles.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.dropbox.getFiles" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Retrieve a list of files from Dropbox" 9 + parameters { 10 + properties { 11 + ["at"] = new StringType { 12 + description = "Path to the Dropbox folder or root directory" 13 + } 14 + } 15 + } 16 + output { 17 + encoding = "application/json" 18 + schema = new Ref { 19 + type = "ref" 20 + ref = "app.rocksky.dropbox.defs#fileListView" 21 + } 22 + } 23 + } 24 + }
+25
pkl/defs/dropbox/getMetadata.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.dropbox.getMetadata" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Retrieve metadata of a file or folder in Dropbox" 9 + parameters { 10 + required = List("path") 11 + properties { 12 + ["path"] = new StringType { 13 + description = "Path to the file or folder in Dropbox" 14 + } 15 + } 16 + } 17 + output { 18 + encoding = "application/json" 19 + schema = new Ref { 20 + type = "ref" 21 + ref = "app.rocksky.dropbox.defs#fileView" 22 + } 23 + } 24 + } 25 + }
+25
pkl/defs/dropbox/getTemporaryLink.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.dropbox.getTemporaryLink" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Retrieve a temporary link to access a file in Dropbox" 9 + parameters { 10 + required = List("path") 11 + properties { 12 + ["path"] = new StringType { 13 + description = "Path to the file in Dropbox" 14 + } 15 + } 16 + } 17 + output { 18 + encoding = "application/json" 19 + schema = new Ref { 20 + type = "ref" 21 + ref = "app.rocksky.dropbox.defs#temporaryLinkView" 22 + } 23 + } 24 + } 25 + }
+106
pkl/defs/feed/defs.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.feed.defs" 5 + defs = new Mapping<String, ObjectType> { 6 + ["searchResultsView"] = new ObjectType { 7 + type = "object" 8 + properties { 9 + ["hits"] = new Array { 10 + type = "array" 11 + items = new Union { 12 + type = "union" 13 + refs = List( 14 + "app.rocksky.song.defs#songViewBasic", 15 + "app.rocksky.album.defs#albumViewBasic", 16 + "app.rocksky.artist.defs#artistViewBasic", 17 + "app.rocksky.playlist.defs#playlistViewBasic", 18 + "app.rocksky.actor.defs#profileViewBasic" 19 + ) 20 + } 21 + } 22 + ["processingTimeMs"] = new IntegerType { 23 + type = "integer" 24 + } 25 + ["limit"] = new IntegerType { 26 + type = "integer" 27 + } 28 + ["offset"] = new IntegerType { 29 + type = "integer" 30 + } 31 + ["estimatedTotalHits"] = new IntegerType { 32 + type = "integer" 33 + } 34 + } 35 + 36 + } 37 + ["nowPlayingView"] = new ObjectType { 38 + type = "object" 39 + properties { 40 + ["album"] = new StringType { 41 + type = "string" 42 + } 43 + ["albumArt"] = new StringType { 44 + type = "string" 45 + format = "uri" 46 + } 47 + ["albumArtist"] = new StringType { 48 + type = "string" 49 + } 50 + ["albumUri"] = new StringType { 51 + type = "string" 52 + format = "at-uri" 53 + } 54 + ["artist"] = new StringType { 55 + type = "string" 56 + } 57 + ["artistUri"] = new StringType { 58 + type = "string" 59 + format = "at-uri" 60 + } 61 + ["avatar"] = new StringType { 62 + type = "string" 63 + format = "uri" 64 + } 65 + ["createdAt"] = new StringType { 66 + type = "string" 67 + } 68 + ["did"] = new StringType { 69 + type = "string" 70 + format = "at-identifier" 71 + } 72 + ["handle"] = new StringType { 73 + type = "string" 74 + } 75 + ["id"] = new StringType { 76 + type = "string" 77 + } 78 + ["title"] = new StringType { 79 + type = "string" 80 + } 81 + ["trackId"] = new StringType { 82 + type = "string" 83 + } 84 + ["trackUri"] = new StringType { 85 + type = "string" 86 + format = "at-uri" 87 + } 88 + ["uri"] = new StringType { 89 + type = "string" 90 + format = "at-uri" 91 + } 92 + } 93 + } 94 + ["nowPlayingsView"] = new ObjectType { 95 + type = "object" 96 + properties { 97 + ["nowPlayings"] = new Array { 98 + type = "array" 99 + items = new Ref { 100 + type = "ref" 101 + ref = "app.rocksky.feed.defs#nowPlayingView" 102 + } 103 + } 104 + } 105 + } 106 + }
+27
pkl/defs/feed/getNowPlayings.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.feed.getNowPlayings" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get all currently playing tracks by users" 9 + parameters { 10 + type = "params" 11 + properties { 12 + ["size"] = new IntegerType { 13 + type = "integer" 14 + description = "The maximum number of now playing tracks to return." 15 + minimum = 1 16 + } 17 + } 18 + } 19 + output { 20 + encoding = "application/json" 21 + schema = new Ref { 22 + type = "ref" 23 + ref = "app.rocksky.feed.defs#nowPlayingsView" 24 + } 25 + } 26 + } 27 + }
+26
pkl/defs/feed/search.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.feed.search" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Search for content in the feed" 9 + parameters { 10 + type = "params" 11 + required = List("query") 12 + properties { 13 + ["query"] = new StringType { 14 + description = "The search query string" 15 + } 16 + } 17 + } 18 + output { 19 + encoding = "application/json" 20 + schema = new Ref { 21 + type = "ref" 22 + ref = "app.rocksky.feed.defs#searchResultsView" 23 + } 24 + } 25 + } 26 + }
+27
pkl/defs/googledrive/defs.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.googledrive.defs" 5 + defs = new Mapping<String, ObjectType> { 6 + ["fileView"] { 7 + type = "object" 8 + properties { 9 + ["id"] = new StringType { 10 + type = "string" 11 + description = "The unique identifier of the file." 12 + } 13 + } 14 + } 15 + ["fileListView"] { 16 + type = "object" 17 + properties { 18 + ["files"] = new Array { 19 + type = "array" 20 + items = new Ref { 21 + type = "ref" 22 + ref = "app.rocksky.googledrive.defs#fileView" 23 + } 24 + } 25 + } 26 + } 27 + }
+21
pkl/defs/googledrive/downloadFile.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.googledrive.downloadFile" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Download a file from Google Drive by its unique identifier" 9 + parameters = new Params { 10 + required = List("fileId") 11 + properties { 12 + ["fileId"] = new StringType { 13 + description = "The unique identifier of the file to download" 14 + } 15 + } 16 + } 17 + output { 18 + encoding = "application/octet-stream" 19 + } 20 + } 21 + }
+24
pkl/defs/googledrive/getFile.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.googledrive.getFile" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get a file from Google Drive by its unique identifier" 9 + parameters = new Params { 10 + required = List("fileId") 11 + properties { 12 + ["fileId"] = new StringType { 13 + description = "The unique identifier of the file to retrieve" 14 + } 15 + } 16 + } 17 + output { 18 + encoding = "application/json" 19 + schema = new Ref { 20 + ref = "app.rocksky.googledrive.defs#fileView" 21 + } 22 + } 23 + } 24 + }
+25
pkl/defs/googledrive/getFiles.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.googledrive.getFiles" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get a list of files from Google Drive" 9 + parameters = new Params { 10 + properties { 11 + ["at"] = new StringType { 12 + description = "Path to the Google Drive folder or root directory" 13 + } 14 + } 15 + } 16 + 17 + output { 18 + encoding = "application/json" 19 + schema = new Ref { 20 + type = "ref" 21 + ref = "app.rocksky.googledrive.defs#fileListView" 22 + } 23 + } 24 + } 25 + }
+30
pkl/defs/like/dislikeShout.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.like.dislikeShout" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Dislike a shout" 9 + input { 10 + encoding = "application/json" 11 + schema { 12 + type = "object" 13 + properties { 14 + ["uri"] = new StringType { 15 + type = "string" 16 + description = "The unique identifier of the shout to dislike" 17 + format = "at-uri" 18 + } 19 + } 20 + } 21 + } 22 + output { 23 + encoding = "application/json" 24 + schema = new Ref { 25 + type = "ref" 26 + ref = "app.rocksky.shout.defs#shoutView" 27 + } 28 + } 29 + } 30 + }
+30
pkl/defs/like/dislikeSong.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.like.dislikeSong" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Dislike a song" 9 + input { 10 + encoding = "application/json" 11 + schema { 12 + type = "object" 13 + properties { 14 + ["uri"] = new StringType { 15 + type = "string" 16 + description = "The unique identifier of the song to dislike" 17 + format = "at-uri" 18 + } 19 + } 20 + } 21 + } 22 + output { 23 + encoding = "application/json" 24 + schema = new Ref { 25 + type = "ref" 26 + ref = "app.rocksky.song.defs#songViewDetailed" 27 + } 28 + } 29 + } 30 + }
+27
pkl/defs/like/like.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.like" 5 + defs = new Mapping<String, Record> { 6 + ["main"] { 7 + type = "record" 8 + key = "tid" 9 + description = "A declaration of a like." 10 + `record` { 11 + type = "object" 12 + required = List("createdAt", "subject") 13 + properties { 14 + ["createdAt"] = new StringType { 15 + type = "string" 16 + description = "The date when the like was created." 17 + format = "datetime" 18 + } 19 + 20 + ["subject"] = new Ref { 21 + type = "ref" 22 + ref = "com.atproto.repo.strongRef" 23 + } 24 + } 25 + } 26 + } 27 + }
+30
pkl/defs/like/likeShout.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.like.likeShout" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Like a shout" 9 + input { 10 + encoding = "application/json" 11 + schema { 12 + type = "object" 13 + properties { 14 + ["uri"] = new StringType { 15 + type = "string" 16 + description = "The unique identifier of the shout to like" 17 + format = "at-uri" 18 + } 19 + } 20 + } 21 + } 22 + output { 23 + encoding = "application/json" 24 + schema = new Ref { 25 + type = "ref" 26 + ref = "app.rocksky.shout.defs#shoutView" 27 + } 28 + } 29 + } 30 + }
+30
pkl/defs/like/likeSong.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.like.likeSong" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Like a song" 9 + input { 10 + encoding = "application/json" 11 + schema { 12 + type = "object" 13 + properties { 14 + ["uri"] = new StringType { 15 + type = "string" 16 + description = "The unique identifier of the song to like" 17 + format = "at-uri" 18 + } 19 + } 20 + } 21 + } 22 + output { 23 + encoding = "application/json" 24 + schema = new Ref { 25 + type = "ref" 26 + ref = "app.rocksky.song.defs#songViewDetailed" 27 + } 28 + } 29 + } 30 + }
+15
pkl/defs/player/defs.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.player.defs" 5 + defs = new Mapping<String, ObjectType> { 6 + ["currentlyPlayingViewDetailed"] { 7 + type = "object" 8 + properties { 9 + ["title"] = new StringType { 10 + type = "string" 11 + description = "The title of the currently playing track" 12 + } 13 + } 14 + } 15 + }
+27
pkl/defs/player/getCurrentlyPlaying.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.player.getCurrentlyPlaying" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get the currently playing track" 9 + parameters { 10 + type = "params" 11 + properties { 12 + ["actor"] = new StringType { 13 + type = "string" 14 + format = "at-identifier" 15 + description = "Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user." 16 + } 17 + } 18 + } 19 + output { 20 + encoding = "application/json" 21 + schema = new Ref { 22 + type = "ref" 23 + ref = "app.rocksky.player.defs#currentlyPlayingViewDetailed" 24 + } 25 + } 26 + } 27 + }
+10
pkl/defs/player/next.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.player.next" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Play the next track in the queue" 9 + } 10 + }
+10
pkl/defs/player/pause.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.player.pause" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Pause the currently playing track" 9 + } 10 + }
+10
pkl/defs/player/play.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.player.play" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Resume playback of the currently paused track" 9 + } 10 + }
+10
pkl/defs/player/previous.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.player.previous" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Play the previous track in the queue" 9 + } 10 + }
+20
pkl/defs/player/seek.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.player.seek" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Seek to a specific position in the currently playing track" 9 + parameters { 10 + type = "params" 11 + required = List("position") 12 + properties = new Mapping<String, IntegerType> { 13 + ["position"] { 14 + type = "integer" 15 + description = "The position in seconds to seek to" 16 + } 17 + } 18 + } 19 + } 20 + }
+143
pkl/defs/playlist/defs.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.playlist.defs" 5 + defs = new Mapping<String, ObjectType> { 6 + ["playlistViewDetailed"] { 7 + type = "object" 8 + description = "Detailed view of a playlist, including its tracks and metadata" 9 + properties { 10 + ["id"] = new StringType { 11 + type = "string" 12 + description = "The unique identifier of the playlist." 13 + } 14 + 15 + ["title"] = new StringType { 16 + type = "string" 17 + description = "The title of the playlist." 18 + } 19 + 20 + ["uri"] = new StringType { 21 + type = "string" 22 + format = "at-uri" 23 + description = "The URI of the playlist." 24 + } 25 + 26 + ["curatorDid"] = new StringType { 27 + type = "string" 28 + description = "The DID of the curator of the playlist." 29 + format = "at-identifier" 30 + } 31 + 32 + ["curatorHandle"] = new StringType { 33 + type = "string" 34 + description = "The handle of the curator of the playlist." 35 + format = "at-identifier" 36 + } 37 + 38 + ["curatorName"] = new StringType { 39 + type = "string" 40 + description = "The name of the curator of the playlist." 41 + } 42 + 43 + ["curatorAvatarUrl"] = new StringType { 44 + type = "string" 45 + format = "uri" 46 + description = "The URL of the avatar image of the curator." 47 + } 48 + 49 + ["description"] = new StringType { 50 + type = "string" 51 + description = "A description of the playlist." 52 + } 53 + 54 + ["coverImageUrl"] = new StringType { 55 + type = "string" 56 + format = "uri" 57 + description = "The URL of the cover image for the playlist." 58 + } 59 + 60 + ["createdAt"] = new StringType { 61 + type = "string" 62 + format = "datetime" 63 + description = "The date and time when the playlist was created." 64 + } 65 + 66 + ["tracks"] = new Array { 67 + description = "A list of tracks in the playlist." 68 + items = new Ref { 69 + type = "ref" 70 + ref = "app.rocksky.song.defs#songViewBasic" 71 + } 72 + } 73 + } 74 + } 75 + 76 + ["playlistViewBasic"] { 77 + type = "object" 78 + description = "Basic view of a playlist, including its metadata" 79 + properties { 80 + ["id"] = new StringType { 81 + type = "string" 82 + description = "The unique identifier of the playlist." 83 + } 84 + 85 + ["title"] = new StringType { 86 + type = "string" 87 + description = "The title of the playlist." 88 + } 89 + 90 + ["uri"] = new StringType { 91 + type = "string" 92 + format = "at-uri" 93 + description = "The URI of the playlist." 94 + } 95 + 96 + ["curatorDid"] = new StringType { 97 + type = "string" 98 + description = "The DID of the curator of the playlist." 99 + format = "at-identifier" 100 + } 101 + 102 + ["curatorHandle"] = new StringType { 103 + type = "string" 104 + description = "The handle of the curator of the playlist." 105 + format = "at-identifier" 106 + } 107 + 108 + ["curatorName"] = new StringType { 109 + type = "string" 110 + description = "The name of the curator of the playlist." 111 + } 112 + 113 + ["curatorAvatarUrl"] = new StringType { 114 + type = "string" 115 + format = "uri" 116 + description = "The URL of the avatar image of the curator." 117 + } 118 + 119 + ["description"] = new StringType { 120 + type = "string" 121 + description = "A description of the playlist." 122 + } 123 + 124 + ["coverImageUrl"] = new StringType { 125 + type = "string" 126 + format = "uri" 127 + description = "The URL of the cover image for the playlist." 128 + } 129 + 130 + ["createdAt"] = new StringType { 131 + type = "string" 132 + format = "datetime" 133 + description = "The date and time when the playlist was created." 134 + } 135 + 136 + ["trackCount"] = new IntegerType { 137 + type = "integer" 138 + description = "The number of tracks in the playlist." 139 + minimum = 0 140 + } 141 + } 142 + } 143 + }
+28
pkl/defs/playlist/getPlaylist.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.playlist.getPlaylist" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Retrieve a playlist by its ID" 9 + parameters { 10 + type = "params" 11 + required = List("uri") 12 + properties { 13 + ["uri"] = new StringType { 14 + type = "string" 15 + format = "at-uri" 16 + description = "The URI of the playlist to retrieve." 17 + } 18 + } 19 + } 20 + output { 21 + encoding = "application/json" 22 + schema = new Ref { 23 + type = "ref" 24 + ref = "app.rocksky.playlist.defs#playlistViewDetailed" 25 + } 26 + } 27 + } 28 + }
+37
pkl/defs/playlist/getPlaylists.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.playlist.getPlaylists" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Retrieve a list of playlists" 9 + parameters { 10 + type = "params" 11 + properties { 12 + ["limit"] = new IntegerType { 13 + type = "integer" 14 + description = "The maximum number of playlists to return." 15 + } 16 + ["offset"] = new IntegerType { 17 + type = "integer" 18 + description = "The offset for pagination, used to skip a number of playlists." 19 + } 20 + } 21 + } 22 + output { 23 + encoding = "application/json" 24 + schema = new ObjectType { 25 + type = "object" 26 + properties = new Mapping<String, Array> { 27 + ["playlists"] = new Array { 28 + type = "array" 29 + items = new Ref { 30 + ref = "app.rocksky.playlist.defs#playlistViewBasic" 31 + } 32 + } 33 + } 34 + } 35 + } 36 + } 37 + }
+64
pkl/defs/playlist/playlist.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.playlist" 5 + defs = new Mapping<String, Record> { 6 + ["main"] { 7 + type = "record" 8 + key = "tid" 9 + description = "A declaration of a playlist." 10 + `record` { 11 + type = "object" 12 + required = List("name", "createdAt") 13 + properties { 14 + ["name"] = new StringType { 15 + type = "string" 16 + description = "The name of the playlist." 17 + minLength = 1 18 + maxLength = 512 19 + } 20 + ["description"] = new StringType { 21 + type = "string" 22 + description = "The playlist description." 23 + minLength = 1 24 + maxLength = 256 25 + } 26 + ["picture"] = new Blob { 27 + type = "blob" 28 + description = "The picture of the playlist." 29 + accept = List("image/png", "image/jpeg") 30 + maxSize = 2000000 31 + } 32 + ["tracks"] = new Array { 33 + type = "array" 34 + description = "The tracks in the playlist." 35 + items = new Ref { 36 + type = "ref" 37 + ref = "app.rocksky.song#record" 38 + } 39 + } 40 + ["createdAt"] = new StringType { 41 + type = "string" 42 + description = "The date the playlist was created." 43 + format = "datetime" 44 + } 45 + ["spotifyLink"] = new StringType { 46 + type = "string" 47 + description = "The Spotify link of the playlist." 48 + } 49 + ["tidalLink"] = new StringType { 50 + type = "string" 51 + description = "The Tidal link of the playlist." 52 + } 53 + ["youtubeLink"] = new StringType { 54 + type = "string" 55 + description = "The YouTube link of the playlist." 56 + } 57 + ["appleMusicLink"] = new StringType { 58 + type = "string" 59 + description = "The Apple Music link of the playlist." 60 + } 61 + } 62 + } 63 + } 64 + }
+78
pkl/defs/radio/defs.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.radio.defs" 5 + defs = new Mapping<String, ObjectType> { 6 + ["radioViewBasic"] { 7 + type = "object" 8 + properties { 9 + ["id"] = new StringType { 10 + type = "string" 11 + description = "The unique identifier of the radio." 12 + } 13 + 14 + ["name"] = new StringType { 15 + type = "string" 16 + description = "The name of the radio." 17 + } 18 + 19 + ["description"] = new StringType { 20 + type = "string" 21 + description = "A brief description of the radio." 22 + } 23 + 24 + ["createdAt"] = new StringType { 25 + type = "string" 26 + format = "datetime" 27 + description = "The date and time when the radio was created." 28 + } 29 + } 30 + } 31 + ["radioViewDetailed"] { 32 + type = "object" 33 + properties { 34 + ["id"] = new StringType { 35 + type = "string" 36 + description = "The unique identifier of the radio." 37 + } 38 + 39 + ["name"] = new StringType { 40 + type = "string" 41 + description = "The name of the radio." 42 + } 43 + 44 + ["description"] = new StringType { 45 + type = "string" 46 + description = "A brief description of the radio." 47 + } 48 + 49 + ["website"] = new StringType { 50 + type = "string" 51 + format = "uri" 52 + description = "The website of the radio." 53 + } 54 + 55 + ["url"] = new StringType { 56 + type = "string" 57 + format = "uri" 58 + description = "The streaming URL of the radio." 59 + } 60 + 61 + ["genre"] = new StringType { 62 + type = "string" 63 + description = "The genre of the radio." 64 + } 65 + 66 + ["logo"] = new StringType { 67 + type = "string" 68 + description = "The logo of the radio station." 69 + } 70 + 71 + ["createdAt"] = new StringType { 72 + type = "string" 73 + format = "datetime" 74 + description = "The date and time when the radio was created." 75 + } 76 + } 77 + } 78 + }
+63
pkl/defs/radio/radio.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.radio" 5 + defs = new Mapping<String, Record> { 6 + ["main"] { 7 + type = "record" 8 + key = "tid" 9 + description = "A declaration of a radio station." 10 + `record` { 11 + type = "object" 12 + required = List("name", "url", "createdAt") 13 + properties { 14 + ["name"] = new StringType { 15 + type = "string" 16 + description = "The name of the radio station." 17 + minLength = 1 18 + maxLength = 512 19 + } 20 + 21 + ["url"] = new StringType { 22 + type = "string" 23 + description = "The URL of the radio station." 24 + format = "uri" 25 + } 26 + 27 + ["description"] = new StringType { 28 + type = "string" 29 + description = "A description of the radio station." 30 + minLength = 1 31 + maxLength = 1000 32 + } 33 + 34 + ["genre"] = new StringType { 35 + type = "string" 36 + description = "The genre of the radio station." 37 + minLength = 1 38 + maxLength = 256 39 + } 40 + 41 + ["logo"] = new Blob { 42 + type = "blob" 43 + description = "The logo of the radio station." 44 + accept = List("image/png", "image/jpeg") 45 + maxSize = 2000000 46 + } 47 + 48 + ["website"] = new StringType { 49 + type = "string" 50 + description = "The website of the radio station." 51 + format = "uri" 52 + } 53 + 54 + ["createdAt"] = new StringType { 55 + type = "string" 56 + description = "The date when the radio station was created." 57 + format = "datetime" 58 + } 59 + 60 + } 61 + } 62 + } 63 + }
+122
pkl/defs/scrobble/createScrobble.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.scrobble.createScrobble" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Create a new scrobble" 9 + input { 10 + encoding = "application/json" 11 + schema { 12 + type = "object" 13 + required = List("title", "artist") 14 + properties { 15 + ["title"] = new StringType { 16 + type = "string" 17 + description = "The title of the track being scrobbled" 18 + } 19 + ["artist"] = new StringType { 20 + type = "string" 21 + description = "The artist of the track being scrobbled" 22 + } 23 + ["album"] = new StringType { 24 + type = "string" 25 + description = "The album of the track being scrobbled" 26 + } 27 + ["duration"] = new IntegerType { 28 + type = "integer" 29 + description = "The duration of the track in seconds" 30 + } 31 + ["mbId"] = new StringType { 32 + type = "string" 33 + description = "The MusicBrainz ID of the track, if available" 34 + } 35 + ["albumArt"] = new StringType { 36 + type = "string" 37 + description = "The URL of the album art for the track" 38 + format = "uri" 39 + } 40 + ["trackNumber"] = new IntegerType { 41 + type = "integer" 42 + description = "The track number of the track in the album" 43 + } 44 + ["releaseDate"] = new StringType { 45 + type = "string" 46 + description = "The release date of the track, formatted as YYYY-MM-DD" 47 + } 48 + ["year"] = new IntegerType { 49 + type = "integer" 50 + description = "The year the track was released" 51 + } 52 + ["discNumber"] = new IntegerType { 53 + type = "integer" 54 + description = "The disc number of the track in the album, if applicable" 55 + } 56 + ["lyrics"] = new StringType { 57 + type = "string" 58 + description = "The lyrics of the track, if available" 59 + } 60 + ["composer"] = new StringType { 61 + type = "string" 62 + description = "The composer of the track, if available" 63 + } 64 + ["copyrightMessage"] = new StringType { 65 + type = "string" 66 + description = "The copyright message for the track, if available" 67 + } 68 + ["label"] = new StringType { 69 + type = "string" 70 + description = "The record label of the track, if available" 71 + } 72 + ["artistPicture"] = new StringType { 73 + type = "string" 74 + description = "The URL of the artist's picture, if available" 75 + format = "uri" 76 + } 77 + ["spotifyLink"] = new StringType { 78 + type = "string" 79 + description = "The Spotify link for the track, if available" 80 + format = "uri" 81 + } 82 + ["lastfmLink"] = new StringType { 83 + type = "string" 84 + description = "The Last.fm link for the track, if available" 85 + format = "uri" 86 + } 87 + ["tidalLink"] = new StringType { 88 + type = "string" 89 + description = "The Tidal link for the track, if available" 90 + format = "uri" 91 + } 92 + ["appleMusicLink"] = new StringType { 93 + type = "string" 94 + description = "The Apple Music link for the track, if available" 95 + format = "uri" 96 + } 97 + ["youtubeLink"] = new StringType { 98 + type = "string" 99 + description = "The Youtube link for the track, if available" 100 + format = "uri" 101 + } 102 + ["deezerLink"] = new StringType { 103 + type = "string" 104 + description = "The Deezer link for the track, if available" 105 + format = "uri" 106 + } 107 + ["timestamp"] = new IntegerType { 108 + type = "integer" 109 + description = "The timestamp of the scrobble in milliseconds since epoch" 110 + } 111 + } 112 + } 113 + } 114 + output { 115 + encoding = "application/json" 116 + schema = new Ref { 117 + type = "ref" 118 + ref = "app.rocksky.scrobble.defs#scrobbleViewBasic" 119 + } 120 + } 121 + } 122 + }
+142
pkl/defs/scrobble/defs.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.scrobble.defs" 5 + defs = new Mapping<String, ObjectType> { 6 + ["scrobbleViewBasic"] { 7 + type = "object" 8 + properties { 9 + ["id"] = new StringType { 10 + type = "string" 11 + description = "The unique identifier of the scrobble." 12 + } 13 + ["user"] = new StringType { 14 + type = "string" 15 + description = "The handle of the user who created the scrobble." 16 + } 17 + ["title"] = new StringType { 18 + type = "string" 19 + description = "The title of the scrobble." 20 + } 21 + 22 + ["artist"] = new StringType { 23 + type = "string" 24 + description = "The artist of the song." 25 + } 26 + 27 + ["artistUri"] = new StringType { 28 + type = "string" 29 + description = "The URI of the artist." 30 + format = "at-uri" 31 + } 32 + 33 + ["album"] = new StringType { 34 + type = "string" 35 + description = "The album of the song." 36 + } 37 + 38 + ["albumUri"] = new StringType { 39 + type = "string" 40 + description = "The URI of the album." 41 + format = "at-uri" 42 + } 43 + 44 + ["cover"] = new StringType { 45 + type = "string" 46 + description = "The album art URL of the song." 47 + format = "uri" 48 + } 49 + 50 + ["date"] = new StringType { 51 + type = "string" 52 + format = "datetime" 53 + description = "The timestamp when the scrobble was created." 54 + } 55 + 56 + ["uri"] = new StringType { 57 + type = "string" 58 + format = "uri" 59 + description = "The URI of the scrobble." 60 + } 61 + 62 + ["sha256"] = new StringType { 63 + type = "string" 64 + description = "The SHA256 hash of the scrobble data." 65 + } 66 + 67 + } 68 + } 69 + 70 + ["scrobbleViewDetailed"] { 71 + type = "object" 72 + properties { 73 + ["id"] = new StringType { 74 + type = "string" 75 + description = "The unique identifier of the scrobble." 76 + } 77 + ["user"] = new StringType { 78 + type = "string" 79 + description = "The handle of the user who created the scrobble." 80 + } 81 + ["title"] = new StringType { 82 + type = "string" 83 + description = "The title of the scrobble." 84 + } 85 + 86 + ["artist"] = new StringType { 87 + type = "string" 88 + description = "The artist of the song." 89 + } 90 + 91 + ["artistUri"] = new StringType { 92 + type = "string" 93 + description = "The URI of the artist." 94 + format = "at-uri" 95 + } 96 + 97 + ["album"] = new StringType { 98 + type = "string" 99 + description = "The album of the song." 100 + } 101 + 102 + ["albumUri"] = new StringType { 103 + type = "string" 104 + description = "The URI of the album." 105 + format = "at-uri" 106 + } 107 + 108 + ["cover"] = new StringType { 109 + type = "string" 110 + description = "The album art URL of the song." 111 + format = "uri" 112 + } 113 + 114 + ["date"] = new StringType { 115 + type = "string" 116 + format = "datetime" 117 + description = "The timestamp when the scrobble was created." 118 + } 119 + 120 + ["uri"] = new StringType { 121 + type = "string" 122 + format = "uri" 123 + description = "The URI of the scrobble." 124 + } 125 + 126 + ["sha256"] = new StringType { 127 + type = "string" 128 + description = "The SHA256 hash of the scrobble data." 129 + } 130 + 131 + ["listeners"] = new IntegerType { 132 + type = "integer" 133 + description = "The number of listeners" 134 + } 135 + 136 + ["scrobbles"] = new IntegerType { 137 + type = "integer" 138 + description = "The number of scrobbles for this song" 139 + } 140 + } 141 + } 142 + }
+25
pkl/defs/scrobble/getScrobble.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.scrobble.getScrobble" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get a scrobble by its unique identifier" 9 + parameters = new Params { 10 + required = List("uri") 11 + properties { 12 + ["uri"] = new StringType { 13 + description = "The unique identifier of the scrobble" 14 + format = "at-uri" 15 + } 16 + } 17 + } 18 + output { 19 + encoding = "application/json" 20 + schema = new Ref { 21 + ref = "app.rocksky.scrobble.defs#scrobbleViewDetailed" 22 + } 23 + } 24 + } 25 + }
+42
pkl/defs/scrobble/getScrobbles.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.scrobble.getScrobbles" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get scrobbles all scrobbles" 9 + parameters = new Params { 10 + properties { 11 + ["did"] = new StringType { 12 + description = "The DID or handle of the actor" 13 + format = "at-identifier" 14 + } 15 + ["limit"] = new IntegerType { 16 + type = "integer" 17 + description = "The maximum number of scrobbles to return" 18 + minimum = 1 19 + } 20 + ["offset"] = new IntegerType { 21 + type = "integer" 22 + description = "The offset for pagination" 23 + minimum = 0 24 + } 25 + } 26 + } 27 + output { 28 + encoding = "application/json" 29 + schema = new ObjectType { 30 + type = "object" 31 + properties = new Mapping<String, Array> { 32 + ["scrobbles"] = new Array { 33 + type = "array" 34 + items = new Ref { 35 + ref = "app.rocksky.scrobble.defs#scrobbleViewBasic" 36 + } 37 + } 38 + } 39 + } 40 + } 41 + } 42 + }
+161
pkl/defs/scrobble/scrobble.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.scrobble" 5 + defs = new Mapping<String, Record> { 6 + ["main"] { 7 + type = "record" 8 + key = "tid" 9 + description = "A declaration of a scrobble." 10 + `record` { 11 + type = "object" 12 + required = List("title", "artist", "album", "albumArtist", "duration", "createdAt") 13 + properties { 14 + ["title"] = new StringType { 15 + type = "string" 16 + description = "The title of the song." 17 + minLength = 1 18 + maxLength = 512 19 + } 20 + 21 + ["artist"] = new StringType { 22 + type = "string" 23 + description = "The artist of the song." 24 + minLength = 1 25 + maxLength = 256 26 + } 27 + 28 + ["albumArtist"] = new StringType { 29 + type = "string" 30 + description = "The album artist of the song." 31 + minLength = 1 32 + maxLength = 256 33 + } 34 + 35 + ["album"] = new StringType { 36 + type = "string" 37 + description = "The album of the song." 38 + minLength = 1 39 + maxLength = 256 40 + } 41 + 42 + ["duration"] = new IntegerType { 43 + type = "integer" 44 + description = "The duration of the song in seconds." 45 + minimum = 1 46 + } 47 + 48 + ["trackNumber"] = new IntegerType { 49 + type = "integer" 50 + description = "The track number of the song in the album." 51 + minimum = 1 52 + } 53 + 54 + ["discNumber"] = new IntegerType { 55 + type = "integer" 56 + description = "The disc number of the song in the album." 57 + minimum = 1 58 + } 59 + 60 + ["releaseDate"] = new StringType { 61 + type = "string" 62 + description = "The release date of the song." 63 + format = "datetime" 64 + } 65 + 66 + ["year"] = new IntegerType { 67 + type = "integer" 68 + description = "The year the song was released." 69 + } 70 + 71 + ["genre"] = new StringType { 72 + type = "string" 73 + description = "The genre of the song." 74 + maxLength = 256 75 + } 76 + 77 + ["tags"] = new Array { 78 + type = "array" 79 + description = "The tags of the song." 80 + items = new StringType { 81 + type = "string" 82 + minLength = 1 83 + maxLength = 256 84 + } 85 + } 86 + 87 + ["composer"] = new StringType { 88 + type = "string" 89 + description = "The composer of the song." 90 + maxLength = 256 91 + } 92 + 93 + ["lyrics"] = new StringType { 94 + type = "string" 95 + description = "The lyrics of the song." 96 + maxLength = 10000 97 + } 98 + 99 + ["copyrightMessage"] = new StringType { 100 + type = "string" 101 + description = "The copyright message of the song." 102 + maxLength = 256 103 + } 104 + 105 + ["wiki"] = new StringType { 106 + type = "string" 107 + description = "Informations about the song" 108 + maxLength = 10000 109 + } 110 + 111 + ["albumArt"] = new Blob { 112 + type = "blob" 113 + description = "The album art of the song." 114 + accept = List("image/png", "image/jpeg") 115 + maxSize = 2000000 116 + } 117 + 118 + ["youtubeLink"] = new StringType { 119 + type = "string" 120 + description = "The YouTube link of the song." 121 + format = "uri" 122 + } 123 + 124 + ["spotifyLink"] = new StringType { 125 + type = "string" 126 + description = "The Spotify link of the song." 127 + format = "uri" 128 + } 129 + 130 + ["tidalLink"] = new StringType { 131 + type = "string" 132 + description = "The Tidal link of the song." 133 + format = "uri" 134 + } 135 + 136 + ["appleMusicLink"] = new StringType { 137 + type = "string" 138 + description = "The Apple Music link of the song." 139 + format = "uri" 140 + } 141 + 142 + ["createdAt"] = new StringType { 143 + type = "string" 144 + description = "The date when the song was created." 145 + format = "datetime" 146 + } 147 + 148 + ["mbid"] = new StringType { 149 + type = "string" 150 + description = "The MusicBrainz ID of the song." 151 + } 152 + 153 + ["label"] = new StringType { 154 + type = "string" 155 + description = "The label of the song." 156 + maxLength = 256 157 + } 158 + } 159 + } 160 + } 161 + }
+30
pkl/defs/shout/createShout.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.shout.createShout" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Create a new shout" 9 + input { 10 + encoding = "application/json" 11 + schema { 12 + type = "object" 13 + properties { 14 + ["message"] = new StringType { 15 + type = "string" 16 + description = "The content of the shout" 17 + minLength = 1 18 + } 19 + } 20 + } 21 + } 22 + output { 23 + encoding = "application/json" 24 + schema = new Ref { 25 + type = "ref" 26 + ref = "app.rocksky.shout.defs#shoutView" 27 + } 28 + } 29 + } 30 + }
+69
pkl/defs/shout/defs.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.shout.defs" 5 + defs = new Mapping<String, ObjectType> { 6 + ["author"] { 7 + type = "object" 8 + properties { 9 + ["id"] = new StringType { 10 + type = "string" 11 + description = "The unique identifier of the author." 12 + } 13 + 14 + ["did"] = new StringType { 15 + type = "string" 16 + format = "at-identifier" 17 + description = "The decentralized identifier (DID) of the author." 18 + } 19 + 20 + ["handle"] = new StringType { 21 + type = "string" 22 + format = "at-identifier" 23 + description = "The handle of the author." 24 + } 25 + 26 + ["displayName"] = new StringType { 27 + type = "string" 28 + description = "The display name of the author." 29 + } 30 + 31 + ["avatar"] = new StringType { 32 + type = "string" 33 + format = "uri" 34 + description = "The URL of the author's avatar image." 35 + } 36 + } 37 + } 38 + ["shoutView"] { 39 + type = "object" 40 + properties { 41 + ["id"] = new StringType { 42 + type = "string" 43 + description = "The unique identifier of the shout." 44 + } 45 + 46 + ["message"] = new StringType { 47 + type = "string" 48 + description = "The content of the shout." 49 + } 50 + 51 + ["parent"] = new StringType { 52 + type = "string" 53 + description = "The ID of the parent shout if this is a reply, otherwise null." 54 + } 55 + 56 + ["createdAt"] = new StringType { 57 + type = "string" 58 + format = "datetime" 59 + description = "The date and time when the shout was created." 60 + } 61 + 62 + ["author"] = new Ref { 63 + type = "ref" 64 + description = "The author of the shout." 65 + ref = "app.rocksky.shout.defs#author" 66 + } 67 + } 68 + } 69 + }
+41
pkl/defs/shout/getAlbumShouts.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.shout.getAlbumShouts" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get shouts for an album" 9 + parameters = new Params { 10 + required = List("uri") 11 + properties { 12 + ["uri"] = new StringType { 13 + description = "The unique identifier of the album to retrieve shouts for" 14 + format = "at-uri" 15 + } 16 + ["limit"] = new IntegerType { 17 + description = "The maximum number of shouts to return" 18 + minimum = 1 19 + } 20 + ["offset"] = new IntegerType { 21 + description = "The number of shouts to skip before starting to collect the result set" 22 + minimum = 0 23 + } 24 + } 25 + } 26 + output { 27 + encoding = "application/json" 28 + schema = new ObjectType { 29 + type = "object" 30 + properties = new Mapping<String, Array> { 31 + ["shouts"] = new Array { 32 + type = "array" 33 + items = new Ref { 34 + ref = "app.rocksky.shout.defs#shoutViewBasic" 35 + } 36 + } 37 + } 38 + } 39 + } 40 + } 41 + }
+41
pkl/defs/shout/getArtistShouts.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.shout.getArtistShouts" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get shouts for an artist" 9 + parameters = new Params { 10 + required = List("uri") 11 + properties { 12 + ["uri"] = new StringType { 13 + description = "The URI of the artist to retrieve shouts for" 14 + format = "at-uri" 15 + } 16 + ["limit"] = new IntegerType { 17 + description = "The maximum number of shouts to return" 18 + minimum = 1 19 + } 20 + ["offset"] = new IntegerType { 21 + description = "The number of shouts to skip before starting to collect the result set" 22 + minimum = 0 23 + } 24 + } 25 + } 26 + output { 27 + encoding = "application/json" 28 + schema = new ObjectType { 29 + type = "object" 30 + properties = new Mapping<String, Array> { 31 + ["shouts"] = new Array { 32 + type = "array" 33 + items = new Ref { 34 + ref = "app.rocksky.shout.defs#shoutViewBasic" 35 + } 36 + } 37 + } 38 + } 39 + } 40 + } 41 + }
+41
pkl/defs/shout/getProfileShouts.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.shout.getProfileShouts" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get the shouts of an actor's profile" 9 + parameters = new Params { 10 + required = List("did") 11 + properties { 12 + ["did"] = new StringType { 13 + description = "The DID or handle of the actor" 14 + format = "at-identifier" 15 + } 16 + ["offset"] = new IntegerType { 17 + description = "The offset for pagination" 18 + minimum = 0 19 + } 20 + ["limit"] = new IntegerType { 21 + description = "The maximum number of shouts to return" 22 + minimum = 1 23 + } 24 + } 25 + } 26 + output { 27 + encoding = "application/json" 28 + schema = new ObjectType { 29 + type = "object" 30 + properties = new Mapping<String, Array> { 31 + ["shouts"] = new Array { 32 + type = "array" 33 + items = new Ref { 34 + ref = "app.rocksky.shout.defs#shoutViewBasic" 35 + } 36 + } 37 + } 38 + } 39 + } 40 + } 41 + }
+41
pkl/defs/shout/getShoutReplies.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.shout.getShoutReplies" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get replies to a shout" 9 + parameters = new Params { 10 + required = List("uri") 11 + properties { 12 + ["uri"] = new StringType { 13 + description = "The URI of the shout to retrieve replies for" 14 + format = "at-uri" 15 + } 16 + ["limit"] = new IntegerType { 17 + description = "The maximum number of shouts to return" 18 + minimum = 1 19 + } 20 + ["offset"] = new IntegerType { 21 + description = "The number of shouts to skip before starting to collect the result set" 22 + minimum = 0 23 + } 24 + } 25 + } 26 + output { 27 + encoding = "application/json" 28 + schema = new ObjectType { 29 + type = "object" 30 + properties = new Mapping<String, Array> { 31 + ["shouts"] = new Array { 32 + type = "array" 33 + items = new Ref { 34 + ref = "app.rocksky.shout.defs#shoutViewBasic" 35 + } 36 + } 37 + } 38 + } 39 + } 40 + } 41 + }
+33
pkl/defs/shout/getTrackShouts.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.shout.getTrackShouts" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get all shouts for a specific track" 9 + parameters = new Params { 10 + required = List("uri") 11 + properties { 12 + ["uri"] = new StringType { 13 + description = "The URI of the track to retrieve shouts for" 14 + format = "at-uri" 15 + } 16 + } 17 + } 18 + output { 19 + encoding = "application/json" 20 + schema = new ObjectType { 21 + type = "object" 22 + properties = new Mapping<String, Array> { 23 + ["shouts"] = new Array { 24 + type = "array" 25 + items = new Ref { 26 + ref = "app.rocksky.shout.defs#shoutViewBasic" 27 + } 28 + } 29 + } 30 + } 31 + } 32 + } 33 + }
+27
pkl/defs/shout/removeShout.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.shout.removeShout" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Remove a shout by its ID" 9 + parameters { 10 + type = "params" 11 + required = List("id") 12 + properties = new Mapping<String, StringType> { 13 + ["id"] { 14 + type = "string" 15 + description = "The ID of the shout to be removed" 16 + } 17 + } 18 + } 19 + output { 20 + encoding = "application/json" 21 + schema = new Ref { 22 + type = "ref" 23 + ref = "app.rocksky.shout.defs#shoutView" 24 + } 25 + } 26 + } 27 + }
+35
pkl/defs/shout/replyShout.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.shout.replyShout" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Reply to a shout" 9 + input { 10 + encoding = "application/json" 11 + schema = new ObjectType { 12 + type = "object" 13 + required = List("shoutId", "message") 14 + properties { 15 + ["shoutId"] = new StringType { 16 + type = "string" 17 + description = "The unique identifier of the shout to reply to" 18 + } 19 + ["message"] = new StringType { 20 + type = "string" 21 + description = "The content of the reply" 22 + minLength = 1 23 + } 24 + } 25 + } 26 + } 27 + output { 28 + encoding = "application/json" 29 + schema = new Ref { 30 + type = "ref" 31 + ref = "app.rocksky.shout.defs#shoutView" 32 + } 33 + } 34 + } 35 + }
+35
pkl/defs/shout/reportShout.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.shout.reportShout" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Report a shout for moderation" 9 + input { 10 + encoding = "application/json" 11 + schema = new ObjectType { 12 + type = "object" 13 + required = List("shoutId") 14 + properties { 15 + ["shoutId"] = new StringType { 16 + type = "string" 17 + description = "The unique identifier of the shout to report" 18 + } 19 + ["reason"] = new StringType { 20 + type = "string" 21 + description = "The reason for reporting the shout" 22 + minLength = 1 23 + } 24 + } 25 + } 26 + } 27 + output { 28 + encoding = "application/json" 29 + schema = new Ref { 30 + type = "ref" 31 + ref = "app.rocksky.shout.defs#shoutView" 32 + } 33 + } 34 + } 35 + }
+39
pkl/defs/shout/shout.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.shout" 5 + defs = new Mapping<String, Record> { 6 + ["main"] { 7 + type = "record" 8 + key = "tid" 9 + description = "A declaration of a shout." 10 + `record` { 11 + type = "object" 12 + required = List("message", "createdAt", "subject") 13 + properties { 14 + ["message"] = new StringType { 15 + type = "string" 16 + description = "The message of the shout." 17 + minLength = 1 18 + maxLength = 1000 19 + } 20 + 21 + ["createdAt"] = new StringType { 22 + type = "string" 23 + description = "The date when the shout was created." 24 + format = "datetime" 25 + } 26 + 27 + ["parent"] = new Ref { 28 + type = "ref" 29 + ref = "com.atproto.repo.strongRef" 30 + } 31 + 32 + ["subject"] = new Ref { 33 + type = "ref" 34 + ref = "com.atproto.repo.strongRef" 35 + } 36 + } 37 + } 38 + } 39 + }
+75
pkl/defs/song/createSong.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.song.createSong" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Create a new song" 9 + input { 10 + encoding = "application/json" 11 + schema { 12 + type = "object" 13 + required = List("title", "artist", "album", "albumArtist") 14 + properties { 15 + ["title"] = new StringType { 16 + type = "string" 17 + description = "The title of the song" 18 + } 19 + ["artist"] = new StringType { 20 + type = "string" 21 + description = "The artist of the song" 22 + } 23 + ["albumArtist"] = new StringType { 24 + type = "string" 25 + description = "The album artist of the song, if different from the main artist" 26 + } 27 + ["album"] = new StringType { 28 + type = "string" 29 + description = "The album of the song, if applicable" 30 + } 31 + ["duration"] = new IntegerType { 32 + type = "integer" 33 + description = "The duration of the song in seconds" 34 + } 35 + ["mbId"] = new StringType { 36 + type = "string" 37 + description = "The MusicBrainz ID of the song, if available" 38 + } 39 + ["albumArt"] = new StringType { 40 + type = "string" 41 + description = "The URL of the album art for the song" 42 + format = "uri" 43 + } 44 + ["trackNumber"] = new IntegerType { 45 + type = "integer" 46 + description = "The track number of the song in the album, if applicable" 47 + } 48 + ["releaseDate"] = new StringType { 49 + type = "string" 50 + description = "The release date of the song, formatted as YYYY-MM-DD" 51 + } 52 + ["year"] = new IntegerType { 53 + type = "integer" 54 + description = "The year the song was released" 55 + } 56 + ["discNumber"] = new IntegerType { 57 + type = "integer" 58 + description = "The disc number of the song in the album, if applicable" 59 + } 60 + ["lyrics"] = new StringType { 61 + type = "string" 62 + description = "The lyrics of the song, if available" 63 + } 64 + } 65 + } 66 + } 67 + output { 68 + encoding = "application/json" 69 + schema = new Ref { 70 + type = "ref" 71 + ref = "app.rocksky.song.defs#songViewDetailed" 72 + } 73 + } 74 + } 75 + }
+158
pkl/defs/song/defs.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.song.defs" 5 + defs = new Mapping<String, ObjectType> { 6 + ["songViewBasic"] { 7 + type = "object" 8 + properties { 9 + ["id"] = new StringType { 10 + type = "string" 11 + description = "The unique identifier of the song." 12 + } 13 + ["title"] = new StringType { 14 + type = "string" 15 + description = "The title of the song." 16 + } 17 + ["artist"] = new StringType { 18 + type = "string" 19 + description = "The artist of the song." 20 + } 21 + ["albumArtist"] = new StringType { 22 + type = "string" 23 + description = "The artist of the album the song belongs to." 24 + } 25 + ["albumArt"] = new StringType { 26 + type = "string" 27 + format = "uri" 28 + description = "The URL of the album art image." 29 + } 30 + ["uri"] = new StringType { 31 + type = "string" 32 + format = "at-uri" 33 + description = "The URI of the song." 34 + } 35 + ["album"] = new StringType { 36 + type = "string" 37 + description = "The album of the song." 38 + } 39 + ["duration"] = new IntegerType { 40 + type = "integer" 41 + description = "The duration of the song in milliseconds." 42 + } 43 + ["trackNumber"] = new IntegerType { 44 + type = "integer" 45 + description = "The track number of the song in the album." 46 + } 47 + ["discNumber"] = new IntegerType { 48 + type = "integer" 49 + description = "The disc number of the song in the album." 50 + } 51 + ["playCount"] = new IntegerType { 52 + type = "integer" 53 + description = "The number of times the song has been played." 54 + minimum = 0 55 + } 56 + ["uniqueListeners"] = new IntegerType { 57 + type = "integer" 58 + description = "The number of unique listeners who have played the song." 59 + minimum = 0 60 + } 61 + ["albumUri"] = new StringType { 62 + type = "string" 63 + format = "at-uri" 64 + description = "The URI of the album the song belongs to." 65 + } 66 + ["artistUri"] = new StringType { 67 + type = "string" 68 + format = "at-uri" 69 + description = "The URI of the artist of the song." 70 + } 71 + ["sha256"] = new StringType { 72 + type = "string" 73 + description = "The SHA256 hash of the song." 74 + } 75 + ["createdAt"] = new StringType { 76 + type = "string" 77 + format = "datetime" 78 + description = "The timestamp when the song was created." 79 + } 80 + } 81 + } 82 + ["songViewDetailed"] { 83 + type = "object" 84 + properties { 85 + ["id"] = new StringType { 86 + type = "string" 87 + description = "The unique identifier of the song." 88 + } 89 + ["title"] = new StringType { 90 + type = "string" 91 + description = "The title of the song." 92 + } 93 + ["artist"] = new StringType { 94 + type = "string" 95 + description = "The artist of the song." 96 + } 97 + ["albumArtist"] = new StringType { 98 + type = "string" 99 + description = "The artist of the album the song belongs to." 100 + } 101 + ["albumArt"] = new StringType { 102 + type = "string" 103 + format = "uri" 104 + description = "The URL of the album art image." 105 + } 106 + ["uri"] = new StringType { 107 + type = "string" 108 + format = "at-uri" 109 + description = "The URI of the song." 110 + } 111 + ["album"] = new StringType { 112 + type = "string" 113 + description = "The album of the song." 114 + } 115 + ["duration"] = new IntegerType { 116 + type = "integer" 117 + description = "The duration of the song in milliseconds." 118 + } 119 + ["trackNumber"] = new IntegerType { 120 + type = "integer" 121 + description = "The track number of the song in the album." 122 + } 123 + ["discNumber"] = new IntegerType { 124 + type = "integer" 125 + description = "The disc number of the song in the album." 126 + } 127 + ["playCount"] = new IntegerType { 128 + type = "integer" 129 + description = "The number of times the song has been played." 130 + minimum = 0 131 + } 132 + ["uniqueListeners"] = new IntegerType { 133 + type = "integer" 134 + description = "The number of unique listeners who have played the song." 135 + minimum = 0 136 + } 137 + ["albumUri"] = new StringType { 138 + type = "string" 139 + format = "at-uri" 140 + description = "The URI of the album the song belongs to." 141 + } 142 + ["artistUri"] = new StringType { 143 + type = "string" 144 + format = "at-uri" 145 + description = "The URI of the artist of the song." 146 + } 147 + ["sha256"] = new StringType { 148 + type = "string" 149 + description = "The SHA256 hash of the song." 150 + } 151 + ["createdAt"] = new StringType { 152 + type = "string" 153 + format = "datetime" 154 + description = "The timestamp when the song was created." 155 + } 156 + } 157 + } 158 + }
+26
pkl/defs/song/getSong.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.song.getSong" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get a song by its uri" 9 + parameters = new Params { 10 + required = List("uri") 11 + properties { 12 + ["uri"] = new StringType { 13 + description = "The unique identifier of the song to retrieve" 14 + format = "at-uri" 15 + } 16 + } 17 + } 18 + output { 19 + encoding = "application/json" 20 + schema = new Ref { 21 + type = "ref" 22 + ref = "app.rocksky.song.defs#songViewDetailed" 23 + } 24 + } 25 + } 26 + }
+38
pkl/defs/song/getSongs.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.song.getSongs" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get songs" 9 + parameters = new Params { 10 + properties { 11 + ["limit"] = new IntegerType { 12 + type = "integer" 13 + description = "The maximum number of songs to return" 14 + minimum = 1 15 + } 16 + ["offset"] = new IntegerType { 17 + type = "integer" 18 + description = "The offset for pagination" 19 + minimum = 0 20 + } 21 + } 22 + } 23 + output { 24 + encoding = "application/json" 25 + schema = new ObjectType { 26 + type = "object" 27 + properties = new Mapping<String, Array> { 28 + ["songs"] = new Array { 29 + type = "array" 30 + items = new Ref { 31 + ref = "app.rocksky.song.defs#songViewBasic" 32 + } 33 + } 34 + } 35 + } 36 + } 37 + } 38 + }
+151
pkl/defs/song/lovedSong.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.lovedSong" 5 + defs = new Mapping<String, Record> { 6 + ["main"] { 7 + type = "record" 8 + key = "tid" 9 + description = "A declaration of a song." 10 + `record` { 11 + type = "object" 12 + required = List("title", "artist", "album", "duration", "createdAt") 13 + properties { 14 + ["title"] = new StringType { 15 + type = "string" 16 + description = "The title of the song." 17 + minLength = 1 18 + maxLength = 512 19 + } 20 + 21 + ["artist"] = new StringType { 22 + type = "string" 23 + description = "The artist of the song." 24 + minLength = 1 25 + maxLength = 256 26 + } 27 + 28 + ["albumArtist"] = new StringType { 29 + type = "string" 30 + description = "The album artist of the song." 31 + minLength = 1 32 + maxLength = 256 33 + } 34 + 35 + ["album"] = new StringType { 36 + type = "string" 37 + description = "The album of the song." 38 + minLength = 1 39 + maxLength = 256 40 + } 41 + 42 + ["duration"] = new IntegerType { 43 + type = "integer" 44 + description = "The duration of the song in seconds." 45 + minimum = 1 46 + } 47 + 48 + ["trackNumber"] = new IntegerType { 49 + type = "integer" 50 + description = "The track number of the song in the album." 51 + minimum = 1 52 + } 53 + 54 + ["discNumber"] = new IntegerType { 55 + type = "integer" 56 + description = "The disc number of the song in the album." 57 + minimum = 1 58 + } 59 + 60 + ["releaseDate"] = new StringType { 61 + type = "string" 62 + description = "The release date of the song." 63 + format = "datetime" 64 + } 65 + 66 + ["year"] = new IntegerType { 67 + type = "integer" 68 + description = "The year the song was released." 69 + } 70 + 71 + ["genre"] = new StringType { 72 + type = "string" 73 + description = "The genre of the song." 74 + maxLength = 256 75 + } 76 + 77 + ["tags"] = new Array { 78 + type = "array" 79 + description = "The tags of the song." 80 + items = new StringType { 81 + type = "string" 82 + minLength = 1 83 + maxLength = 256 84 + } 85 + } 86 + 87 + ["composer"] = new StringType { 88 + type = "string" 89 + description = "The composer of the song." 90 + maxLength = 256 91 + } 92 + 93 + ["lyrics"] = new StringType { 94 + type = "string" 95 + description = "The lyrics of the song." 96 + maxLength = 10000 97 + } 98 + 99 + ["copyrightMessage"] = new StringType { 100 + type = "string" 101 + description = "The copyright message of the song." 102 + minLength = 1 103 + maxLength = 256 104 + } 105 + 106 + ["wiki"] = new StringType { 107 + type = "string" 108 + description = "Informations about the song" 109 + maxLength = 10000 110 + } 111 + 112 + ["albumArt"] = new Blob { 113 + type = "blob" 114 + description = "The album art of the song." 115 + accept = List("image/png", "image/jpeg") 116 + maxSize = 2000000 117 + } 118 + 119 + ["youtubeLink"] = new StringType { 120 + type = "string" 121 + description = "The YouTube link of the song." 122 + format = "uri" 123 + } 124 + 125 + ["spotifyLink"] = new StringType { 126 + type = "string" 127 + description = "The Spotify link of the song." 128 + format = "uri" 129 + } 130 + 131 + ["tidalLink"] = new StringType { 132 + type = "string" 133 + description = "The Tidal link of the song." 134 + format = "uri" 135 + } 136 + 137 + ["appleMusicLink"] = new StringType { 138 + type = "string" 139 + description = "The Apple Music link of the song." 140 + format = "uri" 141 + } 142 + 143 + ["createdAt"] = new StringType { 144 + type = "string" 145 + description = "The date when the song was created." 146 + format = "datetime" 147 + } 148 + } 149 + } 150 + } 151 + }
+162
pkl/defs/song/song.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.song" 5 + defs = new Mapping<String, Record> { 6 + ["main"] { 7 + type = "record" 8 + key = "tid" 9 + description = "A declaration of a song." 10 + `record` { 11 + type = "object" 12 + required = List("title", "artist", "album", "albumArtist", "duration", "createdAt") 13 + properties { 14 + ["title"] = new StringType { 15 + type = "string" 16 + description = "The title of the song." 17 + minLength = 1 18 + maxLength = 512 19 + } 20 + 21 + ["artist"] = new StringType { 22 + type = "string" 23 + description = "The artist of the song." 24 + minLength = 1 25 + maxLength = 256 26 + } 27 + 28 + ["albumArtist"] = new StringType { 29 + type = "string" 30 + description = "The album artist of the song." 31 + minLength = 1 32 + maxLength = 256 33 + } 34 + 35 + ["album"] = new StringType { 36 + type = "string" 37 + description = "The album of the song." 38 + minLength = 1 39 + maxLength = 256 40 + } 41 + 42 + ["duration"] = new IntegerType { 43 + type = "integer" 44 + description = "The duration of the song in seconds." 45 + minimum = 1 46 + } 47 + 48 + ["trackNumber"] = new IntegerType { 49 + type = "integer" 50 + description = "The track number of the song in the album." 51 + minimum = 1 52 + } 53 + 54 + ["discNumber"] = new IntegerType { 55 + type = "integer" 56 + description = "The disc number of the song in the album." 57 + minimum = 1 58 + } 59 + 60 + ["releaseDate"] = new StringType { 61 + type = "string" 62 + description = "The release date of the song." 63 + format = "datetime" 64 + } 65 + 66 + ["year"] = new IntegerType { 67 + type = "integer" 68 + description = "The year the song was released." 69 + } 70 + 71 + ["genre"] = new StringType { 72 + type = "string" 73 + description = "The genre of the song." 74 + minLength = 1 75 + maxLength = 256 76 + } 77 + 78 + ["tags"] = new Array { 79 + type = "array" 80 + description = "The tags of the song." 81 + items = new StringType { 82 + type = "string" 83 + minLength = 1 84 + maxLength = 256 85 + } 86 + } 87 + 88 + ["composer"] = new StringType { 89 + type = "string" 90 + description = "The composer of the song." 91 + maxLength = 256 92 + } 93 + 94 + ["lyrics"] = new StringType { 95 + type = "string" 96 + description = "The lyrics of the song." 97 + maxLength = 10000 98 + } 99 + 100 + ["copyrightMessage"] = new StringType { 101 + type = "string" 102 + description = "The copyright message of the song." 103 + maxLength = 256 104 + } 105 + 106 + ["wiki"] = new StringType { 107 + type = "string" 108 + description = "Informations about the song" 109 + maxLength = 10000 110 + } 111 + 112 + ["albumArt"] = new Blob { 113 + type = "blob" 114 + description = "The album art of the song." 115 + accept = List("image/png", "image/jpeg") 116 + maxSize = 2000000 117 + } 118 + 119 + ["youtubeLink"] = new StringType { 120 + type = "string" 121 + description = "The YouTube link of the song." 122 + format = "uri" 123 + } 124 + 125 + ["spotifyLink"] = new StringType { 126 + type = "string" 127 + description = "The Spotify link of the song." 128 + format = "uri" 129 + } 130 + 131 + ["tidalLink"] = new StringType { 132 + type = "string" 133 + description = "The Tidal link of the song." 134 + format = "uri" 135 + } 136 + 137 + ["appleMusicLink"] = new StringType { 138 + type = "string" 139 + description = "The Apple Music link of the song." 140 + format = "uri" 141 + } 142 + 143 + ["createdAt"] = new StringType { 144 + type = "string" 145 + description = "The date when the song was created." 146 + format = "datetime" 147 + } 148 + 149 + ["mbid"] = new StringType { 150 + type = "string" 151 + description = "The MusicBrainz ID of the song." 152 + } 153 + 154 + ["label"] = new StringType { 155 + type = "string" 156 + description = "The label of the song." 157 + maxLength = 256 158 + } 159 + } 160 + } 161 + } 162 + }
+35
pkl/defs/spotify/defs.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.spotify.defs" 5 + defs = new Mapping<String, ObjectType> { 6 + ["spotifyTrackView"] { 7 + type = "object" 8 + properties { 9 + ["id"] = new StringType { 10 + type = "string" 11 + description = "The unique identifier of the Spotify track." 12 + } 13 + ["name"] = new StringType { 14 + type = "string" 15 + description = "The name of the track." 16 + } 17 + ["artist"] = new StringType { 18 + type = "string" 19 + description = "The name of the artist." 20 + } 21 + ["album"] = new StringType { 22 + type = "string" 23 + description = "The name of the album." 24 + } 25 + ["duration"] = new IntegerType { 26 + type = "integer" 27 + description = "The duration of the track in milliseconds." 28 + } 29 + ["previewUrl"] = new StringType { 30 + type = "string" 31 + description = "A URL to a preview of the track." 32 + } 33 + } 34 + } 35 + }
+27
pkl/defs/spotify/getCurrentlyPlaying.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.spotify.getCurrentlyPlaying" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + description = "Get the currently playing track" 9 + parameters { 10 + type = "params" 11 + properties { 12 + ["actor"] = new StringType { 13 + type = "string" 14 + format = "at-identifier" 15 + description = "Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user." 16 + } 17 + } 18 + } 19 + output { 20 + encoding = "application/json" 21 + schema = new Ref { 22 + type = "ref" 23 + ref = "app.rocksky.player.defs#currentlyPlayingViewDetailed" 24 + } 25 + } 26 + } 27 + }
+10
pkl/defs/spotify/next.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.spotify.next" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Play the next track in the queue" 9 + } 10 + }
+10
pkl/defs/spotify/pause.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.spotify.pause" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Pause the currently playing track" 9 + } 10 + }
+10
pkl/defs/spotify/play.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.spotify.play" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Resume playback of the currently paused track" 9 + } 10 + }
+10
pkl/defs/spotify/previous.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.spotify.previous" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Play the previous track in the queue" 9 + } 10 + }
+20
pkl/defs/spotify/seek.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.spotify.seek" 5 + defs = new Mapping<String, Procedure> { 6 + ["main"] { 7 + type = "procedure" 8 + description = "Seek to a specific position in the currently playing track" 9 + parameters { 10 + type = "params" 11 + required = List("position") 12 + properties = new Mapping<String, IntegerType> { 13 + ["position"] { 14 + type = "integer" 15 + description = "The position in seconds to seek to" 16 + } 17 + } 18 + } 19 + } 20 + }
+31
pkl/defs/stats/defs.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.stats.defs" 5 + defs = new Mapping<String, ObjectType> { 6 + ["statsView"] { 7 + type = "object" 8 + properties { 9 + ["scrobbles"] = new IntegerType { 10 + type = "integer" 11 + description = "The total number of scrobbles." 12 + } 13 + ["artists"] = new IntegerType { 14 + type = "integer" 15 + description = "The total number of unique artists scrobbled." 16 + } 17 + ["lovedTracks"] = new IntegerType { 18 + type = "integer" 19 + description = "The total number of tracks marked as loved." 20 + } 21 + ["albums"] = new IntegerType { 22 + type = "integer" 23 + description = "The total number of unique albums scrobbled." 24 + } 25 + ["tracks"] = new IntegerType { 26 + type = "integer" 27 + description = "The total number of unique tracks scrobbled." 28 + } 29 + } 30 + } 31 + }
+27
pkl/defs/stats/getStats.pkl
··· 1 + amends "../../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "app.rocksky.stats.getStats" 5 + defs = new Mapping<String, Query> { 6 + ["main"] { 7 + type = "query" 8 + parameters { 9 + type = "params" 10 + required = List("did") 11 + properties { 12 + ["did"] = new StringType { 13 + type = "string" 14 + description = "The DID or handle of the user to get stats for." 15 + format = "at-identifier" 16 + } 17 + } 18 + } 19 + output = new Output { 20 + encoding = "application/json" 21 + schema = new Ref { 22 + type = "ref" 23 + ref = "app.rocksky.stats.defs#statsView" 24 + } 25 + } 26 + } 27 + }
+21
pkl/defs/strongRef.pkl
··· 1 + amends "../schema/lexicon.pkl" 2 + 3 + lexicon = 1 4 + id = "com.atproto.repo.strongRef" 5 + description = "A URI with a content-hash fingerprint." 6 + defs = new Mapping { 7 + ["main"] = new ObjectType { 8 + type = "object" 9 + required = List("uri", "cid") 10 + properties { 11 + ["uri"] = new StringType { 12 + type = "string" 13 + format = "at-uri" 14 + } 15 + ["cid"] = new StringType { 16 + type = "string" 17 + format = "cid" 18 + } 19 + } 20 + } 21 + }
+87
pkl/schema/lexicon.pkl
··· 1 + 2 + open class BaseType { 3 + type: String 4 + description: String? 5 + } 6 + 7 + class StringType extends BaseType { 8 + type: "string" 9 + maxGraphemes: Int? 10 + minLength: Int? 11 + maxLength: Int? 12 + format: "uri" | "datetime" | "cid" | "at-uri" | "at-identifier" | Null = null 13 + } 14 + 15 + class IntegerType extends BaseType { 16 + type: "integer" 17 + minimum: Int? 18 + } 19 + 20 + class Blob extends BaseType { 21 + type: "blob" 22 + accept: List<String> 23 + maxSize: Int 24 + } 25 + 26 + class Array extends BaseType { 27 + type: "array" 28 + items: StringType | IntegerType | Blob | Ref | Union 29 + } 30 + 31 + class Params { 32 + type: "params" 33 + required: List<String>? 34 + properties: Mapping<String, StringType | IntegerType | Blob | Ref | Array> 35 + } 36 + 37 + class ObjectType extends BaseType { 38 + type: "object" 39 + required: List<String>? 40 + properties: Mapping<String, StringType | IntegerType | Blob | Ref | Union | Array> 41 + } 42 + 43 + class Union extends BaseType { 44 + type: "union" 45 + refs: List<String> 46 + } 47 + 48 + class Ref extends BaseType { 49 + type: "ref" 50 + ref: String 51 + } 52 + 53 + class Input { 54 + encoding: "application/json" 55 + schema: ObjectType 56 + } 57 + 58 + class Output { 59 + encoding: "application/json" | "application/octet-stream" 60 + schema: ObjectType | Ref | Array | Null = null 61 + } 62 + 63 + class Query extends BaseType { 64 + type: "query" 65 + parameters: Params 66 + output: Output 67 + } 68 + 69 + class Procedure extends BaseType { 70 + type: "procedure" 71 + parameters: Params? 72 + input: Input? 73 + output: Output? 74 + } 75 + 76 + class Record extends BaseType { 77 + type: "record" 78 + key: String 79 + `record`: ObjectType 80 + } 81 + 82 + lexicon: Int = 1 83 + id: String 84 + description: String? 85 + defs: Mapping<String, Procedure> | Mapping<String, Record> | Mapping<String, ObjectType> | Mapping<String, Query> | Mapping<String, Array> | Mapping<String, ObjectType | Array> | Null = null 86 + 87 +
+34
scripts/pkl.ts
··· 1 + import chalk from "chalk"; 2 + import { readdirSync, statSync } from "fs"; 3 + import { join } from "path"; 4 + import { $ } from "zx"; 5 + 6 + function getPklFilesRecursive(dir: string): string[] { 7 + const entries = readdirSync(dir); 8 + const files: string[] = []; 9 + 10 + for (const entry of entries) { 11 + const fullPath = join(dir, entry); 12 + const stats = statSync(fullPath); 13 + 14 + if (stats.isDirectory()) { 15 + files.push(...getPklFilesRecursive(fullPath)); 16 + continue; 17 + } 18 + 19 + if (entry.endsWith(".pkl")) { 20 + files.push(fullPath); 21 + } 22 + } 23 + 24 + return files; 25 + } 26 + 27 + const files = await getPklFilesRecursive(join("pkl", "defs")); 28 + 29 + await Promise.all( 30 + files.map(async (fullPath) => { 31 + console.log(`pkl eval ${chalk.cyan(fullPath)}`); 32 + await $`pkl eval -f json ${fullPath} > ${fullPath.replace(/\.pkl$/, ".json").replace(/pkl[\\\/]defs/g, "lexicons")}`; 33 + }) 34 + );
+954
src/lexicon/index.ts
··· 9 9 type StreamAuthVerifier, 10 10 } from '@atproto/xrpc-server' 11 11 import { schemas } from './lexicons.js' 12 + import * as AppRockskyActorGetActorAlbums from './types/app/rocksky/actor/getActorAlbums.js' 13 + import * as AppRockskyActorGetActorArtists from './types/app/rocksky/actor/getActorArtists.js' 14 + import * as AppRockskyActorGetActorLovedSongs from './types/app/rocksky/actor/getActorLovedSongs.js' 15 + import * as AppRockskyActorGetActorPlaylists from './types/app/rocksky/actor/getActorPlaylists.js' 16 + import * as AppRockskyActorGetActorScrobbles from './types/app/rocksky/actor/getActorScrobbles.js' 17 + import * as AppRockskyActorGetActorSongs from './types/app/rocksky/actor/getActorSongs.js' 18 + import * as AppRockskyActorGetProfile from './types/app/rocksky/actor/getProfile.js' 19 + import * as AppRockskyAlbumGetAlbum from './types/app/rocksky/album/getAlbum.js' 20 + import * as AppRockskyAlbumGetAlbums from './types/app/rocksky/album/getAlbums.js' 21 + import * as AppRockskyAlbumGetAlbumTracks from './types/app/rocksky/album/getAlbumTracks.js' 22 + import * as AppRockskyApikeyCreateApikey from './types/app/rocksky/apikey/createApikey.js' 23 + import * as AppRockskyApikeyGetApikeys from './types/app/rocksky/apikey/getApikeys.js' 24 + import * as AppRockskyApikeyRemoveApikey from './types/app/rocksky/apikey/removeApikey.js' 25 + import * as AppRockskyApikeyUpdateApikey from './types/app/rocksky/apikey/updateApikey.js' 26 + import * as AppRockskyArtistGetArtistAlbums from './types/app/rocksky/artist/getArtistAlbums.js' 27 + import * as AppRockskyArtistGetArtist from './types/app/rocksky/artist/getArtist.js' 28 + import * as AppRockskyArtistGetArtists from './types/app/rocksky/artist/getArtists.js' 29 + import * as AppRockskyArtistGetArtistTracks from './types/app/rocksky/artist/getArtistTracks.js' 30 + import * as AppRockskyChartsGetScrobblesChart from './types/app/rocksky/charts/getScrobblesChart.js' 31 + import * as AppRockskyDropboxDownloadFile from './types/app/rocksky/dropbox/downloadFile.js' 32 + import * as AppRockskyDropboxGetFiles from './types/app/rocksky/dropbox/getFiles.js' 33 + import * as AppRockskyDropboxGetMetadata from './types/app/rocksky/dropbox/getMetadata.js' 34 + import * as AppRockskyDropboxGetTemporaryLink from './types/app/rocksky/dropbox/getTemporaryLink.js' 35 + import * as AppRockskyFeedGetNowPlayings from './types/app/rocksky/feed/getNowPlayings.js' 36 + import * as AppRockskyFeedSearch from './types/app/rocksky/feed/search.js' 37 + import * as AppRockskyGoogledriveDownloadFile from './types/app/rocksky/googledrive/downloadFile.js' 38 + import * as AppRockskyGoogledriveGetFile from './types/app/rocksky/googledrive/getFile.js' 39 + import * as AppRockskyGoogledriveGetFiles from './types/app/rocksky/googledrive/getFiles.js' 40 + import * as AppRockskyLikeDislikeShout from './types/app/rocksky/like/dislikeShout.js' 41 + import * as AppRockskyLikeDislikeSong from './types/app/rocksky/like/dislikeSong.js' 42 + import * as AppRockskyLikeLikeShout from './types/app/rocksky/like/likeShout.js' 43 + import * as AppRockskyLikeLikeSong from './types/app/rocksky/like/likeSong.js' 44 + import * as AppRockskyPlayerGetCurrentlyPlaying from './types/app/rocksky/player/getCurrentlyPlaying.js' 45 + import * as AppRockskyPlayerNext from './types/app/rocksky/player/next.js' 46 + import * as AppRockskyPlayerPause from './types/app/rocksky/player/pause.js' 47 + import * as AppRockskyPlayerPlay from './types/app/rocksky/player/play.js' 48 + import * as AppRockskyPlayerPrevious from './types/app/rocksky/player/previous.js' 49 + import * as AppRockskyPlayerSeek from './types/app/rocksky/player/seek.js' 50 + import * as AppRockskyPlaylistGetPlaylist from './types/app/rocksky/playlist/getPlaylist.js' 51 + import * as AppRockskyPlaylistGetPlaylists from './types/app/rocksky/playlist/getPlaylists.js' 52 + import * as AppRockskyScrobbleCreateScrobble from './types/app/rocksky/scrobble/createScrobble.js' 53 + import * as AppRockskyScrobbleGetScrobble from './types/app/rocksky/scrobble/getScrobble.js' 54 + import * as AppRockskyScrobbleGetScrobbles from './types/app/rocksky/scrobble/getScrobbles.js' 55 + import * as AppRockskyShoutCreateShout from './types/app/rocksky/shout/createShout.js' 56 + import * as AppRockskyShoutGetAlbumShouts from './types/app/rocksky/shout/getAlbumShouts.js' 57 + import * as AppRockskyShoutGetArtistShouts from './types/app/rocksky/shout/getArtistShouts.js' 58 + import * as AppRockskyShoutGetProfileShouts from './types/app/rocksky/shout/getProfileShouts.js' 59 + import * as AppRockskyShoutGetShoutReplies from './types/app/rocksky/shout/getShoutReplies.js' 60 + import * as AppRockskyShoutGetTrackShouts from './types/app/rocksky/shout/getTrackShouts.js' 61 + import * as AppRockskyShoutRemoveShout from './types/app/rocksky/shout/removeShout.js' 62 + import * as AppRockskyShoutReplyShout from './types/app/rocksky/shout/replyShout.js' 63 + import * as AppRockskyShoutReportShout from './types/app/rocksky/shout/reportShout.js' 64 + import * as AppRockskySongCreateSong from './types/app/rocksky/song/createSong.js' 65 + import * as AppRockskySongGetSong from './types/app/rocksky/song/getSong.js' 66 + import * as AppRockskySongGetSongs from './types/app/rocksky/song/getSongs.js' 67 + import * as AppRockskySpotifyGetCurrentlyPlaying from './types/app/rocksky/spotify/getCurrentlyPlaying.js' 68 + import * as AppRockskySpotifyNext from './types/app/rocksky/spotify/next.js' 69 + import * as AppRockskySpotifyPause from './types/app/rocksky/spotify/pause.js' 70 + import * as AppRockskySpotifyPlay from './types/app/rocksky/spotify/play.js' 71 + import * as AppRockskySpotifyPrevious from './types/app/rocksky/spotify/previous.js' 72 + import * as AppRockskySpotifySeek from './types/app/rocksky/spotify/seek.js' 73 + import * as AppRockskyStatsGetStats from './types/app/rocksky/stats/getStats.js' 12 74 13 75 export function createServer(options?: XrpcOptions): Server { 14 76 return new Server(options) ··· 17 79 export class Server { 18 80 xrpc: XrpcServer 19 81 app: AppNS 82 + com: ComNS 20 83 21 84 constructor(options?: XrpcOptions) { 22 85 this.xrpc = createXrpcServer(schemas, options) 23 86 this.app = new AppNS(this) 87 + this.com = new ComNS(this) 24 88 } 25 89 } 26 90 27 91 export class AppNS { 28 92 _server: Server 29 93 rocksky: AppRockskyNS 94 + bsky: AppBskyNS 30 95 31 96 constructor(server: Server) { 32 97 this._server = server 33 98 this.rocksky = new AppRockskyNS(server) 99 + this.bsky = new AppBskyNS(server) 34 100 } 35 101 } 36 102 37 103 export class AppRockskyNS { 104 + _server: Server 105 + actor: AppRockskyActorNS 106 + album: AppRockskyAlbumNS 107 + apikey: AppRockskyApikeyNS 108 + artist: AppRockskyArtistNS 109 + charts: AppRockskyChartsNS 110 + dropbox: AppRockskyDropboxNS 111 + feed: AppRockskyFeedNS 112 + googledrive: AppRockskyGoogledriveNS 113 + like: AppRockskyLikeNS 114 + player: AppRockskyPlayerNS 115 + playlist: AppRockskyPlaylistNS 116 + scrobble: AppRockskyScrobbleNS 117 + shout: AppRockskyShoutNS 118 + song: AppRockskySongNS 119 + spotify: AppRockskySpotifyNS 120 + stats: AppRockskyStatsNS 121 + 122 + constructor(server: Server) { 123 + this._server = server 124 + this.actor = new AppRockskyActorNS(server) 125 + this.album = new AppRockskyAlbumNS(server) 126 + this.apikey = new AppRockskyApikeyNS(server) 127 + this.artist = new AppRockskyArtistNS(server) 128 + this.charts = new AppRockskyChartsNS(server) 129 + this.dropbox = new AppRockskyDropboxNS(server) 130 + this.feed = new AppRockskyFeedNS(server) 131 + this.googledrive = new AppRockskyGoogledriveNS(server) 132 + this.like = new AppRockskyLikeNS(server) 133 + this.player = new AppRockskyPlayerNS(server) 134 + this.playlist = new AppRockskyPlaylistNS(server) 135 + this.scrobble = new AppRockskyScrobbleNS(server) 136 + this.shout = new AppRockskyShoutNS(server) 137 + this.song = new AppRockskySongNS(server) 138 + this.spotify = new AppRockskySpotifyNS(server) 139 + this.stats = new AppRockskyStatsNS(server) 140 + } 141 + } 142 + 143 + export class AppRockskyActorNS { 144 + _server: Server 145 + 146 + constructor(server: Server) { 147 + this._server = server 148 + } 149 + 150 + getActorAlbums<AV extends AuthVerifier>( 151 + cfg: ConfigOf< 152 + AV, 153 + AppRockskyActorGetActorAlbums.Handler<ExtractAuth<AV>>, 154 + AppRockskyActorGetActorAlbums.HandlerReqCtx<ExtractAuth<AV>> 155 + >, 156 + ) { 157 + const nsid = 'app.rocksky.actor.getActorAlbums' // @ts-ignore 158 + return this._server.xrpc.method(nsid, cfg) 159 + } 160 + 161 + getActorArtists<AV extends AuthVerifier>( 162 + cfg: ConfigOf< 163 + AV, 164 + AppRockskyActorGetActorArtists.Handler<ExtractAuth<AV>>, 165 + AppRockskyActorGetActorArtists.HandlerReqCtx<ExtractAuth<AV>> 166 + >, 167 + ) { 168 + const nsid = 'app.rocksky.actor.getActorArtists' // @ts-ignore 169 + return this._server.xrpc.method(nsid, cfg) 170 + } 171 + 172 + getActorLovedSongs<AV extends AuthVerifier>( 173 + cfg: ConfigOf< 174 + AV, 175 + AppRockskyActorGetActorLovedSongs.Handler<ExtractAuth<AV>>, 176 + AppRockskyActorGetActorLovedSongs.HandlerReqCtx<ExtractAuth<AV>> 177 + >, 178 + ) { 179 + const nsid = 'app.rocksky.actor.getActorLovedSongs' // @ts-ignore 180 + return this._server.xrpc.method(nsid, cfg) 181 + } 182 + 183 + getActorPlaylists<AV extends AuthVerifier>( 184 + cfg: ConfigOf< 185 + AV, 186 + AppRockskyActorGetActorPlaylists.Handler<ExtractAuth<AV>>, 187 + AppRockskyActorGetActorPlaylists.HandlerReqCtx<ExtractAuth<AV>> 188 + >, 189 + ) { 190 + const nsid = 'app.rocksky.actor.getActorPlaylists' // @ts-ignore 191 + return this._server.xrpc.method(nsid, cfg) 192 + } 193 + 194 + getActorScrobbles<AV extends AuthVerifier>( 195 + cfg: ConfigOf< 196 + AV, 197 + AppRockskyActorGetActorScrobbles.Handler<ExtractAuth<AV>>, 198 + AppRockskyActorGetActorScrobbles.HandlerReqCtx<ExtractAuth<AV>> 199 + >, 200 + ) { 201 + const nsid = 'app.rocksky.actor.getActorScrobbles' // @ts-ignore 202 + return this._server.xrpc.method(nsid, cfg) 203 + } 204 + 205 + getActorSongs<AV extends AuthVerifier>( 206 + cfg: ConfigOf< 207 + AV, 208 + AppRockskyActorGetActorSongs.Handler<ExtractAuth<AV>>, 209 + AppRockskyActorGetActorSongs.HandlerReqCtx<ExtractAuth<AV>> 210 + >, 211 + ) { 212 + const nsid = 'app.rocksky.actor.getActorSongs' // @ts-ignore 213 + return this._server.xrpc.method(nsid, cfg) 214 + } 215 + 216 + getProfile<AV extends AuthVerifier>( 217 + cfg: ConfigOf< 218 + AV, 219 + AppRockskyActorGetProfile.Handler<ExtractAuth<AV>>, 220 + AppRockskyActorGetProfile.HandlerReqCtx<ExtractAuth<AV>> 221 + >, 222 + ) { 223 + const nsid = 'app.rocksky.actor.getProfile' // @ts-ignore 224 + return this._server.xrpc.method(nsid, cfg) 225 + } 226 + } 227 + 228 + export class AppRockskyAlbumNS { 229 + _server: Server 230 + 231 + constructor(server: Server) { 232 + this._server = server 233 + } 234 + 235 + getAlbum<AV extends AuthVerifier>( 236 + cfg: ConfigOf< 237 + AV, 238 + AppRockskyAlbumGetAlbum.Handler<ExtractAuth<AV>>, 239 + AppRockskyAlbumGetAlbum.HandlerReqCtx<ExtractAuth<AV>> 240 + >, 241 + ) { 242 + const nsid = 'app.rocksky.album.getAlbum' // @ts-ignore 243 + return this._server.xrpc.method(nsid, cfg) 244 + } 245 + 246 + getAlbums<AV extends AuthVerifier>( 247 + cfg: ConfigOf< 248 + AV, 249 + AppRockskyAlbumGetAlbums.Handler<ExtractAuth<AV>>, 250 + AppRockskyAlbumGetAlbums.HandlerReqCtx<ExtractAuth<AV>> 251 + >, 252 + ) { 253 + const nsid = 'app.rocksky.album.getAlbums' // @ts-ignore 254 + return this._server.xrpc.method(nsid, cfg) 255 + } 256 + 257 + getAlbumTracks<AV extends AuthVerifier>( 258 + cfg: ConfigOf< 259 + AV, 260 + AppRockskyAlbumGetAlbumTracks.Handler<ExtractAuth<AV>>, 261 + AppRockskyAlbumGetAlbumTracks.HandlerReqCtx<ExtractAuth<AV>> 262 + >, 263 + ) { 264 + const nsid = 'app.rocksky.album.getAlbumTracks' // @ts-ignore 265 + return this._server.xrpc.method(nsid, cfg) 266 + } 267 + } 268 + 269 + export class AppRockskyApikeyNS { 270 + _server: Server 271 + 272 + constructor(server: Server) { 273 + this._server = server 274 + } 275 + 276 + createApikey<AV extends AuthVerifier>( 277 + cfg: ConfigOf< 278 + AV, 279 + AppRockskyApikeyCreateApikey.Handler<ExtractAuth<AV>>, 280 + AppRockskyApikeyCreateApikey.HandlerReqCtx<ExtractAuth<AV>> 281 + >, 282 + ) { 283 + const nsid = 'app.rocksky.apikey.createApikey' // @ts-ignore 284 + return this._server.xrpc.method(nsid, cfg) 285 + } 286 + 287 + getApikeys<AV extends AuthVerifier>( 288 + cfg: ConfigOf< 289 + AV, 290 + AppRockskyApikeyGetApikeys.Handler<ExtractAuth<AV>>, 291 + AppRockskyApikeyGetApikeys.HandlerReqCtx<ExtractAuth<AV>> 292 + >, 293 + ) { 294 + const nsid = 'app.rocksky.apikey.getApikeys' // @ts-ignore 295 + return this._server.xrpc.method(nsid, cfg) 296 + } 297 + 298 + removeApikey<AV extends AuthVerifier>( 299 + cfg: ConfigOf< 300 + AV, 301 + AppRockskyApikeyRemoveApikey.Handler<ExtractAuth<AV>>, 302 + AppRockskyApikeyRemoveApikey.HandlerReqCtx<ExtractAuth<AV>> 303 + >, 304 + ) { 305 + const nsid = 'app.rocksky.apikey.removeApikey' // @ts-ignore 306 + return this._server.xrpc.method(nsid, cfg) 307 + } 308 + 309 + updateApikey<AV extends AuthVerifier>( 310 + cfg: ConfigOf< 311 + AV, 312 + AppRockskyApikeyUpdateApikey.Handler<ExtractAuth<AV>>, 313 + AppRockskyApikeyUpdateApikey.HandlerReqCtx<ExtractAuth<AV>> 314 + >, 315 + ) { 316 + const nsid = 'app.rocksky.apikey.updateApikey' // @ts-ignore 317 + return this._server.xrpc.method(nsid, cfg) 318 + } 319 + } 320 + 321 + export class AppRockskyArtistNS { 322 + _server: Server 323 + 324 + constructor(server: Server) { 325 + this._server = server 326 + } 327 + 328 + getArtistAlbums<AV extends AuthVerifier>( 329 + cfg: ConfigOf< 330 + AV, 331 + AppRockskyArtistGetArtistAlbums.Handler<ExtractAuth<AV>>, 332 + AppRockskyArtistGetArtistAlbums.HandlerReqCtx<ExtractAuth<AV>> 333 + >, 334 + ) { 335 + const nsid = 'app.rocksky.artist.getArtistAlbums' // @ts-ignore 336 + return this._server.xrpc.method(nsid, cfg) 337 + } 338 + 339 + getArtist<AV extends AuthVerifier>( 340 + cfg: ConfigOf< 341 + AV, 342 + AppRockskyArtistGetArtist.Handler<ExtractAuth<AV>>, 343 + AppRockskyArtistGetArtist.HandlerReqCtx<ExtractAuth<AV>> 344 + >, 345 + ) { 346 + const nsid = 'app.rocksky.artist.getArtist' // @ts-ignore 347 + return this._server.xrpc.method(nsid, cfg) 348 + } 349 + 350 + getArtists<AV extends AuthVerifier>( 351 + cfg: ConfigOf< 352 + AV, 353 + AppRockskyArtistGetArtists.Handler<ExtractAuth<AV>>, 354 + AppRockskyArtistGetArtists.HandlerReqCtx<ExtractAuth<AV>> 355 + >, 356 + ) { 357 + const nsid = 'app.rocksky.artist.getArtists' // @ts-ignore 358 + return this._server.xrpc.method(nsid, cfg) 359 + } 360 + 361 + getArtistTracks<AV extends AuthVerifier>( 362 + cfg: ConfigOf< 363 + AV, 364 + AppRockskyArtistGetArtistTracks.Handler<ExtractAuth<AV>>, 365 + AppRockskyArtistGetArtistTracks.HandlerReqCtx<ExtractAuth<AV>> 366 + >, 367 + ) { 368 + const nsid = 'app.rocksky.artist.getArtistTracks' // @ts-ignore 369 + return this._server.xrpc.method(nsid, cfg) 370 + } 371 + } 372 + 373 + export class AppRockskyChartsNS { 374 + _server: Server 375 + 376 + constructor(server: Server) { 377 + this._server = server 378 + } 379 + 380 + getScrobblesChart<AV extends AuthVerifier>( 381 + cfg: ConfigOf< 382 + AV, 383 + AppRockskyChartsGetScrobblesChart.Handler<ExtractAuth<AV>>, 384 + AppRockskyChartsGetScrobblesChart.HandlerReqCtx<ExtractAuth<AV>> 385 + >, 386 + ) { 387 + const nsid = 'app.rocksky.charts.getScrobblesChart' // @ts-ignore 388 + return this._server.xrpc.method(nsid, cfg) 389 + } 390 + } 391 + 392 + export class AppRockskyDropboxNS { 393 + _server: Server 394 + 395 + constructor(server: Server) { 396 + this._server = server 397 + } 398 + 399 + downloadFile<AV extends AuthVerifier>( 400 + cfg: ConfigOf< 401 + AV, 402 + AppRockskyDropboxDownloadFile.Handler<ExtractAuth<AV>>, 403 + AppRockskyDropboxDownloadFile.HandlerReqCtx<ExtractAuth<AV>> 404 + >, 405 + ) { 406 + const nsid = 'app.rocksky.dropbox.downloadFile' // @ts-ignore 407 + return this._server.xrpc.method(nsid, cfg) 408 + } 409 + 410 + getFiles<AV extends AuthVerifier>( 411 + cfg: ConfigOf< 412 + AV, 413 + AppRockskyDropboxGetFiles.Handler<ExtractAuth<AV>>, 414 + AppRockskyDropboxGetFiles.HandlerReqCtx<ExtractAuth<AV>> 415 + >, 416 + ) { 417 + const nsid = 'app.rocksky.dropbox.getFiles' // @ts-ignore 418 + return this._server.xrpc.method(nsid, cfg) 419 + } 420 + 421 + getMetadata<AV extends AuthVerifier>( 422 + cfg: ConfigOf< 423 + AV, 424 + AppRockskyDropboxGetMetadata.Handler<ExtractAuth<AV>>, 425 + AppRockskyDropboxGetMetadata.HandlerReqCtx<ExtractAuth<AV>> 426 + >, 427 + ) { 428 + const nsid = 'app.rocksky.dropbox.getMetadata' // @ts-ignore 429 + return this._server.xrpc.method(nsid, cfg) 430 + } 431 + 432 + getTemporaryLink<AV extends AuthVerifier>( 433 + cfg: ConfigOf< 434 + AV, 435 + AppRockskyDropboxGetTemporaryLink.Handler<ExtractAuth<AV>>, 436 + AppRockskyDropboxGetTemporaryLink.HandlerReqCtx<ExtractAuth<AV>> 437 + >, 438 + ) { 439 + const nsid = 'app.rocksky.dropbox.getTemporaryLink' // @ts-ignore 440 + return this._server.xrpc.method(nsid, cfg) 441 + } 442 + } 443 + 444 + export class AppRockskyFeedNS { 445 + _server: Server 446 + 447 + constructor(server: Server) { 448 + this._server = server 449 + } 450 + 451 + getNowPlayings<AV extends AuthVerifier>( 452 + cfg: ConfigOf< 453 + AV, 454 + AppRockskyFeedGetNowPlayings.Handler<ExtractAuth<AV>>, 455 + AppRockskyFeedGetNowPlayings.HandlerReqCtx<ExtractAuth<AV>> 456 + >, 457 + ) { 458 + const nsid = 'app.rocksky.feed.getNowPlayings' // @ts-ignore 459 + return this._server.xrpc.method(nsid, cfg) 460 + } 461 + 462 + search<AV extends AuthVerifier>( 463 + cfg: ConfigOf< 464 + AV, 465 + AppRockskyFeedSearch.Handler<ExtractAuth<AV>>, 466 + AppRockskyFeedSearch.HandlerReqCtx<ExtractAuth<AV>> 467 + >, 468 + ) { 469 + const nsid = 'app.rocksky.feed.search' // @ts-ignore 470 + return this._server.xrpc.method(nsid, cfg) 471 + } 472 + } 473 + 474 + export class AppRockskyGoogledriveNS { 475 + _server: Server 476 + 477 + constructor(server: Server) { 478 + this._server = server 479 + } 480 + 481 + downloadFile<AV extends AuthVerifier>( 482 + cfg: ConfigOf< 483 + AV, 484 + AppRockskyGoogledriveDownloadFile.Handler<ExtractAuth<AV>>, 485 + AppRockskyGoogledriveDownloadFile.HandlerReqCtx<ExtractAuth<AV>> 486 + >, 487 + ) { 488 + const nsid = 'app.rocksky.googledrive.downloadFile' // @ts-ignore 489 + return this._server.xrpc.method(nsid, cfg) 490 + } 491 + 492 + getFile<AV extends AuthVerifier>( 493 + cfg: ConfigOf< 494 + AV, 495 + AppRockskyGoogledriveGetFile.Handler<ExtractAuth<AV>>, 496 + AppRockskyGoogledriveGetFile.HandlerReqCtx<ExtractAuth<AV>> 497 + >, 498 + ) { 499 + const nsid = 'app.rocksky.googledrive.getFile' // @ts-ignore 500 + return this._server.xrpc.method(nsid, cfg) 501 + } 502 + 503 + getFiles<AV extends AuthVerifier>( 504 + cfg: ConfigOf< 505 + AV, 506 + AppRockskyGoogledriveGetFiles.Handler<ExtractAuth<AV>>, 507 + AppRockskyGoogledriveGetFiles.HandlerReqCtx<ExtractAuth<AV>> 508 + >, 509 + ) { 510 + const nsid = 'app.rocksky.googledrive.getFiles' // @ts-ignore 511 + return this._server.xrpc.method(nsid, cfg) 512 + } 513 + } 514 + 515 + export class AppRockskyLikeNS { 516 + _server: Server 517 + 518 + constructor(server: Server) { 519 + this._server = server 520 + } 521 + 522 + dislikeShout<AV extends AuthVerifier>( 523 + cfg: ConfigOf< 524 + AV, 525 + AppRockskyLikeDislikeShout.Handler<ExtractAuth<AV>>, 526 + AppRockskyLikeDislikeShout.HandlerReqCtx<ExtractAuth<AV>> 527 + >, 528 + ) { 529 + const nsid = 'app.rocksky.like.dislikeShout' // @ts-ignore 530 + return this._server.xrpc.method(nsid, cfg) 531 + } 532 + 533 + dislikeSong<AV extends AuthVerifier>( 534 + cfg: ConfigOf< 535 + AV, 536 + AppRockskyLikeDislikeSong.Handler<ExtractAuth<AV>>, 537 + AppRockskyLikeDislikeSong.HandlerReqCtx<ExtractAuth<AV>> 538 + >, 539 + ) { 540 + const nsid = 'app.rocksky.like.dislikeSong' // @ts-ignore 541 + return this._server.xrpc.method(nsid, cfg) 542 + } 543 + 544 + likeShout<AV extends AuthVerifier>( 545 + cfg: ConfigOf< 546 + AV, 547 + AppRockskyLikeLikeShout.Handler<ExtractAuth<AV>>, 548 + AppRockskyLikeLikeShout.HandlerReqCtx<ExtractAuth<AV>> 549 + >, 550 + ) { 551 + const nsid = 'app.rocksky.like.likeShout' // @ts-ignore 552 + return this._server.xrpc.method(nsid, cfg) 553 + } 554 + 555 + likeSong<AV extends AuthVerifier>( 556 + cfg: ConfigOf< 557 + AV, 558 + AppRockskyLikeLikeSong.Handler<ExtractAuth<AV>>, 559 + AppRockskyLikeLikeSong.HandlerReqCtx<ExtractAuth<AV>> 560 + >, 561 + ) { 562 + const nsid = 'app.rocksky.like.likeSong' // @ts-ignore 563 + return this._server.xrpc.method(nsid, cfg) 564 + } 565 + } 566 + 567 + export class AppRockskyPlayerNS { 568 + _server: Server 569 + 570 + constructor(server: Server) { 571 + this._server = server 572 + } 573 + 574 + getCurrentlyPlaying<AV extends AuthVerifier>( 575 + cfg: ConfigOf< 576 + AV, 577 + AppRockskyPlayerGetCurrentlyPlaying.Handler<ExtractAuth<AV>>, 578 + AppRockskyPlayerGetCurrentlyPlaying.HandlerReqCtx<ExtractAuth<AV>> 579 + >, 580 + ) { 581 + const nsid = 'app.rocksky.player.getCurrentlyPlaying' // @ts-ignore 582 + return this._server.xrpc.method(nsid, cfg) 583 + } 584 + 585 + next<AV extends AuthVerifier>( 586 + cfg: ConfigOf< 587 + AV, 588 + AppRockskyPlayerNext.Handler<ExtractAuth<AV>>, 589 + AppRockskyPlayerNext.HandlerReqCtx<ExtractAuth<AV>> 590 + >, 591 + ) { 592 + const nsid = 'app.rocksky.player.next' // @ts-ignore 593 + return this._server.xrpc.method(nsid, cfg) 594 + } 595 + 596 + pause<AV extends AuthVerifier>( 597 + cfg: ConfigOf< 598 + AV, 599 + AppRockskyPlayerPause.Handler<ExtractAuth<AV>>, 600 + AppRockskyPlayerPause.HandlerReqCtx<ExtractAuth<AV>> 601 + >, 602 + ) { 603 + const nsid = 'app.rocksky.player.pause' // @ts-ignore 604 + return this._server.xrpc.method(nsid, cfg) 605 + } 606 + 607 + play<AV extends AuthVerifier>( 608 + cfg: ConfigOf< 609 + AV, 610 + AppRockskyPlayerPlay.Handler<ExtractAuth<AV>>, 611 + AppRockskyPlayerPlay.HandlerReqCtx<ExtractAuth<AV>> 612 + >, 613 + ) { 614 + const nsid = 'app.rocksky.player.play' // @ts-ignore 615 + return this._server.xrpc.method(nsid, cfg) 616 + } 617 + 618 + previous<AV extends AuthVerifier>( 619 + cfg: ConfigOf< 620 + AV, 621 + AppRockskyPlayerPrevious.Handler<ExtractAuth<AV>>, 622 + AppRockskyPlayerPrevious.HandlerReqCtx<ExtractAuth<AV>> 623 + >, 624 + ) { 625 + const nsid = 'app.rocksky.player.previous' // @ts-ignore 626 + return this._server.xrpc.method(nsid, cfg) 627 + } 628 + 629 + seek<AV extends AuthVerifier>( 630 + cfg: ConfigOf< 631 + AV, 632 + AppRockskyPlayerSeek.Handler<ExtractAuth<AV>>, 633 + AppRockskyPlayerSeek.HandlerReqCtx<ExtractAuth<AV>> 634 + >, 635 + ) { 636 + const nsid = 'app.rocksky.player.seek' // @ts-ignore 637 + return this._server.xrpc.method(nsid, cfg) 638 + } 639 + } 640 + 641 + export class AppRockskyPlaylistNS { 642 + _server: Server 643 + 644 + constructor(server: Server) { 645 + this._server = server 646 + } 647 + 648 + getPlaylist<AV extends AuthVerifier>( 649 + cfg: ConfigOf< 650 + AV, 651 + AppRockskyPlaylistGetPlaylist.Handler<ExtractAuth<AV>>, 652 + AppRockskyPlaylistGetPlaylist.HandlerReqCtx<ExtractAuth<AV>> 653 + >, 654 + ) { 655 + const nsid = 'app.rocksky.playlist.getPlaylist' // @ts-ignore 656 + return this._server.xrpc.method(nsid, cfg) 657 + } 658 + 659 + getPlaylists<AV extends AuthVerifier>( 660 + cfg: ConfigOf< 661 + AV, 662 + AppRockskyPlaylistGetPlaylists.Handler<ExtractAuth<AV>>, 663 + AppRockskyPlaylistGetPlaylists.HandlerReqCtx<ExtractAuth<AV>> 664 + >, 665 + ) { 666 + const nsid = 'app.rocksky.playlist.getPlaylists' // @ts-ignore 667 + return this._server.xrpc.method(nsid, cfg) 668 + } 669 + } 670 + 671 + export class AppRockskyScrobbleNS { 672 + _server: Server 673 + 674 + constructor(server: Server) { 675 + this._server = server 676 + } 677 + 678 + createScrobble<AV extends AuthVerifier>( 679 + cfg: ConfigOf< 680 + AV, 681 + AppRockskyScrobbleCreateScrobble.Handler<ExtractAuth<AV>>, 682 + AppRockskyScrobbleCreateScrobble.HandlerReqCtx<ExtractAuth<AV>> 683 + >, 684 + ) { 685 + const nsid = 'app.rocksky.scrobble.createScrobble' // @ts-ignore 686 + return this._server.xrpc.method(nsid, cfg) 687 + } 688 + 689 + getScrobble<AV extends AuthVerifier>( 690 + cfg: ConfigOf< 691 + AV, 692 + AppRockskyScrobbleGetScrobble.Handler<ExtractAuth<AV>>, 693 + AppRockskyScrobbleGetScrobble.HandlerReqCtx<ExtractAuth<AV>> 694 + >, 695 + ) { 696 + const nsid = 'app.rocksky.scrobble.getScrobble' // @ts-ignore 697 + return this._server.xrpc.method(nsid, cfg) 698 + } 699 + 700 + getScrobbles<AV extends AuthVerifier>( 701 + cfg: ConfigOf< 702 + AV, 703 + AppRockskyScrobbleGetScrobbles.Handler<ExtractAuth<AV>>, 704 + AppRockskyScrobbleGetScrobbles.HandlerReqCtx<ExtractAuth<AV>> 705 + >, 706 + ) { 707 + const nsid = 'app.rocksky.scrobble.getScrobbles' // @ts-ignore 708 + return this._server.xrpc.method(nsid, cfg) 709 + } 710 + } 711 + 712 + export class AppRockskyShoutNS { 713 + _server: Server 714 + 715 + constructor(server: Server) { 716 + this._server = server 717 + } 718 + 719 + createShout<AV extends AuthVerifier>( 720 + cfg: ConfigOf< 721 + AV, 722 + AppRockskyShoutCreateShout.Handler<ExtractAuth<AV>>, 723 + AppRockskyShoutCreateShout.HandlerReqCtx<ExtractAuth<AV>> 724 + >, 725 + ) { 726 + const nsid = 'app.rocksky.shout.createShout' // @ts-ignore 727 + return this._server.xrpc.method(nsid, cfg) 728 + } 729 + 730 + getAlbumShouts<AV extends AuthVerifier>( 731 + cfg: ConfigOf< 732 + AV, 733 + AppRockskyShoutGetAlbumShouts.Handler<ExtractAuth<AV>>, 734 + AppRockskyShoutGetAlbumShouts.HandlerReqCtx<ExtractAuth<AV>> 735 + >, 736 + ) { 737 + const nsid = 'app.rocksky.shout.getAlbumShouts' // @ts-ignore 738 + return this._server.xrpc.method(nsid, cfg) 739 + } 740 + 741 + getArtistShouts<AV extends AuthVerifier>( 742 + cfg: ConfigOf< 743 + AV, 744 + AppRockskyShoutGetArtistShouts.Handler<ExtractAuth<AV>>, 745 + AppRockskyShoutGetArtistShouts.HandlerReqCtx<ExtractAuth<AV>> 746 + >, 747 + ) { 748 + const nsid = 'app.rocksky.shout.getArtistShouts' // @ts-ignore 749 + return this._server.xrpc.method(nsid, cfg) 750 + } 751 + 752 + getProfileShouts<AV extends AuthVerifier>( 753 + cfg: ConfigOf< 754 + AV, 755 + AppRockskyShoutGetProfileShouts.Handler<ExtractAuth<AV>>, 756 + AppRockskyShoutGetProfileShouts.HandlerReqCtx<ExtractAuth<AV>> 757 + >, 758 + ) { 759 + const nsid = 'app.rocksky.shout.getProfileShouts' // @ts-ignore 760 + return this._server.xrpc.method(nsid, cfg) 761 + } 762 + 763 + getShoutReplies<AV extends AuthVerifier>( 764 + cfg: ConfigOf< 765 + AV, 766 + AppRockskyShoutGetShoutReplies.Handler<ExtractAuth<AV>>, 767 + AppRockskyShoutGetShoutReplies.HandlerReqCtx<ExtractAuth<AV>> 768 + >, 769 + ) { 770 + const nsid = 'app.rocksky.shout.getShoutReplies' // @ts-ignore 771 + return this._server.xrpc.method(nsid, cfg) 772 + } 773 + 774 + getTrackShouts<AV extends AuthVerifier>( 775 + cfg: ConfigOf< 776 + AV, 777 + AppRockskyShoutGetTrackShouts.Handler<ExtractAuth<AV>>, 778 + AppRockskyShoutGetTrackShouts.HandlerReqCtx<ExtractAuth<AV>> 779 + >, 780 + ) { 781 + const nsid = 'app.rocksky.shout.getTrackShouts' // @ts-ignore 782 + return this._server.xrpc.method(nsid, cfg) 783 + } 784 + 785 + removeShout<AV extends AuthVerifier>( 786 + cfg: ConfigOf< 787 + AV, 788 + AppRockskyShoutRemoveShout.Handler<ExtractAuth<AV>>, 789 + AppRockskyShoutRemoveShout.HandlerReqCtx<ExtractAuth<AV>> 790 + >, 791 + ) { 792 + const nsid = 'app.rocksky.shout.removeShout' // @ts-ignore 793 + return this._server.xrpc.method(nsid, cfg) 794 + } 795 + 796 + replyShout<AV extends AuthVerifier>( 797 + cfg: ConfigOf< 798 + AV, 799 + AppRockskyShoutReplyShout.Handler<ExtractAuth<AV>>, 800 + AppRockskyShoutReplyShout.HandlerReqCtx<ExtractAuth<AV>> 801 + >, 802 + ) { 803 + const nsid = 'app.rocksky.shout.replyShout' // @ts-ignore 804 + return this._server.xrpc.method(nsid, cfg) 805 + } 806 + 807 + reportShout<AV extends AuthVerifier>( 808 + cfg: ConfigOf< 809 + AV, 810 + AppRockskyShoutReportShout.Handler<ExtractAuth<AV>>, 811 + AppRockskyShoutReportShout.HandlerReqCtx<ExtractAuth<AV>> 812 + >, 813 + ) { 814 + const nsid = 'app.rocksky.shout.reportShout' // @ts-ignore 815 + return this._server.xrpc.method(nsid, cfg) 816 + } 817 + } 818 + 819 + export class AppRockskySongNS { 820 + _server: Server 821 + 822 + constructor(server: Server) { 823 + this._server = server 824 + } 825 + 826 + createSong<AV extends AuthVerifier>( 827 + cfg: ConfigOf< 828 + AV, 829 + AppRockskySongCreateSong.Handler<ExtractAuth<AV>>, 830 + AppRockskySongCreateSong.HandlerReqCtx<ExtractAuth<AV>> 831 + >, 832 + ) { 833 + const nsid = 'app.rocksky.song.createSong' // @ts-ignore 834 + return this._server.xrpc.method(nsid, cfg) 835 + } 836 + 837 + getSong<AV extends AuthVerifier>( 838 + cfg: ConfigOf< 839 + AV, 840 + AppRockskySongGetSong.Handler<ExtractAuth<AV>>, 841 + AppRockskySongGetSong.HandlerReqCtx<ExtractAuth<AV>> 842 + >, 843 + ) { 844 + const nsid = 'app.rocksky.song.getSong' // @ts-ignore 845 + return this._server.xrpc.method(nsid, cfg) 846 + } 847 + 848 + getSongs<AV extends AuthVerifier>( 849 + cfg: ConfigOf< 850 + AV, 851 + AppRockskySongGetSongs.Handler<ExtractAuth<AV>>, 852 + AppRockskySongGetSongs.HandlerReqCtx<ExtractAuth<AV>> 853 + >, 854 + ) { 855 + const nsid = 'app.rocksky.song.getSongs' // @ts-ignore 856 + return this._server.xrpc.method(nsid, cfg) 857 + } 858 + } 859 + 860 + export class AppRockskySpotifyNS { 861 + _server: Server 862 + 863 + constructor(server: Server) { 864 + this._server = server 865 + } 866 + 867 + getCurrentlyPlaying<AV extends AuthVerifier>( 868 + cfg: ConfigOf< 869 + AV, 870 + AppRockskySpotifyGetCurrentlyPlaying.Handler<ExtractAuth<AV>>, 871 + AppRockskySpotifyGetCurrentlyPlaying.HandlerReqCtx<ExtractAuth<AV>> 872 + >, 873 + ) { 874 + const nsid = 'app.rocksky.spotify.getCurrentlyPlaying' // @ts-ignore 875 + return this._server.xrpc.method(nsid, cfg) 876 + } 877 + 878 + next<AV extends AuthVerifier>( 879 + cfg: ConfigOf< 880 + AV, 881 + AppRockskySpotifyNext.Handler<ExtractAuth<AV>>, 882 + AppRockskySpotifyNext.HandlerReqCtx<ExtractAuth<AV>> 883 + >, 884 + ) { 885 + const nsid = 'app.rocksky.spotify.next' // @ts-ignore 886 + return this._server.xrpc.method(nsid, cfg) 887 + } 888 + 889 + pause<AV extends AuthVerifier>( 890 + cfg: ConfigOf< 891 + AV, 892 + AppRockskySpotifyPause.Handler<ExtractAuth<AV>>, 893 + AppRockskySpotifyPause.HandlerReqCtx<ExtractAuth<AV>> 894 + >, 895 + ) { 896 + const nsid = 'app.rocksky.spotify.pause' // @ts-ignore 897 + return this._server.xrpc.method(nsid, cfg) 898 + } 899 + 900 + play<AV extends AuthVerifier>( 901 + cfg: ConfigOf< 902 + AV, 903 + AppRockskySpotifyPlay.Handler<ExtractAuth<AV>>, 904 + AppRockskySpotifyPlay.HandlerReqCtx<ExtractAuth<AV>> 905 + >, 906 + ) { 907 + const nsid = 'app.rocksky.spotify.play' // @ts-ignore 908 + return this._server.xrpc.method(nsid, cfg) 909 + } 910 + 911 + previous<AV extends AuthVerifier>( 912 + cfg: ConfigOf< 913 + AV, 914 + AppRockskySpotifyPrevious.Handler<ExtractAuth<AV>>, 915 + AppRockskySpotifyPrevious.HandlerReqCtx<ExtractAuth<AV>> 916 + >, 917 + ) { 918 + const nsid = 'app.rocksky.spotify.previous' // @ts-ignore 919 + return this._server.xrpc.method(nsid, cfg) 920 + } 921 + 922 + seek<AV extends AuthVerifier>( 923 + cfg: ConfigOf< 924 + AV, 925 + AppRockskySpotifySeek.Handler<ExtractAuth<AV>>, 926 + AppRockskySpotifySeek.HandlerReqCtx<ExtractAuth<AV>> 927 + >, 928 + ) { 929 + const nsid = 'app.rocksky.spotify.seek' // @ts-ignore 930 + return this._server.xrpc.method(nsid, cfg) 931 + } 932 + } 933 + 934 + export class AppRockskyStatsNS { 935 + _server: Server 936 + 937 + constructor(server: Server) { 938 + this._server = server 939 + } 940 + 941 + getStats<AV extends AuthVerifier>( 942 + cfg: ConfigOf< 943 + AV, 944 + AppRockskyStatsGetStats.Handler<ExtractAuth<AV>>, 945 + AppRockskyStatsGetStats.HandlerReqCtx<ExtractAuth<AV>> 946 + >, 947 + ) { 948 + const nsid = 'app.rocksky.stats.getStats' // @ts-ignore 949 + return this._server.xrpc.method(nsid, cfg) 950 + } 951 + } 952 + 953 + export class AppBskyNS { 954 + _server: Server 955 + actor: AppBskyActorNS 956 + 957 + constructor(server: Server) { 958 + this._server = server 959 + this.actor = new AppBskyActorNS(server) 960 + } 961 + } 962 + 963 + export class AppBskyActorNS { 964 + _server: Server 965 + 966 + constructor(server: Server) { 967 + this._server = server 968 + } 969 + } 970 + 971 + export class ComNS { 972 + _server: Server 973 + atproto: ComAtprotoNS 974 + 975 + constructor(server: Server) { 976 + this._server = server 977 + this.atproto = new ComAtprotoNS(server) 978 + } 979 + } 980 + 981 + export class ComAtprotoNS { 982 + _server: Server 983 + repo: ComAtprotoRepoNS 984 + 985 + constructor(server: Server) { 986 + this._server = server 987 + this.repo = new ComAtprotoRepoNS(server) 988 + } 989 + } 990 + 991 + export class ComAtprotoRepoNS { 38 992 _server: Server 39 993 40 994 constructor(server: Server) {
+3728 -35
src/lexicon/lexicons.ts
··· 10 10 import { type $Typed, is$typed, maybe$typed } from './util.js' 11 11 12 12 export const schemaDict = { 13 + AppRockskyActorDefs: { 14 + lexicon: 1, 15 + id: 'app.rocksky.actor.defs', 16 + defs: { 17 + profileViewDetailed: { 18 + type: 'object', 19 + properties: { 20 + id: { 21 + type: 'string', 22 + description: 'The unique identifier of the actor.', 23 + }, 24 + did: { 25 + type: 'string', 26 + description: 'The DID of the actor.', 27 + }, 28 + handle: { 29 + type: 'string', 30 + description: 'The handle of the actor.', 31 + }, 32 + displayName: { 33 + type: 'string', 34 + description: 'The display name of the actor.', 35 + }, 36 + avatar: { 37 + type: 'string', 38 + description: "The URL of the actor's avatar image.", 39 + format: 'uri', 40 + }, 41 + createdAt: { 42 + type: 'string', 43 + description: 'The date and time when the actor was created.', 44 + format: 'datetime', 45 + }, 46 + updatedAt: { 47 + type: 'string', 48 + description: 'The date and time when the actor was last updated.', 49 + format: 'datetime', 50 + }, 51 + }, 52 + }, 53 + profileViewBasic: { 54 + type: 'object', 55 + properties: { 56 + id: { 57 + type: 'string', 58 + description: 'The unique identifier of the actor.', 59 + }, 60 + did: { 61 + type: 'string', 62 + description: 'The DID of the actor.', 63 + }, 64 + handle: { 65 + type: 'string', 66 + description: 'The handle of the actor.', 67 + }, 68 + displayName: { 69 + type: 'string', 70 + description: 'The display name of the actor.', 71 + }, 72 + avatar: { 73 + type: 'string', 74 + description: "The URL of the actor's avatar image.", 75 + format: 'uri', 76 + }, 77 + createdAt: { 78 + type: 'string', 79 + description: 'The date and time when the actor was created.', 80 + format: 'datetime', 81 + }, 82 + updatedAt: { 83 + type: 'string', 84 + description: 'The date and time when the actor was last updated.', 85 + format: 'datetime', 86 + }, 87 + }, 88 + }, 89 + }, 90 + }, 91 + AppRockskyActorGetActorAlbums: { 92 + lexicon: 1, 93 + id: 'app.rocksky.actor.getActorAlbums', 94 + defs: { 95 + main: { 96 + type: 'query', 97 + description: 'Get albums for an actor', 98 + parameters: { 99 + type: 'params', 100 + required: ['did'], 101 + properties: { 102 + did: { 103 + type: 'string', 104 + description: 'The DID or handle of the actor', 105 + format: 'at-identifier', 106 + }, 107 + limit: { 108 + type: 'integer', 109 + description: 'The maximum number of albums to return', 110 + minimum: 1, 111 + }, 112 + offset: { 113 + type: 'integer', 114 + description: 'The offset for pagination', 115 + minimum: 0, 116 + }, 117 + }, 118 + }, 119 + output: { 120 + encoding: 'application/json', 121 + schema: { 122 + type: 'object', 123 + properties: { 124 + albums: { 125 + type: 'array', 126 + items: { 127 + type: 'ref', 128 + ref: 'lex:app.rocksky.album.defs#albumViewBasic', 129 + }, 130 + }, 131 + }, 132 + }, 133 + }, 134 + }, 135 + }, 136 + }, 137 + AppRockskyActorGetActorArtists: { 138 + lexicon: 1, 139 + id: 'app.rocksky.actor.getActorArtists', 140 + defs: { 141 + main: { 142 + type: 'query', 143 + description: 'Get artists for an actor', 144 + parameters: { 145 + type: 'params', 146 + required: ['did'], 147 + properties: { 148 + did: { 149 + type: 'string', 150 + description: 'The DID or handle of the actor', 151 + format: 'at-identifier', 152 + }, 153 + limit: { 154 + type: 'integer', 155 + description: 'The maximum number of albums to return', 156 + minimum: 1, 157 + }, 158 + offset: { 159 + type: 'integer', 160 + description: 'The offset for pagination', 161 + minimum: 0, 162 + }, 163 + }, 164 + }, 165 + output: { 166 + encoding: 'application/json', 167 + schema: { 168 + type: 'object', 169 + properties: { 170 + artists: { 171 + type: 'array', 172 + items: { 173 + type: 'ref', 174 + ref: 'lex:app.rocksky.artist.defs#artistViewBasic', 175 + }, 176 + }, 177 + }, 178 + }, 179 + }, 180 + }, 181 + }, 182 + }, 183 + AppRockskyActorGetActorLovedSongs: { 184 + lexicon: 1, 185 + id: 'app.rocksky.actor.getActorLovedSongs', 186 + defs: { 187 + main: { 188 + type: 'query', 189 + description: 'Get loved songs for an actor', 190 + parameters: { 191 + type: 'params', 192 + required: ['did'], 193 + properties: { 194 + did: { 195 + type: 'string', 196 + description: 'The DID or handle of the actor', 197 + format: 'at-identifier', 198 + }, 199 + limit: { 200 + type: 'integer', 201 + description: 'The maximum number of albums to return', 202 + minimum: 1, 203 + }, 204 + offset: { 205 + type: 'integer', 206 + description: 'The offset for pagination', 207 + minimum: 0, 208 + }, 209 + }, 210 + }, 211 + output: { 212 + encoding: 'application/json', 213 + schema: { 214 + type: 'object', 215 + properties: { 216 + tracks: { 217 + type: 'array', 218 + items: { 219 + type: 'ref', 220 + ref: 'lex:app.rocksky.song.defs#songViewBasic', 221 + }, 222 + }, 223 + }, 224 + }, 225 + }, 226 + }, 227 + }, 228 + }, 229 + AppRockskyActorGetActorPlaylists: { 230 + lexicon: 1, 231 + id: 'app.rocksky.actor.getActorPlaylists', 232 + defs: { 233 + main: { 234 + type: 'query', 235 + description: 'Get playlists for an actor', 236 + parameters: { 237 + type: 'params', 238 + required: ['did'], 239 + properties: { 240 + did: { 241 + type: 'string', 242 + description: 'The DID or handle of the actor', 243 + format: 'at-identifier', 244 + }, 245 + limit: { 246 + type: 'integer', 247 + description: 'The maximum number of albums to return', 248 + minimum: 1, 249 + }, 250 + offset: { 251 + type: 'integer', 252 + description: 'The offset for pagination', 253 + minimum: 0, 254 + }, 255 + }, 256 + }, 257 + output: { 258 + encoding: 'application/json', 259 + schema: { 260 + type: 'object', 261 + properties: { 262 + playlists: { 263 + type: 'array', 264 + items: { 265 + type: 'ref', 266 + ref: 'lex:app.rocksky.playlist.defs#playlistViewBasic', 267 + }, 268 + }, 269 + }, 270 + }, 271 + }, 272 + }, 273 + }, 274 + }, 275 + AppRockskyActorGetActorScrobbles: { 276 + lexicon: 1, 277 + id: 'app.rocksky.actor.getActorScrobbles', 278 + defs: { 279 + main: { 280 + type: 'query', 281 + description: 'Get scrobbles for an actor', 282 + parameters: { 283 + type: 'params', 284 + required: ['did'], 285 + properties: { 286 + did: { 287 + type: 'string', 288 + description: 'The DID or handle of the actor', 289 + format: 'at-identifier', 290 + }, 291 + limit: { 292 + type: 'integer', 293 + description: 'The maximum number of albums to return', 294 + minimum: 1, 295 + }, 296 + offset: { 297 + type: 'integer', 298 + description: 'The offset for pagination', 299 + minimum: 0, 300 + }, 301 + }, 302 + }, 303 + output: { 304 + encoding: 'application/json', 305 + schema: { 306 + type: 'object', 307 + properties: { 308 + scrobbles: { 309 + type: 'array', 310 + items: { 311 + type: 'ref', 312 + ref: 'lex:app.rocksky.scrobble.defs#scrobbleViewBasic', 313 + }, 314 + }, 315 + }, 316 + }, 317 + }, 318 + }, 319 + }, 320 + }, 321 + AppRockskyActorGetActorSongs: { 322 + lexicon: 1, 323 + id: 'app.rocksky.actor.getActorSongs', 324 + defs: { 325 + main: { 326 + type: 'query', 327 + description: 'Get songs for an actor', 328 + parameters: { 329 + type: 'params', 330 + required: ['did'], 331 + properties: { 332 + did: { 333 + type: 'string', 334 + description: 'The DID or handle of the actor', 335 + format: 'at-identifier', 336 + }, 337 + limit: { 338 + type: 'integer', 339 + description: 'The maximum number of albums to return', 340 + minimum: 1, 341 + }, 342 + offset: { 343 + type: 'integer', 344 + description: 'The offset for pagination', 345 + minimum: 0, 346 + }, 347 + }, 348 + }, 349 + output: { 350 + encoding: 'application/json', 351 + schema: { 352 + type: 'object', 353 + properties: { 354 + songs: { 355 + type: 'array', 356 + items: { 357 + type: 'ref', 358 + ref: 'lex:app.rocksky.song.defs#songViewBasic', 359 + }, 360 + }, 361 + }, 362 + }, 363 + }, 364 + }, 365 + }, 366 + }, 367 + AppRockskyActorGetProfile: { 368 + lexicon: 1, 369 + id: 'app.rocksky.actor.getProfile', 370 + defs: { 371 + main: { 372 + type: 'query', 373 + description: 'Get the profile of an actor', 374 + parameters: { 375 + type: 'params', 376 + properties: { 377 + did: { 378 + type: 'string', 379 + description: 'The DID or handle of the actor', 380 + format: 'at-identifier', 381 + }, 382 + }, 383 + }, 384 + output: { 385 + encoding: 'application/json', 386 + schema: { 387 + type: 'ref', 388 + ref: 'lex:app.rocksky.actor.defs#profileViewDetailed', 389 + }, 390 + }, 391 + }, 392 + }, 393 + }, 394 + AppBskyActorProfile: { 395 + lexicon: 1, 396 + id: 'app.bsky.actor.profile', 397 + defs: { 398 + main: { 399 + type: 'record', 400 + description: 'A declaration of a Bluesky account profile.', 401 + key: 'literal:self', 402 + record: { 403 + type: 'object', 404 + properties: { 405 + displayName: { 406 + type: 'string', 407 + maxGraphemes: 64, 408 + maxLength: 640, 409 + }, 410 + description: { 411 + type: 'string', 412 + description: 'Free-form profile description text.', 413 + maxGraphemes: 256, 414 + maxLength: 2560, 415 + }, 416 + avatar: { 417 + type: 'blob', 418 + description: 419 + "Small image to be displayed next to posts from account. AKA, 'profile picture'", 420 + accept: ['image/png', 'image/jpeg'], 421 + maxSize: 1000000, 422 + }, 423 + banner: { 424 + type: 'blob', 425 + description: 426 + 'Larger horizontal image to display behind profile view.', 427 + accept: ['image/png', 'image/jpeg'], 428 + maxSize: 10000000, 429 + }, 430 + labels: { 431 + type: 'union', 432 + description: 433 + 'Self-label values, specific to the Bluesky application, on the overall account.', 434 + refs: ['lex:com.atproto.label.defs#selfLabels'], 435 + }, 436 + joinedViaStarterPack: { 437 + type: 'ref', 438 + ref: 'lex:com.atproto.repo.strongRef', 439 + }, 440 + createdAt: { 441 + type: 'string', 442 + format: 'datetime', 443 + }, 444 + }, 445 + }, 446 + }, 447 + }, 448 + }, 13 449 AppRockskyAlbum: { 14 450 lexicon: 1, 15 451 id: 'app.rocksky.album', 16 452 defs: { 17 453 main: { 18 454 type: 'record', 19 - key: 'tid', 20 455 description: 'A declaration of an album.', 456 + key: 'tid', 21 457 record: { 22 458 type: 'object', 23 459 required: ['title', 'artist', 'createdAt'], ··· 79 515 }, 80 516 tidalLink: { 81 517 type: 'string', 82 - description: 'The Tidal link of the album.', 518 + description: 'The tidal link of the album.', 83 519 format: 'uri', 84 520 }, 85 521 appleMusicLink: { ··· 89 525 }, 90 526 createdAt: { 91 527 type: 'string', 92 - description: 'The date the song was created.', 528 + description: 'The date and time when the album was created.', 93 529 format: 'datetime', 94 530 }, 95 531 }, ··· 97 533 }, 98 534 }, 99 535 }, 536 + AppRockskyAlbumDefs: { 537 + lexicon: 1, 538 + id: 'app.rocksky.album.defs', 539 + defs: { 540 + albumViewBasic: { 541 + type: 'object', 542 + properties: { 543 + id: { 544 + type: 'string', 545 + description: 'The unique identifier of the album.', 546 + }, 547 + uri: { 548 + type: 'string', 549 + description: 'The URI of the album.', 550 + format: 'at-uri', 551 + }, 552 + title: { 553 + type: 'string', 554 + description: 'The title of the album.', 555 + }, 556 + artist: { 557 + type: 'string', 558 + description: 'The artist of the album.', 559 + }, 560 + artistUri: { 561 + type: 'string', 562 + description: "The URI of the album's artist.", 563 + format: 'at-uri', 564 + }, 565 + year: { 566 + type: 'integer', 567 + description: 'The year the album was released.', 568 + }, 569 + albumArt: { 570 + type: 'string', 571 + description: 'The URL of the album art image.', 572 + format: 'uri', 573 + }, 574 + releaseDate: { 575 + type: 'string', 576 + description: 'The release date of the album.', 577 + }, 578 + sha256: { 579 + type: 'string', 580 + description: 'The SHA256 hash of the album.', 581 + }, 582 + playCount: { 583 + type: 'integer', 584 + description: 'The number of times the album has been played.', 585 + minimum: 0, 586 + }, 587 + uniqueListeners: { 588 + type: 'integer', 589 + description: 590 + 'The number of unique listeners who have played the album.', 591 + minimum: 0, 592 + }, 593 + }, 594 + }, 595 + albumViewDetailed: { 596 + type: 'object', 597 + properties: { 598 + id: { 599 + type: 'string', 600 + description: 'The unique identifier of the album.', 601 + }, 602 + uri: { 603 + type: 'string', 604 + description: 'The URI of the album.', 605 + format: 'at-uri', 606 + }, 607 + title: { 608 + type: 'string', 609 + description: 'The title of the album.', 610 + }, 611 + artist: { 612 + type: 'string', 613 + description: 'The artist of the album.', 614 + }, 615 + artistUri: { 616 + type: 'string', 617 + description: "The URI of the album's artist.", 618 + format: 'at-uri', 619 + }, 620 + year: { 621 + type: 'integer', 622 + description: 'The year the album was released.', 623 + }, 624 + albumArt: { 625 + type: 'string', 626 + description: 'The URL of the album art image.', 627 + format: 'uri', 628 + }, 629 + releaseDate: { 630 + type: 'string', 631 + description: 'The release date of the album.', 632 + }, 633 + sha256: { 634 + type: 'string', 635 + description: 'The SHA256 hash of the album.', 636 + }, 637 + playCount: { 638 + type: 'integer', 639 + description: 'The number of times the album has been played.', 640 + minimum: 0, 641 + }, 642 + uniqueListeners: { 643 + type: 'integer', 644 + description: 645 + 'The number of unique listeners who have played the album.', 646 + minimum: 0, 647 + }, 648 + tracks: { 649 + type: 'array', 650 + items: { 651 + type: 'ref', 652 + ref: 'lex:app.rocksky.song.defs.songViewBasic', 653 + }, 654 + }, 655 + }, 656 + }, 657 + }, 658 + }, 659 + AppRockskyAlbumGetAlbum: { 660 + lexicon: 1, 661 + id: 'app.rocksky.album.getAlbum', 662 + defs: { 663 + main: { 664 + type: 'query', 665 + description: 'Get detailed album view', 666 + parameters: { 667 + type: 'params', 668 + required: ['uri'], 669 + properties: { 670 + uri: { 671 + type: 'string', 672 + description: 'The URI of the album to retrieve.', 673 + format: 'at-uri', 674 + }, 675 + }, 676 + }, 677 + output: { 678 + encoding: 'application/json', 679 + schema: { 680 + type: 'ref', 681 + ref: 'lex:app.rocksky.album.defs#albumViewDetailed', 682 + }, 683 + }, 684 + }, 685 + }, 686 + }, 687 + AppRockskyAlbumGetAlbums: { 688 + lexicon: 1, 689 + id: 'app.rocksky.album.getAlbums', 690 + defs: { 691 + main: { 692 + type: 'query', 693 + description: 'Get albums', 694 + parameters: { 695 + type: 'params', 696 + properties: { 697 + limit: { 698 + type: 'integer', 699 + description: 'The maximum number of albums to return', 700 + minimum: 1, 701 + }, 702 + offset: { 703 + type: 'integer', 704 + description: 'The offset for pagination', 705 + minimum: 0, 706 + }, 707 + }, 708 + }, 709 + output: { 710 + encoding: 'application/json', 711 + schema: { 712 + type: 'object', 713 + properties: { 714 + albums: { 715 + type: 'array', 716 + items: { 717 + type: 'ref', 718 + ref: 'lex:app.rocksky.album.defs#albumViewBasic', 719 + }, 720 + }, 721 + }, 722 + }, 723 + }, 724 + }, 725 + }, 726 + }, 727 + AppRockskyAlbumGetAlbumTracks: { 728 + lexicon: 1, 729 + id: 'app.rocksky.album.getAlbumTracks', 730 + defs: { 731 + main: { 732 + type: 'query', 733 + description: 'Get tracks for an album', 734 + parameters: { 735 + type: 'params', 736 + required: ['uri'], 737 + properties: { 738 + uri: { 739 + type: 'string', 740 + description: 'The URI of the album to retrieve tracks from', 741 + format: 'at-uri', 742 + }, 743 + }, 744 + }, 745 + output: { 746 + encoding: 'application/json', 747 + schema: { 748 + type: 'object', 749 + properties: { 750 + tracks: { 751 + type: 'array', 752 + items: { 753 + type: 'ref', 754 + ref: 'lex:app.rocksky.song.defs#songViewBasic', 755 + }, 756 + }, 757 + }, 758 + }, 759 + }, 760 + }, 761 + }, 762 + }, 763 + AppRockskyApikeyCreateApikey: { 764 + lexicon: 1, 765 + id: 'app.rocksky.apikey.createApikey', 766 + defs: { 767 + main: { 768 + type: 'procedure', 769 + description: 'Create a new API key for the authenticated user', 770 + input: { 771 + encoding: 'application/json', 772 + schema: { 773 + type: 'object', 774 + required: ['name'], 775 + properties: { 776 + name: { 777 + type: 'string', 778 + description: 'The name of the API key.', 779 + }, 780 + description: { 781 + type: 'string', 782 + description: 'A description for the API key.', 783 + }, 784 + }, 785 + }, 786 + }, 787 + output: { 788 + encoding: 'application/json', 789 + schema: { 790 + type: 'ref', 791 + ref: 'lex:app.rocksky.apikey.defs#apiKey', 792 + }, 793 + }, 794 + }, 795 + }, 796 + }, 797 + AppRockskyApikeyDefs: { 798 + lexicon: 1, 799 + id: 'app.rocksky.apikey.defs', 800 + defs: { 801 + apiKeyView: { 802 + type: 'object', 803 + properties: { 804 + id: { 805 + type: 'string', 806 + description: 'The unique identifier of the API key.', 807 + }, 808 + name: { 809 + type: 'string', 810 + description: 'The name of the API key.', 811 + }, 812 + description: { 813 + type: 'string', 814 + description: 'A description for the API key.', 815 + }, 816 + createdAt: { 817 + type: 'string', 818 + description: 'The date and time when the API key was created.', 819 + format: 'datetime', 820 + }, 821 + }, 822 + }, 823 + }, 824 + }, 825 + AppRockskyApikeysDefs: { 826 + lexicon: 1, 827 + id: 'app.rocksky.apikeys.defs', 828 + defs: {}, 829 + }, 830 + AppRockskyApikeyGetApikeys: { 831 + lexicon: 1, 832 + id: 'app.rocksky.apikey.getApikeys', 833 + defs: { 834 + main: { 835 + type: 'query', 836 + description: 'Get a list of API keys for the authenticated user', 837 + parameters: { 838 + type: 'params', 839 + properties: { 840 + offset: { 841 + type: 'integer', 842 + description: 843 + 'The number of API keys to skip before starting to collect the result set.', 844 + }, 845 + limit: { 846 + type: 'integer', 847 + description: 'The number of API keys to return per page.', 848 + }, 849 + }, 850 + }, 851 + output: { 852 + encoding: 'application/json', 853 + schema: { 854 + type: 'object', 855 + properties: { 856 + apiKeys: { 857 + type: 'array', 858 + items: { 859 + type: 'ref', 860 + ref: 'lex:app.rocksky.apikey.defs#apikeyView', 861 + }, 862 + }, 863 + }, 864 + }, 865 + }, 866 + }, 867 + }, 868 + }, 869 + AppRockskyApikeyRemoveApikey: { 870 + lexicon: 1, 871 + id: 'app.rocksky.apikey.removeApikey', 872 + defs: { 873 + main: { 874 + type: 'procedure', 875 + description: 'Remove an API key for the authenticated user', 876 + parameters: { 877 + type: 'params', 878 + required: ['id'], 879 + properties: { 880 + id: { 881 + type: 'string', 882 + description: 'The ID of the API key to remove.', 883 + }, 884 + }, 885 + }, 886 + output: { 887 + encoding: 'application/json', 888 + schema: { 889 + type: 'ref', 890 + ref: 'lex:app.rocksky.apikey.defs#apiKey', 891 + }, 892 + }, 893 + }, 894 + }, 895 + }, 896 + AppRockskyApikeyUpdateApikey: { 897 + lexicon: 1, 898 + id: 'app.rocksky.apikey.updateApikey', 899 + defs: { 900 + main: { 901 + type: 'procedure', 902 + description: 'Update an existing API key for the authenticated user', 903 + input: { 904 + encoding: 'application/json', 905 + schema: { 906 + type: 'object', 907 + required: ['id', 'name'], 908 + properties: { 909 + id: { 910 + type: 'string', 911 + description: 'The ID of the API key to update.', 912 + }, 913 + name: { 914 + type: 'string', 915 + description: 'The new name of the API key.', 916 + }, 917 + description: { 918 + type: 'string', 919 + description: 'A new description for the API key.', 920 + }, 921 + }, 922 + }, 923 + }, 924 + output: { 925 + encoding: 'application/json', 926 + schema: { 927 + type: 'ref', 928 + ref: 'lex:app.rocksky.apikey.defs#apiKey', 929 + }, 930 + }, 931 + }, 932 + }, 933 + }, 100 934 AppRockskyArtist: { 101 935 lexicon: 1, 102 936 id: 'app.rocksky.artist', 103 937 defs: { 104 938 main: { 105 939 type: 'record', 106 - key: 'tid', 107 940 description: 'A declaration of an artist.', 941 + key: 'tid', 108 942 record: { 109 943 type: 'object', 110 944 required: ['name', 'createdAt'], ··· 152 986 }, 153 987 createdAt: { 154 988 type: 'string', 155 - description: 'The date the song was created.', 989 + description: 'The date when the artist was created.', 990 + format: 'datetime', 991 + }, 992 + }, 993 + }, 994 + }, 995 + }, 996 + }, 997 + AppRockskyArtistDefs: { 998 + lexicon: 1, 999 + id: 'app.rocksky.artist.defs', 1000 + defs: { 1001 + artistViewBasic: { 1002 + type: 'object', 1003 + properties: { 1004 + id: { 1005 + type: 'string', 1006 + description: 'The unique identifier of the artist.', 1007 + }, 1008 + uri: { 1009 + type: 'string', 1010 + description: 'The URI of the artist.', 1011 + format: 'at-uri', 1012 + }, 1013 + name: { 1014 + type: 'string', 1015 + description: 'The name of the artist.', 1016 + }, 1017 + picture: { 1018 + type: 'string', 1019 + description: 'The picture of the artist.', 1020 + }, 1021 + sha256: { 1022 + type: 'string', 1023 + description: 'The SHA256 hash of the artist.', 1024 + }, 1025 + playCount: { 1026 + type: 'integer', 1027 + description: 'The number of times the artist has been played.', 1028 + minimum: 0, 1029 + }, 1030 + uniqueListeners: { 1031 + type: 'integer', 1032 + description: 1033 + 'The number of unique listeners who have played the artist.', 1034 + minimum: 0, 1035 + }, 1036 + }, 1037 + }, 1038 + artistViewDetailed: { 1039 + type: 'object', 1040 + properties: { 1041 + id: { 1042 + type: 'string', 1043 + description: 'The unique identifier of the artist.', 1044 + }, 1045 + uri: { 1046 + type: 'string', 1047 + description: 'The URI of the artist.', 1048 + format: 'at-uri', 1049 + }, 1050 + name: { 1051 + type: 'string', 1052 + description: 'The name of the artist.', 1053 + }, 1054 + picture: { 1055 + type: 'string', 1056 + description: 'The picture of the artist.', 1057 + }, 1058 + sha256: { 1059 + type: 'string', 1060 + description: 'The SHA256 hash of the artist.', 1061 + }, 1062 + playCount: { 1063 + type: 'integer', 1064 + description: 'The number of times the artist has been played.', 1065 + minimum: 0, 1066 + }, 1067 + uniqueListeners: { 1068 + type: 'integer', 1069 + description: 1070 + 'The number of unique listeners who have played the artist.', 1071 + minimum: 0, 1072 + }, 1073 + }, 1074 + }, 1075 + }, 1076 + }, 1077 + AppRockskyArtistGetArtistAlbums: { 1078 + lexicon: 1, 1079 + id: 'app.rocksky.artist.getArtistAlbums', 1080 + defs: { 1081 + main: { 1082 + type: 'query', 1083 + description: "Get artist's albums", 1084 + parameters: { 1085 + type: 'params', 1086 + required: ['uri'], 1087 + properties: { 1088 + uri: { 1089 + type: 'string', 1090 + description: 'The URI of the artist to retrieve albums from', 1091 + format: 'at-uri', 1092 + }, 1093 + }, 1094 + }, 1095 + output: { 1096 + encoding: 'application/json', 1097 + schema: { 1098 + type: 'object', 1099 + properties: { 1100 + albums: { 1101 + type: 'array', 1102 + items: { 1103 + type: 'ref', 1104 + ref: 'lex:app.rocksky.album.defs#albumViewBasic', 1105 + }, 1106 + }, 1107 + }, 1108 + }, 1109 + }, 1110 + }, 1111 + }, 1112 + }, 1113 + AppRockskyArtistGetArtist: { 1114 + lexicon: 1, 1115 + id: 'app.rocksky.artist.getArtist', 1116 + defs: { 1117 + main: { 1118 + type: 'query', 1119 + description: 'Get artist details', 1120 + parameters: { 1121 + type: 'params', 1122 + required: ['uri'], 1123 + properties: { 1124 + uri: { 1125 + type: 'string', 1126 + description: 'The URI of the artist to retrieve details from', 1127 + format: 'at-uri', 1128 + }, 1129 + }, 1130 + }, 1131 + output: { 1132 + encoding: 'application/json', 1133 + schema: { 1134 + type: 'ref', 1135 + ref: 'lex:app.rocksky.artist.defs#artistViewDetailed', 1136 + }, 1137 + }, 1138 + }, 1139 + }, 1140 + }, 1141 + AppRockskyArtistGetArtists: { 1142 + lexicon: 1, 1143 + id: 'app.rocksky.artist.getArtists', 1144 + defs: { 1145 + main: { 1146 + type: 'query', 1147 + description: 'Get artists', 1148 + parameters: { 1149 + type: 'params', 1150 + properties: { 1151 + limit: { 1152 + type: 'integer', 1153 + description: 'The maximum number of artists to return', 1154 + minimum: 1, 1155 + }, 1156 + offset: { 1157 + type: 'integer', 1158 + description: 'The offset for pagination', 1159 + minimum: 0, 1160 + }, 1161 + }, 1162 + }, 1163 + output: { 1164 + encoding: 'application/json', 1165 + schema: { 1166 + type: 'object', 1167 + properties: { 1168 + artists: { 1169 + type: 'array', 1170 + items: { 1171 + type: 'ref', 1172 + ref: 'lex:app.rocksky.artist.defs#artistViewBasic', 1173 + }, 1174 + }, 1175 + }, 1176 + }, 1177 + }, 1178 + }, 1179 + }, 1180 + }, 1181 + AppRockskyArtistGetArtistTracks: { 1182 + lexicon: 1, 1183 + id: 'app.rocksky.artist.getArtistTracks', 1184 + defs: { 1185 + main: { 1186 + type: 'query', 1187 + description: "Get artist's tracks", 1188 + parameters: { 1189 + type: 'params', 1190 + properties: { 1191 + uri: { 1192 + type: 'string', 1193 + description: 'The URI of the artist to retrieve albums from', 1194 + format: 'at-uri', 1195 + }, 1196 + limit: { 1197 + type: 'integer', 1198 + description: 'The maximum number of tracks to return', 1199 + minimum: 1, 1200 + }, 1201 + offset: { 1202 + type: 'integer', 1203 + description: 'The offset for pagination', 1204 + minimum: 0, 1205 + }, 1206 + }, 1207 + }, 1208 + output: { 1209 + encoding: 'application/json', 1210 + schema: { 1211 + type: 'object', 1212 + properties: { 1213 + tracks: { 1214 + type: 'array', 1215 + items: { 1216 + type: 'ref', 1217 + ref: 'lex:app.rocksky.song.defs#songViewBasic', 1218 + }, 1219 + }, 1220 + }, 1221 + }, 1222 + }, 1223 + }, 1224 + }, 1225 + }, 1226 + AppRockskyChartsDefs: { 1227 + lexicon: 1, 1228 + id: 'app.rocksky.charts.defs', 1229 + defs: { 1230 + chartsView: { 1231 + type: 'object', 1232 + properties: { 1233 + scrobbles: { 1234 + type: 'array', 1235 + items: { 1236 + type: 'ref', 1237 + ref: 'lex:app.rocksky.charts.defs#scrobbleViewBasic', 1238 + }, 1239 + }, 1240 + }, 1241 + }, 1242 + scrobbleViewBasic: { 1243 + type: 'object', 1244 + properties: { 1245 + date: { 1246 + type: 'string', 1247 + description: 'The date of the scrobble.', 1248 + format: 'datetime', 1249 + }, 1250 + count: { 1251 + type: 'integer', 1252 + description: 'The number of scrobbles on this date.', 1253 + }, 1254 + }, 1255 + }, 1256 + }, 1257 + }, 1258 + AppRockskyChartsGetScrobblesChart: { 1259 + lexicon: 1, 1260 + id: 'app.rocksky.charts.getScrobblesChart', 1261 + defs: { 1262 + main: { 1263 + type: 'query', 1264 + description: 'Get the scrobbles chart', 1265 + parameters: { 1266 + type: 'params', 1267 + properties: { 1268 + did: { 1269 + type: 'string', 1270 + description: 'The DID or handle of the actor', 1271 + format: 'at-identifier', 1272 + }, 1273 + artisturi: { 1274 + type: 'string', 1275 + description: 'The URI of the artist to filter by', 1276 + format: 'at-uri', 1277 + }, 1278 + albumuri: { 1279 + type: 'string', 1280 + description: 'The URI of the album to filter by', 1281 + format: 'at-uri', 1282 + }, 1283 + songuri: { 1284 + type: 'string', 1285 + description: 'The URI of the track to filter by', 1286 + format: 'at-uri', 1287 + }, 1288 + }, 1289 + }, 1290 + output: { 1291 + encoding: 'application/json', 1292 + schema: { 1293 + type: 'ref', 1294 + ref: 'lex:app.rocksky.charts.defs#chartsView', 1295 + }, 1296 + }, 1297 + }, 1298 + }, 1299 + }, 1300 + AppRockskyDropboxDefs: { 1301 + lexicon: 1, 1302 + id: 'app.rocksky.dropbox.defs', 1303 + defs: { 1304 + fileView: { 1305 + type: 'object', 1306 + properties: { 1307 + id: { 1308 + type: 'string', 1309 + description: 'The unique identifier of the file.', 1310 + }, 1311 + name: { 1312 + type: 'string', 1313 + description: 'The name of the file.', 1314 + }, 1315 + pathLower: { 1316 + type: 'string', 1317 + description: 'The lowercased path of the file.', 1318 + }, 1319 + pathDisplay: { 1320 + type: 'string', 1321 + description: 'The display path of the file.', 1322 + }, 1323 + clientModified: { 1324 + type: 'string', 1325 + description: 1326 + 'The last modified date and time of the file on the client.', 1327 + format: 'datetime', 1328 + }, 1329 + serverModified: { 1330 + type: 'string', 1331 + description: 1332 + 'The last modified date and time of the file on the server.', 1333 + format: 'datetime', 1334 + }, 1335 + }, 1336 + }, 1337 + fileListView: { 1338 + type: 'object', 1339 + properties: { 1340 + files: { 1341 + type: 'array', 1342 + description: 'A list of files in the Dropbox.', 1343 + items: { 1344 + type: 'ref', 1345 + ref: 'lex:app.rocksky.dropbox.defs#fileView', 1346 + }, 1347 + }, 1348 + }, 1349 + }, 1350 + temporaryLinkView: { 1351 + type: 'object', 1352 + properties: { 1353 + link: { 1354 + type: 'string', 1355 + description: 'The temporary link to access the file.', 1356 + format: 'uri', 1357 + }, 1358 + }, 1359 + }, 1360 + }, 1361 + }, 1362 + AppRockskyDropboxDownloadFile: { 1363 + lexicon: 1, 1364 + id: 'app.rocksky.dropbox.downloadFile', 1365 + defs: { 1366 + main: { 1367 + type: 'query', 1368 + description: 'Download a file from Dropbox by its unique identifier', 1369 + parameters: { 1370 + type: 'params', 1371 + required: ['fileId'], 1372 + properties: { 1373 + fileId: { 1374 + type: 'string', 1375 + description: 'The unique identifier of the file to download', 1376 + }, 1377 + }, 1378 + }, 1379 + output: { 1380 + encoding: 'application/octet-stream', 1381 + }, 1382 + }, 1383 + }, 1384 + }, 1385 + AppRockskyDropboxGetFiles: { 1386 + lexicon: 1, 1387 + id: 'app.rocksky.dropbox.getFiles', 1388 + defs: { 1389 + main: { 1390 + type: 'query', 1391 + description: 'Retrieve a list of files from Dropbox', 1392 + parameters: { 1393 + type: 'params', 1394 + properties: { 1395 + at: { 1396 + type: 'string', 1397 + description: 'Path to the Dropbox folder or root directory', 1398 + }, 1399 + }, 1400 + }, 1401 + output: { 1402 + encoding: 'application/json', 1403 + schema: { 1404 + type: 'ref', 1405 + ref: 'lex:app.rocksky.dropbox.defs#fileListView', 1406 + }, 1407 + }, 1408 + }, 1409 + }, 1410 + }, 1411 + AppRockskyDropboxGetMetadata: { 1412 + lexicon: 1, 1413 + id: 'app.rocksky.dropbox.getMetadata', 1414 + defs: { 1415 + main: { 1416 + type: 'query', 1417 + description: 'Retrieve metadata of a file or folder in Dropbox', 1418 + parameters: { 1419 + type: 'params', 1420 + required: ['path'], 1421 + properties: { 1422 + path: { 1423 + type: 'string', 1424 + description: 'Path to the file or folder in Dropbox', 1425 + }, 1426 + }, 1427 + }, 1428 + output: { 1429 + encoding: 'application/json', 1430 + schema: { 1431 + type: 'ref', 1432 + ref: 'lex:app.rocksky.dropbox.defs#fileView', 1433 + }, 1434 + }, 1435 + }, 1436 + }, 1437 + }, 1438 + AppRockskyDropboxGetTemporaryLink: { 1439 + lexicon: 1, 1440 + id: 'app.rocksky.dropbox.getTemporaryLink', 1441 + defs: { 1442 + main: { 1443 + type: 'query', 1444 + description: 'Retrieve a temporary link to access a file in Dropbox', 1445 + parameters: { 1446 + type: 'params', 1447 + required: ['path'], 1448 + properties: { 1449 + path: { 1450 + type: 'string', 1451 + description: 'Path to the file in Dropbox', 1452 + }, 1453 + }, 1454 + }, 1455 + output: { 1456 + encoding: 'application/json', 1457 + schema: { 1458 + type: 'ref', 1459 + ref: 'lex:app.rocksky.dropbox.defs#temporaryLinkView', 1460 + }, 1461 + }, 1462 + }, 1463 + }, 1464 + }, 1465 + AppRockskyFeedDefs: { 1466 + lexicon: 1, 1467 + id: 'app.rocksky.feed.defs', 1468 + defs: { 1469 + searchResultsView: { 1470 + type: 'object', 1471 + properties: { 1472 + hits: { 1473 + type: 'array', 1474 + items: { 1475 + type: 'union', 1476 + refs: [ 1477 + 'lex:app.rocksky.song.defs#songViewBasic', 1478 + 'lex:app.rocksky.album.defs#albumViewBasic', 1479 + 'lex:app.rocksky.artist.defs#artistViewBasic', 1480 + 'lex:app.rocksky.playlist.defs#playlistViewBasic', 1481 + 'lex:app.rocksky.actor.defs#profileViewBasic', 1482 + ], 1483 + }, 1484 + }, 1485 + processingTimeMs: { 1486 + type: 'integer', 1487 + }, 1488 + limit: { 1489 + type: 'integer', 1490 + }, 1491 + offset: { 1492 + type: 'integer', 1493 + }, 1494 + estimatedTotalHits: { 1495 + type: 'integer', 1496 + }, 1497 + }, 1498 + }, 1499 + nowPlayingView: { 1500 + type: 'object', 1501 + properties: { 1502 + album: { 1503 + type: 'string', 1504 + }, 1505 + albumArt: { 1506 + type: 'string', 1507 + format: 'uri', 1508 + }, 1509 + albumArtist: { 1510 + type: 'string', 1511 + }, 1512 + albumUri: { 1513 + type: 'string', 1514 + format: 'at-uri', 1515 + }, 1516 + artist: { 1517 + type: 'string', 1518 + }, 1519 + artistUri: { 1520 + type: 'string', 1521 + format: 'at-uri', 1522 + }, 1523 + avatar: { 1524 + type: 'string', 1525 + format: 'uri', 1526 + }, 1527 + createdAt: { 1528 + type: 'string', 1529 + }, 1530 + did: { 1531 + type: 'string', 1532 + format: 'at-identifier', 1533 + }, 1534 + handle: { 1535 + type: 'string', 1536 + }, 1537 + id: { 1538 + type: 'string', 1539 + }, 1540 + title: { 1541 + type: 'string', 1542 + }, 1543 + trackId: { 1544 + type: 'string', 1545 + }, 1546 + trackUri: { 1547 + type: 'string', 1548 + format: 'at-uri', 1549 + }, 1550 + uri: { 1551 + type: 'string', 1552 + format: 'at-uri', 1553 + }, 1554 + }, 1555 + }, 1556 + nowPlayingsView: { 1557 + type: 'object', 1558 + properties: { 1559 + nowPlayings: { 1560 + type: 'array', 1561 + items: { 1562 + type: 'ref', 1563 + ref: 'lex:app.rocksky.feed.defs#nowPlayingView', 1564 + }, 1565 + }, 1566 + }, 1567 + }, 1568 + }, 1569 + }, 1570 + AppRockskyFeedGetNowPlayings: { 1571 + lexicon: 1, 1572 + id: 'app.rocksky.feed.getNowPlayings', 1573 + defs: { 1574 + main: { 1575 + type: 'query', 1576 + description: 'Get all currently playing tracks by users', 1577 + parameters: { 1578 + type: 'params', 1579 + properties: { 1580 + size: { 1581 + type: 'integer', 1582 + description: 1583 + 'The maximum number of now playing tracks to return.', 1584 + minimum: 1, 1585 + }, 1586 + }, 1587 + }, 1588 + output: { 1589 + encoding: 'application/json', 1590 + schema: { 1591 + type: 'ref', 1592 + ref: 'lex:app.rocksky.feed.defs#nowPlayingsView', 1593 + }, 1594 + }, 1595 + }, 1596 + }, 1597 + }, 1598 + AppRockskyFeedSearch: { 1599 + lexicon: 1, 1600 + id: 'app.rocksky.feed.search', 1601 + defs: { 1602 + main: { 1603 + type: 'query', 1604 + description: 'Search for content in the feed', 1605 + parameters: { 1606 + type: 'params', 1607 + required: ['query'], 1608 + properties: { 1609 + query: { 1610 + type: 'string', 1611 + description: 'The search query string', 1612 + }, 1613 + }, 1614 + }, 1615 + output: { 1616 + encoding: 'application/json', 1617 + schema: { 1618 + type: 'ref', 1619 + ref: 'lex:app.rocksky.feed.defs#searchResultsView', 1620 + }, 1621 + }, 1622 + }, 1623 + }, 1624 + }, 1625 + AppRockskyGoogledriveDefs: { 1626 + lexicon: 1, 1627 + id: 'app.rocksky.googledrive.defs', 1628 + defs: { 1629 + fileView: { 1630 + type: 'object', 1631 + properties: { 1632 + id: { 1633 + type: 'string', 1634 + description: 'The unique identifier of the file.', 1635 + }, 1636 + }, 1637 + }, 1638 + fileListView: { 1639 + type: 'object', 1640 + properties: { 1641 + files: { 1642 + type: 'array', 1643 + items: { 1644 + type: 'ref', 1645 + ref: 'lex:app.rocksky.googledrive.defs#fileView', 1646 + }, 1647 + }, 1648 + }, 1649 + }, 1650 + }, 1651 + }, 1652 + AppRockskyGoogledriveDownloadFile: { 1653 + lexicon: 1, 1654 + id: 'app.rocksky.googledrive.downloadFile', 1655 + defs: { 1656 + main: { 1657 + type: 'query', 1658 + description: 1659 + 'Download a file from Google Drive by its unique identifier', 1660 + parameters: { 1661 + type: 'params', 1662 + required: ['fileId'], 1663 + properties: { 1664 + fileId: { 1665 + type: 'string', 1666 + description: 'The unique identifier of the file to download', 1667 + }, 1668 + }, 1669 + }, 1670 + output: { 1671 + encoding: 'application/octet-stream', 1672 + }, 1673 + }, 1674 + }, 1675 + }, 1676 + AppRockskyGoogledriveGetFile: { 1677 + lexicon: 1, 1678 + id: 'app.rocksky.googledrive.getFile', 1679 + defs: { 1680 + main: { 1681 + type: 'query', 1682 + description: 'Get a file from Google Drive by its unique identifier', 1683 + parameters: { 1684 + type: 'params', 1685 + required: ['fileId'], 1686 + properties: { 1687 + fileId: { 1688 + type: 'string', 1689 + description: 'The unique identifier of the file to retrieve', 1690 + }, 1691 + }, 1692 + }, 1693 + output: { 1694 + encoding: 'application/json', 1695 + schema: { 1696 + type: 'ref', 1697 + ref: 'lex:app.rocksky.googledrive.defs#fileView', 1698 + }, 1699 + }, 1700 + }, 1701 + }, 1702 + }, 1703 + AppRockskyGoogledriveGetFiles: { 1704 + lexicon: 1, 1705 + id: 'app.rocksky.googledrive.getFiles', 1706 + defs: { 1707 + main: { 1708 + type: 'query', 1709 + description: 'Get a list of files from Google Drive', 1710 + parameters: { 1711 + type: 'params', 1712 + properties: { 1713 + at: { 1714 + type: 'string', 1715 + description: 'Path to the Google Drive folder or root directory', 1716 + }, 1717 + }, 1718 + }, 1719 + output: { 1720 + encoding: 'application/json', 1721 + schema: { 1722 + type: 'ref', 1723 + ref: 'lex:app.rocksky.googledrive.defs#fileListView', 1724 + }, 1725 + }, 1726 + }, 1727 + }, 1728 + }, 1729 + AppRockskyLikeDislikeShout: { 1730 + lexicon: 1, 1731 + id: 'app.rocksky.like.dislikeShout', 1732 + defs: { 1733 + main: { 1734 + type: 'procedure', 1735 + description: 'Dislike a shout', 1736 + input: { 1737 + encoding: 'application/json', 1738 + schema: { 1739 + type: 'object', 1740 + properties: { 1741 + uri: { 1742 + type: 'string', 1743 + description: 'The unique identifier of the shout to dislike', 1744 + format: 'at-uri', 1745 + }, 1746 + }, 1747 + }, 1748 + }, 1749 + output: { 1750 + encoding: 'application/json', 1751 + schema: { 1752 + type: 'ref', 1753 + ref: 'lex:app.rocksky.shout.defs#shoutView', 1754 + }, 1755 + }, 1756 + }, 1757 + }, 1758 + }, 1759 + AppRockskyLikeDislikeSong: { 1760 + lexicon: 1, 1761 + id: 'app.rocksky.like.dislikeSong', 1762 + defs: { 1763 + main: { 1764 + type: 'procedure', 1765 + description: 'Dislike a song', 1766 + input: { 1767 + encoding: 'application/json', 1768 + schema: { 1769 + type: 'object', 1770 + properties: { 1771 + uri: { 1772 + type: 'string', 1773 + description: 'The unique identifier of the song to dislike', 1774 + format: 'at-uri', 1775 + }, 1776 + }, 1777 + }, 1778 + }, 1779 + output: { 1780 + encoding: 'application/json', 1781 + schema: { 1782 + type: 'ref', 1783 + ref: 'lex:app.rocksky.song.defs#songViewDetailed', 1784 + }, 1785 + }, 1786 + }, 1787 + }, 1788 + }, 1789 + AppRockskyLike: { 1790 + lexicon: 1, 1791 + id: 'app.rocksky.like', 1792 + defs: { 1793 + main: { 1794 + type: 'record', 1795 + description: 'A declaration of a like.', 1796 + key: 'tid', 1797 + record: { 1798 + type: 'object', 1799 + required: ['createdAt', 'subject'], 1800 + properties: { 1801 + createdAt: { 1802 + type: 'string', 1803 + description: 'The date when the like was created.', 1804 + format: 'datetime', 1805 + }, 1806 + subject: { 1807 + type: 'ref', 1808 + ref: 'lex:com.atproto.repo.strongRef', 1809 + }, 1810 + }, 1811 + }, 1812 + }, 1813 + }, 1814 + }, 1815 + AppRockskyLikeLikeShout: { 1816 + lexicon: 1, 1817 + id: 'app.rocksky.like.likeShout', 1818 + defs: { 1819 + main: { 1820 + type: 'procedure', 1821 + description: 'Like a shout', 1822 + input: { 1823 + encoding: 'application/json', 1824 + schema: { 1825 + type: 'object', 1826 + properties: { 1827 + uri: { 1828 + type: 'string', 1829 + description: 'The unique identifier of the shout to like', 1830 + format: 'at-uri', 1831 + }, 1832 + }, 1833 + }, 1834 + }, 1835 + output: { 1836 + encoding: 'application/json', 1837 + schema: { 1838 + type: 'ref', 1839 + ref: 'lex:app.rocksky.shout.defs#shoutView', 1840 + }, 1841 + }, 1842 + }, 1843 + }, 1844 + }, 1845 + AppRockskyLikeLikeSong: { 1846 + lexicon: 1, 1847 + id: 'app.rocksky.like.likeSong', 1848 + defs: { 1849 + main: { 1850 + type: 'procedure', 1851 + description: 'Like a song', 1852 + input: { 1853 + encoding: 'application/json', 1854 + schema: { 1855 + type: 'object', 1856 + properties: { 1857 + uri: { 1858 + type: 'string', 1859 + description: 'The unique identifier of the song to like', 1860 + format: 'at-uri', 1861 + }, 1862 + }, 1863 + }, 1864 + }, 1865 + output: { 1866 + encoding: 'application/json', 1867 + schema: { 1868 + type: 'ref', 1869 + ref: 'lex:app.rocksky.song.defs#songViewDetailed', 1870 + }, 1871 + }, 1872 + }, 1873 + }, 1874 + }, 1875 + AppRockskyPlayerDefs: { 1876 + lexicon: 1, 1877 + id: 'app.rocksky.player.defs', 1878 + defs: { 1879 + currentlyPlayingViewDetailed: { 1880 + type: 'object', 1881 + properties: { 1882 + title: { 1883 + type: 'string', 1884 + description: 'The title of the currently playing track', 1885 + }, 1886 + }, 1887 + }, 1888 + }, 1889 + }, 1890 + AppRockskyPlayerGetCurrentlyPlaying: { 1891 + lexicon: 1, 1892 + id: 'app.rocksky.player.getCurrentlyPlaying', 1893 + defs: { 1894 + main: { 1895 + type: 'query', 1896 + description: 'Get the currently playing track', 1897 + parameters: { 1898 + type: 'params', 1899 + properties: { 1900 + actor: { 1901 + type: 'string', 1902 + description: 1903 + 'Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user.', 1904 + format: 'at-identifier', 1905 + }, 1906 + }, 1907 + }, 1908 + output: { 1909 + encoding: 'application/json', 1910 + schema: { 1911 + type: 'ref', 1912 + ref: 'lex:app.rocksky.player.defs#currentlyPlayingViewDetailed', 1913 + }, 1914 + }, 1915 + }, 1916 + }, 1917 + }, 1918 + AppRockskyPlayerNext: { 1919 + lexicon: 1, 1920 + id: 'app.rocksky.player.next', 1921 + defs: { 1922 + main: { 1923 + type: 'procedure', 1924 + description: 'Play the next track in the queue', 1925 + }, 1926 + }, 1927 + }, 1928 + AppRockskyPlayerPause: { 1929 + lexicon: 1, 1930 + id: 'app.rocksky.player.pause', 1931 + defs: { 1932 + main: { 1933 + type: 'procedure', 1934 + description: 'Pause the currently playing track', 1935 + }, 1936 + }, 1937 + }, 1938 + AppRockskyPlayerPlay: { 1939 + lexicon: 1, 1940 + id: 'app.rocksky.player.play', 1941 + defs: { 1942 + main: { 1943 + type: 'procedure', 1944 + description: 'Resume playback of the currently paused track', 1945 + }, 1946 + }, 1947 + }, 1948 + AppRockskyPlayerPrevious: { 1949 + lexicon: 1, 1950 + id: 'app.rocksky.player.previous', 1951 + defs: { 1952 + main: { 1953 + type: 'procedure', 1954 + description: 'Play the previous track in the queue', 1955 + }, 1956 + }, 1957 + }, 1958 + AppRockskyPlayerSeek: { 1959 + lexicon: 1, 1960 + id: 'app.rocksky.player.seek', 1961 + defs: { 1962 + main: { 1963 + type: 'procedure', 1964 + description: 1965 + 'Seek to a specific position in the currently playing track', 1966 + parameters: { 1967 + type: 'params', 1968 + required: ['position'], 1969 + properties: { 1970 + position: { 1971 + type: 'integer', 1972 + description: 'The position in seconds to seek to', 1973 + }, 1974 + }, 1975 + }, 1976 + }, 1977 + }, 1978 + }, 1979 + AppRockskyPlaylistDefs: { 1980 + lexicon: 1, 1981 + id: 'app.rocksky.playlist.defs', 1982 + defs: { 1983 + playlistViewDetailed: { 1984 + type: 'object', 1985 + description: 1986 + 'Detailed view of a playlist, including its tracks and metadata', 1987 + properties: { 1988 + id: { 1989 + type: 'string', 1990 + description: 'The unique identifier of the playlist.', 1991 + }, 1992 + title: { 1993 + type: 'string', 1994 + description: 'The title of the playlist.', 1995 + }, 1996 + uri: { 1997 + type: 'string', 1998 + description: 'The URI of the playlist.', 1999 + format: 'at-uri', 2000 + }, 2001 + curatorDid: { 2002 + type: 'string', 2003 + description: 'The DID of the curator of the playlist.', 2004 + format: 'at-identifier', 2005 + }, 2006 + curatorHandle: { 2007 + type: 'string', 2008 + description: 'The handle of the curator of the playlist.', 2009 + format: 'at-identifier', 2010 + }, 2011 + curatorName: { 2012 + type: 'string', 2013 + description: 'The name of the curator of the playlist.', 2014 + }, 2015 + curatorAvatarUrl: { 2016 + type: 'string', 2017 + description: 'The URL of the avatar image of the curator.', 2018 + format: 'uri', 2019 + }, 2020 + description: { 2021 + type: 'string', 2022 + description: 'A description of the playlist.', 2023 + }, 2024 + coverImageUrl: { 2025 + type: 'string', 2026 + description: 'The URL of the cover image for the playlist.', 2027 + format: 'uri', 2028 + }, 2029 + createdAt: { 2030 + type: 'string', 2031 + description: 'The date and time when the playlist was created.', 2032 + format: 'datetime', 2033 + }, 2034 + tracks: { 2035 + type: 'array', 2036 + description: 'A list of tracks in the playlist.', 2037 + items: { 2038 + type: 'ref', 2039 + ref: 'lex:app.rocksky.song.defs#songViewBasic', 2040 + }, 2041 + }, 2042 + }, 2043 + }, 2044 + playlistViewBasic: { 2045 + type: 'object', 2046 + description: 'Basic view of a playlist, including its metadata', 2047 + properties: { 2048 + id: { 2049 + type: 'string', 2050 + description: 'The unique identifier of the playlist.', 2051 + }, 2052 + title: { 2053 + type: 'string', 2054 + description: 'The title of the playlist.', 2055 + }, 2056 + uri: { 2057 + type: 'string', 2058 + description: 'The URI of the playlist.', 2059 + format: 'at-uri', 2060 + }, 2061 + curatorDid: { 2062 + type: 'string', 2063 + description: 'The DID of the curator of the playlist.', 2064 + format: 'at-identifier', 2065 + }, 2066 + curatorHandle: { 2067 + type: 'string', 2068 + description: 'The handle of the curator of the playlist.', 2069 + format: 'at-identifier', 2070 + }, 2071 + curatorName: { 2072 + type: 'string', 2073 + description: 'The name of the curator of the playlist.', 2074 + }, 2075 + curatorAvatarUrl: { 2076 + type: 'string', 2077 + description: 'The URL of the avatar image of the curator.', 2078 + format: 'uri', 2079 + }, 2080 + description: { 2081 + type: 'string', 2082 + description: 'A description of the playlist.', 2083 + }, 2084 + coverImageUrl: { 2085 + type: 'string', 2086 + description: 'The URL of the cover image for the playlist.', 2087 + format: 'uri', 2088 + }, 2089 + createdAt: { 2090 + type: 'string', 2091 + description: 'The date and time when the playlist was created.', 2092 + format: 'datetime', 2093 + }, 2094 + trackCount: { 2095 + type: 'integer', 2096 + description: 'The number of tracks in the playlist.', 2097 + minimum: 0, 2098 + }, 2099 + }, 2100 + }, 2101 + }, 2102 + }, 2103 + AppRockskyPlaylistGetPlaylist: { 2104 + lexicon: 1, 2105 + id: 'app.rocksky.playlist.getPlaylist', 2106 + defs: { 2107 + main: { 2108 + type: 'query', 2109 + description: 'Retrieve a playlist by its ID', 2110 + parameters: { 2111 + type: 'params', 2112 + required: ['uri'], 2113 + properties: { 2114 + uri: { 2115 + type: 'string', 2116 + description: 'The URI of the playlist to retrieve.', 2117 + format: 'at-uri', 2118 + }, 2119 + }, 2120 + }, 2121 + output: { 2122 + encoding: 'application/json', 2123 + schema: { 2124 + type: 'ref', 2125 + ref: 'lex:app.rocksky.playlist.defs#playlistViewDetailed', 2126 + }, 2127 + }, 2128 + }, 2129 + }, 2130 + }, 2131 + AppRockskyPlaylistGetPlaylists: { 2132 + lexicon: 1, 2133 + id: 'app.rocksky.playlist.getPlaylists', 2134 + defs: { 2135 + main: { 2136 + type: 'query', 2137 + description: 'Retrieve a list of playlists', 2138 + parameters: { 2139 + type: 'params', 2140 + properties: { 2141 + limit: { 2142 + type: 'integer', 2143 + description: 'The maximum number of playlists to return.', 2144 + }, 2145 + offset: { 2146 + type: 'integer', 2147 + description: 2148 + 'The offset for pagination, used to skip a number of playlists.', 2149 + }, 2150 + }, 2151 + }, 2152 + output: { 2153 + encoding: 'application/json', 2154 + schema: { 2155 + type: 'object', 2156 + properties: { 2157 + playlists: { 2158 + type: 'array', 2159 + items: { 2160 + type: 'ref', 2161 + ref: 'lex:app.rocksky.playlist.defs#playlistViewBasic', 2162 + }, 2163 + }, 2164 + }, 2165 + }, 2166 + }, 2167 + }, 2168 + }, 2169 + }, 2170 + AppRockskyPlaylist: { 2171 + lexicon: 1, 2172 + id: 'app.rocksky.playlist', 2173 + defs: { 2174 + main: { 2175 + type: 'record', 2176 + description: 'A declaration of a playlist.', 2177 + key: 'tid', 2178 + record: { 2179 + type: 'object', 2180 + required: ['name', 'createdAt'], 2181 + properties: { 2182 + name: { 2183 + type: 'string', 2184 + description: 'The name of the playlist.', 2185 + minLength: 1, 2186 + maxLength: 512, 2187 + }, 2188 + description: { 2189 + type: 'string', 2190 + description: 'The playlist description.', 2191 + minLength: 1, 2192 + maxLength: 256, 2193 + }, 2194 + picture: { 2195 + type: 'blob', 2196 + description: 'The picture of the playlist.', 2197 + accept: ['image/png', 'image/jpeg'], 2198 + maxSize: 2000000, 2199 + }, 2200 + tracks: { 2201 + type: 'array', 2202 + description: 'The tracks in the playlist.', 2203 + items: { 2204 + type: 'ref', 2205 + ref: 'lex:app.rocksky.song#record', 2206 + }, 2207 + }, 2208 + createdAt: { 2209 + type: 'string', 2210 + description: 'The date the playlist was created.', 2211 + format: 'datetime', 2212 + }, 2213 + spotifyLink: { 2214 + type: 'string', 2215 + description: 'The Spotify link of the playlist.', 2216 + }, 2217 + tidalLink: { 2218 + type: 'string', 2219 + description: 'The Tidal link of the playlist.', 2220 + }, 2221 + youtubeLink: { 2222 + type: 'string', 2223 + description: 'The YouTube link of the playlist.', 2224 + }, 2225 + appleMusicLink: { 2226 + type: 'string', 2227 + description: 'The Apple Music link of the playlist.', 2228 + }, 2229 + }, 2230 + }, 2231 + }, 2232 + }, 2233 + }, 2234 + AppRockskyRadioDefs: { 2235 + lexicon: 1, 2236 + id: 'app.rocksky.radio.defs', 2237 + defs: { 2238 + radioViewBasic: { 2239 + type: 'object', 2240 + properties: { 2241 + id: { 2242 + type: 'string', 2243 + description: 'The unique identifier of the radio.', 2244 + }, 2245 + name: { 2246 + type: 'string', 2247 + description: 'The name of the radio.', 2248 + }, 2249 + description: { 2250 + type: 'string', 2251 + description: 'A brief description of the radio.', 2252 + }, 2253 + createdAt: { 2254 + type: 'string', 2255 + description: 'The date and time when the radio was created.', 2256 + format: 'datetime', 2257 + }, 2258 + }, 2259 + }, 2260 + radioViewDetailed: { 2261 + type: 'object', 2262 + properties: { 2263 + id: { 2264 + type: 'string', 2265 + description: 'The unique identifier of the radio.', 2266 + }, 2267 + name: { 2268 + type: 'string', 2269 + description: 'The name of the radio.', 2270 + }, 2271 + description: { 2272 + type: 'string', 2273 + description: 'A brief description of the radio.', 2274 + }, 2275 + website: { 2276 + type: 'string', 2277 + description: 'The website of the radio.', 2278 + format: 'uri', 2279 + }, 2280 + url: { 2281 + type: 'string', 2282 + description: 'The streaming URL of the radio.', 2283 + format: 'uri', 2284 + }, 2285 + genre: { 2286 + type: 'string', 2287 + description: 'The genre of the radio.', 2288 + }, 2289 + logo: { 2290 + type: 'string', 2291 + description: 'The logo of the radio station.', 2292 + }, 2293 + createdAt: { 2294 + type: 'string', 2295 + description: 'The date and time when the radio was created.', 2296 + format: 'datetime', 2297 + }, 2298 + }, 2299 + }, 2300 + }, 2301 + }, 2302 + AppRockskyRadio: { 2303 + lexicon: 1, 2304 + id: 'app.rocksky.radio', 2305 + defs: { 2306 + main: { 2307 + type: 'record', 2308 + description: 'A declaration of a radio station.', 2309 + key: 'tid', 2310 + record: { 2311 + type: 'object', 2312 + required: ['name', 'url', 'createdAt'], 2313 + properties: { 2314 + name: { 2315 + type: 'string', 2316 + description: 'The name of the radio station.', 2317 + minLength: 1, 2318 + maxLength: 512, 2319 + }, 2320 + url: { 2321 + type: 'string', 2322 + description: 'The URL of the radio station.', 2323 + format: 'uri', 2324 + }, 2325 + description: { 2326 + type: 'string', 2327 + description: 'A description of the radio station.', 2328 + minLength: 1, 2329 + maxLength: 1000, 2330 + }, 2331 + genre: { 2332 + type: 'string', 2333 + description: 'The genre of the radio station.', 2334 + minLength: 1, 2335 + maxLength: 256, 2336 + }, 2337 + logo: { 2338 + type: 'blob', 2339 + description: 'The logo of the radio station.', 2340 + accept: ['image/png', 'image/jpeg'], 2341 + maxSize: 2000000, 2342 + }, 2343 + website: { 2344 + type: 'string', 2345 + description: 'The website of the radio station.', 2346 + format: 'uri', 2347 + }, 2348 + createdAt: { 2349 + type: 'string', 2350 + description: 'The date when the radio station was created.', 156 2351 format: 'datetime', 157 2352 }, 158 2353 }, ··· 160 2355 }, 161 2356 }, 162 2357 }, 2358 + AppRockskyScrobbleCreateScrobble: { 2359 + lexicon: 1, 2360 + id: 'app.rocksky.scrobble.createScrobble', 2361 + defs: { 2362 + main: { 2363 + type: 'procedure', 2364 + description: 'Create a new scrobble', 2365 + input: { 2366 + encoding: 'application/json', 2367 + schema: { 2368 + type: 'object', 2369 + required: ['title', 'artist'], 2370 + properties: { 2371 + title: { 2372 + type: 'string', 2373 + description: 'The title of the track being scrobbled', 2374 + }, 2375 + artist: { 2376 + type: 'string', 2377 + description: 'The artist of the track being scrobbled', 2378 + }, 2379 + album: { 2380 + type: 'string', 2381 + description: 'The album of the track being scrobbled', 2382 + }, 2383 + duration: { 2384 + type: 'integer', 2385 + description: 'The duration of the track in seconds', 2386 + }, 2387 + mbId: { 2388 + type: 'string', 2389 + description: 'The MusicBrainz ID of the track, if available', 2390 + }, 2391 + albumArt: { 2392 + type: 'string', 2393 + description: 'The URL of the album art for the track', 2394 + format: 'uri', 2395 + }, 2396 + trackNumber: { 2397 + type: 'integer', 2398 + description: 'The track number of the track in the album', 2399 + }, 2400 + releaseDate: { 2401 + type: 'string', 2402 + description: 2403 + 'The release date of the track, formatted as YYYY-MM-DD', 2404 + }, 2405 + year: { 2406 + type: 'integer', 2407 + description: 'The year the track was released', 2408 + }, 2409 + discNumber: { 2410 + type: 'integer', 2411 + description: 2412 + 'The disc number of the track in the album, if applicable', 2413 + }, 2414 + lyrics: { 2415 + type: 'string', 2416 + description: 'The lyrics of the track, if available', 2417 + }, 2418 + composer: { 2419 + type: 'string', 2420 + description: 'The composer of the track, if available', 2421 + }, 2422 + copyrightMessage: { 2423 + type: 'string', 2424 + description: 2425 + 'The copyright message for the track, if available', 2426 + }, 2427 + label: { 2428 + type: 'string', 2429 + description: 'The record label of the track, if available', 2430 + }, 2431 + artistPicture: { 2432 + type: 'string', 2433 + description: "The URL of the artist's picture, if available", 2434 + format: 'uri', 2435 + }, 2436 + spotifyLink: { 2437 + type: 'string', 2438 + description: 'The Spotify link for the track, if available', 2439 + format: 'uri', 2440 + }, 2441 + lastfmLink: { 2442 + type: 'string', 2443 + description: 'The Last.fm link for the track, if available', 2444 + format: 'uri', 2445 + }, 2446 + tidalLink: { 2447 + type: 'string', 2448 + description: 'The Tidal link for the track, if available', 2449 + format: 'uri', 2450 + }, 2451 + appleMusicLink: { 2452 + type: 'string', 2453 + description: 'The Apple Music link for the track, if available', 2454 + format: 'uri', 2455 + }, 2456 + youtubeLink: { 2457 + type: 'string', 2458 + description: 'The Youtube link for the track, if available', 2459 + format: 'uri', 2460 + }, 2461 + deezerLink: { 2462 + type: 'string', 2463 + description: 'The Deezer link for the track, if available', 2464 + format: 'uri', 2465 + }, 2466 + timestamp: { 2467 + type: 'integer', 2468 + description: 2469 + 'The timestamp of the scrobble in milliseconds since epoch', 2470 + }, 2471 + }, 2472 + }, 2473 + }, 2474 + output: { 2475 + encoding: 'application/json', 2476 + schema: { 2477 + type: 'ref', 2478 + ref: 'lex:app.rocksky.scrobble.defs#scrobbleViewBasic', 2479 + }, 2480 + }, 2481 + }, 2482 + }, 2483 + }, 2484 + AppRockskyScrobbleDefs: { 2485 + lexicon: 1, 2486 + id: 'app.rocksky.scrobble.defs', 2487 + defs: { 2488 + scrobbleViewBasic: { 2489 + type: 'object', 2490 + properties: { 2491 + id: { 2492 + type: 'string', 2493 + description: 'The unique identifier of the scrobble.', 2494 + }, 2495 + user: { 2496 + type: 'string', 2497 + description: 'The handle of the user who created the scrobble.', 2498 + }, 2499 + title: { 2500 + type: 'string', 2501 + description: 'The title of the scrobble.', 2502 + }, 2503 + artist: { 2504 + type: 'string', 2505 + description: 'The artist of the song.', 2506 + }, 2507 + artistUri: { 2508 + type: 'string', 2509 + description: 'The URI of the artist.', 2510 + format: 'at-uri', 2511 + }, 2512 + album: { 2513 + type: 'string', 2514 + description: 'The album of the song.', 2515 + }, 2516 + albumUri: { 2517 + type: 'string', 2518 + description: 'The URI of the album.', 2519 + format: 'at-uri', 2520 + }, 2521 + cover: { 2522 + type: 'string', 2523 + description: 'The album art URL of the song.', 2524 + format: 'uri', 2525 + }, 2526 + date: { 2527 + type: 'string', 2528 + description: 'The timestamp when the scrobble was created.', 2529 + format: 'datetime', 2530 + }, 2531 + uri: { 2532 + type: 'string', 2533 + description: 'The URI of the scrobble.', 2534 + format: 'uri', 2535 + }, 2536 + sha256: { 2537 + type: 'string', 2538 + description: 'The SHA256 hash of the scrobble data.', 2539 + }, 2540 + }, 2541 + }, 2542 + scrobbleViewDetailed: { 2543 + type: 'object', 2544 + properties: { 2545 + id: { 2546 + type: 'string', 2547 + description: 'The unique identifier of the scrobble.', 2548 + }, 2549 + user: { 2550 + type: 'string', 2551 + description: 'The handle of the user who created the scrobble.', 2552 + }, 2553 + title: { 2554 + type: 'string', 2555 + description: 'The title of the scrobble.', 2556 + }, 2557 + artist: { 2558 + type: 'string', 2559 + description: 'The artist of the song.', 2560 + }, 2561 + artistUri: { 2562 + type: 'string', 2563 + description: 'The URI of the artist.', 2564 + format: 'at-uri', 2565 + }, 2566 + album: { 2567 + type: 'string', 2568 + description: 'The album of the song.', 2569 + }, 2570 + albumUri: { 2571 + type: 'string', 2572 + description: 'The URI of the album.', 2573 + format: 'at-uri', 2574 + }, 2575 + cover: { 2576 + type: 'string', 2577 + description: 'The album art URL of the song.', 2578 + format: 'uri', 2579 + }, 2580 + date: { 2581 + type: 'string', 2582 + description: 'The timestamp when the scrobble was created.', 2583 + format: 'datetime', 2584 + }, 2585 + uri: { 2586 + type: 'string', 2587 + description: 'The URI of the scrobble.', 2588 + format: 'uri', 2589 + }, 2590 + sha256: { 2591 + type: 'string', 2592 + description: 'The SHA256 hash of the scrobble data.', 2593 + }, 2594 + listeners: { 2595 + type: 'integer', 2596 + description: 'The number of listeners', 2597 + }, 2598 + scrobbles: { 2599 + type: 'integer', 2600 + description: 'The number of scrobbles for this song', 2601 + }, 2602 + }, 2603 + }, 2604 + }, 2605 + }, 2606 + AppRockskyScrobbleGetScrobble: { 2607 + lexicon: 1, 2608 + id: 'app.rocksky.scrobble.getScrobble', 2609 + defs: { 2610 + main: { 2611 + type: 'query', 2612 + description: 'Get a scrobble by its unique identifier', 2613 + parameters: { 2614 + type: 'params', 2615 + required: ['uri'], 2616 + properties: { 2617 + uri: { 2618 + type: 'string', 2619 + description: 'The unique identifier of the scrobble', 2620 + format: 'at-uri', 2621 + }, 2622 + }, 2623 + }, 2624 + output: { 2625 + encoding: 'application/json', 2626 + schema: { 2627 + type: 'ref', 2628 + ref: 'lex:app.rocksky.scrobble.defs#scrobbleViewDetailed', 2629 + }, 2630 + }, 2631 + }, 2632 + }, 2633 + }, 2634 + AppRockskyScrobbleGetScrobbles: { 2635 + lexicon: 1, 2636 + id: 'app.rocksky.scrobble.getScrobbles', 2637 + defs: { 2638 + main: { 2639 + type: 'query', 2640 + description: 'Get scrobbles all scrobbles', 2641 + parameters: { 2642 + type: 'params', 2643 + properties: { 2644 + did: { 2645 + type: 'string', 2646 + description: 'The DID or handle of the actor', 2647 + format: 'at-identifier', 2648 + }, 2649 + limit: { 2650 + type: 'integer', 2651 + description: 'The maximum number of scrobbles to return', 2652 + minimum: 1, 2653 + }, 2654 + offset: { 2655 + type: 'integer', 2656 + description: 'The offset for pagination', 2657 + minimum: 0, 2658 + }, 2659 + }, 2660 + }, 2661 + output: { 2662 + encoding: 'application/json', 2663 + schema: { 2664 + type: 'object', 2665 + properties: { 2666 + scrobbles: { 2667 + type: 'array', 2668 + items: { 2669 + type: 'ref', 2670 + ref: 'lex:app.rocksky.scrobble.defs#scrobbleViewBasic', 2671 + }, 2672 + }, 2673 + }, 2674 + }, 2675 + }, 2676 + }, 2677 + }, 2678 + }, 163 2679 AppRockskyScrobble: { 164 2680 lexicon: 1, 165 2681 id: 'app.rocksky.scrobble', 166 2682 defs: { 167 2683 main: { 168 2684 type: 'record', 2685 + description: 'A declaration of a scrobble.', 169 2686 key: 'tid', 170 - description: 'A declaration of a scrobble.', 171 2687 record: { 172 2688 type: 'object', 173 2689 required: [ 174 2690 'title', 175 2691 'artist', 176 - 'albumArtist', 177 2692 'album', 2693 + 'albumArtist', 178 2694 'duration', 179 2695 'createdAt', 180 2696 ], 181 2697 properties: { 2698 + title: { 2699 + type: 'string', 2700 + description: 'The title of the song.', 2701 + minLength: 1, 2702 + maxLength: 512, 2703 + }, 2704 + artist: { 2705 + type: 'string', 2706 + description: 'The artist of the song.', 2707 + minLength: 1, 2708 + maxLength: 256, 2709 + }, 2710 + albumArtist: { 2711 + type: 'string', 2712 + description: 'The album artist of the song.', 2713 + minLength: 1, 2714 + maxLength: 256, 2715 + }, 2716 + album: { 2717 + type: 'string', 2718 + description: 'The album of the song.', 2719 + minLength: 1, 2720 + maxLength: 256, 2721 + }, 2722 + duration: { 2723 + type: 'integer', 2724 + description: 'The duration of the song in seconds.', 2725 + minimum: 1, 2726 + }, 182 2727 trackNumber: { 183 2728 type: 'integer', 184 2729 description: 'The track number of the song in the album.', ··· 189 2734 description: 'The disc number of the song in the album.', 190 2735 minimum: 1, 191 2736 }, 2737 + releaseDate: { 2738 + type: 'string', 2739 + description: 'The release date of the song.', 2740 + format: 'datetime', 2741 + }, 2742 + year: { 2743 + type: 'integer', 2744 + description: 'The year the song was released.', 2745 + }, 2746 + genre: { 2747 + type: 'string', 2748 + description: 'The genre of the song.', 2749 + maxLength: 256, 2750 + }, 2751 + tags: { 2752 + type: 'array', 2753 + description: 'The tags of the song.', 2754 + items: { 2755 + type: 'string', 2756 + minLength: 1, 2757 + maxLength: 256, 2758 + }, 2759 + }, 2760 + composer: { 2761 + type: 'string', 2762 + description: 'The composer of the song.', 2763 + maxLength: 256, 2764 + }, 2765 + lyrics: { 2766 + type: 'string', 2767 + description: 'The lyrics of the song.', 2768 + maxLength: 10000, 2769 + }, 2770 + copyrightMessage: { 2771 + type: 'string', 2772 + description: 'The copyright message of the song.', 2773 + maxLength: 256, 2774 + }, 2775 + wiki: { 2776 + type: 'string', 2777 + description: 'Informations about the song', 2778 + maxLength: 10000, 2779 + }, 2780 + albumArt: { 2781 + type: 'blob', 2782 + description: 'The album art of the song.', 2783 + accept: ['image/png', 'image/jpeg'], 2784 + maxSize: 2000000, 2785 + }, 2786 + youtubeLink: { 2787 + type: 'string', 2788 + description: 'The YouTube link of the song.', 2789 + format: 'uri', 2790 + }, 2791 + spotifyLink: { 2792 + type: 'string', 2793 + description: 'The Spotify link of the song.', 2794 + format: 'uri', 2795 + }, 2796 + tidalLink: { 2797 + type: 'string', 2798 + description: 'The Tidal link of the song.', 2799 + format: 'uri', 2800 + }, 2801 + appleMusicLink: { 2802 + type: 'string', 2803 + description: 'The Apple Music link of the song.', 2804 + format: 'uri', 2805 + }, 2806 + createdAt: { 2807 + type: 'string', 2808 + description: 'The date when the song was created.', 2809 + format: 'datetime', 2810 + }, 2811 + mbid: { 2812 + type: 'string', 2813 + description: 'The MusicBrainz ID of the song.', 2814 + }, 2815 + label: { 2816 + type: 'string', 2817 + description: 'The label of the song.', 2818 + maxLength: 256, 2819 + }, 2820 + }, 2821 + }, 2822 + }, 2823 + }, 2824 + }, 2825 + AppRockskyShoutCreateShout: { 2826 + lexicon: 1, 2827 + id: 'app.rocksky.shout.createShout', 2828 + defs: { 2829 + main: { 2830 + type: 'procedure', 2831 + description: 'Create a new shout', 2832 + input: { 2833 + encoding: 'application/json', 2834 + schema: { 2835 + type: 'object', 2836 + properties: { 2837 + message: { 2838 + type: 'string', 2839 + description: 'The content of the shout', 2840 + minLength: 1, 2841 + }, 2842 + }, 2843 + }, 2844 + }, 2845 + output: { 2846 + encoding: 'application/json', 2847 + schema: { 2848 + type: 'ref', 2849 + ref: 'lex:app.rocksky.shout.defs#shoutView', 2850 + }, 2851 + }, 2852 + }, 2853 + }, 2854 + }, 2855 + AppRockskyShoutDefs: { 2856 + lexicon: 1, 2857 + id: 'app.rocksky.shout.defs', 2858 + defs: { 2859 + author: { 2860 + type: 'object', 2861 + properties: { 2862 + id: { 2863 + type: 'string', 2864 + description: 'The unique identifier of the author.', 2865 + }, 2866 + did: { 2867 + type: 'string', 2868 + description: 'The decentralized identifier (DID) of the author.', 2869 + format: 'at-identifier', 2870 + }, 2871 + handle: { 2872 + type: 'string', 2873 + description: 'The handle of the author.', 2874 + format: 'at-identifier', 2875 + }, 2876 + displayName: { 2877 + type: 'string', 2878 + description: 'The display name of the author.', 2879 + }, 2880 + avatar: { 2881 + type: 'string', 2882 + description: "The URL of the author's avatar image.", 2883 + format: 'uri', 2884 + }, 2885 + }, 2886 + }, 2887 + shoutView: { 2888 + type: 'object', 2889 + properties: { 2890 + id: { 2891 + type: 'string', 2892 + description: 'The unique identifier of the shout.', 2893 + }, 2894 + message: { 2895 + type: 'string', 2896 + description: 'The content of the shout.', 2897 + }, 2898 + parent: { 2899 + type: 'string', 2900 + description: 2901 + 'The ID of the parent shout if this is a reply, otherwise null.', 2902 + }, 2903 + createdAt: { 2904 + type: 'string', 2905 + description: 'The date and time when the shout was created.', 2906 + format: 'datetime', 2907 + }, 2908 + author: { 2909 + type: 'ref', 2910 + description: 'The author of the shout.', 2911 + ref: 'lex:app.rocksky.shout.defs#author', 2912 + }, 2913 + }, 2914 + }, 2915 + }, 2916 + }, 2917 + AppRockskyShoutGetAlbumShouts: { 2918 + lexicon: 1, 2919 + id: 'app.rocksky.shout.getAlbumShouts', 2920 + defs: { 2921 + main: { 2922 + type: 'query', 2923 + description: 'Get shouts for an album', 2924 + parameters: { 2925 + type: 'params', 2926 + required: ['uri'], 2927 + properties: { 2928 + uri: { 2929 + type: 'string', 2930 + description: 2931 + 'The unique identifier of the album to retrieve shouts for', 2932 + format: 'at-uri', 2933 + }, 2934 + limit: { 2935 + type: 'integer', 2936 + description: 'The maximum number of shouts to return', 2937 + minimum: 1, 2938 + }, 2939 + offset: { 2940 + type: 'integer', 2941 + description: 2942 + 'The number of shouts to skip before starting to collect the result set', 2943 + minimum: 0, 2944 + }, 2945 + }, 2946 + }, 2947 + output: { 2948 + encoding: 'application/json', 2949 + schema: { 2950 + type: 'object', 2951 + properties: { 2952 + shouts: { 2953 + type: 'array', 2954 + items: { 2955 + type: 'ref', 2956 + ref: 'lex:app.rocksky.shout.defs#shoutViewBasic', 2957 + }, 2958 + }, 2959 + }, 2960 + }, 2961 + }, 2962 + }, 2963 + }, 2964 + }, 2965 + AppRockskyShoutGetArtistShouts: { 2966 + lexicon: 1, 2967 + id: 'app.rocksky.shout.getArtistShouts', 2968 + defs: { 2969 + main: { 2970 + type: 'query', 2971 + description: 'Get shouts for an artist', 2972 + parameters: { 2973 + type: 'params', 2974 + required: ['uri'], 2975 + properties: { 2976 + uri: { 2977 + type: 'string', 2978 + description: 'The URI of the artist to retrieve shouts for', 2979 + format: 'at-uri', 2980 + }, 2981 + limit: { 2982 + type: 'integer', 2983 + description: 'The maximum number of shouts to return', 2984 + minimum: 1, 2985 + }, 2986 + offset: { 2987 + type: 'integer', 2988 + description: 2989 + 'The number of shouts to skip before starting to collect the result set', 2990 + minimum: 0, 2991 + }, 2992 + }, 2993 + }, 2994 + output: { 2995 + encoding: 'application/json', 2996 + schema: { 2997 + type: 'object', 2998 + properties: { 2999 + shouts: { 3000 + type: 'array', 3001 + items: { 3002 + type: 'ref', 3003 + ref: 'lex:app.rocksky.shout.defs#shoutViewBasic', 3004 + }, 3005 + }, 3006 + }, 3007 + }, 3008 + }, 3009 + }, 3010 + }, 3011 + }, 3012 + AppRockskyShoutGetProfileShouts: { 3013 + lexicon: 1, 3014 + id: 'app.rocksky.shout.getProfileShouts', 3015 + defs: { 3016 + main: { 3017 + type: 'query', 3018 + description: "Get the shouts of an actor's profile", 3019 + parameters: { 3020 + type: 'params', 3021 + required: ['did'], 3022 + properties: { 3023 + did: { 3024 + type: 'string', 3025 + description: 'The DID or handle of the actor', 3026 + format: 'at-identifier', 3027 + }, 3028 + offset: { 3029 + type: 'integer', 3030 + description: 'The offset for pagination', 3031 + minimum: 0, 3032 + }, 3033 + limit: { 3034 + type: 'integer', 3035 + description: 'The maximum number of shouts to return', 3036 + minimum: 1, 3037 + }, 3038 + }, 3039 + }, 3040 + output: { 3041 + encoding: 'application/json', 3042 + schema: { 3043 + type: 'object', 3044 + properties: { 3045 + shouts: { 3046 + type: 'array', 3047 + items: { 3048 + type: 'ref', 3049 + ref: 'lex:app.rocksky.shout.defs#shoutViewBasic', 3050 + }, 3051 + }, 3052 + }, 3053 + }, 3054 + }, 3055 + }, 3056 + }, 3057 + }, 3058 + AppRockskyShoutGetShoutReplies: { 3059 + lexicon: 1, 3060 + id: 'app.rocksky.shout.getShoutReplies', 3061 + defs: { 3062 + main: { 3063 + type: 'query', 3064 + description: 'Get replies to a shout', 3065 + parameters: { 3066 + type: 'params', 3067 + required: ['uri'], 3068 + properties: { 3069 + uri: { 3070 + type: 'string', 3071 + description: 'The URI of the shout to retrieve replies for', 3072 + format: 'at-uri', 3073 + }, 3074 + limit: { 3075 + type: 'integer', 3076 + description: 'The maximum number of shouts to return', 3077 + minimum: 1, 3078 + }, 3079 + offset: { 3080 + type: 'integer', 3081 + description: 3082 + 'The number of shouts to skip before starting to collect the result set', 3083 + minimum: 0, 3084 + }, 3085 + }, 3086 + }, 3087 + output: { 3088 + encoding: 'application/json', 3089 + schema: { 3090 + type: 'object', 3091 + properties: { 3092 + shouts: { 3093 + type: 'array', 3094 + items: { 3095 + type: 'ref', 3096 + ref: 'lex:app.rocksky.shout.defs#shoutViewBasic', 3097 + }, 3098 + }, 3099 + }, 3100 + }, 3101 + }, 3102 + }, 3103 + }, 3104 + }, 3105 + AppRockskyShoutGetTrackShouts: { 3106 + lexicon: 1, 3107 + id: 'app.rocksky.shout.getTrackShouts', 3108 + defs: { 3109 + main: { 3110 + type: 'query', 3111 + description: 'Get all shouts for a specific track', 3112 + parameters: { 3113 + type: 'params', 3114 + required: ['uri'], 3115 + properties: { 3116 + uri: { 3117 + type: 'string', 3118 + description: 'The URI of the track to retrieve shouts for', 3119 + format: 'at-uri', 3120 + }, 3121 + }, 3122 + }, 3123 + output: { 3124 + encoding: 'application/json', 3125 + schema: { 3126 + type: 'object', 3127 + properties: { 3128 + shouts: { 3129 + type: 'array', 3130 + items: { 3131 + type: 'ref', 3132 + ref: 'lex:app.rocksky.shout.defs#shoutViewBasic', 3133 + }, 3134 + }, 3135 + }, 3136 + }, 3137 + }, 3138 + }, 3139 + }, 3140 + }, 3141 + AppRockskyShoutRemoveShout: { 3142 + lexicon: 1, 3143 + id: 'app.rocksky.shout.removeShout', 3144 + defs: { 3145 + main: { 3146 + type: 'procedure', 3147 + description: 'Remove a shout by its ID', 3148 + parameters: { 3149 + type: 'params', 3150 + required: ['id'], 3151 + properties: { 3152 + id: { 3153 + type: 'string', 3154 + description: 'The ID of the shout to be removed', 3155 + }, 3156 + }, 3157 + }, 3158 + output: { 3159 + encoding: 'application/json', 3160 + schema: { 3161 + type: 'ref', 3162 + ref: 'lex:app.rocksky.shout.defs#shoutView', 3163 + }, 3164 + }, 3165 + }, 3166 + }, 3167 + }, 3168 + AppRockskyShoutReplyShout: { 3169 + lexicon: 1, 3170 + id: 'app.rocksky.shout.replyShout', 3171 + defs: { 3172 + main: { 3173 + type: 'procedure', 3174 + description: 'Reply to a shout', 3175 + input: { 3176 + encoding: 'application/json', 3177 + schema: { 3178 + type: 'object', 3179 + required: ['shoutId', 'message'], 3180 + properties: { 3181 + shoutId: { 3182 + type: 'string', 3183 + description: 'The unique identifier of the shout to reply to', 3184 + }, 3185 + message: { 3186 + type: 'string', 3187 + description: 'The content of the reply', 3188 + minLength: 1, 3189 + }, 3190 + }, 3191 + }, 3192 + }, 3193 + output: { 3194 + encoding: 'application/json', 3195 + schema: { 3196 + type: 'ref', 3197 + ref: 'lex:app.rocksky.shout.defs#shoutView', 3198 + }, 3199 + }, 3200 + }, 3201 + }, 3202 + }, 3203 + AppRockskyShoutReportShout: { 3204 + lexicon: 1, 3205 + id: 'app.rocksky.shout.reportShout', 3206 + defs: { 3207 + main: { 3208 + type: 'procedure', 3209 + description: 'Report a shout for moderation', 3210 + input: { 3211 + encoding: 'application/json', 3212 + schema: { 3213 + type: 'object', 3214 + required: ['shoutId'], 3215 + properties: { 3216 + shoutId: { 3217 + type: 'string', 3218 + description: 'The unique identifier of the shout to report', 3219 + }, 3220 + reason: { 3221 + type: 'string', 3222 + description: 'The reason for reporting the shout', 3223 + minLength: 1, 3224 + }, 3225 + }, 3226 + }, 3227 + }, 3228 + output: { 3229 + encoding: 'application/json', 3230 + schema: { 3231 + type: 'ref', 3232 + ref: 'lex:app.rocksky.shout.defs#shoutView', 3233 + }, 3234 + }, 3235 + }, 3236 + }, 3237 + }, 3238 + AppRockskyShout: { 3239 + lexicon: 1, 3240 + id: 'app.rocksky.shout', 3241 + defs: { 3242 + main: { 3243 + type: 'record', 3244 + description: 'A declaration of a shout.', 3245 + key: 'tid', 3246 + record: { 3247 + type: 'object', 3248 + required: ['message', 'createdAt', 'subject'], 3249 + properties: { 3250 + message: { 3251 + type: 'string', 3252 + description: 'The message of the shout.', 3253 + minLength: 1, 3254 + maxLength: 1000, 3255 + }, 3256 + createdAt: { 3257 + type: 'string', 3258 + description: 'The date when the shout was created.', 3259 + format: 'datetime', 3260 + }, 3261 + parent: { 3262 + type: 'ref', 3263 + ref: 'lex:com.atproto.repo.strongRef', 3264 + }, 3265 + subject: { 3266 + type: 'ref', 3267 + ref: 'lex:com.atproto.repo.strongRef', 3268 + }, 3269 + }, 3270 + }, 3271 + }, 3272 + }, 3273 + }, 3274 + AppRockskySongCreateSong: { 3275 + lexicon: 1, 3276 + id: 'app.rocksky.song.createSong', 3277 + defs: { 3278 + main: { 3279 + type: 'procedure', 3280 + description: 'Create a new song', 3281 + input: { 3282 + encoding: 'application/json', 3283 + schema: { 3284 + type: 'object', 3285 + required: ['title', 'artist', 'album', 'albumArtist'], 3286 + properties: { 3287 + title: { 3288 + type: 'string', 3289 + description: 'The title of the song', 3290 + }, 3291 + artist: { 3292 + type: 'string', 3293 + description: 'The artist of the song', 3294 + }, 3295 + albumArtist: { 3296 + type: 'string', 3297 + description: 3298 + 'The album artist of the song, if different from the main artist', 3299 + }, 3300 + album: { 3301 + type: 'string', 3302 + description: 'The album of the song, if applicable', 3303 + }, 3304 + duration: { 3305 + type: 'integer', 3306 + description: 'The duration of the song in seconds', 3307 + }, 3308 + mbId: { 3309 + type: 'string', 3310 + description: 'The MusicBrainz ID of the song, if available', 3311 + }, 3312 + albumArt: { 3313 + type: 'string', 3314 + description: 'The URL of the album art for the song', 3315 + format: 'uri', 3316 + }, 3317 + trackNumber: { 3318 + type: 'integer', 3319 + description: 3320 + 'The track number of the song in the album, if applicable', 3321 + }, 3322 + releaseDate: { 3323 + type: 'string', 3324 + description: 3325 + 'The release date of the song, formatted as YYYY-MM-DD', 3326 + }, 3327 + year: { 3328 + type: 'integer', 3329 + description: 'The year the song was released', 3330 + }, 3331 + discNumber: { 3332 + type: 'integer', 3333 + description: 3334 + 'The disc number of the song in the album, if applicable', 3335 + }, 3336 + lyrics: { 3337 + type: 'string', 3338 + description: 'The lyrics of the song, if available', 3339 + }, 3340 + }, 3341 + }, 3342 + }, 3343 + output: { 3344 + encoding: 'application/json', 3345 + schema: { 3346 + type: 'ref', 3347 + ref: 'lex:app.rocksky.song.defs#songViewDetailed', 3348 + }, 3349 + }, 3350 + }, 3351 + }, 3352 + }, 3353 + AppRockskySongDefs: { 3354 + lexicon: 1, 3355 + id: 'app.rocksky.song.defs', 3356 + defs: { 3357 + songViewBasic: { 3358 + type: 'object', 3359 + properties: { 3360 + id: { 3361 + type: 'string', 3362 + description: 'The unique identifier of the song.', 3363 + }, 3364 + title: { 3365 + type: 'string', 3366 + description: 'The title of the song.', 3367 + }, 3368 + artist: { 3369 + type: 'string', 3370 + description: 'The artist of the song.', 3371 + }, 3372 + albumArtist: { 3373 + type: 'string', 3374 + description: 'The artist of the album the song belongs to.', 3375 + }, 3376 + albumArt: { 3377 + type: 'string', 3378 + description: 'The URL of the album art image.', 3379 + format: 'uri', 3380 + }, 3381 + uri: { 3382 + type: 'string', 3383 + description: 'The URI of the song.', 3384 + format: 'at-uri', 3385 + }, 3386 + album: { 3387 + type: 'string', 3388 + description: 'The album of the song.', 3389 + }, 3390 + duration: { 3391 + type: 'integer', 3392 + description: 'The duration of the song in milliseconds.', 3393 + }, 3394 + trackNumber: { 3395 + type: 'integer', 3396 + description: 'The track number of the song in the album.', 3397 + }, 3398 + discNumber: { 3399 + type: 'integer', 3400 + description: 'The disc number of the song in the album.', 3401 + }, 3402 + playCount: { 3403 + type: 'integer', 3404 + description: 'The number of times the song has been played.', 3405 + minimum: 0, 3406 + }, 3407 + uniqueListeners: { 3408 + type: 'integer', 3409 + description: 3410 + 'The number of unique listeners who have played the song.', 3411 + minimum: 0, 3412 + }, 3413 + albumUri: { 3414 + type: 'string', 3415 + description: 'The URI of the album the song belongs to.', 3416 + format: 'at-uri', 3417 + }, 3418 + artistUri: { 3419 + type: 'string', 3420 + description: 'The URI of the artist of the song.', 3421 + format: 'at-uri', 3422 + }, 3423 + sha256: { 3424 + type: 'string', 3425 + description: 'The SHA256 hash of the song.', 3426 + }, 3427 + createdAt: { 3428 + type: 'string', 3429 + description: 'The timestamp when the song was created.', 3430 + format: 'datetime', 3431 + }, 3432 + }, 3433 + }, 3434 + songViewDetailed: { 3435 + type: 'object', 3436 + properties: { 3437 + id: { 3438 + type: 'string', 3439 + description: 'The unique identifier of the song.', 3440 + }, 3441 + title: { 3442 + type: 'string', 3443 + description: 'The title of the song.', 3444 + }, 3445 + artist: { 3446 + type: 'string', 3447 + description: 'The artist of the song.', 3448 + }, 3449 + albumArtist: { 3450 + type: 'string', 3451 + description: 'The artist of the album the song belongs to.', 3452 + }, 3453 + albumArt: { 3454 + type: 'string', 3455 + description: 'The URL of the album art image.', 3456 + format: 'uri', 3457 + }, 3458 + uri: { 3459 + type: 'string', 3460 + description: 'The URI of the song.', 3461 + format: 'at-uri', 3462 + }, 3463 + album: { 3464 + type: 'string', 3465 + description: 'The album of the song.', 3466 + }, 3467 + duration: { 3468 + type: 'integer', 3469 + description: 'The duration of the song in milliseconds.', 3470 + }, 3471 + trackNumber: { 3472 + type: 'integer', 3473 + description: 'The track number of the song in the album.', 3474 + }, 3475 + discNumber: { 3476 + type: 'integer', 3477 + description: 'The disc number of the song in the album.', 3478 + }, 3479 + playCount: { 3480 + type: 'integer', 3481 + description: 'The number of times the song has been played.', 3482 + minimum: 0, 3483 + }, 3484 + uniqueListeners: { 3485 + type: 'integer', 3486 + description: 3487 + 'The number of unique listeners who have played the song.', 3488 + minimum: 0, 3489 + }, 3490 + albumUri: { 3491 + type: 'string', 3492 + description: 'The URI of the album the song belongs to.', 3493 + format: 'at-uri', 3494 + }, 3495 + artistUri: { 3496 + type: 'string', 3497 + description: 'The URI of the artist of the song.', 3498 + format: 'at-uri', 3499 + }, 3500 + sha256: { 3501 + type: 'string', 3502 + description: 'The SHA256 hash of the song.', 3503 + }, 3504 + createdAt: { 3505 + type: 'string', 3506 + description: 'The timestamp when the song was created.', 3507 + format: 'datetime', 3508 + }, 3509 + }, 3510 + }, 3511 + }, 3512 + }, 3513 + AppRockskySongGetSong: { 3514 + lexicon: 1, 3515 + id: 'app.rocksky.song.getSong', 3516 + defs: { 3517 + main: { 3518 + type: 'query', 3519 + description: 'Get a song by its uri', 3520 + parameters: { 3521 + type: 'params', 3522 + required: ['uri'], 3523 + properties: { 3524 + uri: { 3525 + type: 'string', 3526 + description: 'The unique identifier of the song to retrieve', 3527 + format: 'at-uri', 3528 + }, 3529 + }, 3530 + }, 3531 + output: { 3532 + encoding: 'application/json', 3533 + schema: { 3534 + type: 'ref', 3535 + ref: 'lex:app.rocksky.song.defs#songViewDetailed', 3536 + }, 3537 + }, 3538 + }, 3539 + }, 3540 + }, 3541 + AppRockskySongGetSongs: { 3542 + lexicon: 1, 3543 + id: 'app.rocksky.song.getSongs', 3544 + defs: { 3545 + main: { 3546 + type: 'query', 3547 + description: 'Get songs', 3548 + parameters: { 3549 + type: 'params', 3550 + properties: { 3551 + limit: { 3552 + type: 'integer', 3553 + description: 'The maximum number of songs to return', 3554 + minimum: 1, 3555 + }, 3556 + offset: { 3557 + type: 'integer', 3558 + description: 'The offset for pagination', 3559 + minimum: 0, 3560 + }, 3561 + }, 3562 + }, 3563 + output: { 3564 + encoding: 'application/json', 3565 + schema: { 3566 + type: 'object', 3567 + properties: { 3568 + songs: { 3569 + type: 'array', 3570 + items: { 3571 + type: 'ref', 3572 + ref: 'lex:app.rocksky.song.defs#songViewBasic', 3573 + }, 3574 + }, 3575 + }, 3576 + }, 3577 + }, 3578 + }, 3579 + }, 3580 + }, 3581 + AppRockskyLovedSong: { 3582 + lexicon: 1, 3583 + id: 'app.rocksky.lovedSong', 3584 + defs: { 3585 + main: { 3586 + type: 'record', 3587 + description: 'A declaration of a song.', 3588 + key: 'tid', 3589 + record: { 3590 + type: 'object', 3591 + required: ['title', 'artist', 'album', 'duration', 'createdAt'], 3592 + properties: { 192 3593 title: { 193 3594 type: 'string', 194 3595 description: 'The title of the song.', ··· 203 3604 }, 204 3605 albumArtist: { 205 3606 type: 'string', 206 - description: 'The artist of the album the song is from.', 3607 + description: 'The album artist of the song.', 207 3608 minLength: 1, 208 3609 maxLength: 256, 209 3610 }, 210 3611 album: { 211 3612 type: 'string', 212 - description: 'The album the song is from.', 3613 + description: 'The album of the song.', 213 3614 minLength: 1, 214 3615 maxLength: 256, 215 3616 }, ··· 218 3619 description: 'The duration of the song in seconds.', 219 3620 minimum: 1, 220 3621 }, 3622 + trackNumber: { 3623 + type: 'integer', 3624 + description: 'The track number of the song in the album.', 3625 + minimum: 1, 3626 + }, 3627 + discNumber: { 3628 + type: 'integer', 3629 + description: 'The disc number of the song in the album.', 3630 + minimum: 1, 3631 + }, 221 3632 releaseDate: { 222 3633 type: 'string', 223 3634 description: 'The release date of the song.', ··· 253 3664 }, 254 3665 copyrightMessage: { 255 3666 type: 'string', 256 - description: 'The copyright message.', 3667 + description: 'The copyright message of the song.', 3668 + minLength: 1, 257 3669 maxLength: 256, 258 3670 }, 259 3671 wiki: { ··· 289 3701 }, 290 3702 createdAt: { 291 3703 type: 'string', 292 - description: 'The date the song was created.', 3704 + description: 'The date when the song was created.', 293 3705 format: 'datetime', 294 3706 }, 295 - mbid: { 296 - type: 'string', 297 - description: 'The MusicBrainz ID of the song.', 298 - }, 299 - label: { 300 - type: 'string', 301 - description: 'The label of the song.', 302 - maxLength: 256, 303 - }, 304 3707 }, 305 3708 }, 306 3709 }, ··· 312 3715 defs: { 313 3716 main: { 314 3717 type: 'record', 315 - key: 'tid', 316 3718 description: 'A declaration of a song.', 3719 + key: 'tid', 317 3720 record: { 318 3721 type: 'object', 319 3722 required: [ ··· 325 3728 'createdAt', 326 3729 ], 327 3730 properties: { 328 - trackNumber: { 329 - type: 'integer', 330 - description: 'The track number of the song in the album.', 331 - minimum: 1, 332 - }, 333 - discNumber: { 334 - type: 'integer', 335 - description: 'The disc number of the song in the album.', 336 - minimum: 1, 337 - }, 338 3731 title: { 339 3732 type: 'string', 340 3733 description: 'The title of the song.', ··· 349 3742 }, 350 3743 albumArtist: { 351 3744 type: 'string', 352 - description: 'The artist of the album the song is from.', 3745 + description: 'The album artist of the song.', 353 3746 minLength: 1, 354 3747 maxLength: 256, 355 3748 }, 356 3749 album: { 357 3750 type: 'string', 358 - description: 'The album the song is from.', 3751 + description: 'The album of the song.', 359 3752 minLength: 1, 360 3753 maxLength: 256, 361 3754 }, 362 3755 duration: { 363 3756 type: 'integer', 364 3757 description: 'The duration of the song in seconds.', 3758 + minimum: 1, 3759 + }, 3760 + trackNumber: { 3761 + type: 'integer', 3762 + description: 'The track number of the song in the album.', 3763 + minimum: 1, 3764 + }, 3765 + discNumber: { 3766 + type: 'integer', 3767 + description: 'The disc number of the song in the album.', 365 3768 minimum: 1, 366 3769 }, 367 3770 releaseDate: { ··· 400 3803 }, 401 3804 copyrightMessage: { 402 3805 type: 'string', 403 - description: 'The copyright message.', 3806 + description: 'The copyright message of the song.', 404 3807 maxLength: 256, 405 3808 }, 406 3809 wiki: { ··· 436 3839 }, 437 3840 createdAt: { 438 3841 type: 'string', 439 - description: 'The date the song was created.', 3842 + description: 'The date when the song was created.', 440 3843 format: 'datetime', 441 3844 }, 442 3845 mbid: { ··· 453 3856 }, 454 3857 }, 455 3858 }, 3859 + AppRockskySpotifyDefs: { 3860 + lexicon: 1, 3861 + id: 'app.rocksky.spotify.defs', 3862 + defs: { 3863 + spotifyTrackView: { 3864 + type: 'object', 3865 + properties: { 3866 + id: { 3867 + type: 'string', 3868 + description: 'The unique identifier of the Spotify track.', 3869 + }, 3870 + name: { 3871 + type: 'string', 3872 + description: 'The name of the track.', 3873 + }, 3874 + artist: { 3875 + type: 'string', 3876 + description: 'The name of the artist.', 3877 + }, 3878 + album: { 3879 + type: 'string', 3880 + description: 'The name of the album.', 3881 + }, 3882 + duration: { 3883 + type: 'integer', 3884 + description: 'The duration of the track in milliseconds.', 3885 + }, 3886 + previewUrl: { 3887 + type: 'string', 3888 + description: 'A URL to a preview of the track.', 3889 + }, 3890 + }, 3891 + }, 3892 + }, 3893 + }, 3894 + AppRockskySpotifyGetCurrentlyPlaying: { 3895 + lexicon: 1, 3896 + id: 'app.rocksky.spotify.getCurrentlyPlaying', 3897 + defs: { 3898 + main: { 3899 + type: 'query', 3900 + description: 'Get the currently playing track', 3901 + parameters: { 3902 + type: 'params', 3903 + properties: { 3904 + actor: { 3905 + type: 'string', 3906 + description: 3907 + 'Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user.', 3908 + format: 'at-identifier', 3909 + }, 3910 + }, 3911 + }, 3912 + output: { 3913 + encoding: 'application/json', 3914 + schema: { 3915 + type: 'ref', 3916 + ref: 'lex:app.rocksky.player.defs#currentlyPlayingViewDetailed', 3917 + }, 3918 + }, 3919 + }, 3920 + }, 3921 + }, 3922 + AppRockskySpotifyNext: { 3923 + lexicon: 1, 3924 + id: 'app.rocksky.spotify.next', 3925 + defs: { 3926 + main: { 3927 + type: 'procedure', 3928 + description: 'Play the next track in the queue', 3929 + }, 3930 + }, 3931 + }, 3932 + AppRockskySpotifyPause: { 3933 + lexicon: 1, 3934 + id: 'app.rocksky.spotify.pause', 3935 + defs: { 3936 + main: { 3937 + type: 'procedure', 3938 + description: 'Pause the currently playing track', 3939 + }, 3940 + }, 3941 + }, 3942 + AppRockskySpotifyPlay: { 3943 + lexicon: 1, 3944 + id: 'app.rocksky.spotify.play', 3945 + defs: { 3946 + main: { 3947 + type: 'procedure', 3948 + description: 'Resume playback of the currently paused track', 3949 + }, 3950 + }, 3951 + }, 3952 + AppRockskySpotifyPrevious: { 3953 + lexicon: 1, 3954 + id: 'app.rocksky.spotify.previous', 3955 + defs: { 3956 + main: { 3957 + type: 'procedure', 3958 + description: 'Play the previous track in the queue', 3959 + }, 3960 + }, 3961 + }, 3962 + AppRockskySpotifySeek: { 3963 + lexicon: 1, 3964 + id: 'app.rocksky.spotify.seek', 3965 + defs: { 3966 + main: { 3967 + type: 'procedure', 3968 + description: 3969 + 'Seek to a specific position in the currently playing track', 3970 + parameters: { 3971 + type: 'params', 3972 + required: ['position'], 3973 + properties: { 3974 + position: { 3975 + type: 'integer', 3976 + description: 'The position in seconds to seek to', 3977 + }, 3978 + }, 3979 + }, 3980 + }, 3981 + }, 3982 + }, 3983 + AppRockskyStatsDefs: { 3984 + lexicon: 1, 3985 + id: 'app.rocksky.stats.defs', 3986 + defs: { 3987 + statsView: { 3988 + type: 'object', 3989 + properties: { 3990 + scrobbles: { 3991 + type: 'integer', 3992 + description: 'The total number of scrobbles.', 3993 + }, 3994 + artists: { 3995 + type: 'integer', 3996 + description: 'The total number of unique artists scrobbled.', 3997 + }, 3998 + lovedTracks: { 3999 + type: 'integer', 4000 + description: 'The total number of tracks marked as loved.', 4001 + }, 4002 + albums: { 4003 + type: 'integer', 4004 + description: 'The total number of unique albums scrobbled.', 4005 + }, 4006 + tracks: { 4007 + type: 'integer', 4008 + description: 'The total number of unique tracks scrobbled.', 4009 + }, 4010 + }, 4011 + }, 4012 + }, 4013 + }, 4014 + AppRockskyStatsGetStats: { 4015 + lexicon: 1, 4016 + id: 'app.rocksky.stats.getStats', 4017 + defs: { 4018 + main: { 4019 + type: 'query', 4020 + parameters: { 4021 + type: 'params', 4022 + required: ['did'], 4023 + properties: { 4024 + did: { 4025 + type: 'string', 4026 + description: 'The DID or handle of the user to get stats for.', 4027 + format: 'at-identifier', 4028 + }, 4029 + }, 4030 + }, 4031 + output: { 4032 + encoding: 'application/json', 4033 + schema: { 4034 + type: 'ref', 4035 + ref: 'lex:app.rocksky.stats.defs#statsView', 4036 + }, 4037 + }, 4038 + }, 4039 + }, 4040 + }, 4041 + ComAtprotoRepoStrongRef: { 4042 + lexicon: 1, 4043 + id: 'com.atproto.repo.strongRef', 4044 + description: 'A URI with a content-hash fingerprint.', 4045 + defs: { 4046 + main: { 4047 + type: 'object', 4048 + required: ['uri', 'cid'], 4049 + properties: { 4050 + uri: { 4051 + type: 'string', 4052 + format: 'at-uri', 4053 + }, 4054 + cid: { 4055 + type: 'string', 4056 + format: 'cid', 4057 + }, 4058 + }, 4059 + }, 4060 + }, 4061 + }, 456 4062 } as const satisfies Record<string, LexiconDoc> 457 4063 export const schemas = Object.values(schemaDict) satisfies LexiconDoc[] 458 4064 export const lexicons: Lexicons = new Lexicons(schemas) ··· 486 4092 } 487 4093 488 4094 export const ids = { 4095 + AppRockskyActorDefs: 'app.rocksky.actor.defs', 4096 + AppRockskyActorGetActorAlbums: 'app.rocksky.actor.getActorAlbums', 4097 + AppRockskyActorGetActorArtists: 'app.rocksky.actor.getActorArtists', 4098 + AppRockskyActorGetActorLovedSongs: 'app.rocksky.actor.getActorLovedSongs', 4099 + AppRockskyActorGetActorPlaylists: 'app.rocksky.actor.getActorPlaylists', 4100 + AppRockskyActorGetActorScrobbles: 'app.rocksky.actor.getActorScrobbles', 4101 + AppRockskyActorGetActorSongs: 'app.rocksky.actor.getActorSongs', 4102 + AppRockskyActorGetProfile: 'app.rocksky.actor.getProfile', 4103 + AppBskyActorProfile: 'app.bsky.actor.profile', 489 4104 AppRockskyAlbum: 'app.rocksky.album', 4105 + AppRockskyAlbumDefs: 'app.rocksky.album.defs', 4106 + AppRockskyAlbumGetAlbum: 'app.rocksky.album.getAlbum', 4107 + AppRockskyAlbumGetAlbums: 'app.rocksky.album.getAlbums', 4108 + AppRockskyAlbumGetAlbumTracks: 'app.rocksky.album.getAlbumTracks', 4109 + AppRockskyApikeyCreateApikey: 'app.rocksky.apikey.createApikey', 4110 + AppRockskyApikeyDefs: 'app.rocksky.apikey.defs', 4111 + AppRockskyApikeysDefs: 'app.rocksky.apikeys.defs', 4112 + AppRockskyApikeyGetApikeys: 'app.rocksky.apikey.getApikeys', 4113 + AppRockskyApikeyRemoveApikey: 'app.rocksky.apikey.removeApikey', 4114 + AppRockskyApikeyUpdateApikey: 'app.rocksky.apikey.updateApikey', 490 4115 AppRockskyArtist: 'app.rocksky.artist', 4116 + AppRockskyArtistDefs: 'app.rocksky.artist.defs', 4117 + AppRockskyArtistGetArtistAlbums: 'app.rocksky.artist.getArtistAlbums', 4118 + AppRockskyArtistGetArtist: 'app.rocksky.artist.getArtist', 4119 + AppRockskyArtistGetArtists: 'app.rocksky.artist.getArtists', 4120 + AppRockskyArtistGetArtistTracks: 'app.rocksky.artist.getArtistTracks', 4121 + AppRockskyChartsDefs: 'app.rocksky.charts.defs', 4122 + AppRockskyChartsGetScrobblesChart: 'app.rocksky.charts.getScrobblesChart', 4123 + AppRockskyDropboxDefs: 'app.rocksky.dropbox.defs', 4124 + AppRockskyDropboxDownloadFile: 'app.rocksky.dropbox.downloadFile', 4125 + AppRockskyDropboxGetFiles: 'app.rocksky.dropbox.getFiles', 4126 + AppRockskyDropboxGetMetadata: 'app.rocksky.dropbox.getMetadata', 4127 + AppRockskyDropboxGetTemporaryLink: 'app.rocksky.dropbox.getTemporaryLink', 4128 + AppRockskyFeedDefs: 'app.rocksky.feed.defs', 4129 + AppRockskyFeedGetNowPlayings: 'app.rocksky.feed.getNowPlayings', 4130 + AppRockskyFeedSearch: 'app.rocksky.feed.search', 4131 + AppRockskyGoogledriveDefs: 'app.rocksky.googledrive.defs', 4132 + AppRockskyGoogledriveDownloadFile: 'app.rocksky.googledrive.downloadFile', 4133 + AppRockskyGoogledriveGetFile: 'app.rocksky.googledrive.getFile', 4134 + AppRockskyGoogledriveGetFiles: 'app.rocksky.googledrive.getFiles', 4135 + AppRockskyLikeDislikeShout: 'app.rocksky.like.dislikeShout', 4136 + AppRockskyLikeDislikeSong: 'app.rocksky.like.dislikeSong', 4137 + AppRockskyLike: 'app.rocksky.like', 4138 + AppRockskyLikeLikeShout: 'app.rocksky.like.likeShout', 4139 + AppRockskyLikeLikeSong: 'app.rocksky.like.likeSong', 4140 + AppRockskyPlayerDefs: 'app.rocksky.player.defs', 4141 + AppRockskyPlayerGetCurrentlyPlaying: 'app.rocksky.player.getCurrentlyPlaying', 4142 + AppRockskyPlayerNext: 'app.rocksky.player.next', 4143 + AppRockskyPlayerPause: 'app.rocksky.player.pause', 4144 + AppRockskyPlayerPlay: 'app.rocksky.player.play', 4145 + AppRockskyPlayerPrevious: 'app.rocksky.player.previous', 4146 + AppRockskyPlayerSeek: 'app.rocksky.player.seek', 4147 + AppRockskyPlaylistDefs: 'app.rocksky.playlist.defs', 4148 + AppRockskyPlaylistGetPlaylist: 'app.rocksky.playlist.getPlaylist', 4149 + AppRockskyPlaylistGetPlaylists: 'app.rocksky.playlist.getPlaylists', 4150 + AppRockskyPlaylist: 'app.rocksky.playlist', 4151 + AppRockskyRadioDefs: 'app.rocksky.radio.defs', 4152 + AppRockskyRadio: 'app.rocksky.radio', 4153 + AppRockskyScrobbleCreateScrobble: 'app.rocksky.scrobble.createScrobble', 4154 + AppRockskyScrobbleDefs: 'app.rocksky.scrobble.defs', 4155 + AppRockskyScrobbleGetScrobble: 'app.rocksky.scrobble.getScrobble', 4156 + AppRockskyScrobbleGetScrobbles: 'app.rocksky.scrobble.getScrobbles', 491 4157 AppRockskyScrobble: 'app.rocksky.scrobble', 4158 + AppRockskyShoutCreateShout: 'app.rocksky.shout.createShout', 4159 + AppRockskyShoutDefs: 'app.rocksky.shout.defs', 4160 + AppRockskyShoutGetAlbumShouts: 'app.rocksky.shout.getAlbumShouts', 4161 + AppRockskyShoutGetArtistShouts: 'app.rocksky.shout.getArtistShouts', 4162 + AppRockskyShoutGetProfileShouts: 'app.rocksky.shout.getProfileShouts', 4163 + AppRockskyShoutGetShoutReplies: 'app.rocksky.shout.getShoutReplies', 4164 + AppRockskyShoutGetTrackShouts: 'app.rocksky.shout.getTrackShouts', 4165 + AppRockskyShoutRemoveShout: 'app.rocksky.shout.removeShout', 4166 + AppRockskyShoutReplyShout: 'app.rocksky.shout.replyShout', 4167 + AppRockskyShoutReportShout: 'app.rocksky.shout.reportShout', 4168 + AppRockskyShout: 'app.rocksky.shout', 4169 + AppRockskySongCreateSong: 'app.rocksky.song.createSong', 4170 + AppRockskySongDefs: 'app.rocksky.song.defs', 4171 + AppRockskySongGetSong: 'app.rocksky.song.getSong', 4172 + AppRockskySongGetSongs: 'app.rocksky.song.getSongs', 4173 + AppRockskyLovedSong: 'app.rocksky.lovedSong', 492 4174 AppRockskySong: 'app.rocksky.song', 4175 + AppRockskySpotifyDefs: 'app.rocksky.spotify.defs', 4176 + AppRockskySpotifyGetCurrentlyPlaying: 4177 + 'app.rocksky.spotify.getCurrentlyPlaying', 4178 + AppRockskySpotifyNext: 'app.rocksky.spotify.next', 4179 + AppRockskySpotifyPause: 'app.rocksky.spotify.pause', 4180 + AppRockskySpotifyPlay: 'app.rocksky.spotify.play', 4181 + AppRockskySpotifyPrevious: 'app.rocksky.spotify.previous', 4182 + AppRockskySpotifySeek: 'app.rocksky.spotify.seek', 4183 + AppRockskyStatsDefs: 'app.rocksky.stats.defs', 4184 + AppRockskyStatsGetStats: 'app.rocksky.stats.getStats', 4185 + ComAtprotoRepoStrongRef: 'com.atproto.repo.strongRef', 493 4186 } as const
+42
src/lexicon/types/app/bsky/actor/profile.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + import type * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs.js' 13 + import type * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef.js' 14 + 15 + const is$typed = _is$typed, 16 + validate = _validate 17 + const id = 'app.bsky.actor.profile' 18 + 19 + export interface Record { 20 + $type: 'app.bsky.actor.profile' 21 + displayName?: string 22 + /** Free-form profile description text. */ 23 + description?: string 24 + /** Small image to be displayed next to posts from account. AKA, 'profile picture' */ 25 + avatar?: BlobRef 26 + /** Larger horizontal image to display behind profile view. */ 27 + banner?: BlobRef 28 + labels?: $Typed<ComAtprotoLabelDefs.SelfLabels> | { $type: string } 29 + joinedViaStarterPack?: ComAtprotoRepoStrongRef.Main 30 + createdAt?: string 31 + [k: string]: unknown 32 + } 33 + 34 + const hashRecord = 'main' 35 + 36 + export function isRecord<V>(v: V) { 37 + return is$typed(v, id, hashRecord) 38 + } 39 + 40 + export function validateRecord<V>(v: V) { 41 + return validate<Record & V>(v, id, hashRecord, true) 42 + }
+71
src/lexicon/types/app/rocksky/actor/defs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + 13 + const is$typed = _is$typed, 14 + validate = _validate 15 + const id = 'app.rocksky.actor.defs' 16 + 17 + export interface ProfileViewDetailed { 18 + $type?: 'app.rocksky.actor.defs#profileViewDetailed' 19 + /** The unique identifier of the actor. */ 20 + id?: string 21 + /** The DID of the actor. */ 22 + did?: string 23 + /** The handle of the actor. */ 24 + handle?: string 25 + /** The display name of the actor. */ 26 + displayName?: string 27 + /** The URL of the actor's avatar image. */ 28 + avatar?: string 29 + /** The date and time when the actor was created. */ 30 + createdAt?: string 31 + /** The date and time when the actor was last updated. */ 32 + updatedAt?: string 33 + } 34 + 35 + const hashProfileViewDetailed = 'profileViewDetailed' 36 + 37 + export function isProfileViewDetailed<V>(v: V) { 38 + return is$typed(v, id, hashProfileViewDetailed) 39 + } 40 + 41 + export function validateProfileViewDetailed<V>(v: V) { 42 + return validate<ProfileViewDetailed & V>(v, id, hashProfileViewDetailed) 43 + } 44 + 45 + export interface ProfileViewBasic { 46 + $type?: 'app.rocksky.actor.defs#profileViewBasic' 47 + /** The unique identifier of the actor. */ 48 + id?: string 49 + /** The DID of the actor. */ 50 + did?: string 51 + /** The handle of the actor. */ 52 + handle?: string 53 + /** The display name of the actor. */ 54 + displayName?: string 55 + /** The URL of the actor's avatar image. */ 56 + avatar?: string 57 + /** The date and time when the actor was created. */ 58 + createdAt?: string 59 + /** The date and time when the actor was last updated. */ 60 + updatedAt?: string 61 + } 62 + 63 + const hashProfileViewBasic = 'profileViewBasic' 64 + 65 + export function isProfileViewBasic<V>(v: V) { 66 + return is$typed(v, id, hashProfileViewBasic) 67 + } 68 + 69 + export function validateProfileViewBasic<V>(v: V) { 70 + return validate<ProfileViewBasic & V>(v, id, hashProfileViewBasic) 71 + }
+59
src/lexicon/types/app/rocksky/actor/getActorAlbums.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyAlbumDefs from '../album/defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.actor.getActorAlbums' 19 + 20 + export interface QueryParams { 21 + /** The DID or handle of the actor */ 22 + did: string 23 + /** The maximum number of albums to return */ 24 + limit?: number 25 + /** The offset for pagination */ 26 + offset?: number 27 + } 28 + 29 + export type InputSchema = undefined 30 + 31 + export interface OutputSchema { 32 + albums?: AppRockskyAlbumDefs.AlbumViewBasic[] 33 + } 34 + 35 + export type HandlerInput = undefined 36 + 37 + export interface HandlerSuccess { 38 + encoding: 'application/json' 39 + body: OutputSchema 40 + headers?: { [key: string]: string } 41 + } 42 + 43 + export interface HandlerError { 44 + status: number 45 + message?: string 46 + } 47 + 48 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 49 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 50 + auth: HA 51 + params: QueryParams 52 + input: HandlerInput 53 + req: express.Request 54 + res: express.Response 55 + resetRouteRateLimits: () => Promise<void> 56 + } 57 + export type Handler<HA extends HandlerAuth = never> = ( 58 + ctx: HandlerReqCtx<HA>, 59 + ) => Promise<HandlerOutput> | HandlerOutput
+59
src/lexicon/types/app/rocksky/actor/getActorArtists.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyArtistDefs from '../artist/defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.actor.getActorArtists' 19 + 20 + export interface QueryParams { 21 + /** The DID or handle of the actor */ 22 + did: string 23 + /** The maximum number of albums to return */ 24 + limit?: number 25 + /** The offset for pagination */ 26 + offset?: number 27 + } 28 + 29 + export type InputSchema = undefined 30 + 31 + export interface OutputSchema { 32 + artists?: AppRockskyArtistDefs.ArtistViewBasic[] 33 + } 34 + 35 + export type HandlerInput = undefined 36 + 37 + export interface HandlerSuccess { 38 + encoding: 'application/json' 39 + body: OutputSchema 40 + headers?: { [key: string]: string } 41 + } 42 + 43 + export interface HandlerError { 44 + status: number 45 + message?: string 46 + } 47 + 48 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 49 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 50 + auth: HA 51 + params: QueryParams 52 + input: HandlerInput 53 + req: express.Request 54 + res: express.Response 55 + resetRouteRateLimits: () => Promise<void> 56 + } 57 + export type Handler<HA extends HandlerAuth = never> = ( 58 + ctx: HandlerReqCtx<HA>, 59 + ) => Promise<HandlerOutput> | HandlerOutput
+59
src/lexicon/types/app/rocksky/actor/getActorLovedSongs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskySongDefs from '../song/defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.actor.getActorLovedSongs' 19 + 20 + export interface QueryParams { 21 + /** The DID or handle of the actor */ 22 + did: string 23 + /** The maximum number of albums to return */ 24 + limit?: number 25 + /** The offset for pagination */ 26 + offset?: number 27 + } 28 + 29 + export type InputSchema = undefined 30 + 31 + export interface OutputSchema { 32 + tracks?: AppRockskySongDefs.SongViewBasic[] 33 + } 34 + 35 + export type HandlerInput = undefined 36 + 37 + export interface HandlerSuccess { 38 + encoding: 'application/json' 39 + body: OutputSchema 40 + headers?: { [key: string]: string } 41 + } 42 + 43 + export interface HandlerError { 44 + status: number 45 + message?: string 46 + } 47 + 48 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 49 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 50 + auth: HA 51 + params: QueryParams 52 + input: HandlerInput 53 + req: express.Request 54 + res: express.Response 55 + resetRouteRateLimits: () => Promise<void> 56 + } 57 + export type Handler<HA extends HandlerAuth = never> = ( 58 + ctx: HandlerReqCtx<HA>, 59 + ) => Promise<HandlerOutput> | HandlerOutput
+59
src/lexicon/types/app/rocksky/actor/getActorPlaylists.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyPlaylistDefs from '../playlist/defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.actor.getActorPlaylists' 19 + 20 + export interface QueryParams { 21 + /** The DID or handle of the actor */ 22 + did: string 23 + /** The maximum number of albums to return */ 24 + limit?: number 25 + /** The offset for pagination */ 26 + offset?: number 27 + } 28 + 29 + export type InputSchema = undefined 30 + 31 + export interface OutputSchema { 32 + playlists?: AppRockskyPlaylistDefs.PlaylistViewBasic[] 33 + } 34 + 35 + export type HandlerInput = undefined 36 + 37 + export interface HandlerSuccess { 38 + encoding: 'application/json' 39 + body: OutputSchema 40 + headers?: { [key: string]: string } 41 + } 42 + 43 + export interface HandlerError { 44 + status: number 45 + message?: string 46 + } 47 + 48 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 49 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 50 + auth: HA 51 + params: QueryParams 52 + input: HandlerInput 53 + req: express.Request 54 + res: express.Response 55 + resetRouteRateLimits: () => Promise<void> 56 + } 57 + export type Handler<HA extends HandlerAuth = never> = ( 58 + ctx: HandlerReqCtx<HA>, 59 + ) => Promise<HandlerOutput> | HandlerOutput
+59
src/lexicon/types/app/rocksky/actor/getActorScrobbles.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyScrobbleDefs from '../scrobble/defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.actor.getActorScrobbles' 19 + 20 + export interface QueryParams { 21 + /** The DID or handle of the actor */ 22 + did: string 23 + /** The maximum number of albums to return */ 24 + limit?: number 25 + /** The offset for pagination */ 26 + offset?: number 27 + } 28 + 29 + export type InputSchema = undefined 30 + 31 + export interface OutputSchema { 32 + scrobbles?: AppRockskyScrobbleDefs.ScrobbleViewBasic[] 33 + } 34 + 35 + export type HandlerInput = undefined 36 + 37 + export interface HandlerSuccess { 38 + encoding: 'application/json' 39 + body: OutputSchema 40 + headers?: { [key: string]: string } 41 + } 42 + 43 + export interface HandlerError { 44 + status: number 45 + message?: string 46 + } 47 + 48 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 49 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 50 + auth: HA 51 + params: QueryParams 52 + input: HandlerInput 53 + req: express.Request 54 + res: express.Response 55 + resetRouteRateLimits: () => Promise<void> 56 + } 57 + export type Handler<HA extends HandlerAuth = never> = ( 58 + ctx: HandlerReqCtx<HA>, 59 + ) => Promise<HandlerOutput> | HandlerOutput
+59
src/lexicon/types/app/rocksky/actor/getActorSongs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskySongDefs from '../song/defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.actor.getActorSongs' 19 + 20 + export interface QueryParams { 21 + /** The DID or handle of the actor */ 22 + did: string 23 + /** The maximum number of albums to return */ 24 + limit?: number 25 + /** The offset for pagination */ 26 + offset?: number 27 + } 28 + 29 + export type InputSchema = undefined 30 + 31 + export interface OutputSchema { 32 + songs?: AppRockskySongDefs.SongViewBasic[] 33 + } 34 + 35 + export type HandlerInput = undefined 36 + 37 + export interface HandlerSuccess { 38 + encoding: 'application/json' 39 + body: OutputSchema 40 + headers?: { [key: string]: string } 41 + } 42 + 43 + export interface HandlerError { 44 + status: number 45 + message?: string 46 + } 47 + 48 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 49 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 50 + auth: HA 51 + params: QueryParams 52 + input: HandlerInput 53 + req: express.Request 54 + res: express.Response 55 + resetRouteRateLimits: () => Promise<void> 56 + } 57 + export type Handler<HA extends HandlerAuth = never> = ( 58 + ctx: HandlerReqCtx<HA>, 59 + ) => Promise<HandlerOutput> | HandlerOutput
+51
src/lexicon/types/app/rocksky/actor/getProfile.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyActorDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.actor.getProfile' 19 + 20 + export interface QueryParams { 21 + /** The DID or handle of the actor */ 22 + did?: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type OutputSchema = AppRockskyActorDefs.ProfileViewDetailed 27 + export type HandlerInput = undefined 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
+2 -2
src/lexicon/types/app/rocksky/album.ts
··· 32 32 youtubeLink?: string 33 33 /** The Spotify link of the album. */ 34 34 spotifyLink?: string 35 - /** The Tidal link of the album. */ 35 + /** The tidal link of the album. */ 36 36 tidalLink?: string 37 37 /** The Apple Music link of the album. */ 38 38 appleMusicLink?: string 39 - /** The date the song was created. */ 39 + /** The date and time when the album was created. */ 40 40 createdAt: string 41 41 [k: string]: unknown 42 42 }
+89
src/lexicon/types/app/rocksky/album/defs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + import type * as AppRockskySongDefsSongViewBasic from '../song/defs/songViewBasic.js' 13 + 14 + const is$typed = _is$typed, 15 + validate = _validate 16 + const id = 'app.rocksky.album.defs' 17 + 18 + export interface AlbumViewBasic { 19 + $type?: 'app.rocksky.album.defs#albumViewBasic' 20 + /** The unique identifier of the album. */ 21 + id?: string 22 + /** The URI of the album. */ 23 + uri?: string 24 + /** The title of the album. */ 25 + title?: string 26 + /** The artist of the album. */ 27 + artist?: string 28 + /** The URI of the album's artist. */ 29 + artistUri?: string 30 + /** The year the album was released. */ 31 + year?: number 32 + /** The URL of the album art image. */ 33 + albumArt?: string 34 + /** The release date of the album. */ 35 + releaseDate?: string 36 + /** The SHA256 hash of the album. */ 37 + sha256?: string 38 + /** The number of times the album has been played. */ 39 + playCount?: number 40 + /** The number of unique listeners who have played the album. */ 41 + uniqueListeners?: number 42 + } 43 + 44 + const hashAlbumViewBasic = 'albumViewBasic' 45 + 46 + export function isAlbumViewBasic<V>(v: V) { 47 + return is$typed(v, id, hashAlbumViewBasic) 48 + } 49 + 50 + export function validateAlbumViewBasic<V>(v: V) { 51 + return validate<AlbumViewBasic & V>(v, id, hashAlbumViewBasic) 52 + } 53 + 54 + export interface AlbumViewDetailed { 55 + $type?: 'app.rocksky.album.defs#albumViewDetailed' 56 + /** The unique identifier of the album. */ 57 + id?: string 58 + /** The URI of the album. */ 59 + uri?: string 60 + /** The title of the album. */ 61 + title?: string 62 + /** The artist of the album. */ 63 + artist?: string 64 + /** The URI of the album's artist. */ 65 + artistUri?: string 66 + /** The year the album was released. */ 67 + year?: number 68 + /** The URL of the album art image. */ 69 + albumArt?: string 70 + /** The release date of the album. */ 71 + releaseDate?: string 72 + /** The SHA256 hash of the album. */ 73 + sha256?: string 74 + /** The number of times the album has been played. */ 75 + playCount?: number 76 + /** The number of unique listeners who have played the album. */ 77 + uniqueListeners?: number 78 + tracks?: AppRockskySongDefsSongViewBasic.Main[] 79 + } 80 + 81 + const hashAlbumViewDetailed = 'albumViewDetailed' 82 + 83 + export function isAlbumViewDetailed<V>(v: V) { 84 + return is$typed(v, id, hashAlbumViewDetailed) 85 + } 86 + 87 + export function validateAlbumViewDetailed<V>(v: V) { 88 + return validate<AlbumViewDetailed & V>(v, id, hashAlbumViewDetailed) 89 + }
+51
src/lexicon/types/app/rocksky/album/getAlbum.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyAlbumDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.album.getAlbum' 19 + 20 + export interface QueryParams { 21 + /** The URI of the album to retrieve. */ 22 + uri: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type OutputSchema = AppRockskyAlbumDefs.AlbumViewDetailed 27 + export type HandlerInput = undefined 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
+55
src/lexicon/types/app/rocksky/album/getAlbumTracks.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskySongDefs from '../song/defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.album.getAlbumTracks' 19 + 20 + export interface QueryParams { 21 + /** The URI of the album to retrieve tracks from */ 22 + uri: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + 27 + export interface OutputSchema { 28 + tracks?: AppRockskySongDefs.SongViewBasic[] 29 + } 30 + 31 + export type HandlerInput = undefined 32 + 33 + export interface HandlerSuccess { 34 + encoding: 'application/json' 35 + body: OutputSchema 36 + headers?: { [key: string]: string } 37 + } 38 + 39 + export interface HandlerError { 40 + status: number 41 + message?: string 42 + } 43 + 44 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 45 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 46 + auth: HA 47 + params: QueryParams 48 + input: HandlerInput 49 + req: express.Request 50 + res: express.Response 51 + resetRouteRateLimits: () => Promise<void> 52 + } 53 + export type Handler<HA extends HandlerAuth = never> = ( 54 + ctx: HandlerReqCtx<HA>, 55 + ) => Promise<HandlerOutput> | HandlerOutput
+57
src/lexicon/types/app/rocksky/album/getAlbums.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyAlbumDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.album.getAlbums' 19 + 20 + export interface QueryParams { 21 + /** The maximum number of albums to return */ 22 + limit?: number 23 + /** The offset for pagination */ 24 + offset?: number 25 + } 26 + 27 + export type InputSchema = undefined 28 + 29 + export interface OutputSchema { 30 + albums?: AppRockskyAlbumDefs.AlbumViewBasic[] 31 + } 32 + 33 + export type HandlerInput = undefined 34 + 35 + export interface HandlerSuccess { 36 + encoding: 'application/json' 37 + body: OutputSchema 38 + headers?: { [key: string]: string } 39 + } 40 + 41 + export interface HandlerError { 42 + status: number 43 + message?: string 44 + } 45 + 46 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 47 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 48 + auth: HA 49 + params: QueryParams 50 + input: HandlerInput 51 + req: express.Request 52 + res: express.Response 53 + resetRouteRateLimits: () => Promise<void> 54 + } 55 + export type Handler<HA extends HandlerAuth = never> = ( 56 + ctx: HandlerReqCtx<HA>, 57 + ) => Promise<HandlerOutput> | HandlerOutput
+58
src/lexicon/types/app/rocksky/apikey/createApikey.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyApikeyDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.apikey.createApikey' 19 + 20 + export interface QueryParams {} 21 + 22 + export interface InputSchema { 23 + /** The name of the API key. */ 24 + name: string 25 + /** A description for the API key. */ 26 + description?: string 27 + } 28 + 29 + export type OutputSchema = AppRockskyApikeyDefs.ApiKey 30 + 31 + export interface HandlerInput { 32 + encoding: 'application/json' 33 + body: InputSchema 34 + } 35 + 36 + export interface HandlerSuccess { 37 + encoding: 'application/json' 38 + body: OutputSchema 39 + headers?: { [key: string]: string } 40 + } 41 + 42 + export interface HandlerError { 43 + status: number 44 + message?: string 45 + } 46 + 47 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 48 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 49 + auth: HA 50 + params: QueryParams 51 + input: HandlerInput 52 + req: express.Request 53 + res: express.Response 54 + resetRouteRateLimits: () => Promise<void> 55 + } 56 + export type Handler<HA extends HandlerAuth = never> = ( 57 + ctx: HandlerReqCtx<HA>, 58 + ) => Promise<HandlerOutput> | HandlerOutput
+37
src/lexicon/types/app/rocksky/apikey/defs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + 13 + const is$typed = _is$typed, 14 + validate = _validate 15 + const id = 'app.rocksky.apikey.defs' 16 + 17 + export interface ApiKeyView { 18 + $type?: 'app.rocksky.apikey.defs#apiKeyView' 19 + /** The unique identifier of the API key. */ 20 + id?: string 21 + /** The name of the API key. */ 22 + name?: string 23 + /** A description for the API key. */ 24 + description?: string 25 + /** The date and time when the API key was created. */ 26 + createdAt?: string 27 + } 28 + 29 + const hashApiKeyView = 'apiKeyView' 30 + 31 + export function isApiKeyView<V>(v: V) { 32 + return is$typed(v, id, hashApiKeyView) 33 + } 34 + 35 + export function validateApiKeyView<V>(v: V) { 36 + return validate<ApiKeyView & V>(v, id, hashApiKeyView) 37 + }
+57
src/lexicon/types/app/rocksky/apikey/getApikeys.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyApikeyDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.apikey.getApikeys' 19 + 20 + export interface QueryParams { 21 + /** The number of API keys to skip before starting to collect the result set. */ 22 + offset?: number 23 + /** The number of API keys to return per page. */ 24 + limit?: number 25 + } 26 + 27 + export type InputSchema = undefined 28 + 29 + export interface OutputSchema { 30 + apiKeys?: AppRockskyApikeyDefs.ApikeyView[] 31 + } 32 + 33 + export type HandlerInput = undefined 34 + 35 + export interface HandlerSuccess { 36 + encoding: 'application/json' 37 + body: OutputSchema 38 + headers?: { [key: string]: string } 39 + } 40 + 41 + export interface HandlerError { 42 + status: number 43 + message?: string 44 + } 45 + 46 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 47 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 48 + auth: HA 49 + params: QueryParams 50 + input: HandlerInput 51 + req: express.Request 52 + res: express.Response 53 + resetRouteRateLimits: () => Promise<void> 54 + } 55 + export type Handler<HA extends HandlerAuth = never> = ( 56 + ctx: HandlerReqCtx<HA>, 57 + ) => Promise<HandlerOutput> | HandlerOutput
+51
src/lexicon/types/app/rocksky/apikey/removeApikey.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyApikeyDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.apikey.removeApikey' 19 + 20 + export interface QueryParams { 21 + /** The ID of the API key to remove. */ 22 + id: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type OutputSchema = AppRockskyApikeyDefs.ApiKey 27 + export type HandlerInput = undefined 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
+60
src/lexicon/types/app/rocksky/apikey/updateApikey.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyApikeyDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.apikey.updateApikey' 19 + 20 + export interface QueryParams {} 21 + 22 + export interface InputSchema { 23 + /** The ID of the API key to update. */ 24 + id: string 25 + /** The new name of the API key. */ 26 + name: string 27 + /** A new description for the API key. */ 28 + description?: string 29 + } 30 + 31 + export type OutputSchema = AppRockskyApikeyDefs.ApiKey 32 + 33 + export interface HandlerInput { 34 + encoding: 'application/json' 35 + body: InputSchema 36 + } 37 + 38 + export interface HandlerSuccess { 39 + encoding: 'application/json' 40 + body: OutputSchema 41 + headers?: { [key: string]: string } 42 + } 43 + 44 + export interface HandlerError { 45 + status: number 46 + message?: string 47 + } 48 + 49 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 50 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 51 + auth: HA 52 + params: QueryParams 53 + input: HandlerInput 54 + req: express.Request 55 + res: express.Response 56 + resetRouteRateLimits: () => Promise<void> 57 + } 58 + export type Handler<HA extends HandlerAuth = never> = ( 59 + ctx: HandlerReqCtx<HA>, 60 + ) => Promise<HandlerOutput> | HandlerOutput
+15
src/lexicon/types/app/rocksky/apikeys/defs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + 13 + const is$typed = _is$typed, 14 + validate = _validate 15 + const id = 'app.rocksky.apikeys.defs'
+1 -1
src/lexicon/types/app/rocksky/artist.ts
··· 26 26 died?: string 27 27 /** The birth place of the artist. */ 28 28 bornIn?: string 29 - /** The date the song was created. */ 29 + /** The date when the artist was created. */ 30 30 createdAt: string 31 31 [k: string]: unknown 32 32 }
+71
src/lexicon/types/app/rocksky/artist/defs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + 13 + const is$typed = _is$typed, 14 + validate = _validate 15 + const id = 'app.rocksky.artist.defs' 16 + 17 + export interface ArtistViewBasic { 18 + $type?: 'app.rocksky.artist.defs#artistViewBasic' 19 + /** The unique identifier of the artist. */ 20 + id?: string 21 + /** The URI of the artist. */ 22 + uri?: string 23 + /** The name of the artist. */ 24 + name?: string 25 + /** The picture of the artist. */ 26 + picture?: string 27 + /** The SHA256 hash of the artist. */ 28 + sha256?: string 29 + /** The number of times the artist has been played. */ 30 + playCount?: number 31 + /** The number of unique listeners who have played the artist. */ 32 + uniqueListeners?: number 33 + } 34 + 35 + const hashArtistViewBasic = 'artistViewBasic' 36 + 37 + export function isArtistViewBasic<V>(v: V) { 38 + return is$typed(v, id, hashArtistViewBasic) 39 + } 40 + 41 + export function validateArtistViewBasic<V>(v: V) { 42 + return validate<ArtistViewBasic & V>(v, id, hashArtistViewBasic) 43 + } 44 + 45 + export interface ArtistViewDetailed { 46 + $type?: 'app.rocksky.artist.defs#artistViewDetailed' 47 + /** The unique identifier of the artist. */ 48 + id?: string 49 + /** The URI of the artist. */ 50 + uri?: string 51 + /** The name of the artist. */ 52 + name?: string 53 + /** The picture of the artist. */ 54 + picture?: string 55 + /** The SHA256 hash of the artist. */ 56 + sha256?: string 57 + /** The number of times the artist has been played. */ 58 + playCount?: number 59 + /** The number of unique listeners who have played the artist. */ 60 + uniqueListeners?: number 61 + } 62 + 63 + const hashArtistViewDetailed = 'artistViewDetailed' 64 + 65 + export function isArtistViewDetailed<V>(v: V) { 66 + return is$typed(v, id, hashArtistViewDetailed) 67 + } 68 + 69 + export function validateArtistViewDetailed<V>(v: V) { 70 + return validate<ArtistViewDetailed & V>(v, id, hashArtistViewDetailed) 71 + }
+51
src/lexicon/types/app/rocksky/artist/getArtist.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyArtistDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.artist.getArtist' 19 + 20 + export interface QueryParams { 21 + /** The URI of the artist to retrieve details from */ 22 + uri: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type OutputSchema = AppRockskyArtistDefs.ArtistViewDetailed 27 + export type HandlerInput = undefined 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
+55
src/lexicon/types/app/rocksky/artist/getArtistAlbums.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyAlbumDefs from '../album/defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.artist.getArtistAlbums' 19 + 20 + export interface QueryParams { 21 + /** The URI of the artist to retrieve albums from */ 22 + uri: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + 27 + export interface OutputSchema { 28 + albums?: AppRockskyAlbumDefs.AlbumViewBasic[] 29 + } 30 + 31 + export type HandlerInput = undefined 32 + 33 + export interface HandlerSuccess { 34 + encoding: 'application/json' 35 + body: OutputSchema 36 + headers?: { [key: string]: string } 37 + } 38 + 39 + export interface HandlerError { 40 + status: number 41 + message?: string 42 + } 43 + 44 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 45 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 46 + auth: HA 47 + params: QueryParams 48 + input: HandlerInput 49 + req: express.Request 50 + res: express.Response 51 + resetRouteRateLimits: () => Promise<void> 52 + } 53 + export type Handler<HA extends HandlerAuth = never> = ( 54 + ctx: HandlerReqCtx<HA>, 55 + ) => Promise<HandlerOutput> | HandlerOutput
+59
src/lexicon/types/app/rocksky/artist/getArtistTracks.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskySongDefs from '../song/defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.artist.getArtistTracks' 19 + 20 + export interface QueryParams { 21 + /** The URI of the artist to retrieve albums from */ 22 + uri?: string 23 + /** The maximum number of tracks to return */ 24 + limit?: number 25 + /** The offset for pagination */ 26 + offset?: number 27 + } 28 + 29 + export type InputSchema = undefined 30 + 31 + export interface OutputSchema { 32 + tracks?: AppRockskySongDefs.SongViewBasic[] 33 + } 34 + 35 + export type HandlerInput = undefined 36 + 37 + export interface HandlerSuccess { 38 + encoding: 'application/json' 39 + body: OutputSchema 40 + headers?: { [key: string]: string } 41 + } 42 + 43 + export interface HandlerError { 44 + status: number 45 + message?: string 46 + } 47 + 48 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 49 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 50 + auth: HA 51 + params: QueryParams 52 + input: HandlerInput 53 + req: express.Request 54 + res: express.Response 55 + resetRouteRateLimits: () => Promise<void> 56 + } 57 + export type Handler<HA extends HandlerAuth = never> = ( 58 + ctx: HandlerReqCtx<HA>, 59 + ) => Promise<HandlerOutput> | HandlerOutput
+57
src/lexicon/types/app/rocksky/artist/getArtists.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyArtistDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.artist.getArtists' 19 + 20 + export interface QueryParams { 21 + /** The maximum number of artists to return */ 22 + limit?: number 23 + /** The offset for pagination */ 24 + offset?: number 25 + } 26 + 27 + export type InputSchema = undefined 28 + 29 + export interface OutputSchema { 30 + artists?: AppRockskyArtistDefs.ArtistViewBasic[] 31 + } 32 + 33 + export type HandlerInput = undefined 34 + 35 + export interface HandlerSuccess { 36 + encoding: 'application/json' 37 + body: OutputSchema 38 + headers?: { [key: string]: string } 39 + } 40 + 41 + export interface HandlerError { 42 + status: number 43 + message?: string 44 + } 45 + 46 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 47 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 48 + auth: HA 49 + params: QueryParams 50 + input: HandlerInput 51 + req: express.Request 52 + res: express.Response 53 + resetRouteRateLimits: () => Promise<void> 54 + } 55 + export type Handler<HA extends HandlerAuth = never> = ( 56 + ctx: HandlerReqCtx<HA>, 57 + ) => Promise<HandlerOutput> | HandlerOutput
+48
src/lexicon/types/app/rocksky/charts/defs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + 13 + const is$typed = _is$typed, 14 + validate = _validate 15 + const id = 'app.rocksky.charts.defs' 16 + 17 + export interface ChartsView { 18 + $type?: 'app.rocksky.charts.defs#chartsView' 19 + scrobbles?: ScrobbleViewBasic[] 20 + } 21 + 22 + const hashChartsView = 'chartsView' 23 + 24 + export function isChartsView<V>(v: V) { 25 + return is$typed(v, id, hashChartsView) 26 + } 27 + 28 + export function validateChartsView<V>(v: V) { 29 + return validate<ChartsView & V>(v, id, hashChartsView) 30 + } 31 + 32 + export interface ScrobbleViewBasic { 33 + $type?: 'app.rocksky.charts.defs#scrobbleViewBasic' 34 + /** The date of the scrobble. */ 35 + date?: string 36 + /** The number of scrobbles on this date. */ 37 + count?: number 38 + } 39 + 40 + const hashScrobbleViewBasic = 'scrobbleViewBasic' 41 + 42 + export function isScrobbleViewBasic<V>(v: V) { 43 + return is$typed(v, id, hashScrobbleViewBasic) 44 + } 45 + 46 + export function validateScrobbleViewBasic<V>(v: V) { 47 + return validate<ScrobbleViewBasic & V>(v, id, hashScrobbleViewBasic) 48 + }
+57
src/lexicon/types/app/rocksky/charts/getScrobblesChart.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyChartsDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.charts.getScrobblesChart' 19 + 20 + export interface QueryParams { 21 + /** The DID or handle of the actor */ 22 + did?: string 23 + /** The URI of the artist to filter by */ 24 + artisturi?: string 25 + /** The URI of the album to filter by */ 26 + albumuri?: string 27 + /** The URI of the track to filter by */ 28 + songuri?: string 29 + } 30 + 31 + export type InputSchema = undefined 32 + export type OutputSchema = AppRockskyChartsDefs.ChartsView 33 + export type HandlerInput = undefined 34 + 35 + export interface HandlerSuccess { 36 + encoding: 'application/json' 37 + body: OutputSchema 38 + headers?: { [key: string]: string } 39 + } 40 + 41 + export interface HandlerError { 42 + status: number 43 + message?: string 44 + } 45 + 46 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 47 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 48 + auth: HA 49 + params: QueryParams 50 + input: HandlerInput 51 + req: express.Request 52 + res: express.Response 53 + resetRouteRateLimits: () => Promise<void> 54 + } 55 + export type Handler<HA extends HandlerAuth = never> = ( 56 + ctx: HandlerReqCtx<HA>, 57 + ) => Promise<HandlerOutput> | HandlerOutput
+73
src/lexicon/types/app/rocksky/dropbox/defs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + 13 + const is$typed = _is$typed, 14 + validate = _validate 15 + const id = 'app.rocksky.dropbox.defs' 16 + 17 + export interface FileView { 18 + $type?: 'app.rocksky.dropbox.defs#fileView' 19 + /** The unique identifier of the file. */ 20 + id?: string 21 + /** The name of the file. */ 22 + name?: string 23 + /** The lowercased path of the file. */ 24 + pathLower?: string 25 + /** The display path of the file. */ 26 + pathDisplay?: string 27 + /** The last modified date and time of the file on the client. */ 28 + clientModified?: string 29 + /** The last modified date and time of the file on the server. */ 30 + serverModified?: string 31 + } 32 + 33 + const hashFileView = 'fileView' 34 + 35 + export function isFileView<V>(v: V) { 36 + return is$typed(v, id, hashFileView) 37 + } 38 + 39 + export function validateFileView<V>(v: V) { 40 + return validate<FileView & V>(v, id, hashFileView) 41 + } 42 + 43 + export interface FileListView { 44 + $type?: 'app.rocksky.dropbox.defs#fileListView' 45 + /** A list of files in the Dropbox. */ 46 + files?: FileView[] 47 + } 48 + 49 + const hashFileListView = 'fileListView' 50 + 51 + export function isFileListView<V>(v: V) { 52 + return is$typed(v, id, hashFileListView) 53 + } 54 + 55 + export function validateFileListView<V>(v: V) { 56 + return validate<FileListView & V>(v, id, hashFileListView) 57 + } 58 + 59 + export interface TemporaryLinkView { 60 + $type?: 'app.rocksky.dropbox.defs#temporaryLinkView' 61 + /** The temporary link to access the file. */ 62 + link?: string 63 + } 64 + 65 + const hashTemporaryLinkView = 'temporaryLinkView' 66 + 67 + export function isTemporaryLinkView<V>(v: V) { 68 + return is$typed(v, id, hashTemporaryLinkView) 69 + } 70 + 71 + export function validateTemporaryLinkView<V>(v: V) { 72 + return validate<TemporaryLinkView & V>(v, id, hashTemporaryLinkView) 73 + }
+50
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 'node:stream' 6 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 7 + import { CID } from 'multiformats/cid' 8 + import { validate as _validate } from '../../../../lexicons' 9 + import { 10 + type $Typed, 11 + is$typed as _is$typed, 12 + type OmitKey, 13 + } from '../../../../util' 14 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.dropbox.downloadFile' 19 + 20 + export interface QueryParams { 21 + /** The unique identifier of the file to download */ 22 + fileId: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type HandlerInput = undefined 27 + 28 + export interface HandlerSuccess { 29 + encoding: 'application/octet-stream' 30 + body: Uint8Array | stream.Readable 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
src/lexicon/types/app/rocksky/dropbox/getFiles.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyDropboxDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.dropbox.getFiles' 19 + 20 + export interface QueryParams { 21 + /** Path to the Dropbox folder or root directory */ 22 + at?: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type OutputSchema = AppRockskyDropboxDefs.FileListView 27 + export type HandlerInput = undefined 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
src/lexicon/types/app/rocksky/dropbox/getMetadata.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyDropboxDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.dropbox.getMetadata' 19 + 20 + export interface QueryParams { 21 + /** Path to the file or folder in Dropbox */ 22 + path: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type OutputSchema = AppRockskyDropboxDefs.FileView 27 + export type HandlerInput = undefined 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
src/lexicon/types/app/rocksky/dropbox/getTemporaryLink.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyDropboxDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.dropbox.getTemporaryLink' 19 + 20 + export interface QueryParams { 21 + /** Path to the file in Dropbox */ 22 + path: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type OutputSchema = AppRockskyDropboxDefs.TemporaryLinkView 27 + export type HandlerInput = undefined 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
+90
src/lexicon/types/app/rocksky/feed/defs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + import type * as AppRockskySongDefs from '../song/defs.js' 13 + import type * as AppRockskyAlbumDefs from '../album/defs.js' 14 + import type * as AppRockskyArtistDefs from '../artist/defs.js' 15 + import type * as AppRockskyPlaylistDefs from '../playlist/defs.js' 16 + import type * as AppRockskyActorDefs from '../actor/defs.js' 17 + 18 + const is$typed = _is$typed, 19 + validate = _validate 20 + const id = 'app.rocksky.feed.defs' 21 + 22 + export interface SearchResultsView { 23 + $type?: 'app.rocksky.feed.defs#searchResultsView' 24 + hits?: ( 25 + | $Typed<AppRockskySongDefs.SongViewBasic> 26 + | $Typed<AppRockskyAlbumDefs.AlbumViewBasic> 27 + | $Typed<AppRockskyArtistDefs.ArtistViewBasic> 28 + | $Typed<AppRockskyPlaylistDefs.PlaylistViewBasic> 29 + | $Typed<AppRockskyActorDefs.ProfileViewBasic> 30 + | { $type: string } 31 + )[] 32 + processingTimeMs?: number 33 + limit?: number 34 + offset?: number 35 + estimatedTotalHits?: number 36 + } 37 + 38 + const hashSearchResultsView = 'searchResultsView' 39 + 40 + export function isSearchResultsView<V>(v: V) { 41 + return is$typed(v, id, hashSearchResultsView) 42 + } 43 + 44 + export function validateSearchResultsView<V>(v: V) { 45 + return validate<SearchResultsView & V>(v, id, hashSearchResultsView) 46 + } 47 + 48 + export interface NowPlayingView { 49 + $type?: 'app.rocksky.feed.defs#nowPlayingView' 50 + album?: string 51 + albumArt?: string 52 + albumArtist?: string 53 + albumUri?: string 54 + artist?: string 55 + artistUri?: string 56 + avatar?: string 57 + createdAt?: string 58 + did?: string 59 + handle?: string 60 + id?: string 61 + title?: string 62 + trackId?: string 63 + trackUri?: string 64 + uri?: string 65 + } 66 + 67 + const hashNowPlayingView = 'nowPlayingView' 68 + 69 + export function isNowPlayingView<V>(v: V) { 70 + return is$typed(v, id, hashNowPlayingView) 71 + } 72 + 73 + export function validateNowPlayingView<V>(v: V) { 74 + return validate<NowPlayingView & V>(v, id, hashNowPlayingView) 75 + } 76 + 77 + export interface NowPlayingsView { 78 + $type?: 'app.rocksky.feed.defs#nowPlayingsView' 79 + nowPlayings?: NowPlayingView[] 80 + } 81 + 82 + const hashNowPlayingsView = 'nowPlayingsView' 83 + 84 + export function isNowPlayingsView<V>(v: V) { 85 + return is$typed(v, id, hashNowPlayingsView) 86 + } 87 + 88 + export function validateNowPlayingsView<V>(v: V) { 89 + return validate<NowPlayingsView & V>(v, id, hashNowPlayingsView) 90 + }
+51
src/lexicon/types/app/rocksky/feed/getNowPlayings.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyFeedDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.feed.getNowPlayings' 19 + 20 + export interface QueryParams { 21 + /** The maximum number of now playing tracks to return. */ 22 + size?: number 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type OutputSchema = AppRockskyFeedDefs.NowPlayingsView 27 + export type HandlerInput = undefined 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
src/lexicon/types/app/rocksky/feed/search.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyFeedDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.feed.search' 19 + 20 + export interface QueryParams { 21 + /** The search query string */ 22 + query: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type OutputSchema = AppRockskyFeedDefs.SearchResultsView 27 + export type HandlerInput = undefined 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
+46
src/lexicon/types/app/rocksky/googledrive/defs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + 13 + const is$typed = _is$typed, 14 + validate = _validate 15 + const id = 'app.rocksky.googledrive.defs' 16 + 17 + export interface FileView { 18 + $type?: 'app.rocksky.googledrive.defs#fileView' 19 + /** The unique identifier of the file. */ 20 + id?: string 21 + } 22 + 23 + const hashFileView = 'fileView' 24 + 25 + export function isFileView<V>(v: V) { 26 + return is$typed(v, id, hashFileView) 27 + } 28 + 29 + export function validateFileView<V>(v: V) { 30 + return validate<FileView & V>(v, id, hashFileView) 31 + } 32 + 33 + export interface FileListView { 34 + $type?: 'app.rocksky.googledrive.defs#fileListView' 35 + files?: FileView[] 36 + } 37 + 38 + const hashFileListView = 'fileListView' 39 + 40 + export function isFileListView<V>(v: V) { 41 + return is$typed(v, id, hashFileListView) 42 + } 43 + 44 + export function validateFileListView<V>(v: V) { 45 + return validate<FileListView & V>(v, id, hashFileListView) 46 + }
+50
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 'node:stream' 6 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 7 + import { CID } from 'multiformats/cid' 8 + import { validate as _validate } from '../../../../lexicons' 9 + import { 10 + type $Typed, 11 + is$typed as _is$typed, 12 + type OmitKey, 13 + } from '../../../../util' 14 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.googledrive.downloadFile' 19 + 20 + export interface QueryParams { 21 + /** The unique identifier of the file to download */ 22 + fileId: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type HandlerInput = undefined 27 + 28 + export interface HandlerSuccess { 29 + encoding: 'application/octet-stream' 30 + body: Uint8Array | stream.Readable 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
src/lexicon/types/app/rocksky/googledrive/getFile.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyGoogledriveDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.googledrive.getFile' 19 + 20 + export interface QueryParams { 21 + /** The unique identifier of the file to retrieve */ 22 + fileId: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type OutputSchema = AppRockskyGoogledriveDefs.FileView 27 + export type HandlerInput = undefined 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
src/lexicon/types/app/rocksky/googledrive/getFiles.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyGoogledriveDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.googledrive.getFiles' 19 + 20 + export interface QueryParams { 21 + /** Path to the Google Drive folder or root directory */ 22 + at?: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type OutputSchema = AppRockskyGoogledriveDefs.FileListView 27 + export type HandlerInput = undefined 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
+30
src/lexicon/types/app/rocksky/like.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../lexicons' 7 + import { type $Typed, is$typed as _is$typed, type OmitKey } from '../../../util' 8 + import type * as ComAtprotoRepoStrongRef from '../../com/atproto/repo/strongRef.js' 9 + 10 + const is$typed = _is$typed, 11 + validate = _validate 12 + const id = 'app.rocksky.like' 13 + 14 + export interface Record { 15 + $type: 'app.rocksky.like' 16 + /** The date when the like was created. */ 17 + createdAt: string 18 + subject: ComAtprotoRepoStrongRef.Main 19 + [k: string]: unknown 20 + } 21 + 22 + const hashRecord = 'main' 23 + 24 + export function isRecord<V>(v: V) { 25 + return is$typed(v, id, hashRecord) 26 + } 27 + 28 + export function validateRecord<V>(v: V) { 29 + return validate<Record & V>(v, id, hashRecord, true) 30 + }
+56
src/lexicon/types/app/rocksky/like/dislikeShout.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyShoutDefs from '../shout/defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.like.dislikeShout' 19 + 20 + export interface QueryParams {} 21 + 22 + export interface InputSchema { 23 + /** The unique identifier of the shout to dislike */ 24 + uri?: string 25 + } 26 + 27 + export type OutputSchema = AppRockskyShoutDefs.ShoutView 28 + 29 + export interface HandlerInput { 30 + encoding: 'application/json' 31 + body: InputSchema 32 + } 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
src/lexicon/types/app/rocksky/like/dislikeSong.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskySongDefs from '../song/defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.like.dislikeSong' 19 + 20 + export interface QueryParams {} 21 + 22 + export interface InputSchema { 23 + /** The unique identifier of the song to dislike */ 24 + uri?: string 25 + } 26 + 27 + export type OutputSchema = AppRockskySongDefs.SongViewDetailed 28 + 29 + export interface HandlerInput { 30 + encoding: 'application/json' 31 + body: InputSchema 32 + } 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
src/lexicon/types/app/rocksky/like/likeShout.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyShoutDefs from '../shout/defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.like.likeShout' 19 + 20 + export interface QueryParams {} 21 + 22 + export interface InputSchema { 23 + /** The unique identifier of the shout to like */ 24 + uri?: string 25 + } 26 + 27 + export type OutputSchema = AppRockskyShoutDefs.ShoutView 28 + 29 + export interface HandlerInput { 30 + encoding: 'application/json' 31 + body: InputSchema 32 + } 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
src/lexicon/types/app/rocksky/like/likeSong.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskySongDefs from '../song/defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.like.likeSong' 19 + 20 + export interface QueryParams {} 21 + 22 + export interface InputSchema { 23 + /** The unique identifier of the song to like */ 24 + uri?: string 25 + } 26 + 27 + export type OutputSchema = AppRockskySongDefs.SongViewDetailed 28 + 29 + export interface HandlerInput { 30 + encoding: 'application/json' 31 + body: InputSchema 32 + } 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
+68
src/lexicon/types/app/rocksky/lovedSong.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../lexicons' 7 + import { type $Typed, is$typed as _is$typed, type OmitKey } from '../../../util' 8 + 9 + const is$typed = _is$typed, 10 + validate = _validate 11 + const id = 'app.rocksky.lovedSong' 12 + 13 + export interface Record { 14 + $type: 'app.rocksky.lovedSong' 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. */ 20 + albumArtist?: string 21 + /** The album of the song. */ 22 + album: string 23 + /** The duration of the song in seconds. */ 24 + duration: number 25 + /** The track number of the song in the album. */ 26 + trackNumber?: number 27 + /** The disc number of the song in the album. */ 28 + discNumber?: number 29 + /** The release date of the song. */ 30 + releaseDate?: string 31 + /** The year the song was released. */ 32 + year?: number 33 + /** The genre of the song. */ 34 + genre?: string 35 + /** The tags of the song. */ 36 + tags?: string[] 37 + /** The composer of the song. */ 38 + composer?: string 39 + /** The lyrics of the song. */ 40 + lyrics?: string 41 + /** The copyright message of the song. */ 42 + copyrightMessage?: string 43 + /** Informations about the song */ 44 + wiki?: string 45 + /** The album art of the song. */ 46 + albumArt?: BlobRef 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 + [k: string]: unknown 58 + } 59 + 60 + const hashRecord = 'main' 61 + 62 + export function isRecord<V>(v: V) { 63 + return is$typed(v, id, hashRecord) 64 + } 65 + 66 + export function validateRecord<V>(v: V) { 67 + return validate<Record & V>(v, id, hashRecord, true) 68 + }
+35
src/lexicon/types/app/rocksky/player/defs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + 13 + const is$typed = _is$typed, 14 + validate = _validate 15 + const id = 'app.rocksky.player.defs' 16 + 17 + export interface CurrentlyPlayingViewDetailed { 18 + $type?: 'app.rocksky.player.defs#currentlyPlayingViewDetailed' 19 + /** The title of the currently playing track */ 20 + title?: string 21 + } 22 + 23 + const hashCurrentlyPlayingViewDetailed = 'currentlyPlayingViewDetailed' 24 + 25 + export function isCurrentlyPlayingViewDetailed<V>(v: V) { 26 + return is$typed(v, id, hashCurrentlyPlayingViewDetailed) 27 + } 28 + 29 + export function validateCurrentlyPlayingViewDetailed<V>(v: V) { 30 + return validate<CurrentlyPlayingViewDetailed & V>( 31 + v, 32 + id, 33 + hashCurrentlyPlayingViewDetailed, 34 + ) 35 + }
+51
src/lexicon/types/app/rocksky/player/getCurrentlyPlaying.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyPlayerDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.player.getCurrentlyPlaying' 19 + 20 + export interface QueryParams { 21 + /** Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user. */ 22 + actor?: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type OutputSchema = AppRockskyPlayerDefs.CurrentlyPlayingViewDetailed 27 + export type HandlerInput = undefined 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
+40
src/lexicon/types/app/rocksky/player/next.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + 15 + const is$typed = _is$typed, 16 + validate = _validate 17 + const id = 'app.rocksky.player.next' 18 + 19 + export interface QueryParams {} 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
+40
src/lexicon/types/app/rocksky/player/pause.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + 15 + const is$typed = _is$typed, 16 + validate = _validate 17 + const id = 'app.rocksky.player.pause' 18 + 19 + export interface QueryParams {} 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
+40
src/lexicon/types/app/rocksky/player/play.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + 15 + const is$typed = _is$typed, 16 + validate = _validate 17 + const id = 'app.rocksky.player.play' 18 + 19 + export interface QueryParams {} 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
+40
src/lexicon/types/app/rocksky/player/previous.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + 15 + const is$typed = _is$typed, 16 + validate = _validate 17 + const id = 'app.rocksky.player.previous' 18 + 19 + export interface QueryParams {} 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
+43
src/lexicon/types/app/rocksky/player/seek.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + 15 + const is$typed = _is$typed, 16 + validate = _validate 17 + const id = 'app.rocksky.player.seek' 18 + 19 + export interface QueryParams { 20 + /** The position in seconds to seek to */ 21 + position: number 22 + } 23 + 24 + export type InputSchema = undefined 25 + export type HandlerInput = undefined 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | void 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
+45
src/lexicon/types/app/rocksky/playlist.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../lexicons' 7 + import { type $Typed, is$typed as _is$typed, type OmitKey } from '../../../util' 8 + import type * as AppRockskySong from './song.js' 9 + 10 + const is$typed = _is$typed, 11 + validate = _validate 12 + const id = 'app.rocksky.playlist' 13 + 14 + export interface Record { 15 + $type: 'app.rocksky.playlist' 16 + /** The name of the playlist. */ 17 + name: string 18 + /** The playlist description. */ 19 + description?: string 20 + /** The picture of the playlist. */ 21 + picture?: BlobRef 22 + /** The tracks in the playlist. */ 23 + tracks?: AppRockskySong.Record[] 24 + /** The date the playlist was created. */ 25 + createdAt: string 26 + /** The Spotify link of the playlist. */ 27 + spotifyLink?: string 28 + /** The Tidal link of the playlist. */ 29 + tidalLink?: string 30 + /** The YouTube link of the playlist. */ 31 + youtubeLink?: string 32 + /** The Apple Music link of the playlist. */ 33 + appleMusicLink?: string 34 + [k: string]: unknown 35 + } 36 + 37 + const hashRecord = 'main' 38 + 39 + export function isRecord<V>(v: V) { 40 + return is$typed(v, id, hashRecord) 41 + } 42 + 43 + export function validateRecord<V>(v: V) { 44 + return validate<Record & V>(v, id, hashRecord, true) 45 + }
+90
src/lexicon/types/app/rocksky/playlist/defs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + import type * as AppRockskySongDefs from '../song/defs.js' 13 + 14 + const is$typed = _is$typed, 15 + validate = _validate 16 + const id = 'app.rocksky.playlist.defs' 17 + 18 + /** Detailed view of a playlist, including its tracks and metadata */ 19 + export interface PlaylistViewDetailed { 20 + $type?: 'app.rocksky.playlist.defs#playlistViewDetailed' 21 + /** The unique identifier of the playlist. */ 22 + id?: string 23 + /** The title of the playlist. */ 24 + title?: string 25 + /** The URI of the playlist. */ 26 + uri?: string 27 + /** The DID of the curator of the playlist. */ 28 + curatorDid?: string 29 + /** The handle of the curator of the playlist. */ 30 + curatorHandle?: string 31 + /** The name of the curator of the playlist. */ 32 + curatorName?: string 33 + /** The URL of the avatar image of the curator. */ 34 + curatorAvatarUrl?: string 35 + /** A description of the playlist. */ 36 + description?: string 37 + /** The URL of the cover image for the playlist. */ 38 + coverImageUrl?: string 39 + /** The date and time when the playlist was created. */ 40 + createdAt?: string 41 + /** A list of tracks in the playlist. */ 42 + tracks?: AppRockskySongDefs.SongViewBasic[] 43 + } 44 + 45 + const hashPlaylistViewDetailed = 'playlistViewDetailed' 46 + 47 + export function isPlaylistViewDetailed<V>(v: V) { 48 + return is$typed(v, id, hashPlaylistViewDetailed) 49 + } 50 + 51 + export function validatePlaylistViewDetailed<V>(v: V) { 52 + return validate<PlaylistViewDetailed & V>(v, id, hashPlaylistViewDetailed) 53 + } 54 + 55 + /** Basic view of a playlist, including its metadata */ 56 + export interface PlaylistViewBasic { 57 + $type?: 'app.rocksky.playlist.defs#playlistViewBasic' 58 + /** The unique identifier of the playlist. */ 59 + id?: string 60 + /** The title of the playlist. */ 61 + title?: string 62 + /** The URI of the playlist. */ 63 + uri?: string 64 + /** The DID of the curator of the playlist. */ 65 + curatorDid?: string 66 + /** The handle of the curator of the playlist. */ 67 + curatorHandle?: string 68 + /** The name of the curator of the playlist. */ 69 + curatorName?: string 70 + /** The URL of the avatar image of the curator. */ 71 + curatorAvatarUrl?: string 72 + /** A description of the playlist. */ 73 + description?: string 74 + /** The URL of the cover image for the playlist. */ 75 + coverImageUrl?: string 76 + /** The date and time when the playlist was created. */ 77 + createdAt?: string 78 + /** The number of tracks in the playlist. */ 79 + trackCount?: number 80 + } 81 + 82 + const hashPlaylistViewBasic = 'playlistViewBasic' 83 + 84 + export function isPlaylistViewBasic<V>(v: V) { 85 + return is$typed(v, id, hashPlaylistViewBasic) 86 + } 87 + 88 + export function validatePlaylistViewBasic<V>(v: V) { 89 + return validate<PlaylistViewBasic & V>(v, id, hashPlaylistViewBasic) 90 + }
+51
src/lexicon/types/app/rocksky/playlist/getPlaylist.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyPlaylistDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.playlist.getPlaylist' 19 + 20 + export interface QueryParams { 21 + /** The URI of the playlist to retrieve. */ 22 + uri: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type OutputSchema = AppRockskyPlaylistDefs.PlaylistViewDetailed 27 + export type HandlerInput = undefined 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
+57
src/lexicon/types/app/rocksky/playlist/getPlaylists.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyPlaylistDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.playlist.getPlaylists' 19 + 20 + export interface QueryParams { 21 + /** The maximum number of playlists to return. */ 22 + limit?: number 23 + /** The offset for pagination, used to skip a number of playlists. */ 24 + offset?: number 25 + } 26 + 27 + export type InputSchema = undefined 28 + 29 + export interface OutputSchema { 30 + playlists?: AppRockskyPlaylistDefs.PlaylistViewBasic[] 31 + } 32 + 33 + export type HandlerInput = undefined 34 + 35 + export interface HandlerSuccess { 36 + encoding: 'application/json' 37 + body: OutputSchema 38 + headers?: { [key: string]: string } 39 + } 40 + 41 + export interface HandlerError { 42 + status: number 43 + message?: string 44 + } 45 + 46 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 47 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 48 + auth: HA 49 + params: QueryParams 50 + input: HandlerInput 51 + req: express.Request 52 + res: express.Response 53 + resetRouteRateLimits: () => Promise<void> 54 + } 55 + export type Handler<HA extends HandlerAuth = never> = ( 56 + ctx: HandlerReqCtx<HA>, 57 + ) => Promise<HandlerOutput> | HandlerOutput
+40
src/lexicon/types/app/rocksky/radio.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../lexicons' 7 + import { type $Typed, is$typed as _is$typed, type OmitKey } from '../../../util' 8 + 9 + const is$typed = _is$typed, 10 + validate = _validate 11 + const id = 'app.rocksky.radio' 12 + 13 + export interface Record { 14 + $type: 'app.rocksky.radio' 15 + /** The name of the radio station. */ 16 + name: string 17 + /** The URL of the radio station. */ 18 + url: string 19 + /** A description of the radio station. */ 20 + description?: string 21 + /** The genre of the radio station. */ 22 + genre?: string 23 + /** The logo of the radio station. */ 24 + logo?: BlobRef 25 + /** The website of the radio station. */ 26 + website?: string 27 + /** The date when the radio station was created. */ 28 + createdAt: string 29 + [k: string]: unknown 30 + } 31 + 32 + const hashRecord = 'main' 33 + 34 + export function isRecord<V>(v: V) { 35 + return is$typed(v, id, hashRecord) 36 + } 37 + 38 + export function validateRecord<V>(v: V) { 39 + return validate<Record & V>(v, id, hashRecord, true) 40 + }
+67
src/lexicon/types/app/rocksky/radio/defs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + 13 + const is$typed = _is$typed, 14 + validate = _validate 15 + const id = 'app.rocksky.radio.defs' 16 + 17 + export interface RadioViewBasic { 18 + $type?: 'app.rocksky.radio.defs#radioViewBasic' 19 + /** The unique identifier of the radio. */ 20 + id?: string 21 + /** The name of the radio. */ 22 + name?: string 23 + /** A brief description of the radio. */ 24 + description?: string 25 + /** The date and time when the radio was created. */ 26 + createdAt?: string 27 + } 28 + 29 + const hashRadioViewBasic = 'radioViewBasic' 30 + 31 + export function isRadioViewBasic<V>(v: V) { 32 + return is$typed(v, id, hashRadioViewBasic) 33 + } 34 + 35 + export function validateRadioViewBasic<V>(v: V) { 36 + return validate<RadioViewBasic & V>(v, id, hashRadioViewBasic) 37 + } 38 + 39 + export interface RadioViewDetailed { 40 + $type?: 'app.rocksky.radio.defs#radioViewDetailed' 41 + /** The unique identifier of the radio. */ 42 + id?: string 43 + /** The name of the radio. */ 44 + name?: string 45 + /** A brief description of the radio. */ 46 + description?: string 47 + /** The website of the radio. */ 48 + website?: string 49 + /** The streaming URL of the radio. */ 50 + url?: string 51 + /** The genre of the radio. */ 52 + genre?: string 53 + /** The logo of the radio station. */ 54 + logo?: string 55 + /** The date and time when the radio was created. */ 56 + createdAt?: string 57 + } 58 + 59 + const hashRadioViewDetailed = 'radioViewDetailed' 60 + 61 + export function isRadioViewDetailed<V>(v: V) { 62 + return is$typed(v, id, hashRadioViewDetailed) 63 + } 64 + 65 + export function validateRadioViewDetailed<V>(v: V) { 66 + return validate<RadioViewDetailed & V>(v, id, hashRadioViewDetailed) 67 + }
+8 -8
src/lexicon/types/app/rocksky/scrobble.ts
··· 12 12 13 13 export interface Record { 14 14 $type: 'app.rocksky.scrobble' 15 - /** The track number of the song in the album. */ 16 - trackNumber?: number 17 - /** The disc number of the song in the album. */ 18 - discNumber?: number 19 15 /** The title of the song. */ 20 16 title: string 21 17 /** The artist of the song. */ 22 18 artist: string 23 - /** The artist of the album the song is from. */ 19 + /** The album artist of the song. */ 24 20 albumArtist: string 25 - /** The album the song is from. */ 21 + /** The album of the song. */ 26 22 album: string 27 23 /** The duration of the song in seconds. */ 28 24 duration: number 25 + /** The track number of the song in the album. */ 26 + trackNumber?: number 27 + /** The disc number of the song in the album. */ 28 + discNumber?: number 29 29 /** The release date of the song. */ 30 30 releaseDate?: string 31 31 /** The year the song was released. */ ··· 38 38 composer?: string 39 39 /** The lyrics of the song. */ 40 40 lyrics?: string 41 - /** The copyright message. */ 41 + /** The copyright message of the song. */ 42 42 copyrightMessage?: string 43 43 /** Informations about the song */ 44 44 wiki?: string ··· 52 52 tidalLink?: string 53 53 /** The Apple Music link of the song. */ 54 54 appleMusicLink?: string 55 - /** The date the song was created. */ 55 + /** The date when the song was created. */ 56 56 createdAt: string 57 57 /** The MusicBrainz ID of the song. */ 58 58 mbid?: string
+98
src/lexicon/types/app/rocksky/scrobble/createScrobble.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyScrobbleDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.scrobble.createScrobble' 19 + 20 + export interface QueryParams {} 21 + 22 + export interface InputSchema { 23 + /** The title of the track being scrobbled */ 24 + title: string 25 + /** The artist of the track being scrobbled */ 26 + artist: string 27 + /** The album of the track being scrobbled */ 28 + album?: string 29 + /** The duration of the track in seconds */ 30 + duration?: number 31 + /** The MusicBrainz ID of the track, if available */ 32 + mbId?: string 33 + /** The URL of the album art for the track */ 34 + albumArt?: string 35 + /** The track number of the track in the album */ 36 + trackNumber?: number 37 + /** The release date of the track, formatted as YYYY-MM-DD */ 38 + releaseDate?: string 39 + /** The year the track was released */ 40 + year?: number 41 + /** The disc number of the track in the album, if applicable */ 42 + discNumber?: number 43 + /** The lyrics of the track, if available */ 44 + lyrics?: string 45 + /** The composer of the track, if available */ 46 + composer?: string 47 + /** The copyright message for the track, if available */ 48 + copyrightMessage?: string 49 + /** The record label of the track, if available */ 50 + label?: string 51 + /** The URL of the artist's picture, if available */ 52 + artistPicture?: string 53 + /** The Spotify link for the track, if available */ 54 + spotifyLink?: string 55 + /** The Last.fm link for the track, if available */ 56 + lastfmLink?: string 57 + /** The Tidal link for the track, if available */ 58 + tidalLink?: string 59 + /** The Apple Music link for the track, if available */ 60 + appleMusicLink?: string 61 + /** The Youtube link for the track, if available */ 62 + youtubeLink?: string 63 + /** The Deezer link for the track, if available */ 64 + deezerLink?: string 65 + /** The timestamp of the scrobble in milliseconds since epoch */ 66 + timestamp?: number 67 + } 68 + 69 + export type OutputSchema = AppRockskyScrobbleDefs.ScrobbleViewBasic 70 + 71 + export interface HandlerInput { 72 + encoding: 'application/json' 73 + body: InputSchema 74 + } 75 + 76 + export interface HandlerSuccess { 77 + encoding: 'application/json' 78 + body: OutputSchema 79 + headers?: { [key: string]: string } 80 + } 81 + 82 + export interface HandlerError { 83 + status: number 84 + message?: string 85 + } 86 + 87 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 88 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 89 + auth: HA 90 + params: QueryParams 91 + input: HandlerInput 92 + req: express.Request 93 + res: express.Response 94 + resetRouteRateLimits: () => Promise<void> 95 + } 96 + export type Handler<HA extends HandlerAuth = never> = ( 97 + ctx: HandlerReqCtx<HA>, 98 + ) => Promise<HandlerOutput> | HandlerOutput
+91
src/lexicon/types/app/rocksky/scrobble/defs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + 13 + const is$typed = _is$typed, 14 + validate = _validate 15 + const id = 'app.rocksky.scrobble.defs' 16 + 17 + export interface ScrobbleViewBasic { 18 + $type?: 'app.rocksky.scrobble.defs#scrobbleViewBasic' 19 + /** The unique identifier of the scrobble. */ 20 + id?: string 21 + /** The handle of the user who created the scrobble. */ 22 + user?: string 23 + /** The title of the scrobble. */ 24 + title?: string 25 + /** The artist of the song. */ 26 + artist?: string 27 + /** The URI of the artist. */ 28 + artistUri?: string 29 + /** The album of the song. */ 30 + album?: string 31 + /** The URI of the album. */ 32 + albumUri?: string 33 + /** The album art URL of the song. */ 34 + cover?: string 35 + /** The timestamp when the scrobble was created. */ 36 + date?: string 37 + /** The URI of the scrobble. */ 38 + uri?: string 39 + /** The SHA256 hash of the scrobble data. */ 40 + sha256?: string 41 + } 42 + 43 + const hashScrobbleViewBasic = 'scrobbleViewBasic' 44 + 45 + export function isScrobbleViewBasic<V>(v: V) { 46 + return is$typed(v, id, hashScrobbleViewBasic) 47 + } 48 + 49 + export function validateScrobbleViewBasic<V>(v: V) { 50 + return validate<ScrobbleViewBasic & V>(v, id, hashScrobbleViewBasic) 51 + } 52 + 53 + export interface ScrobbleViewDetailed { 54 + $type?: 'app.rocksky.scrobble.defs#scrobbleViewDetailed' 55 + /** The unique identifier of the scrobble. */ 56 + id?: string 57 + /** The handle of the user who created the scrobble. */ 58 + user?: string 59 + /** The title of the scrobble. */ 60 + title?: string 61 + /** The artist of the song. */ 62 + artist?: string 63 + /** The URI of the artist. */ 64 + artistUri?: string 65 + /** The album of the song. */ 66 + album?: string 67 + /** The URI of the album. */ 68 + albumUri?: string 69 + /** The album art URL of the song. */ 70 + cover?: string 71 + /** The timestamp when the scrobble was created. */ 72 + date?: string 73 + /** The URI of the scrobble. */ 74 + uri?: string 75 + /** The SHA256 hash of the scrobble data. */ 76 + sha256?: string 77 + /** The number of listeners */ 78 + listeners?: number 79 + /** The number of scrobbles for this song */ 80 + scrobbles?: number 81 + } 82 + 83 + const hashScrobbleViewDetailed = 'scrobbleViewDetailed' 84 + 85 + export function isScrobbleViewDetailed<V>(v: V) { 86 + return is$typed(v, id, hashScrobbleViewDetailed) 87 + } 88 + 89 + export function validateScrobbleViewDetailed<V>(v: V) { 90 + return validate<ScrobbleViewDetailed & V>(v, id, hashScrobbleViewDetailed) 91 + }
+51
src/lexicon/types/app/rocksky/scrobble/getScrobble.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyScrobbleDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.scrobble.getScrobble' 19 + 20 + export interface QueryParams { 21 + /** The unique identifier of the scrobble */ 22 + uri: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type OutputSchema = AppRockskyScrobbleDefs.ScrobbleViewDetailed 27 + export type HandlerInput = undefined 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
+59
src/lexicon/types/app/rocksky/scrobble/getScrobbles.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyScrobbleDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.scrobble.getScrobbles' 19 + 20 + export interface QueryParams { 21 + /** The DID or handle of the actor */ 22 + did?: string 23 + /** The maximum number of scrobbles to return */ 24 + limit?: number 25 + /** The offset for pagination */ 26 + offset?: number 27 + } 28 + 29 + export type InputSchema = undefined 30 + 31 + export interface OutputSchema { 32 + scrobbles?: AppRockskyScrobbleDefs.ScrobbleViewBasic[] 33 + } 34 + 35 + export type HandlerInput = undefined 36 + 37 + export interface HandlerSuccess { 38 + encoding: 'application/json' 39 + body: OutputSchema 40 + headers?: { [key: string]: string } 41 + } 42 + 43 + export interface HandlerError { 44 + status: number 45 + message?: string 46 + } 47 + 48 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 49 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 50 + auth: HA 51 + params: QueryParams 52 + input: HandlerInput 53 + req: express.Request 54 + res: express.Response 55 + resetRouteRateLimits: () => Promise<void> 56 + } 57 + export type Handler<HA extends HandlerAuth = never> = ( 58 + ctx: HandlerReqCtx<HA>, 59 + ) => Promise<HandlerOutput> | HandlerOutput
+33
src/lexicon/types/app/rocksky/shout.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../lexicons' 7 + import { type $Typed, is$typed as _is$typed, type OmitKey } from '../../../util' 8 + import type * as ComAtprotoRepoStrongRef from '../../com/atproto/repo/strongRef.js' 9 + 10 + const is$typed = _is$typed, 11 + validate = _validate 12 + const id = 'app.rocksky.shout' 13 + 14 + export interface Record { 15 + $type: 'app.rocksky.shout' 16 + /** The message of the shout. */ 17 + message: string 18 + /** The date when the shout was created. */ 19 + createdAt: string 20 + parent?: ComAtprotoRepoStrongRef.Main 21 + subject: ComAtprotoRepoStrongRef.Main 22 + [k: string]: unknown 23 + } 24 + 25 + const hashRecord = 'main' 26 + 27 + export function isRecord<V>(v: V) { 28 + return is$typed(v, id, hashRecord) 29 + } 30 + 31 + export function validateRecord<V>(v: V) { 32 + return validate<Record & V>(v, id, hashRecord, true) 33 + }
+56
src/lexicon/types/app/rocksky/shout/createShout.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyShoutDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.shout.createShout' 19 + 20 + export interface QueryParams {} 21 + 22 + export interface InputSchema { 23 + /** The content of the shout */ 24 + message?: string 25 + } 26 + 27 + export type OutputSchema = AppRockskyShoutDefs.ShoutView 28 + 29 + export interface HandlerInput { 30 + encoding: 'application/json' 31 + body: InputSchema 32 + } 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
+62
src/lexicon/types/app/rocksky/shout/defs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + 13 + const is$typed = _is$typed, 14 + validate = _validate 15 + const id = 'app.rocksky.shout.defs' 16 + 17 + export interface Author { 18 + $type?: 'app.rocksky.shout.defs#author' 19 + /** The unique identifier of the author. */ 20 + id?: string 21 + /** The decentralized identifier (DID) of the author. */ 22 + did?: string 23 + /** The handle of the author. */ 24 + handle?: string 25 + /** The display name of the author. */ 26 + displayName?: string 27 + /** The URL of the author's avatar image. */ 28 + avatar?: string 29 + } 30 + 31 + const hashAuthor = 'author' 32 + 33 + export function isAuthor<V>(v: V) { 34 + return is$typed(v, id, hashAuthor) 35 + } 36 + 37 + export function validateAuthor<V>(v: V) { 38 + return validate<Author & V>(v, id, hashAuthor) 39 + } 40 + 41 + export interface ShoutView { 42 + $type?: 'app.rocksky.shout.defs#shoutView' 43 + /** The unique identifier of the shout. */ 44 + id?: string 45 + /** The content of the shout. */ 46 + message?: string 47 + /** The ID of the parent shout if this is a reply, otherwise null. */ 48 + parent?: string 49 + /** The date and time when the shout was created. */ 50 + createdAt?: string 51 + author?: Author 52 + } 53 + 54 + const hashShoutView = 'shoutView' 55 + 56 + export function isShoutView<V>(v: V) { 57 + return is$typed(v, id, hashShoutView) 58 + } 59 + 60 + export function validateShoutView<V>(v: V) { 61 + return validate<ShoutView & V>(v, id, hashShoutView) 62 + }
+59
src/lexicon/types/app/rocksky/shout/getAlbumShouts.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyShoutDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.shout.getAlbumShouts' 19 + 20 + export interface QueryParams { 21 + /** The unique identifier of the album to retrieve shouts for */ 22 + uri: string 23 + /** The maximum number of shouts to return */ 24 + limit?: number 25 + /** The number of shouts to skip before starting to collect the result set */ 26 + offset?: number 27 + } 28 + 29 + export type InputSchema = undefined 30 + 31 + export interface OutputSchema { 32 + shouts?: AppRockskyShoutDefs.ShoutViewBasic[] 33 + } 34 + 35 + export type HandlerInput = undefined 36 + 37 + export interface HandlerSuccess { 38 + encoding: 'application/json' 39 + body: OutputSchema 40 + headers?: { [key: string]: string } 41 + } 42 + 43 + export interface HandlerError { 44 + status: number 45 + message?: string 46 + } 47 + 48 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 49 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 50 + auth: HA 51 + params: QueryParams 52 + input: HandlerInput 53 + req: express.Request 54 + res: express.Response 55 + resetRouteRateLimits: () => Promise<void> 56 + } 57 + export type Handler<HA extends HandlerAuth = never> = ( 58 + ctx: HandlerReqCtx<HA>, 59 + ) => Promise<HandlerOutput> | HandlerOutput
+59
src/lexicon/types/app/rocksky/shout/getArtistShouts.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyShoutDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.shout.getArtistShouts' 19 + 20 + export interface QueryParams { 21 + /** The URI of the artist to retrieve shouts for */ 22 + uri: string 23 + /** The maximum number of shouts to return */ 24 + limit?: number 25 + /** The number of shouts to skip before starting to collect the result set */ 26 + offset?: number 27 + } 28 + 29 + export type InputSchema = undefined 30 + 31 + export interface OutputSchema { 32 + shouts?: AppRockskyShoutDefs.ShoutViewBasic[] 33 + } 34 + 35 + export type HandlerInput = undefined 36 + 37 + export interface HandlerSuccess { 38 + encoding: 'application/json' 39 + body: OutputSchema 40 + headers?: { [key: string]: string } 41 + } 42 + 43 + export interface HandlerError { 44 + status: number 45 + message?: string 46 + } 47 + 48 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 49 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 50 + auth: HA 51 + params: QueryParams 52 + input: HandlerInput 53 + req: express.Request 54 + res: express.Response 55 + resetRouteRateLimits: () => Promise<void> 56 + } 57 + export type Handler<HA extends HandlerAuth = never> = ( 58 + ctx: HandlerReqCtx<HA>, 59 + ) => Promise<HandlerOutput> | HandlerOutput
+59
src/lexicon/types/app/rocksky/shout/getProfileShouts.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyShoutDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.shout.getProfileShouts' 19 + 20 + export interface QueryParams { 21 + /** The DID or handle of the actor */ 22 + did: string 23 + /** The offset for pagination */ 24 + offset?: number 25 + /** The maximum number of shouts to return */ 26 + limit?: number 27 + } 28 + 29 + export type InputSchema = undefined 30 + 31 + export interface OutputSchema { 32 + shouts?: AppRockskyShoutDefs.ShoutViewBasic[] 33 + } 34 + 35 + export type HandlerInput = undefined 36 + 37 + export interface HandlerSuccess { 38 + encoding: 'application/json' 39 + body: OutputSchema 40 + headers?: { [key: string]: string } 41 + } 42 + 43 + export interface HandlerError { 44 + status: number 45 + message?: string 46 + } 47 + 48 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 49 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 50 + auth: HA 51 + params: QueryParams 52 + input: HandlerInput 53 + req: express.Request 54 + res: express.Response 55 + resetRouteRateLimits: () => Promise<void> 56 + } 57 + export type Handler<HA extends HandlerAuth = never> = ( 58 + ctx: HandlerReqCtx<HA>, 59 + ) => Promise<HandlerOutput> | HandlerOutput
+59
src/lexicon/types/app/rocksky/shout/getShoutReplies.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyShoutDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.shout.getShoutReplies' 19 + 20 + export interface QueryParams { 21 + /** The URI of the shout to retrieve replies for */ 22 + uri: string 23 + /** The maximum number of shouts to return */ 24 + limit?: number 25 + /** The number of shouts to skip before starting to collect the result set */ 26 + offset?: number 27 + } 28 + 29 + export type InputSchema = undefined 30 + 31 + export interface OutputSchema { 32 + shouts?: AppRockskyShoutDefs.ShoutViewBasic[] 33 + } 34 + 35 + export type HandlerInput = undefined 36 + 37 + export interface HandlerSuccess { 38 + encoding: 'application/json' 39 + body: OutputSchema 40 + headers?: { [key: string]: string } 41 + } 42 + 43 + export interface HandlerError { 44 + status: number 45 + message?: string 46 + } 47 + 48 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 49 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 50 + auth: HA 51 + params: QueryParams 52 + input: HandlerInput 53 + req: express.Request 54 + res: express.Response 55 + resetRouteRateLimits: () => Promise<void> 56 + } 57 + export type Handler<HA extends HandlerAuth = never> = ( 58 + ctx: HandlerReqCtx<HA>, 59 + ) => Promise<HandlerOutput> | HandlerOutput
+55
src/lexicon/types/app/rocksky/shout/getTrackShouts.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyShoutDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.shout.getTrackShouts' 19 + 20 + export interface QueryParams { 21 + /** The URI of the track to retrieve shouts for */ 22 + uri: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + 27 + export interface OutputSchema { 28 + shouts?: AppRockskyShoutDefs.ShoutViewBasic[] 29 + } 30 + 31 + export type HandlerInput = undefined 32 + 33 + export interface HandlerSuccess { 34 + encoding: 'application/json' 35 + body: OutputSchema 36 + headers?: { [key: string]: string } 37 + } 38 + 39 + export interface HandlerError { 40 + status: number 41 + message?: string 42 + } 43 + 44 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 45 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 46 + auth: HA 47 + params: QueryParams 48 + input: HandlerInput 49 + req: express.Request 50 + res: express.Response 51 + resetRouteRateLimits: () => Promise<void> 52 + } 53 + export type Handler<HA extends HandlerAuth = never> = ( 54 + ctx: HandlerReqCtx<HA>, 55 + ) => Promise<HandlerOutput> | HandlerOutput
+51
src/lexicon/types/app/rocksky/shout/removeShout.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyShoutDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.shout.removeShout' 19 + 20 + export interface QueryParams { 21 + /** The ID of the shout to be removed */ 22 + id: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type OutputSchema = AppRockskyShoutDefs.ShoutView 27 + export type HandlerInput = undefined 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
+58
src/lexicon/types/app/rocksky/shout/replyShout.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyShoutDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.shout.replyShout' 19 + 20 + export interface QueryParams {} 21 + 22 + export interface InputSchema { 23 + /** The unique identifier of the shout to reply to */ 24 + shoutId: string 25 + /** The content of the reply */ 26 + message: string 27 + } 28 + 29 + export type OutputSchema = AppRockskyShoutDefs.ShoutView 30 + 31 + export interface HandlerInput { 32 + encoding: 'application/json' 33 + body: InputSchema 34 + } 35 + 36 + export interface HandlerSuccess { 37 + encoding: 'application/json' 38 + body: OutputSchema 39 + headers?: { [key: string]: string } 40 + } 41 + 42 + export interface HandlerError { 43 + status: number 44 + message?: string 45 + } 46 + 47 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 48 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 49 + auth: HA 50 + params: QueryParams 51 + input: HandlerInput 52 + req: express.Request 53 + res: express.Response 54 + resetRouteRateLimits: () => Promise<void> 55 + } 56 + export type Handler<HA extends HandlerAuth = never> = ( 57 + ctx: HandlerReqCtx<HA>, 58 + ) => Promise<HandlerOutput> | HandlerOutput
+58
src/lexicon/types/app/rocksky/shout/reportShout.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyShoutDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.shout.reportShout' 19 + 20 + export interface QueryParams {} 21 + 22 + export interface InputSchema { 23 + /** The unique identifier of the shout to report */ 24 + shoutId: string 25 + /** The reason for reporting the shout */ 26 + reason?: string 27 + } 28 + 29 + export type OutputSchema = AppRockskyShoutDefs.ShoutView 30 + 31 + export interface HandlerInput { 32 + encoding: 'application/json' 33 + body: InputSchema 34 + } 35 + 36 + export interface HandlerSuccess { 37 + encoding: 'application/json' 38 + body: OutputSchema 39 + headers?: { [key: string]: string } 40 + } 41 + 42 + export interface HandlerError { 43 + status: number 44 + message?: string 45 + } 46 + 47 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 48 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 49 + auth: HA 50 + params: QueryParams 51 + input: HandlerInput 52 + req: express.Request 53 + res: express.Response 54 + resetRouteRateLimits: () => Promise<void> 55 + } 56 + export type Handler<HA extends HandlerAuth = never> = ( 57 + ctx: HandlerReqCtx<HA>, 58 + ) => Promise<HandlerOutput> | HandlerOutput
+8 -8
src/lexicon/types/app/rocksky/song.ts
··· 12 12 13 13 export interface Record { 14 14 $type: 'app.rocksky.song' 15 - /** The track number of the song in the album. */ 16 - trackNumber?: number 17 - /** The disc number of the song in the album. */ 18 - discNumber?: number 19 15 /** The title of the song. */ 20 16 title: string 21 17 /** The artist of the song. */ 22 18 artist: string 23 - /** The artist of the album the song is from. */ 19 + /** The album artist of the song. */ 24 20 albumArtist: string 25 - /** The album the song is from. */ 21 + /** The album of the song. */ 26 22 album: string 27 23 /** The duration of the song in seconds. */ 28 24 duration: number 25 + /** The track number of the song in the album. */ 26 + trackNumber?: number 27 + /** The disc number of the song in the album. */ 28 + discNumber?: number 29 29 /** The release date of the song. */ 30 30 releaseDate?: string 31 31 /** The year the song was released. */ ··· 38 38 composer?: string 39 39 /** The lyrics of the song. */ 40 40 lyrics?: string 41 - /** The copyright message. */ 41 + /** The copyright message of the song. */ 42 42 copyrightMessage?: string 43 43 /** Informations about the song */ 44 44 wiki?: string ··· 52 52 tidalLink?: string 53 53 /** The Apple Music link of the song. */ 54 54 appleMusicLink?: string 55 - /** The date the song was created. */ 55 + /** The date when the song was created. */ 56 56 createdAt: string 57 57 /** The MusicBrainz ID of the song. */ 58 58 mbid?: string
+78
src/lexicon/types/app/rocksky/song/createSong.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskySongDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.song.createSong' 19 + 20 + export interface QueryParams {} 21 + 22 + export interface InputSchema { 23 + /** The title of the song */ 24 + title: string 25 + /** The artist of the song */ 26 + artist: string 27 + /** The album artist of the song, if different from the main artist */ 28 + albumArtist: string 29 + /** The album of the song, if applicable */ 30 + album: string 31 + /** The duration of the song in seconds */ 32 + duration?: number 33 + /** The MusicBrainz ID of the song, if available */ 34 + mbId?: string 35 + /** The URL of the album art for the song */ 36 + albumArt?: string 37 + /** The track number of the song in the album, if applicable */ 38 + trackNumber?: number 39 + /** The release date of the song, formatted as YYYY-MM-DD */ 40 + releaseDate?: string 41 + /** The year the song was released */ 42 + year?: number 43 + /** The disc number of the song in the album, if applicable */ 44 + discNumber?: number 45 + /** The lyrics of the song, if available */ 46 + lyrics?: string 47 + } 48 + 49 + export type OutputSchema = AppRockskySongDefs.SongViewDetailed 50 + 51 + export interface HandlerInput { 52 + encoding: 'application/json' 53 + body: InputSchema 54 + } 55 + 56 + export interface HandlerSuccess { 57 + encoding: 'application/json' 58 + body: OutputSchema 59 + headers?: { [key: string]: string } 60 + } 61 + 62 + export interface HandlerError { 63 + status: number 64 + message?: string 65 + } 66 + 67 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 68 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 69 + auth: HA 70 + params: QueryParams 71 + input: HandlerInput 72 + req: express.Request 73 + res: express.Response 74 + resetRouteRateLimits: () => Promise<void> 75 + } 76 + export type Handler<HA extends HandlerAuth = never> = ( 77 + ctx: HandlerReqCtx<HA>, 78 + ) => Promise<HandlerOutput> | HandlerOutput
+107
src/lexicon/types/app/rocksky/song/defs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + 13 + const is$typed = _is$typed, 14 + validate = _validate 15 + const id = 'app.rocksky.song.defs' 16 + 17 + export interface SongViewBasic { 18 + $type?: 'app.rocksky.song.defs#songViewBasic' 19 + /** The unique identifier of the song. */ 20 + id?: string 21 + /** The title of the song. */ 22 + title?: string 23 + /** The artist of the song. */ 24 + artist?: string 25 + /** The artist of the album the song belongs to. */ 26 + albumArtist?: string 27 + /** The URL of the album art image. */ 28 + albumArt?: string 29 + /** The URI of the song. */ 30 + uri?: string 31 + /** The album of the song. */ 32 + album?: string 33 + /** The duration of the song in milliseconds. */ 34 + duration?: number 35 + /** The track number of the song in the album. */ 36 + trackNumber?: number 37 + /** The disc number of the song in the album. */ 38 + discNumber?: number 39 + /** The number of times the song has been played. */ 40 + playCount?: number 41 + /** The number of unique listeners who have played the song. */ 42 + uniqueListeners?: number 43 + /** The URI of the album the song belongs to. */ 44 + albumUri?: string 45 + /** The URI of the artist of the song. */ 46 + artistUri?: string 47 + /** The SHA256 hash of the song. */ 48 + sha256?: string 49 + /** The timestamp when the song was created. */ 50 + createdAt?: string 51 + } 52 + 53 + const hashSongViewBasic = 'songViewBasic' 54 + 55 + export function isSongViewBasic<V>(v: V) { 56 + return is$typed(v, id, hashSongViewBasic) 57 + } 58 + 59 + export function validateSongViewBasic<V>(v: V) { 60 + return validate<SongViewBasic & V>(v, id, hashSongViewBasic) 61 + } 62 + 63 + export interface SongViewDetailed { 64 + $type?: 'app.rocksky.song.defs#songViewDetailed' 65 + /** The unique identifier of the song. */ 66 + id?: string 67 + /** The title of the song. */ 68 + title?: string 69 + /** The artist of the song. */ 70 + artist?: string 71 + /** The artist of the album the song belongs to. */ 72 + albumArtist?: string 73 + /** The URL of the album art image. */ 74 + albumArt?: string 75 + /** The URI of the song. */ 76 + uri?: string 77 + /** The album of the song. */ 78 + album?: string 79 + /** The duration of the song in milliseconds. */ 80 + duration?: number 81 + /** The track number of the song in the album. */ 82 + trackNumber?: number 83 + /** The disc number of the song in the album. */ 84 + discNumber?: number 85 + /** The number of times the song has been played. */ 86 + playCount?: number 87 + /** The number of unique listeners who have played the song. */ 88 + uniqueListeners?: number 89 + /** The URI of the album the song belongs to. */ 90 + albumUri?: string 91 + /** The URI of the artist of the song. */ 92 + artistUri?: string 93 + /** The SHA256 hash of the song. */ 94 + sha256?: string 95 + /** The timestamp when the song was created. */ 96 + createdAt?: string 97 + } 98 + 99 + const hashSongViewDetailed = 'songViewDetailed' 100 + 101 + export function isSongViewDetailed<V>(v: V) { 102 + return is$typed(v, id, hashSongViewDetailed) 103 + } 104 + 105 + export function validateSongViewDetailed<V>(v: V) { 106 + return validate<SongViewDetailed & V>(v, id, hashSongViewDetailed) 107 + }
+51
src/lexicon/types/app/rocksky/song/getSong.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskySongDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.song.getSong' 19 + 20 + export interface QueryParams { 21 + /** The unique identifier of the song to retrieve */ 22 + uri: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type OutputSchema = AppRockskySongDefs.SongViewDetailed 27 + export type HandlerInput = undefined 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
+57
src/lexicon/types/app/rocksky/song/getSongs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskySongDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.song.getSongs' 19 + 20 + export interface QueryParams { 21 + /** The maximum number of songs to return */ 22 + limit?: number 23 + /** The offset for pagination */ 24 + offset?: number 25 + } 26 + 27 + export type InputSchema = undefined 28 + 29 + export interface OutputSchema { 30 + songs?: AppRockskySongDefs.SongViewBasic[] 31 + } 32 + 33 + export type HandlerInput = undefined 34 + 35 + export interface HandlerSuccess { 36 + encoding: 'application/json' 37 + body: OutputSchema 38 + headers?: { [key: string]: string } 39 + } 40 + 41 + export interface HandlerError { 42 + status: number 43 + message?: string 44 + } 45 + 46 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 47 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 48 + auth: HA 49 + params: QueryParams 50 + input: HandlerInput 51 + req: express.Request 52 + res: express.Response 53 + resetRouteRateLimits: () => Promise<void> 54 + } 55 + export type Handler<HA extends HandlerAuth = never> = ( 56 + ctx: HandlerReqCtx<HA>, 57 + ) => Promise<HandlerOutput> | HandlerOutput
+41
src/lexicon/types/app/rocksky/spotify/defs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + 13 + const is$typed = _is$typed, 14 + validate = _validate 15 + const id = 'app.rocksky.spotify.defs' 16 + 17 + export interface SpotifyTrackView { 18 + $type?: 'app.rocksky.spotify.defs#spotifyTrackView' 19 + /** The unique identifier of the Spotify track. */ 20 + id?: string 21 + /** The name of the track. */ 22 + name?: string 23 + /** The name of the artist. */ 24 + artist?: string 25 + /** The name of the album. */ 26 + album?: string 27 + /** The duration of the track in milliseconds. */ 28 + duration?: number 29 + /** A URL to a preview of the track. */ 30 + previewUrl?: string 31 + } 32 + 33 + const hashSpotifyTrackView = 'spotifyTrackView' 34 + 35 + export function isSpotifyTrackView<V>(v: V) { 36 + return is$typed(v, id, hashSpotifyTrackView) 37 + } 38 + 39 + export function validateSpotifyTrackView<V>(v: V) { 40 + return validate<SpotifyTrackView & V>(v, id, hashSpotifyTrackView) 41 + }
+51
src/lexicon/types/app/rocksky/spotify/getCurrentlyPlaying.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyPlayerDefs from '../player/defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.spotify.getCurrentlyPlaying' 19 + 20 + export interface QueryParams { 21 + /** Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user. */ 22 + actor?: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type OutputSchema = AppRockskyPlayerDefs.CurrentlyPlayingViewDetailed 27 + export type HandlerInput = undefined 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
+40
src/lexicon/types/app/rocksky/spotify/next.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + 15 + const is$typed = _is$typed, 16 + validate = _validate 17 + const id = 'app.rocksky.spotify.next' 18 + 19 + export interface QueryParams {} 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
+40
src/lexicon/types/app/rocksky/spotify/pause.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + 15 + const is$typed = _is$typed, 16 + validate = _validate 17 + const id = 'app.rocksky.spotify.pause' 18 + 19 + export interface QueryParams {} 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
+40
src/lexicon/types/app/rocksky/spotify/play.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + 15 + const is$typed = _is$typed, 16 + validate = _validate 17 + const id = 'app.rocksky.spotify.play' 18 + 19 + export interface QueryParams {} 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
+40
src/lexicon/types/app/rocksky/spotify/previous.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + 15 + const is$typed = _is$typed, 16 + validate = _validate 17 + const id = 'app.rocksky.spotify.previous' 18 + 19 + export interface QueryParams {} 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
+43
src/lexicon/types/app/rocksky/spotify/seek.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + 15 + const is$typed = _is$typed, 16 + validate = _validate 17 + const id = 'app.rocksky.spotify.seek' 18 + 19 + export interface QueryParams { 20 + /** The position in seconds to seek to */ 21 + position: number 22 + } 23 + 24 + export type InputSchema = undefined 25 + export type HandlerInput = undefined 26 + 27 + export interface HandlerError { 28 + status: number 29 + message?: string 30 + } 31 + 32 + export type HandlerOutput = HandlerError | void 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
+39
src/lexicon/types/app/rocksky/stats/defs.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + 13 + const is$typed = _is$typed, 14 + validate = _validate 15 + const id = 'app.rocksky.stats.defs' 16 + 17 + export interface StatsView { 18 + $type?: 'app.rocksky.stats.defs#statsView' 19 + /** The total number of scrobbles. */ 20 + scrobbles?: number 21 + /** The total number of unique artists scrobbled. */ 22 + artists?: number 23 + /** The total number of tracks marked as loved. */ 24 + lovedTracks?: number 25 + /** The total number of unique albums scrobbled. */ 26 + albums?: number 27 + /** The total number of unique tracks scrobbled. */ 28 + tracks?: number 29 + } 30 + 31 + const hashStatsView = 'statsView' 32 + 33 + export function isStatsView<V>(v: V) { 34 + return is$typed(v, id, hashStatsView) 35 + } 36 + 37 + export function validateStatsView<V>(v: V) { 38 + return validate<StatsView & V>(v, id, hashStatsView) 39 + }
+51
src/lexicon/types/app/rocksky/stats/getStats.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { 9 + type $Typed, 10 + is$typed as _is$typed, 11 + type OmitKey, 12 + } from '../../../../util' 13 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 14 + import type * as AppRockskyStatsDefs from './defs.js' 15 + 16 + const is$typed = _is$typed, 17 + validate = _validate 18 + const id = 'app.rocksky.stats.getStats' 19 + 20 + export interface QueryParams { 21 + /** The DID or handle of the user to get stats for. */ 22 + did: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + export type OutputSchema = AppRockskyStatsDefs.StatsView 27 + export type HandlerInput = undefined 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
src/lexicon/types/com/atproto/repo/strongRef.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { 8 + type $Typed, 9 + is$typed as _is$typed, 10 + type OmitKey, 11 + } from '../../../../util' 12 + 13 + const is$typed = _is$typed, 14 + validate = _validate 15 + const id = 'com.atproto.repo.strongRef' 16 + 17 + export interface Main { 18 + $type?: 'com.atproto.repo.strongRef' 19 + uri: string 20 + cid: string 21 + } 22 + 23 + const hashMain = 'main' 24 + 25 + export function isMain<V>(v: V) { 26 + return is$typed(v, id, hashMain) 27 + } 28 + 29 + export function validateMain<V>(v: V) { 30 + return validate<Main & V>(v, id, hashMain) 31 + }