@bumail/smtp 0.10.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -6,9 +6,10 @@ import {
6
6
  decodePlain2,
7
7
  decodeLoginStep2,
8
8
  LineSplitter,
9
+ decodeUtf8Orcpt,
9
10
  decodeXtext,
10
11
  Outgoing
11
- } from "./chunks/index-twt5myrr.js";
12
+ } from "./chunks/index-byaw0g4k.js";
12
13
  // src/protocol/command.ts
13
14
  function parseCommand(line) {
14
15
  const space = line.indexOf(" ");
@@ -317,15 +318,18 @@ function notify(value) {
317
318
  }
318
319
  return events;
319
320
  }
320
- function orcpt(value) {
321
+ function orcpt(value, smtputf8) {
322
+ const syntax = "Syntax: ORCPT=<addr-type>;<xtext>";
321
323
  const semicolon = value.indexOf(";");
322
- if (semicolon < 1 || value.length > 500)
323
- return;
324
+ if (semicolon < 1 || new TextEncoder().encode(value).length > 500)
325
+ return syntax;
324
326
  const type = value.slice(0, semicolon);
325
- const address = decodeXtext(value.slice(semicolon + 1));
326
- if (!/^[A-Za-z0-9-]+$/.test(type) || !address)
327
- return;
328
- return { type, address };
327
+ if (!/^[A-Za-z0-9-]+$/.test(type))
328
+ return syntax;
329
+ const wire = value.slice(semicolon + 1);
330
+ const kind = type.toLowerCase();
331
+ const address = kind === "utf-8" ? decodeUtf8Orcpt(wire, smtputf8) : decodeXtext(wire);
332
+ return address ? { type, address } : syntax;
329
333
  }
330
334
  function readMailDsn(into, key, value, repeated) {
331
335
  if (repeated.includes(key))
@@ -343,7 +347,7 @@ function readMailDsn(into, key, value, repeated) {
343
347
  into.envid = id;
344
348
  return;
345
349
  }
346
- function readRcptDsn(into, key, value, repeated) {
350
+ function readRcptDsn(into, key, value, repeated, smtputf8 = false) {
347
351
  if (repeated.includes(key))
348
352
  return `${key} given twice`;
349
353
  if (key === "NOTIFY") {
@@ -353,9 +357,9 @@ function readRcptDsn(into, key, value, repeated) {
353
357
  into.notify = events;
354
358
  return;
355
359
  }
356
- const original = orcpt(value);
357
- if (!original)
358
- return "Syntax: ORCPT=<addr-type>;<xtext>";
360
+ const original = orcpt(value, smtputf8);
361
+ if (typeof original === "string")
362
+ return original;
359
363
  into.orcpt = original;
360
364
  return;
361
365
  }
@@ -443,7 +447,7 @@ async function rcpt(connection, argument) {
443
447
  if (!RCPT_DSN.has(key)) {
444
448
  return connection.fail(reply(555, "5.5.4", `${key} is not supported`));
445
449
  }
446
- const wrong = readRcptDsn(recipient, key, value, repeated);
450
+ const wrong = readRcptDsn(recipient, key, value, repeated, state.transaction.smtputf8);
447
451
  if (wrong)
448
452
  return connection.fail(reply(501, "5.5.4", wrong));
449
453
  }
@@ -2053,5 +2057,5 @@ export {
2053
2057
  reply
2054
2058
  };
2055
2059
 
2056
- //# debugId=5D8963483AFC536F64756E2164756E21
2060
+ //# debugId=4D2876010D33AF0464756E2164756E21
2057
2061
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -9,8 +9,8 @@
9
9
  "import { SmtpError } from '../errors';\nimport { type Reply, reply } from '../protocol/reply';\n\n/** The reply when a hook throws, times out or answers what is not a refusal. */\nexport const LOCAL_ERROR = reply(451, '4.3.0', 'Local error in processing');\n\nconst TIMED_OUT = Symbol('timed out');\n\n/** `promise`, or `TIMED_OUT` once `seconds` have passed. */\nexport async function within<T>(\n\tpromise: Promise<T>,\n\tseconds: number,\n): Promise<T | typeof TIMED_OUT> {\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tconst deadline = new Promise<typeof TIMED_OUT>((resolve) => {\n\t\ttimer = setTimeout(() => resolve(TIMED_OUT), seconds * 1000);\n\t});\n\ttry {\n\t\treturn await Promise.race([promise, deadline]);\n\t} finally {\n\t\tclearTimeout(timer);\n\t}\n}\n\nexport function timedOut(value: unknown): value is typeof TIMED_OUT {\n\treturn value === TIMED_OUT;\n}\n\nexport function hookTimeout(name: string, seconds: number): SmtpError {\n\treturn new SmtpError(\n\t\t'HOOK_TIMEOUT',\n\t\t`${name} did not settle within hookTimeout (${seconds} s)`,\n\t);\n}\n\n/**\n * What a hook answered, as the reply to send: `undefined` to go on, or the\n * refusal. A reply under 400 is not a refusal — sending it would tell the\n * client yes while the server did not take the command — so it is reported\n * and answered as a local error.\n */\nexport function refusalOf(\n\tname: string,\n\tanswer: unknown,\n\treport: (error: unknown) => void,\n): Reply | undefined {\n\tif (answer === undefined) return undefined;\n\tconst code = (answer as Partial<Reply> | null)?.code;\n\tif (typeof code === 'number' && code >= 400 && code < 600) {\n\t\treturn answer as Reply;\n\t}\n\treport(\n\t\tnew SmtpError(\n\t\t\t'INVALID_HOOK_REPLY',\n\t\t\t`${name} answered ${JSON.stringify(answer)}, which is not a refusal: a hook refuses with a 4xx or 5xx reply, and accepts with undefined`,\n\t\t),\n\t);\n\treturn LOCAL_ERROR;\n}\n",
10
10
  "import { reply } from '../protocol/reply';\nimport {\n\ttype Credentials,\n\tdecodeLoginStep,\n\tdecodePlain,\n} from '../protocol/sasl';\nimport type { Connection } from './connection';\n\n/** Failed AUTH attempts before the server hangs up. */\nconst MAX_AUTH_FAILURES = 3;\n\nasync function check(\n\tconnection: Connection,\n\tcredentials: Credentials | undefined,\n): Promise<void> {\n\tconst { state, settings } = connection;\n\tstate.waiting = 'command';\n\tstate.loginUser = undefined;\n\tif (credentials === undefined) {\n\t\treturn connection.fail(reply(501, '5.5.2', 'Cannot decode the response'));\n\t}\n\tif (\n\t\tcredentials.authorizationId !== undefined &&\n\t\tcredentials.authorizationId !== credentials.username\n\t) {\n\t\t// A session acts as the user it authenticated as, never as another.\n\t\treturn refuse(connection);\n\t}\n\tconst { authenticate } = settings.options;\n\tconst answer = await connection.check('authenticate', () =>\n\t\tauthenticate?.(credentials, connection.session),\n\t);\n\tif (answer.failed) {\n\t\t// RFC 4954 §6: a failure of the server's own, not of the credentials.\n\t\treturn connection.send(\n\t\t\treply(454, '4.7.0', 'Temporary authentication failure'),\n\t\t);\n\t}\n\tconst ok = answer.value === true;\n\tif (ok) {\n\t\tstate.user = credentials.username;\n\t\treturn connection.send(reply(235, '2.7.0', 'Authentication successful'));\n\t}\n\trefuse(connection);\n}\n\nfunction refuse(connection: Connection): void {\n\tconst { state, settings } = connection;\n\tstate.authFailures++;\n\tif (state.authFailures >= MAX_AUTH_FAILURES) {\n\t\tconst { hostname } = settings.options;\n\t\tconnection.close(\n\t\t\treply(\n\t\t\t\t421,\n\t\t\t\t'4.7.0',\n\t\t\t\t`${hostname} Too many failed authentications, closing`,\n\t\t\t),\n\t\t);\n\t\treturn;\n\t}\n\tconnection.fail(reply(535, '5.7.8', 'Authentication credentials invalid'));\n}\n\n/** `AUTH PLAIN [initial]` or `AUTH LOGIN [initial]` (RFC 4954), over TLS only. */\nexport async function authenticate(\n\tconnection: Connection,\n\targument: string,\n): Promise<void> {\n\tconst { state, settings } = connection;\n\tif (!settings.options.authenticate)\n\t\treturn connection.fail(reply(502, '5.5.1', 'AUTH not available'));\n\tif (!state.secure)\n\t\treturn connection.fail(\n\t\t\treply(\n\t\t\t\t538,\n\t\t\t\t'5.7.11',\n\t\t\t\t'Encryption required for requested authentication mechanism',\n\t\t\t),\n\t\t);\n\tif (state.helo === undefined || !state.esmtp)\n\t\treturn connection.fail(reply(503, '5.5.1', 'Send EHLO first'));\n\tif (state.user !== undefined)\n\t\treturn connection.fail(reply(503, '5.5.1', 'Already authenticated'));\n\tif (state.transaction.from !== undefined)\n\t\treturn connection.fail(\n\t\t\treply(503, '5.5.1', 'AUTH not allowed during a transaction'),\n\t\t);\n\tconst [mechanism = '', initial, extra] = argument.split(' ');\n\tif (extra !== undefined)\n\t\treturn connection.fail(\n\t\t\treply(501, '5.5.4', 'Syntax: AUTH mechanism [initial-response]'),\n\t\t);\n\tswitch (mechanism.toUpperCase()) {\n\t\tcase 'PLAIN':\n\t\t\tif (initial === undefined) {\n\t\t\t\tstate.waiting = 'auth-plain';\n\t\t\t\treturn connection.send(reply(334, undefined, ''));\n\t\t\t}\n\t\t\treturn check(connection, decodePlain(initial === '=' ? '' : initial));\n\t\tcase 'LOGIN':\n\t\t\tif (initial === undefined) {\n\t\t\t\tstate.waiting = 'auth-login-user';\n\t\t\t\treturn connection.send(reply(334, undefined, 'VXNlcm5hbWU6'));\n\t\t\t}\n\t\t\treturn loginUser(connection, initial);\n\t\tdefault:\n\t\t\treturn connection.fail(\n\t\t\t\treply(504, '5.5.4', 'Unrecognized authentication type'),\n\t\t\t);\n\t}\n}\n\nfunction loginUser(\n\tconnection: Connection,\n\tresponse: string,\n): void | Promise<void> {\n\tconst user = decodeLoginStep(response);\n\tif (!user) return check(connection, undefined);\n\tconnection.state.loginUser = user;\n\tconnection.state.waiting = 'auth-login-password';\n\tconnection.send(reply(334, undefined, 'UGFzc3dvcmQ6'));\n}\n\n/** The client's line after a 334 challenge. */\nexport async function continueAuth(\n\tconnection: Connection,\n\tline: string,\n): Promise<void> {\n\tconst { state } = connection;\n\tif (line === '*') {\n\t\tstate.waiting = 'command';\n\t\tstate.loginUser = undefined;\n\t\treturn connection.fail(reply(501, '5.0.0', 'Authentication cancelled'));\n\t}\n\tswitch (state.waiting) {\n\t\tcase 'auth-plain':\n\t\t\treturn check(connection, decodePlain(line));\n\t\tcase 'auth-login-user':\n\t\t\treturn loginUser(connection, line);\n\t\tdefault: {\n\t\t\tconst password = decodeLoginStep(line);\n\t\t\tconst username = state.loginUser ?? '';\n\t\t\treturn check(\n\t\t\t\tconnection,\n\t\t\t\tpassword ? { mechanism: 'LOGIN', username, password } : undefined,\n\t\t\t);\n\t\t}\n\t}\n}\n",
11
11
  "import type { Envelope, EnvelopeRecipient } from './options';\n\n/** A mail transaction in progress (RFC 5321 §3.3). */\nexport interface Transaction {\n\tfrom?: string;\n\tto: string[];\n\trecipients: EnvelopeRecipient[];\n\tret?: Envelope['ret'];\n\tenvid?: string;\n\tsmtputf8: boolean;\n\tbody: Envelope['body'];\n}\n\n/** What the next line from the client is. */\nexport type Waiting =\n\t| 'command'\n\t| 'data'\n\t| 'auth-plain'\n\t| 'auth-login-user'\n\t| 'auth-login-password';\n\n/** The state of a session the commands change. */\nexport interface State {\n\thelo?: string | undefined;\n\tesmtp: boolean;\n\tuser?: string | undefined;\n\tsecure: boolean;\n\ttransaction: Transaction;\n\twaiting: Waiting;\n\tloginUser?: string | undefined;\n\terrors: number;\n\tauthFailures: number;\n}\n\nexport const emptyTransaction = (): Transaction => ({\n\tto: [],\n\trecipients: [],\n\tsmtputf8: false,\n\tbody: '7BIT',\n});\n",
12
- "// The value rules repeat packages/jmap/src/submission/dsn.ts, packages/smtp/src/client/dsn.ts and\n// packages/queue/src/contract/dsn-checks.ts (AGENTS.md, Deliberate duplications); this copy reads the wire.\nimport { decodeXtext } from '../protocol/xtext';\nimport type { DsnNotify, EnvelopeRecipient } from './options';\nimport type { Transaction } from './state';\n\n/** The DSN parameters (RFC 3461 §4) MAIL FROM takes. */\nexport const MAIL_DSN = new Set(['RET', 'ENVID']);\n/** The DSN parameters (RFC 3461 §4) RCPT TO takes. */\nexport const RCPT_DSN = new Set(['NOTIFY', 'ORCPT']);\n\nconst EVENTS: readonly DsnNotify[] = ['SUCCESS', 'FAILURE', 'DELAY'];\n\n/**\n * `ENVID=` is at most 100 characters as it is sent, xtext (RFC 3461 §4.4: \"The\n * ENVID parameter MAY be up to 100 characters in length\", §5.4: a server MUST\n * accept 100), and printable ASCII once decoded.\n */\nfunction envid(value: string): string | undefined {\n\tconst text = value.length <= 100 ? decodeXtext(value) : undefined;\n\treturn text !== undefined && /^[ -~]+$/.test(text) ? text : undefined;\n}\n\n/** `NOTIFY=NEVER` or a comma list of events, with no duplicate (RFC 3461 §4.1). */\nfunction notify(value: string): 'NEVER' | DsnNotify[] | undefined {\n\tconst items = value.toUpperCase().split(',');\n\tif (items.length === 1 && items[0] === 'NEVER') return 'NEVER';\n\tconst events: DsnNotify[] = [];\n\tfor (const item of items) {\n\t\tconst event = EVENTS.find((candidate) => candidate === item);\n\t\tif (!event || events.includes(event)) return undefined;\n\t\tevents.push(event);\n\t}\n\treturn events;\n}\n\n/**\n * `ORCPT=<addr-type>;<xtext>` (RFC 3461 §4.2), at most 500 characters as it\n * is sent: \"The entire ORCPT parameter MAY be up to 500 characters in\n * length\". Only `rfc822` addresses are decoded as xtext; the RFC 6533\n * `utf-8` address types, which use another encoding, are not handled yet.\n */\nfunction orcpt(value: string): EnvelopeRecipient['orcpt'] {\n\tconst semicolon = value.indexOf(';');\n\tif (semicolon < 1 || value.length > 500) return undefined;\n\tconst type = value.slice(0, semicolon);\n\tconst address = decodeXtext(value.slice(semicolon + 1));\n\tif (!/^[A-Za-z0-9-]+$/.test(type) || !address) return undefined;\n\treturn { type, address };\n}\n\n/**\n * Reads one DSN parameter of MAIL FROM into the transaction under way.\n * The text of the `501` to answer when the value is wrong, else `undefined`.\n */\nexport function readMailDsn(\n\tinto: Pick<Transaction, 'ret' | 'envid'>,\n\tkey: string,\n\tvalue: string,\n\trepeated: readonly string[],\n): string | undefined {\n\tif (repeated.includes(key)) return `${key} given twice`;\n\tif (key === 'RET') {\n\t\tconst ret = value.toUpperCase();\n\t\tif (ret !== 'FULL' && ret !== 'HDRS') return 'Syntax: RET=FULL or RET=HDRS';\n\t\tinto.ret = ret;\n\t\treturn undefined;\n\t}\n\tconst id = envid(value);\n\tif (id === undefined) return 'Syntax: ENVID=<xtext, 1 to 100 characters>';\n\tinto.envid = id;\n\treturn undefined;\n}\n\n/**\n * Reads one DSN parameter of RCPT TO into `into`. The text of the `501` to\n * answer when the value is wrong, else `undefined`.\n */\nexport function readRcptDsn(\n\tinto: {\n\t\tnotify?: 'NEVER' | readonly DsnNotify[];\n\t\torcpt?: EnvelopeRecipient['orcpt'];\n\t},\n\tkey: string,\n\tvalue: string,\n\trepeated: readonly string[],\n): string | undefined {\n\tif (repeated.includes(key)) return `${key} given twice`;\n\tif (key === 'NOTIFY') {\n\t\tconst events = notify(value);\n\t\tif (!events) return 'Syntax: NOTIFY=NEVER or NOTIFY=SUCCESS,FAILURE,DELAY';\n\t\tinto.notify = events;\n\t\treturn undefined;\n\t}\n\tconst original = orcpt(value);\n\tif (!original) return 'Syntax: ORCPT=<addr-type>;<xtext>';\n\tinto.orcpt = original;\n\treturn undefined;\n}\n",
13
- "import { parsePathCommand } from '../protocol/command';\nimport { reply } from '../protocol/reply';\nimport type { Connection } from './connection';\nimport { MAIL_DSN, RCPT_DSN, readMailDsn, readRcptDsn } from './dsn-params';\nimport { LOCAL_ERROR } from './guard';\nimport type { EnvelopeRecipient } from './options';\nimport type { Transaction } from './state';\n\nfunction nonAscii(text: string): boolean {\n\tfor (let i = 0; i < text.length; i++)\n\t\tif (text.charCodeAt(i) > 0x7f) return true;\n\treturn false;\n}\n\n/** `MAIL FROM:<path> [SIZE=] [BODY=] [SMTPUTF8] [AUTH=] [RET=] [ENVID=]` (RFC 5321 §4.1.1.2, RFC 3461 §4.3, §4.4). */\nexport async function mail(\n\tconnection: Connection,\n\targument: string,\n): Promise<void> {\n\tconst { state, settings } = connection;\n\tif (state.helo === undefined)\n\t\treturn connection.fail(reply(503, '5.5.1', 'Send EHLO first'));\n\tif (state.transaction.from !== undefined) {\n\t\treturn connection.fail(reply(503, '5.5.1', 'Nested MAIL command'));\n\t}\n\tif (settings.mode === 'submission' && state.user === undefined) {\n\t\treturn connection.fail(reply(530, '5.7.0', 'Authentication required'));\n\t}\n\tconst command = parsePathCommand(argument, 'FROM');\n\tif (!command)\n\t\treturn connection.fail(reply(501, '5.5.4', 'Syntax: MAIL FROM:<address>'));\n\tconst { path, parameters, repeated = [] } = command;\n\tconst dsn: Pick<Transaction, 'ret' | 'envid'> = {};\n\tlet body: '7BIT' | '8BITMIME' = '7BIT';\n\tlet smtputf8 = false;\n\tfor (const [key, value] of Object.entries(parameters)) {\n\t\tif (!state.esmtp)\n\t\t\treturn connection.fail(reply(555, '5.5.4', `${key} needs EHLO`));\n\t\tif (key === 'SIZE') {\n\t\t\tif (!/^\\d+$/.test(value))\n\t\t\t\treturn connection.fail(reply(501, '5.5.4', 'Syntax: SIZE=<bytes>'));\n\t\t\tif (Number(value) > settings.maxMessageSize) {\n\t\t\t\treturn connection.fail(\n\t\t\t\t\treply(552, '5.3.4', 'Message too big for system'),\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (key === 'BODY') {\n\t\t\tconst kind = value.toUpperCase();\n\t\t\tif (kind !== '7BIT' && kind !== '8BITMIME') {\n\t\t\t\treturn connection.fail(reply(501, '5.5.4', 'BODY is 7BIT or 8BITMIME'));\n\t\t\t}\n\t\t\tbody = kind;\n\t\t} else if (key === 'SMTPUTF8' && value === '') {\n\t\t\tsmtputf8 = true;\n\t\t} else if (key === 'AUTH') {\n\t\t\t// RFC 4954 §5: the original submitter; taken and not passed on.\n\t\t} else if (MAIL_DSN.has(key)) {\n\t\t\tconst wrong = readMailDsn(dsn, key, value, repeated);\n\t\t\tif (wrong) return connection.fail(reply(501, '5.5.4', wrong));\n\t\t} else {\n\t\t\treturn connection.fail(reply(555, '5.5.4', `${key} is not supported`));\n\t\t}\n\t}\n\tif (!smtputf8 && nonAscii(path.address)) {\n\t\treturn connection.fail(\n\t\t\treply(553, '5.6.7', 'A non-ASCII address needs SMTPUTF8'),\n\t\t);\n\t}\n\tconst options = settings.options;\n\tconst refused = options.onMailFrom\n\t\t? await connection.hook('onMailFrom', () =>\n\t\t\t\toptions.onMailFrom?.(path, connection.session),\n\t\t\t)\n\t\t: undefined;\n\tif (refused) return connection.send(refused);\n\tstate.transaction = {\n\t\tfrom: path.address,\n\t\tto: [],\n\t\trecipients: [],\n\t\tsmtputf8,\n\t\tbody,\n\t\t...dsn,\n\t};\n\tconnection.send(reply(250, '2.1.0', 'OK'));\n}\n\n/** `RCPT TO:<path> [NOTIFY=] [ORCPT=]` (RFC 5321 §4.1.1.3, RFC 3461 §4.1, §4.2), where relaying is refused without AUTH. */\nexport async function rcpt(\n\tconnection: Connection,\n\targument: string,\n): Promise<void> {\n\tconst { state, settings } = connection;\n\tif (state.transaction.from === undefined)\n\t\treturn connection.fail(reply(503, '5.5.1', 'Send MAIL first'));\n\tconst command = parsePathCommand(argument, 'TO');\n\tif (!command)\n\t\treturn connection.fail(reply(501, '5.5.4', 'Syntax: RCPT TO:<address>'));\n\tconst { path, parameters, repeated = [] } = command;\n\t// RFC 3461 §4.1, §4.2: NOTIFY and ORCPT.\n\tconst recipient: {\n\t\t-readonly [K in keyof EnvelopeRecipient]: EnvelopeRecipient[K];\n\t} = {\n\t\taddress: path.address,\n\t};\n\tfor (const [key, value] of Object.entries(parameters)) {\n\t\tif (!state.esmtp)\n\t\t\treturn connection.fail(reply(555, '5.5.4', `${key} needs EHLO`));\n\t\tif (!RCPT_DSN.has(key)) {\n\t\t\treturn connection.fail(reply(555, '5.5.4', `${key} is not supported`));\n\t\t}\n\t\tconst wrong = readRcptDsn(recipient, key, value, repeated);\n\t\tif (wrong) return connection.fail(reply(501, '5.5.4', wrong));\n\t}\n\tif (!state.transaction.smtputf8 && nonAscii(path.address)) {\n\t\treturn connection.fail(\n\t\t\treply(553, '5.6.7', 'A non-ASCII address needs SMTPUTF8'),\n\t\t);\n\t}\n\tif (state.transaction.to.length >= settings.maxRecipients) {\n\t\treturn connection.send(reply(452, '4.5.3', 'Too many recipients'));\n\t}\n\t// Never an open relay: a domain this server does not host takes AUTH.\n\t// `<postmaster>` with no domain is this server's own (RFC 5321 §4.5.1).\n\tif (state.user === undefined && path.postmaster !== true) {\n\t\tconst local = await connection.check('localDomains', () =>\n\t\t\tsettings.isLocal(path.domain),\n\t\t);\n\t\tif (local.failed) return connection.send(LOCAL_ERROR);\n\t\tif (local.value !== true) {\n\t\t\treturn connection.fail(reply(554, '5.7.1', 'Relay access denied'));\n\t\t}\n\t}\n\tconst options = settings.options;\n\tconst refused = options.onRcptTo\n\t\t? await connection.hook('onRcptTo', () =>\n\t\t\t\toptions.onRcptTo?.(path, connection.session),\n\t\t\t)\n\t\t: undefined;\n\tif (refused) return connection.send(refused);\n\tstate.transaction.to.push(path.address);\n\tstate.transaction.recipients.push(recipient);\n\tconnection.send(reply(250, '2.1.5', 'OK'));\n}\n",
12
+ "// The value rules repeat packages/jmap/src/submission/dsn.ts, packages/smtp/src/client/dsn.ts and\n// packages/queue/src/contract/dsn-checks.ts (AGENTS.md, Deliberate duplications); this copy reads the wire.\nimport { decodeUtf8Orcpt } from '../protocol/orcpt';\nimport { decodeXtext } from '../protocol/xtext';\nimport type { DsnNotify, EnvelopeRecipient } from './options';\nimport type { Transaction } from './state';\n\n/** The DSN parameters (RFC 3461 §4) MAIL FROM takes. */\nexport const MAIL_DSN = new Set(['RET', 'ENVID']);\n/** The DSN parameters (RFC 3461 §4) RCPT TO takes. */\nexport const RCPT_DSN = new Set(['NOTIFY', 'ORCPT']);\n\nconst EVENTS: readonly DsnNotify[] = ['SUCCESS', 'FAILURE', 'DELAY'];\n\n/**\n * `ENVID=` is at most 100 characters as it is sent, xtext (RFC 3461 §4.4: \"The\n * ENVID parameter MAY be up to 100 characters in length\", §5.4: a server MUST\n * accept 100), and printable ASCII once decoded.\n */\nfunction envid(value: string): string | undefined {\n\tconst text = value.length <= 100 ? decodeXtext(value) : undefined;\n\treturn text !== undefined && /^[ -~]+$/.test(text) ? text : undefined;\n}\n\n/** `NOTIFY=NEVER` or a comma list of events, with no duplicate (RFC 3461 §4.1). */\nfunction notify(value: string): 'NEVER' | DsnNotify[] | undefined {\n\tconst items = value.toUpperCase().split(',');\n\tif (items.length === 1 && items[0] === 'NEVER') return 'NEVER';\n\tconst events: DsnNotify[] = [];\n\tfor (const item of items) {\n\t\tconst event = EVENTS.find((candidate) => candidate === item);\n\t\tif (!event || events.includes(event)) return undefined;\n\t\tevents.push(event);\n\t}\n\treturn events;\n}\n\n/**\n * `ORCPT=<addr-type>;<address>` (RFC 3461 §4.2), at most 500 characters as it\n * is sent (octets, which only differ under SMTPUTF8): \"The entire ORCPT\n * parameter MAY be up to 500 characters in length\". `utf-8` is RFC 6533's\n * `utf-8-addr-xtext`, or with SMTPUTF8 `utf-8-addr-unitext`; every other type\n * is xtext (RFC 3461 §5.1(b): an unknown type is passed on). The type stays\n * as sent. The text of the `501` when it is wrong.\n */\nfunction orcpt(\n\tvalue: string,\n\tsmtputf8: boolean,\n): { type: string; address: string } | string {\n\tconst syntax = 'Syntax: ORCPT=<addr-type>;<xtext>';\n\tconst semicolon = value.indexOf(';');\n\tif (semicolon < 1 || new TextEncoder().encode(value).length > 500)\n\t\treturn syntax;\n\tconst type = value.slice(0, semicolon);\n\tif (!/^[A-Za-z0-9-]+$/.test(type)) return syntax;\n\tconst wire = value.slice(semicolon + 1);\n\tconst kind = type.toLowerCase();\n\tconst address =\n\t\tkind === 'utf-8' ? decodeUtf8Orcpt(wire, smtputf8) : decodeXtext(wire);\n\treturn address ? { type, address } : syntax;\n}\n\n/**\n * Reads one DSN parameter of MAIL FROM into the transaction under way.\n * The text of the `501` to answer when the value is wrong, else `undefined`.\n */\nexport function readMailDsn(\n\tinto: Pick<Transaction, 'ret' | 'envid'>,\n\tkey: string,\n\tvalue: string,\n\trepeated: readonly string[],\n): string | undefined {\n\tif (repeated.includes(key)) return `${key} given twice`;\n\tif (key === 'RET') {\n\t\tconst ret = value.toUpperCase();\n\t\tif (ret !== 'FULL' && ret !== 'HDRS') return 'Syntax: RET=FULL or RET=HDRS';\n\t\tinto.ret = ret;\n\t\treturn undefined;\n\t}\n\tconst id = envid(value);\n\tif (id === undefined) return 'Syntax: ENVID=<xtext, 1 to 100 characters>';\n\tinto.envid = id;\n\treturn undefined;\n}\n\n/**\n * Reads one DSN parameter of RCPT TO into `into`; `smtputf8` is whether the\n * transaction uses SMTPUTF8 (the form of a `utf-8` ORCPT). The text of the `501` to\n * answer when the value is wrong, else `undefined`.\n */\nexport function readRcptDsn(\n\tinto: {\n\t\tnotify?: 'NEVER' | readonly DsnNotify[];\n\t\torcpt?: EnvelopeRecipient['orcpt'];\n\t},\n\tkey: string,\n\tvalue: string,\n\trepeated: readonly string[],\n\tsmtputf8 = false,\n): string | undefined {\n\tif (repeated.includes(key)) return `${key} given twice`;\n\tif (key === 'NOTIFY') {\n\t\tconst events = notify(value);\n\t\tif (!events) return 'Syntax: NOTIFY=NEVER or NOTIFY=SUCCESS,FAILURE,DELAY';\n\t\tinto.notify = events;\n\t\treturn undefined;\n\t}\n\tconst original = orcpt(value, smtputf8);\n\tif (typeof original === 'string') return original;\n\tinto.orcpt = original;\n\treturn undefined;\n}\n",
13
+ "import { parsePathCommand } from '../protocol/command';\nimport { reply } from '../protocol/reply';\nimport type { Connection } from './connection';\nimport { MAIL_DSN, RCPT_DSN, readMailDsn, readRcptDsn } from './dsn-params';\nimport { LOCAL_ERROR } from './guard';\nimport type { EnvelopeRecipient } from './options';\nimport type { Transaction } from './state';\n\nfunction nonAscii(text: string): boolean {\n\tfor (let i = 0; i < text.length; i++)\n\t\tif (text.charCodeAt(i) > 0x7f) return true;\n\treturn false;\n}\n\n/** `MAIL FROM:<path> [SIZE=] [BODY=] [SMTPUTF8] [AUTH=] [RET=] [ENVID=]` (RFC 5321 §4.1.1.2, RFC 3461 §4.3, §4.4). */\nexport async function mail(\n\tconnection: Connection,\n\targument: string,\n): Promise<void> {\n\tconst { state, settings } = connection;\n\tif (state.helo === undefined)\n\t\treturn connection.fail(reply(503, '5.5.1', 'Send EHLO first'));\n\tif (state.transaction.from !== undefined) {\n\t\treturn connection.fail(reply(503, '5.5.1', 'Nested MAIL command'));\n\t}\n\tif (settings.mode === 'submission' && state.user === undefined) {\n\t\treturn connection.fail(reply(530, '5.7.0', 'Authentication required'));\n\t}\n\tconst command = parsePathCommand(argument, 'FROM');\n\tif (!command)\n\t\treturn connection.fail(reply(501, '5.5.4', 'Syntax: MAIL FROM:<address>'));\n\tconst { path, parameters, repeated = [] } = command;\n\tconst dsn: Pick<Transaction, 'ret' | 'envid'> = {};\n\tlet body: '7BIT' | '8BITMIME' = '7BIT';\n\tlet smtputf8 = false;\n\tfor (const [key, value] of Object.entries(parameters)) {\n\t\tif (!state.esmtp)\n\t\t\treturn connection.fail(reply(555, '5.5.4', `${key} needs EHLO`));\n\t\tif (key === 'SIZE') {\n\t\t\tif (!/^\\d+$/.test(value))\n\t\t\t\treturn connection.fail(reply(501, '5.5.4', 'Syntax: SIZE=<bytes>'));\n\t\t\tif (Number(value) > settings.maxMessageSize) {\n\t\t\t\treturn connection.fail(\n\t\t\t\t\treply(552, '5.3.4', 'Message too big for system'),\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (key === 'BODY') {\n\t\t\tconst kind = value.toUpperCase();\n\t\t\tif (kind !== '7BIT' && kind !== '8BITMIME') {\n\t\t\t\treturn connection.fail(reply(501, '5.5.4', 'BODY is 7BIT or 8BITMIME'));\n\t\t\t}\n\t\t\tbody = kind;\n\t\t} else if (key === 'SMTPUTF8' && value === '') {\n\t\t\tsmtputf8 = true;\n\t\t} else if (key === 'AUTH') {\n\t\t\t// RFC 4954 §5: the original submitter; taken and not passed on.\n\t\t} else if (MAIL_DSN.has(key)) {\n\t\t\tconst wrong = readMailDsn(dsn, key, value, repeated);\n\t\t\tif (wrong) return connection.fail(reply(501, '5.5.4', wrong));\n\t\t} else {\n\t\t\treturn connection.fail(reply(555, '5.5.4', `${key} is not supported`));\n\t\t}\n\t}\n\tif (!smtputf8 && nonAscii(path.address)) {\n\t\treturn connection.fail(\n\t\t\treply(553, '5.6.7', 'A non-ASCII address needs SMTPUTF8'),\n\t\t);\n\t}\n\tconst options = settings.options;\n\tconst refused = options.onMailFrom\n\t\t? await connection.hook('onMailFrom', () =>\n\t\t\t\toptions.onMailFrom?.(path, connection.session),\n\t\t\t)\n\t\t: undefined;\n\tif (refused) return connection.send(refused);\n\tstate.transaction = {\n\t\tfrom: path.address,\n\t\tto: [],\n\t\trecipients: [],\n\t\tsmtputf8,\n\t\tbody,\n\t\t...dsn,\n\t};\n\tconnection.send(reply(250, '2.1.0', 'OK'));\n}\n\n/** `RCPT TO:<path> [NOTIFY=] [ORCPT=]` (RFC 5321 §4.1.1.3, RFC 3461 §4.1, §4.2), where relaying is refused without AUTH. */\nexport async function rcpt(\n\tconnection: Connection,\n\targument: string,\n): Promise<void> {\n\tconst { state, settings } = connection;\n\tif (state.transaction.from === undefined)\n\t\treturn connection.fail(reply(503, '5.5.1', 'Send MAIL first'));\n\tconst command = parsePathCommand(argument, 'TO');\n\tif (!command)\n\t\treturn connection.fail(reply(501, '5.5.4', 'Syntax: RCPT TO:<address>'));\n\tconst { path, parameters, repeated = [] } = command;\n\t// RFC 3461 §4.1, §4.2: NOTIFY and ORCPT.\n\tconst recipient: {\n\t\t-readonly [K in keyof EnvelopeRecipient]: EnvelopeRecipient[K];\n\t} = {\n\t\taddress: path.address,\n\t};\n\tfor (const [key, value] of Object.entries(parameters)) {\n\t\tif (!state.esmtp)\n\t\t\treturn connection.fail(reply(555, '5.5.4', `${key} needs EHLO`));\n\t\tif (!RCPT_DSN.has(key)) {\n\t\t\treturn connection.fail(reply(555, '5.5.4', `${key} is not supported`));\n\t\t}\n\t\tconst wrong = readRcptDsn(\n\t\t\trecipient,\n\t\t\tkey,\n\t\t\tvalue,\n\t\t\trepeated,\n\t\t\tstate.transaction.smtputf8,\n\t\t);\n\t\tif (wrong) return connection.fail(reply(501, '5.5.4', wrong));\n\t}\n\tif (!state.transaction.smtputf8 && nonAscii(path.address)) {\n\t\treturn connection.fail(\n\t\t\treply(553, '5.6.7', 'A non-ASCII address needs SMTPUTF8'),\n\t\t);\n\t}\n\tif (state.transaction.to.length >= settings.maxRecipients) {\n\t\treturn connection.send(reply(452, '4.5.3', 'Too many recipients'));\n\t}\n\t// Never an open relay: a domain this server does not host takes AUTH.\n\t// `<postmaster>` with no domain is this server's own (RFC 5321 §4.5.1).\n\tif (state.user === undefined && path.postmaster !== true) {\n\t\tconst local = await connection.check('localDomains', () =>\n\t\t\tsettings.isLocal(path.domain),\n\t\t);\n\t\tif (local.failed) return connection.send(LOCAL_ERROR);\n\t\tif (local.value !== true) {\n\t\t\treturn connection.fail(reply(554, '5.7.1', 'Relay access denied'));\n\t\t}\n\t}\n\tconst options = settings.options;\n\tconst refused = options.onRcptTo\n\t\t? await connection.hook('onRcptTo', () =>\n\t\t\t\toptions.onRcptTo?.(path, connection.session),\n\t\t\t)\n\t\t: undefined;\n\tif (refused) return connection.send(refused);\n\tstate.transaction.to.push(path.address);\n\tstate.transaction.recipients.push(recipient);\n\tconnection.send(reply(250, '2.1.5', 'OK'));\n}\n",
14
14
  "import { parseCommand } from '../protocol/command';\nimport { isHelloName } from '../protocol/path';\nimport { reply } from '../protocol/reply';\nimport { authenticate, continueAuth } from './auth';\nimport type { Connection } from './connection';\nimport { emptyTransaction } from './state';\nimport { mail, rcpt } from './transaction';\n\nfunction ehloLines(connection: Connection): string[] {\n\tconst { settings, state } = connection;\n\tconst lines = [\n\t\t`${settings.options.hostname} greets ${state.helo}`,\n\t\t'PIPELINING',\n\t\t`SIZE ${settings.maxMessageSize}`,\n\t\t'8BITMIME',\n\t\t'SMTPUTF8',\n\t\t'DSN',\n\t\t'ENHANCEDSTATUSCODES',\n\t];\n\tif (settings.options.tls && !state.secure) lines.push('STARTTLS');\n\tif (\n\t\tsettings.options.authenticate &&\n\t\tstate.secure &&\n\t\tstate.user === undefined\n\t) {\n\t\tlines.push('AUTH PLAIN LOGIN');\n\t}\n\treturn lines;\n}\n\nasync function hello(\n\tconnection: Connection,\n\targument: string,\n\tesmtp: boolean,\n): Promise<void> {\n\tif (!isHelloName(argument)) {\n\t\tconnection.fail(\n\t\t\treply(501, '5.5.4', `Syntax: ${esmtp ? 'EHLO' : 'HELO'} hostname`),\n\t\t);\n\t\treturn;\n\t}\n\tconst { state } = connection;\n\tstate.helo = argument;\n\tstate.esmtp = esmtp;\n\t// RFC 5321 §4.1.4: EHLO or HELO resets a transaction in progress.\n\tstate.transaction = emptyTransaction();\n\tconnection.send(\n\t\tesmtp\n\t\t\t? reply(250, undefined, ehloLines(connection))\n\t\t\t: reply(\n\t\t\t\t\t250,\n\t\t\t\t\tundefined,\n\t\t\t\t\t`${connection.settings.options.hostname} greets ${argument}`,\n\t\t\t\t),\n\t);\n}\n\nfunction data(connection: Connection, argument: string): void {\n\tconst { state } = connection;\n\tconst refusal =\n\t\targument !== ''\n\t\t\t? reply(501, '5.5.4', 'Syntax: DATA')\n\t\t\t: state.transaction.from === undefined\n\t\t\t\t? reply(503, '5.5.1', 'Send MAIL first')\n\t\t\t\t: state.transaction.to.length === 0\n\t\t\t\t\t? reply(554, '5.5.1', 'No valid recipients')\n\t\t\t\t\t: undefined;\n\tif (refusal) {\n\t\tconnection.fail(refusal);\n\t\t// What the client pipelined after a refused DATA is message content,\n\t\t// not commands: running it would let a message smuggle commands in.\n\t\tconnection.input.drop();\n\t\treturn;\n\t}\n\tconnection.send(reply(354, undefined, 'End data with <CR><LF>.<CR><LF>'));\n\tconnection.input.beginData();\n}\n\nasync function startTls(\n\tconnection: Connection,\n\targument: string,\n): Promise<void> {\n\tconst { state, settings } = connection;\n\tconst refusal = !settings.options.tls\n\t\t? reply(454, '4.7.0', 'TLS not available')\n\t\t: state.secure\n\t\t\t? reply(503, '5.5.1', 'TLS already active')\n\t\t\t: argument !== ''\n\t\t\t\t? reply(501, '5.5.4', 'Syntax: STARTTLS')\n\t\t\t\t: undefined;\n\tif (refusal) {\n\t\tconnection.fail(refusal);\n\t\treturn;\n\t}\n\tconnection.send(reply(220, '2.0.0', 'Ready to start TLS'));\n\tconnection.input.ignore();\n\t// The 220 must reach the client in clear before the handshake starts.\n\tawait connection.transport.drained();\n\tif (connection.closed) return;\n\tconnection.transport.startTls();\n\tconnection.input.accept();\n\t// RFC 3207 §4.2: everything learnt before TLS is forgotten.\n\tstate.secure = true;\n\tstate.helo = undefined;\n\tstate.esmtp = false;\n\tstate.transaction = emptyTransaction();\n}\n\n/** Runs one command line, or the client's answer to an AUTH challenge. */\nexport async function runCommand(\n\tconnection: Connection,\n\tline: string,\n): Promise<void> {\n\tconst { state } = connection;\n\tif (state.waiting !== 'command') return continueAuth(connection, line);\n\tconst { verb, argument } = parseCommand(line);\n\tswitch (verb) {\n\t\tcase 'EHLO':\n\t\t\treturn hello(connection, argument, true);\n\t\tcase 'HELO':\n\t\t\treturn hello(connection, argument, false);\n\t\tcase 'MAIL':\n\t\t\treturn mail(connection, argument);\n\t\tcase 'RCPT':\n\t\t\treturn rcpt(connection, argument);\n\t\tcase 'DATA':\n\t\t\treturn data(connection, argument);\n\t\tcase 'RSET':\n\t\t\tstate.transaction = emptyTransaction();\n\t\t\treturn connection.send(reply(250, '2.0.0', 'OK'));\n\t\tcase 'NOOP':\n\t\t\treturn connection.send(reply(250, '2.0.0', 'OK'));\n\t\tcase 'VRFY':\n\t\t\treturn connection.send(\n\t\t\t\treply(\n\t\t\t\t\t252,\n\t\t\t\t\t'2.5.0',\n\t\t\t\t\t'Cannot VRFY user; send the message and it will be tried',\n\t\t\t\t),\n\t\t\t);\n\t\tcase 'HELP':\n\t\t\treturn connection.send(reply(214, '2.0.0', 'See RFC 5321'));\n\t\tcase 'QUIT':\n\t\t\treturn connection.quit(\n\t\t\t\treply(\n\t\t\t\t\t221,\n\t\t\t\t\t'2.0.0',\n\t\t\t\t\t`${connection.settings.options.hostname} closing connection`,\n\t\t\t\t),\n\t\t\t);\n\t\tcase 'STARTTLS':\n\t\t\treturn startTls(connection, argument);\n\t\tcase 'AUTH':\n\t\t\treturn authenticate(connection, argument);\n\t\tdefault:\n\t\t\treturn connection.fail(reply(500, '5.5.2', 'Command unrecognized'));\n\t}\n}\n",
15
15
  "import type { ReceivedMessage } from './options';\nimport type { Transaction } from './state';\n\n/** The envelope of a message as `onData` is told it, from the transaction that ended in DATA. */\nexport function envelopeOf(\n\ttransaction: Transaction,\n): ReceivedMessage['envelope'] {\n\treturn {\n\t\tfrom: transaction.from ?? '',\n\t\tto: [...transaction.to],\n\t\tsmtputf8: transaction.smtputf8,\n\t\tbody: transaction.body,\n\t\t...(transaction.ret !== undefined && { ret: transaction.ret }),\n\t\t...(transaction.envid !== undefined && { envid: transaction.envid }),\n\t\trecipients: [...transaction.recipients],\n\t};\n}\n",
16
16
  "import { isIPv6 } from 'node:net';\nimport type { Connection } from './connection';\n\nconst DAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nconst MONTHS = [\n\t'Jan',\n\t'Feb',\n\t'Mar',\n\t'Apr',\n\t'May',\n\t'Jun',\n\t'Jul',\n\t'Aug',\n\t'Sep',\n\t'Oct',\n\t'Nov',\n\t'Dec',\n];\n\nconst two = (n: number) => String(n).padStart(2, '0');\n\n/** An RFC 5322 §3.3 date-time, in UTC. */\nexport function dateTime(date: Date): string {\n\treturn `${DAYS[date.getUTCDay()]}, ${date.getUTCDate()} ${MONTHS[date.getUTCMonth()]} ${date.getUTCFullYear()} ${two(date.getUTCHours())}:${two(date.getUTCMinutes())}:${two(date.getUTCSeconds())} +0000`;\n}\n\n/** RFC 3848: how the message came — SMTP, ESMTP, then S for TLS and A for AUTH. */\nexport function protocolOf(\n\tesmtp: boolean,\n\tsecure: boolean,\n\tauthenticated: boolean,\n): string {\n\tif (!esmtp) return 'SMTP';\n\treturn `ESMTP${secure ? 'S' : ''}${authenticated ? 'A' : ''}`;\n}\n\n/** The client's address as a domain literal (RFC 5321 §4.1.3): an IPv6 address is tagged `IPv6:`. */\nexport function addressLiteral(address: string): string {\n\t// A zone (`fe80::1%en0`) names an interface of this host: not part of the literal.\n\tconst bare = address.replace(/%.*$/, '');\n\treturn isIPv6(bare) ? `IPv6:${bare}` : printable(address);\n}\n\n/** Keeps a client-given name printable in a header: anything else becomes `?`. */\nfunction printable(text: string): string {\n\tlet out = '';\n\tfor (const char of text) {\n\t\tconst code = char.charCodeAt(0);\n\t\tout += code > 0x20 && code < 0x7f ? char : '?';\n\t}\n\treturn out;\n}\n\n/** Whether an address can go into the `for` clause as it is: printable, and no `;` to end the clause early. */\nfunction plain(address: string): boolean {\n\treturn printable(address) === address && !address.includes(';');\n}\n\n/**\n * The Received field the server puts on top (RFC 5321 §4.4): who sent the\n * message, from where, how, to whom when there is one recipient, and when.\n */\nexport function receivedField(\n\tconnection: Connection,\n\trecipients: readonly string[],\n\tid: string,\n\tnow = new Date(),\n): string {\n\tconst { state, transport, settings } = connection;\n\tconst lines = [\n\t\t`Received: from ${printable(state.helo ?? 'unknown')} ([${addressLiteral(transport.remoteAddress)}])`,\n\t\t`\\tby ${settings.options.hostname} with ${protocolOf(state.esmtp, state.secure, state.user !== undefined)} id ${id}`,\n\t];\n\tconst [recipient] = recipients;\n\tif (recipients.length === 1 && recipient !== undefined && plain(recipient)) {\n\t\tlines.push(`\\tfor <${recipient}>`);\n\t}\n\tlines[lines.length - 1] += `; ${dateTime(now)}`;\n\treturn `${lines.join('\\r\\n')}\\r\\n`;\n}\n",
@@ -31,7 +31,7 @@
31
31
  "/**\n * The connections a server holds, and how many each client holds, by\n * `clientKey`. `release` is idempotent: every close handler calls it.\n */\nexport class Slots<T> {\n\treadonly #open = new Map<T, string | undefined>();\n\treadonly #perClient = new Map<string, number>();\n\n\tget size(): number {\n\t\treturn this.#open.size;\n\t}\n\n\t/** How many connections the client `key` holds. */\n\tof(key: string | undefined): number {\n\t\treturn key === undefined ? 0 : (this.#perClient.get(key) ?? 0);\n\t}\n\n\ttake(connection: T, key: string | undefined): void {\n\t\tthis.#open.set(connection, key);\n\t\tif (key !== undefined) this.#perClient.set(key, this.of(key) + 1);\n\t}\n\n\trelease(connection: T): void {\n\t\tif (!this.#open.has(connection)) return;\n\t\tconst key = this.#open.get(connection);\n\t\tthis.#open.delete(connection);\n\t\tif (key === undefined) return;\n\t\tconst left = this.of(key) - 1;\n\t\tif (left > 0) this.#perClient.set(key, left);\n\t\telse this.#perClient.delete(key);\n\t}\n\n\tconnections(): T[] {\n\t\treturn [...this.#open.keys()];\n\t}\n}\n",
32
32
  "import type { Socket, TCPSocketListener } from 'bun';\nimport { SmtpError } from '../errors';\nimport {\n\ttype Listening,\n\tlistenerHandlers,\n\tupgradingHandlers,\n} from './admission';\nimport type { Connection } from './connection';\nimport { handlers, type SocketState } from './listener';\nimport type { SmtpServerOptions, TlsOptions } from './options';\nimport { settingsOf } from './settings';\nimport { Slots } from './slots';\n\n/** A key or certificate `listen` or `setTls` cannot use: `INVALID_OPTION`, the reason as its `cause`. */\nconst invalidTls = (message: string, cause: unknown) =>\n\tnew SmtpError('INVALID_OPTION', message, { cause });\n\n/** What a `listen` that a `stop()` came before says. */\nconst STOPPED = 'listen(): stop() was called before the server bound its port';\n\n/** Binds the port, once `listen`'s guard passed. */\nasync function bind(\n\tlistening: Omit<Listening, 'proxied'>,\n\tport: number,\n\thostname: string,\n\tstopped: () => boolean,\n): Promise<TCPSocketListener<SocketState>> {\n\t// Implicit TLS: the key and certificate are checked first, so one\n\t// that cannot be used fails here alike, with a proxy or without.\n\tconst { tls } = listening.settings;\n\tif (listening.secure && tls) await tls.load(invalidTls, 'listen()');\n\t// `stop()` came while the key was being read: nothing is bound.\n\tif (stopped()) {\n\t\tthrow new SmtpError('STOPPED', STOPPED);\n\t}\n\t// Behind a proxy: a clear listener, TLS after the header. Without\n\t// one, the listener is clear too, and every socket upgrades at once:\n\t// the pair `setTls` replaced is read per connection, which a native\n\t// TLS listener, bound to one context, cannot do.\n\tconst proxied =\n\t\tlistening.secure && listening.settings.trusts ? tls : undefined;\n\tconst full = {\n\t\t...handlers(listening.settings),\n\t\t...listenerHandlers({\n\t\t\t...listening,\n\t\t\t...(proxied ? { proxied } : {}),\n\t\t}),\n\t};\n\treturn Bun.listen<SocketState>({\n\t\thostname,\n\t\tport,\n\t\tsocket:\n\t\t\tlistening.secure && !proxied\n\t\t\t\t? upgradingHandlers(full, listening.settings)\n\t\t\t\t: full,\n\t});\n}\n\nexport interface SmtpServer {\n\t/** Starts listening; resolves once the port is bound. Once only: a second call throws. */\n\tlisten(options: {\n\t\tport: number;\n\t\thostname?: string;\n\t}): Promise<{ port: number; hostname: string }>;\n\t/**\n\t * Uses a renewed key and certificate from the next STARTTLS upgrade or\n\t * implicit TLS connection on; the sessions open keep the TLS they have.\n\t * The pair is read and checked first: one that cannot be used throws\n\t * `INVALID_OPTION` and leaves the one in use. Needs a server made with\n\t * `tls`.\n\t */\n\tsetTls(tls: TlsOptions): Promise<void>;\n\t/** Stops listening; `closeConnections` hangs up on every client too. */\n\tstop(closeConnections?: boolean): void;\n\t/** Open connections. */\n\treadonly connections: number;\n}\n\n/**\n * An SMTP server (RFC 5321) on `Bun.listen`: EHLO with PIPELINING, SIZE,\n * 8BITMIME, SMTPUTF8 and ENHANCEDSTATUSCODES; STARTTLS (RFC 3207) or\n * implicit TLS (RFC 8314); AUTH PLAIN and LOGIN over TLS only (RFC 4954);\n * policy through hooks. It never relays without AUTH: a recipient outside\n * `localDomains` is refused to an unauthenticated session, whatever the\n * hooks say.\n */\nexport function createSmtpServer(options: SmtpServerOptions): SmtpServer {\n\tconst settings = settingsOf(options);\n\tlet listener: TCPSocketListener<SocketState> | undefined;\n\tconst slots = new Slots<Connection>();\n\t/** Implicit TLS sockets still in their handshake, for `stop(true)`. */\n\tconst handshaking = new Set<Socket<SocketState>>();\n\tconst secure = options.implicitTls === true;\n\t/** `listen` has not resolved yet: it may be reading the TLS material, before it binds. */\n\tlet starting = false;\n\t/** `stop()` was called while `starting`: `listen` leaves nothing bound. */\n\tlet stopRequested = false;\n\treturn {\n\t\tget connections() {\n\t\t\treturn slots.size;\n\t\t},\n\t\tasync setTls(tls) {\n\t\t\tif (!settings.tls) {\n\t\t\t\tthrow new SmtpError(\n\t\t\t\t\t'INVALID_OPTION',\n\t\t\t\t\t'setTls(): the server was made without tls, so it has none to replace',\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait settings.tls.replace(tls, invalidTls, 'setTls()');\n\t\t},\n\t\tasync listen({ port, hostname = '0.0.0.0' }) {\n\t\t\tif (listener || starting) {\n\t\t\t\tthrow new SmtpError(\n\t\t\t\t\t'ALREADY_LISTENING',\n\t\t\t\t\tlistener\n\t\t\t\t\t\t? `listen(): the server is already listening on ${listener.hostname}:${listener.port}`\n\t\t\t\t\t\t: 'listen(): the server is already starting to listen',\n\t\t\t\t);\n\t\t\t}\n\t\t\t// Set before the first await: a second call meanwhile throws, never binds.\n\t\t\tstarting = true;\n\t\t\tstopRequested = false;\n\t\t\ttry {\n\t\t\t\tconst bound = await bind(\n\t\t\t\t\t{ settings, slots, handshaking, secure },\n\t\t\t\t\tport,\n\t\t\t\t\thostname,\n\t\t\t\t\t() => stopRequested,\n\t\t\t\t);\n\t\t\t\t// `stop()` came before `listen` resolved: nothing is left listening.\n\t\t\t\tif (stopRequested) {\n\t\t\t\t\tbound.stop(true);\n\t\t\t\t\tthrow new SmtpError('STOPPED', STOPPED);\n\t\t\t\t}\n\t\t\t\tlistener = bound;\n\t\t\t\treturn { port: listener.port, hostname: listener.hostname };\n\t\t\t} finally {\n\t\t\t\tstarting = false;\n\t\t\t}\n\t\t},\n\t\tstop(closeConnections = false) {\n\t\t\tif (starting) stopRequested = true;\n\t\t\tlistener?.stop(closeConnections);\n\t\t\tlistener = undefined;\n\t\t\tif (!closeConnections) return;\n\t\t\t// Bun's `stop(true)` closes the sockets the listener holds, and a\n\t\t\t// socket STARTTLS moved to TLS is no longer one of them: hang up on\n\t\t\t// every connection here, as a timeout does. A socket still in its\n\t\t\t// handshake has no TLS to say 421 on: it is reset.\n\t\t\tconst stuck = new Set<Connection | undefined>();\n\t\t\tfor (const socket of [...handshaking]) {\n\t\t\t\tstuck.add(socket.data?.connection);\n\t\t\t\thandshaking.delete(socket);\n\t\t\t\tsocket.terminate();\n\t\t\t}\n\t\t\tfor (const connection of slots.connections()) {\n\t\t\t\tif (!stuck.has(connection)) connection.close();\n\t\t\t}\n\t\t},\n\t};\n}\n"
33
33
  ],
34
- "mappings": "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",
35
- "debugId": "5D8963483AFC536F64756E2164756E21",
34
+ "mappings": "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",
35
+ "debugId": "4D2876010D33AF0464756E2164756E21",
36
36
  "names": []
37
37
  }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * The length of an address in its `utf-8-addr-unitext` form, the shortest
3
+ * (raw UTF-8 octets for a non-ASCII character, `\x{HH}` is 6): what a `utf-8`
4
+ * ORCPT counts against the 500 characters of RFC 3461 §4.2 in the copies that
5
+ * do not read the wire (AGENTS.md, Deliberate duplications).
6
+ */
7
+ export declare function utf8OrcptLength(address: string): number;
8
+ /**
9
+ * Encodes an address as `utf-8-addr-xtext` (`unicode` false, 7-bit safe) or
10
+ * `utf-8-addr-unitext` (`unicode` true, for a session with SMTPUTF8: the
11
+ * non-ASCII characters stay raw UTF-8); every other character is
12
+ * `\x{HH}` (at least 2 digits). `undefined` when the text holds a lone
13
+ * surrogate or a character the grammar cannot express (NUL, `0A` to `0F`, `1A`
14
+ * to `1F`).
15
+ */
16
+ export declare function encodeUtf8Orcpt(address: string, unicode: boolean): string | undefined;
17
+ /**
18
+ * Decodes the address of an `ORCPT=utf-8;` value (RFC 6533 §3): the
19
+ * `utf-8-addr-xtext` form, plus, when `unicode` (the transaction uses
20
+ * SMTPUTF8), raw UTF-8 as `utf-8-addr-unitext` allows. `undefined` when it is
21
+ * neither: a character that must be escaped, a malformed or out-of-range
22
+ * `\x{…}`, an escaped NUL or control the grammar has no HEXPOINT for (`0A` to
23
+ * `0F`, `1A` to `1F`: line breaks stay out of a DSN header), a raw non-ASCII character
24
+ * without SMTPUTF8, or nothing.
25
+ */
26
+ export declare function decodeUtf8Orcpt(value: string, unicode: boolean): string | undefined;
27
+ //# sourceMappingURL=orcpt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orcpt.d.ts","sourceRoot":"","sources":["../../src/protocol/orcpt.ts"],"names":[],"mappings":"AA8BA;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,GACd,MAAM,GAAG,SAAS,CAYpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACd,MAAM,GAAG,SAAS,CAsBpB"}
@@ -10,11 +10,12 @@ export declare const RCPT_DSN: Set<string>;
10
10
  */
11
11
  export declare function readMailDsn(into: Pick<Transaction, 'ret' | 'envid'>, key: string, value: string, repeated: readonly string[]): string | undefined;
12
12
  /**
13
- * Reads one DSN parameter of RCPT TO into `into`. The text of the `501` to
13
+ * Reads one DSN parameter of RCPT TO into `into`; `smtputf8` is whether the
14
+ * transaction uses SMTPUTF8 (the form of a `utf-8` ORCPT). The text of the `501` to
14
15
  * answer when the value is wrong, else `undefined`.
15
16
  */
16
17
  export declare function readRcptDsn(into: {
17
18
  notify?: 'NEVER' | readonly DsnNotify[];
18
19
  orcpt?: EnvelopeRecipient['orcpt'];
19
- }, key: string, value: string, repeated: readonly string[]): string | undefined;
20
+ }, key: string, value: string, repeated: readonly string[], smtputf8?: boolean): string | undefined;
20
21
  //# sourceMappingURL=dsn-params.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dsn-params.d.ts","sourceRoot":"","sources":["../../src/server/dsn-params.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,wDAAwD;AACxD,eAAO,MAAM,QAAQ,aAA4B,CAAC;AAClD,sDAAsD;AACtD,eAAO,MAAM,QAAQ,aAA+B,CAAC;AA0CrD;;;GAGG;AACH,wBAAgB,WAAW,CAC1B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,OAAO,CAAC,EACxC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,SAAS,MAAM,EAAE,GACzB,MAAM,GAAG,SAAS,CAYpB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAC1B,IAAI,EAAE;IACL,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,SAAS,EAAE,CAAC;IACxC,KAAK,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;CACnC,EACD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,SAAS,MAAM,EAAE,GACzB,MAAM,GAAG,SAAS,CAYpB"}
