Public/Authentication/Get-FloRecruitSession.ps1

function Get-FloRecruitSession {
    <#
    .SYNOPSIS
        Gets information about the current FloRecruit session.

    .DESCRIPTION
        Returns information about the current FloRecruit session including connection status,
        token expiry, and rate limiting statistics. Does not return credentials.

    .EXAMPLE
        Get-FloRecruitSession

    .OUTPUTS
        PSCustomObject with session information.
    #>

    [CmdletBinding()]
    param()

    if (-not $Script:FloRecruitSession) {
        Write-Warning "Not connected to FloRecruit. Use Connect-FloRecruit to establish a session."
        return $null
    }

    $isTokenExpired = $Script:FloRecruitSession.TokenExpiry -lt (Get-Date)
    $timeUntilExpiry = $Script:FloRecruitSession.TokenExpiry - (Get-Date)

    # Calculate rate limit window info
    $windowElapsed = ((Get-Date) - $Script:FloRecruitSession.RateLimitWindowStart).TotalSeconds
    $windowRemaining = $Script:RateLimitWindowSeconds - $windowElapsed
    $requestsRemaining = $Script:RateLimitMaxRequests - $Script:FloRecruitSession.RequestCount

    return [PSCustomObject]@{
        PSTypeName          = 'FloRecruit.SessionInfo'
        OrganizationName    = $Script:FloRecruitSession.OrganizationName
        Email               = $Script:FloRecruitSession.Email
        BaseUrl             = $Script:FloRecruitSession.BaseUrl
        ConnectedAt         = $Script:FloRecruitSession.ConnectedAt
        TokenExpiry         = $Script:FloRecruitSession.TokenExpiry
        IsTokenExpired      = $isTokenExpired
        TimeUntilExpiry     = if ($isTokenExpired) { $null } else { $timeUntilExpiry }
        RequestsInWindow    = $Script:FloRecruitSession.RequestCount
        RequestsRemaining   = $requestsRemaining
        WindowRemaining     = [timespan]::FromSeconds($windowRemaining)
    }
}