@rocksky/sdk 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +71 -245
  2. package/dist/agent.d.ts +82 -0
  3. package/dist/agent.d.ts.map +1 -0
  4. package/dist/client.d.ts +165 -111
  5. package/dist/client.d.ts.map +1 -1
  6. package/dist/dedup.d.ts +38 -0
  7. package/dist/dedup.d.ts.map +1 -0
  8. package/dist/errors.d.ts +3 -23
  9. package/dist/errors.d.ts.map +1 -1
  10. package/dist/generated/types.d.ts +106 -8
  11. package/dist/generated/types.d.ts.map +1 -1
  12. package/dist/hash.d.ts +7 -0
  13. package/dist/hash.d.ts.map +1 -0
  14. package/dist/index.d.ts +17 -17
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +6956 -1267
  17. package/dist/jetstream.d.ts +17 -0
  18. package/dist/jetstream.d.ts.map +1 -0
  19. package/package.json +15 -11
  20. package/src/agent.ts +278 -0
  21. package/src/client.ts +393 -212
  22. package/src/dedup.ts +207 -0
  23. package/src/errors.ts +6 -43
  24. package/src/generated/types.ts +115 -8
  25. package/src/hash.ts +22 -0
  26. package/src/index.ts +17 -86
  27. package/src/jetstream.ts +122 -0
  28. package/src/http.ts +0 -195
  29. package/src/namespaces/_helpers.ts +0 -27
  30. package/src/namespaces/actor.ts +0 -93
  31. package/src/namespaces/album.ts +0 -34
  32. package/src/namespaces/apikey.ts +0 -50
  33. package/src/namespaces/artist.ts +0 -68
  34. package/src/namespaces/charts.ts +0 -38
  35. package/src/namespaces/dropbox.ts +0 -53
  36. package/src/namespaces/feed.ts +0 -112
  37. package/src/namespaces/googledrive.ts +0 -41
  38. package/src/namespaces/graph.ts +0 -62
  39. package/src/namespaces/like.ts +0 -46
  40. package/src/namespaces/mirror.ts +0 -27
  41. package/src/namespaces/player.ts +0 -125
  42. package/src/namespaces/playlist.ts +0 -95
  43. package/src/namespaces/scrobble.ts +0 -41
  44. package/src/namespaces/shout.ts +0 -99
  45. package/src/namespaces/song.ts +0 -60
  46. package/src/namespaces/spotify.ts +0 -56
  47. package/src/namespaces/stats.ts +0 -27
  48. package/src/paginate.ts +0 -90
  49. package/src/pipe.ts +0 -146
  50. package/src/realtime.ts +0 -408
  51. package/src/types.ts +0 -41
