mailgun.js 4.0.1 → 4.1.3

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 v4.0.0 */
7
+ /*! mailgun.js v4.1.2 */
package/lib/client.ts CHANGED
@@ -18,6 +18,7 @@ import MailListsMembers from './mailListMembers';
18
18
  import { InputFormData } from './interfaces/IFormData';
19
19
  import DomainCredentialsClient from './domainsCredentials';
20
20
  import MultipleValidationClient from './multipleValidation';
21
+ import DomainTemplatesClient from './domainsTemplates';
21
22
 
22
23
  export default class Client {
23
24
  private request;
@@ -53,9 +54,10 @@ export default class Client {
53
54
  this.request = new Request(config, formData);
54
55
  const mailListsMembers = new MailListsMembers(this.request);
55
56
  const domainCredentialsClient = new DomainCredentialsClient(this.request);
57
+ const domainTemplatesClient = new DomainTemplatesClient(this.request);
56
58
  const multipleValidationClient = new MultipleValidationClient(this.request);
57
59
 
58
- this.domains = new DomainClient(this.request, domainCredentialsClient);
60
+ this.domains = new DomainClient(this.request, domainCredentialsClient, domainTemplatesClient);
59
61
  this.webhooks = new WebhookClient(this.request);
60
62
  this.events = new EventClient(this.request);
61
63
  this.stats = new StatsClient(this.request);
package/lib/domains.ts CHANGED
@@ -37,7 +37,10 @@ import {
37
37
  UpdateDomainTrackingResponse,
38
38
  UpdatedOpenTracking
39
39
  } from './interfaces/DomainTracking';
40
+ import { IDomainCredentials } from './interfaces/DomainCredentials';
41
+ import { IDomainTemplatesClient } from './interfaces/DomainTemplates';
40
42
  import DomainCredentialsClient from './domainsCredentials';
43
+ import DomainTemplatesClient from './domainsTemplates';
41
44
 
42
45
  export class Domain {
43
46
  name: string;
@@ -72,11 +75,17 @@ export class Domain {
72
75
 
73
76
  export default class DomainClient {
74
77
  request: Request;
75
- public domainCredentials: DomainCredentialsClient;
76
-
77
- constructor(request: Request, domainCredentialsClient: DomainCredentialsClient) {
78
+ public domainCredentials: IDomainCredentials;
79
+ public domainTemplates: IDomainTemplatesClient
80
+
81
+ constructor(
82
+ request: Request,
83
+ domainCredentialsClient: DomainCredentialsClient,
84
+ domainTemplatesClient: DomainTemplatesClient
85
+ ) {
78
86
  this.request = request;
79
87
  this.domainCredentials = domainCredentialsClient;
88
+ this.domainTemplates = domainTemplatesClient;
80
89
  }
81
90
 
82
91
  private _parseMessage(response: DestroyedDomainResponse) : MessageResponse {
@@ -0,0 +1,234 @@
1
+ import urljoin from 'url-join';
2
+ import APIResponse from './interfaces/ApiResponse';
3
+ import Request from './request';
4
+
5
+ import {
6
+ CreateDomainTemplateAPIResponse,
7
+ CreateDomainTemplateVersionAPIResponse,
8
+ CreateDomainTemplateVersionResult,
9
+ DomainTemplate, DomainTemplateData,
10
+ DomainTemplatesQuery,
11
+ DomainTemplateUpdateData,
12
+ DomainTemplateUpdateVersionData,
13
+ DomainTemplateVersionData,
14
+ GetDomainTemplateAPIResponse,
15
+ IDomainTemplatesClient,
16
+ ListDomainTemplatesAPIResponse,
17
+ ListDomainTemplatesResult,
18
+ ListDomainTemplateVersionsAPIResponse,
19
+ ListDomainTemplateVersionsResult,
20
+ MutateDomainTemplateVersionAPIResponse,
21
+ MutateDomainTemplateVersionResult,
22
+ NotificationAPIResponse,
23
+ NotificationResult,
24
+ ShortTemplateVersion,
25
+ TemplateVersion,
26
+ UpdateOrDeleteDomainTemplateAPIResponse,
27
+ UpdateOrDeleteDomainTemplateResult
28
+ } from './interfaces/DomainTemplates';
29
+
30
+ export class DomainTemplateItem implements DomainTemplate {
31
+ name : string;
32
+ description : string;
33
+ createdAt : Date | '';
34
+ createdBy : string;
35
+ id : string;
36
+ version?: TemplateVersion;
37
+ versions?: ShortTemplateVersion[];
38
+
39
+ constructor(domainTemplateFromAPI: DomainTemplate) {
40
+ this.name = domainTemplateFromAPI.name;
41
+ this.description = domainTemplateFromAPI.description;
42
+ this.createdAt = domainTemplateFromAPI.createdAt ? new Date(domainTemplateFromAPI.createdAt) : '';
43
+ this.createdBy = domainTemplateFromAPI.createdBy;
44
+ this.id = domainTemplateFromAPI.id;
45
+
46
+ if (domainTemplateFromAPI.version) {
47
+ this.version = domainTemplateFromAPI.version;
48
+ if (domainTemplateFromAPI.version.createdAt) {
49
+ this.version.createdAt = new Date(domainTemplateFromAPI.version.createdAt);
50
+ }
51
+ }
52
+
53
+ if (domainTemplateFromAPI.versions && domainTemplateFromAPI.versions.length) {
54
+ this.versions = domainTemplateFromAPI.versions.map((version) => {
55
+ const result = { ...version };
56
+ result.createdAt = new Date(version.createdAt);
57
+ return result;
58
+ });
59
+ }
60
+ }
61
+ }
62
+
63
+ export default class DomainTemplatesClient implements IDomainTemplatesClient {
64
+ baseRoute: string;
65
+ request: Request;
66
+
67
+ constructor(request: Request) {
68
+ this.request = request;
69
+ this.baseRoute = '/v3/';
70
+ }
71
+
72
+ private parseCreationResponse(data: CreateDomainTemplateAPIResponse): DomainTemplateItem {
73
+ return new DomainTemplateItem(data.body.template);
74
+ }
75
+
76
+ private parseCreationVersionResponse(
77
+ data: CreateDomainTemplateVersionAPIResponse
78
+ ): CreateDomainTemplateVersionResult {
79
+ const result: CreateDomainTemplateVersionResult = {} as CreateDomainTemplateVersionResult;
80
+ result.status = data.status;
81
+ result.message = data.body.message;
82
+ if (data.body && data.body.template) {
83
+ result.template = new DomainTemplateItem(data.body.template);
84
+ }
85
+ return result;
86
+ }
87
+
88
+ private parseMutationResponse(
89
+ data: UpdateOrDeleteDomainTemplateAPIResponse
90
+ ): UpdateOrDeleteDomainTemplateResult {
91
+ const result: UpdateOrDeleteDomainTemplateResult = {} as UpdateOrDeleteDomainTemplateResult;
92
+ result.status = data.status;
93
+ result.message = data.body.message;
94
+ if (data.body && data.body.template) {
95
+ result.templateName = data.body.template.name;
96
+ }
97
+ return result;
98
+ }
99
+
100
+ private parseNotificationResponse(data: NotificationAPIResponse): NotificationResult {
101
+ const result: NotificationResult = {} as NotificationResult;
102
+ result.status = data.status;
103
+ result.message = data.body.message;
104
+ return result;
105
+ }
106
+
107
+ private parseMutateTemplateVersionResponse(
108
+ data: MutateDomainTemplateVersionAPIResponse
109
+ ): MutateDomainTemplateVersionResult {
110
+ const result: MutateDomainTemplateVersionResult = {} as MutateDomainTemplateVersionResult;
111
+ result.status = data.status;
112
+ result.message = data.body.message;
113
+ if (data.body.template) {
114
+ result.templateName = data.body.template.name;
115
+ result.templateVersion = { tag: data.body.template.version.tag };
116
+ }
117
+ return result;
118
+ }
119
+
120
+ private parseList(response: ListDomainTemplatesAPIResponse): ListDomainTemplatesResult {
121
+ const data = {} as ListDomainTemplatesResult;
122
+
123
+ data.items = response.body.items.map((d: DomainTemplate) => new DomainTemplateItem(d));
124
+
125
+ data.pages = response.body.paging;
126
+
127
+ return data;
128
+ }
129
+
130
+ private parseListTemplateVersions(
131
+ response: ListDomainTemplateVersionsAPIResponse
132
+ ): ListDomainTemplateVersionsResult {
133
+ const data = {} as ListDomainTemplateVersionsResult;
134
+
135
+ data.template = new DomainTemplateItem(response.body.template);
136
+
137
+ data.pages = response.body.paging;
138
+
139
+ return data;
140
+ }
141
+
142
+ list(domain: string, query?: DomainTemplatesQuery): Promise<ListDomainTemplatesResult> {
143
+ return this.request.get(urljoin(this.baseRoute, domain, '/templates'), query)
144
+ .then(
145
+ (res: APIResponse) => this.parseList(res)
146
+ );
147
+ }
148
+
149
+ get(domain: string, templateName: string): Promise<DomainTemplateItem> {
150
+ return this.request.get(urljoin(this.baseRoute, domain, '/templates/', templateName))
151
+ .then(
152
+ (res: GetDomainTemplateAPIResponse) => new DomainTemplateItem(res.body.template)
153
+ );
154
+ }
155
+
156
+ create(
157
+ domain: string,
158
+ data: DomainTemplateData
159
+ ): Promise<DomainTemplateItem> {
160
+ return this.request.postWithFD(urljoin(this.baseRoute, domain, '/templates'), data)
161
+ .then((res: CreateDomainTemplateAPIResponse) => this.parseCreationResponse(res));
162
+ }
163
+
164
+ update(
165
+ domain: string,
166
+ templateName: string,
167
+ data: DomainTemplateUpdateData
168
+ ): Promise<UpdateOrDeleteDomainTemplateResult> {
169
+ return this.request.putWithFD(urljoin(this.baseRoute, domain, '/templates/', templateName), data)
170
+ .then((res: UpdateOrDeleteDomainTemplateAPIResponse) => this.parseMutationResponse(res));
171
+ }
172
+
173
+ destroy(domain: string, templateName: string): Promise<UpdateOrDeleteDomainTemplateResult> {
174
+ return this.request.delete(urljoin(this.baseRoute, domain, '/templates/', templateName))
175
+ .then((res: UpdateOrDeleteDomainTemplateAPIResponse) => this.parseMutationResponse(res));
176
+ }
177
+
178
+ destroyAll(domain: string): Promise<NotificationResult> {
179
+ return this.request.delete(urljoin(this.baseRoute, domain, '/templates'))
180
+ .then((res: NotificationAPIResponse) => this.parseNotificationResponse(res));
181
+ }
182
+
183
+ createVersion(
184
+ domain: string,
185
+ templateName: string,
186
+ data: DomainTemplateVersionData
187
+ ): Promise<CreateDomainTemplateVersionResult> {
188
+ return this.request.postWithFD(urljoin(this.baseRoute, domain, '/templates/', templateName, '/versions'), data)
189
+ .then(
190
+ (res: CreateDomainTemplateVersionAPIResponse) => this.parseCreationVersionResponse(res)
191
+ );
192
+ }
193
+
194
+ getVersion(domain: string, templateName: string, tag: string): Promise<DomainTemplateItem> {
195
+ return this.request.get(urljoin(this.baseRoute, domain, '/templates/', templateName, '/versions/', tag))
196
+ .then(
197
+ (res: GetDomainTemplateAPIResponse) => new DomainTemplateItem(res.body.template)
198
+ );
199
+ }
200
+
201
+ updateVersion(
202
+ domain: string,
203
+ templateName: string,
204
+ tag: string,
205
+ data: DomainTemplateUpdateVersionData
206
+ ): Promise<MutateDomainTemplateVersionResult> {
207
+ return this.request.putWithFD(urljoin(this.baseRoute, domain, '/templates/', templateName, '/versions/', tag), data)
208
+ .then(
209
+ // eslint-disable-next-line max-len
210
+ (res: MutateDomainTemplateVersionAPIResponse) => this.parseMutateTemplateVersionResponse(res)
211
+ );
212
+ }
213
+
214
+ destroyVersion(
215
+ domain: string,
216
+ templateName: string,
217
+ tag: string
218
+ ): Promise<MutateDomainTemplateVersionResult> {
219
+ return this.request.delete(urljoin(this.baseRoute, domain, '/templates/', templateName, '/versions/', tag))
220
+ // eslint-disable-next-line max-len
221
+ .then((res: MutateDomainTemplateVersionAPIResponse) => this.parseMutateTemplateVersionResponse(res));
222
+ }
223
+
224
+ listVersions(
225
+ domain: string,
226
+ templateName: string,
227
+ query?: DomainTemplatesQuery
228
+ ): Promise<ListDomainTemplateVersionsResult> {
229
+ return this.request.get(urljoin(this.baseRoute, domain, '/templates', templateName, '/versions'), query)
230
+ .then(
231
+ (res: ListDomainTemplateVersionsAPIResponse) => this.parseListTemplateVersions(res)
232
+ );
233
+ }
234
+ }
@@ -0,0 +1,234 @@
1
+ import { DomainTemplateItem } from '../domainsTemplates';
2
+
3
+ export enum YesNo {
4
+ YES = 'yes',
5
+ NO = 'no'
6
+ }
7
+
8
+ export enum Pages {
9
+ FIRST = 'first',
10
+ LAST = 'last',
11
+ NEXT = 'next',
12
+ PREV = 'prev'
13
+ }
14
+ /* eslint-disable camelcase */
15
+ export interface DomainTemplateData {
16
+ name: string;
17
+ description: string;
18
+ template: string;
19
+ tag?: string;
20
+ engine?: string;
21
+ comment?: string;
22
+ }
23
+
24
+ export interface DomainTemplateVersionData {
25
+ template: string;
26
+ tag: string;
27
+ engine?: string;
28
+ comment?: string;
29
+ active?: YesNo;
30
+ }
31
+
32
+ export interface DomainTemplateUpdateData {
33
+ description: string;
34
+ }
35
+
36
+ export interface DomainTemplateUpdateVersionData {
37
+ template?: string;
38
+ comment?: string;
39
+ active?: YesNo;
40
+ }
41
+
42
+ export interface DomainTemplatesQuery {
43
+ page: Pages;
44
+ limit: number;
45
+ p: string;
46
+ }
47
+
48
+ export interface ShortTemplateVersion {
49
+ tag: string;
50
+ engine: string;
51
+ mjml: string;
52
+ createdAt: string | Date;
53
+ comment: string;
54
+ active: boolean;
55
+ id: string;
56
+ }
57
+
58
+ export interface TemplateVersion extends ShortTemplateVersion{
59
+ template: string;
60
+ }
61
+ export interface DomainTemplate {
62
+ name: string;
63
+ description: string;
64
+ createdAt: string | Date;
65
+ createdBy: string;
66
+ id: string;
67
+ version?: TemplateVersion;
68
+ versions?: ShortTemplateVersion[];
69
+ }
70
+
71
+ export interface CreateDomainTemplateAPIResponse {
72
+ status: number;
73
+ body: {
74
+ message: string;
75
+ template: DomainTemplate;
76
+ };
77
+ }
78
+
79
+ export interface ListDomainTemplatesAPIResponse {
80
+ status: number;
81
+ body: {
82
+ items: DomainTemplate[];
83
+ paging: {
84
+ first: string;
85
+ last: string;
86
+ next: string;
87
+ previous: string;
88
+ };
89
+ };
90
+ }
91
+
92
+ export interface ListDomainTemplatesResult {
93
+ items: DomainTemplate[];
94
+ pages: {
95
+ first: string;
96
+ last: string;
97
+ next: string;
98
+ previous: string;
99
+ };
100
+ }
101
+
102
+ export interface GetDomainTemplateAPIResponse {
103
+ status: number;
104
+ body: {
105
+ template: DomainTemplate;
106
+ };
107
+ }
108
+
109
+ export interface UpdateOrDeleteDomainTemplateAPIResponse {
110
+ status: number;
111
+ body: {
112
+ message: string;
113
+ template: {
114
+ name: string
115
+ }
116
+ };
117
+ }
118
+
119
+ export interface UpdateOrDeleteDomainTemplateResult {
120
+ status: number;
121
+ message: string;
122
+ templateName?: string;
123
+ }
124
+
125
+ export interface NotificationAPIResponse {
126
+ status: number;
127
+ body: {
128
+ message: string;
129
+ };
130
+ }
131
+
132
+ export interface NotificationResult {
133
+ status: number;
134
+ message: string;
135
+ }
136
+
137
+ export interface CreateDomainTemplateVersionAPIResponse {
138
+ status: number;
139
+ body: {
140
+ message: string;
141
+ template: DomainTemplate;
142
+ };
143
+ }
144
+
145
+ export interface CreateDomainTemplateVersionResult {
146
+ status: number;
147
+ message: string;
148
+ template: DomainTemplate;
149
+ }
150
+
151
+ export interface MutateDomainTemplateVersionAPIResponse {
152
+ status: number;
153
+ body: {
154
+ message: string;
155
+ template: {
156
+ name: string;
157
+ version: {
158
+ tag: string;
159
+ }
160
+ };
161
+ };
162
+ }
163
+
164
+ export interface MutateDomainTemplateVersionResult {
165
+ status: number;
166
+ message: string;
167
+ templateName: string;
168
+ templateVersion: {
169
+ tag: string;
170
+ }
171
+ }
172
+
173
+ export interface ListDomainTemplateVersionsAPIResponse {
174
+ status: number;
175
+ body: {
176
+ template: {
177
+ name: string;
178
+ description: string;
179
+ createdAt: string;
180
+ createdBy: string;
181
+ id: string;
182
+ versions: ShortTemplateVersion[]
183
+ }
184
+ paging: {
185
+ first: string;
186
+ last: string;
187
+ next: string;
188
+ previous: string;
189
+ };
190
+ };
191
+ }
192
+
193
+ export interface ListDomainTemplateVersionsResult {
194
+ template: DomainTemplateItem;
195
+ pages: {
196
+ first: string;
197
+ last: string;
198
+ next: string;
199
+ previous: string;
200
+ };
201
+ }
202
+
203
+ export interface IDomainTemplatesClient {
204
+ list(domain: string, query?: DomainTemplatesQuery): Promise<ListDomainTemplatesResult>
205
+ get(domain: string, templateName: string): Promise<DomainTemplateItem>
206
+ create(domain: string, data: DomainTemplateData): Promise<DomainTemplateItem>
207
+ update(
208
+ domain: string,
209
+ templateName: string,
210
+ data: DomainTemplateUpdateData
211
+ ): Promise<UpdateOrDeleteDomainTemplateResult>
212
+ destroy(domain: string, templateName: string): Promise<UpdateOrDeleteDomainTemplateResult>
213
+ destroyAll(domain: string): Promise<NotificationResult>
214
+ createVersion(
215
+ domain: string,
216
+ templateName: string,
217
+ data: DomainTemplateVersionData
218
+ ) : Promise<CreateDomainTemplateVersionResult>
219
+ getVersion(domain: string, templateName: string, tag: string): Promise<DomainTemplateItem>
220
+ updateVersion(
221
+ domain: string,
222
+ templateName: string,
223
+ tag: string,
224
+ data: DomainTemplateUpdateVersionData
225
+ ): Promise<MutateDomainTemplateVersionResult>
226
+ destroyVersion(
227
+ domain: string,
228
+ templateName: string,
229
+ tag: string): Promise<MutateDomainTemplateVersionResult>
230
+ listVersions(
231
+ domain: string,
232
+ templateName: string,
233
+ query?: DomainTemplatesQuery): Promise<ListDomainTemplateVersionsResult>
234
+ }
@@ -1,15 +1,23 @@
1
- interface StatsOptions {
1
+ export interface Stat {
2
+ time: string | Date,
3
+ delivered: {
4
+ smtp: number,
5
+ http: number,
6
+ total: number
7
+ }
8
+ }
9
+
10
+ export interface StatsOptions {
2
11
  start: string | Date;
3
12
  end: string | Date;
4
13
  resolution: string;
5
- stats: {
6
- time: string | Date,
7
- delivered: {
8
- smtp: number,
9
- http: number,
10
- total: number
11
- }
12
- }[];
14
+ stats: Stat[];
13
15
  }
14
16
 
15
- export default StatsOptions;
17
+ export interface StatsQuery {
18
+ event: string | string[];
19
+ start: string | Date;
20
+ end: string | Date;
21
+ resolution: 'hour'| 'day' | 'month';
22
+ duration: string;
23
+ }
@@ -16,3 +16,10 @@ export interface UnsubscribeData {
16
16
  tags: any;
17
17
  created_at: string | Date;
18
18
  }
19
+
20
+ export interface WhiteListData {
21
+ type: string;
22
+ value: string;
23
+ reason: string;
24
+ createdAt: string | Date;
25
+ }
package/lib/ip-pools.ts CHANGED
@@ -16,12 +16,12 @@ export default class IpPoolsClient {
16
16
  }
17
17
 
18
18
  create(data: { name: string, description?: string, ips?: string[] }) {
19
- return this.request.post('/v1/ip_pools', data)
19
+ return this.request.postWithFD('/v1/ip_pools', data)
20
20
  .then((response: { body: { message: string, pool_id: string } }) => response?.body);
21
21
  }
22
22
 
23
23
  update(poolId: string, data: IpPoolUpdateData) : Promise<any> {
24
- return this.request.patch(`/v1/ip_pools/${poolId}`, data)
24
+ return this.request.patchWithFD(`/v1/ip_pools/${poolId}`, data)
25
25
  .then((response: { body: any }) => response?.body);
26
26
  }
27
27
 
package/lib/request.ts CHANGED
@@ -165,6 +165,17 @@ class Request {
165
165
  return this.command('put', url, formData, params);
166
166
  }
167
167
 
168
+ patchWithFD(url: string, data: any): Promise<APIResponse> {
169
+ if (!data) {
170
+ throw new Error('Please provide data object');
171
+ }
172
+ const params: any = {
173
+ headers: { 'Content-Type': null }
174
+ };
175
+ const formData = this.createFormData(data);
176
+ return this.command('patch', url, formData, params);
177
+ }
178
+
168
179
  createFormData(data: any): NodeFormData | FormData {
169
180
  const formData: NodeFormData | FormData = Object.keys(data)
170
181
  .filter(function (key) { return data[key]; })
package/lib/stats.ts CHANGED
@@ -1,18 +1,18 @@
1
1
  import urljoin from 'url-join';
2
2
  import Request from './request';
3
- import StatsOptions from './interfaces/StatsOptions';
3
+ import { StatsQuery, StatsOptions, Stat } from './interfaces/StatsOptions';
4
4
 
5
5
  class Stats {
6
6
  start: Date;
7
7
  end: Date;
8
8
  resolution: string;
9
- stats: any;
9
+ stats: Stat[];
10
10
 
11
11
  constructor(data: StatsOptions) {
12
12
  this.start = new Date(data.start);
13
13
  this.end = new Date(data.end);
14
14
  this.resolution = data.resolution;
15
- this.stats = data.stats.map(function (stat: { time: string | Date }) {
15
+ this.stats = data.stats.map(function (stat: Stat) {
16
16
  const res = { ...stat };
17
17
  res.time = new Date(stat.time);
18
18
  return res;
@@ -27,17 +27,36 @@ export default class StatsClient {
27
27
  this.request = request;
28
28
  }
29
29
 
30
- _parseStats(response: { body: StatsOptions }) {
30
+ private prepareSearchParams(query: StatsQuery): Array<Array<string>> {
31
+ let searchParams = [];
32
+ if (typeof query === 'object' && Object.keys(query).length) {
33
+ searchParams = Object.entries(query).reduce((arrayWithPairs, currentPair) => {
34
+ const [key, value] = currentPair;
35
+ if (Array.isArray(value) && value.length) {
36
+ const repeatedProperty = value.map((item) => [key, item]);
37
+ return [...arrayWithPairs, ...repeatedProperty];
38
+ }
39
+ arrayWithPairs.push([key, value]);
40
+ return arrayWithPairs;
41
+ }, []);
42
+ }
43
+
44
+ return searchParams;
45
+ }
46
+
47
+ _parseStats(response: { body: StatsOptions }): Stats {
31
48
  return new Stats(response.body);
32
49
  }
33
50
 
34
- getDomain(domain: string, query: any) {
35
- return this.request.get(urljoin('/v3', domain, 'stats/total'), query)
51
+ getDomain(domain: string, query?: StatsQuery): Promise<Stats> {
52
+ const searchParams = this.prepareSearchParams(query);
53
+ return this.request.get(urljoin('/v3', domain, 'stats/total'), searchParams)
36
54
  .then(this._parseStats);
37
55
  }
38
56
 
39
- getAccount(query: any) {
40
- return this.request.get('/v3/stats/total', query)
57
+ getAccount(query?: StatsQuery): Promise<Stats> {
58
+ const searchParams = this.prepareSearchParams(query);
59
+ return this.request.get('/v3/stats/total', searchParams)
41
60
  .then(this._parseStats);
42
61
  }
43
62
  }