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
|
@@ -1,6 +1,114 @@
|
|
|
1
1
|
// MARK: - Types
|
|
2
2
|
|
|
3
|
+
import type { Track } from '../../types'
|
|
4
|
+
import type { PlaybackError } from '../errors'
|
|
5
|
+
import type { NowPlayingUpdate, TimedMetadata } from '../metadata'
|
|
6
|
+
import type { RepeatMode } from '../queue/repeatMode'
|
|
7
|
+
import type {
|
|
8
|
+
AndroidUpdateOptions,
|
|
9
|
+
IOSUpdateOptions,
|
|
10
|
+
NativeUpdateOptions,
|
|
11
|
+
UpdateOptions
|
|
12
|
+
} from './options'
|
|
3
13
|
import { nativeBrowser } from '../../native'
|
|
14
|
+
import { validateIOSUpdateOptions } from './options'
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Parameters passed to the {@link FormatNowPlayingCallback}.
|
|
18
|
+
*
|
|
19
|
+
* The formatter owns every line shown on the now-playing surface — the track text, the live song,
|
|
20
|
+
* *and* any transient status (reconnecting / error). The library no longer renders status copy
|
|
21
|
+
* itself, so these fields give you what you need to render (and localize) it yourself. The formatter
|
|
22
|
+
* is re-invoked on track change, each timed-metadata update, play/pause + error/rebuffer
|
|
23
|
+
* transitions, and device connectivity changes.
|
|
24
|
+
*/
|
|
25
|
+
export type FormatNowPlayingParams = {
|
|
26
|
+
/** The currently playing track. */
|
|
27
|
+
track: Track
|
|
28
|
+
/** Timed metadata (ICY / ID3 "now playing song") received during playback, if any. */
|
|
29
|
+
timedMetadata?: TimedMetadata
|
|
30
|
+
/** The play/pause intent — `false` while paused. Stays `true` through buffers, so the song line won't flicker. */
|
|
31
|
+
playWhenReady: boolean
|
|
32
|
+
/**
|
|
33
|
+
* Present (truthy) only while ongoing playback has stalled waiting for data — a mid-stream halt,
|
|
34
|
+
* never an initial connect or a seek (it won't flash on track start or bleed into playback). The
|
|
35
|
+
* value classifies *why*, so a "Reconnecting…" vs "No internet connection" line needs no separate
|
|
36
|
+
* connectivity read:
|
|
37
|
+
* - `'buffering'` — the stream is rebuffering while the device is online (rejoining the live edge);
|
|
38
|
+
* - `'offline'` — the device has no connectivity.
|
|
39
|
+
* Safe to use on its own (`if (stalled)`); compare the value (`stalled === 'offline'`) for the reason.
|
|
40
|
+
*/
|
|
41
|
+
stalled?: StallReason
|
|
42
|
+
/** The current playback error, if playback has failed. */
|
|
43
|
+
error?: PlaybackError
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Why ongoing playback has stalled, surfaced via {@link FormatNowPlayingParams.stalled}:
|
|
48
|
+
* - `'buffering'` — rebuffering while online (the live stream is rejoining the live edge);
|
|
49
|
+
* - `'offline'` — the device has no network connectivity.
|
|
50
|
+
*/
|
|
51
|
+
export type StallReason = 'buffering' | 'offline'
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Customizes what's rendered on the now-playing surface — lock screen, notification, Control Center,
|
|
55
|
+
* CarPlay, and Android Auto — for the currently playing track.
|
|
56
|
+
*
|
|
57
|
+
* Configure it via {@link SetupPlayerOptions.nowPlaying}. Where the default behavior
|
|
58
|
+
* simply publishes the track's own `title` / `artist`, the formatter hands you the two now-playing
|
|
59
|
+
* text lines outright: render the live timed metadata (the ICY / ID3 "now playing song"), surface a
|
|
60
|
+
* transient status line ("Reconnecting…", an error message), drop the song while paused — anything
|
|
61
|
+
* you can derive from the {@link FormatNowPlayingParams} for that moment.
|
|
62
|
+
*
|
|
63
|
+
* The callback is **synchronous** and should stay cheap: it's a pure formatting function, run on the
|
|
64
|
+
* JS thread and awaited natively. Don't do I/O in it. If you need asynchronously-fetched data (e.g.
|
|
65
|
+
* album art), resolve it out-of-band and stamp it imperatively rather than awaiting inside here.
|
|
66
|
+
*
|
|
67
|
+
* ### When it's invoked
|
|
68
|
+
* The player re-invokes the formatter whenever the now-playing could change:
|
|
69
|
+
* - on track change (a new item becomes current);
|
|
70
|
+
* - on each timed-metadata update ({@link FormatNowPlayingParams.timedMetadata} arrives or changes);
|
|
71
|
+
* - on every playback transition — play / pause, a stall starting or recovering, an error.
|
|
72
|
+
*
|
|
73
|
+
* Identical results are de-duplicated natively before they reach the media session, so returning the
|
|
74
|
+
* same fields across a rapid burst of transitions is cheap and won't flicker the surface.
|
|
75
|
+
*
|
|
76
|
+
* ### What to return
|
|
77
|
+
* Return a {@link NowPlayingUpdate} with the fields to display. Each field falls back **independently**
|
|
78
|
+
* to the track's own value when omitted — so `{ artist: 'Some Song' }` replaces only the secondary
|
|
79
|
+
* line and leaves the title as the track's title. Return `undefined` (or `{}`) to use the library
|
|
80
|
+
* default entirely (the track's own `title` / `artist`).
|
|
81
|
+
*
|
|
82
|
+
* @param params - The current track, latest timed metadata, and playback signals for this moment
|
|
83
|
+
* ({@link FormatNowPlayingParams}), including a {@link StallReason} that already classifies an
|
|
84
|
+
* offline stall — no separate connectivity read needed for the now-playing line.
|
|
85
|
+
* @returns The now-playing fields to display, or `undefined` to fall back to the track's own
|
|
86
|
+
* `title` / `artist`.
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```ts
|
|
90
|
+
* setupPlayer({
|
|
91
|
+
* nowPlaying: ({ timedMetadata, playWhenReady, stalled, error }) => {
|
|
92
|
+
* if (error) return { artist: error.message ?? 'Playback error' }
|
|
93
|
+
* if (stalled) return { artist: stalled === 'offline' ? 'No internet connection' : 'Reconnecting…' }
|
|
94
|
+
* // Show the live song only while actually playing; otherwise fall back to the track default.
|
|
95
|
+
* if (!playWhenReady || !timedMetadata?.title) return
|
|
96
|
+
* return {
|
|
97
|
+
* artist: timedMetadata.artist
|
|
98
|
+
* ? `${timedMetadata.artist} — ${timedMetadata.title}`
|
|
99
|
+
* : timedMetadata.title
|
|
100
|
+
* }
|
|
101
|
+
* }
|
|
102
|
+
* })
|
|
103
|
+
* ```
|
|
104
|
+
*
|
|
105
|
+
* @see {@link FormatNowPlayingParams} - the per-invocation signals passed in
|
|
106
|
+
* @see {@link NowPlayingUpdate} - the shape returned
|
|
107
|
+
* @see {@link SetupPlayerOptions.nowPlaying} - where the callback is configured
|
|
108
|
+
*/
|
|
109
|
+
export type FormatNowPlayingCallback = (
|
|
110
|
+
params: FormatNowPlayingParams
|
|
111
|
+
) => NowPlayingUpdate | undefined
|
|
4
112
|
|
|
5
113
|
/**
|
|
6
114
|
* AndroidAudioContentType options:
|
|
@@ -159,20 +267,51 @@ export interface AndroidAudioOffloadSettings {
|
|
|
159
267
|
|
|
160
268
|
/**
|
|
161
269
|
* Configuration for retry behavior.
|
|
270
|
+
*
|
|
271
|
+
* Two budgets apply, chosen by whether the current load has ever produced
|
|
272
|
+
* audio:
|
|
273
|
+
*
|
|
274
|
+
* - **First connect** (the load has never played): retries are bounded by
|
|
275
|
+
* `firstConnectMaxRetryDurationMs`. A stream that fails before ever playing
|
|
276
|
+
* is usually dead, and the listener is actively waiting for a verdict —
|
|
277
|
+
* seconds, not minutes.
|
|
278
|
+
* - **Recovery** (the load played, then failed): retries are bounded by
|
|
279
|
+
* `maxRetryDurationMs`. Playback proved the stream works; drops are usually
|
|
280
|
+
* transient (tunnels, network handovers, a station's encoder restarting)
|
|
281
|
+
* and patience is what recovers them unattended.
|
|
282
|
+
*
|
|
283
|
+
* While the device is offline, the first-connect budget does not apply: the
|
|
284
|
+
* player waits for connectivity to return (bounded by `maxRetryDurationMs`),
|
|
285
|
+
* so a station tapped in a tunnel still starts when the network comes back.
|
|
286
|
+
* Any offline observation restarts the first-connect clock, so it only ever
|
|
287
|
+
* measures a contiguous online stretch.
|
|
288
|
+
*
|
|
289
|
+
* Native platforms only — the web implementation has no automatic retry.
|
|
162
290
|
*/
|
|
163
291
|
export type RetryConfig = {
|
|
164
292
|
/**
|
|
165
|
-
* Maximum number of retry attempts before giving up.
|
|
293
|
+
* Maximum number of retry attempts before giving up. Omit to retry without an attempt
|
|
294
|
+
* limit, bounded only by the duration budgets.
|
|
166
295
|
*/
|
|
167
|
-
maxRetries
|
|
296
|
+
maxRetries?: number
|
|
168
297
|
|
|
169
298
|
/**
|
|
170
|
-
* Maximum duration in milliseconds to keep retrying
|
|
299
|
+
* Maximum duration in milliseconds to keep retrying a load that had been
|
|
300
|
+
* playing before it failed, and any load while the device is offline.
|
|
171
301
|
* This prevents surprising playback resumption after long periods offline.
|
|
172
302
|
*
|
|
173
303
|
* @default 120000 (2 minutes)
|
|
174
304
|
*/
|
|
175
305
|
maxRetryDurationMs?: number
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Maximum duration in milliseconds to keep retrying a load that has never
|
|
309
|
+
* produced audio, while the device is online. When it runs out, the terminal
|
|
310
|
+
* error carries the real diagnosis (`unreachable`, `not-found`, …).
|
|
311
|
+
*
|
|
312
|
+
* @default 12000 (12 seconds)
|
|
313
|
+
*/
|
|
314
|
+
firstConnectMaxRetryDurationMs?: number
|
|
176
315
|
}
|
|
177
316
|
|
|
178
317
|
/**
|
|
@@ -186,9 +325,12 @@ export type RetryConfig = {
|
|
|
186
325
|
export type AndroidPlayerWakeMode = 'none' | 'local' | 'network'
|
|
187
326
|
|
|
188
327
|
/**
|
|
189
|
-
* Android-
|
|
328
|
+
* Android setup options: the engine-construction fields plus the Android runtime options
|
|
329
|
+
* ({@link AndroidUpdateOptions} — `notificationButtons`, `skipSilence`, …), all expressible at
|
|
330
|
+
* launch. The consumer never has to know which is which; `setupPlayer` routes each field to
|
|
331
|
+
* where it's applied.
|
|
190
332
|
*/
|
|
191
|
-
export
|
|
333
|
+
export interface AndroidSetupOptions extends AndroidUpdateOptions {
|
|
192
334
|
/**
|
|
193
335
|
* Minimum duration of media that the player will attempt to buffer in ms.
|
|
194
336
|
*
|
|
@@ -294,115 +436,8 @@ export type PartialAndroidSetupPlayerOptions = {
|
|
|
294
436
|
wakeMode?: AndroidPlayerWakeMode
|
|
295
437
|
}
|
|
296
438
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
* Minimum duration of media that the player will attempt to buffer in ms.
|
|
300
|
-
*
|
|
301
|
-
* @throws Will throw if min buffer is higher than max buffer.
|
|
302
|
-
* @default 50000
|
|
303
|
-
*/
|
|
304
|
-
minBuffer: number
|
|
305
|
-
|
|
306
|
-
/**
|
|
307
|
-
* Audio offload configuration for power-efficient playback.
|
|
308
|
-
*
|
|
309
|
-
* - `true`: Enable with default settings (gapless and rate change support required)
|
|
310
|
-
* - `false`: Disable audio offload
|
|
311
|
-
* - `{ gaplessSupportRequired?, rateChangeSupportRequired? }`: Enable with custom requirements
|
|
312
|
-
*
|
|
313
|
-
* Audio offload moves audio processing to dedicated hardware when available, saving battery
|
|
314
|
-
* during longer playbacks, especially with screen off. Requirements determine which features
|
|
315
|
-
* must be supported for offload to activate:
|
|
316
|
-
* - `gaplessSupportRequired`: Smooth track transitions without silence
|
|
317
|
-
* - `rateChangeSupportRequired`: Variable playback speeds (0.5x, 1.25x, 2x, etc.)
|
|
318
|
-
*
|
|
319
|
-
* @see https://developer.android.com/media/media3/exoplayer/track-selection#audioOffload
|
|
320
|
-
*/
|
|
321
|
-
audioOffload: boolean | AndroidAudioOffloadSettings
|
|
322
|
-
|
|
323
|
-
/**
|
|
324
|
-
* Maximum duration of media that the player will attempt to buffer in ms.
|
|
325
|
-
* Max buffer may not be lower than min buffer.
|
|
326
|
-
*
|
|
327
|
-
* @throws Will throw if max buffer is lower than min buffer.
|
|
328
|
-
* @default 50000
|
|
329
|
-
*/
|
|
330
|
-
maxBuffer: number
|
|
331
|
-
|
|
332
|
-
/**
|
|
333
|
-
* Duration in ms that should be kept in the buffer behind the current
|
|
334
|
-
* playhead time.
|
|
335
|
-
*
|
|
336
|
-
* @default 0
|
|
337
|
-
*/
|
|
338
|
-
backBuffer: number
|
|
339
|
-
|
|
340
|
-
/**
|
|
341
|
-
* Duration of media in ms that must be buffered for playback to start or
|
|
342
|
-
* resume following a user action such as a seek.
|
|
343
|
-
*
|
|
344
|
-
* @default 2500
|
|
345
|
-
*/
|
|
346
|
-
playBuffer: number
|
|
347
|
-
|
|
348
|
-
/**
|
|
349
|
-
* Duration of media in ms that must be buffered for playback to resume
|
|
350
|
-
* after a rebuffer (when the buffer runs empty during playback).
|
|
351
|
-
*
|
|
352
|
-
* When null (the default), uses automatic mode:
|
|
353
|
-
* - Starts at `playBuffer` value
|
|
354
|
-
* - On rebuffer, measures how fast the buffer drained
|
|
355
|
-
* - Calculates how much buffer is needed to sustain 60s of playback
|
|
356
|
-
* - Increases threshold accordingly (up to 8000ms max)
|
|
357
|
-
* - Resets when changing tracks
|
|
358
|
-
*
|
|
359
|
-
* Set to a number for a fixed threshold in ms. Should be >= playBuffer,
|
|
360
|
-
* otherwise playback may rebuffer repeatedly (resuming with less buffer
|
|
361
|
-
* than initial start).
|
|
362
|
-
*
|
|
363
|
-
* @default null (automatic)
|
|
364
|
-
*/
|
|
365
|
-
rebufferBuffer: number | null
|
|
366
|
-
|
|
367
|
-
/**
|
|
368
|
-
* Maximum cache size in MB.
|
|
369
|
-
*
|
|
370
|
-
* @default 0
|
|
371
|
-
*/
|
|
372
|
-
maxCacheSize: number
|
|
373
|
-
|
|
374
|
-
/**
|
|
375
|
-
* The audio content type indicates to the android system how
|
|
376
|
-
* you intend to use audio in your app.
|
|
377
|
-
*
|
|
378
|
-
* With `audioContentType: AndroidAudioContentType.Speech`, the audio will be
|
|
379
|
-
* paused during short interruptions, such as when a message arrives.
|
|
380
|
-
* Otherwise the playback volume is reduced while the notification is playing.
|
|
381
|
-
*
|
|
382
|
-
* @default AndroidAudioContentType.Music
|
|
383
|
-
*/
|
|
384
|
-
audioContentType: AndroidAudioContentType
|
|
385
|
-
|
|
386
|
-
/**
|
|
387
|
-
* Whether the player should automatically pause when audio becomes noisy
|
|
388
|
-
* (e.g., when headphones are unplugged).
|
|
389
|
-
*
|
|
390
|
-
* @default true
|
|
391
|
-
*/
|
|
392
|
-
handleAudioBecomingNoisy: boolean
|
|
393
|
-
|
|
394
|
-
/**
|
|
395
|
-
* Wake mode for the player to use.
|
|
396
|
-
*
|
|
397
|
-
* Determines whether wake locks are held to keep the CPU and/or
|
|
398
|
-
* WiFi active during playback.
|
|
399
|
-
*
|
|
400
|
-
* @default 'none'
|
|
401
|
-
*/
|
|
402
|
-
wakeMode: AndroidPlayerWakeMode
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
export interface PartialIOSSetupPlayerOptions {
|
|
439
|
+
/** iOS setup options: the audio-session fields plus the iOS runtime options. */
|
|
440
|
+
export interface IOSSetupOptions extends IOSUpdateOptions {
|
|
406
441
|
/**
|
|
407
442
|
* Preferred forward buffer duration in ms. When set to 0 (default), AVPlayer
|
|
408
443
|
* chooses an appropriate level of buffering automatically.
|
|
@@ -445,107 +480,287 @@ export interface PartialIOSSetupPlayerOptions {
|
|
|
445
480
|
categoryPolicy?: IOSCategoryPolicy
|
|
446
481
|
}
|
|
447
482
|
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
483
|
+
/**
|
|
484
|
+
* @internal The wire shape `setupPlayer` sends across the bridge: the platform bags hold only
|
|
485
|
+
* construction fields, the runtime options nest under `options`, and the public `nowPlaying`
|
|
486
|
+
* option arrives normalized into the two now-playing fields.
|
|
487
|
+
*/
|
|
488
|
+
export interface NativeSetupPlayerOptions extends Pick<
|
|
489
|
+
SetupPlayerOptions,
|
|
490
|
+
'playWhenReady' | 'repeatMode' | 'retry' | 'keepSessionAliveOnError'
|
|
491
|
+
> {
|
|
492
|
+
/** Android-specific configuration options for setup */
|
|
493
|
+
android?: NativeAndroidSetupOptions
|
|
494
|
+
/** iOS-specific configuration options for setup */
|
|
495
|
+
ios?: NativeIOSSetupOptions
|
|
460
496
|
|
|
461
497
|
/**
|
|
462
|
-
*
|
|
463
|
-
*
|
|
498
|
+
* Player options to apply atomically with setup. They're stored before the player is
|
|
499
|
+
* constructed, so e.g. Android's media session derives its notification buttons from
|
|
500
|
+
* `capabilities` the moment the service connects — no window with default controls.
|
|
501
|
+
* Normalized from the flat fields on {@link SetupPlayerOptions}.
|
|
464
502
|
*/
|
|
465
|
-
|
|
503
|
+
options?: NativeUpdateOptions
|
|
466
504
|
|
|
467
505
|
/**
|
|
468
|
-
*
|
|
469
|
-
*
|
|
470
|
-
*
|
|
471
|
-
* recording, voice or video chat, or audio analysis.
|
|
472
|
-
* Sets on `play()`.
|
|
473
|
-
*
|
|
474
|
-
* See https://developer.apple.com/documentation/avfoundation/avaudiosession/1616508-mode
|
|
506
|
+
* Normalized from the public `nowPlaying` option. Whether the player
|
|
507
|
+
* publishes/refreshes track metadata on the now-playing surface.
|
|
508
|
+
* @default true
|
|
475
509
|
*/
|
|
476
|
-
|
|
510
|
+
autoUpdateNowPlayingMetadata?: boolean
|
|
477
511
|
|
|
478
512
|
/**
|
|
479
|
-
*
|
|
480
|
-
*
|
|
513
|
+
* Normalized from `nowPlaying` when it's a function. Customizes what's
|
|
514
|
+
* rendered on the now-playing surface.
|
|
481
515
|
*/
|
|
482
|
-
|
|
516
|
+
nowPlayingMetadataFormatter?: FormatNowPlayingCallback
|
|
517
|
+
}
|
|
483
518
|
|
|
519
|
+
// MARK: - Lifecycle
|
|
520
|
+
|
|
521
|
+
/**
|
|
522
|
+
* @internal Wire shape for {@link AndroidSetupOptions}: just the engine-construction fields —
|
|
523
|
+
* the runtime options travel separately under the wire payload's `options.android`.
|
|
524
|
+
*/
|
|
525
|
+
export type NativeAndroidSetupOptions = Omit<
|
|
526
|
+
AndroidSetupOptions,
|
|
527
|
+
keyof AndroidUpdateOptions
|
|
528
|
+
>
|
|
529
|
+
|
|
530
|
+
/**
|
|
531
|
+
* @internal Wire shape for {@link IOSSetupOptions}: just the audio-session fields — the
|
|
532
|
+
* runtime options travel separately under the wire payload's `options.ios`.
|
|
533
|
+
*/
|
|
534
|
+
export type NativeIOSSetupOptions = Omit<
|
|
535
|
+
IOSSetupOptions,
|
|
536
|
+
keyof IOSUpdateOptions
|
|
537
|
+
>
|
|
538
|
+
|
|
539
|
+
/**
|
|
540
|
+
* Public setup options: the full launch description of a player in one bag — engine
|
|
541
|
+
* construction, runtime options (`capabilities`, jump intervals, …), and initial player state
|
|
542
|
+
* (`playWhenReady`, `repeatMode`). Everything is applied natively in one atomic setup; there
|
|
543
|
+
* is no call ordering to get right. `setupPlayer` normalizes this into the wire taxonomy —
|
|
544
|
+
* consumers never see the split.
|
|
545
|
+
*/
|
|
546
|
+
export type SetupPlayerOptions = Pick<
|
|
547
|
+
UpdateOptions,
|
|
548
|
+
| 'capabilities'
|
|
549
|
+
| 'forwardJumpInterval'
|
|
550
|
+
| 'backwardJumpInterval'
|
|
551
|
+
| 'progressUpdateEventInterval'
|
|
552
|
+
> & {
|
|
484
553
|
/**
|
|
485
|
-
*
|
|
486
|
-
*
|
|
554
|
+
* The initial play/pause intent, applied natively as soon as the player exists. Set it to
|
|
555
|
+
* `true` so the first queued track starts playing the moment it loads.
|
|
556
|
+
*
|
|
557
|
+
* Interleaves with `setPlayWhenReady` by strict last-write-wins, whether or not the
|
|
558
|
+
* player exists yet.
|
|
559
|
+
*
|
|
560
|
+
* @default false
|
|
487
561
|
*/
|
|
488
|
-
|
|
489
|
-
}
|
|
562
|
+
playWhenReady?: boolean
|
|
490
563
|
|
|
491
|
-
export interface PartialSetupPlayerOptions {
|
|
492
|
-
/** Android-specific configuration options for setup */
|
|
493
|
-
android?: PartialAndroidSetupPlayerOptions
|
|
494
|
-
/** iOS-specific configuration options for setup */
|
|
495
|
-
ios?: PartialIOSSetupPlayerOptions
|
|
496
564
|
/**
|
|
497
|
-
*
|
|
498
|
-
*
|
|
565
|
+
* The initial repeat mode, applied natively as soon as the player exists. Interleaves with
|
|
566
|
+
* `setRepeatMode` by strict last-write-wins, whether or not the player exists yet.
|
|
567
|
+
*
|
|
568
|
+
* @default 'off'
|
|
499
569
|
*/
|
|
500
|
-
|
|
570
|
+
repeatMode?: RepeatMode
|
|
501
571
|
|
|
502
572
|
/**
|
|
503
573
|
* Retry policy for load errors (network failures, timeouts, etc.)
|
|
504
|
-
* - `true`: Retry indefinitely with exponential backoff
|
|
574
|
+
* - `true`: Retry indefinitely with exponential backoff, under the default
|
|
575
|
+
* duration budgets (12s before first audio, 2 minutes after — see
|
|
576
|
+
* {@link RetryConfig})
|
|
505
577
|
* - `false`/`undefined`: No automatic retry (default)
|
|
506
578
|
* - `{ maxRetries: n }`: Retry up to n times with exponential backoff
|
|
507
|
-
* - `
|
|
579
|
+
* - `RetryConfig`: custom attempt and duration budgets
|
|
508
580
|
*
|
|
509
581
|
* Exponential backoff delays: 1s → 1.5s → 2.3s → 3.4s → 5s (capped)
|
|
510
582
|
*
|
|
511
583
|
* @default false
|
|
512
584
|
*/
|
|
513
585
|
retry?: boolean | RetryConfig
|
|
514
|
-
}
|
|
515
586
|
|
|
516
|
-
export interface PlayerOptions {
|
|
517
|
-
/** Android-specific configuration options for setup */
|
|
518
|
-
android?: AndroidSetupPlayerOptions
|
|
519
|
-
/** iOS-specific configuration options for setup */
|
|
520
|
-
ios?: PartialIOSSetupPlayerOptions
|
|
521
587
|
/**
|
|
522
|
-
*
|
|
523
|
-
*
|
|
588
|
+
* Keep the media session alive and controllable through a terminal playback error (e.g. a dead
|
|
589
|
+
* stream), so external controllers (Android Auto / CarPlay) keep their transport controls
|
|
590
|
+
* (next / previous) instead of tearing the session down. The error is still reported via
|
|
591
|
+
* `onPlaybackError` / `playbackState`; this only affects what the OS media session observes.
|
|
592
|
+
*
|
|
593
|
+
* Only Android can tear the session down, so this is the Android opt-out; on iOS the media
|
|
594
|
+
* session always stays controllable through errors (the player resolves a terminal error to
|
|
595
|
+
* paused and retains the now-playing).
|
|
596
|
+
* @default true
|
|
524
597
|
*/
|
|
525
|
-
|
|
598
|
+
keepSessionAliveOnError?: boolean
|
|
526
599
|
|
|
600
|
+
/** Android-specific options: engine construction and runtime, merged. */
|
|
601
|
+
android?: AndroidSetupOptions
|
|
602
|
+
/** iOS-specific options: audio session and runtime, merged. */
|
|
603
|
+
ios?: IOSSetupOptions
|
|
527
604
|
/**
|
|
528
|
-
*
|
|
529
|
-
*
|
|
530
|
-
* - `false`/`undefined`: No automatic retry (default)
|
|
531
|
-
* - `{ maxRetries: n }`: Retry up to n times with exponential backoff
|
|
532
|
-
* - `{ maxRetries: n, maxRetryDurationMs: m }`: Retry with custom timeout
|
|
605
|
+
* Controls what the player renders on the now-playing surface (lock screen / notification /
|
|
606
|
+
* Control Center / CarPlay / Android Auto).
|
|
533
607
|
*
|
|
534
|
-
*
|
|
608
|
+
* - `true` (default): publish the track's own title / artist.
|
|
609
|
+
* - `false`: don't manage the now-playing metadata at all.
|
|
610
|
+
* - a {@link FormatNowPlayingCallback}: render it yourself — the callback owns every line,
|
|
611
|
+
* including any transient status (buffering / reconnecting / offline / error), which the
|
|
612
|
+
* library no longer renders on your behalf.
|
|
535
613
|
*
|
|
536
|
-
* @default
|
|
614
|
+
* @default true
|
|
537
615
|
*/
|
|
538
|
-
|
|
616
|
+
nowPlaying?: boolean | FormatNowPlayingCallback
|
|
539
617
|
}
|
|
540
618
|
|
|
541
|
-
|
|
619
|
+
/** The normalized native now-playing fields, resolved from the public option. */
|
|
620
|
+
type NormalizedNowPlaying = Pick<
|
|
621
|
+
NativeSetupPlayerOptions,
|
|
622
|
+
'autoUpdateNowPlayingMetadata' | 'nowPlayingMetadataFormatter'
|
|
623
|
+
>
|
|
624
|
+
|
|
625
|
+
/** Resolves the public `nowPlaying` option to the normalized native fields. */
|
|
626
|
+
function resolveNowPlaying(
|
|
627
|
+
value: SetupPlayerOptions['nowPlaying']
|
|
628
|
+
): NormalizedNowPlaying {
|
|
629
|
+
if (typeof value === 'function') {
|
|
630
|
+
return {
|
|
631
|
+
autoUpdateNowPlayingMetadata: true,
|
|
632
|
+
nowPlayingMetadataFormatter: wrapNowPlayingFormatter(value)
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
// `undefined` defaults to on; `true`/`false` toggle the default mapping.
|
|
636
|
+
return {
|
|
637
|
+
autoUpdateNowPlayingMetadata: value ?? true,
|
|
638
|
+
nowPlayingMetadataFormatter: undefined
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
/**
|
|
643
|
+
* Wraps a {@link FormatNowPlayingCallback} so it never resolves the native callback to `null`.
|
|
644
|
+
*
|
|
645
|
+
* The callback contract lets consumers `return undefined` to mean "use the default". But Nitro's
|
|
646
|
+
* `Promise<T | undefined>.await()` throws `Failed to cast Object to T!` when the callback resolves
|
|
647
|
+
* to null/undefined — which surfaces on Android as the misleading "Cannot reject Promise … it is
|
|
648
|
+
* already resolved!" (the cast error is swallowed, then a reject is attempted on the
|
|
649
|
+
* already-resolved promise). So we coalesce `undefined` to an empty update before it crosses the
|
|
650
|
+
* boundary: the native side already falls back to the track's own title/artist for each missing
|
|
651
|
+
* field, so `{}` is equivalent to "use the default" without ever sending a null across.
|
|
652
|
+
*/
|
|
653
|
+
function wrapNowPlayingFormatter(
|
|
654
|
+
formatter: FormatNowPlayingCallback
|
|
655
|
+
): FormatNowPlayingCallback {
|
|
656
|
+
return (params) => formatter(params) ?? {}
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
/**
|
|
660
|
+
* The object's entries whose values aren't `undefined`. `null` stays: it's meaningful on some
|
|
661
|
+
* fields (`progressUpdateEventInterval: null` disables progress events, `notificationButtons:
|
|
662
|
+
* null` empties the layout), so only `undefined` means "not provided".
|
|
663
|
+
*/
|
|
664
|
+
function definedFields<T extends object>(obj: T): Partial<T> {
|
|
665
|
+
const out: Partial<T> = {}
|
|
666
|
+
for (const key in obj) {
|
|
667
|
+
if (obj[key] !== undefined) out[key] = obj[key]
|
|
668
|
+
}
|
|
669
|
+
return out
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
/** Spreads `value` under `key` only when it has at least one field. */
|
|
673
|
+
function nonEmpty<K extends string, T extends object>(
|
|
674
|
+
key: K,
|
|
675
|
+
value: T
|
|
676
|
+
): { [P in K]?: T } {
|
|
677
|
+
return Object.keys(value).length > 0
|
|
678
|
+
? ({ [key]: value } as { [P in K]?: T })
|
|
679
|
+
: {}
|
|
680
|
+
}
|
|
542
681
|
|
|
543
682
|
/**
|
|
544
|
-
* Initializes the player with the specified options
|
|
683
|
+
* Initializes the player with the specified options — the full launch description in one
|
|
684
|
+
* declarative, atomic call. Runtime options (`capabilities`, jump intervals,
|
|
685
|
+
* `notificationButtons`, …) and the initial `playWhenReady` / `repeatMode` are applied
|
|
686
|
+
* natively as part of setup itself, so there is no setup-then-command ordering for consumers
|
|
687
|
+
* to know about, and no window where the player exists without its options.
|
|
688
|
+
*
|
|
689
|
+
* Calling it again reconfigures the player in place: newly provided fields are merged over
|
|
690
|
+
* the previous ones, and the audio engine is rebuilt when construction-bound fields (buffers,
|
|
691
|
+
* wake mode, …) changed.
|
|
692
|
+
*
|
|
545
693
|
* @param options - The options to initialize the player with.
|
|
694
|
+
*
|
|
695
|
+
* @example
|
|
696
|
+
* ```ts
|
|
697
|
+
* await setupPlayer({
|
|
698
|
+
* retry: true,
|
|
699
|
+
* playWhenReady: true,
|
|
700
|
+
* repeatMode: 'queue',
|
|
701
|
+
* capabilities: { favorite: true },
|
|
702
|
+
* android: { audioContentType: 'music', notificationButtons: { overflow: ['favorite'] } },
|
|
703
|
+
* ios: { category: 'playback' }
|
|
704
|
+
* })
|
|
705
|
+
* ```
|
|
546
706
|
*/
|
|
547
707
|
export async function setupPlayer(
|
|
548
|
-
options:
|
|
708
|
+
options: SetupPlayerOptions = {}
|
|
549
709
|
): Promise<void> {
|
|
550
|
-
|
|
710
|
+
const {
|
|
711
|
+
nowPlaying,
|
|
712
|
+
capabilities,
|
|
713
|
+
forwardJumpInterval,
|
|
714
|
+
backwardJumpInterval,
|
|
715
|
+
progressUpdateEventInterval,
|
|
716
|
+
android = {},
|
|
717
|
+
ios = {},
|
|
718
|
+
...nativeSetup
|
|
719
|
+
} = options
|
|
720
|
+
|
|
721
|
+
// Split the merged public bags back into the wire taxonomy: construction fields stay under
|
|
722
|
+
// `android` / `ios`, runtime options nest under `options`. The consumer never has to learn
|
|
723
|
+
// which is which.
|
|
724
|
+
const {
|
|
725
|
+
appKilledPlaybackBehavior,
|
|
726
|
+
skipSilence,
|
|
727
|
+
notificationButtons,
|
|
728
|
+
...androidSetup
|
|
729
|
+
} = android
|
|
730
|
+
const {
|
|
731
|
+
playbackRates,
|
|
732
|
+
carPlayUpNextButton,
|
|
733
|
+
carPlayNowPlayingButtons,
|
|
734
|
+
...iosSetup
|
|
735
|
+
} = ios
|
|
736
|
+
const iosUpdate = definedFields({
|
|
737
|
+
playbackRates,
|
|
738
|
+
carPlayUpNextButton,
|
|
739
|
+
carPlayNowPlayingButtons
|
|
740
|
+
})
|
|
741
|
+
validateIOSUpdateOptions(iosUpdate)
|
|
742
|
+
|
|
743
|
+
const updates: NativeUpdateOptions = definedFields({
|
|
744
|
+
capabilities,
|
|
745
|
+
forwardJumpInterval,
|
|
746
|
+
backwardJumpInterval,
|
|
747
|
+
progressUpdateEventInterval,
|
|
748
|
+
...nonEmpty(
|
|
749
|
+
'android',
|
|
750
|
+
definedFields({
|
|
751
|
+
appKilledPlaybackBehavior,
|
|
752
|
+
skipSilence,
|
|
753
|
+
notificationButtons
|
|
754
|
+
})
|
|
755
|
+
),
|
|
756
|
+
...nonEmpty('ios', iosUpdate)
|
|
757
|
+
})
|
|
758
|
+
|
|
759
|
+
return nativeBrowser.setupPlayer({
|
|
760
|
+
...nativeSetup,
|
|
761
|
+
...nonEmpty('android', definedFields(androidSetup)),
|
|
762
|
+
...nonEmpty('ios', definedFields(iosSetup)),
|
|
763
|
+
...resolveNowPlaying(nowPlaying),
|
|
764
|
+
...nonEmpty('options', updates)
|
|
765
|
+
})
|
|
551
766
|
}
|