react-native-audio-browser 0.1.1 → 0.2.0-next.1
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/AudioBrowser.podspec +1 -1
- package/README.md +180 -2
- package/android/build.gradle +10 -0
- package/android/gradle.properties +1 -1
- package/android/src/main/AndroidManifest.xml +15 -0
- package/android/src/main/java/com/audiobrowser/AudioBrowser.kt +401 -141
- package/android/src/main/java/com/audiobrowser/Callbacks.kt +4 -6
- package/android/src/main/java/com/audiobrowser/Service.kt +67 -18
- package/android/src/main/java/com/audiobrowser/browser/ArtworkResolutionRegistry.kt +37 -0
- package/android/src/main/java/com/audiobrowser/browser/BrowseArtworkRegistry.kt +34 -0
- package/android/src/main/java/com/audiobrowser/browser/BrowserManager.kt +443 -178
- package/android/src/main/java/com/audiobrowser/browser/BrowserUrlResolution.kt +300 -0
- package/android/src/main/java/com/audiobrowser/browser/JsonArtwork.kt +79 -0
- package/android/src/main/java/com/audiobrowser/browser/JsonModels.kt +41 -4
- package/android/src/main/java/com/audiobrowser/browser/SectionScope.kt +43 -0
- package/android/src/main/java/com/audiobrowser/browser/TrackLoadHandler.kt +4 -4
- package/android/src/main/java/com/audiobrowser/extension/ResolvedTrackExt.kt +35 -0
- package/android/src/main/java/com/audiobrowser/http/RequestConfigBuilder.kt +109 -97
- package/android/src/main/java/com/audiobrowser/model/PlaybackMetadata.kt +6 -10
- package/android/src/main/java/com/audiobrowser/model/PlayerSetupOptions.kt +40 -8
- package/android/src/main/java/com/audiobrowser/model/PlayerUpdateOptions.kt +31 -37
- package/android/src/main/java/com/audiobrowser/player/AutomaticBufferManager.kt +4 -1
- package/android/src/main/java/com/audiobrowser/player/CapabilityControls.kt +119 -0
- package/android/src/main/java/com/audiobrowser/player/DynamicLoadControl.kt +18 -1
- package/android/src/main/java/com/audiobrowser/player/EqualizerController.kt +153 -0
- package/android/src/main/java/com/audiobrowser/player/InterceptingPlayer.kt +141 -0
- package/android/src/main/java/com/audiobrowser/player/MediaFactory.kt +15 -3
- package/android/src/main/java/com/audiobrowser/player/MediaSessionCallback.kt +415 -131
- package/android/src/main/java/com/audiobrowser/player/MediaSessionCommandManager.kt +154 -276
- package/android/src/main/java/com/audiobrowser/player/NowPlayingUpdater.kt +348 -0
- package/android/src/main/java/com/audiobrowser/player/PlaybackErrorClassifier.kt +129 -0
- package/android/src/main/java/com/audiobrowser/player/PlaybackStateMachine.kt +85 -0
- package/android/src/main/java/com/audiobrowser/player/PlaybackStateStore.kt +27 -5
- package/android/src/main/java/com/audiobrowser/player/PlaybackTimer.kt +56 -0
- package/android/src/main/java/com/audiobrowser/player/Player.kt +452 -576
- package/android/src/main/java/com/audiobrowser/player/PlayerCapabilitiesExt.kt +20 -0
- package/android/src/main/java/com/audiobrowser/player/PlayerEngineFactory.kt +130 -0
- package/android/src/main/java/com/audiobrowser/player/PlayerListener.kt +190 -67
- package/android/src/main/java/com/audiobrowser/player/RetryLoadErrorHandlingPolicy.kt +117 -53
- package/android/src/main/java/com/audiobrowser/player/SleepTimer.kt +37 -3
- package/android/src/main/java/com/audiobrowser/player/SleepTimerManager.kt +80 -0
- package/android/src/main/java/com/audiobrowser/player/StuckRecoveryPolicy.kt +50 -0
- package/android/src/main/java/com/audiobrowser/player/TransformingDataSource.kt +84 -40
- package/android/src/main/java/com/audiobrowser/player/VolumeFader.kt +81 -0
- package/android/src/main/java/com/audiobrowser/tls/AiaCertChaser.kt +141 -0
- package/android/src/main/java/com/audiobrowser/tls/AiaChasingTrustManager.kt +37 -0
- package/android/src/main/java/com/audiobrowser/tls/AiaTls.kt +41 -0
- package/android/src/main/java/com/audiobrowser/tls/CachingCertificateFetcher.kt +209 -0
- package/android/src/main/java/com/audiobrowser/util/ArtworkContentProvider.kt +161 -0
- package/android/src/main/java/com/audiobrowser/util/ArtworkUris.kt +28 -0
- package/android/src/main/java/com/audiobrowser/util/ArtworkVariant.kt +26 -0
- package/android/src/main/java/com/audiobrowser/util/BrowserPathHelper.kt +24 -0
- package/android/src/main/java/com/audiobrowser/util/CoilArtworkLoader.kt +49 -0
- package/android/src/main/java/com/audiobrowser/util/CoilArtworkLoaderHolder.kt +36 -0
- package/android/src/main/java/com/audiobrowser/util/CoilBitmapLoader.kt +23 -300
- package/android/src/main/java/com/audiobrowser/util/EqualizerManager.kt +13 -23
- package/android/src/main/java/com/audiobrowser/util/MediaExtrasBuilder.kt +2 -2
- package/android/src/main/java/com/audiobrowser/util/MetadataAdapter.kt +4 -3
- package/android/src/main/java/com/audiobrowser/util/OutputMonitor.kt +211 -0
- package/android/src/main/java/com/audiobrowser/util/OutputSwitcher.kt +58 -0
- package/android/src/main/java/com/audiobrowser/util/PlayingStateFactory.kt +2 -1
- package/android/src/main/java/com/audiobrowser/util/RatingFavorites.kt +14 -0
- package/android/src/main/java/com/audiobrowser/util/SvgArtworkRenderer.kt +6 -111
- package/android/src/main/java/com/audiobrowser/util/SystemVolumeMonitor.kt +22 -8
- package/android/src/main/java/com/audiobrowser/util/TrackFactory.kt +111 -80
- package/android/src/main/res/values/strings.xml +4 -0
- package/android/src/test/java/com/audiobrowser/TestFixtures.kt +166 -0
- package/android/src/test/java/com/audiobrowser/browser/ArtworkResolutionRegistryTest.kt +46 -0
- package/android/src/test/java/com/audiobrowser/browser/BrowseArtworkRegistryTest.kt +39 -0
- package/android/src/test/java/com/audiobrowser/browser/BrowserManagerBuildApiRequestTest.kt +114 -0
- package/android/src/test/java/com/audiobrowser/browser/BrowserManagerLayerResolutionTest.kt +141 -0
- package/android/src/test/java/com/audiobrowser/browser/BrowserManagerTest.kt +4 -0
- package/android/src/test/java/com/audiobrowser/browser/BrowserUrlResolutionTest.kt +177 -0
- package/android/src/test/java/com/audiobrowser/browser/JsonArtworkTest.kt +54 -0
- package/android/src/test/java/com/audiobrowser/browser/SectionScopeTest.kt +96 -0
- package/android/src/test/java/com/audiobrowser/browser/SimpleRouterTest.kt +1 -2
- package/android/src/test/java/com/audiobrowser/http/RequestConfigBuilderTest.kt +72 -0
- package/android/src/test/java/com/audiobrowser/player/CapabilityControlsTest.kt +159 -0
- package/android/src/test/java/com/audiobrowser/player/DynamicLoadControlTest.kt +56 -0
- package/android/src/test/java/com/audiobrowser/player/EqualizerControllerTest.kt +216 -0
- package/android/src/test/java/com/audiobrowser/player/NowPlayingUpdaterTest.kt +442 -0
- package/android/src/test/java/com/audiobrowser/player/PlaybackErrorClassifierTest.kt +191 -0
- package/android/src/test/java/com/audiobrowser/player/PlaybackStateMachineTest.kt +198 -0
- package/android/src/test/java/com/audiobrowser/player/PlaybackTimerTest.kt +137 -0
- package/android/src/test/java/com/audiobrowser/player/PlayerEngineFactoryTest.kt +36 -0
- package/android/src/test/java/com/audiobrowser/player/RetryLoadErrorHandlingPolicyTest.kt +268 -0
- package/android/src/test/java/com/audiobrowser/player/SessionErrorMaskTest.kt +68 -0
- package/android/src/test/java/com/audiobrowser/player/StuckRecoveryPolicyTest.kt +40 -0
- package/android/src/test/java/com/audiobrowser/player/TransformingDataSourceTest.kt +193 -0
- package/android/src/test/java/com/audiobrowser/tls/AiaCertChaserTest.kt +107 -0
- package/android/src/test/java/com/audiobrowser/tls/AiaChasingTrustManagerTest.kt +73 -0
- package/android/src/test/java/com/audiobrowser/tls/CachingCertificateFetcherTest.kt +75 -0
- package/android/src/test/java/com/audiobrowser/tls/CertFixtures.kt +18 -0
- package/android/src/test/java/com/audiobrowser/util/ArtworkContentProviderTest.kt +163 -0
- package/android/src/test/java/com/audiobrowser/util/ArtworkUrisTest.kt +34 -0
- package/android/src/test/java/com/audiobrowser/util/BrowserPathHelperTest.kt +28 -0
- package/android/src/test/java/com/audiobrowser/util/CoilArtworkLoaderHolderTest.kt +53 -0
- package/android/src/test/java/com/audiobrowser/util/CoilArtworkLoaderTest.kt +58 -0
- package/android/src/test/java/com/audiobrowser/util/FakeImageLoader.kt +57 -0
- package/android/src/test/java/com/audiobrowser/util/PlayingStateFactoryTest.kt +40 -0
- package/android/src/test/java/com/audiobrowser/util/RatingFavoritesTest.kt +34 -0
- package/android/src/test/java/com/audiobrowser/util/TrackFactoryBrowseTest.kt +50 -0
- package/android/src/test/java/com/audiobrowser/util/TrackFactoryMediaIdTest.kt +63 -0
- package/android/src/test/java/com/audiobrowser/util/TrackFactoryRatingTest.kt +35 -0
- package/android/src/test/resources/certs/isrg-root-x1.pem +31 -0
- package/android/src/test/resources/certs/letsencrypt-r13.der +0 -0
- package/android/src/test/resources/certs/letsencrypt-r13.pem +29 -0
- package/android/src/test/resources/certs/stationplaylist-leaf.pem +34 -0
- package/ios/Browser/BrowserConfig.swift +41 -11
- package/ios/Browser/BrowserManager+URLResolution.swift +213 -93
- package/ios/Browser/BrowserManager.swift +303 -110
- package/ios/Browser/BrowserPathHelper.swift +32 -3
- package/ios/Browser/JsonModels.swift +287 -66
- package/ios/Browser/MediaResolveComposer.swift +114 -0
- package/ios/Browser/SearchDrillIn.swift +44 -0
- package/ios/Browser/SectionScope.swift +35 -0
- package/ios/Browser/TabBarEntries.swift +15 -0
- package/ios/CarPlay/CPInterfaceController+Safe.swift +126 -0
- package/ios/CarPlay/CarPlayArtworkResolver.swift +6 -6
- package/ios/CarPlay/CarPlayController.swift +739 -149
- package/ios/CarPlay/CarPlayImageLoader.swift +57 -8
- package/ios/CarPlay/CarPlayListItemFactory.swift +44 -35
- package/ios/CarPlay/CarPlayNowPlayingManager.swift +180 -36
- package/ios/CarPlay/ImageRowItem+CarPlay.swift +19 -0
- package/ios/CarPlay/RNABAudioBrowser.h +15 -10
- package/ios/CarPlay/RNABAudioBrowser.m +15 -14
- package/ios/CarPlay/RNABCarPlaySceneDelegate.m +2 -0
- package/ios/CarPlay/RNABMediaAddHandler.swift +75 -0
- package/ios/CarPlay/RNABMediaAffinityHandler.swift +69 -0
- package/ios/CarPlay/RNABMediaIntentHandler.swift +53 -43
- package/ios/Extension/Capability+RemoteCommand.swift +7 -9
- package/ios/Extension/ChapterMetadata+AVFoundation.swift +1 -1
- package/ios/Extension/NavigationError+Conversion.swift +8 -1
- package/ios/Extension/PlayerCapabilities+Favorite.swift +20 -0
- package/ios/Extension/RequestConfig+Copying.swift +31 -0
- package/ios/Extension/ResolvedTrack+Copying.swift +10 -4
- package/ios/Extension/TimedMetadata+AVFoundation.swift +1 -1
- package/ios/Extension/Track+AVPlayer.swift +4 -4
- package/ios/Extension/Track+Copying.swift +9 -3
- package/ios/Extension/TrackMetadata+AVFoundation.swift +1 -1
- package/ios/Extension/Variant+Artwork.swift +49 -0
- package/ios/HybridAudioBrowser.swift +750 -173
- package/ios/Model/NitroTypeStubs.swift +299 -224
- package/ios/Model/PlayerUpdateOptions.swift +23 -23
- package/ios/Model/RemoteCommand.swift +6 -6
- package/ios/Model/TrackPlayerError.swift +82 -18
- package/ios/NowPlayingInfo/NowPlayingInfoController.swift +99 -121
- package/ios/NowPlayingInfo/SilentAudioPrimer.swift +73 -0
- package/ios/Observer/PlayerItemNotificationObserver.swift +45 -5
- package/ios/Observer/PlayerItemPropertyObserver.swift +27 -4
- package/ios/Observer/PlayerTimeObserver.swift +3 -53
- package/ios/Option/SessionCategories.swift +33 -11
- package/ios/Player/AirPlayStallJudgement.swift +25 -0
- package/ios/Player/EndOfTrackJudgement.swift +32 -0
- package/ios/Player/LoadSeekCoordinator.swift +16 -1
- package/ios/Player/MediaIntentCriteria.swift +139 -0
- package/ios/Player/MediaLoader.swift +28 -10
- package/ios/Player/NowPlayingUpdater.swift +119 -26
- package/ios/Player/PersistedPlaybackState.swift +11 -0
- package/ios/Player/PlaybackCoordinator.swift +282 -51
- package/ios/Player/PlaybackCoordinatorCallbacks.swift +6 -1
- package/ios/Player/PlaybackEffectHandler.swift +19 -9
- package/ios/Player/PlaybackErrorHandler.swift +97 -13
- package/ios/Player/PlaybackStateMachine.swift +18 -13
- package/ios/Player/PlaybackStateStore.swift +27 -0
- package/ios/Player/PlaybackTimer.swift +61 -0
- package/ios/Player/PlayingStateManager.swift +3 -2
- package/ios/Player/QueueManager.swift +67 -61
- package/ios/Player/RetryManager.swift +97 -21
- package/ios/Player/SleepTimerHandling.swift +8 -0
- package/ios/Player/SleepTimerManager.swift +38 -5
- package/ios/Player/VolumeFader.swift +77 -0
- package/ios/RemoteCommand/RemoteCommandController.swift +31 -15
- package/ios/Tests/AirPlayStallJudgementTests.swift +52 -0
- package/ios/Tests/BrowserPathHelperTests.swift +28 -0
- package/ios/Tests/CarPlayArtworkResolverTests.swift +39 -39
- package/ios/Tests/ChapterMetadataAVFoundationTests.swift +2 -2
- package/ios/Tests/EndOfTrackJudgementTests.swift +35 -0
- package/ios/Tests/JsonModelsTests.swift +58 -0
- package/ios/Tests/LoadSeekCoordinatorTests.swift +38 -7
- package/ios/Tests/MediaIntentCriteriaTests.swift +170 -0
- package/ios/Tests/MediaLoaderAssetOptionsTests.swift +46 -0
- package/ios/Tests/MediaLoaderTests.swift +23 -8
- package/ios/Tests/MediaResolveTests.swift +126 -0
- package/ios/Tests/OnceValueTests.swift +79 -0
- package/ios/Tests/PlaybackCoordinatorTests.swift +784 -13
- package/ios/Tests/PlaybackErrorHandlerTests.swift +380 -46
- package/ios/Tests/PlaybackStateMachineTests.swift +33 -8
- package/ios/Tests/PlaybackStateStoreTests.swift +48 -0
- package/ios/Tests/PlaybackTimerTests.swift +55 -0
- package/ios/Tests/PlayingStateManagerTests.swift +57 -0
- package/ios/Tests/QueueManagerTests.swift +149 -18
- package/ios/Tests/ResolvedTrackCopyingTests.swift +15 -8
- package/ios/Tests/RetryManagerTests.swift +89 -0
- package/ios/Tests/SearchDrillInTests.swift +63 -0
- package/ios/Tests/SectionScopeTests.swift +82 -0
- package/ios/Tests/SleepTimerManagerTests.swift +104 -0
- package/ios/Tests/Support/TestTypes.swift +61 -20
- package/ios/Tests/TabBarEntriesTests.swift +71 -0
- package/ios/Tests/TrackSelectorTests.swift +15 -15
- package/ios/TrackPlayer.swift +380 -58
- package/ios/TrackPlayerCallbacks.swift +0 -6
- package/ios/TrackSelector.swift +5 -5
- package/ios/Util/ArtworkImageFetcher.swift +4 -2
- package/ios/Util/NetworkMonitor.swift +7 -3
- package/ios/Util/OnceValue.swift +34 -0
- package/lib/commonjs/features/browser-config.js +227 -0
- package/lib/commonjs/features/browser-config.js.map +1 -0
- package/lib/commonjs/features/browser.js +59 -158
- package/lib/commonjs/features/browser.js.map +1 -1
- package/lib/commonjs/features/carConnection.js +42 -0
- package/lib/commonjs/features/carConnection.js.map +1 -0
- package/lib/commonjs/features/errors.js +34 -2
- package/lib/commonjs/features/errors.js.map +1 -1
- package/lib/commonjs/features/gate.js +149 -0
- package/lib/commonjs/features/gate.js.map +1 -0
- package/lib/commonjs/features/index.js +22 -0
- package/lib/commonjs/features/index.js.map +1 -1
- package/lib/commonjs/features/metadata.js.map +1 -1
- package/lib/commonjs/features/nowPlaying.js +35 -0
- package/lib/commonjs/features/nowPlaying.js.map +1 -1
- package/lib/commonjs/features/output.js +37 -23
- package/lib/commonjs/features/output.js.map +1 -1
- package/lib/commonjs/features/playback/controls.js +9 -0
- package/lib/commonjs/features/playback/controls.js.map +1 -1
- package/lib/commonjs/features/playback/index.js +11 -0
- package/lib/commonjs/features/playback/index.js.map +1 -1
- package/lib/commonjs/features/playback/progress.js +28 -12
- package/lib/commonjs/features/playback/progress.js.map +1 -1
- package/lib/commonjs/features/playback/trackPlaybackTime.js +92 -0
- package/lib/commonjs/features/playback/trackPlaybackTime.js.map +1 -0
- package/lib/commonjs/features/playback/volume.js +1 -1
- package/lib/commonjs/features/player/options.js +49 -13
- package/lib/commonjs/features/player/options.js.map +1 -1
- package/lib/commonjs/features/player/setup.js +249 -3
- package/lib/commonjs/features/player/setup.js.map +1 -1
- package/lib/commonjs/features/queue/queue.js +10 -3
- package/lib/commonjs/features/queue/queue.js.map +1 -1
- package/lib/commonjs/features/remoteControls.js +1 -12
- package/lib/commonjs/features/remoteControls.js.map +1 -1
- package/lib/commonjs/features/sleepTimer.js +9 -4
- package/lib/commonjs/features/sleepTimer.js.map +1 -1
- package/lib/commonjs/native.js +5 -0
- package/lib/commonjs/native.js.map +1 -1
- package/lib/commonjs/native.web.js +4 -1
- package/lib/commonjs/native.web.js.map +1 -1
- package/lib/commonjs/utils/LazyNativeEmitter.js +0 -3
- package/lib/commonjs/utils/LazyNativeEmitter.js.map +1 -1
- package/lib/commonjs/utils/NativeUpdatedValue.js +0 -3
- package/lib/commonjs/utils/NativeUpdatedValue.js.map +1 -1
- package/lib/commonjs/utils/artwork.js +31 -0
- package/lib/commonjs/utils/artwork.js.map +1 -0
- package/lib/commonjs/web/NativeAudioBrowser.js +301 -124
- package/lib/commonjs/web/NativeAudioBrowser.js.map +1 -1
- package/lib/commonjs/web/TrackPlayer/PlaybackStateMachine.js +71 -0
- package/lib/commonjs/web/TrackPlayer/PlaybackStateMachine.js.map +1 -0
- package/lib/commonjs/web/TrackPlayer/PlaybackTimer.js +34 -0
- package/lib/commonjs/web/TrackPlayer/PlaybackTimer.js.map +1 -0
- package/lib/commonjs/web/TrackPlayer/Player.js +90 -26
- package/lib/commonjs/web/TrackPlayer/Player.js.map +1 -1
- package/lib/commonjs/web/TrackPlayer/PlayingStateFactory.js +21 -0
- package/lib/commonjs/web/TrackPlayer/PlayingStateFactory.js.map +1 -0
- package/lib/commonjs/web/TrackPlayer/QueueManager.js +273 -0
- package/lib/commonjs/web/TrackPlayer/QueueManager.js.map +1 -0
- package/lib/commonjs/web/TrackPlayer/QueuePlayer.js +158 -0
- package/lib/commonjs/web/TrackPlayer/QueuePlayer.js.map +1 -0
- package/lib/commonjs/web/TrackPlayer/RepeatMode.js +1 -1
- package/lib/commonjs/web/TrackPlayer/RepeatMode.js.map +1 -1
- package/lib/commonjs/web/TrackPlayer/SleepTimer.js +34 -3
- package/lib/commonjs/web/TrackPlayer/SleepTimer.js.map +1 -1
- package/lib/commonjs/web/TrackPlayer/VolumeFader.js +75 -0
- package/lib/commonjs/web/TrackPlayer/VolumeFader.js.map +1 -0
- package/lib/commonjs/web/TrackPlayer/index.js +13 -5
- package/lib/commonjs/web/TrackPlayer/index.js.map +1 -1
- package/lib/commonjs/web/browser/BrowserManager.js +176 -50
- package/lib/commonjs/web/browser/BrowserManager.js.map +1 -1
- package/lib/commonjs/web/browser/NavigationErrorManager.js +3 -1
- package/lib/commonjs/web/browser/NavigationErrorManager.js.map +1 -1
- package/lib/commonjs/web/browser/SearchManager.js +11 -9
- package/lib/commonjs/web/browser/SearchManager.js.map +1 -1
- package/lib/commonjs/web/browser/assertBrowsePageShape.js +22 -0
- package/lib/commonjs/web/browser/assertBrowsePageShape.js.map +1 -0
- package/lib/commonjs/web/browser/classifyTrackNavigation.js +41 -0
- package/lib/commonjs/web/browser/classifyTrackNavigation.js.map +1 -0
- package/lib/commonjs/web/browser/parseSearchResponse.js +20 -0
- package/lib/commonjs/web/browser/parseSearchResponse.js.map +1 -0
- package/lib/commonjs/web/http/HttpClient.js +4 -23
- package/lib/commonjs/web/http/HttpClient.js.map +1 -1
- package/lib/commonjs/web/http/RequestConfigBuilder.js +107 -58
- package/lib/commonjs/web/http/RequestConfigBuilder.js.map +1 -1
- package/lib/commonjs/web/playbackErrorKind.js +57 -0
- package/lib/commonjs/web/playbackErrorKind.js.map +1 -0
- package/lib/commonjs/web/player/MediaSessionManager.js +121 -0
- package/lib/commonjs/web/player/MediaSessionManager.js.map +1 -0
- package/lib/commonjs/web/player/NowPlayingManager.js +6 -5
- package/lib/commonjs/web/player/NowPlayingManager.js.map +1 -1
- package/lib/commonjs/web/player/OptionsManager.js +9 -17
- package/lib/commonjs/web/player/OptionsManager.js.map +1 -1
- package/lib/commonjs/web/player/RemoteCommandController.js +96 -0
- package/lib/commonjs/web/player/RemoteCommandController.js.map +1 -0
- package/lib/module/features/browser-config.js +221 -0
- package/lib/module/features/browser-config.js.map +1 -0
- package/lib/module/features/browser.js +53 -156
- package/lib/module/features/browser.js.map +1 -1
- package/lib/module/features/carConnection.js +37 -0
- package/lib/module/features/carConnection.js.map +1 -0
- package/lib/module/features/errors.js +34 -2
- package/lib/module/features/errors.js.map +1 -1
- package/lib/module/features/gate.js +144 -0
- package/lib/module/features/gate.js.map +1 -0
- package/lib/module/features/index.js +2 -0
- package/lib/module/features/index.js.map +1 -1
- package/lib/module/features/metadata.js.map +1 -1
- package/lib/module/features/nowPlaying.js +33 -0
- package/lib/module/features/nowPlaying.js.map +1 -1
- package/lib/module/features/output.js +32 -19
- package/lib/module/features/output.js.map +1 -1
- package/lib/module/features/playback/controls.js +8 -0
- package/lib/module/features/playback/controls.js.map +1 -1
- package/lib/module/features/playback/index.js +1 -0
- package/lib/module/features/playback/index.js.map +1 -1
- package/lib/module/features/playback/progress.js +28 -12
- package/lib/module/features/playback/progress.js.map +1 -1
- package/lib/module/features/playback/trackPlaybackTime.js +88 -0
- package/lib/module/features/playback/trackPlaybackTime.js.map +1 -0
- package/lib/module/features/playback/volume.js +1 -1
- package/lib/module/features/player/options.js +48 -13
- package/lib/module/features/player/options.js.map +1 -1
- package/lib/module/features/player/setup.js +249 -3
- package/lib/module/features/player/setup.js.map +1 -1
- package/lib/module/features/queue/queue.js +10 -3
- package/lib/module/features/queue/queue.js.map +1 -1
- package/lib/module/features/remoteControls.js +0 -11
- package/lib/module/features/remoteControls.js.map +1 -1
- package/lib/module/features/sleepTimer.js +9 -4
- package/lib/module/features/sleepTimer.js.map +1 -1
- package/lib/module/native.js +5 -0
- package/lib/module/native.js.map +1 -1
- package/lib/module/native.web.js +4 -1
- package/lib/module/native.web.js.map +1 -1
- package/lib/module/utils/LazyNativeEmitter.js +0 -3
- package/lib/module/utils/LazyNativeEmitter.js.map +1 -1
- package/lib/module/utils/NativeUpdatedValue.js +0 -3
- package/lib/module/utils/NativeUpdatedValue.js.map +1 -1
- package/lib/module/utils/artwork.js +26 -0
- package/lib/module/utils/artwork.js.map +1 -0
- package/lib/module/web/NativeAudioBrowser.js +302 -125
- package/lib/module/web/NativeAudioBrowser.js.map +1 -1
- package/lib/module/web/TrackPlayer/PlaybackStateMachine.js +67 -0
- package/lib/module/web/TrackPlayer/PlaybackStateMachine.js.map +1 -0
- package/lib/module/web/TrackPlayer/PlaybackTimer.js +29 -0
- package/lib/module/web/TrackPlayer/PlaybackTimer.js.map +1 -0
- package/lib/module/web/TrackPlayer/Player.js +90 -26
- package/lib/module/web/TrackPlayer/Player.js.map +1 -1
- package/lib/module/web/TrackPlayer/PlayingStateFactory.js +17 -0
- package/lib/module/web/TrackPlayer/PlayingStateFactory.js.map +1 -0
- package/lib/module/web/TrackPlayer/QueueManager.js +269 -0
- package/lib/module/web/TrackPlayer/QueueManager.js.map +1 -0
- package/lib/module/web/TrackPlayer/QueuePlayer.js +154 -0
- package/lib/module/web/TrackPlayer/QueuePlayer.js.map +1 -0
- package/lib/module/web/TrackPlayer/RepeatMode.js +1 -1
- package/lib/module/web/TrackPlayer/RepeatMode.js.map +1 -1
- package/lib/module/web/TrackPlayer/SleepTimer.js +34 -3
- package/lib/module/web/TrackPlayer/SleepTimer.js.map +1 -1
- package/lib/module/web/TrackPlayer/VolumeFader.js +70 -0
- package/lib/module/web/TrackPlayer/VolumeFader.js.map +1 -0
- package/lib/module/web/TrackPlayer/index.js +2 -1
- package/lib/module/web/TrackPlayer/index.js.map +1 -1
- package/lib/module/web/browser/BrowserManager.js +176 -50
- package/lib/module/web/browser/BrowserManager.js.map +1 -1
- package/lib/module/web/browser/NavigationErrorManager.js +3 -1
- package/lib/module/web/browser/NavigationErrorManager.js.map +1 -1
- package/lib/module/web/browser/SearchManager.js +11 -9
- package/lib/module/web/browser/SearchManager.js.map +1 -1
- package/lib/module/web/browser/assertBrowsePageShape.js +18 -0
- package/lib/module/web/browser/assertBrowsePageShape.js.map +1 -0
- package/lib/module/web/browser/classifyTrackNavigation.js +38 -0
- package/lib/module/web/browser/classifyTrackNavigation.js.map +1 -0
- package/lib/module/web/browser/parseSearchResponse.js +16 -0
- package/lib/module/web/browser/parseSearchResponse.js.map +1 -0
- package/lib/module/web/http/HttpClient.js +4 -23
- package/lib/module/web/http/HttpClient.js.map +1 -1
- package/lib/module/web/http/RequestConfigBuilder.js +107 -58
- package/lib/module/web/http/RequestConfigBuilder.js.map +1 -1
- package/lib/module/web/playbackErrorKind.js +52 -0
- package/lib/module/web/playbackErrorKind.js.map +1 -0
- package/lib/module/web/player/MediaSessionManager.js +116 -0
- package/lib/module/web/player/MediaSessionManager.js.map +1 -0
- package/lib/module/web/player/NowPlayingManager.js +7 -5
- package/lib/module/web/player/NowPlayingManager.js.map +1 -1
- package/lib/module/web/player/OptionsManager.js +9 -17
- package/lib/module/web/player/OptionsManager.js.map +1 -1
- package/lib/module/web/player/RemoteCommandController.js +92 -0
- package/lib/module/web/player/RemoteCommandController.js.map +1 -0
- package/lib/typescript/src/features/browser-config.d.ts +12 -0
- package/lib/typescript/src/features/browser-config.d.ts.map +1 -0
- package/lib/typescript/src/features/browser.d.ts +40 -1
- package/lib/typescript/src/features/browser.d.ts.map +1 -1
- package/lib/typescript/src/features/carConnection.d.ts +20 -0
- package/lib/typescript/src/features/carConnection.d.ts.map +1 -0
- package/lib/typescript/src/features/errors.d.ts +58 -3
- package/lib/typescript/src/features/errors.d.ts.map +1 -1
- package/lib/typescript/src/features/gate.d.ts +77 -0
- package/lib/typescript/src/features/gate.d.ts.map +1 -0
- package/lib/typescript/src/features/index.d.ts +2 -0
- package/lib/typescript/src/features/index.d.ts.map +1 -1
- package/lib/typescript/src/features/metadata.d.ts +6 -4
- package/lib/typescript/src/features/metadata.d.ts.map +1 -1
- package/lib/typescript/src/features/nowPlaying.d.ts +27 -0
- package/lib/typescript/src/features/nowPlaying.d.ts.map +1 -1
- package/lib/typescript/src/features/output.d.ts +28 -18
- package/lib/typescript/src/features/output.d.ts.map +1 -1
- package/lib/typescript/src/features/playback/controls.d.ts +5 -0
- package/lib/typescript/src/features/playback/controls.d.ts.map +1 -1
- package/lib/typescript/src/features/playback/index.d.ts +1 -0
- package/lib/typescript/src/features/playback/index.d.ts.map +1 -1
- package/lib/typescript/src/features/playback/progress.d.ts +3 -0
- package/lib/typescript/src/features/playback/progress.d.ts.map +1 -1
- package/lib/typescript/src/features/playback/trackPlaybackTime.d.ts +34 -0
- package/lib/typescript/src/features/playback/trackPlaybackTime.d.ts.map +1 -0
- package/lib/typescript/src/features/playback/volume.d.ts +1 -1
- package/lib/typescript/src/features/player/options.d.ts +92 -93
- package/lib/typescript/src/features/player/options.d.ts.map +1 -1
- package/lib/typescript/src/features/player/setup.d.ts +206 -167
- package/lib/typescript/src/features/player/setup.d.ts.map +1 -1
- package/lib/typescript/src/features/queue/queue.d.ts +9 -2
- package/lib/typescript/src/features/queue/queue.d.ts.map +1 -1
- package/lib/typescript/src/features/remoteControls.d.ts +0 -13
- package/lib/typescript/src/features/remoteControls.d.ts.map +1 -1
- package/lib/typescript/src/features/sleepTimer.d.ts +18 -3
- package/lib/typescript/src/features/sleepTimer.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/native.d.ts +1 -2
- package/lib/typescript/src/native.d.ts.map +1 -1
- package/lib/typescript/src/specs/audio-browser.nitro.d.ts +17 -225
- package/lib/typescript/src/specs/audio-browser.nitro.d.ts.map +1 -1
- package/lib/typescript/src/types/browser-native.d.ts +9 -3
- package/lib/typescript/src/types/browser-native.d.ts.map +1 -1
- package/lib/typescript/src/types/browser-nodes.d.ts +145 -13
- package/lib/typescript/src/types/browser-nodes.d.ts.map +1 -1
- package/lib/typescript/src/types/browser.d.ts +349 -85
- package/lib/typescript/src/types/browser.d.ts.map +1 -1
- package/lib/typescript/src/utils/LazyNativeEmitter.d.ts +0 -2
- package/lib/typescript/src/utils/LazyNativeEmitter.d.ts.map +1 -1
- package/lib/typescript/src/utils/NativeUpdatedValue.d.ts +0 -2
- package/lib/typescript/src/utils/NativeUpdatedValue.d.ts.map +1 -1
- package/lib/typescript/src/utils/artwork.d.ts +19 -0
- package/lib/typescript/src/utils/artwork.d.ts.map +1 -0
- package/lib/typescript/src/utils/resolveAssetSource.d.ts.map +1 -1
- package/nitrogen/generated/android/AudioBrowser+autolinking.cmake +3 -1
- package/nitrogen/generated/android/AudioBrowserOnLoad.cpp +24 -10
- package/nitrogen/generated/android/c++/JAndroidAudioContentType.hpp +6 -6
- package/nitrogen/generated/android/c++/JAndroidOptions.hpp +1 -11
- package/nitrogen/generated/android/c++/JArtworkRequestConfig.hpp +33 -1
- package/nitrogen/generated/android/c++/JArtworkVariants.hpp +61 -0
- package/nitrogen/generated/android/c++/JBrowseResult.hpp +5 -0
- package/nitrogen/generated/android/c++/JCarPlayNowPlayingButton.hpp +3 -3
- package/nitrogen/generated/android/c++/JFavoriteChangedEvent.hpp +6 -0
- package/nitrogen/generated/android/c++/JFavoriteConfig.hpp +58 -0
- package/nitrogen/generated/android/c++/JFavoritesMatchMode.hpp +58 -0
- package/nitrogen/generated/android/c++/JFormatNowPlayingParams.hpp +100 -0
- package/nitrogen/generated/android/c++/JFormattedNavigationError.hpp +3 -2
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_RequestConfig___MediaTransformParams.hpp +112 -0
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_RequestConfig___RequestConfig_std__optional_std__unordered_map_std__string__std__string__.hpp +121 -0
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_RequestConfig___Track.hpp +123 -0
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_NowPlayingUpdate____FormatNowPlayingParams.hpp +133 -0
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__optional_std__string____Track.hpp +121 -0
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_GateDecision_____NativeGateRequest.hpp +139 -0
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_RequestConfig_____Track.hpp +6 -0
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_TransformableRequestConfig____.hpp +134 -0
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__vector_Track______SearchParams.hpp +8 -0
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_void_____TrackLoadEvent.hpp +6 -0
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError__std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError_______BrowserSourceCallbackParam.hpp +131 -0
- package/nitrogen/generated/android/c++/JFunc_void_FavoriteChangedEvent.hpp +6 -0
- package/nitrogen/generated/android/c++/JFunc_void_GateEvent.hpp +79 -0
- package/nitrogen/generated/android/c++/JFunc_void_NowPlayingMetadata.hpp +0 -10
- package/nitrogen/generated/android/c++/JFunc_void_Options.hpp +9 -4
- package/nitrogen/generated/android/c++/JFunc_void_Output.hpp +80 -0
- package/nitrogen/generated/android/c++/JFunc_void_Playback.hpp +2 -0
- package/nitrogen/generated/android/c++/JFunc_void_PlaybackActiveTrackChangedEvent.hpp +6 -0
- package/nitrogen/generated/android/c++/JFunc_void_PlaybackErrorEvent.hpp +2 -0
- package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +10 -10
- package/nitrogen/generated/android/c++/JFunc_void_std__optional_ResolvedTrack_.hpp +6 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_Track_.hpp +6 -0
- package/nitrogen/generated/android/c++/JGate.hpp +62 -0
- package/nitrogen/generated/android/c++/JGateDecision.hpp +64 -0
- package/nitrogen/generated/android/c++/{JThumbsRating.hpp → JGateEvent.hpp} +16 -15
- package/nitrogen/generated/android/c++/JGateReason.hpp +58 -0
- package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.cpp +236 -212
- package/nitrogen/generated/android/c++/JHybridAudioBrowserSpec.hpp +25 -22
- package/nitrogen/generated/android/c++/JIOSOptions.hpp +95 -0
- package/nitrogen/generated/android/c++/JImageRowItem.hpp +33 -3
- package/nitrogen/generated/android/c++/JMediaReference.hpp +58 -0
- package/nitrogen/generated/android/c++/JMediaRequestConfig.hpp +33 -1
- package/nitrogen/generated/android/c++/{JPartialAndroidSetupPlayerOptions.hpp → JNativeAndroidSetupOptions.hpp} +10 -10
- package/nitrogen/generated/android/c++/JNativeBrowserConfiguration.hpp +61 -28
- package/nitrogen/generated/android/c++/JNativeGateRequest.hpp +74 -0
- package/nitrogen/generated/android/c++/{JPartialIOSSetupPlayerOptions.hpp → JNativeIOSSetupOptions.hpp} +10 -10
- package/nitrogen/generated/android/c++/JNativeRouteEntry.hpp +20 -9
- package/nitrogen/generated/android/c++/JNativeSetupPlayerOptions.hpp +182 -0
- package/nitrogen/generated/android/c++/JNativeUpdateOptions.hpp +16 -19
- package/nitrogen/generated/android/c++/JNavigationErrorType.hpp +6 -0
- package/nitrogen/generated/android/c++/JNitroAndroidUpdateOptions.hpp +1 -11
- package/nitrogen/generated/android/c++/JNitroIOSUpdateOptions.hpp +96 -0
- package/nitrogen/generated/android/c++/JNotificationButton.hpp +3 -3
- package/nitrogen/generated/android/c++/JNowPlayingMetadata.hpp +3 -17
- package/nitrogen/generated/android/c++/JNowPlayingUpdate.hpp +7 -3
- package/nitrogen/generated/android/c++/JOptions.hpp +14 -9
- package/nitrogen/generated/android/c++/{JIosOutput.hpp → JOutput.hpp} +15 -15
- package/nitrogen/generated/android/c++/JOutputType.hpp +82 -0
- package/nitrogen/generated/android/c++/JPlayback.hpp +2 -0
- package/nitrogen/generated/android/c++/JPlaybackActiveTrackChangedEvent.hpp +6 -0
- package/nitrogen/generated/android/c++/JPlaybackError.hpp +18 -3
- package/nitrogen/generated/android/c++/JPlaybackErrorEvent.hpp +2 -0
- package/nitrogen/generated/android/c++/JPlaybackErrorKind.hpp +76 -0
- package/nitrogen/generated/android/c++/JPlaybackState.hpp +3 -3
- package/nitrogen/generated/android/c++/JPlayerCapabilities.hpp +11 -5
- package/nitrogen/generated/android/c++/JResolvedTrack.hpp +23 -5
- package/nitrogen/generated/android/c++/JRetryConfig.hpp +11 -7
- package/nitrogen/generated/android/c++/JSearchMode.hpp +27 -9
- package/nitrogen/generated/android/c++/JSearchParams.hpp +9 -3
- package/nitrogen/generated/android/c++/JStallReason.hpp +58 -0
- package/nitrogen/generated/android/c++/JTrack.hpp +23 -5
- package/nitrogen/generated/android/c++/JTrackLoadEvent.hpp +6 -0
- package/nitrogen/generated/android/c++/JTrackRequest.hpp +93 -0
- package/nitrogen/generated/android/c++/JTransformableRequestConfig.hpp +14 -1
- package/nitrogen/generated/android/c++/JVariant_Boolean_FavoriteConfig.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_Boolean_FavoriteConfig.hpp +71 -0
- package/nitrogen/generated/android/c++/JVariant_ResolvedTrack_BrowseError_Promise_BrowseResult_.cpp +41 -0
- package/nitrogen/generated/android/c++/JVariant_ResolvedTrack_BrowseError_Promise_BrowseResult_.hpp +121 -0
- package/nitrogen/generated/android/c++/JVariant_String_ArtworkVariants.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_String_ArtworkVariants.hpp +70 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidAudioContentType.kt +4 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidOptions.kt +2 -8
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ArtworkRequestConfig.kt +10 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ArtworkVariants.kt +41 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/CarPlayNowPlayingButton.kt +3 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{ThumbsRating.kt → FavoriteConfig.kt} +6 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{RatingType.kt → FavoritesMatchMode.kt} +5 -10
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/FormatNowPlayingParams.kt +50 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/FormattedNavigationError.kt +2 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_RequestConfig___MediaTransformParams.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_RequestConfig___RequestConfig_std__optional_std__unordered_map_std__string__std__string__.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_RequestConfig___Track.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__optional_NowPlayingUpdate____FormatNowPlayingParams.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__optional_std__string____Track.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_GateDecision_____NativeGateRequest.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_TransformableRequestConfig____.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError______BrowserSourceCallbackParam.kt → Func_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError__std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError_______BrowserSourceCallbackParam.kt} +12 -12
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{Func_void_RemoteSetRatingEvent.kt → Func_void_GateEvent.kt} +9 -9
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{Func_void_IosOutput.kt → Func_void_Output.kt} +9 -9
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Func_void_bool.kt +9 -9
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{HeartRating.kt → Gate.kt} +9 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{PercentageRating.kt → GateDecision.kt} +9 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{StarRating.kt → GateEvent.kt} +6 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/GateReason.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/HybridAudioBrowserSpec.kt +103 -109
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IOSOptions.kt +44 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ImageRowItem.kt +24 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/MediaReference.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/MediaRequestConfig.kt +10 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{PartialAndroidSetupPlayerOptions.kt → NativeAndroidSetupOptions.kt} +5 -5
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeBrowserConfiguration.kt +18 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{RemoteSetRatingEvent.kt → NativeGateRequest.kt} +12 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{PartialIOSSetupPlayerOptions.kt → NativeIOSSetupOptions.kt} +5 -5
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeRouteEntry.kt +4 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeSetupPlayerOptions.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NativeUpdateOptions.kt +6 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NavigationErrorType.kt +3 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NitroAndroidUpdateOptions.kt +2 -8
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NitroIOSUpdateOptions.kt +44 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NotificationButton.kt +5 -5
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NowPlayingMetadata.kt +3 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/NowPlayingUpdate.kt +6 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Options.kt +3 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/{IosOutput.kt → Output.kt} +6 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/OutputType.kt +31 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackError.kt +12 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackErrorKind.kt +29 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlaybackState.kt +6 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PlayerCapabilities.kt +2 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/ResolvedTrack.kt +12 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/RetryConfig.kt +7 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SearchMode.kt +12 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/SearchParams.kt +6 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/StallReason.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Track.kt +12 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TrackRequest.kt +44 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/TransformableRequestConfig.kt +7 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_Boolean_FavoriteConfig.kt +53 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_ResolvedTrack_BrowseError_Promise_BrowseResult_.kt +65 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_String_ArtworkVariants.kt +53 -0
- package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.cpp +139 -28
- package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Bridge.hpp +1098 -447
- package/nitrogen/generated/ios/AudioBrowser-Swift-Cxx-Umbrella.hpp +60 -39
- package/nitrogen/generated/ios/c++/HybridAudioBrowserSpecSwift.hpp +170 -112
- package/nitrogen/generated/ios/swift/AndroidAudioContentType.swift +8 -8
- package/nitrogen/generated/ios/swift/AndroidOptions.swift +2 -12
- package/nitrogen/generated/ios/swift/ArtworkRequestConfig.swift +95 -1
- package/nitrogen/generated/ios/swift/ArtworkVariants.swift +34 -0
- package/nitrogen/generated/ios/swift/CarPlayNowPlayingButton.swift +4 -4
- package/nitrogen/generated/ios/swift/FavoriteConfig.swift +29 -0
- package/nitrogen/generated/ios/swift/FavoritesMatchMode.swift +40 -0
- package/nitrogen/generated/ios/swift/FormatNowPlayingParams.swift +67 -0
- package/nitrogen/generated/ios/swift/FormattedNavigationError.swift +17 -4
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_RequestConfig___MediaTransformParams.swift +54 -0
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_RequestConfig___RequestConfig_std__optional_std__unordered_map_std__string__std__string__.swift +69 -0
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_RequestConfig___Track.swift +54 -0
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__optional_NowPlayingUpdate____FormatNowPlayingParams.swift +60 -0
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__optional_std__string____Track.swift +60 -0
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_GateDecision_____NativeGateRequest.swift +61 -0
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_TransformableRequestConfig____.swift +61 -0
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError__std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError_______BrowserSourceCallbackParam.swift +77 -0
- package/nitrogen/generated/ios/swift/Func_void_GateDecision.swift +46 -0
- package/nitrogen/generated/ios/swift/{Func_void_RemoteSetRatingEvent.swift → Func_void_GateEvent.swift} +10 -10
- package/nitrogen/generated/ios/swift/{Func_void_IosOutput.swift → Func_void_Output.swift} +10 -10
- package/nitrogen/generated/ios/swift/Func_void_TransformableRequestConfig.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_bool.swift +5 -5
- package/nitrogen/generated/ios/swift/Func_void_std__optional_NowPlayingUpdate_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__optional_std__string_.swift +53 -0
- package/nitrogen/generated/ios/swift/{Func_void_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError___.swift → Func_void_std__shared_ptr_Promise_GateDecision__.swift} +17 -17
- package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_TransformableRequestConfig__.swift +66 -0
- package/nitrogen/generated/ios/swift/Func_void_std__variant_ResolvedTrack__BrowseError__std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError____.swift +81 -0
- package/nitrogen/generated/ios/swift/Gate.swift +47 -0
- package/nitrogen/generated/ios/swift/GateDecision.swift +40 -0
- package/nitrogen/generated/ios/swift/GateEvent.swift +29 -0
- package/nitrogen/generated/ios/swift/GateReason.swift +40 -0
- package/nitrogen/generated/ios/swift/HybridAudioBrowserSpec.swift +20 -14
- package/nitrogen/generated/ios/swift/HybridAudioBrowserSpec_cxx.swift +230 -197
- package/nitrogen/generated/ios/swift/IOSOptions.swift +51 -0
- package/nitrogen/generated/ios/swift/ImageRowItem.swift +121 -2
- package/nitrogen/generated/ios/swift/MediaReference.swift +40 -0
- package/nitrogen/generated/ios/swift/MediaRequestConfig.swift +107 -1
- package/nitrogen/generated/ios/swift/{PartialAndroidSetupPlayerOptions.swift → NativeAndroidSetupOptions.swift} +5 -5
- package/nitrogen/generated/ios/swift/NativeBrowserConfiguration.swift +161 -22
- package/nitrogen/generated/ios/swift/NativeGateRequest.swift +58 -0
- package/nitrogen/generated/ios/swift/{PartialIOSSetupPlayerOptions.swift → NativeIOSSetupOptions.swift} +5 -5
- package/nitrogen/generated/ios/swift/NativeRouteEntry.swift +19 -19
- package/nitrogen/generated/ios/swift/NativeSetupPlayerOptions.swift +206 -0
- package/nitrogen/generated/ios/swift/NativeUpdateOptions.swift +12 -25
- package/nitrogen/generated/ios/swift/NavigationErrorType.swift +8 -0
- package/nitrogen/generated/ios/swift/NitroAndroidUpdateOptions.swift +1 -30
- package/nitrogen/generated/ios/swift/NitroIOSUpdateOptions.swift +90 -0
- package/nitrogen/generated/ios/swift/NotificationButton.swift +4 -4
- package/nitrogen/generated/ios/swift/NowPlayingMetadata.swift +1 -48
- package/nitrogen/generated/ios/swift/NowPlayingUpdate.swift +19 -1
- package/nitrogen/generated/ios/swift/Options.swift +10 -4
- package/nitrogen/generated/ios/swift/{IosOutput.swift → Output.swift} +7 -7
- package/nitrogen/generated/ios/swift/OutputType.swift +72 -0
- package/nitrogen/generated/ios/swift/PlaybackError.swift +43 -2
- package/nitrogen/generated/ios/swift/PlaybackErrorKind.swift +64 -0
- package/nitrogen/generated/ios/swift/PlaybackState.swift +4 -4
- package/nitrogen/generated/ios/swift/PlayerCapabilities.swift +27 -8
- package/nitrogen/generated/ios/swift/ResolvedTrack.swift +74 -8
- package/nitrogen/generated/ios/swift/RetryConfig.swift +35 -4
- package/nitrogen/generated/ios/swift/SearchMode.swift +36 -12
- package/nitrogen/generated/ios/swift/SearchParams.swift +7 -2
- package/nitrogen/generated/ios/swift/StallReason.swift +40 -0
- package/nitrogen/generated/ios/swift/Track.swift +74 -8
- package/nitrogen/generated/ios/swift/TrackRequest.swift +106 -0
- package/nitrogen/generated/ios/swift/TransformableRequestConfig.swift +60 -1
- package/nitrogen/generated/ios/swift/Variant_Bool_FavoriteConfig.swift +18 -0
- package/nitrogen/generated/ios/swift/Variant_ResolvedTrack_BrowseError_Promise_BrowseResult_.swift +19 -0
- package/nitrogen/generated/ios/swift/Variant_String_ArtworkVariants.swift +18 -0
- package/nitrogen/generated/shared/c++/AndroidAudioContentType.hpp +10 -10
- package/nitrogen/generated/shared/c++/AndroidOptions.hpp +1 -12
- package/nitrogen/generated/shared/c++/ArtworkRequestConfig.hpp +10 -2
- package/nitrogen/generated/shared/c++/ArtworkVariants.hpp +87 -0
- package/nitrogen/generated/shared/c++/CarPlayNowPlayingButton.hpp +6 -6
- package/nitrogen/generated/shared/c++/EqualizerSettings.hpp +0 -2
- package/nitrogen/generated/shared/c++/{StarRating.hpp → FavoriteConfig.hpp} +18 -17
- package/nitrogen/generated/shared/c++/FavoritesMatchMode.hpp +76 -0
- package/nitrogen/generated/shared/c++/FormatNowPlayingParams.hpp +110 -0
- package/nitrogen/generated/shared/c++/FormattedNavigationError.hpp +6 -5
- package/nitrogen/generated/shared/c++/{HeartRating.hpp → Gate.hpp} +21 -16
- package/nitrogen/generated/shared/c++/{ThumbsRating.hpp → GateDecision.hpp} +23 -17
- package/nitrogen/generated/shared/c++/{PercentageRating.hpp → GateEvent.hpp} +18 -17
- package/nitrogen/generated/shared/c++/GateReason.hpp +76 -0
- package/nitrogen/generated/shared/c++/HybridAudioBrowserSpec.cpp +21 -18
- package/nitrogen/generated/shared/c++/HybridAudioBrowserSpec.hpp +44 -35
- package/nitrogen/generated/shared/c++/IOSOptions.hpp +91 -0
- package/nitrogen/generated/shared/c++/ImageRowItem.hpp +33 -2
- package/nitrogen/generated/shared/c++/MediaReference.hpp +76 -0
- package/nitrogen/generated/shared/c++/MediaRequestConfig.hpp +10 -2
- package/nitrogen/generated/shared/c++/{PartialAndroidSetupPlayerOptions.hpp → NativeAndroidSetupOptions.hpp} +11 -11
- package/nitrogen/generated/shared/c++/NativeBrowserConfiguration.hpp +31 -15
- package/nitrogen/generated/shared/c++/NativeGateRequest.hpp +97 -0
- package/nitrogen/generated/shared/c++/{PartialIOSSetupPlayerOptions.hpp → NativeIOSSetupOptions.hpp} +11 -11
- package/nitrogen/generated/shared/c++/NativeRouteEntry.hpp +5 -5
- package/nitrogen/generated/shared/c++/NativeSetupPlayerOptions.hpp +138 -0
- package/nitrogen/generated/shared/c++/NativeUpdateOptions.hpp +9 -7
- package/nitrogen/generated/shared/c++/NavigationErrorType.hpp +8 -0
- package/nitrogen/generated/shared/c++/NitroAndroidUpdateOptions.hpp +1 -12
- package/nitrogen/generated/shared/c++/NitroIOSUpdateOptions.hpp +92 -0
- package/nitrogen/generated/shared/c++/NotificationButton.hpp +8 -8
- package/nitrogen/generated/shared/c++/NowPlayingMetadata.hpp +3 -19
- package/nitrogen/generated/shared/c++/NowPlayingUpdate.hpp +6 -2
- package/nitrogen/generated/shared/c++/Options.hpp +8 -8
- package/nitrogen/generated/shared/c++/{IosOutput.hpp → Output.hpp} +18 -18
- package/nitrogen/generated/shared/c++/OutputType.hpp +108 -0
- package/nitrogen/generated/shared/c++/PlaybackError.hpp +18 -3
- package/nitrogen/generated/shared/c++/PlaybackErrorKind.hpp +100 -0
- package/nitrogen/generated/shared/c++/PlaybackState.hpp +9 -9
- package/nitrogen/generated/shared/c++/PlayerCapabilities.hpp +9 -6
- package/nitrogen/generated/shared/c++/ResolvedTrack.hpp +24 -5
- package/nitrogen/generated/shared/c++/RetryConfig.hpp +10 -6
- package/nitrogen/generated/shared/c++/SearchMode.hpp +39 -15
- package/nitrogen/generated/shared/c++/SearchParams.hpp +9 -2
- package/nitrogen/generated/shared/c++/StallReason.hpp +76 -0
- package/nitrogen/generated/shared/c++/Track.hpp +24 -5
- package/nitrogen/generated/shared/c++/TrackRequest.hpp +93 -0
- package/nitrogen/generated/shared/c++/TransformableRequestConfig.hpp +6 -2
- package/package.json +11 -6
- package/src/codegen-no-config-variant.test.ts +70 -0
- package/src/features/browser-config.test.ts +110 -0
- package/src/features/browser-config.ts +293 -0
- package/src/features/browser.test.ts +19 -0
- package/src/features/browser.ts +58 -201
- package/src/features/carConnection.ts +36 -0
- package/src/features/errors.ts +68 -2
- package/src/features/gate.test.ts +72 -0
- package/src/features/gate.ts +155 -0
- package/src/features/index.ts +2 -0
- package/src/features/metadata.ts +6 -12
- package/src/features/nowPlaying.ts +36 -0
- package/src/features/output.ts +35 -22
- package/src/features/playback/controls.ts +8 -0
- package/src/features/playback/index.ts +1 -0
- package/src/features/playback/progress.ts +31 -12
- package/src/features/playback/trackPlaybackTime.test.ts +66 -0
- package/src/features/playback/trackPlaybackTime.ts +106 -0
- package/src/features/playback/volume.ts +1 -1
- package/src/features/player/options.test.ts +38 -0
- package/src/features/player/options.ts +140 -75
- package/src/features/player/setup.test.ts +117 -0
- package/src/features/player/setup.ts +390 -175
- package/src/features/queue/queue.test.ts +36 -0
- package/src/features/queue/queue.ts +15 -4
- package/src/features/remoteControls.ts +0 -23
- package/src/features/sleepTimer.ts +23 -4
- package/src/native.ts +5 -0
- package/src/native.web.ts +4 -1
- package/src/specs/audio-browser.nitro.ts +131 -41
- package/src/types/browser-native.ts +19 -6
- package/src/types/browser-nodes.ts +160 -13
- package/src/types/browser.ts +377 -89
- package/src/utils/LazyNativeEmitter.ts +0 -2
- package/src/utils/NativeUpdatedValue.ts +0 -2
- package/src/utils/artwork.ts +30 -0
- package/src/web/NativeAudioBrowser.playWhenReady.test.ts +301 -0
- package/src/web/NativeAudioBrowser.ts +365 -158
- package/src/web/TrackPlayer/PlaybackStateMachine.test.ts +139 -0
- package/src/web/TrackPlayer/PlaybackStateMachine.ts +82 -0
- package/src/web/TrackPlayer/PlaybackTimer.test.ts +67 -0
- package/src/web/TrackPlayer/PlaybackTimer.ts +33 -0
- package/src/web/TrackPlayer/Player.dispatch.test.ts +229 -0
- package/src/web/TrackPlayer/Player.load.test.ts +86 -0
- package/src/web/TrackPlayer/Player.ts +113 -39
- package/src/web/TrackPlayer/PlayingStateFactory.test.ts +51 -0
- package/src/web/TrackPlayer/PlayingStateFactory.ts +24 -0
- package/src/web/TrackPlayer/QueueManager.test.ts +289 -0
- package/src/web/TrackPlayer/QueueManager.ts +302 -0
- package/src/web/TrackPlayer/QueuePlayer.ts +188 -0
- package/src/web/TrackPlayer/RepeatMode.ts +1 -1
- package/src/web/TrackPlayer/SleepTimer.ts +38 -3
- package/src/web/TrackPlayer/VolumeFader.ts +74 -0
- package/src/web/TrackPlayer/index.ts +2 -1
- package/src/web/browser/BrowserManager.ts +231 -62
- package/src/web/browser/NavigationErrorManager.ts +3 -1
- package/src/web/browser/SearchManager.ts +11 -15
- package/src/web/browser/__tests__/layer-resolver.test.ts +69 -0
- package/src/web/browser/assertBrowsePageShape.test.ts +27 -0
- package/src/web/browser/assertBrowsePageShape.ts +27 -0
- package/src/web/browser/classifyTrackNavigation.test.ts +41 -0
- package/src/web/browser/classifyTrackNavigation.ts +35 -0
- package/src/web/browser/parseSearchResponse.test.ts +25 -0
- package/src/web/browser/parseSearchResponse.ts +15 -0
- package/src/web/http/HttpClient.ts +5 -35
- package/src/web/http/RequestConfigBuilder.test.ts +59 -0
- package/src/web/http/RequestConfigBuilder.ts +120 -63
- package/src/web/playbackErrorKind.test.ts +55 -0
- package/src/web/playbackErrorKind.ts +56 -0
- package/src/web/player/MediaSessionManager.test.ts +220 -0
- package/src/web/player/MediaSessionManager.ts +151 -0
- package/src/web/player/NowPlayingManager.test.ts +46 -0
- package/src/web/player/NowPlayingManager.ts +6 -5
- package/src/web/player/OptionsManager.ts +12 -18
- package/src/web/player/RemoteCommandController.test.ts +171 -0
- package/src/web/player/RemoteCommandController.ts +166 -0
- package/android/src/main/java/com/audiobrowser/player/PlaybackProgressUpdateManager.kt +0 -59
- package/android/src/main/java/com/audiobrowser/util/RatingFactory.kt +0 -72
- package/android/src/main/java/com/audiobrowser/util/ResolvedTrackFactory.kt +0 -36
- package/android/src/test/java/com/audiobrowser/player/PlaybackProgressUpdateManagerTest.kt +0 -146
- package/ios/CarPlay/Track+CarPlay.swift +0 -63
- package/ios/NowPlayingInfo/NowPlayingInfoCenter.swift +0 -9
- package/ios/Player/PlaybackProgressUpdateManager.swift +0 -68
- package/ios/Tests/PlaybackProgressUpdateManagerTests.swift +0 -166
- package/lib/commonjs/features/rating.js +0 -2
- package/lib/commonjs/features/rating.js.map +0 -1
- package/lib/commonjs/types/player.js +0 -2
- package/lib/commonjs/types/player.js.map +0 -1
- package/lib/commonjs/web/SimpleRouter.test.js +0 -174
- package/lib/commonjs/web/SimpleRouter.test.js.map +0 -1
- package/lib/commonjs/web/TrackPlayer/PlaylistPlayer.js +0 -293
- package/lib/commonjs/web/TrackPlayer/PlaylistPlayer.js.map +0 -1
- package/lib/module/features/rating.js +0 -2
- package/lib/module/features/rating.js.map +0 -1
- package/lib/module/types/player.js +0 -2
- package/lib/module/types/player.js.map +0 -1
- package/lib/module/web/SimpleRouter.test.js +0 -174
- package/lib/module/web/SimpleRouter.test.js.map +0 -1
- package/lib/module/web/TrackPlayer/PlaylistPlayer.js +0 -288
- package/lib/module/web/TrackPlayer/PlaylistPlayer.js.map +0 -1
- package/lib/typescript/src/features/rating.d.ts +0 -14
- package/lib/typescript/src/features/rating.d.ts.map +0 -1
- package/lib/typescript/src/native.web.d.ts +0 -3
- package/lib/typescript/src/native.web.d.ts.map +0 -1
- package/lib/typescript/src/types/player.d.ts +0 -64
- package/lib/typescript/src/types/player.d.ts.map +0 -1
- package/lib/typescript/src/web/NativeAudioBrowser.d.ts +0 -188
- package/lib/typescript/src/web/NativeAudioBrowser.d.ts.map +0 -1
- package/lib/typescript/src/web/SimpleRouter.d.ts +0 -40
- package/lib/typescript/src/web/SimpleRouter.d.ts.map +0 -1
- package/lib/typescript/src/web/SimpleRouter.test.d.ts +0 -2
- package/lib/typescript/src/web/SimpleRouter.test.d.ts.map +0 -1
- package/lib/typescript/src/web/TrackPlayer/Event.d.ts +0 -11
- package/lib/typescript/src/web/TrackPlayer/Event.d.ts.map +0 -1
- package/lib/typescript/src/web/TrackPlayer/Player.d.ts +0 -59
- package/lib/typescript/src/web/TrackPlayer/Player.d.ts.map +0 -1
- package/lib/typescript/src/web/TrackPlayer/PlaylistPlayer.d.ts +0 -39
- package/lib/typescript/src/web/TrackPlayer/PlaylistPlayer.d.ts.map +0 -1
- package/lib/typescript/src/web/TrackPlayer/RepeatMode.d.ts +0 -6
- package/lib/typescript/src/web/TrackPlayer/RepeatMode.d.ts.map +0 -1
- package/lib/typescript/src/web/TrackPlayer/SetupNotCalledError.d.ts +0 -4
- package/lib/typescript/src/web/TrackPlayer/SetupNotCalledError.d.ts.map +0 -1
- package/lib/typescript/src/web/TrackPlayer/SleepTimer.d.ts +0 -34
- package/lib/typescript/src/web/TrackPlayer/SleepTimer.d.ts.map +0 -1
- package/lib/typescript/src/web/TrackPlayer/State.d.ts +0 -13
- package/lib/typescript/src/web/TrackPlayer/State.d.ts.map +0 -1
- package/lib/typescript/src/web/TrackPlayer/index.d.ts +0 -5
- package/lib/typescript/src/web/TrackPlayer/index.d.ts.map +0 -1
- package/lib/typescript/src/web/browser/BrowserManager.d.ts +0 -154
- package/lib/typescript/src/web/browser/BrowserManager.d.ts.map +0 -1
- package/lib/typescript/src/web/browser/FavoriteManager.d.ts +0 -42
- package/lib/typescript/src/web/browser/FavoriteManager.d.ts.map +0 -1
- package/lib/typescript/src/web/browser/NavigationErrorManager.d.ts +0 -40
- package/lib/typescript/src/web/browser/NavigationErrorManager.d.ts.map +0 -1
- package/lib/typescript/src/web/browser/SearchManager.d.ts +0 -22
- package/lib/typescript/src/web/browser/SearchManager.d.ts.map +0 -1
- package/lib/typescript/src/web/http/HttpClient.d.ts +0 -25
- package/lib/typescript/src/web/http/HttpClient.d.ts.map +0 -1
- package/lib/typescript/src/web/http/RequestConfigBuilder.d.ts +0 -98
- package/lib/typescript/src/web/http/RequestConfigBuilder.d.ts.map +0 -1
- package/lib/typescript/src/web/player/NowPlayingManager.d.ts +0 -34
- package/lib/typescript/src/web/player/NowPlayingManager.d.ts.map +0 -1
- package/lib/typescript/src/web/player/OptionsManager.d.ts +0 -32
- package/lib/typescript/src/web/player/OptionsManager.d.ts.map +0 -1
- package/lib/typescript/src/web/util/BrowserPathHelper.d.ts +0 -69
- package/lib/typescript/src/web/util/BrowserPathHelper.d.ts.map +0 -1
- package/lib/typescript/src/web/util/shuffle.d.ts +0 -8
- package/lib/typescript/src/web/util/shuffle.d.ts.map +0 -1
- package/nitrogen/generated/android/c++/JAndroidUpdateOptions.hpp +0 -86
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError______BrowserSourceCallbackParam.hpp +0 -147
- package/nitrogen/generated/android/c++/JFunc_void_IosOutput.hpp +0 -80
- package/nitrogen/generated/android/c++/JFunc_void_RemoteSetRatingEvent.hpp +0 -87
- package/nitrogen/generated/android/c++/JHeartRating.hpp +0 -57
- package/nitrogen/generated/android/c++/JIosOutputType.hpp +0 -85
- package/nitrogen/generated/android/c++/JPartialSetupPlayerOptions.hpp +0 -96
- package/nitrogen/generated/android/c++/JPercentageRating.hpp +0 -57
- package/nitrogen/generated/android/c++/JRatingType.hpp +0 -73
- package/nitrogen/generated/android/c++/JRemoteSetRatingEvent.hpp +0 -66
- package/nitrogen/generated/android/c++/JStarRating.hpp +0 -57
- package/nitrogen/generated/android/c++/JUpdateOptions.hpp +0 -105
- package/nitrogen/generated/android/c++/JVariant_HeartRating_ThumbsRating_StarRating_PercentageRating.cpp +0 -34
- package/nitrogen/generated/android/c++/JVariant_HeartRating_ThumbsRating_StarRating_PercentageRating.hpp +0 -105
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/AndroidUpdateOptions.kt +0 -50
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/IosOutputType.kt +0 -32
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/PartialSetupPlayerOptions.kt +0 -47
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/UpdateOptions.kt +0 -53
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/audiobrowser/Variant_HeartRating_ThumbsRating_StarRating_PercentageRating.kt +0 -77
- package/nitrogen/generated/ios/swift/AndroidUpdateOptions.swift +0 -119
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__variant_ResolvedTrack__BrowseError______BrowserSourceCallbackParam.swift +0 -68
- package/nitrogen/generated/ios/swift/HeartRating.swift +0 -29
- package/nitrogen/generated/ios/swift/IosOutputType.swift +0 -76
- package/nitrogen/generated/ios/swift/PartialSetupPlayerOptions.swift +0 -101
- package/nitrogen/generated/ios/swift/PercentageRating.swift +0 -29
- package/nitrogen/generated/ios/swift/RatingType.swift +0 -60
- package/nitrogen/generated/ios/swift/RemoteSetRatingEvent.swift +0 -58
- package/nitrogen/generated/ios/swift/StarRating.swift +0 -29
- package/nitrogen/generated/ios/swift/ThumbsRating.swift +0 -29
- package/nitrogen/generated/ios/swift/UpdateOptions.swift +0 -143
- package/nitrogen/generated/ios/swift/Variant_HeartRating_ThumbsRating_StarRating_PercentageRating.swift +0 -20
- package/nitrogen/generated/shared/c++/AndroidUpdateOptions.hpp +0 -109
- package/nitrogen/generated/shared/c++/IosOutputType.hpp +0 -112
- package/nitrogen/generated/shared/c++/PartialSetupPlayerOptions.hpp +0 -104
- package/nitrogen/generated/shared/c++/RatingType.hpp +0 -96
- package/nitrogen/generated/shared/c++/RemoteSetRatingEvent.hpp +0 -94
- package/nitrogen/generated/shared/c++/UpdateOptions.hpp +0 -111
- package/src/features/rating.ts +0 -17
- package/src/types/player.ts +0 -69
- package/src/web/TrackPlayer/PlaylistPlayer.ts +0 -346
|
@@ -48,54 +48,95 @@ export type BrowseError = {
|
|
|
48
48
|
* Can be either a ResolvedTrack (success) or BrowseError (failure).
|
|
49
49
|
*/
|
|
50
50
|
export type BrowseResult = ResolvedTrack | BrowseError;
|
|
51
|
-
export type BrowserSourceCallback = (param: BrowserSourceCallbackParam) => Promise<BrowseResult>;
|
|
51
|
+
export type BrowserSourceCallback = (param: BrowserSourceCallbackParam) => BrowseResult | Promise<BrowseResult>;
|
|
52
52
|
/**
|
|
53
|
-
* Search mode
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* - `
|
|
57
|
-
*
|
|
58
|
-
* - `
|
|
59
|
-
*
|
|
60
|
-
*
|
|
53
|
+
* Search mode — the *container vertical*: what KIND of result the user asked
|
|
54
|
+
* for. Orthogonal to the filter props (`genre`/`artist`/`album`/`title`/
|
|
55
|
+
* `playlist`), which say *which* item. `mode` is optional: when absent, the
|
|
56
|
+
* request is unstructured (text-search `query`) or unclassified.
|
|
57
|
+
*
|
|
58
|
+
* - `any`: play anything sensible — "play something" / smart shuffle (query
|
|
59
|
+
* empty). Android also maps its generic "play music" focus here, since it
|
|
60
|
+
* can't isolate the music vertical the way iOS can.
|
|
61
|
+
* - `song`: an individual track
|
|
62
|
+
* - `playlist`: a named playlist / mix
|
|
63
|
+
* - `station`: a live radio station / channel
|
|
64
|
+
* - `podcast`: a podcast (series, episode, or station)
|
|
65
|
+
* - `audiobook`: an audiobook
|
|
66
|
+
* - `news`: news content
|
|
67
|
+
* - `music`: the music vertical, as opposed to talk/podcasts/audiobooks
|
|
68
|
+
* ("play music" on iOS, via the music media type)
|
|
69
|
+
* - `music-video` / `movie` / `tv-show` / `tv-show-episode`: video kinds
|
|
70
|
+
* (an audio app cannot play these; surfaced so consumers may special-case —
|
|
71
|
+
* ignoring them degrades to an unstructured search)
|
|
72
|
+
*
|
|
73
|
+
* NOTE: there is intentionally no `genre`/`artist`/`album` member — those are
|
|
74
|
+
* filters, not result shapes. Read them from `SearchParams.genre`/`.artist`/
|
|
75
|
+
* `.album` directly.
|
|
61
76
|
*
|
|
62
77
|
* @see BrowserConfiguration.search
|
|
63
78
|
* @see SearchParams
|
|
64
79
|
*/
|
|
65
|
-
export type SearchMode = 'any' | '
|
|
80
|
+
export type SearchMode = 'any' | 'song' | 'playlist' | 'station' | 'podcast' | 'audiobook' | 'news' | 'music' | 'music-video' | 'movie' | 'tv-show' | 'tv-show-episode';
|
|
81
|
+
/**
|
|
82
|
+
* The media-reference axis from a voice intent.
|
|
83
|
+
*
|
|
84
|
+
* - `my`: the user's own collection ("play my favorites") — routed to the
|
|
85
|
+
* `search` source so the consumer resolves it against their library.
|
|
86
|
+
* - `unknown`: no reference (the default; Android always emits this).
|
|
87
|
+
*
|
|
88
|
+
* NOTE: "currently playing" ("play this") is resolved natively (resume) and
|
|
89
|
+
* never reaches the consumer, so it is not a value here.
|
|
90
|
+
*/
|
|
91
|
+
export type MediaReference = 'my' | 'unknown';
|
|
66
92
|
/**
|
|
67
|
-
* Structured search parameters from voice
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* - "play something"
|
|
71
|
-
* - "play music"
|
|
72
|
-
* - "play jazz"
|
|
73
|
-
* - "play
|
|
74
|
-
* - "play
|
|
75
|
-
* - "play
|
|
93
|
+
* Structured search parameters normalized from a voice/search intent — one
|
|
94
|
+
* cross-platform shape (iOS SiriKit + Android MediaSession). `mode` is the
|
|
95
|
+
* container vertical; the remaining fields are filters. Example mappings:
|
|
96
|
+
* - "play something" → mode='any', query="" (smart shuffle)
|
|
97
|
+
* - "play music" → mode='music' (iOS) / 'any' (Android), query=""
|
|
98
|
+
* - "play jazz" → genre="jazz", query="jazz" (mode undefined)
|
|
99
|
+
* - "play the radishes" → artist="the radishes", query="the radishes"
|
|
100
|
+
* - "play greens by the radishes" → album="greens", artist="the radishes"
|
|
101
|
+
* - "play sweet pea" → mode='song', title="sweet pea", query="sweet pea"
|
|
102
|
+
* - "play my favorites" → reference='my', query=""
|
|
103
|
+
* - "play a jazz podcast" → mode='podcast', genre="jazz"
|
|
76
104
|
*/
|
|
77
105
|
export interface SearchParams {
|
|
78
|
-
/**
|
|
106
|
+
/** Container vertical, or undefined for an unstructured / unclassified search. */
|
|
79
107
|
mode?: SearchMode;
|
|
80
108
|
/**
|
|
81
109
|
* The original search query string (always present, but may be empty string "").
|
|
82
|
-
*
|
|
110
|
+
* With mode='any' and empty query, return any content the user would like
|
|
83
111
|
* (e.g., recently played, favorites, or smart shuffle).
|
|
84
112
|
*/
|
|
85
113
|
query: string;
|
|
86
|
-
/** Genre
|
|
114
|
+
/** Genre filter, when the intent named one. */
|
|
87
115
|
genre?: string;
|
|
88
|
-
/** Artist
|
|
116
|
+
/** Artist filter (artist / album / song intents). */
|
|
89
117
|
artist?: string;
|
|
90
|
-
/** Album
|
|
118
|
+
/** Album filter. */
|
|
91
119
|
album?: string;
|
|
92
|
-
/**
|
|
120
|
+
/** Track title, for a song intent. */
|
|
93
121
|
title?: string;
|
|
94
|
-
/** Playlist name for playlist
|
|
122
|
+
/** Playlist name, for a playlist intent. */
|
|
95
123
|
playlist?: string;
|
|
124
|
+
/**
|
|
125
|
+
* Media-reference axis. `'my'` = resolve against the user's own collection
|
|
126
|
+
* ("play my favorites"); `'unknown'` = no reference (the default). Android
|
|
127
|
+
* always emits `'unknown'`.
|
|
128
|
+
*
|
|
129
|
+
* Resolve it however your collection lives: a `SearchSourceCallback` can read
|
|
130
|
+
* `params.reference` and return the matching tracks directly, or — when using
|
|
131
|
+
* an HTTP `TransformableRequestConfig` — branch in `transform` on
|
|
132
|
+
* `request.query.reference === 'my'` to rewrite the request toward a
|
|
133
|
+
* favorites endpoint (e.g. injecting locally-stored identifiers into the body).
|
|
134
|
+
*/
|
|
135
|
+
reference: MediaReference;
|
|
96
136
|
}
|
|
97
137
|
export type SearchSourceCallback = (params: SearchParams) => Promise<Track[]>;
|
|
98
138
|
export type RequestConfigTransformer = (request: RequestConfig, routeParams?: Record<string, string>) => Promise<RequestConfig>;
|
|
139
|
+
export type RequestConfigTransformerSync = (request: RequestConfig, routeParams?: Record<string, string>) => RequestConfig;
|
|
99
140
|
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS';
|
|
100
141
|
export interface RequestConfig {
|
|
101
142
|
method?: HttpMethod;
|
|
@@ -184,6 +225,7 @@ export interface MediaTransformParams {
|
|
|
184
225
|
* ```
|
|
185
226
|
*/
|
|
186
227
|
export type MediaRequestConfigTransformer = (params: MediaTransformParams) => Promise<RequestConfig>;
|
|
228
|
+
export type MediaRequestConfigTransformerSync = (params: MediaTransformParams) => RequestConfig;
|
|
187
229
|
/**
|
|
188
230
|
* Request configuration that supports async transformation.
|
|
189
231
|
* Extends RequestConfig with a transform callback for dynamic request modification.
|
|
@@ -192,6 +234,11 @@ export type MediaRequestConfigTransformer = (params: MediaTransformParams) => Pr
|
|
|
192
234
|
* before the request is made. This is useful for adding dynamic headers,
|
|
193
235
|
* signing URLs, or other request-time modifications.
|
|
194
236
|
*
|
|
237
|
+
* Note: when a layer provides a transform, the layer's other static fields
|
|
238
|
+
* are NOT merged — the transform receives the merged config from the layers
|
|
239
|
+
* below it, and its return value replaces that config entirely. Spread the
|
|
240
|
+
* incoming request (`{ ...request, ... }`) to keep its fields.
|
|
241
|
+
*
|
|
195
242
|
* @example
|
|
196
243
|
* ```typescript
|
|
197
244
|
* const config: TransformableRequestConfig = {
|
|
@@ -207,8 +254,42 @@ export type MediaRequestConfigTransformer = (params: MediaTransformParams) => Pr
|
|
|
207
254
|
* ```
|
|
208
255
|
*/
|
|
209
256
|
export interface TransformableRequestConfig extends RequestConfig {
|
|
257
|
+
/** Async per-request transform. When both are set, runs BEFORE `transformSync`. */
|
|
210
258
|
transform?: RequestConfigTransformer;
|
|
259
|
+
/** Sync per-request transform (no Promise allocation). When both are set, runs AFTER `transform`. */
|
|
260
|
+
transformSync?: RequestConfigTransformerSync;
|
|
211
261
|
}
|
|
262
|
+
/**
|
|
263
|
+
* Lazily builds the config for a `request` or `browse` layer. Reach for it when
|
|
264
|
+
* the config depends on a value that changes now and then — a base URL, a
|
|
265
|
+
* locale — but not on every request.
|
|
266
|
+
*
|
|
267
|
+
* How it differs from a `transform`: **a resolver runs once and its result is
|
|
268
|
+
* cached**, then reused for every browse/search/media/artwork request — whereas a
|
|
269
|
+
* `transform` runs on *every* request. The resolver re-runs only when you call
|
|
270
|
+
* `invalidateAllContent()`, so call that after (say) an environment or locale
|
|
271
|
+
* switch to pick up the new value.
|
|
272
|
+
*
|
|
273
|
+
* Return the config directly — no `async`/Promise needed in the common case — or
|
|
274
|
+
* a `Promise` when you must await (e.g. fetching a token). The cached config
|
|
275
|
+
* flows through the normal layering, so its `query` merges additively and its
|
|
276
|
+
* `baseUrl` overrides, exactly like a static config; it may also include a
|
|
277
|
+
* `transform` if you additionally need genuine per-request logic.
|
|
278
|
+
*
|
|
279
|
+
* @example
|
|
280
|
+
* ```typescript
|
|
281
|
+
* configureBrowser({
|
|
282
|
+
* // Read once and cached; re-read after the next invalidateAllContent().
|
|
283
|
+
* request: () => ({ baseUrl: currentBaseUrl() }),
|
|
284
|
+
* // Browse-only locale param, merged into every browse request's query.
|
|
285
|
+
* browse: () => ({ query: { hl: currentLocale() } }),
|
|
286
|
+
* })
|
|
287
|
+
*
|
|
288
|
+
* // Async resolver (e.g. awaiting a token) — still runs once, then cached:
|
|
289
|
+
* request: async () => ({ headers: { authorization: await freshToken() } })
|
|
290
|
+
* ```
|
|
291
|
+
*/
|
|
292
|
+
export type RequestConfigResolver = () => TransformableRequestConfig | Promise<TransformableRequestConfig>;
|
|
212
293
|
/**
|
|
213
294
|
* Configuration for artwork image requests
|
|
214
295
|
*
|
|
@@ -334,13 +415,13 @@ export interface MediaRequestConfig extends TransformableRequestConfig {
|
|
|
334
415
|
*
|
|
335
416
|
* Called for each track to generate the final request configuration.
|
|
336
417
|
* Receives the full Track object, allowing URL generation based on
|
|
337
|
-
* track metadata (artist, album, src, etc.).
|
|
418
|
+
* track metadata (id, artist, album, src, etc.).
|
|
338
419
|
*
|
|
339
420
|
* The returned config is merged with base configs, then passed to
|
|
340
421
|
* `transform` if provided.
|
|
341
422
|
*
|
|
342
423
|
* @param track - The track being requested
|
|
343
|
-
* @returns Request configuration for this specific track
|
|
424
|
+
* @returns Request configuration for this specific track (sync or async)
|
|
344
425
|
*
|
|
345
426
|
* @example
|
|
346
427
|
* ```typescript
|
|
@@ -350,14 +431,17 @@ export interface MediaRequestConfig extends TransformableRequestConfig {
|
|
|
350
431
|
* })
|
|
351
432
|
* ```
|
|
352
433
|
*/
|
|
434
|
+
/** Async per-track resolution. When both are set, runs (merged) BEFORE `resolveSync`. */
|
|
353
435
|
resolve?: (track: Track) => Promise<RequestConfig>;
|
|
436
|
+
/** Sync per-track resolution (no Promise allocation). When both are set, runs (merged) AFTER `resolve`. */
|
|
437
|
+
resolveSync?: (track: Track) => RequestConfig;
|
|
354
438
|
}
|
|
355
439
|
export interface ArtworkRequestConfig extends RequestConfig {
|
|
356
440
|
/**
|
|
357
441
|
* Per-track request resolution callback.
|
|
358
442
|
*
|
|
359
443
|
* Called for each track to generate the request configuration based on
|
|
360
|
-
* track metadata (artist, album, src, etc.).
|
|
444
|
+
* track metadata (id, artist, album, src, etc.).
|
|
361
445
|
*
|
|
362
446
|
* The returned config is merged with base configs, then passed to
|
|
363
447
|
* `transform` if provided.
|
|
@@ -375,7 +459,10 @@ export interface ArtworkRequestConfig extends RequestConfig {
|
|
|
375
459
|
* }
|
|
376
460
|
* ```
|
|
377
461
|
*/
|
|
462
|
+
/** Async per-track resolution. When both are set, runs (merged) BEFORE `resolveSync`. */
|
|
378
463
|
resolve?: (track: Track) => Promise<RequestConfig>;
|
|
464
|
+
/** Sync per-track resolution (no Promise allocation). When both are set, runs (merged) AFTER `resolve`. */
|
|
465
|
+
resolveSync?: (track: Track) => RequestConfig;
|
|
379
466
|
/**
|
|
380
467
|
* Final transformation callback for media/artwork requests.
|
|
381
468
|
*
|
|
@@ -405,7 +492,10 @@ export interface ArtworkRequestConfig extends RequestConfig {
|
|
|
405
492
|
* }
|
|
406
493
|
* ```
|
|
407
494
|
*/
|
|
495
|
+
/** Async final transform. When both are set, runs BEFORE `transformSync`. */
|
|
408
496
|
transform?: MediaRequestConfigTransformer;
|
|
497
|
+
/** Sync final transform (no Promise allocation). When both are set, runs AFTER `transform`. */
|
|
498
|
+
transformSync?: MediaRequestConfigTransformerSync;
|
|
409
499
|
/**
|
|
410
500
|
* Query parameter names for automatic context injection from CarPlay/Android Auto.
|
|
411
501
|
*
|
|
@@ -431,6 +521,19 @@ export interface ArtworkRequestConfig extends RequestConfig {
|
|
|
431
521
|
*/
|
|
432
522
|
imageQueryParams?: ImageQueryParams;
|
|
433
523
|
}
|
|
524
|
+
/**
|
|
525
|
+
* Source for a browse container's contents.
|
|
526
|
+
*
|
|
527
|
+
* **Response shape (HTTP / `TransformableRequestConfig`):** the endpoint must
|
|
528
|
+
* return a single **page object** — a {@link ResolvedTrack}
|
|
529
|
+
* (`{ title, url?, children: Track[] }`). The `children` array holds the rows
|
|
530
|
+
* shown for the container; each child is a playable leaf (`src`) or a navigable
|
|
531
|
+
* sub-container (`url`). A callback / static `ResolvedTrack` returns the same
|
|
532
|
+
* page object directly.
|
|
533
|
+
*
|
|
534
|
+
* {@link SearchSource} and {@link TabsSource} HTTP endpoints return this same
|
|
535
|
+
* page shape; only the meaning of `children` differs (results / tabs).
|
|
536
|
+
*/
|
|
434
537
|
export type BrowserSource = ResolvedTrack | BrowserSourceCallback | TransformableRequestConfig;
|
|
435
538
|
export type RouteSource = BrowserSourceCallback | TransformableRequestConfig;
|
|
436
539
|
/**
|
|
@@ -455,33 +558,107 @@ export type RouteConfig = {
|
|
|
455
558
|
/** Override artwork config for this route. */
|
|
456
559
|
artwork?: ArtworkRequestConfig;
|
|
457
560
|
};
|
|
458
|
-
export type TabsSourceCallback = () => Promise<Track[]>;
|
|
561
|
+
export type TabsSourceCallback = () => Track[] | Promise<Track[]>;
|
|
459
562
|
/**
|
|
460
563
|
* Tab source configuration for navigation tabs.
|
|
461
564
|
*
|
|
462
|
-
* When using API configuration (TransformableRequestConfig), the request path
|
|
463
|
-
*
|
|
565
|
+
* When using API configuration (TransformableRequestConfig), the request path
|
|
566
|
+
* defaults to '/' and the endpoint must return a page object
|
|
567
|
+
* `{ title?, children: Track[] }` whose `children` are the tabs — the same
|
|
568
|
+
* shape a browse endpoint returns. Callback/static sources provide `Track[]`
|
|
569
|
+
* directly.
|
|
464
570
|
*/
|
|
465
571
|
export type TabsSource = Track[] | TabsSourceCallback | TransformableRequestConfig;
|
|
466
572
|
/**
|
|
467
573
|
* Search source configuration for handling search requests.
|
|
468
574
|
*
|
|
575
|
+
* **Response shape (HTTP / `TransformableRequestConfig`):** the endpoint must
|
|
576
|
+
* return a page object — `{ title?, children: Track[] }` — whose `children`
|
|
577
|
+
* are the result rows, the same shape a browse endpoint returns. (The web
|
|
578
|
+
* implementation additionally accepts a bare `Track[]` for back-compat;
|
|
579
|
+
* iOS/Android do not.) Callback sources return `Track[]` directly.
|
|
580
|
+
*
|
|
469
581
|
* @see BrowserConfiguration.search
|
|
470
582
|
*/
|
|
471
583
|
export type SearchSource = SearchSourceCallback | TransformableRequestConfig;
|
|
584
|
+
/**
|
|
585
|
+
* How ids passed to `setFavorites` are matched against a
|
|
586
|
+
* track's `src` to hydrate its `favorited` flag.
|
|
587
|
+
*
|
|
588
|
+
* - `'exact'`: the id must equal `src`.
|
|
589
|
+
* - `'partial'`: the id matches if it appears as a complete path segment within
|
|
590
|
+
* `src` (delimited by `/`, `?`, `#`, or the string boundaries). Useful when
|
|
591
|
+
* favorites are stored as a stable identifier that is embedded in — but not
|
|
592
|
+
* equal to — the playable `src` URL.
|
|
593
|
+
*
|
|
594
|
+
* @example
|
|
595
|
+
* ```text
|
|
596
|
+
* setFavorites(['abc123']) + track.src = '/stream/jazz-fm/abc123'
|
|
597
|
+
*
|
|
598
|
+
* 'exact' 'abc123' === '/stream/jazz-fm/abc123' → not favorited
|
|
599
|
+
* 'partial' 'abc123' is the last segment of the src → favorited
|
|
600
|
+
*
|
|
601
|
+
* setFavorites(['https://cdn.example.com/jazz-fm/abc123.mp3'])
|
|
602
|
+
*
|
|
603
|
+
* 'exact' id === src → favorited
|
|
604
|
+
* 'partial' id is a full segment of src → favorited
|
|
605
|
+
* ```
|
|
606
|
+
*/
|
|
607
|
+
export type FavoritesMatchMode = 'exact' | 'partial';
|
|
608
|
+
/**
|
|
609
|
+
* Object form of the `favorite` capability — enables favoriting with an explicit
|
|
610
|
+
* {@link FavoritesMatchMode}. (A bare `true` is shorthand for `{ match: 'exact' }`.)
|
|
611
|
+
*/
|
|
612
|
+
export interface FavoriteConfig {
|
|
613
|
+
match: FavoritesMatchMode;
|
|
614
|
+
}
|
|
472
615
|
export type BrowserConfiguration = {
|
|
473
616
|
/**
|
|
474
|
-
* Initial navigation path. Setting this triggers initial navigation to the
|
|
617
|
+
* Initial navigation path. Setting this triggers initial navigation to the
|
|
618
|
+
* specified path. When unset, the first tab's URL is used; when there are
|
|
619
|
+
* no tabs either, `/`.
|
|
475
620
|
*/
|
|
476
621
|
path?: string | undefined;
|
|
477
622
|
/**
|
|
478
|
-
* Shared request settings applied to
|
|
479
|
-
*
|
|
623
|
+
* Shared request settings applied to every HTTP request (browse, search,
|
|
624
|
+
* media, artwork). Layered before the per-kind config and (for browse) the
|
|
625
|
+
* route — so request → `<kind>` → route. Specific configs override these
|
|
626
|
+
* defaults.
|
|
627
|
+
*
|
|
628
|
+
* Either a static {@link TransformableRequestConfig} (its optional `transform`
|
|
629
|
+
* runs per request), or a {@link RequestConfigResolver} thunk resolved once per
|
|
630
|
+
* content generation and re-resolved on `invalidateAllContent()`. Reach for the
|
|
631
|
+
* resolver when a value changes rarely (a base URL, an auth host) so it is read
|
|
632
|
+
* once per generation and merged natively — rather than recomputed on every
|
|
633
|
+
* browse/search/media/artwork request via a `transform`.
|
|
634
|
+
*/
|
|
635
|
+
request?: TransformableRequestConfig | RequestConfigResolver;
|
|
636
|
+
/**
|
|
637
|
+
* Request shaping applied to every browse request (all routes, including the
|
|
638
|
+
* implicit default), layered between `request` and the matched route:
|
|
639
|
+
* `request` → `browse` → route. This is the browse-kind analogue of `media`
|
|
640
|
+
* and `artwork` — the place for browse-only concerns (e.g. a content-type
|
|
641
|
+
* marker query, or a locale param) that should not leak onto media/artwork.
|
|
642
|
+
*
|
|
643
|
+
* A browse path with no matching `routes` entry is fetched using
|
|
644
|
+
* `request` + `browse` applied to the path, so this also defines the default
|
|
645
|
+
* browse behaviour. Register a `routes['*']` entry only to override that
|
|
646
|
+
* default with a callback / static / bespoke config.
|
|
647
|
+
*
|
|
648
|
+
* Like `request`, this may be a static {@link TransformableRequestConfig} or a
|
|
649
|
+
* {@link RequestConfigResolver} thunk (resolved once per content generation) —
|
|
650
|
+
* e.g. a locale query param that only changes when `invalidateAllContent()` is
|
|
651
|
+
* called. A resolver's `query` is merged additively into each browse request's
|
|
652
|
+
* query, exactly as a static `query` would be.
|
|
653
|
+
*/
|
|
654
|
+
browse?: TransformableRequestConfig | RequestConfigResolver;
|
|
655
|
+
/**
|
|
656
|
+
* Media/audio stream request configuration.
|
|
657
|
+
*
|
|
658
|
+
* Unlike `request`/`browse`, this does not accept a resolver thunk. For
|
|
659
|
+
* values that change at runtime, use the shared `request` resolver (it
|
|
660
|
+
* applies to media requests too), a per-track `resolve`, or a `transform`.
|
|
480
661
|
*/
|
|
481
|
-
request?: TransformableRequestConfig;
|
|
482
|
-
/** Default browse source when no matching route is found. */
|
|
483
|
-
browse?: BrowserSource;
|
|
484
|
-
/** Media/audio stream request configuration. */
|
|
485
662
|
media?: MediaRequestConfig;
|
|
486
663
|
/**
|
|
487
664
|
* Configuration for artwork/image requests.
|
|
@@ -491,8 +668,9 @@ export type BrowserConfiguration = {
|
|
|
491
668
|
* Artwork URLs are transformed when tracks are processed (before being passed to media controllers
|
|
492
669
|
* like Android Auto). This is different from media requests which are transformed at playback time.
|
|
493
670
|
*
|
|
494
|
-
*
|
|
495
|
-
*
|
|
671
|
+
* Headers ARE applied to artwork requests: the library fetches CarPlay and
|
|
672
|
+
* Android Auto images in-process, and in-app consumers receive them via
|
|
673
|
+
* `artworkSource` (which carries the headers for React Native's `<Image>`).
|
|
496
674
|
*
|
|
497
675
|
* @example
|
|
498
676
|
* ```typescript
|
|
@@ -513,39 +691,79 @@ export type BrowserConfiguration = {
|
|
|
513
691
|
* ```
|
|
514
692
|
*/
|
|
515
693
|
artwork?: ArtworkRequestConfig;
|
|
694
|
+
/**
|
|
695
|
+
* Artwork configuration for the NOW-PLAYING surface only (lock screen / CarPlay /
|
|
696
|
+
* Android Auto now-playing) — distinct from `artwork`, which configures browse-list
|
|
697
|
+
* thumbnails. When set, the now-playing artwork is resolved from THIS config instead of
|
|
698
|
+
* `artwork`; browse lists never read it, so they're unaffected. When unset, now-playing
|
|
699
|
+
* falls back to `artwork` / the track's own `artwork`.
|
|
700
|
+
*
|
|
701
|
+
* Being a full `RequestConfig`, it supports `path`, `query`, and `headers`. The token
|
|
702
|
+
* `{id}` in any of those values is replaced with the track's `id` during resolution, and
|
|
703
|
+
* the result flows through the shared `request` layer (so a relative path gets `baseUrl`
|
|
704
|
+
* prepended). For logic that can't be expressed as a template, use `resolve(track)`.
|
|
705
|
+
*
|
|
706
|
+
* The `{id}` templating is specific to `nowPlayingArtwork` — static values
|
|
707
|
+
* in other configs are not templated. Not implemented by the web
|
|
708
|
+
* implementation.
|
|
709
|
+
*
|
|
710
|
+
* @example
|
|
711
|
+
* // 302-redirect endpoint keyed by the track id:
|
|
712
|
+
* nowPlayingArtwork: { path: '/artwork/{id}' }
|
|
713
|
+
*/
|
|
714
|
+
nowPlayingArtwork?: ArtworkRequestConfig;
|
|
516
715
|
/**
|
|
517
716
|
* Configuration for search functionality.
|
|
518
717
|
* Enables search capabilities in the media browser, typically accessed through voice commands or search UI.
|
|
519
718
|
*
|
|
719
|
+
* See the [Search guide](https://audiobrowser.dev/guide/search) for a walkthrough of
|
|
720
|
+
* modes, filters, the `reference` axis, and mixed audio/video.
|
|
721
|
+
*
|
|
520
722
|
* Optional - if not provided, search functionality will be disabled.
|
|
521
723
|
* Required for Android Auto/CarPlay voice search integration with support for structured voice commands.
|
|
522
724
|
*
|
|
523
725
|
* Search receives structured parameters from voice commands like:
|
|
524
|
-
* - "play
|
|
525
|
-
* - "play
|
|
526
|
-
* - "play
|
|
527
|
-
* - "play
|
|
528
|
-
* - "play
|
|
726
|
+
* - "play something" → mode='any', query="" (smart shuffle)
|
|
727
|
+
* - "play music" → mode='music' (iOS) / 'any' (Android), query=""
|
|
728
|
+
* - "play jazz" → genre="jazz", query="jazz" (genre is a filter, no mode)
|
|
729
|
+
* - "play the radishes" → artist="the radishes", query="the radishes"
|
|
730
|
+
* - "play sweet pea" → mode='song', title="sweet pea", query="sweet pea"
|
|
731
|
+
* - "play my favorites" → reference='my', query=""
|
|
529
732
|
*
|
|
530
733
|
* Can be either:
|
|
531
|
-
* - SearchSourceCallback: Receives SearchParams with query
|
|
532
|
-
* -
|
|
734
|
+
* - SearchSourceCallback: Receives SearchParams with query + reference, plus the
|
|
735
|
+
* optional container-vertical `mode` and the genre/artist/album/title/playlist filters
|
|
736
|
+
* - TransformableRequestConfig: API endpoint where search parameters are automatically added to request.query:
|
|
533
737
|
* - q: search query string (always present)
|
|
534
|
-
* - mode:
|
|
535
|
-
*
|
|
738
|
+
* - mode: container vertical (any/song/playlist/station/podcast/audiobook/news/music/
|
|
739
|
+
* music-video/movie/tv-show/tv-show-episode) - omitted for unstructured search
|
|
740
|
+
* - reference: 'my' when the user asked for their own collection ("play my
|
|
741
|
+
* favorites"); omitted otherwise
|
|
742
|
+
* - artist, album, genre, title, playlist: filters, included when present
|
|
743
|
+
*
|
|
744
|
+
* These query-param keys are fixed (not configurable). If your endpoint
|
|
745
|
+
* expects different names, rename them in `transform` — it receives the params
|
|
746
|
+
* already on `request.query`, e.g. `query: { search: request.query?.q }`.
|
|
747
|
+
*
|
|
748
|
+
* Response shape: the endpoint must return a page object
|
|
749
|
+
* `{ children: Track[] }` — see {@link SearchSource}.
|
|
536
750
|
*
|
|
537
751
|
* @example
|
|
538
752
|
* ```typescript
|
|
539
753
|
* // Callback approach - direct access to structured parameters
|
|
540
754
|
* search: async (params) => {
|
|
541
|
-
* //
|
|
542
|
-
* if (params.
|
|
543
|
-
*
|
|
544
|
-
*
|
|
545
|
-
* if (params.mode === 'album' && params.album && params.artist) {
|
|
755
|
+
* // "play my favorites" → resolve against the user's own collection
|
|
756
|
+
* if (params.reference === 'my') return await getFavorites();
|
|
757
|
+
* // Filters are read directly from their props (not derived from `mode`)
|
|
758
|
+
* if (params.album && params.artist) {
|
|
546
759
|
* return await db.query('SELECT * FROM tracks WHERE album = ? AND artist = ?',
|
|
547
760
|
* [params.album, params.artist]);
|
|
548
761
|
* }
|
|
762
|
+
* if (params.artist) {
|
|
763
|
+
* return await db.query('SELECT * FROM tracks WHERE artist = ?', [params.artist]);
|
|
764
|
+
* }
|
|
765
|
+
* // `mode` is the container vertical — narrow by it when present
|
|
766
|
+
* if (params.mode === 'podcast') return await searchPodcasts(params.query);
|
|
549
767
|
* // Fall back to full-text search
|
|
550
768
|
* return await searchByQuery(params.query);
|
|
551
769
|
* }
|
|
@@ -553,11 +771,11 @@ export type BrowserConfiguration = {
|
|
|
553
771
|
* // API configuration - parameters automatically added to query string
|
|
554
772
|
* search: {
|
|
555
773
|
* baseUrl: 'https://api.example.com/search',
|
|
556
|
-
* // GET /search?q=
|
|
774
|
+
* // GET /search?q=greens&mode=album&album=greens&artist=the+radishes&limit=20
|
|
557
775
|
* transform(request) {
|
|
558
776
|
* return {
|
|
559
777
|
* ...request,
|
|
560
|
-
* query: { ...request.query, limit: 20 }
|
|
778
|
+
* query: { ...request.query, limit: '20' }
|
|
561
779
|
* };
|
|
562
780
|
* }
|
|
563
781
|
* }
|
|
@@ -575,20 +793,47 @@ export type BrowserConfiguration = {
|
|
|
575
793
|
*/
|
|
576
794
|
tabs?: TabsSource;
|
|
577
795
|
/**
|
|
578
|
-
* Route-specific configurations. Maps URL
|
|
579
|
-
*
|
|
796
|
+
* Route-specific configurations. Maps URL path patterns to browse sources.
|
|
797
|
+
*
|
|
798
|
+
* ## Matching
|
|
580
799
|
*
|
|
581
|
-
*
|
|
800
|
+
* Patterns match on **exact segment count** — `/artists` does NOT match
|
|
801
|
+
* `/artists/123`. Segments may be:
|
|
802
|
+
* - a constant: `/favorites`
|
|
803
|
+
* - a parameter: `/albums/{id}` — captured into `routeParams.id` and passed
|
|
804
|
+
* to callbacks and transforms
|
|
805
|
+
* - a single-segment wildcard: `*`
|
|
806
|
+
* - a tail wildcard: `/files/**` — matches any depth; the remainder is
|
|
807
|
+
* captured into `routeParams.tail`
|
|
808
|
+
*
|
|
809
|
+
* When several patterns match, the most specific wins
|
|
810
|
+
* (constants > parameters > wildcards > tail wildcard).
|
|
811
|
+
*
|
|
812
|
+
* ## Defaults and reserved keys
|
|
813
|
+
*
|
|
814
|
+
* A path matching no route is fetched over HTTP via the `request` →
|
|
815
|
+
* `browse` layers with the path applied — most APIs only need explicit
|
|
816
|
+
* routes for exceptions. The special key `'*'` overrides that default with
|
|
817
|
+
* its own source. Keys starting with `__` are reserved for internal use.
|
|
818
|
+
*
|
|
819
|
+
* Note: a static `path` on a route's request config does not rewrite the
|
|
820
|
+
* request path (the navigated path is used); remap paths in a `transform`,
|
|
821
|
+
* which receives `routeParams` as its second argument.
|
|
822
|
+
*
|
|
823
|
+
* Values can be a `BrowserSource` (callback, request config, or static page
|
|
824
|
+
* object) or a `RouteConfig` with per-route `media`/`artwork` overrides.
|
|
582
825
|
*
|
|
583
826
|
* @example
|
|
584
827
|
* ```typescript
|
|
585
828
|
* routes: {
|
|
586
|
-
* '/favorites': async () =>
|
|
587
|
-
* '/
|
|
829
|
+
* '/favorites': async () => getFavoritesPage(),
|
|
830
|
+
* '/albums/{id}': async ({ routeParams }) => fetchAlbumPage(routeParams?.id),
|
|
588
831
|
* '/premium': {
|
|
589
|
-
* browse: { baseUrl: 'https://premium-api.com' },
|
|
590
|
-
* artwork: { baseUrl: 'https://premium-images.
|
|
591
|
-
* }
|
|
832
|
+
* browse: { baseUrl: 'https://premium-api.example.com' },
|
|
833
|
+
* artwork: { baseUrl: 'https://premium-images.example.com' }
|
|
834
|
+
* },
|
|
835
|
+
* // Custom default for anything no other route matches:
|
|
836
|
+
* '*': { baseUrl: 'https://api.example.com' }
|
|
592
837
|
* }
|
|
593
838
|
* ```
|
|
594
839
|
*/
|
|
@@ -622,30 +867,40 @@ export type BrowserConfiguration = {
|
|
|
622
867
|
*/
|
|
623
868
|
androidControllerOfflineError?: boolean;
|
|
624
869
|
/**
|
|
625
|
-
*
|
|
870
|
+
* Title shown (as the list's centered empty state) on CarPlay screens whose
|
|
871
|
+
* content is still loading — browse destinations while they resolve, and the
|
|
872
|
+
* startup screen while tabs load. Supply your app's localized "Loading…"
|
|
873
|
+
* string. On iOS 18.4+ the system loading spinner is shown instead.
|
|
626
874
|
*
|
|
627
|
-
* When
|
|
628
|
-
*
|
|
875
|
+
* When unset, loading screens are left blank (apart from the spinner on
|
|
876
|
+
* iOS 18.4+) rather than showing un-localized copy.
|
|
629
877
|
*
|
|
630
|
-
*
|
|
878
|
+
* @example
|
|
879
|
+
* ```typescript
|
|
880
|
+
* carPlayLoadingTitle: t('loading')
|
|
881
|
+
* ```
|
|
631
882
|
*
|
|
632
|
-
* @default true
|
|
633
883
|
* @platform ios
|
|
634
884
|
*/
|
|
635
|
-
|
|
885
|
+
carPlayLoadingTitle?: string;
|
|
636
886
|
/**
|
|
637
|
-
*
|
|
638
|
-
*
|
|
887
|
+
* Called when the album line on the CarPlay Now Playing screen is tapped
|
|
888
|
+
* and the active track has no {@link Track.albumUrl}. Return a browse path
|
|
889
|
+
* to navigate the CarPlay browse stack there, or `undefined` if the tap was
|
|
890
|
+
* handled (or should do nothing).
|
|
891
|
+
*
|
|
892
|
+
* The album line is tappable whenever the active track has an `albumUrl`
|
|
893
|
+
* or this callback is configured.
|
|
639
894
|
*
|
|
640
895
|
* @example
|
|
641
896
|
* ```typescript
|
|
642
|
-
*
|
|
897
|
+
* resolveAlbumUrl: (track) =>
|
|
898
|
+
* track.album ? `/album/${slugify(track.album)}` : undefined
|
|
643
899
|
* ```
|
|
644
900
|
*
|
|
645
|
-
* @default []
|
|
646
901
|
* @platform ios
|
|
647
902
|
*/
|
|
648
|
-
|
|
903
|
+
resolveAlbumUrl?: ResolveAlbumUrlCallback;
|
|
649
904
|
/**
|
|
650
905
|
* Callback to customize error messages for navigation errors.
|
|
651
906
|
* Used by CarPlay and available via `useFormattedNavigationError()` for app UI.
|
|
@@ -654,12 +909,15 @@ export type BrowserConfiguration = {
|
|
|
654
909
|
*
|
|
655
910
|
* @example
|
|
656
911
|
* ```typescript
|
|
657
|
-
* formatNavigationError: (error) =>
|
|
658
|
-
*
|
|
659
|
-
*
|
|
660
|
-
*
|
|
661
|
-
*
|
|
662
|
-
*
|
|
912
|
+
* formatNavigationError: ({ error, defaultFormatted }) => {
|
|
913
|
+
* if (error.code === 'http-error') {
|
|
914
|
+
* return {
|
|
915
|
+
* title: t('error.serverError'),
|
|
916
|
+
* message: t('error.httpMessage', { status: error.statusCode })
|
|
917
|
+
* }
|
|
918
|
+
* }
|
|
919
|
+
* return defaultFormatted
|
|
920
|
+
* }
|
|
663
921
|
* ```
|
|
664
922
|
*/
|
|
665
923
|
formatNavigationError?: FormatNavigationErrorCallback;
|
|
@@ -698,11 +956,12 @@ export type FormattedNavigationError = {
|
|
|
698
956
|
*/
|
|
699
957
|
title: string;
|
|
700
958
|
/**
|
|
701
|
-
*
|
|
959
|
+
* Optional second line — the body in the error action sheet, the subtitle in
|
|
960
|
+
* the browse error/empty view. Omit it to show a title only.
|
|
702
961
|
*
|
|
703
|
-
* Default value: `error.message`
|
|
962
|
+
* Default value: `error.message` (omitted when that is empty).
|
|
704
963
|
*/
|
|
705
|
-
message
|
|
964
|
+
message?: string;
|
|
706
965
|
};
|
|
707
966
|
/**
|
|
708
967
|
* Parameters passed to the formatNavigationError callback.
|
|
@@ -739,4 +998,9 @@ export type FormatNavigationErrorParams = {
|
|
|
739
998
|
* ```
|
|
740
999
|
*/
|
|
741
1000
|
export type FormatNavigationErrorCallback = (params: FormatNavigationErrorParams) => FormattedNavigationError | undefined;
|
|
1001
|
+
/**
|
|
1002
|
+
* Maps the tapped active track to a browse path for the CarPlay album line,
|
|
1003
|
+
* or `undefined` to do nothing. See `resolveAlbumUrl`.
|
|
1004
|
+
*/
|
|
1005
|
+
export type ResolveAlbumUrlCallback = (track: Track) => string | undefined;
|
|
742
1006
|
//# sourceMappingURL=browser.d.ts.map
|