PSNexosisClient.psm1

#Requires -Version 3.0
#Get public and private function definition files.
$Public  = @( Get-ChildItem -Path $PSScriptRoot\Public\*.ps1 -ErrorAction SilentlyContinue )
$Private = @( Get-ChildItem -Path $PSScriptRoot\Private\*.ps1 -ErrorAction SilentlyContinue )

$moduleVersion = (Test-ModuleManifest -Path $PSScriptRoot\PSNexosisClient.psd1).Version

Foreach($import in @($Public + $Private))
{
    Try
    {
        . $import.fullname
    }
    Catch
    {
        Write-Error -Message "Failed to import function $($import.fullname): $_"
    }
}

Add-Type -AssemblyName System.Web

# Setup Constant Variables
Set-Variable -Name UserAgent -Option Constant -Visibility Private -Scope Script -Value "Nexosis-PS-API-Client/$moduleVersion"
Set-Variable -Name MaxPageSize -Option Constant -Visibility Public -Scope Script -Value 1000
Set-Variable -Name ServerDefaultPageSize -Option Constant -Visibility Public -Scope Script -Value 100
Set-Variable -Name ApiBaseUrl -Option Constant -Visibility Public -Scope Script -Value 'https://ml.nexosis.com/v1'

if ($null -eq $Env:NEXOSIS_BASE_TEST_URL) {
    $BaseUrl = $script:ApiBaseUrl
 } else {
    $BaseUrl = ($Env:NEXOSIS_BASE_TEST_URL)
 }

Write-Verbose $script:UserAgent

Enum ResultInterval
{
    Hour
    Day
    Week
    Month
    Year
}

# Setup a hashtable of configurable variables with Defaults
$script:PSNexosisVars = new-object PSObject -Property @{
    ApiKey = $Env:NEXOSIS_API_KEY
    ApiBaseUrl = $BaseUrl
    DefaultPageSize=100
}

Add-Type -TypeDefinition @"
using System;
using System.Management.Automation;
using System.Collections.Generic;
using System.Net;

public class NexosisClientException : Exception
{
    public NexosisClientException(string message, Exception inner) : base(message, inner) { }

    public NexosisClientException(string message, HttpStatusCode statusCode) : base(message)
    {
        StatusCode = statusCode;
        ErrorResponse = null;
    }

    public NexosisClientException(string message, PSObject response) : base(message)
    {
        StatusCode = (HttpStatusCode)response.Properties["StatusCode"].Value;
        ErrorResponse = response;
    }

    public HttpStatusCode StatusCode { get; set; }
    public PSObject ErrorResponse { get; set; }
}
"@


# Export all public functions
Export-ModuleMember -Function $Public.Basename