1
+ {"version":3,"file":"dsn-params.d.ts","sourceRoot":"","sources":["../../src/server/dsn-params.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,wDAAwD;AACxD,eAAO,MAAM,QAAQ,aAA4B,CAAC;AAClD,sDAAsD;AACtD,eAAO,MAAM,QAAQ,aAA+B,CAAC;AAoDrD;;;GAGG;AACH,wBAAgB,WAAW,CAC1B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,OAAO,CAAC,EACxC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,SAAS,MAAM,EAAE,GACzB,MAAM,GAAG,SAAS,CAYpB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAC1B,IAAI,EAAE;IACL,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,SAAS,EAAE,CAAC;IACxC,KAAK,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;CACnC,EACD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,QAAQ,UAAQ,GACd,MAAM,GAAG,SAAS,CAYpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/server/transaction.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAY/C,sHAAsH;AACtH,wBAAsB,IAAI,CACzB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAkEf;AAED,4HAA4H;AAC5H,wBAAsB,IAAI,CACzB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAoDf"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/server/transaction.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAY/C,sHAAsH;AACtH,wBAAsB,IAAI,CACzB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAkEf;AAED,4HAA4H;AAC5H,wBAAsB,IAAI,CACzB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CA0Df"}
package/docs/guide.md CHANGED
@@ -477,7 +477,7 @@ export interface EnvelopeRecipient {
477
477
  readonly address: string; // the matching entry of `to`
478
478
  /** NOTIFY= (RFC 3461 §4.1): `'NEVER'` or the events given; absent when not sent. */
479
479
  readonly notify?: 'NEVER' | readonly ('SUCCESS' | 'FAILURE' | 'DELAY')[];
480
- /** ORCPT= (RFC 3461 §4.2): the type as sent and the address decoded from xtext. */
480
+ /** ORCPT= (RFC 3461 §4.2): the type as sent and the address decoded (xtext, or RFC 6533 for `utf-8`). */
481
481
  readonly orcpt?: { readonly type: string; readonly address: string };
482
482
  }
483
483
  ```
@@ -658,10 +658,24 @@ The server advertises `DSN` (RFC 3461) in its EHLO reply, always (no option to
658
658
  turn it off). A client may then send `RET=FULL|HDRS` and `ENVID=<xtext>` on
659
659
  `MAIL FROM`, and `NOTIFY=NEVER` (or a comma list of `SUCCESS`, `FAILURE`,
660
660
  `DELAY`) and `ORCPT=<addr-type>;<xtext>` on `RCPT TO`. The server checks
661
- their syntax, decodes the xtext and puts them on the `Envelope` `onData`
661
+ their syntax, decodes them (`rfc822` as xtext, `utf-8` per RFC 6533, below)
662
+ and puts them on the `Envelope` `onData`
662
663
  receives: `ret` and `envid`, and for each accepted recipient `notify` and
663
664
  `orcpt` in `recipients`. `to` is unchanged.
664
665
 
666
+ `ORCPT` keeps the type as sent. `utf-8`, matched in any case, is read per RFC
667
+ 6533; every other type, `rfc822` included, is xtext (RFC 3461 §4, §5.1(b)). `utf-8`
668
+ (RFC 6533 §3) is `utf-8-addr-xtext`: printable ASCII as itself, and
669
+ `\x{HEX}` (2 to 6 hexadecimal digits) for a non-ASCII character and for
670
+ space, `\`, `+` and `=`; when the transaction used `SMTPUTF8` on `MAIL FROM`
671
+ it may also be `utf-8-addr-unitext`, with the non-ASCII characters as raw
672
+ UTF-8. The address in `orcpt.address` is decoded in both cases. A raw
673
+ non-ASCII address without `SMTPUTF8`, or a malformed or out-of-range escape
674
+ (or one for NUL or a control character RFC 6533's grammar has no escape for,
675
+ `0A` to `0F` and `1A` to `1F`) is `501 5.5.4`. Escapes are accepted leniently:
676
+ leading zeros and escaped printable ASCII, which RFC 6533's HEXPOINT does not
677
+ produce. The 500 characters of a `utf-8` value count as sent on the wire.
678
+
665
679
  The server does nothing else with them. Once it advertises DSN, the app that
666
680
  receives these parameters must honour them, or the client is told something
667
681
  untrue:
@@ -699,10 +713,15 @@ after `HELO` gets `555 <PARAM> needs EHLO`.
699
713
  `Envelope.recipients`: `address`, `notify`, `orcpt`, matched to `to` by
700
714
  address), so a received envelope can be passed through when a relay hands the
701
715
  message on. They are written only when the next hop's EHLO lists `DSN`, with
702
- `envid` and the `orcpt` address xtext-encoded (RFC 3461 §4). An `orcpt` whose
703
- type is not `rfc822`, or whose address is not ASCII (RFC 6533), is left out of
704
- the command, not refused, so a relay never fails on what a received envelope
705
- carries. When the next hop lists no `DSN` nothing is sent, the delivery goes
716
+ `envid` and the `orcpt` address xtext-encoded (RFC 3461 §4). A `utf-8`
717
+ `orcpt` is encoded per RFC 6533 §3: `utf-8-addr-unitext` (non-ASCII kept as
718
+ UTF-8) when the transaction uses `SMTPUTF8`, else `utf-8-addr-xtext`
719
+ (`\x{HEX}`). An `orcpt` of another type is relayed as `type;xtext(address)`, the
720
+ type's case kept (RFC 3461 §5.2(d)). An `orcpt` whose address is not ASCII (type `rfc822`), holds a
721
+ lone surrogate (any type) or has no RFC 6533 escape (`utf-8`), or a `utf-8` one
722
+ over 500 characters as sent, is left out of the command, not refused. One of
723
+ another type over 500 characters as sent is refused with `INVALID_OPTION`.
724
+ A relay never fails on what a received envelope carries. The type is written as given. When the next hop lists no `DSN` nothing is sent, the delivery goes
706
725
  through as usual, and the result says `dsnOffered: false`: the relay must then
707
726
  generate the DSNs itself (RFC 3461 §5.2.2).
708
727
 
@@ -725,7 +744,8 @@ if (!result.dsnOffered) {
725
744
  `dsnOffered` is the server listing `DSN` in EHLO; it does not prove the next
726
745
  hop will send a DSN. These are `INVALID_OPTION`: a wrong `ret`, `notify` or
727
746
  `orcpt` shape; an `envid` over 100 characters once xtext-encoded (RFC 3461
728
- §4.4); an `orcpt` over 500 characters once encoded (§4.2), whose type is not a
747
+ §4.4); an `orcpt` over 500 characters once encoded (§4.2; for a `utf-8` `orcpt`, the
748
+ unitext form: raw UTF-8 octets, `\x{HH}` = 6), whose type is not a
729
749
  token, or whose address is empty; a `recipients` entry not in `to`, or named
730
750
  twice.
731
751
 
@@ -1987,6 +2007,7 @@ console.log(chunk.done, reader.bareLineBreaks);
1987
2007
  | PIPELINING | RFC 2920 |
1988
2008
  | 8BITMIME | RFC 6152 |
1989
2009
  | DSN parameters (`RET`, `ENVID`, `NOTIFY`, `ORCPT`) and xtext | RFC 3461 §4 |
2010
+ | The `utf-8` `ORCPT` address type | RFC 6533 §3 |
1990
2011
  | SMTPUTF8 | RFC 6531 |
1991
2012
  | ENHANCEDSTATUSCODES and the codes themselves | RFC 2034, RFC 3463 |
1992
2013
  | STARTTLS | RFC 3207 |
@@ -2018,8 +2039,9 @@ each one comes from.
2018
2039
  - **Connection reuse.** The client opens one connection per message, and
2019
2040
  sends no `RSET`. Several messages to one destination over one session is
2020
2041
  on the [roadmap](roadmap.md).
2021
- - **`ORCPT` of an RFC 6533 type (`utf-8`) or with a non-ASCII address in the
2022
- client**: it is left out of `RCPT TO`, not sent.
2042
+ - **A non-ASCII `ORCPT` of type `rfc822` in the client**: RFC 6533 defines
2043
+ `utf-8` for it, which both sides handle; the client leaves a non-ASCII
2044
+ `rfc822` address out of `RCPT TO`. Any other type is relayed as xtext.
2023
2045
  - **CHUNKING in the client.** It sends DATA, never `BDAT`.
2024
2046
  - **DANE and MTA-STS.** By MX, TLS is opportunistic; a policy that makes
2025
2047
  it required for a domain is for later.