From 95930ad595d00dd54f4a63628c929181b55cc177 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andi=20P=C3=A4tzold?= Date: Mon, 19 Nov 2018 22:55:47 +0100 Subject: [PATCH 1/3] feat(mailgun-js) add types for email validation --- types/mailgun-js/index.d.ts | 28 ++++++++++++++++++++++++++++ types/mailgun-js/mailgun-js-tests.ts | 25 +++++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/types/mailgun-js/index.d.ts b/types/mailgun-js/index.d.ts index 3244639aed..82a75913cf 100644 --- a/types/mailgun-js/index.d.ts +++ b/types/mailgun-js/index.d.ts @@ -1,6 +1,7 @@ // Type definitions for mailgun-js 0.16 // Project: https://github.com/bojand/mailgun-js // Definitions by: Sampson Oliver +// Andi Pätzold // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.2 @@ -126,7 +127,17 @@ declare namespace Mailgun { } 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; + }; } } @@ -149,6 +160,23 @@ declare namespace Mailgun { address: string, callback?: (error: Error, body: validation.ValidateResponse) => void ): Promise; + validate( + address: string, + isPrivate: boolean, + callback?: (error: Error, body: validation.ValidateResponse) => void + ): Promise; + validate( + address: string, + // tslint:disable-next-line unified-signatures + opts: { [key: string]: any }, + callback?: (error: Error, body: validation.ValidateResponse) => void + ): Promise; + validate( + address: string, + isPrivate: boolean, + opts: { [key: string]: any }, + callback?: (error: Error, body: validation.ValidateResponse) => void + ): Promise; } interface Lists { diff --git a/types/mailgun-js/mailgun-js-tests.ts b/types/mailgun-js/mailgun-js-tests.ts index 8a625bc8ef..e2bef4cab3 100644 --- a/types/mailgun-js/mailgun-js-tests.ts +++ b/types/mailgun-js/mailgun-js-tests.ts @@ -29,3 +29,28 @@ const exampleSendData: mailgunFactory.messages.SendData = { }; mailgun.messages().send(exampleSendData, (err, body) => {}); + +const validationResult1: Promise = + mailgun.validate("foo@mailgun.net"); +const validationResult2: Promise = + mailgun.validate("foo@mailgun.net", (error, body) => {}); +const validationResult3: Promise = + mailgun.validate("foo@mailgun.net", true); +const validationResult4: Promise = + mailgun.validate("foo@mailgun.net", true, (error, body) => {}); +const validationResult5: Promise = + mailgun.validate("foo@mailgun.net", true, { option: "option" }, (error, body) => {}); + +const validationResult6: mailgunFactory.validation.ValidateResponse = { + address: "foo@mailgun.net", + did_you_mean: "bar@mailgun.net", + is_disposable_address: false, + is_role_address: true, + is_valid: true, + mailbox_verification: "true", + parts: { + display_name: "foo", + domain: "mailgun.net", + local_part: "foo" + } +}; From 91af0af03949ade47e77370d04b3922e543550ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andi=20P=C3=A4tzold?= Date: Tue, 20 Nov 2018 21:54:08 +0100 Subject: [PATCH 2/3] fix(mailgun-js) fix validate return value for callbacks --- types/mailgun-js/index.d.ts | 36 +++++++++------------------- types/mailgun-js/mailgun-js-tests.ts | 19 +++++++-------- 2 files changed, 20 insertions(+), 35 deletions(-) diff --git a/types/mailgun-js/index.d.ts b/types/mailgun-js/index.d.ts index 82a75913cf..eaa210e6e1 100644 --- a/types/mailgun-js/index.d.ts +++ b/types/mailgun-js/index.d.ts @@ -126,6 +126,8 @@ declare namespace Mailgun { unparseable: string[]; } + type ValidationCallback = (error: Error, body: ValidateResponse) => void; + interface ValidateResponse { address: string; did_you_mean: string | null; @@ -151,32 +153,16 @@ declare namespace Mailgun { bodySignature: string ): boolean; - parse( - addressList: string[], - callback?: (error: Error, body: validation.ValidateResponse) => void - ): Promise; + parse(addressList: string[], callback?: validation.ValidationCallback): Promise; - validate( - address: string, - callback?: (error: Error, body: validation.ValidateResponse) => void - ): Promise; - validate( - address: string, - isPrivate: boolean, - callback?: (error: Error, body: validation.ValidateResponse) => void - ): Promise; - validate( - address: string, - // tslint:disable-next-line unified-signatures - opts: { [key: string]: any }, - callback?: (error: Error, body: validation.ValidateResponse) => void - ): Promise; - validate( - address: string, - isPrivate: boolean, - opts: { [key: string]: any }, - callback?: (error: Error, body: validation.ValidateResponse) => void - ): Promise; + validate(address: string, callback: validation.ValidationCallback): void; + validate(address: string, opts: { [key: string]: any }, callback: validation.ValidationCallback): void; + // tslint:disable-next-line unified-signatures + validate(address: string, isPrivate: boolean, callback: validation.ValidationCallback): void; + validate(address: string, isPrivate: boolean, opts: { [key: string]: any }, callback: validation.ValidationCallback): void; + + validate(address: string, isPrivate?: boolean, opts?: { [key: string]: any }): Promise; + validate(address: string, opts: { [key: string]: any }): Promise; } interface Lists { diff --git a/types/mailgun-js/mailgun-js-tests.ts b/types/mailgun-js/mailgun-js-tests.ts index e2bef4cab3..12bf18e437 100644 --- a/types/mailgun-js/mailgun-js-tests.ts +++ b/types/mailgun-js/mailgun-js-tests.ts @@ -30,16 +30,15 @@ const exampleSendData: mailgunFactory.messages.SendData = { mailgun.messages().send(exampleSendData, (err, body) => {}); -const validationResult1: Promise = - mailgun.validate("foo@mailgun.net"); -const validationResult2: Promise = - mailgun.validate("foo@mailgun.net", (error, body) => {}); -const validationResult3: Promise = - mailgun.validate("foo@mailgun.net", true); -const validationResult4: Promise = - mailgun.validate("foo@mailgun.net", true, (error, body) => {}); -const validationResult5: Promise = - mailgun.validate("foo@mailgun.net", true, { option: "option" }, (error, body) => {}); +let validationResultPromise: Promise; +validationResultPromise = mailgun.validate("foo@mailgun.net"); +validationResultPromise = mailgun.validate("foo@mailgun.net", true); +validationResultPromise = mailgun.validate("foo@mailgun.net", true, { option: "option" }); +validationResultPromise = mailgun.validate("foo@mailgun.net", { option: "option" }); +mailgun.validate("foo@mailgun.net", (error, body) => {}); +mailgun.validate("foo@mailgun.net", true, (error, body) => {}); +mailgun.validate("foo@mailgun.net", true, { option: "option" }, (error, body) => {}); +mailgun.validate("foo@mailgun.net", { option: "option" }, (error, body) => {}); const validationResult6: mailgunFactory.validation.ValidateResponse = { address: "foo@mailgun.net", From 35bca8038a202d1676cd68ce5c05409a2ee151a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andi=20P=C3=A4tzold?= Date: Tue, 20 Nov 2018 22:06:08 +0100 Subject: [PATCH 3/3] feat(mailgun-js) specify validation options --- types/mailgun-js/index.d.ts | 19 +++++++++++++++---- types/mailgun-js/mailgun-js-tests.ts | 8 ++++---- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/types/mailgun-js/index.d.ts b/types/mailgun-js/index.d.ts index eaa210e6e1..0c6ef0eef3 100644 --- a/types/mailgun-js/index.d.ts +++ b/types/mailgun-js/index.d.ts @@ -128,6 +128,15 @@ declare namespace Mailgun { type ValidationCallback = (error: Error, body: ValidateResponse) => void; + interface ValidationOptionsPublic { + api_key?: string; + mailbox_verification?: boolean | "true" | "false"; + } + + interface ValidationOptionsPrivate { + mailbox_verification?: boolean | "true" | "false"; + } + interface ValidateResponse { address: string; did_you_mean: string | null; @@ -156,13 +165,15 @@ declare namespace Mailgun { parse(addressList: string[], callback?: validation.ValidationCallback): Promise; validate(address: string, callback: validation.ValidationCallback): void; - validate(address: string, opts: { [key: string]: any }, 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: boolean, opts: { [key: string]: any }, 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, isPrivate?: boolean, opts?: { [key: string]: any }): Promise; - validate(address: string, opts: { [key: string]: any }): Promise; + 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; } interface Lists { diff --git a/types/mailgun-js/mailgun-js-tests.ts b/types/mailgun-js/mailgun-js-tests.ts index 12bf18e437..e06e683248 100644 --- a/types/mailgun-js/mailgun-js-tests.ts +++ b/types/mailgun-js/mailgun-js-tests.ts @@ -33,12 +33,12 @@ mailgun.messages().send(exampleSendData, (err, body) => {}); let validationResultPromise: Promise; validationResultPromise = mailgun.validate("foo@mailgun.net"); validationResultPromise = mailgun.validate("foo@mailgun.net", true); -validationResultPromise = mailgun.validate("foo@mailgun.net", true, { option: "option" }); -validationResultPromise = mailgun.validate("foo@mailgun.net", { option: "option" }); +validationResultPromise = mailgun.validate("foo@mailgun.net", true, { mailbox_verification: true }); +validationResultPromise = mailgun.validate("foo@mailgun.net", { mailbox_verification: false, api_key: "..." }); mailgun.validate("foo@mailgun.net", (error, body) => {}); mailgun.validate("foo@mailgun.net", true, (error, body) => {}); -mailgun.validate("foo@mailgun.net", true, { option: "option" }, (error, body) => {}); -mailgun.validate("foo@mailgun.net", { option: "option" }, (error, body) => {}); +mailgun.validate("foo@mailgun.net", true, { mailbox_verification: true }, (error, body) => {}); +mailgun.validate("foo@mailgun.net", { mailbox_verification: false, api_key: "..." }, (error, body) => {}); const validationResult6: mailgunFactory.validation.ValidateResponse = { address: "foo@mailgun.net",