public/Connect-RHSM.ps1

<#
    .SYNOPSIS
    Connects to the Red Hat Subscription Management (RHSM) API.

    .DESCRIPTION
    Exchanges a Red Hat offline token for a short-lived bearer access token and stores the session in module scope.
    The access token is refreshed automatically when it is about to expire.

    .PARAMETER OfflineToken
    Specifies the Red Hat offline token as a SecureString. Generate one at https://access.redhat.com/management/api.

    .PARAMETER BaseUri
    Specifies the v1 API base URI. Defaults to https://api.access.redhat.com/management/v1.

    .PARAMETER BaseUriV2
    Specifies the v2 API base URI, used for activation keys. Defaults to https://console.redhat.com/api/rhsm/v2.

    .EXAMPLE
    $token = Read-Host -AsSecureString -Prompt 'Red Hat offline token'
    Connect-RHSM -OfflineToken $token

    .OUTPUTS
    [PSCustomObject].

    .LINK
    https://access.redhat.com/management/api/rhsm
#>


function Connect-RHSM {
    [CmdletBinding()]
    [OutputType([PSCustomObject])]
    param (
        [Parameter(Mandatory = $true)]
        [SecureString]$OfflineToken,

        [Parameter(Mandatory = $false)]
        [ValidateNotNullOrEmpty()]
        [String]$BaseUri = 'https://api.access.redhat.com/management/v1',

        [Parameter(Mandatory = $false)]
        [ValidateNotNullOrEmpty()]
        [String]$BaseUriV2 = 'https://console.redhat.com/api/rhsm/v2'
    )

    process {
        $token = Get-RHSMAccessToken -OfflineToken $OfflineToken

        $script:RHSMSession = [PSCustomObject]@{
            BaseUri      = $BaseUri
            BaseUriV2    = $BaseUriV2
            OfflineToken = $OfflineToken
            AccessToken  = $token.AccessToken
            ExpiresAt    = $token.ExpiresAt
        }

        [PSCustomObject]@{
            BaseUri   = $BaseUri
            ExpiresAt = $token.ExpiresAt
        }
    }
}