/// /** * The currently defined set of DNS record types. */ export type RecordType = | "A" | "AAAA" | "AFSDB" | "APL" | "AXFR" | "CAA" | "CDNSKEY" | "CDS" | "CERT" | "CNAME" | "DNAME" | "DHCID" | "DLV" | "DNSKEY" | "DS" | "HINFO" | "HIP" | "IXFR" | "IPSECKEY" | "KEY" | "KX" | "LOC" | "MX" | "NAPTR" | "NS" | "NSEC" | "NSEC3" | "NSEC3PARAM" | "NULL" | "OPT" | "PTR" | "RRSIG" | "RP" | "SIG" | "SOA" | "SRV" | "SSHFP" | "TA" | "TKEY" | "TLSA" | "TSIG" | "TXT" | "URI"; export type RecordClass = "IN" | "CS" | "CH" | "HS" | "ANY"; export interface Question { type: RecordType; name: string; class?: RecordClass | undefined; } export interface CaaData { issuerCritical?: boolean | undefined; flags?: number | undefined; tag: "issue" | "issuewild" | "iodef"; value: string; } export interface DnskeyData { flags: number; algorithm: number; key: Buffer; } export interface DsData { keyTag: number; algorithm: number; digestType: number; digest: Buffer; } export interface HInfoData { cpu: string; os: string; } export interface MxData { preference?: number | undefined; exchange: string; } export interface NaptrData { order: number; preference: number; flags: string; services: string; regexp: string; replacement: string; } export interface NsecData { nextDomain: string; rrtypes: string[]; } export interface Nsec3Data { algorithm: number; flags: number; iterations: number; salt: Buffer; nextDomain: Buffer; rrtypes: string[]; } export interface RpData { mbox: string; txt: string; } export interface RrsigData { typeCovered: string; algorithm: number; labels: number; originalTTL: number; expiration: number; inception: number; keyTag: number; signersName: string; signature: Buffer; } export interface SrvData { port: number; target: string; priority?: number | undefined; weight?: number | undefined; } export interface SoaData { mname: string; rname: string; serial?: number | undefined; refresh?: number | undefined; retry?: number | undefined; expire?: number | undefined; minimum?: number | undefined; } export interface SshfpData { algorithm: number; hash: number; fingerprint: string; } export interface TlsaData { usage: number; selector: number; matchingType: number; certificate: Buffer; } export type TxtData = string | Buffer | Array; export interface GenericAnswer { type: T; name: string; } export interface BaseAnswer extends GenericAnswer { ttl?: number | undefined; class?: RecordClass | undefined; flush?: boolean | undefined; data: D; } /** * Record types for which the library will provide a string in the data field. */ export type StringRecordType = "A" | "AAAA" | "CNAME" | "DNAME" | "NS" | "PTR"; /** * Record types for which the library does not attempt to process the data * field. */ export type OtherRecordType = | "AFSDB" | "APL" | "AXFR" | "CDNSKEY" | "CDS" | "CERT" | "DHCID" | "DLV" | "HIP" | "IPSECKEY" | "IXFR" | "KEY" | "KX" | "LOC" | "NSEC3PARAM" | "NULL" | "SIG" | "TA" | "TKEY" | "TSIG" | "URI"; export type StringAnswer = BaseAnswer; export type BufferAnswer = BaseAnswer; export type CaaAnswer = BaseAnswer<"CAA", CaaData>; export type DnskeyAnswer = BaseAnswer<"DNSKEY", DnskeyData>; export type DSAnswer = BaseAnswer<"DS", DsData>; export type HInfoAnswer = BaseAnswer<"HINFO", HInfoData>; export type MxAnswer = BaseAnswer<"MX", MxData>; export type NaptrAnswer = BaseAnswer<"NAPTR", NaptrData>; export type Nsec3Answer = BaseAnswer<"NSEC3", Nsec3Data>; export type NsecAnswer = BaseAnswer<"NSEC", NsecData>; export type RpAnswer = BaseAnswer<"RP", RpData>; export type RrsigAnswer = BaseAnswer<"RRSIG", RrsigData>; export type SoaAnswer = BaseAnswer<"SOA", SoaData>; export type SrvAnswer = BaseAnswer<"SRV", SrvData>; export type SshfpAnswer = BaseAnswer<"SSHFP", SshfpData>; export type TlsaAnswer = BaseAnswer<"TLSA", TlsaData>; export type TxtAnswer = BaseAnswer<"TXT", TxtData>; interface OptCodes { OPTION_0: 0; LLQ: 1; UL: 2; NSID: 3; OPTION_4: 4; DAU: 5; DHU: 6; N3U: 7; CLIENT_SUBNET: 8; EXPIRE: 9; COOKIE: 10; TCP_KEEPALIVE: 11; PADDING: 12; CHAIN: 13; KEY_TAG: 14; DEVICEID: 26946; OPTION_65535: 65535; } type OptCodeType = keyof OptCodes; type OptCode = OptCodes[K]; interface GenericOpt { code: OptCode; type?: T | undefined; data?: Buffer | undefined; } interface ClientSubnetOpt extends GenericOpt<"CLIENT_SUBNET"> { family?: number | undefined; sourcePrefixLength?: number | undefined; scopePrefixLength?: number | undefined; ip: string | undefined; } interface KeepAliveOpt extends GenericOpt<"TCP_KEEPALIVE"> { timeout?: number | undefined; } interface PaddingOpt extends GenericOpt<"PADDING"> { length?: number | undefined; } interface TagOpt extends GenericOpt<"KEY_TAG"> { tags: number[]; } export type PacketOpt = ClientSubnetOpt | KeepAliveOpt | PaddingOpt | TagOpt; export interface OptAnswer extends GenericAnswer<"OPT"> { udpPayloadSize: number; extendedRcode: number; ednsVersion: number; flags: number; /** * Whether or not the DNS DO bit is set */ flag_do: boolean; options: PacketOpt[]; } export type Answer = | StringAnswer | BufferAnswer | CaaAnswer | DnskeyAnswer | DSAnswer | HInfoAnswer | MxAnswer | NaptrAnswer | Nsec3Answer | NsecAnswer | OptAnswer | RpAnswer | RrsigAnswer | SoaAnswer | SrvAnswer | SshfpAnswer | TlsaAnswer | TxtAnswer; export interface Packet { /** * Whether the packet is a query or a response. This field may be * omitted if it is clear from the context of usage what type of packet * it is. */ type?: "query" | "response" | undefined; id?: number | undefined; /** * A bit-mask combination of zero or more of: * {@link AUTHORITATIVE_ANSWER}, * {@link TRUNCATED_RESPONSE}, * {@link RECURSION_DESIRED}, * {@link RECURSION_AVAILABLE}, * {@link AUTHENTIC_DATA}, * {@link CHECKING_DISABLED}. */ flags?: number | undefined; questions?: Question[] | undefined; answers?: Answer[] | undefined; additionals?: Answer[] | undefined; authorities?: Answer[] | undefined; } // https://github.com/mafintosh/dns-packet/blob/7b6662025c49c0e31d2f0c5cbd726e4423805639/index.js#L181-L197 export interface DecodedPacket extends Packet { flag_qr: boolean; flag_aa: boolean; flag_tc: boolean; flag_rd: boolean; flag_ra: boolean; flag_z: boolean; flag_ad: boolean; flag_cd: boolean; } export const AUTHORITATIVE_ANSWER: number; export const TRUNCATED_RESPONSE: number; export const RECURSION_DESIRED: number; export const RECURSION_AVAILABLE: number; export const AUTHENTIC_DATA: number; export const CHECKING_DISABLED: number; export const DNSSEC_OK: number; export function encode(package: Packet, buf?: Buffer, offset?: number): Buffer; export namespace encode { let bytes: number; } export function decode(buf: Buffer, offset?: number): DecodedPacket; export namespace decode { let bytes: number; } export function encodingLength(packet: Packet): number; export function streamEncode(package: Packet): Buffer; export namespace streamEncode { let bytes: number; } export function streamDecode(package: Buffer): Packet; export namespace streamDecode { let bytes: number; } export {};