@ansango/lastfm-api 3.1.3 → 3.2.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 (168) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +165 -15
  3. package/dist/client.d.ts +1 -1
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +2 -2
  6. package/dist/client.js.map +1 -1
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +2 -2
  9. package/dist/config.js.map +1 -1
  10. package/dist/entrypoints/album.d.ts +1 -1
  11. package/dist/entrypoints/album.d.ts.map +1 -1
  12. package/dist/entrypoints/album.js.map +1 -1
  13. package/dist/entrypoints/album.schemas.d.ts.map +1 -1
  14. package/dist/entrypoints/album.schemas.js.map +1 -1
  15. package/dist/entrypoints/artist.d.ts +1 -1
  16. package/dist/entrypoints/artist.d.ts.map +1 -1
  17. package/dist/entrypoints/artist.js.map +1 -1
  18. package/dist/entrypoints/artist.schemas.d.ts.map +1 -1
  19. package/dist/entrypoints/artist.schemas.js.map +1 -1
  20. package/dist/entrypoints/auth.d.ts +1 -1
  21. package/dist/entrypoints/auth.d.ts.map +1 -1
  22. package/dist/entrypoints/auth.js.map +1 -1
  23. package/dist/entrypoints/auth.schemas.d.ts.map +1 -1
  24. package/dist/entrypoints/auth.schemas.js.map +1 -1
  25. package/dist/entrypoints/base.schemas.d.ts.map +1 -1
  26. package/dist/entrypoints/base.schemas.js.map +1 -1
  27. package/dist/entrypoints/chart.d.ts +1 -1
  28. package/dist/entrypoints/chart.d.ts.map +1 -1
  29. package/dist/entrypoints/chart.js.map +1 -1
  30. package/dist/entrypoints/chart.schemas.d.ts.map +1 -1
  31. package/dist/entrypoints/chart.schemas.js.map +1 -1
  32. package/dist/entrypoints/geo.d.ts.map +1 -1
  33. package/dist/entrypoints/geo.js.map +1 -1
  34. package/dist/entrypoints/geo.schemas.d.ts.map +1 -1
  35. package/dist/entrypoints/geo.schemas.js.map +1 -1
  36. package/dist/entrypoints/library.d.ts.map +1 -1
  37. package/dist/entrypoints/library.js.map +1 -1
  38. package/dist/entrypoints/library.schemas.d.ts.map +1 -1
  39. package/dist/entrypoints/library.schemas.js.map +1 -1
  40. package/dist/entrypoints/tag.d.ts.map +1 -1
  41. package/dist/entrypoints/tag.js.map +1 -1
  42. package/dist/entrypoints/tag.schemas.d.ts.map +1 -1
  43. package/dist/entrypoints/tag.schemas.js.map +1 -1
  44. package/dist/entrypoints/track.d.ts.map +1 -1
  45. package/dist/entrypoints/track.js.map +1 -1
  46. package/dist/entrypoints/track.schemas.d.ts.map +1 -1
  47. package/dist/entrypoints/track.schemas.js.map +1 -1
  48. package/dist/entrypoints/user.d.ts.map +1 -1
  49. package/dist/entrypoints/user.js.map +1 -1
  50. package/dist/entrypoints/user.schemas.d.ts.map +1 -1
  51. package/dist/entrypoints/user.schemas.js.map +1 -1
  52. package/dist/index.d.ts +18 -18
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +10 -10
  55. package/dist/index.js.map +1 -1
  56. package/dist/services/album.d.ts +43 -1
  57. package/dist/services/album.d.ts.map +1 -1
  58. package/dist/services/album.js +35 -2
  59. package/dist/services/album.js.map +1 -1
  60. package/dist/services/album.schemas.d.ts +51 -12
  61. package/dist/services/album.schemas.d.ts.map +1 -1
  62. package/dist/services/album.schemas.js +48 -10
  63. package/dist/services/album.schemas.js.map +1 -1
  64. package/dist/services/artist.d.ts +50 -1
  65. package/dist/services/artist.d.ts.map +1 -1
  66. package/dist/services/artist.js +34 -2
  67. package/dist/services/artist.js.map +1 -1
  68. package/dist/services/artist.schemas.d.ts +99 -25
  69. package/dist/services/artist.schemas.d.ts.map +1 -1
  70. package/dist/services/artist.schemas.js +125 -60
  71. package/dist/services/artist.schemas.js.map +1 -1
  72. package/dist/services/auth.d.ts +72 -1
  73. package/dist/services/auth.d.ts.map +1 -1
  74. package/dist/services/auth.js +37 -2
  75. package/dist/services/auth.js.map +1 -1
  76. package/dist/services/auth.schemas.d.ts +23 -1
  77. package/dist/services/auth.schemas.d.ts.map +1 -1
  78. package/dist/services/auth.schemas.js +20 -2
  79. package/dist/services/auth.schemas.js.map +1 -1
  80. package/dist/services/chart.d.ts +1 -1
  81. package/dist/services/chart.d.ts.map +1 -1
  82. package/dist/services/chart.js +2 -2
  83. package/dist/services/chart.js.map +1 -1
  84. package/dist/services/chart.schemas.d.ts +6 -6
  85. package/dist/services/chart.schemas.d.ts.map +1 -1
  86. package/dist/services/chart.schemas.js +21 -21
  87. package/dist/services/chart.schemas.js.map +1 -1
  88. package/dist/services/geo.d.ts +1 -1
  89. package/dist/services/geo.d.ts.map +1 -1
  90. package/dist/services/geo.js +2 -2
  91. package/dist/services/geo.js.map +1 -1
  92. package/dist/services/geo.schemas.d.ts +6 -6
  93. package/dist/services/geo.schemas.d.ts.map +1 -1
  94. package/dist/services/geo.schemas.js +17 -17
  95. package/dist/services/geo.schemas.js.map +1 -1
  96. package/dist/services/index.d.ts +12 -12
  97. package/dist/services/index.d.ts.map +1 -1
  98. package/dist/services/index.js +13 -13
  99. package/dist/services/index.js.map +1 -1
  100. package/dist/services/library.d.ts +1 -1
  101. package/dist/services/library.d.ts.map +1 -1
  102. package/dist/services/library.js +2 -2
  103. package/dist/services/library.js.map +1 -1
  104. package/dist/services/library.schemas.d.ts +3 -3
  105. package/dist/services/library.schemas.d.ts.map +1 -1
  106. package/dist/services/library.schemas.js +8 -8
  107. package/dist/services/library.schemas.js.map +1 -1
  108. package/dist/services/schemas/base.entities.schemas.d.ts +3 -3
  109. package/dist/services/schemas/base.entities.schemas.d.ts.map +1 -1
  110. package/dist/services/schemas/base.entities.schemas.js +9 -9
  111. package/dist/services/schemas/base.entities.schemas.js.map +1 -1
  112. package/dist/services/schemas/base.entity-names.schemas.d.ts +1 -1
  113. package/dist/services/schemas/base.entity-names.schemas.d.ts.map +1 -1
  114. package/dist/services/schemas/base.entity-names.schemas.js +1 -1
  115. package/dist/services/schemas/base.entity-names.schemas.js.map +1 -1
  116. package/dist/services/schemas/base.metadata.schemas.d.ts +1 -1
  117. package/dist/services/schemas/base.metadata.schemas.d.ts.map +1 -1
  118. package/dist/services/schemas/base.metadata.schemas.js +1 -1
  119. package/dist/services/schemas/base.metadata.schemas.js.map +1 -1
  120. package/dist/services/schemas/base.pagination.schemas.d.ts +1 -1
  121. package/dist/services/schemas/base.pagination.schemas.d.ts.map +1 -1
  122. package/dist/services/schemas/base.pagination.schemas.js +1 -1
  123. package/dist/services/schemas/base.pagination.schemas.js.map +1 -1
  124. package/dist/services/schemas/base.primitives.schemas.d.ts +3 -1
  125. package/dist/services/schemas/base.primitives.schemas.d.ts.map +1 -1
  126. package/dist/services/schemas/base.primitives.schemas.js +8 -7
  127. package/dist/services/schemas/base.primitives.schemas.js.map +1 -1
  128. package/dist/services/schemas/index.d.ts +5 -5
  129. package/dist/services/schemas/index.d.ts.map +1 -1
  130. package/dist/services/schemas/index.js +5 -5
  131. package/dist/services/schemas/index.js.map +1 -1
  132. package/dist/services/tag.d.ts +1 -1
  133. package/dist/services/tag.d.ts.map +1 -1
  134. package/dist/services/tag.js +2 -2
  135. package/dist/services/tag.js.map +1 -1
  136. package/dist/services/tag.schemas.d.ts +13 -13
  137. package/dist/services/tag.schemas.d.ts.map +1 -1
  138. package/dist/services/tag.schemas.js +50 -50
  139. package/dist/services/tag.schemas.js.map +1 -1
  140. package/dist/services/track.d.ts +128 -4
  141. package/dist/services/track.d.ts.map +1 -1
  142. package/dist/services/track.js +79 -10
  143. package/dist/services/track.js.map +1 -1
  144. package/dist/services/track.schemas.d.ts +213 -25
  145. package/dist/services/track.schemas.d.ts.map +1 -1
  146. package/dist/services/track.schemas.js +206 -57
  147. package/dist/services/track.schemas.js.map +1 -1
  148. package/dist/services/track.utils.d.ts +16 -7
  149. package/dist/services/track.utils.d.ts.map +1 -1
  150. package/dist/services/track.utils.js +49 -48
  151. package/dist/services/track.utils.js.map +1 -1
  152. package/dist/services/user.d.ts +19 -1
  153. package/dist/services/user.d.ts.map +1 -1
  154. package/dist/services/user.js +3 -2
  155. package/dist/services/user.js.map +1 -1
  156. package/dist/services/user.schemas.d.ts +321 -63
  157. package/dist/services/user.schemas.d.ts.map +1 -1
  158. package/dist/services/user.schemas.js +197 -88
  159. package/dist/services/user.schemas.js.map +1 -1
  160. package/dist/utils.d.ts +37 -2
  161. package/dist/utils.d.ts.map +1 -1
  162. package/dist/utils.js +105 -20
  163. package/dist/utils.js.map +1 -1
  164. package/package.json +167 -154
  165. package/dist/__tests__/utils.test.d.ts +0 -2
  166. package/dist/__tests__/utils.test.d.ts.map +0 -1
  167. package/dist/__tests__/utils.test.js +0 -86
  168. package/dist/__tests__/utils.test.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,26 +1,26 @@
