internal/functions/oauth/Get-ProfiledToken.ps1

function Get-ProfiledToken
{
    [CmdletBinding()]
    param (
        [Parameter(Position = 0, Mandatory = $false)]
        [string]
        $MailboxName,
        [Parameter(Position = 0, Mandatory = $false)]
        [string]
        $ResourceURL
    )
    Process
    {
        if([String]::IsNullOrEmpty($ResourceURL)){
            $ResourceURL = "graph.microsoft.com" 
        }
        if($Script:TokenCache.ContainsKey($ResourceURL)){
            $AccessToken = $null
            if([String]::IsNullOrEmpty($MailboxName)){
                $firstToken = $Script:TokenCache[$ResourceURL].GetEnumerator() | select -first 1
                $AccessToken =  $firstToken.Value
            }
            else
            {
                $HostDomain = (New-Object system.net.Mail.MailAddress($MailboxName)).Host.ToLower()
                if ($Script:TokenCache[$ResourceURL].ContainsKey($HostDomain))
                {                
                    $AccessToken = $Script:TokenCache[$ResourceURL][$HostDomain]
                }
            }
            if($AccessToken -ne $null){
                $MailboxName = $AccessToken.mailbox
                #Check for expired Token
                $minTime = new-object DateTime(1970, 1, 1, 0, 0, 0, 0, [System.DateTimeKind]::Utc);
                $expiry = $minTime.AddSeconds($AccessToken.expires_on)
                if ($expiry -le [DateTime]::Now.ToUniversalTime().AddMinutes(10))
                {
                    if ([bool]($AccessToken.PSobject.Properties.name -match "refresh_token"))
                    {
                            write-host "Refresh Token"
                            $AccessToken = Invoke-RefreshAccessToken -MailboxName $MailboxName -AccessToken $AccessToken
                    }
                    else
                    {
                        throw "App Token has expired"
                    }
                    
                }
                return $AccessToken
            }
            
        }

    }
}