package/dist/client.d.ts CHANGED
@@ -1,116 +1,170 @@
1
- import { type HttpClientConfig } from "./http.js";
2
- import { type PaginateArgs } from "./paginate.js";
3
- import { RealtimeClient, type RealtimeOptions } from "./realtime.js";
4
- import { ActorNamespace } from "./namespaces/actor.js";
5
- import { AlbumNamespace } from "./namespaces/album.js";
6
- import { ApikeyNamespace } from "./namespaces/apikey.js";
7
- import { ArtistNamespace } from "./namespaces/artist.js";
8
- import { ChartsNamespace } from "./namespaces/charts.js";
9
- import { DropboxNamespace } from "./namespaces/dropbox.js";
10
- import { FeedNamespace } from "./namespaces/feed.js";
11
- import { GoogleDriveNamespace } from "./namespaces/googledrive.js";
12
- import { GraphNamespace } from "./namespaces/graph.js";
13
- import { LikeNamespace } from "./namespaces/like.js";
14
- import { MirrorNamespace } from "./namespaces/mirror.js";
15
- import { PlayerNamespace } from "./namespaces/player.js";
16
- import { PlaylistNamespace } from "./namespaces/playlist.js";
17
- import { ScrobbleNamespace } from "./namespaces/scrobble.js";
18
- import { ShoutNamespace } from "./namespaces/shout.js";
19
- import { SongNamespace } from "./namespaces/song.js";
20
- import { SpotifyNamespace } from "./namespaces/spotify.js";
21
- import { StatsNamespace } from "./namespaces/stats.js";
22
- import type { Endpoints } from "./generated/types.js";
23
- import type { AuthProvider, ClientOptions, FetchLike, RequestOptions } from "./types.js";
24
- type XrpcOpts = {
25
- params?: Record<string, unknown>;
26
- body?: unknown;
27
- requireAuth?: boolean;
28
- } & RequestOptions;
1
+ import type { ActorProfileViewBasic, ActorProfileViewDetailed, AlbumViewBasic, ArtistViewBasic, FeedSearchResultsView, ScrobbleViewBasic, SongViewBasic, StatsGlobalStatsView } from "./generated/types.js";
2
+ /**
3
+ * A typed date window for the `top*` charts. Build one with the {@link Interval}
4
+ * factories; `range` bounds are RFC-3339 datetimes.
5
+ */
6
+ export interface DateInterval {
7
+ startDate?: string;
8
+ endDate?: string;
9
+ }
10
+ /** Factories for {@link DateInterval} windows used by the `top*Interval` charts. */
11
+ export declare const Interval: {
12
+ /** No bounds the all-time chart. */
13
+ allTime: () => DateInterval;
14
+ /** The last `n` days ending now. */
15
+ lastDays: (n: number) => DateInterval;
16
+ /** The last `n` weeks ending now. */
17
+ lastWeeks: (n: number) => DateInterval;
18
+ /** The last `n` months ending now. */
19
+ lastMonths: (n: number) => DateInterval;
20
+ /** The last `n` years ending now. */
21
+ lastYears: (n: number) => DateInterval;
22
+ /** An explicit closed `[start, end]` window. */
23
+ range: (start: Date, end: Date) => DateInterval;
24
+ };
25
+ /** The default public Rocksky AppView base URL. */
26
+ export declare const DEFAULT_APPVIEW = "https://api.rocksky.app";
27
+ /** Unauthenticated read client over the public Rocksky AppView XRPC. */
29
28
  export declare class RockskyClient {
30
- readonly config: HttpClientConfig;
31
- readonly actor: ActorNamespace;
32
- readonly album: AlbumNamespace;
33
- readonly apikey: ApikeyNamespace;
34
- readonly artist: ArtistNamespace;
35
- readonly charts: ChartsNamespace;
36
- readonly dropbox: DropboxNamespace;
37
- readonly feed: FeedNamespace;
38
- readonly googledrive: GoogleDriveNamespace;
39
- readonly graph: GraphNamespace;
40
- readonly like: LikeNamespace;
41
- readonly mirror: MirrorNamespace;
42
- readonly player: PlayerNamespace;
43
- readonly playlist: PlaylistNamespace;
44
- readonly scrobble: ScrobbleNamespace;
45
- readonly shout: ShoutNamespace;
46
- readonly song: SongNamespace;
47
- readonly spotify: SpotifyNamespace;
48
- readonly stats: StatsNamespace;
49
- constructor(options?: ClientOptions);
50
- /** Build a one-off authenticated copy without mutating this client. */
51
- withAuth(auth: AuthProvider): RockskyClient;
52
- /** Build a copy with an overridden base URL. */
53
- withBaseUrl(baseUrl: string): RockskyClient;
54
- /**
55
- * Open a realtime WebSocket connection to /ws.
56
- *
57
- * const rt = client.realtime({ token, clientName: "my-app" });
58
- * rt.on("message", m => console.log(m));
59
- * await rt.connect();
60
- *
61
- * Defaults `baseUrl` to this client's base URL. Override anything by
62
- * passing the option, or use `RealtimeClient.builder()` for full control.
63
- */
64
- realtime(options: Omit<RealtimeOptions, "baseUrl"> & Partial<Pick<RealtimeOptions, "baseUrl">>): RealtimeClient;
29
+ private rpc;
65
30
  /**
66
- * Page through any limit/offset or cursor-based endpoint as an async iterable.
67
- *
68
- * for await (const s of client.paginate({
69
- * fetch: ({ limit, offset }) =>
70
- * client.actor.getActorScrobbles({ did, limit, offset }),
71
- * pageSize: 50,
72
- * })) { ... }
31
+ * Build a read client against an AppView base URL (defaults to
32
+ * {@link DEFAULT_APPVIEW}). Pass `token` to send it as
33
+ * `Authorization: Bearer <token>` on every read — needed only for auth-gated
34
+ * queries.
73
35
  */
74
- paginate<T>(args: PaginateArgs<T>): AsyncIterable<T> & {
75
- toArray(): Promise<T[]>;
76
- };
77
- /**
78
- * Direct escape hatch call any XRPC endpoint by NSID.
79
- *
80
- * Known NSIDs (string literals) are typed via the generated `Endpoints`
81
- * map; arbitrary strings fall back to `unknown` (override with `<T>`).
82
- */
83
- xrpc<K extends keyof Endpoints>(nsid: K, method?: "GET" | "POST", opts?: XrpcOpts): Promise<Endpoints[K]>;
84
- xrpc<T = unknown>(nsid: string, method?: "GET" | "POST", opts?: XrpcOpts): Promise<T>;
85
- static builder(): RockskyClientBuilder;
86
- private optionsSnapshot;
87
- }
88
- /**
89
- * Fluent builder.
90
- *
91
- * const client = RockskyClient.builder()
92
- * .baseUrl("https://api.rocksky.app")
93
- * .auth(() => loadToken())
94
- * .timeout(10_000)
95
- * .retries(3)
96
- * .userAgent("my-app/1.0")
97
- * .build();
98
- */
99
- export declare class RockskyClientBuilder {
100
- private readonly opts;
101
- baseUrl(url: string): this;
102
- auth(auth: AuthProvider): this;
103
- bearer(token: string): this;
104
- fetch(impl: FetchLike): this;
105
- header(key: string, value: string): this;
106
- headers(headers: Record<string, string>): this;
107
- userAgent(ua: string): this;
108
- timeout(ms: number): this;
109
- retries(n: number): this;
110
- retryDelay(ms: number): this;
111
- build(): RockskyClient;
36
+ constructor(appview?: string, token?: string);
37
+ private query;
38
+ /** An actor's detailed profile. `actor` is a handle or DID. */
39
+ profile(actor: string): Promise<ActorProfileViewDetailed>;
40
+ /** An actor's scrobbles, newest first. */
41
+ scrobbles(actor: string, limit?: number, offset?: number): Promise<ScrobbleViewBasic[]>;
42
+ /** Call any AppView read query by nsid; returns the raw JSON response. Every
43
+ * method here is sugar over this use it for queries without a wrapper. */
44
+ get(nsid: string, params?: Record<string, unknown>): Promise<unknown>;
45
+ /** An actor's most-played songs. */
46
+ songs(actor: string, limit?: number, offset?: number): Promise<SongViewBasic[]>;
47
+ /** An actor's loved (liked) songs. */
48
+ lovedSongs(actor: string, limit?: number, offset?: number): Promise<SongViewBasic[]>;
49
+ /** An actor's most-played albums. */
50
+ albums(actor: string, limit?: number, offset?: number): Promise<AlbumViewBasic[]>;
51
+ /** An actor's most-played artists. */
52
+ artists(actor: string, limit?: number, offset?: number): Promise<ArtistViewBasic[]>;
53
+ /** The platform-wide top tracks chart (all-time). */
54
+ topTracks(limit?: number, offset?: number): Promise<SongViewBasic[]>;
55
+ /** The platform-wide top artists chart (all-time). */
56
+ topArtists(limit?: number, offset?: number): Promise<ArtistViewBasic[]>;
57
+ /** The top tracks chart over a typed {@link DateInterval}. */
58
+ topTracksInterval(limit: number, offset: number, interval: DateInterval): Promise<SongViewBasic[]>;
59
+ /** The top artists chart over a typed {@link DateInterval}. */
60
+ topArtistsInterval(limit: number, offset: number, interval: DateInterval): Promise<ArtistViewBasic[]>;
61
+ /** The album catalog, optionally filtered by `genre`. */
62
+ catalogAlbums(limit?: number, offset?: number, genre?: string): Promise<AlbumViewBasic[]>;
63
+ /** The artist catalog, optionally filtered by `genre`. */
64
+ catalogArtists(limit?: number, offset?: number, genre?: string): Promise<ArtistViewBasic[]>;
65
+ /** The song catalog, optionally filtered by `genre`. */
66
+ catalogSongs(limit?: number, offset?: number, genre?: string): Promise<SongViewBasic[]>;
67
+ /** An album's tracklist by album at:// URI. */
68
+ albumTracks(uri: string): Promise<SongViewBasic[]>;
69
+ /** An artist's albums by artist at:// URI. */
70
+ artistAlbums(uri: string): Promise<AlbumViewBasic[]>;
71
+ /** An artist's top tracks by artist at:// URI. */
72
+ artistTracks(uri: string, limit?: number, offset?: number): Promise<SongViewBasic[]>;
73
+ /** A social/global scrobbles feed. Pass `did` to scope to an actor and
74
+ * `following = true` for their follow graph. */
75
+ scrobbleFeed(did?: string, following?: boolean, limit?: number, offset?: number): Promise<ScrobbleViewBasic[]>;
76
+ /** A single scrobble by its at:// URI. */
77
+ scrobble(uri: string): Promise<ScrobbleViewBasic>;
78
+ /** The accounts `actor` follows. */
79
+ follows(actor: string, limit?: number, cursor?: string): Promise<ActorProfileViewBasic[]>;
80
+ /** The accounts that follow `actor`. */
81
+ followers(actor: string, limit?: number, cursor?: string): Promise<ActorProfileViewBasic[]>;
82
+ /** Followers of `actor` that the viewer also follows. */
83
+ knownFollowers(actor: string, limit?: number, cursor?: string): Promise<ActorProfileViewBasic[]>;
84
+ /** Full-text search across songs, albums, artists, playlists, actors. */
85
+ search(query: string): Promise<FeedSearchResultsView>;
86
+ /** Platform-wide totals. */
87
+ globalStats(): Promise<StatsGlobalStatsView>;
88
+ /** A feed by its at:// URI (paginate via `cursor`). */
89
+ feed(feed: string, limit?: number, cursor?: string): Promise<unknown>;
90
+ /** A single album with its tracklist. */
91
+ album(uri: string): Promise<unknown>;
92
+ /** A single artist with detail. */
93
+ artist(uri: string): Promise<unknown>;
94
+ /** Resolve full canonical metadata for a bare title + artist
95
+ * (`app.rocksky.song.matchSong`); optionally anchor with `mbId` / `isrc`. */
96
+ matchSong(title: string, artist: string, mbId?: string, isrc?: string): Promise<unknown>;
97
+ /** A single song by at:// `uri` (or by `mbid` / `isrc` / `spotifyId`). */
98
+ song(opts: {
99
+ uri?: string;
100
+ mbid?: string;
101
+ isrc?: string;
102
+ spotifyId?: string;
103
+ }): Promise<unknown>;
104
+ /** An actor's playlists. */
105
+ actorPlaylists(actor: string, limit?: number, offset?: number): Promise<unknown>;
106
+ /** Actors with similar taste to `actor`. */
107
+ neighbours(actor: string): Promise<unknown>;
108
+ /** Music compatibility between the viewer and `actor` (auth). */
109
+ compatibility(actor: string): Promise<unknown>;
110
+ /** An artist's all-time listeners. */
111
+ artistListeners(uri: string, limit?: number, offset?: number): Promise<unknown>;
112
+ /** An artist's recent listeners. */
113
+ artistRecentListeners(uri: string, limit?: number, offset?: number): Promise<unknown>;
114
+ /** A song's recent listeners. */
115
+ songRecentListeners(uri: string, limit?: number, offset?: number): Promise<unknown>;
116
+ /** A scrobble time-series chart. Scope with any of `did` / `artisturi` /
117
+ * `albumuri` / `songuri` / `genre` and bound with `from` / `to`. */
118
+ scrobblesChart(opts: {
119
+ did?: string;
120
+ artisturi?: string;
121
+ albumuri?: string;
122
+ songuri?: string;
123
+ genre?: string;
124
+ from?: string;
125
+ to?: string;
126
+ }): Promise<unknown>;
127
+ /** List the available feed generators. */
128
+ feedGenerators(size?: number): Promise<unknown>;
129
+ /** A single feed generator's record. */
130
+ feedGenerator(feed: string): Promise<unknown>;
131
+ /** The stories row. */
132
+ stories(size?: number, feed?: string, following?: boolean): Promise<unknown>;
133
+ /** Track recommendations for `actor`. */
134
+ recommendations(actor: string, limit?: number): Promise<unknown>;
135
+ /** Artist recommendations for `actor`. */
136
+ artistRecommendations(actor: string, limit?: number): Promise<unknown>;
137
+ /** Album recommendations for `actor`. */
138
+ albumRecommendations(actor: string, limit?: number): Promise<unknown>;
139
+ /** An actor's aggregate stats. */
140
+ stats(actor: string): Promise<unknown>;
141
+ /** An actor's year-in-review. */
142
+ wrapped(actor: string, year?: number): Promise<unknown>;
143
+ /** The viewer's configured scrobble mirror sources (auth). */
144
+ mirrorSources(): Promise<unknown>;
145
+ /** What `actor` is playing now. */
146
+ currentlyPlaying(playerId?: string, actor?: string): Promise<unknown>;
147
+ /** A player's playback queue. */
148
+ playbackQueue(playerId: string): Promise<unknown>;
149
+ /** What `actor` is playing now on Spotify. */
150
+ spotifyCurrentlyPlaying(actor: string): Promise<unknown>;
151
+ /** The playlist catalog. */
152
+ playlists(limit?: number, offset?: number): Promise<unknown>;
153
+ /** A single playlist with its items. */
154
+ playlist(uri: string): Promise<unknown>;
155
+ /** Shouts on an album. */
156
+ albumShouts(uri: string, limit?: number, offset?: number): Promise<unknown>;
157
+ /** Shouts on an artist. */
158
+ artistShouts(uri: string, limit?: number, offset?: number): Promise<unknown>;
159
+ /** Shouts on a profile. */
160
+ profileShouts(actor: string, limit?: number, offset?: number): Promise<unknown>;
161
+ /** Shouts on a track. */
162
+ trackShouts(uri: string): Promise<unknown>;
163
+ /** Replies to a shout. */
164
+ shoutReplies(uri: string, limit?: number, offset?: number): Promise<unknown>;
165
+ /** An actor's Rockbox EQ / audio settings. */
166
+ audioSettings(actor: string): Promise<unknown>;
167
+ /** The viewer's API keys (auth). */
168
+ apikeys(limit?: number, offset?: number): Promise<unknown>;
112
169
  }
