Private/Invoke-Api.ps1
function Invoke-Api { param( [uri]$Uri, [string]$Method = "GET", [AllowNull()][Object]$Body, [switch]$IgnoreVault = $false ) begin { if (-not $IgnoreVault) { try { $userId = (Get-Secret -Name "HABITICA_USER_ID" -Vault "PSHabitica" -AsPlainText) $token = (Get-Secret -Name "HABITICA_API_TOKEN" -Vault "PSHabitica" -AsPlainText) $client = (Get-Secret -Name "HABITICA_CLIENT" -Vault "PSHabitica" -AsPlainText) } catch { Throw "Authentication metadata not found. Please reconnect!" } } } process { $escapedUri = [URI]::EscapeUriString("$HABITICA_API_URL/$Uri") $scheme, $rest = $escapedUri -split "://", 2 $cleanedRest = $rest -replace "/{2,}", "/" $Uri = "$($scheme)://$cleanedRest"; $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" $headers.Add("Content-Type", "application/json") $headers.Add("x-client", $client) $headers.Add("x-api-key", $token) $headers.Add("x-api-user", $userId) $response = Invoke-RestMethod $Uri -Method $Method -Headers $headers -Body ($Body | ConvertTo-Json -Depth 10) return $response } } |