@wwdrew/expo-apple-music 1.0.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/ATTRIBUTION.md +24 -0
- package/LICENSE +190 -0
- package/NOTICE +7 -0
- package/README.md +81 -0
- package/android/build.gradle +26 -0
- package/android/libs/mediaplayback-release-1.1.1.aar +0 -0
- package/android/libs/musickitauth-release-1.1.2.aar +0 -0
- package/android/src/main/AndroidManifest.xml +16 -0
- package/android/src/main/java/expo/modules/applemusic/AndroidCatalogService.kt +86 -0
- package/android/src/main/java/expo/modules/applemusic/AndroidDeveloperToken.kt +39 -0
- package/android/src/main/java/expo/modules/applemusic/AndroidHistoryService.kt +24 -0
- package/android/src/main/java/expo/modules/applemusic/AndroidLibraryMutationsService.kt +30 -0
- package/android/src/main/java/expo/modules/applemusic/AndroidLibraryService.kt +61 -0
- package/android/src/main/java/expo/modules/applemusic/AndroidPlaybackController.kt +484 -0
- package/android/src/main/java/expo/modules/applemusic/AndroidPlaybackObserver.kt +173 -0
- package/android/src/main/java/expo/modules/applemusic/AndroidQueueService.kt +78 -0
- package/android/src/main/java/expo/modules/applemusic/AndroidRatingsService.kt +27 -0
- package/android/src/main/java/expo/modules/applemusic/AndroidRecommendationsService.kt +15 -0
- package/android/src/main/java/expo/modules/applemusic/AndroidSubscriptionService.kt +24 -0
- package/android/src/main/java/expo/modules/applemusic/AppleMusicErrorCodes.kt +13 -0
- package/android/src/main/java/expo/modules/applemusic/AppleMusicErrors.kt +46 -0
- package/android/src/main/java/expo/modules/applemusic/AppleMusicHttpMethod.kt +8 -0
- package/android/src/main/java/expo/modules/applemusic/AppleMusicJsonMapper.kt +258 -0
- package/android/src/main/java/expo/modules/applemusic/AppleMusicNativeLoader.kt +32 -0
- package/android/src/main/java/expo/modules/applemusic/AppleMusicRestJson.kt +40 -0
- package/android/src/main/java/expo/modules/applemusic/AppleMusicRestQuery.kt +12 -0
- package/android/src/main/java/expo/modules/applemusic/AppleMusicRestStack.kt +19 -0
- package/android/src/main/java/expo/modules/applemusic/AppleMusicRestTransport.kt +118 -0
- package/android/src/main/java/expo/modules/applemusic/AuthenticatedSession.kt +57 -0
- package/android/src/main/java/expo/modules/applemusic/BridgeResponses.kt +55 -0
- package/android/src/main/java/expo/modules/applemusic/CatalogRestClient.kt +306 -0
- package/android/src/main/java/expo/modules/applemusic/ExpoAppleMusicModule.kt +152 -0
- package/android/src/main/java/expo/modules/applemusic/HistoryRestClient.kt +60 -0
- package/android/src/main/java/expo/modules/applemusic/LibraryIds.kt +6 -0
- package/android/src/main/java/expo/modules/applemusic/LibraryMutationsRestClient.kt +95 -0
- package/android/src/main/java/expo/modules/applemusic/LibraryRestClient.kt +195 -0
- package/android/src/main/java/expo/modules/applemusic/MusicKitAuthContract.kt +78 -0
- package/android/src/main/java/expo/modules/applemusic/MusicKitAuthStorage.kt +76 -0
- package/android/src/main/java/expo/modules/applemusic/MusicKitTokenProvider.kt +13 -0
- package/android/src/main/java/expo/modules/applemusic/PaginationOptions.kt +14 -0
- package/android/src/main/java/expo/modules/applemusic/RatingsRestClient.kt +72 -0
- package/android/src/main/java/expo/modules/applemusic/RecommendationsRestClient.kt +37 -0
- package/android/src/main/java/expo/modules/applemusic/StorefrontRestClient.kt +44 -0
- package/android/src/main/java/expo/modules/applemusic/bridge/ExpoBridgeAuth.kt +69 -0
- package/android/src/main/java/expo/modules/applemusic/bridge/ExpoBridgeCatalog.kt +76 -0
- package/android/src/main/java/expo/modules/applemusic/bridge/ExpoBridgeHistory.kt +35 -0
- package/android/src/main/java/expo/modules/applemusic/bridge/ExpoBridgeLibrary.kt +54 -0
- package/android/src/main/java/expo/modules/applemusic/bridge/ExpoBridgeLibraryMutations.kt +30 -0
- package/android/src/main/java/expo/modules/applemusic/bridge/ExpoBridgePlayer.kt +89 -0
- package/android/src/main/java/expo/modules/applemusic/bridge/ExpoBridgeRatings.kt +29 -0
- package/android/src/main/java/expo/modules/applemusic/bridge/ExpoBridgeRecommendations.kt +18 -0
- package/app.plugin.js +1 -0
- package/build/ExpoAppleMusicModule.web.d.ts +15 -0
- package/build/ExpoAppleMusicModule.web.d.ts.map +1 -0
- package/build/ExpoAppleMusicModule.web.js +33 -0
- package/build/ExpoAppleMusicModule.web.js.map +1 -0
- package/build/api/call-native.d.ts +6 -0
- package/build/api/call-native.d.ts.map +1 -0
- package/build/api/call-native.js +35 -0
- package/build/api/call-native.js.map +1 -0
- package/build/api/decode-jwt-exp.d.ts +5 -0
- package/build/api/decode-jwt-exp.d.ts.map +1 -0
- package/build/api/decode-jwt-exp.js +28 -0
- package/build/api/decode-jwt-exp.js.map +1 -0
- package/build/api/library-ids.d.ts +4 -0
- package/build/api/library-ids.d.ts.map +1 -0
- package/build/api/library-ids.js +11 -0
- package/build/api/library-ids.js.map +1 -0
- package/build/api/pagination.d.ts +12 -0
- package/build/api/pagination.d.ts.map +1 -0
- package/build/api/pagination.js +13 -0
- package/build/api/pagination.js.map +1 -0
- package/build/api/parse-authorize-result.d.ts +3 -0
- package/build/api/parse-authorize-result.d.ts.map +1 -0
- package/build/api/parse-authorize-result.js +27 -0
- package/build/api/parse-authorize-result.js.map +1 -0
- package/build/api/require-music-user-token.d.ts +2 -0
- package/build/api/require-music-user-token.d.ts.map +1 -0
- package/build/api/require-music-user-token.js +14 -0
- package/build/api/require-music-user-token.js.map +1 -0
- package/build/api/sync-developer-token.d.ts +4 -0
- package/build/api/sync-developer-token.d.ts.map +1 -0
- package/build/api/sync-developer-token.js +27 -0
- package/build/api/sync-developer-token.js.map +1 -0
- package/build/bridge/bridge-methods.d.ts +17 -0
- package/build/bridge/bridge-methods.d.ts.map +1 -0
- package/build/bridge/bridge-methods.js +71 -0
- package/build/bridge/bridge-methods.js.map +1 -0
- package/build/bridge/bridge-responses.d.ts +64 -0
- package/build/bridge/bridge-responses.d.ts.map +1 -0
- package/build/bridge/bridge-responses.js +67 -0
- package/build/bridge/bridge-responses.js.map +1 -0
- package/build/bridge/handlers/auth-bridge.d.ts +11 -0
- package/build/bridge/handlers/auth-bridge.d.ts.map +1 -0
- package/build/bridge/handlers/auth-bridge.js +49 -0
- package/build/bridge/handlers/auth-bridge.js.map +1 -0
- package/build/bridge/handlers/catalog-bridge.d.ts +34 -0
- package/build/bridge/handlers/catalog-bridge.d.ts.map +1 -0
- package/build/bridge/handlers/catalog-bridge.js +58 -0
- package/build/bridge/handlers/catalog-bridge.js.map +1 -0
- package/build/bridge/handlers/history-bridge.d.ts +19 -0
- package/build/bridge/handlers/history-bridge.d.ts.map +1 -0
- package/build/bridge/handlers/history-bridge.js +31 -0
- package/build/bridge/handlers/history-bridge.js.map +1 -0
- package/build/bridge/handlers/index.d.ts +124 -0
- package/build/bridge/handlers/index.d.ts.map +1 -0
- package/build/bridge/handlers/index.js +21 -0
- package/build/bridge/handlers/index.js.map +1 -0
- package/build/bridge/handlers/library-bridge.d.ts +23 -0
- package/build/bridge/handlers/library-bridge.d.ts.map +1 -0
- package/build/bridge/handlers/library-bridge.js +41 -0
- package/build/bridge/handlers/library-bridge.js.map +1 -0
- package/build/bridge/handlers/library-mutations-bridge.d.ts +16 -0
- package/build/bridge/handlers/library-mutations-bridge.d.ts.map +1 -0
- package/build/bridge/handlers/library-mutations-bridge.js +20 -0
- package/build/bridge/handlers/library-mutations-bridge.js.map +1 -0
- package/build/bridge/handlers/player-bridge.d.ts +18 -0
- package/build/bridge/handlers/player-bridge.d.ts.map +1 -0
- package/build/bridge/handlers/player-bridge.js +42 -0
- package/build/bridge/handlers/player-bridge.js.map +1 -0
- package/build/bridge/handlers/ratings-bridge.d.ts +15 -0
- package/build/bridge/handlers/ratings-bridge.d.ts.map +1 -0
- package/build/bridge/handlers/ratings-bridge.js +16 -0
- package/build/bridge/handlers/ratings-bridge.js.map +1 -0
- package/build/bridge/handlers/recommendations-bridge.d.ts +10 -0
- package/build/bridge/handlers/recommendations-bridge.d.ts.map +1 -0
- package/build/bridge/handlers/recommendations-bridge.js +14 -0
- package/build/bridge/handlers/recommendations-bridge.js.map +1 -0
- package/build/constants/apple-music-error-codes.d.ts +22 -0
- package/build/constants/apple-music-error-codes.d.ts.map +1 -0
- package/build/constants/apple-music-error-codes.js +21 -0
- package/build/constants/apple-music-error-codes.js.map +1 -0
- package/build/hooks/use-current-song.d.ts +10 -0
- package/build/hooks/use-current-song.d.ts.map +1 -0
- package/build/hooks/use-current-song.js +35 -0
- package/build/hooks/use-current-song.js.map +1 -0
- package/build/hooks/use-is-playing.d.ts +6 -0
- package/build/hooks/use-is-playing.d.ts.map +1 -0
- package/build/hooks/use-is-playing.js +21 -0
- package/build/hooks/use-is-playing.js.map +1 -0
- package/build/hooks/use-playback-state.d.ts +12 -0
- package/build/hooks/use-playback-state.d.ts.map +1 -0
- package/build/hooks/use-playback-state.js +41 -0
- package/build/hooks/use-playback-state.js.map +1 -0
- package/build/index.d.ts +52 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +44 -0
- package/build/index.js.map +1 -0
- package/build/mappers/apple-music-json-mapper.d.ts +94 -0
- package/build/mappers/apple-music-json-mapper.d.ts.map +1 -0
- package/build/mappers/apple-music-json-mapper.js +212 -0
- package/build/mappers/apple-music-json-mapper.js.map +1 -0
- package/build/modules/auth.d.ts +32 -0
- package/build/modules/auth.d.ts.map +1 -0
- package/build/modules/auth.js +60 -0
- package/build/modules/auth.js.map +1 -0
- package/build/modules/catalog.d.ts +46 -0
- package/build/modules/catalog.d.ts.map +1 -0
- package/build/modules/catalog.js +47 -0
- package/build/modules/catalog.js.map +1 -0
- package/build/modules/history.d.ts +17 -0
- package/build/modules/history.d.ts.map +1 -0
- package/build/modules/history.js +28 -0
- package/build/modules/history.js.map +1 -0
- package/build/modules/library-mutations.d.ts +9 -0
- package/build/modules/library-mutations.d.ts.map +1 -0
- package/build/modules/library-mutations.js +41 -0
- package/build/modules/library-mutations.js.map +1 -0
- package/build/modules/library.d.ts +21 -0
- package/build/modules/library.d.ts.map +1 -0
- package/build/modules/library.js +38 -0
- package/build/modules/library.js.map +1 -0
- package/build/modules/player.d.ts +53 -0
- package/build/modules/player.d.ts.map +1 -0
- package/build/modules/player.js +68 -0
- package/build/modules/player.js.map +1 -0
- package/build/modules/ratings.d.ts +10 -0
- package/build/modules/ratings.d.ts.map +1 -0
- package/build/modules/ratings.js +37 -0
- package/build/modules/ratings.js.map +1 -0
- package/build/modules/recommendations.d.ts +7 -0
- package/build/modules/recommendations.d.ts.map +1 -0
- package/build/modules/recommendations.js +15 -0
- package/build/modules/recommendations.js.map +1 -0
- package/build/native-module.d.ts +5 -0
- package/build/native-module.d.ts.map +1 -0
- package/build/native-module.js +5 -0
- package/build/native-module.js.map +1 -0
- package/build/native-module.web.d.ts +11 -0
- package/build/native-module.web.d.ts.map +1 -0
- package/build/native-module.web.js +11 -0
- package/build/native-module.web.js.map +1 -0
- package/build/rest/apple-music-rest-stack.d.ts +21 -0
- package/build/rest/apple-music-rest-stack.d.ts.map +1 -0
- package/build/rest/apple-music-rest-stack.js +21 -0
- package/build/rest/apple-music-rest-stack.js.map +1 -0
- package/build/rest/apple-music-rest-transport.d.ts +8 -0
- package/build/rest/apple-music-rest-transport.d.ts.map +1 -0
- package/build/rest/apple-music-rest-transport.js +2 -0
- package/build/rest/apple-music-rest-transport.js.map +1 -0
- package/build/rest/catalog-rest-client.d.ts +38 -0
- package/build/rest/catalog-rest-client.d.ts.map +1 -0
- package/build/rest/catalog-rest-client.js +189 -0
- package/build/rest/catalog-rest-client.js.map +1 -0
- package/build/rest/history-rest-client.d.ts +37 -0
- package/build/rest/history-rest-client.d.ts.map +1 -0
- package/build/rest/history-rest-client.js +30 -0
- package/build/rest/history-rest-client.js.map +1 -0
- package/build/rest/library-ids.d.ts +2 -0
- package/build/rest/library-ids.d.ts.map +1 -0
- package/build/rest/library-ids.js +2 -0
- package/build/rest/library-ids.js.map +1 -0
- package/build/rest/library-mutations-rest-client.d.ts +22 -0
- package/build/rest/library-mutations-rest-client.d.ts.map +1 -0
- package/build/rest/library-mutations-rest-client.js +37 -0
- package/build/rest/library-mutations-rest-client.js.map +1 -0
- package/build/rest/library-rest-client.d.ts +59 -0
- package/build/rest/library-rest-client.d.ts.map +1 -0
- package/build/rest/library-rest-client.js +141 -0
- package/build/rest/library-rest-client.js.map +1 -0
- package/build/rest/ratings-rest-client.d.ts +18 -0
- package/build/rest/ratings-rest-client.d.ts.map +1 -0
- package/build/rest/ratings-rest-client.js +37 -0
- package/build/rest/ratings-rest-client.js.map +1 -0
- package/build/rest/recommendations-rest-client.d.ts +32 -0
- package/build/rest/recommendations-rest-client.d.ts.map +1 -0
- package/build/rest/recommendations-rest-client.js +26 -0
- package/build/rest/recommendations-rest-client.js.map +1 -0
- package/build/rest/resource-ids-query.d.ts +2 -0
- package/build/rest/resource-ids-query.d.ts.map +1 -0
- package/build/rest/resource-ids-query.js +10 -0
- package/build/rest/resource-ids-query.js.map +1 -0
- package/build/rest/rest-json.d.ts +11 -0
- package/build/rest/rest-json.d.ts.map +1 -0
- package/build/rest/rest-json.js +29 -0
- package/build/rest/rest-json.js.map +1 -0
- package/build/rest/storefront-rest-client.d.ts +14 -0
- package/build/rest/storefront-rest-client.d.ts.map +1 -0
- package/build/rest/storefront-rest-client.js +36 -0
- package/build/rest/storefront-rest-client.js.map +1 -0
- package/build/types/album.d.ts +8 -0
- package/build/types/album.d.ts.map +1 -0
- package/build/types/album.js +2 -0
- package/build/types/album.js.map +1 -0
- package/build/types/albums-response.d.ts +5 -0
- package/build/types/albums-response.d.ts.map +1 -0
- package/build/types/albums-response.js +2 -0
- package/build/types/albums-response.js.map +1 -0
- package/build/types/android-authorize-options.d.ts +18 -0
- package/build/types/android-authorize-options.d.ts.map +1 -0
- package/build/types/android-authorize-options.js +2 -0
- package/build/types/android-authorize-options.js.map +1 -0
- package/build/types/artist.d.ts +9 -0
- package/build/types/artist.d.ts.map +1 -0
- package/build/types/artist.js +2 -0
- package/build/types/artist.js.map +1 -0
- package/build/types/auth-status.d.ts +19 -0
- package/build/types/auth-status.d.ts.map +1 -0
- package/build/types/auth-status.js +18 -0
- package/build/types/auth-status.js.map +1 -0
- package/build/types/authorize-result.d.ts +8 -0
- package/build/types/authorize-result.d.ts.map +1 -0
- package/build/types/authorize-result.js +2 -0
- package/build/types/authorize-result.js.map +1 -0
- package/build/types/catalog-album-tracks.d.ts +5 -0
- package/build/types/catalog-album-tracks.d.ts.map +1 -0
- package/build/types/catalog-album-tracks.js +2 -0
- package/build/types/catalog-album-tracks.js.map +1 -0
- package/build/types/catalog-charts.d.ts +25 -0
- package/build/types/catalog-charts.d.ts.map +1 -0
- package/build/types/catalog-charts.js +7 -0
- package/build/types/catalog-charts.js.map +1 -0
- package/build/types/catalog-resource-type.d.ts +11 -0
- package/build/types/catalog-resource-type.d.ts.map +1 -0
- package/build/types/catalog-resource-type.js +10 -0
- package/build/types/catalog-resource-type.js.map +1 -0
- package/build/types/catalog-search.d.ts +24 -0
- package/build/types/catalog-search.d.ts.map +1 -0
- package/build/types/catalog-search.js +9 -0
- package/build/types/catalog-search.js.map +1 -0
- package/build/types/check-subscription.d.ts +31 -0
- package/build/types/check-subscription.d.ts.map +1 -0
- package/build/types/check-subscription.js +5 -0
- package/build/types/check-subscription.js.map +1 -0
- package/build/types/library-music-videos.d.ts +5 -0
- package/build/types/library-music-videos.d.ts.map +1 -0
- package/build/types/library-music-videos.js +2 -0
- package/build/types/library-music-videos.js.map +1 -0
- package/build/types/library-mutations.d.ts +21 -0
- package/build/types/library-mutations.d.ts.map +1 -0
- package/build/types/library-mutations.js +8 -0
- package/build/types/library-mutations.js.map +1 -0
- package/build/types/library-search.d.ts +22 -0
- package/build/types/library-search.d.ts.map +1 -0
- package/build/types/library-search.js +9 -0
- package/build/types/library-search.js.map +1 -0
- package/build/types/music-item.d.ts +8 -0
- package/build/types/music-item.d.ts.map +1 -0
- package/build/types/music-item.js +7 -0
- package/build/types/music-item.js.map +1 -0
- package/build/types/music-video.d.ts +8 -0
- package/build/types/music-video.d.ts.map +1 -0
- package/build/types/music-video.js +2 -0
- package/build/types/music-video.js.map +1 -0
- package/build/types/pagination.d.ts +11 -0
- package/build/types/pagination.d.ts.map +1 -0
- package/build/types/pagination.js +2 -0
- package/build/types/pagination.js.map +1 -0
- package/build/types/playback-state.d.ts +9 -0
- package/build/types/playback-state.d.ts.map +1 -0
- package/build/types/playback-state.js +2 -0
- package/build/types/playback-state.js.map +1 -0
- package/build/types/playback-status.d.ts +10 -0
- package/build/types/playback-status.d.ts.map +1 -0
- package/build/types/playback-status.js +9 -0
- package/build/types/playback-status.js.map +1 -0
- package/build/types/playlist.d.ts +15 -0
- package/build/types/playlist.d.ts.map +1 -0
- package/build/types/playlist.js +2 -0
- package/build/types/playlist.js.map +1 -0
- package/build/types/rating.d.ts +34 -0
- package/build/types/rating.d.ts.map +1 -0
- package/build/types/rating.js +26 -0
- package/build/types/rating.js.map +1 -0
- package/build/types/recent-resource.d.ts +11 -0
- package/build/types/recent-resource.d.ts.map +1 -0
- package/build/types/recent-resource.js +2 -0
- package/build/types/recent-resource.js.map +1 -0
- package/build/types/recommendation.d.ts +37 -0
- package/build/types/recommendation.d.ts.map +1 -0
- package/build/types/recommendation.js +2 -0
- package/build/types/recommendation.js.map +1 -0
- package/build/types/song.d.ts +8 -0
- package/build/types/song.d.ts.map +1 -0
- package/build/types/song.js +2 -0
- package/build/types/song.js.map +1 -0
- package/build/types/station.d.ts +9 -0
- package/build/types/station.d.ts.map +1 -0
- package/build/types/station.js +2 -0
- package/build/types/station.js.map +1 -0
- package/build/types/storefront.d.ts +4 -0
- package/build/types/storefront.d.ts.map +1 -0
- package/build/types/storefront.js +2 -0
- package/build/types/storefront.js.map +1 -0
- package/build/types/tracks-from-library.d.ts +11 -0
- package/build/types/tracks-from-library.d.ts.map +1 -0
- package/build/types/tracks-from-library.js +2 -0
- package/build/types/tracks-from-library.js.map +1 -0
- package/build/utils/apple-music-error.d.ts +10 -0
- package/build/utils/apple-music-error.d.ts.map +1 -0
- package/build/utils/apple-music-error.js +13 -0
- package/build/utils/apple-music-error.js.map +1 -0
- package/build/utils/get-error-message.d.ts +2 -0
- package/build/utils/get-error-message.d.ts.map +1 -0
- package/build/utils/get-error-message.js +21 -0
- package/build/utils/get-error-message.js.map +1 -0
- package/build/utils/is-library-item.d.ts +2 -0
- package/build/utils/is-library-item.d.ts.map +1 -0
- package/build/utils/is-library-item.js +4 -0
- package/build/utils/is-library-item.js.map +1 -0
- package/build/utils/normalize-resource-ids.d.ts +4 -0
- package/build/utils/normalize-resource-ids.d.ts.map +1 -0
- package/build/utils/normalize-resource-ids.js +12 -0
- package/build/utils/normalize-resource-ids.js.map +1 -0
- package/build/web/MusicKitLoader.d.ts +11 -0
- package/build/web/MusicKitLoader.d.ts.map +1 -0
- package/build/web/MusicKitLoader.js +135 -0
- package/build/web/MusicKitLoader.js.map +1 -0
- package/build/web/WebAppleMusicApiClient.d.ts +151 -0
- package/build/web/WebAppleMusicApiClient.d.ts.map +1 -0
- package/build/web/WebAppleMusicApiClient.js +139 -0
- package/build/web/WebAppleMusicApiClient.js.map +1 -0
- package/build/web/WebAppleMusicRestTransport.d.ts +9 -0
- package/build/web/WebAppleMusicRestTransport.d.ts.map +1 -0
- package/build/web/WebAppleMusicRestTransport.js +31 -0
- package/build/web/WebAppleMusicRestTransport.js.map +1 -0
- package/build/web/WebPlaybackController.d.ts +12 -0
- package/build/web/WebPlaybackController.d.ts.map +1 -0
- package/build/web/WebPlaybackController.js +90 -0
- package/build/web/WebPlaybackController.js.map +1 -0
- package/build/web/WebPlaybackObserver.d.ts +22 -0
- package/build/web/WebPlaybackObserver.d.ts.map +1 -0
- package/build/web/WebPlaybackObserver.js +106 -0
- package/build/web/WebPlaybackObserver.js.map +1 -0
- package/build/web/WebQueueService.d.ts +10 -0
- package/build/web/WebQueueService.d.ts.map +1 -0
- package/build/web/WebQueueService.js +53 -0
- package/build/web/WebQueueService.js.map +1 -0
- package/build/web/WebSubscriptionService.d.ts +7 -0
- package/build/web/WebSubscriptionService.d.ts.map +1 -0
- package/build/web/WebSubscriptionService.js +24 -0
- package/build/web/WebSubscriptionService.js.map +1 -0
- package/build/web/apple-music-errors.d.ts +11 -0
- package/build/web/apple-music-errors.d.ts.map +1 -0
- package/build/web/apple-music-errors.js +31 -0
- package/build/web/apple-music-errors.js.map +1 -0
- package/build/web/extract-music-user-token.d.ts +4 -0
- package/build/web/extract-music-user-token.d.ts.map +1 -0
- package/build/web/extract-music-user-token.js +15 -0
- package/build/web/extract-music-user-token.js.map +1 -0
- package/build/web/map-auth-status.d.ts +17 -0
- package/build/web/map-auth-status.d.ts.map +1 -0
- package/build/web/map-auth-status.js +85 -0
- package/build/web/map-auth-status.js.map +1 -0
- package/build/web/music-kit-api.d.ts +18 -0
- package/build/web/music-kit-api.d.ts.map +1 -0
- package/build/web/music-kit-api.js +120 -0
- package/build/web/music-kit-api.js.map +1 -0
- package/build/web/musickit-types.d.ts +70 -0
- package/build/web/musickit-types.d.ts.map +1 -0
- package/build/web/musickit-types.js +3 -0
- package/build/web/musickit-types.js.map +1 -0
- package/build/web/pagination.d.ts +2 -0
- package/build/web/pagination.d.ts.map +1 -0
- package/build/web/pagination.js +2 -0
- package/build/web/pagination.js.map +1 -0
- package/expo-module.config.json +19 -0
- package/ios/AppleMusicBridgeError.swift +60 -0
- package/ios/AppleMusicErrorCodes.swift +11 -0
- package/ios/AppleMusicRestClient.swift +213 -0
- package/ios/AuthenticatedSession.swift +64 -0
- package/ios/BridgePagination.swift +17 -0
- package/ios/BridgeResponses.swift +82 -0
- package/ios/CatalogSearchStore.swift +13 -0
- package/ios/CatalogSearchStoreFactory.swift +31 -0
- package/ios/CatalogService.swift +307 -0
- package/ios/ExpoAppleMusic.podspec +29 -0
- package/ios/ExpoAppleMusicModule.swift +505 -0
- package/ios/HistoryService.swift +53 -0
- package/ios/LibraryMutationsService.swift +63 -0
- package/ios/LibraryService.swift +313 -0
- package/ios/MusicItemMapper.swift +171 -0
- package/ios/MusicKitAuthStorage.swift +38 -0
- package/ios/MusicKitCatalogSearchStore.swift +62 -0
- package/ios/PlaybackController.swift +201 -0
- package/ios/PlaybackObserver.swift +225 -0
- package/ios/QueueService.swift +166 -0
- package/ios/RatingsService.swift +66 -0
- package/ios/RecommendationsService.swift +34 -0
- package/ios/RestCatalogSearchStore.swift +62 -0
- package/ios/RestJsonMapper.swift +268 -0
- package/ios/StorefrontService.swift +55 -0
- package/ios/SubscriptionService.swift +119 -0
- package/ios/bridge/ExpoBridgeCatalog.swift +98 -0
- package/ios/bridge/ExpoBridgeHistory.swift +71 -0
- package/ios/bridge/ExpoBridgeLibrary.swift +93 -0
- package/ios/bridge/ExpoBridgeRecommendations.swift +28 -0
- package/package.json +89 -0
- package/plugin/build/index.d.ts +5 -0
- package/plugin/build/index.js +10 -0
- package/plugin/build/with-expo-apple-music.d.ts +10 -0
- package/plugin/build/with-expo-apple-music.js +50 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Platform } from 'react-native';
|
|
2
|
+
import { callNative } from '../api/call-native';
|
|
3
|
+
import { parseAuthorizeResult } from '../api/parse-authorize-result';
|
|
4
|
+
import { requireMusicUserToken } from '../api/require-music-user-token';
|
|
5
|
+
import { requireDeveloperTokenString, syncDeveloperTokenToPlatform, } from '../api/sync-developer-token';
|
|
6
|
+
import { MusicModule } from '../native-module';
|
|
7
|
+
/**
|
|
8
|
+
* Apple Music authorization and subscription checks.
|
|
9
|
+
*
|
|
10
|
+
* @see {@link https://github.com/wwdrew/expo-apple-music/blob/main/docs/AUTH.md} full auth guide (developer token, return values, requirements).
|
|
11
|
+
*/
|
|
12
|
+
class Auth {
|
|
13
|
+
/**
|
|
14
|
+
* Requests authorization to access the user's Apple Music account.
|
|
15
|
+
*
|
|
16
|
+
* Pass a **developer JWT** you obtained in your app (`developerToken`). On Android and web it is required.
|
|
17
|
+
* On iOS it is optional (media-library permission can succeed without it); when provided it is stored for REST.
|
|
18
|
+
*
|
|
19
|
+
* Returns `musicUserToken` when `status` is `authorized` — store it in your app (e.g. Zustand).
|
|
20
|
+
* The native module does not persist the music user token.
|
|
21
|
+
*
|
|
22
|
+
* @throws On Android and web, rejects with `MISSING_DEVELOPER_TOKEN` when `developerToken` is missing or blank.
|
|
23
|
+
*/
|
|
24
|
+
static async authorize(developerToken, options) {
|
|
25
|
+
return callNative('Auth.authorize', async () => {
|
|
26
|
+
const requiresDeveloperToken = Platform.OS === 'android' || Platform.OS === 'web';
|
|
27
|
+
let token = null;
|
|
28
|
+
if (requiresDeveloperToken) {
|
|
29
|
+
token = requireDeveloperTokenString(developerToken, 'Auth.authorize');
|
|
30
|
+
await syncDeveloperTokenToPlatform(token);
|
|
31
|
+
}
|
|
32
|
+
else if (developerToken?.trim()) {
|
|
33
|
+
token = developerToken.trim();
|
|
34
|
+
await syncDeveloperTokenToPlatform(token);
|
|
35
|
+
}
|
|
36
|
+
const raw = await MusicModule.authorization(token, options?.startScreenMessage ?? null, options?.hideStartScreen ?? false);
|
|
37
|
+
return parseAuthorizeResult(raw);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Stores a developer JWT on native / MusicKit JS without re-running user sign-in.
|
|
42
|
+
* Your app fetches or mints the token; this method only applies the string you pass.
|
|
43
|
+
*/
|
|
44
|
+
static async setDeveloperToken(developerToken) {
|
|
45
|
+
return callNative('Auth.setDeveloperToken', async () => {
|
|
46
|
+
const token = requireDeveloperTokenString(developerToken, 'Auth.setDeveloperToken');
|
|
47
|
+
await syncDeveloperTokenToPlatform(token);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
static async checkSubscription(musicUserToken) {
|
|
51
|
+
requireMusicUserToken(musicUserToken, 'Auth.checkSubscription');
|
|
52
|
+
return callNative('Auth.checkSubscription', async () => (await MusicModule.checkSubscription(musicUserToken)));
|
|
53
|
+
}
|
|
54
|
+
static async getStorefront(musicUserToken) {
|
|
55
|
+
requireMusicUserToken(musicUserToken, 'Auth.getStorefront');
|
|
56
|
+
return callNative('Auth.getStorefront', async () => (await MusicModule.getStorefront(musicUserToken)));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export default Auth;
|
|
60
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/modules/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,6BAA6B,CAAC;AAKrC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;;;GAIG;AACH,MAAM,IAAI;IACR;;;;;;;;;;OAUG;IACI,MAAM,CAAC,KAAK,CAAC,SAAS,CAC3B,cAAuB,EACvB,OAAiC;QAEjC,OAAO,UAAU,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;YAC7C,MAAM,sBAAsB,GAAG,QAAQ,CAAC,EAAE,KAAK,SAAS,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC;YAClF,IAAI,KAAK,GAAkB,IAAI,CAAC;YAChC,IAAI,sBAAsB,EAAE,CAAC;gBAC3B,KAAK,GAAG,2BAA2B,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;gBACtE,MAAM,4BAA4B,CAAC,KAAK,CAAC,CAAC;YAC5C,CAAC;iBAAM,IAAI,cAAc,EAAE,IAAI,EAAE,EAAE,CAAC;gBAClC,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC;gBAC9B,MAAM,4BAA4B,CAAC,KAAK,CAAC,CAAC;YAC5C,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,aAAa,CACzC,KAAK,EACL,OAAO,EAAE,kBAAkB,IAAI,IAAI,EACnC,OAAO,EAAE,eAAe,IAAI,KAAK,CAClC,CAAC;YACF,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,cAAsB;QAC1D,OAAO,UAAU,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,KAAK,GAAG,2BAA2B,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;YACpF,MAAM,4BAA4B,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,cAAsB;QAC1D,qBAAqB,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;QAChE,OAAO,UAAU,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE,CACrD,CAAC,MAAM,WAAW,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAsB,CAC3E,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,cAAsB;QACtD,qBAAqB,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC;QAC5D,OAAO,UAAU,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE,CACjD,CAAC,MAAM,WAAW,CAAC,aAAa,CAAC,cAAc,CAAC,CAAe,CAChE,CAAC;IACJ,CAAC;CACF;AAED,eAAe,IAAI,CAAC","sourcesContent":["import { Platform } from 'react-native';\n\nimport { callNative } from '../api/call-native';\nimport { parseAuthorizeResult } from '../api/parse-authorize-result';\nimport { requireMusicUserToken } from '../api/require-music-user-token';\nimport {\n requireDeveloperTokenString,\n syncDeveloperTokenToPlatform,\n} from '../api/sync-developer-token';\nimport type { AndroidAuthorizeOptions } from '../types/android-authorize-options';\nimport type { AuthorizeResult } from '../types/authorize-result';\nimport type { CheckSubscription } from '../types/check-subscription';\nimport type { Storefront } from '../types/storefront';\nimport { MusicModule } from '../native-module';\n\n/**\n * Apple Music authorization and subscription checks.\n *\n * @see {@link https://github.com/wwdrew/expo-apple-music/blob/main/docs/AUTH.md} full auth guide (developer token, return values, requirements).\n */\nclass Auth {\n /**\n * Requests authorization to access the user's Apple Music account.\n *\n * Pass a **developer JWT** you obtained in your app (`developerToken`). On Android and web it is required.\n * On iOS it is optional (media-library permission can succeed without it); when provided it is stored for REST.\n *\n * Returns `musicUserToken` when `status` is `authorized` — store it in your app (e.g. Zustand).\n * The native module does not persist the music user token.\n *\n * @throws On Android and web, rejects with `MISSING_DEVELOPER_TOKEN` when `developerToken` is missing or blank.\n */\n public static async authorize(\n developerToken?: string,\n options?: AndroidAuthorizeOptions,\n ): Promise<AuthorizeResult> {\n return callNative('Auth.authorize', async () => {\n const requiresDeveloperToken = Platform.OS === 'android' || Platform.OS === 'web';\n let token: string | null = null;\n if (requiresDeveloperToken) {\n token = requireDeveloperTokenString(developerToken, 'Auth.authorize');\n await syncDeveloperTokenToPlatform(token);\n } else if (developerToken?.trim()) {\n token = developerToken.trim();\n await syncDeveloperTokenToPlatform(token);\n }\n const raw = await MusicModule.authorization(\n token,\n options?.startScreenMessage ?? null,\n options?.hideStartScreen ?? false,\n );\n return parseAuthorizeResult(raw);\n });\n }\n\n /**\n * Stores a developer JWT on native / MusicKit JS without re-running user sign-in.\n * Your app fetches or mints the token; this method only applies the string you pass.\n */\n public static async setDeveloperToken(developerToken: string): Promise<void> {\n return callNative('Auth.setDeveloperToken', async () => {\n const token = requireDeveloperTokenString(developerToken, 'Auth.setDeveloperToken');\n await syncDeveloperTokenToPlatform(token);\n });\n }\n\n public static async checkSubscription(musicUserToken: string): Promise<CheckSubscription> {\n requireMusicUserToken(musicUserToken, 'Auth.checkSubscription');\n return callNative('Auth.checkSubscription', async () =>\n (await MusicModule.checkSubscription(musicUserToken)) as CheckSubscription,\n );\n }\n\n public static async getStorefront(musicUserToken: string): Promise<Storefront> {\n requireMusicUserToken(musicUserToken, 'Auth.getStorefront');\n return callNative('Auth.getStorefront', async () =>\n (await MusicModule.getStorefront(musicUserToken)) as Storefront,\n );\n }\n}\n\nexport default Auth;\n"]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { Album } from '../types/album';
|
|
2
|
+
import type { AlbumsResponse } from '../types/albums-response';
|
|
3
|
+
import type { CatalogAlbumTracksResponse } from '../types/catalog-album-tracks';
|
|
4
|
+
import type { CatalogCharts, CatalogChartType, CatalogChartsOptions } from '../types/catalog-charts';
|
|
5
|
+
import type { CatalogResourceType } from '../types/catalog-resource-type';
|
|
6
|
+
import type { CatalogSearch, CatalogSearchType } from '../types/catalog-search';
|
|
7
|
+
import type { Artist } from '../types/artist';
|
|
8
|
+
import type { MusicVideo } from '../types/music-video';
|
|
9
|
+
import type { PaginationOptions } from '../types/pagination';
|
|
10
|
+
import type { Playlist } from '../types/playlist';
|
|
11
|
+
import type { Song } from '../types/song';
|
|
12
|
+
import type { Station } from '../types/station';
|
|
13
|
+
declare class Catalog {
|
|
14
|
+
static search(term: string, types: CatalogSearchType[], options?: PaginationOptions): Promise<CatalogSearch>;
|
|
15
|
+
static getSong(id: string): Promise<Song>;
|
|
16
|
+
static getAlbum(id: string): Promise<Album>;
|
|
17
|
+
static getArtist(id: string): Promise<Artist>;
|
|
18
|
+
static getPlaylist(id: string): Promise<Playlist>;
|
|
19
|
+
static getStation(id: string): Promise<Station>;
|
|
20
|
+
static getMusicVideo(id: string): Promise<MusicVideo>;
|
|
21
|
+
static getAlbumTracks(albumId: string, options?: PaginationOptions): Promise<CatalogAlbumTracksResponse>;
|
|
22
|
+
static getArtistAlbums(artistId: string, options?: PaginationOptions): Promise<AlbumsResponse>;
|
|
23
|
+
static getPlaylistTracks(playlistId: string, options?: PaginationOptions): Promise<CatalogAlbumTracksResponse>;
|
|
24
|
+
static getCharts(types: CatalogChartType[], options?: CatalogChartsOptions): Promise<CatalogCharts>;
|
|
25
|
+
/**
|
|
26
|
+
* Fetch multiple catalog resources by storefront id (`GET .../{type}?ids=`).
|
|
27
|
+
* Apple allows many ids per request; prefer batches under ~100 for reliability.
|
|
28
|
+
*/
|
|
29
|
+
static getByIds<T extends CatalogResourceType>(type: T, ids: string[]): Promise<CatalogByIdsResult<T>>;
|
|
30
|
+
}
|
|
31
|
+
/** Bridge envelope for `Catalog.getByIds` keyed by resource type. */
|
|
32
|
+
export type CatalogByIdsResult<T extends CatalogResourceType> = T extends 'songs' ? {
|
|
33
|
+
songs: Song[];
|
|
34
|
+
} : T extends 'albums' ? {
|
|
35
|
+
albums: Album[];
|
|
36
|
+
} : T extends 'artists' ? {
|
|
37
|
+
artists: Artist[];
|
|
38
|
+
} : T extends 'playlists' ? {
|
|
39
|
+
playlists: Playlist[];
|
|
40
|
+
} : T extends 'stations' ? {
|
|
41
|
+
stations: Station[];
|
|
42
|
+
} : T extends 'music-videos' ? {
|
|
43
|
+
musicVideos: MusicVideo[];
|
|
44
|
+
} : never;
|
|
45
|
+
export default Catalog;
|
|
46
|
+
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/modules/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { callNative } from '../api/call-native';
|
|
2
|
+
import { paginationBridgePayload } from '../api/pagination';
|
|
3
|
+
import { MusicModule } from '../native-module';
|
|
4
|
+
class Catalog {
|
|
5
|
+
static async search(term, types, options) {
|
|
6
|
+
return callNative('Catalog.search', async () => (await MusicModule.catalogSearch(term, types, paginationBridgePayload(options))));
|
|
7
|
+
}
|
|
8
|
+
static async getSong(id) {
|
|
9
|
+
return callNative('Catalog.getSong', async () => (await MusicModule.getCatalogSong(id)));
|
|
10
|
+
}
|
|
11
|
+
static async getAlbum(id) {
|
|
12
|
+
return callNative('Catalog.getAlbum', async () => (await MusicModule.getCatalogAlbum(id)));
|
|
13
|
+
}
|
|
14
|
+
static async getArtist(id) {
|
|
15
|
+
return callNative('Catalog.getArtist', async () => (await MusicModule.getCatalogArtist(id)));
|
|
16
|
+
}
|
|
17
|
+
static async getPlaylist(id) {
|
|
18
|
+
return callNative('Catalog.getPlaylist', async () => (await MusicModule.getCatalogPlaylist(id)));
|
|
19
|
+
}
|
|
20
|
+
static async getStation(id) {
|
|
21
|
+
return callNative('Catalog.getStation', async () => (await MusicModule.getCatalogStation(id)));
|
|
22
|
+
}
|
|
23
|
+
static async getMusicVideo(id) {
|
|
24
|
+
return callNative('Catalog.getMusicVideo', async () => (await MusicModule.getCatalogMusicVideo(id)));
|
|
25
|
+
}
|
|
26
|
+
static async getAlbumTracks(albumId, options) {
|
|
27
|
+
return callNative('Catalog.getAlbumTracks', async () => (await MusicModule.getCatalogAlbumTracks(albumId, paginationBridgePayload(options))));
|
|
28
|
+
}
|
|
29
|
+
static async getArtistAlbums(artistId, options) {
|
|
30
|
+
return callNative('Catalog.getArtistAlbums', async () => (await MusicModule.getCatalogArtistAlbums(artistId, paginationBridgePayload(options))));
|
|
31
|
+
}
|
|
32
|
+
static async getPlaylistTracks(playlistId, options) {
|
|
33
|
+
return callNative('Catalog.getPlaylistTracks', async () => (await MusicModule.getCatalogPlaylistTracks(playlistId, paginationBridgePayload(options))));
|
|
34
|
+
}
|
|
35
|
+
static async getCharts(types, options) {
|
|
36
|
+
return callNative('Catalog.getCharts', async () => (await MusicModule.getCatalogCharts(types, options ?? {})));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Fetch multiple catalog resources by storefront id (`GET .../{type}?ids=`).
|
|
40
|
+
* Apple allows many ids per request; prefer batches under ~100 for reliability.
|
|
41
|
+
*/
|
|
42
|
+
static async getByIds(type, ids) {
|
|
43
|
+
return callNative('Catalog.getByIds', async () => (await MusicModule.getCatalogResources(type, ids)));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export default Catalog;
|
|
47
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/modules/catalog.ts"],"names":[],"mappings":"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","sourcesContent":["import { callNative } from '../api/call-native';\nimport { paginationBridgePayload } from '../api/pagination';\nimport type { Album } from '../types/album';\nimport type { AlbumsResponse } from '../types/albums-response';\nimport type { CatalogAlbumTracksResponse } from '../types/catalog-album-tracks';\nimport type { CatalogCharts, CatalogChartType, CatalogChartsOptions } from '../types/catalog-charts';\nimport type { CatalogResourceType } from '../types/catalog-resource-type';\nimport type { CatalogSearch, CatalogSearchType } from '../types/catalog-search';\nimport type { Artist } from '../types/artist';\nimport type { MusicVideo } from '../types/music-video';\nimport type { PaginationOptions } from '../types/pagination';\nimport type { Playlist } from '../types/playlist';\nimport type { Song } from '../types/song';\nimport type { Station } from '../types/station';\nimport { MusicModule } from '../native-module';\n\nclass Catalog {\n public static async search(\n term: string,\n types: CatalogSearchType[],\n options?: PaginationOptions,\n ): Promise<CatalogSearch> {\n return callNative('Catalog.search', async () =>\n (await MusicModule.catalogSearch(term, types, paginationBridgePayload(options))) as CatalogSearch,\n );\n }\n\n public static async getSong(id: string): Promise<Song> {\n return callNative('Catalog.getSong', async () => (await MusicModule.getCatalogSong(id)) as Song);\n }\n\n public static async getAlbum(id: string): Promise<Album> {\n return callNative('Catalog.getAlbum', async () => (await MusicModule.getCatalogAlbum(id)) as Album);\n }\n\n public static async getArtist(id: string): Promise<Artist> {\n return callNative('Catalog.getArtist', async () => (await MusicModule.getCatalogArtist(id)) as Artist);\n }\n\n public static async getPlaylist(id: string): Promise<Playlist> {\n return callNative('Catalog.getPlaylist', async () =>\n (await MusicModule.getCatalogPlaylist(id)) as Playlist,\n );\n }\n\n public static async getStation(id: string): Promise<Station> {\n return callNative('Catalog.getStation', async () => (await MusicModule.getCatalogStation(id)) as Station);\n }\n\n public static async getMusicVideo(id: string): Promise<MusicVideo> {\n return callNative('Catalog.getMusicVideo', async () =>\n (await MusicModule.getCatalogMusicVideo(id)) as MusicVideo,\n );\n }\n\n public static async getAlbumTracks(\n albumId: string,\n options?: PaginationOptions,\n ): Promise<CatalogAlbumTracksResponse> {\n return callNative('Catalog.getAlbumTracks', async () =>\n (await MusicModule.getCatalogAlbumTracks(albumId, paginationBridgePayload(options))) as CatalogAlbumTracksResponse,\n );\n }\n\n public static async getArtistAlbums(\n artistId: string,\n options?: PaginationOptions,\n ): Promise<AlbumsResponse> {\n return callNative('Catalog.getArtistAlbums', async () =>\n (await MusicModule.getCatalogArtistAlbums(artistId, paginationBridgePayload(options))) as AlbumsResponse,\n );\n }\n\n public static async getPlaylistTracks(\n playlistId: string,\n options?: PaginationOptions,\n ): Promise<CatalogAlbumTracksResponse> {\n return callNative('Catalog.getPlaylistTracks', async () =>\n (await MusicModule.getCatalogPlaylistTracks(\n playlistId,\n paginationBridgePayload(options),\n )) as CatalogAlbumTracksResponse,\n );\n }\n\n public static async getCharts(\n types: CatalogChartType[],\n options?: CatalogChartsOptions,\n ): Promise<CatalogCharts> {\n return callNative('Catalog.getCharts', async () =>\n (await MusicModule.getCatalogCharts(types, options ?? {})) as CatalogCharts,\n );\n }\n\n /**\n * Fetch multiple catalog resources by storefront id (`GET .../{type}?ids=`).\n * Apple allows many ids per request; prefer batches under ~100 for reliability.\n */\n public static async getByIds<T extends CatalogResourceType>(\n type: T,\n ids: string[],\n ): Promise<CatalogByIdsResult<T>> {\n return callNative('Catalog.getByIds', async () =>\n (await MusicModule.getCatalogResources(type, ids)) as CatalogByIdsResult<T>,\n );\n }\n}\n\n/** Bridge envelope for `Catalog.getByIds` keyed by resource type. */\nexport type CatalogByIdsResult<T extends CatalogResourceType> = T extends 'songs'\n ? { songs: Song[] }\n : T extends 'albums'\n ? { albums: Album[] }\n : T extends 'artists'\n ? { artists: Artist[] }\n : T extends 'playlists'\n ? { playlists: Playlist[] }\n : T extends 'stations'\n ? { stations: Station[] }\n : T extends 'music-videos'\n ? { musicVideos: MusicVideo[] }\n : never;\n\nexport default Catalog;\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { PaginationOptions } from '../types/pagination';
|
|
2
|
+
import type { RecentResourcesResponse } from '../types/recent-resource';
|
|
3
|
+
import type { Song } from '../types/song';
|
|
4
|
+
import type { StationsResponse } from '../types/station';
|
|
5
|
+
import type { TracksFromLibrary } from '../types/tracks-from-library';
|
|
6
|
+
export interface RecentlyPlayedTracksResponse {
|
|
7
|
+
songs: Song[];
|
|
8
|
+
}
|
|
9
|
+
declare class History {
|
|
10
|
+
static getRecentlyPlayedResources(musicUserToken: string): Promise<TracksFromLibrary>;
|
|
11
|
+
static getRecentlyPlayedTracks(musicUserToken: string, options?: PaginationOptions): Promise<RecentlyPlayedTracksResponse>;
|
|
12
|
+
static getHeavyRotation(musicUserToken: string, options?: PaginationOptions): Promise<RecentResourcesResponse>;
|
|
13
|
+
static getRecentlyPlayedStations(musicUserToken: string, options?: PaginationOptions): Promise<StationsResponse>;
|
|
14
|
+
static getRecentlyAdded(musicUserToken: string, options?: PaginationOptions): Promise<RecentResourcesResponse>;
|
|
15
|
+
}
|
|
16
|
+
export default History;
|
|
17
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/modules/history.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGtE,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,cAAM,OAAO;WACS,0BAA0B,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;WAO9E,uBAAuB,CACzC,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,4BAA4B,CAAC;WAUpB,gBAAgB,CAClC,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,uBAAuB,CAAC;WAUf,yBAAyB,CAC3C,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,CAAC;WAUR,gBAAgB,CAClC,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,uBAAuB,CAAC;CASpC;AAED,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { callNative } from '../api/call-native';
|
|
2
|
+
import { paginationBridgePayload } from '../api/pagination';
|
|
3
|
+
import { requireMusicUserToken } from '../api/require-music-user-token';
|
|
4
|
+
import { MusicModule } from '../native-module';
|
|
5
|
+
class History {
|
|
6
|
+
static async getRecentlyPlayedResources(musicUserToken) {
|
|
7
|
+
requireMusicUserToken(musicUserToken, 'History.getRecentlyPlayedResources');
|
|
8
|
+
return callNative('History.getRecentlyPlayedResources', async () => (await MusicModule.getRecentlyPlayedResources(musicUserToken)));
|
|
9
|
+
}
|
|
10
|
+
static async getRecentlyPlayedTracks(musicUserToken, options) {
|
|
11
|
+
requireMusicUserToken(musicUserToken, 'History.getRecentlyPlayedTracks');
|
|
12
|
+
return callNative('History.getRecentlyPlayedTracks', async () => (await MusicModule.getRecentlyPlayedTracks(musicUserToken, paginationBridgePayload(options))));
|
|
13
|
+
}
|
|
14
|
+
static async getHeavyRotation(musicUserToken, options) {
|
|
15
|
+
requireMusicUserToken(musicUserToken, 'History.getHeavyRotation');
|
|
16
|
+
return callNative('History.getHeavyRotation', async () => (await MusicModule.getHeavyRotation(musicUserToken, paginationBridgePayload(options))));
|
|
17
|
+
}
|
|
18
|
+
static async getRecentlyPlayedStations(musicUserToken, options) {
|
|
19
|
+
requireMusicUserToken(musicUserToken, 'History.getRecentlyPlayedStations');
|
|
20
|
+
return callNative('History.getRecentlyPlayedStations', async () => (await MusicModule.getRecentlyPlayedStations(musicUserToken, paginationBridgePayload(options))));
|
|
21
|
+
}
|
|
22
|
+
static async getRecentlyAdded(musicUserToken, options) {
|
|
23
|
+
requireMusicUserToken(musicUserToken, 'History.getRecentlyAdded');
|
|
24
|
+
return callNative('History.getRecentlyAdded', async () => (await MusicModule.getRecentlyAdded(musicUserToken, paginationBridgePayload(options))));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export default History;
|
|
28
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/modules/history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAMxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAM/C,MAAM,OAAO;IACJ,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,cAAsB;QACnE,qBAAqB,CAAC,cAAc,EAAE,oCAAoC,CAAC,CAAC;QAC5E,OAAO,UAAU,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE,CACjE,CAAC,MAAM,WAAW,CAAC,0BAA0B,CAAC,cAAc,CAAC,CAAsB,CACpF,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,uBAAuB,CACzC,cAAsB,EACtB,OAA2B;QAE3B,qBAAqB,CAAC,cAAc,EAAE,iCAAiC,CAAC,CAAC;QACzE,OAAO,UAAU,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE,CAC9D,CAAC,MAAM,WAAW,CAAC,uBAAuB,CACxC,cAAc,EACd,uBAAuB,CAAC,OAAO,CAAC,CACjC,CAAiC,CACnC,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAClC,cAAsB,EACtB,OAA2B;QAE3B,qBAAqB,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;QAClE,OAAO,UAAU,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE,CACvD,CAAC,MAAM,WAAW,CAAC,gBAAgB,CACjC,cAAc,EACd,uBAAuB,CAAC,OAAO,CAAC,CACjC,CAA4B,CAC9B,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAC3C,cAAsB,EACtB,OAA2B;QAE3B,qBAAqB,CAAC,cAAc,EAAE,mCAAmC,CAAC,CAAC;QAC3E,OAAO,UAAU,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE,CAChE,CAAC,MAAM,WAAW,CAAC,yBAAyB,CAC1C,cAAc,EACd,uBAAuB,CAAC,OAAO,CAAC,CACjC,CAAqB,CACvB,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAClC,cAAsB,EACtB,OAA2B;QAE3B,qBAAqB,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;QAClE,OAAO,UAAU,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE,CACvD,CAAC,MAAM,WAAW,CAAC,gBAAgB,CACjC,cAAc,EACd,uBAAuB,CAAC,OAAO,CAAC,CACjC,CAA4B,CAC9B,CAAC;IACJ,CAAC;CACF;AAED,eAAe,OAAO,CAAC","sourcesContent":["import { callNative } from '../api/call-native';\nimport { paginationBridgePayload } from '../api/pagination';\nimport { requireMusicUserToken } from '../api/require-music-user-token';\nimport type { PaginationOptions } from '../types/pagination';\nimport type { RecentResourcesResponse } from '../types/recent-resource';\nimport type { Song } from '../types/song';\nimport type { StationsResponse } from '../types/station';\nimport type { TracksFromLibrary } from '../types/tracks-from-library';\nimport { MusicModule } from '../native-module';\n\nexport interface RecentlyPlayedTracksResponse {\n songs: Song[];\n}\n\nclass History {\n public static async getRecentlyPlayedResources(musicUserToken: string): Promise<TracksFromLibrary> {\n requireMusicUserToken(musicUserToken, 'History.getRecentlyPlayedResources');\n return callNative('History.getRecentlyPlayedResources', async () =>\n (await MusicModule.getRecentlyPlayedResources(musicUserToken)) as TracksFromLibrary,\n );\n }\n\n public static async getRecentlyPlayedTracks(\n musicUserToken: string,\n options?: PaginationOptions,\n ): Promise<RecentlyPlayedTracksResponse> {\n requireMusicUserToken(musicUserToken, 'History.getRecentlyPlayedTracks');\n return callNative('History.getRecentlyPlayedTracks', async () =>\n (await MusicModule.getRecentlyPlayedTracks(\n musicUserToken,\n paginationBridgePayload(options),\n )) as RecentlyPlayedTracksResponse,\n );\n }\n\n public static async getHeavyRotation(\n musicUserToken: string,\n options?: PaginationOptions,\n ): Promise<RecentResourcesResponse> {\n requireMusicUserToken(musicUserToken, 'History.getHeavyRotation');\n return callNative('History.getHeavyRotation', async () =>\n (await MusicModule.getHeavyRotation(\n musicUserToken,\n paginationBridgePayload(options),\n )) as RecentResourcesResponse,\n );\n }\n\n public static async getRecentlyPlayedStations(\n musicUserToken: string,\n options?: PaginationOptions,\n ): Promise<StationsResponse> {\n requireMusicUserToken(musicUserToken, 'History.getRecentlyPlayedStations');\n return callNative('History.getRecentlyPlayedStations', async () =>\n (await MusicModule.getRecentlyPlayedStations(\n musicUserToken,\n paginationBridgePayload(options),\n )) as StationsResponse,\n );\n }\n\n public static async getRecentlyAdded(\n musicUserToken: string,\n options?: PaginationOptions,\n ): Promise<RecentResourcesResponse> {\n requireMusicUserToken(musicUserToken, 'History.getRecentlyAdded');\n return callNative('History.getRecentlyAdded', async () =>\n (await MusicModule.getRecentlyAdded(\n musicUserToken,\n paginationBridgePayload(options),\n )) as RecentResourcesResponse,\n );\n }\n}\n\nexport default History;\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CreatePlaylistOptions, PlaylistTrackRef, ResourceIds } from '../types/library-mutations';
|
|
2
|
+
import type { Playlist } from '../types/playlist';
|
|
3
|
+
declare class LibraryMutations {
|
|
4
|
+
static addToLibrary(musicUserToken: string, resourceIds: ResourceIds): Promise<void>;
|
|
5
|
+
static createPlaylist(musicUserToken: string, options: CreatePlaylistOptions): Promise<Playlist>;
|
|
6
|
+
static addTracksToPlaylist(musicUserToken: string, playlistId: string, tracks: PlaylistTrackRef[]): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export default LibraryMutations;
|
|
9
|
+
//# sourceMappingURL=library-mutations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library-mutations.d.ts","sourceRoot":"","sources":["../../src/modules/library-mutations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACvG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAIlD,cAAM,gBAAgB;WACA,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;WAO7E,cAAc,CAChC,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,QAAQ,CAAC;WAiBA,mBAAmB,CACrC,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,gBAAgB,EAAE,GACzB,OAAO,CAAC,IAAI,CAAC;CAWjB;AAMD,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { callNative } from '../api/call-native';
|
|
2
|
+
import { assertLibraryId } from '../api/library-ids';
|
|
3
|
+
import { requireMusicUserToken } from '../api/require-music-user-token';
|
|
4
|
+
import { MusicModule } from '../native-module';
|
|
5
|
+
import { normalizeResourceIds } from '../utils/normalize-resource-ids';
|
|
6
|
+
class LibraryMutations {
|
|
7
|
+
static async addToLibrary(musicUserToken, resourceIds) {
|
|
8
|
+
requireMusicUserToken(musicUserToken, 'LibraryMutations.addToLibrary');
|
|
9
|
+
await callNative('LibraryMutations.addToLibrary', async () => {
|
|
10
|
+
await MusicModule.addToLibrary(musicUserToken, normalizeResourceIds(resourceIds));
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
static async createPlaylist(musicUserToken, options) {
|
|
14
|
+
requireMusicUserToken(musicUserToken, 'LibraryMutations.createPlaylist');
|
|
15
|
+
return callNative('LibraryMutations.createPlaylist', async () => {
|
|
16
|
+
const payload = {
|
|
17
|
+
name: options.name,
|
|
18
|
+
isPublic: options.isPublic ?? false,
|
|
19
|
+
};
|
|
20
|
+
if (options.description) {
|
|
21
|
+
payload.description = options.description;
|
|
22
|
+
}
|
|
23
|
+
if (options.tracks?.length) {
|
|
24
|
+
payload.tracks = options.tracks.map(trackRefToNative);
|
|
25
|
+
}
|
|
26
|
+
return (await MusicModule.createLibraryPlaylist(musicUserToken, payload));
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
static async addTracksToPlaylist(musicUserToken, playlistId, tracks) {
|
|
30
|
+
requireMusicUserToken(musicUserToken, 'LibraryMutations.addTracksToPlaylist');
|
|
31
|
+
assertLibraryId(playlistId, 'playlistId');
|
|
32
|
+
await callNative('LibraryMutations.addTracksToPlaylist', async () => {
|
|
33
|
+
await MusicModule.addTracksToLibraryPlaylist(musicUserToken, playlistId, tracks.map(trackRefToNative));
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function trackRefToNative(track) {
|
|
38
|
+
return { id: track.id, type: track.type };
|
|
39
|
+
}
|
|
40
|
+
export default LibraryMutations;
|
|
41
|
+
//# sourceMappingURL=library-mutations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library-mutations.js","sourceRoot":"","sources":["../../src/modules/library-mutations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAGxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,MAAM,gBAAgB;IACb,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,cAAsB,EAAE,WAAwB;QAC/E,qBAAqB,CAAC,cAAc,EAAE,+BAA+B,CAAC,CAAC;QACvE,MAAM,UAAU,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,WAAW,CAAC,YAAY,CAAC,cAAc,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,cAAc,CAChC,cAAsB,EACtB,OAA8B;QAE9B,qBAAqB,CAAC,cAAc,EAAE,iCAAiC,CAAC,CAAC;QACzE,OAAO,UAAU,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,OAAO,GAA4B;gBACvC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;aACpC,CAAC;YACF,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxB,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;YAC5C,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBAC3B,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACxD,CAAC;YACD,OAAO,CAAC,MAAM,WAAW,CAAC,qBAAqB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAa,CAAC;QACxF,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,mBAAmB,CACrC,cAAsB,EACtB,UAAkB,EAClB,MAA0B;QAE1B,qBAAqB,CAAC,cAAc,EAAE,sCAAsC,CAAC,CAAC;QAC9E,eAAe,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC1C,MAAM,UAAU,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,WAAW,CAAC,0BAA0B,CAC1C,cAAc,EACd,UAAU,EACV,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAC7B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,SAAS,gBAAgB,CAAC,KAAuB;IAC/C,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,eAAe,gBAAgB,CAAC","sourcesContent":["import { callNative } from '../api/call-native';\nimport { assertLibraryId } from '../api/library-ids';\nimport { requireMusicUserToken } from '../api/require-music-user-token';\nimport type { CreatePlaylistOptions, PlaylistTrackRef, ResourceIds } from '../types/library-mutations';\nimport type { Playlist } from '../types/playlist';\nimport { MusicModule } from '../native-module';\nimport { normalizeResourceIds } from '../utils/normalize-resource-ids';\n\nclass LibraryMutations {\n public static async addToLibrary(musicUserToken: string, resourceIds: ResourceIds): Promise<void> {\n requireMusicUserToken(musicUserToken, 'LibraryMutations.addToLibrary');\n await callNative('LibraryMutations.addToLibrary', async () => {\n await MusicModule.addToLibrary(musicUserToken, normalizeResourceIds(resourceIds));\n });\n }\n\n public static async createPlaylist(\n musicUserToken: string,\n options: CreatePlaylistOptions,\n ): Promise<Playlist> {\n requireMusicUserToken(musicUserToken, 'LibraryMutations.createPlaylist');\n return callNative('LibraryMutations.createPlaylist', async () => {\n const payload: Record<string, unknown> = {\n name: options.name,\n isPublic: options.isPublic ?? false,\n };\n if (options.description) {\n payload.description = options.description;\n }\n if (options.tracks?.length) {\n payload.tracks = options.tracks.map(trackRefToNative);\n }\n return (await MusicModule.createLibraryPlaylist(musicUserToken, payload)) as Playlist;\n });\n }\n\n public static async addTracksToPlaylist(\n musicUserToken: string,\n playlistId: string,\n tracks: PlaylistTrackRef[],\n ): Promise<void> {\n requireMusicUserToken(musicUserToken, 'LibraryMutations.addTracksToPlaylist');\n assertLibraryId(playlistId, 'playlistId');\n await callNative('LibraryMutations.addTracksToPlaylist', async () => {\n await MusicModule.addTracksToLibraryPlaylist(\n musicUserToken,\n playlistId,\n tracks.map(trackRefToNative),\n );\n });\n }\n}\n\nfunction trackRefToNative(track: PlaylistTrackRef): { id: string; type: string } {\n return { id: track.id, type: track.type };\n}\n\nexport default LibraryMutations;\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AlbumsResponse } from '../types/albums-response';
|
|
2
|
+
import type { ArtistsResponse } from '../types/artist';
|
|
3
|
+
import type { LibraryMusicVideosResponse } from '../types/library-music-videos';
|
|
4
|
+
import type { LibrarySearch, LibrarySearchType } from '../types/library-search';
|
|
5
|
+
import type { PaginationOptions } from '../types/pagination';
|
|
6
|
+
import type { PlaylistSongsResponse, PlaylistsResponse } from '../types/playlist';
|
|
7
|
+
import type { Song } from '../types/song';
|
|
8
|
+
export interface LibrarySongsResponse {
|
|
9
|
+
songs: Song[];
|
|
10
|
+
}
|
|
11
|
+
declare class Library {
|
|
12
|
+
static getPlaylists(musicUserToken: string, options?: PaginationOptions): Promise<PlaylistsResponse>;
|
|
13
|
+
static getSongs(musicUserToken: string, options?: PaginationOptions): Promise<LibrarySongsResponse>;
|
|
14
|
+
static getPlaylistTracks(musicUserToken: string, playlistId: string, options?: PaginationOptions): Promise<PlaylistSongsResponse>;
|
|
15
|
+
static getArtists(musicUserToken: string, options?: PaginationOptions): Promise<ArtistsResponse>;
|
|
16
|
+
static getAlbums(musicUserToken: string, options?: PaginationOptions): Promise<AlbumsResponse>;
|
|
17
|
+
static getMusicVideos(musicUserToken: string, options?: PaginationOptions): Promise<LibraryMusicVideosResponse>;
|
|
18
|
+
static search(musicUserToken: string, term: string, types: LibrarySearchType[], options?: PaginationOptions): Promise<LibrarySearch>;
|
|
19
|
+
}
|
|
20
|
+
export default Library;
|
|
21
|
+
//# sourceMappingURL=library.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../src/modules/library.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,cAAM,OAAO;WACS,YAAY,CAC9B,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,iBAAiB,CAAC;WAUT,QAAQ,CAC1B,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,oBAAoB,CAAC;WAUZ,iBAAiB,CACnC,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,qBAAqB,CAAC;WAYb,UAAU,CAC5B,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,eAAe,CAAC;WAUP,SAAS,CAC3B,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,cAAc,CAAC;WAUN,cAAc,CAChC,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,0BAA0B,CAAC;WAUlB,MAAM,CACxB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,iBAAiB,EAAE,EAC1B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,aAAa,CAAC;CAW1B;AAED,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { callNative } from '../api/call-native';
|
|
2
|
+
import { assertLibraryId } from '../api/library-ids';
|
|
3
|
+
import { paginationBridgePayload } from '../api/pagination';
|
|
4
|
+
import { requireMusicUserToken } from '../api/require-music-user-token';
|
|
5
|
+
import { MusicModule } from '../native-module';
|
|
6
|
+
class Library {
|
|
7
|
+
static async getPlaylists(musicUserToken, options) {
|
|
8
|
+
requireMusicUserToken(musicUserToken, 'Library.getPlaylists');
|
|
9
|
+
return callNative('Library.getPlaylists', async () => (await MusicModule.getUserPlaylists(musicUserToken, paginationBridgePayload(options))));
|
|
10
|
+
}
|
|
11
|
+
static async getSongs(musicUserToken, options) {
|
|
12
|
+
requireMusicUserToken(musicUserToken, 'Library.getSongs');
|
|
13
|
+
return callNative('Library.getSongs', async () => (await MusicModule.getLibrarySongs(musicUserToken, paginationBridgePayload(options))));
|
|
14
|
+
}
|
|
15
|
+
static async getPlaylistTracks(musicUserToken, playlistId, options) {
|
|
16
|
+
requireMusicUserToken(musicUserToken, 'Library.getPlaylistTracks');
|
|
17
|
+
assertLibraryId(playlistId, 'playlistId');
|
|
18
|
+
return callNative('Library.getPlaylistTracks', async () => (await MusicModule.getPlaylistSongs(musicUserToken, playlistId, paginationBridgePayload(options))));
|
|
19
|
+
}
|
|
20
|
+
static async getArtists(musicUserToken, options) {
|
|
21
|
+
requireMusicUserToken(musicUserToken, 'Library.getArtists');
|
|
22
|
+
return callNative('Library.getArtists', async () => (await MusicModule.getLibraryArtists(musicUserToken, paginationBridgePayload(options))));
|
|
23
|
+
}
|
|
24
|
+
static async getAlbums(musicUserToken, options) {
|
|
25
|
+
requireMusicUserToken(musicUserToken, 'Library.getAlbums');
|
|
26
|
+
return callNative('Library.getAlbums', async () => (await MusicModule.getLibraryAlbums(musicUserToken, paginationBridgePayload(options))));
|
|
27
|
+
}
|
|
28
|
+
static async getMusicVideos(musicUserToken, options) {
|
|
29
|
+
requireMusicUserToken(musicUserToken, 'Library.getMusicVideos');
|
|
30
|
+
return callNative('Library.getMusicVideos', async () => (await MusicModule.getLibraryMusicVideos(musicUserToken, paginationBridgePayload(options))));
|
|
31
|
+
}
|
|
32
|
+
static async search(musicUserToken, term, types, options) {
|
|
33
|
+
requireMusicUserToken(musicUserToken, 'Library.search');
|
|
34
|
+
return callNative('Library.search', async () => (await MusicModule.librarySearch(musicUserToken, term, types, paginationBridgePayload(options))));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export default Library;
|
|
38
|
+
//# sourceMappingURL=library.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/modules/library.ts"],"names":[],"mappings":"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","sourcesContent":["import { callNative } from '../api/call-native';\nimport { assertLibraryId } from '../api/library-ids';\nimport { paginationBridgePayload } from '../api/pagination';\nimport { requireMusicUserToken } from '../api/require-music-user-token';\nimport type { AlbumsResponse } from '../types/albums-response';\nimport type { ArtistsResponse } from '../types/artist';\nimport type { LibraryMusicVideosResponse } from '../types/library-music-videos';\nimport type { LibrarySearch, LibrarySearchType } from '../types/library-search';\nimport type { PaginationOptions } from '../types/pagination';\nimport type { PlaylistSongsResponse, PlaylistsResponse } from '../types/playlist';\nimport type { Song } from '../types/song';\nimport { MusicModule } from '../native-module';\n\nexport interface LibrarySongsResponse {\n songs: Song[];\n}\n\nclass Library {\n public static async getPlaylists(\n musicUserToken: string,\n options?: PaginationOptions,\n ): Promise<PlaylistsResponse> {\n requireMusicUserToken(musicUserToken, 'Library.getPlaylists');\n return callNative('Library.getPlaylists', async () =>\n (await MusicModule.getUserPlaylists(\n musicUserToken,\n paginationBridgePayload(options),\n )) as PlaylistsResponse,\n );\n }\n\n public static async getSongs(\n musicUserToken: string,\n options?: PaginationOptions,\n ): Promise<LibrarySongsResponse> {\n requireMusicUserToken(musicUserToken, 'Library.getSongs');\n return callNative('Library.getSongs', async () =>\n (await MusicModule.getLibrarySongs(\n musicUserToken,\n paginationBridgePayload(options),\n )) as LibrarySongsResponse,\n );\n }\n\n public static async getPlaylistTracks(\n musicUserToken: string,\n playlistId: string,\n options?: PaginationOptions,\n ): Promise<PlaylistSongsResponse> {\n requireMusicUserToken(musicUserToken, 'Library.getPlaylistTracks');\n assertLibraryId(playlistId, 'playlistId');\n return callNative('Library.getPlaylistTracks', async () =>\n (await MusicModule.getPlaylistSongs(\n musicUserToken,\n playlistId,\n paginationBridgePayload(options),\n )) as PlaylistSongsResponse,\n );\n }\n\n public static async getArtists(\n musicUserToken: string,\n options?: PaginationOptions,\n ): Promise<ArtistsResponse> {\n requireMusicUserToken(musicUserToken, 'Library.getArtists');\n return callNative('Library.getArtists', async () =>\n (await MusicModule.getLibraryArtists(\n musicUserToken,\n paginationBridgePayload(options),\n )) as ArtistsResponse,\n );\n }\n\n public static async getAlbums(\n musicUserToken: string,\n options?: PaginationOptions,\n ): Promise<AlbumsResponse> {\n requireMusicUserToken(musicUserToken, 'Library.getAlbums');\n return callNative('Library.getAlbums', async () =>\n (await MusicModule.getLibraryAlbums(\n musicUserToken,\n paginationBridgePayload(options),\n )) as AlbumsResponse,\n );\n }\n\n public static async getMusicVideos(\n musicUserToken: string,\n options?: PaginationOptions,\n ): Promise<LibraryMusicVideosResponse> {\n requireMusicUserToken(musicUserToken, 'Library.getMusicVideos');\n return callNative('Library.getMusicVideos', async () =>\n (await MusicModule.getLibraryMusicVideos(\n musicUserToken,\n paginationBridgePayload(options),\n )) as LibraryMusicVideosResponse,\n );\n }\n\n public static async search(\n musicUserToken: string,\n term: string,\n types: LibrarySearchType[],\n options?: PaginationOptions,\n ): Promise<LibrarySearch> {\n requireMusicUserToken(musicUserToken, 'Library.search');\n return callNative('Library.search', async () =>\n (await MusicModule.librarySearch(\n musicUserToken,\n term,\n types,\n paginationBridgePayload(options),\n )) as LibrarySearch,\n );\n }\n}\n\nexport default Library;\n"]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { EventSubscription } from 'expo-modules-core';
|
|
2
|
+
import type { MusicItem } from '../types/music-item';
|
|
3
|
+
import type { PlaybackState } from '../types/playback-state';
|
|
4
|
+
import type { Song } from '../types/song';
|
|
5
|
+
export interface PlayerConfig {
|
|
6
|
+
mixWithOthers: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface PlaybackTimeUpdate {
|
|
9
|
+
playbackTime: number;
|
|
10
|
+
}
|
|
11
|
+
/** Payload for `onCurrentSongChange` (iOS/Android/web). */
|
|
12
|
+
export interface CurrentSongChangeEvent {
|
|
13
|
+
currentSong?: Song;
|
|
14
|
+
}
|
|
15
|
+
export interface PlaybackError {
|
|
16
|
+
message: string;
|
|
17
|
+
code: number;
|
|
18
|
+
domain: string;
|
|
19
|
+
operation: 'play' | 'togglePlayback' | 'skipToNext' | 'skipToPrevious';
|
|
20
|
+
}
|
|
21
|
+
/** Native player event payloads keyed by event name. */
|
|
22
|
+
export interface PlayerEventMap {
|
|
23
|
+
onPlaybackStateChange: PlaybackState;
|
|
24
|
+
onCurrentSongChange: CurrentSongChangeEvent;
|
|
25
|
+
onPlaybackTimeUpdate: PlaybackTimeUpdate;
|
|
26
|
+
onPlaybackError: PlaybackError;
|
|
27
|
+
}
|
|
28
|
+
declare class Player {
|
|
29
|
+
static setQueue(itemId: string, type: MusicItem): Promise<void>;
|
|
30
|
+
static playLibrarySong(musicUserToken: string, songId: string): Promise<void>;
|
|
31
|
+
static playLibraryPlaylist(musicUserToken: string, playlistId: string, startingAt?: number): Promise<void>;
|
|
32
|
+
static skipToNextEntry(): void;
|
|
33
|
+
static skipToPreviousEntry(): void;
|
|
34
|
+
static restartCurrentEntry(): void;
|
|
35
|
+
static seekToTime(time: number): void;
|
|
36
|
+
static togglePlayerState(): void;
|
|
37
|
+
static play(): void;
|
|
38
|
+
static pause(): void;
|
|
39
|
+
static getCurrentState(): Promise<PlaybackState>;
|
|
40
|
+
static addListener<K extends keyof PlayerEventMap>(eventType: K, listener: (eventData: PlayerEventMap[K]) => void): EventSubscription;
|
|
41
|
+
static removeAllListeners(eventType: keyof PlayerEventMap): void;
|
|
42
|
+
/**
|
|
43
|
+
* Configure audio session / mixing behavior.
|
|
44
|
+
*
|
|
45
|
+
* **iOS** — Full `AVAudioSession` behavior.
|
|
46
|
+
*
|
|
47
|
+
* **Android / web** — Returns the same `PlayerConfig` shape; session category,
|
|
48
|
+
* ducking, and focus behavior are not fully mirrored. Do not assume iOS parity.
|
|
49
|
+
*/
|
|
50
|
+
static configurePlayer(mixWithOthers?: boolean): Promise<PlayerConfig>;
|
|
51
|
+
}
|
|
52
|
+
export default Player;
|
|
53
|
+
//# sourceMappingURL=player.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../../src/modules/player.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAI3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,2DAA2D;AAC3D,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,YAAY,GAAG,gBAAgB,CAAC;CACxE;AAED,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC7B,qBAAqB,EAAE,aAAa,CAAC;IACrC,mBAAmB,EAAE,sBAAsB,CAAC;IAC5C,oBAAoB,EAAE,kBAAkB,CAAC;IACzC,eAAe,EAAE,aAAa,CAAC;CAChC;AAED,cAAM,MAAM;WACU,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;WAMxD,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAQtE,mBAAmB,CACrC,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,UAAU,SAAK,GACd,OAAO,CAAC,IAAI,CAAC;WAQF,eAAe,IAAI,IAAI;WAIvB,mBAAmB,IAAI,IAAI;WAI3B,mBAAmB,IAAI,IAAI;WAI3B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;WAI9B,iBAAiB,IAAI,IAAI;WAIzB,IAAI,IAAI,IAAI;WAIZ,KAAK,IAAI,IAAI;WAIP,eAAe,IAAI,OAAO,CAAC,aAAa,CAAC;WAM/C,WAAW,CAAC,CAAC,SAAS,MAAM,cAAc,EACtD,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,GAC/C,iBAAiB;WAIN,kBAAkB,CAAC,SAAS,EAAE,MAAM,cAAc,GAAG,IAAI;IAIvE;;;;;;;OAOG;WACiB,eAAe,CAAC,aAAa,UAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;CAKlF;AAED,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { callNative } from '../api/call-native';
|
|
2
|
+
import { assertLibraryId } from '../api/library-ids';
|
|
3
|
+
import { requireMusicUserToken } from '../api/require-music-user-token';
|
|
4
|
+
import { MusicModule, musicEventEmitter } from '../native-module';
|
|
5
|
+
class Player {
|
|
6
|
+
static async setQueue(itemId, type) {
|
|
7
|
+
await callNative('Player.setQueue', async () => {
|
|
8
|
+
await MusicModule.setPlaybackQueue(itemId, type);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
static async playLibrarySong(musicUserToken, songId) {
|
|
12
|
+
requireMusicUserToken(musicUserToken, 'Player.playLibrarySong');
|
|
13
|
+
assertLibraryId(songId, 'songId');
|
|
14
|
+
await callNative('Player.playLibrarySong', async () => {
|
|
15
|
+
await MusicModule.playLibrarySong(musicUserToken, songId);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
static async playLibraryPlaylist(musicUserToken, playlistId, startingAt = -1) {
|
|
19
|
+
requireMusicUserToken(musicUserToken, 'Player.playLibraryPlaylist');
|
|
20
|
+
assertLibraryId(playlistId, 'playlistId');
|
|
21
|
+
await callNative('Player.playLibraryPlaylist', async () => {
|
|
22
|
+
await MusicModule.playLibraryPlaylist(musicUserToken, playlistId, startingAt);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
static skipToNextEntry() {
|
|
26
|
+
MusicModule.skipToNextEntry();
|
|
27
|
+
}
|
|
28
|
+
static skipToPreviousEntry() {
|
|
29
|
+
MusicModule.skipToPreviousEntry();
|
|
30
|
+
}
|
|
31
|
+
static restartCurrentEntry() {
|
|
32
|
+
MusicModule.restartCurrentEntry();
|
|
33
|
+
}
|
|
34
|
+
static seekToTime(time) {
|
|
35
|
+
MusicModule.seekToTime(time);
|
|
36
|
+
}
|
|
37
|
+
static togglePlayerState() {
|
|
38
|
+
MusicModule.togglePlayerState();
|
|
39
|
+
}
|
|
40
|
+
static play() {
|
|
41
|
+
MusicModule.play();
|
|
42
|
+
}
|
|
43
|
+
static pause() {
|
|
44
|
+
MusicModule.pause();
|
|
45
|
+
}
|
|
46
|
+
static async getCurrentState() {
|
|
47
|
+
return callNative('Player.getCurrentState', async () => (await MusicModule.getCurrentState()));
|
|
48
|
+
}
|
|
49
|
+
static addListener(eventType, listener) {
|
|
50
|
+
return musicEventEmitter.addListener(eventType, listener);
|
|
51
|
+
}
|
|
52
|
+
static removeAllListeners(eventType) {
|
|
53
|
+
musicEventEmitter.removeAllListeners(eventType);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Configure audio session / mixing behavior.
|
|
57
|
+
*
|
|
58
|
+
* **iOS** — Full `AVAudioSession` behavior.
|
|
59
|
+
*
|
|
60
|
+
* **Android / web** — Returns the same `PlayerConfig` shape; session category,
|
|
61
|
+
* ducking, and focus behavior are not fully mirrored. Do not assume iOS parity.
|
|
62
|
+
*/
|
|
63
|
+
static async configurePlayer(mixWithOthers = false) {
|
|
64
|
+
return callNative('Player.configurePlayer', async () => (await MusicModule.configurePlayer(mixWithOthers)));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export default Player;
|
|
68
|
+
//# sourceMappingURL=player.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player.js","sourceRoot":"","sources":["../../src/modules/player.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAIxE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AA8BlE,MAAM,MAAM;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,IAAe;QAC1D,MAAM,UAAU,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;YAC7C,MAAM,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,cAAsB,EAAE,MAAc;QACxE,qBAAqB,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;QAChE,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAClC,MAAM,UAAU,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,WAAW,CAAC,eAAe,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,mBAAmB,CACrC,cAAsB,EACtB,UAAkB,EAClB,UAAU,GAAG,CAAC,CAAC;QAEf,qBAAqB,CAAC,cAAc,EAAE,4BAA4B,CAAC,CAAC;QACpE,eAAe,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC1C,MAAM,UAAU,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,WAAW,CAAC,mBAAmB,CAAC,cAAc,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,eAAe;QAC3B,WAAW,CAAC,eAAe,EAAE,CAAC;IAChC,CAAC;IAEM,MAAM,CAAC,mBAAmB;QAC/B,WAAW,CAAC,mBAAmB,EAAE,CAAC;IACpC,CAAC;IAEM,MAAM,CAAC,mBAAmB;QAC/B,WAAW,CAAC,mBAAmB,EAAE,CAAC;IACpC,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,IAAY;QACnC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAEM,MAAM,CAAC,iBAAiB;QAC7B,WAAW,CAAC,iBAAiB,EAAE,CAAC;IAClC,CAAC;IAEM,MAAM,CAAC,IAAI;QAChB,WAAW,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAEM,MAAM,CAAC,KAAK;QACjB,WAAW,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,eAAe;QACjC,OAAO,UAAU,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE,CACrD,CAAC,MAAM,WAAW,CAAC,eAAe,EAAE,CAAkB,CACvD,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,WAAW,CACvB,SAAY,EACZ,QAAgD;QAEhD,OAAO,iBAAiB,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAEM,MAAM,CAAC,kBAAkB,CAAC,SAA+B;QAC9D,iBAAiB,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,aAAa,GAAG,KAAK;QACvD,OAAO,UAAU,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE,CACrD,CAAC,MAAM,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAiB,CACnE,CAAC;IACJ,CAAC;CACF;AAED,eAAe,MAAM,CAAC","sourcesContent":["import type { EventSubscription } from 'expo-modules-core';\nimport { callNative } from '../api/call-native';\nimport { assertLibraryId } from '../api/library-ids';\nimport { requireMusicUserToken } from '../api/require-music-user-token';\nimport type { MusicItem } from '../types/music-item';\nimport type { PlaybackState } from '../types/playback-state';\nimport type { Song } from '../types/song';\nimport { MusicModule, musicEventEmitter } from '../native-module';\n\nexport interface PlayerConfig {\n mixWithOthers: boolean;\n}\n\nexport interface PlaybackTimeUpdate {\n playbackTime: number;\n}\n\n/** Payload for `onCurrentSongChange` (iOS/Android/web). */\nexport interface CurrentSongChangeEvent {\n currentSong?: Song;\n}\n\nexport interface PlaybackError {\n message: string;\n code: number;\n domain: string;\n operation: 'play' | 'togglePlayback' | 'skipToNext' | 'skipToPrevious';\n}\n\n/** Native player event payloads keyed by event name. */\nexport interface PlayerEventMap {\n onPlaybackStateChange: PlaybackState;\n onCurrentSongChange: CurrentSongChangeEvent;\n onPlaybackTimeUpdate: PlaybackTimeUpdate;\n onPlaybackError: PlaybackError;\n}\n\nclass Player {\n public static async setQueue(itemId: string, type: MusicItem): Promise<void> {\n await callNative('Player.setQueue', async () => {\n await MusicModule.setPlaybackQueue(itemId, type);\n });\n }\n\n public static async playLibrarySong(musicUserToken: string, songId: string): Promise<void> {\n requireMusicUserToken(musicUserToken, 'Player.playLibrarySong');\n assertLibraryId(songId, 'songId');\n await callNative('Player.playLibrarySong', async () => {\n await MusicModule.playLibrarySong(musicUserToken, songId);\n });\n }\n\n public static async playLibraryPlaylist(\n musicUserToken: string,\n playlistId: string,\n startingAt = -1,\n ): Promise<void> {\n requireMusicUserToken(musicUserToken, 'Player.playLibraryPlaylist');\n assertLibraryId(playlistId, 'playlistId');\n await callNative('Player.playLibraryPlaylist', async () => {\n await MusicModule.playLibraryPlaylist(musicUserToken, playlistId, startingAt);\n });\n }\n\n public static skipToNextEntry(): void {\n MusicModule.skipToNextEntry();\n }\n\n public static skipToPreviousEntry(): void {\n MusicModule.skipToPreviousEntry();\n }\n\n public static restartCurrentEntry(): void {\n MusicModule.restartCurrentEntry();\n }\n\n public static seekToTime(time: number): void {\n MusicModule.seekToTime(time);\n }\n\n public static togglePlayerState(): void {\n MusicModule.togglePlayerState();\n }\n\n public static play(): void {\n MusicModule.play();\n }\n\n public static pause(): void {\n MusicModule.pause();\n }\n\n public static async getCurrentState(): Promise<PlaybackState> {\n return callNative('Player.getCurrentState', async () =>\n (await MusicModule.getCurrentState()) as PlaybackState,\n );\n }\n\n public static addListener<K extends keyof PlayerEventMap>(\n eventType: K,\n listener: (eventData: PlayerEventMap[K]) => void,\n ): EventSubscription {\n return musicEventEmitter.addListener(eventType, listener);\n }\n\n public static removeAllListeners(eventType: keyof PlayerEventMap): void {\n musicEventEmitter.removeAllListeners(eventType);\n }\n\n /**\n * Configure audio session / mixing behavior.\n *\n * **iOS** — Full `AVAudioSession` behavior.\n *\n * **Android / web** — Returns the same `PlayerConfig` shape; session category,\n * ducking, and focus behavior are not fully mirrored. Do not assume iOS parity.\n */\n public static async configurePlayer(mixWithOthers = false): Promise<PlayerConfig> {\n return callNative('Player.configurePlayer', async () =>\n (await MusicModule.configurePlayer(mixWithOthers)) as PlayerConfig,\n );\n }\n}\n\nexport default Player;\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Rating, RatingResourceType, RatingValue, ResourceIds } from '../types/rating';
|
|
2
|
+
declare class Ratings {
|
|
3
|
+
static getRating(musicUserToken: string, resourceType: RatingResourceType, id: string): Promise<Rating | null>;
|
|
4
|
+
static setRating(musicUserToken: string, resourceType: RatingResourceType, id: string, value: RatingValue): Promise<Rating>;
|
|
5
|
+
static clearRating(musicUserToken: string, resourceType: RatingResourceType, id: string): Promise<void>;
|
|
6
|
+
static addToFavorites(musicUserToken: string, resourceIds: ResourceIds): Promise<void>;
|
|
7
|
+
static removeFromFavorites(musicUserToken: string, resourceIds: ResourceIds): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export default Ratings;
|
|
10
|
+
//# sourceMappingURL=ratings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ratings.d.ts","sourceRoot":"","sources":["../../src/modules/ratings.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI5F,cAAM,OAAO;WACS,SAAS,CAC3B,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,kBAAkB,EAChC,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;WAQL,SAAS,CAC3B,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,kBAAkB,EAChC,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,MAAM,CAAC;WAOE,WAAW,CAC7B,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,kBAAkB,EAChC,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,IAAI,CAAC;WAOI,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;WAO/E,mBAAmB,CACrC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,IAAI,CAAC;CAMjB;AAED,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { callNative } from '../api/call-native';
|
|
2
|
+
import { requireMusicUserToken } from '../api/require-music-user-token';
|
|
3
|
+
import { MusicModule } from '../native-module';
|
|
4
|
+
import { normalizeResourceIds } from '../utils/normalize-resource-ids';
|
|
5
|
+
class Ratings {
|
|
6
|
+
static async getRating(musicUserToken, resourceType, id) {
|
|
7
|
+
requireMusicUserToken(musicUserToken, 'Ratings.getRating');
|
|
8
|
+
return callNative('Ratings.getRating', async () => {
|
|
9
|
+
const result = await MusicModule.getRating(musicUserToken, resourceType, id);
|
|
10
|
+
return result ?? null;
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
static async setRating(musicUserToken, resourceType, id, value) {
|
|
14
|
+
requireMusicUserToken(musicUserToken, 'Ratings.setRating');
|
|
15
|
+
return callNative('Ratings.setRating', async () => (await MusicModule.setRating(musicUserToken, resourceType, id, value)));
|
|
16
|
+
}
|
|
17
|
+
static async clearRating(musicUserToken, resourceType, id) {
|
|
18
|
+
requireMusicUserToken(musicUserToken, 'Ratings.clearRating');
|
|
19
|
+
await callNative('Ratings.clearRating', async () => {
|
|
20
|
+
await MusicModule.clearRating(musicUserToken, resourceType, id);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
static async addToFavorites(musicUserToken, resourceIds) {
|
|
24
|
+
requireMusicUserToken(musicUserToken, 'Ratings.addToFavorites');
|
|
25
|
+
await callNative('Ratings.addToFavorites', async () => {
|
|
26
|
+
await MusicModule.addToFavorites(musicUserToken, normalizeResourceIds(resourceIds));
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
static async removeFromFavorites(musicUserToken, resourceIds) {
|
|
30
|
+
requireMusicUserToken(musicUserToken, 'Ratings.removeFromFavorites');
|
|
31
|
+
await callNative('Ratings.removeFromFavorites', async () => {
|
|
32
|
+
await MusicModule.removeFromFavorites(musicUserToken, normalizeResourceIds(resourceIds));
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export default Ratings;
|
|
37
|
+
//# sourceMappingURL=ratings.js.map
|