113
- /** Convenience factory — equivalent to `new RockskyClient(options)`. */
114
- export declare function createClient(options?: ClientOptions): RockskyClient;
115
- export {};
116
170
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /** What an {@link RockskyIndex.indexCar} pass added. */
2
+ export interface IndexStats {
3
+ artists: number;
4
+ albums: number;
5
+ songs: number;
6
+ scrobbles: number;
7
+ }
8
+ export declare function totalIndexed(s: IndexStats): number;
9
+ /**
10
+ * Local duplicate-prevention mirror of a user's repo, keyed by Rocksky's
11
+ * identity hashes, backed by an embedded LevelDB (classic-level). Built from the
12
+ * repo CAR by {@link Agent.syncRepo} and kept live by {@link Agent.hydrateFromJetstream}.
13
+ */
14
+ export declare class RockskyIndex {
15
+ private db;
16
+ constructor(path: string);
17
+ /** Open the database (call before use). */
18
+ open(): Promise<void>;
19
+ /** Close the database. */
20
+ close(): Promise<void>;
21
+ private get;
22
+ songUri(did: string, title: string, artist: string, album: string): Promise<string | undefined>;
23
+ albumUri(did: string, album: string, albumArtist: string): Promise<string | undefined>;
24
+ artistUri(did: string, albumArtist: string): Promise<string | undefined>;
25
+ scrobbleUri(did: string, title: string, artist: string, album: string, secs: number): Promise<string | undefined>;
26
+ private putPrimary;
27
+ recordSong(did: string, title: string, artist: string, album: string, uri: string): Promise<void>;
28
+ recordAlbum(did: string, album: string, albumArtist: string, uri: string): Promise<void>;
29
+ recordArtist(did: string, albumArtist: string, uri: string): Promise<void>;
30
+ recordScrobble(did: string, title: string, artist: string, album: string, secs: number, uri: string): Promise<void>;
31
+ cursor(did: string): Promise<number>;
32
+ setCursor(did: string, timeUS: number): Promise<void>;
33
+ /** Ingest a full repo CAR for `did`, indexing song/album/artist/scrobble. */
34
+ indexCar(did: string, car: Uint8Array): Promise<IndexStats>;
35
+ /** Apply a single Jetstream commit event to the index. */
36
+ applyCommit(did: string, col: string, operation: string, rkey: string, record: Record<string, unknown> | undefined): Promise<void>;
37
+ }
38
+ //# sourceMappingURL=dedup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedup.d.ts","sourceRoot":"","sources":["../src/dedup.ts"],"names":[],"mappings":"AAaA,wDAAwD;AACxD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAElD;AA+BD;;;;GAIG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAA+B;gBAE7B,IAAI,EAAE,MAAM;IAIxB,2CAA2C;IAC3C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAGrB,0BAA0B;IAC1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAIR,GAAG;IAQjB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAG/F,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAGtF,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAGxE,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;YAInG,UAAU;IAOxB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGjG,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGxF,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAG1E,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAG9B,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,6EAA6E;IACvE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAoCjE,0DAA0D;IACpD,WAAW,CACf,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC1C,OAAO,CAAC,IAAI,CAAC;CAiBjB"}
package/dist/errors.d.ts CHANGED
@@ -1,26 +1,6 @@
1
+ /** Error thrown when a Rocksky XRPC call returns a non-2xx `{ error, message }`. */
1
2
  export declare class RockskyError extends Error {
2
- readonly cause?: unknown;
3
- constructor(message: string, options?: {
4
- cause?: unknown;
5
- });
6
- }
7
- export declare class RockskyHttpError extends RockskyError {
8
- readonly status: number;
9
- readonly statusText: string;
10
- readonly url: string;
11
- readonly body: unknown;
12
- constructor(args: {
13
- status: number;
14
- statusText: string;
15
- url: string;
16
- body: unknown;
17
- message?: string;
18
- });
19
- }
20
- export declare class RockskyTimeoutError extends RockskyError {
21
- constructor(ms: number);
22
- }
23
- export declare class RockskyAuthError extends RockskyError {
24
- constructor(message?: string);
3
+ readonly kind?: string;
4
+ constructor(payload: unknown);
25
5
  }
