mailgun.js 3.7.0 → 3.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,4 +4,4 @@
4
4
 
5
5
  /*! https://mths.be/punycode v1.3.2 by @mathias */
6
6
 
7
- /*! mailgun.js v3.6.1 */
7
+ /*! mailgun.js v3.7.0 */
package/index.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  import Client from './lib/client';
2
+ import { InputFormData } from './lib/interfaces/IFormData';
2
3
  import Options from './lib/interfaces/Options';
3
- import IFormData from './lib/interfaces/IFormData';
4
4
 
5
5
  class Mailgun {
6
- private formData: new () => IFormData
6
+ private formData: InputFormData
7
7
 
8
- constructor(FormData: new (...args: unknown[]) => IFormData) {
8
+ constructor(FormData: InputFormData) {
9
9
  this.formData = FormData;
10
10
  }
11
11
 
package/lib/client.ts CHANGED
@@ -16,7 +16,7 @@ import IpsClient from './ips';
16
16
  import IpPoolsClient from './ip-pools';
17
17
  import ListsClient from './lists';
18
18
  import MailListsMembers from './mailListMembers';
19
- import IFormData from './interfaces/IFormData';
19
+ import { InputFormData } from './interfaces/IFormData';
20
20
 
21
21
  export default class Client {
22
22
  private request;
@@ -35,7 +35,7 @@ export default class Client {
35
35
  public ip_pools;
36
36
  public lists;
37
37
 
38
- constructor(options: Options, formData: new (...args: unknown[]) => IFormData) {
38
+ constructor(options: Options, formData: InputFormData) {
39
39
  const config: RequestOptions = { ...options } as RequestOptions;
40
40
 
41
41
  if (!config.url) {
@@ -1,19 +1,9 @@
1
- interface Headers {
2
- [key: string]: any;
3
- }
1
+ import NodeFormData from 'form-data';
4
2
 
5
- interface AppendOptions {
6
- header?: string | Headers;
7
- knownLength?: number;
8
- filename?: string;
9
- filepath?: string;
10
- contentType?: string;
3
+ export interface IFormDataOptions {
4
+ [key: string]: any;
11
5
  }
12
6
 
13
- export default abstract class IFormData {
14
- // eslint-disable-next-line no-useless-constructor
15
- constructor() { // description of type. Should not be used for creating objects
16
- }
17
-
18
- abstract append(key: string, value: any, options?: AppendOptions | string): void
7
+ export interface InputFormData {
8
+ new (options?: HTMLFormElement | IFormDataOptions): NodeFormData | FormData;
19
9
  }
package/lib/request.ts CHANGED
@@ -1,14 +1,20 @@
1
+ import NodeFormData from 'form-data';
1
2
  import base64 from 'base-64';
2
3
  import urljoin from 'url-join';
3
4
  import ky from 'ky-universal';
4
5
  import APIError from './error';
5
6
  import RequestOptions from './interfaces/RequestOptions';
6
7
  import APIErrorOptions from './interfaces/APIErrorOptions';
7
- import IFormData from './interfaces/IFormData';
8
+ import { InputFormData } from './interfaces/IFormData';
8
9
  import APIResponse from './interfaces/ApiResponse';
9
10
 
10
11
  const isStream = (attachment: any) => typeof attachment === 'object' && typeof attachment.pipe === 'function';
11
12
 
13
+ function isNodeFormData(formDataInstance: NodeFormData | FormData)
14
+ : formDataInstance is NodeFormData {
15
+ return (<NodeFormData>formDataInstance).getHeaders !== undefined;
16
+ }
17
+
12
18
  const getAttachmentOptions = (item: any): {
13
19
  filename?: string,
14
20
  contentType?: string,
@@ -44,9 +50,9 @@ class Request {
44
50
  private url: string;
45
51
  private timeout: number;
46
52
  private headers: any;
47
- private formData: new () => IFormData;
53
+ private formData: InputFormData;
48
54
 
49
- constructor(options: RequestOptions, formData: new () => IFormData) {
55
+ constructor(options: RequestOptions, formData: InputFormData) {
50
56
  this.username = options.username;
51
57
  this.key = options.key;
52
58
  this.url = options.url as string;
@@ -151,21 +157,25 @@ class Request {
151
157
  return this.command('put', url, formData, params);
152
158
  }
153
159
 
154
- createFormData(data: any): IFormData {
155
- const appendFileToFD = (key: string, obj : any, formDataInstance: IFormData): void => {
160
+ createFormData(data: any): NodeFormData | FormData {
161
+ const appendFileToFD = (
162
+ key: string,
163
+ obj: any,
164
+ formDataInstance: NodeFormData | FormData
165
+ ): void => {
156
166
  const isStreamData = isStream(obj);
157
167
  const objData = isStreamData ? obj : obj.data;
158
168
  const options = getAttachmentOptions(obj);
159
- if (isStreamData) {
169
+ if (isNodeFormData(formDataInstance)) {
160
170
  formDataInstance.append(key, objData, options);
161
171
  return;
162
172
  }
163
173
  formDataInstance.append(key, objData, options.filename);
164
174
  };
165
175
 
166
- const formData: IFormData = Object.keys(data)
176
+ const formData: NodeFormData | FormData = Object.keys(data)
167
177
  .filter(function (key) { return data[key]; })
168
- .reduce((formDataAcc, key) => {
178
+ .reduce((formDataAcc: NodeFormData | FormData, key) => {
169
179
  if (key === 'attachment' || key === 'inline') {
170
180
  const obj = data[key];
171
181
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mailgun.js",
3
- "version": "3.7.0",
3
+ "version": "3.7.1",
4
4
  "main": "dist/mailgun.node.js",
5
5
  "browser": "dist/mailgun.web.js",
6
6
  "types": "dist/index.d.ts",
@@ -12,6 +12,7 @@ import MessagesClient from '../lib/messages';
12
12
  import RoutesClient from '../lib/routes';
13
13
  import ValidateClient from '../lib/validate';
14
14
  import ParseClient from '../lib/parse';
15
+ import { InputFormData } from '../lib/interfaces/IFormData';
15
16
 
16
17
  describe('Client', function () {
17
18
  let client: any;
@@ -22,13 +23,13 @@ describe('Client', function () {
22
23
  key: 'key',
23
24
  public_key: 'key',
24
25
  timeout: 10000
25
- }, formData);
26
+ }, formData as InputFormData);
26
27
  });
27
28
 
28
29
  it('raises error when username is not provided', function () {
29
30
  expect(
30
31
  function () {
31
- return new Client({ key: 'key' } as any, formData);
32
+ return new Client({ key: 'key' } as any, formData as InputFormData);
32
33
  }
33
34
  ).to.throw('Parameter "username" is required');
34
35
  });
@@ -36,7 +37,7 @@ describe('Client', function () {
36
37
  it('raises error when key is not provided', function () {
37
38
  expect(
38
39
  function () {
39
- return new Client({ username: 'username' } as any, formData);
40
+ return new Client({ username: 'username' } as any, formData as InputFormData);
40
41
  }
41
42
  ).to.throw('Parameter "key" is required');
42
43
  });
@@ -5,6 +5,7 @@ import { expect } from 'chai';
5
5
  import Request from '../lib/request';
6
6
  import DomainClient from '../lib/domains';
7
7
  import RequestOptions from '../lib/interfaces/RequestOptions';
8
+ import { InputFormData } from '../lib/interfaces/IFormData';
8
9
 
9
10
  // TODO: fix types
10
11
  describe('DomainClient', function () {
@@ -12,7 +13,7 @@ describe('DomainClient', function () {
12
13
  let api: any;
13
14
 
14
15
  beforeEach(function () {
15
- client = new DomainClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData));
16
+ client = new DomainClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData as InputFormData));
16
17
  api = nock('https://api.mailgun.net');
17
18
  });
18
19
 
@@ -4,13 +4,14 @@ import formData from 'form-data';
4
4
  import EventClient from '../lib/events';
5
5
  import MgRequest from '../lib/request';
6
6
  import RequestOptions from '../lib/interfaces/RequestOptions';
7
+ import { InputFormData } from '../lib/interfaces/IFormData';
7
8
 
8
9
  describe('EventsClient', function () {
9
10
  let client: any;
10
11
  let api: any;
11
12
 
12
13
  beforeEach(function () {
13
- client = new EventClient(new MgRequest({ url: 'https://api.mailgun.net' } as RequestOptions, formData));
14
+ client = new EventClient(new MgRequest({ url: 'https://api.mailgun.net' } as RequestOptions, formData as InputFormData));
14
15
  api = nock('https://api.mailgun.net');
15
16
  });
16
17
 
package/test/ips.test.ts CHANGED
@@ -7,6 +7,7 @@ import RequestOptions from '../lib/interfaces/RequestOptions';
7
7
  import IpsClient from '../lib/ips';
8
8
 
9
9
  import { IpData, IpsListResponseBody } from '../lib/interfaces/Ips';
10
+ import { InputFormData } from '../lib/interfaces/IFormData';
10
11
 
11
12
  // TODO: fix types
12
13
  describe('DomainClient', function () {
@@ -14,7 +15,7 @@ describe('DomainClient', function () {
14
15
  let api: any;
15
16
 
16
17
  beforeEach(function () {
17
- client = new IpsClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData));
18
+ client = new IpsClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData as InputFormData));
18
19
  api = nock('https://api.mailgun.net');
19
20
  });
20
21
 
@@ -6,6 +6,7 @@ import ListsClient from '../lib/lists';
6
6
  import RequestOptions from '../lib/interfaces/RequestOptions';
7
7
  import MailListMembers from '../lib/mailListMembers';
8
8
  import { MailingList } from '../lib/interfaces/lists';
9
+ import { InputFormData } from '../lib/interfaces/IFormData';
9
10
 
10
11
  describe('ListsClient', function () {
11
12
  let client: any;
@@ -13,7 +14,7 @@ describe('ListsClient', function () {
13
14
  let defaultList : MailingList;
14
15
 
15
16
  beforeEach(function () {
16
- const reqObject = new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData);
17
+ const reqObject = new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData as InputFormData);
17
18
  const mailListMembers = new MailListMembers(reqObject);
18
19
  client = new ListsClient(reqObject, mailListMembers);
19
20
  api = nock('https://api.mailgun.net');
@@ -4,6 +4,7 @@ import Request from '../lib/request';
4
4
  import RequestOptions from '../lib/interfaces/RequestOptions';
5
5
  import MailListMembers from '../lib/mailListMembers';
6
6
  import { DeletedMember, MailListMember, NewMultipleMembersResponse } from '../lib/interfaces/mailListMembers';
7
+ import { InputFormData } from '../lib/interfaces/IFormData';
7
8
 
8
9
  describe('mailListsMembersClient', function () {
9
10
  let client: any;
@@ -11,7 +12,7 @@ describe('mailListsMembersClient', function () {
11
12
  let defaultListMember : MailListMember;
12
13
 
13
14
  beforeEach(function () {
14
- const reqObject = new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData);
15
+ const reqObject = new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData as InputFormData);
15
16
  client = new MailListMembers(reqObject);
16
17
  api = nock('https://api.mailgun.net');
17
18
  defaultListMember = {
@@ -6,6 +6,7 @@ import formData from 'form-data';
6
6
  import Request from '../lib/request';
7
7
  import MessagesClient from '../lib/messages';
8
8
  import RequestOptions from '../lib/interfaces/RequestOptions';
9
+ import { InputFormData } from '../lib/interfaces/IFormData';
9
10
 
10
11
  const mailgunLogo = fs.createReadStream(`${__dirname}/img/mailgun.png`);
11
12
 
@@ -14,7 +15,7 @@ describe('MessagesClient', function () {
14
15
  let api: any;
15
16
 
16
17
  beforeEach(function () {
17
- client = new MessagesClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData));
18
+ client = new MessagesClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData as InputFormData));
18
19
  api = nock('https://api.mailgun.net');
19
20
  });
20
21
 
@@ -7,6 +7,7 @@ import { expect } from 'chai';
7
7
  import Request from '../lib/request';
8
8
  import MessagesClient from '../lib/messages';
9
9
  import RequestOptions from '../lib/interfaces/RequestOptions';
10
+ import { InputFormData } from '../lib/interfaces/IFormData';
10
11
 
11
12
  const mailgunLogo = fs.createReadStream(`${__dirname}/img/mailgun.png`);
12
13
 
@@ -15,7 +16,7 @@ describe('MessagesClient', function () {
15
16
  let api: any;
16
17
 
17
18
  beforeEach(function () {
18
- client = new MessagesClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData));
19
+ client = new MessagesClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData as InputFormData));
19
20
  api = nock('https://api.mailgun.net');
20
21
  });
21
22
 
@@ -6,6 +6,7 @@ import Request from '../lib/request';
6
6
  import ParseClient from '../lib/parse';
7
7
 
8
8
  import RequestOptions from '../lib/interfaces/RequestOptions';
9
+ import { InputFormData } from '../lib/interfaces/IFormData';
9
10
 
10
11
  interface Data {
11
12
  parsed: string[],
@@ -17,7 +18,7 @@ describe('ParseClient', function () {
17
18
  let api: any;
18
19
 
19
20
  beforeEach(function () {
20
- client = new ParseClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData));
21
+ client = new ParseClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData as InputFormData));
21
22
  api = nock('https://api.mailgun.net');
22
23
  });
23
24
 
@@ -8,6 +8,7 @@ import Request from '../lib/request';
8
8
  import RequestOptions from '../lib/interfaces/RequestOptions';
9
9
  import APIError from '../lib/error';
10
10
  import APIResponse from '../lib/interfaces/ApiResponse';
11
+ import { InputFormData } from '../lib/interfaces/IFormData';
11
12
 
12
13
  describe('Request', function () {
13
14
  let headers: { [key: string]: string };
@@ -33,7 +34,7 @@ describe('Request', function () {
33
34
  url: 'https://api.mailgun.com',
34
35
  headers: { 'X-CSRF-Token': 'protectme' },
35
36
  timeout: 10000
36
- }, formData);
37
+ }, formData as InputFormData);
37
38
 
38
39
  await req.request('get', '/v2/some/resource1', {
39
40
  headers: { Test: 'Custom Header', 'X-CSRF-Token': 'protectme' },
@@ -46,7 +47,7 @@ describe('Request', function () {
46
47
  .get('/v2/some/resource')
47
48
  .reply(200, { id: 1, message: 'hello' });
48
49
 
49
- const req = new Request({ username: 'api', key: 'key', url: 'https://api.mailgun.com' } as RequestOptions, formData);
50
+ const req = new Request({ username: 'api', key: 'key', url: 'https://api.mailgun.com' } as RequestOptions, formData as InputFormData);
50
51
  const res = req.request('get', '/v2/some/resource')
51
52
  .then(function (response: APIResponse) {
52
53
  expect(response.status).to.eql(200);
@@ -61,7 +62,7 @@ describe('Request', function () {
61
62
  .get('/v2/some/resource')
62
63
  .reply(429, 'Too many requests');
63
64
 
64
- const req = new Request({ username: 'api', key: 'key', url: 'https://api.mailgun.com' } as RequestOptions, formData);
65
+ const req = new Request({ username: 'api', key: 'key', url: 'https://api.mailgun.com' } as RequestOptions, formData as InputFormData);
65
66
  const res = req.request('get', '/v2/some/resource').catch(function (error: APIError) {
66
67
  expect(error.status).to.eql(429);
67
68
  expect(error.details).to.eql('Too many requests');
@@ -80,7 +81,7 @@ describe('Request', function () {
80
81
  .query(search)
81
82
  .reply(200, {});
82
83
 
83
- const req = new Request({ url: 'https://api.mailgun.com' } as RequestOptions, formData);
84
+ const req = new Request({ url: 'https://api.mailgun.com' } as RequestOptions, formData as InputFormData);
84
85
  await req.query('get', '/v2/some/resource2', search);
85
86
  });
86
87
  });
@@ -93,7 +94,7 @@ describe('Request', function () {
93
94
  .post('/v2/some/resource')
94
95
  .reply(200, {});
95
96
 
96
- const req = new Request({ url: 'https://api.mailgun.com' } as RequestOptions, formData);
97
+ const req = new Request({ url: 'https://api.mailgun.com' } as RequestOptions, formData as InputFormData);
97
98
  const res = req.command('post', '/v2/some/resource', body);
98
99
 
99
100
  return res;
@@ -4,6 +4,7 @@ import nock from 'nock';
4
4
  import Request from '../lib/request';
5
5
  import RoutesClient from '../lib/routes';
6
6
  import RequestOptions from '../lib/interfaces/RequestOptions';
7
+ import { InputFormData } from '../lib/interfaces/IFormData';
7
8
 
8
9
  interface Data {
9
10
  actions: string[],
@@ -19,7 +20,7 @@ describe('RoutesClient', function () {
19
20
  let api: any;
20
21
 
21
22
  beforeEach(function () {
22
- client = new RoutesClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData));
23
+ client = new RoutesClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData as InputFormData));
23
24
  api = nock('https://api.mailgun.net');
24
25
  });
25
26
 
@@ -5,13 +5,14 @@ import Request from '../lib/request';
5
5
  import StatsClient from '../lib/stats';
6
6
  import RequestOptions from '../lib/interfaces/RequestOptions';
7
7
  import StatsOptions from '../lib/interfaces/StatsOptions';
8
+ import { InputFormData } from '../lib/interfaces/IFormData';
8
9
 
9
10
  describe('StatsClient', function () {
10
11
  let client: any;
11
12
  let api: any;
12
13
 
13
14
  beforeEach(function () {
14
- client = new StatsClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData));
15
+ client = new StatsClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData as InputFormData));
15
16
  api = nock('https://api.mailgun.net');
16
17
  });
17
18
 
@@ -5,6 +5,7 @@ import nock from 'nock';
5
5
  import Request from '../lib/request';
6
6
  import SuppressionClient from '../lib/suppressions';
7
7
  import RequestOptions from '../lib/interfaces/RequestOptions';
8
+ import { InputFormData } from '../lib/interfaces/IFormData';
8
9
 
9
10
  chai.should();
10
11
 
@@ -13,7 +14,7 @@ describe('SuppressionsClient', function () {
13
14
  let api: any;
14
15
 
15
16
  beforeEach(function () {
16
- client = new SuppressionClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData));
17
+ client = new SuppressionClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData as InputFormData));
17
18
  api = nock('https://api.mailgun.net');
18
19
  });
19
20
 
@@ -4,13 +4,14 @@ import nock from 'nock';
4
4
  import Request from '../lib/request';
5
5
  import ValidateClient from '../lib/validate';
6
6
  import RequestOptions from '../lib/interfaces/RequestOptions';
7
+ import { InputFormData } from '../lib/interfaces/IFormData';
7
8
 
8
9
  describe('ValidateClient', function () {
9
10
  let client: any;
10
11
  let api: any;
11
12
 
12
13
  beforeEach(function () {
13
- client = new ValidateClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData));
14
+ client = new ValidateClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData as InputFormData));
14
15
  api = nock('https://api.mailgun.net');
15
16
  });
16
17
 
@@ -3,13 +3,14 @@ import nock from 'nock';
3
3
  import Request from '../lib/request';
4
4
  import WebhookClient from '../lib/webhooks';
5
5
  import RequestOptions from '../lib/interfaces/RequestOptions';
6
+ import { InputFormData } from '../lib/interfaces/IFormData';
6
7
 
7
8
  describe('WebhookClient', function () {
8
9
  let client: any;
9
10
  let api: any;
10
11
 
11
12
  beforeEach(function () {
12
- client = new WebhookClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData));
13
+ client = new WebhookClient(new Request({ url: 'https://api.mailgun.net' } as RequestOptions, formData as InputFormData));
13
14
  api = nock('https://api.mailgun.net');
14
15
  });
15
16