Private/Initialize-APIKey.ps1
using namespace System.Runtime.InteropServices function Initialize-APIKey { [CmdletBinding()] [OutputType([securestring])] param( [Parameter(Mandatory, Position = 0)] [AllowNull()] [securestring][SecureStringTransformation()]$ApiKey, [Parameter()] [bool]$SearchGlobal = $true, [Parameter()] [bool]$SearchEnv = $true ) if ($null -ne $ApiKey) { $p = DecryptSecureString $ApiKey } else { # Search API key below priorities. # 1. Global variable "OPENAI_API_KEY" if ($SearchGlobal -and $null -ne $global:OPENAI_API_KEY -and $global:OPENAI_API_KEY -is [string]) { $p = [string]$global:OPENAI_API_KEY $ApiKey = $p Write-Verbose -Message 'API Key found in global variable "OPENAI_API_KEY".' } # 2. Environment variable "OPENAI_API_KEY" elseif ($SearchEnv -and $null -ne $env:OPENAI_API_KEY -and $env:OPENAI_API_KEY -is [string]) { $p = [string]$env:OPENAI_API_KEY $ApiKey = $p Write-Verbose -Message 'API Key found in environment variable "OPENAI_API_KEY".' } else { Write-Error -Exception ([System.ArgumentException]::new('Please specify your OpenAI API key to "ApiKey" parameter.')) return } } $pattern = switch -CaseSensitive -Wildcard ($p) { 'sk-proj-*' { '(sk-proj-.{3})[a-z0-9\-_.~+/]+([^\s]{2})'; continue } 'sk-*' { '(sk-.{3})[a-z0-9\-_.~+/]+([^\s]{2})'; continue } default { '^(.{3})[a-z0-9\-_.~+/]+([^\s]{2})' } } ## Set up masking patterns $MaskPatterns = [System.Collections.Generic.List[Tuple[regex, string]]]::new() $MaskPatterns.Add([Tuple[regex, string]]::new($pattern, '$1***************$2')) $MaskPatterns.Add([Tuple[regex, string]]::new([regex]::Escape($p), '<OpenAI API Key>')) Write-Verbose -Message ('API key to be used is ' + (Get-MaskedString -Input $p -MaskPatterns $MaskPatterns)) $p = $null $ApiKey } |