26
6
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;gBACb,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAK3D;AAED,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;gBAEX,IAAI,EAAE;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,OAAO,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;CAWF;AAED,qBAAa,mBAAoB,SAAQ,YAAY;gBACvC,EAAE,EAAE,MAAM;CAIvB;AAED,qBAAa,gBAAiB,SAAQ,YAAY;gBACpC,OAAO,SAA4B;CAIhD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBACX,OAAO,EAAE,OAAO;CAM7B"}
@@ -777,6 +777,10 @@ export interface GetArtistTracksParams {
777
777
  /** The offset for pagination */
778
778
  offset?: number;
779
779
  }
780
+ export interface GetAudioSettingsParams {
781
+ /** DID or handle of the user whose settings to fetch. Required for unauthenticated requests. */
782
+ did?: AtIdentifier;
783
+ }
780
784
  export interface GetCurrentlyPlayingParams {
781
785
  playerId?: string;
782
786
  /** Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user. */
@@ -1241,6 +1245,16 @@ export interface ProfileRecord {
1241
1245
  joinedViaStarterPack?: StrongRef;
1242
1246
  createdAt?: DateTime;
1243
1247
  }
1248
+ export interface PutAudioSettingsInput {
1249
+ /** Crossfade settings to apply. */
1250
+ crossfade?: RockboxCrossfadeSettings;
1251
+ /** Equalizer settings to apply. */
1252
+ equalizer?: RockboxEqualizerSettings;
1253
+ /** Replay gain settings to apply. */
1254
+ replayGain?: RockboxReplayGainSettings;
1255
+ /** Tone control settings to apply. */
1256
+ tone?: RockboxToneSettings;
1257
+ }
1244
1258
  export interface PutMirrorSourceInput {
1245
1259
  /** One of: lastfm, listenbrainz, tealfm */
1246
1260
  provider: string;
@@ -1325,6 +1339,68 @@ export interface ReportShoutInput {
1325
1339
  /** The reason for reporting the shout */
1326
1340
  reason?: string;
1327
1341
  }
1342
+ export interface RockboxCrossfadeSettings {
1343
+ /** Crossfade mode: disabled | enabled | shuffle | albumChange | trackChange */
1344
+ mode?: string;
1345
+ /** Fade-in delay in ms */
1346
+ fadeInDelay?: number;
1347
+ /** Fade-in duration in ms */
1348
+ fadeInDuration?: number;
1349
+ /** Fade-out delay in ms */
1350
+ fadeOutDelay?: number;
1351
+ /** Fade-out duration in ms */
1352
+ fadeOutDuration?: number;
1353
+ /** Fade-out mix mode: crossfade | mix */
1354
+ fadeOutMixMode?: string;
1355
+ }
1356
+ export interface RockboxEqualizerBand {
1357
+ /** Center frequency in Hz */
1358
+ frequency: number;
1359
+ /** Band gain in tenths of dB (e.g. 30 = +3.0 dB) */
1360
+ gain: number;
1361
+ /** Q factor × 10 (e.g. 7 = Q 0.7) */
1362
+ q: number;
1363
+ }
1364
+ export interface RockboxEqualizerSettings {
1365
+ /** Whether the equalizer is enabled */
1366
+ enabled?: boolean;
1367
+ /** Pre-amplification cut in tenths of dB applied before EQ bands (e.g. -60 = -6.0 dB) */
1368
+ precut?: number;
1369
+ /** Up to 10 EQ bands */
1370
+ bands?: RockboxEqualizerBand[];
1371
+ }
1372
+ export interface RockboxReplayGainSettings {
1373
+ /** Replay gain mode: disabled | track | album | trackIfShuffling */
1374
+ mode?: string;
1375
+ /** Pre-amplification in tenths of dB (e.g. 15 = +1.5 dB) */
1376
+ preamp?: number;
1377
+ /** Whether to prevent clipping by reducing volume */
1378
+ preventClipping?: boolean;
1379
+ }
1380
+ export interface RockboxSettingsView {
1381
+ /** Crossfade settings */
1382
+ crossfade?: RockboxCrossfadeSettings;
1383
+ /** Equalizer settings */
1384
+ equalizer?: RockboxEqualizerSettings;
1385
+ /** Replay gain settings */
1386
+ replayGain?: RockboxReplayGainSettings;
1387
+ /** Tone control settings (bass, treble, balance, channels) */
1388
+ tone?: RockboxToneSettings;
1389
+ /** When this settings record was first created. */
1390
+ createdAt: DateTime;
1391
+ /** When this settings record was last updated. */
1392
+ updatedAt?: DateTime;
1393
+ }
1394
+ export interface RockboxToneSettings {
1395
+ /** Bass level in dB */
1396
+ bass?: number;
1397
+ /** Treble level in dB */
1398
+ treble?: number;
1399
+ /** Left/right balance. Negative = left, positive = right */
1400
+ balance?: number;
1401
+ /** Channel configuration: stereo | mono | monoLeft | monoRight | karaoke | wide */
1402
+ channels?: string;
1403
+ }
1328
1404
  export interface ScrobbleFirstScrobbleView {
1329
1405
  /** The handle of the user who first scrobbled this song. */
1330
1406
  handle?: string;
@@ -1390,26 +1466,32 @@ export interface ScrobbleRecord {
1390
1466
  export interface ScrobbleViewBasic {
1391
1467
  /** The unique identifier of the scrobble. */
1392
1468
  id?: string;
1393
- /** The handle of the user who created the scrobble. */
1394
- user?: string;
1395
- /** The display name of the user who created the scrobble. */
1396
- userDisplayName?: string;
1397
- /** The avatar URL of the user who created the scrobble. */
1398
- userAvatar?: Uri;
1469
+ /** The unique identifier of the track this scrobble is of. */
1470
+ trackId?: string;
1399
1471
  /** The title of the scrobble. */
1400
1472
  title?: string;
1401
1473
  /** The artist of the song. */
1402
1474
  artist?: string;
1403
1475
  /** The URI of the artist. */
1404
1476
  artistUri?: AtUri;
1477
+ /** The album artist of the song. */
1478
+ albumArtist?: string;
1405
1479
  /** The album of the song. */
1406
1480
  album?: string;
1407
1481
  /** The URI of the album. */
1408
1482
  albumUri?: AtUri;
1409
1483
  /** The album art URL of the song. */
1410
- cover?: Uri;
1484
+ albumArt?: Uri;
1485
+ /** The URI of the track (song) this scrobble is of. */
1486
+ trackUri?: AtUri;
1487
+ /** The handle of the user who created the scrobble. */
1488
+ handle?: string;
1489
+ /** The DID of the user who created the scrobble. */
1490
+ did?: AtIdentifier;
1491
+ /** The avatar URL of the user who created the scrobble. */
1492
+ avatar?: Uri;
1411
1493
  /** The timestamp when the scrobble was created. */
1412
- date?: DateTime;
1494
+ createdAt?: DateTime;
1413
1495
  /** The URI of the scrobble. */
1414
1496
  uri?: Uri;
1415
1497
  /** The SHA256 hash of the scrobble data. */
@@ -1459,6 +1541,20 @@ export interface SeekParams {
1459
1541
  /** The position in seconds to seek to */
1460
1542
  position: number;
1461
1543
  }
1544
+ export interface SettingsRecord {
1545
+ /** Crossfade settings */
1546
+ crossfade?: RockboxCrossfadeSettings;
1547
+ /** Equalizer settings */
1548
+ equalizer?: RockboxEqualizerSettings;
1549
+ /** Replay gain settings */
1550
+ replayGain?: RockboxReplayGainSettings;
1551
+ /** Tone control settings (bass, treble, balance, channels) */
1552
+ tone?: RockboxToneSettings;
1553
+ /** When this settings record was first created. */
1554
+ createdAt: DateTime;
1555
+ /** When this settings record was last updated. */
1556
+ updatedAt?: DateTime;
1557
+ }
1462
1558
  export interface ShoutAuthor {
1463
1559
  /** The unique identifier of the author. */
1464
1560
  id?: string;
@@ -1906,6 +2002,8 @@ export interface Endpoints {
1906
2002
  "app.rocksky.playlist.removePlaylist": void;
1907
2003
  "app.rocksky.playlist.removeTrack": void;
1908
2004
  "app.rocksky.playlist.startPlaylist": void;
2005
+ "app.rocksky.rockbox.getAudioSettings": RockboxSettingsView;
2006
+ "app.rocksky.rockbox.putAudioSettings": RockboxSettingsView;
1909
2007
  "app.rocksky.scrobble.createScrobble": ScrobbleViewBasic;
1910
2008
  "app.rocksky.scrobble.getScrobble": ScrobbleViewDetailed;
1911
2009
  "app.rocksky.scrobble.getScrobbles": GetScrobblesOutput;