1
- export { createConfig, getGlobalConfig, setGlobalConfig, resetGlobalConfig, type LastFmConfig } from './config.js';
2
- export { LastFmClient, createClient } from './client.js';
3
- export { createUserService, createAlbumService, createArtistService, createTrackService, createTagService, createChartService, createGeoService, createLibraryService, createAuthService } from './services/index.js';
4
- export type { UserService, AlbumService, ArtistService, TrackService, TagService, ChartService, GeoService, LibraryService, AuthService } from './services/index.js';
5
- export type * from './services/user.schemas.js';
1
+ export { createClient, LastFmClient } from './client.js';
2
+ export { createConfig, getGlobalConfig, type LastFmConfig, resetGlobalConfig, setGlobalConfig, } from './config.js';
6
3
  export type * from './services/album.schemas.js';
7
- export type * from './services/artist.schemas.js';
8
- export type * from './services/track.schemas.js';
9
- export type * from './services/tag.schemas.js';
10
- export type * from './services/chart.schemas.js';
11
- export type * from './services/geo.schemas.js';
12
- export type * from './services/library.schemas.js';
13
- export type * from './services/auth.schemas.js';
14
- export type * from './services/schemas/index.js';
15
- export * from './services/user.schemas.js';
16
4
  export * from './services/album.schemas.js';
5
+ export type * from './services/artist.schemas.js';
17
6
  export * from './services/artist.schemas.js';
18
- export * from './services/track.schemas.js';
19
- export * from './services/tag.schemas.js';
7
+ export type * from './services/auth.schemas.js';
8
+ export * from './services/auth.schemas.js';
9
+ export type * from './services/chart.schemas.js';
20
10
  export * from './services/chart.schemas.js';
11
+ export type * from './services/geo.schemas.js';
21
12
  export * from './services/geo.schemas.js';
13
+ export type { AlbumService, ArtistService, AuthService, ChartService, GeoService, LibraryService, TagService, TrackService, UserService, } from './services/index.js';
14
+ export { createAlbumService, createArtistService, createAuthService, createChartService, createGeoService, createLibraryService, createTagService, createTrackService, createUserService, } from './services/index.js';
15
+ export type * from './services/library.schemas.js';
22
16
  export * from './services/library.schemas.js';
23
- export * from './services/auth.schemas.js';
17
+ export type * from './services/schemas/index.js';
24
18
  export * from './services/schemas/index.js';
25
- export { fetcher, buildUrl, generateSignature, buildAuthUrl, parseLastFmResponse, LastFmApiError } from './utils.js';
19
+ export type * from './services/tag.schemas.js';
20
+ export * from './services/tag.schemas.js';
21
+ export type * from './services/track.schemas.js';
22
+ export * from './services/track.schemas.js';
23
+ export type * from './services/user.schemas.js';
24
+ export * from './services/user.schemas.js';
25
+ export { buildAuthUrl, buildUrl, fetcher, generateSignature, LastFmApiError, parseLastFmResponse } from './utils.js';
26
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACN,YAAY,EACZ,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,KAAK,YAAY,EACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EACX,WAAW,EACX,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,WAAW,EACX,MAAM,qBAAqB,CAAC;AAG7B,mBAAmB,4BAA4B,CAAC;AAChD,mBAAmB,6BAA6B,CAAC;AACjD,mBAAmB,8BAA8B,CAAC;AAClD,mBAAmB,6BAA6B,CAAC;AACjD,mBAAmB,2BAA2B,CAAC;AAC/C,mBAAmB,6BAA6B,CAAC;AACjD,mBAAmB,2BAA2B,CAAC;AAC/C,mBAAmB,+BAA+B,CAAC;AACnD,mBAAmB,4BAA4B,CAAC;AAChD,mBAAmB,6BAA6B,CAAC;AAGjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAG5C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EACN,YAAY,EACZ,eAAe,EACf,KAAK,YAAY,EACjB,iBAAiB,EACjB,eAAe,GACf,MAAM,aAAa,CAAA;AACpB,mBAAmB,6BAA6B,CAAA;AAChD,cAAc,6BAA6B,CAAA;AAC3C,mBAAmB,8BAA8B,CAAA;AACjD,cAAc,8BAA8B,CAAA;AAC5C,mBAAmB,4BAA4B,CAAA;AAC/C,cAAc,4BAA4B,CAAA;AAC1C,mBAAmB,6BAA6B,CAAA;AAChD,cAAc,6BAA6B,CAAA;AAC3C,mBAAmB,2BAA2B,CAAA;AAC9C,cAAc,2BAA2B,CAAA;AAEzC,YAAY,EACX,YAAY,EACZ,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,WAAW,GACX,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACN,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,GACjB,MAAM,qBAAqB,CAAA;AAC5B,mBAAmB,+BAA+B,CAAA;AAClD,cAAc,+BAA+B,CAAA;AAC7C,mBAAmB,6BAA6B,CAAA;AAChD,cAAc,6BAA6B,CAAA;AAC3C,mBAAmB,2BAA2B,CAAA;AAC9C,cAAc,2BAA2B,CAAA;AACzC,mBAAmB,6BAA6B,CAAA;AAChD,cAAc,6BAA6B,CAAA;AAE3C,mBAAmB,4BAA4B,CAAA;AAE/C,cAAc,4BAA4B,CAAA;AAG1C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -1,20 +1,20 @@
1
1
  // Configuration
