124 lines
3.4 KiB
TypeScript
124 lines
3.4 KiB
TypeScript
|
|
import type { Email } from '../core/classes.email.js';
|
||
|
|
/**
|
||
|
|
* DMARC policy types
|
||
|
|
*/
|
||
|
|
export declare enum DmarcPolicy {
|
||
|
|
NONE = "none",
|
||
|
|
QUARANTINE = "quarantine",
|
||
|
|
REJECT = "reject"
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* DMARC alignment modes
|
||
|
|
*/
|
||
|
|
export declare enum DmarcAlignment {
|
||
|
|
RELAXED = "r",
|
||
|
|
STRICT = "s"
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* DMARC record fields
|
||
|
|
*/
|
||
|
|
export interface DmarcRecord {
|
||
|
|
version: string;
|
||
|
|
policy: DmarcPolicy;
|
||
|
|
subdomainPolicy?: DmarcPolicy;
|
||
|
|
pct?: number;
|
||
|
|
adkim?: DmarcAlignment;
|
||
|
|
aspf?: DmarcAlignment;
|
||
|
|
reportInterval?: number;
|
||
|
|
failureOptions?: string;
|
||
|
|
reportUriAggregate?: string[];
|
||
|
|
reportUriForensic?: string[];
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* DMARC verification result
|
||
|
|
*/
|
||
|
|
export interface DmarcResult {
|
||
|
|
hasDmarc: boolean;
|
||
|
|
record?: DmarcRecord;
|
||
|
|
spfDomainAligned: boolean;
|
||
|
|
dkimDomainAligned: boolean;
|
||
|
|
spfPassed: boolean;
|
||
|
|
dkimPassed: boolean;
|
||
|
|
policyEvaluated: DmarcPolicy;
|
||
|
|
actualPolicy: DmarcPolicy;
|
||
|
|
appliedPercentage: number;
|
||
|
|
action: 'pass' | 'quarantine' | 'reject';
|
||
|
|
details: string;
|
||
|
|
error?: string;
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* Class for verifying and enforcing DMARC policies
|
||
|
|
*/
|
||
|
|
export declare class DmarcVerifier {
|
||
|
|
private dnsManager?;
|
||
|
|
constructor(dnsManager?: any);
|
||
|
|
/**
|
||
|
|
* Parse a DMARC record from a TXT record string
|
||
|
|
* @param record DMARC TXT record string
|
||
|
|
* @returns Parsed DMARC record or null if invalid
|
||
|
|
*/
|
||
|
|
parseDmarcRecord(record: string): DmarcRecord | null;
|
||
|
|
/**
|
||
|
|
* Check if domains are aligned according to DMARC policy
|
||
|
|
* @param headerDomain Domain from header (From)
|
||
|
|
* @param authDomain Domain from authentication (SPF, DKIM)
|
||
|
|
* @param alignment Alignment mode
|
||
|
|
* @returns Whether the domains are aligned
|
||
|
|
*/
|
||
|
|
private isDomainAligned;
|
||
|
|
/**
|
||
|
|
* Extract domain from an email address
|
||
|
|
* @param email Email address
|
||
|
|
* @returns Domain part of the email
|
||
|
|
*/
|
||
|
|
private getDomainFromEmail;
|
||
|
|
/**
|
||
|
|
* Check if DMARC verification should be applied based on percentage
|
||
|
|
* @param record DMARC record
|
||
|
|
* @returns Whether DMARC verification should be applied
|
||
|
|
*/
|
||
|
|
private shouldApplyDmarc;
|
||
|
|
/**
|
||
|
|
* Determine the action to take based on DMARC policy
|
||
|
|
* @param policy DMARC policy
|
||
|
|
* @returns Action to take
|
||
|
|
*/
|
||
|
|
private determineAction;
|
||
|
|
/**
|
||
|
|
* Verify DMARC for an incoming email
|
||
|
|
* @param email Email to verify
|
||
|
|
* @param spfResult SPF verification result
|
||
|
|
* @param dkimResult DKIM verification result
|
||
|
|
* @returns DMARC verification result
|
||
|
|
*/
|
||
|
|
verify(email: Email, spfResult: {
|
||
|
|
domain: string;
|
||
|
|
result: boolean;
|
||
|
|
}, dkimResult: {
|
||
|
|
domain: string;
|
||
|
|
result: boolean;
|
||
|
|
}): Promise<DmarcResult>;
|
||
|
|
/**
|
||
|
|
* Apply DMARC policy to an email
|
||
|
|
* @param email Email to apply policy to
|
||
|
|
* @param dmarcResult DMARC verification result
|
||
|
|
* @returns Whether the email should be accepted
|
||
|
|
*/
|
||
|
|
applyPolicy(email: Email, dmarcResult: DmarcResult): boolean;
|
||
|
|
/**
|
||
|
|
* End-to-end DMARC verification and policy application
|
||
|
|
* This method should be called after SPF and DKIM verification
|
||
|
|
* @param email Email to verify
|
||
|
|
* @param spfResult SPF verification result
|
||
|
|
* @param dkimResult DKIM verification result
|
||
|
|
* @returns Whether the email should be accepted
|
||
|
|
*/
|
||
|
|
verifyAndApply(email: Email, spfResult: {
|
||
|
|
domain: string;
|
||
|
|
result: boolean;
|
||
|
|
}, dkimResult: {
|
||
|
|
domain: string;
|
||
|
|
result: boolean;
|
||
|
|
}): Promise<boolean>;
|
||
|
|
}
|