@bumail/smtp 0.10.0 → 0.11.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.
@@ -208,6 +208,57 @@ function concat(a, b) {
208
208
  return out;
209
209
  }
210
210
 
211
+ // src/protocol/orcpt.ts
212
+ var ESCAPE = /^\\x\{([0-9A-Fa-f]{2,6})\}/;
213
+ var plain = (code) => code >= 33 && code <= 126 && code !== 92 && code !== 43 && code !== 61;
214
+ var expressible = (point) => point >= 32 || point >= 1 && point <= 9 || point >= 16 && point <= 25;
215
+ function utf8OrcptLength(address) {
216
+ let length = 0;
217
+ for (const char of address) {
218
+ const code = char.codePointAt(0);
219
+ length += code > 127 ? new TextEncoder().encode(char).length : plain(code) ? 1 : 6;
220
+ }
221
+ return length;
222
+ }
223
+ function encodeUtf8Orcpt(address, unicode) {
224
+ let out = "";
225
+ for (const char of address) {
226
+ const code = char.codePointAt(0);
227
+ if (code >= 55296 && code <= 57343)
228
+ return;
229
+ if (!expressible(code))
230
+ return;
231
+ out += plain(code) || unicode && code > 127 ? char : `\\x{${code.toString(16).toUpperCase().padStart(2, "0")}}`;
232
+ }
233
+ return out;
234
+ }
235
+ function decodeUtf8Orcpt(value, unicode) {
236
+ let out = "";
237
+ for (let i = 0;i < value.length; ) {
238
+ const code = value.codePointAt(i);
239
+ if (code === 92) {
240
+ const hex = ESCAPE.exec(value.slice(i, i + 10));
241
+ if (!hex)
242
+ return;
243
+ const point = Number.parseInt(hex[1], 16);
244
+ if (!expressible(point))
245
+ return;
246
+ if (point > 1114111 || point >= 55296 && point <= 57343)
247
+ return;
248
+ out += String.fromCodePoint(point);
249
+ i += hex[0].length;
250
+ } else if (plain(code) || unicode && code > 127) {
251
+ if (code >= 55296 && code <= 57343)
252
+ return;
253
+ out += String.fromCodePoint(code);
254
+ i += code > 65535 ? 2 : 1;
255
+ } else {
256
+ return;
257
+ }
258
+ }
259
+ return out === "" ? undefined : out;
260
+ }
261
+
211
262
  // src/protocol/xtext.ts
212
263
  var HEX = "0123456789ABCDEF";
213
264
  function encodeXtext(text) {
@@ -236,7 +287,7 @@ function decodeXtext(value) {
236
287
  }
237
288
  }
238
289
  try {
239
- return new TextDecoder("utf-8", { fatal: true }).decode(new Uint8Array(bytes));
290
+ return new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }).decode(new Uint8Array(bytes));
240
291
  } catch {
241
292
  return;
242
293
  }
@@ -289,7 +340,7 @@ class Outgoing {
289
340
  }
290
341
  }
291
342
 
292
- export { SmtpError2, POSTMASTER, isHelloName, parsePath2, decodePlain2, decodeLoginStep2, encodePlain, encodeLoginStep, MAX_LINE, LineSplitter, encodeXtext, decodeXtext, Outgoing };
343
+ export { SmtpError2, POSTMASTER, isHelloName, parsePath2, decodePlain2, decodeLoginStep2, encodePlain, encodeLoginStep, MAX_LINE, LineSplitter, utf8OrcptLength, encodeUtf8Orcpt, decodeUtf8Orcpt, encodeXtext, decodeXtext, Outgoing };
293
344
 