2
- export { createConfig, getGlobalConfig, setGlobalConfig, resetGlobalConfig } from './config.js';
3
2
  // Client principal
4
- export { LastFmClient, createClient } from './client.js';
5
- // Servicios (para uso avanzado)
6
- export { createUserService, createAlbumService, createArtistService, createTrackService, createTagService, createChartService, createGeoService, createLibraryService, createAuthService } from './services/index.js';
7
- // Schemas de Zod (para validación)
8
- export * from './services/user.schemas.js';
3
+ export { createClient, LastFmClient } from './client.js';
4
+ export { createConfig, getGlobalConfig, resetGlobalConfig, setGlobalConfig, } from './config.js';
9
5
  export * from './services/album.schemas.js';
10
6
  export * from './services/artist.schemas.js';
11
- export * from './services/track.schemas.js';
12
- export * from './services/tag.schemas.js';
7
+ export * from './services/auth.schemas.js';
13
8
  export * from './services/chart.schemas.js';
14
9
  export * from './services/geo.schemas.js';
10
+ // Servicios (para uso avanzado)
11
+ export { createAlbumService, createArtistService, createAuthService, createChartService, createGeoService, createLibraryService, createTagService, createTrackService, createUserService, } from './services/index.js';
15
12
  export * from './services/library.schemas.js';
16
- export * from './services/auth.schemas.js';
17
13
  export * from './services/schemas/index.js';
14
+ export * from './services/tag.schemas.js';
15
+ export * from './services/track.schemas.js';
16
+ // Schemas de Zod (para validación)
17
+ export * from './services/user.schemas.js';
18
18
  // Utilidades (para casos avanzados)
19
- export { fetcher, buildUrl, generateSignature, buildAuthUrl, parseLastFmResponse, LastFmApiError } from './utils.js';
19
+ export { buildAuthUrl, buildUrl, fetcher, generateSignature, LastFmApiError, parseLastFmResponse } from './utils.js';
20
20
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,OAAO,EACN,YAAY,EACZ,eAAe,EACf,eAAe,EACf,iBAAiB,EAEjB,MAAM,aAAa,CAAC;AAErB,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEzD,gCAAgC;AAChC,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,MAAM,qBAAqB,CAAC;AA2B7B,mCAAmC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAE5C,oCAAoC;AACpC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAEhB,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EACN,YAAY,EACZ,eAAe,EAEf,iBAAiB,EACjB,eAAe,GACf,MAAM,aAAa,CAAA;AAEpB,cAAc,6BAA6B,CAAA;AAE3C,cAAc,8BAA8B,CAAA;AAE5C,cAAc,4BAA4B,CAAA;AAE1C,cAAc,6BAA6B,CAAA;AAE3C,cAAc,2BAA2B,CAAA;AAazC,gCAAgC;AAChC,OAAO,EACN,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,GACjB,MAAM,qBAAqB,CAAA;AAE5B,cAAc,+BAA+B,CAAA;AAE7C,cAAc,6BAA6B,CAAA;AAE3C,cAAc,2BAA2B,CAAA;AAEzC,cAAc,6BAA6B,CAAA;AAG3C,mCAAmC;AACnC,cAAc,4BAA4B,CAAA;AAE1C,oCAAoC;AACpC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import type { LastFmConfig } from '../config.js';
2
- import type { AlbumGetInfoRequest, AlbumGetInfoResponse, AlbumGetTagsRequest, AlbumGetTagsResponse, AlbumGetTopTagsRequest, AlbumGetTopTagsResponse, AlbumSearchRequest, AlbumSearchResponse } from './album.schemas.js';
2
+ import type { AlbumAddTagsRequest, AlbumGetInfoRequest, AlbumGetInfoResponse, AlbumGetTagsRequest, AlbumGetTagsResponse, AlbumGetTopTagsRequest, AlbumGetTopTagsResponse, AlbumRemoveTagRequest, AlbumSearchRequest, AlbumSearchResponse } from './album.schemas.js';
3
3
  export interface AlbumService {
4
4
  /**
5
5
  * Get the metadata for an album on Last.fm using the album name or a musicbrainz id.
@@ -33,6 +33,48 @@ export interface AlbumService {
33
33
  * https://www.last.fm/api/show/album.search
34
34
  */
35
35
  search: (params: AlbumSearchRequest, init?: RequestInit) => Promise<AlbumSearchResponse>;
36
+ /**
37
+ * Add one or more personal tags to an album. Requires an
38
+ * authenticated session.
39
+ *
40
+ * The `tags` array is sent on the wire as a comma-separated string
41
+ * (Last.fm convention). Returns when the call has been accepted by
42
+ * Last.fm.
43
+ *
44
+ * Idempotency is not guaranteed by Last.fm; calling twice may add
45
+ * the same tag twice if the previous run is reported as ignored.
46
+ *
47
+ * **Authentication:** pass `sk` in `params.sk` (preferred for ad-hoc
48
+ * calls) or set `sessionKey` on the `LastFmConfig` when constructing
49
+ * the client (preferred for long-lived clients). Obtain a session key
50
+ * via `auth.getToken` + the browser-based `auth.getSession` flow, or
51
+ * via `auth.getMobileSession` (mobile-class API keys only).
52
+ *
53
+ * @param {AlbumAddTagsRequest} params
54
+ * @param {RequestInit} init
55
+ * @returns {Promise<void>}
56
+ * https://www.last.fm/api/show/album.addTags
57
+ */
58
+ addTags: (params: AlbumAddTagsRequest, init?: RequestInit) => Promise<void>;
59
+ /**
60
+ * Remove a single personal tag from an album. Requires an
61
+ * authenticated session.
62
+ *
63
+ * Last.fm does not document idempotency for `album.removeTag`;
64
+ * removing an absent tag is a no-op or a server error depending
65
+ * on the live behaviour.
66
+ *
67
+ * **Authentication:** pass `sk` in `params.sk` (preferred for ad-hoc
68
+ * calls) or set `sessionKey` on the `LastFmConfig` when constructing
69
+ * the client. Obtain a session key via `auth.getToken` +
70
+ * `auth.getSession`, or `auth.getMobileSession` (mobile-class only).
71
+ *
72
+ * @param {AlbumRemoveTagRequest} params
73
+ * @param {RequestInit} init
74
+ * @returns {Promise<void>}
75
+ * https://www.last.fm/api/show/album.removeTag
76
+ */
77
+ removeTag: (params: AlbumRemoveTagRequest, init?: RequestInit) => Promise<void>;
36
78
  }
