rewind-mcp-server 0.10.0 → 0.11.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 (89) hide show
  1. package/dist/__tests__/helpers/build-client.d.ts +2 -0
  2. package/dist/__tests__/helpers/build-client.js +24 -0
  3. package/dist/__tests__/helpers/build-client.js.map +1 -0
  4. package/dist/__tests__/helpers.test.js +11 -0
  5. package/dist/__tests__/helpers.test.js.map +1 -1
  6. package/dist/__tests__/image-block.live.js +1 -1
  7. package/dist/__tests__/image-block.live.js.map +1 -1
  8. package/dist/__tests__/manifest-snapshot.test.js +1 -0
  9. package/dist/__tests__/manifest-snapshot.test.js.map +1 -1
  10. package/dist/__tests__/output-schema-attending.test.d.ts +1 -0
  11. package/dist/__tests__/output-schema-attending.test.js +353 -0
  12. package/dist/__tests__/output-schema-attending.test.js.map +1 -0
  13. package/dist/__tests__/output-schema-collecting.test.d.ts +1 -0
  14. package/dist/__tests__/output-schema-collecting.test.js +155 -0
  15. package/dist/__tests__/output-schema-collecting.test.js.map +1 -0
  16. package/dist/__tests__/output-schema-cross-domain.test.d.ts +1 -0
  17. package/dist/__tests__/output-schema-cross-domain.test.js +142 -0
  18. package/dist/__tests__/output-schema-cross-domain.test.js.map +1 -0
  19. package/dist/__tests__/output-schema-listening.test.d.ts +1 -0
  20. package/dist/__tests__/output-schema-listening.test.js +235 -0
  21. package/dist/__tests__/output-schema-listening.test.js.map +1 -0
  22. package/dist/__tests__/output-schema-reading.test.d.ts +1 -0
  23. package/dist/__tests__/output-schema-reading.test.js +181 -0
  24. package/dist/__tests__/output-schema-reading.test.js.map +1 -0
  25. package/dist/__tests__/output-schema-running.test.d.ts +1 -0
  26. package/dist/__tests__/output-schema-running.test.js +185 -0
  27. package/dist/__tests__/output-schema-running.test.js.map +1 -0
  28. package/dist/__tests__/output-schema-watching.test.d.ts +1 -0
  29. package/dist/__tests__/output-schema-watching.test.js +190 -0
  30. package/dist/__tests__/output-schema-watching.test.js.map +1 -0
  31. package/dist/__tests__/output-schema.live.d.ts +1 -0
  32. package/dist/__tests__/output-schema.live.js +180 -0
  33. package/dist/__tests__/output-schema.live.js.map +1 -0
  34. package/dist/__tests__/output-schema.test.d.ts +1 -0
  35. package/dist/__tests__/output-schema.test.js +38 -0
  36. package/dist/__tests__/output-schema.test.js.map +1 -0
  37. package/dist/__tests__/server.test.js +1 -1
  38. package/dist/server.js +10 -12
  39. package/dist/server.js.map +1 -1
  40. package/dist/tools/attending.js +9 -0
  41. package/dist/tools/attending.js.map +1 -1
  42. package/dist/tools/collecting.js +5 -0
  43. package/dist/tools/collecting.js.map +1 -1
  44. package/dist/tools/cross-domain.js +12 -1
  45. package/dist/tools/cross-domain.js.map +1 -1
  46. package/dist/tools/helpers.js +14 -9
  47. package/dist/tools/helpers.js.map +1 -1
  48. package/dist/tools/listening.js +12 -1
  49. package/dist/tools/listening.js.map +1 -1
  50. package/dist/tools/reading.js +8 -1
  51. package/dist/tools/reading.js.map +1 -1
  52. package/dist/tools/running.js +8 -0
  53. package/dist/tools/running.js.map +1 -1
  54. package/dist/tools/schemas/attending.d.ts +8225 -0
  55. package/dist/tools/schemas/attending.js +404 -0
  56. package/dist/tools/schemas/attending.js.map +1 -0
  57. package/dist/tools/schemas/collecting.d.ts +1011 -0
  58. package/dist/tools/schemas/collecting.js +108 -0
  59. package/dist/tools/schemas/collecting.js.map +1 -0
  60. package/dist/tools/schemas/cross-domain.d.ts +1001 -0
  61. package/dist/tools/schemas/cross-domain.js +107 -0
  62. package/dist/tools/schemas/cross-domain.js.map +1 -0
  63. package/dist/tools/schemas/listening.d.ts +4298 -0
  64. package/dist/tools/schemas/listening.js +255 -0
  65. package/dist/tools/schemas/listening.js.map +1 -0
  66. package/dist/tools/schemas/reading.d.ts +1421 -0
  67. package/dist/tools/schemas/reading.js +151 -0
  68. package/dist/tools/schemas/reading.js.map +1 -0
  69. package/dist/tools/schemas/running.d.ts +680 -0
  70. package/dist/tools/schemas/running.js +154 -0
  71. package/dist/tools/schemas/running.js.map +1 -0
  72. package/dist/tools/schemas/shared.d.ts +98 -0
  73. package/dist/tools/schemas/shared.js +74 -0
  74. package/dist/tools/schemas/shared.js.map +1 -0
  75. package/dist/tools/schemas/system.d.ts +57 -0
  76. package/dist/tools/schemas/system.js +22 -0
  77. package/dist/tools/schemas/system.js.map +1 -0
  78. package/dist/tools/schemas/watching.d.ts +1821 -0
  79. package/dist/tools/schemas/watching.js +167 -0
  80. package/dist/tools/schemas/watching.js.map +1 -0
  81. package/dist/tools/watching.js +8 -0
  82. package/dist/tools/watching.js.map +1 -1
  83. package/dist/ui-bundles.d.ts +10 -11
  84. package/dist/ui-bundles.js +20 -22
  85. package/dist/ui-bundles.js.map +1 -1
  86. package/package.json +1 -1
  87. package/dist/tools/debug.d.ts +0 -6
  88. package/dist/tools/debug.js +0 -26
  89. package/dist/tools/debug.js.map +0 -1
