Private/Runtime/Import-OpenApiPersistedContext.ps1

function Import-OpenApiPersistedContext {
    <#
    .SYNOPSIS
        Loads a context saved with Set-OpenApiContext -Persist (settings JSON and module secrets), or returns $null when none is saved.
    #>

    [CmdletBinding()]
    [OutputType([pscustomobject])]
    param(
        [Parameter(Mandatory)]
        [string]$Service
    )

    $path = Get-OpenApiContextSettingPath -Service $Service
    if (-not (Test-Path -LiteralPath $path)) {
        return $null
    }
    $settings = [System.IO.File]::ReadAllText($path) | ConvertFrom-Json
    $secrets = @{}
    foreach ($kind in @($settings.Secrets)) {
        if ([string]::IsNullOrEmpty($kind)) {
            continue
        }
        try {
            $secrets[$kind] = Get-ModuleSecret -ModuleName 'tcs.openapi' -Name "$Service.$kind" -ErrorAction Stop
        }
        catch {
            Write-Warning -Message "The saved $kind of the '$Service' context could not be read: $($_.Exception.Message)"
        }
    }
    $header = [ordered]@{}
    if ($null -ne $settings.Header) {
        foreach ($property in $settings.Header.PSObject.Properties) {
            $header[$property.Name] = [string]$property.Value
        }
    }
    $timeout = 100
    if ($null -ne $settings.TimeoutSec) {
        $timeout = [int]$settings.TimeoutSec
    }
    $maxRetries = 3
    if ($null -ne $settings.MaxRetries) {
        $maxRetries = [int]$settings.MaxRetries
    }
    $contextParameters = @{
        Service              = $Service
        BaseUri              = [string]$settings.BaseUri
        ApiKey               = $secrets['ApiKey']
        Credential           = $secrets['Credential']
        BearerToken          = $secrets['BearerToken']
        ClientId             = [string]$settings.ClientId
        ClientSecret         = $secrets['ClientSecret']
        TokenUri             = [string]$settings.TokenUri
        Scope                = @($settings.Scope | Where-Object -FilterScript { $null -ne $_ } | ForEach-Object -Process { [string]$_ })
        Header               = $header
        TimeoutSec           = $timeout
        Proxy                = [string]$settings.Proxy
        ProxyCredential      = $secrets['ProxyCredential']
        SkipCertificateCheck = [bool]$settings.SkipCertificateCheck
        MaxRetries           = $maxRetries
        Persisted            = $true
    }
    return (New-OpenApiContext @contextParameters)
}