37
79
  export declare function createAlbumService(config: LastFmConfig): AlbumService;
38
80
  //# sourceMappingURL=album.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"album.d.ts","sourceRoot":"","sources":["../../src/services/album.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EACX,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,YAAY;IAC5B;;;;;;OAMG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC5F;;;;;;OAMG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC5F;;;;;;OAMG;IACH,UAAU,EAAE,CACX,MAAM,EAAE,sBAAsB,EAC9B,IAAI,CAAC,EAAE,WAAW,KACd,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACtC;;;;;;OAMG;IACH,MAAM,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACzF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAWrE"}
1
+ {"version":3,"file":"album.d.ts","sourceRoot":"","sources":["../../src/services/album.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,KAAK,EACX,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,oBAAoB,CAAA;AAE3B,MAAM,WAAW,YAAY;IAC5B;;;;;;OAMG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC3F;;;;;;OAMG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC3F;;;;;;OAMG;IACH,UAAU,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACpG;;;;;;OAMG;IACH,MAAM,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACxF;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3E;;;;;;;;;;;;;;;;;OAiBG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,qBAAqB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/E;AAiBD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAmCrE"}
@@ -1,10 +1,43 @@
1
- import { fetcher, buildUrl } from '../utils.js';
1
+ import { buildUrl, fetcher, LastFmApiError, signedPost } from '../utils.js';
2
+ function resolveSessionKeyForTagMutation(config, requestSk, action) {
3
+ const sk = requestSk ?? config.sessionKey;
4
+ if (!sk) {
5
+ throw new LastFmApiError(`A session key (\`sk\`) is required to album.${action}. Pass \`sk\` in the request params or set \`sessionKey\` on the LastFmConfig.`, 0);
6
+ }
7
+ return sk;
8
+ }
2
9
  export function createAlbumService(config) {
10
+ const addTagsImpl = (params, init) => {
11
+ const sk = resolveSessionKeyForTagMutation(config, params.sk, 'addTags');
12
+ return signedPost(config, 'album.addTags', {
13
+ params: {
14
+ artist: params.artist,
15
+ album: params.album,
16
+ tags: params.tags.join(','),
17
+ sk,
18
+ },
19
+ init,
20
+ }).then(() => undefined);
21
+ };
22
+ const removeTagImpl = (params, init) => {
23
+ const sk = resolveSessionKeyForTagMutation(config, params.sk, 'removeTag');
24
+ return signedPost(config, 'album.removeTag', {
25
+ params: {
26
+ artist: params.artist,
27
+ album: params.album,
28
+ tag: params.tag,
29
+ sk,
30
+ },
31
+ init,
32
+ }).then(() => undefined);
33
+ };
3
34
  return {
4
35
  getInfo: (params, init) => fetcher(buildUrl(config, 'album.getInfo', params), init),
5
36
  getTags: (params, init) => fetcher(buildUrl(config, 'album.getTags', params), init),
6
37
  getTopTags: (params, init) => fetcher(buildUrl(config, 'album.getTopTags', params), init),
7
- search: (params, init) => fetcher(buildUrl(config, 'album.search', params), init)
38
+ search: (params, init) => fetcher(buildUrl(config, 'album.search', params), init),
39
+ addTags: addTagsImpl,
40
+ removeTag: removeTagImpl,
8
41
  };
9
42
  }
10
43
  //# sourceMappingURL=album.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"album.js","sourceRoot":"","sources":["../../src/services/album.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAmDhD,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACtD,OAAO;QACN,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACzB,OAAO,CAAuB,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QAC/E,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACzB,OAAO,CAAuB,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QAC/E,UAAU,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAC5B,OAAO,CAA0B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QACrF,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACxB,OAAO,CAAsB,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;KAC7E,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"album.js","sourceRoot":"","sources":["../../src/services/album.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AA2F3E,SAAS,+BAA+B,CACvC,MAAoB,EACpB,SAA6B,EAC7B,MAA+B;IAE/B,MAAM,EAAE,GAAG,SAAS,IAAI,MAAM,CAAC,UAAU,CAAA;IACzC,IAAI,CAAC,EAAE,EAAE,CAAC;QACT,MAAM,IAAI,cAAc,CACvB,+CAA+C,MAAM,gFAAgF,EACrI,CAAC,CACD,CAAA;IACF,CAAC;IACD,OAAO,EAAE,CAAA;AACV,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACtD,MAAM,WAAW,GAAG,CAAC,MAA2B,EAAE,IAAkB,EAAE,EAAE;QACvE,MAAM,EAAE,GAAG,+BAA+B,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;QACxE,OAAO,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE;YAC1C,MAAM,EAAE;gBACP,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC3B,EAAE;aACF;YACD,IAAI;SACJ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IACzB,CAAC,CAAA;IAED,MAAM,aAAa,GAAG,CAAC,MAA6B,EAAE,IAAkB,EAAE,EAAE;QAC3E,MAAM,EAAE,GAAG,+BAA+B,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC,CAAA;QAC1E,OAAO,UAAU,CAAC,MAAM,EAAE,iBAAiB,EAAE;YAC5C,MAAM,EAAE;gBACP,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,EAAE;aACF;YACD,IAAI;SACJ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IACzB,CAAC,CAAA;IAED,OAAO;QACN,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAuB,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QACzG,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAuB,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QACzG,UAAU,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAA0B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QAClH,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAsB,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QACtG,OAAO,EAAE,WAAW;QACpB,SAAS,EAAE,aAAa;KACxB,CAAA;AACF,CAAC"}
@@ -1,4 +1,4 @@
1
- import { z } from "zod";
1
+ import { z } from 'zod';
2
2
  /**
3
3
  * Album
4
4
  * @see https://www.last.fm/api/show/album.getInfo
@@ -17,7 +17,7 @@ export declare const albumSchema: z.ZodObject<{
17
17
  }, z.core.$strip>;
18
18
  playcount: z.ZodString;
19
19
  image: z.ZodArray<z.ZodObject<{
20
- "#text": z.ZodString;
20
+ '#text': z.ZodString;
21
21
  size: z.ZodUnion<readonly [z.ZodLiteral<"small">, z.ZodLiteral<"medium">, z.ZodLiteral<"large">, z.ZodLiteral<"extralarge">, z.ZodLiteral<"mega">]>;
22
22
  }, z.core.$strip>>;
23
23
  tracks: z.ZodOptional<z.ZodObject<{
@@ -64,7 +64,7 @@ export declare const albumGetInfoResponseSchema: z.ZodObject<{
64
64
  }, z.core.$strip>;
65
65
  playcount: z.ZodString;
66
66
  image: z.ZodArray<z.ZodObject<{
67
- "#text": z.ZodString;
67
+ '#text': z.ZodString;
68
68
  size: z.ZodUnion<readonly [z.ZodLiteral<"small">, z.ZodLiteral<"medium">, z.ZodLiteral<"large">, z.ZodLiteral<"extralarge">, z.ZodLiteral<"mega">]>;
69
69
  }, z.core.$strip>>;
70
70
  tracks: z.ZodOptional<z.ZodObject<{
@@ -103,7 +103,7 @@ export declare const albumGetTagsResponseSchema: z.ZodObject<{
103
103
  url: z.ZodString;
104
104
  }, z.core.$strip>>;
105
105
  }, z.core.$strip>;
106
- "@attr": z.ZodObject<{
106
+ '@attr': z.ZodObject<{
107
107
  album: z.ZodString;
108
108
  artist: z.ZodString;
109
109
  }, z.core.$strip>;
@@ -121,7 +121,7 @@ export declare const albumGetTopTagsResponseSchema: z.ZodObject<{
121
121
  count: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
122
122
  }, z.core.$strip>>;
123
123
  }, z.core.$strip>;
124
- "@attr": z.ZodObject<{
124
+ '@attr': z.ZodObject<{
125
125
  album: z.ZodString;
126
126
  artist: z.ZodString;
127
127
  }, z.core.$strip>;
@@ -133,32 +133,68 @@ export declare const albumSearchRequestSchema: z.ZodObject<{
133
133
  }, z.core.$strip>;
134
134
  export declare const albumSearchResponseSchema: z.ZodObject<{
135
135
  results: z.ZodObject<{
136
- "opensearch:Query": z.ZodObject<{
137
- "#text": z.ZodString;
136
+ 'opensearch:Query': z.ZodObject<{
137
+ '#text': z.ZodString;
138
138
  role: z.ZodString;
139
139
  searchTerms: z.ZodString;
140
140
  startPage: z.ZodString;
141
141
  }, z.core.$strip>;
142
- "opensearch:totalResults": z.ZodString;
143
- "opensearch:startIndex": z.ZodString;
144
- "opensearch:itemsPerPage": z.ZodString;
142
+ 'opensearch:totalResults': z.ZodString;
143
+ 'opensearch:startIndex': z.ZodString;
144
+ 'opensearch:itemsPerPage': z.ZodString;
145
145
  albummatches: z.ZodObject<{
146
146
  album: z.ZodArray<z.ZodObject<{
147
147
  name: z.ZodString;
148
148
  artist: z.ZodString;
149
149
  url: z.ZodString;
150
150
  image: z.ZodArray<z.ZodObject<{
151
- "#text": z.ZodString;
151
+ '#text': z.ZodString;
152
152
  size: z.ZodUnion<readonly [z.ZodLiteral<"small">, z.ZodLiteral<"medium">, z.ZodLiteral<"large">, z.ZodLiteral<"extralarge">, z.ZodLiteral<"mega">]>;
153
153
  }, z.core.$strip>>;
154
154
  mbid: z.ZodString;
155
155
  }, z.core.$strip>>;
156
156
  }, z.core.$strip>;
157
- "@attr": z.ZodObject<{
157
+ '@attr': z.ZodObject<{
158
158
  for: z.ZodString;
159
159
  }, z.core.$strip>;
160
160
  }, z.core.$strip>;
161
161
  }, z.core.$strip>;
162
+ /**
163
+ * Maximum number of tags accepted by `album.addTags` per the Last.fm
164
+ * API. The docs are not explicit about the limit on `album.addTags`
165
+ * specifically, but it matches the documented `track.addTags` /
166
+ * `artist.addTags` cap.
167
+ */
168
+ export declare const MAX_ALBUM_TAGS_PER_ADD = 10;
169
+ /**
170
+ * Request shape for `album.addTags`. The `tags` array is sent on the
171
+ * wire as a comma-separated string and validated to at most
172
+ * `MAX_ALBUM_TAGS_PER_ADD` entries.
173
+ * https://www.last.fm/api/show/album.addTags
174
+ */
175
+ export declare const albumAddTagsRequestSchema: z.ZodObject<{
176
+ artist: z.ZodString;
177
+ album: z.ZodString;
178
+ tags: z.ZodArray<z.ZodString>;
179
+ sk: z.ZodOptional<z.ZodString>;
180
+ }, z.core.$strip>;
181
+ /**
182
+ * Request shape for `album.removeTag`. A single tag is removed per
183
+ * call.
184
+ * https://www.last.fm/api/show/album.removeTag
185
+ */
186
+ export declare const albumRemoveTagRequestSchema: z.ZodObject<{
187
+ artist: z.ZodString;
188
+ album: z.ZodString;
189
+ tag: z.ZodString;
190
+ sk: z.ZodOptional<z.ZodString>;
191
+ }, z.core.$strip>;
192
+ /**
193
+ * Empty success payload for the void tag-mutation methods. The Last.fm
194
+ * response has no useful domain content, so the schema accepts any
195
+ * shape and we expose the inferred type as `void` at the call site.
196
+ */
197
+ export declare const albumTagMutationResponseSchema: z.ZodUnknown;
162
198
  export type Album = z.infer<typeof albumSchema>;
163
199
  export type AlbumGetInfoRequest = z.infer<typeof albumGetInfoRequestSchema>;
164
200
  export type AlbumGetInfoResponse = z.infer<typeof albumGetInfoResponseSchema>;
@@ -168,4 +204,7 @@ export type AlbumGetTopTagsRequest = z.infer<typeof albumGetTopTagsRequestSchema
168
204
  export type AlbumGetTopTagsResponse = z.infer<typeof albumGetTopTagsResponseSchema>;
169
205
  export type AlbumSearchRequest = z.infer<typeof albumSearchRequestSchema>;
170
206
  export type AlbumSearchResponse = z.infer<typeof albumSearchResponseSchema>;
207
+ export type AlbumAddTagsRequest = z.infer<typeof albumAddTagsRequestSchema>;
208
+ export type AlbumRemoveTagRequest = z.infer<typeof albumRemoveTagRequestSchema>;
209
+ export type AlbumTagMutationResponse = z.infer<typeof albumTagMutationResponseSchema>;
171
210
  //# sourceMappingURL=album.schemas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"album.schemas.d.ts","sourceRoot":"","sources":["../../src/services/album.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsExB;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAYtB,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;iBAMpC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAErC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;iBAKpC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;iBAarC,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;iBAIvC,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;iBAcxC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;iBAInC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA0BpC,CAAC;AAGH,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAClF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACpF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
1
+ {"version":3,"file":"album.schemas.d.ts","sourceRoot":"","sources":["../../src/services/album.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAsEvB;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAYtB,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;;;;iBAMpC,CAAA;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAErC,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;;;iBAKpC,CAAA;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;iBAarC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;iBAIvC,CAAA;AAEF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;iBAcxC,CAAA;AAEF,eAAO,MAAM,wBAAwB;;;;iBAInC,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA0BpC,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAA;AAExC;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB;;;;;iBAOpC,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,2BAA2B;;;;;iBAKtC,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,cAAc,CAAA;AAGzD,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAC/C,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAC7E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAC3E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAC7E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AACjF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AACnF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AACzE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAC3E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAC3E,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAC/E,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA"}
@@ -1,5 +1,5 @@
1
- import { z } from "zod";
2
- import { tagNameSchema, urlSchema, artistNameSchema, mbidSchema, durationSchema, nameSchema, publishedSchema, summarySchema, contentSchema, playcountSchema, imageSchema, albumNameSchema, listenersSchema, userNameSchema, langSchema, countSchema, limitSchema, pageSchema, textSchema, roleSchema, searchTermsSchema, startPageSchema, totalResultsSchema, startIndexSchema, itemsPerPageSchema, forSchema, } from "./schemas/index.js";
1
+ import { z } from 'zod';
2
+ import { albumNameSchema, artistNameSchema, contentSchema, countSchema, durationSchema, forSchema, imageSchema, itemsPerPageSchema, langSchema, limitSchema, listenersSchema, mbidSchema, nameSchema, pageSchema, playcountSchema, publishedSchema, roleSchema, searchTermsSchema, startIndexSchema, startPageSchema, summarySchema, tagNameSchema, textSchema, totalResultsSchema, urlSchema, userNameSchema, } from './schemas/index.js';
3
3
  const albumTagSchema = z.object({
4
4
  tag: z
5
5
  .union([
@@ -72,7 +72,7 @@ export const albumGetTagsResponseSchema = z.object({
72
72
  url: urlSchema,
73
73
  })),
74
74
  }),
75
- "@attr": z.object({
75
+ '@attr': z.object({
76
76
  album: albumNameSchema,
77
77
  artist: artistNameSchema,
78
78
  }),
@@ -90,7 +90,7 @@ export const albumGetTopTagsResponseSchema = z.object({
90
90
  count: countSchema,
91
91
  })),
92
92
  }),
93
- "@attr": z.object({
93
+ '@attr': z.object({
94
94
  album: albumNameSchema,
95
95
  artist: artistNameSchema,
96
96
  }),
@@ -102,15 +102,15 @@ export const albumSearchRequestSchema = z.object({
102
102
  });
103
103
  export const albumSearchResponseSchema = z.object({
104
104
  results: z.object({
105
- "opensearch:Query": z.object({
106
- "#text": textSchema,
105
+ 'opensearch:Query': z.object({
106
+ '#text': textSchema,
107
107
  role: roleSchema,
108
108
  searchTerms: searchTermsSchema,
109
109
  startPage: startPageSchema,
110
110
  }),
111
- "opensearch:totalResults": totalResultsSchema,
112
- "opensearch:startIndex": startIndexSchema,
113
- "opensearch:itemsPerPage": itemsPerPageSchema,
111
+ 'opensearch:totalResults': totalResultsSchema,
112
+ 'opensearch:startIndex': startIndexSchema,
113
+ 'opensearch:itemsPerPage': itemsPerPageSchema,
114
114
  albummatches: z.object({
115
115
  album: z.array(z.object({
116
116
  name: albumNameSchema,
@@ -120,9 +120,47 @@ export const albumSearchResponseSchema = z.object({
120
120
  mbid: mbidSchema,
121
121
  })),
122
122
  }),
123
- "@attr": z.object({
123
+ '@attr': z.object({
124
124
  for: forSchema,
125
125
  }),
126
126
  }),
127
127
  });
128
+ /**
129
+ * Maximum number of tags accepted by `album.addTags` per the Last.fm
130
+ * API. The docs are not explicit about the limit on `album.addTags`
131
+ * specifically, but it matches the documented `track.addTags` /
132
+ * `artist.addTags` cap.
133
+ */
134
+ export const MAX_ALBUM_TAGS_PER_ADD = 10;
135
+ /**
136
+ * Request shape for `album.addTags`. The `tags` array is sent on the
137
+ * wire as a comma-separated string and validated to at most
138
+ * `MAX_ALBUM_TAGS_PER_ADD` entries.
139
+ * https://www.last.fm/api/show/album.addTags
140
+ */
141
+ export const albumAddTagsRequestSchema = z.object({
142
+ artist: artistNameSchema,
143
+ album: albumNameSchema,
144
+ tags: z.array(tagNameSchema).max(MAX_ALBUM_TAGS_PER_ADD, {
145
+ message: `album.addTags accepts at most ${MAX_ALBUM_TAGS_PER_ADD} tags per request`,
146
+ }),
147
+ sk: z.string().optional(),
148
+ });
149
+ /**
150
+ * Request shape for `album.removeTag`. A single tag is removed per
151
+ * call.
152
+ * https://www.last.fm/api/show/album.removeTag
153
+ */
154
+ export const albumRemoveTagRequestSchema = z.object({
155
+ artist: artistNameSchema,
156
+ album: albumNameSchema,
157
+ tag: tagNameSchema,
158
+ sk: z.string().optional(),
159
+ });
160
+ /**
161
+ * Empty success payload for the void tag-mutation methods. The Last.fm
162
+ * response has no useful domain content, so the schema accepts any
163
+ * shape and we expose the inferred type as `void` at the call site.
164
+ */
165
+ export const albumTagMutationResponseSchema = z.unknown();
128
166
  //# sourceMappingURL=album.schemas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"album.schemas.js","sourceRoot":"","sources":["../../src/services/album.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACN,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,UAAU,EACV,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EACf,WAAW,EACX,eAAe,EACf,eAAe,EACf,cAAc,EACd,UAAU,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,GACT,MAAM,oBAAoB,CAAC;AAE5B,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,GAAG,EAAE,CAAC;SACJ,KAAK,CAAC;QACN,CAAC,CAAC,KAAK,CACN,CAAC,CAAC,MAAM,CAAC;YACR,IAAI,EAAE,aAAa;YACnB,GAAG,EAAE,SAAS;SACd,CAAC,CACF;QACD,CAAC,CAAC,MAAM,CAAC;YACR,IAAI,EAAE,aAAa;YACnB,GAAG,EAAE,SAAS;SACd,CAAC;KACF,CAAC;SACD,QAAQ,EAAE;CACZ,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE,UAAU;IAChB,GAAG,EAAE,SAAS;CACd,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,KAAK,EAAE,CAAC,CAAC,KAAK,CACb,CAAC,CAAC,MAAM,CAAC;QACR,QAAQ,EAAE,cAAc;QACxB,IAAI,EAAE,UAAU;QAChB,GAAG,EAAE,SAAS;QACd,MAAM,EAAE,sBAAsB;KAC9B,CAAC,CACF;CACD,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,SAAS,EAAE,eAAe;IAC1B,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,aAAa;CACtB,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,gBAAgB;IACxB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,cAAc;IACpB,SAAS,EAAE,eAAe;IAC1B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;IAC3B,MAAM,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IACnC,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,eAAe;IACrB,SAAS,EAAE,eAAe;IAC1B,IAAI,EAAE,eAAe;IACrB,aAAa,EAAE,eAAe,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE,eAAe;IACtB,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;IAC3B,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;IACnC,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,KAAK,EAAE,WAAW;CAClB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE,eAAe;IACtB,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAE,cAAc;CACpB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,GAAG,EAAE,CAAC,CAAC,KAAK,CACX,CAAC,CAAC,MAAM,CAAC;YACR,IAAI,EAAE,aAAa;YACnB,GAAG,EAAE,SAAS;SACd,CAAC,CACF;KACD,CAAC;IACF,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,KAAK,EAAE,eAAe;QACtB,MAAM,EAAE,gBAAgB;KACxB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE,eAAe;IACtB,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,GAAG,EAAE,CAAC,CAAC,KAAK,CACX,CAAC,CAAC,MAAM,CAAC;YACR,IAAI,EAAE,aAAa;YACnB,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,WAAW;SAClB,CAAC,CACF;KACD,CAAC;IACF,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,KAAK,EAAE,eAAe;QACtB,MAAM,EAAE,gBAAgB;KACxB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,KAAK,EAAE,eAAe;IACtB,KAAK,EAAE,WAAW,CAAC,QAAQ,EAAE;IAC7B,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,kBAAkB,EAAE,CAAC,CAAC,MAAM,CAAC;YAC5B,OAAO,EAAE,UAAU;YACnB,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,iBAAiB;YAC9B,SAAS,EAAE,eAAe;SAC1B,CAAC;QACF,yBAAyB,EAAE,kBAAkB;QAC7C,uBAAuB,EAAE,gBAAgB;QACzC,yBAAyB,EAAE,kBAAkB;QAC7C,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC;YACtB,KAAK,EAAE,CAAC,CAAC,KAAK,CACb,CAAC,CAAC,MAAM,CAAC;gBACR,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,gBAAgB;gBACxB,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;gBAC3B,IAAI,EAAE,UAAU;aAChB,CAAC,CACF;SACD,CAAC;QACF,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;YACjB,GAAG,EAAE,SAAS;SACd,CAAC;KACF,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"album.schemas.js","sourceRoot":"","sources":["../../src/services/album.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,cAAc,EACd,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,eAAe,EACf,UAAU,EACV,UAAU,EACV,UAAU,EACV,eAAe,EACf,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,SAAS,EACT,cAAc,GACd,MAAM,oBAAoB,CAAA;AAE3B,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,GAAG,EAAE,CAAC;SACJ,KAAK,CAAC;QACN,CAAC,CAAC,KAAK,CACN,CAAC,CAAC,MAAM,CAAC;YACR,IAAI,EAAE,aAAa;YACnB,GAAG,EAAE,SAAS;SACd,CAAC,CACF;QACD,CAAC,CAAC,MAAM,CAAC;YACR,IAAI,EAAE,aAAa;YACnB,GAAG,EAAE,SAAS;SACd,CAAC;KACF,CAAC;SACD,QAAQ,EAAE;CACZ,CAAC,CAAA;AAEF,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE,UAAU;IAChB,GAAG,EAAE,SAAS;CACd,CAAC,CAAA;AAEF,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,KAAK,EAAE,CAAC,CAAC,KAAK,CACb,CAAC,CAAC,MAAM,CAAC;QACR,QAAQ,EAAE,cAAc;QACxB,IAAI,EAAE,UAAU;QAChB,GAAG,EAAE,SAAS;QACd,MAAM,EAAE,sBAAsB;KAC9B,CAAC,CACF;CACD,CAAC,CAAA;AAEF,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,SAAS,EAAE,eAAe;IAC1B,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,aAAa;CACtB,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,gBAAgB;IACxB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,cAAc;IACpB,SAAS,EAAE,eAAe;IAC1B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;IAC3B,MAAM,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IACnC,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,eAAe;IACrB,SAAS,EAAE,eAAe;IAC1B,IAAI,EAAE,eAAe;IACrB,aAAa,EAAE,eAAe,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE,eAAe;IACtB,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;IAC3B,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;IACnC,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,KAAK,EAAE,WAAW;CAClB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE,eAAe;IACtB,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAE,cAAc;CACpB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,GAAG,EAAE,CAAC,CAAC,KAAK,CACX,CAAC,CAAC,MAAM,CAAC;YACR,IAAI,EAAE,aAAa;YACnB,GAAG,EAAE,SAAS;SACd,CAAC,CACF;KACD,CAAC;IACF,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,KAAK,EAAE,eAAe;QACtB,MAAM,EAAE,gBAAgB;KACxB,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE,eAAe;IACtB,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,GAAG,EAAE,CAAC,CAAC,KAAK,CACX,CAAC,CAAC,MAAM,CAAC;YACR,IAAI,EAAE,aAAa;YACnB,GAAG,EAAE,SAAS;YACd,KAAK,EAAE,WAAW;SAClB,CAAC,CACF;KACD,CAAC;IACF,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,KAAK,EAAE,eAAe;QACtB,MAAM,EAAE,gBAAgB;KACxB,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,KAAK,EAAE,eAAe;IACtB,KAAK,EAAE,WAAW,CAAC,QAAQ,EAAE;IAC7B,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,kBAAkB,EAAE,CAAC,CAAC,MAAM,CAAC;YAC5B,OAAO,EAAE,UAAU;YACnB,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,iBAAiB;YAC9B,SAAS,EAAE,eAAe;SAC1B,CAAC;QACF,yBAAyB,EAAE,kBAAkB;QAC7C,uBAAuB,EAAE,gBAAgB;QACzC,yBAAyB,EAAE,kBAAkB;QAC7C,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC;YACtB,KAAK,EAAE,CAAC,CAAC,KAAK,CACb,CAAC,CAAC,MAAM,CAAC;gBACR,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,gBAAgB;gBACxB,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;gBAC3B,IAAI,EAAE,UAAU;aAChB,CAAC,CACF;SACD,CAAC;QACF,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;YACjB,GAAG,EAAE,SAAS;SACd,CAAC;KACF,CAAC;CACF,CAAC,CAAA;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAA;AAExC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE,eAAe;IACtB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,sBAAsB,EAAE;QACxD,OAAO,EAAE,iCAAiC,sBAAsB,mBAAmB;KACnF,CAAC;IACF,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACzB,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE,eAAe;IACtB,GAAG,EAAE,aAAa;IAClB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACzB,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,OAAO,EAAE,CAAA"}
@@ -1,5 +1,5 @@
1
- import type { ArtistGetInfoRequest, ArtistGetInfoResponse, ArtistGetTagsRequest, ArtistGetTagsResponse, ArtistGetTopAlbumsRequest, ArtistGetTopAlbumsResponse, ArtistGetTopTagsRequest, ArtistGetTopTagsResponse, ArtistGetTopTracksRequest, ArtistGetTopTracksResponse, ArtistSearchRequest, ArtistSearchResponse, ArtistGetSimilarRequest, ArtistGetSimilarResponse } from './artist.schemas.js';
2
1
  import type { LastFmConfig } from '../config.js';
2
+ import type { ArtistAddTagsRequest, ArtistGetCorrectionRequest, ArtistGetCorrectionResponse, ArtistGetInfoRequest, ArtistGetInfoResponse, ArtistGetSimilarRequest, ArtistGetSimilarResponse, ArtistGetTagsRequest, ArtistGetTagsResponse, ArtistGetTopAlbumsRequest, ArtistGetTopAlbumsResponse, ArtistGetTopTagsRequest, ArtistGetTopTagsResponse, ArtistGetTopTracksRequest, ArtistGetTopTracksResponse, ArtistRemoveTagRequest, ArtistSearchRequest, ArtistSearchResponse } from './artist.schemas.js';
3
3
  export interface ArtistService {
4
4
  /**
5
5
  * Get the metadata for an artist. Includes biography.
@@ -57,6 +57,55 @@ export interface ArtistService {
57
57
  * https://www.last.fm/api/show/artist.search
58
58
  * */
59
59
  search: (params: ArtistSearchRequest, init?: RequestInit) => Promise<ArtistSearchResponse>;
60
+ /**
61
+ * Get the canonical correction for a misspelled or noncanonical artist
62
+ * name. Returns the list of corrections Last.fm would apply to the
63
+ * provided input. Unsigned GET — no `sk` or `api_sig` are sent.
64
+ * @param {ArtistGetCorrectionRequest} params
65
+ * @param {RequestInit} init
66
+ * @returns {Promise<ArtistGetCorrectionResponse>}
67
+ * https://www.last.fm/api/show/artist.getCorrection
68
+ */
69
+ getCorrection: (params: ArtistGetCorrectionRequest, init?: RequestInit) => Promise<ArtistGetCorrectionResponse>;
70
+ /**
71
+ * Add one or more personal tags to an artist. Requires an
72
+ * authenticated session.
73
+ *
74
+ * The `tags` array is sent on the wire as a comma-separated string
75
+ * (Last.fm convention). Returns when the call has been accepted by
76
+ * Last.fm.
77
+ *
78
+ * Idempotency is not guaranteed by Last.fm.
79
+ *
80
+ * **Authentication:** pass `sk` in `params.sk` (preferred for ad-hoc
81
+ * calls) or set `sessionKey` on the `LastFmConfig` when constructing
82
+ * the client (preferred for long-lived clients). Obtain a session key
83
+ * via `auth.getToken` + the browser-based `auth.getSession` flow, or
84
+ * via `auth.getMobileSession` (mobile-class API keys only).
85
+ *
86
+ * @param {ArtistAddTagsRequest} params
87
+ * @param {RequestInit} init
88
+ * @returns {Promise<void>}
89
+ * https://www.last.fm/api/show/artist.addTags
90
+ */
91
+ addTags: (params: ArtistAddTagsRequest, init?: RequestInit) => Promise<void>;
92
+ /**
93
+ * Remove a single personal tag from an artist. Requires an
94
+ * authenticated session.
95
+ *
96
+ * Last.fm does not document idempotency for `artist.removeTag`.
97
+ *
98
+ * **Authentication:** pass `sk` in `params.sk` (preferred for ad-hoc
99
+ * calls) or set `sessionKey` on the `LastFmConfig` when constructing
100
+ * the client. Obtain a session key via `auth.getToken` +
101
+ * `auth.getSession`, or `auth.getMobileSession` (mobile-class only).
102
+ *
103
+ * @param {ArtistRemoveTagRequest} params
104
+ * @param {RequestInit} init
105
+ * @returns {Promise<void>}
106
+ * https://www.last.fm/api/show/artist.removeTag
107
+ */
108
+ removeTag: (params: ArtistRemoveTagRequest, init?: RequestInit) => Promise<void>;
60
109
  }
61
110
  export declare function createArtistService(config: LastFmConfig): ArtistService;
62
111
  //# sourceMappingURL=artist.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"artist.d.ts","sourceRoot":"","sources":["../../src/services/artist.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,WAAW,aAAa;IAC7B;;;;;;OAMG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC9F;;;;;;SAMK;IACL,OAAO,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC9F;;;;;;SAMK;IACL,UAAU,EAAE,CACX,MAAM,EAAE,uBAAuB,EAC/B,IAAI,CAAC,EAAE,WAAW,KACd,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACvC;;;;;;SAMK;IACL,UAAU,EAAE,CACX,MAAM,EAAE,uBAAuB,EAC/B,IAAI,CAAC,EAAE,WAAW,KACd,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACvC;;;;;;SAMK;IACL,YAAY,EAAE,CACb,MAAM,EAAE,yBAAyB,EACjC,IAAI,CAAC,EAAE,WAAW,KACd,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACzC;;;;;;SAMK;IACL,YAAY,EAAE,CACb,MAAM,EAAE,yBAAyB,EACjC,IAAI,CAAC,EAAE,WAAW,KACd,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACzC;;;;;;SAMK;IACL,MAAM,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAC3F;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,CAiBvE"}
1
+ {"version":3,"file":"artist.d.ts","sourceRoot":"","sources":["../../src/services/artist.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,KAAK,EACX,oBAAoB,EACpB,0BAA0B,EAC1B,2BAA2B,EAC3B,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,MAAM,qBAAqB,CAAA;AAE5B,MAAM,WAAW,aAAa;IAC7B;;;;;;OAMG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;IAC7F;;;;;;SAMK;IACL,OAAO,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;IAC7F;;;;;;SAMK;IACL,UAAU,EAAE,CAAC,MAAM,EAAE,uBAAuB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACtG;;;;;;SAMK;IACL,UAAU,EAAE,CAAC,MAAM,EAAE,uBAAuB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACtG;;;;;;SAMK;IACL,YAAY,EAAE,CAAC,MAAM,EAAE,yBAAyB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAA;IAC5G;;;;;;SAMK;IACL,YAAY,EAAE,CAAC,MAAM,EAAE,yBAAyB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAA;IAC5G;;;;;;SAMK;IACL,MAAM,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC1F;;;;;;;;OAQG;IACH,aAAa,EAAE,CAAC,MAAM,EAAE,0BAA0B,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,2BAA2B,CAAC,CAAA;IAC/G;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5E;;;;;;;;;;;;;;;OAeG;IACH,SAAS,EAAE,CAAC,MAAM,EAAE,sBAAsB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAChF;AAiBD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,CA0CvE"}
@@ -1,5 +1,34 @@
1
- import { fetcher, buildUrl } from '../utils.js';
1
+ import { buildUrl, fetcher, LastFmApiError, signedPost } from '../utils.js';
2
+ function resolveSessionKeyForArtistTagMutation(config, requestSk, action) {
3
+ const sk = requestSk ?? config.sessionKey;
4
+ if (!sk) {
5
+ throw new LastFmApiError(`A session key (\`sk\`) is required to artist.${action}. Pass \`sk\` in the request params or set \`sessionKey\` on the LastFmConfig.`, 0);
6
+ }
7
+ return sk;
8
+ }
2
9
  export function createArtistService(config) {
10
+ const addTagsImpl = (params, init) => {
11
+ const sk = resolveSessionKeyForArtistTagMutation(config, params.sk, 'addTags');
12
+ return signedPost(config, 'artist.addTags', {
13
+ params: {
14
+ artist: params.artist,
15
+ tags: params.tags.join(','),
16
+ sk,
17
+ },
18
+ init,
19
+ }).then(() => undefined);
20
+ };
21
+ const removeTagImpl = (params, init) => {
22
+ const sk = resolveSessionKeyForArtistTagMutation(config, params.sk, 'removeTag');
23
+ return signedPost(config, 'artist.removeTag', {
24
+ params: {
25
+ artist: params.artist,
26
+ tag: params.tag,
27
+ sk,
28
+ },
29
+ init,
30
+ }).then(() => undefined);
31
+ };
3
32
  return {
4
33
  getInfo: (params, init) => fetcher(buildUrl(config, 'artist.getInfo', params), init),
5
34
  getTags: (params, init) => fetcher(buildUrl(config, 'artist.getTags', params), init),
@@ -7,7 +36,10 @@ export function createArtistService(config) {
7
36
  getTopTags: (params, init) => fetcher(buildUrl(config, 'artist.getTopTags', params), init),
8
37
  getTopAlbums: (params, init) => fetcher(buildUrl(config, 'artist.getTopAlbums', params), init),
9
38
  getTopTracks: (params, init) => fetcher(buildUrl(config, 'artist.getTopTracks', params), init),
10
- search: (params, init) => fetcher(buildUrl(config, 'artist.search', params), init)
39
+ search: (params, init) => fetcher(buildUrl(config, 'artist.search', params), init),
40
+ getCorrection: (params, init) => fetcher(buildUrl(config, 'artist.getCorrection', params), init),
41
+ addTags: addTagsImpl,
42
+ removeTag: removeTagImpl,
11
43
  };
12
44
  }
13
45
  //# sourceMappingURL=artist.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"artist.js","sourceRoot":"","sources":["../../src/services/artist.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA0EhD,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACvD,OAAO;QACN,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACzB,OAAO,CAAwB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QACjF,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACzB,OAAO,CAAwB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QACjF,UAAU,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAC5B,OAAO,CAA2B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QACvF,UAAU,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAC5B,OAAO,CAA2B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QACvF,YAAY,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAC9B,OAAO,CAA6B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QAC3F,YAAY,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAC9B,OAAO,CAA6B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QAC3F,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACxB,OAAO,CAAuB,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;KAC/E,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"artist.js","sourceRoot":"","sources":["../../src/services/artist.ts"],"names":[],"mappings":"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"}