+1
README.md
+1
README.md
+75
bun.lock
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
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
+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
+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
+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
+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
+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
+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
+5
lexicons/apikey/defs.json
+38
lexicons/apikey/getApikeys.json
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+15
lexicons/player/defs.json
+27
lexicons/player/getCurrentlyPlaying.json
+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
+10
lexicons/player/next.json
+10
lexicons/player/pause.json
+10
lexicons/player/pause.json
+10
lexicons/player/play.json
+10
lexicons/player/play.json
+10
lexicons/player/previous.json
+10
lexicons/player/previous.json
+22
lexicons/player/seek.json
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+10
lexicons/spotify/next.json
+10
lexicons/spotify/pause.json
+10
lexicons/spotify/pause.json
+10
lexicons/spotify/play.json
+10
lexicons/spotify/play.json
+10
lexicons/spotify/previous.json
+10
lexicons/spotify/previous.json
+22
lexicons/spotify/seek.json
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+10
pkl/defs/player/next.pkl
+10
pkl/defs/player/pause.pkl
+10
pkl/defs/player/pause.pkl
+10
pkl/defs/player/play.pkl
+10
pkl/defs/player/play.pkl
+10
pkl/defs/player/previous.pkl
+10
pkl/defs/player/previous.pkl
+20
pkl/defs/player/seek.pkl
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+10
pkl/defs/spotify/next.pkl
+10
pkl/defs/spotify/pause.pkl
+10
pkl/defs/spotify/pause.pkl
+10
pkl/defs/spotify/play.pkl
+10
pkl/defs/spotify/play.pkl
+10
pkl/defs/spotify/previous.pkl
+10
pkl/defs/spotify/previous.pkl
+20
pkl/defs/spotify/seek.pkl
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+1
-1
src/lexicon/types/app/rocksky/artist.ts
+71
src/lexicon/types/app/rocksky/artist/defs.ts
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+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
+
}