@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.
- package/CHANGELOG.md +18 -0
- package/README.md +165 -15
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +2 -2
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/entrypoints/album.d.ts +1 -1
- package/dist/entrypoints/album.d.ts.map +1 -1
- package/dist/entrypoints/album.js.map +1 -1
- package/dist/entrypoints/album.schemas.d.ts.map +1 -1
- package/dist/entrypoints/album.schemas.js.map +1 -1
- package/dist/entrypoints/artist.d.ts +1 -1
- package/dist/entrypoints/artist.d.ts.map +1 -1
- package/dist/entrypoints/artist.js.map +1 -1
- package/dist/entrypoints/artist.schemas.d.ts.map +1 -1
- package/dist/entrypoints/artist.schemas.js.map +1 -1
- package/dist/entrypoints/auth.d.ts +1 -1
- package/dist/entrypoints/auth.d.ts.map +1 -1
- package/dist/entrypoints/auth.js.map +1 -1
- package/dist/entrypoints/auth.schemas.d.ts.map +1 -1
- package/dist/entrypoints/auth.schemas.js.map +1 -1
- package/dist/entrypoints/base.schemas.d.ts.map +1 -1
- package/dist/entrypoints/base.schemas.js.map +1 -1
- package/dist/entrypoints/chart.d.ts +1 -1
- package/dist/entrypoints/chart.d.ts.map +1 -1
- package/dist/entrypoints/chart.js.map +1 -1
- package/dist/entrypoints/chart.schemas.d.ts.map +1 -1
- package/dist/entrypoints/chart.schemas.js.map +1 -1
- package/dist/entrypoints/geo.d.ts.map +1 -1
- package/dist/entrypoints/geo.js.map +1 -1
- package/dist/entrypoints/geo.schemas.d.ts.map +1 -1
- package/dist/entrypoints/geo.schemas.js.map +1 -1
- package/dist/entrypoints/library.d.ts.map +1 -1
- package/dist/entrypoints/library.js.map +1 -1
- package/dist/entrypoints/library.schemas.d.ts.map +1 -1
- package/dist/entrypoints/library.schemas.js.map +1 -1
- package/dist/entrypoints/tag.d.ts.map +1 -1
- package/dist/entrypoints/tag.js.map +1 -1
- package/dist/entrypoints/tag.schemas.d.ts.map +1 -1
- package/dist/entrypoints/tag.schemas.js.map +1 -1
- package/dist/entrypoints/track.d.ts.map +1 -1
- package/dist/entrypoints/track.js.map +1 -1
- package/dist/entrypoints/track.schemas.d.ts.map +1 -1
- package/dist/entrypoints/track.schemas.js.map +1 -1
- package/dist/entrypoints/user.d.ts.map +1 -1
- package/dist/entrypoints/user.js.map +1 -1
- package/dist/entrypoints/user.schemas.d.ts.map +1 -1
- package/dist/entrypoints/user.schemas.js.map +1 -1
- package/dist/index.d.ts +18 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/dist/services/album.d.ts +43 -1
- package/dist/services/album.d.ts.map +1 -1
- package/dist/services/album.js +35 -2
- package/dist/services/album.js.map +1 -1
- package/dist/services/album.schemas.d.ts +51 -12
- package/dist/services/album.schemas.d.ts.map +1 -1
- package/dist/services/album.schemas.js +48 -10
- package/dist/services/album.schemas.js.map +1 -1
- package/dist/services/artist.d.ts +50 -1
- package/dist/services/artist.d.ts.map +1 -1
- package/dist/services/artist.js +34 -2
- package/dist/services/artist.js.map +1 -1
- package/dist/services/artist.schemas.d.ts +99 -25
- package/dist/services/artist.schemas.d.ts.map +1 -1
- package/dist/services/artist.schemas.js +125 -60
- package/dist/services/artist.schemas.js.map +1 -1
- package/dist/services/auth.d.ts +72 -1
- package/dist/services/auth.d.ts.map +1 -1
- package/dist/services/auth.js +37 -2
- package/dist/services/auth.js.map +1 -1
- package/dist/services/auth.schemas.d.ts +23 -1
- package/dist/services/auth.schemas.d.ts.map +1 -1
- package/dist/services/auth.schemas.js +20 -2
- package/dist/services/auth.schemas.js.map +1 -1
- package/dist/services/chart.d.ts +1 -1
- package/dist/services/chart.d.ts.map +1 -1
- package/dist/services/chart.js +2 -2
- package/dist/services/chart.js.map +1 -1
- package/dist/services/chart.schemas.d.ts +6 -6
- package/dist/services/chart.schemas.d.ts.map +1 -1
- package/dist/services/chart.schemas.js +21 -21
- package/dist/services/chart.schemas.js.map +1 -1
- package/dist/services/geo.d.ts +1 -1
- package/dist/services/geo.d.ts.map +1 -1
- package/dist/services/geo.js +2 -2
- package/dist/services/geo.js.map +1 -1
- package/dist/services/geo.schemas.d.ts +6 -6
- package/dist/services/geo.schemas.d.ts.map +1 -1
- package/dist/services/geo.schemas.js +17 -17
- package/dist/services/geo.schemas.js.map +1 -1
- package/dist/services/index.d.ts +12 -12
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +13 -13
- package/dist/services/index.js.map +1 -1
- package/dist/services/library.d.ts +1 -1
- package/dist/services/library.d.ts.map +1 -1
- package/dist/services/library.js +2 -2
- package/dist/services/library.js.map +1 -1
- package/dist/services/library.schemas.d.ts +3 -3
- package/dist/services/library.schemas.d.ts.map +1 -1
- package/dist/services/library.schemas.js +8 -8
- package/dist/services/library.schemas.js.map +1 -1
- package/dist/services/schemas/base.entities.schemas.d.ts +3 -3
- package/dist/services/schemas/base.entities.schemas.d.ts.map +1 -1
- package/dist/services/schemas/base.entities.schemas.js +9 -9
- package/dist/services/schemas/base.entities.schemas.js.map +1 -1
- package/dist/services/schemas/base.entity-names.schemas.d.ts +1 -1
- package/dist/services/schemas/base.entity-names.schemas.d.ts.map +1 -1
- package/dist/services/schemas/base.entity-names.schemas.js +1 -1
- package/dist/services/schemas/base.entity-names.schemas.js.map +1 -1
- package/dist/services/schemas/base.metadata.schemas.d.ts +1 -1
- package/dist/services/schemas/base.metadata.schemas.d.ts.map +1 -1
- package/dist/services/schemas/base.metadata.schemas.js +1 -1
- package/dist/services/schemas/base.metadata.schemas.js.map +1 -1
- package/dist/services/schemas/base.pagination.schemas.d.ts +1 -1
- package/dist/services/schemas/base.pagination.schemas.d.ts.map +1 -1
- package/dist/services/schemas/base.pagination.schemas.js +1 -1
- package/dist/services/schemas/base.pagination.schemas.js.map +1 -1
- package/dist/services/schemas/base.primitives.schemas.d.ts +3 -1
- package/dist/services/schemas/base.primitives.schemas.d.ts.map +1 -1
- package/dist/services/schemas/base.primitives.schemas.js +8 -7
- package/dist/services/schemas/base.primitives.schemas.js.map +1 -1
- package/dist/services/schemas/index.d.ts +5 -5
- package/dist/services/schemas/index.d.ts.map +1 -1
- package/dist/services/schemas/index.js +5 -5
- package/dist/services/schemas/index.js.map +1 -1
- package/dist/services/tag.d.ts +1 -1
- package/dist/services/tag.d.ts.map +1 -1
- package/dist/services/tag.js +2 -2
- package/dist/services/tag.js.map +1 -1
- package/dist/services/tag.schemas.d.ts +13 -13
- package/dist/services/tag.schemas.d.ts.map +1 -1
- package/dist/services/tag.schemas.js +50 -50
- package/dist/services/tag.schemas.js.map +1 -1
- package/dist/services/track.d.ts +128 -4
- package/dist/services/track.d.ts.map +1 -1
- package/dist/services/track.js +79 -10
- package/dist/services/track.js.map +1 -1
- package/dist/services/track.schemas.d.ts +213 -25
- package/dist/services/track.schemas.d.ts.map +1 -1
- package/dist/services/track.schemas.js +206 -57
- package/dist/services/track.schemas.js.map +1 -1
- package/dist/services/track.utils.d.ts +16 -7
- package/dist/services/track.utils.d.ts.map +1 -1
- package/dist/services/track.utils.js +49 -48
- package/dist/services/track.utils.js.map +1 -1
- package/dist/services/user.d.ts +19 -1
- package/dist/services/user.d.ts.map +1 -1
- package/dist/services/user.js +3 -2
- package/dist/services/user.js.map +1 -1
- package/dist/services/user.schemas.d.ts +321 -63
- package/dist/services/user.schemas.d.ts.map +1 -1
- package/dist/services/user.schemas.js +197 -88
- package/dist/services/user.schemas.js.map +1 -1
- package/dist/utils.d.ts +37 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +105 -20
- package/dist/utils.js.map +1 -1
- package/package.json +167 -154
- package/dist/__tests__/utils.test.d.ts +0 -2
- package/dist/__tests__/utils.test.d.ts.map +0 -1
- package/dist/__tests__/utils.test.js +0 -86
- package/dist/__tests__/utils.test.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { z } from
|
|
1
|
+
import { z } from 'zod';
|
|
2
2
|
export declare const tagWikiSchema: z.ZodObject<{
|
|
3
3
|
summary: z.ZodString;
|
|
4
4
|
content: z.ZodString;
|
|
@@ -42,7 +42,7 @@ export declare const tagGetSimilarResponseSchema: z.ZodObject<{
|
|
|
42
42
|
name: z.ZodString;
|
|
43
43
|
url: z.ZodString;
|
|
44
44
|
}, z.core.$strip>>;
|
|
45
|
-
|
|
45
|
+
'@attr': z.ZodObject<{
|
|
46
46
|
tag: z.ZodString;
|
|
47
47
|
}, z.core.$strip>;
|
|
48
48
|
}, z.core.$strip>;
|
|
@@ -64,14 +64,14 @@ export declare const tagGetTopAlbumsResponseSchema: z.ZodObject<{
|
|
|
64
64
|
url: z.ZodString;
|
|
65
65
|
}, z.core.$strip>;
|
|
66
66
|
image: z.ZodArray<z.ZodObject<{
|
|
67
|
-
|
|
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
|
+
'@attr': z.ZodObject<{
|
|
71
71
|
rank: z.ZodString;
|
|
72
72
|
}, z.core.$strip>;
|
|
73
73
|
}, z.core.$strip>>;
|
|
74
|
-
|
|
74
|
+
'@attr': z.ZodObject<{
|
|
75
75
|
tag: z.ZodString;
|
|
76
76
|
page: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
77
77
|
perPage: z.ZodString;
|
|
@@ -92,14 +92,14 @@ export declare const tagGetTopArtistsResponseSchema: z.ZodObject<{
|
|
|
92
92
|
mbid: z.ZodString;
|
|
93
93
|
url: z.ZodString;
|
|
94
94
|
image: z.ZodArray<z.ZodObject<{
|
|
95
|
-
|
|
95
|
+
'#text': z.ZodString;
|
|
96
96
|
size: z.ZodUnion<readonly [z.ZodLiteral<"small">, z.ZodLiteral<"medium">, z.ZodLiteral<"large">, z.ZodLiteral<"extralarge">, z.ZodLiteral<"mega">]>;
|
|
97
97
|
}, z.core.$strip>>;
|
|
98
|
-
|
|
98
|
+
'@attr': z.ZodObject<{
|
|
99
99
|
rank: z.ZodString;
|
|
100
100
|
}, z.core.$strip>;
|
|
101
101
|
}, z.core.$strip>>;
|
|
102
|
-
|
|
102
|
+
'@attr': z.ZodObject<{
|
|
103
103
|
tag: z.ZodString;
|
|
104
104
|
page: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
105
105
|
perPage: z.ZodString;
|
|
@@ -118,7 +118,7 @@ export declare const tagGetTopTagsResponseSchema: z.ZodObject<{
|
|
|
118
118
|
reach: z.ZodNumber;
|
|
119
119
|
count: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
120
120
|
}, z.core.$strip>>;
|
|
121
|
-
|
|
121
|
+
'@attr': z.ZodObject<{
|
|
122
122
|
offset: z.ZodNumber;
|
|
123
123
|
num_res: z.ZodNumber;
|
|
124
124
|
total: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
@@ -143,14 +143,14 @@ export declare const tagGetTopTracksResponseSchema: z.ZodObject<{
|
|
|
143
143
|
url: z.ZodString;
|
|
144
144
|
}, z.core.$strip>;
|
|
145
145
|
image: z.ZodArray<z.ZodObject<{
|
|
146
|
-
|
|
146
|
+
'#text': z.ZodString;
|
|
147
147
|
size: z.ZodUnion<readonly [z.ZodLiteral<"small">, z.ZodLiteral<"medium">, z.ZodLiteral<"large">, z.ZodLiteral<"extralarge">, z.ZodLiteral<"mega">]>;
|
|
148
148
|
}, z.core.$strip>>;
|
|
149
|
-
|
|
149
|
+
'@attr': z.ZodObject<{
|
|
150
150
|
rank: z.ZodString;
|
|
151
151
|
}, z.core.$strip>;
|
|
152
152
|
}, z.core.$strip>>;
|
|
153
|
-
|
|
153
|
+
'@attr': z.ZodObject<{
|
|
154
154
|
tag: z.ZodString;
|
|
155
155
|
page: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
156
156
|
perPage: z.ZodString;
|
|
@@ -168,7 +168,7 @@ export declare const tagGetWeeklyChartListResponseSchema: z.ZodObject<{
|
|
|
168
168
|
from: z.ZodString;
|
|
169
169
|
to: z.ZodString;
|
|
170
170
|
}, z.core.$strip>>;
|
|
171
|
-
|
|
171
|
+
'@attr': z.ZodObject<{
|
|
172
172
|
tag: z.ZodString;
|
|
173
173
|
}, z.core.$strip>;
|
|
174
174
|
}, z.core.$strip>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tag.schemas.d.ts","sourceRoot":"","sources":["../../src/services/tag.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"tag.schemas.d.ts","sourceRoot":"","sources":["../../src/services/tag.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAyBvB,eAAO,MAAM,aAAa;;;iBAGxB,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS;;;;;;;;;iBAMpB,CAAA;AAEF,eAAO,MAAM,uBAAuB;;;iBAGlC,CAAA;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;iBAEnC,CAAA;AAEF,eAAO,MAAM,0BAA0B;;iBAErC,CAAA;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;iBAYtC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;iBAIvC,CAAA;AAEF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA0BxC,CAAA;AAEF,eAAO,MAAM,6BAA6B;;;;iBAIxC,CAAA;AAEF,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;iBAqBzC,CAAA;AAEF,eAAO,MAAM,0BAA0B;;iBAErC,CAAA;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;iBAetC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;;iBAIvC,CAAA;AAEF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2BxC,CAAA;AAEF,eAAO,MAAM,kCAAkC;;iBAE7C,CAAA;AAEF,eAAO,MAAM,mCAAmC;;;;;;;;;;iBAY9C,CAAA;AAGF,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AACnD,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AAC3C,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AACvE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AACzE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAC7E,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAC/E,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,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AACnF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA;AACrF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAC7E,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAC/E,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,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAA;AAC7F,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { z } from
|
|
2
|
-
import { albumNameSchema, artistNameSchema, contentSchema, countSchema, durationSchema, fromSchema, imageSchema, itemsPerPageSchema, langSchema, limitSchema, mbidSchema, pageSchema, rankSchema, reachSchema, summarySchema, tagNameSchema, toSchema, totalPagesSchema, totalSchema, trackNameSchema, urlSchema } from
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { albumNameSchema, artistNameSchema, contentSchema, countSchema, durationSchema, fromSchema, imageSchema, itemsPerPageSchema, langSchema, limitSchema, mbidSchema, pageSchema, rankSchema, reachSchema, summarySchema, tagNameSchema, toSchema, totalPagesSchema, totalSchema, trackNameSchema, urlSchema, } from './schemas/index.js';
|
|
3
3
|
export const tagWikiSchema = z.object({
|
|
4
4
|
summary: summarySchema,
|
|
5
|
-
content: contentSchema
|
|
5
|
+
content: contentSchema,
|
|
6
6
|
});
|
|
7
7
|
/**
|
|
8
8
|
* Tag
|
|
@@ -13,33 +13,33 @@ export const tagSchema = z.object({
|
|
|
13
13
|
url: urlSchema,
|
|
14
14
|
total: totalSchema,
|
|
15
15
|
reach: reachSchema,
|
|
16
|
-
wiki: tagWikiSchema
|
|
16
|
+
wiki: tagWikiSchema,
|
|
17
17
|
});
|
|
18
18
|
export const tagGetInfoRequestSchema = z.object({
|
|
19
19
|
tag: tagNameSchema,
|
|
20
|
-
lang: langSchema.optional()
|
|
20
|
+
lang: langSchema.optional(),
|
|
21
21
|
});
|
|
22
22
|
export const tagGetInfoResponseSchema = z.object({
|
|
23
|
-
tag: tagSchema
|
|
23
|
+
tag: tagSchema,
|
|
24
24
|
});
|
|
25
25
|
export const tagGetSimilarRequestSchema = z.object({
|
|
26
|
-
tag: tagNameSchema
|
|
26
|
+
tag: tagNameSchema,
|
|
27
27
|
});
|
|
28
28
|
export const tagGetSimilarResponseSchema = z.object({
|
|
29
29
|
similar: z.object({
|
|
30
30
|
tag: z.array(z.object({
|
|
31
31
|
name: tagNameSchema,
|
|
32
|
-
url: urlSchema
|
|
32
|
+
url: urlSchema,
|
|
33
33
|
})),
|
|
34
|
-
|
|
35
|
-
tag: tagNameSchema
|
|
36
|
-
})
|
|
37
|
-
})
|
|
34
|
+
'@attr': z.object({
|
|
35
|
+
tag: tagNameSchema,
|
|
36
|
+
}),
|
|
37
|
+
}),
|
|
38
38
|
});
|
|
39
39
|
export const tagGetTopAlbumsRequestSchema = z.object({
|
|
40
40
|
tag: tagNameSchema,
|
|
41
41
|
limit: limitSchema.optional(),
|
|
42
|
-
page: pageSchema.optional()
|
|
42
|
+
page: pageSchema.optional(),
|
|
43
43
|
});
|
|
44
44
|
export const tagGetTopAlbumsResponseSchema = z.object({
|
|
45
45
|
albums: z.object({
|
|
@@ -50,26 +50,26 @@ export const tagGetTopAlbumsResponseSchema = z.object({
|
|
|
50
50
|
artist: z.object({
|
|
51
51
|
name: artistNameSchema,
|
|
52
52
|
mbid: mbidSchema,
|
|
53
|
-
url: urlSchema
|
|
53
|
+
url: urlSchema,
|
|
54
54
|
}),
|
|
55
55
|
image: z.array(imageSchema),
|
|
56
|
-
|
|
57
|
-
rank: rankSchema
|
|
58
|
-
})
|
|
56
|
+
'@attr': z.object({
|
|
57
|
+
rank: rankSchema,
|
|
58
|
+
}),
|
|
59
59
|
})),
|
|
60
|
-
|
|
60
|
+
'@attr': z.object({
|
|
61
61
|
tag: tagNameSchema,
|
|
62
62
|
page: pageSchema,
|
|
63
63
|
perPage: itemsPerPageSchema,
|
|
64
64
|
totalPages: totalPagesSchema,
|
|
65
|
-
total: totalSchema
|
|
66
|
-
})
|
|
67
|
-
})
|
|
65
|
+
total: totalSchema,
|
|
66
|
+
}),
|
|
67
|
+
}),
|
|
68
68
|
});
|
|
69
69
|
export const tagGetTopArtistsRequestSchema = z.object({
|
|
70
70
|
tag: tagNameSchema,
|
|
71
71
|
limit: limitSchema.optional(),
|
|
72
|
-
page: pageSchema.optional()
|
|
72
|
+
page: pageSchema.optional(),
|
|
73
73
|
});
|
|
74
74
|
export const tagGetTopArtistsResponseSchema = z.object({
|
|
75
75
|
topartists: z.object({
|
|
@@ -78,40 +78,40 @@ export const tagGetTopArtistsResponseSchema = z.object({
|
|
|
78
78
|
mbid: mbidSchema,
|
|
79
79
|
url: urlSchema,
|
|
80
80
|
image: z.array(imageSchema),
|
|
81
|
-
|
|
82
|
-
rank: rankSchema
|
|
83
|
-
})
|
|
81
|
+
'@attr': z.object({
|
|
82
|
+
rank: rankSchema,
|
|
83
|
+
}),
|
|
84
84
|
})),
|
|
85
|
-
|
|
85
|
+
'@attr': z.object({
|
|
86
86
|
tag: tagNameSchema,
|
|
87
87
|
page: pageSchema,
|
|
88
88
|
perPage: itemsPerPageSchema,
|
|
89
89
|
totalPages: totalPagesSchema,
|
|
90
|
-
total: totalSchema
|
|
91
|
-
})
|
|
92
|
-
})
|
|
90
|
+
total: totalSchema,
|
|
91
|
+
}),
|
|
92
|
+
}),
|
|
93
93
|
});
|
|
94
94
|
export const tagGetTopTagsRequestSchema = z.object({
|
|
95
|
-
limit: limitSchema.optional()
|
|
95
|
+
limit: limitSchema.optional(),
|
|
96
96
|
});
|
|
97
97
|
export const tagGetTopTagsResponseSchema = z.object({
|
|
98
98
|
toptags: z.object({
|
|
99
99
|
tag: z.array(z.object({
|
|
100
100
|
name: tagNameSchema,
|
|
101
101
|
reach: reachSchema,
|
|
102
|
-
count: countSchema
|
|
102
|
+
count: countSchema,
|
|
103
103
|
})),
|
|
104
|
-
|
|
104
|
+
'@attr': z.object({
|
|
105
105
|
offset: z.number(),
|
|
106
106
|
num_res: z.number(),
|
|
107
|
-
total: totalSchema
|
|
108
|
-
})
|
|
109
|
-
})
|
|
107
|
+
total: totalSchema,
|
|
108
|
+
}),
|
|
109
|
+
}),
|
|
110
110
|
});
|
|
111
111
|
export const tagGetTopTracksRequestSchema = z.object({
|
|
112
112
|
tag: tagNameSchema,
|
|
113
113
|
limit: limitSchema.optional(),
|
|
114
|
-
page: pageSchema.optional()
|
|
114
|
+
page: pageSchema.optional(),
|
|
115
115
|
});
|
|
116
116
|
export const tagGetTopTracksResponseSchema = z.object({
|
|
117
117
|
toptracks: z.object({
|
|
@@ -123,34 +123,34 @@ export const tagGetTopTracksResponseSchema = z.object({
|
|
|
123
123
|
artist: z.object({
|
|
124
124
|
name: artistNameSchema,
|
|
125
125
|
mbid: mbidSchema,
|
|
126
|
-
url: urlSchema
|
|
126
|
+
url: urlSchema,
|
|
127
127
|
}),
|
|
128
128
|
image: z.array(imageSchema),
|
|
129
|
-
|
|
130
|
-
rank: rankSchema
|
|
131
|
-
})
|
|
129
|
+
'@attr': z.object({
|
|
130
|
+
rank: rankSchema,
|
|
131
|
+
}),
|
|
132
132
|
})),
|
|
133
|
-
|
|
133
|
+
'@attr': z.object({
|
|
134
134
|
tag: tagNameSchema,
|
|
135
135
|
page: pageSchema,
|
|
136
136
|
perPage: itemsPerPageSchema,
|
|
137
137
|
totalPages: totalPagesSchema,
|
|
138
|
-
total: totalSchema
|
|
139
|
-
})
|
|
140
|
-
})
|
|
138
|
+
total: totalSchema,
|
|
139
|
+
}),
|
|
140
|
+
}),
|
|
141
141
|
});
|
|
142
142
|
export const tagGetWeeklyChartListRequestSchema = z.object({
|
|
143
|
-
tag: tagNameSchema
|
|
143
|
+
tag: tagNameSchema,
|
|
144
144
|
});
|
|
145
145
|
export const tagGetWeeklyChartListResponseSchema = z.object({
|
|
146
146
|
weeklychartlist: z.object({
|
|
147
147
|
chart: z.array(z.object({
|
|
148
148
|
from: fromSchema,
|
|
149
|
-
to: toSchema
|
|
149
|
+
to: toSchema,
|
|
150
150
|
})),
|
|
151
|
-
|
|
152
|
-
tag: tagNameSchema
|
|
153
|
-
})
|
|
154
|
-
})
|
|
151
|
+
'@attr': z.object({
|
|
152
|
+
tag: tagNameSchema,
|
|
153
|
+
}),
|
|
154
|
+
}),
|
|
155
155
|
});
|
|
156
156
|
//# sourceMappingURL=tag.schemas.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tag.schemas.js","sourceRoot":"","sources":["../../src/services/tag.schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"tag.schemas.js","sourceRoot":"","sources":["../../src/services/tag.schemas.ts"],"names":[],"mappings":"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"}
|
package/dist/services/track.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { BatchTracksScrobbleRequest, TrackGetInfoRequest, TrackGetInfoResponse, TrackGetSimilarRequest, TrackGetSimilarResponse, TrackGetTagsRequest, TrackGetTagsResponse, TrackGetTopTagsRequest, TrackGetTopTagsResponse, TrackScrobbleRequest, TrackScrobbleResponse, TrackSearchRequest, TrackSearchResponse } from './track.schemas.js';
|
|
2
1
|
import type { LastFmConfig } from '../config.js';
|
|
2
|
+
import type { BatchTracksScrobbleRequest, TrackAddTagsRequest, TrackGetCorrectionRequest, TrackGetCorrectionResponse, TrackGetInfoRequest, TrackGetInfoResponse, TrackGetSimilarRequest, TrackGetSimilarResponse, TrackGetTagsRequest, TrackGetTagsResponse, TrackGetTopTagsRequest, TrackGetTopTagsResponse, TrackLoveRequest, TrackRemoveTagRequest, TrackScrobbleRequest, TrackScrobbleResponse, TrackSearchRequest, TrackSearchResponse, TrackUpdateNowPlayingRequest, TrackUpdateNowPlayingResponse } from './track.schemas.js';
|
|
3
3
|
export interface TrackService {
|
|
4
4
|
/**
|
|
5
5
|
* Get the metadata for a track on Last.fm using the artist/track name or a musicbrainz id.
|
|
@@ -33,6 +33,19 @@ export interface TrackService {
|
|
|
33
33
|
* https://www.last.fm/api/show/track.getTopTags
|
|
34
34
|
* */
|
|
35
35
|
getTopTags: (params: TrackGetTopTagsRequest, init?: RequestInit) => Promise<TrackGetTopTagsResponse>;
|
|
36
|
+
/**
|
|
37
|
+
* Get the canonical correction for a misspelled or noncanonical
|
|
38
|
+
* track (with its artist). Returns the list of corrections Last.fm
|
|
39
|
+
* would apply to the provided input, including the corrected track
|
|
40
|
+
* and artist identities plus per-field "corrected" flags and a
|
|
41
|
+
* positional `index` attribute. Unsigned GET — no `sk` or
|
|
42
|
+
* `api_sig` are sent.
|
|
43
|
+
* @param {TrackGetCorrectionRequest} params
|
|
44
|
+
* @param {RequestInit} init
|
|
45
|
+
* @returns {Promise<TrackGetCorrectionResponse>}
|
|
46
|
+
* https://www.last.fm/api/show/track.getCorrection
|
|
47
|
+
*/
|
|
48
|
+
getCorrection: (params: TrackGetCorrectionRequest, init?: RequestInit) => Promise<TrackGetCorrectionResponse>;
|
|
36
49
|
/**
|
|
37
50
|
* Search for a track by track name. Returns track matches sorted by relevance.
|
|
38
51
|
* @param {TrackSearchRequest} params
|
|
@@ -44,7 +57,15 @@ export interface TrackService {
|
|
|
44
57
|
/**
|
|
45
58
|
* Scrobble a track. Submits a track play to the Last.fm.
|
|
46
59
|
* Canonical Last.fm method name: `track.scrobble`.
|
|
47
|
-
*
|
|
60
|
+
*
|
|
61
|
+
* **Requires authentication.** Pass `sk` in `params.sk` (preferred for
|
|
62
|
+
* ad-hoc calls) or set `sessionKey` on the `LastFmConfig` when
|
|
63
|
+
* constructing the client (preferred for long-lived clients). Obtain a
|
|
64
|
+
* session key via `auth.getToken` + the browser-based `auth.getSession`
|
|
65
|
+
* flow (works for self-service API keys), or via `auth.getMobileSession`
|
|
66
|
+
* (requires a mobile-class API key — not self-service).
|
|
67
|
+
*
|
|
68
|
+
* @param {TrackScrobbleRequest} params - `artist`, `track`, `timestamp`, and optional `sk` and `album`
|
|
48
69
|
* @param {RequestInit} init
|
|
49
70
|
* @returns {Promise<TrackScrobbleResponse>}
|
|
50
71
|
* https://www.last.fm/api/show/track.scrobble
|
|
@@ -59,16 +80,119 @@ export interface TrackService {
|
|
|
59
80
|
* Scrobble a batch of tracks. Submits a batch of track plays to the Last.fm.
|
|
60
81
|
* Canonical Last.fm method name: `track.scrobble`.
|
|
61
82
|
* @param {BatchTracksScrobbleRequest} params
|
|
83
|
+
* @param {RequestInit} init
|
|
62
84
|
* @returns {Promise<TrackScrobbleResponse>}
|
|
63
85
|
* https://www.last.fm/api/show/track.scrobble
|
|
64
86
|
* */
|
|
65
|
-
scrobbleMany: (params: BatchTracksScrobbleRequest) => Promise<TrackScrobbleResponse>;
|
|
87
|
+
scrobbleMany: (params: BatchTracksScrobbleRequest, init?: RequestInit) => Promise<TrackScrobbleResponse>;
|
|
66
88
|
/**
|
|
67
89
|
* @deprecated Use `scrobbleMany` instead. Renamed to match the canonical
|
|
68
90
|
* Last.fm method name (`track.scrobble`). Kept as an alias for backwards
|
|
69
91
|
* compatibility.
|
|
70
92
|
*/
|
|
71
|
-
postBatchTrackScrobble: (params: BatchTracksScrobbleRequest) => Promise<TrackScrobbleResponse>;
|
|
93
|
+
postBatchTrackScrobble: (params: BatchTracksScrobbleRequest, init?: RequestInit) => Promise<TrackScrobbleResponse>;
|
|
94
|
+
/**
|
|
95
|
+
* Add one or more personal tags to a track. Requires an
|
|
96
|
+
* authenticated session.
|
|
97
|
+
*
|
|
98
|
+
* The `tags` array is sent on the wire as a comma-separated string
|
|
99
|
+
* (Last.fm convention). Returns when the call has been accepted by
|
|
100
|
+
* Last.fm.
|
|
101
|
+
*
|
|
102
|
+
* Idempotency is not guaranteed by Last.fm.
|
|
103
|
+
*
|
|
104
|
+
* **Authentication:** pass `sk` in `params.sk` (preferred for ad-hoc
|
|
105
|
+
* calls) or set `sessionKey` on the `LastFmConfig` when constructing
|
|
106
|
+
* the client (preferred for long-lived clients). Obtain a session key
|
|
107
|
+
* via `auth.getToken` + the browser-based `auth.getSession` flow, or
|
|
108
|
+
* via `auth.getMobileSession` (mobile-class API keys only).
|
|
109
|
+
*
|
|
110
|
+
* @param {TrackAddTagsRequest} params
|
|
111
|
+
* @param {RequestInit} init
|
|
112
|
+
* @returns {Promise<void>}
|
|
113
|
+
* https://www.last.fm/api/show/track.addTags
|
|
114
|
+
*/
|
|
115
|
+
addTags: (params: TrackAddTagsRequest, init?: RequestInit) => Promise<void>;
|
|
116
|
+
/**
|
|
117
|
+
* Remove a single personal tag from a track. Requires an
|
|
118
|
+
* authenticated session.
|
|
119
|
+
*
|
|
120
|
+
* Last.fm does not document idempotency for `track.removeTag`.
|
|
121
|
+
*
|
|
122
|
+
* **Authentication:** pass `sk` in `params.sk` (preferred for ad-hoc
|
|
123
|
+
* calls) or set `sessionKey` on the `LastFmConfig` when constructing
|
|
124
|
+
* the client. Obtain a session key via `auth.getToken` +
|
|
125
|
+
* `auth.getSession`, or `auth.getMobileSession` (mobile-class only).
|
|
126
|
+
*
|
|
127
|
+
* @param {TrackRemoveTagRequest} params
|
|
128
|
+
* @param {RequestInit} init
|
|
129
|
+
* @returns {Promise<void>}
|
|
130
|
+
* https://www.last.fm/api/show/track.removeTag
|
|
131
|
+
*/
|
|
132
|
+
removeTag: (params: TrackRemoveTagRequest, init?: RequestInit) => Promise<void>;
|
|
133
|
+
/**
|
|
134
|
+
* Mark a track as loved on the user's Last.fm account. Requires an
|
|
135
|
+
* authenticated session.
|
|
136
|
+
*
|
|
137
|
+
* Last.fm does not document idempotency for `track.love`; calling
|
|
138
|
+
* twice is a server-side concern.
|
|
139
|
+
*
|
|
140
|
+
* **Authentication:** pass `sk` in `params.sk` (preferred for ad-hoc
|
|
141
|
+
* calls) or set `sessionKey` on the `LastFmConfig` when constructing
|
|
142
|
+
* the client. Obtain a session key via `auth.getToken` +
|
|
143
|
+
* `auth.getSession`, or `auth.getMobileSession` (mobile-class only).
|
|
144
|
+
*
|
|
145
|
+
* @param {TrackLoveRequest} params
|
|
146
|
+
* @param {RequestInit} init
|
|
147
|
+
* @returns {Promise<void>}
|
|
148
|
+
* https://www.last.fm/api/show/track.love
|
|
149
|
+
*/
|
|
150
|
+
love: (params: TrackLoveRequest, init?: RequestInit) => Promise<void>;
|
|
151
|
+
/**
|
|
152
|
+
* Remove a track from the user's loved list on Last.fm. Requires an
|
|
153
|
+
* authenticated session.
|
|
154
|
+
*
|
|
155
|
+
* Last.fm does not document idempotency for `track.unlove`.
|
|
156
|
+
*
|
|
157
|
+
* **Authentication:** pass `sk` in `params.sk` (preferred for ad-hoc
|
|
158
|
+
* calls) or set `sessionKey` on the `LastFmConfig` when constructing
|
|
159
|
+
* the client. Obtain a session key via `auth.getToken` +
|
|
160
|
+
* `auth.getSession`, or `auth.getMobileSession` (mobile-class only).
|
|
161
|
+
*
|
|
162
|
+
* @param {TrackUnloveRequest} params
|
|
163
|
+
* @param {RequestInit} init
|
|
164
|
+
* @returns {Promise<void>}
|
|
165
|
+
* https://www.last.fm/api/show/track.unlove
|
|
166
|
+
*/
|
|
167
|
+
unlove: (params: TrackLoveRequest, init?: RequestInit) => Promise<void>;
|
|
168
|
+
/**
|
|
169
|
+
* Announce the track the user is currently listening to on Last.fm.
|
|
170
|
+
* Requires an authenticated session.
|
|
171
|
+
*
|
|
172
|
+
* Optional fields (`album`, `trackNumber`, `context`, `mbid`,
|
|
173
|
+
* `duration`, `albumArtist`) are only included in the body and
|
|
174
|
+
* signature when they are defined; the shared `signedPost`
|
|
175
|
+
* transport strips `undefined` values before signing. Note that
|
|
176
|
+
* `trackNumber` and `albumArtist` keep their exact wire casing.
|
|
177
|
+
*
|
|
178
|
+
* This endpoint does not accept a `timestamp` parameter — Last.fm
|
|
179
|
+
* derives now-playing state from server time. Use
|
|
180
|
+
* `track.scrobble` for completed plays.
|
|
181
|
+
*
|
|
182
|
+
* The `context` field is honoured only for API keys that Last.fm
|
|
183
|
+
* has whitelisted; other API keys receive an ignored-message code.
|
|
184
|
+
*
|
|
185
|
+
* **Authentication:** pass `sk` in `params.sk` (preferred for ad-hoc
|
|
186
|
+
* calls) or set `sessionKey` on the `LastFmConfig` when constructing
|
|
187
|
+
* the client. Obtain a session key via `auth.getToken` +
|
|
188
|
+
* `auth.getSession`, or `auth.getMobileSession` (mobile-class only).
|
|
189
|
+
*
|
|
190
|
+
* @param {TrackUpdateNowPlayingRequest} params
|
|
191
|
+
* @param {RequestInit} init
|
|
192
|
+
* @returns {Promise<TrackUpdateNowPlayingResponse>}
|
|
193
|
+
* https://www.last.fm/api/show/track.updateNowPlaying
|
|
194
|
+
*/
|
|
195
|
+
updateNowPlaying: (params: TrackUpdateNowPlayingRequest, init?: RequestInit) => Promise<TrackUpdateNowPlayingResponse>;
|
|
72
196
|
}
|
|
73
197
|
export declare function createTrackService(config: LastFmConfig): TrackService;
|
|
74
198
|
//# sourceMappingURL=track.d.ts.map
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../../src/services/track.ts"],"names":[],"mappings":"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"}
|
package/dist/services/track.js
CHANGED
|
@@ -1,25 +1,94 @@
|
|
|
1
|
-
import { fetcher,
|
|
2
|
-
import {
|
|
1
|
+
import { buildUrl, fetcher, LastFmApiError, signedPost } from '../utils.js';
|
|
2
|
+
import { buildBatchScrobbleParams, buildScrobbleParams } from './track.utils.js';
|
|
3
|
+
function resolveSessionKeyForTrackMutation(config, requestSk, action) {
|
|
4
|
+
const sk = requestSk ?? config.sessionKey;
|
|
5
|
+
if (!sk) {
|
|
6
|
+
throw new LastFmApiError(`A session key (\`sk\`) is required to track.${action}. Pass \`sk\` in the request params or set \`sessionKey\` on the LastFmConfig.`, 0);
|
|
7
|
+
}
|
|
8
|
+
return sk;
|
|
9
|
+
}
|
|
10
|
+
function resolveSessionKeyForNowPlaying(config, requestSk) {
|
|
11
|
+
const sk = requestSk ?? config.sessionKey;
|
|
12
|
+
if (!sk) {
|
|
13
|
+
throw new LastFmApiError('A session key (`sk`) is required to track.updateNowPlaying. Pass `sk` in the request params or set `sessionKey` on the LastFmConfig.', 0);
|
|
14
|
+
}
|
|
15
|
+
return sk;
|
|
16
|
+
}
|
|
3
17
|
export function createTrackService(config) {
|
|
4
|
-
const scrobbleImpl = (
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
...init,
|
|
8
|
-
method: 'POST'
|
|
18
|
+
const scrobbleImpl = (params, init) => signedPost(config, 'track.scrobble', {
|
|
19
|
+
params: buildScrobbleParams(config, params),
|
|
20
|
+
init,
|
|
9
21
|
});
|
|
10
|
-
const scrobbleManyImpl = (
|
|
11
|
-
|
|
22
|
+
const scrobbleManyImpl = (params, init) => signedPost(config, 'track.scrobble', {
|
|
23
|
+
params: buildBatchScrobbleParams(config, params),
|
|
24
|
+
init,
|
|
12
25
|
});
|
|
13
26
|
return {
|
|
14
27
|
getInfo: (params, init) => fetcher(buildUrl(config, 'track.getInfo', params), init),
|
|
15
28
|
getSimilar: (params, init) => fetcher(buildUrl(config, 'track.getSimilar', params), init),
|
|
16
29
|
getTags: (params, init) => fetcher(buildUrl(config, 'track.getTags', params), init),
|
|
17
30
|
getTopTags: (params, init) => fetcher(buildUrl(config, 'track.getTopTags', params), init),
|
|
31
|
+
getCorrection: (params, init) => fetcher(buildUrl(config, 'track.getCorrection', params), init),
|
|
18
32
|
search: (params, init) => fetcher(buildUrl(config, 'track.search', params), init),
|
|
19
33
|
scrobble: scrobbleImpl,
|
|
20
34
|
postTrackScrobble: scrobbleImpl,
|
|
21
35
|
scrobbleMany: scrobbleManyImpl,
|
|
22
|
-
postBatchTrackScrobble: scrobbleManyImpl
|
|
36
|
+
postBatchTrackScrobble: scrobbleManyImpl,
|
|
37
|
+
addTags: (params, init) => {
|
|
38
|
+
const sk = resolveSessionKeyForTrackMutation(config, params.sk, 'addTags');
|
|
39
|
+
return signedPost(config, 'track.addTags', {
|
|
40
|
+
params: {
|
|
41
|
+
artist: params.artist,
|
|
42
|
+
track: params.track,
|
|
43
|
+
tags: params.tags.join(','),
|
|
44
|
+
sk,
|
|
45
|
+
},
|
|
46
|
+
init,
|
|
47
|
+
}).then(() => undefined);
|
|
48
|
+
},
|
|
49
|
+
removeTag: (params, init) => {
|
|
50
|
+
const sk = resolveSessionKeyForTrackMutation(config, params.sk, 'removeTag');
|
|
51
|
+
return signedPost(config, 'track.removeTag', {
|
|
52
|
+
params: {
|
|
53
|
+
artist: params.artist,
|
|
54
|
+
track: params.track,
|
|
55
|
+
tag: params.tag,
|
|
56
|
+
sk,
|
|
57
|
+
},
|
|
58
|
+
init,
|
|
59
|
+
}).then(() => undefined);
|
|
60
|
+
},
|
|
61
|
+
love: (params, init) => {
|
|
62
|
+
const sk = resolveSessionKeyForTrackMutation(config, params.sk, 'love');
|
|
63
|
+
return signedPost(config, 'track.love', {
|
|
64
|
+
params: { artist: params.artist, track: params.track, sk },
|
|
65
|
+
init,
|
|
66
|
+
}).then(() => undefined);
|
|
67
|
+
},
|
|
68
|
+
unlove: (params, init) => {
|
|
69
|
+
const sk = resolveSessionKeyForTrackMutation(config, params.sk, 'unlove');
|
|
70
|
+
return signedPost(config, 'track.unlove', {
|
|
71
|
+
params: { artist: params.artist, track: params.track, sk },
|
|
72
|
+
init,
|
|
73
|
+
}).then(() => undefined);
|
|
74
|
+
},
|
|
75
|
+
updateNowPlaying: (params, init) => {
|
|
76
|
+
const sk = resolveSessionKeyForNowPlaying(config, params.sk);
|
|
77
|
+
return signedPost(config, 'track.updateNowPlaying', {
|
|
78
|
+
params: {
|
|
79
|
+
artist: params.artist,
|
|
80
|
+
track: params.track,
|
|
81
|
+
album: params.album,
|
|
82
|
+
trackNumber: params.trackNumber,
|
|
83
|
+
context: params.context,
|
|
84
|
+
mbid: params.mbid,
|
|
85
|
+
duration: params.duration,
|
|
86
|
+
albumArtist: params.albumArtist,
|
|
87
|
+
sk,
|
|
88
|
+
},
|
|
89
|
+
init,
|
|
90
|
+
});
|
|
91
|
+
},
|
|
23
92
|
};
|
|
24
93
|
}
|
|
25
94
|
//# sourceMappingURL=track.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track.js","sourceRoot":"","sources":["../../src/services/track.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"track.js","sourceRoot":"","sources":["../../src/services/track.ts"],"names":[],"mappings":"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"}
|