@ansango/lastfm-api 3.1.3

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 (204) hide show
  1. package/CHANGELOG.md +323 -0
  2. package/LICENSE +21 -0
  3. package/README.md +470 -0
  4. package/dist/__tests__/utils.test.d.ts +2 -0
  5. package/dist/__tests__/utils.test.d.ts.map +1 -0
  6. package/dist/__tests__/utils.test.js +86 -0
  7. package/dist/__tests__/utils.test.js.map +1 -0
  8. package/dist/client.d.ts +52 -0
  9. package/dist/client.d.ts.map +1 -0
  10. package/dist/client.js +68 -0
  11. package/dist/client.js.map +1 -0
  12. package/dist/config.d.ts +23 -0
  13. package/dist/config.d.ts.map +1 -0
  14. package/dist/config.js +59 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/entrypoints/album.d.ts +4 -0
  17. package/dist/entrypoints/album.d.ts.map +1 -0
  18. package/dist/entrypoints/album.js +3 -0
  19. package/dist/entrypoints/album.js.map +1 -0
  20. package/dist/entrypoints/album.schemas.d.ts +2 -0
  21. package/dist/entrypoints/album.schemas.d.ts.map +1 -0
  22. package/dist/entrypoints/album.schemas.js +3 -0
  23. package/dist/entrypoints/album.schemas.js.map +1 -0
  24. package/dist/entrypoints/artist.d.ts +4 -0
  25. package/dist/entrypoints/artist.d.ts.map +1 -0
  26. package/dist/entrypoints/artist.js +3 -0
  27. package/dist/entrypoints/artist.js.map +1 -0
  28. package/dist/entrypoints/artist.schemas.d.ts +2 -0
  29. package/dist/entrypoints/artist.schemas.d.ts.map +1 -0
  30. package/dist/entrypoints/artist.schemas.js +3 -0
  31. package/dist/entrypoints/artist.schemas.js.map +1 -0
  32. package/dist/entrypoints/auth.d.ts +4 -0
  33. package/dist/entrypoints/auth.d.ts.map +1 -0
  34. package/dist/entrypoints/auth.js +3 -0
  35. package/dist/entrypoints/auth.js.map +1 -0
  36. package/dist/entrypoints/auth.schemas.d.ts +2 -0
  37. package/dist/entrypoints/auth.schemas.d.ts.map +1 -0
  38. package/dist/entrypoints/auth.schemas.js +3 -0
  39. package/dist/entrypoints/auth.schemas.js.map +1 -0
  40. package/dist/entrypoints/base.schemas.d.ts +2 -0
  41. package/dist/entrypoints/base.schemas.d.ts.map +1 -0
  42. package/dist/entrypoints/base.schemas.js +3 -0
  43. package/dist/entrypoints/base.schemas.js.map +1 -0
  44. package/dist/entrypoints/chart.d.ts +4 -0
  45. package/dist/entrypoints/chart.d.ts.map +1 -0
  46. package/dist/entrypoints/chart.js +3 -0
  47. package/dist/entrypoints/chart.js.map +1 -0
  48. package/dist/entrypoints/chart.schemas.d.ts +2 -0
  49. package/dist/entrypoints/chart.schemas.d.ts.map +1 -0
  50. package/dist/entrypoints/chart.schemas.js +3 -0
  51. package/dist/entrypoints/chart.schemas.js.map +1 -0
  52. package/dist/entrypoints/geo.d.ts +4 -0
  53. package/dist/entrypoints/geo.d.ts.map +1 -0
  54. package/dist/entrypoints/geo.js +3 -0
  55. package/dist/entrypoints/geo.js.map +1 -0
  56. package/dist/entrypoints/geo.schemas.d.ts +2 -0
  57. package/dist/entrypoints/geo.schemas.d.ts.map +1 -0
  58. package/dist/entrypoints/geo.schemas.js +3 -0
  59. package/dist/entrypoints/geo.schemas.js.map +1 -0
  60. package/dist/entrypoints/library.d.ts +4 -0
  61. package/dist/entrypoints/library.d.ts.map +1 -0
  62. package/dist/entrypoints/library.js +3 -0
  63. package/dist/entrypoints/library.js.map +1 -0
  64. package/dist/entrypoints/library.schemas.d.ts +2 -0
  65. package/dist/entrypoints/library.schemas.d.ts.map +1 -0
  66. package/dist/entrypoints/library.schemas.js +3 -0
  67. package/dist/entrypoints/library.schemas.js.map +1 -0
  68. package/dist/entrypoints/tag.d.ts +4 -0
  69. package/dist/entrypoints/tag.d.ts.map +1 -0
  70. package/dist/entrypoints/tag.js +3 -0
  71. package/dist/entrypoints/tag.js.map +1 -0
  72. package/dist/entrypoints/tag.schemas.d.ts +2 -0
  73. package/dist/entrypoints/tag.schemas.d.ts.map +1 -0
  74. package/dist/entrypoints/tag.schemas.js +3 -0
  75. package/dist/entrypoints/tag.schemas.js.map +1 -0
  76. package/dist/entrypoints/track.d.ts +4 -0
  77. package/dist/entrypoints/track.d.ts.map +1 -0
  78. package/dist/entrypoints/track.js +3 -0
  79. package/dist/entrypoints/track.js.map +1 -0
  80. package/dist/entrypoints/track.schemas.d.ts +2 -0
  81. package/dist/entrypoints/track.schemas.d.ts.map +1 -0
  82. package/dist/entrypoints/track.schemas.js +3 -0
  83. package/dist/entrypoints/track.schemas.js.map +1 -0
  84. package/dist/entrypoints/user.d.ts +4 -0
  85. package/dist/entrypoints/user.d.ts.map +1 -0
  86. package/dist/entrypoints/user.js +3 -0
  87. package/dist/entrypoints/user.js.map +1 -0
  88. package/dist/entrypoints/user.schemas.d.ts +2 -0
  89. package/dist/entrypoints/user.schemas.d.ts.map +1 -0
  90. package/dist/entrypoints/user.schemas.js +3 -0
  91. package/dist/entrypoints/user.schemas.js.map +1 -0
  92. package/dist/index.d.ts +26 -0
  93. package/dist/index.d.ts.map +1 -0
  94. package/dist/index.js +20 -0
  95. package/dist/index.js.map +1 -0
  96. package/dist/services/album.d.ts +38 -0
  97. package/dist/services/album.d.ts.map +1 -0
  98. package/dist/services/album.js +10 -0
  99. package/dist/services/album.js.map +1 -0
  100. package/dist/services/album.schemas.d.ts +171 -0
  101. package/dist/services/album.schemas.d.ts.map +1 -0
  102. package/dist/services/album.schemas.js +128 -0
  103. package/dist/services/album.schemas.js.map +1 -0
  104. package/dist/services/artist.d.ts +62 -0
  105. package/dist/services/artist.d.ts.map +1 -0
  106. package/dist/services/artist.js +13 -0
  107. package/dist/services/artist.js.map +1 -0
  108. package/dist/services/artist.schemas.d.ts +306 -0
  109. package/dist/services/artist.schemas.d.ts.map +1 -0
  110. package/dist/services/artist.schemas.js +199 -0
  111. package/dist/services/artist.schemas.js.map +1 -0
  112. package/dist/services/auth.d.ts +14 -0
  113. package/dist/services/auth.d.ts.map +1 -0
  114. package/dist/services/auth.js +7 -0
  115. package/dist/services/auth.js.map +1 -0
  116. package/dist/services/auth.schemas.d.ts +20 -0
  117. package/dist/services/auth.schemas.d.ts.map +1 -0
  118. package/dist/services/auth.schemas.js +16 -0
  119. package/dist/services/auth.schemas.js.map +1 -0
  120. package/dist/services/chart.d.ts +30 -0
  121. package/dist/services/chart.d.ts.map +1 -0
  122. package/dist/services/chart.js +9 -0
  123. package/dist/services/chart.js.map +1 -0
  124. package/dist/services/chart.schemas.d.ts +84 -0
  125. package/dist/services/chart.schemas.d.ts.map +1 -0
  126. package/dist/services/chart.schemas.js +73 -0
  127. package/dist/services/chart.schemas.js.map +1 -0
  128. package/dist/services/geo.d.ts +22 -0
  129. package/dist/services/geo.d.ts.map +1 -0
  130. package/dist/services/geo.js +8 -0
  131. package/dist/services/geo.js.map +1 -0
  132. package/dist/services/geo.schemas.d.ts +68 -0
  133. package/dist/services/geo.schemas.d.ts.map +1 -0
  134. package/dist/services/geo.schemas.js +59 -0
  135. package/dist/services/geo.schemas.js.map +1 -0
  136. package/dist/services/index.d.ts +20 -0
  137. package/dist/services/index.d.ts.map +1 -0
  138. package/dist/services/index.js +21 -0
  139. package/dist/services/index.js.map +1 -0
  140. package/dist/services/library.d.ts +14 -0
  141. package/dist/services/library.d.ts.map +1 -0
  142. package/dist/services/library.js +7 -0
  143. package/dist/services/library.js.map +1 -0
  144. package/dist/services/library.schemas.d.ts +31 -0
  145. package/dist/services/library.schemas.d.ts.map +1 -0
  146. package/dist/services/library.schemas.js +27 -0
  147. package/dist/services/library.schemas.js.map +1 -0
  148. package/dist/services/schemas/base.entities.schemas.d.ts +12 -0
  149. package/dist/services/schemas/base.entities.schemas.d.ts.map +1 -0
  150. package/dist/services/schemas/base.entities.schemas.js +18 -0
  151. package/dist/services/schemas/base.entities.schemas.js.map +1 -0
  152. package/dist/services/schemas/base.entity-names.schemas.d.ts +12 -0
  153. package/dist/services/schemas/base.entity-names.schemas.d.ts.map +1 -0
  154. package/dist/services/schemas/base.entity-names.schemas.js +8 -0
  155. package/dist/services/schemas/base.entity-names.schemas.js.map +1 -0
  156. package/dist/services/schemas/base.metadata.schemas.d.ts +26 -0
  157. package/dist/services/schemas/base.metadata.schemas.d.ts.map +1 -0
  158. package/dist/services/schemas/base.metadata.schemas.js +17 -0
  159. package/dist/services/schemas/base.metadata.schemas.js.map +1 -0
  160. package/dist/services/schemas/base.pagination.schemas.d.ts +18 -0
  161. package/dist/services/schemas/base.pagination.schemas.d.ts.map +1 -0
  162. package/dist/services/schemas/base.pagination.schemas.js +12 -0
  163. package/dist/services/schemas/base.pagination.schemas.js.map +1 -0
  164. package/dist/services/schemas/base.primitives.schemas.d.ts +50 -0
  165. package/dist/services/schemas/base.primitives.schemas.d.ts.map +1 -0
  166. package/dist/services/schemas/base.primitives.schemas.js +36 -0
  167. package/dist/services/schemas/base.primitives.schemas.js.map +1 -0
  168. package/dist/services/schemas/index.d.ts +6 -0
  169. package/dist/services/schemas/index.d.ts.map +1 -0
  170. package/dist/services/schemas/index.js +7 -0
  171. package/dist/services/schemas/index.js.map +1 -0
  172. package/dist/services/tag.d.ts +62 -0
  173. package/dist/services/tag.d.ts.map +1 -0
  174. package/dist/services/tag.js +13 -0
  175. package/dist/services/tag.js.map +1 -0
  176. package/dist/services/tag.schemas.d.ts +192 -0
  177. package/dist/services/tag.schemas.d.ts.map +1 -0
  178. package/dist/services/tag.schemas.js +156 -0
  179. package/dist/services/tag.schemas.js.map +1 -0
  180. package/dist/services/track.d.ts +74 -0
  181. package/dist/services/track.d.ts.map +1 -0
  182. package/dist/services/track.js +25 -0
  183. package/dist/services/track.js.map +1 -0
  184. package/dist/services/track.schemas.d.ts +284 -0
  185. package/dist/services/track.schemas.d.ts.map +1 -0
  186. package/dist/services/track.schemas.js +191 -0
  187. package/dist/services/track.schemas.js.map +1 -0
  188. package/dist/services/track.utils.d.ts +10 -0
  189. package/dist/services/track.utils.d.ts.map +1 -0
  190. package/dist/services/track.utils.js +56 -0
  191. package/dist/services/track.utils.js.map +1 -0
  192. package/dist/services/user.d.ts +102 -0
  193. package/dist/services/user.d.ts.map +1 -0
  194. package/dist/services/user.js +18 -0
  195. package/dist/services/user.js.map +1 -0
  196. package/dist/services/user.schemas.d.ts +609 -0
  197. package/dist/services/user.schemas.d.ts.map +1 -0
  198. package/dist/services/user.schemas.js +321 -0
  199. package/dist/services/user.schemas.js.map +1 -0
  200. package/dist/utils.d.ts +39 -0
  201. package/dist/utils.d.ts.map +1 -0
  202. package/dist/utils.js +125 -0
  203. package/dist/utils.js.map +1 -0
  204. package/package.json +156 -0