294
- //# debugId=A2A75B4246D11C9E64756E2164756E21
295
- //# sourceMappingURL=index-twt5myrr.js.map
345
+ //# debugId=3801043D559F921564756E2164756E21
346
+ //# sourceMappingURL=index-byaw0g4k.js.map
@@ -1,15 +1,16 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/errors.ts", "../src/protocol/path.ts", "../src/protocol/sasl.ts", "../src/protocol/lines.ts", "../src/protocol/xtext.ts", "../src/io/outgoing.ts"],
3
+ "sources": ["../src/errors.ts", "../src/protocol/path.ts", "../src/protocol/sasl.ts", "../src/protocol/lines.ts", "../src/protocol/orcpt.ts", "../src/protocol/xtext.ts", "../src/io/outgoing.ts"],
4
4
  "sourcesContent": [
5
5
  "import type { Reply } from './protocol/reply';\n\n/** Why the server refused an option, why a message stream ended in error, or why `sendMail` failed. */\nexport type SmtpErrorCode =\n\t| 'INVALID_OPTION'\n\t| 'ALREADY_LISTENING'\n\t| 'STOPPED'\n\t| 'MESSAGE_TOO_BIG'\n\t| 'BARE_LINE_BREAK'\n\t| 'NUL_BYTE'\n\t| 'CONNECTION_LOST'\n\t| 'HOOK_TIMEOUT'\n\t| 'INVALID_HOOK_REPLY'\n\t| 'MESSAGE_NOT_READ'\n\t| 'CONNECTION_FAILED'\n\t| 'TIMEOUT'\n\t| 'BAD_REPLY'\n\t| 'REFUSED'\n\t| 'RECIPIENTS_REFUSED'\n\t| 'TLS_UNAVAILABLE'\n\t| 'TLS_FAILED'\n\t| 'AUTH_UNAVAILABLE'\n\t| 'EXTENSION_MISSING'\n\t| 'NULL_MX'\n\t| 'DNS_FAILED';\n\n/** One recipient and the server's reply to its `RCPT TO`. */\nexport interface RecipientReply {\n\treadonly recipient: string;\n\treadonly reply: Reply;\n}\n\n/** What `sendMail` adds to an error: whether to try again, and the reply behind it. */\nexport interface SmtpErrorDetails {\n\t/** Trying again later may succeed: a 4xx, the network, a timeout. */\n\treadonly temporary?: boolean;\n\t/** The server's reply that failed the delivery, enhanced status code included. */\n\treadonly reply?: Reply;\n\t/**\n\t * With `RECIPIENTS_REFUSED`, or `afterData`: each recipient, and why it was\n\t * refused at `RCPT TO`.\n\t */\n\treadonly rejected?: readonly RecipientReply[];\n\t/** With `afterData`: each recipient the server accepted at `RCPT TO`. */\n\treadonly accepted?: readonly RecipientReply[];\n\t/** The error behind this one, as `Error`'s `cause`. */\n\treadonly cause?: unknown;\n\t/**\n\t * The final dot of the message was written and no reply to it came (a\n\t * timeout, a lost connection, a reply that is not one): the server may\n\t * have taken the message. See `SmtpError.afterData`.\n\t */\n\treadonly afterData?: boolean;\n}\n\n/** The codes that are temporary unless a reply or `details` says otherwise. */\nconst TEMPORARY = new Set<SmtpErrorCode>([\n\t'CONNECTION_LOST',\n\t'CONNECTION_FAILED',\n\t'TIMEOUT',\n\t'BAD_REPLY',\n\t'TLS_UNAVAILABLE',\n\t'TLS_FAILED',\n]);\n\n/**\n * Thrown by `createSmtpServer` and `listen` for a wrong option or call; the\n * error a message's `content` stream ends with when the message must not be\n * delivered; what `onError` is given for a hook that broke a rule; and what\n * `sendMail` rejects with. `temporary` tells a failure worth trying again\n * later (a 4xx, the network, a timeout) from a permanent one (a 5xx, a null\n * MX, a message the server can never take).\n */\nexport class SmtpError extends Error {\n\toverride readonly name = 'SmtpError';\n\treadonly code: SmtpErrorCode;\n\t/** Trying again later may succeed. Meaningful for `sendMail`'s errors. */\n\treadonly temporary: boolean;\n\t/** The server reply behind a `sendMail` failure, enhanced status code included. */\n\treadonly reply?: Reply;\n\t/**\n\t * With `RECIPIENTS_REFUSED`, or `afterData`: each recipient, and the reply\n\t * that refused it at `RCPT TO`.\n\t */\n\treadonly rejected?: readonly RecipientReply[];\n\t/**\n\t * With `afterData`: each recipient the server accepted at `RCPT TO`, and\n\t * the reply that accepted it — the ones that may hold the message. Absent\n\t * from an error of an older version; then every recipient is in doubt.\n\t */\n\treadonly accepted?: readonly RecipientReply[];\n\t/**\n\t * `true` when `sendMail` wrote the message's final dot and then got no\n\t * reply to it (a `TIMEOUT`, a `CONNECTION_LOST`, a `BAD_REPLY`): the\n\t * server may already have taken the message (RFC 5321 §4.1.5), so a\n\t * retry, or a delivery by another route, can duplicate it. Absent for a\n\t * failure before the dot (the server drops a message with no dot) and for\n\t * a reply that refused the message (a 4xx or 5xx says it was not taken).\n\t */\n\treadonly afterData?: boolean;\n\n\tconstructor(\n\t\tcode: SmtpErrorCode,\n\t\tmessage: string,\n\t\tdetails: SmtpErrorDetails = {},\n\t) {\n\t\tsuper(\n\t\t\tmessage,\n\t\t\tdetails.cause === undefined ? undefined : { cause: details.cause },\n\t\t);\n\t\tthis.code = code;\n\t\tthis.temporary =\n\t\t\tdetails.temporary ??\n\t\t\t(details.reply ? details.reply.code < 500 : TEMPORARY.has(code));\n\t\tif (details.reply) this.reply = details.reply;\n\t\tif (details.rejected) this.rejected = details.rejected;\n\t\tif (details.accepted) this.accepted = details.accepted;\n\t\tif (details.afterData) this.afterData = true;\n\t}\n}\n",
6
6
  "/** An envelope address, as `MAIL FROM` and `RCPT TO` give it. */\nexport interface Path {\n\t/**\n\t * `local@domain`; `''` for the null reverse-path `<>`; `'postmaster'`\n\t * for `RCPT TO:<postmaster>`, which has no domain.\n\t */\n\treadonly address: string;\n\treadonly local: string;\n\t/** Lower case; `''` for `<>` and for `<postmaster>`. */\n\treadonly domain: string;\n\t/**\n\t * `true` for `RCPT TO:<postmaster>`, in any case, with no domain (RFC\n\t * 5321 §4.5.1): the postmaster of this server, whatever domains it\n\t * hosts. Absent for every other path, `<postmaster@domain>` included.\n\t */\n\treadonly postmaster?: true;\n}\n\n/** The bare `<postmaster>` path `RCPT TO` takes (RFC 5321 §4.1.1.3, §4.5.1). */\nexport const POSTMASTER: Path = Object.freeze({\n\taddress: 'postmaster',\n\tlocal: 'postmaster',\n\tdomain: '',\n\tpostmaster: true,\n});\n\nconst ATOM = /^[A-Za-z0-9!#$%&'*+\\-/=?^_`{|}~\\u0080-\\u{10ffff}]+$/u;\nconst LABEL =\n\t/^(?:[A-Za-z0-9\\u0080-\\u{10ffff}](?:[A-Za-z0-9\\-\\u0080-\\u{10ffff}]*[A-Za-z0-9\\u0080-\\u{10ffff}])?)$/u;\n\n/**\n * C1 controls, Unicode format characters (zero-width, bidi, BOM), the\n * line and paragraph separators, and lone surrogates: none has a place in\n * an address, and each would land as it is in the Received field and the\n * app's records — a lone surrogate as U+FFFD, once encoded for the wire.\n */\nconst INVISIBLE = /[\\u0080-\\u009f\\u2028\\u2029\\p{Cf}\\p{Cs}]/u;\n\n/**\n * C0 controls (CR, LF and NUL among them), DEL and `>`, anywhere in the\n * path, quoted or not: a CR or an LF would end the command line and start\n * another, and a `>` would end the path where a reader of the line stops.\n */\nfunction hasControl(text: string): boolean {\n\tfor (let i = 0; i < text.length; i++) {\n\t\tconst code = text.charCodeAt(i);\n\t\tif (code < 0x20 || code === 0x7f || code === 0x3e) return true;\n\t}\n\treturn false;\n}\n\n/** One hop of a source route, `@domain`, and what follows it: `,` or `:`. */\nconst HOP = /^@(\\[[^\\]]*\\]|[^,:@[\\]]*)([,:])/;\n\nfunction isDotString(text: string): boolean {\n\treturn text.split('.').every((atom) => ATOM.test(atom));\n}\n\nfunction isQuotedString(text: string): boolean {\n\treturn /^\"(?:[\\x20\\x21\\x23-\\x5b\\x5d-\\x7e\\u0080-\\u{10ffff}]|\\\\[\\x20-\\x7e])*\"$/u.test(\n\t\ttext,\n\t);\n}\n\n/**\n * An address literal (§4.1.3): `[IPv6:…]`, its tag in any case (a quoted\n * string in RFC 5234 is), or `[a.b.c.d]` with each octet at most 255.\n */\nexport function isAddressLiteral(text: string): boolean {\n\tif (/^\\[IPv6:[0-9a-f:.]+\\]$/i.test(text)) return true;\n\tconst ipv4 = /^\\[(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\]$/.exec(text);\n\treturn ipv4?.slice(1).every((octet) => Number(octet) <= 255) === true;\n}\n\n/**\n * The argument of EHLO or HELO (RFC 5321 §4.1.1.1): a host name of\n * letters, digits and hyphens, or an address literal.\n */\nexport function isHelloName(text: string): boolean {\n\treturn (\n\t\t/^[A-Za-z0-9-]+(?:\\.[A-Za-z0-9-]+)*$/.test(text) || isAddressLiteral(text)\n\t);\n}\n\nfunction isDomain(domain: string): boolean {\n\tif (isAddressLiteral(domain)) return true;\n\treturn (\n\t\tdomain.length <= 255 &&\n\t\tdomain.split('.').every((label) => label.length <= 63 && LABEL.test(label))\n\t);\n}\n\n/**\n * What `parsePath` does with a source route (`<@a,@b:local@domain>`, RFC 5321\n * Appendix C): a server accepts and discards it (`'discard'`), a client\n * refuses it, as §4.1.1.3 says clients should not send one (`'refuse'`).\n */\nexport type SourceRoute = 'discard' | 'refuse';\n\n/**\n * The mailbox after a source route, each of whose hops must be\n * `@domain` with a valid domain; `undefined` for any other route.\n */\nfunction afterRoute(inner: string): string | undefined {\n\tlet rest = inner;\n\tfor (;;) {\n\t\tconst hop = HOP.exec(rest);\n\t\tif (!hop || !isDomain(hop[1] as string)) return undefined;\n\t\trest = rest.slice(hop[0].length);\n\t\tif (hop[2] === ':') return rest;\n\t}\n}\n\n/**\n * Parses the `<path>` of RFC 5321 §4.1.2: `<local@domain>`, or `<>` when\n * `allowNull`. A source route (`<@a,@b:local@domain>`, §C) is dropped when\n * `sourceRoute` is `'discard'`, the default, provided each hop is\n * `@domain`; with `'refuse'` the path is not one. A C0 control (CR, LF,\n * NUL…), DEL or `>` anywhere refuses the path, as do C1 controls,\n * U+2028 and U+2029, Unicode format characters and lone surrogates. An IPv4 address literal\n * takes octets up to 255.\n * Non-ASCII is allowed: whether the session may use it is SMTPUTF8's\n * question (RFC 6531), not the grammar's. `undefined` when it is not a path.\n *\n * The local part is kept as written, quotes included: `\"v@x.example\"` and\n * `v%x.example` are local parts of the domain after the last `@`, not\n * addresses elsewhere. Code that delivers must not split on the first `@`.\n */\nexport function parsePath(\n\ttext: string,\n\tallowNull: boolean,\n\tsourceRoute: SourceRoute = 'discard',\n): Path | undefined {\n\tif (!text.startsWith('<') || !text.endsWith('>')) return undefined;\n\tlet inner: string | undefined = text.slice(1, -1);\n\tif (hasControl(inner) || INVISIBLE.test(inner)) return undefined;\n\tif (inner === '')\n\t\treturn allowNull ? { address: '', local: '', domain: '' } : undefined;\n\tif (inner.startsWith('@')) {\n\t\tif (sourceRoute === 'refuse') return undefined;\n\t\tinner = afterRoute(inner);\n\t\tif (inner === undefined) return undefined;\n\t}\n\tconst at = inner.lastIndexOf('@');\n\tif (at <= 0) return undefined;\n\tconst local = inner.slice(0, at);\n\tconst domain = inner.slice(at + 1);\n\tif (local.length > 64 || !(isDotString(local) || isQuotedString(local)))\n\t\treturn undefined;\n\tif (!isDomain(domain)) return undefined;\n\treturn {\n\t\taddress: `${local}@${domain.toLowerCase()}`,\n\t\tlocal,\n\t\tdomain: domain.toLowerCase(),\n\t};\n}\n",
7
7
  "/** Credentials a client gave with `AUTH`. */\nexport interface Credentials {\n\treadonly mechanism: 'PLAIN' | 'LOGIN';\n\treadonly username: string;\n\treadonly password: string;\n\t/**\n\t * PLAIN's authorization identity, when it differs from the username.\n\t * The server refuses such credentials before `authenticate` is asked.\n\t */\n\treadonly authorizationId?: string;\n}\n\nfunction base64ToText(text: string): string | undefined {\n\tif (!/^[A-Za-z0-9+/]*={0,2}$/.test(text) || text.length % 4 !== 0)\n\t\treturn undefined;\n\ttry {\n\t\treturn new TextDecoder('utf-8', { fatal: true }).decode(\n\t\t\tUint8Array.fromBase64(text),\n\t\t);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** PLAIN (RFC 4616): `authzid NUL authcid NUL passwd`, in base64. */\nexport function decodePlain(response: string): Credentials | undefined {\n\tconst text = base64ToText(response);\n\tif (text === undefined) return undefined;\n\tconst parts = text.split('\\0');\n\tif (parts.length !== 3) return undefined;\n\tconst [authorizationId = '', username = '', password = ''] = parts;\n\tif (username === '' || password === '') return undefined;\n\treturn {\n\t\tmechanism: 'PLAIN',\n\t\tusername,\n\t\tpassword,\n\t\t...(authorizationId === '' || authorizationId === username\n\t\t\t? {}\n\t\t\t: { authorizationId }),\n\t};\n}\n\n/** One step of LOGIN: a base64 line to its text. */\nexport function decodeLoginStep(response: string): string | undefined {\n\treturn base64ToText(response);\n}\n\nconst base64 = (text: string) => new TextEncoder().encode(text).toBase64();\n\n/** A client's PLAIN response (RFC 4616): `NUL username NUL password`, in base64, no authorization identity. */\nexport function encodePlain(username: string, password: string): string {\n\treturn base64(`\\0${username}\\0${password}`);\n}\n\n/** One step of LOGIN, the username or the password, in base64. */\nexport function encodeLoginStep(text: string): string {\n\treturn base64(text);\n}\n",
8
8
  "/**\n * The longest line taken, CRLF included: a command (RFC 5321 §4.5.3.1.4\n * asks for 512 at least) or a reply line (§4.5.3.1.5, 512 too).\n */\nexport const MAX_LINE = 2048;\n\n/** One line from the peer, or a line that was too long and was skipped. */\nexport type LineEvent = { line: string } | { tooLong: true };\n\n/**\n * Cuts a peer's bytes into lines — a client's commands, a server's\n * replies — ending at LF with or without CR. It holds one partial line at most: past `MAX_LINE`, the line is\n * skipped to its end and reported once.\n */\nexport class LineSplitter {\n\t#held: Uint8Array = new Uint8Array(0);\n\t#skipping = false;\n\t#rest: Uint8Array = new Uint8Array(0);\n\n\t/** Starts on a chunk; read its lines with `next`. */\n\tpush(chunk: Uint8Array): void {\n\t\tthis.#rest = this.#held.length > 0 ? concat(this.#held, chunk) : chunk;\n\t\tthis.#held = new Uint8Array(0);\n\t}\n\n\t/** The next line of the current chunk, or `undefined` when it has no more. */\n\tnext(): LineEvent | undefined {\n\t\tfor (;;) {\n\t\t\tconst data = this.#rest;\n\t\t\tconst lf = data.indexOf(0x0a);\n\t\t\tif (lf < 0) {\n\t\t\t\tthis.#rest = new Uint8Array(0);\n\t\t\t\tif (this.#skipping) return undefined;\n\t\t\t\tif (data.length > MAX_LINE) {\n\t\t\t\t\tthis.#skipping = true;\n\t\t\t\t\treturn { tooLong: true };\n\t\t\t\t}\n\t\t\t\tthis.#held = data.slice();\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst end = lf > 0 && data[lf - 1] === 0x0d ? lf - 1 : lf;\n\t\t\tthis.#rest = data.subarray(lf + 1);\n\t\t\tif (this.#skipping) {\n\t\t\t\tthis.#skipping = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (end > MAX_LINE) return { tooLong: true };\n\t\t\treturn { line: new TextDecoder().decode(data.subarray(0, end)) };\n\t\t}\n\t}\n\n\t/** Bytes are held or left: a line begun, or lines not yet read. */\n\tget holding(): boolean {\n\t\treturn this.#held.length > 0 || this.#rest.length > 0;\n\t}\n\n\t/** What is left of the current chunk: message content pipelined after DATA. */\n\ttakeRest(): Uint8Array {\n\t\tconst rest = this.#rest;\n\t\tthis.#rest = new Uint8Array(0);\n\t\treturn rest;\n\t}\n\n\t/** Forgets everything held: after STARTTLS, or after a refused DATA. */\n\tclear(): void {\n\t\tthis.#held = new Uint8Array(0);\n\t\tthis.#rest = new Uint8Array(0);\n\t\tthis.#skipping = false;\n\t}\n}\n\nfunction concat(a: Uint8Array, b: Uint8Array): Uint8Array {\n\tconst out = new Uint8Array(a.length + b.length);\n\tout.set(a, 0);\n\tout.set(b, a.length);\n\treturn out;\n}\n",
9
- "const HEX = '0123456789ABCDEF';\n\n/**\n * Encodes text as `xtext` (RFC 3461 §4), the form DSN parameter values take\n * on the wire: every byte of its UTF-8 form outside `!` to `~` (33 to 126),\n * and `+` and `=`, becomes `+` and two upper-case hex digits.\n */\nexport function encodeXtext(text: string): string {\n\tlet out = '';\n\tfor (const byte of new TextEncoder().encode(text)) {\n\t\tout +=\n\t\t\tbyte >= 33 && byte <= 126 && byte !== 0x2b && byte !== 0x3d\n\t\t\t\t? String.fromCharCode(byte)\n\t\t\t\t: `+${HEX[byte >> 4]}${HEX[byte & 15]}`;\n\t}\n\treturn out;\n}\n\n/**\n * Decodes `xtext` (RFC 3461 §4) read as UTF-8, or `undefined` when it is\n * not xtext: a `+` not followed by two upper-case hex digits, a character\n * outside `!` to `~` that is not encoded, a bare `=`, or bytes that are not\n * valid UTF-8.\n */\nexport function decodeXtext(value: string): string | undefined {\n\tconst bytes: number[] = [];\n\tfor (let i = 0; i < value.length; i++) {\n\t\tconst code = value.charCodeAt(i);\n\t\tif (code === 0x2b) {\n\t\t\tconst pair = value.slice(i + 1, i + 3);\n\t\t\tif (!/^[0-9A-F]{2}$/.test(pair)) return undefined;\n\t\t\tconst high = HEX.indexOf(pair[0] as string);\n\t\t\tconst low = HEX.indexOf(pair[1] as string);\n\t\t\tbytes.push(high * 16 + low);\n\t\t\ti += 2;\n\t\t} else if (code >= 33 && code <= 126 && code !== 0x3d) {\n\t\t\tbytes.push(code);\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\ttry {\n\t\treturn new TextDecoder('utf-8', { fatal: true }).decode(\n\t\t\tnew Uint8Array(bytes),\n\t\t);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n",
9
+ "// The `utf-8` address type of ORCPT (RFC 6533 §3): `utf-8-addr-xtext` and\n// `utf-8-addr-unitext`. `rfc822` is plain xtext (./xtext.ts).\n\n/**\n * An escape: `\\x{` and 2 to 6 hexadecimal digits (`EmbeddedUnicodeChar`, RFC\n * 6533 §3). Accepted leniently: leading zeros and escaped printable ASCII,\n * which RFC 6533's HEXPOINT does not produce.\n */\nconst ESCAPE = /^\\\\x\\{([0-9A-Fa-f]{2,6})\\}/;\n\n/**\n * Whether `code` may be written as itself (`QCHAR`): printable ASCII except\n * `\\`, `+` and `=`.\n */\nconst plain = (code: number): boolean =>\n\tcode >= 0x21 &&\n\tcode <= 0x7e &&\n\tcode !== 0x5c &&\n\tcode !== 0x2b &&\n\tcode !== 0x3d;\n\n/**\n * Whether the HEXPOINT grammar of RFC 6533 §3 can express `point` (2 to 6\n * digits): not NUL, `0A` to `0F`, nor `1A` to `1F`.\n */\nconst expressible = (point: number): boolean =>\n\tpoint >= 0x20 ||\n\t(point >= 0x01 && point <= 0x09) ||\n\t(point >= 0x10 && point <= 0x19);\n\n/**\n * The length of an address in its `utf-8-addr-unitext` form, the shortest\n * (raw UTF-8 octets for a non-ASCII character, `\\x{HH}` is 6): what a `utf-8`\n * ORCPT counts against the 500 characters of RFC 3461 §4.2 in the copies that\n * do not read the wire (AGENTS.md, Deliberate duplications).\n */\nexport function utf8OrcptLength(address: string): number {\n\tlet length = 0;\n\tfor (const char of address) {\n\t\tconst code = char.codePointAt(0) as number;\n\t\tlength +=\n\t\t\tcode > 0x7f ? new TextEncoder().encode(char).length : plain(code) ? 1 : 6;\n\t}\n\treturn length;\n}\n\n/**\n * Encodes an address as `utf-8-addr-xtext` (`unicode` false, 7-bit safe) or\n * `utf-8-addr-unitext` (`unicode` true, for a session with SMTPUTF8: the\n * non-ASCII characters stay raw UTF-8); every other character is\n * `\\x{HH}` (at least 2 digits). `undefined` when the text holds a lone\n * surrogate or a character the grammar cannot express (NUL, `0A` to `0F`, `1A`\n * to `1F`).\n */\nexport function encodeUtf8Orcpt(\n\taddress: string,\n\tunicode: boolean,\n): string | undefined {\n\tlet out = '';\n\tfor (const char of address) {\n\t\tconst code = char.codePointAt(0) as number;\n\t\tif (code >= 0xd800 && code <= 0xdfff) return undefined;\n\t\tif (!expressible(code)) return undefined;\n\t\tout +=\n\t\t\tplain(code) || (unicode && code > 0x7f)\n\t\t\t\t? char\n\t\t\t\t: `\\\\x{${code.toString(16).toUpperCase().padStart(2, '0')}}`;\n\t}\n\treturn out;\n}\n\n/**\n * Decodes the address of an `ORCPT=utf-8;` value (RFC 6533 §3): the\n * `utf-8-addr-xtext` form, plus, when `unicode` (the transaction uses\n * SMTPUTF8), raw UTF-8 as `utf-8-addr-unitext` allows. `undefined` when it is\n * neither: a character that must be escaped, a malformed or out-of-range\n * `\\x{…}`, an escaped NUL or control the grammar has no HEXPOINT for (`0A` to\n * `0F`, `1A` to `1F`: line breaks stay out of a DSN header), a raw non-ASCII character\n * without SMTPUTF8, or nothing.\n */\nexport function decodeUtf8Orcpt(\n\tvalue: string,\n\tunicode: boolean,\n): string | undefined {\n\tlet out = '';\n\tfor (let i = 0; i < value.length; ) {\n\t\tconst code = value.codePointAt(i) as number;\n\t\tif (code === 0x5c) {\n\t\t\tconst hex = ESCAPE.exec(value.slice(i, i + 10));\n\t\t\tif (!hex) return undefined;\n\t\t\tconst point = Number.parseInt(hex[1] as string, 16);\n\t\t\tif (!expressible(point)) return undefined;\n\t\t\tif (point > 0x10ffff || (point >= 0xd800 && point <= 0xdfff))\n\t\t\t\treturn undefined;\n\t\t\tout += String.fromCodePoint(point);\n\t\t\ti += (hex[0] as string).length;\n\t\t} else if (plain(code) || (unicode && code > 0x7f)) {\n\t\t\tif (code >= 0xd800 && code <= 0xdfff) return undefined;\n\t\t\tout += String.fromCodePoint(code);\n\t\t\ti += code > 0xffff ? 2 : 1;\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\treturn out === '' ? undefined : out;\n}\n",
10
+ "const HEX = '0123456789ABCDEF';\n\n/**\n * Encodes text as `xtext` (RFC 3461 §4), the form DSN parameter values take\n * on the wire: every byte of its UTF-8 form outside `!` to `~` (33 to 126),\n * and `+` and `=`, becomes `+` and two upper-case hex digits.\n */\nexport function encodeXtext(text: string): string {\n\tlet out = '';\n\tfor (const byte of new TextEncoder().encode(text)) {\n\t\tout +=\n\t\t\tbyte >= 33 && byte <= 126 && byte !== 0x2b && byte !== 0x3d\n\t\t\t\t? String.fromCharCode(byte)\n\t\t\t\t: `+${HEX[byte >> 4]}${HEX[byte & 15]}`;\n\t}\n\treturn out;\n}\n\n/**\n * Decodes `xtext` (RFC 3461 §4) read as UTF-8, or `undefined` when it is\n * not xtext: a `+` not followed by two upper-case hex digits, a character\n * outside `!` to `~` that is not encoded, a bare `=`, or bytes that are not\n * valid UTF-8.\n */\nexport function decodeXtext(value: string): string | undefined {\n\tconst bytes: number[] = [];\n\tfor (let i = 0; i < value.length; i++) {\n\t\tconst code = value.charCodeAt(i);\n\t\tif (code === 0x2b) {\n\t\t\tconst pair = value.slice(i + 1, i + 3);\n\t\t\tif (!/^[0-9A-F]{2}$/.test(pair)) return undefined;\n\t\t\tconst high = HEX.indexOf(pair[0] as string);\n\t\t\tconst low = HEX.indexOf(pair[1] as string);\n\t\t\tbytes.push(high * 16 + low);\n\t\t\ti += 2;\n\t\t} else if (code >= 33 && code <= 126 && code !== 0x3d) {\n\t\t\tbytes.push(code);\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\ttry {\n\t\treturn new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(\n\t\t\tnew Uint8Array(bytes),\n\t\t);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n",
10
11
  "/**\n * What waits to leave a Bun socket. Bun's sockets do not buffer: `write`\n * takes what the kernel takes and says how much. The rest waits here for\n * the socket's `drain` event, so nothing written is lost to a peer that\n * reads slowly. The server's transport and the client's socket share it.\n */\nexport class Outgoing {\n\treadonly #write: (bytes: Uint8Array) => number;\n\t#queue: Uint8Array[] = [];\n\t#waiters: (() => void)[] = [];\n\n\tconstructor(write: (bytes: Uint8Array) => number) {\n\t\tthis.#write = write;\n\t}\n\n\t/** Nothing waits to leave. */\n\tget empty(): boolean {\n\t\treturn this.#queue.length === 0;\n\t}\n\n\t/** Writes what the socket takes now, and keeps the rest for `drain`. */\n\twrite(bytes: Uint8Array): void {\n\t\tif (this.#queue.length > 0) {\n\t\t\tthis.#queue.push(bytes);\n\t\t\treturn;\n\t\t}\n\t\tconst written = this.#write(bytes);\n\t\tif (written < bytes.length) {\n\t\t\tthis.#queue.push(bytes.subarray(Math.max(written, 0)));\n\t\t}\n\t}\n\n\t/** The socket's `drain`: it can take more. True once everything has left. */\n\tdrain(): boolean {\n\t\twhile (this.#queue.length > 0) {\n\t\t\tconst bytes = this.#queue[0] as Uint8Array;\n\t\t\tconst written = this.#write(bytes);\n\t\t\tif (written < bytes.length) {\n\t\t\t\tthis.#queue[0] = bytes.subarray(Math.max(written, 0));\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.#queue.shift();\n\t\t}\n\t\tfor (const wake of this.#waiters.splice(0)) wake();\n\t\treturn true;\n\t}\n\n\t/** Resolves once everything written has left, or the socket closed. */\n\tdrained(): Promise<void> {\n\t\tif (this.#queue.length === 0) return Promise.resolve();\n\t\treturn new Promise((wake) => this.#waiters.push(wake));\n\t}\n\n\t/** The socket closed: nothing more will leave. */\n\tclear(): void {\n\t\tthis.#queue = [];\n\t\tfor (const wake of this.#waiters.splice(0)) wake();\n\t}\n}\n"
11
12
  ],
