import type { IRemoteIngress } from '../../dist_ts_interfaces/data/remoteingress.js'; import type { EmailDomainDoc } from '../db/documents/classes.email-domain.doc.js'; import type { DcRouter } from '../classes.dcrouter.js'; export declare const MAIL_EGRESS_IDENTITY_MAX_AGE_MS = 45000; export interface IMailEgressIdentity { edgeId: string; family: 4 | 6; address: string; heloHostname: string; proof: 'sourceBound'; /** Edge-side time at which the configured source address was successfully bound. */ observedAt: number; /** Hub-side heartbeat receipt time. */ hubReceivedAt: number; } export interface IMailEgressIdentitySnapshot { supported: boolean; reason?: string; identities: IMailEgressIdentity[]; } /** Boundary implemented against a released RemoteIngress identity-proof API. */ export interface IEgressIdentitySource { getSnapshot(): Promise; } /** * Reads the versioned RemoteIngress identity capability through TunnelManager. * Older hubs do not expose `egressIdentityV1`; they remain explicitly * unsupported instead of falling back to configured or peer addresses. */ export declare class ReleasedRemoteIngressEgressIdentitySource implements IEgressIdentitySource { private dcRouterRef; constructor(dcRouterRef: DcRouter); getSnapshot(): Promise; } export interface IEligibleMailEdge { edge: IRemoteIngress; hostname: string; identities: IMailEgressIdentity[]; } export interface IMailEdgeEligibilityResult { supported: boolean; reason?: string; edges: IEligibleMailEdge[]; } /** Shared topology predicate used by DNS publication and outbound selection. */ export declare class MailEdgeEligibility { private dcRouterRef; private identitySource; private lastUnscopedResult; constructor(dcRouterRef: DcRouter, identitySource: IEgressIdentitySource); resolveForDomain(doc?: EmailDomainDoc): Promise; getLastUnscopedResult(): IMailEdgeEligibilityResult; private recordUnscoped; resolveActiveForDomain(doc: EmailDomainDoc): Promise; }