temp-disposable-email 1.16.1 → 2.0.0

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/.eslintrc.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "parser": "@typescript-eslint/parser",
3
+ "extends": [
4
+ "eslint:recommended",
5
+ "plugin:@typescript-eslint/recommended"
6
+ ],
7
+ "parserOptions": {
8
+ "ecmaVersion": 2020,
9
+ "sourceType": "module"
10
+ },
11
+ "env": {
12
+ "node": true,
13
+ "es6": true
14
+ },
15
+ "rules": {
16
+ "no-console": "off",
17
+ "@typescript-eslint/no-explicit-any": "warn",
18
+ "@typescript-eslint/no-unused-vars": [
19
+ "error",
20
+ {
21
+ "argsIgnorePattern": "^_",
22
+ "varsIgnorePattern": "^_",
23
+ "caughtErrors": "all",
24
+ "caughtErrorsIgnorePattern": "^_"
25
+ }
26
+ ]
27
+ }
28
+ }
@@ -0,0 +1,6 @@
1
+ node_modules
2
+ dist
3
+ coverage
4
+ *.log
5
+ package-lock.json
6
+ .github
@@ -0,0 +1,10 @@
1
+ {
2
+ "semi": true,
3
+ "trailingComma": "es5",
4
+ "singleQuote": true,
5
+ "printWidth": 80,
6
+ "tabWidth": 2,
7
+ "useTabs": false,
8
+ "arrowParens": "always",
9
+ "endOfLine": "lf"
10
+ }
package/README.md CHANGED
@@ -101,7 +101,28 @@ console.log('Message received:', message);
101
101
 
102
102
  ### **Playwright Example**
103
103
 
