/** * @module * WeightedFallbackTransport — routes each send through a weighted-random * primary provider, then fails over through the remaining providers on error. * Works with email, SMS, WhatsApp, and push transports. * * @example * ```ts * import { WeightedFallbackTransport } from "sently/transports/weighted-fallback"; * import { ResendTransport } from "sently/transports/resend"; * import { SESTransport } from "sently/transports/ses"; * * const transport = new WeightedFallbackTransport( * [ * { transport: new ResendTransport({ apiKey }), weight: 80 }, * { transport: new SESTransport({ accessKeyId, secretAccessKey }), weight: 20 }, * ], * { cooldownMs: 300_000 }, * ); * ``` */ import type { DecoratedTransport, FallbackAugmentedResult } from "../core/decorated-transport.js"; import type { MailOptions, SendResult, VerifyResult } from "../core/types.js"; import { type FallbackOptions, FallbackTransport, type FallbackVerifyAllResult } from "./fallback.js"; /** A transport entry with a relative routing weight. */ export interface WeightedTransportEntry { /** Transport instance. */ transport: DecoratedTransport; /** Relative weight (e.g. 80 vs 20 → ~80% of sends try this provider first). */ weight: number; } type MailerOnFallback = Parameters[0]; /** * Weighted provider routing with failover on error. * Defaults preserve email {@link Transport} compatibility. */ export declare class WeightedFallbackTransport implements DecoratedTransport> { readonly provider = "weighted-fallback"; private readonly entries; private readonly fallbackOptions; private readonly random; private readonly inner; private mailerOnFallback; /** * Creates a weighted fallback transport. * @throws {Error} When entries is empty or total weight is zero. */ constructor(entries: WeightedTransportEntry[], options?: FallbackOptions & { random?: () => number; }); /** * Register a per-send onFallback callback from sender lifecycle hooks. * @internal Cleared after each send. */ setMailerOnFallback(callback: MailerOnFallback | undefined): void; private buildOrder; private pickWeightedIndex; /** Sends via a weighted-random primary provider, failing over on error. */ send(message: TOptions): Promise>; /** Returns the first healthy provider in the chain. */ verify(): Promise; /** Verifies every weighted provider in definition order. */ verifyAll(): Promise; /** Closes every underlying transport. */ close(): Promise; } export {};