@@ -0,0 +1,321 @@
1
+ import { z } from "zod";
2
+ import { ageSchema, albumCountSchema, albumNameSchema, artistCountSchema, artistNameSchema, bootstrapSchema, countSchema, countrySchema, datePropSchema, durationSchema, fromSchema, genderSchema, imageSchema, limitSchema, mbidSchema, pageSchema, periodSchema, playcountSchema, playlistsSchema, rankSchema, realNameSchema, subscriberSchema, tagNameSchema, textSchema, toSchema, totalPagesSchema, totalSchema, trackCountSchema, trackNameSchema, typeSchema, unixtimeSchema, urlSchema, userNameSchema, } from "./schemas/index.js";
3
+ // Response schemas
4
+ export const userGetFriendsResponseSchema = z.record(z.string(), z.any());
5
+ // Request schemas
6
+ export const userGetFriendsRequestSchema = z.object({
7
+ user: userNameSchema,
8
+ limit: limitSchema.optional(),
9
+ page: pageSchema.optional()
10
+ });
11
+ export const userGetInfoRequestSchema = z.object({
12
+ user: userNameSchema
13
+ });
14
+ /**
15
+ * User
16
+ * @see https://www.last.fm/api/show/user.getInfo
17
+ */
18
+ export const userSchema = z.object({
19
+ name: userNameSchema,
20
+ age: ageSchema,
21
+ subscriber: subscriberSchema,
22
+ realname: realNameSchema,
23
+ bootstrap: bootstrapSchema,
24
+ playcount: playcountSchema,
25
+ artist_count: artistCountSchema,
26
+ playlists: playlistsSchema,
27
+ track_count: trackCountSchema,
28
+ album_count: albumCountSchema,
29
+ image: z.array(imageSchema),
30
+ registered: z.object({
31
+ unixtime: unixtimeSchema,
32
+ "#text": z.number()
33
+ }),
34
+ country: countrySchema,
35
+ gender: genderSchema,
36
+ url: urlSchema,
37
+ type: typeSchema
38
+ });
39
+ export const userGetInfoResponseSchema = z.object({
40
+ user: userSchema
41
+ });
42
+ export const userGetLovedTracksRequestSchema = z.object({
43
+ user: userNameSchema,
44
+ limit: limitSchema.optional(),
45
+ page: pageSchema.optional()
46
+ });
47
+ export const lovedTracksSchema = z.object({
48
+ track: z.array(z.object({
49
+ artist: z.object({
50
+ name: artistNameSchema,
51
+ mbid: mbidSchema,
52
+ url: urlSchema
53
+ }),
54
+ date: datePropSchema,
55
+ name: trackNameSchema,
56
+ mbid: mbidSchema,
57
+ url: urlSchema,
58
+ image: z.array(imageSchema)
59
+ })),
60
+ "@attr": z.object({
61
+ user: userNameSchema,
62
+ totalPages: totalPagesSchema,
63
+ pages: pageSchema,
64
+ perPages: pageSchema,
65
+ total: totalSchema
66
+ })
67
+ });
68
+ export const userGetLovedTracksResponseSchema = z.object({
69
+ lovedtracks: lovedTracksSchema
70
+ });
71
+ export const userGetRecentTracksRequestSchema = z.object({
72
+ user: userNameSchema,
73
+ limit: limitSchema.optional(),
74
+ page: pageSchema.optional(),
75
+ from: fromSchema.optional(),
76
+ to: toSchema.optional()
77
+ });
78
+ export const recentTracksSchema = z.object({
79
+ track: z.array(z.object({
80
+ artist: z.object({
81
+ name: artistNameSchema,
82
+ mbid: mbidSchema,
83
+ "#text": artistNameSchema
84
+ }),
85
+ album: z.object({
86
+ mbid: mbidSchema,
87
+ "#text": albumNameSchema
88
+ }),
89
+ date: datePropSchema.optional(),
90
+ name: trackNameSchema,
91
+ mbid: mbidSchema,
92
+ url: urlSchema,
93
+ image: z.array(imageSchema),
94
+ "@attr": z.object({
95
+ nowplaying: z.boolean()
96
+ }).optional()
97
+ })),
98
+ "@attr": z.object({
99
+ user: userNameSchema,
100
+ totalPages: totalPagesSchema,
101
+ pages: pageSchema,
102
+ perPages: pageSchema,
103
+ total: totalSchema
104
+ })
105
+ });
106
+ export const userGetRecentTracksResponseSchema = z.object({
107
+ recenttracks: recentTracksSchema
108
+ });
109
+ export const userGetTopAlbumsRequestSchema = z.object({
110
+ user: userNameSchema,
111
+ limit: limitSchema.optional(),
112
+ page: pageSchema.optional(),
113
+ period: periodSchema.optional()
114
+ });
115
+ export const topAlbumsSchema = z.object({
116
+ album: z.array(z.object({
117
+ artist: z.object({
118
+ name: artistNameSchema,
119
+ mbid: mbidSchema,
120
+ url: urlSchema
121
+ }),
122
+ image: z.array(imageSchema),
123
+ mbid: mbidSchema,
124
+ url: urlSchema,
125
+ playcount: playcountSchema,
126
+ name: albumNameSchema,
127
+ "@attr": z.object({
128
+ rank: rankSchema
129
+ })
130
+ })),
131
+ "@attr": z.object({
132
+ user: userNameSchema,
133
+ totalPages: totalPagesSchema,
134
+ pages: pageSchema,
135
+ perPages: pageSchema,
136
+ total: totalSchema
137
+ })
138
+ });
139
+ export const userGetTopAlbumsResponseSchema = z.object({
140
+ topalbums: topAlbumsSchema
141
+ });
142
+ export const userGetTopArtistsRequestSchema = z.object({
143
+ user: userNameSchema,
144
+ limit: limitSchema.optional(),
145
+ page: pageSchema.optional(),
146
+ period: periodSchema.optional()
147
+ });
148
+ export const topArtistsSchema = z.object({
149
+ artist: z.array(z.object({
150
+ image: z.array(imageSchema),
151
+ mbid: mbidSchema,
152
+ name: artistNameSchema,
153
+ playcount: playcountSchema,
154
+ url: urlSchema,
155
+ "@attr": z.object({
156
+ rank: rankSchema
157
+ })
158
+ })),
159
+ "@attr": z.object({
160
+ user: userNameSchema,
161
+ totalPages: totalPagesSchema,
162
+ pages: pageSchema,
163
+ perPages: pageSchema,
164
+ total: totalSchema
165
+ })
166
+ });
167
+ export const userGetTopArtistsResponseSchema = z.object({
168
+ topartists: topArtistsSchema
169
+ });
170
+ export const userGetTopTagsRequestSchema = z.object({
171
+ user: userNameSchema,
172
+ limit: limitSchema.optional(),
173
+ page: pageSchema.optional()
174
+ });
175
+ export const topTagsSchema = z.object({
176
+ tag: z.array(z.object({
177
+ name: tagNameSchema,
178
+ url: urlSchema,
179
+ count: countSchema
180
+ })),
181
+ "@attr": z.object({
182
+ user: userNameSchema
183
+ })
184
+ });
185
+ export const userGetTopTagsResponseSchema = z.object({
186
+ toptags: topTagsSchema
187
+ });
188
+ export const userGetTopTracksRequestSchema = z.object({
189
+ user: userNameSchema,
190
+ limit: limitSchema.optional(),
191
+ page: pageSchema.optional(),
192
+ period: periodSchema.optional()
193
+ });
194
+ export const topTracksSchema = z.object({
195
+ track: z.array(z.object({
196
+ mbid: mbidSchema,
197
+ name: trackNameSchema,
198
+ image: z.array(imageSchema),
199
+ artist: z.object({
200
+ name: artistNameSchema,
201
+ mbid: mbidSchema,
202
+ url: urlSchema
203
+ }),
204
+ url: urlSchema,
205
+ duration: durationSchema,
206
+ playcount: playcountSchema,
207
+ "@attr": z.object({
208
+ rank: rankSchema
209
+ })
210
+ })),
211
+ "@attr": z.object({
212
+ user: userNameSchema,
213
+ totalPages: totalPagesSchema,
214
+ pages: pageSchema,
215
+ perPages: pageSchema,
216
+ total: totalSchema
217
+ })
218
+ });
219
+ export const userGetTopTracksResponseSchema = z.object({
220
+ toptracks: topTracksSchema
221
+ });
222
+ export const userGetWeeklyAlbumChartRequestSchema = z.object({
223
+ user: userNameSchema,
224
+ from: fromSchema.optional(),
225
+ to: toSchema.optional()
226
+ });
227
+ export const weeklyAlbumChartAttrSchema = z.object({
228
+ from: fromSchema,
229
+ to: toSchema,
230
+ user: userNameSchema
231
+ });
232
+ export const weeklyAlbumChartSchema = z.object({
233
+ album: z.array(z.object({
234
+ artist: z.object({
235
+ mbid: mbidSchema,
236
+ "#text": textSchema
237
+ }),
238
+ mbid: mbidSchema,
239
+ url: urlSchema,
240
+ name: albumNameSchema,
241
+ playcount: playcountSchema,
242
+ "@attr": z.object({
243
+ rank: rankSchema
244
+ })
245
+ })),
246
+ "@attr": z.object({
247
+ from: fromSchema,
248
+ user: userNameSchema,
249
+ to: toSchema
250
+ })
251
+ });
252
+ export const userGetWeeklyAlbumChartResponseSchema = z.object({
253
+ weeklyalbumchart: weeklyAlbumChartSchema
254
+ });
255
+ export const userGetWeeklyArtistChartRequestSchema = z.object({
256
+ user: userNameSchema,
257
+ from: fromSchema.optional(),
258
+ to: toSchema.optional()
259
+ });
260
+ export const weeklyArtistChartSchema = z.object({
261
+ artist: z.array(z.object({
262
+ mbid: mbidSchema,
263
+ url: urlSchema,
264
+ name: artistNameSchema,
265
+ playcount: playcountSchema,
266
+ "@attr": z.object({
267
+ rank: rankSchema
268
+ })
269
+ })),
270
+ "@attr": z.object({
271
+ user: userNameSchema,
272
+ to: toSchema,
273
+ from: fromSchema
274
+ })
275
+ });
276
+ export const userGetWeeklyArtistChartResponseSchema = z.object({
277
+ weeklyartistchart: weeklyArtistChartSchema
278
+ });
279
+ export const userGetWeeklyChartListRequestSchema = z.object({
280
+ user: userNameSchema
281
+ });
282
+ export const weeklyChartListSchema = z.object({
283
+ chart: z.array(z.object({
284
+ "#text": textSchema,
285
+ from: fromSchema,
286
+ to: toSchema
287
+ }))
288
+ });
289
+ export const userGetWeeklyChartListResponseSchema = z.object({
290
+ weeklychartlist: weeklyChartListSchema
291
+ });
292
+ export const userGetWeeklyTrackChartRequestSchema = z.object({
293
+ user: userNameSchema,
294
+ from: fromSchema.optional(),
295
+ to: toSchema.optional()
296
+ });
297
+ export const weeklyTrackChartSchema = z.object({
298
+ track: z.array(z.object({
299
+ artist: z.object({
300
+ mbid: mbidSchema,
301
+ "#text": textSchema
302
+ }),
303
+ image: z.array(imageSchema),
304
+ mbid: mbidSchema,
305
+ url: urlSchema,
306
+ name: trackNameSchema,
307
+ playcount: playcountSchema,
308
+ "@attr": z.object({
309
+ rank: rankSchema
310
+ })
311
+ })),
312
+ "@attr": z.object({
313
+ user: userNameSchema,
314
+ to: toSchema,
315
+ from: fromSchema
316
+ })
317
+ });
318
+ export const userGetWeeklyTrackChartResponseSchema = z.object({
319
+ weeklytrackchart: weeklyTrackChartSchema
320
+ });
321
+ //# sourceMappingURL=user.schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.schemas.js","sourceRoot":"","sources":["../../src/services/user.schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { LastFmConfig } from './config.js';
2
+ /**
3
+ * Error thrown when a Last.fm API call fails. Carries the HTTP status and
4
+ * (when available) the Last.fm-specific error code so callers can branch on
5
+ * the failure reason (auth, rate limit, invalid params, etc.) without having
6
+ * to parse error messages.
7
+ */
8
+ export declare class LastFmApiError extends Error {
9
+ readonly httpStatus: number;
10
+ readonly code?: number;
11
+ constructor(message: string, httpStatus: number, code?: number);
12
+ }
13
+ /**
14
+ * Parses a Last.fm API response. Throws a `LastFmApiError` if the response
15
+ * is not OK or the body contains a Last.fm error envelope; otherwise returns
16
+ * the parsed JSON body.
17
+ */
18
+ export declare function parseLastFmResponse(response: Response): Promise<unknown>;
19
+ /**
20
+ * Realiza una petición HTTP y parsea la respuesta como JSON
21
+ */
22
+ export declare function fetcher<T>(url: string, init?: RequestInit): Promise<T>;
23
+ /**
24
+ * Construye la URL para las peticiones a la API de Last.fm
25
+ */
26
+ export declare function buildUrl(config: LastFmConfig, method: string, params?: Record<string, any>): string;
27
+ /**
28
+ * Genera la firma MD5 requerida para métodos autenticados
29
+ */
30
+ export declare function generateSignature(config: LastFmConfig, params: Record<string, any>): string;
31
+ /**
32
+ * Construye URL para métodos autenticados
33
+ */
34
+ export declare function buildAuthUrl(config: LastFmConfig, method: string, params?: Record<string, any>): string;
35
+ /**
36
+ * Realiza una petición POST con body URL-encoded
37
+ */
38
+ export declare function postFetcher<T>(url: string, body: string): Promise<T>;
39
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAEX,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;CAM9D;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CA2B9E;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAG5E;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACvB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAC9B,MAAM,CAUR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,MAAM,CAWR;AAiBD;;GAEG;AACH,wBAAgB,YAAY,CAC3B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAC9B,MAAM,CAiBR;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAoB1E"}
package/dist/utils.js ADDED
@@ -0,0 +1,125 @@
1
+ import { md5 } from 'js-md5';
2
+ const DEFAULT_BASE_URL = 'https://ws.audioscrobbler.com/2.0/';
3
+ /**
4
+ * Error thrown when a Last.fm API call fails. Carries the HTTP status and
5
+ * (when available) the Last.fm-specific error code so callers can branch on
6
+ * the failure reason (auth, rate limit, invalid params, etc.) without having
7
+ * to parse error messages.
8
+ */
9
+ export class LastFmApiError extends Error {
10
+ httpStatus;
11
+ code;
12
+ constructor(message, httpStatus, code) {
13
+ super(message);
14
+ this.name = 'LastFmApiError';
15
+ this.httpStatus = httpStatus;
16
+ this.code = code;
17
+ }
18
+ }
19
+ /**
20
+ * Parses a Last.fm API response. Throws a `LastFmApiError` if the response
21
+ * is not OK or the body contains a Last.fm error envelope; otherwise returns
22
+ * the parsed JSON body.
23
+ */
24
+ export async function parseLastFmResponse(response) {
25
+ const httpStatus = response.status;
26
+ let body = null;
27
+ try {
28
+ body = await response.json();
29
+ }
30
+ catch {
31
+ // Body wasn't JSON — fall through to the HTTP-status-based error below.
32
+ }
33
+ if (!response.ok) {
34
+ throw new LastFmApiError(`HTTP Error: ${httpStatus} ${response.statusText}`, httpStatus, typeof body?.error === 'number' ? body.error : undefined);
35
+ }
36
+ if (body && body.error) {
37
+ const code = typeof body.error === 'number' ? body.error : undefined;
38
+ throw new LastFmApiError(`Last.fm API Error ${body.error}: ${body.message ?? ''}`.trim(), httpStatus, code);
39
+ }
40
+ return body;
41
+ }
42
+ /**
43
+ * Realiza una petición HTTP y parsea la respuesta como JSON
44
+ */
45
+ export async function fetcher(url, init) {
46
+ const response = await fetch(url, init);
47
+ return (await parseLastFmResponse(response));
48
+ }
49
+ /**
50
+ * Construye la URL para las peticiones a la API de Last.fm
51
+ */
52
+ export function buildUrl(config, method, params = {}) {
53
+ const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;
54
+ const urlParams = new URLSearchParams({
55
+ method,
56
+ api_key: config.apiKey,
57
+ format: 'json',
58
+ ...cleanParams(params)
59
+ });
60
+ return `${baseUrl}?${urlParams.toString()}`;
61
+ }
62
+ /**
63
+ * Genera la firma MD5 requerida para métodos autenticados
64
+ */
65
+ export function generateSignature(config, params) {
66
+ if (!config.sharedSecret) {
67
+ throw new Error('Shared secret is required for authenticated methods');
68
+ }
69
+ const sorted = Object.keys(params)
70
+ .sort()
71
+ .map((key) => `${key}${params[key]}`)
72
+ .join('');
73
+ return md5(sorted + config.sharedSecret);
74
+ }
75
+ /**
76
+ * Limpia parámetros removiendo valores undefined/null
77
+ */
78
+ function cleanParams(params) {
79
+ const cleaned = {};
80
+ for (const [key, value] of Object.entries(params)) {
81
+ if (value !== undefined && value !== null) {
82
+ cleaned[key] = String(value);
83
+ }
84
+ }
85
+ return cleaned;
86
+ }
87
+ /**
88
+ * Construye URL para métodos autenticados
89
+ */
90
+ export function buildAuthUrl(config, method, params = {}) {
91
+ const authParams = {
92
+ method,
93
+ api_key: config.apiKey,
94
+ ...cleanParams(params)
95
+ };
96
+ const signature = generateSignature(config, authParams);
97
+ const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;
98
+ const urlParams = new URLSearchParams({
99
+ ...authParams,
100
+ api_sig: signature,
101
+ format: 'json'
102
+ });
103
+ return `${baseUrl}?${urlParams.toString()}`;
104
+ }
105
+ /**
106
+ * Realiza una petición POST con body URL-encoded
107
+ */
108
+ export async function postFetcher(url, body) {
109
+ const response = await fetch(url, {
110
+ method: 'POST',
111
+ headers: {
112
+ 'Content-Type': 'application/x-www-form-urlencoded'
113
+ },
114
+ body
115
+ });
116
+ if (!response.ok) {
117
+ throw new Error(`HTTP Error: ${response.status} ${response.statusText}`);
118
+ }
119
+ const data = await response.json();
120
+ if (data.error) {
121
+ throw new Error(`Last.fm API Error ${data.error}: ${data.message}`);
122
+ }
123
+ return data;
124
+ }
125
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,156 @@
1
+ {
2
+ "name": "@ansango/lastfm-api",
3
+ "version": "3.1.3",
4
+ "description": "A universal Last.fm API client for Node.js and Browser",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ },
13
+ "./user": {
14
+ "import": "./dist/entrypoints/user.js",
15
+ "types": "./dist/entrypoints/user.d.ts"
16
+ },
17
+ "./user/schemas": {
18
+ "import": "./dist/entrypoints/user.schemas.js",
19
+ "types": "./dist/entrypoints/user.schemas.d.ts"
20
+ },
21
+ "./album": {
22
+ "import": "./dist/entrypoints/album.js",
23
+ "types": "./dist/entrypoints/album.d.ts"
24
+ },
25
+ "./album/schemas": {
26
+ "import": "./dist/entrypoints/album.schemas.js",
27
+ "types": "./dist/entrypoints/album.schemas.d.ts"
28
+ },
29
+ "./artist": {
30
+ "import": "./dist/entrypoints/artist.js",
31
+ "types": "./dist/entrypoints/artist.d.ts"
32
+ },
33
+ "./artist/schemas": {
34
+ "import": "./dist/entrypoints/artist.schemas.js",
35
+ "types": "./dist/entrypoints/artist.schemas.d.ts"
36
+ },
37
+ "./track": {
38
+ "import": "./dist/entrypoints/track.js",
39
+ "types": "./dist/entrypoints/track.d.ts"
40
+ },
41
+ "./track/schemas": {
42
+ "import": "./dist/entrypoints/track.schemas.js",
43
+ "types": "./dist/entrypoints/track.schemas.d.ts"
44
+ },
45
+ "./tag": {
46
+ "import": "./dist/entrypoints/tag.js",
47
+ "types": "./dist/entrypoints/tag.d.ts"
48
+ },
49
+ "./tag/schemas": {
50
+ "import": "./dist/entrypoints/tag.schemas.js",
51
+ "types": "./dist/entrypoints/tag.schemas.d.ts"
52
+ },
53
+ "./chart": {
54
+ "import": "./dist/entrypoints/chart.js",
55
+ "types": "./dist/entrypoints/chart.d.ts"
56
+ },
57
+ "./chart/schemas": {
58
+ "import": "./dist/entrypoints/chart.schemas.js",
59
+ "types": "./dist/entrypoints/chart.schemas.d.ts"
60
+ },
61
+ "./geo": {
62
+ "import": "./dist/entrypoints/geo.js",
63
+ "types": "./dist/entrypoints/geo.d.ts"
64
+ },
65
+ "./geo/schemas": {
66
+ "import": "./dist/entrypoints/geo.schemas.js",
67
+ "types": "./dist/entrypoints/geo.schemas.d.ts"
68
+ },
69
+ "./library": {
70
+ "import": "./dist/entrypoints/library.js",
71
+ "types": "./dist/entrypoints/library.d.ts"
72
+ },
73
+ "./library/schemas": {
74
+ "import": "./dist/entrypoints/library.schemas.js",
75
+ "types": "./dist/entrypoints/library.schemas.d.ts"
76
+ },
77
+ "./auth": {
78
+ "import": "./dist/entrypoints/auth.js",
79
+ "types": "./dist/entrypoints/auth.d.ts"
80
+ },
81
+ "./auth/schemas": {
82
+ "import": "./dist/entrypoints/auth.schemas.js",
83
+ "types": "./dist/entrypoints/auth.schemas.d.ts"
84
+ },
85
+ "./schemas": {
86
+ "import": "./dist/entrypoints/base.schemas.js",
87
+ "types": "./dist/entrypoints/base.schemas.d.ts"
88
+ }
89
+ },
90
+ "files": [
91
+ "dist",
92
+ "README.md",
93
+ "LICENSE",
94
+ "CHANGELOG.md"
95
+ ],
96
+ "engines": {
97
+ "node": ">=20.0.0"
98
+ },
99
+ "scripts": {
100
+ "build": "rimraf dist && tsc",
101
+ "clean": "rimraf dist",
102
+ "dev": "bun run clean && tsc --watch --project tsconfig.dev.json",
103
+ "test": "bun test-real.ts",
104
+ "prepublishOnly": "bun run build",
105
+ "changelog": "bun scripts/changelog.ts",
106
+ "release": "bun scripts/release.ts",
107
+ "release:patch": "bun scripts/release.ts patch",
108
+ "release:minor": "bun scripts/release.ts minor",
109
+ "release:major": "bun scripts/release.ts major",
110
+ "release:alpha": "bun scripts/release.ts alpha",
111
+ "release:beta": "bun scripts/release.ts beta",
112
+ "gh:release": "bun scripts/github-release.ts"
113
+ },
114
+ "repository": {
115
+ "type": "git",
116
+ "url": "git+https://github.com/ansango/lastfm-api.git"
117
+ },
118
+ "homepage": "https://github.com/ansango/lastfm-api#readme",
119
+ "bugs": {
120
+ "url": "https://github.com/ansango/lastfm-api/issues"
121
+ },
122
+ "publishConfig": {
123
+ "access": "public"
124
+ },
125
+ "author": "Anibal Santos",
126
+ "license": "MIT",
127
+ "keywords": [
128
+ "client",
129
+ "last-fm",
130
+ "lastfm",
131
+ "nodejs",
132
+ "api",
133
+ "node",
134
+ "typescript",
135
+ "browser",
136
+ "universal",
137
+ "esm",
138
+ "zod",
139
+ "validation"
140
+ ],
141
+ "dependencies": {
142
+ "js-md5": "^0.8.3",
143
+ "zod": "4.1.12"
144
+ },
145
+ "devDependencies": {
146
+ "@types/node": "^24.10.0",
147
+ "dotenv": "^17.2.3",
148
+ "rimraf": "^6.1.0",
149
+ "typescript": "^5.9.3"
150
+ },
151
+ "config": {
152
+ "commitizen": {
153
+ "path": "./node_modules/cz-conventional-changelog"
154
+ }
155
+ }
156
+ }