import type { ConfigProvider } from '@adonisjs/core/types';
import type { SESTransport } from './transports/ses.js';
import type { SMTPTransport } from './transports/smtp.js';
import type { BrevoTransport } from './transports/brevo.js';
import type { ResendTransport } from './transports/resend.js';
import type { MailgunTransport } from './transports/mailgun.js';
import type { PostmarkTransport } from './transports/postmark.js';
import type { SparkPostTransport } from './transports/sparkpost.js';
import type { SESConfig, SMTPConfig, BrevoConfig, MailerConfig, ResendConfig, MailgunConfig, PostmarkConfig, SparkPostConfig, MailManagerTransportFactory } from './types.js';
/**
 * Helper to remap known mailers to factory functions
 */
type ResolvedConfig<KnownMailers extends Record<string, MailManagerTransportFactory>> = MailerConfig & {
    default?: keyof KnownMailers;
    mailers: {
        [K in keyof KnownMailers]: KnownMailers[K] extends ConfigProvider<infer A> ? A : KnownMailers[K];
    };
};
/**
 * Helper function to define config for the mail
 * service
 */
export declare function defineConfig<KnownMailers extends Record<string, MailManagerTransportFactory>>(config: MailerConfig & {
    default?: keyof KnownMailers;
    mailers: {
        [K in keyof KnownMailers]: ConfigProvider<KnownMailers[K]> | KnownMailers[K];
    };
}): ConfigProvider<ResolvedConfig<KnownMailers>>;
/**
 * Config helpers to create a reference for inbuilt
 * mail transports
 */
export declare const transports: {
    smtp: (config: SMTPConfig) => ConfigProvider<() => SMTPTransport>;
    ses: (config: SESConfig) => ConfigProvider<() => SESTransport>;
    mailgun: (config: MailgunConfig) => ConfigProvider<() => MailgunTransport>;
    sparkpost: (config: SparkPostConfig) => ConfigProvider<() => SparkPostTransport>;
    resend: (config: ResendConfig) => ConfigProvider<() => ResendTransport>;
    brevo: (config: BrevoConfig) => ConfigProvider<() => BrevoTransport>;
    postmark: (config: PostmarkConfig) => ConfigProvider<() => PostmarkTransport>;
};
export {};