@@ -0,0 +1,255 @@
1
+ /**
2
+ * Output schemas for the listening-domain tools (issue #105, Phase 1).
3
+ *
4
+ * These schemas are the source of truth for the listening tools' return
5
+ * shapes: `listening.ts` derives its `Scrobble` / `TopItem` / `NowPlaying`
6
+ * / `AlbumDetail` types from them via `z.infer`, so the declared schema
7
+ * and the TypeScript type cannot drift.
8
+ *
9
+ * Every object schema uses `.passthrough()` so the JSON Schema advertised
10
+ * to clients stays `additionalProperties`-open -- a field the Rewind API
11
+ * adds later does not break client-side validation. See schemas/shared.ts.
12
+ */
13
+ import { z } from 'zod';
14
+ import { imageSchema } from './shared.js';
15
+ // --- Element schemas ------------------------------------------------------
16
+ /** A single scrobble, as listed by get_recent_listens. */
17
+ export const scrobbleSchema = z
18
+ .object({
19
+ track: z
20
+ .object({
21
+ id: z.number(),
22
+ name: z.string(),
23
+ url: z.string().nullable(),
24
+ apple_music_url: z.string().nullable(),
25
+ preview_url: z.string().nullable(),
26
+ })
27
+ .passthrough(),
28
+ artist: z.object({ id: z.number(), name: z.string() }).passthrough(),
29
+ album: z
30
+ .object({
31
+ id: z.number().nullable(),
32
+ name: z.string().nullable(),
33
+ image: imageSchema(),
34
+ })
35
+ .passthrough(),
36
+ scrobbled_at: z.string(),
37
+ })
38
+ .passthrough();
39
+ /** A ranked entry in a get_top_artists / get_top_albums / get_top_tracks list. */
40
+ export const topItemSchema = z
41
+ .object({
42
+ rank: z.number(),
43
+ id: z.number(),
44
+ name: z.string(),
45
+ detail: z.string(),
46
+ playcount: z.number(),
47
+ image: imageSchema(),
48
+ url: z.string(),
49
+ apple_music_url: z.string().nullable(),
50
+ preview_url: z.string().nullish(),
51
+ sparkline: z
52
+ .object({
53
+ granularity: z.enum(['day', 'week']),
54
+ points: z.array(z.number()),
55
+ })
56
+ .passthrough()
57
+ .optional(),
58
+ })
59
+ .passthrough();
60
+ /** The `track` payload inside get_now_playing (null when nothing is playing). */
61
+ const nowPlayingTrackSchema = z
62
+ .object({
63
+ name: z.string(),
64
+ artist: z
65
+ .object({
66
+ id: z.number().nullable(),
67
+ name: z.string(),
68
+ apple_music_url: z.string().nullable(),
69
+ })
70
+ .passthrough(),
71
+ album: z
72
+ .object({
73
+ id: z.number().nullable(),
74
+ name: z.string().nullable(),
75
+ image: imageSchema(),
76
+ })
77
+ .passthrough(),
78
+ url: z.string().nullable(),
79
+ apple_music_url: z.string().nullable(),
80
+ preview_url: z.string().nullable(),
81
+ })
82
+ .passthrough();
83
+ // --- Tool output schemas --------------------------------------------------
84
+ /** outputSchema for get_now_playing. */
85
+ export const nowPlayingOutputSchema = z
86
+ .object({
87
+ is_playing: z.boolean(),
88
+ track: nowPlayingTrackSchema.nullable(),
89
+ scrobbled_at: z.string().nullable(),
90
+ })
91
+ .passthrough();
92
+ /**
93
+ * outputSchema for get_recent_listens. The empty-state branch returns
94
+ * `{ items: [] }`, which satisfies the same schema -- no union needed.
95
+ */
96
+ export const recentListensOutputSchema = z
97
+ .object({ items: z.array(scrobbleSchema) })
98
+ .passthrough();
99
+ /** outputSchema for get_listening_stats (flat stats object). */
100
+ export const listeningStatsOutputSchema = z
101
+ .object({
102
+ total_scrobbles: z.number(),
103
+ unique_artists: z.number(),
104
+ unique_albums: z.number(),
105
+ unique_tracks: z.number(),
106
+ registered_date: z.string().nullable(),
107
+ years_tracking: z.number(),
108
+ scrobbles_per_day: z.number(),
109
+ })
110
+ .passthrough();
111
+ /** outputSchema for get_top_artists and get_top_albums (same shape). */
112
+ export const topListOutputSchema = z
113
+ .object({
114
+ period: z.string(),
115
+ data: z.array(topItemSchema),
116
+ })
117
+ .passthrough();
118
+ /** outputSchema for get_top_tracks (adds the artist_id filter context). */
119
+ export const topTracksOutputSchema = z
120
+ .object({
121
+ period: z.string(),
122
+ artist_id: z.number().nullable(),
123
+ data: z.array(topItemSchema),
124
+ })
125
+ .passthrough();
126
+ /** outputSchema for get_listening_streaks. */
127
+ export const listeningStreaksOutputSchema = z
128
+ .object({
129
+ current: z
130
+ .object({
131
+ days: z.number(),
132
+ start_date: z.string().nullable(),
133
+ total_scrobbles: z.number(),
134
+ })
135
+ .passthrough(),
136
+ longest: z
137
+ .object({
138
+ days: z.number(),
139
+ start_date: z.string().nullable(),
140
+ end_date: z.string().nullable(),
141
+ total_scrobbles: z.number(),
142
+ })
143
+ .passthrough(),
144
+ })
145
+ .passthrough();
146
+ /** outputSchema for get_album_details. */
147
+ export const albumDetailsOutputSchema = z
148
+ .object({
149
+ id: z.number(),
150
+ name: z.string(),
151
+ mbid: z.string().nullable(),
152
+ url: z.string().nullable(),
153
+ apple_music_url: z.string().nullable(),
154
+ playcount: z.number(),
155
+ image: imageSchema(),
156
+ artist: z.object({ id: z.number(), name: z.string() }).passthrough(),
157
+ tracks: z.array(z
158
+ .object({
159
+ id: z.number(),
160
+ name: z.string(),
161
+ scrobble_count: z.number(),
162
+ apple_music_url: z.string().nullable(),
163
+ preview_url: z.string().nullable(),
164
+ })
165
+ .passthrough()),
166
+ })
167
+ .passthrough();
168
+ /** outputSchema for get_listening_genres (one row per grouped period). */
169
+ const genrePeriodSchema = z
170
+ .object({
171
+ period: z.string(),
172
+ genres: z.record(z.number()),
173
+ total: z.number(),
174
+ })
175
+ .passthrough();
176
+ export const listeningGenresOutputSchema = z
177
+ .object({
178
+ items: z.array(genrePeriodSchema),
179
+ group_by: z.string(),
180
+ })
181
+ .passthrough();
182
+ /**
183
+ * outputSchema for get_artist_details. The tool builds a transformed,
184
+ * card-shaped payload -- this schema describes that shape, not the raw
185
+ * `/listening/artists/:id` API response.
186
+ */
187
+ export const artistDetailsOutputSchema = z
188
+ .object({
189
+ artist: z
190
+ .object({
191
+ id: z.number(),
192
+ name: z.string(),
193
+ mbid: z.string().nullable(),
194
+ url: z.string().nullable(),
195
+ apple_music_url: z.string().nullable(),
196
+ apple_music_id: z.string().nullable(),
197
+ genre: z.string().nullable(),
198
+ tags: z.array(z.string()),
199
+ bio_summary: z.string().nullable(),
200
+ bio_content: z.string().nullable(),
201
+ image: imageSchema(),
202
+ })
203
+ .passthrough(),
204
+ listening_stats: z
205
+ .object({
206
+ total_scrobbles: z.number(),
207
+ first_scrobble_at: z.string().nullable(),
208
+ last_played_at: z.string().nullable(),
209
+ all_time_rank: z.number().nullable(),
210
+ distinct_tracks: z.number(),
211
+ distinct_albums: z.number(),
212
+ })
213
+ .passthrough(),
214
+ sparkline: z
215
+ .object({
216
+ granularity: z.enum(['day', 'week', 'month', 'year']),
217
+ points: z.array(z.object({ at: z.string(), count: z.number() }).passthrough()),
218
+ })
219
+ .passthrough()
220
+ .nullable(),
221
+ top_tracks: z.array(z
222
+ .object({
223
+ rank: z.number(),
224
+ id: z.number(),
225
+ name: z.string(),
226
+ album_id: z.number().nullable(),
227
+ album_name: z.string().nullable(),
228
+ scrobble_count: z.number(),
229
+ apple_music_url: z.string().nullable(),
230
+ preview_url: z.string().nullable(),
231
+ image: imageSchema(),
232
+ })
233
+ .passthrough()),
234
+ top_albums: z.array(z
235
+ .object({
236
+ rank: z.number(),
237
+ id: z.number(),
238
+ name: z.string(),
239
+ playcount: z.number(),
240
+ apple_music_url: z.string().nullable(),
241
+ image: imageSchema(),
242
+ })
243
+ .passthrough()),
244
+ similar_artists: z.array(z
245
+ .object({
246
+ id: z.number(),
247
+ name: z.string(),
248
+ your_scrobble_count: z.number(),
249
+ similarity_score: z.number(),
250
+ image: imageSchema(),
251
+ })
252
+ .passthrough()),
253
+ })
254
+ .passthrough();
255
+ //# sourceMappingURL=listening.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listening.js","sourceRoot":"","sources":["../../../src/tools/schemas/listening.ts"],"names":[],"mappings":"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"}