// Package resolver provides iterative DNS resolution from root nameservers. package resolver import ( "context" "errors" "log/slog" "go.uber.org/fx" "sneak.berlin/go/dnswatcher/internal/logger" ) // ErrNotImplemented indicates the resolver is not yet implemented. var ErrNotImplemented = errors.New("resolver not yet implemented") // Params contains dependencies for Resolver. type Params struct { fx.In Logger *logger.Logger } // Resolver performs iterative DNS resolution from root servers. type Resolver struct { log *slog.Logger } // New creates a new Resolver instance. func New( _ fx.Lifecycle, params Params, ) (*Resolver, error) { return &Resolver{ log: params.Logger.Get(), }, nil } // LookupNS performs iterative resolution to find authoritative // nameservers for the given domain. func (r *Resolver) LookupNS( _ context.Context, _ string, ) ([]string, error) { return nil, ErrNotImplemented } // LookupAllRecords performs iterative resolution to find all DNS // records for the given hostname. func (r *Resolver) LookupAllRecords( _ context.Context, _ string, ) (map[string][]string, error) { return nil, ErrNotImplemented } // ResolveIPAddresses resolves a hostname to all IPv4 and IPv6 // addresses, following CNAME chains. func (r *Resolver) ResolveIPAddresses( _ context.Context, _ string, ) ([]string, error) { return nil, ErrNotImplemented }