mail-time 4.0.0 → 5.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/README.md +145 -35
- package/adapters/mongo.js +6 -3
- package/adapters/postgres.js +19 -3
- package/helpers.js +105 -9
- package/index.cjs +629 -141
- package/index.d.cts +74 -9
- package/index.d.ts +74 -9
- package/index.js +497 -121
- package/package.json +32 -5
- package/presets.d.ts +4 -4
- package/presets.js +6 -6
package/index.d.cts
CHANGED
|
@@ -4,6 +4,7 @@ export type MailTimePingResult = {
|
|
|
4
4
|
status: string;
|
|
5
5
|
code: number;
|
|
6
6
|
statusCode: number;
|
|
7
|
+
paused?: boolean;
|
|
7
8
|
error?: unknown;
|
|
8
9
|
};
|
|
9
10
|
export type MailTimeStorageClient = {
|
|
@@ -34,6 +35,7 @@ export type MailTimeJoSkOptions = {
|
|
|
34
35
|
debug?: boolean;
|
|
35
36
|
autoClear?: boolean;
|
|
36
37
|
zombieTime?: number;
|
|
38
|
+
lockLeaseTime?: number;
|
|
37
39
|
minRevolvingDelay?: number;
|
|
38
40
|
maxRevolvingDelay?: number;
|
|
39
41
|
execute?: "batch" | "one";
|
|
@@ -43,6 +45,14 @@ export type MailTimeJoSkOptions = {
|
|
|
43
45
|
onError?: (title: string, details: object) => void;
|
|
44
46
|
onExecuted?: (uid: string, details: object) => void;
|
|
45
47
|
};
|
|
48
|
+
export type MailTimeScheduler = {
|
|
49
|
+
[key: string]: any;
|
|
50
|
+
ping: () => Promise<MailTimePingResult>;
|
|
51
|
+
setInterval: (func: (...args: any[]) => unknown, delay: number, uid: string) => Promise<string>;
|
|
52
|
+
destroy: () => boolean;
|
|
53
|
+
pause: (timerId?: string) => boolean;
|
|
54
|
+
resume: (timerId?: string) => boolean;
|
|
55
|
+
};
|
|
46
56
|
export type MailTimeTask = {
|
|
47
57
|
uuid: string;
|
|
48
58
|
to?: string | string[];
|
|
@@ -94,13 +104,18 @@ export type MailTimeMailOptions = {
|
|
|
94
104
|
export type MailTimeConcatEmailsOptions = {
|
|
95
105
|
subject?: string;
|
|
96
106
|
};
|
|
107
|
+
export type MailTimeFromDetails = {
|
|
108
|
+
index: number;
|
|
109
|
+
from: string | undefined;
|
|
110
|
+
};
|
|
97
111
|
export type MailTimeOptions = {
|
|
98
112
|
queue: RedisQueue | MongoQueue | PostgresQueue | CustomQueue;
|
|
99
113
|
type?: "server" | "client";
|
|
100
|
-
from?: string | ((transport: MailTimeTransport) => string);
|
|
114
|
+
from?: string | ((transport: MailTimeTransport, details: MailTimeFromDetails) => string);
|
|
101
115
|
transports?: MailTimeTransport[];
|
|
102
116
|
strategy?: "backup" | "balancer";
|
|
103
117
|
failsToNext?: number;
|
|
118
|
+
shouldFailOver?: (error: unknown, info: object | undefined, email: MailTimeTask) => boolean;
|
|
104
119
|
retries?: number;
|
|
105
120
|
maxTries?: number;
|
|
106
121
|
retryDelay?: number;
|
|
@@ -115,6 +130,10 @@ export type MailTimeOptions = {
|
|
|
115
130
|
mode?: "one" | "batch";
|
|
116
131
|
concurrency?: number;
|
|
117
132
|
sendingTimeout?: number;
|
|
133
|
+
renewClaim?: boolean | number;
|
|
134
|
+
maxRenewals?: number;
|
|
135
|
+
strictPayload?: boolean;
|
|
136
|
+
allowedMailFields?: string[];
|
|
118
137
|
verifyTransports?: boolean;
|
|
119
138
|
template?: string;
|
|
120
139
|
prefix?: string;
|
|
@@ -130,7 +149,7 @@ export type MailTimeOptions = {
|
|
|
130
149
|
* @typedef {import('./presets.js').MailTimePresetConfig} MailTimePresetConfig
|
|
131
150
|
*/
|
|
132
151
|
/**
|
|
133
|
-
* @typedef {{ status: string, code: number, statusCode: number, error?: unknown }} MailTimePingResult
|
|
152
|
+
* @typedef {{ status: string, code: number, statusCode: number, paused?: boolean, error?: unknown }} MailTimePingResult
|
|
134
153
|
*/
|
|
135
154
|
/**
|
|
136
155
|
* @typedef {{ [key: string]: any, query?: (queryText: string, values?: unknown[]) => Promise<{ rows?: unknown[], rowCount?: number | null }> }} MailTimeStorageClient
|
|
@@ -145,7 +164,10 @@ export type MailTimeOptions = {
|
|
|
145
164
|
* @typedef {{ [key: string]: any, type?: 'mongo' | 'redis' | 'postgres', client?: MailTimeStorageClient, db?: MailTimeMongoDb, prefix?: string, resetOnInit?: boolean, useHashTags?: boolean }} MailTimeJoSkAdapterOptions
|
|
146
165
|
*/
|
|
147
166
|
/**
|
|
148
|
-
* @typedef {{ [key: string]: any, adapter: MailTimeJoSkAdapterOptions | object, debug?: boolean, autoClear?: boolean, zombieTime?: number, minRevolvingDelay?: number, maxRevolvingDelay?: number, execute?: 'batch' | 'one', concurrency?: number, lockOwnerId?: string, resetOnInit?: boolean, onError?: (title: string, details: object) => void, onExecuted?: (uid: string, details: object) => void }} MailTimeJoSkOptions
|
|
167
|
+
* @typedef {{ [key: string]: any, adapter: MailTimeJoSkAdapterOptions | object, debug?: boolean, autoClear?: boolean, zombieTime?: number, lockLeaseTime?: number, minRevolvingDelay?: number, maxRevolvingDelay?: number, execute?: 'batch' | 'one', concurrency?: number, lockOwnerId?: string, resetOnInit?: boolean, onError?: (title: string, details: object) => void, onExecuted?: (uid: string, details: object) => void }} MailTimeJoSkOptions
|
|
168
|
+
*/
|
|
169
|
+
/**
|
|
170
|
+
* @typedef {{ [key: string]: any, ping: () => Promise<MailTimePingResult>, setInterval: (func: (...args: any[]) => unknown, delay: number, uid: string) => Promise<string>, destroy: () => boolean, pause: (timerId?: string) => boolean, resume: (timerId?: string) => boolean }} MailTimeScheduler
|
|
149
171
|
*/
|
|
150
172
|
/**
|
|
151
173
|
* @typedef {{ uuid: string, to?: string | string[], tries: number, sendAt: number, isSent: boolean, isCancelled: boolean, isFailed: boolean, isSending?: boolean, sendingAt?: number, template?: string | false, transport: number, concatSubject?: string | false, mailOptions: MailTimeMailOptions[] }} MailTimeTask
|
|
@@ -166,12 +188,28 @@ export type MailTimeOptions = {
|
|
|
166
188
|
* @typedef {{ subject?: string }} MailTimeConcatEmailsOptions
|
|
167
189
|
*/
|
|
168
190
|
/**
|
|
169
|
-
* @typedef {{
|
|
191
|
+
* @typedef {{ index: number, from: string | undefined }} MailTimeFromDetails
|
|
192
|
+
*/
|
|
193
|
+
/**
|
|
194
|
+
* @typedef {{ queue: RedisQueue | MongoQueue | PostgresQueue | CustomQueue, type?: 'server' | 'client', from?: string | ((transport: MailTimeTransport, details: MailTimeFromDetails) => string), transports?: MailTimeTransport[], strategy?: 'backup' | 'balancer', failsToNext?: number, shouldFailOver?: (error: unknown, info: object | undefined, email: MailTimeTask) => boolean, retries?: number, maxTries?: number, retryDelay?: number, interval?: number, keepHistory?: boolean, concatEmails?: boolean | MailTimeConcatEmailsOptions, concatSubject?: string, concatDelimiter?: string, concatDelay?: number, concatThrottling?: number, revolvingInterval?: number, mode?: 'one' | 'batch', concurrency?: number, sendingTimeout?: number, renewClaim?: boolean | number, maxRenewals?: number, strictPayload?: boolean, allowedMailFields?: string[], verifyTransports?: boolean, template?: string, prefix?: string, debug?: boolean, josk?: MailTimeJoSkOptions, onError?: (error: unknown, email: MailTimeTask | null, details?: object) => void, onSent?: (email: MailTimeTask, details?: object) => void }} MailTimeOptions
|
|
170
195
|
*/
|
|
171
196
|
/** Class of MailTime */
|
|
172
197
|
export class MailTime {
|
|
173
198
|
static set Template(newVal: string);
|
|
174
199
|
static get Template(): string;
|
|
200
|
+
/**
|
|
201
|
+
* @static
|
|
202
|
+
* @memberOf MailTime
|
|
203
|
+
* @name transportFrom
|
|
204
|
+
* @description Best-effort sender address for a transport. `nodemailer.createTransport()`
|
|
205
|
+
* only exposes `.options` for *plain-object* configs — for a class-instance transporter
|
|
206
|
+
* (anything with its own `.send()`) nodemailer's internal `Mail.options` is always `{}`,
|
|
207
|
+
* so `transport.options.from` silently reads `undefined`. This walks the places the
|
|
208
|
+
* address can actually live.
|
|
209
|
+
* @param {MailTimeTransport} transport
|
|
210
|
+
* @returns {string | undefined}
|
|
211
|
+
*/
|
|
212
|
+
static transportFrom(transport: MailTimeTransport): string | undefined;
|
|
175
213
|
/**
|
|
176
214
|
* Create a MailTime instance
|
|
177
215
|
* @param {MailTimeOptions} opts - configuration object
|
|
@@ -191,12 +229,17 @@ export class MailTime {
|
|
|
191
229
|
mode: "one" | "batch";
|
|
192
230
|
concurrency: number;
|
|
193
231
|
sendingTimeout: number;
|
|
232
|
+
renewClaim: number;
|
|
233
|
+
maxRenewals: number;
|
|
234
|
+
shouldFailOver: ((error: unknown, info: object | undefined, email: MailTimeTask) => boolean) | null;
|
|
235
|
+
strictPayload: boolean;
|
|
236
|
+
allowedMailFields: Set<string>;
|
|
194
237
|
failsToNext: number;
|
|
195
238
|
strategy: "backup" | "balancer";
|
|
196
239
|
transports: MailTimeTransport[];
|
|
197
240
|
transport: number;
|
|
198
241
|
verifyTransports: boolean;
|
|
199
|
-
from: boolean | ((transport: MailTimeTransport) => string);
|
|
242
|
+
from: boolean | ((transport: MailTimeTransport, details: MailTimeFromDetails) => string);
|
|
200
243
|
/** @type {string} */
|
|
201
244
|
concatSubject: string;
|
|
202
245
|
concatEmails: boolean;
|
|
@@ -208,6 +251,7 @@ export class MailTime {
|
|
|
208
251
|
debug?: boolean;
|
|
209
252
|
autoClear?: boolean;
|
|
210
253
|
zombieTime?: number;
|
|
254
|
+
lockLeaseTime?: number;
|
|
211
255
|
minRevolvingDelay?: number;
|
|
212
256
|
maxRevolvingDelay?: number;
|
|
213
257
|
execute?: "batch" | "one";
|
|
@@ -217,7 +261,8 @@ export class MailTime {
|
|
|
217
261
|
onError?: (title: string, details: object) => void;
|
|
218
262
|
onExecuted?: (uid: string, details: object) => void;
|
|
219
263
|
} | undefined;
|
|
220
|
-
|
|
264
|
+
/** @type {MailTimeScheduler | undefined} */
|
|
265
|
+
scheduler: MailTimeScheduler | undefined;
|
|
221
266
|
/**
|
|
222
267
|
* @async
|
|
223
268
|
* @memberOf MailTime
|
|
@@ -238,7 +283,7 @@ export class MailTime {
|
|
|
238
283
|
/**
|
|
239
284
|
* @memberOf MailTime
|
|
240
285
|
* @name destroy
|
|
241
|
-
* @description Stop the scheduler and block future dispatches. Pass `{ drain: true }` to
|
|
286
|
+
* @description Stop the scheduler and block future dispatches. Without `{ drain: true }`, any in-flight SMTP attempts are neutralized on completion — they perform no storage writes, no `onSent`/`onError` callbacks, and no logging once `destroy()` returns; their claimed rows are recovered by stale-lock timeout (`sendingTimeout`). Pass `{ drain: true }` to instead let in-flight attempts run to completion (returns a Promise that resolves once they settle).
|
|
242
287
|
* @param {{ drain?: boolean }} [opts]
|
|
243
288
|
* @returns {boolean | Promise<boolean>}
|
|
244
289
|
*/
|
|
@@ -253,6 +298,27 @@ export class MailTime {
|
|
|
253
298
|
* @returns {Promise<void>}
|
|
254
299
|
*/
|
|
255
300
|
drain(): Promise<void>;
|
|
301
|
+
/**
|
|
302
|
+
* @memberOf MailTime
|
|
303
|
+
* @name pause
|
|
304
|
+
* @description Pause this server instance from competing for the queue-drain lease. In-flight SMTP sends finish; peer server instances keep draining. Reversible (unlike `destroy()`). No-op on `client` instances or after `destroy()`. To stop scanning *and* wait for in-flight sends: `mailTime.pause(); await mailTime.drain();`.
|
|
305
|
+
* @returns {boolean} `true` if newly paused; `false` if already paused, a client instance, or destroyed
|
|
306
|
+
*/
|
|
307
|
+
pause(): boolean;
|
|
308
|
+
/**
|
|
309
|
+
* @memberOf MailTime
|
|
310
|
+
* @name resume
|
|
311
|
+
* @description Resume competing for the queue-drain lease after `pause()`; triggers an immediate scan. No-op on `client` instances, after `destroy()`, or when not paused.
|
|
312
|
+
* @returns {boolean} `true` if newly resumed; `false` if not paused, a client instance, or destroyed
|
|
313
|
+
*/
|
|
314
|
+
resume(): boolean;
|
|
315
|
+
/**
|
|
316
|
+
* @memberOf MailTime
|
|
317
|
+
* @name isPaused
|
|
318
|
+
* @description Whether this instance is currently paused from draining the queue. Always `false` on `client` instances.
|
|
319
|
+
* @returns {boolean}
|
|
320
|
+
*/
|
|
321
|
+
get isPaused(): boolean;
|
|
256
322
|
/**
|
|
257
323
|
* @memberOf MailTime
|
|
258
324
|
* @name send
|
|
@@ -270,7 +336,7 @@ export class MailTime {
|
|
|
270
336
|
* @returns {Promise<string>} uuid of the email
|
|
271
337
|
* @throws {Error}
|
|
272
338
|
*/
|
|
273
|
-
sendMail(opts
|
|
339
|
+
sendMail(opts: MailTimeMailOptions): Promise<string>;
|
|
274
340
|
/**
|
|
275
341
|
* @async
|
|
276
342
|
* @memberOf MailTime
|
|
@@ -296,5 +362,4 @@ import { PostgresQueue } from './adapters/postgres.js';
|
|
|
296
362
|
import { mailTimePreset } from './presets.js';
|
|
297
363
|
import { presets } from './presets.js';
|
|
298
364
|
import { presetNames } from './presets.js';
|
|
299
|
-
import { JoSk } from 'josk';
|
|
300
365
|
export { MongoQueue, RedisQueue, PostgresQueue, mailTimePreset, presets, presetNames };
|
package/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export type MailTimePingResult = {
|
|
|
4
4
|
status: string;
|
|
5
5
|
code: number;
|
|
6
6
|
statusCode: number;
|
|
7
|
+
paused?: boolean;
|
|
7
8
|
error?: unknown;
|
|
8
9
|
};
|
|
9
10
|
export type MailTimeStorageClient = {
|
|
@@ -34,6 +35,7 @@ export type MailTimeJoSkOptions = {
|
|
|
34
35
|
debug?: boolean;
|
|
35
36
|
autoClear?: boolean;
|
|
36
37
|
zombieTime?: number;
|
|
38
|
+
lockLeaseTime?: number;
|
|
37
39
|
minRevolvingDelay?: number;
|
|
38
40
|
maxRevolvingDelay?: number;
|
|
39
41
|
execute?: "batch" | "one";
|
|
@@ -43,6 +45,14 @@ export type MailTimeJoSkOptions = {
|
|
|
43
45
|
onError?: (title: string, details: object) => void;
|
|
44
46
|
onExecuted?: (uid: string, details: object) => void;
|
|
45
47
|
};
|
|
48
|
+
export type MailTimeScheduler = {
|
|
49
|
+
[key: string]: any;
|
|
50
|
+
ping: () => Promise<MailTimePingResult>;
|
|
51
|
+
setInterval: (func: (...args: any[]) => unknown, delay: number, uid: string) => Promise<string>;
|
|
52
|
+
destroy: () => boolean;
|
|
53
|
+
pause: (timerId?: string) => boolean;
|
|
54
|
+
resume: (timerId?: string) => boolean;
|
|
55
|
+
};
|
|
46
56
|
export type MailTimeTask = {
|
|
47
57
|
uuid: string;
|
|
48
58
|
to?: string | string[];
|
|
@@ -94,13 +104,18 @@ export type MailTimeMailOptions = {
|
|
|
94
104
|
export type MailTimeConcatEmailsOptions = {
|
|
95
105
|
subject?: string;
|
|
96
106
|
};
|
|
107
|
+
export type MailTimeFromDetails = {
|
|
108
|
+
index: number;
|
|
109
|
+
from: string | undefined;
|
|
110
|
+
};
|
|
97
111
|
export type MailTimeOptions = {
|
|
98
112
|
queue: RedisQueue | MongoQueue | PostgresQueue | CustomQueue;
|
|
99
113
|
type?: "server" | "client";
|
|
100
|
-
from?: string | ((transport: MailTimeTransport) => string);
|
|
114
|
+
from?: string | ((transport: MailTimeTransport, details: MailTimeFromDetails) => string);
|
|
101
115
|
transports?: MailTimeTransport[];
|
|
102
116
|
strategy?: "backup" | "balancer";
|
|
103
117
|
failsToNext?: number;
|
|
118
|
+
shouldFailOver?: (error: unknown, info: object | undefined, email: MailTimeTask) => boolean;
|
|
104
119
|
retries?: number;
|
|
105
120
|
maxTries?: number;
|
|
106
121
|
retryDelay?: number;
|
|
@@ -115,6 +130,10 @@ export type MailTimeOptions = {
|
|
|
115
130
|
mode?: "one" | "batch";
|
|
116
131
|
concurrency?: number;
|
|
117
132
|
sendingTimeout?: number;
|
|
133
|
+
renewClaim?: boolean | number;
|
|
134
|
+
maxRenewals?: number;
|
|
135
|
+
strictPayload?: boolean;
|
|
136
|
+
allowedMailFields?: string[];
|
|
118
137
|
verifyTransports?: boolean;
|
|
119
138
|
template?: string;
|
|
120
139
|
prefix?: string;
|
|
@@ -130,7 +149,7 @@ export type MailTimeOptions = {
|
|
|
130
149
|
* @typedef {import('./presets.js').MailTimePresetConfig} MailTimePresetConfig
|
|
131
150
|
*/
|
|
132
151
|
/**
|
|
133
|
-
* @typedef {{ status: string, code: number, statusCode: number, error?: unknown }} MailTimePingResult
|
|
152
|
+
* @typedef {{ status: string, code: number, statusCode: number, paused?: boolean, error?: unknown }} MailTimePingResult
|
|
134
153
|
*/
|
|
135
154
|
/**
|
|
136
155
|
* @typedef {{ [key: string]: any, query?: (queryText: string, values?: unknown[]) => Promise<{ rows?: unknown[], rowCount?: number | null }> }} MailTimeStorageClient
|
|
@@ -145,7 +164,10 @@ export type MailTimeOptions = {
|
|
|
145
164
|
* @typedef {{ [key: string]: any, type?: 'mongo' | 'redis' | 'postgres', client?: MailTimeStorageClient, db?: MailTimeMongoDb, prefix?: string, resetOnInit?: boolean, useHashTags?: boolean }} MailTimeJoSkAdapterOptions
|
|
146
165
|
*/
|
|
147
166
|
/**
|
|
148
|
-
* @typedef {{ [key: string]: any, adapter: MailTimeJoSkAdapterOptions | object, debug?: boolean, autoClear?: boolean, zombieTime?: number, minRevolvingDelay?: number, maxRevolvingDelay?: number, execute?: 'batch' | 'one', concurrency?: number, lockOwnerId?: string, resetOnInit?: boolean, onError?: (title: string, details: object) => void, onExecuted?: (uid: string, details: object) => void }} MailTimeJoSkOptions
|
|
167
|
+
* @typedef {{ [key: string]: any, adapter: MailTimeJoSkAdapterOptions | object, debug?: boolean, autoClear?: boolean, zombieTime?: number, lockLeaseTime?: number, minRevolvingDelay?: number, maxRevolvingDelay?: number, execute?: 'batch' | 'one', concurrency?: number, lockOwnerId?: string, resetOnInit?: boolean, onError?: (title: string, details: object) => void, onExecuted?: (uid: string, details: object) => void }} MailTimeJoSkOptions
|
|
168
|
+
*/
|
|
169
|
+
/**
|
|
170
|
+
* @typedef {{ [key: string]: any, ping: () => Promise<MailTimePingResult>, setInterval: (func: (...args: any[]) => unknown, delay: number, uid: string) => Promise<string>, destroy: () => boolean, pause: (timerId?: string) => boolean, resume: (timerId?: string) => boolean }} MailTimeScheduler
|
|
149
171
|
*/
|
|
150
172
|
/**
|
|
151
173
|
* @typedef {{ uuid: string, to?: string | string[], tries: number, sendAt: number, isSent: boolean, isCancelled: boolean, isFailed: boolean, isSending?: boolean, sendingAt?: number, template?: string | false, transport: number, concatSubject?: string | false, mailOptions: MailTimeMailOptions[] }} MailTimeTask
|
|
@@ -166,12 +188,28 @@ export type MailTimeOptions = {
|
|
|
166
188
|
* @typedef {{ subject?: string }} MailTimeConcatEmailsOptions
|
|
167
189
|
*/
|
|
168
190
|
/**
|
|
169
|
-
* @typedef {{
|
|
191
|
+
* @typedef {{ index: number, from: string | undefined }} MailTimeFromDetails
|
|
192
|
+
*/
|
|
193
|
+
/**
|
|
194
|
+
* @typedef {{ queue: RedisQueue | MongoQueue | PostgresQueue | CustomQueue, type?: 'server' | 'client', from?: string | ((transport: MailTimeTransport, details: MailTimeFromDetails) => string), transports?: MailTimeTransport[], strategy?: 'backup' | 'balancer', failsToNext?: number, shouldFailOver?: (error: unknown, info: object | undefined, email: MailTimeTask) => boolean, retries?: number, maxTries?: number, retryDelay?: number, interval?: number, keepHistory?: boolean, concatEmails?: boolean | MailTimeConcatEmailsOptions, concatSubject?: string, concatDelimiter?: string, concatDelay?: number, concatThrottling?: number, revolvingInterval?: number, mode?: 'one' | 'batch', concurrency?: number, sendingTimeout?: number, renewClaim?: boolean | number, maxRenewals?: number, strictPayload?: boolean, allowedMailFields?: string[], verifyTransports?: boolean, template?: string, prefix?: string, debug?: boolean, josk?: MailTimeJoSkOptions, onError?: (error: unknown, email: MailTimeTask | null, details?: object) => void, onSent?: (email: MailTimeTask, details?: object) => void }} MailTimeOptions
|
|
170
195
|
*/
|
|
171
196
|
/** Class of MailTime */
|
|
172
197
|
export class MailTime {
|
|
173
198
|
static set Template(newVal: string);
|
|
174
199
|
static get Template(): string;
|
|
200
|
+
/**
|
|
201
|
+
* @static
|
|
202
|
+
* @memberOf MailTime
|
|
203
|
+
* @name transportFrom
|
|
204
|
+
* @description Best-effort sender address for a transport. `nodemailer.createTransport()`
|
|
205
|
+
* only exposes `.options` for *plain-object* configs — for a class-instance transporter
|
|
206
|
+
* (anything with its own `.send()`) nodemailer's internal `Mail.options` is always `{}`,
|
|
207
|
+
* so `transport.options.from` silently reads `undefined`. This walks the places the
|
|
208
|
+
* address can actually live.
|
|
209
|
+
* @param {MailTimeTransport} transport
|
|
210
|
+
* @returns {string | undefined}
|
|
211
|
+
*/
|
|
212
|
+
static transportFrom(transport: MailTimeTransport): string | undefined;
|
|
175
213
|
/**
|
|
176
214
|
* Create a MailTime instance
|
|
177
215
|
* @param {MailTimeOptions} opts - configuration object
|
|
@@ -191,12 +229,17 @@ export class MailTime {
|
|
|
191
229
|
mode: "one" | "batch";
|
|
192
230
|
concurrency: number;
|
|
193
231
|
sendingTimeout: number;
|
|
232
|
+
renewClaim: number;
|
|
233
|
+
maxRenewals: number;
|
|
234
|
+
shouldFailOver: ((error: unknown, info: object | undefined, email: MailTimeTask) => boolean) | null;
|
|
235
|
+
strictPayload: boolean;
|
|
236
|
+
allowedMailFields: Set<string>;
|
|
194
237
|
failsToNext: number;
|
|
195
238
|
strategy: "backup" | "balancer";
|
|
196
239
|
transports: MailTimeTransport[];
|
|
197
240
|
transport: number;
|
|
198
241
|
verifyTransports: boolean;
|
|
199
|
-
from: boolean | ((transport: MailTimeTransport) => string);
|
|
242
|
+
from: boolean | ((transport: MailTimeTransport, details: MailTimeFromDetails) => string);
|
|
200
243
|
/** @type {string} */
|
|
201
244
|
concatSubject: string;
|
|
202
245
|
concatEmails: boolean;
|
|
@@ -208,6 +251,7 @@ export class MailTime {
|
|
|
208
251
|
debug?: boolean;
|
|
209
252
|
autoClear?: boolean;
|
|
210
253
|
zombieTime?: number;
|
|
254
|
+
lockLeaseTime?: number;
|
|
211
255
|
minRevolvingDelay?: number;
|
|
212
256
|
maxRevolvingDelay?: number;
|
|
213
257
|
execute?: "batch" | "one";
|
|
@@ -217,7 +261,8 @@ export class MailTime {
|
|
|
217
261
|
onError?: (title: string, details: object) => void;
|
|
218
262
|
onExecuted?: (uid: string, details: object) => void;
|
|
219
263
|
} | undefined;
|
|
220
|
-
|
|
264
|
+
/** @type {MailTimeScheduler | undefined} */
|
|
265
|
+
scheduler: MailTimeScheduler | undefined;
|
|
221
266
|
/**
|
|
222
267
|
* @async
|
|
223
268
|
* @memberOf MailTime
|
|
@@ -238,7 +283,7 @@ export class MailTime {
|
|
|
238
283
|
/**
|
|
239
284
|
* @memberOf MailTime
|
|
240
285
|
* @name destroy
|
|
241
|
-
* @description Stop the scheduler and block future dispatches. Pass `{ drain: true }` to
|
|
286
|
+
* @description Stop the scheduler and block future dispatches. Without `{ drain: true }`, any in-flight SMTP attempts are neutralized on completion — they perform no storage writes, no `onSent`/`onError` callbacks, and no logging once `destroy()` returns; their claimed rows are recovered by stale-lock timeout (`sendingTimeout`). Pass `{ drain: true }` to instead let in-flight attempts run to completion (returns a Promise that resolves once they settle).
|
|
242
287
|
* @param {{ drain?: boolean }} [opts]
|
|
243
288
|
* @returns {boolean | Promise<boolean>}
|
|
244
289
|
*/
|
|
@@ -253,6 +298,27 @@ export class MailTime {
|
|
|
253
298
|
* @returns {Promise<void>}
|
|
254
299
|
*/
|
|
255
300
|
drain(): Promise<void>;
|
|
301
|
+
/**
|
|
302
|
+
* @memberOf MailTime
|
|
303
|
+
* @name pause
|
|
304
|
+
* @description Pause this server instance from competing for the queue-drain lease. In-flight SMTP sends finish; peer server instances keep draining. Reversible (unlike `destroy()`). No-op on `client` instances or after `destroy()`. To stop scanning *and* wait for in-flight sends: `mailTime.pause(); await mailTime.drain();`.
|
|
305
|
+
* @returns {boolean} `true` if newly paused; `false` if already paused, a client instance, or destroyed
|
|
306
|
+
*/
|
|
307
|
+
pause(): boolean;
|
|
308
|
+
/**
|
|
309
|
+
* @memberOf MailTime
|
|
310
|
+
* @name resume
|
|
311
|
+
* @description Resume competing for the queue-drain lease after `pause()`; triggers an immediate scan. No-op on `client` instances, after `destroy()`, or when not paused.
|
|
312
|
+
* @returns {boolean} `true` if newly resumed; `false` if not paused, a client instance, or destroyed
|
|
313
|
+
*/
|
|
314
|
+
resume(): boolean;
|
|
315
|
+
/**
|
|
316
|
+
* @memberOf MailTime
|
|
317
|
+
* @name isPaused
|
|
318
|
+
* @description Whether this instance is currently paused from draining the queue. Always `false` on `client` instances.
|
|
319
|
+
* @returns {boolean}
|
|
320
|
+
*/
|
|
321
|
+
get isPaused(): boolean;
|
|
256
322
|
/**
|
|
257
323
|
* @memberOf MailTime
|
|
258
324
|
* @name send
|
|
@@ -270,7 +336,7 @@ export class MailTime {
|
|
|
270
336
|
* @returns {Promise<string>} uuid of the email
|
|
271
337
|
* @throws {Error}
|
|
272
338
|
*/
|
|
273
|
-
sendMail(opts
|
|
339
|
+
sendMail(opts: MailTimeMailOptions): Promise<string>;
|
|
274
340
|
/**
|
|
275
341
|
* @async
|
|
276
342
|
* @memberOf MailTime
|
|
@@ -296,5 +362,4 @@ import { PostgresQueue } from './adapters/postgres.js';
|
|
|
296
362
|
import { mailTimePreset } from './presets.js';
|
|
297
363
|
import { presets } from './presets.js';
|
|
298
364
|
import { presetNames } from './presets.js';
|
|
299
|
-
import { JoSk } from 'josk';
|
|
300
365
|
export { MongoQueue, RedisQueue, PostgresQueue, mailTimePreset, presets, presetNames };
|