Public/Disconnect-Infisical.ps1

# Disconnect-Infisical.ps1
# Clears the module-scoped Infisical session, ending the authenticated connection.
# Called by: User directly, when finished with Infisical operations.
# Dependencies: InfisicalSession class

function Disconnect-Infisical {
    <#
    .SYNOPSIS
        Disconnects from the Infisical API and clears the session.

    .DESCRIPTION
        Clears the module-scoped Infisical session, removing stored credentials
        and access tokens from memory. Supports -WhatIf and -Confirm for safety.
        After disconnecting, all secret commands will require a new Connect-Infisical call.

    .EXAMPLE
        Disconnect-Infisical

        Clears the current Infisical session.

    .EXAMPLE
        Disconnect-Infisical -Verbose

        Clears the session with verbose output confirming the disconnection.

    .OUTPUTS
        None

    .NOTES
        This does not revoke tokens on the server side. The access token simply
        becomes unavailable locally. For UniversalAuth, the token will expire
        according to its server-configured TTL.

    .LINK
        Connect-Infisical
    #>

    [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Low')]
    [OutputType([void])]
    param()

    if ($PSCmdlet.ShouldProcess('Infisical session', 'Disconnect')) {
        if ($null -ne $script:InfisicalSession) {
            Write-Verbose "Disconnect-Infisical: Clearing session for $($script:InfisicalSession.ApiUrl)"
            # Dispose SecureStrings to immediately zero their unmanaged buffers
            if ($null -ne $script:InfisicalSession.AccessToken) {
                $script:InfisicalSession.AccessToken.Dispose()
            }
            if ($null -ne $script:InfisicalSession.ClientSecret) {
                $script:InfisicalSession.ClientSecret.Dispose()
            }
        }
        else {
            Write-Verbose 'Disconnect-Infisical: No active session to clear.'
        }

        $script:InfisicalSession = $null
        Write-Verbose 'Disconnect-Infisical: Session cleared.'
    }
}