mirror of
https://github.com/gesellix/Bose-SoundTouch.git
synced 2026-08-18 08:36:13 +00:00
The HTTP port and on-device paths for the SoundTouch speaker were duplicated across pkg/client (unexported) and pkg/service/constants (under a service-layer prefix). Both spots needed the same values, and the next round of work (group/persistence handling in the CLI) would have created a third — or worse, dragged pkg/service into the CLI's dependency graph just for a port number. pkg/speaker is a no-deps leaf that holds the speaker-protocol constants: HTTPPort, the request paths, and the on-device persistence file locations (now including GroupServiceFileLocation, for the upcoming stereo-pair sync work). The client library, the service, the CLI, and tests can all import it without introducing a layering edge. This commit moves nothing into pkg/speaker that doesn't belong there — the service-specific constants (provider IDs, file names, date stub, etc.) stay in pkg/service/constants. Only the genuinely protocol-level values move. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
318 lines
17 KiB
Go
318 lines
17 KiB
Go
// Package constants defines file names, directories, and common values used by the service layer.
|
|
package constants
|
|
|
|
import "strconv"
|
|
|
|
// SourceProvider represents a media source provider configuration.
|
|
type SourceProvider struct {
|
|
ID int
|
|
Name string
|
|
Label string
|
|
CreatedOn string
|
|
UpdatedOn string
|
|
}
|
|
|
|
const (
|
|
// ProviderPandora is the identifier for Pandora.
|
|
ProviderPandora = "PANDORA"
|
|
// ProviderInternetRadio is the identifier for Internet Radio.
|
|
ProviderInternetRadio = "INTERNET_RADIO"
|
|
// ProviderOff is the identifier for Off.
|
|
ProviderOff = "OFF"
|
|
// ProviderLocal is the identifier for Local.
|
|
ProviderLocal = "LOCAL"
|
|
// ProviderAirplay is the identifier for AirPlay.
|
|
ProviderAirplay = "AIRPLAY"
|
|
// ProviderCuratedRadio is the identifier for Curated Radio.
|
|
ProviderCuratedRadio = "CURRATED_RADIO"
|
|
// ProviderStoredMusic is the identifier for Stored Music.
|
|
ProviderStoredMusic = "STORED_MUSIC"
|
|
// ProviderSlaveSource is the identifier for Slave Source.
|
|
ProviderSlaveSource = "SLAVE_SOURCE"
|
|
// ProviderAux is the identifier for Aux.
|
|
ProviderAux = "AUX"
|
|
// ProviderRecommendedInternetRadio is the identifier for Recommended Internet Radio.
|
|
ProviderRecommendedInternetRadio = "RECOMMENDED_INTERNET_RADIO"
|
|
// ProviderLocalInternetRadio is the identifier for Local Internet Radio.
|
|
ProviderLocalInternetRadio = "LOCAL_INTERNET_RADIO"
|
|
// ProviderGlobalInternetRadio is the identifier for Global Internet Radio.
|
|
ProviderGlobalInternetRadio = "GLOBAL_INTERNET_RADIO"
|
|
// ProviderHello is the identifier for Hello.
|
|
ProviderHello = "HELLO"
|
|
// ProviderDeezer is the identifier for Deezer.
|
|
ProviderDeezer = "DEEZER"
|
|
// ProviderSpotify is the identifier for Spotify.
|
|
ProviderSpotify = "SPOTIFY"
|
|
// ProviderIHeart is the identifier for iHeartRadio.
|
|
ProviderIHeart = "IHEART"
|
|
// ProviderSiriusXM is the identifier for SiriusXM.
|
|
ProviderSiriusXM = "SIRIUSXM"
|
|
// ProviderGooglePlayMusic is the identifier for Google Play Music.
|
|
ProviderGooglePlayMusic = "GOOGLE_PLAY_MUSIC"
|
|
// ProviderQQMusic is the identifier for QQMusic.
|
|
ProviderQQMusic = "QQMUSIC"
|
|
// ProviderAmazon is the identifier for Amazon Music.
|
|
ProviderAmazon = "AMAZON"
|
|
// ProviderLocalMusic is the identifier for Local Music Library.
|
|
ProviderLocalMusic = "LOCAL_MUSIC"
|
|
// ProviderWbmx is the identifier for WBMX.
|
|
ProviderWbmx = "WBMX"
|
|
// ProviderSoundcloud is the identifier for SoundCloud.
|
|
ProviderSoundcloud = "SOUNDCLOUD"
|
|
// ProviderTidal is the identifier for Tidal.
|
|
ProviderTidal = "TIDAL"
|
|
// ProviderTunein is the identifier for TuneIn Radio.
|
|
ProviderTunein = "TUNEIN"
|
|
// ProviderQPlay is the identifier for QPlay.
|
|
ProviderQPlay = "QPLAY"
|
|
// ProviderJuke is the identifier for Juke.
|
|
ProviderJuke = "JUKE"
|
|
// ProviderBbc is the identifier for BBC.
|
|
ProviderBbc = "BBC"
|
|
// ProviderDarfm is the identifier for DAR.fm.
|
|
ProviderDarfm = "DARFM"
|
|
// Provider7Digital is the identifier for 7digital.
|
|
Provider7Digital = "7DIGITAL"
|
|
// ProviderSaavn is the identifier for Saavn.
|
|
ProviderSaavn = "SAAVN"
|
|
// ProviderRdio is the identifier for Rdio.
|
|
ProviderRdio = "RDIO"
|
|
// ProviderPhoneMusic is the identifier for Phone Music.
|
|
ProviderPhoneMusic = "PHONE_MUSIC"
|
|
// ProviderAlexa is the identifier for Amazon Alexa.
|
|
ProviderAlexa = "ALEXA"
|
|
// ProviderRadioplayer is the identifier for Radioplayer.
|
|
// RADIOPLAYER is deprecated: https://www.radioplayer.de/apps/bose.html
|
|
ProviderRadioplayer = "RADIOPLAYER"
|
|
// ProviderRadioDotCom is the identifier for Radio.com.
|
|
ProviderRadioDotCom = "RADIO.COM"
|
|
// ProviderRadioCom is the identifier for Radio.com (alternate).
|
|
ProviderRadioCom = "RADIO_COM"
|
|
// ProviderSiriusXmEverest is the identifier for SiriusXM Everest.
|
|
ProviderSiriusXmEverest = "SIRIUSXM_EVEREST"
|
|
// ProviderRadioBrowser is the identifier for Radio Browser.
|
|
ProviderRadioBrowser = "RADIO_BROWSER"
|
|
// ProviderBluetooth is the identifier for Bluetooth.
|
|
ProviderBluetooth = "BLUETOOTH"
|
|
// ProviderBmx is the identifier for BMX.
|
|
ProviderBmx = "BMX"
|
|
// ProviderNotification is the identifier for Notifications.
|
|
ProviderNotification = "NOTIFICATION"
|
|
// ProviderAuxIn is the identifier for AUX IN.
|
|
ProviderAuxIn = "AUX_IN"
|
|
)
|
|
|
|
const (
|
|
// PandoraProviderID is the provider identifier for Pandora.
|
|
PandoraProviderID = 1
|
|
// InternetRadioProviderID is the provider identifier for Internet Radio.
|
|
InternetRadioProviderID = 2
|
|
// OffProviderID is the provider identifier for Off.
|
|
OffProviderID = 3
|
|
// LocalProviderID is the provider identifier for Local.
|
|
LocalProviderID = 4
|
|
// AirplayProviderID is the provider identifier for AirPlay.
|
|
AirplayProviderID = 5
|
|
// CuratedRadioProviderID is the provider identifier for Curated Radio.
|
|
CuratedRadioProviderID = 6
|
|
// StoredMusicProviderID is the provider identifier for Stored Music.
|
|
StoredMusicProviderID = 7
|
|
// SlaveSourceProviderID is the provider identifier for Slave Source.
|
|
SlaveSourceProviderID = 8
|
|
// AuxProviderID is the provider identifier for Aux.
|
|
AuxProviderID = 9
|
|
// RecommendedInternetRadioProviderID is the provider identifier for Recommended Internet Radio.
|
|
RecommendedInternetRadioProviderID = 10
|
|
// LocalInternetRadioProviderID is the provider identifier for Local Internet Radio.
|
|
LocalInternetRadioProviderID = 11
|
|
// GlobalInternetRadioProviderID is the provider identifier for Global Internet Radio.
|
|
GlobalInternetRadioProviderID = 12
|
|
// HelloProviderID is the provider identifier for Hello.
|
|
HelloProviderID = 13
|
|
// DeezerProviderID is the provider identifier for Deezer.
|
|
DeezerProviderID = 14
|
|
// SpotifyProviderID is the provider identifier for Spotify.
|
|
SpotifyProviderID = 15
|
|
// IHeartProviderID is the provider identifier for iHeartRadio.
|
|
IHeartProviderID = 16
|
|
// SiriusXMProviderID is the provider identifier for SiriusXM.
|
|
SiriusXMProviderID = 17
|
|
// GooglePlayMusicProviderID is the provider identifier for Google Play Music.
|
|
GooglePlayMusicProviderID = 18
|
|
// QQMusicProviderID is the provider identifier for QQMusic.
|
|
QQMusicProviderID = 19
|
|
// AmazonProviderID is the provider identifier for Amazon Music.
|
|
AmazonProviderID = 20
|
|
// LocalMusicProviderID is the provider identifier for Local Music Library.
|
|
LocalMusicProviderID = 21
|
|
// WbmxProviderID is the provider identifier for WBMX.
|
|
WbmxProviderID = 22
|
|
// SoundcloudProviderID is the provider identifier for SoundCloud.
|
|
SoundcloudProviderID = 23
|
|
// TidalProviderID is the provider identifier for Tidal.
|
|
TidalProviderID = 24
|
|
// TuneinProviderID is the provider identifier for TuneIn Radio.
|
|
TuneinProviderID = 25
|
|
// QPlayProviderID is the provider identifier for QPlay.
|
|
QPlayProviderID = 26
|
|
// JukeProviderID is the provider identifier for Juke.
|
|
JukeProviderID = 27
|
|
// BbcProviderID is the provider identifier for BBC.
|
|
BbcProviderID = 28
|
|
// DarfmProviderID is the provider identifier for DAR.fm.
|
|
DarfmProviderID = 29
|
|
// SevenDigitalProviderID is the provider identifier for 7digital.
|
|
SevenDigitalProviderID = 30
|
|
// SaavnProviderID is the provider identifier for Saavn.
|
|
SaavnProviderID = 31
|
|
// RdioProviderID is the provider identifier for Rdio.
|
|
RdioProviderID = 32
|
|
// PhoneMusicProviderID is the provider identifier for Phone Music.
|
|
PhoneMusicProviderID = 33
|
|
// AlexaProviderID is the provider identifier for Amazon Alexa.
|
|
AlexaProviderID = 34
|
|
// RadioplayerProviderID is the provider identifier for Radioplayer.
|
|
RadioplayerProviderID = 35
|
|
// RadioDotComProviderID is the provider identifier for Radio.com.
|
|
RadioDotComProviderID = 36
|
|
// RadioComProviderID is the provider identifier for Radio.com (alternate).
|
|
RadioComProviderID = 37
|
|
// SiriusXmEverestProviderID is the provider identifier for SiriusXM Everest.
|
|
SiriusXmEverestProviderID = 38
|
|
// RadioBrowserProviderID is the provider identifier for Radio Browser.
|
|
RadioBrowserProviderID = 39
|
|
// BluetoothProviderID is the provider identifier for Bluetooth.
|
|
BluetoothProviderID = 40
|
|
// BmxProviderID is the provider identifier for BMX.
|
|
BmxProviderID = 41
|
|
// NotificationProviderID is the provider identifier for Notifications.
|
|
NotificationProviderID = 42
|
|
// AuxInProviderID is the provider identifier for AUX IN.
|
|
AuxInProviderID = 43
|
|
)
|
|
|
|
// StaticProviders lists known source provider identifiers with their metadata.
|
|
var StaticProviders = []SourceProvider{
|
|
{ID: PandoraProviderID, Name: ProviderPandora, Label: "Pandora", CreatedOn: "2012-09-19T12:43:00.000+00:00", UpdatedOn: "2012-09-19T12:43:00.000+00:00"},
|
|
{ID: InternetRadioProviderID, Name: ProviderInternetRadio, Label: "Internet Radio", CreatedOn: "2012-09-19T12:43:00.000+00:00", UpdatedOn: "2012-09-19T12:43:00.000+00:00"},
|
|
{ID: OffProviderID, Name: ProviderOff, Label: "Off", CreatedOn: "2012-10-22T16:03:00.000+00:00", UpdatedOn: "2012-10-22T16:03:00.000+00:00"},
|
|
{ID: LocalProviderID, Name: ProviderLocal, Label: "Local", CreatedOn: "2012-10-22T16:04:00.000+00:00", UpdatedOn: "2012-10-22T16:04:00.000+00:00"},
|
|
{ID: AirplayProviderID, Name: ProviderAirplay, Label: "AirPlay", CreatedOn: "2012-10-22T16:04:00.000+00:00", UpdatedOn: "2012-10-22T16:04:00.000+00:00"},
|
|
{ID: CuratedRadioProviderID, Name: ProviderCuratedRadio, Label: "Curated Radio", CreatedOn: "2012-10-22T16:04:00.000+00:00", UpdatedOn: "2012-10-22T16:04:00.000+00:00"},
|
|
{ID: StoredMusicProviderID, Name: ProviderStoredMusic, Label: "Stored Music", CreatedOn: "2012-10-22T16:04:00.000+00:00", UpdatedOn: "2012-10-22T16:04:00.000+00:00"},
|
|
{ID: SlaveSourceProviderID, Name: ProviderSlaveSource, Label: "Slave Source", CreatedOn: "2012-10-22T16:04:00.000+00:00", UpdatedOn: "2012-10-22T16:04:00.000+00:00"},
|
|
{ID: AuxProviderID, Name: ProviderAux, Label: "Aux", CreatedOn: "2012-10-22T16:04:00.000+00:00", UpdatedOn: "2012-10-22T16:04:00.000+00:00"},
|
|
{ID: RecommendedInternetRadioProviderID, Name: ProviderRecommendedInternetRadio, Label: "Recommended Internet Radio", CreatedOn: "2013-01-10T09:45:00.000+00:00", UpdatedOn: "2013-01-10T09:45:00.000+00:00"},
|
|
{ID: LocalInternetRadioProviderID, Name: ProviderLocalInternetRadio, Label: "Local Internet Radio", CreatedOn: "2013-01-10T09:45:00.000+00:00", UpdatedOn: "2013-01-10T09:45:00.000+00:00"},
|
|
{ID: GlobalInternetRadioProviderID, Name: ProviderGlobalInternetRadio, Label: "Global Internet Radio", CreatedOn: "2013-01-10T09:45:00.000+00:00", UpdatedOn: "2013-01-10T09:45:00.000+00:00"},
|
|
{ID: HelloProviderID, Name: ProviderHello, Label: "Hello", CreatedOn: "2014-03-17T15:30:07.000+00:00", UpdatedOn: "2014-03-17T15:30:07.000+00:00"},
|
|
{ID: DeezerProviderID, Name: ProviderDeezer, Label: "Deezer", CreatedOn: "2014-03-17T15:30:27.000+00:00", UpdatedOn: "2014-03-17T15:30:27.000+00:00"},
|
|
{ID: SpotifyProviderID, Name: ProviderSpotify, Label: "Spotify", CreatedOn: "2014-03-17T15:30:27.000+00:00", UpdatedOn: "2014-03-17T15:30:27.000+00:00"},
|
|
{ID: IHeartProviderID, Name: ProviderIHeart, Label: "iHeartRadio", CreatedOn: "2014-03-17T15:30:27.000+00:00", UpdatedOn: "2014-03-17T15:30:27.000+00:00"},
|
|
{ID: SiriusXMProviderID, Name: ProviderSiriusXM, Label: "SiriusXM", CreatedOn: "2014-12-04T19:49:55.000+00:00", UpdatedOn: "2014-12-04T19:49:55.000+00:00"},
|
|
{ID: GooglePlayMusicProviderID, Name: ProviderGooglePlayMusic, Label: "Google Play Music", CreatedOn: "2014-12-04T19:49:55.000+00:00", UpdatedOn: "2014-12-04T19:49:55.000+00:00"},
|
|
{ID: QQMusicProviderID, Name: ProviderQQMusic, Label: "QQMusic", CreatedOn: "2014-12-04T19:49:55.000+00:00", UpdatedOn: "2014-12-04T19:49:55.000+00:00"},
|
|
{ID: AmazonProviderID, Name: ProviderAmazon, Label: "Amazon Music", CreatedOn: "2014-12-04T19:49:55.000+00:00", UpdatedOn: "2014-12-04T19:49:55.000+00:00"},
|
|
{ID: LocalMusicProviderID, Name: ProviderLocalMusic, Label: "Local Music Library", CreatedOn: "2015-07-13T12:00:00.000+00:00", UpdatedOn: "2015-07-13T12:00:00.000+00:00"},
|
|
{ID: WbmxProviderID, Name: ProviderWbmx, Label: "WBMX", CreatedOn: "2016-04-08T17:27:21.000+00:00", UpdatedOn: "2016-04-08T17:27:21.000+00:00"},
|
|
{ID: SoundcloudProviderID, Name: ProviderSoundcloud, Label: "SoundCloud", CreatedOn: "2016-04-08T17:27:21.000+00:00", UpdatedOn: "2016-04-08T17:27:21.000+00:00"},
|
|
{ID: TidalProviderID, Name: ProviderTidal, Label: "Tidal", CreatedOn: "2016-04-08T17:27:21.000+00:00", UpdatedOn: "2016-04-08T17:27:21.000+00:00"},
|
|
{ID: TuneinProviderID, Name: ProviderTunein, Label: "TuneIn Radio", CreatedOn: "2016-04-08T17:27:21.000+00:00", UpdatedOn: "2016-04-08T17:27:21.000+00:00"},
|
|
{ID: QPlayProviderID, Name: ProviderQPlay, Label: "QPlay", CreatedOn: "2016-06-17T18:00:54.000+00:00", UpdatedOn: "2016-06-17T18:00:54.000+00:00"},
|
|
{ID: JukeProviderID, Name: ProviderJuke, Label: "Juke", CreatedOn: "2016-08-01T13:53:40.000+00:00", UpdatedOn: "2016-08-01T13:53:40.000+00:00"},
|
|
{ID: BbcProviderID, Name: ProviderBbc, Label: "BBC", CreatedOn: "2016-08-01T13:53:40.000+00:00", UpdatedOn: "2016-08-01T13:53:40.000+00:00"},
|
|
{ID: DarfmProviderID, Name: ProviderDarfm, Label: "DAR.fm", CreatedOn: "2016-08-01T13:53:40.000+00:00", UpdatedOn: "2016-08-01T13:53:40.000+00:00"},
|
|
{ID: SevenDigitalProviderID, Name: Provider7Digital, Label: "7digital", CreatedOn: "2016-08-01T13:53:40.000+00:00", UpdatedOn: "2016-08-01T13:53:40.000+00:00"},
|
|
{ID: SaavnProviderID, Name: ProviderSaavn, Label: "Saavn", CreatedOn: "2016-08-01T13:53:40.000+00:00", UpdatedOn: "2016-08-01T13:53:40.000+00:00"},
|
|
{ID: RdioProviderID, Name: ProviderRdio, Label: "Rdio", CreatedOn: "2016-08-01T13:53:40.000+00:00", UpdatedOn: "2016-08-01T13:53:40.000+00:00"},
|
|
{ID: PhoneMusicProviderID, Name: ProviderPhoneMusic, Label: "Phone Music", CreatedOn: "2016-10-26T14:42:49.000+00:00", UpdatedOn: "2016-10-26T14:42:49.000+00:00"},
|
|
{ID: AlexaProviderID, Name: ProviderAlexa, Label: "Amazon Alexa", CreatedOn: "2017-12-04T19:18:47.000+00:00", UpdatedOn: "2017-12-04T19:18:47.000+00:00"},
|
|
{ID: RadioplayerProviderID, Name: ProviderRadioplayer, Label: "Radioplayer", CreatedOn: "2019-05-28T18:21:20.000+00:00", UpdatedOn: "2019-05-28T18:21:20.000+00:00"},
|
|
{ID: RadioDotComProviderID, Name: ProviderRadioDotCom, Label: "Radio.com", CreatedOn: "2019-05-28T18:21:41.000+00:00", UpdatedOn: "2019-05-28T18:21:41.000+00:00"},
|
|
{ID: RadioComProviderID, Name: ProviderRadioCom, Label: "Radio.com", CreatedOn: "2019-06-13T17:30:47.000+00:00", UpdatedOn: "2019-06-13T17:30:47.000+00:00"},
|
|
{ID: SiriusXmEverestProviderID, Name: ProviderSiriusXmEverest, Label: "SiriusXM Everest", CreatedOn: "2019-11-25T18:00:33.000+00:00", UpdatedOn: "2019-11-25T18:00:33.000+00:00"},
|
|
{ID: RadioBrowserProviderID, Name: ProviderRadioBrowser, Label: "Radio Browser", CreatedOn: "2026-03-14T22:47:00.000+00:00", UpdatedOn: "2026-03-14T22:47:00.000+00:00"},
|
|
{ID: BluetoothProviderID, Name: ProviderBluetooth, Label: "Bluetooth", CreatedOn: "2012-10-22T16:04:00.000+00:00", UpdatedOn: "2012-10-22T16:04:00.000+00:00"},
|
|
{ID: BmxProviderID, Name: ProviderBmx, Label: "BMX", CreatedOn: "2012-10-22T16:04:00.000+00:00", UpdatedOn: "2012-10-22T16:04:00.000+00:00"},
|
|
{ID: NotificationProviderID, Name: ProviderNotification, Label: "Notifications", CreatedOn: "2012-10-22T16:04:00.000+00:00", UpdatedOn: "2012-10-22T16:04:00.000+00:00"},
|
|
{ID: AuxInProviderID, Name: ProviderAuxIn, Label: "AUX IN", CreatedOn: "2012-10-22T16:04:00.000+00:00", UpdatedOn: "2012-10-22T16:04:00.000+00:00"},
|
|
}
|
|
|
|
// GetSourceLabel returns a user-friendly label for a source type.
|
|
func GetSourceLabel(sourceType string) string {
|
|
for _, provider := range StaticProviders {
|
|
if provider.Name == sourceType {
|
|
return provider.Label
|
|
}
|
|
}
|
|
|
|
return sourceType
|
|
}
|
|
|
|
// GetProviderName returns the human-readable name for a provider ID.
|
|
func GetProviderName(providerID string) string {
|
|
id, err := strconv.Atoi(providerID)
|
|
if err != nil {
|
|
return providerID
|
|
}
|
|
|
|
for _, p := range StaticProviders {
|
|
if p.ID == id {
|
|
return p.Name
|
|
}
|
|
}
|
|
|
|
return providerID
|
|
}
|
|
|
|
// GetProviderLabel returns the user-friendly label for a provider ID (e.g. "TuneIn Radio", "Spotify").
|
|
func GetProviderLabel(providerID string) string {
|
|
id, err := strconv.Atoi(providerID)
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
|
|
for _, p := range StaticProviders {
|
|
if p.ID == id {
|
|
return p.Label
|
|
}
|
|
}
|
|
|
|
return ""
|
|
}
|
|
|
|
// GetProviders returns a list of known source provider names.
|
|
func GetProviders() []string {
|
|
var providers []string
|
|
for _, p := range StaticProviders {
|
|
providers = append(providers, p.Name)
|
|
}
|
|
|
|
return providers
|
|
}
|
|
|
|
// Common file and path constants used by the datastore and setup logic.
|
|
const (
|
|
DevicesDir = "devices"
|
|
DeviceInfoFile = "DeviceInfo.xml"
|
|
PresetsFile = "Presets.xml"
|
|
RecentsFile = "Recents.xml"
|
|
SourcesFile = "Sources.xml"
|
|
|
|
// Speaker-protocol constants (HTTP port, paths, on-device file
|
|
// locations) moved to github.com/gesellix/bose-soundtouch/pkg/speaker
|
|
// so the client library and CLI can share them without depending on
|
|
// the service package.
|
|
|
|
// DateStr is the hardcoded date used in many Bose XML responses
|
|
DateStr = "2012-09-19T12:43:00.000+00:00"
|
|
|
|
// XMLHeader is the standard XML declaration for Bose SoundTouch responses
|
|
XMLHeader = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`
|
|
|
|
// CredentialTypeToken is the standard token credential type.
|
|
CredentialTypeToken = "token"
|
|
// CredentialTypeTokenV3 is the token version 3 credential type, used for Spotify.
|
|
CredentialTypeTokenV3 = "token_version_3"
|
|
)
|