12
- "mappings": "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",
13
- "debugId": "A2A75B4246D11C9E64756E2164756E21",
13
+ "mappings": "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",
14
+ "debugId": "3801043D559F921564756E2164756E21",
14
15
  "names": []
15
16
  }
@@ -17,5 +17,5 @@ export declare const asksDsn: (dsn: DsnSettings) => boolean;
17
17
  /** ` RET=… ENVID=…` for MAIL FROM, when the server lists DSN (RFC 3461 §4.3, §4.4). */
18
18
  export declare function mailDsn(dsn: DsnSettings, offered: boolean): string;
19
19
  /** ` NOTIFY=… ORCPT=…` for one RCPT TO, when the server lists DSN (RFC 3461 §4.1, §4.2). */
20
- export declare function rcptDsn(dsn: DsnSettings, address: string, offered: boolean): string;
20
+ export declare function rcptDsn(dsn: DsnSettings, address: string, offered: boolean, smtputf8?: boolean): string;
21
21
  //# sourceMappingURL=dsn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dsn.d.ts","sourceRoot":"","sources":["../../src/client/dsn.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAa,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtE,sFAAsF;AACtF,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC5D;AAID,gGAAgG;AAChG,wBAAgB,KAAK,CACpB,KAAK,EAAE;IACN,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB,EACD,EAAE,EAAE,SAAS,MAAM,EAAE,EACrB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,GAC9B,WAAW,CAmCb;AAoCD,mDAAmD;AACnD,eAAO,MAAM,OAAO,GAAI,KAAK,WAAW,KAAG,OACiC,CAAC;AAE7E,uFAAuF;AACvF,wBAAgB,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAMlE;AAED,4FAA4F;AAC5F,wBAAgB,OAAO,CACtB,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,GACd,MAAM,CAeR"}
1
+ {"version":3,"file":"dsn.d.ts","sourceRoot":"","sources":["../../src/client/dsn.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAa,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtE,sFAAsF;AACtF,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC5D;AAID,gGAAgG;AAChG,wBAAgB,KAAK,CACpB,KAAK,EAAE;IACN,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB,EACD,EAAE,EAAE,SAAS,MAAM,EAAE,EACrB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,GAC9B,WAAW,CAmCb;AAyCD,mDAAmD;AACnD,eAAO,MAAM,OAAO,GAAI,KAAK,WAAW,KAAG,OACiC,CAAC;AAE7E,uFAAuF;AACvF,wBAAgB,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAMlE;AA+BD,4FAA4F;AAC5F,wBAAgB,OAAO,CACtB,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,QAAQ,UAAQ,GACd,MAAM,CASR"}
@@ -6,9 +6,11 @@ import {
6
6
  encodeLoginStep,
7
7
  MAX_LINE,
8
8
  LineSplitter,
9
+ utf8OrcptLength,
10
+ encodeUtf8Orcpt,
9
11
  encodeXtext,
10
12
  Outgoing
11
- } from "../chunks/index-twt5myrr.js";
13
+ } from "../chunks/index-byaw0g4k.js";
12
14
  // src/client/address.ts
13
15
  function isMailbox(address) {
14
16
  return typeof address === "string" && parsePath2(`<${address}>`, false, "refuse") !== undefined;
@@ -448,7 +450,8 @@ function checkRecipient({ address, notify, orcpt }, fail) {
448
450
  throw fail(`orcpt of ${address} must be { type, address }, the type a token`);
449
451
  if (typeof orcpt.address !== "string" || orcpt.address === "")
450
452
  throw fail(`orcpt.address of ${address} must be a non-empty string`);
451
- if (orcpt.type.length + 1 + encodeXtext(orcpt.address).length > 500)
453
+ const encoded = orcpt.type.toLowerCase() === "utf-8" ? utf8OrcptLength(orcpt.address) : encodeXtext(orcpt.address).length;
454
+ if (orcpt.type.length + 1 + encoded > 500)
452
455
  throw fail(`orcpt of ${address} is over 500 characters once encoded`);
453
456
  }
454
457
  }
@@ -462,7 +465,21 @@ function mailDsn(dsn, offered) {
462
465
  out += ` ENVID=${encodeXtext(dsn.envid)}`;
463
466
  return out;
464
467
  }
