Public/Connect-Universe.ps1

function Connect-Universe {
    [CmdletBinding(DefaultParameterSetName = 'Interactive')]
    param (
        [Parameter(Mandatory = $false, ParameterSetName = "ATP")]
        [String] $AccessTokenProfile,
        
        [Parameter(Mandatory = $false, ParameterSetName = "Interactive")]
        [String] $TenantId = "common",
        
        [Parameter(Mandatory = $false, ParameterSetName = "Interactive")]
        [Parameter(Mandatory = $false, ParameterSetName = "ATP")]
        [ValidateSet("Production", "Development")]
        [String] $Environment = "Production",
        
        [Parameter(Mandatory = $false)]
        [String] $FQDN
    )

    process {
        if ($PSBoundParameters.ContainsKey('FQDN')) {
            $Script:FQDN = $FQDN
        }
        elseif ($Environment -eq "Development") {
            $Script:FQDN = "dev-api.byfortytwo.com"
        }
        else {
            $Script:FQDN = "api.fortytwo.io"
        }

        # If the ATP parameter set is used, verify that the access token profile exists:
        if ($PSCmdlet.ParameterSetName -eq "ATP") {
            if (!(Get-EntraIDAccessTokenProfile -Profile $AccessTokenProfile)) {
                throw "Access token profile '$AccessTokenProfile' not found. Please create it using New-EntraIDAccessTokenProfile."
            }
            Write-Verbose "Using access token profile '$AccessTokenProfile' to connect to Fortytwo Universe."
            $Script:AccessTokenProfile = $AccessTokenProfile
        }
        else {
            $Script:AccessTokenProfile = "Fortytwo.Universe.Interactive"
            
            if ($Environment -eq "Production") {
                Write-Verbose "Creating interactive access token profile '$Script:AccessTokenProfile' for tenant '$TenantId'."
                Add-EntraIDInteractiveUserAccessTokenProfile -Name $Script:AccessTokenProfile -TenantId $TenantId -ClientId "68bf2f1d-b9e1-4477-8b90-81314861f05f" -Scope "https://api.fortytwo.io/.default"
            }
            else {
                Write-Verbose "Creating interactive access token profile '$Script:AccessTokenProfile' for tenant '$TenantId' (DEVELOPMENT)."
                Add-EntraIDInteractiveUserAccessTokenProfile -Name $Script:AccessTokenProfile -TenantId $TenantId -ClientId "b24eb00a-7f91-489b-b321-3b018da0e8a8" -Scope "api://c61cb4dd-35bf-4db9-b152-58e223782c11/.default"
            }
        }

        Write-Verbose "Connected to Fortytwo IAM Core API at '$Script:FQDN' using access token profile '$Script:AccessTokenProfile'."
    }
}