import { RecordType } from '../types.js'; import { RecordClass } from '../rcodes.js'; import { OptionCodes } from '../optioncodes.js'; import { OPCode } from '../opcodes.js'; export { RecordType } from '../types.js'; export { RecordClass } from '../rcodes.js'; export { OptionCodes } from '../optioncodes.js'; export { OPCode } from '../opcodes.js'; export interface Codec { encode(package: Type, buf?: Uint8Array, offset?: number): Uint8Array; decode(buf: Uint8Array, offset?: number): Type; encodingLength(packet: Type): number; } export interface Question { type: RecordType; name: string; class?: RecordClass | undefined; } export interface SrvData { target: string; port?: number; priority?: number | undefined; weight?: number | undefined; } export interface HInfoData { cpu: string; os: string; } export interface SoaData { mname: string; rname: string; serial?: number | undefined; refresh?: number | undefined; retry?: number | undefined; expire?: number | undefined; minimum?: number | undefined; } export type TxtData = string | Uint8Array | Array; export interface CaaData { issuerCritical?: boolean | undefined; flags?: number | undefined; tag: string; value: string; } export interface MxData { preference?: number | undefined; exchange: string; } export interface BaseAnswer { type: T; name: string; ttl?: number | undefined; class?: RecordClass | 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" | "IXFR" | "IPSECKEY" | "KEY" | "KX" | "LOC" | "NAPTR" | "NSEC3PARAM" | "SIG" | "SSHFP" | "TA" | "TKEY" | "TLSA" | "TSIG" | "URI"; export type StringAnswer = BaseAnswer; export type SrvAnswer = BaseAnswer<"SRV", SrvData>; export type HInfoAnswer = BaseAnswer<"HINFO", HInfoData>; export type SoaAnswer = BaseAnswer<"SOA", SoaData>; export type TxtAnswer = BaseAnswer<"TXT", TxtData>; export type CaaAnswer = BaseAnswer<"CAA", CaaData>; export type MxAnswer = BaseAnswer<"MX", MxData>; export type NullAnswer = BaseAnswer<"NULL", Uint8Array>; export type OptAnswer = BaseAnswer<"OPT", OptionData[]>; export type DNSKeyAnswer = BaseAnswer<"DNSKEY", DNSKeyData>; export type RRSigAnswer = BaseAnswer<"RRSIG", RRSigData>; export type RPAnswer = BaseAnswer<"RP", RPData>; export type NSecAnswer = BaseAnswer<"NSEC", NSecData>; export type NSec3Answer = BaseAnswer<"NSEC3", NSec3Data>; export type DSAnswer = BaseAnswer<"DS", DigestData>; export type BufferAnswer = BaseAnswer; export type Answer = | StringAnswer | SrvAnswer | HInfoAnswer | SoaAnswer | TxtAnswer | CaaAnswer | MxAnswer | NullAnswer | OptAnswer | DNSKeyAnswer | RRSigAnswer | RPAnswer | NSecAnswer | NSec3Answer | DSAnswer | BufferAnswer; 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; flag_qr?: boolean; opcode?: OPCode; flag_aa?: boolean; flag_tc?: boolean; flag_rd?: boolean; flag_ra?: boolean; flag_z?: boolean; flag_ad?: boolean; flag_cd?: boolean; rcode?: RecordClass; } export const DNSSEC_OK: 32768; export const AUTHORITATIVE_ANSWER: 1024; export const TRUNCATED_RESPONSE: 512; export const RECURSION_DESIRED: 256; export const RECURSION_AVAILABLE: 128; export const AUTHENTIC_DATA: 32; export const CHECKING_DISABLED: 16; export interface DNSKeyData { key: string; flags: number; algorithm: number; } export interface DigestData { digest: Uint8Array; keyTag: number; algorithm: number; digestType: number; } export interface NSecData { nextDomain: Uint8Array; rrtypes: RecordType[]; } export interface NSec3Data { salt: Uint8Array; nextDomain: Uint8Array; algorithm: number; flags: number; iterations: number; rrtypes: RecordType[]; } export type ACodec = Codec; export type PtrCodec = Codec; export type TxtCodec = Codec; export type NullCodec = Codec; export type CaaCodec = Codec & { ISSUER_CRITICAL: 128 }; export type DNSKeyCodec = Codec & { PROTOCOL_DNSSEC: 3 ZONE_KEY: 0x80 SECURE_ENTRYPOINT: 0x8000 }; export type DSCodec = Codec; export type HInfoCodec = Codec; export type AAAACodec = Codec; export type UnknownCodec = Codec; export type SrvCodec = Codec; export type NSCodec = Codec; export type SoaCodec = Codec; export type MxCodec = Codec; export type OptCodec = Codec; export type QuestionCodec = Codec; export type RRSigCodec = Codec; export type RPCodec = Codec; export type NSecCodec = Codec; export type NSec3Codec = Codec; export type PacketCodec = Codec; export type SingleQuestionPacket = Omit & { question: Question }; export type QueryCodec = Codec; export type ResponseCodec = Codec; export const a: ACodec; export const caa: CaaCodec; export const ptr: PtrCodec; export const cname: PtrCodec; export const dname: PtrCodec; export const dnskey: DNSKeyCodec; export const ds: DSCodec; export const hinfo: HInfoCodec; export const aaaa: AAAACodec; export const answer: Codec; export const txt: TxtCodec; export const unknown: UnknownCodec; export const mx: MxCodec; export const name: Codec; export const ns: NSCodec; export const soa: SoaCodec; export const srv: SrvCodec; export const option: Codec; export const opt: OptCodec; export const question: QuestionCodec; export const rrsig: RRSigCodec; export const rp: RPCodec; export const nsec: NSecCodec; export const nsec3: NSec3Codec; export const packet: PacketCodec; export const query: QueryCodec; export const response: ResponseCodec; declare const rnull: NullCodec; export { rnull as null }; export interface GenericOptionData { code: OptionCodes; data: Uint8Array; } export interface ClientSubnetOptionData { code: 'CLIENT_SUBNET'; ip: string; family?: 1 | 2; sourcePrefixLength?: number; scopePrefixLength?: number; } export interface TCPKeepaliveOptionData { code: 'TCP_KEEPALIVE'; timeout?: number; } export interface PaddingOptionData { code: 'PADDING'; length?: number; } export interface KeyTagOptionData { code: 'KEY_TAG'; tags: number[]; } export type OptionData = GenericOptionData | ClientSubnetOptionData | TCPKeepaliveOptionData | PaddingOptionData | KeyTagOptionData; export interface RRSigData { signature: Uint8Array; typeCovered: RecordType; algorithm: number; labels: number; originalTTL: number; expiration: number; inception: number; keyTag: number; signersName: string; } export interface RPData { mbox?: string; txt?: string; } export type AnyTypeCodec = ACodec | PtrCodec | TxtCodec | NullCodec | AAAACodec | SrvCodec | HInfoCodec | CaaCodec | NSCodec | SoaCodec | MxCodec | OptCodec | RRSigCodec | RPCodec | NSecCodec | NSec3Codec | DSCodec | UnknownCodec; export type TypeCodec = Type extends string ? Uppercase extends 'A' ? ACodec : Uppercase extends 'PTR' ? PtrCodec : Uppercase extends 'CNAME' ? PtrCodec : Uppercase extends 'DNAME' ? PtrCodec : Uppercase extends 'TXT' ? TxtCodec : Uppercase extends 'NULL' ? NullCodec : Uppercase extends 'AAAA' ? AAAACodec : Uppercase extends 'SRV' ? SrvCodec : Uppercase extends 'HINFO' ? HInfoCodec : Uppercase extends 'CAA' ? CaaCodec : Uppercase extends 'NS' ? NSCodec : Uppercase extends 'SOA' ? SoaCodec : Uppercase extends 'MX' ? MxCodec : Uppercase extends 'OPT' ? OptCodec : Uppercase extends 'DNSKEY' ? DNSKeyCodec : Uppercase extends 'RRSIG' ? RRSigCodec : Uppercase extends 'RP' ? RPCodec : Uppercase extends 'NSEC' ? NSecCodec : Uppercase extends 'NSEC3' ? NSec3Codec : Uppercase extends 'DS' ? DSCodec : UnknownCodec : AnyTypeCodec; export function enc (type: Type): TypeCodec; export function encode(packet: Packet, buf?: Uint8Array, offset?: number): Uint8Array; export function decode(buf: Uint8Array, offset?: number): Packet; export function encodingLength(packet: Packet): number; export function decodeList (list: T[], codec: Codec, buf: Uint8Array, offset?: number): Packet[]; export function encodeList (list: T[], codec: Codec, buf?: Uint8Array, offset?: number): number; export function encodingLengthList (list: T[], codec: Codec): number; export function streamDecode(buffer: Uint8Array): Packet | null; export function streamEncode(packet: Packet): Uint8Array;