@saavn-labs/sdk 0.1.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 (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +339 -0
  3. package/dist/core/models/album.d.ts +32 -0
  4. package/dist/core/models/album.js +1 -0
  5. package/dist/core/models/artist.d.ts +61 -0
  6. package/dist/core/models/artist.js +1 -0
  7. package/dist/core/models/index.d.ts +4 -0
  8. package/dist/core/models/index.js +4 -0
  9. package/dist/core/models/playlist.d.ts +35 -0
  10. package/dist/core/models/playlist.js +1 -0
  11. package/dist/core/models/song.d.ts +52 -0
  12. package/dist/core/models/song.js +1 -0
  13. package/dist/core/modules/album.module.d.ts +82 -0
  14. package/dist/core/modules/album.module.js +74 -0
  15. package/dist/core/modules/artist.module.d.ts +97 -0
  16. package/dist/core/modules/artist.module.js +49 -0
  17. package/dist/core/modules/extras.module.d.ts +385 -0
  18. package/dist/core/modules/extras.module.js +64 -0
  19. package/dist/core/modules/playlist.module.d.ts +79 -0
  20. package/dist/core/modules/playlist.module.js +74 -0
  21. package/dist/core/modules/song.module.d.ts +91 -0
  22. package/dist/core/modules/song.module.js +97 -0
  23. package/dist/helpers/errors.d.ts +25 -0
  24. package/dist/helpers/errors.js +84 -0
  25. package/dist/helpers/experimental/stream-urls/index.d.ts +20 -0
  26. package/dist/helpers/experimental/stream-urls/index.js +33 -0
  27. package/dist/helpers/experimental/stream-urls/stream-urls.edge.d.ts +4 -0
  28. package/dist/helpers/experimental/stream-urls/stream-urls.edge.js +38 -0
  29. package/dist/helpers/experimental/stream-urls/stream-urls.node.d.ts +4 -0
  30. package/dist/helpers/experimental/stream-urls/stream-urls.node.js +27 -0
  31. package/dist/helpers/fetch.d.ts +38 -0
  32. package/dist/helpers/fetch.js +38 -0
  33. package/dist/helpers/utils.d.ts +13 -0
  34. package/dist/helpers/utils.js +58 -0
  35. package/dist/index.d.ts +10 -0
  36. package/dist/index.js +8 -0
  37. package/dist/saavn/common-mapper.d.ts +77 -0
  38. package/dist/saavn/common-mapper.js +348 -0
  39. package/dist/saavn/entities/album.entity.d.ts +151 -0
  40. package/dist/saavn/entities/album.entity.js +25 -0
  41. package/dist/saavn/entities/artist.entity.d.ts +274 -0
  42. package/dist/saavn/entities/artist.entity.js +49 -0
  43. package/dist/saavn/entities/base.d.ts +117 -0
  44. package/dist/saavn/entities/base.js +71 -0
  45. package/dist/saavn/entities/extras.d.ts +102 -0
  46. package/dist/saavn/entities/extras.js +43 -0
  47. package/dist/saavn/entities/index.d.ts +6 -0
  48. package/dist/saavn/entities/index.js +6 -0
  49. package/dist/saavn/entities/playlist.entity.d.ts +143 -0
  50. package/dist/saavn/entities/playlist.entity.js +55 -0
  51. package/dist/saavn/entities/show.entity.d.ts +14 -0
  52. package/dist/saavn/entities/show.entity.js +14 -0
  53. package/dist/saavn/entities/song.entity.d.ts +142 -0
  54. package/dist/saavn/entities/song.entity.js +48 -0
  55. package/dist/saavn/operations/get-details/index.d.ts +755 -0
  56. package/dist/saavn/operations/get-details/index.js +34 -0
  57. package/dist/saavn/operations/get-details/mapper.ops.d.ts +35 -0
  58. package/dist/saavn/operations/get-details/mapper.ops.js +55 -0
  59. package/dist/saavn/operations/get-details/schema.ops.d.ts +706 -0
  60. package/dist/saavn/operations/get-details/schema.ops.js +49 -0
  61. package/dist/saavn/operations/get-reco/index.d.ts +144 -0
  62. package/dist/saavn/operations/get-reco/index.js +19 -0
  63. package/dist/saavn/operations/get-reco/mapper.ops.d.ts +36 -0
  64. package/dist/saavn/operations/get-reco/mapper.ops.js +43 -0
  65. package/dist/saavn/operations/get-reco/schema.ops.d.ts +103 -0
  66. package/dist/saavn/operations/get-reco/schema.ops.js +28 -0
  67. package/dist/saavn/operations/get-trending/index.d.ts +288 -0
  68. package/dist/saavn/operations/get-trending/index.js +24 -0
  69. package/dist/saavn/operations/get-trending/mapper.ops.d.ts +13 -0
  70. package/dist/saavn/operations/get-trending/mapper.ops.js +134 -0
  71. package/dist/saavn/operations/get-trending/schema.ops.d.ts +272 -0
  72. package/dist/saavn/operations/get-trending/schema.ops.js +34 -0
  73. package/dist/saavn/operations/index.d.ts +6 -0
  74. package/dist/saavn/operations/index.js +6 -0
  75. package/dist/saavn/operations/search-results/index.d.ts +790 -0
  76. package/dist/saavn/operations/search-results/index.js +29 -0
  77. package/dist/saavn/operations/search-results/mapper.ops.d.ts +413 -0
  78. package/dist/saavn/operations/search-results/mapper.ops.js +80 -0
  79. package/dist/saavn/operations/search-results/schema.ops.d.ts +366 -0
  80. package/dist/saavn/operations/search-results/schema.ops.js +101 -0
  81. package/dist/saavn/operations/web-api/index.d.ts +604 -0
  82. package/dist/saavn/operations/web-api/index.js +29 -0
  83. package/dist/saavn/operations/web-api/mapper.ops.d.ts +11 -0
  84. package/dist/saavn/operations/web-api/mapper.ops.js +23 -0
  85. package/dist/saavn/operations/web-api/schema.ops.d.ts +582 -0
  86. package/dist/saavn/operations/web-api/schema.ops.js +50 -0
  87. package/dist/saavn/operations/web-radio/index.d.ts +181 -0
  88. package/dist/saavn/operations/web-radio/index.js +19 -0
  89. package/dist/saavn/operations/web-radio/mapper.ops.d.ts +14 -0
  90. package/dist/saavn/operations/web-radio/mapper.ops.js +35 -0
  91. package/dist/saavn/operations/web-radio/schema.ops.d.ts +162 -0
  92. package/dist/saavn/operations/web-radio/schema.ops.js +56 -0
  93. package/dist/saavn/primitives/enums.d.ts +17 -0
  94. package/dist/saavn/primitives/enums.js +4 -0
  95. package/dist/saavn/primitives/string.d.ts +5 -0
  96. package/dist/saavn/primitives/string.js +22 -0
  97. package/dist/saavn/run-operation.d.ts +12 -0
  98. package/dist/saavn/run-operation.js +39 -0
  99. package/dist/schemas/index.d.ts +2188 -0
  100. package/dist/schemas/index.js +14 -0
  101. package/dist/types.d.ts +24 -0
  102. package/dist/types.js +1 -0
  103. package/package.json +82 -0
@@ -0,0 +1,288 @@
1
+ import { SaavnGetTrendingSchema } from './schema.ops';
2
+ export declare const SaavnGetTrending: {
3
+ all: {
4
+ call: string;
5
+ schema: {
6
+ readonly params: import("zod").ZodObject<{}, import("zod/v4/core").$strict>;
7
+ readonly response: import("zod").ZodArray<import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
8
+ id: import("zod").ZodString;
9
+ title: import("zod").ZodString;
10
+ subtitle: import("zod").ZodString;
11
+ header_desc: import("zod").ZodString;
12
+ perma_url: import("zod").ZodString;
13
+ image: import("zod").ZodString;
14
+ language: import("zod").ZodString;
15
+ year: import("zod").ZodString;
16
+ play_count: import("zod").ZodString;
17
+ explicit_content: import("zod").ZodString;
18
+ type: import("zod").ZodLiteral<"album">;
19
+ more_info: import("zod").ZodObject<{
20
+ release_date: import("zod").ZodString;
21
+ song_count: import("zod").ZodString;
22
+ artistMap: import("zod").ZodObject<{
23
+ primary_artists: import("zod").ZodArray<import("zod").ZodObject<{
24
+ id: import("zod").ZodString;
25
+ name: import("zod").ZodString;
26
+ role: import("zod").ZodString;
27
+ image: import("zod").ZodString;
28
+ type: import("zod").ZodLiteral<"artist">;
29
+ perma_url: import("zod").ZodString;
30
+ }, import("zod/v4/core").$loose>>;
31
+ featured_artists: import("zod").ZodArray<import("zod").ZodObject<{
32
+ id: import("zod").ZodString;
33
+ name: import("zod").ZodString;
34
+ role: import("zod").ZodString;
35
+ image: import("zod").ZodString;
36
+ type: import("zod").ZodLiteral<"artist">;
37
+ perma_url: import("zod").ZodString;
38
+ }, import("zod/v4/core").$loose>>;
39
+ artists: import("zod").ZodArray<import("zod").ZodObject<{
40
+ id: import("zod").ZodString;
41
+ name: import("zod").ZodString;
42
+ role: import("zod").ZodString;
43
+ image: import("zod").ZodString;
44
+ type: import("zod").ZodLiteral<"artist">;
45
+ perma_url: import("zod").ZodString;
46
+ }, import("zod/v4/core").$loose>>;
47
+ }, import("zod/v4/core").$loose>;
48
+ }, import("zod/v4/core").$loose>;
49
+ }, import("zod/v4/core").$loose>, import("zod").ZodObject<{
50
+ id: import("zod").ZodString;
51
+ title: import("zod").ZodString;
52
+ subtitle: import("zod").ZodString;
53
+ header_desc: import("zod").ZodString;
54
+ perma_url: import("zod").ZodString;
55
+ image: import("zod").ZodString;
56
+ language: import("zod").ZodString;
57
+ year: import("zod").ZodString;
58
+ play_count: import("zod").ZodString;
59
+ explicit_content: import("zod").ZodString;
60
+ type: import("zod").ZodLiteral<"playlist">;
61
+ more_info: import("zod").ZodObject<{
62
+ listid: import("zod").ZodString;
63
+ isWeekly: import("zod").ZodString;
64
+ listname: import("zod").ZodString;
65
+ firstname: import("zod").ZodString;
66
+ song_count: import("zod").ZodString;
67
+ follower_count: import("zod").ZodString;
68
+ fan_count: import("zod").ZodString;
69
+ }, import("zod/v4/core").$loose>;
70
+ }, import("zod/v4/core").$loose>, import("zod").ZodObject<{
71
+ id: import("zod").ZodString;
72
+ title: import("zod").ZodString;
73
+ subtitle: import("zod").ZodString;
74
+ header_desc: import("zod").ZodString;
75
+ perma_url: import("zod").ZodString;
76
+ image: import("zod").ZodString;
77
+ language: import("zod").ZodString;
78
+ year: import("zod").ZodString;
79
+ play_count: import("zod").ZodString;
80
+ explicit_content: import("zod").ZodString;
81
+ type: import("zod").ZodLiteral<"song">;
82
+ more_info: import("zod").ZodObject<{
83
+ music: import("zod").ZodString;
84
+ album_id: import("zod").ZodString;
85
+ album: import("zod").ZodString;
86
+ label: import("zod").ZodString;
87
+ label_id: import("zod").ZodNullable<import("zod").ZodString>;
88
+ origin: import("zod").ZodString;
89
+ is_dolby_content: import("zod").ZodBoolean;
90
+ encrypted_media_url: import("zod").ZodString;
91
+ encrypted_drm_media_url: import("zod").ZodString;
92
+ album_url: import("zod").ZodString;
93
+ duration: import("zod").ZodString;
94
+ has_lyrics: import("zod").ZodString;
95
+ lyrics_snippet: import("zod").ZodString;
96
+ lyrics_id: import("zod").ZodOptional<import("zod").ZodString>;
97
+ copyright_text: import("zod").ZodString;
98
+ release_date: import("zod").ZodNullable<import("zod").ZodString>;
99
+ artistMap: import("zod").ZodLazy<import("zod").ZodObject<{
100
+ primary_artists: import("zod").ZodArray<import("zod").ZodObject<{
101
+ id: import("zod").ZodString;
102
+ name: import("zod").ZodString;
103
+ role: import("zod").ZodString;
104
+ image: import("zod").ZodString;
105
+ type: import("zod").ZodLiteral<"artist">;
106
+ perma_url: import("zod").ZodString;
107
+ }, import("zod/v4/core").$loose>>;
108
+ featured_artists: import("zod").ZodArray<import("zod").ZodObject<{
109
+ id: import("zod").ZodString;
110
+ name: import("zod").ZodString;
111
+ role: import("zod").ZodString;
112
+ image: import("zod").ZodString;
113
+ type: import("zod").ZodLiteral<"artist">;
114
+ perma_url: import("zod").ZodString;
115
+ }, import("zod/v4/core").$loose>>;
116
+ artists: import("zod").ZodArray<import("zod").ZodObject<{
117
+ id: import("zod").ZodString;
118
+ name: import("zod").ZodString;
119
+ role: import("zod").ZodString;
120
+ image: import("zod").ZodString;
121
+ type: import("zod").ZodLiteral<"artist">;
122
+ perma_url: import("zod").ZodString;
123
+ }, import("zod/v4/core").$loose>>;
124
+ }, import("zod/v4/core").$loose>>;
125
+ vcode: import("zod").ZodOptional<import("zod").ZodString>;
126
+ vlink: import("zod").ZodOptional<import("zod").ZodString>;
127
+ label_url: import("zod").ZodOptional<import("zod").ZodString>;
128
+ }, import("zod/v4/core").$loose>;
129
+ }, import("zod/v4/core").$loose>], "type">>;
130
+ };
131
+ mapper: (data: import("zod").infer<typeof SaavnGetTrendingSchema.all.response>) => (import("../../../core/models").Album | import("../../../core/models").Song | import("../../../core/models").Playlist)[];
132
+ };
133
+ albums: {
134
+ call: string;
135
+ schema: {
136
+ readonly params: import("zod").ZodObject<{
137
+ entity_type: import("zod").ZodLiteral<"album">;
138
+ entity_language: import("zod").ZodString;
139
+ }, import("zod/v4/core").$strict>;
140
+ readonly response: import("zod").ZodArray<import("zod").ZodObject<{
141
+ id: import("zod").ZodString;
142
+ title: import("zod").ZodString;
143
+ subtitle: import("zod").ZodString;
144
+ header_desc: import("zod").ZodString;
145
+ perma_url: import("zod").ZodString;
146
+ image: import("zod").ZodString;
147
+ language: import("zod").ZodString;
148
+ year: import("zod").ZodString;
149
+ play_count: import("zod").ZodString;
150
+ explicit_content: import("zod").ZodString;
151
+ type: import("zod").ZodLiteral<"album">;
152
+ more_info: import("zod").ZodObject<{
153
+ release_date: import("zod").ZodString;
154
+ song_count: import("zod").ZodString;
155
+ artistMap: import("zod").ZodObject<{
156
+ primary_artists: import("zod").ZodArray<import("zod").ZodObject<{
157
+ id: import("zod").ZodString;
158
+ name: import("zod").ZodString;
159
+ role: import("zod").ZodString;
160
+ image: import("zod").ZodString;
161
+ type: import("zod").ZodLiteral<"artist">;
162
+ perma_url: import("zod").ZodString;
163
+ }, import("zod/v4/core").$loose>>;
164
+ featured_artists: import("zod").ZodArray<import("zod").ZodObject<{
165
+ id: import("zod").ZodString;
166
+ name: import("zod").ZodString;
167
+ role: import("zod").ZodString;
168
+ image: import("zod").ZodString;
169
+ type: import("zod").ZodLiteral<"artist">;
170
+ perma_url: import("zod").ZodString;
171
+ }, import("zod/v4/core").$loose>>;
172
+ artists: import("zod").ZodArray<import("zod").ZodObject<{
173
+ id: import("zod").ZodString;
174
+ name: import("zod").ZodString;
175
+ role: import("zod").ZodString;
176
+ image: import("zod").ZodString;
177
+ type: import("zod").ZodLiteral<"artist">;
178
+ perma_url: import("zod").ZodString;
179
+ }, import("zod/v4/core").$loose>>;
180
+ }, import("zod/v4/core").$loose>;
181
+ }, import("zod/v4/core").$loose>;
182
+ }, import("zod/v4/core").$loose>>;
183
+ };
184
+ mapper: (data: import("zod").infer<typeof SaavnGetTrendingSchema.albums.response>) => import("../../../core/models").Album[];
185
+ };
186
+ playlists: {
187
+ call: string;
188
+ schema: {
189
+ readonly params: import("zod").ZodObject<{
190
+ entity_type: import("zod").ZodLiteral<"playlist">;
191
+ entity_language: import("zod").ZodString;
192
+ }, import("zod/v4/core").$strict>;
193
+ readonly response: import("zod").ZodArray<import("zod").ZodObject<{
194
+ id: import("zod").ZodString;
195
+ title: import("zod").ZodString;
196
+ subtitle: import("zod").ZodString;
197
+ header_desc: import("zod").ZodString;
198
+ perma_url: import("zod").ZodString;
199
+ image: import("zod").ZodString;
200
+ language: import("zod").ZodString;
201
+ year: import("zod").ZodString;
202
+ play_count: import("zod").ZodString;
203
+ explicit_content: import("zod").ZodString;
204
+ type: import("zod").ZodLiteral<"playlist">;
205
+ more_info: import("zod").ZodObject<{
206
+ listid: import("zod").ZodString;
207
+ isWeekly: import("zod").ZodString;
208
+ listname: import("zod").ZodString;
209
+ firstname: import("zod").ZodString;
210
+ song_count: import("zod").ZodString;
211
+ follower_count: import("zod").ZodString;
212
+ fan_count: import("zod").ZodString;
213
+ }, import("zod/v4/core").$loose>;
214
+ }, import("zod/v4/core").$loose>>;
215
+ };
216
+ mapper: (data: import("zod").infer<typeof SaavnGetTrendingSchema.playlists.response>) => import("../../../core/models").Playlist[];
217
+ };
218
+ songs: {
219
+ call: string;
220
+ schema: {
221
+ readonly params: import("zod").ZodObject<{
222
+ entity_type: import("zod").ZodLiteral<"song">;
223
+ entity_language: import("zod").ZodString;
224
+ }, import("zod/v4/core").$strict>;
225
+ readonly response: import("zod").ZodArray<import("zod").ZodObject<{
226
+ id: import("zod").ZodString;
227
+ title: import("zod").ZodString;
228
+ subtitle: import("zod").ZodString;
229
+ header_desc: import("zod").ZodString;
230
+ perma_url: import("zod").ZodString;
231
+ image: import("zod").ZodString;
232
+ language: import("zod").ZodString;
233
+ year: import("zod").ZodString;
234
+ play_count: import("zod").ZodString;
235
+ explicit_content: import("zod").ZodString;
236
+ type: import("zod").ZodLiteral<"song">;
237
+ more_info: import("zod").ZodObject<{
238
+ music: import("zod").ZodString;
239
+ album_id: import("zod").ZodString;
240
+ album: import("zod").ZodString;
241
+ label: import("zod").ZodString;
242
+ label_id: import("zod").ZodNullable<import("zod").ZodString>;
243
+ origin: import("zod").ZodString;
244
+ is_dolby_content: import("zod").ZodBoolean;
245
+ encrypted_media_url: import("zod").ZodString;
246
+ encrypted_drm_media_url: import("zod").ZodString;
247
+ album_url: import("zod").ZodString;
248
+ duration: import("zod").ZodString;
249
+ has_lyrics: import("zod").ZodString;
250
+ lyrics_snippet: import("zod").ZodString;
251
+ lyrics_id: import("zod").ZodOptional<import("zod").ZodString>;
252
+ copyright_text: import("zod").ZodString;
253
+ release_date: import("zod").ZodNullable<import("zod").ZodString>;
254
+ artistMap: import("zod").ZodLazy<import("zod").ZodObject<{
255
+ primary_artists: import("zod").ZodArray<import("zod").ZodObject<{
256
+ id: import("zod").ZodString;
257
+ name: import("zod").ZodString;
258
+ role: import("zod").ZodString;
259
+ image: import("zod").ZodString;
260
+ type: import("zod").ZodLiteral<"artist">;
261
+ perma_url: import("zod").ZodString;
262
+ }, import("zod/v4/core").$loose>>;
263
+ featured_artists: import("zod").ZodArray<import("zod").ZodObject<{
264
+ id: import("zod").ZodString;
265
+ name: import("zod").ZodString;
266
+ role: import("zod").ZodString;
267
+ image: import("zod").ZodString;
268
+ type: import("zod").ZodLiteral<"artist">;
269
+ perma_url: import("zod").ZodString;
270
+ }, import("zod/v4/core").$loose>>;
271
+ artists: import("zod").ZodArray<import("zod").ZodObject<{
272
+ id: import("zod").ZodString;
273
+ name: import("zod").ZodString;
274
+ role: import("zod").ZodString;
275
+ image: import("zod").ZodString;
276
+ type: import("zod").ZodLiteral<"artist">;
277
+ perma_url: import("zod").ZodString;
278
+ }, import("zod/v4/core").$loose>>;
279
+ }, import("zod/v4/core").$loose>>;
280
+ vcode: import("zod").ZodOptional<import("zod").ZodString>;
281
+ vlink: import("zod").ZodOptional<import("zod").ZodString>;
282
+ label_url: import("zod").ZodOptional<import("zod").ZodString>;
283
+ }, import("zod/v4/core").$loose>;
284
+ }, import("zod/v4/core").$loose>>;
285
+ };
286
+ mapper: (data: import("zod").infer<typeof SaavnGetTrendingSchema.songs.response>) => import("../../../core/models").Song[];
287
+ };
288
+ };
@@ -0,0 +1,24 @@
1
+ import { SaavnGetTrendingMapper } from './mapper.ops';
2
+ import { SaavnGetTrendingSchema } from './schema.ops';
3
+ export const SaavnGetTrending = {
4
+ all: {
5
+ call: 'content.getTrending',
6
+ schema: SaavnGetTrendingSchema.all,
7
+ mapper: SaavnGetTrendingMapper.all,
8
+ },
9
+ albums: {
10
+ call: 'content.getTrending',
11
+ schema: SaavnGetTrendingSchema.albums,
12
+ mapper: SaavnGetTrendingMapper.albums,
13
+ },
14
+ playlists: {
15
+ call: 'content.getTrending',
16
+ schema: SaavnGetTrendingSchema.playlists,
17
+ mapper: SaavnGetTrendingMapper.playlists,
18
+ },
19
+ songs: {
20
+ call: 'content.getTrending',
21
+ schema: SaavnGetTrendingSchema.songs,
22
+ mapper: SaavnGetTrendingMapper.songs,
23
+ },
24
+ };
@@ -0,0 +1,13 @@
1
+ import { z } from 'zod';
2
+ import { SaavnGetTrendingSchema } from './schema.ops';
3
+ import type { Album, Playlist, Song } from '../../../core/models';
4
+ import type { SaavnTrendingAlbum, SaavnTrendingPlaylist, SaavnTrendingSongEntity } from '../../../saavn/entities';
5
+ export declare function mapTrendingAlbum(data: z.infer<typeof SaavnTrendingAlbum>): Album;
6
+ export declare function mapTrendingPlaylist(data: z.infer<typeof SaavnTrendingPlaylist>): Playlist;
7
+ export declare function mapTrendingSong(data: z.infer<typeof SaavnTrendingSongEntity>): Song;
8
+ export declare const SaavnGetTrendingMapper: {
9
+ all: (data: z.infer<typeof SaavnGetTrendingSchema.all.response>) => (Album | Song | Playlist)[];
10
+ albums: (data: z.infer<typeof SaavnGetTrendingSchema.albums.response>) => Album[];
11
+ playlists: (data: z.infer<typeof SaavnGetTrendingSchema.playlists.response>) => Playlist[];
12
+ songs: (data: z.infer<typeof SaavnGetTrendingSchema.songs.response>) => Song[];
13
+ };
@@ -0,0 +1,134 @@
1
+ import { z } from 'zod';
2
+ import { SaavnGetTrendingSchema } from './schema.ops';
3
+ import { mapArtistBase, parseImageUrls } from '../../common-mapper';
4
+ export function mapTrendingAlbum(data) {
5
+ return {
6
+ id: data.id,
7
+ type: 'album',
8
+ title: data.title,
9
+ subtitle: data.subtitle,
10
+ description: data.header_desc,
11
+ url: data.perma_url,
12
+ images: parseImageUrls(data.image),
13
+ language: data.language,
14
+ year: parseInt(data.year, 10),
15
+ stats: {
16
+ playCount: parseInt(data.play_count, 10),
17
+ songCount: data.more_info?.song_count
18
+ ? parseInt(data.more_info.song_count, 10)
19
+ : undefined,
20
+ },
21
+ flags: {
22
+ isExplicit: data.explicit_content === '1',
23
+ },
24
+ artists: {
25
+ primary: data.more_info?.artistMap?.primary_artists?.map(mapArtistBase),
26
+ featured: data.more_info?.artistMap?.featured_artists?.map(mapArtistBase),
27
+ all: data.more_info?.artistMap?.artists?.map(mapArtistBase),
28
+ },
29
+ meta: {
30
+ releaseDate: data.more_info?.release_date,
31
+ },
32
+ };
33
+ }
34
+ export function mapTrendingPlaylist(data) {
35
+ return {
36
+ id: data.id,
37
+ type: 'playlist',
38
+ title: data.title,
39
+ subtitle: data.subtitle,
40
+ description: data.header_desc,
41
+ url: data.perma_url,
42
+ images: parseImageUrls(data.image),
43
+ stats: {
44
+ songCount: data.more_info?.song_count
45
+ ? parseInt(data.more_info.song_count, 10)
46
+ : undefined,
47
+ followerCount: data.more_info?.follower_count
48
+ ? parseInt(data.more_info.follower_count, 10)
49
+ : undefined,
50
+ fanCount: data.more_info?.fan_count
51
+ ? parseInt(data.more_info.fan_count, 10)
52
+ : undefined,
53
+ },
54
+ flags: {
55
+ isExplicit: data.explicit_content === '1',
56
+ isWeekly: data.more_info?.isWeekly === 'true',
57
+ },
58
+ meta: {
59
+ language: data.language,
60
+ },
61
+ };
62
+ }
63
+ export function mapTrendingSong(data) {
64
+ return {
65
+ id: data.id,
66
+ type: 'song',
67
+ title: data.title,
68
+ subtitle: data.subtitle,
69
+ url: data.perma_url,
70
+ images: parseImageUrls(data.image),
71
+ album: {
72
+ id: data.more_info?.album_id,
73
+ title: data.more_info?.album,
74
+ url: data.more_info?.album_url,
75
+ },
76
+ artists: {
77
+ primary: data.more_info?.artistMap?.primary_artists?.map(mapArtistBase),
78
+ featured: data.more_info?.artistMap?.featured_artists?.map(mapArtistBase),
79
+ all: data.more_info?.artistMap?.artists?.map(mapArtistBase),
80
+ },
81
+ duration: parseInt(data.more_info?.duration || '0', 10),
82
+ language: data.language,
83
+ year: parseInt(data.year, 10),
84
+ stats: {
85
+ playCount: parseInt(data.play_count, 10),
86
+ },
87
+ flags: {
88
+ isExplicit: data.explicit_content === '1',
89
+ hasLyrics: data.more_info?.has_lyrics === 'true',
90
+ isDolby: data.more_info?.is_dolby_content,
91
+ },
92
+ lyrics: {
93
+ id: data.more_info?.lyrics_id,
94
+ snippet: data.more_info?.lyrics_snippet,
95
+ },
96
+ media: {
97
+ encryptedUrl: data.more_info?.encrypted_media_url,
98
+ previewUrl: data.more_info?.vlink,
99
+ },
100
+ meta: {
101
+ copyright: data.more_info?.copyright_text,
102
+ label: {
103
+ id: data.more_info?.label_id || undefined,
104
+ name: data.more_info?.label,
105
+ url: data.more_info?.label_url,
106
+ },
107
+ releaseDate: data.more_info?.release_date || undefined,
108
+ },
109
+ };
110
+ }
111
+ export const SaavnGetTrendingMapper = {
112
+ all: (data) => {
113
+ return data.map((item) => {
114
+ if (item.type === 'album') {
115
+ return mapTrendingAlbum(item);
116
+ }
117
+ else if (item.type === 'playlist') {
118
+ return mapTrendingPlaylist(item);
119
+ }
120
+ else {
121
+ return mapTrendingSong(item);
122
+ }
123
+ });
124
+ },
125
+ albums: (data) => {
126
+ return data.map(mapTrendingAlbum);
127
+ },
128
+ playlists: (data) => {
129
+ return data.map(mapTrendingPlaylist);
130
+ },
131
+ songs: (data) => {
132
+ return data.map(mapTrendingSong);
133
+ },
134
+ };