Public/Start-SpotifySession.ps1

<#
.SYNOPSIS
Authenticates to the Spotify API

.DESCRIPTION
Authenticates to the Spotify API, requesting all scopes required for any
function in this module, removing the need to authenticate multiple times.

.PARAMETER Scopes
Optional. Prompts the user to authenticate for the user-provided list of scopes.

.PARAMETER ClientId
Optional. The ClientId of the app you registered in the Spotify developer
portal.

.PARAMETER RedirectURI
Optional. The redirect URI used for OAuth authentication. Must match what is
configured in the Spotify developer portal.

.PARAMETER ConfigFile
Optional. The path to a JSON configuration file containing 'ClientId' and
'RedirectURI' properties.

.EXAMPLE
Start-SpotifySession
#>

function Start-SpotifySession {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$false)]
        [string[]] $Scopes = $script:ALL_SCOPES,

        [Parameter(Mandatory=$false)]
        [string] $ClientId,

        [Parameter(Mandatory=$false)]
        [string] $RedirectURI,

        [ValidateScript({Test-Path $_})]
        [Parameter(Mandatory=$false)]
        [string] $ConfigFile
    )
    
    Set-StrictMode -Version 1.0
    $ErrorActionPreference = 'Stop'

    # authorization
    $PSBoundParameters.Add(
        'Scopes',
        $ALL_SCOPES
    ) | Out-Null
    try {
        Get-SpotifyToken @PSBoundParameters | Out-Null
    }
    catch {
        Write-Error (
            "There was a problem authenticating to the Spotify API.`n" +
            "Please review the Authentication docs at $script:PROJECT_URL.`n" +
            "Error message: " + $_.Exception.Message
        )
    }

    Write-Output "${script:GREEN}Connected.${script:RESETANSI}"
}