mailisk 2.2.3 → 2.2.4
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.
- package/dist/index.js +5 -96
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -89
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/dist/index.d.mts +0 -338
package/dist/index.js
CHANGED
|
@@ -19,29 +19,22 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
19
19
|
return to;
|
|
20
20
|
};
|
|
21
21
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
22
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
23
|
mod
|
|
28
24
|
));
|
|
29
25
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
26
|
|
|
31
27
|
// src/index.ts
|
|
32
|
-
var
|
|
33
|
-
__export(
|
|
28
|
+
var src_exports = {};
|
|
29
|
+
__export(src_exports, {
|
|
34
30
|
MailiskClient: () => MailiskClient
|
|
35
31
|
});
|
|
36
|
-
module.exports = __toCommonJS(
|
|
32
|
+
module.exports = __toCommonJS(src_exports);
|
|
37
33
|
|
|
38
34
|
// src/mailisk.ts
|
|
39
35
|
var import_axios = __toESM(require("axios"));
|
|
40
36
|
var import_nodemailer = __toESM(require("nodemailer"));
|
|
41
37
|
var MailiskClient = class {
|
|
42
|
-
static {
|
|
43
|
-
__name(this, "MailiskClient");
|
|
44
|
-
}
|
|
45
38
|
constructor({ apiKey, baseUrl, auth }) {
|
|
46
39
|
this.axiosInstance = import_axios.default.create({
|
|
47
40
|
headers: {
|
|
@@ -52,15 +45,6 @@ var MailiskClient = class {
|
|
|
52
45
|
});
|
|
53
46
|
}
|
|
54
47
|
axiosInstance;
|
|
55
|
-
/**
|
|
56
|
-
* Search SMS messages sent to a phone number.
|
|
57
|
-
*
|
|
58
|
-
* @example
|
|
59
|
-
* Search for SMS messages sent to a phone number
|
|
60
|
-
* ```typescript
|
|
61
|
-
* const { data: smsMessages } = await client.searchSmsMessages("1234567890");
|
|
62
|
-
* ```
|
|
63
|
-
*/
|
|
64
48
|
async searchSmsMessages(phoneNumber, params, config) {
|
|
65
49
|
let _params = { ...params };
|
|
66
50
|
if (params?.from_date === void 0 || params?.from_date === null) {
|
|
@@ -86,43 +70,15 @@ var MailiskClient = class {
|
|
|
86
70
|
params: requestParams
|
|
87
71
|
})).data;
|
|
88
72
|
}
|
|
89
|
-
/**
|
|
90
|
-
* List all SMS phone numbers associated with the current account.
|
|
91
|
-
*
|
|
92
|
-
* @example
|
|
93
|
-
* List all SMS phone numbers
|
|
94
|
-
* ```typescript
|
|
95
|
-
* const { data: smsNumbers } = await client.listSmsNumbers();
|
|
96
|
-
* ```
|
|
97
|
-
*/
|
|
98
73
|
async listSmsNumbers() {
|
|
99
74
|
return (await this.axiosInstance.get("api/sms/numbers")).data;
|
|
100
75
|
}
|
|
101
76
|
async sendVirtualSms(params) {
|
|
102
77
|
return (await this.axiosInstance.post("api/sms/virtual", params)).data;
|
|
103
78
|
}
|
|
104
|
-
/**
|
|
105
|
-
* List all namespaces that belong to the current account (API key).
|
|
106
|
-
*/
|
|
107
79
|
async listNamespaces() {
|
|
108
80
|
return (await this.axiosInstance.get("api/namespaces")).data;
|
|
109
81
|
}
|
|
110
|
-
/**
|
|
111
|
-
* Send an email using the Virtual SMTP.
|
|
112
|
-
*
|
|
113
|
-
* These emails can only be sent to valid Mailisk namespaces, i.e. emails that end in @mynamespace.mailisk.net
|
|
114
|
-
*
|
|
115
|
-
* @example
|
|
116
|
-
* For example, sending a test email:
|
|
117
|
-
* ```typescript
|
|
118
|
-
* client.sendVirtualEmail(namespace, {
|
|
119
|
-
* from: "test@example.com",
|
|
120
|
-
* to: `john@${namespace}.mailisk.net`,
|
|
121
|
-
* subject: "This is a test",
|
|
122
|
-
* text: "Testing",
|
|
123
|
-
* });
|
|
124
|
-
* ```
|
|
125
|
-
*/
|
|
126
82
|
async sendVirtualEmail(namespace, params) {
|
|
127
83
|
const smtpSettings = await this.getSmtpSettings(namespace);
|
|
128
84
|
const transport = import_nodemailer.default.createTransport({
|
|
@@ -146,42 +102,10 @@ var MailiskClient = class {
|
|
|
146
102
|
});
|
|
147
103
|
transport.close();
|
|
148
104
|
}
|
|
149
|
-
/**
|
|
150
|
-
* Search inbox of a namespace.
|
|
151
|
-
*
|
|
152
|
-
* By default, this calls the api using the `wait` flag. This means the call won't timeout until at least one email is received or 5 minutes pass.
|
|
153
|
-
* It also uses a default `from_timestamp` of **current timestamp - 15 minutes**. This means that older emails will be ignored.
|
|
154
|
-
*
|
|
155
|
-
* Both of these settings can be overriden by passing them in the `params` object.
|
|
156
|
-
*
|
|
157
|
-
* @example
|
|
158
|
-
* Get the latest emails
|
|
159
|
-
* ```typescript
|
|
160
|
-
* const { data: emails } = await client.searchInbox(namespace);
|
|
161
|
-
* ```
|
|
162
|
-
*
|
|
163
|
-
* @example
|
|
164
|
-
* Get the latest emails for a specific email address
|
|
165
|
-
* ```typescript
|
|
166
|
-
* const { data: emails } = await client.searchInbox(namespace, {
|
|
167
|
-
* to_addr_prefix: 'john@mynamespace.mailisk.net'
|
|
168
|
-
* });
|
|
169
|
-
* ```
|
|
170
|
-
*
|
|
171
|
-
* @example
|
|
172
|
-
* Get the last 20 emails in the namespace
|
|
173
|
-
* ```typescript
|
|
174
|
-
* const { data: emails } = await mailisk.searchInbox(namespace, {
|
|
175
|
-
* wait: false,
|
|
176
|
-
* from_timestamp: 0,
|
|
177
|
-
* limit: 20
|
|
178
|
-
* });
|
|
179
|
-
* ```
|
|
180
|
-
*/
|
|
181
105
|
async searchInbox(namespace, params, config) {
|
|
182
106
|
let _params = { ...params };
|
|
183
107
|
if (params?.from_timestamp === void 0 || params?.from_timestamp === null) {
|
|
184
|
-
_params.from_timestamp = Math.floor(
|
|
108
|
+
_params.from_timestamp = Math.floor(new Date().getTime() / 1e3) - 15 * 60;
|
|
185
109
|
}
|
|
186
110
|
if (params?.wait !== false) {
|
|
187
111
|
_params.wait = true;
|
|
@@ -198,9 +122,6 @@ var MailiskClient = class {
|
|
|
198
122
|
params: _params
|
|
199
123
|
})).data;
|
|
200
124
|
}
|
|
201
|
-
/**
|
|
202
|
-
* Get the SMTP settings for a namespace.
|
|
203
|
-
*/
|
|
204
125
|
async getSmtpSettings(namespace) {
|
|
205
126
|
const result = await this.axiosInstance.get(`api/smtp/${namespace}`);
|
|
206
127
|
return result.data;
|
|
@@ -209,25 +130,13 @@ var MailiskClient = class {
|
|
|
209
130
|
const result = await this.axiosInstance.get(`api/attachments/${attachmentId}`);
|
|
210
131
|
return result.data;
|
|
211
132
|
}
|
|
212
|
-
/**
|
|
213
|
-
* Download an attachment from an attachment ID.
|
|
214
|
-
*
|
|
215
|
-
* @example
|
|
216
|
-
* Download an attachment from an email
|
|
217
|
-
* ```typescript
|
|
218
|
-
* const attachment = email.attachments[0];
|
|
219
|
-
* const attachmentBuffer = await client.downloadAttachment(attachment.id);
|
|
220
|
-
*
|
|
221
|
-
* // save to file
|
|
222
|
-
* fs.writeFileSync(attachment.filename, attachmentBuffer);
|
|
223
|
-
* ```
|
|
224
|
-
*/
|
|
225
133
|
async downloadAttachment(attachmentId) {
|
|
226
134
|
const result = await this.getAttachment(attachmentId);
|
|
227
135
|
const response = await import_axios.default.get(result.data.download_url, { responseType: "arraybuffer" });
|
|
228
136
|
return Buffer.from(response.data);
|
|
229
137
|
}
|
|
230
138
|
};
|
|
139
|
+
__name(MailiskClient, "MailiskClient");
|
|
231
140
|
// Annotate the CommonJS export names for ESM import in node:
|
|
232
141
|
0 && (module.exports = {
|
|
233
142
|
MailiskClient
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/mailisk.ts"],"sourcesContent":["export * from \"./mailisk\";\n","import axios, { AxiosBasicCredentials, AxiosInstance, AxiosRequestConfig } from \"axios\";\nimport {\n GetAttachmentResponse,\n ListNamespacesResponse,\n ListSmsNumbersResponse,\n SearchInboxParams,\n SearchInboxResponse,\n SearchSmsMessagesParams,\n SearchSmsMessagesResponse,\n SendVirtualEmailParams,\n SendVirtualSmsParams,\n SmtpSettings,\n} from \"./mailisk.interfaces\";\nimport nodemailer from \"nodemailer\";\n\nexport class MailiskClient {\n constructor({ apiKey, baseUrl, auth }: { apiKey: string; baseUrl?: string; auth?: AxiosBasicCredentials }) {\n this.axiosInstance = axios.create({\n headers: {\n \"X-Api-Key\": apiKey,\n },\n baseURL: baseUrl || \"https://api.mailisk.com/\",\n auth,\n });\n }\n\n private readonly axiosInstance: AxiosInstance;\n\n /**\n * Search SMS messages sent to a phone number.\n *\n * @example\n * Search for SMS messages sent to a phone number\n * ```typescript\n * const { data: smsMessages } = await client.searchSmsMessages(\"1234567890\");\n * ```\n */\n async searchSmsMessages(\n phoneNumber: string,\n params?: SearchSmsMessagesParams,\n config?: AxiosRequestConfig\n ): Promise<SearchSmsMessagesResponse> {\n let _params: SearchSmsMessagesParams = { ...params };\n\n // default from timestamp, 15 minutes before starting this request\n if (params?.from_date === undefined || params?.from_date === null) {\n _params.from_date = new Date(Date.now() - 15 * 60 * 1000).toISOString();\n }\n\n // by default wait for sms\n if (params?.wait !== false) {\n _params.wait = true;\n }\n\n let _config = { ...config };\n\n if (config?.maxRedirects === undefined) {\n _config.maxRedirects = 99999;\n }\n\n // by default, wait 5 minutes for emails before timing out\n if (_params.wait && config?.timeout === undefined) {\n _config.timeout = 1000 * 60 * 5;\n }\n\n const requestParams = {\n ..._params,\n from_date: _params.from_date ?? undefined,\n to_date: _params.to_date ?? undefined,\n };\n\n return (\n await this.axiosInstance.get(`api/sms/${phoneNumber}/messages`, {\n ..._config,\n params: requestParams,\n })\n ).data;\n }\n\n /**\n * List all SMS phone numbers associated with the current account.\n *\n * @example\n * List all SMS phone numbers\n * ```typescript\n * const { data: smsNumbers } = await client.listSmsNumbers();\n * ```\n */\n async listSmsNumbers(): Promise<ListSmsNumbersResponse> {\n return (await this.axiosInstance.get(\"api/sms/numbers\")).data;\n }\n\n async sendVirtualSms(params: SendVirtualSmsParams): Promise<void> {\n return (await this.axiosInstance.post(\"api/sms/virtual\", params)).data;\n }\n\n /**\n * List all namespaces that belong to the current account (API key).\n */\n async listNamespaces(): Promise<ListNamespacesResponse> {\n return (await this.axiosInstance.get(\"api/namespaces\")).data;\n }\n\n /**\n * Send an email using the Virtual SMTP.\n *\n * These emails can only be sent to valid Mailisk namespaces, i.e. emails that end in @mynamespace.mailisk.net\n *\n * @example\n * For example, sending a test email:\n * ```typescript\n * client.sendVirtualEmail(namespace, {\n * from: \"test@example.com\",\n * to: `john@${namespace}.mailisk.net`,\n * subject: \"This is a test\",\n * text: \"Testing\",\n * });\n * ```\n */\n async sendVirtualEmail(namespace: string, params: SendVirtualEmailParams): Promise<void> {\n const smtpSettings = await this.getSmtpSettings(namespace);\n\n const transport = nodemailer.createTransport({\n host: smtpSettings.data.host,\n port: smtpSettings.data.port,\n secure: false,\n auth: {\n user: smtpSettings.data.username,\n pass: smtpSettings.data.password,\n },\n });\n\n const { from, to, subject, text, html, headers, attachments } = params;\n\n await transport.sendMail({\n from,\n to,\n subject,\n text,\n html,\n headers,\n attachments,\n });\n\n transport.close();\n }\n\n /**\n * Search inbox of a namespace.\n *\n * By default, this calls the api using the `wait` flag. This means the call won't timeout until at least one email is received or 5 minutes pass.\n * It also uses a default `from_timestamp` of **current timestamp - 15 minutes**. This means that older emails will be ignored.\n *\n * Both of these settings can be overriden by passing them in the `params` object.\n *\n * @example\n * Get the latest emails\n * ```typescript\n * const { data: emails } = await client.searchInbox(namespace);\n * ```\n *\n * @example\n * Get the latest emails for a specific email address\n * ```typescript\n * const { data: emails } = await client.searchInbox(namespace, {\n * to_addr_prefix: 'john@mynamespace.mailisk.net'\n * });\n * ```\n *\n * @example\n * Get the last 20 emails in the namespace\n * ```typescript\n * const { data: emails } = await mailisk.searchInbox(namespace, {\n * wait: false,\n * from_timestamp: 0,\n * limit: 20\n * });\n * ```\n */\n async searchInbox(\n namespace: string,\n params?: SearchInboxParams,\n config?: AxiosRequestConfig\n ): Promise<SearchInboxResponse> {\n let _params = { ...params };\n\n // default from timestamp, 15 minutes before starting this request\n if (params?.from_timestamp === undefined || params?.from_timestamp === null) {\n _params.from_timestamp = Math.floor(new Date().getTime() / 1000) - 15 * 60;\n }\n\n // by default wait for email\n if (params?.wait !== false) {\n _params.wait = true;\n }\n\n let _config = { ...config };\n\n if (config?.maxRedirects === undefined) {\n _config.maxRedirects = 99999;\n }\n\n // by default, wait 5 minutes for emails before timing out\n if (_params.wait && config?.timeout === undefined) {\n _config.timeout = 1000 * 60 * 5;\n }\n\n return (\n await this.axiosInstance.get(`api/emails/${namespace}/inbox`, {\n ..._config,\n params: _params,\n })\n ).data;\n }\n\n /**\n * Get the SMTP settings for a namespace.\n */\n async getSmtpSettings(namespace: string): Promise<SmtpSettings> {\n const result = await this.axiosInstance.get(`api/smtp/${namespace}`);\n return result.data;\n }\n\n async getAttachment(attachmentId: string): Promise<GetAttachmentResponse> {\n const result = await this.axiosInstance.get(`api/attachments/${attachmentId}`);\n return result.data;\n }\n\n /**\n * Download an attachment from an attachment ID.\n *\n * @example\n * Download an attachment from an email\n * ```typescript\n * const attachment = email.attachments[0];\n * const attachmentBuffer = await client.downloadAttachment(attachment.id);\n *\n * // save to file\n * fs.writeFileSync(attachment.filename, attachmentBuffer);\n * ```\n */\n async downloadAttachment(attachmentId: string): Promise<Buffer> {\n const result = await this.getAttachment(attachmentId);\n\n const response = await axios.get(result.data.download_url, { responseType: \"arraybuffer\" });\n return Buffer.from(response.data);\n }\n}\n"],"mappings":"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","names":["axios","nodemailer"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/mailisk.ts"],"sourcesContent":["export * from \"./mailisk\";\n","import axios, { AxiosBasicCredentials, AxiosInstance, AxiosRequestConfig } from \"axios\";\nimport {\n GetAttachmentResponse,\n ListNamespacesResponse,\n ListSmsNumbersResponse,\n SearchInboxParams,\n SearchInboxResponse,\n SearchSmsMessagesParams,\n SearchSmsMessagesResponse,\n SendVirtualEmailParams,\n SendVirtualSmsParams,\n SmtpSettings,\n} from \"./mailisk.interfaces\";\nimport nodemailer from \"nodemailer\";\n\nexport class MailiskClient {\n constructor({ apiKey, baseUrl, auth }: { apiKey: string; baseUrl?: string; auth?: AxiosBasicCredentials }) {\n this.axiosInstance = axios.create({\n headers: {\n \"X-Api-Key\": apiKey,\n },\n baseURL: baseUrl || \"https://api.mailisk.com/\",\n auth,\n });\n }\n\n private readonly axiosInstance: AxiosInstance;\n\n /**\n * Search SMS messages sent to a phone number.\n *\n * @example\n * Search for SMS messages sent to a phone number\n * ```typescript\n * const { data: smsMessages } = await client.searchSmsMessages(\"1234567890\");\n * ```\n */\n async searchSmsMessages(\n phoneNumber: string,\n params?: SearchSmsMessagesParams,\n config?: AxiosRequestConfig\n ): Promise<SearchSmsMessagesResponse> {\n let _params: SearchSmsMessagesParams = { ...params };\n\n // default from timestamp, 15 minutes before starting this request\n if (params?.from_date === undefined || params?.from_date === null) {\n _params.from_date = new Date(Date.now() - 15 * 60 * 1000).toISOString();\n }\n\n // by default wait for sms\n if (params?.wait !== false) {\n _params.wait = true;\n }\n\n let _config = { ...config };\n\n if (config?.maxRedirects === undefined) {\n _config.maxRedirects = 99999;\n }\n\n // by default, wait 5 minutes for emails before timing out\n if (_params.wait && config?.timeout === undefined) {\n _config.timeout = 1000 * 60 * 5;\n }\n\n const requestParams = {\n ..._params,\n from_date: _params.from_date ?? undefined,\n to_date: _params.to_date ?? undefined,\n };\n\n return (\n await this.axiosInstance.get(`api/sms/${phoneNumber}/messages`, {\n ..._config,\n params: requestParams,\n })\n ).data;\n }\n\n /**\n * List all SMS phone numbers associated with the current account.\n *\n * @example\n * List all SMS phone numbers\n * ```typescript\n * const { data: smsNumbers } = await client.listSmsNumbers();\n * ```\n */\n async listSmsNumbers(): Promise<ListSmsNumbersResponse> {\n return (await this.axiosInstance.get(\"api/sms/numbers\")).data;\n }\n\n async sendVirtualSms(params: SendVirtualSmsParams): Promise<void> {\n return (await this.axiosInstance.post(\"api/sms/virtual\", params)).data;\n }\n\n /**\n * List all namespaces that belong to the current account (API key).\n */\n async listNamespaces(): Promise<ListNamespacesResponse> {\n return (await this.axiosInstance.get(\"api/namespaces\")).data;\n }\n\n /**\n * Send an email using the Virtual SMTP.\n *\n * These emails can only be sent to valid Mailisk namespaces, i.e. emails that end in @mynamespace.mailisk.net\n *\n * @example\n * For example, sending a test email:\n * ```typescript\n * client.sendVirtualEmail(namespace, {\n * from: \"test@example.com\",\n * to: `john@${namespace}.mailisk.net`,\n * subject: \"This is a test\",\n * text: \"Testing\",\n * });\n * ```\n */\n async sendVirtualEmail(namespace: string, params: SendVirtualEmailParams): Promise<void> {\n const smtpSettings = await this.getSmtpSettings(namespace);\n\n const transport = nodemailer.createTransport({\n host: smtpSettings.data.host,\n port: smtpSettings.data.port,\n secure: false,\n auth: {\n user: smtpSettings.data.username,\n pass: smtpSettings.data.password,\n },\n });\n\n const { from, to, subject, text, html, headers, attachments } = params;\n\n await transport.sendMail({\n from,\n to,\n subject,\n text,\n html,\n headers,\n attachments,\n });\n\n transport.close();\n }\n\n /**\n * Search inbox of a namespace.\n *\n * By default, this calls the api using the `wait` flag. This means the call won't timeout until at least one email is received or 5 minutes pass.\n * It also uses a default `from_timestamp` of **current timestamp - 15 minutes**. This means that older emails will be ignored.\n *\n * Both of these settings can be overriden by passing them in the `params` object.\n *\n * @example\n * Get the latest emails\n * ```typescript\n * const { data: emails } = await client.searchInbox(namespace);\n * ```\n *\n * @example\n * Get the latest emails for a specific email address\n * ```typescript\n * const { data: emails } = await client.searchInbox(namespace, {\n * to_addr_prefix: 'john@mynamespace.mailisk.net'\n * });\n * ```\n *\n * @example\n * Get the last 20 emails in the namespace\n * ```typescript\n * const { data: emails } = await mailisk.searchInbox(namespace, {\n * wait: false,\n * from_timestamp: 0,\n * limit: 20\n * });\n * ```\n */\n async searchInbox(\n namespace: string,\n params?: SearchInboxParams,\n config?: AxiosRequestConfig\n ): Promise<SearchInboxResponse> {\n let _params = { ...params };\n\n // default from timestamp, 15 minutes before starting this request\n if (params?.from_timestamp === undefined || params?.from_timestamp === null) {\n _params.from_timestamp = Math.floor(new Date().getTime() / 1000) - 15 * 60;\n }\n\n // by default wait for email\n if (params?.wait !== false) {\n _params.wait = true;\n }\n\n let _config = { ...config };\n\n if (config?.maxRedirects === undefined) {\n _config.maxRedirects = 99999;\n }\n\n // by default, wait 5 minutes for emails before timing out\n if (_params.wait && config?.timeout === undefined) {\n _config.timeout = 1000 * 60 * 5;\n }\n\n return (\n await this.axiosInstance.get(`api/emails/${namespace}/inbox`, {\n ..._config,\n params: _params,\n })\n ).data;\n }\n\n /**\n * Get the SMTP settings for a namespace.\n */\n async getSmtpSettings(namespace: string): Promise<SmtpSettings> {\n const result = await this.axiosInstance.get(`api/smtp/${namespace}`);\n return result.data;\n }\n\n async getAttachment(attachmentId: string): Promise<GetAttachmentResponse> {\n const result = await this.axiosInstance.get(`api/attachments/${attachmentId}`);\n return result.data;\n }\n\n /**\n * Download an attachment from an attachment ID.\n *\n * @example\n * Download an attachment from an email\n * ```typescript\n * const attachment = email.attachments[0];\n * const attachmentBuffer = await client.downloadAttachment(attachment.id);\n *\n * // save to file\n * fs.writeFileSync(attachment.filename, attachmentBuffer);\n * ```\n */\n async downloadAttachment(attachmentId: string): Promise<Buffer> {\n const result = await this.getAttachment(attachmentId);\n\n const response = await axios.get(result.data.download_url, { responseType: \"arraybuffer\" });\n return Buffer.from(response.data);\n }\n}\n"],"mappings":"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","names":["axios","nodemailer"]}
|
package/dist/index.mjs
CHANGED
|
@@ -5,9 +5,6 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
5
5
|
import axios from "axios";
|
|
6
6
|
import nodemailer from "nodemailer";
|
|
7
7
|
var MailiskClient = class {
|
|
8
|
-
static {
|
|
9
|
-
__name(this, "MailiskClient");
|
|
10
|
-
}
|
|
11
8
|
constructor({ apiKey, baseUrl, auth }) {
|
|
12
9
|
this.axiosInstance = axios.create({
|
|
13
10
|
headers: {
|
|
@@ -18,15 +15,6 @@ var MailiskClient = class {
|
|
|
18
15
|
});
|
|
19
16
|
}
|
|
20
17
|
axiosInstance;
|
|
21
|
-
/**
|
|
22
|
-
* Search SMS messages sent to a phone number.
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* Search for SMS messages sent to a phone number
|
|
26
|
-
* ```typescript
|
|
27
|
-
* const { data: smsMessages } = await client.searchSmsMessages("1234567890");
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
18
|
async searchSmsMessages(phoneNumber, params, config) {
|
|
31
19
|
let _params = { ...params };
|
|
32
20
|
if (params?.from_date === void 0 || params?.from_date === null) {
|
|
@@ -52,43 +40,15 @@ var MailiskClient = class {
|
|
|
52
40
|
params: requestParams
|
|
53
41
|
})).data;
|
|
54
42
|
}
|
|
55
|
-
/**
|
|
56
|
-
* List all SMS phone numbers associated with the current account.
|
|
57
|
-
*
|
|
58
|
-
* @example
|
|
59
|
-
* List all SMS phone numbers
|
|
60
|
-
* ```typescript
|
|
61
|
-
* const { data: smsNumbers } = await client.listSmsNumbers();
|
|
62
|
-
* ```
|
|
63
|
-
*/
|
|
64
43
|
async listSmsNumbers() {
|
|
65
44
|
return (await this.axiosInstance.get("api/sms/numbers")).data;
|
|
66
45
|
}
|
|
67
46
|
async sendVirtualSms(params) {
|
|
68
47
|
return (await this.axiosInstance.post("api/sms/virtual", params)).data;
|
|
69
48
|
}
|
|
70
|
-
/**
|
|
71
|
-
* List all namespaces that belong to the current account (API key).
|
|
72
|
-
*/
|
|
73
49
|
async listNamespaces() {
|
|
74
50
|
return (await this.axiosInstance.get("api/namespaces")).data;
|
|
75
51
|
}
|
|
76
|
-
/**
|
|
77
|
-
* Send an email using the Virtual SMTP.
|
|
78
|
-
*
|
|
79
|
-
* These emails can only be sent to valid Mailisk namespaces, i.e. emails that end in @mynamespace.mailisk.net
|
|
80
|
-
*
|
|
81
|
-
* @example
|
|
82
|
-
* For example, sending a test email:
|
|
83
|
-
* ```typescript
|
|
84
|
-
* client.sendVirtualEmail(namespace, {
|
|
85
|
-
* from: "test@example.com",
|
|
86
|
-
* to: `john@${namespace}.mailisk.net`,
|
|
87
|
-
* subject: "This is a test",
|
|
88
|
-
* text: "Testing",
|
|
89
|
-
* });
|
|
90
|
-
* ```
|
|
91
|
-
*/
|
|
92
52
|
async sendVirtualEmail(namespace, params) {
|
|
93
53
|
const smtpSettings = await this.getSmtpSettings(namespace);
|
|
94
54
|
const transport = nodemailer.createTransport({
|
|
@@ -112,42 +72,10 @@ var MailiskClient = class {
|
|
|
112
72
|
});
|
|
113
73
|
transport.close();
|
|
114
74
|
}
|
|
115
|
-
/**
|
|
116
|
-
* Search inbox of a namespace.
|
|
117
|
-
*
|
|
118
|
-
* By default, this calls the api using the `wait` flag. This means the call won't timeout until at least one email is received or 5 minutes pass.
|
|
119
|
-
* It also uses a default `from_timestamp` of **current timestamp - 15 minutes**. This means that older emails will be ignored.
|
|
120
|
-
*
|
|
121
|
-
* Both of these settings can be overriden by passing them in the `params` object.
|
|
122
|
-
*
|
|
123
|
-
* @example
|
|
124
|
-
* Get the latest emails
|
|
125
|
-
* ```typescript
|
|
126
|
-
* const { data: emails } = await client.searchInbox(namespace);
|
|
127
|
-
* ```
|
|
128
|
-
*
|
|
129
|
-
* @example
|
|
130
|
-
* Get the latest emails for a specific email address
|
|
131
|
-
* ```typescript
|
|
132
|
-
* const { data: emails } = await client.searchInbox(namespace, {
|
|
133
|
-
* to_addr_prefix: 'john@mynamespace.mailisk.net'
|
|
134
|
-
* });
|
|
135
|
-
* ```
|
|
136
|
-
*
|
|
137
|
-
* @example
|
|
138
|
-
* Get the last 20 emails in the namespace
|
|
139
|
-
* ```typescript
|
|
140
|
-
* const { data: emails } = await mailisk.searchInbox(namespace, {
|
|
141
|
-
* wait: false,
|
|
142
|
-
* from_timestamp: 0,
|
|
143
|
-
* limit: 20
|
|
144
|
-
* });
|
|
145
|
-
* ```
|
|
146
|
-
*/
|
|
147
75
|
async searchInbox(namespace, params, config) {
|
|
148
76
|
let _params = { ...params };
|
|
149
77
|
if (params?.from_timestamp === void 0 || params?.from_timestamp === null) {
|
|
150
|
-
_params.from_timestamp = Math.floor(
|
|
78
|
+
_params.from_timestamp = Math.floor(new Date().getTime() / 1e3) - 15 * 60;
|
|
151
79
|
}
|
|
152
80
|
if (params?.wait !== false) {
|
|
153
81
|
_params.wait = true;
|
|
@@ -164,9 +92,6 @@ var MailiskClient = class {
|
|
|
164
92
|
params: _params
|
|
165
93
|
})).data;
|
|
166
94
|
}
|
|
167
|
-
/**
|
|
168
|
-
* Get the SMTP settings for a namespace.
|
|
169
|
-
*/
|
|
170
95
|
async getSmtpSettings(namespace) {
|
|
171
96
|
const result = await this.axiosInstance.get(`api/smtp/${namespace}`);
|
|
172
97
|
return result.data;
|
|
@@ -175,25 +100,13 @@ var MailiskClient = class {
|
|
|
175
100
|
const result = await this.axiosInstance.get(`api/attachments/${attachmentId}`);
|
|
176
101
|
return result.data;
|
|
177
102
|
}
|
|
178
|
-
/**
|
|
179
|
-
* Download an attachment from an attachment ID.
|
|
180
|
-
*
|
|
181
|
-
* @example
|
|
182
|
-
* Download an attachment from an email
|
|
183
|
-
* ```typescript
|
|
184
|
-
* const attachment = email.attachments[0];
|
|
185
|
-
* const attachmentBuffer = await client.downloadAttachment(attachment.id);
|
|
186
|
-
*
|
|
187
|
-
* // save to file
|
|
188
|
-
* fs.writeFileSync(attachment.filename, attachmentBuffer);
|
|
189
|
-
* ```
|
|
190
|
-
*/
|
|
191
103
|
async downloadAttachment(attachmentId) {
|
|
192
104
|
const result = await this.getAttachment(attachmentId);
|
|
193
105
|
const response = await axios.get(result.data.download_url, { responseType: "arraybuffer" });
|
|
194
106
|
return Buffer.from(response.data);
|
|
195
107
|
}
|
|
196
108
|
};
|
|
109
|
+
__name(MailiskClient, "MailiskClient");
|
|
197
110
|
export {
|
|
198
111
|
MailiskClient
|
|
199
112
|
};
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/mailisk.ts"],"sourcesContent":["import axios, { AxiosBasicCredentials, AxiosInstance, AxiosRequestConfig } from \"axios\";\nimport {\n GetAttachmentResponse,\n ListNamespacesResponse,\n ListSmsNumbersResponse,\n SearchInboxParams,\n SearchInboxResponse,\n SearchSmsMessagesParams,\n SearchSmsMessagesResponse,\n SendVirtualEmailParams,\n SendVirtualSmsParams,\n SmtpSettings,\n} from \"./mailisk.interfaces\";\nimport nodemailer from \"nodemailer\";\n\nexport class MailiskClient {\n constructor({ apiKey, baseUrl, auth }: { apiKey: string; baseUrl?: string; auth?: AxiosBasicCredentials }) {\n this.axiosInstance = axios.create({\n headers: {\n \"X-Api-Key\": apiKey,\n },\n baseURL: baseUrl || \"https://api.mailisk.com/\",\n auth,\n });\n }\n\n private readonly axiosInstance: AxiosInstance;\n\n /**\n * Search SMS messages sent to a phone number.\n *\n * @example\n * Search for SMS messages sent to a phone number\n * ```typescript\n * const { data: smsMessages } = await client.searchSmsMessages(\"1234567890\");\n * ```\n */\n async searchSmsMessages(\n phoneNumber: string,\n params?: SearchSmsMessagesParams,\n config?: AxiosRequestConfig\n ): Promise<SearchSmsMessagesResponse> {\n let _params: SearchSmsMessagesParams = { ...params };\n\n // default from timestamp, 15 minutes before starting this request\n if (params?.from_date === undefined || params?.from_date === null) {\n _params.from_date = new Date(Date.now() - 15 * 60 * 1000).toISOString();\n }\n\n // by default wait for sms\n if (params?.wait !== false) {\n _params.wait = true;\n }\n\n let _config = { ...config };\n\n if (config?.maxRedirects === undefined) {\n _config.maxRedirects = 99999;\n }\n\n // by default, wait 5 minutes for emails before timing out\n if (_params.wait && config?.timeout === undefined) {\n _config.timeout = 1000 * 60 * 5;\n }\n\n const requestParams = {\n ..._params,\n from_date: _params.from_date ?? undefined,\n to_date: _params.to_date ?? undefined,\n };\n\n return (\n await this.axiosInstance.get(`api/sms/${phoneNumber}/messages`, {\n ..._config,\n params: requestParams,\n })\n ).data;\n }\n\n /**\n * List all SMS phone numbers associated with the current account.\n *\n * @example\n * List all SMS phone numbers\n * ```typescript\n * const { data: smsNumbers } = await client.listSmsNumbers();\n * ```\n */\n async listSmsNumbers(): Promise<ListSmsNumbersResponse> {\n return (await this.axiosInstance.get(\"api/sms/numbers\")).data;\n }\n\n async sendVirtualSms(params: SendVirtualSmsParams): Promise<void> {\n return (await this.axiosInstance.post(\"api/sms/virtual\", params)).data;\n }\n\n /**\n * List all namespaces that belong to the current account (API key).\n */\n async listNamespaces(): Promise<ListNamespacesResponse> {\n return (await this.axiosInstance.get(\"api/namespaces\")).data;\n }\n\n /**\n * Send an email using the Virtual SMTP.\n *\n * These emails can only be sent to valid Mailisk namespaces, i.e. emails that end in @mynamespace.mailisk.net\n *\n * @example\n * For example, sending a test email:\n * ```typescript\n * client.sendVirtualEmail(namespace, {\n * from: \"test@example.com\",\n * to: `john@${namespace}.mailisk.net`,\n * subject: \"This is a test\",\n * text: \"Testing\",\n * });\n * ```\n */\n async sendVirtualEmail(namespace: string, params: SendVirtualEmailParams): Promise<void> {\n const smtpSettings = await this.getSmtpSettings(namespace);\n\n const transport = nodemailer.createTransport({\n host: smtpSettings.data.host,\n port: smtpSettings.data.port,\n secure: false,\n auth: {\n user: smtpSettings.data.username,\n pass: smtpSettings.data.password,\n },\n });\n\n const { from, to, subject, text, html, headers, attachments } = params;\n\n await transport.sendMail({\n from,\n to,\n subject,\n text,\n html,\n headers,\n attachments,\n });\n\n transport.close();\n }\n\n /**\n * Search inbox of a namespace.\n *\n * By default, this calls the api using the `wait` flag. This means the call won't timeout until at least one email is received or 5 minutes pass.\n * It also uses a default `from_timestamp` of **current timestamp - 15 minutes**. This means that older emails will be ignored.\n *\n * Both of these settings can be overriden by passing them in the `params` object.\n *\n * @example\n * Get the latest emails\n * ```typescript\n * const { data: emails } = await client.searchInbox(namespace);\n * ```\n *\n * @example\n * Get the latest emails for a specific email address\n * ```typescript\n * const { data: emails } = await client.searchInbox(namespace, {\n * to_addr_prefix: 'john@mynamespace.mailisk.net'\n * });\n * ```\n *\n * @example\n * Get the last 20 emails in the namespace\n * ```typescript\n * const { data: emails } = await mailisk.searchInbox(namespace, {\n * wait: false,\n * from_timestamp: 0,\n * limit: 20\n * });\n * ```\n */\n async searchInbox(\n namespace: string,\n params?: SearchInboxParams,\n config?: AxiosRequestConfig\n ): Promise<SearchInboxResponse> {\n let _params = { ...params };\n\n // default from timestamp, 15 minutes before starting this request\n if (params?.from_timestamp === undefined || params?.from_timestamp === null) {\n _params.from_timestamp = Math.floor(new Date().getTime() / 1000) - 15 * 60;\n }\n\n // by default wait for email\n if (params?.wait !== false) {\n _params.wait = true;\n }\n\n let _config = { ...config };\n\n if (config?.maxRedirects === undefined) {\n _config.maxRedirects = 99999;\n }\n\n // by default, wait 5 minutes for emails before timing out\n if (_params.wait && config?.timeout === undefined) {\n _config.timeout = 1000 * 60 * 5;\n }\n\n return (\n await this.axiosInstance.get(`api/emails/${namespace}/inbox`, {\n ..._config,\n params: _params,\n })\n ).data;\n }\n\n /**\n * Get the SMTP settings for a namespace.\n */\n async getSmtpSettings(namespace: string): Promise<SmtpSettings> {\n const result = await this.axiosInstance.get(`api/smtp/${namespace}`);\n return result.data;\n }\n\n async getAttachment(attachmentId: string): Promise<GetAttachmentResponse> {\n const result = await this.axiosInstance.get(`api/attachments/${attachmentId}`);\n return result.data;\n }\n\n /**\n * Download an attachment from an attachment ID.\n *\n * @example\n * Download an attachment from an email\n * ```typescript\n * const attachment = email.attachments[0];\n * const attachmentBuffer = await client.downloadAttachment(attachment.id);\n *\n * // save to file\n * fs.writeFileSync(attachment.filename, attachmentBuffer);\n * ```\n */\n async downloadAttachment(attachmentId: string): Promise<Buffer> {\n const result = await this.getAttachment(attachmentId);\n\n const response = await axios.get(result.data.download_url, { responseType: \"arraybuffer\" });\n return Buffer.from(response.data);\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/mailisk.ts"],"sourcesContent":["import axios, { AxiosBasicCredentials, AxiosInstance, AxiosRequestConfig } from \"axios\";\nimport {\n GetAttachmentResponse,\n ListNamespacesResponse,\n ListSmsNumbersResponse,\n SearchInboxParams,\n SearchInboxResponse,\n SearchSmsMessagesParams,\n SearchSmsMessagesResponse,\n SendVirtualEmailParams,\n SendVirtualSmsParams,\n SmtpSettings,\n} from \"./mailisk.interfaces\";\nimport nodemailer from \"nodemailer\";\n\nexport class MailiskClient {\n constructor({ apiKey, baseUrl, auth }: { apiKey: string; baseUrl?: string; auth?: AxiosBasicCredentials }) {\n this.axiosInstance = axios.create({\n headers: {\n \"X-Api-Key\": apiKey,\n },\n baseURL: baseUrl || \"https://api.mailisk.com/\",\n auth,\n });\n }\n\n private readonly axiosInstance: AxiosInstance;\n\n /**\n * Search SMS messages sent to a phone number.\n *\n * @example\n * Search for SMS messages sent to a phone number\n * ```typescript\n * const { data: smsMessages } = await client.searchSmsMessages(\"1234567890\");\n * ```\n */\n async searchSmsMessages(\n phoneNumber: string,\n params?: SearchSmsMessagesParams,\n config?: AxiosRequestConfig\n ): Promise<SearchSmsMessagesResponse> {\n let _params: SearchSmsMessagesParams = { ...params };\n\n // default from timestamp, 15 minutes before starting this request\n if (params?.from_date === undefined || params?.from_date === null) {\n _params.from_date = new Date(Date.now() - 15 * 60 * 1000).toISOString();\n }\n\n // by default wait for sms\n if (params?.wait !== false) {\n _params.wait = true;\n }\n\n let _config = { ...config };\n\n if (config?.maxRedirects === undefined) {\n _config.maxRedirects = 99999;\n }\n\n // by default, wait 5 minutes for emails before timing out\n if (_params.wait && config?.timeout === undefined) {\n _config.timeout = 1000 * 60 * 5;\n }\n\n const requestParams = {\n ..._params,\n from_date: _params.from_date ?? undefined,\n to_date: _params.to_date ?? undefined,\n };\n\n return (\n await this.axiosInstance.get(`api/sms/${phoneNumber}/messages`, {\n ..._config,\n params: requestParams,\n })\n ).data;\n }\n\n /**\n * List all SMS phone numbers associated with the current account.\n *\n * @example\n * List all SMS phone numbers\n * ```typescript\n * const { data: smsNumbers } = await client.listSmsNumbers();\n * ```\n */\n async listSmsNumbers(): Promise<ListSmsNumbersResponse> {\n return (await this.axiosInstance.get(\"api/sms/numbers\")).data;\n }\n\n async sendVirtualSms(params: SendVirtualSmsParams): Promise<void> {\n return (await this.axiosInstance.post(\"api/sms/virtual\", params)).data;\n }\n\n /**\n * List all namespaces that belong to the current account (API key).\n */\n async listNamespaces(): Promise<ListNamespacesResponse> {\n return (await this.axiosInstance.get(\"api/namespaces\")).data;\n }\n\n /**\n * Send an email using the Virtual SMTP.\n *\n * These emails can only be sent to valid Mailisk namespaces, i.e. emails that end in @mynamespace.mailisk.net\n *\n * @example\n * For example, sending a test email:\n * ```typescript\n * client.sendVirtualEmail(namespace, {\n * from: \"test@example.com\",\n * to: `john@${namespace}.mailisk.net`,\n * subject: \"This is a test\",\n * text: \"Testing\",\n * });\n * ```\n */\n async sendVirtualEmail(namespace: string, params: SendVirtualEmailParams): Promise<void> {\n const smtpSettings = await this.getSmtpSettings(namespace);\n\n const transport = nodemailer.createTransport({\n host: smtpSettings.data.host,\n port: smtpSettings.data.port,\n secure: false,\n auth: {\n user: smtpSettings.data.username,\n pass: smtpSettings.data.password,\n },\n });\n\n const { from, to, subject, text, html, headers, attachments } = params;\n\n await transport.sendMail({\n from,\n to,\n subject,\n text,\n html,\n headers,\n attachments,\n });\n\n transport.close();\n }\n\n /**\n * Search inbox of a namespace.\n *\n * By default, this calls the api using the `wait` flag. This means the call won't timeout until at least one email is received or 5 minutes pass.\n * It also uses a default `from_timestamp` of **current timestamp - 15 minutes**. This means that older emails will be ignored.\n *\n * Both of these settings can be overriden by passing them in the `params` object.\n *\n * @example\n * Get the latest emails\n * ```typescript\n * const { data: emails } = await client.searchInbox(namespace);\n * ```\n *\n * @example\n * Get the latest emails for a specific email address\n * ```typescript\n * const { data: emails } = await client.searchInbox(namespace, {\n * to_addr_prefix: 'john@mynamespace.mailisk.net'\n * });\n * ```\n *\n * @example\n * Get the last 20 emails in the namespace\n * ```typescript\n * const { data: emails } = await mailisk.searchInbox(namespace, {\n * wait: false,\n * from_timestamp: 0,\n * limit: 20\n * });\n * ```\n */\n async searchInbox(\n namespace: string,\n params?: SearchInboxParams,\n config?: AxiosRequestConfig\n ): Promise<SearchInboxResponse> {\n let _params = { ...params };\n\n // default from timestamp, 15 minutes before starting this request\n if (params?.from_timestamp === undefined || params?.from_timestamp === null) {\n _params.from_timestamp = Math.floor(new Date().getTime() / 1000) - 15 * 60;\n }\n\n // by default wait for email\n if (params?.wait !== false) {\n _params.wait = true;\n }\n\n let _config = { ...config };\n\n if (config?.maxRedirects === undefined) {\n _config.maxRedirects = 99999;\n }\n\n // by default, wait 5 minutes for emails before timing out\n if (_params.wait && config?.timeout === undefined) {\n _config.timeout = 1000 * 60 * 5;\n }\n\n return (\n await this.axiosInstance.get(`api/emails/${namespace}/inbox`, {\n ..._config,\n params: _params,\n })\n ).data;\n }\n\n /**\n * Get the SMTP settings for a namespace.\n */\n async getSmtpSettings(namespace: string): Promise<SmtpSettings> {\n const result = await this.axiosInstance.get(`api/smtp/${namespace}`);\n return result.data;\n }\n\n async getAttachment(attachmentId: string): Promise<GetAttachmentResponse> {\n const result = await this.axiosInstance.get(`api/attachments/${attachmentId}`);\n return result.data;\n }\n\n /**\n * Download an attachment from an attachment ID.\n *\n * @example\n * Download an attachment from an email\n * ```typescript\n * const attachment = email.attachments[0];\n * const attachmentBuffer = await client.downloadAttachment(attachment.id);\n *\n * // save to file\n * fs.writeFileSync(attachment.filename, attachmentBuffer);\n * ```\n */\n async downloadAttachment(attachmentId: string): Promise<Buffer> {\n const result = await this.getAttachment(attachmentId);\n\n const response = await axios.get(result.data.download_url, { responseType: \"arraybuffer\" });\n return Buffer.from(response.data);\n }\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mailisk",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.4",
|
|
4
4
|
"description": "Mailisk library for NodeJS",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mailisk",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"typescript": "^4.9.5"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"axios": "^1.
|
|
35
|
+
"axios": "^1.15.2",
|
|
36
36
|
"nodemailer": "^8.0.4"
|
|
37
37
|
}
|
|
38
38
|
}
|
package/dist/index.d.mts
DELETED
|
@@ -1,338 +0,0 @@
|
|
|
1
|
-
import { AxiosBasicCredentials, AxiosRequestConfig } from 'axios';
|
|
2
|
-
import { Attachment } from 'nodemailer/lib/mailer';
|
|
3
|
-
|
|
4
|
-
interface EmailAddress {
|
|
5
|
-
/** Email address */
|
|
6
|
-
address: string;
|
|
7
|
-
/** Display name, if one is specified */
|
|
8
|
-
name?: string;
|
|
9
|
-
}
|
|
10
|
-
interface EmailAttachment {
|
|
11
|
-
/** Unique identifier for the attachment */
|
|
12
|
-
id: string;
|
|
13
|
-
/** Filename of the attachment */
|
|
14
|
-
filename: string;
|
|
15
|
-
/** Content type of the attachment */
|
|
16
|
-
content_type: string;
|
|
17
|
-
/** Size in bytes of the attachment */
|
|
18
|
-
size: number;
|
|
19
|
-
}
|
|
20
|
-
interface Email {
|
|
21
|
-
/** Namespace scoped ID */
|
|
22
|
-
id: string;
|
|
23
|
-
/** Sender of email */
|
|
24
|
-
from: EmailAddress;
|
|
25
|
-
/** Recepients of email */
|
|
26
|
-
to: EmailAddress[];
|
|
27
|
-
/** Carbon-copied recipients for email message */
|
|
28
|
-
cc?: EmailAddress[];
|
|
29
|
-
/** Blind carbon-copied recipients for email message */
|
|
30
|
-
bcc?: EmailAddress[];
|
|
31
|
-
/** Subject of email */
|
|
32
|
-
subject?: string;
|
|
33
|
-
/** Email content that was sent in HTML format */
|
|
34
|
-
html?: string;
|
|
35
|
-
/** Email content that was sent in plain text format */
|
|
36
|
-
text?: string;
|
|
37
|
-
/** The datetime that this email was received */
|
|
38
|
-
received_date: Date;
|
|
39
|
-
/** The unix timestamp (s) that this email was received */
|
|
40
|
-
received_timestamp: number;
|
|
41
|
-
/** The unix timestamp (s) when this email will be deleted */
|
|
42
|
-
expires_timestamp: number;
|
|
43
|
-
/** The spam score as reported by SpamAssassin */
|
|
44
|
-
spam_score?: number;
|
|
45
|
-
/** The headers of the email */
|
|
46
|
-
headers?: Record<string, string>;
|
|
47
|
-
/** The attachments of the email */
|
|
48
|
-
attachments?: EmailAttachment[];
|
|
49
|
-
}
|
|
50
|
-
interface SmsMessage {
|
|
51
|
-
/** Unique identifier for the message */
|
|
52
|
-
id: string;
|
|
53
|
-
/** Unique identifier for the SMS phone number */
|
|
54
|
-
sms_phone_number_id: string;
|
|
55
|
-
/** Body of the message */
|
|
56
|
-
body: string;
|
|
57
|
-
/** From number of the message */
|
|
58
|
-
from_number: string;
|
|
59
|
-
/** To number of the message */
|
|
60
|
-
to_number: string;
|
|
61
|
-
/** Provider message ID */
|
|
62
|
-
provider_message_id?: string;
|
|
63
|
-
/** Date and time the message was created */
|
|
64
|
-
created_at: string;
|
|
65
|
-
/** Direction of the message */
|
|
66
|
-
direction: "inbound" | "outbound";
|
|
67
|
-
}
|
|
68
|
-
interface SmsNumber {
|
|
69
|
-
/** Unique identifier for the SMS number */
|
|
70
|
-
id: string;
|
|
71
|
-
/** Unique identifier for the organisation */
|
|
72
|
-
organisation_id: string;
|
|
73
|
-
/** Status of the SMS number */
|
|
74
|
-
status: "requested" | "active" | "disabled";
|
|
75
|
-
/** Country of the SMS number */
|
|
76
|
-
country: string;
|
|
77
|
-
/** SMS Phone number */
|
|
78
|
-
phone_number?: string;
|
|
79
|
-
/** Date and time the SMS number was created */
|
|
80
|
-
created_at: string;
|
|
81
|
-
/** Date and time the SMS number was updated */
|
|
82
|
-
updated_at: string;
|
|
83
|
-
}
|
|
84
|
-
interface SearchInboxParams {
|
|
85
|
-
/**
|
|
86
|
-
* The maximum number of emails that can be returned in this request, used alongside `offset` for pagination.
|
|
87
|
-
*/
|
|
88
|
-
limit?: number;
|
|
89
|
-
/**
|
|
90
|
-
* The number of emails to skip/ignore, used alongside `limit` for pagination.
|
|
91
|
-
*/
|
|
92
|
-
offset?: number;
|
|
93
|
-
/**
|
|
94
|
-
* Filter emails by starting unix timestamp in seconds.
|
|
95
|
-
*/
|
|
96
|
-
from_timestamp?: number;
|
|
97
|
-
/**
|
|
98
|
-
* Filter emails by ending unix timestamp in seconds.
|
|
99
|
-
*/
|
|
100
|
-
to_timestamp?: number;
|
|
101
|
-
/**
|
|
102
|
-
* Filter emails by 'to' address. Address must start with this.
|
|
103
|
-
*
|
|
104
|
-
* 'foo' would return for 'foobar@namespace.mailisk.net' but not 'barfoo@namespace.mailisk.net'
|
|
105
|
-
*/
|
|
106
|
-
to_addr_prefix?: string;
|
|
107
|
-
/**
|
|
108
|
-
* Filter emails by 'from' address. Address must include this.
|
|
109
|
-
*
|
|
110
|
-
* '@foo' would return for 'a@foo.com', 'b@foo.net'
|
|
111
|
-
*/
|
|
112
|
-
from_addr_includes?: string;
|
|
113
|
-
/**
|
|
114
|
-
* Filter emails by subject. This is case insensitive. Subject must include this.
|
|
115
|
-
*
|
|
116
|
-
* 'password' would return for 'Password reset', 'Reset password notification' but not 'Reset'
|
|
117
|
-
*/
|
|
118
|
-
subject_includes?: string;
|
|
119
|
-
/**
|
|
120
|
-
* Will keep the request going till at least one email would be returned.
|
|
121
|
-
*
|
|
122
|
-
* Default is `true`
|
|
123
|
-
*/
|
|
124
|
-
wait?: boolean;
|
|
125
|
-
}
|
|
126
|
-
interface SearchInboxResponse {
|
|
127
|
-
/**
|
|
128
|
-
* Total number of emails matching query.
|
|
129
|
-
*/
|
|
130
|
-
total_count: number;
|
|
131
|
-
/**
|
|
132
|
-
* Parameters that were used for the query
|
|
133
|
-
*/
|
|
134
|
-
options: SearchInboxParams;
|
|
135
|
-
/**
|
|
136
|
-
* Emails
|
|
137
|
-
*/
|
|
138
|
-
data: Email[];
|
|
139
|
-
}
|
|
140
|
-
interface SmtpSettings {
|
|
141
|
-
data: {
|
|
142
|
-
host: string;
|
|
143
|
-
port: number;
|
|
144
|
-
username: string;
|
|
145
|
-
password: string;
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
interface GetAttachmentResponse {
|
|
149
|
-
data: {
|
|
150
|
-
id: string;
|
|
151
|
-
filename: string;
|
|
152
|
-
content_type: string;
|
|
153
|
-
size: number;
|
|
154
|
-
expires_at: string | null;
|
|
155
|
-
download_url: string;
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
interface ListNamespacesResponse {
|
|
159
|
-
total_count: number;
|
|
160
|
-
data: {
|
|
161
|
-
id: string;
|
|
162
|
-
namespace: string;
|
|
163
|
-
}[];
|
|
164
|
-
}
|
|
165
|
-
interface SendVirtualEmailParams {
|
|
166
|
-
/** Sender of email */
|
|
167
|
-
from: string;
|
|
168
|
-
/**
|
|
169
|
-
* Recepients of email
|
|
170
|
-
*
|
|
171
|
-
* Must match namespace. E.g. if using namespace 'mynamespace' `to` must be 'something@mynamespace.mailisk.net'.
|
|
172
|
-
*/
|
|
173
|
-
to: string;
|
|
174
|
-
/** The subject of the e-mail */
|
|
175
|
-
subject: string;
|
|
176
|
-
/** The plaintext version of the message */
|
|
177
|
-
text?: string | undefined;
|
|
178
|
-
/** The HTML version of the message */
|
|
179
|
-
html?: string | undefined;
|
|
180
|
-
/** Custom headers for the email */
|
|
181
|
-
headers?: Record<string, string>;
|
|
182
|
-
/** Attachments to the email */
|
|
183
|
-
attachments?: Attachment[];
|
|
184
|
-
}
|
|
185
|
-
interface SearchSmsMessagesParams {
|
|
186
|
-
/**
|
|
187
|
-
* The maximum number of SMS messages returned (1-100), used alongside `offset` for pagination.
|
|
188
|
-
*/
|
|
189
|
-
limit?: number;
|
|
190
|
-
/**
|
|
191
|
-
* The number of SMS messages to skip/ignore, used alongside `limit` for pagination.
|
|
192
|
-
*/
|
|
193
|
-
offset?: number;
|
|
194
|
-
/**
|
|
195
|
-
* Filter messages by body contents (case insensitive).
|
|
196
|
-
*/
|
|
197
|
-
body?: string;
|
|
198
|
-
/**
|
|
199
|
-
* Filter messages by sender phone number prefix.
|
|
200
|
-
*/
|
|
201
|
-
from_number?: string;
|
|
202
|
-
/**
|
|
203
|
-
* Filter messages created on or after this date.
|
|
204
|
-
* Provide an ISO 8601 timestamp string.
|
|
205
|
-
*/
|
|
206
|
-
from_date?: string;
|
|
207
|
-
/**
|
|
208
|
-
* Filter messages created on or before this date.
|
|
209
|
-
* Provide an ISO 8601 timestamp string.
|
|
210
|
-
*/
|
|
211
|
-
to_date?: string;
|
|
212
|
-
/**
|
|
213
|
-
* When true, keep the request open until at least one SMS is returned.
|
|
214
|
-
*/
|
|
215
|
-
wait?: boolean;
|
|
216
|
-
}
|
|
217
|
-
interface SearchSmsMessagesResponse {
|
|
218
|
-
total_count: number;
|
|
219
|
-
options: SearchSmsMessagesParams;
|
|
220
|
-
data: SmsMessage[];
|
|
221
|
-
}
|
|
222
|
-
interface ListSmsNumbersResponse {
|
|
223
|
-
total_count: number;
|
|
224
|
-
data: SmsNumber[];
|
|
225
|
-
}
|
|
226
|
-
interface SendVirtualSmsParams {
|
|
227
|
-
/** The phone number to send the SMS from */
|
|
228
|
-
from_number: string;
|
|
229
|
-
/** The phone number to send the SMS to */
|
|
230
|
-
to_number: string;
|
|
231
|
-
/** The body of the SMS message */
|
|
232
|
-
body: string;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
declare class MailiskClient {
|
|
236
|
-
constructor({ apiKey, baseUrl, auth }: {
|
|
237
|
-
apiKey: string;
|
|
238
|
-
baseUrl?: string;
|
|
239
|
-
auth?: AxiosBasicCredentials;
|
|
240
|
-
});
|
|
241
|
-
private readonly axiosInstance;
|
|
242
|
-
/**
|
|
243
|
-
* Search SMS messages sent to a phone number.
|
|
244
|
-
*
|
|
245
|
-
* @example
|
|
246
|
-
* Search for SMS messages sent to a phone number
|
|
247
|
-
* ```typescript
|
|
248
|
-
* const { data: smsMessages } = await client.searchSmsMessages("1234567890");
|
|
249
|
-
* ```
|
|
250
|
-
*/
|
|
251
|
-
searchSmsMessages(phoneNumber: string, params?: SearchSmsMessagesParams, config?: AxiosRequestConfig): Promise<SearchSmsMessagesResponse>;
|
|
252
|
-
/**
|
|
253
|
-
* List all SMS phone numbers associated with the current account.
|
|
254
|
-
*
|
|
255
|
-
* @example
|
|
256
|
-
* List all SMS phone numbers
|
|
257
|
-
* ```typescript
|
|
258
|
-
* const { data: smsNumbers } = await client.listSmsNumbers();
|
|
259
|
-
* ```
|
|
260
|
-
*/
|
|
261
|
-
listSmsNumbers(): Promise<ListSmsNumbersResponse>;
|
|
262
|
-
sendVirtualSms(params: SendVirtualSmsParams): Promise<void>;
|
|
263
|
-
/**
|
|
264
|
-
* List all namespaces that belong to the current account (API key).
|
|
265
|
-
*/
|
|
266
|
-
listNamespaces(): Promise<ListNamespacesResponse>;
|
|
267
|
-
/**
|
|
268
|
-
* Send an email using the Virtual SMTP.
|
|
269
|
-
*
|
|
270
|
-
* These emails can only be sent to valid Mailisk namespaces, i.e. emails that end in @mynamespace.mailisk.net
|
|
271
|
-
*
|
|
272
|
-
* @example
|
|
273
|
-
* For example, sending a test email:
|
|
274
|
-
* ```typescript
|
|
275
|
-
* client.sendVirtualEmail(namespace, {
|
|
276
|
-
* from: "test@example.com",
|
|
277
|
-
* to: `john@${namespace}.mailisk.net`,
|
|
278
|
-
* subject: "This is a test",
|
|
279
|
-
* text: "Testing",
|
|
280
|
-
* });
|
|
281
|
-
* ```
|
|
282
|
-
*/
|
|
283
|
-
sendVirtualEmail(namespace: string, params: SendVirtualEmailParams): Promise<void>;
|
|
284
|
-
/**
|
|
285
|
-
* Search inbox of a namespace.
|
|
286
|
-
*
|
|
287
|
-
* By default, this calls the api using the `wait` flag. This means the call won't timeout until at least one email is received or 5 minutes pass.
|
|
288
|
-
* It also uses a default `from_timestamp` of **current timestamp - 15 minutes**. This means that older emails will be ignored.
|
|
289
|
-
*
|
|
290
|
-
* Both of these settings can be overriden by passing them in the `params` object.
|
|
291
|
-
*
|
|
292
|
-
* @example
|
|
293
|
-
* Get the latest emails
|
|
294
|
-
* ```typescript
|
|
295
|
-
* const { data: emails } = await client.searchInbox(namespace);
|
|
296
|
-
* ```
|
|
297
|
-
*
|
|
298
|
-
* @example
|
|
299
|
-
* Get the latest emails for a specific email address
|
|
300
|
-
* ```typescript
|
|
301
|
-
* const { data: emails } = await client.searchInbox(namespace, {
|
|
302
|
-
* to_addr_prefix: 'john@mynamespace.mailisk.net'
|
|
303
|
-
* });
|
|
304
|
-
* ```
|
|
305
|
-
*
|
|
306
|
-
* @example
|
|
307
|
-
* Get the last 20 emails in the namespace
|
|
308
|
-
* ```typescript
|
|
309
|
-
* const { data: emails } = await mailisk.searchInbox(namespace, {
|
|
310
|
-
* wait: false,
|
|
311
|
-
* from_timestamp: 0,
|
|
312
|
-
* limit: 20
|
|
313
|
-
* });
|
|
314
|
-
* ```
|
|
315
|
-
*/
|
|
316
|
-
searchInbox(namespace: string, params?: SearchInboxParams, config?: AxiosRequestConfig): Promise<SearchInboxResponse>;
|
|
317
|
-
/**
|
|
318
|
-
* Get the SMTP settings for a namespace.
|
|
319
|
-
*/
|
|
320
|
-
getSmtpSettings(namespace: string): Promise<SmtpSettings>;
|
|
321
|
-
getAttachment(attachmentId: string): Promise<GetAttachmentResponse>;
|
|
322
|
-
/**
|
|
323
|
-
* Download an attachment from an attachment ID.
|
|
324
|
-
*
|
|
325
|
-
* @example
|
|
326
|
-
* Download an attachment from an email
|
|
327
|
-
* ```typescript
|
|
328
|
-
* const attachment = email.attachments[0];
|
|
329
|
-
* const attachmentBuffer = await client.downloadAttachment(attachment.id);
|
|
330
|
-
*
|
|
331
|
-
* // save to file
|
|
332
|
-
* fs.writeFileSync(attachment.filename, attachmentBuffer);
|
|
333
|
-
* ```
|
|
334
|
-
*/
|
|
335
|
-
downloadAttachment(attachmentId: string): Promise<Buffer>;
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
export { MailiskClient };
|