@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,74 @@
1
+ import type { BatchTracksScrobbleRequest, TrackGetInfoRequest, TrackGetInfoResponse, TrackGetSimilarRequest, TrackGetSimilarResponse, TrackGetTagsRequest, TrackGetTagsResponse, TrackGetTopTagsRequest, TrackGetTopTagsResponse, TrackScrobbleRequest, TrackScrobbleResponse, TrackSearchRequest, TrackSearchResponse } from './track.schemas.js';
2
+ import type { LastFmConfig } from '../config.js';
3
+ export interface TrackService {
4
+ /**
5
+ * Get the metadata for a track on Last.fm using the artist/track name or a musicbrainz id.
6
+ * @param {TrackGetInfoRequest} params
7
+ * @param {RequestInit} init
8
+ * @returns {Promise<TrackGetInfoResponse>}
9
+ * https://www.last.fm/api/show/track.getInfo
10
+ * */
11
+ getInfo: (params: TrackGetInfoRequest, init?: RequestInit) => Promise<TrackGetInfoResponse>;
12
+ /**
13
+ * Get the tags applied by an individual user to a track on Last.fm.
14
+ * @param {TrackGetSimilarRequest} params
15
+ * @param {RequestInit} init
16
+ * @returns {Promise<TrackGetSimilarResponse>}
17
+ * https://www.last.fm/api/show/track.getSimilar
18
+ * */
19
+ getSimilar: (params: TrackGetSimilarRequest, init?: RequestInit) => Promise<TrackGetSimilarResponse>;
20
+ /**
21
+ * Get the tags applied by an individual user to a track on Last.fm.
22
+ * @param {TrackGetTagsRequest} params
23
+ * @param {RequestInit} init
24
+ * @returns {Promise<TrackGetTagsResponse>}
25
+ * https://www.last.fm/api/show/track.getTags
26
+ * */
27
+ getTags: (params: TrackGetTagsRequest, init?: RequestInit) => Promise<TrackGetTagsResponse>;
28
+ /**
29
+ * Get the top tags for a track on Last.fm, ordered by popularity.
30
+ * @param {TrackGetTopTagsRequest} params
31
+ * @param {RequestInit} init
32
+ * @returns {Promise<TrackGetTopTagsResponse>}
33
+ * https://www.last.fm/api/show/track.getTopTags
34
+ * */
35
+ getTopTags: (params: TrackGetTopTagsRequest, init?: RequestInit) => Promise<TrackGetTopTagsResponse>;
36
+ /**
37
+ * Search for a track by track name. Returns track matches sorted by relevance.
38
+ * @param {TrackSearchRequest} params
39
+ * @param {RequestInit} init
40
+ * @returns {Promise<TrackSearchResponse>}
41
+ * https://www.last.fm/api/show/track.search
42
+ * */
43
+ search: (params: TrackSearchRequest, init?: RequestInit) => Promise<TrackSearchResponse>;
44
+ /**
45
+ * Scrobble a track. Submits a track play to the Last.fm.
46
+ * Canonical Last.fm method name: `track.scrobble`.
47
+ * @param {TrackScrobbleRequest} params
48
+ * @param {RequestInit} init
49
+ * @returns {Promise<TrackScrobbleResponse>}
50
+ * https://www.last.fm/api/show/track.scrobble
51
+ */
52
+ scrobble: (params: TrackScrobbleRequest, init?: RequestInit) => Promise<TrackScrobbleResponse>;
53
+ /**
54
+ * @deprecated Use `scrobble` instead. Renamed to match the canonical Last.fm
55
+ * method name (`track.scrobble`). Kept as an alias for backwards compatibility.
56
+ */
57
+ postTrackScrobble: (params: TrackScrobbleRequest, init?: RequestInit) => Promise<TrackScrobbleResponse>;
58
+ /**
59
+ * Scrobble a batch of tracks. Submits a batch of track plays to the Last.fm.
60
+ * Canonical Last.fm method name: `track.scrobble`.
61
+ * @param {BatchTracksScrobbleRequest} params
62
+ * @returns {Promise<TrackScrobbleResponse>}
63
+ * https://www.last.fm/api/show/track.scrobble
64
+ * */
65
+ scrobbleMany: (params: BatchTracksScrobbleRequest) => Promise<TrackScrobbleResponse>;
66
+ /**
67
+ * @deprecated Use `scrobbleMany` instead. Renamed to match the canonical
68
+ * Last.fm method name (`track.scrobble`). Kept as an alias for backwards
69
+ * compatibility.
70
+ */
71
+ postBatchTrackScrobble: (params: BatchTracksScrobbleRequest) => Promise<TrackScrobbleResponse>;
72
+ }
73
+ export declare function createTrackService(config: LastFmConfig): TrackService;
74
+ //# sourceMappingURL=track.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../../src/services/track.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,0BAA0B,EAC1B,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,MAAM,WAAW,YAAY;IAC5B;;;;;;SAMK;IACL,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC5F;;;;;;SAMK;IACL,UAAU,EAAE,CACX,MAAM,EAAE,sBAAsB,EAC9B,IAAI,CAAC,EAAE,WAAW,KACd,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACtC;;;;;;SAMK;IACL,OAAO,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC5F;;;;;;SAMK;IACL,UAAU,EAAE,CACX,MAAM,EAAE,sBAAsB,EAC9B,IAAI,CAAC,EAAE,WAAW,KACd,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACtC;;;;;;SAMK;IACL,MAAM,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEzF;;;;;;;OAOG;IACH,QAAQ,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC/F;;;OAGG;IACH,iBAAiB,EAAE,CAClB,MAAM,EAAE,oBAAoB,EAC5B,IAAI,CAAC,EAAE,WAAW,KACd,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACpC;;;;;;SAMK;IACL,YAAY,EAAE,CAAC,MAAM,EAAE,0BAA0B,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACrF;;;;OAIG;IACH,sBAAsB,EAAE,CAAC,MAAM,EAAE,0BAA0B,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC/F;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAoCrE"}
@@ -0,0 +1,25 @@
1
+ import { fetcher, buildUrl } from '../utils.js';
2
+ import { batchFetcher, parsePostParamsBatchTrack, parsePostParamsTrack } from './track.utils.js';
3
+ export function createTrackService(config) {
4
+ const scrobbleImpl = ({ artist, sk, timestamp, track, album }, init) => fetcher(buildUrl(config, 'track.scrobble', {
5
+ ...parsePostParamsTrack(config, { artist, sk, timestamp, track, album })
6
+ }), {
7
+ ...init,
8
+ method: 'POST'
9
+ });
10
+ const scrobbleManyImpl = ({ tracks, sk }) => batchFetcher(config, {
11
+ body: parsePostParamsBatchTrack(config, { tracks, sk })
12
+ });
13
+ return {
14
+ getInfo: (params, init) => fetcher(buildUrl(config, 'track.getInfo', params), init),
15
+ getSimilar: (params, init) => fetcher(buildUrl(config, 'track.getSimilar', params), init),
16
+ getTags: (params, init) => fetcher(buildUrl(config, 'track.getTags', params), init),
17
+ getTopTags: (params, init) => fetcher(buildUrl(config, 'track.getTopTags', params), init),
18
+ search: (params, init) => fetcher(buildUrl(config, 'track.search', params), init),
19
+ scrobble: scrobbleImpl,
20
+ postTrackScrobble: scrobbleImpl,
21
+ scrobbleMany: scrobbleManyImpl,
22
+ postBatchTrackScrobble: scrobbleManyImpl
23
+ };
24
+ }
25
+ //# sourceMappingURL=track.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track.js","sourceRoot":"","sources":["../../src/services/track.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAmFjG,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACtD,MAAM,YAAY,GAAG,CACpB,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAwB,EAC7D,IAAkB,EACjB,EAAE,CACH,OAAO,CACN,QAAQ,CAAC,MAAM,EAAE,gBAAgB,EAAE;QAClC,GAAG,oBAAoB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;KACxE,CAAC,EACF;QACC,GAAG,IAAI;QACP,MAAM,EAAE,MAAM;KACd,CACD,CAAC;IAEH,MAAM,gBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAA8B,EAAE,EAAE,CACvE,YAAY,CAAwB,MAAM,EAAE;QAC3C,IAAI,EAAE,yBAAyB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;KACvD,CAAC,CAAC;IAEJ,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,UAAU,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAC5B,OAAO,CAA0B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;QACrF,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;QAC7E,QAAQ,EAAE,YAAY;QACtB,iBAAiB,EAAE,YAAY;QAC/B,YAAY,EAAE,gBAAgB;QAC9B,sBAAsB,EAAE,gBAAgB;KACxC,CAAC;AACH,CAAC"}
@@ -0,0 +1,284 @@
1
+ import { z } from "zod";
2
+ export declare const trackArtistSchema: z.ZodObject<{
3
+ name: z.ZodString;
4
+ mbid: z.ZodString;
5
+ url: z.ZodString;
6
+ }, z.core.$strip>;
7
+ export declare const trackAlbumSchema: z.ZodObject<{
8
+ artist: z.ZodString;
9
+ title: z.ZodString;
10
+ mbid: z.ZodString;
11
+ url: z.ZodString;
12
+ image: z.ZodArray<z.ZodObject<{
13
+ "#text": z.ZodString;
14
+ size: z.ZodUnion<readonly [z.ZodLiteral<"small">, z.ZodLiteral<"medium">, z.ZodLiteral<"large">, z.ZodLiteral<"extralarge">, z.ZodLiteral<"mega">]>;
15
+ }, z.core.$strip>>;
16
+ "@attr": z.ZodObject<{
17
+ position: z.ZodString;
18
+ }, z.core.$strip>;
19
+ }, z.core.$strip>;
20
+ export declare const trackTopTagSchema: z.ZodObject<{
21
+ tag: z.ZodArray<z.ZodObject<{
22
+ name: z.ZodString;
23
+ url: z.ZodString;
24
+ }, z.core.$strip>>;
25
+ }, z.core.$strip>;
26
+ export declare const trackWikiSchema: z.ZodObject<{
27
+ published: z.ZodString;
28
+ summary: z.ZodString;
29
+ content: z.ZodString;
30
+ }, z.core.$strip>;
31
+ /**
32
+ * Track
33
+ * @see https://www.last.fm/api/show/track.getInfo
34
+ */
35
+ export declare const trackSchema: z.ZodObject<{
36
+ name: z.ZodString;
37
+ mbid: z.ZodString;
38
+ url: z.ZodString;
39
+ duration: z.ZodString;
40
+ listeners: z.ZodString;
41
+ playcount: z.ZodString;
42
+ artist: z.ZodObject<{
43
+ name: z.ZodString;
44
+ mbid: z.ZodString;
45
+ url: z.ZodString;
46
+ }, z.core.$strip>;
47
+ album: z.ZodObject<{
48
+ artist: z.ZodString;
49
+ title: z.ZodString;
50
+ mbid: z.ZodString;
51
+ url: z.ZodString;
52
+ image: z.ZodArray<z.ZodObject<{
53
+ "#text": z.ZodString;
54
+ size: z.ZodUnion<readonly [z.ZodLiteral<"small">, z.ZodLiteral<"medium">, z.ZodLiteral<"large">, z.ZodLiteral<"extralarge">, z.ZodLiteral<"mega">]>;
55
+ }, z.core.$strip>>;
56
+ "@attr": z.ZodObject<{
57
+ position: z.ZodString;
58
+ }, z.core.$strip>;
59
+ }, z.core.$strip>;
60
+ topTags: z.ZodObject<{
61
+ tag: z.ZodArray<z.ZodObject<{
62
+ name: z.ZodString;
63
+ url: z.ZodString;
64
+ }, z.core.$strip>>;
65
+ }, z.core.$strip>;
66
+ wiki: z.ZodObject<{
67
+ published: z.ZodString;
68
+ summary: z.ZodString;
69
+ content: z.ZodString;
70
+ }, z.core.$strip>;
71
+ userplaycount: z.ZodString;
72
+ }, z.core.$strip>;
73
+ export declare const trackGetInfoRequestSchema: z.ZodObject<{
74
+ artist: z.ZodString;
75
+ track: z.ZodString;
76
+ mbid: z.ZodOptional<z.ZodString>;
77
+ username: z.ZodOptional<z.ZodString>;
78
+ }, z.core.$strip>;
79
+ export declare const trackGetInfoResponseSchema: z.ZodObject<{
80
+ track: z.ZodObject<{
81
+ name: z.ZodString;
82
+ mbid: z.ZodString;
83
+ url: z.ZodString;
84
+ duration: z.ZodString;
85
+ listeners: z.ZodString;
86
+ playcount: z.ZodString;
87
+ artist: z.ZodObject<{
88
+ name: z.ZodString;
89
+ mbid: z.ZodString;
90
+ url: z.ZodString;
91
+ }, z.core.$strip>;
92
+ album: z.ZodObject<{
93
+ artist: z.ZodString;
94
+ title: z.ZodString;
95
+ mbid: z.ZodString;
96
+ url: z.ZodString;
97
+ image: z.ZodArray<z.ZodObject<{
98
+ "#text": z.ZodString;
99
+ size: z.ZodUnion<readonly [z.ZodLiteral<"small">, z.ZodLiteral<"medium">, z.ZodLiteral<"large">, z.ZodLiteral<"extralarge">, z.ZodLiteral<"mega">]>;
100
+ }, z.core.$strip>>;
101
+ "@attr": z.ZodObject<{
102
+ position: z.ZodString;
103
+ }, z.core.$strip>;
104
+ }, z.core.$strip>;
105
+ topTags: z.ZodObject<{
106
+ tag: z.ZodArray<z.ZodObject<{
107
+ name: z.ZodString;
108
+ url: z.ZodString;
109
+ }, z.core.$strip>>;
110
+ }, z.core.$strip>;
111
+ wiki: z.ZodObject<{
112
+ published: z.ZodString;
113
+ summary: z.ZodString;
114
+ content: z.ZodString;
115
+ }, z.core.$strip>;
116
+ userplaycount: z.ZodString;
117
+ }, z.core.$strip>;
118
+ }, z.core.$strip>;
119
+ export declare const trackGetSimilarRequestSchema: z.ZodObject<{
120
+ artist: z.ZodString;
121
+ track: z.ZodString;
122
+ mbid: z.ZodOptional<z.ZodString>;
123
+ limit: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
124
+ }, z.core.$strip>;
125
+ export declare const trackGetSimilarResponseSchema: z.ZodObject<{
126
+ similartracks: z.ZodObject<{
127
+ track: z.ZodArray<z.ZodObject<{
128
+ name: z.ZodString;
129
+ playcount: z.ZodString;
130
+ mbid: z.ZodString;
131
+ match: z.ZodString;
132
+ url: z.ZodString;
133
+ duration: z.ZodString;
134
+ artist: z.ZodObject<{
135
+ name: z.ZodString;
136
+ mbid: z.ZodString;
137
+ url: z.ZodString;
138
+ }, z.core.$strip>;
139
+ image: z.ZodArray<z.ZodObject<{
140
+ "#text": z.ZodString;
141
+ size: z.ZodUnion<readonly [z.ZodLiteral<"small">, z.ZodLiteral<"medium">, z.ZodLiteral<"large">, z.ZodLiteral<"extralarge">, z.ZodLiteral<"mega">]>;
142
+ }, z.core.$strip>>;
143
+ }, z.core.$strip>>;
144
+ "@attr": z.ZodObject<{
145
+ artist: z.ZodString;
146
+ }, z.core.$strip>;
147
+ }, z.core.$strip>;
148
+ }, z.core.$strip>;
149
+ export declare const trackGetTagsRequestSchema: z.ZodObject<{
150
+ artist: z.ZodString;
151
+ track: z.ZodString;
152
+ mbid: z.ZodOptional<z.ZodString>;
153
+ user: z.ZodOptional<z.ZodString>;
154
+ }, z.core.$strip>;
155
+ export declare const trackGetTagsResponseSchema: z.ZodObject<{
156
+ tags: z.ZodObject<{
157
+ tag: z.ZodArray<z.ZodObject<{
158
+ name: z.ZodString;
159
+ url: z.ZodString;
160
+ }, z.core.$strip>>;
161
+ "@attr": z.ZodObject<{
162
+ artist: z.ZodString;
163
+ track: z.ZodString;
164
+ }, z.core.$strip>;
165
+ }, z.core.$strip>;
166
+ }, z.core.$strip>;
167
+ export declare const trackGetTopTagsRequestSchema: z.ZodObject<{
168
+ artist: z.ZodString;
169
+ track: z.ZodString;
170
+ mbid: z.ZodOptional<z.ZodString>;
171
+ }, z.core.$strip>;
172
+ export declare const trackGetTopTagsResponseSchema: z.ZodObject<{
173
+ toptags: z.ZodObject<{
174
+ tag: z.ZodArray<z.ZodObject<{
175
+ name: z.ZodString;
176
+ url: z.ZodString;
177
+ count: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
178
+ }, z.core.$strip>>;
179
+ "@attr": z.ZodObject<{
180
+ artist: z.ZodString;
181
+ track: z.ZodString;
182
+ }, z.core.$strip>;
183
+ }, z.core.$strip>;
184
+ }, z.core.$strip>;
185
+ export declare const trackSearchRequestSchema: z.ZodObject<{
186
+ track: z.ZodString;
187
+ limit: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
188
+ page: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
189
+ artist: z.ZodOptional<z.ZodString>;
190
+ }, z.core.$strip>;
191
+ export declare const trackSearchResponseSchema: z.ZodObject<{
192
+ results: z.ZodObject<{
193
+ "opensearch:Query": z.ZodObject<{
194
+ "#text": z.ZodString;
195
+ role: z.ZodString;
196
+ searchTerms: z.ZodString;
197
+ startPage: z.ZodString;
198
+ }, z.core.$strip>;
199
+ "opensearch:totalResults": z.ZodString;
200
+ "opensearch:startIndex": z.ZodString;
201
+ "opensearch:itemsPerPage": z.ZodString;
202
+ trackmatches: z.ZodObject<{
203
+ track: z.ZodArray<z.ZodObject<{
204
+ name: z.ZodString;
205
+ artist: z.ZodString;
206
+ url: z.ZodString;
207
+ listeners: z.ZodString;
208
+ image: z.ZodArray<z.ZodObject<{
209
+ "#text": z.ZodString;
210
+ size: z.ZodUnion<readonly [z.ZodLiteral<"small">, z.ZodLiteral<"medium">, z.ZodLiteral<"large">, z.ZodLiteral<"extralarge">, z.ZodLiteral<"mega">]>;
211
+ }, z.core.$strip>>;
212
+ mbid: z.ZodString;
213
+ }, z.core.$strip>>;
214
+ }, z.core.$strip>;
215
+ "@attr": z.ZodObject<{
216
+ for: z.ZodString;
217
+ }, z.core.$strip>;
218
+ }, z.core.$strip>;
219
+ }, z.core.$strip>;
220
+ export declare const trackScrobbleRequestSchema: z.ZodObject<{
221
+ artist: z.ZodString;
222
+ track: z.ZodString;
223
+ timestamp: z.ZodString;
224
+ sk: z.ZodOptional<z.ZodString>;
225
+ album: z.ZodOptional<z.ZodString>;
226
+ }, z.core.$strip>;
227
+ export declare const trackScrobbleResponseSchema: z.ZodObject<{
228
+ scrobbles: z.ZodObject<{
229
+ scrobble: z.ZodObject<{
230
+ artist: z.ZodObject<{
231
+ corrected: z.ZodString;
232
+ "#text": z.ZodString;
233
+ }, z.core.$strip>;
234
+ album: z.ZodObject<{
235
+ corrected: z.ZodString;
236
+ }, z.core.$strip>;
237
+ track: z.ZodObject<{
238
+ corrected: z.ZodString;
239
+ "#text": z.ZodString;
240
+ }, z.core.$strip>;
241
+ ignoredMessage: z.ZodObject<{
242
+ code: z.ZodString;
243
+ "#text": z.ZodString;
244
+ }, z.core.$strip>;
245
+ albumArtist: z.ZodObject<{
246
+ corrected: z.ZodString;
247
+ "#text": z.ZodString;
248
+ }, z.core.$strip>;
249
+ timestamp: z.ZodString;
250
+ }, z.core.$strip>;
251
+ "@attr": z.ZodObject<{
252
+ accepted: z.ZodNumber;
253
+ ignored: z.ZodNumber;
254
+ }, z.core.$strip>;
255
+ }, z.core.$strip>;
256
+ }, z.core.$strip>;
257
+ export declare const batchTracksScrobbleRequestSchema: z.ZodObject<{
258
+ tracks: z.ZodArray<z.ZodObject<{
259
+ track: z.ZodString;
260
+ artist: z.ZodString;
261
+ album: z.ZodOptional<z.ZodString>;
262
+ timestamp: z.ZodString;
263
+ }, z.core.$strip>>;
264
+ sk: z.ZodOptional<z.ZodString>;
265
+ }, z.core.$strip>;
266
+ export type TrackArtist = z.infer<typeof trackArtistSchema>;
267
+ export type TrackAlbum = z.infer<typeof trackAlbumSchema>;
268
+ export type TrackTopTag = z.infer<typeof trackTopTagSchema>;
269
+ export type TrackWiki = z.infer<typeof trackWikiSchema>;
270
+ export type Track = z.infer<typeof trackSchema>;
271
+ export type TrackGetInfoRequest = z.infer<typeof trackGetInfoRequestSchema>;
272
+ export type TrackGetInfoResponse = z.infer<typeof trackGetInfoResponseSchema>;
273
+ export type TrackGetSimilarRequest = z.infer<typeof trackGetSimilarRequestSchema>;
274
+ export type TrackGetSimilarResponse = z.infer<typeof trackGetSimilarResponseSchema>;
275
+ export type TrackGetTagsRequest = z.infer<typeof trackGetTagsRequestSchema>;
276
+ export type TrackGetTagsResponse = z.infer<typeof trackGetTagsResponseSchema>;
277
+ export type TrackGetTopTagsRequest = z.infer<typeof trackGetTopTagsRequestSchema>;
278
+ export type TrackGetTopTagsResponse = z.infer<typeof trackGetTopTagsResponseSchema>;
279
+ export type TrackSearchRequest = z.infer<typeof trackSearchRequestSchema>;
280
+ export type TrackSearchResponse = z.infer<typeof trackSearchResponseSchema>;
281
+ export type TrackScrobbleRequest = z.infer<typeof trackScrobbleRequestSchema>;
282
+ export type TrackScrobbleResponse = z.infer<typeof trackScrobbleResponseSchema>;
283
+ export type BatchTracksScrobbleRequest = z.infer<typeof batchTracksScrobbleRequestSchema>;
284
+ //# sourceMappingURL=track.schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track.schemas.d.ts","sourceRoot":"","sources":["../../src/services/track.schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,191 @@
1
+ import { z } from "zod";
2
+ import { albumNameSchema, artistNameSchema, contentSchema, countSchema, durationSchema, imageSchema, itemsPerPageSchema, limitSchema, listenersSchema, matchSchema, mbidSchema, pageSchema, playcountSchema, positionSchema, publishedSchema, roleSchema, searchTermsSchema, startIndexSchema, startPageSchema, summarySchema, tagNameSchema, totalResultsSchema, trackNameSchema, urlSchema, userNameSchema, } from "./schemas/index.js";
3
+ export const trackArtistSchema = z.object({
4
+ name: artistNameSchema,
5
+ mbid: mbidSchema,
6
+ url: urlSchema
7
+ });
8
+ export const trackAlbumSchema = z.object({
9
+ artist: artistNameSchema,
10
+ title: albumNameSchema,
11
+ mbid: mbidSchema,
12
+ url: urlSchema,
13
+ image: z.array(imageSchema),
14
+ "@attr": z.object({
15
+ position: positionSchema
16
+ })
17
+ });
18
+ export const trackTopTagSchema = z.object({
19
+ tag: z.array(z.object({
20
+ name: tagNameSchema,
21
+ url: urlSchema
22
+ }))
23
+ });
24
+ export const trackWikiSchema = z.object({
25
+ published: publishedSchema,
26
+ summary: summarySchema,
27
+ content: contentSchema
28
+ });
29
+ /**
30
+ * Track
31
+ * @see https://www.last.fm/api/show/track.getInfo
32
+ */
33
+ export const trackSchema = z.object({
34
+ name: trackNameSchema,
35
+ mbid: mbidSchema,
36
+ url: urlSchema,
37
+ duration: durationSchema,
38
+ listeners: listenersSchema,
39
+ playcount: playcountSchema,
40
+ artist: trackArtistSchema,
41
+ album: trackAlbumSchema,
42
+ topTags: trackTopTagSchema,
43
+ wiki: trackWikiSchema,
44
+ userplaycount: playcountSchema
45
+ });
46
+ export const trackGetInfoRequestSchema = z.object({
47
+ artist: artistNameSchema,
48
+ track: trackNameSchema,
49
+ mbid: mbidSchema.optional(),
50
+ username: userNameSchema.optional()
51
+ });
52
+ export const trackGetInfoResponseSchema = z.object({
53
+ track: trackSchema
54
+ });
55
+ export const trackGetSimilarRequestSchema = z.object({
56
+ artist: artistNameSchema,
57
+ track: trackNameSchema,
58
+ mbid: mbidSchema.optional(),
59
+ limit: limitSchema.optional()
60
+ });
61
+ export const trackGetSimilarResponseSchema = z.object({
62
+ similartracks: z.object({
63
+ track: z.array(z.object({
64
+ name: trackNameSchema,
65
+ playcount: playcountSchema,
66
+ mbid: mbidSchema,
67
+ match: matchSchema,
68
+ url: urlSchema,
69
+ duration: durationSchema,
70
+ artist: z.object({
71
+ name: artistNameSchema,
72
+ mbid: mbidSchema,
73
+ url: urlSchema
74
+ }),
75
+ image: z.array(imageSchema)
76
+ })),
77
+ "@attr": z.object({
78
+ artist: artistNameSchema
79
+ })
80
+ })
81
+ });
82
+ export const trackGetTagsRequestSchema = z.object({
83
+ artist: artistNameSchema,
84
+ track: trackNameSchema,
85
+ mbid: mbidSchema.optional(),
86
+ user: userNameSchema.optional()
87
+ });
88
+ export const trackGetTagsResponseSchema = z.object({
89
+ tags: z.object({
90
+ tag: z.array(z.object({
91
+ name: tagNameSchema,
92
+ url: urlSchema
93
+ })),
94
+ "@attr": z.object({
95
+ artist: artistNameSchema,
96
+ track: trackNameSchema
97
+ })
98
+ })
99
+ });
100
+ export const trackGetTopTagsRequestSchema = z.object({
101
+ artist: artistNameSchema,
102
+ track: trackNameSchema,
103
+ mbid: mbidSchema.optional()
104
+ });
105
+ export const trackGetTopTagsResponseSchema = z.object({
106
+ toptags: z.object({
107
+ tag: z.array(z.object({
108
+ name: tagNameSchema,
109
+ url: urlSchema,
110
+ count: countSchema
111
+ })),
112
+ "@attr": z.object({
113
+ artist: artistNameSchema,
114
+ track: trackNameSchema
115
+ })
116
+ })
117
+ });
118
+ export const trackSearchRequestSchema = z.object({
119
+ track: trackNameSchema,
120
+ limit: limitSchema.optional(),
121
+ page: pageSchema.optional(),
122
+ artist: artistNameSchema.optional()
123
+ });
124
+ export const trackSearchResponseSchema = z.object({
125
+ results: z.object({
126
+ "opensearch:Query": z.object({
127
+ "#text": z.string(),
128
+ role: roleSchema,
129
+ searchTerms: searchTermsSchema,
130
+ startPage: startPageSchema
131
+ }),
132
+ "opensearch:totalResults": totalResultsSchema,
133
+ "opensearch:startIndex": startIndexSchema,
134
+ "opensearch:itemsPerPage": itemsPerPageSchema,
135
+ trackmatches: z.object({
136
+ track: z.array(z.object({
137
+ name: trackNameSchema,
138
+ artist: artistNameSchema,
139
+ url: urlSchema,
140
+ listeners: listenersSchema,
141
+ image: z.array(imageSchema),
142
+ mbid: mbidSchema
143
+ }))
144
+ }),
145
+ "@attr": z.object({
146
+ for: z.string()
147
+ })
148
+ })
149
+ });
150
+ export const trackScrobbleRequestSchema = z.object({
151
+ artist: artistNameSchema,
152
+ track: trackNameSchema,
153
+ timestamp: z.string(),
154
+ sk: z.string().optional(),
155
+ album: albumNameSchema.optional()
156
+ });
157
+ export const trackScrobbleResponseSchema = z.object({
158
+ scrobbles: z.object({
159
+ scrobble: z.object({
160
+ artist: z.object({
161
+ corrected: z.string(),
162
+ "#text": artistNameSchema
163
+ }),
164
+ album: z.object({
165
+ corrected: z.string()
166
+ }),
167
+ track: z.object({
168
+ corrected: z.string(),
169
+ "#text": trackNameSchema
170
+ }),
171
+ ignoredMessage: z.object({
172
+ code: z.string(),
173
+ "#text": z.string()
174
+ }),
175
+ albumArtist: z.object({
176
+ corrected: z.string(),
177
+ "#text": albumNameSchema
178
+ }),
179
+ timestamp: z.string()
180
+ }),
181
+ "@attr": z.object({
182
+ accepted: z.number(),
183
+ ignored: z.number()
184
+ })
185
+ })
186
+ });
187
+ export const batchTracksScrobbleRequestSchema = z.object({
188
+ tracks: z.array(trackScrobbleRequestSchema.omit({ "sk": true })),
189
+ sk: z.string().optional()
190
+ });
191
+ //# sourceMappingURL=track.schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track.schemas.js","sourceRoot":"","sources":["../../src/services/track.schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { LastFmConfig } from '../config.js';
2
+ import type { BatchTracksScrobbleRequest, TrackScrobbleRequest } from './track.schemas.js';
3
+ export declare const parsePostParamsTrack: (config: LastFmConfig, params: TrackScrobbleRequest) => {
4
+ api_sig: string;
5
+ };
6
+ export declare const parsePostParamsBatchTrack: (config: LastFmConfig, { tracks, sk: skParam }: BatchTracksScrobbleRequest) => string;
7
+ export declare const batchFetcher: <T = unknown>(config: LastFmConfig, { body }: {
8
+ body: string;
9
+ }) => Promise<T>;
10
+ //# sourceMappingURL=track.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track.utils.d.ts","sourceRoot":"","sources":["../../src/services/track.utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE3F,eAAO,MAAM,oBAAoB,GAAI,QAAQ,YAAY,EAAE,QAAQ,oBAAoB;;CAkBtF,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACrC,QAAQ,YAAY,EACpB,yBAAyB,0BAA0B,WAmCnD,CAAC;AAEF,eAAO,MAAM,YAAY,GAAU,CAAC,GAAG,OAAO,EAAE,QAAQ,YAAY,EAAE,UAAU;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,eAU/F,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { generateSignature, parseLastFmResponse } from '../utils.js';
2
+ export const parsePostParamsTrack = (config, params) => {
3
+ const { artist, track, album, timestamp, sk: skParam } = params;
4
+ const sk = skParam ?? config.sessionKey;
5
+ if (!sk) {
6
+ throw new Error('A session key (`sk`) is required to scrobble. Pass `sk` in the request params or set `sessionKey` on the LastFmConfig.');
7
+ }
8
+ const paramsUrl = { artist, track, timestamp, sk };
9
+ if (album)
10
+ paramsUrl.album = album;
11
+ const api_sig = generateSignature(config, {
12
+ method: 'track.scrobble',
13
+ api_key: config.apiKey,
14
+ ...paramsUrl
15
+ });
16
+ return { ...paramsUrl, api_sig };
17
+ };
18
+ export const parsePostParamsBatchTrack = (config, { tracks, sk: skParam }) => {
19
+ if (tracks.length > 50) {
20
+ throw new Error('Max 50 tracks by request');
21
+ }
22
+ const sk = skParam ?? config.sessionKey;
23
+ if (!sk) {
24
+ throw new Error('A session key (`sk`) is required to scrobble. Pass `sk` in the request params or set `sessionKey` on the LastFmConfig.');
25
+ }
26
+ const params = {
27
+ method: 'track.scrobble',
28
+ api_key: config.apiKey,
29
+ sk
30
+ };
31
+ tracks.forEach((track, index) => {
32
+ params[`artist[${index}]`] = track.artist;
33
+ params[`track[${index}]`] = track.track;
34
+ params[`timestamp[${index}]`] = track.timestamp;
35
+ if (track.album) {
36
+ params[`album[${index}]`] = track.album;
37
+ }
38
+ });
39
+ const api_sig = generateSignature(config, params);
40
+ params.api_sig = api_sig;
41
+ const body = Object.keys(params)
42
+ .map((key) => encodeURIComponent(key) + '=' + encodeURIComponent(params[key]))
43
+ .join('&');
44
+ return body;
45
+ };
46
+ export const batchFetcher = async (config, { body }) => {
47
+ const response = await fetch(config.baseUrl, {
48
+ method: 'POST',
49
+ headers: {
50
+ 'Content-Type': 'application/x-www-form-urlencoded'
51
+ },
52
+ body
53
+ });
54
+ return (await parseLastFmResponse(response));
55
+ };
56
+ //# sourceMappingURL=track.utils.js.map