104
- For using temp-disposable-email with Playwright, see the example in the [Playwright folder](https://github.com/pirasanthan-jesugeevegan/temp-disposable-email/tree/master/examples/playwright).
104
+ For using temp-disposable-email with Playwright, you can use it directly or with fixtures.
105
+
106
+ #### Using Playwright Fixtures (Recommended)
107
+
108
+ ```typescript
109
+ import { test, expect } from 'temp-disposable-email/playwright';
110
+
111
+ test('sign up flow', async ({ page, emailHelper }) => {
112
+ const { emailAddress, accountId } = await emailHelper.generateEmail();
113
+
114
+ // Your test code...
115
+
116
+ const email = await emailHelper.getRecentEmail({
117
+ accountId,
118
+ maxWaitTime: 50000
119
+ });
120
+
121
+ const code = await emailHelper.getVerificationCode(email?.text);
122
+ });
123
+ ```
124
+
125
+ For complete examples, see the [Playwright folder](https://github.com/pirasanthan-jesugeevegan/temp-disposable-email/tree/master/examples/playwright).
105
126
 
106
127
  ### **Cypress Example**
107
128
 
@@ -109,19 +130,29 @@ For using temp-disposable-email with Cypress.
109
130
 
110
131
  #### Import package
111
132
 
112
- import package in your `support/commands.{ts|js}`
133
+ Import the package in your `support/commands.{ts|js}`:
113
134
 
114
135
  ```typescript
115
136
  import 'temp-disposable-email/cypress';
116
137
  ```
117
138
 
118
- test may look like this: see the example in the [Cypress folder](https://github.com/pirasanthan-jesugeevegan/temp-disposable-email/tree/master/examples/cypress).
139
+ #### TypeScript Setup
140
+
141
+ Add the type reference at the top of your test files:
142
+
143
+ ```typescript
144
+ /// <reference types="temp-disposable-email/cypress" />
145
+ ```
146
+
147
+ #### Example Test
148
+
149
+ See the complete example in the [Cypress folder](https://github.com/pirasanthan-jesugeevegan/temp-disposable-email/tree/master/examples/cypress).
119
150
 
120
151
  ```typescript
121
152
  it('[Custom Command] - Sign up - Check email content and subject', () => {
122
153
  // Create a dynamic email address
123
154
  cy.generateEmail(`cypress_${Math.random().toString().substr(2, 9)}`).then(
124
- ({ emailAddress }) => {
155
+ ({ emailAddress, accountId }) => {
125
156
  // Navigate to the sign-up page
126
157
  cy.visit('https://app.postdrop.io/signup');
127
158
 
@@ -135,6 +166,7 @@ it('[Custom Command] - Sign up - Check email content and subject', () => {
135
166
  cy.contains('h1', 'Thanks for signing up!').should('be.visible');
136
167
  // Fetch the verification email
137
168
  cy.getRecentEmail({
169
+ accountId, // Pass accountId for proper cleanup
138
170
  maxWaitTime: 80000,
139
171
  waitInterval: 1000,
140
172
  deleteAfterRead: true,
@@ -153,7 +185,7 @@ it('[Custom Command] - Sign up - Check email content and subject', () => {
153
185
 
154
186
  ### **Node Example**
155
187
 
156
- Here's a complete example of creating an inbox, retrieving a message, and deleting the account:
188
+ Here's a complete example of creating an inbox, retrieving a message, and cleaning up:
157
189
 
158
190
  ```typescript
159
191
  import { generateEmail, getRecentEmail } from 'temp-disposable-email';
@@ -161,11 +193,12 @@ import { generateEmail, getRecentEmail } from 'temp-disposable-email';
161
193
  async function run() {
162
194
  try {
163
195
  // Create a new inbox
164
- const { emailAddress } = await generateEmail();
196
+ const { emailAddress, accountId } = await generateEmail();
165
197
  console.log('Created email:', emailAddress);
166
198
 
167
199
  // Get the first available message from the inbox
168
200
  const message = await getRecentEmail({
201
+ accountId, // Pass accountId for automatic cleanup
169
202
  maxWaitTime: 50000,
170
203
  waitInterval: 3000,
171
204
  logPolling: true,
@@ -202,6 +235,7 @@ run();
202
235
  - **Description**: Retrieves the latest message from the inbox, polling if necessary.
203
236
  - **Parameters**:
204
237
  - `options` (Optional): Polling configuration for waiting for messages. See GetEmailOptions.
238
+ - `accountId` (Optional): Account ID for cleanup after reading. **Recommended** to prevent resource leaks.
205
239
  - `maxWaitTime` (Optional): The maximum time to wait for messages (in milliseconds).
206
240
  - `waitInterval` (Optional): The interval between polling attempts (in milliseconds).
207
241
  - `logPolling` (Optional): Whether to log each polling attempt for debugging purposes.
package/dist/cjs/api.d.ts CHANGED
@@ -79,14 +79,15 @@ export declare const getAuthHeaders: () => {
79
79
  Authorization: string;
80
80
  };
81
81
  export declare const getDomains: () => Promise<ListOfDomains[]>;
82
- export declare const getMessages: () => Promise<EmailObject[]>;
82
+ export declare const getMessages: (maxRetries?: number, retryDelay?: number) => Promise<EmailObject[]>;
83
83
  export declare const getMessagesContent: (messageId: string) => Promise<EmailResource>;
84
- export declare const getMessageAttachments: (messageId: string, attachmentsId: string) => Promise<any>;
84
+ export declare const getMessageAttachments: (messageId: string, attachmentsId: string) => Promise<Buffer>;
85
85
  export declare const deleteMessage: (messageId: string) => Promise<number>;
86
86
  export declare const createAccount: (payload: {
87
87
  address: string;
88
88
  password: string;
89
- }, maxRetries?: number, delayMs?: number) => Promise<EmailAccount>;
89
+ }, domain?: string, // Domain to use for fallback email generation
90
+ maxRetries?: number, delayMs?: number, infiniteRetry?: boolean) => Promise<EmailAccount>;
90
91
  export declare const deleteAccount: (accountId: string) => Promise<void>;
91
92
  export {};
92
93
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"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"}
package/dist/cjs/api.js CHANGED
@@ -18,12 +18,7 @@ const apiClient = axios_1.default.create({
18
18
  const authenticate = async (_email, _password) => {
19
19
  email = _email;
20
20
  password = _password;
21
- const response = await apiClient.post('/token', { address: email, password }, {
22
- headers: {
23
- accept: 'application/json',
24
- 'Content-Type': 'application/json',
25
- },
26
- });
21
+ const response = await apiClient.post('/token', { address: email, password });
27
22
  token = response.data.token;
28
23
  };
29
24
  exports.authenticate = authenticate;
@@ -46,8 +41,7 @@ apiClient.interceptors.response.use((response) => response, async (error) => {
46
41
  error.config.headers = (0, exports.getAuthHeaders)(); // Update headers with new token
47
42
  return apiClient.request(error.config); // Retry request
48
43
  }
49
- catch (authError) {
50
- console.error('Failed to refresh token:', authError);
44
+ catch (_authError) {
51
45
  throw new Error('Authentication failed. Please check credentials.');
52
46
  }
53
47
  }
@@ -61,31 +55,37 @@ const getDomains = async () => {
61
55
  });
62
56
  return data;
63
57
  }
64
- catch (error) {
65
- console.error('Error fetching domains:', error.response?.data);
58
+ catch (_error) {
66
59
  throw new Error('Failed to fetch domains. Please try again later.');
67
60
  }
68
61
  };
69
62
  exports.getDomains = getDomains;
70
- // Function to fetch messages
71
- const getMessages = async () => {
72
- while (true) {
63
+ // Function to fetch messages with retry logic and timeout
64
+ const getMessages = async (maxRetries = 5, retryDelay = 10000) => {
65
+ let attempt = 0;
66
+ while (attempt < maxRetries) {
73
67
  try {
74
68
  const { data } = await apiClient.get('/messages?page=1', {
75
69
  headers: (0, exports.getAuthHeaders)(),
76
70
  });
77
71
  return data;
72
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
78
73
  }
79
74
  catch (error) {
80
- if (error.response?.status === 429) {
81
- await (0, _1.delay)(10 * 1000);
75
+ attempt++;
76
+ if (error.response?.status === 429 && attempt < maxRetries) {
77
+ console.warn(`Rate limited. Retrying in ${retryDelay / 1000}s... (Attempt ${attempt}/${maxRetries})`);
78
+ await (0, _1.delay)(retryDelay);
79
+ }
80
+ else if (attempt >= maxRetries) {
81
+ throw new Error(`Failed to fetch messages after ${maxRetries} attempts. Please try again later.`);
82
82
  }
83
83
  else {
84
- console.error('Error fetching messages:', error.response?.data);
85
84
  throw new Error('Failed to fetch messages. Please try again later.');
86
85
  }
87
86
  }
88
87
  }
88
+ throw new Error('Failed to fetch messages after maximum retries.');
89
89
  };
90
90
  exports.getMessages = getMessages;
91
91
  // Function to fetch message content
@@ -96,8 +96,7 @@ const getMessagesContent = async (messageId) => {
96
96
  });
97
97
  return data;
98
98
  }
99
- catch (error) {
100
- console.error(`Error fetching message content for ID ${messageId}:`, error.response?.data);
99
+ catch (_error) {
101
100
  throw new Error('Failed to fetch message content. Please try again later.');
102
101
  }
103
102
  };
@@ -111,8 +110,7 @@ const getMessageAttachments = async (messageId, attachmentsId) => {
111
110
  });
112
111
  return data;
113
112
  }
114
- catch (error) {
115
- console.error(`Error fetching message attachment for ID ${messageId}:`, error.response?.data);
113
+ catch (_error) {
116
114
  throw new Error('Failed to fetch message attachment. Please try again later.');
117
115
  }
118
116
  };
@@ -125,35 +123,50 @@ const deleteMessage = async (messageId) => {
125
123
  });
126
124
  return status;
127
125
  }
128
- catch (error) {
129
- console.warn(`Error deleting message for ID ${messageId}:`, error.response?.data);
126
+ catch (_error) {
127
+ console.warn(`Error deleting message for ID ${messageId}`);
128
+ return 0;
130
129
  }
131
130
  };
132
131
  exports.deleteMessage = deleteMessage;
133
132
  // Function to create an email account
134
- const createAccount = async (payload, maxRetries = 5, delayMs = 6000) => {
135
- for (let attempt = 1; attempt <= maxRetries; attempt++) {
133
+ const createAccount = async (payload, domain, // Domain to use for fallback email generation
134
+ maxRetries = 10, delayMs = 6000, infiniteRetry = false // Optional: Keep retrying forever
135
+ ) => {
136
+ let attempt = 1;
137
+ while (attempt <= maxRetries || infiniteRetry) {
136
138
  try {
137
139
  const { data } = await apiClient.post('/accounts', payload, {
138
140
  headers: { accept: 'application/json' },
139
141
  });
140
142
  return data;
143
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
141
144
  }
142
145
  catch (error) {
143
- if (error.response?.status !== 201) {
144
- if (attempt < maxRetries) {
145
- await (0, _1.delay)(maxRetries * delayMs);
146
- }
147
- else {
148
- console.log('Max retries reached. Could not create account.', error.response.status);
149
- throw new Error('Failed to create account after multiple attempts.', error.response.status);
150
- }
146
+ const status = error.response?.status;
147
+ const isNetworkError = error.code === 'ECONNABORTED' || !error.response;
148
+ if (status === 409 || status === 422) {
149
+ // Use provided domain or extract from original address
150
+ const domainToUse = domain || payload.address.split('@')[1];
151
+ payload.address = `${Date.now()}-${Math.floor(Math.random() * 100000)}@${domainToUse}`;
152
+ console.warn(`Address already exists or invalid. Retrying with: ${payload.address}`);
153
+ }
154
+ else if (status === 429) {
155
+ console.warn(`Rate limited. Waiting 30 seconds before retry... (Attempt ${attempt}/${maxRetries})`);
156
+ await (0, _1.delay)(30000);
157
+ }
158
+ else if (status === 500 || isNetworkError) {
159
+ const waitTime = Math.min(30000, delayMs * attempt);
160
+ console.warn(`Server error or network issue. Waiting ${waitTime / 1000}s... (Attempt ${attempt}/${maxRetries})`);
161
+ await (0, _1.delay)(waitTime);
151
162
  }
152
163
  else {
153
- throw error.response.status;
164
+ throw error;
154
165
  }
166
+ attempt++;
155
167
  }
156
168
  }
169
+ throw new Error('🚨 Max retries reached. Account creation failed.');
157
170
  };
158
171
  exports.createAccount = createAccount;
159
172
  // Function to delete an account
@@ -162,9 +175,8 @@ const deleteAccount = async (accountId) => {
162
175
  await apiClient.delete(`/accounts/${accountId}`, {
163
176
  headers: (0, exports.getAuthHeaders)(),
164
177
  });
165
- console.log(`Account ${accountId} deleted successfully.`);
166
178
  }
167
- catch (error) {
179
+ catch (_error) {
168
180
  console.warn(`Failed to delete account ${accountId}, ignoring error.`);
169
181
  }
170
182
  };
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,7 @@ declare global {
21
21
  * Retrieves the latest message from the inbox.
22
22
  *
23
23
  * @param {GetEmailOptions} [options] - Optional settings for polling and deletion.
24
+ * @param {string} [options.accountId] - Account ID to cleanup after reading.
24
25
  * @param {number} [options.maxWaitTime=30000] - Maximum time to wait for messages (in milliseconds). Default is 30 seconds.
25
26
  * @param {number} [options.waitInterval=2000] - Time interval between polling attempts (in milliseconds). Default is 2 seconds.
26
27
  * @param {boolean} [options.logPolling=false] - Whether to log polling attempts. Default is `false`.
@@ -56,6 +57,25 @@ declare global {
56
57
  }
57
58
  */
58
59
  getRecentEmail(options: GetEmailOptions): Chainable<MessageContent | null>;
60
+ /**
61
+ * Extracts a verification code from email content.
62
+ *
63
+ * This function scans the given text for a sequence of 5 or more
64
+ * consecutive digits and returns the first valid verification code.
65
+ *
66
+ * @param {string} text - The content of the email, typically the body or HTML.
67
+ * @returns {Promise<string>} The first verification code found.
68
+ *
69
+ * @throws {Error} If no valid verification code is found.
70
+ *
71
+ * @example
72
+ * cy.getRecentEmail().then((email) => {
73
+ * cy.getVerificationCode(email?.text).then((code) => {
74
+ * cy.log(code); // Output: "123456"
75
+ * });
76
+ * });
77
+ */
78
+ getVerificationCode(text?: string): Chainable<string>;
59
79
  }
60
80
  }
61
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cypress.d.ts","sourceRoot":"","sources":["../../src/cypress.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAEd,eAAe,EAEf,cAAc,EACf,MAAM,SAAS,CAAC;AAUjB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,SAAS;YACjB;;;;;;;;;;;;;eAaG;YACH,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;YAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAqCG;YACH,cAAc,CACZ,OAAO,EAAE,eAAe,GACvB,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;SACrC;KACF;CACF"}
1
+ {"version":3,"file":"cypress.d.ts","sourceRoot":"","sources":["../../src/cypress.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAEd,eAAe,EAGf,cAAc,EACf,MAAM,SAAS,CAAC;AAcjB,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,OAAO,CAAC;QAChB,UAAU,SAAS;YACjB;;;;;;;;;;;;;eAaG;YACH,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;YAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAsCG;YACH,cAAc,CACZ,OAAO,EAAE,eAAe,GACvB,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;YAEpC;;;;;;;;;;;;;;;;;eAiBG;YACH,mBAAmB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;SACvD;KACF;CACF"}
@@ -7,4 +7,7 @@ Cypress.Commands.add('generateEmail', function (prefix) {
7
7
  Cypress.Commands.add('getRecentEmail', function (options) {
8
8
  return cy.wrap((0, index_1.getRecentEmail)(options));
9
9
  });
10
+ Cypress.Commands.add('getVerificationCode', function (text) {
11
+ return cy.wrap((0, index_1.getVerificationCode)(text));
12
+ });
10
13
  //# sourceMappingURL=cypress.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cypress.js","sourceRoot":"","sources":["../../src/cypress.ts"],"names":[],"mappings":";;AAAA,mCAMiB;AAEjB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,MAAe;IAC7D,OAAO,EAAE,CAAC,IAAI,CAAC,IAAA,qBAAa,EAAC,MAAM,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,UAAU,OAAwB;IACvE,OAAO,EAAE,CAAC,IAAI,CAAC,IAAA,sBAAc,EAAC,OAAO,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cypress.js","sourceRoot":"","sources":["../../src/cypress.ts"],"names":[],"mappings":";;AAAA,mCAOiB;AAEjB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,MAAe;IAC7D,OAAO,EAAE,CAAC,IAAI,CAAC,IAAA,qBAAa,EAAC,MAAM,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,UAAU,OAAwB;IACvE,OAAO,EAAE,CAAC,IAAI,CAAC,IAAA,sBAAc,EAAC,OAAO,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,qBAAqB,EAAE,UAAU,IAAa;IACjE,OAAO,EAAE,CAAC,IAAI,CAAC,IAAA,2BAAmB,EAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC"}
@@ -17,7 +17,7 @@ export interface MessageContent {
17
17
  updatedAt: string;
18
18
  attachments: Attachment[];
19
19
  }
20
- interface Attachment {
20
+ export interface Attachment {
21
21
  title: string;
22
22
  data: Buffer;
23
23
  }
@@ -26,8 +26,10 @@ export interface GetEmailOptions {
26
26
  waitInterval?: number;
27
27
  logPolling?: boolean;
28
28
  deleteAfterRead?: boolean;
29
+ accountId?: string;
29
30
  }
30
- export declare const delay: (ms: number) => Promise<void>;
31
+ declare const delay: (ms: number) => Promise<void>;
32
+ export { delay };
31
33
  /**
32
34
  * Creates a new email inbox with a unique address.
33
35
  *
@@ -47,6 +49,7 @@ export declare const generateEmail: (emailPrefix?: string) => Promise<GeneratedE
47
49
  * Retrieves the latest message from the inbox.
48
50
  *
49
51
  * @param {GetEmailOptions} [options] - Optional settings for polling and deletion.
52
+ * @param {string} [options.accountId] - Account ID to cleanup after reading. If not provided, account won't be deleted.
50
53
  * @param {number} [options.maxWaitTime=30000] - Maximum time to wait for messages (in milliseconds). Default is 30 seconds.
51
54
  * @param {number} [options.waitInterval=2000] - Time interval between polling attempts (in milliseconds). Default is 2 seconds.
52
55
  * @param {boolean} [options.logPolling=false] - Whether to log polling attempts. Default is `false`.
@@ -56,7 +59,8 @@ export declare const generateEmail: (emailPrefix?: string) => Promise<GeneratedE
56
59
  * @throws {Error} If no messages are available within the polling timeout or authentication fails.
57
60
  *
58
61
  * @example
59
- * const message = await getRecentEmail({ maxWaitTime: 5000, waitInterval: 1000, logPolling: true });
62
+ * const { accountId } = await generateEmail();
63
+ * const message = await getRecentEmail({ accountId, maxWaitTime: 5000, waitInterval: 1000, logPolling: true });
60
64
  * console.log(message.subject); // Outputs: "Hello!"
61
65
  */
62
66
  export declare const getRecentEmail: (options?: GetEmailOptions) => Promise<MessageContent | null>;
@@ -76,5 +80,4 @@ export declare const getRecentEmail: (options?: GetEmailOptions) => Promise<Mess
76
80
  * console.log(verificationCode); // Output: "123456"
77
81
  */
78
82
  export declare const getVerificationCode: (text: string | undefined) => Promise<string>;
79
- export {};
80
83
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AACD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AACD,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,eAAO,MAAM,KAAK,OAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CACI,CAAC;AAIpD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,aAAa,iBACV,MAAM,KACnB,OAAO,CAAC,cAAc,CA2BxB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,cAAc,aACf,eAAe,KACxB,OAAO,CAAC,cAAc,GAAG,IAAI,CAgF/B,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,mBAAmB,SACxB,MAAM,GAAG,SAAS,KACvB,OAAO,CAAC,MAAM,CAOhB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AACD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1B,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AACD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,KAAK,GAAI,IAAI,MAAM,KAAG,OAAO,CAAC,IAAI,CACW,CAAC;AAKpD,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,aAAa,GACxB,cAAc,MAAM,KACnB,OAAO,CAAC,cAAc,CA+BxB,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,cAAc,GACzB,UAAU,eAAe,KACxB,OAAO,CAAC,cAAc,GAAG,IAAI,CA4F/B,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,mBAAmB,GAC9B,MAAM,MAAM,GAAG,SAAS,KACvB,OAAO,CAAC,MAAM,CAYhB,CAAC"}
package/dist/cjs/index.js CHANGED
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getVerificationCode = exports.getRecentEmail = exports.generateEmail = exports.delay = void 0;
4
4
  const api_1 = require("./api");
5
5
  const api_2 = require("./api");
6
- let accountId;
7
6
  const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
8
7
  exports.delay = delay;
9
8
  const generateRandomName = () => Math.random().toString(36).substring(2, 15);
@@ -30,19 +29,21 @@ const generateEmail = async (emailPrefix) => {
30
29
  throw new Error('No available domains.');
31
30
  const emailAddress = `${emailPrefix || generateRandomName()}@${domains[0]}`;
32
31
  const password = generateRandomName();
32
+ // eslint-disable-next-line no-constant-condition
33
33
  while (true) {
34
34
  try {
35
35
  const accountResponse = await (0, api_2.createAccount)({
36
36
  address: emailAddress,
37
37
  password,
38
- });
39
- accountId = accountResponse.id;
38
+ }, domains[0] // Pass the first active domain for fallback
39
+ );
40
40
  await (0, api_1.authenticate)(emailAddress, password);
41
41
  return { emailAddress, accountId: accountResponse.id };
42
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
42
43
  }
43
44
  catch (error) {
44
45
  if (error.response?.status === 429) {
45
- await (0, exports.delay)(5 * 1000);
46
+ await delay(5 * 1000);
46
47
  }
47
48
  else {
48
49
  throw error;
@@ -55,6 +56,7 @@ exports.generateEmail = generateEmail;
55
56
  * Retrieves the latest message from the inbox.
56
57
  *
57
58
  * @param {GetEmailOptions} [options] - Optional settings for polling and deletion.
59
+ * @param {string} [options.accountId] - Account ID to cleanup after reading. If not provided, account won't be deleted.
58
60
  * @param {number} [options.maxWaitTime=30000] - Maximum time to wait for messages (in milliseconds). Default is 30 seconds.
59
61
  * @param {number} [options.waitInterval=2000] - Time interval between polling attempts (in milliseconds). Default is 2 seconds.
60
62
  * @param {boolean} [options.logPolling=false] - Whether to log polling attempts. Default is `false`.
@@ -64,52 +66,62 @@ exports.generateEmail = generateEmail;
64
66
  * @throws {Error} If no messages are available within the polling timeout or authentication fails.
65
67
  *
66
68
  * @example
67
- * const message = await getRecentEmail({ maxWaitTime: 5000, waitInterval: 1000, logPolling: true });
69
+ * const { accountId } = await generateEmail();
70
+ * const message = await getRecentEmail({ accountId, maxWaitTime: 5000, waitInterval: 1000, logPolling: true });
68
71
  * console.log(message.subject); // Outputs: "Hello!"
69
72
  */
70
73
  const getRecentEmail = async (options) => {
71
- const { maxWaitTime = 30000, waitInterval = 2000, logPolling = false, deleteAfterRead = false, } = options || {};
74
+ const { maxWaitTime = 30000, waitInterval = 2000, logPolling = false, deleteAfterRead = false, accountId, } = options || {};
72
75
  const startTime = Date.now();
73
76
  const logger = (message) => logPolling && console.log(message);
74
77
  logger(`Polling started with a timeout of ${maxWaitTime / 1000}sec and interval of ${waitInterval / 1000}sec.`);
75
- while (Date.now() - startTime < maxWaitTime) {
76
- const messages = await (0, api_2.getMessages)();
77
- if (messages.length > 0) {
78
- logger(`Found ${messages.length} message(s), fetching details...`);
79
- const sortedMessages = messages.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
80
- const messageId = sortedMessages[0].id;
81
- logger(`Found ${messageId}`);
82
- const { from, to, subject, intro, text, html, createdAt, updatedAt, hasAttachments, attachments, } = await (0, api_2.getMessagesContent)(messageId);
83
- const attachmentArray = [];
84
- if (hasAttachments) {
85
- for (const { id, filename } of attachments) {
86
- logger(`Fetching attachment ID: ${id}`);
87
- const attachmentData = await (0, api_1.getMessageAttachments)(messageId, id);
88
- attachmentArray.push({ title: filename, data: attachmentData });
78
+ try {
79
+ while (Date.now() - startTime < maxWaitTime) {
80
+ const messages = await (0, api_2.getMessages)();
81
+ if (messages.length > 0) {
82
+ logger(`Found ${messages.length} message(s), fetching details...`);
83
+ // Sort by newest first (descending order)
84
+ const sortedMessages = messages.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
85
+ const messageId = sortedMessages[0].id;
86
+ logger(`Found ${messageId}`);
87
+ const { from, to, subject, intro, text, html, createdAt, updatedAt, hasAttachments, attachments, } = await (0, api_2.getMessagesContent)(messageId);
88
+ const attachmentArray = [];
89
+ if (hasAttachments) {
90
+ for (const { id, filename } of attachments) {
91
+ logger(`Fetching attachment ID: ${id}`);
92
+ const attachmentData = await (0, api_1.getMessageAttachments)(messageId, id);
93
+ attachmentArray.push({ title: filename, data: attachmentData });
94
+ }
89
95
  }
96
+ if (deleteAfterRead) {
97
+ await (0, api_2.deleteMessage)(messageId);
98
+ logger(`Deleted message ${messageId}`);
99
+ }
100
+ return {
101
+ from: from,
102
+ to: to,
103
+ subject,
104
+ intro,
105
+ text,
106
+ html,
107
+ createdAt,
108
+ updatedAt,
109
+ attachments: attachmentArray,
110
+ };
90
111
  }
91
- if (deleteAfterRead) {
92
- await (0, api_2.deleteMessage)(messageId);
93
- }
112
+ await new Promise((resolve) => setTimeout(resolve, waitInterval));
113
+ logger(`No messages found, waiting for ${waitInterval / 1000} seconds...`);
114
+ }
115
+ logger(`Waiting timeout of ${maxWaitTime / 1000} seconds reached. No messages found.`);
116
+ throw new Error(`No messages available within ${maxWaitTime / 1000} seconds timeout`);
117
+ }
118
+ finally {
119
+ // Cleanup account if accountId is provided
120
+ if (accountId) {
94
121
  await (0, api_2.deleteAccount)(accountId);
95
- return {
96
- from: from,
97
- to: to,
98
- subject,
99
- intro,
100
- text,
101
- html,
102
- createdAt,
103
- updatedAt,
104
- attachments: attachmentArray,
105
- };
122
+ logger(`Deleted account ${accountId}`);
106
123
  }
107
- await new Promise((resolve) => setTimeout(resolve, waitInterval));
108
- logger(`No messages found, waiting for ${waitInterval / 1000} seconds...`);
109
124
  }
110
- logger(`Waiting timeout of ${maxWaitTime / 1000} seconds reached. No messages found.`);
111
- await (0, api_2.deleteAccount)(accountId);
112
- throw new Error(`No messages available within ${maxWaitTime / 1000} seconds timeout`);
113
125
  };
114
126
  exports.getRecentEmail = getRecentEmail;
115
127
  /**
@@ -129,6 +141,9 @@ exports.getRecentEmail = getRecentEmail;
129
141
  */
130
142
  const getVerificationCode = async (text) => {
131
143
  console.log('Extracting the verification code from the email content...');
144
+ if (!text) {
145
+ throw new Error('No text provided to extract verification code from.');
146
+ }
132
147
  const matches = text.match(/\b\d{5,}\b/);
133
148
  if (matches) {
134
149
  return matches[0];