diff --git a/package-lock.json b/package-lock.json index 118e688b..323d4628 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "@keyv/valkey": "^1.0.8", "@lukehagar/plexjs": "^0.39.0", "@pierre/diffs": "^1.2.4", - "@rocksky/sdk": "^0.2.2", + "@rocksky/sdk": "^0.3.0", "@supercharge/promise-pool": "^3.0.0", "@svrooij/sonos": "^2.5.0", "@xhayper/discord-rpc": "1.3.0", @@ -4669,9 +4669,9 @@ } }, "node_modules/@rocksky/sdk": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@rocksky/sdk/-/sdk-0.2.2.tgz", - "integrity": "sha512-2tZCy7Phd/+gcuSwEfBpnJsLcPYkq+dH9UbZNK0nKxo6tHNWBZfeAJ5zwqUTsasQtQ1lLEYHnO5HInr/koqO2w==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@rocksky/sdk/-/sdk-0.3.0.tgz", + "integrity": "sha512-6gYufTupi21fwJKpNOK5btZ/fGCSufzJqbtigiTIxodsg6xJEwS/bHOr7/XxfXqOy4X798BLOi5Fr4A/CTQfCA==", "license": "MIT" }, "node_modules/@rolldown/binding-android-arm64": { diff --git a/package.json b/package.json index b3066be8..105d2846 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "@keyv/valkey": "^1.0.8", "@lukehagar/plexjs": "^0.39.0", "@pierre/diffs": "^1.2.4", - "@rocksky/sdk": "^0.2.2", + "@rocksky/sdk": "^0.3.0", "@supercharge/promise-pool": "^3.0.0", "@svrooij/sonos": "^2.5.0", "@xhayper/discord-rpc": "1.3.0", diff --git a/src/backend/common/vendor/RockSkyApiClient.ts b/src/backend/common/vendor/RockSkyApiClient.ts index 7f256aa0..846cf4f8 100644 --- a/src/backend/common/vendor/RockSkyApiClient.ts +++ b/src/backend/common/vendor/RockSkyApiClient.ts @@ -303,10 +303,18 @@ export const rockskyScrobbleToPlay = (obj: RockskyScrobble, opts: {playId?: stri return baseFormatPlayObj(obj, play); } -export const playToRockskyRecord = (play: PlayObject): CreateScrobbleInput => { - const csi: CreateScrobbleInput = { +// TODO remove once albumArtist is correctly included in CreateScrobbleInput interface +type RealCreateScrobbleInput = CreateScrobbleInput & {albumArtist: string}; + +export const playToRockskyRecord = (play: PlayObject): RealCreateScrobbleInput => { + const artistStr = artistCreditsToNames(play.data.artists).join(', '); + + const csi: RealCreateScrobbleInput = { title: play.data.track, - artist: artistCreditsToNames(play.data.artists).join(', '), + artist: artistStr, + // albumArtist is a required field on rocksky server-side + // tsiry's advice is that if there really is no album artists then just use the same value as artist + albumArtist: (play.data.albumArtists ?? []).length === 0 ? artistStr : artistCreditsToNames(play.data.albumArtists).join(', '), album: play.data.album, mbId: play.data.meta?.brainz?.track, isrc: play.data.isrc,