import { Buffer } from 'node:buffer';
import type { DnsAnswer, DnsQuery, DnsResponse, EDNSMode, ProtocolTweaks } from './types';
/**
 * Build a DNS query packet
 */
export declare function buildQuery(query: DnsQuery, options?: {
  id?: number
  txid?: number
  edns?: EDNSMode
  tweaks?: ProtocolTweaks
  verbose?: boolean
}): Buffer;
/**
 * Parse a DNS response packet
 */
export declare function parseResponse(buffer: Buffer): DnsResponse;
/**
 * DNS header flags
 */
export declare class DnsFlags {
  response: boolean;
  opcode: number;
  authoritative: boolean;
  truncated: boolean;
  recursionDesired: boolean;
  recursionAvailable: boolean;
  authenticData: boolean;
  checkingDisabled: boolean;
  responseCode: number;
  static fromBuffer(buffer: Buffer): DnsFlags;
  toBuffer(): Buffer;
}
/**
 * DNS wire format encoder
 */
export declare class DnsEncoder {
  constructor(size?: number, verbose?: boolean);
  writeHeader(id: number, flags: DnsFlags, counts: {
    qdcount: number
    ancount: number
    nscount: number
    arcount: number
  }): void;
  writeName(name: string): void;
  writeQuestion(query: DnsQuery): void;
  getBuffer(): Buffer;
}
/**
 * DNS wire format decoder
 */
export declare class DnsDecoder {
  constructor(buffer: Buffer);
  readName(): string;
  readHeader(): { id: number, flags: DnsFlags, counts: { qdcount: number, ancount: number, nscount: number, arcount: number } };
  readQuestion(): DnsQuery;
  readAnswer(): DnsAnswer;
}