465
- function rcptDsn(dsn, address, offered) {
468
+ function orcptParameter({ type, address }, smtputf8) {
469
+ const kind = type.toLowerCase();
470
+ if (kind === "rfc822")
471
+ return /^[\x20-\x7e]+$/.test(address) ? ` ORCPT=${type};${encodeXtext(address)}` : "";
472
+ if (kind !== "utf-8") {
473
+ const value = `${type};${encodeXtext(address)}`;
474
+ return address.isWellFormed() ? ` ORCPT=${value}` : "";
475
+ }
476
+ const encoded = encodeUtf8Orcpt(address, smtputf8);
477
+ if (encoded === undefined)
478
+ return "";
479
+ const value = `${type};${encoded}`;
480
+ return new TextEncoder().encode(value).length > 500 ? "" : ` ORCPT=${value}`;
481
+ }
482
+ function rcptDsn(dsn, address, offered, smtputf8 = false) {
466
483
  const entry = dsn.recipients.get(address);
467
484
  if (!offered || !entry)
468
485
  return "";
@@ -470,8 +487,8 @@ function rcptDsn(dsn, address, offered) {
470
487
  const { notify, orcpt } = entry;
471
488
  if (notify !== undefined)
472
489
  out += ` NOTIFY=${notify === "NEVER" ? "NEVER" : notify.join(",")}`;
473
- if (orcpt && orcpt.type.toLowerCase() === "rfc822" && /^[\x20-\x7e]+$/.test(orcpt.address))
474
- out += ` ORCPT=rfc822;${encodeXtext(orcpt.address)}`;
490
+ if (orcpt)
491
+ out += orcptParameter(orcpt, smtputf8);
475
492
  return out;
476
493
  }
477
494
 
@@ -868,7 +885,7 @@ async function envelope(socket, settings, content, ready) {
868
885
  const dsn = ready.extensions.has("DSN");
869
886
  const mail = `MAIL FROM:<${settings.from}>${mailParameters(host, settings, content, ready.extensions)}${mailDsn(settings.dsn, dsn)}\r
870
887
  `;
871
- const rcpts = settings.to.map((to) => `RCPT TO:<${to}>${rcptDsn(settings.dsn, to, dsn)}\r
888
+ const rcpts = settings.to.map((to) => `RCPT TO:<${to}>${rcptDsn(settings.dsn, to, dsn, settings.smtputf8)}\r
872
889
  `);
873
890
  const pipelining = ready.extensions.has("PIPELINING");
874
891
  socket.write(pipelining ? mail + rcpts.join("") : mail);
@@ -1049,5 +1066,5 @@ export {
1049
1066
  sendMail
1050
1067
  };
1051
1068
 
1052
- //# debugId=736B8264B277F65B64756E2164756E21
1069
+ //# debugId=3C3AEF3D2B40447E64756E2164756E21
1053
1070
  //# sourceMappingURL=index.js.map
@@ -11,14 +11,14 @@
11
11
  "/**\n * The extensions an EHLO reply names (RFC 5321 §4.1.1.1): every line after\n * the first is a keyword, then its parameters. Keywords in upper case,\n * parameters as written, spaces around them dropped.\n */\nexport function parseEhlo(\n\tlines: readonly string[],\n): ReadonlyMap<string, string> {\n\tconst extensions = new Map<string, string>();\n\tfor (const line of lines.slice(1)) {\n\t\tconst text = line.trim();\n\t\tconst space = text.indexOf(' ');\n\t\tconst keyword = (space < 0 ? text : text.slice(0, space)).toUpperCase();\n\t\tif (keyword === '') continue;\n\t\textensions.set(keyword, space < 0 ? '' : text.slice(space + 1).trim());\n\t}\n\treturn extensions;\n}\n",
12
12
  "import { SmtpError } from '../errors';\nimport { parseEhlo } from '../protocol/ehlo';\nimport { encodeLoginStep, encodePlain } from '../protocol/sasl';\nimport { refused, shown } from './refusal';\nimport type { ClientSettings } from './settings';\nimport type { ClientSocket } from './socket';\nimport type { TlsTarget } from './target';\n\n/** A session past its greeting, EHLO, STARTTLS and AUTH: what the server offers. */\nexport interface Ready {\n\treadonly extensions: ReadonlyMap<string, string>;\n\treadonly authenticated: boolean;\n}\n\n/** EHLO, or HELO when the server refuses EHLO with a 5xx (RFC 5321 §4.1.4). */\nasync function hello(\n\tsocket: ClientSocket,\n\tsettings: ClientSettings,\n\tallowHelo: boolean,\n): Promise<ReadonlyMap<string, string>> {\n\tconst seconds = settings.timeouts.command;\n\tsocket.write(`EHLO ${settings.helo}\\r\\n`);\n\tconst ehlo = await socket.reply('the reply to EHLO', seconds);\n\tif (ehlo.code === 250) {\n\t\treturn parseEhlo(typeof ehlo.text === 'string' ? [ehlo.text] : ehlo.text);\n\t}\n\tif (ehlo.code < 500 || !allowHelo) throw refused(socket.host, 'EHLO', ehlo);\n\tsocket.write(`HELO ${settings.helo}\\r\\n`);\n\tconst helo = await socket.reply('the reply to HELO', seconds);\n\tif (helo.code !== 250) throw refused(socket.host, 'HELO', helo);\n\treturn new Map();\n}\n\n/** STARTTLS when offered (RFC 3207); `required` fails without it, `opportunistic` goes on in clear. */\nasync function startTls(\n\tsocket: ClientSocket,\n\tsettings: ClientSettings,\n\ttls: TlsTarget,\n\textensions: ReadonlyMap<string, string>,\n): Promise<ReadonlyMap<string, string>> {\n\tconst required = settings.tls === 'required';\n\tif (!extensions.has('STARTTLS')) {\n\t\tif (!required) return extensions;\n\t\tthrow new SmtpError(\n\t\t\t'TLS_UNAVAILABLE',\n\t\t\t`${socket.host} does not offer STARTTLS, and tls is 'required'`,\n\t\t);\n\t}\n\tsocket.write('STARTTLS\\r\\n');\n\tconst answer = await socket.reply(\n\t\t'the reply to STARTTLS',\n\t\tsettings.timeouts.command,\n\t);\n\tif (answer.code !== 220) {\n\t\tif (!required) return extensions;\n\t\tthrow new SmtpError(\n\t\t\t'TLS_UNAVAILABLE',\n\t\t\t`${socket.host} refused STARTTLS, and tls is 'required': ${shown(answer)}`,\n\t\t\t{ reply: answer, temporary: true },\n\t\t);\n\t}\n\tawait socket.startTls(tls, settings.timeouts.connect);\n\t// RFC 3207 §4.2: what was learnt in clear is forgotten; EHLO again.\n\treturn hello(socket, settings, false);\n}\n\n/** AUTH PLAIN or LOGIN (RFC 4954), over TLS unless `allowPlaintextAuth`. */\nasync function authenticate(\n\tsocket: ClientSocket,\n\tsettings: ClientSettings,\n\textensions: ReadonlyMap<string, string>,\n): Promise<void> {\n\tconst { auth } = settings;\n\tif (!auth) return;\n\tconst { host } = socket;\n\tif (!socket.secure && !settings.allowPlaintextAuth) {\n\t\tthrow new SmtpError(\n\t\t\t'AUTH_UNAVAILABLE',\n\t\t\t`Refusing to send credentials to ${host} in clear: it did not start TLS (allowPlaintextAuth is for a local test server only)`,\n\t\t);\n\t}\n\tconst offered = (extensions.get('AUTH') ?? '').toUpperCase().split(' ');\n\tconst mechanism =\n\t\tauth.mechanism ??\n\t\t(offered.includes('PLAIN')\n\t\t\t? 'PLAIN'\n\t\t\t: offered.includes('LOGIN')\n\t\t\t\t? 'LOGIN'\n\t\t\t\t: undefined);\n\tif (!mechanism || !offered.includes(mechanism)) {\n\t\tthrow new SmtpError(\n\t\t\t'AUTH_UNAVAILABLE',\n\t\t\t`${host} offers no AUTH mechanism this client speaks (${auth.mechanism ?? 'PLAIN, LOGIN'}): AUTH ${extensions.get('AUTH') ?? 'is not offered'}`,\n\t\t);\n\t}\n\tconst seconds = settings.timeouts.command;\n\tconst steps =\n\t\tmechanism === 'PLAIN'\n\t\t\t? [`AUTH PLAIN ${encodePlain(auth.username, auth.password)}`]\n\t\t\t: [\n\t\t\t\t\t'AUTH LOGIN',\n\t\t\t\t\tencodeLoginStep(auth.username),\n\t\t\t\t\tencodeLoginStep(auth.password),\n\t\t\t\t];\n\tfor (const [i, step] of steps.entries()) {\n\t\tsocket.write(`${step}\\r\\n`);\n\t\tconst answer = await socket.reply('the reply to AUTH', seconds);\n\t\tconst last = i === steps.length - 1;\n\t\tif (answer.code === (last ? 235 : 334)) continue;\n\t\tthrow refused(host, `AUTH ${mechanism}`, answer);\n\t}\n}\n\n/** The greeting, EHLO, STARTTLS and AUTH: a session ready for MAIL FROM. */\nexport async function open(\n\tsocket: ClientSocket,\n\tsettings: ClientSettings,\n\ttls: TlsTarget,\n): Promise<Ready> {\n\tconst greeting = await socket.reply(\n\t\t'the greeting',\n\t\tsettings.timeouts.greeting,\n\t);\n\tif (greeting.code !== 220) {\n\t\tthrow refused(socket.host, 'the connection', greeting);\n\t}\n\tlet extensions = await hello(socket, settings, true);\n\tif (!socket.secure && settings.tls !== 'none') {\n\t\textensions = await startTls(socket, settings, tls, extensions);\n\t}\n\tawait authenticate(socket, settings, extensions);\n\treturn { extensions, authenticated: settings.auth !== undefined };\n}\n",
13
13
  "import { hostname as machineName } from 'node:os';\nimport { SmtpError } from '../errors';\nimport { isHelloName, parsePath } from '../protocol/path';\nimport { isMailbox } from './address';\nimport { type DsnSettings, dsnOf } from './dsn';\nimport type {\n\tMxDestination,\n\tSendMailAuth,\n\tSendMailEnvelope,\n\tSendMailOptions,\n\tSendMailTimeouts,\n\tTlsMode,\n} from './options';\n\n/** The longest delay `setTimeout` takes, in seconds: past 2^31 − 1 ms it fires after 1 ms. */\nexport const MAX_SECONDS = Math.floor(2_147_483_647 / 1000);\n\n/** RFC 5321 §4.5.3.2's timeouts; `connect` is this client's own. */\nconst TIMEOUTS: Required<SendMailTimeouts> = {\n\tconnect: 30,\n\tgreeting: 300,\n\tcommand: 300,\n\tmail: 300,\n\trcpt: 300,\n\tdataStart: 120,\n\tdataBlock: 180,\n\tdataEnd: 600,\n};\n\n/** The options, checked, with their defaults; timeouts in seconds. */\nexport interface ClientSettings {\n\treadonly from: string;\n\treadonly to: readonly string[];\n\treadonly helo: string;\n\treadonly tls: TlsMode;\n\treadonly secure: boolean;\n\treadonly ca?: readonly string[];\n\treadonly auth?: SendMailAuth;\n\treadonly allowPlaintextAuth: boolean;\n\treadonly size?: number;\n\treadonly dsn: DsnSettings;\n\t/** An address is not ASCII, or `smtputf8` asked for it. */\n\treadonly smtputf8: boolean;\n\treadonly normalizeLineEnds: boolean;\n\treadonly timeouts: Required<SendMailTimeouts>;\n\treadonly deadline: number;\n}\n\n/** `INVALID_OPTION`, for an option `sendMail` cannot take. */\nexport const invalid = (message: string) =>\n\tnew SmtpError('INVALID_OPTION', `sendMail(): ${message}`);\n\nfunction seconds(name: string, value: unknown, fallback: number): number {\n\tif (value === undefined) return fallback;\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 ${String(value)}`,\n\t\t);\n\t}\n\treturn value;\n}\n\nfunction timeoutsOf(given: SendMailTimeouts = {}): Required<SendMailTimeouts> {\n\tconst out: Record<string, number> = {};\n\tfor (const [name, fallback] of Object.entries(TIMEOUTS)) {\n\t\tout[name] = seconds(\n\t\t\t`timeouts.${name}`,\n\t\t\tgiven[name as keyof SendMailTimeouts],\n\t\t\tfallback,\n\t\t);\n\t}\n\treturn out as Required<SendMailTimeouts>;\n}\n\n/**\n * `from` or a recipient, checked as an RFC 5321 path, since it is written\n * into `MAIL FROM:<…>` or `RCPT TO:<…>` as it is. A source route is refused\n * (§4.1.1.3: clients should not send one), with a message of its own when\n * the route is otherwise valid. What it takes, past the null sender, is\n * exactly what `isMailbox` says yes to: the two share one predicate.\n */\nfunction address(value: unknown, allowNull: boolean): string {\n\tif (allowNull && value === '') return '';\n\tif (isMailbox(value)) return value;\n\tconst text = typeof value === 'string' ? value : '';\n\tconst routed = typeof value === 'string' && parsePath(`<${text}>`, false);\n\tif (routed) {\n\t\tthrow invalid(\n\t\t\t`${JSON.stringify(value)} holds a source route (@host:), which RFC 5321 says a client should not send: pass ${JSON.stringify(`${routed.local}@${text.slice(text.lastIndexOf('@') + 1)}`)} alone`,\n\t\t);\n\t}\n\tthrow invalid(\n\t\t`${JSON.stringify(value)} is not an address (local@domain${allowNull ? \", or '' for a bounce\" : ''})`,\n\t);\n}\n\n/**\n * `helo`, checked. By MX it is required: the machine's name (such as\n * `laptop.local`) is rarely a name that resolves back to the sender, which\n * receiving hosts penalise, and it would tell them the machine's name.\n */\nfunction heloOf(value: string | undefined, byMx: boolean): string {\n\tif (value !== undefined) {\n\t\tif (!isHelloName(value))\n\t\t\tthrow invalid(`helo \"${value}\" is not a host name`);\n\t\treturn value;\n\t}\n\tif (byMx)\n\t\tthrow invalid(\n\t\t\t\"helo is required for delivery by MX: pass your server's public name, such as helo: 'mail.example.com'\",\n\t\t);\n\tconst name = machineName();\n\treturn isHelloName(name) ? name : 'localhost';\n}\n\nfunction authOf(auth: SendMailAuth | undefined): SendMailAuth | undefined {\n\tif (auth === undefined) return undefined;\n\tconst { username, password, mechanism } = auth;\n\tif (typeof username !== 'string' || username === '')\n\t\tthrow invalid('auth.username must be a non-empty string');\n\tif (typeof password !== 'string' || password === '')\n\t\tthrow invalid('auth.password must be a non-empty string');\n\tif (mechanism !== undefined && mechanism !== 'PLAIN' && mechanism !== 'LOGIN')\n\t\tthrow invalid(\n\t\t\t`auth.mechanism must be 'PLAIN' or 'LOGIN', not ${mechanism}`,\n\t\t);\n\treturn auth;\n}\n\nfunction tlsOf(options: SendMailOptions, plaintextAuth: boolean): TlsMode {\n\tconst secure = options.secure === true;\n\tconst tls =\n\t\toptions.tls ??\n\t\t(secure || (options.auth && !plaintextAuth) ? 'required' : 'opportunistic');\n\tif (tls !== 'opportunistic' && tls !== 'required' && tls !== 'none')\n\t\tthrow invalid(\n\t\t\t`tls must be 'opportunistic', 'required' or 'none', not ${tls}`,\n\t\t);\n\tif (tls === 'none' && secure)\n\t\tthrow invalid(\n\t\t\t\"secure is TLS from the first byte: it cannot go with tls: 'none'\",\n\t\t);\n\tif (tls === 'none' && options.auth && !plaintextAuth)\n\t\tthrow invalid(\n\t\t\t\"auth with tls: 'none' would send the password in clear; pass allowPlaintextAuth: true for a local test server\",\n\t\t);\n\tif (tls === 'opportunistic' && options.auth && !plaintextAuth)\n\t\tthrow invalid(\n\t\t\t\"auth with tls: 'opportunistic' would send the password to a server whose certificate is not checked; leave tls out to check it, or pass allowPlaintextAuth: true for a local test server\",\n\t\t);\n\treturn tls;\n}\n\n/** Checks every option; throws an `SmtpError` (`INVALID_OPTION`) on the first wrong one. */\nexport function settingsOf(options: SendMailOptions): ClientSettings {\n\tif (typeof options !== 'object' || options === null)\n\t\tthrow invalid('options must be an object');\n\tconst from = address(options.from, true);\n\tconst list = typeof options.to === 'string' ? [options.to] : options.to;\n\tif (!Array.isArray(list) || list.length === 0)\n\t\tthrow invalid('to must name one recipient or more');\n\tconst to = list.map((recipient) => address(recipient, false));\n\tconst allowPlaintextAuth = options.allowPlaintextAuth === true;\n\tconst { size } = options;\n\tif (size !== undefined && (!Number.isSafeInteger(size) || size < 0))\n\t\tthrow invalid(`size must be a number of bytes, not ${size}`);\n\tconst ca = options.ca === undefined ? undefined : [options.ca].flat();\n\tconst auth = authOf(options.auth);\n\treturn {\n\t\tfrom,\n\t\tto,\n\t\thelo: heloOf(options.helo, byMx(options)),\n\t\ttls: tlsOf(options, allowPlaintextAuth),\n\t\tsecure: options.secure === true,\n\t\t...(ca ? { ca } : {}),\n\t\t...(auth ? { auth } : {}),\n\t\tallowPlaintextAuth,\n\t\t...(size === undefined ? {} : { size }),\n\t\tdsn: dsnOf(options, to, invalid),\n\t\tsmtputf8:\n\t\t\toptions.smtputf8 === true ||\n\t\t\t[from, ...to].some((text) => /[^ -~]/.test(text)),\n\t\tnormalizeLineEnds: options.normalizeLineEnds === true,\n\t\ttimeouts: timeoutsOf(options.timeouts),\n\t\tdeadline: seconds('deadline', options.deadline, 1800),\n\t};\n}\n\n/** Whether the options name a domain to deliver to by MX, not a host. */\nexport const byMx = (\n\toptions: SendMailOptions,\n): options is SendMailEnvelope & MxDestination =>\n\t!('host' in options && options.host !== undefined);\n\n/** A port: an integer from 1 to 65535. */\nexport function portOf(port: number | undefined, fallback: number): number {\n\tif (port === undefined) return fallback;\n\tif (!Number.isInteger(port) || port < 1 || port > 65535)\n\t\tthrow invalid(`port must be an integer from 1 to 65535, not ${port}`);\n\treturn port;\n}\n",
14
- "// The value rules repeat packages/smtp/src/server/dsn-params.ts, packages/jmap/src/submission/dsn.ts and\n// packages/queue/src/contract/dsn-checks.ts (AGENTS.md, Deliberate duplications); this copy checks the client's own options.\nimport { encodeXtext } from '../protocol/xtext';\nimport type { DsnNotify, EnvelopeRecipient } from '../server/options';\n\n/** The DSN parameters of the message and of its recipients (RFC 3461 §4), checked. */\nexport interface DsnSettings {\n\treadonly ret?: 'FULL' | 'HDRS';\n\treadonly envid?: string;\n\t/** The recipients that carry `NOTIFY` or `ORCPT`, by address. */\n\treadonly recipients: ReadonlyMap<string, EnvelopeRecipient>;\n}\n\nconst EVENTS: readonly string[] = ['SUCCESS', 'FAILURE', 'DELAY'];\n\n/** Checks `ret`, `envid` and `recipients`; `fail` throws the `INVALID_OPTION` for a message. */\nexport function dsnOf(\n\tgiven: {\n\t\tret?: unknown;\n\t\tenvid?: unknown;\n\t\trecipients?: unknown;\n\t},\n\tto: readonly string[],\n\tfail: (message: string) => Error,\n): DsnSettings {\n\tconst { ret, envid, recipients } = given;\n\tif (ret !== undefined && ret !== 'FULL' && ret !== 'HDRS')\n\t\tthrow fail(`ret must be 'FULL' or 'HDRS', not ${String(ret)}`);\n\tif (\n\t\tenvid !== undefined &&\n\t\t(typeof envid !== 'string' ||\n\t\t\t!/^[ -~]{1,100}$/.test(envid) ||\n\t\t\t// RFC 3461 §4.4: \"The ENVID parameter MAY be up to 100 characters in length\", as sent.\n\t\t\tencodeXtext(envid).length > 100)\n\t)\n\t\tthrow fail(\n\t\t\t'envid must be 1 to 100 printable ASCII characters, at most 100 once encoded as xtext',\n\t\t);\n\tconst byAddress = new Map<string, EnvelopeRecipient>();\n\tif (recipients !== undefined) {\n\t\tif (!Array.isArray(recipients))\n\t\t\tthrow fail('recipients must be an array of { address, notify, orcpt }');\n\t\tfor (const entry of recipients as EnvelopeRecipient[]) {\n\t\t\tconst address = entry?.address;\n\t\t\tif (typeof address !== 'string' || !to.includes(address))\n\t\t\t\tthrow fail(\n\t\t\t\t\t`recipients names ${JSON.stringify(address)}, which is not in to`,\n\t\t\t\t);\n\t\t\tif (byAddress.has(address))\n\t\t\t\tthrow fail(`recipients names ${address} twice`);\n\t\t\tcheckRecipient(entry, fail);\n\t\t\tbyAddress.set(address, entry);\n\t\t}\n\t}\n\treturn {\n\t\t...(ret ? { ret } : {}),\n\t\t...(envid === undefined ? {} : { envid }),\n\t\trecipients: byAddress,\n\t};\n}\n\nfunction checkRecipient(\n\t{ address, notify, orcpt }: EnvelopeRecipient,\n\tfail: (message: string) => Error,\n): void {\n\tif (notify !== undefined && notify !== 'NEVER') {\n\t\tconst events: readonly unknown[] = Array.isArray(notify) ? notify : [];\n\t\tif (\n\t\t\tevents.length === 0 ||\n\t\t\tevents.some(\n\t\t\t\t(e, i) => !EVENTS.includes(e as string) || events.indexOf(e) !== i,\n\t\t\t)\n\t\t)\n\t\t\tthrow fail(\n\t\t\t\t`notify of ${address} must be 'NEVER' or a list of 'SUCCESS', 'FAILURE', 'DELAY', each once`,\n\t\t\t);\n\t}\n\tif (orcpt !== undefined) {\n\t\tif (\n\t\t\ttypeof orcpt !== 'object' ||\n\t\t\torcpt === null ||\n\t\t\ttypeof orcpt.type !== 'string' ||\n\t\t\t!/^[A-Za-z0-9-]+$/.test(orcpt.type)\n\t\t)\n\t\t\tthrow fail(\n\t\t\t\t`orcpt of ${address} must be { type, address }, the type a token`,\n\t\t\t);\n\t\tif (typeof orcpt.address !== 'string' || orcpt.address === '')\n\t\t\tthrow fail(`orcpt.address of ${address} must be a non-empty string`);\n\t\t// RFC 3461 §4.2: \"The entire ORCPT parameter MAY be up to 500 characters in length\", as sent.\n\t\tif (orcpt.type.length + 1 + encodeXtext(orcpt.address).length > 500)\n\t\t\tthrow fail(`orcpt of ${address} is over 500 characters once encoded`);\n\t}\n}\n\n/** Whether the options carry any DSN parameter. */\nexport const asksDsn = (dsn: DsnSettings): boolean =>\n\tdsn.ret !== undefined || dsn.envid !== undefined || dsn.recipients.size > 0;\n\n/** ` RET=… ENVID=…` for MAIL FROM, when the server lists DSN (RFC 3461 §4.3, §4.4). */\nexport function mailDsn(dsn: DsnSettings, offered: boolean): string {\n\tif (!offered) return '';\n\tlet out = '';\n\tif (dsn.ret) out += ` RET=${dsn.ret}`;\n\tif (dsn.envid !== undefined) out += ` ENVID=${encodeXtext(dsn.envid)}`;\n\treturn out;\n}\n\n/** ` NOTIFY=… ORCPT=…` for one RCPT TO, when the server lists DSN (RFC 3461 §4.1, §4.2). */\nexport function rcptDsn(\n\tdsn: DsnSettings,\n\taddress: string,\n\toffered: boolean,\n): string {\n\tconst entry = dsn.recipients.get(address);\n\tif (!offered || !entry) return '';\n\tlet out = '';\n\tconst { notify, orcpt } = entry;\n\tif (notify !== undefined)\n\t\tout += ` NOTIFY=${notify === 'NEVER' ? 'NEVER' : (notify as readonly DsnNotify[]).join(',')}`;\n\t// RFC 6533's address types and non-ASCII addresses are not sent yet.\n\tif (\n\t\torcpt &&\n\t\torcpt.type.toLowerCase() === 'rfc822' &&\n\t\t/^[\\x20-\\x7e]+$/.test(orcpt.address)\n\t)\n\t\tout += ` ORCPT=rfc822;${encodeXtext(orcpt.address)}`;\n\treturn out;\n}\n",
14
+ "// The value rules (and utf8OrcptLength, RFC 6533) repeat packages/smtp/src/server/dsn-params.ts, packages/jmap/src/submission/dsn.ts and\n// packages/queue/src/contract/dsn-checks.ts (AGENTS.md, Deliberate duplications); this copy checks the client's own options.\nimport { encodeUtf8Orcpt, utf8OrcptLength } from '../protocol/orcpt';\nimport { encodeXtext } from '../protocol/xtext';\nimport type { DsnNotify, EnvelopeRecipient } from '../server/options';\n\n/** The DSN parameters of the message and of its recipients (RFC 3461 §4), checked. */\nexport interface DsnSettings {\n\treadonly ret?: 'FULL' | 'HDRS';\n\treadonly envid?: string;\n\t/** The recipients that carry `NOTIFY` or `ORCPT`, by address. */\n\treadonly recipients: ReadonlyMap<string, EnvelopeRecipient>;\n}\n\nconst EVENTS: readonly string[] = ['SUCCESS', 'FAILURE', 'DELAY'];\n\n/** Checks `ret`, `envid` and `recipients`; `fail` throws the `INVALID_OPTION` for a message. */\nexport function dsnOf(\n\tgiven: {\n\t\tret?: unknown;\n\t\tenvid?: unknown;\n\t\trecipients?: unknown;\n\t},\n\tto: readonly string[],\n\tfail: (message: string) => Error,\n): DsnSettings {\n\tconst { ret, envid, recipients } = given;\n\tif (ret !== undefined && ret !== 'FULL' && ret !== 'HDRS')\n\t\tthrow fail(`ret must be 'FULL' or 'HDRS', not ${String(ret)}`);\n\tif (\n\t\tenvid !== undefined &&\n\t\t(typeof envid !== 'string' ||\n\t\t\t!/^[ -~]{1,100}$/.test(envid) ||\n\t\t\t// RFC 3461 §4.4: \"The ENVID parameter MAY be up to 100 characters in length\", as sent.\n\t\t\tencodeXtext(envid).length > 100)\n\t)\n\t\tthrow fail(\n\t\t\t'envid must be 1 to 100 printable ASCII characters, at most 100 once encoded as xtext',\n\t\t);\n\tconst byAddress = new Map<string, EnvelopeRecipient>();\n\tif (recipients !== undefined) {\n\t\tif (!Array.isArray(recipients))\n\t\t\tthrow fail('recipients must be an array of { address, notify, orcpt }');\n\t\tfor (const entry of recipients as EnvelopeRecipient[]) {\n\t\t\tconst address = entry?.address;\n\t\t\tif (typeof address !== 'string' || !to.includes(address))\n\t\t\t\tthrow fail(\n\t\t\t\t\t`recipients names ${JSON.stringify(address)}, which is not in to`,\n\t\t\t\t);\n\t\t\tif (byAddress.has(address))\n\t\t\t\tthrow fail(`recipients names ${address} twice`);\n\t\t\tcheckRecipient(entry, fail);\n\t\t\tbyAddress.set(address, entry);\n\t\t}\n\t}\n\treturn {\n\t\t...(ret ? { ret } : {}),\n\t\t...(envid === undefined ? {} : { envid }),\n\t\trecipients: byAddress,\n\t};\n}\n\nfunction checkRecipient(\n\t{ address, notify, orcpt }: EnvelopeRecipient,\n\tfail: (message: string) => Error,\n): void {\n\tif (notify !== undefined && notify !== 'NEVER') {\n\t\tconst events: readonly unknown[] = Array.isArray(notify) ? notify : [];\n\t\tif (\n\t\t\tevents.length === 0 ||\n\t\t\tevents.some(\n\t\t\t\t(e, i) => !EVENTS.includes(e as string) || events.indexOf(e) !== i,\n\t\t\t)\n\t\t)\n\t\t\tthrow fail(\n\t\t\t\t`notify of ${address} must be 'NEVER' or a list of 'SUCCESS', 'FAILURE', 'DELAY', each once`,\n\t\t\t);\n\t}\n\tif (orcpt !== undefined) {\n\t\tif (\n\t\t\ttypeof orcpt !== 'object' ||\n\t\t\torcpt === null ||\n\t\t\ttypeof orcpt.type !== 'string' ||\n\t\t\t!/^[A-Za-z0-9-]+$/.test(orcpt.type)\n\t\t)\n\t\t\tthrow fail(\n\t\t\t\t`orcpt of ${address} must be { type, address }, the type a token`,\n\t\t\t);\n\t\tif (typeof orcpt.address !== 'string' || orcpt.address === '')\n\t\t\tthrow fail(`orcpt.address of ${address} must be a non-empty string`);\n\t\t// RFC 3461 §4.2: \"The entire ORCPT parameter MAY be up to 500 characters in length\", as sent.\n\t\t// For utf-8 (RFC 6533), the length of the unitext form, as the server counts it.\n\t\tconst encoded =\n\t\t\torcpt.type.toLowerCase() === 'utf-8'\n\t\t\t\t? utf8OrcptLength(orcpt.address)\n\t\t\t\t: encodeXtext(orcpt.address).length;\n\t\tif (orcpt.type.length + 1 + encoded > 500)\n\t\t\tthrow fail(`orcpt of ${address} is over 500 characters once encoded`);\n\t}\n}\n\n/** Whether the options carry any DSN parameter. */\nexport const asksDsn = (dsn: DsnSettings): boolean =>\n\tdsn.ret !== undefined || dsn.envid !== undefined || dsn.recipients.size > 0;\n\n/** ` RET=… ENVID=…` for MAIL FROM, when the server lists DSN (RFC 3461 §4.3, §4.4). */\nexport function mailDsn(dsn: DsnSettings, offered: boolean): string {\n\tif (!offered) return '';\n\tlet out = '';\n\tif (dsn.ret) out += ` RET=${dsn.ret}`;\n\tif (dsn.envid !== undefined) out += ` ENVID=${encodeXtext(dsn.envid)}`;\n\treturn out;\n}\n\n/**\n * ` ORCPT=…` or nothing: `rfc822` and an ASCII address as xtext; any other\n * type as xtext of the address octets, type case kept (RFC 3461 §5.2(d)); `utf-8` per\n * RFC 6533 §3, `utf-8-addr-unitext` when the transaction uses SMTPUTF8 (the\n * server of this transaction lists it), else `utf-8-addr-xtext`. Left out\n * rather than refused: a non-ASCII `rfc822` address, a lone\n * surrogate (any type), or a `utf-8` value over 500 characters (its escapes can be longer\n * than the xtext the options were checked against; RFC 3461 §4.2).\n */\nfunction orcptParameter(\n\t{ type, address }: NonNullable<EnvelopeRecipient['orcpt']>,\n\tsmtputf8: boolean,\n): string {\n\tconst kind = type.toLowerCase();\n\tif (kind === 'rfc822')\n\t\treturn /^[\\x20-\\x7e]+$/.test(address)\n\t\t\t? ` ORCPT=${type};${encodeXtext(address)}`\n\t\t\t: '';\n\tif (kind !== 'utf-8') {\n\t\t// RFC 3461 §5.2(d): relayed identical, type case kept; any octets fit xtext, a lone surrogate does not round-trip.\n\t\tconst value = `${type};${encodeXtext(address)}`;\n\t\treturn address.isWellFormed() ? ` ORCPT=${value}` : '';\n\t}\n\tconst encoded = encodeUtf8Orcpt(address, smtputf8);\n\tif (encoded === undefined) return '';\n\tconst value = `${type};${encoded}`;\n\treturn new TextEncoder().encode(value).length > 500 ? '' : ` ORCPT=${value}`;\n}\n\n/** ` NOTIFY=… ORCPT=…` for one RCPT TO, when the server lists DSN (RFC 3461 §4.1, §4.2). */\nexport function rcptDsn(\n\tdsn: DsnSettings,\n\taddress: string,\n\toffered: boolean,\n\tsmtputf8 = false,\n): string {\n\tconst entry = dsn.recipients.get(address);\n\tif (!offered || !entry) return '';\n\tlet out = '';\n\tconst { notify, orcpt } = entry;\n\tif (notify !== undefined)\n\t\tout += ` NOTIFY=${notify === 'NEVER' ? 'NEVER' : (notify as readonly DsnNotify[]).join(',')}`;\n\tif (orcpt) out += orcptParameter(orcpt, smtputf8);\n\treturn out;\n}\n",
15
15
  "import { LineSplitter, MAX_LINE } from '../protocol/lines';\nimport type { Reply } from '../protocol/reply';\nimport { ReplyReader } from '../protocol/reply-reader';\n\n/** The most bytes a server may send in one session, every reply together. */\nexport const MAX_REPLY_BYTES = 1024 * 1024;\n\n/**\n * What a server sent, put together into replies, each bounded: `MAX_LINE`\n * a line, `MAX_REPLY_LINES` a reply, `MAX_REPLY_BYTES` in all. One pass\n * over the bytes, whatever the chunks.\n */\nexport class Inbox {\n\treadonly #lines = new LineSplitter();\n\treadonly #reader = new ReplyReader();\n\treadonly #replies: Reply[] = [];\n\t#received = 0;\n\n\t/** Takes the next bytes; says what is wrong with them, if they are not replies. */\n\tpush(chunk: Uint8Array): string | undefined {\n\t\tthis.#received += chunk.length;\n\t\tif (this.#received > MAX_REPLY_BYTES) {\n\t\t\treturn `more than ${MAX_REPLY_BYTES} bytes of replies`;\n\t\t}\n\t\tthis.#lines.push(chunk);\n\t\tfor (let event = this.#lines.next(); event; event = this.#lines.next()) {\n\t\t\tif ('tooLong' in event)\n\t\t\t\treturn `a reply line longer than ${MAX_LINE} bytes`;\n\t\t\tconst result = this.#reader.line(event.line);\n\t\t\tif (result === undefined) continue;\n\t\t\tif ('error' in result) return result.error;\n\t\t\tthis.#replies.push(result);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/** The next complete reply. */\n\tshift(): Reply | undefined {\n\t\treturn this.#replies.shift();\n\t}\n\n\t/** Bytes or replies not yet read. */\n\tget holding(): boolean {\n\t\treturn this.#lines.holding || this.#replies.length > 0;\n\t}\n}\n",
16
16
  "import type { TLSOptions } from 'bun';\n\n/** Where to connect: `host` names the server in errors, and is what TLS checks. */\nexport interface Endpoint {\n\treadonly host: string;\n\treadonly address: string;\n\treadonly port: number;\n}\n\n/** How to start TLS: check the certificate against `servername`, or not. */\nexport interface TlsTarget {\n\treadonly servername: string;\n\treadonly verify: boolean;\n\treadonly ca?: readonly string[];\n}\n\n/** Bun's TLS options for a target: `rejectUnauthorized` only when checking (RFC 7435 otherwise). */\nexport const tlsOptions = (tls: TlsTarget): TLSOptions => ({\n\tserverName: tls.servername,\n\trejectUnauthorized: tls.verify,\n\t...(tls.ca ? { ca: [...tls.ca] } : {}),\n});\n\n/** Why a connection or a handshake failed, from what Bun gave: its code, else its message. */\nexport const reason = (error: unknown): string =>\n\t(error as { code?: string } | null)?.code ??\n\t(error as Error | null)?.message ??\n\t'the handshake failed';\n\n/** The whole delivery's deadline. */\nexport class Clock {\n\treadonly seconds: number;\n\treadonly #end: number;\n\n\tconstructor(seconds: number) {\n\t\tthis.seconds = seconds;\n\t\tthis.#end = performance.now() + seconds * 1000;\n\t}\n\n\t/**\n\t * `promise`, or what `expire` gives, thrown once `ms` passed or the\n\t * deadline did, whichever comes first; `deadline` says which it was.\n\t */\n\tasync race<T>(\n\t\tpromise: Promise<T>,\n\t\tms: number,\n\t\texpire: (deadline: boolean) => Error,\n\t): Promise<T> {\n\t\tconst left = this.#end - performance.now();\n\t\tconst deadline = left < ms;\n\t\tms = Math.min(ms, left);\n\t\tif (ms <= 0) throw expire(deadline);\n\t\tlet timer: Timer | undefined;\n\t\tconst expired = new Promise<never>((_, reject) => {\n\t\t\ttimer = setTimeout(() => reject(expire(deadline)), ms);\n\t\t});\n\t\ttry {\n\t\t\treturn await Promise.race([promise, expired]);\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t}\n}\n",
17
17
  "import type { Socket, SocketHandler } from 'bun';\nimport { SmtpError } from '../errors';\nimport { Outgoing } from '../io/outgoing';\nimport type { Reply } from '../protocol/reply';\nimport { Inbox } from './inbox';\nimport { badReply, lost, refused, timedOut, tlsFailed } from './refusal';\nimport {\n\ttype Clock,\n\ttype Endpoint,\n\treason,\n\ttype TlsTarget,\n\ttlsOptions,\n} from './target';\n\n/**\n * A connection to an SMTP server: replies read as they come into an\n * `Inbox`, which bounds them; every wait bounded by its timeout and the\n * deadline. Whatever the server does ends in a reply or an `SmtpError`,\n * never in an exception of Bun's.\n */\nexport class ClientSocket {\n\treadonly host: string;\n\treadonly #clock: Clock;\n\t#socket: Socket<undefined> | undefined;\n\t#outgoing = new Outgoing(() => 0);\n\t/** Which socket's events count: the TLS one's after STARTTLS. */\n\t#tls = false;\n\treadonly #inbox = new Inbox();\n\t#failure: SmtpError | undefined;\n\t#closed = false;\n\t#wake: (() => void) | undefined;\n\t#handshaking: ((ok: boolean, error: unknown) => void) | undefined;\n\t/** Resolves when the connection is gone. */\n\treadonly #gone = Promise.withResolvers<void>();\n\tsecure = false;\n\t/** The certificate checked out against the host name. */\n\tverified = false;\n\n\tprivate constructor(host: string, clock: Clock) {\n\t\tthis.host = host;\n\t\tthis.#clock = clock;\n\t}\n\n\t/** Connects, with TLS from the first byte when `tls` is given. */\n\tstatic async open(\n\t\tendpoint: Endpoint,\n\t\ttls: TlsTarget | undefined,\n\t\tseconds: number,\n\t\tclock: Clock,\n\t): Promise<ClientSocket> {\n\t\tconst client = new ClientSocket(endpoint.host, clock);\n\t\tclient.#tls = tls !== undefined;\n\t\tconst handshake = tls ? client.#expectHandshake(tls) : undefined;\n\t\thandshake?.catch(() => {});\n\t\tconst { address, port } = endpoint;\n\t\tconst connecting = Bun.connect({\n\t\t\thostname: address,\n\t\t\tport,\n\t\t\t...(tls ? { tls: tlsOptions(tls) } : {}),\n\t\t\tsocket: client.#handlers(tls !== undefined),\n\t\t});\n\t\ttry {\n\t\t\tclient.#use(await client.#race(connecting, seconds, 'the connection'));\n\t\t} catch (error) {\n\t\t\tconnecting.then(\n\t\t\t\t(socket) => socket.terminate(),\n\t\t\t\t() => {},\n\t\t\t);\n\t\t\tif (error instanceof SmtpError) throw error;\n\t\t\tthrow new SmtpError(\n\t\t\t\t'CONNECTION_FAILED',\n\t\t\t\t`Could not connect to ${endpoint.host} (${address}:${port}): ${reason(error)}`,\n\t\t\t);\n\t\t}\n\t\tif (handshake) {\n\t\t\t// A handshake that failed before the connection resolved left it open.\n\t\t\tawait client.#race(handshake, seconds, 'the TLS handshake').catch((e) => {\n\t\t\t\tclient.close(true);\n\t\t\t\tthrow e;\n\t\t\t});\n\t\t}\n\t\treturn client;\n\t}\n\n\t#use(socket: Socket<undefined>): void {\n\t\tthis.#socket = socket;\n\t\tthis.#outgoing = new Outgoing((bytes) => socket.write(bytes));\n\t}\n\n\t/** Bun's events for one socket: only the live one's count, the clear one's or, after STARTTLS, the TLS one's. */\n\t#handlers(tls: boolean): SocketHandler<undefined> {\n\t\tconst live =\n\t\t\t<A extends unknown[]>(run: (...args: A) => void) =>\n\t\t\t(...args: A) => {\n\t\t\t\tif (this.#tls === tls) run(...args);\n\t\t\t};\n\t\treturn {\n\t\t\tdata: live((_, chunk: Uint8Array) => this.#receive(chunk)),\n\t\t\tdrain: live(() => this.#outgoing.drain()),\n\t\t\tclose: live(() => this.#lost()),\n\t\t\terror: live(() => this.#lost()),\n\t\t\thandshake: live((_, ok: boolean, error: Error | null) =>\n\t\t\t\tthis.#handshaking?.(ok, error),\n\t\t\t),\n\t\t};\n\t}\n\n\t#expectHandshake(tls: TlsTarget): Promise<void> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.#handshaking = (ok, error) => {\n\t\t\t\tthis.#handshaking = undefined;\n\t\t\t\tif (this.#closed || (tls.verify && !ok)) {\n\t\t\t\t\tconst why = this.#closed ? 'the connection closed' : reason(error);\n\t\t\t\t\treturn reject(this.#fail(tlsFailed(this.host, why)));\n\t\t\t\t}\n\t\t\t\tthis.secure = true;\n\t\t\t\tthis.verified = ok && error === null;\n\t\t\t\tresolve();\n\t\t\t};\n\t\t});\n\t}\n\n\t#receive(chunk: Uint8Array): void {\n\t\tif (this.#failure || this.#closed) return;\n\t\tconst wrong = this.#inbox.push(chunk);\n\t\tif (wrong) this.#fail(badReply(this.host, wrong));\n\t\telse this.#wakeUp();\n\t}\n\n\t#wakeUp(): void {\n\t\tconst wake = this.#wake;\n\t\tthis.#wake = undefined;\n\t\twake?.();\n\t}\n\n\t#lost(): void {\n\t\tthis.#closed = true;\n\t\tthis.#gone.resolve();\n\t\tthis.#outgoing.clear();\n\t\tthis.#handshaking?.(false, null);\n\t\tthis.#wakeUp();\n\t}\n\n\t/** Records the first failure, hangs up, and returns it to throw. */\n\t#fail(error: SmtpError): SmtpError {\n\t\tthis.#failure ??= error;\n\t\tthis.#socket?.terminate();\n\t\tthis.#lost();\n\t\treturn this.#failure;\n\t}\n\n\t/**\n\t * `promise`, or a `TIMEOUT` once `seconds` passed since `start` (now by\n\t * default), or the deadline did, whichever comes first.\n\t */\n\t#race<T>(\n\t\tpromise: Promise<T>,\n\t\tseconds: number,\n\t\twhat: string,\n\t\tstart = performance.now(),\n\t): Promise<T> {\n\t\tconst ms = start + seconds * 1000 - performance.now();\n\t\tconst { host } = this;\n\t\tconst deadline = this.#clock.seconds;\n\t\treturn this.#clock.race(promise, ms, (passed) =>\n\t\t\tthis.#fail(timedOut(host, what, seconds, passed ? deadline : undefined)),\n\t\t);\n\t}\n\n\t/** The next reply, within `seconds` all told; `what` names it in errors: `the greeting`, `the reply to MAIL FROM`. */\n\tasync reply(what: string, seconds: number): Promise<Reply> {\n\t\tconst start = performance.now();\n\t\tfor (;;) {\n\t\t\tconst next = this.#inbox.shift();\n\t\t\tif (next) return next;\n\t\t\tif (this.#failure) throw this.#failure;\n\t\t\tif (this.#closed) throw this.#fail(lost(this.host, what));\n\t\t\tawait this.#race(\n\t\t\t\tnew Promise<void>((wake) => {\n\t\t\t\t\tthis.#wake = wake;\n\t\t\t\t}),\n\t\t\t\tseconds,\n\t\t\t\twhat,\n\t\t\t\tstart,\n\t\t\t);\n\t\t}\n\t}\n\n\t/** One of the caller's promises — the message stream's next part — bounded as a reply is, and cut short if the connection goes (a hang-up after it settled is none of its business). */\n\twithin<T>(promise: Promise<T>, seconds: number, what: string): Promise<T> {\n\t\tconst over = new AbortController();\n\t\tconst gone = this.#gone.promise.then(() => {\n\t\t\tif (!over.signal.aborted) throw this.#hungUp(lost(this.host, what));\n\t\t});\n\t\tconst race = Promise.race([promise, gone]) as Promise<T>;\n\t\t// Once the deadline passed, the clock throws before it listens to `race`, and its expiry hangs up (`#fail`), which rejects `gone` and so `race` unheard.\n\t\trace.catch(() => undefined);\n\t\treturn this.#race(race, seconds, what).finally(() => over.abort());\n\t}\n\n\t/** Queues bytes for the server; nothing once the connection failed. Whether it did queue them. */\n\twrite(data: Uint8Array | string): boolean {\n\t\tif (this.#failure || this.#closed) return false;\n\t\tthis.#outgoing.write(\n\t\t\ttypeof data === 'string' ? new TextEncoder().encode(data) : data,\n\t\t);\n\t\treturn true;\n\t}\n\n\t/** Waits until the server took everything written. */\n\tasync drained(seconds: number): Promise<void> {\n\t\tawait this.#race(\n\t\t\tthis.#outgoing.drained(),\n\t\t\tseconds,\n\t\t\t'the server to take the message',\n\t\t);\n\t\tif (this.#failure || this.#closed) throw this.#hungUp(lost(this.host));\n\t}\n\n\t/** Why the connection is gone during DATA: its failure, the refusal a server sent before hanging up, or `lost`. */\n\t#hungUp(otherwise: SmtpError): SmtpError {\n\t\tif (this.#failure) return this.#failure;\n\t\tconst said = this.#inbox.shift();\n\t\treturn this.#fail(\n\t\t\tsaid ? refused(this.host, 'the message', said) : otherwise,\n\t\t);\n\t}\n\n\t/** After the 220 to STARTTLS: TLS on this connection. Anything the server sent past the 220 is an attack. */\n\tasync startTls(tls: TlsTarget, seconds: number): Promise<void> {\n\t\tconst socket = this.#socket;\n\t\tif (this.#inbox.holding || !socket) {\n\t\t\tthrow this.#fail(badReply(this.host, 'more after its 220 to STARTTLS'));\n\t\t}\n\t\tconst handshake = this.#expectHandshake(tls);\n\t\thandshake.catch(() => {});\n\t\tthis.#tls = true;\n\t\tconst [, encrypted] = socket.upgradeTLS<undefined>({\n\t\t\ttls: tlsOptions(tls),\n\t\t\tsocket: this.#handlers(true),\n\t\t});\n\t\tthis.#use(encrypted);\n\t\tawait this.#race(handshake, seconds, 'the TLS handshake');\n\t}\n\n\t/** Hangs up; `now` at once, so a message cut short is not delivered. */\n\tclose(now = false): void {\n\t\tthis.#closed = true;\n\t\tif (now) this.#socket?.terminate();\n\t\telse this.#socket?.end();\n\t}\n}\n",
18
- "import { type RecipientReply, SmtpError } from '../errors';\nimport { DataWriter } from '../protocol/data-writer';\nimport type { Reply } from '../protocol/reply';\nimport { bareLineBreak, type Content } from './content';\nimport { mailDsn, rcptDsn } from './dsn';\nimport { afterDot, refused, shown } from './refusal';\nimport type { Ready } from './session';\nimport type { ClientSettings } from './settings';\nimport type { ClientSocket } from './socket';\n\n/** What the server said to the envelope and the message. */\nexport interface Delivered {\n\treadonly accepted: readonly RecipientReply[];\n\treadonly rejected: readonly RecipientReply[];\n\treadonly reply: Reply;\n\t/** The server lists DSN. */\n\treadonly dsnOffered: boolean;\n}\n\n/** The envelope's outcome, as an error after the final dot carries it. */\ntype Taken = Pick<Delivered, 'accepted' | 'rejected'>;\n\nconst missing = (host: string, extension: string, why: string) =>\n\tnew SmtpError(\n\t\t'EXTENSION_MISSING',\n\t\t`${host} does not offer ${extension}, which ${why}`,\n\t);\n\n/** MAIL FROM's parameters: SIZE (RFC 1870), BODY (RFC 6152), SMTPUTF8 (RFC 6531). */\nfunction mailParameters(\n\thost: string,\n\tsettings: ClientSettings,\n\tcontent: Content,\n\textensions: ReadonlyMap<string, string>,\n): string {\n\tlet parameters = '';\n\tconst size = extensions.get('SIZE');\n\tif (size !== undefined && content.size !== undefined) {\n\t\tconst max = Number(size);\n\t\tif (Number.isSafeInteger(max) && max > 0 && content.size > max) {\n\t\t\tthrow new SmtpError(\n\t\t\t\t'MESSAGE_TOO_BIG',\n\t\t\t\t`The message (${content.size} bytes) is larger than the ${max} bytes ${host} takes (SIZE)`,\n\t\t\t\t{ temporary: false },\n\t\t\t);\n\t\t}\n\t\tparameters += ` SIZE=${content.size}`;\n\t}\n\tif (extensions.has('8BITMIME')) parameters += ' BODY=8BITMIME';\n\telse if (content.eightBit) {\n\t\tthrow missing(host, '8BITMIME', 'the message needs: it has 8-bit bytes');\n\t}\n\tif (settings.smtputf8) {\n\t\tif (!extensions.has('SMTPUTF8')) {\n\t\t\tthrow missing(\n\t\t\t\thost,\n\t\t\t\t'SMTPUTF8',\n\t\t\t\t'an address that is not ASCII needs (or smtputf8 asked for)',\n\t\t\t);\n\t\t}\n\t\tparameters += ' SMTPUTF8';\n\t}\n\treturn parameters;\n}\n\n/** MAIL FROM and every RCPT TO: in one write with PIPELINING (RFC 2920), else one by one. */\nasync function envelope(\n\tsocket: ClientSocket,\n\tsettings: ClientSettings,\n\tcontent: Content,\n\tready: Ready,\n): Promise<{ accepted: RecipientReply[]; rejected: RecipientReply[] }> {\n\tconst { host } = socket;\n\tconst { timeouts } = settings;\n\tconst dsn = ready.extensions.has('DSN');\n\tconst mail = `MAIL FROM:<${settings.from}>${mailParameters(host, settings, content, ready.extensions)}${mailDsn(settings.dsn, dsn)}\\r\\n`;\n\tconst rcpts = settings.to.map(\n\t\t(to) => `RCPT TO:<${to}>${rcptDsn(settings.dsn, to, dsn)}\\r\\n`,\n\t);\n\tconst pipelining = ready.extensions.has('PIPELINING');\n\tsocket.write(pipelining ? mail + rcpts.join('') : mail);\n\tconst from = await socket.reply('the reply to MAIL FROM', timeouts.mail);\n\tif (from.code !== 250) throw refused(host, 'the sender', from);\n\tconst accepted: RecipientReply[] = [];\n\tconst rejected: RecipientReply[] = [];\n\tfor (const [i, recipient] of settings.to.entries()) {\n\t\tif (!pipelining) socket.write(rcpts[i] as string);\n\t\tconst reply = await socket.reply('the reply to RCPT TO', timeouts.rcpt);\n\t\tconst into = reply.code === 250 || reply.code === 251 ? accepted : rejected;\n\t\tinto.push({ recipient, reply });\n\t}\n\tif (accepted.length === 0) {\n\t\tconst first = rejected[0] as RecipientReply;\n\t\tthrow new SmtpError(\n\t\t\t'RECIPIENTS_REFUSED',\n\t\t\t`${host} refused every recipient, ${first.recipient} with ${shown(first.reply)}`,\n\t\t\t{\n\t\t\t\treply: first.reply,\n\t\t\t\trejected,\n\t\t\t\ttemporary: rejected.some(({ reply }) => reply.code < 500),\n\t\t\t},\n\t\t);\n\t}\n\treturn { accepted, rejected };\n}\n\n/** The message, stuffed, block by block as the server takes it; a bad stream hangs up before the dot. */\nasync function data(\n\tsocket: ClientSocket,\n\tsettings: ClientSettings,\n\tcontent: Content,\n\tready: Ready,\n\ttaken: Taken,\n): Promise<Reply> {\n\tconst { host } = socket;\n\tconst { timeouts } = settings;\n\tsocket.write('DATA\\r\\n');\n\tconst start = await socket.reply('the reply to DATA', timeouts.dataStart);\n\tif (start.code !== 354) throw refused(host, 'DATA', start);\n\tconst writer = new DataWriter(settings.normalizeLineEnds);\n\tconst eightBitOk = ready.extensions.has('8BITMIME');\n\tconst chunks = content.chunks();\n\tlet tail: Uint8Array;\n\ttry {\n\t\tfor (;;) {\n\t\t\t// The caller's stream is bounded as the server is: a stalled one times out.\n\t\t\tconst chunk = await socket.within(\n\t\t\t\tchunks.next(),\n\t\t\t\ttimeouts.dataBlock,\n\t\t\t\t'the next part of the message',\n\t\t\t);\n\t\t\tif (!chunk) break;\n\t\t\tconst bytes = writer.write(chunk);\n\t\t\tif (writer.bareLineBreaks > 0) throw bareLineBreak();\n\t\t\tif (writer.eightBit && !eightBitOk) {\n\t\t\t\tthrow missing(\n\t\t\t\t\thost,\n\t\t\t\t\t'8BITMIME',\n\t\t\t\t\t'the message needs: it has 8-bit bytes',\n\t\t\t\t);\n\t\t\t}\n\t\t\tsocket.write(bytes);\n\t\t\tawait socket.drained(timeouts.dataBlock);\n\t\t}\n\t\t// A CR held at the very end is bare only now: still no dot for it.\n\t\ttail = writer.end();\n\t\tif (writer.bareLineBreaks > 0) throw bareLineBreak();\n\t} catch (error) {\n\t\t// No final dot: the server drops what it has of the message.\n\t\tchunks.cancel();\n\t\tsocket.close(true);\n\t\tthrow error;\n\t}\n\t// A connection that failed already took no dot: its error is not afterData.\n\tconst dotSent = socket.write(tail);\n\tconst end = await socket\n\t\t.reply('the reply to the final dot', timeouts.dataEnd)\n\t\t.catch((error: unknown) => {\n\t\t\t// No reply to the dot: the server may have taken the message.\n\t\t\tthrow dotSent ? afterDot(error, taken) : error;\n\t\t});\n\tif (end.code !== 250) throw refused(host, 'the message', end);\n\treturn end;\n}\n\n/** One message: the envelope, then the content. */\nexport async function transact(\n\tsocket: ClientSocket,\n\tsettings: ClientSettings,\n\tcontent: Content,\n\tready: Ready,\n): Promise<Delivered> {\n\tconst { accepted, rejected } = await envelope(\n\t\tsocket,\n\t\tsettings,\n\t\tcontent,\n\t\tready,\n\t);\n\tconst reply = await data(socket, settings, content, ready, {\n\t\taccepted,\n\t\trejected,\n\t});\n\treturn {\n\t\taccepted,\n\t\trejected,\n\t\treply,\n\t\tdsnOffered: ready.extensions.has('DSN'),\n\t};\n}\n",
18
+ "import { type RecipientReply, SmtpError } from '../errors';\nimport { DataWriter } from '../protocol/data-writer';\nimport type { Reply } from '../protocol/reply';\nimport { bareLineBreak, type Content } from './content';\nimport { mailDsn, rcptDsn } from './dsn';\nimport { afterDot, refused, shown } from './refusal';\nimport type { Ready } from './session';\nimport type { ClientSettings } from './settings';\nimport type { ClientSocket } from './socket';\n\n/** What the server said to the envelope and the message. */\nexport interface Delivered {\n\treadonly accepted: readonly RecipientReply[];\n\treadonly rejected: readonly RecipientReply[];\n\treadonly reply: Reply;\n\t/** The server lists DSN. */\n\treadonly dsnOffered: boolean;\n}\n\n/** The envelope's outcome, as an error after the final dot carries it. */\ntype Taken = Pick<Delivered, 'accepted' | 'rejected'>;\n\nconst missing = (host: string, extension: string, why: string) =>\n\tnew SmtpError(\n\t\t'EXTENSION_MISSING',\n\t\t`${host} does not offer ${extension}, which ${why}`,\n\t);\n\n/** MAIL FROM's parameters: SIZE (RFC 1870), BODY (RFC 6152), SMTPUTF8 (RFC 6531). */\nfunction mailParameters(\n\thost: string,\n\tsettings: ClientSettings,\n\tcontent: Content,\n\textensions: ReadonlyMap<string, string>,\n): string {\n\tlet parameters = '';\n\tconst size = extensions.get('SIZE');\n\tif (size !== undefined && content.size !== undefined) {\n\t\tconst max = Number(size);\n\t\tif (Number.isSafeInteger(max) && max > 0 && content.size > max) {\n\t\t\tthrow new SmtpError(\n\t\t\t\t'MESSAGE_TOO_BIG',\n\t\t\t\t`The message (${content.size} bytes) is larger than the ${max} bytes ${host} takes (SIZE)`,\n\t\t\t\t{ temporary: false },\n\t\t\t);\n\t\t}\n\t\tparameters += ` SIZE=${content.size}`;\n\t}\n\tif (extensions.has('8BITMIME')) parameters += ' BODY=8BITMIME';\n\telse if (content.eightBit) {\n\t\tthrow missing(host, '8BITMIME', 'the message needs: it has 8-bit bytes');\n\t}\n\tif (settings.smtputf8) {\n\t\tif (!extensions.has('SMTPUTF8')) {\n\t\t\tthrow missing(\n\t\t\t\thost,\n\t\t\t\t'SMTPUTF8',\n\t\t\t\t'an address that is not ASCII needs (or smtputf8 asked for)',\n\t\t\t);\n\t\t}\n\t\tparameters += ' SMTPUTF8';\n\t}\n\treturn parameters;\n}\n\n/** MAIL FROM and every RCPT TO: in one write with PIPELINING (RFC 2920), else one by one. */\nasync function envelope(\n\tsocket: ClientSocket,\n\tsettings: ClientSettings,\n\tcontent: Content,\n\tready: Ready,\n): Promise<{ accepted: RecipientReply[]; rejected: RecipientReply[] }> {\n\tconst { host } = socket;\n\tconst { timeouts } = settings;\n\tconst dsn = ready.extensions.has('DSN');\n\tconst mail = `MAIL FROM:<${settings.from}>${mailParameters(host, settings, content, ready.extensions)}${mailDsn(settings.dsn, dsn)}\\r\\n`;\n\tconst rcpts = settings.to.map(\n\t\t(to) =>\n\t\t\t`RCPT TO:<${to}>${rcptDsn(settings.dsn, to, dsn, settings.smtputf8)}\\r\\n`,\n\t);\n\tconst pipelining = ready.extensions.has('PIPELINING');\n\tsocket.write(pipelining ? mail + rcpts.join('') : mail);\n\tconst from = await socket.reply('the reply to MAIL FROM', timeouts.mail);\n\tif (from.code !== 250) throw refused(host, 'the sender', from);\n\tconst accepted: RecipientReply[] = [];\n\tconst rejected: RecipientReply[] = [];\n\tfor (const [i, recipient] of settings.to.entries()) {\n\t\tif (!pipelining) socket.write(rcpts[i] as string);\n\t\tconst reply = await socket.reply('the reply to RCPT TO', timeouts.rcpt);\n\t\tconst into = reply.code === 250 || reply.code === 251 ? accepted : rejected;\n\t\tinto.push({ recipient, reply });\n\t}\n\tif (accepted.length === 0) {\n\t\tconst first = rejected[0] as RecipientReply;\n\t\tthrow new SmtpError(\n\t\t\t'RECIPIENTS_REFUSED',\n\t\t\t`${host} refused every recipient, ${first.recipient} with ${shown(first.reply)}`,\n\t\t\t{\n\t\t\t\treply: first.reply,\n\t\t\t\trejected,\n\t\t\t\ttemporary: rejected.some(({ reply }) => reply.code < 500),\n\t\t\t},\n\t\t);\n\t}\n\treturn { accepted, rejected };\n}\n\n/** The message, stuffed, block by block as the server takes it; a bad stream hangs up before the dot. */\nasync function data(\n\tsocket: ClientSocket,\n\tsettings: ClientSettings,\n\tcontent: Content,\n\tready: Ready,\n\ttaken: Taken,\n): Promise<Reply> {\n\tconst { host } = socket;\n\tconst { timeouts } = settings;\n\tsocket.write('DATA\\r\\n');\n\tconst start = await socket.reply('the reply to DATA', timeouts.dataStart);\n\tif (start.code !== 354) throw refused(host, 'DATA', start);\n\tconst writer = new DataWriter(settings.normalizeLineEnds);\n\tconst eightBitOk = ready.extensions.has('8BITMIME');\n\tconst chunks = content.chunks();\n\tlet tail: Uint8Array;\n\ttry {\n\t\tfor (;;) {\n\t\t\t// The caller's stream is bounded as the server is: a stalled one times out.\n\t\t\tconst chunk = await socket.within(\n\t\t\t\tchunks.next(),\n\t\t\t\ttimeouts.dataBlock,\n\t\t\t\t'the next part of the message',\n\t\t\t);\n\t\t\tif (!chunk) break;\n\t\t\tconst bytes = writer.write(chunk);\n\t\t\tif (writer.bareLineBreaks > 0) throw bareLineBreak();\n\t\t\tif (writer.eightBit && !eightBitOk) {\n\t\t\t\tthrow missing(\n\t\t\t\t\thost,\n\t\t\t\t\t'8BITMIME',\n\t\t\t\t\t'the message needs: it has 8-bit bytes',\n\t\t\t\t);\n\t\t\t}\n\t\t\tsocket.write(bytes);\n\t\t\tawait socket.drained(timeouts.dataBlock);\n\t\t}\n\t\t// A CR held at the very end is bare only now: still no dot for it.\n\t\ttail = writer.end();\n\t\tif (writer.bareLineBreaks > 0) throw bareLineBreak();\n\t} catch (error) {\n\t\t// No final dot: the server drops what it has of the message.\n\t\tchunks.cancel();\n\t\tsocket.close(true);\n\t\tthrow error;\n\t}\n\t// A connection that failed already took no dot: its error is not afterData.\n\tconst dotSent = socket.write(tail);\n\tconst end = await socket\n\t\t.reply('the reply to the final dot', timeouts.dataEnd)\n\t\t.catch((error: unknown) => {\n\t\t\t// No reply to the dot: the server may have taken the message.\n\t\t\tthrow dotSent ? afterDot(error, taken) : error;\n\t\t});\n\tif (end.code !== 250) throw refused(host, 'the message', end);\n\treturn end;\n}\n\n/** One message: the envelope, then the content. */\nexport async function transact(\n\tsocket: ClientSocket,\n\tsettings: ClientSettings,\n\tcontent: Content,\n\tready: Ready,\n): Promise<Delivered> {\n\tconst { accepted, rejected } = await envelope(\n\t\tsocket,\n\t\tsettings,\n\t\tcontent,\n\t\tready,\n\t);\n\tconst reply = await data(socket, settings, content, ready, {\n\t\taccepted,\n\t\trejected,\n\t});\n\treturn {\n\t\taccepted,\n\t\trejected,\n\t\treply,\n\t\tdsnOffered: ready.extensions.has('DSN'),\n\t};\n}\n",
19
19
  "import { SmtpError } from '../errors';\nimport { type Content, contentOf } from './content';\nimport { addressesOf, noAddress, resolveMx } from './mx';\nimport type {\n\tMessageSource,\n\tMxDestination,\n\tSendMailOptions,\n\tSendMailResult,\n} from './options';\nimport { timedOut } from './refusal';\nimport { open } from './session';\nimport {\n\tbyMx,\n\ttype ClientSettings,\n\tinvalid,\n\tportOf,\n\tsettingsOf,\n} from './settings';\nimport { ClientSocket } from './socket';\nimport { Clock, type Endpoint, type TlsTarget } from './target';\nimport { transact } from './transaction';\n\n/** The most addresses one delivery tries, every MX host together; and the most MX hosts it looks up. */\nexport const MAX_ADDRESSES = 10;\n\n/** Seconds to wait for the 221 to QUIT once the message was taken. */\nconst QUIT_WAIT = 5;\n\n/** Errors from before MAIL FROM: another MX host may do better. */\nconst early = new WeakSet<object>();\n\n/** One session with one server, from the connection to QUIT. */\nasync function attempt(\n\tendpoint: Endpoint,\n\tsettings: ClientSettings,\n\tcontent: Content,\n\tclock: Clock,\n): Promise<SendMailResult> {\n\tconst tls: TlsTarget = {\n\t\tservername: endpoint.host,\n\t\tverify: settings.tls === 'required',\n\t\t...(settings.ca ? { ca: settings.ca } : {}),\n\t};\n\tlet socket: ClientSocket;\n\ttry {\n\t\tsocket = await ClientSocket.open(\n\t\t\tendpoint,\n\t\t\tsettings.secure ? tls : undefined,\n\t\t\tsettings.timeouts.connect,\n\t\t\tclock,\n\t\t);\n\t} catch (error) {\n\t\tearly.add(error as object);\n\t\tthrow error;\n\t}\n\tlet quit = false;\n\ttry {\n\t\tconst ready = await open(socket, settings, tls).catch((error) => {\n\t\t\tearly.add(error as object);\n\t\t\tthrow error;\n\t\t});\n\t\tconst delivered = await transact(socket, settings, content, ready);\n\t\tsocket.write('QUIT\\r\\n');\n\t\tquit = true;\n\t\tawait socket\n\t\t\t.reply(\n\t\t\t\t'the reply to QUIT',\n\t\t\t\tMath.min(QUIT_WAIT, settings.timeouts.command),\n\t\t\t)\n\t\t\t.catch(() => {});\n\t\treturn {\n\t\t\t...delivered,\n\t\t\thost: endpoint.host,\n\t\t\tport: endpoint.port,\n\t\t\ttls: socket.secure ? { verified: socket.verified } : false,\n\t\t\tauthenticated: ready.authenticated,\n\t\t};\n\t} finally {\n\t\t// After a refusal the session is still in step: say goodbye.\n\t\tif (!quit) socket.write('QUIT\\r\\n');\n\t\tsocket.close();\n\t}\n}\n\n/** A DNS lookup, bounded by the delivery's deadline (the resolver has its own timeout too). */\nconst withinDeadline = <T>(\n\tlookup: Promise<T>,\n\tclock: Clock,\n\tname: string,\n\twhat: string,\n): Promise<T> =>\n\tclock.race(lookup, Number.POSITIVE_INFINITY, () =>\n\t\ttimedOut(name, what, clock.seconds, clock.seconds),\n\t);\n\n/** Direct delivery: each MX host's addresses in turn, while the failures are temporary and before MAIL FROM. */\nasync function viaMx(\n\toptions: MxDestination,\n\tsettings: ClientSettings,\n\tcontent: Content,\n\tclock: Clock,\n): Promise<SendMailResult> {\n\tconst { domain, resolver } = options;\n\tif (typeof domain !== 'string' || domain === '')\n\t\tthrow invalid('domain must be a domain name');\n\tif (typeof resolver?.mx !== 'function')\n\t\tthrow invalid('resolver must be a Resolver, such as @bumail/dns gives');\n\tconst port = portOf(options.port, 25);\n\tlet last: unknown;\n\tlet dnsError: unknown;\n\tlet tried = 0;\n\tlet looked = 0;\n\tconst mailHosts = await withinDeadline(\n\t\tresolveMx(domain, resolver),\n\t\tclock,\n\t\tdomain,\n\t\t'the MX lookup',\n\t);\n\thosts: for (const mx of mailHosts) {\n\t\t// A host looked up counts, with an address or not: no endless lookups.\n\t\tif (tried >= MAX_ADDRESSES || looked++ >= MAX_ADDRESSES) break;\n\t\tconst addresses = await withinDeadline(\n\t\t\taddressesOf(mx.host, resolver),\n\t\t\tclock,\n\t\t\tmx.host,\n\t\t\t'the address lookup',\n\t\t);\n\t\tif (!Array.isArray(addresses)) {\n\t\t\tdnsError = addresses.error;\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const address of addresses) {\n\t\t\tif (tried++ >= MAX_ADDRESSES) break hosts;\n\t\t\ttry {\n\t\t\t\treturn await attempt(\n\t\t\t\t\t{ host: mx.host, address, port },\n\t\t\t\t\tsettings,\n\t\t\t\t\tcontent,\n\t\t\t\t\tclock,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tconst next =\n\t\t\t\t\terror instanceof SmtpError && error.temporary && early.has(error);\n\t\t\t\tif (!next) throw error;\n\t\t\t\tlast = error;\n\t\t\t}\n\t\t}\n\t}\n\tthrow last ?? noAddress(domain, dnsError);\n}\n\n/**\n * Delivers one message to one destination: a host (`{ host, port }`, a\n * smarthost or a submission server) or a domain's mail hosts (`{ domain,\n * resolver }`, by MX). Resolves once the server took the message for one\n * recipient at least; rejects with an `SmtpError` otherwise, `temporary`\n * telling whether to try again later. It is not a queue: retries are the\n * caller's.\n */\nexport async function sendMail(\n\tmessage: MessageSource,\n\toptions: SendMailOptions,\n): Promise<SendMailResult> {\n\tconst settings = settingsOf(options);\n\tconst content = contentOf(message, settings.normalizeLineEnds, settings.size);\n\tconst clock = new Clock(settings.deadline);\n\tif (!byMx(options)) {\n\t\tconst { host } = options;\n\t\tif (typeof host !== 'string' || !/^[^\\s/]+$/.test(host))\n\t\t\tthrow invalid(`host must be a host name or an address, not ${host}`);\n\t\tconst port = portOf(options.port, settings.secure ? 465 : 25);\n\t\treturn attempt({ host, address: host, port }, settings, content, clock);\n\t}\n\treturn viaMx(options, settings, content, clock);\n}\n"
20
20
  ],
21
- "mappings": "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",
22
- "debugId": "736B8264B277F65B64756E2164756E21",
21
+ "mappings": "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",
22
+ "debugId": "3C3AEF3D2B40447E64756E2164756E21",
23
23
  "names": []
24
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/client/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAa,MAAM,WAAW,CAAC;AAE3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAGxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,4DAA4D;AAC5D,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,4BAA4B;IAC5B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC7B;AAoJD,mDAAmD;AACnD,wBAAsB,QAAQ,CAC7B,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACV,OAAO,CAAC,SAAS,CAAC,CAiBpB"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/client/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAa,MAAM,WAAW,CAAC;AAE3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAGxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,4DAA4D;AAC5D,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,4BAA4B;IAC5B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC7B;AAqJD,mDAAmD;AACnD,wBAAsB,QAAQ,CAC7B,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACV,OAAO,CAAC,SAAS,CAAC,CAiBpB"}