Functions/UserData/Get-KETradeBalance.ps1

function Get-KETradeBalance {
    <#
    .SYNOPSIS
    Retrieves the trade balance for the specified Kraken exchange account.
     
    .DESCRIPTION
    The Get-KETradeBalance function retrieves the trade balance for the specified Kraken exchange account.
     
    .PARAMETER ApiKey
    The API key for the Kraken exchange account.
     
    .PARAMETER ApiSecret
    The encoded API secret for the Kraken exchange account.
     
    .LINK
    For more information, see the Kraken API documentation:
    https://docs.kraken.com/rest/#tag/User-Data/operation/getTradeBalance
 
    .EXAMPLE
    PS C:\> Get-KETradeBalance -ApiKey "MY_API_KEY" -ApiSecret "encoded_MY_API_SECRET"
    Retrieves the trade balance for the Kraken exchange account associated with the specified API key and encoded secret.
     
    .NOTES
    The KrakenExchange PowerShell module is not affiliated with or endorsed by Kraken exchange.
    Author: wnapierala [@] hotmail.com, chatGPT
    Date: 04.2023
    #>
    
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $false)]
        [string]$ApiKey = ([Environment]::GetEnvironmentVariable('KE_API_KEY', "User")),

        [Parameter(Mandatory = $false)]
        [string]$ApiSecret = ([Environment]::GetEnvironmentVariable('KE_API_SECRET', "User"))

    )

    Write-Debug $MyInvocation.ScriptName
    Write-Debug "APIKey env.: $([Environment]::GetEnvironmentVariable('KE_API_KEY', "User"))"
    Write-Debug "APIKey arg.: ${ApiKey}"
    Write-Debug "APISecret env.: $([Environment]::GetEnvironmentVariable('KE_API_SECRET', "User"))"
    Write-Debug "APISecret arg.: ${ApiSecret}"

    # Check if encoded ApiSecret is provided or needs to be retrieved
    if (-not $ApiSecret) {
        Disconnect-KExchange
        Connect-KExchange
        $ApiKey = ([Environment]::GetEnvironmentVariable('KE_API_KEY', "User"))
        $ApiSecretEncoded = $ApiSecret = ([Environment]::GetEnvironmentVariable('KE_API_SECRET', "User"))
    }
    else {
        $ApiSecretEncoded = $ApiSecret
    }

    # Define User-Agent header
    $UserAgent = "Powershell Module KrakenExchange/1.0"

    # Define API endpoint and version
    $endpoint = "https://api.kraken.com"
    $TradeBalanceMethod = "/0/private/TradeBalance"
    $TradeBalanceUrl = $endpoint + $TradeBalanceMethod

    # Generate nonce for API request
    $nonce = [Math]::Round((New-TimeSpan -Start "1/1/1970").TotalMilliseconds)

    # Define parameters for API request
    $TradeBalanceParam = [ordered]@{
        "nonce" = $nonce
    }

    Write-Debug "APIKey: $([Environment]::GetEnvironmentVariable('KE_API_KEY', "User"))"
    Write-Debug "APISecret: $([Environment]::GetEnvironmentVariable('KE_API_SECRET', "User"))"

    # Generate signature for API request
    $signature = Set-KESignature -Payload $TradeBalanceParam -URI $TradeBalanceMethod -ApiSecret $ApiSecretEncoded

    # Define headers for API request
    $TradeBalanceHeaders = @{ 
        "API-Key"    = $apiKey; 
        "API-Sign"   = $signature; 
        "User-Agent" = $useragent
    }

    # Send API request and retrieve response
    $TradeBalanceResponse = Invoke-RestMethod -Uri $TradeBalanceUrl -Method Post -body $TradeBalanceParam -Headers $TradeBalanceHeaders
    
    if ($TradeBalanceResponse.error -contains "EAPI:Invalid key") {
        [Environment]::SetEnvironmentVariable("KE_API_KEY", "", "User")
        Connect-KExchange
    }

    # Return the response
    return $TradeBalanceResponse
}