Skip to main content

seer_core/
lib.rs

1/// Declares lazily compiled `static` regexes, one `NAME = r"pattern";` per
2/// entry (doc comments and a visibility may precede each). Patterns are
3/// literals, so an invalid one panics on first use — which every parser's
4/// tests exercise.
5macro_rules! static_regex {
6    ($($(#[$meta:meta])* $vis:vis $name:ident = $re:literal;)+) => {
7        $(
8            $(#[$meta])*
9            $vis static $name: std::sync::LazyLock<regex::Regex> = std::sync::LazyLock::new(|| {
10                regex::Regex::new($re).expect(concat!("invalid regex ", stringify!($name)))
11            });
12        )+
13    };
14}
15
16pub mod availability;
17pub mod bulk;
18pub mod caa;
19pub mod cache;
20#[cfg(feature = "cli")]
21pub mod colors;
22pub mod config;
23pub mod confusables;
24mod dates;
25pub mod diff;
26pub mod dns;
27#[cfg(feature = "cli")]
28pub mod doctor;
29pub mod domain_info;
30#[cfg(feature = "cli")]
31pub mod drift;
32pub mod error;
33#[cfg(feature = "cli")]
34mod fsutil;
35pub mod headers;
36#[cfg(feature = "cli")]
37pub mod history;
38mod http;
39#[cfg(feature = "cli")]
40pub mod logging;
41pub mod lookup;
42pub mod net;
43#[cfg(feature = "cli")]
44pub mod output;
45pub mod posture;
46mod psl;
47pub mod rdap;
48pub mod retry;
49pub mod ssl;
50pub mod status;
51pub mod subdomains;
52pub mod takeover;
53pub mod tld;
54mod tls;
55pub mod validation;
56#[cfg(feature = "cli")]
57pub mod watchlist;
58#[cfg(feature = "cli")]
59pub mod webhook;
60pub mod whois;
61
62pub use availability::{AvailabilityChecker, AvailabilityResult};
63pub use cache::TtlCache;
64pub use config::SeerConfig;
65pub use error::{Result, SeerError};
66pub use retry::{is_retryable, RetryExecutor, RetryPolicy};
67pub use validation::normalize_domain;
68
69pub use dns::{
70    AuthenticationTier, DnsComparator, DnsComparison, DnsFollower, DnsQueryResult, DnsRecord,
71    DnsResolver, DnsStatus, DnsTrace, DnsTracer, DnssecChecker, DnssecReport, FailedType,
72    FollowConfig, FollowIteration, FollowResult, PropagationResult, RecordType, TraceHop,
73    WildcardProbe, MAX_FOLLOW_INTERVAL_SECS, MAX_FOLLOW_ITERATIONS,
74};
75pub use lookup::{LookupProgressCallback, LookupResult, SmartLookup};
76pub use rdap::{RdapClient, RdapResponse};
77pub use status::{CertificateInfo, DnsResolution, DomainExpiration, StatusClient, StatusResponse};
78pub use tld::{all_tlds, lookup_tld, lookup_tld_with, TldInfo};
79pub use whois::{WhoisClient, WhoisResponse};
80
81pub use bulk::{BulkExecutor, BulkOperation, BulkResult};
82pub use caa::{CaaPolicy, CaaRecord, IssuerCaaMatch};
83pub use confusables::{
84    find_confusables, generate_candidates, ConfusableCandidate, ConfusableReport,
85    RegisteredLookalike,
86};
87pub use diff::{DomainDiff, DomainDiffer};
88pub use domain_info::{
89    describe_epp_status, DomainInfo, DomainInfoSource, ExpiryStatus, StatusDescription,
90};
91#[cfg(feature = "cli")]
92pub use drift::{DriftReport, FieldChange};
93pub use headers::{
94    audit_headers, CookieFinding, Disclosure, HeaderFinding, HeaderReport, HeaderVerdict,
95    DEFAULT_HEADER_TIMEOUT,
96};
97#[cfg(feature = "cli")]
98pub use history::{HistoryEntry, LookupHistory};
99#[cfg(feature = "cli")]
100pub use output::{OutputFormat, OutputFormatter};
101pub use posture::{
102    lookup_email_posture, BimiPolicy, DanePolicy, DmarcPolicy, EmailPosture, MtaStsPolicy,
103    PostureVerdict, SpfPolicy,
104};
105pub use ssl::{CertDetail, CertWarning, CertWarningSeverity, SslChecker, SslReport};
106pub use subdomains::{
107    classify_subdomains, ClassifiedSubdomain, SubdomainClassification, SubdomainEnumerator,
108    SubdomainResult, SubdomainStatus,
109};
110#[cfg(feature = "cli")]
111pub use subdomains::{SubdomainBaseline, SubdomainBaselineDiff, SubdomainBaselines};
112pub use takeover::{
113    scan_takeover, TakeoverFinding, TakeoverReport, TakeoverVerdict, DEFAULT_TAKEOVER_TIMEOUT,
114};
115#[cfg(feature = "cli")]
116pub use watchlist::{
117    check_watchlist_with, check_watchlist_with_config, WatchReport, WatchResult, Watchlist,
118};