import { RecordType } from "./constants.js"; export interface Header { ID: number; QR: 0 | 1; Opcode: 0 | 1 | 2; AA: 0 | 1; TC: 0 | 1; RD: 0 | 1; RA: 0 | 1; Z?: undefined; AD: 0 | 1; CD: 0 | 1; RCODE?: 0 | 1 | 2 | 3 | 4 | 5; QDCOUNT: number; ANCOUNT?: number; NSCOUNT?: number; ARCOUNT?: number; } export declare enum CLASS { IN = 1, CS = 2, CH = 3, HS = 4 } export declare class Question { QNAME: string[]; QTYPE: RecordType; QCLASS: CLASS | 255; constructor(QNAME: string[], QTYPE: RecordType, QCLASS?: CLASS | 255); } export interface ResponseRecord { NAME: string; TYPE: RecordType; CLASS: CLASS; TTL: number; RDLENGTH: number; RDATA: any; } export declare type TokenType = 's16' | 'u8' | 'u16' | 'string' | 'u32' | 'string[]' | 'string[*]' | string | 'u3' | 'u4' | 'bit' | 'opaque' | number; export declare type TokenVal = number | string | string[] | ArrayBuffer | undefined; export declare type Tokenizer = Generator; /** * Deserialize binary RFC1035 wire format * Returns a Generator that accepts 's16'|'u8'|'u16'|'string'|'u32'|'string[]'|'string[*]'|'u3'|'u4'|'bit'|'opaque'|number as a parameter * The generator will consume bytes and yield the related native type. * Pass undefined to yield the current byte offset, or a number to advance the byte offset by the value number of bytes. * @param data buffer populated with data to deserialize * @param start buffer start offset * @param end buffer end offset */ export declare function deserialize(data: ArrayBuffer, start?: number, end?: number): Tokenizer; /** * Serialize binary RFC1035 wire format * Returns a Generator that accepts tuples of ('s16'|'u8'|'u16'|'string'|'u32'|'string[]'|'string[*]'|'u3'|'u4'|'bit'|'opaque', number|string|string[]|ArrayBuffer) as a parameter * The generator will convert the second tuple value to the binary representation specified in the first tuple value * @param data buffer to populate */ export declare function serialize(data: ArrayBuffer): Generator; export declare function buildRequest(questions: Question[], recursive?: boolean): ArrayBuffer; export interface Response { header: Header; question: Question[]; answer: ResponseRecord[]; authority: ResponseRecord[]; additional: ResponseRecord[]; } export declare function parseResponse(data: ArrayBuffer): Response;