@bumail/queue 0.7.0 → 0.7.2
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 +1 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +4 -4
- package/dist/queue/attempt.d.ts.map +1 -1
- package/dist/queue/fallback.d.ts +5 -1
- package/dist/queue/fallback.d.ts.map +1 -1
- package/docs/guide.md +7 -4
- package/docs/roadmap.md +4 -0
- package/docs/troubleshooting.md +2 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -126,7 +126,7 @@ deferred recipient.
|
|
|
126
126
|
|
|
127
127
|
With `fallback` (a smarthost), a recipient whose session by MX failed by a
|
|
128
128
|
connection failure, a timeout or a reputation refusal goes through that
|
|
129
|
-
smarthost at once (not after the final dot of `DATA`, where the MX may have taken the message:
|
|
129
|
+
smarthost at once (not after the final dot of `DATA`, where the MX may have taken the message: every recipient the MX did not refuse at `RCPT` is marked `mayHaveReachedMx` and never falls back on its own; a refused one may); see [Falling back to a smarthost](docs/guide.md#falling-back-to-a-smarthost).
|
|
130
130
|
|
|
131
131
|
## Several workers
|
|
132
132
|
|
package/dist/index.js
CHANGED
|
@@ -379,7 +379,7 @@ var GREYLIST = /gr[ae]y ?list/i;
|
|
|
379
379
|
function fallsBack(reply, error) {
|
|
380
380
|
if (!reply)
|
|
381
381
|
return false;
|
|
382
|
-
if (isSmtpError(error) && error.afterData)
|
|
382
|
+
if (isSmtpError(error) && error.afterData && !error.accepted)
|
|
383
383
|
return false;
|
|
384
384
|
if (isSmtpError(error) && error.code.startsWith("TLS_"))
|
|
385
385
|
return false;
|
|
@@ -446,6 +446,13 @@ var badAddress = (address) => ({
|
|
|
446
446
|
}
|
|
447
447
|
});
|
|
448
448
|
var marked = (u) => u.status === "delivered" ? u : { ...u, mayHaveReachedMx: true };
|
|
449
|
+
function doubtful(updates, error) {
|
|
450
|
+
if (!error.accepted)
|
|
451
|
+
return updates.map(marked);
|
|
452
|
+
const taken = new Set(error.accepted.map((r) => r.recipient));
|
|
453
|
+
const refused = new Set((error.rejected ?? []).map((r) => r.recipient).filter((a) => !taken.has(a)));
|
|
454
|
+
return updates.map((u) => refused.has(u.address) ? u : marked(u));
|
|
455
|
+
}
|
|
449
456
|
async function session(ctx, item, message, domain, group, route, override) {
|
|
450
457
|
const { settings } = ctx;
|
|
451
458
|
const max = settings.limits.maxReplyText;
|
|
@@ -458,7 +465,7 @@ async function session(ctx, item, message, domain, group, route, override) {
|
|
|
458
465
|
ctx.events.emit("error", { error, id: item.id });
|
|
459
466
|
const updates = outcomesOfError(error, group, max, hostOf(route));
|
|
460
467
|
const doubt = route === "mx" && isSmtpError(error) && error.afterData;
|
|
461
|
-
return { updates: doubt ? updates
|
|
468
|
+
return { updates: doubt ? doubtful(updates, error) : updates, error };
|
|
462
469
|
}
|
|
463
470
|
}
|
|
464
471
|
function merged(mx, fb) {
|
|
@@ -1238,5 +1245,5 @@ export {
|
|
|
1238
1245
|
createQueue
|
|
1239
1246
|
};
|
|
1240
1247
|
|
|
1241
|
-
//# debugId=
|
|
1248
|
+
//# debugId=14BF571A961D5A4C64756E2164756E21
|
|
1242
1249
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
"import { invalid } from '../../errors';\nimport type { QueueOptions } from '../options';\nimport { MAX_TIMER, numberOf } from './numbers';\n\n/** The longest wait `sendMail` takes, in seconds: its timer's own limit. */\nconst MAX_SECONDS = Math.floor(MAX_TIMER / 1000);\n\nfunction checkSeconds(name: string, value: unknown): void {\n\tif (value === undefined) return;\n\tif (\n\t\ttypeof value !== 'number' ||\n\t\t!Number.isFinite(value) ||\n\t\tvalue <= 0 ||\n\t\tvalue > MAX_SECONDS\n\t) {\n\t\tthrow invalid(\n\t\t\t`${name} must be a number of seconds above 0 and at most ${MAX_SECONDS}, not ${value}`,\n\t\t);\n\t}\n}\n\nexport function checkTls(name: string, tls: unknown): void {\n\tif (\n\t\ttls !== undefined &&\n\t\ttls !== 'opportunistic' &&\n\t\ttls !== 'required' &&\n\t\ttls !== 'none'\n\t) {\n\t\tthrow invalid(\n\t\t\t`${name} must be 'opportunistic', 'required' or 'none', not ${tls}`,\n\t\t);\n\t}\n}\n\n/** What every session takes, whatever its route: the MX port and TLS, the timeouts. */\nexport function checkSessions(options: QueueOptions): void {\n\tnumberOf('mxPort', options.mxPort, 25, 1, 65535);\n\tcheckTls('mxTls', options.mxTls);\n\tconst timeouts = options.timeouts;\n\tif (timeouts !== undefined) {\n\t\tif (typeof timeouts !== 'object' || timeouts === null) {\n\t\t\tthrow invalid('timeouts must be an object of seconds');\n\t\t}\n\t\tfor (const [step, value] of Object.entries(timeouts)) {\n\t\t\tcheckSeconds(`timeouts.${step}`, value);\n\t\t}\n\t}\n\tcheckSeconds('deadline', options.deadline);\n}\n",
|
|
12
12
|
"import { invalid } from '../../errors';\nimport type { QueueOptions, Route, Smarthost } from '../options';\nimport { numberOf } from './numbers';\nimport { checkTls } from './sessions';\n\n/**\n * A smarthost `sendMail` will take, checked now rather than at each\n * delivery: a host, a port, a TLS mode, and credentials only over TLS\n * whose certificate is checked — `sendMail`'s own rule\n * (`@bumail/smtp`'s `client/settings.ts`), with no way out for a test.\n */\nfunction checkRoute(name: string, route: Route): void {\n\tif (route === 'mx') return;\n\tconst smarthost = route as Smarthost | undefined;\n\tconst host = smarthost?.host;\n\tif (typeof host !== 'string' || !/^[^\\s/]+$/.test(host)) {\n\t\tthrow invalid(`${name} must be 'mx' or a smarthost with a host`);\n\t}\n\tconst { port, secure, tls, auth } = smarthost as Smarthost;\n\tnumberOf(`${name}.port`, port, 25, 1, 65535);\n\tif (secure !== undefined && typeof secure !== 'boolean') {\n\t\tthrow invalid(`${name}.secure must be true or false, not ${secure}`);\n\t}\n\tcheckTls(`${name}.tls`, tls);\n\tif (tls === 'none' && secure) {\n\t\tthrow invalid(\n\t\t\t`${name}.secure is TLS from the first byte: it cannot go with tls: 'none'`,\n\t\t);\n\t}\n\tif (auth === undefined) return;\n\tif (typeof auth?.username !== 'string' || auth.username === '') {\n\t\tthrow invalid(`${name}.auth.username must be a non-empty string`);\n\t}\n\tif (typeof auth.password !== 'string' || auth.password === '') {\n\t\tthrow invalid(`${name}.auth.password must be a non-empty string`);\n\t}\n\tconst { mechanism } = auth;\n\tif (\n\t\tmechanism !== undefined &&\n\t\tmechanism !== 'PLAIN' &&\n\t\tmechanism !== 'LOGIN'\n\t) {\n\t\tthrow invalid(\n\t\t\t`${name}.auth.mechanism must be 'PLAIN' or 'LOGIN', not ${mechanism}`,\n\t\t);\n\t}\n\tif (tls !== undefined && tls !== 'required') {\n\t\tthrow invalid(\n\t\t\t`${name}.auth needs tls: 'required', the default with auth: with tls: '${tls}' the password would go to a server whose certificate is not checked`,\n\t\t);\n\t}\n}\n\nexport function checkRoutes(options: QueueOptions): void {\n\tif (options.fallback !== undefined) {\n\t\tconst fallback = options.fallback as Route | null;\n\t\tif (\n\t\t\ttypeof fallback !== 'object' ||\n\t\t\tfallback === null ||\n\t\t\ttypeof fallback.host !== 'string'\n\t\t) {\n\t\t\tthrow invalid(\n\t\t\t\t'fallback must be a smarthost with a host, not an mx route',\n\t\t\t);\n\t\t}\n\t\tcheckRoute('fallback', fallback);\n\t}\n\tcheckRoute('route', options.route ?? 'mx');\n\tconst routes = Object.entries(options.routes ?? {});\n\tfor (const [domain, route] of routes)\n\t\tcheckRoute(`routes[\"${domain}\"]`, route);\n\tconst usesMx =\n\t\t(options.route ?? 'mx') === 'mx' || routes.some(([, r]) => r === 'mx');\n\tif (usesMx && typeof options.resolver?.mx !== 'function') {\n\t\tthrow invalid(\n\t\t\t\"The 'mx' route needs a resolver, such as @bumail/dns's nodeResolver()\",\n\t\t);\n\t}\n}\n",
|
|
13
13
|
"import { isMailbox } from '@bumail/smtp/client';\nimport type { QueueItem, RecipientUpdate } from '../contract/types';\nimport { QueueError } from '../errors';\nimport { attemptGroup, type Used } from './attempt';\nimport { domainOf } from './envelope';\nimport type { Events } from './events';\nimport type { Lapse } from './lease';\nimport type { KeyedLimiter } from './limiter';\nimport { type NotifyContext, notify } from './notify';\nimport { type Settled, settle } from './settle';\n\nexport interface DeliveryContext extends NotifyContext {\n\treadonly domains: KeyedLimiter;\n\treadonly events: Events;\n\t/** The worker is stopping: a group not started yet is left for later. */\n\treadonly stopping: () => boolean;\n\t/** The outcome is recorded: the lease needs no more renewal. */\n\treadonly recorded: () => void;\n\t/**\n\t * Whether the lease could have passed to another worker by `now`: a\n\t * renewal found it taken, or its last expiry is past. `undefined` while\n\t * it surely held.\n\t */\n\treadonly leaseLapsed: (now: number) => Promise<Lapse | undefined>;\n}\n\n/**\n * Said when the item is gone at `complete` and the lease had lapsed. With\n * no record of who removed it, neither case can tell another worker that\n * finished it from a cancel, so each names both; either way what this\n * worker sent may have been sent again, and it reports no outcome.\n */\nconst goneAfter = (lapse: Lapse, id: string): QueueError =>\n\tnew QueueError(\n\t\t'LEASE_LOST',\n\t\tlapse === 'taken'\n\t\t\t? `The lease on ${id} was lost while it was delivered, and the item is gone: finished by the worker that took it, the message then sent twice, or cancelled`\n\t\t\t: `The lease on ${id} expired before its outcome was recorded, and the item is gone: lost to another worker that finished it, the message then sent twice, or cancelled`,\n\t);\n\n/** The recipients still to deliver, by domain. */\nfunction groupsOf(item: QueueItem): Map<string, string[]> {\n\tconst groups = new Map<string, string[]>();\n\tfor (const r of item.recipients) {\n\t\tif (r.status === 'delivered' || r.status === 'failed') continue;\n\t\tconst domain = domainOf(r.address);\n\t\tconst group = groups.get(domain);\n\t\tif (group) group.push(r.address);\n\t\telse groups.set(domain, [r.address]);\n\t}\n\treturn groups;\n}\n\n/**\n * Every recipient of an item whose sender `sendMail` would refuse — kept\n * by a store written to by other code, since `enqueue` refuses it — fails\n * at once, as X.1.7 (bad sender's mailbox address syntax), rather than be\n * deferred on every attempt until `retry.giveUpAfter`.\n */\nconst badSender = (address: string): RecipientUpdate => ({\n\taddress,\n\tstatus: 'failed',\n\treply: {\n\t\tstatus: '5.1.7',\n\t\ttext: \"The sender's address is not one SMTP can carry\",\n\t},\n});\n\n/**\n * A pending recipient of an item whose message the store no longer gives\n * — a Redis key evicted or deleted, a row removed by hand — fails at once,\n * as X.3.0 (mail system status): no session can send what cannot be read,\n * and an attempt left without an outcome would be claimed again at every\n * lease, forever, keeping its `maxItems` place.\n */\nconst unreadable = (address: string): RecipientUpdate => ({\n\taddress,\n\tstatus: 'failed',\n\treply: {\n\t\tstatus: '5.3.0',\n\t\ttext: 'Message unreadable: the queue store holds the item but not its message',\n\t},\n});\n\nconst unreadableError = (id: string): QueueError =>\n\tnew QueueError(\n\t\t'MESSAGE_UNREADABLE',\n\t\t`The message of ${id} is unreadable: the store holds the item but not its message, so every pending recipient failed`,\n\t);\n\n/** Tells the listeners each recipient's outcome. */\nfunction emitOutcomes(\n\tevents: Events,\n\titem: QueueItem,\n\tsettled: Settled,\n\tused: ReadonlyMap<string, Used>,\n): void {\n\tconst { attempts, nextAttemptAt } = settled.result;\n\tconst base = (u: RecipientUpdate) => ({\n\t\tid: item.id,\n\t\tfrom: item.from,\n\t\trecipient: u.address,\n\t\t...(u.reply ? { reply: u.reply } : {}),\n\t\tattempts,\n\t\t...used.get(u.address),\n\t});\n\tconst marked = (u: RecipientUpdate) =>\n\t\tu.mayHaveReachedMx ? { mayHaveReachedMx: true as const } : {};\n\tfor (const u of settled.delivered) events.emit('delivered', base(u));\n\tfor (const u of settled.deferred) {\n\t\tevents.emit('deferred', { ...base(u), ...marked(u), nextAttemptAt });\n\t}\n\tfor (const u of settled.failed) {\n\t\tevents.emit('failed', { ...base(u), ...marked(u) });\n\t}\n}\n\n/**\n * Delivers a claimed item: one session per recipient domain, at most\n * `perDomain` at once to each — none, and no slot taken, when its sender\n * is one `sendMail` would refuse — then the outcome recorded — which lets go\n * of the lease — then the events and the DSNs. An item whose message the\n * store no longer gives fails every pending recipient, said on the `error`\n * event, its DSN without the original.\n */\nexport async function deliverItem(\n\tctx: DeliveryContext,\n\titem: QueueItem,\n): Promise<void> {\n\tconst { store } = ctx;\n\tconst message = await store.readMessage(item.id);\n\tif (!message) {\n\t\t// Gone with its message: cancelled, or finished by another worker.\n\t\tif ((await store.get(item.id)) === undefined) return;\n\t\tconst failed = [...groupsOf(item).values()].flat().map(unreadable);\n\t\tawait record(ctx, item, failed, false, undefined, new Map());\n\t\treturn;\n\t}\n\tconst groups = groupsOf(item);\n\tlet skipped = false;\n\tconst used = new Map<string, Used>();\n\t// A sender sendMail would refuse: no session, no slot, every recipient at once.\n\tconst outcomes =\n\t\titem.from !== '' && !isMailbox(item.from)\n\t\t\t? [[...groups.values()].flat().map(badSender)]\n\t\t\t: await Promise.all(\n\t\t\t\t\t[...groups].map(async ([domain, group]) => {\n\t\t\t\t\t\tconst release = await ctx.domains.acquire(domain);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (ctx.stopping()) {\n\t\t\t\t\t\t\t\tskipped = true;\n\t\t\t\t\t\t\t\treturn [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn await attemptGroup(\n\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\tdomain,\n\t\t\t\t\t\t\t\tgroup,\n\t\t\t\t\t\t\t\tused,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\trelease();\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t);\n\tawait record(ctx, item, outcomes.flat(), skipped, message, used);\n}\n\n/**\n * Records an attempt's outcomes — which lets go of the lease — then tells\n * the events and sends the DSNs, the original returned when there is one.\n * With no `message` (the store lost it), the `MESSAGE_UNREADABLE` error\n * comes first of the events, and only once the failures are recorded: a\n * lease lost meanwhile, or a `complete` that throws, says nothing of them,\n * and an item cancelled meanwhile tells nothing at all.\n */\nasync function record(\n\tctx: DeliveryContext,\n\titem: QueueItem,\n\tupdates: readonly RecipientUpdate[],\n\tskipped: boolean,\n\tmessage: Uint8Array | undefined,\n\tused: ReadonlyMap<string, Used>,\n): Promise<void> {\n\tconst { settings, store, events } = ctx;\n\tconst now = settings.now();\n\tconst settled = settle(item, updates, skipped, now, settings);\n\tconst after = await store.complete(item.id, settings.owner, settled.result);\n\tctx.recorded();\n\tif (!after && (await store.get(item.id)) === undefined) {\n\t\tconst lapse = await ctx.leaseLapsed(now);\n\t\tif (lapse) {\n\t\t\t// Lost or cancelled: no outcome told, as when the item is still there.\n\t\t\tevents.emit('error', { error: goneAfter(lapse, item.id), id: item.id });\n\t\t\treturn;\n\t\t}\n\t\t// Cancelled under a lease that held, with no session for a lost\n\t\t// message: nothing happened, and nothing was recorded, so nothing is told.\n\t\tif (!message) return;\n\t\t// Otherwise what the sessions did still happened; no DSN.\n\t\temitOutcomes(events, item, settled, used);\n\t\treturn;\n\t}\n\tif (!after) {\n\t\tconst error = new QueueError(\n\t\t\t'LEASE_LOST',\n\t\t\t`The lease on ${item.id} was lost before its outcome was recorded; another worker will try it again`,\n\t\t);\n\t\tevents.emit('error', { error, id: item.id });\n\t\treturn;\n\t}\n\tif (!message) {\n\t\tevents.emit('error', { error: unreadableError(item.id), id: item.id });\n\t}\n\temitOutcomes(events, item, settled, used);\n\tawait notify(ctx, item, message, 'failed', settled.failed, now);\n\tif (settled.delayDsn) {\n\t\tawait notify(ctx, item, message, 'delayed', settled.deferred, now);\n\t}\n}\n",
|
|
14
|
-
"import { isMailbox } from '@bumail/smtp/client';\nimport type { QueueItem, RecipientUpdate } from '../contract/types';\nimport type { DeliveryContext } from './deliver';\nimport type { RecipientEvent } from './events';\nimport { fallsBack } from './fallback';\nimport type { Route } from './options';\nimport {\n\tisRouteError,\n\tisSmtpError,\n\toutcomesOf,\n\toutcomesOfError,\n} from './outcome';\nimport { hostOf, routeOf, sendOptionsOf } from './route';\n\n/**\n * A recipient `sendMail` would refuse — kept by a store written to by\n * other code, since `enqueue` refuses it — fails alone, as X.1.3 (bad\n * destination mailbox address syntax), so the session for its domain\n * still goes ahead for the others.\n */\nconst badAddress = (address: string): RecipientUpdate => ({\n\taddress,\n\tstatus: 'failed',\n\treply: {\n\t\tstatus: '5.1.3',\n\t\ttext: 'The address is not one SMTP can carry',\n\t},\n});\n\n/** A deferred or failed outcome, marked: the MX may hold the message. */\nconst marked = (u: RecipientUpdate): RecipientUpdate =>\n\tu.status === 'delivered' ? u : { ...u, mayHaveReachedMx: true };\n\n/** The route a recipient's last session took, as its events tell it. */\nexport type Used = Pick<RecipientEvent, 'route' | 'fallback' | 'mxReply'>;\n\n/** One session's outcomes, and the error that ended it, if any. */\ninterface Attempt {\n\treadonly updates: RecipientUpdate[];\n\treadonly error?: unknown;\n}\n\n/** One session, by `route` (the domain's own when none is given): each recipient's outcome, whatever happened. */\nasync function session(\n\tctx: DeliveryContext,\n\titem: QueueItem,\n\tmessage: Uint8Array,\n\tdomain: string,\n\tgroup: readonly string[],\n\troute: Route,\n\toverride?: Route,\n): Promise<Attempt> {\n\tconst { settings } = ctx;\n\tconst max = settings.limits.maxReplyText;\n\ttry {\n\t\tconst options = sendOptionsOf(settings, domain, item.from, group, override);\n\t\tconst result = await settings.send(message, options);\n\t\treturn { updates: outcomesOf(result, group, max) };\n\t} catch (error) {\n\t\t// A route sendMail cannot use is the operator's to fix: said, and retried.\n\t\tif (isRouteError(error)) ctx.events.emit('error', { error, id: item.id });\n\t\tconst updates = outcomesOfError(error, group, max, hostOf(route));\n\t\t// The final dot was written and no reply came: the MX may hold a copy.\n\t\tconst doubt = route === 'mx' && isSmtpError(error) && error.afterData;\n\t\treturn { updates: doubt ? updates
|
|
14
|
+
"import { isMailbox } from '@bumail/smtp/client';\nimport type { QueueItem, RecipientUpdate } from '../contract/types';\nimport type { DeliveryContext } from './deliver';\nimport type { RecipientEvent } from './events';\nimport { fallsBack } from './fallback';\nimport type { Route } from './options';\nimport {\n\tisRouteError,\n\tisSmtpError,\n\toutcomesOf,\n\toutcomesOfError,\n} from './outcome';\nimport { hostOf, routeOf, sendOptionsOf } from './route';\n\n/**\n * A recipient `sendMail` would refuse — kept by a store written to by\n * other code, since `enqueue` refuses it — fails alone, as X.1.3 (bad\n * destination mailbox address syntax), so the session for its domain\n * still goes ahead for the others.\n */\nconst badAddress = (address: string): RecipientUpdate => ({\n\taddress,\n\tstatus: 'failed',\n\treply: {\n\t\tstatus: '5.1.3',\n\t\ttext: 'The address is not one SMTP can carry',\n\t},\n});\n\n/** A deferred or failed outcome, marked: the MX may hold the message. */\nconst marked = (u: RecipientUpdate): RecipientUpdate =>\n\tu.status === 'delivered' ? u : { ...u, mayHaveReachedMx: true };\n\n/**\n * The outcomes of a session that failed after the final dot, marked: the\n * MX may hold a copy for every recipient it did not refuse at RCPT. A\n * recipient it refused there never had one, and keeps its own outcome. An\n * error with no envelope (an older `@bumail/smtp`) leaves every recipient\n * in doubt.\n */\nfunction doubtful(\n\tupdates: RecipientUpdate[],\n\terror: {\n\t\treadonly accepted?: readonly { recipient: string }[];\n\t\treadonly rejected?: readonly { recipient: string }[];\n\t},\n): RecipientUpdate[] {\n\tif (!error.accepted) return updates.map(marked);\n\t// Only a refusal at RCPT proves there is no copy: any other recipient is in\n\t// doubt, one listed as both accepted and refused (a malformed envelope) too.\n\tconst taken = new Set(error.accepted.map((r) => r.recipient));\n\tconst refused = new Set(\n\t\t(error.rejected ?? []).map((r) => r.recipient).filter((a) => !taken.has(a)),\n\t);\n\treturn updates.map((u) => (refused.has(u.address) ? u : marked(u)));\n}\n\n/** The route a recipient's last session took, as its events tell it. */\nexport type Used = Pick<RecipientEvent, 'route' | 'fallback' | 'mxReply'>;\n\n/** One session's outcomes, and the error that ended it, if any. */\ninterface Attempt {\n\treadonly updates: RecipientUpdate[];\n\treadonly error?: unknown;\n}\n\n/** One session, by `route` (the domain's own when none is given): each recipient's outcome, whatever happened. */\nasync function session(\n\tctx: DeliveryContext,\n\titem: QueueItem,\n\tmessage: Uint8Array,\n\tdomain: string,\n\tgroup: readonly string[],\n\troute: Route,\n\toverride?: Route,\n): Promise<Attempt> {\n\tconst { settings } = ctx;\n\tconst max = settings.limits.maxReplyText;\n\ttry {\n\t\tconst options = sendOptionsOf(settings, domain, item.from, group, override);\n\t\tconst result = await settings.send(message, options);\n\t\treturn { updates: outcomesOf(result, group, max) };\n\t} catch (error) {\n\t\t// A route sendMail cannot use is the operator's to fix: said, and retried.\n\t\tif (isRouteError(error)) ctx.events.emit('error', { error, id: item.id });\n\t\tconst updates = outcomesOfError(error, group, max, hostOf(route));\n\t\t// The final dot was written and no reply came: the MX may hold a copy.\n\t\tconst doubt = route === 'mx' && isSmtpError(error) && error.afterData;\n\t\treturn { updates: doubt ? doubtful(updates, error) : updates, error };\n\t}\n}\n\n/**\n * What a recipient becomes once the fallback answered for its MX outcome.\n * The fallback decides when it delivered, or when the MX refused for good\n * (a `5.7.x`). A smarthost that refuses what the MX only deferred (a bad\n * password, a sender it does not allow) leaves the recipient deferred, with\n * the smarthost's reply as the diagnostic: no DSN, tried again later.\n */\nfunction merged(mx: RecipientUpdate, fb: RecipientUpdate): RecipientUpdate {\n\tif (mx.status === 'deferred' && fb.status === 'failed') {\n\t\treturn { ...fb, status: 'deferred' };\n\t}\n\treturn fb;\n}\n\n/**\n * One delivery for one domain's recipients: each one's outcome, whatever\n * happened, and in `used` the route each took. By MX with a `fallback`,\n * the recipients whose outcome is a connection failure, a timeout or a\n * reputation refusal (`fallsBack`) go at once to the fallback smarthost,\n * in a session of their own, and its outcome replaces the first (`merged`).\n */\nexport async function attemptGroup(\n\tctx: DeliveryContext,\n\titem: QueueItem,\n\tmessage: Uint8Array,\n\tdomain: string,\n\trecipients: readonly string[],\n\tused: Map<string, Used>,\n): Promise<RecipientUpdate[]> {\n\tconst { settings } = ctx;\n\tconst bad = recipients.filter((address) => !isMailbox(address));\n\tconst group = recipients.filter(isMailbox);\n\tif (group.length === 0) return bad.map(badAddress);\n\tconst route = routeOf(settings, domain);\n\tconst label = route === 'mx' ? 'mx' : 'smarthost';\n\tfor (const address of group) used.set(address, { route: label });\n\tconst first = await session(ctx, item, message, domain, group, route);\n\tlet updates = first.updates;\n\tconst { fallback } = settings.options;\n\t// Recorded by an earlier attempt: the MX may hold a copy, so no automatic fallback.\n\tconst doubtful = new Set(\n\t\titem.recipients.filter((r) => r.mayHaveReachedMx).map((r) => r.address),\n\t);\n\tif (fallback !== undefined && route === 'mx') {\n\t\tconst mx = new Map(\n\t\t\tupdates\n\t\t\t\t.filter(\n\t\t\t\t\t(u) =>\n\t\t\t\t\t\tu.status !== 'delivered' &&\n\t\t\t\t\t\t!u.mayHaveReachedMx &&\n\t\t\t\t\t\t!doubtful.has(u.address) &&\n\t\t\t\t\t\tfallsBack(u.reply, first.error),\n\t\t\t\t)\n\t\t\t\t.map((u) => [u.address, u]),\n\t\t);\n\t\tif (mx.size > 0) {\n\t\t\tconst again = [...mx.keys()];\n\t\t\tconst second = await session(\n\t\t\t\tctx,\n\t\t\t\titem,\n\t\t\t\tmessage,\n\t\t\t\tdomain,\n\t\t\t\tagain,\n\t\t\t\tfallback,\n\t\t\t\tfallback,\n\t\t\t);\n\t\t\tfor (const [address, u] of mx) {\n\t\t\t\tused.set(address, {\n\t\t\t\t\troute: 'smarthost',\n\t\t\t\t\tfallback: true,\n\t\t\t\t\t...(u.reply ? { mxReply: u.reply } : {}),\n\t\t\t\t});\n\t\t\t}\n\t\t\tupdates = [\n\t\t\t\t...updates.filter((u) => !mx.has(u.address)),\n\t\t\t\t...second.updates.map((u) => {\n\t\t\t\t\tconst was = mx.get(u.address);\n\t\t\t\t\treturn was ? merged(was, u) : u;\n\t\t\t\t}),\n\t\t\t];\n\t\t}\n\t}\n\treturn [...updates, ...bad.map(badAddress)];\n}\n",
|
|
15
15
|
"import type {\n\tReply,\n\tSendMailResult,\n\tSmtpError,\n\tSmtpErrorCode,\n} from '@bumail/smtp/client';\nimport type { Diagnostic, RecipientUpdate } from '../contract/types';\nimport { cleanText } from '../text';\n\n/**\n * An `SmtpError`, read by its `name`: a second copy of `@bumail/smtp` (a\n * different version installed for the app) throws errors of another\n * class, which `instanceof` would take for unknown ones.\n */\nexport const isSmtpError = (error: unknown): error is SmtpError =>\n\terror instanceof Error &&\n\terror.name === 'SmtpError' &&\n\ttypeof (error as { code?: unknown }).code === 'string';\n\n/**\n * `sendMail` refused its options: the route is misconfigured (a smarthost\n * it cannot use, a bad timeout), not the recipient. Retried, never bounced\n * at once: fixing the configuration and restarting delivers the message.\n */\nexport const isRouteError = (error: unknown): boolean =>\n\tisSmtpError(error) && error.code === 'INVALID_OPTION';\n\n/** An enhanced status code, `x.y.z` (RFC 3463 §2). */\nconst STATUS = /^[245]\\.\\d{1,3}\\.\\d{1,3}$/;\n\n/** What a reply says, bounded and cleaned. */\nexport function diagnosticOf(\n\treply: Reply,\n\tmax: number,\n\thost?: string,\n): Diagnostic {\n\tconst text =\n\t\ttypeof reply.text === 'string' ? reply.text : reply.text.join(' ');\n\treturn {\n\t\tcode: reply.code,\n\t\t...(reply.status && STATUS.test(reply.status)\n\t\t\t? { status: reply.status }\n\t\t\t: {}),\n\t\ttext: cleanText(text, max),\n\t\t...(host ? { host: cleanText(host, 255) } : {}),\n\t};\n}\n\n/**\n * The status code an error with no reply stands for (RFC 3463 §3): a null\n * MX is X.1.10 (RFC 7505 §4.2), a domain that cannot be found X.1.2, a\n * host that does not answer X.4.1, a connection lost or timed out X.4.2,\n * TLS X.7.0 (security).\n */\nconst ERROR_STATUS: Partial<Record<SmtpErrorCode, string>> = {\n\tNULL_MX: '1.10',\n\tDNS_FAILED: '1.2',\n\tCONNECTION_FAILED: '4.1',\n\tCONNECTION_LOST: '4.2',\n\tTIMEOUT: '4.2',\n\tTLS_UNAVAILABLE: '7.10',\n\tTLS_FAILED: '7.0',\n\tAUTH_UNAVAILABLE: '7.0',\n\tINVALID_OPTION: '3.5',\n};\n\n/**\n * A failure that never got a reply. Whether the MX may nonetheless hold a\n * copy (`SmtpError.afterData`) is not said here: `attemptGroup` marks the\n * outcomes `mayHaveReachedMx` from the error.\n */\nfunction diagnosticOfError(\n\terror: unknown,\n\ttemporary: boolean,\n\tmax: number,\n\thost?: string,\n): Diagnostic {\n\tconst text = error instanceof Error ? error.message : String(error);\n\tconst detail = isSmtpError(error)\n\t\t? (ERROR_STATUS[error.code] ?? '0.0')\n\t\t: '0.0';\n\treturn {\n\t\tstatus: `${temporary ? 4 : 5}.${detail}`,\n\t\ttext: cleanText(text, max),\n\t\t...(host ? { host: cleanText(host, 255) } : {}),\n\t};\n}\n\n/** Each recipient of a delivery `sendMail` resolved: taken, or refused one by one. */\nexport function outcomesOf(\n\tresult: SendMailResult,\n\tgroup: readonly string[],\n\tmax: number,\n): RecipientUpdate[] {\n\tconst host = result.host;\n\tconst updates = new Map<string, RecipientUpdate>();\n\tfor (const { recipient } of result.accepted) {\n\t\tupdates.set(recipient, {\n\t\t\taddress: recipient,\n\t\t\tstatus: 'delivered',\n\t\t\treply: diagnosticOf(result.reply, max, host),\n\t\t});\n\t}\n\tfor (const { recipient, reply } of result.rejected) {\n\t\tupdates.set(recipient, {\n\t\t\taddress: recipient,\n\t\t\tstatus: reply.code >= 500 ? 'failed' : 'deferred',\n\t\t\treply: diagnosticOf(reply, max, host),\n\t\t});\n\t}\n\t// sendMail names every recipient it was given; a fake may not.\n\treturn group.map(\n\t\t(address) =>\n\t\t\tupdates.get(address) ?? {\n\t\t\t\taddress,\n\t\t\t\tstatus: 'deferred',\n\t\t\t\treply: {\n\t\t\t\t\ttext: 'The delivery said nothing of this recipient',\n\t\t\t\t\t...(host ? { host: cleanText(host, 255) } : {}),\n\t\t\t\t},\n\t\t\t},\n\t);\n}\n\n/**\n * Each recipient of a delivery `sendMail` rejected: by its own reply when\n * the server refused every one, else all alike — deferred when the error\n * is temporary (a 4xx, the network, a timeout) or the route's own\n * (`INVALID_OPTION`, X.3.5), failed otherwise.\n */\nexport function outcomesOfError(\n\terror: unknown,\n\tgroup: readonly string[],\n\tmax: number,\n\thost?: string,\n): RecipientUpdate[] {\n\tconst rejected = new Map(\n\t\tisSmtpError(error)\n\t\t\t? (error.rejected ?? []).map((r) => [r.recipient, r.reply])\n\t\t\t: [],\n\t);\n\tconst temporary =\n\t\t!isSmtpError(error) || error.temporary || isRouteError(error);\n\treturn group.map((address): RecipientUpdate => {\n\t\tconst own = rejected.get(address);\n\t\tif (own) {\n\t\t\treturn {\n\t\t\t\taddress,\n\t\t\t\tstatus: own.code >= 500 ? 'failed' : 'deferred',\n\t\t\t\treply: diagnosticOf(own, max, host),\n\t\t\t};\n\t\t}\n\t\tconst reply =\n\t\t\tisSmtpError(error) && error.reply\n\t\t\t\t? diagnosticOf(error.reply, max, host)\n\t\t\t\t: diagnosticOfError(error, temporary, max, host);\n\t\treturn { address, status: temporary ? 'deferred' : 'failed', reply };\n\t});\n}\n",
|
|
16
|
-
"import type { Diagnostic } from '../contract/types';\nimport { isSmtpError } from './outcome';\n\n/** Words a refusal uses when it names a blocklist or a reputation, for a server that gives no enhanced code. */\nconst REPUTATION =\n\t/\\b(?:block ?list(?:ed)?|black ?list(?:ed)?|deny ?list(?:ed)?|spamhaus|rbl|dnsbl|reputation|banned)\\b|\\bblocked\\b|\\blisted (?:in|on|at)\\b/i;\n\n/** A greylisting: a `4.7.x` that asks to come back, which a smarthost would not change. */\nconst GREYLIST = /gr[ae]y ?list/i;\n\n/**\n * Whether what the other side said (or why nobody said anything) is a\n * reason to try the fallback smarthost rather than wait: a connection\n * that failed or timed out (X.4.1, X.4.2, no reply at all), or a refusal\n * read as a matter of policy or reputation, a `4.7.x` or `5.7.x` (RFC\n * 3463 §3.8, security or policy status) or, with no enhanced code, text\n * that names a blocklist or a reputation.\n *\n * It is not a reason when the message may already be at the MX: an\n * `SmtpError` marked `afterData` (the final dot was written and no reply\n * came, a timeout or a lost connection that reads as 4.4.2) would be one\n * more copy by the smarthost, so the recipient is deferred for the MX retry\n * (RFC 5321 §4.1.5) and marked `mayHaveReachedMx`, which keeps every later\n * attempt from falling back on its own (`attemptGroup`). An `@bumail/smtp` without the field behaves as before.\n *\n * It is not a reason when the smarthost would be refused alike: an\n * unknown or full mailbox (`5.1.x`, `x.2.x`), a domain that does not\n * exist, a null MX, a route that is misconfigured, or a TLS failure of\n * the MX (an `SmtpError` coded `TLS_*`, even one that carries a reply such\n * as a refused STARTTLS `454 4.7.0`), which the operator's TLS policy meant\n * to refuse, or a greylisting (`4.7.x` whose text says so), which the MX\n * retry settles.\n */\nexport function fallsBack(\n\treply: Diagnostic | undefined,\n\terror?: unknown,\n): boolean {\n\tif (!reply) return false;\n\tif (isSmtpError(error) && error.afterData) return false;\n\tif (isSmtpError(error) && error.code.startsWith('TLS_')) return false;\n\tif (GREYLIST.test(reply.text)) return false;\n\tif (reply.code === undefined) {\n\t\treturn reply.status === '4.4.1' || reply.status === '4.4.2';\n\t}\n\tif (reply.code < 400) return false;\n\tif (reply.status !== undefined) {\n\t\treturn /^[45]\\.7\\.\\d+$/.test(reply.status);\n\t}\n\treturn REPUTATION.test(reply.text);\n}\n",
|
|
16
|
+
"import type { Diagnostic } from '../contract/types';\nimport { isSmtpError } from './outcome';\n\n/** Words a refusal uses when it names a blocklist or a reputation, for a server that gives no enhanced code. */\nconst REPUTATION =\n\t/\\b(?:block ?list(?:ed)?|black ?list(?:ed)?|deny ?list(?:ed)?|spamhaus|rbl|dnsbl|reputation|banned)\\b|\\bblocked\\b|\\blisted (?:in|on|at)\\b/i;\n\n/** A greylisting: a `4.7.x` that asks to come back, which a smarthost would not change. */\nconst GREYLIST = /gr[ae]y ?list/i;\n\n/**\n * Whether what the other side said (or why nobody said anything) is a\n * reason to try the fallback smarthost rather than wait: a connection\n * that failed or timed out (X.4.1, X.4.2, no reply at all), or a refusal\n * read as a matter of policy or reputation, a `4.7.x` or `5.7.x` (RFC\n * 3463 §3.8, security or policy status) or, with no enhanced code, text\n * that names a blocklist or a reputation.\n *\n * It is not a reason when the message may already be at the MX: an\n * `SmtpError` marked `afterData` (the final dot was written and no reply\n * came, a timeout or a lost connection that reads as 4.4.2) would be one\n * more copy by the smarthost, so the recipient is deferred for the MX retry\n * (RFC 5321 §4.1.5) and marked `mayHaveReachedMx`, which keeps every later\n * attempt from falling back on its own (`attemptGroup`). When the error\n * carries the envelope (`accepted`, `rejected`), the caller has marked\n * every recipient the MX did not refuse at `RCPT`; a refused one is judged\n * by its own `RCPT` reply, as before `DATA`. An `@bumail/smtp` without the\n * field behaves as before.\n *\n * It is not a reason when the smarthost would be refused alike: an\n * unknown or full mailbox (`5.1.x`, `x.2.x`), a domain that does not\n * exist, a null MX, a route that is misconfigured, or a TLS failure of\n * the MX (an `SmtpError` coded `TLS_*`, even one that carries a reply such\n * as a refused STARTTLS `454 4.7.0`), which the operator's TLS policy meant\n * to refuse, or a greylisting (`4.7.x` whose text says so), which the MX\n * retry settles.\n */\nexport function fallsBack(\n\treply: Diagnostic | undefined,\n\terror?: unknown,\n): boolean {\n\tif (!reply) return false;\n\tif (isSmtpError(error) && error.afterData && !error.accepted) return false;\n\tif (isSmtpError(error) && error.code.startsWith('TLS_')) return false;\n\tif (GREYLIST.test(reply.text)) return false;\n\tif (reply.code === undefined) {\n\t\treturn reply.status === '4.4.1' || reply.status === '4.4.2';\n\t}\n\tif (reply.code < 400) return false;\n\tif (reply.status !== undefined) {\n\t\treturn /^[45]\\.7\\.\\d+$/.test(reply.status);\n\t}\n\treturn REPUTATION.test(reply.text);\n}\n",
|
|
17
17
|
"import type { SendMailOptions } from '@bumail/smtp/client';\nimport type { Route } from './options';\nimport type { Settings } from './settings';\n\n/** The route for a recipient domain: its own, else the default. */\nexport function routeOf(settings: Settings, domain: string): Route {\n\treturn settings.routes.get(domain) ?? settings.options.route ?? 'mx';\n}\n\n/** The host an attempt goes to, as far as the route says: the smarthost, or nothing for MX. */\nexport function hostOf(route: Route): string | undefined {\n\treturn route === 'mx' ? undefined : route.host;\n}\n\n/** What `sendMail` takes to send one domain's recipients of a message. */\nexport function sendOptionsOf(\n\tsettings: Settings,\n\tdomain: string,\n\tfrom: string,\n\tto: readonly string[],\n\toverride?: Route,\n): SendMailOptions {\n\tconst { options, hostname } = settings;\n\tconst common = {\n\t\tfrom,\n\t\tto,\n\t\thelo: hostname,\n\t\t...(options.timeouts ? { timeouts: options.timeouts } : {}),\n\t\t...(options.deadline !== undefined ? { deadline: options.deadline } : {}),\n\t};\n\tconst route = override ?? routeOf(settings, domain);\n\tif (route === 'mx') {\n\t\tconst resolver = options.resolver;\n\t\tif (!resolver) throw new Error('unreachable: settings check the resolver');\n\t\treturn {\n\t\t\t...common,\n\t\t\tdomain,\n\t\t\tresolver,\n\t\t\t...(options.mxPort !== undefined ? { port: options.mxPort } : {}),\n\t\t\t...(options.mxTls ? { tls: options.mxTls } : {}),\n\t\t};\n\t}\n\treturn {\n\t\t...common,\n\t\thost: route.host,\n\t\t...(route.port !== undefined ? { port: route.port } : {}),\n\t\t...(route.secure !== undefined ? { secure: route.secure } : {}),\n\t\t...(route.tls ? { tls: route.tls } : {}),\n\t\t...(route.auth ? { auth: route.auth } : {}),\n\t\t...(route.ca ? { ca: route.ca } : {}),\n\t};\n}\n",
|
|
18
18
|
"import {\n\tencodeHeaderValue,\n\tencodeQuotedPrintable,\n\tfoldHeader,\n\tformatDate,\n} from '@bumail/mime';\nimport { cleanText, replaceControls } from '../text';\nimport { returned } from './content';\nimport {\n\ttype DsnKind,\n\ttype DsnRecipient,\n\tdeliveryStatus,\n\tstatusOf,\n} from './fields';\n\nexport type { DsnKind, DsnRecipient } from './fields';\n\n/** What a DSN says, about which message, to whom. */\nexport interface DsnInput {\n\treadonly kind: DsnKind;\n\t/** This server's public name: the Reporting-MTA, and the Message-ID's domain. */\n\treadonly reportingMta: string;\n\t/** The DSN's From: the postmaster's address. */\n\treadonly from: string;\n\t/** The original's sender, to whom the DSN goes. */\n\treadonly to: string;\n\t/** When the original was enqueued. */\n\treadonly arrival: Date;\n\t/** When the DSN is written. */\n\treadonly date: Date;\n\treadonly recipients: readonly DsnRecipient[];\n\t/** With `delayed`: when the queue gives up. */\n\treadonly willRetryUntil?: Date;\n\t/**\n\t * The original message, as enqueued; absent when it could not be read,\n\t * and the DSN then has no third part (RFC 6522 §3 makes it optional).\n\t */\n\treadonly original?: Uint8Array;\n\treadonly returnContent: 'headers' | 'full';\n\t/** The most bytes of the original returned. */\n\treadonly maxReturn: number;\n}\n\nconst encoder = new TextEncoder();\nconst strip = (text: string) =>\n\treplaceControls(text, '').replace(/[\\s<>]/g, '');\n\n/** The text a person reads first: what happened, to whom, and why (RFC 3464 §2's first part). */\nfunction humanText(input: DsnInput): string {\n\tconst failed = input.kind === 'failed';\n\tconst lines = failed\n\t\t? [\n\t\t\t\t`This is the mail system at ${input.reportingMta}.`,\n\t\t\t\t'',\n\t\t\t\t'Your message could not be delivered to the recipients below.',\n\t\t\t\t'This is a permanent failure: the message will not be retried.',\n\t\t\t]\n\t\t: [\n\t\t\t\t`This is the mail system at ${input.reportingMta}.`,\n\t\t\t\t'',\n\t\t\t\t'Your message has not been delivered yet to the recipients below.',\n\t\t\t\t'This is a warning only: the message is still being retried',\n\t\t\t\t...(input.willRetryUntil\n\t\t\t\t\t? [`until ${formatDate(input.willRetryUntil)}.`]\n\t\t\t\t\t: []),\n\t\t\t\t'You do not need to send it again.',\n\t\t\t];\n\tif (!input.original) {\n\t\tlines.push(\n\t\t\t'',\n\t\t\t'Your message could not be read from the queue, so it is not returned.',\n\t\t);\n\t}\n\tlines.push('');\n\tfor (const r of input.recipients) {\n\t\tconst said = r.reply\n\t\t\t? `${r.reply.code ?? ''} ${cleanText(r.reply.text, 900)}`.trim()\n\t\t\t: statusOf(input.kind);\n\t\tconst why =\n\t\t\tr.reply?.status === '4.4.7'\n\t\t\t\t? `delivery time expired, still failing: ${said}`\n\t\t\t\t: said;\n\t\tlines.push(`<${cleanText(r.address, 254)}>: ${why}`);\n\t}\n\treturn `${lines.join('\\r\\n')}\\r\\n`;\n}\n\n/** The header fields of the DSN, every value cleaned and folded. */\nfunction headerFields(input: DsnInput, boundary: string): string[] {\n\tconst subject =\n\t\tinput.kind === 'failed'\n\t\t\t? 'Undelivered Mail Returned to Sender'\n\t\t\t: 'Delayed Mail (still being retried)';\n\tconst domain = strip(input.reportingMta);\n\treturn [\n\t\tfoldHeader('Date', formatDate(input.date)),\n\t\tfoldHeader('From', `Mail Delivery System <${strip(input.from)}>`),\n\t\tfoldHeader('To', `<${strip(input.to)}>`),\n\t\tfoldHeader('Subject', encodeHeaderValue(subject)),\n\t\tfoldHeader('Message-ID', `<${crypto.randomUUID()}@${domain}>`),\n\t\t// RFC 3834 §5: an automatic answer, which no one answers automatically.\n\t\tfoldHeader('Auto-Submitted', 'auto-replied'),\n\t\tfoldHeader('MIME-Version', '1.0'),\n\t\tfoldHeader(\n\t\t\t'Content-Type',\n\t\t\t`multipart/report; report-type=delivery-status; boundary=\"${boundary}\"`,\n\t\t),\n\t];\n}\n\nconst concat = (parts: readonly Uint8Array[]): Uint8Array => {\n\tconst out = new Uint8Array(parts.reduce((n, p) => n + p.length, 0));\n\tlet at = 0;\n\tfor (const part of parts) {\n\t\tout.set(part, at);\n\t\tat += part.length;\n\t}\n\treturn out;\n};\n\n/** A boundary that occurs nowhere in what it separates. */\nfunction boundaryFor(content: Uint8Array): string {\n\tconst text = new TextDecoder('latin1').decode(content);\n\tfor (;;) {\n\t\tconst boundary = `=_dsn_${crypto.randomUUID()}`;\n\t\tif (!text.includes(boundary)) return boundary;\n\t}\n}\n\n/**\n * A delivery status notification (RFC 3464): a `multipart/report`\n * (RFC 6522) of `report-type=delivery-status` holding the text a person\n * reads, the `message/delivery-status` fields a program reads, and the\n * original's header fields (or the whole original, when asked and small\n * enough), bounded by `maxReturn` — or, with no `original`, no third\n * part at all. Nothing from the remote server or the\n * envelope reaches a header field raw: control characters, CR and LF are\n * taken out first.\n */\nexport function buildDsn(input: DsnInput): Uint8Array {\n\tconst original = input.original\n\t\t? returned(input.original, input.returnContent, input.maxReturn)\n\t\t: undefined;\n\tconst boundary = boundaryFor(original?.body ?? new Uint8Array());\n\tconst text = encodeQuotedPrintable(humanText(input));\n\tconst status = deliveryStatus({\n\t\tkind: input.kind,\n\t\treportingMta: input.reportingMta,\n\t\tarrival: input.arrival,\n\t\trecipients: input.recipients,\n\t\t...(input.willRetryUntil ? { willRetryUntil: input.willRetryUntil } : {}),\n\t});\n\tconst parts = [\n\t\t...headerFields(input, boundary),\n\t\t'',\n\t\t'This is a MIME-formatted delivery status notification.',\n\t\t'',\n\t\t`--${boundary}`,\n\t\t'Content-Type: text/plain; charset=utf-8',\n\t\t'Content-Transfer-Encoding: quoted-printable',\n\t\t'',\n\t\ttext,\n\t\t`--${boundary}`,\n\t\t'Content-Type: message/delivery-status',\n\t\t'',\n\t\tstatus,\n\t];\n\tconst end = `--${boundary}--\\r\\n`;\n\tif (!original) return encoder.encode(`${parts.join('\\r\\n')}\\r\\n${end}`);\n\tconst head = [\n\t\t...parts,\n\t\t`--${boundary}`,\n\t\t`Content-Type: ${original.type}`,\n\t\t...(original.eightBit ? ['Content-Transfer-Encoding: 8bit'] : []),\n\t\t'',\n\t\t'',\n\t].join('\\r\\n');\n\treturn concat([\n\t\tencoder.encode(head),\n\t\toriginal.body,\n\t\tencoder.encode(`\\r\\n${end}`),\n\t]);\n}\n",
|
|
19
19
|
"/** The part of a DSN that returns the original message (RFC 3464 §2, RFC 6522 §3). */\n\nconst CR = 13;\nconst LF = 10;\n\n/** RFC 5322 §2.1.1: a line is at most 998 characters, its CRLF aside. */\nexport const MAX_LINE = 998;\n\nconst isContinuation = (byte: number | undefined) =>\n\tbyte !== undefined && byte >= 0x80 && byte < 0xc0;\n\n/**\n * Every bare CR or LF as CRLF, and every line cut at 998 bytes, never in\n * the middle of a UTF-8 character: a DSN is sent as lines, whatever the\n * original held, and a longer one would get the DSN itself refused.\n */\nfunction crlf(bytes: Uint8Array): Uint8Array {\n\tconst out: number[] = [];\n\tlet column = 0;\n\tfor (let i = 0; i < bytes.length; i++) {\n\t\tconst byte = bytes[i] as number;\n\t\tif (byte === CR || byte === LF) {\n\t\t\tout.push(CR, LF);\n\t\t\tcolumn = 0;\n\t\t\tif (byte === CR && bytes[i + 1] === LF) i++;\n\t\t} else if (column < MAX_LINE) {\n\t\t\tout.push(byte);\n\t\t\tcolumn++;\n\t\t} else if (column === MAX_LINE) {\n\t\t\t// The first byte cut: drop a character it would leave half written.\n\t\t\tif (isContinuation(byte)) {\n\t\t\t\twhile (isContinuation(out.at(-1))) {\n\t\t\t\t\tout.pop();\n\t\t\t\t}\n\t\t\t\tif ((out.at(-1) ?? 0) >= 0xc0) out.pop();\n\t\t\t}\n\t\t\tcolumn++;\n\t\t}\n\t}\n\treturn Uint8Array.from(out);\n}\n\n/** Where the header block ends: past the blank line, or the whole message when it has none. */\nfunction headerEnd(bytes: Uint8Array): number {\n\tfor (let i = 0; i + 3 < bytes.length; i++) {\n\t\tif (\n\t\t\tbytes[i] === CR &&\n\t\t\tbytes[i + 1] === LF &&\n\t\t\tbytes[i + 2] === CR &&\n\t\t\tbytes[i + 3] === LF\n\t\t) {\n\t\t\treturn i + 2;\n\t\t}\n\t}\n\treturn bytes.length;\n}\n\n/** The first `max` bytes at most, cut after the last whole line. */\nfunction wholeLines(bytes: Uint8Array, max: number): Uint8Array {\n\tif (bytes.length <= max) return bytes;\n\tconst cut = bytes.subarray(0, max).lastIndexOf(LF);\n\treturn bytes.subarray(0, cut + 1);\n}\n\nexport interface Returned {\n\t/** `text/rfc822-headers` or `message/rfc822`. */\n\treadonly type: string;\n\t/** Lines ending in CRLF, the last one included. */\n\treadonly body: Uint8Array;\n\t/** It holds a byte past ASCII: the part says `8bit`. */\n\treadonly eightBit: boolean;\n}\n\n/**\n * The original as a DSN returns it: the whole message when asked and it\n * fits `max` bytes, else its header fields, cut after the last whole line\n * that fits. Never more than `max` bytes.\n */\nexport function returned(\n\toriginal: Uint8Array,\n\tmode: 'headers' | 'full',\n\tmax: number,\n): Returned {\n\tconst message = crlf(original.subarray(0, max * 2 + 2));\n\tconst whole = original.length <= max && message.length <= max;\n\tconst body =\n\t\twhole && mode === 'full'\n\t\t\t? message\n\t\t\t: wholeLines(message.subarray(0, headerEnd(message)), max);\n\treturn {\n\t\ttype: whole && mode === 'full' ? 'message/rfc822' : 'text/rfc822-headers',\n\t\tbody,\n\t\teightBit: body.some((byte) => byte > 0x7f),\n\t};\n}\n",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"import type { QueueItem } from '../contract/types';\nimport { deliverItem } from './deliver';\nimport { type LeaseState, lapsed, leaseOf, renew, settled } from './lease';\nimport { KeyedLimiter, Limiter } from './limiter';\nimport type { NotifyContext } from './notify';\n\n/**\n * Claims due items and delivers them, at most `concurrency` at once,\n * renewing each lease while its item is delivered. `start()` runs passes\n * every `pollInterval`, or at once when woken; `stop()` lets every\n * delivery under way finish and gives back what it had not started.\n */\nexport class Worker {\n\treadonly #ctx: NotifyContext;\n\treadonly #slots: Limiter;\n\treadonly #domains: KeyedLimiter;\n\treadonly #inFlight = new Set<Promise<void>>();\n\t#stopping = false;\n\t/** `start()` was called while a `stop()` was under way: start again once it ends. */\n\t#restart = false;\n\t#loop: Promise<void> | undefined;\n\t#wake: (() => void) | undefined;\n\t/** A wake came while no sleep was under way: the next sleep is skipped. */\n\t#woken = false;\n\n\tconstructor(ctx: NotifyContext) {\n\t\tthis.#ctx = ctx;\n\t\tthis.#slots = new Limiter(ctx.settings.concurrency);\n\t\tthis.#domains = new KeyedLimiter(ctx.settings.perDomain);\n\t}\n\n\t/** Renews the lease every third of it until the outcome is recorded, or a renewal ends them. */\n\t#renewing(lease: LeaseState): () => void {\n\t\tconst timer = setInterval(() => {\n\t\t\tvoid renew(this.#ctx, lease).then((more) => {\n\t\t\t\tif (!more) clearInterval(timer);\n\t\t\t});\n\t\t}, this.#ctx.settings.leaseMs / 3);\n\t\ttimer.unref?.();\n\t\treturn () => {\n\t\t\tlease.done = true;\n\t\t\tclearInterval(timer);\n\t\t};\n\t}\n\n\tasync #deliver(item: QueueItem): Promise<void> {\n\t\tconst lease = leaseOf(this.#ctx, item);\n\t\tconst stop = this.#renewing(lease);\n\t\ttry {\n\t\t\tawait deliverItem(\n\t\t\t\t{\n\t\t\t\t\t...this.#ctx,\n\t\t\t\t\tdomains: this.#domains,\n\t\t\t\t\tstopping: () => this.#stopping,\n\t\t\t\t\trecorded: stop,\n\t\t\t\t\tleaseLapsed: (now) => lapsed(lease, now),\n\t\t\t\t},\n\t\t\t\titem,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthis.#ctx.events.emit('error', { error, id: item.id });\n\t\t} finally {\n\t\t\tstop();\n\t\t\t// A refused renewal's look at the item ends with the delivery.\n\t\t\tawait settled(lease);\n\t\t}\n\t}\n\n\t/** The next due item, or `undefined` when nothing is, or the worker is stopping. */\n\t#claim(): Promise<QueueItem | undefined> {\n\t\tconst { settings, store } = this.#ctx;\n\t\tif (this.#stopping) return Promise.resolve(undefined);\n\t\treturn store.claim({\n\t\t\towner: settings.owner,\n\t\t\tnow: settings.now(),\n\t\t\tleaseMs: settings.leaseMs,\n\t\t});\n\t}\n\n\t/**\n\t * One pass: claims and delivers every item due, `concurrency` at a time,\n\t * claiming again as each one ends — so a DSN enqueued meanwhile goes in\n\t * the same pass. Resolves once all are done, with how many it claimed.\n\t */\n\tasync deliverDue(): Promise<number> {\n\t\tconst mine = new Set<Promise<void>>();\n\t\tlet claimed = 0;\n\t\twhile (!this.#stopping) {\n\t\t\tconst release = await this.#slots.acquire();\n\t\t\tlet item: QueueItem | undefined;\n\t\t\ttry {\n\t\t\t\titem = await this.#claim();\n\t\t\t} catch (error) {\n\t\t\t\trelease();\n\t\t\t\tawait Promise.all(mine);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tif (!item) {\n\t\t\t\trelease();\n\t\t\t\tif (mine.size === 0) break;\n\t\t\t\tawait Promise.race(mine);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tclaimed++;\n\t\t\tconst delivery: Promise<void> = this.#deliver(item).finally(() => {\n\t\t\t\trelease();\n\t\t\t\tmine.delete(delivery);\n\t\t\t\tthis.#inFlight.delete(delivery);\n\t\t\t});\n\t\t\tmine.add(delivery);\n\t\t\tthis.#inFlight.add(delivery);\n\t\t}\n\t\tawait Promise.all(mine);\n\t\treturn claimed;\n\t}\n\n\t/** Wakes a sleeping `start()` loop, or spares it its next sleep: something was enqueued. */\n\twake(): void {\n\t\tif (this.#wake) this.#wake();\n\t\telse this.#woken = true;\n\t}\n\n\tstart(): void {\n\t\tif (this.#stopping) {\n\t\t\tthis.#restart = true;\n\t\t\treturn;\n\t\t}\n\t\tif (this.#loop) return;\n\t\tthis.#loop = this.#run();\n\t}\n\n\tasync #sleep(): Promise<void> {\n\t\tif (this.#woken) {\n\t\t\tthis.#woken = false;\n\t\t\treturn;\n\t\t}\n\t\tawait new Promise<void>((resolve) => {\n\t\t\tconst timer = setTimeout(resolve, this.#ctx.settings.pollInterval);\n\t\t\tthis.#wake = () => {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tresolve();\n\t\t\t};\n\t\t});\n\t\tthis.#wake = undefined;\n\t}\n\n\tasync #run(): Promise<void> {\n\t\twhile (!this.#stopping) {\n\t\t\tthis.#woken = false;\n\t\t\ttry {\n\t\t\t\tawait this.deliverDue();\n\t\t\t} catch (error) {\n\t\t\t\tthis.#ctx.events.emit('error', { error });\n\t\t\t}\n\t\t\tif (this.#stopping) break;\n\t\t\tawait this.#sleep();\n\t\t}\n\t}\n\n\t/**\n\t * Claims nothing more, lets every delivery under way end, and gives back\n\t * what was claimed but not started, due at once for the next worker. A\n\t * `start()` called meanwhile starts again once this ends.\n\t */\n\tasync stop(): Promise<void> {\n\t\tthis.#restart = false;\n\t\tthis.#stopping = true;\n\t\tthis.#wake?.();\n\t\tawait this.#loop;\n\t\tawait Promise.all(this.#inFlight);\n\t\tthis.#loop = undefined;\n\t\tthis.#stopping = false;\n\t\tif (this.#restart) {\n\t\t\tthis.#restart = false;\n\t\t\tthis.start();\n\t\t}\n\t}\n}\n",
|
|
27
27
|
"import type { QueueItem, QueueListOptions } from '../contract/types';\nimport {\n\tcheckEnvelope,\n\tcheckLineEnds,\n\ttype MessageSource,\n\ttype QueueEnvelope,\n\treadMessage,\n} from './envelope';\nimport { Events, type QueueEvents, type QueueListener } from './events';\nimport type { QueueOptions } from './options';\nimport { settingsOf } from './settings';\nimport { Worker } from './worker';\n\n/** The outbound queue: what the app enqueues, delivered across restarts. */\nexport interface Queue {\n\t/** This worker's name on its leases. */\n\treadonly owner: string;\n\t/**\n\t * Takes a message to send — already signed, as it will leave — with its\n\t * envelope, and keeps it in the store, every recipient pending, due at\n\t * once. Refuses with `INVALID`, `MESSAGE_TOO_BIG`,\n\t * `TOO_MANY_RECIPIENTS` or `QUEUE_FULL`. The queue sends whatever it is\n\t * given: authenticate the submitter before you enqueue.\n\t */\n\tenqueue(message: MessageSource, envelope: QueueEnvelope): Promise<QueueItem>;\n\t/** One pass by hand: delivers every item due now; resolves with how many it claimed. */\n\tdeliverDue(): Promise<number>;\n\t/** Delivers in the background: a pass every `pollInterval`, and at once after `enqueue`. */\n\tstart(): void;\n\t/** Claims nothing more, lets the deliveries under way end, and gives back the rest. */\n\tstop(): Promise<void>;\n\t/** Listens to an event; returns what stops listening. */\n\ton<E extends keyof QueueEvents>(\n\t\tevent: E,\n\t\tlistener: QueueListener<E>,\n\t): () => void;\n\t/** The items in the queue, the next due first. */\n\tlist(options?: QueueListOptions): Promise<QueueItem[]>;\n\tget(id: string): Promise<QueueItem | undefined>;\n\t/**\n\t * Makes an item due now, and wakes the worker. False when there is no\n\t * such item, or when a worker is delivering it: its outcome sets the\n\t * next attempt, so asking now would change nothing.\n\t */\n\tretryNow(id: string): Promise<boolean>;\n\t/** Drops an item, its message and its recipients, with no DSN; the item as it stood, or `undefined`. */\n\tcancel(id: string): Promise<QueueItem | undefined>;\n}\n\n/**\n * Creates the queue over a store. Nothing is delivered until `start()`,\n * or `deliverDue()` by hand. Several queues — in one process or several —\n * may share a store: each claims items under its own `owner`.\n */\nexport function createQueue(options: QueueOptions): Queue {\n\tconst settings = settingsOf(options);\n\tconst store = options.store;\n\tconst events = new Events();\n\tconst worker = new Worker({ settings, store, events });\n\tconst { limits } = settings;\n\treturn {\n\t\towner: settings.owner,\n\t\tasync enqueue(message, envelope) {\n\t\t\tconst { from, to } = checkEnvelope(envelope, limits.maxRecipients);\n\t\t\tconst bytes = await readMessage(message, limits.maxMessageSize);\n\t\t\tcheckLineEnds(bytes);\n\t\t\tconst item = await store.add(\n\t\t\t\t{ from, to, message: bytes, createdAt: settings.now() },\n\t\t\t\tlimits.maxItems === undefined ? {} : { maxItems: limits.maxItems },\n\t\t\t);\n\t\t\tworker.wake();\n\t\t\treturn item;\n\t\t},\n\t\tdeliverDue: () => worker.deliverDue(),\n\t\tstart: () => worker.start(),\n\t\tstop: () => worker.stop(),\n\t\ton: (event, listener) => events.on(event, listener),\n\t\tlist: (listOptions) => store.list(listOptions),\n\t\tget: (id) => store.get(id),\n\t\tasync retryNow(id) {\n\t\t\tconst now = settings.now();\n\t\t\tconst lease = (await store.get(id))?.lease;\n\t\t\tif (lease && lease.expiresAt > now) return false;\n\t\t\tconst moved = await store.reschedule(id, now);\n\t\t\tif (moved) worker.wake();\n\t\t\treturn moved;\n\t\t},\n\t\tcancel: (id) => store.cancel(id),\n\t};\n}\n"
|
|
28
28
|
],
|
|
29
|
-
"mappings": "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",
|
|
30
|
-
"debugId": "
|
|
29
|
+
"mappings": "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",
|
|
30
|
+
"debugId": "14BF571A961D5A4C64756E2164756E21",
|
|
31
31
|
"names": []
|
|
32
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attempt.d.ts","sourceRoot":"","sources":["../../src/queue/attempt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"attempt.d.ts","sourceRoot":"","sources":["../../src/queue/attempt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAsD/C,wEAAwE;AACxE,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC;AAgD1E;;;;;;GAMG;AACH,wBAAsB,YAAY,CACjC,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GACrB,OAAO,CAAC,eAAe,EAAE,CAAC,CAuD5B"}
|
package/dist/queue/fallback.d.ts
CHANGED
|
@@ -12,7 +12,11 @@ import type { Diagnostic } from '../contract/types';
|
|
|
12
12
|
* came, a timeout or a lost connection that reads as 4.4.2) would be one
|
|
13
13
|
* more copy by the smarthost, so the recipient is deferred for the MX retry
|
|
14
14
|
* (RFC 5321 §4.1.5) and marked `mayHaveReachedMx`, which keeps every later
|
|
15
|
-
* attempt from falling back on its own (`attemptGroup`).
|
|
15
|
+
* attempt from falling back on its own (`attemptGroup`). When the error
|
|
16
|
+
* carries the envelope (`accepted`, `rejected`), the caller has marked
|
|
17
|
+
* every recipient the MX did not refuse at `RCPT`; a refused one is judged
|
|
18
|
+
* by its own `RCPT` reply, as before `DATA`. An `@bumail/smtp` without the
|
|
19
|
+
* field behaves as before.
|
|
16
20
|
*
|
|
17
21
|
* It is not a reason when the smarthost would be refused alike: an
|
|
18
22
|
* unknown or full mailbox (`5.1.x`, `x.2.x`), a domain that does not
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fallback.d.ts","sourceRoot":"","sources":["../../src/queue/fallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAUpD
|
|
1
|
+
{"version":3,"file":"fallback.d.ts","sourceRoot":"","sources":["../../src/queue/fallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAUpD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,SAAS,CACxB,KAAK,EAAE,UAAU,GAAG,SAAS,EAC7B,KAAK,CAAC,EAAE,OAAO,GACb,OAAO,CAaT"}
|
package/docs/guide.md
CHANGED
|
@@ -178,10 +178,13 @@ any sender that did not see the reply. If the MX stays unreachable until
|
|
|
178
178
|
DSN, whose diagnostic adds that an earlier attempt may have reached the
|
|
179
179
|
receiving server, so the message may have been delivered. The `deferred`
|
|
180
180
|
and `failed` events of a marked recipient carry `mayHaveReachedMx: true`.
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
181
|
+
In a session that failed after the final dot, every recipient the MX
|
|
182
|
+
did not refuse at `RCPT` is marked: the error carries the ones it took
|
|
183
|
+
(`accepted`) and the ones it refused (`rejected`). A refused recipient never had a copy, so it
|
|
184
|
+
settles from its own `RCPT` reply as it would before `DATA` (a 5xx fails, a
|
|
185
|
+
4xx is deferred), unmarked, and may fall back. An `@bumail/smtp` older than
|
|
186
|
+
the field behaves as before, and an error with no `accepted` marks every
|
|
187
|
+
recipient of the group.
|
|
185
188
|
|
|
186
189
|
An explicit route is still followed: if the operator sets a smarthost for
|
|
187
190
|
the domain (`route` or `routes`), a marked recipient is sent there at the
|
package/docs/roadmap.md
CHANGED
|
@@ -62,6 +62,10 @@ Nothing in progress.
|
|
|
62
62
|
every store: no later attempt falls back to the smarthost on its own, it
|
|
63
63
|
stays on the MX until `retry.giveUpAfter` (a `4.4.7` DSN that says so),
|
|
64
64
|
and the `deferred` and `failed` events carry the mark.
|
|
65
|
+
- **Only the recipients the MX did not refuse are in doubt** — in a session that
|
|
66
|
+
failed after the final dot, a recipient the MX refused at `RCPT` is
|
|
67
|
+
settled from its own reply (5xx failed, 4xx deferred) and not marked, so
|
|
68
|
+
it may fall back to the smarthost.
|
|
65
69
|
|
|
66
70
|
### 0.5.0
|
|
67
71
|
|
package/docs/troubleshooting.md
CHANGED
|
@@ -732,7 +732,8 @@ cloud provider.
|
|
|
732
732
|
A `4.4.2` from a connection lost or a timeout after the final dot of
|
|
733
733
|
`DATA` is different: the MX may have taken the message, so the recipient
|
|
734
734
|
is deferred for the MX retry, not sent by the `fallback` smarthost in the
|
|
735
|
-
same delivery
|
|
735
|
+
same delivery (every recipient the server did not refuse at `RCPT`; one it
|
|
736
|
+
refused there is judged by its own reply and may fall back), and marked `mayHaveReachedMx: true` (on the `deferred` event
|
|
736
737
|
and on `RecipientState`): no later attempt falls back on its own, even when
|
|
737
738
|
the MX cannot be reached, until `retry.giveUpAfter` fails it as `4.4.7`; that failed DSN's diagnostic
|
|
738
739
|
adds that an earlier attempt may have reached the receiving server, so the
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bumail/queue",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.2",
|
|
4
4
|
"description": "The outbound mail queue of a mail server: every recipient's state, retries with back-off, delivery status notifications (RFC 3464), leases for several workers, and a memory, a bun:sqlite, a PostgreSQL (Bun.sql) and a Redis (Bun.redis) store, delivering through @bumail/smtp/client",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -66,13 +66,13 @@
|
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
68
|
"@bumail/dns": "^0.2.1",
|
|
69
|
-
"@bumail/mime": "^0.
|
|
70
|
-
"@bumail/smtp": "^0.
|
|
69
|
+
"@bumail/mime": "^0.2.0",
|
|
70
|
+
"@bumail/smtp": "^0.9.0",
|
|
71
71
|
"@types/bun": "^1.4.2"
|
|
72
72
|
},
|
|
73
73
|
"peerDependencies": {
|
|
74
|
-
"@bumail/mime": "^0.
|
|
75
|
-
"@bumail/smtp": "^0.
|
|
74
|
+
"@bumail/mime": "^0.2.0",
|
|
75
|
+
"@bumail/smtp": "^0.9.0",
|
|
76
76
|
"typescript": "^6.0.3 || ^7.0.0"
|
|
77
77
|
},
|
|
78
78
|
"peerDependenciesMeta": {
|