Skip to content

Commit ed70cb2

Browse files
update: format amazonmusic with biome & update headers
Re-added back the header for extracting the embed api data and made one for the search method.
1 parent 300cca1 commit ed70cb2

File tree

1 file changed

+32
-14
lines changed

1 file changed

+32
-14
lines changed

src/sources/amazonmusic.js

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
1-
import { encodeTrack, getBestMatch, http1makeRequest, logger } from '../utils.js'
1+
import {
2+
encodeTrack,
3+
getBestMatch,
4+
http1makeRequest,
5+
logger
6+
} from '../utils.js'
27
import crypto from 'node:crypto'
38

49
const BOT_USER_AGENT =
5-
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
10+
'Mozilla/5.0 (compatible; NodeLinkBot/0.1; +https://nodelink.js.org/)'
11+
const SEARCH_USER_AGENT =
12+
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36'
613

714
function parseISO8601Duration(duration) {
815
if (!duration) return 0
@@ -324,7 +331,7 @@ export default class AmazonMusicSource {
324331
}
325332

326333
async search(query, _sourceTerm) {
327-
const headersUA = { 'User-Agent': BOT_USER_AGENT }
334+
const headersUA = { 'User-Agent': SEARCH_USER_AGENT }
328335

329336
const decodeAmp = (v) =>
330337
typeof v === 'string' ? v.replaceAll('&', '&') : v
@@ -369,12 +376,11 @@ export default class AmazonMusicSource {
369376

370377
const config = configRes.body
371378
const { accessToken, sessionId, deviceId, csrf } = config
372-
if (!csrf?.token) throw new Error('Failed to retrieve CSRF token from config')
379+
if (!csrf?.token)
380+
throw new Error('Failed to retrieve CSRF token from config')
373381

374382
const finalDeviceId =
375-
deviceId && !deviceId.startsWith('000')
376-
? deviceId
377-
: '13580682033287541'
383+
deviceId && !deviceId.startsWith('000') ? deviceId : '13580682033287541'
378384
const finalSessionId =
379385
sessionId && !sessionId.startsWith('000')
380386
? sessionId
@@ -402,7 +408,7 @@ export default class AmazonMusicSource {
402408
'x-amzn-device-height': '1080',
403409
'x-amzn-device-family': 'WebPlayer',
404410
'x-amzn-device-id': finalDeviceId,
405-
'x-amzn-user-agent': BOT_USER_AGENT,
411+
'x-amzn-user-agent': SEARCH_USER_AGENT,
406412
'x-amzn-session-id': finalSessionId,
407413
'x-amzn-request-id': crypto.randomUUID(),
408414
'x-amzn-device-language': 'en_US',
@@ -443,16 +449,26 @@ export default class AmazonMusicSource {
443449
)
444450

445451
if (searchRes.statusCode !== 200) {
446-
logger('error', 'AmazonMusic', `Search API returned ${searchRes.statusCode}`)
452+
logger(
453+
'error',
454+
'AmazonMusic',
455+
`Search API returned ${searchRes.statusCode}`
456+
)
447457
return { loadType: 'empty', data: {} }
448458
}
449459

450460
let data
451461
try {
452462
data =
453-
typeof searchRes.body === 'string' ? JSON.parse(searchRes.body) : searchRes.body
463+
typeof searchRes.body === 'string'
464+
? JSON.parse(searchRes.body)
465+
: searchRes.body
454466
} catch (e) {
455-
logger('error', 'AmazonMusic', `Failed to parse search response: ${e.message}`)
467+
logger(
468+
'error',
469+
'AmazonMusic',
470+
`Failed to parse search response: ${e.message}`
471+
)
456472
return { loadType: 'empty', data: {} }
457473
}
458474

@@ -469,14 +485,16 @@ export default class AmazonMusicSource {
469485
for (let j = 0; j < items.length; j++) {
470486
const item = items[j]
471487
const isSong = item?.label === 'song'
472-
const isSquare = typeof item?.interface === 'string' &&
488+
const isSquare =
489+
typeof item?.interface === 'string' &&
473490
item.interface.includes('SquareHorizontalItemElement')
474491
if (!isSong && !isSquare) continue
475492

476493
const deeplink = item?.primaryLink?.deeplink
477494
const identifier = extractIdentifier(deeplink)
478495
if (!identifier) continue
479-
if (!isSong && (!deeplink || deeplink.indexOf('trackAsin=') === -1)) continue
496+
if (!isSong && (!deeplink || deeplink.indexOf('trackAsin=') === -1))
497+
continue
480498

481499
tracks.push({
482500
identifier,
@@ -567,4 +585,4 @@ export default class AmazonMusicSource {
567585
async loadStream() {
568586
return null
569587
}
570-
}
588+
}

0 commit comments

Comments
 (0)