DNS.1.1.1.1.psm1

Enum DnsQueryType {
    A = 1
    NS = 2
    MD = 3
    MF = 4
    CNAME = 5
    SOA = 6
    MB = 7
    MG = 8
    MR = 9
    NULL = 10
    WKS = 11
    PTR = 12
    HINFO = 13
    MINFO = 14
    MX = 15
    TXT = 16
    RP = 17
    AFSDB = 18
    X25 = 19
    ISDN = 20
    RT = 21
    NSAP = 22
    NSAPPTR = 23
    SIG = 24
    KEY = 25
    PX = 26
    GPOS = 27
    AAAA = 28
    LOC = 29
    NXT = 30
    EID = 31
    NIMLOC = 32
    SRV = 33
    ATMA = 34
    NAPTR = 35
    KX = 36
    CERT = 37
    A6 = 38
    DNAME = 39
    SINK = 40
    OPT = 41
    APL = 42
    DS = 43
    SSHFP = 44
    IPSECKEY = 45
    RRSIG = 46
    NSEC = 47
    DNSKEY = 48
    DHCID = 49
    NSEC3 = 50
    NSEC3PARAM = 51
    TLSA = 52
    SMIMEA = 53
    Unassigned = 54
    HIP = 55
    NINFO = 56
    RKEY = 57
    TALINK = 58
    CDS = 59
    CDNSKEY = 60
    OPENPGPKEY = 61
    CSYNC = 62
    SPF = 99
    UINFO = 100
    UID = 101
    GID = 102
    UNSPEC = 103
    NID = 104
    L32 = 105
    L64 = 106
    LP = 107
    EUI48 = 108
    EUI64 = 109
    TKEY = 249
    TSIG = 250
    IXFR = 251
    AXFR = 252
    MAILB = 253
    MAILA = 254
    All = 255
    URI = 256
    CAA = 257
    AVC = 258
    DOA = 259
    TA = 32768
    DLV = 32769
}
function Resolve-1111 {
    [CmdletBinding()]
    param (
        [Parameter(
            Mandatory,
            ValueFromPipeline,
            ValueFromPipelineByPropertyName,
            Position = 0
        )]
        [string[]]
        $HostName,

        [Parameter(
            ValueFromPipelineByPropertyName,
            Position = 1
        )]
        [DnsQueryType]
        $Type = 'A',

        [Parameter(DontShow)]
        [string]
        $ApiBaseUri = (Get-ApiBaseUri)
    )

    begin {
        $CtMimeType = Get-CtMimeType
    }

    process {
        foreach ($Lookup in $HostName) {
            Write-Verbose "Processing Name: $Lookup Type: $Type"
            $Uri = '{0}?ct={1}&name={2}&type={3}' -f @(
                $ApiBaseUri
                $CtMimeType
                $Lookup
                Resolve-QueryType $Type
            )
            Write-Verbose "Uri: $Uri"
            $Result = Invoke-RestMethod $Uri
            if ($Result -is [String]) {
                $Result -replace '""([^"]*)""', '"\"$1\""' | ConvertFrom-Json
            } else {
                $Result
            }
        }
    }
}
function Get-ApiBaseUri {
    [CmdletBinding()]
    param ()
    end {
        $Config = Import-Configuration
        $Config.CloudflareDnsApiBaseUri
    }
}
function Get-CtMimeType {
    [CmdletBinding()]
    param ()
    end {
        $Config = Import-Configuration
        $Config.CtMimeType
    }
}
function Resolve-QueryType {
    [CmdletBinding()]
    param (
        [Parameter(
            Mandatory,
            ValueFromPipeline,
            Position = 0
        )]
        [DnsQueryType[]]
        $QueryType
    )
    process {
        foreach ($type in $QueryType) {
            switch ($type) {
                'All' { '*' }
                'NSAPPTR' { 'NSAP-PTR' }
                Default { "$type"}
            }
        }
    }
}
if ('Core' -ne $PSVersionTable.PSEdition) {
    Enable-Tls -Tls12
}