///
import * as FormData from "form-data";
declare const Mailgun: Mailgun.MailgunExport;
export = Mailgun;
declare namespace Mailgun {
interface ConstructorParams {
apiKey: string;
publicApiKey?: string | undefined;
domain: string;
mute?: boolean | undefined;
timeout?: number | undefined;
host?: string | undefined;
endpoint?: string | undefined;
protocol?: string | undefined;
port?: number | undefined;
retry?:
| number
| {
times: number;
interval: number;
}
| undefined;
proxy?: string | undefined;
testMode?: boolean | undefined;
testModeLogger?: ((httpOptions: LoggerHttpOptions, payload: string, form: FormData) => void) | undefined;
}
interface LoggerHttpOptions {
hostname: string;
port: number;
protocol: string;
path: string;
method: string;
headers: any;
auth: string;
agent: false;
timeout: number;
}
interface Error {
statusCode: number;
message: string;
}
interface AttachmentParams {
data: string | Buffer | NodeJS.ReadWriteStream;
filename?: string | undefined;
knownLength?: number | undefined;
contentType?: string | undefined;
}
interface Attachment {
data: string | Buffer | NodeJS.ReadWriteStream;
filename?: string | undefined;
knownLength?: number | undefined;
contentType?: string | undefined;
getType(): string;
}
type AttachmentData = string | Buffer | NodeJS.ReadWriteStream | Attachment;
interface MailgunExport {
new(options: ConstructorParams): Mailgun;
(options: ConstructorParams): Mailgun;
}
interface MailgunRequest {
(resource: string, data: any, callback: (error: Error, response: any) => void): void;
(resource: string, callback: (error: Error, response: any) => void): void;
(resource: string, data?: any): Promise;
}
namespace messages {
interface SendData {
from?: string | undefined;
to: string | string[];
cc?: string | string[] | undefined;
bcc?: string | string[] | undefined;
subject?: string | undefined;
text?: string | undefined;
html?: string | undefined;
"amp-html"?: string | undefined;
attachment?: AttachmentData | readonly AttachmentData[] | undefined;
inline?: AttachmentData | readonly AttachmentData[] | undefined;
// Mailgun options
"o:testmode"?: "yes" | "no" | "true" | "false" | "True" | "False" | undefined;
"o:tag"?: string | string[] | undefined;
"o:deliverytime"?: string | undefined;
"o:deliverytime-optimize-period"?: string | undefined;
"o:dkim"?: "yes" | "no" | boolean | undefined;
"o:tracking"?: "yes" | "no" | boolean | undefined;
"o:tracking-opens"?: "yes" | "no" | boolean | undefined;
"o:tracking-clicks"?: "yes" | "no" | "htmlonly" | boolean | undefined;
"o:require-tls"?: "yes" | "no" | "True" | "False" | undefined;
"o:skip-verification"?: "yes" | "no" | "True" | "False" | undefined;
// Standard email headers
"h:Reply-To"?: string | undefined;
"h:In-Reply-To"?: string | undefined;
"h:References"?: string | undefined;
"h:Importance"?: string | undefined;
}
interface BatchData extends SendData {
"recipient-variables"?: string | BatchSendRecipientVars | undefined;
}
type SendTemplateData = SendData & {
template: string;
[templateVariable: string]: any;
};
interface BatchSendRecipientVars {
[email: string]: { [key: string]: any };
}
interface SendResponse {
message: string;
id: string;
}
}
namespace lists {
interface MemberCreateData {
subscribed: boolean;
address: string;
name: string;
vars?: object | undefined;
}
interface MemberAddMultipleData {
members: Array<{
name?: string | undefined;
address: string;
subscribed?: boolean | undefined;
}>;
upsert?: boolean | undefined;
}
interface MemberUpdateData {
subscribed: boolean;
name: string;
vars?: object | undefined;
}
interface Members {
create(data: MemberCreateData, callback?: (err: Error, data: any) => void): Promise;
add(data: MemberAddMultipleData, callback?: (err: Error, data: any) => void): Promise;
list(callback?: (err: Error, data: any) => void): Promise;
}
interface Member {
update(data: MemberUpdateData, callback?: (err: Error, data: any) => void): Promise;
delete(callback?: (err: Error, data: any) => void): Promise;
}
}
namespace validation {
interface ParseResponse {
parsed: string[];
unparseable: string[];
}
type ValidationCallback = (error: Error, body: ValidateResponse) => void;
interface ValidationOptionsPublic {
api_key?: string | undefined;
mailbox_verification?: boolean | "true" | "false" | undefined;
}
interface ValidationOptionsPrivate {
mailbox_verification?: boolean | "true" | "false" | undefined;
}
interface ValidateResponse {
address: string;
did_you_mean: string | null;
is_disposable_address: boolean;
is_role_address: boolean;
is_valid: boolean;
mailbox_verification: "true" | "false" | "unknown" | null;
parts: {
display_name: string | null;
domain: string;
local_part: string;
};
}
}
interface Mailgun {
messages(): Messages;
lists(list: string): Lists;
Attachment: new(params: AttachmentParams) => Attachment;
validateWebhook(bodyTimestamp: number, bodyToken: string, bodySignature: string): boolean;
parse(addressList: string[], callback?: validation.ValidationCallback): Promise;
validate(address: string, callback: validation.ValidationCallback): void;
validate(
address: string,
opts: validation.ValidationOptionsPublic,
callback: validation.ValidationCallback,
): void;
// tslint:disable-next-line unified-signatures
validate(address: string, isPrivate: boolean, callback: validation.ValidationCallback): void;
validate(
address: string,
isPrivate: false,
opts: validation.ValidationOptionsPublic,
callback: validation.ValidationCallback,
): void;
validate(
address: string,
isPrivate: true,
opts: validation.ValidationOptionsPrivate,
callback: validation.ValidationCallback,
): void;
validate(address: string, opts?: validation.ValidationOptionsPublic): Promise;
validate(
address: string,
isPrivate: false,
opts?: validation.ValidationOptionsPublic,
): Promise;
validate(
address: string,
isPrivate: true,
opts?: validation.ValidationOptionsPrivate,
): Promise;
// Generic requests
get: MailgunRequest;
post: MailgunRequest;
put: MailgunRequest;
delete: MailgunRequest;
}
interface DeleteResponse {
address: string;
message: string;
}
interface Lists {
info(callback?: (error: Error, data: any) => void): Promise;
members(): lists.Members;
members(member: string): lists.Member;
delete(callback?: (error: Error, body: DeleteResponse) => void): Promise;
}
interface Messages {
send(
data: messages.SendData | messages.BatchData | messages.SendTemplateData,
callback?: (error: Error, body: messages.SendResponse) => void,
): Promise;
}
}