@bumail/smtp 0.12.0 → 0.12.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.
@@ -494,6 +494,79 @@ function socketHandlers(live, hooks) {
494
494
  }
495
495
  var connectFailure = (endpoint, error) => error instanceof SmtpError2 ? error : new SmtpError2("CONNECTION_FAILED", `Could not connect to ${endpoint.host} (${endpoint.address}:${endpoint.port}): ${reason(error)}`);
496
496
 
497
+ // src/client/socket-waits.ts
498
+ class Waits {
499
+ hooks;
500
+ #wake;
501
+ #watchers = new Set;
502
+ #replies = 0;
503
+ get replies() {
504
+ return this.#replies;
505
+ }
506
+ constructor(hooks) {
507
+ this.hooks = hooks;
508
+ }
509
+ wakeUp() {
510
+ const wake = this.#wake;
511
+ this.#wake = undefined;
512
+ wake?.();
513
+ }
514
+ release() {
515
+ for (const watcher of this.#watchers)
516
+ watcher();
517
+ }
518
+ race(promise, seconds, what, start = performance.now()) {
519
+ const ms = start + seconds * 1000 - performance.now();
520
+ const { host, fail } = this.hooks;
521
+ const clock = this.hooks.clock();
522
+ return clock.race(promise, ms, (passed) => fail(timedOut(host, what, seconds, passed ? clock.seconds : undefined)));
523
+ }
524
+ async reply(what, seconds) {
525
+ const { inbox, failure, closed, fail, host } = this.hooks;
526
+ const start = performance.now();
527
+ for (;; ) {
528
+ const next = inbox.shift();
529
+ if (next) {
530
+ this.#replies++;
531
+ return next;
532
+ }
533
+ const failed = failure();
534
+ if (failed)
535
+ throw failed;
536
+ if (closed())
537
+ throw fail(lost(host, what));
538
+ await this.race(new Promise((wake) => {
539
+ this.#wake = wake;
540
+ }), seconds, what, start);
541
+ }
542
+ }
543
+ within(promise, seconds, what) {
544
+ const { host, closed, hungUp } = this.hooks;
545
+ const watcher = Promise.withResolvers();
546
+ if (closed())
547
+ watcher.resolve();
548
+ else
549
+ this.#watchers.add(watcher.resolve);
550
+ const gone = watcher.promise;
551
+ let over = false;
552
+ const hung = gone.then(() => {
553
+ if (!over)
554
+ throw hungUp(lost(host, what));
555
+ });
556
+ const race = Promise.race([promise, hung]);
557
+ race.catch(() => {
558
+ return;
559
+ });
560
+ hung.catch(() => {
561
+ return;
562
+ });
563
+ return this.race(race, seconds, what).finally(() => {
564
+ over = true;
565
+ this.#watchers.delete(watcher.resolve);
566
+ });
567
+ }
568
+ }
569
+
497
570
  // src/client/socket.ts
498
571
  class ClientSocket {
499
572
  host;
@@ -504,15 +577,31 @@ class ClientSocket {
504
577
  #inbox = new Inbox;
505
578
  #failure;
506
579
  #closed = false;
507
- #wake;
508
580
  #handshaking;
509
- #watchers = new Set;
581
+ #waits;
510
582
  secure = false;
511
- replies = 0;
583
+ get replies() {
584
+ return this.#waits.replies;
585
+ }
512
586
  verified = false;
513
587
  constructor(host, clock) {
514
588
  this.host = host;
515
589
  this.clock = clock;
590
+ this.#waits = new Waits({
591
+ host,
592
+ clock: () => this.clock,
593
+ inbox: this.#inbox,
594
+ failure: () => this.#failure,
595
+ closed: () => this.#closed,
596
+ fail: (error) => this.#fail(error),
597
+ hungUp: (otherwise) => this.#hungUp(otherwise)
598
+ });
599
+ }
600
+ reply(what, seconds) {
601
+ return this.#waits.reply(what, seconds);
602
+ }
603
+ within(promise, seconds, what) {
604
+ return this.#waits.within(promise, seconds, what);
516
605
  }
517
606
  static async open(endpoint, tls, seconds, clock) {
518
607
  const client = new ClientSocket(endpoint.host, clock);
@@ -527,13 +616,13 @@ class ClientSocket {
527
616
  socket: client.#handlers(tls !== undefined)
528
617
  });
529
618
  try {
530
- client.#use(await client.#race(connecting, seconds, "the connection"));
619
+ client.#use(await client.#waits.race(connecting, seconds, "the connection"));
531
620
  } catch (error) {
532
621
  connecting.then((socket) => socket.terminate(), () => {});
533
622
  throw connectFailure(endpoint, error);
534
623
  }
535
624
  if (handshake) {
536
- await client.#race(handshake, seconds, "the TLS handshake").catch((e) => {
625
+ await client.#waits.race(handshake, seconds, "the TLS handshake").catch((e) => {
537
626
  client.close(true);
538
627
  throw e;
539
628
  });
@@ -576,14 +665,11 @@ class ClientSocket {
576
665
  this.#wakeUp();
577
666
  }
578
667
  #wakeUp() {
579
- const wake = this.#wake;
580
- this.#wake = undefined;
581
- wake?.();
668
+ this.#waits.wakeUp();
582
669
  }
583
670
  #lost() {
584
671
  this.#closed = true;
585
- for (const watcher of this.#watchers)
586
- watcher();
672
+ this.#waits.release();
587
673
  this.#outgoing.clear();
588
674
  this.#handshaking?.(false, null);
589
675
  this.#wakeUp();
@@ -594,52 +680,6 @@ class ClientSocket {
594
680
  this.#lost();
595
681
  return this.#failure;
596
682
  }
597
- #race(promise, seconds, what, start = performance.now()) {
598
- const ms = start + seconds * 1000 - performance.now();
599
- const { host, clock } = this;
600
- return clock.race(promise, ms, (passed) => this.#fail(timedOut(host, what, seconds, passed ? clock.seconds : undefined)));
601
- }
602
- async reply(what, seconds) {
603
- const start = performance.now();
604
- for (;; ) {
605
- const next = this.#inbox.shift();
606
- if (next) {
607
- this.replies++;
608
- return next;
609
- }
610
- if (this.#failure)
611
- throw this.#failure;
612
- if (this.#closed)
613
- throw this.#fail(lost(this.host, what));
614
- await this.#race(new Promise((wake) => {
615
- this.#wake = wake;
616
- }), seconds, what, start);
617
- }
618
- }
619
- within(promise, seconds, what) {
620
- const watcher = Promise.withResolvers();
621
- if (this.#closed)
622
- watcher.resolve();
623
- else
624
- this.#watchers.add(watcher.resolve);
625
- const gone = watcher.promise;
626
- let over = false;
627
- const hung = gone.then(() => {
628
- if (!over)
629
- throw this.#hungUp(lost(this.host, what));
630
- });
631
- const race = Promise.race([promise, hung]);
632
- race.catch(() => {
633
- return;
634
- });
635
- hung.catch(() => {
636
- return;
637
- });
638
- return this.#race(race, seconds, what).finally(() => {
639
- over = true;
640
- this.#watchers.delete(watcher.resolve);
641
- });
642
- }
643
683
  write(data) {
644
684
  if (this.#failure || this.#closed)
645
685
  return false;
@@ -647,7 +687,7 @@ class ClientSocket {
647
687
  return true;
648
688
  }
649
689
  async drained(seconds) {
650
- await this.#race(this.#outgoing.drained(), seconds, "the server to take the message");
690
+ await this.#waits.race(this.#outgoing.drained(), seconds, "the server to take the message");
651
691
  if (this.#failure || this.#closed)
652
692
  throw this.#hungUp(lost(this.host));
653
693
  }
@@ -670,7 +710,7 @@ class ClientSocket {
670
710
  socket: this.#handlers(true)
671
711
  });
672
712
  this.#use(encrypted);
673
- await this.#race(handshake, seconds, "the TLS handshake");
713
+ await this.#waits.race(handshake, seconds, "the TLS handshake");
674
714
  }
675
715
  get quiet() {
676
716
  return !this.#failure && !this.#closed && !this.#inbox.holding;
@@ -1361,5 +1401,5 @@ export {
1361
1401
  sendMail
1362
1402
  };
1363
1403
 
1364
- //# debugId=CDDCD67CAFC1023D64756E2164756E21
1404
+ //# debugId=7F1B42BBCDFFD91464756E2164756E21
1365
1405
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/client/address.ts", "../src/client/mx.ts", "../src/protocol/data-writer.ts", "../src/client/content.ts", "../src/protocol/ehlo.ts", "../src/protocol/reply-reader.ts", "../src/client/refusal.ts", "../src/client/session.ts", "../src/client/inbox.ts", "../src/client/target.ts", "../src/client/socket-events.ts", "../src/client/socket.ts", "../src/client/connect.ts", "../src/client/settings.ts", "../src/client/dsn.ts", "../src/client/transaction.ts", "../src/client/send.ts", "../src/client/pool/options.ts", "../src/client/pool/reset.ts", "../src/client/pool/state.ts", "../src/client/pool/idle.ts", "../src/client/pool/send.ts", "../src/client/pool/index.ts"],
3
+ "sources": ["../src/client/address.ts", "../src/client/mx.ts", "../src/protocol/data-writer.ts", "../src/client/content.ts", "../src/protocol/ehlo.ts", "../src/protocol/reply-reader.ts", "../src/client/refusal.ts", "../src/client/session.ts", "../src/client/inbox.ts", "../src/client/target.ts", "../src/client/socket-events.ts", "../src/client/socket-waits.ts", "../src/client/socket.ts", "../src/client/connect.ts", "../src/client/settings.ts", "../src/client/dsn.ts", "../src/client/transaction.ts", "../src/client/send.ts", "../src/client/pool/options.ts", "../src/client/pool/reset.ts", "../src/client/pool/state.ts", "../src/client/pool/idle.ts", "../src/client/pool/send.ts", "../src/client/pool/index.ts"],
4
4
  "sourcesContent": [
5
5
  "import { parsePath } from '../protocol/path';\n\n/**\n * Whether `address` is one `sendMail` takes as a recipient, or as a sender\n * other than the null one: exactly those, since `sendMail` checks its\n * addresses with this same predicate. That is an RFC 5321 Mailbox\n * (§4.1.2), `local@domain` with no brackets — a dot-string or quoted local\n * part of 64 characters at most, and a domain of valid labels or an\n * address literal — with no source route, no control character (C0, DEL\n * or C1), no `>`, no U+2028 or U+2029, no Unicode format character\n * (`\\p{Cf}`), no lone surrogate and no IPv4 literal octet above 255. A caller that keeps addresses for\n * later, such as a queue, checks them with this when it takes them, so\n * `sendMail` never refuses them with `INVALID_OPTION` afterwards.\n */\nexport function isMailbox(address: unknown): address is string {\n\treturn (\n\t\ttypeof address === 'string' &&\n\t\tparsePath(`<${address}>`, false, 'refuse') !== undefined\n\t);\n}\n",
6
6
  "import { SmtpError } from '../errors';\nimport type { MxResolver } from './options';\n\n/** A host that takes mail for a domain, by preference: the lowest first. */\nexport interface MailHost {\n\treadonly host: string;\n\treadonly priority: number;\n\t/** No MX record: the domain itself, by its A or AAAA (RFC 5321 §5.1). */\n\treadonly implicit: boolean;\n}\n\n/** A `DnsError`'s code, read by shape: the client imports nothing of `@bumail/dns` at runtime. */\nfunction dnsCode(error: unknown): string | undefined {\n\treturn error instanceof Error && error.name === 'DnsError'\n\t\t? (error as Error & { code?: string }).code\n\t\t: undefined;\n}\n\n/**\n * `@bumail/dns`'s `isTemporary` (`packages/dns/src/errors.ts`), copied so\n * the client imports nothing of it: anything but a `DnsError`, a\n * `TEMPORARY` and a `TIMEOUT` are. Change both together.\n */\nfunction temporary(error: unknown): boolean {\n\tconst code = dnsCode(error);\n\treturn code === undefined || code === 'TEMPORARY' || code === 'TIMEOUT';\n}\n\nconst messageOf = (error: unknown) =>\n\terror instanceof Error ? error.message : String(error);\n\n/**\n * By preference, equal ones in a random order, as RFC 5321 §5.1 asks, to\n * spread the load. `random` is `Math.random` but in a spec.\n */\nexport function byPreference(\n\thosts: readonly MailHost[],\n\trandom: () => number = Math.random,\n): MailHost[] {\n\treturn hosts\n\t\t.map((host) => ({ host, key: random() }))\n\t\t.sort((x, y) => x.host.priority - y.host.priority || x.key - y.key)\n\t\t.map(({ host }) => host);\n}\n\n/**\n * The hosts to deliver a domain's mail to, in the order to try them (RFC\n * 5321 §5.1): its MX records by preference, or the domain itself when it\n * has none. A null MX (RFC 7505) is a permanent `NULL_MX`; a lookup that\n * failed is `DNS_FAILED`, temporary unless the DNS said there is no such\n * domain.\n */\nexport async function resolveMx(\n\tdomain: string,\n\tresolver: Pick<MxResolver, 'mx'>,\n): Promise<MailHost[]> {\n\tconst implicit = [\n\t\t{ host: domain.toLowerCase(), priority: 0, implicit: true },\n\t];\n\tlet records: Awaited<ReturnType<MxResolver['mx']>>;\n\ttry {\n\t\trecords = await resolver.mx(domain);\n\t} catch (error) {\n\t\tif (dnsCode(error) === 'NOT_FOUND') return implicit;\n\t\tthrow new SmtpError(\n\t\t\t'DNS_FAILED',\n\t\t\t`Could not look up the MX records of ${domain}: ${messageOf(error)}`,\n\t\t\t{ temporary: temporary(error) },\n\t\t);\n\t}\n\tconst hosts = records\n\t\t.filter((record) => record.exchange !== '')\n\t\t.map((record) => ({\n\t\t\thost: record.exchange,\n\t\t\tpriority: record.priority,\n\t\t\timplicit: false,\n\t\t}));\n\t// A resolver of your own may answer \"none\" with no record at all.\n\tif (records.length === 0) return implicit;\n\tif (hosts.length === 0) {\n\t\tthrow new SmtpError(\n\t\t\t'NULL_MX',\n\t\t\t`${domain} accepts no mail: its MX record is the null MX (RFC 7505)`,\n\t\t\t{ temporary: false },\n\t\t);\n\t}\n\treturn byPreference(hosts);\n}\n\n/** A host's addresses, IPv4 first; an error when it has none. */\nexport async function addressesOf(\n\thost: string,\n\tresolver: Pick<MxResolver, 'a' | 'aaaa'>,\n): Promise<string[] | { readonly error: unknown }> {\n\tconst found: string[] = [];\n\tlet failure: unknown;\n\tfor (const lookup of [resolver.a, resolver.aaaa]) {\n\t\ttry {\n\t\t\tfor (const record of await lookup.call(resolver, host)) {\n\t\t\t\tfound.push(record.address);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (failure === undefined || temporary(error)) failure = error;\n\t\t}\n\t}\n\treturn found.length > 0 ? found : { error: failure };\n}\n\n/** `DNS_FAILED` for a domain none of whose hosts had an address. */\nexport function noAddress(domain: string, error: unknown): SmtpError {\n\tconst why = error === undefined ? 'no A or AAAA record' : messageOf(error);\n\treturn new SmtpError(\n\t\t'DNS_FAILED',\n\t\t`No mail host of ${domain} has an address: ${why}`,\n\t\t{ temporary: error !== undefined && temporary(error) },\n\t);\n}\n",
@@ -13,7 +13,8 @@
13
13
  "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 bytes counted against `MAX_REPLY_BYTES` start over: a new message on a reused connection. */\n\treset(): void {\n\t\tthis.#received = 0;\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",
14
14
  "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",
15
15
  "import type { SocketHandler } from 'bun';\nimport { SmtpError } from '../errors';\nimport { type Endpoint, reason } from './target';\n\n/** What a socket's events do to its `ClientSocket`. */\nexport interface SocketHooks {\n\treadonly receive: (chunk: Uint8Array) => void;\n\treadonly drain: () => void;\n\treadonly lost: () => void;\n\treadonly handshake: (ok: boolean, error: Error | null) => void;\n}\n\n/** Bun's events for one socket: only the live one's count (`live`), the clear one's or, after STARTTLS, the TLS one's. */\nexport function socketHandlers(\n\tlive: () => boolean,\n\thooks: SocketHooks,\n): SocketHandler<undefined> {\n\tconst when =\n\t\t<A extends unknown[]>(run: (...args: A) => void) =>\n\t\t(...args: A) => {\n\t\t\tif (live()) run(...args);\n\t\t};\n\treturn {\n\t\tdata: when((_, chunk: Uint8Array) => hooks.receive(chunk)),\n\t\tdrain: when(() => hooks.drain()),\n\t\tclose: when(() => hooks.lost()),\n\t\terror: when(() => hooks.lost()),\n\t\thandshake: when((_, ok: boolean, error: Error | null) =>\n\t\t\thooks.handshake(ok, error),\n\t\t),\n\t};\n}\n\n/** `error` as the connect step failed it: an `SmtpError` as it is, else `CONNECTION_FAILED`. */\nexport const connectFailure = (\n\tendpoint: Endpoint,\n\terror: unknown,\n): SmtpError =>\n\terror instanceof SmtpError\n\t\t? error\n\t\t: new SmtpError(\n\t\t\t\t'CONNECTION_FAILED',\n\t\t\t\t`Could not connect to ${endpoint.host} (${endpoint.address}:${endpoint.port}): ${reason(error)}`,\n\t\t\t);\n",
16
- "import type { Socket, SocketHandler } from 'bun';\nimport type { 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 { connectFailure, socketHandlers } from './socket-events';\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\t#socket: Socket<undefined> | undefined;\n\t#outgoing = new Outgoing(() => 0);\n\t#tls = false; // whose events count: the TLS socket's after STARTTLS\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\treadonly #watchers = new Set<() => void>();\n\tsecure = false;\n\t/** Replies read so far: a failure with the same count as before a command got no reply to it. */\n\treplies = 0;\n\t/** The certificate checked out against the host name. */\n\tverified = false;\n\n\tprivate constructor(\n\t\treadonly host: string,\n\t\t/** Times the waits; only the sender or pool sets it (a new `Clock` per transaction), never while a wait is pending. */\n\t\tpublic 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\tthrow connectFailure(endpoint, error);\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#handlers(tls: boolean): SocketHandler<undefined> {\n\t\treturn socketHandlers(() => this.#tls === tls, {\n\t\t\treceive: (chunk) => this.#receive(chunk),\n\t\t\tdrain: () => this.#outgoing.drain(),\n\t\t\tlost: () => this.#lost(),\n\t\t\thandshake: (ok, error) => this.#handshaking?.(ok, error),\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\tfor (const watcher of this.#watchers) watcher();\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, clock } = this;\n\t\treturn clock.race(promise, ms, (passed) =>\n\t\t\tthis.#fail(\n\t\t\t\ttimedOut(host, what, seconds, passed ? clock.seconds : undefined),\n\t\t\t),\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) {\n\t\t\t\tthis.replies++;\n\t\t\t\treturn next;\n\t\t\t}\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 watcher = Promise.withResolvers<void>();\n\t\tif (this.#closed) watcher.resolve();\n\t\telse this.#watchers.add(watcher.resolve);\n\t\tconst gone = watcher.promise;\n\t\tlet over = false;\n\t\tconst hung = gone.then(() => {\n\t\t\tif (!over) throw this.#hungUp(lost(this.host, what));\n\t\t});\n\t\tconst race = Promise.race([promise, hung]) 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 wakes `gone` and so settles `race` unheard.\n\t\trace.catch(() => undefined);\n\t\thung.catch(() => undefined);\n\t\treturn this.#race(race, seconds, what).finally(() => {\n\t\t\tover = true;\n\t\t\tthis.#watchers.delete(watcher.resolve);\n\t\t});\n\t}\n\n\t/** Queues bytes; false once the connection failed. */\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/** Alive and silent: nothing failed, closed, or arrived unasked. A pool checks it before it lends the connection. */\n\tget quiet(): boolean {\n\t\treturn !this.#failure && !this.#closed && !this.#inbox.holding;\n\t}\n\n\t/** Whether the open connection keeps the process alive: a pool unrefs an idle one. */\n\tref(keep: boolean): void {\n\t\tif (keep) this.#socket?.ref();\n\t\telse this.#socket?.unref();\n\t}\n\n\t/** A new message: the server's reply budget starts over. */\n\tnewMessage(): void {\n\t\tthis.#inbox.reset();\n\t}\n\n\t/** Hangs up; `now` at once, so a cut message 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",
16
+ "import type { SmtpError } from '../errors';\nimport type { Reply } from '../protocol/reply';\nimport type { Inbox } from './inbox';\nimport { lost, timedOut } from './refusal';\nimport type { Clock } from './target';\n\n/** What the waits read from their `ClientSocket`, and how they fail it. */\nexport interface WaitsHooks {\n\treadonly host: string;\n\treadonly clock: () => Clock;\n\treadonly inbox: Inbox;\n\treadonly failure: () => SmtpError | undefined;\n\treadonly closed: () => boolean;\n\treadonly fail: (error: SmtpError) => SmtpError;\n\treadonly hungUp: (otherwise: SmtpError) => SmtpError;\n}\n\n/** The waits of a `ClientSocket`: the reply loop and the caller's promises, each bounded by its timeout and the deadline. */\nexport class Waits {\n\t#wake: (() => void) | undefined;\n\treadonly #watchers = new Set<() => void>();\n\t#replies = 0;\n\n\t/** Replies read so far. */\n\tget replies(): number {\n\t\treturn this.#replies;\n\t}\n\n\tconstructor(private readonly hooks: WaitsHooks) {}\n\n\t/** Wakes the reply loop: something arrived, or the connection went. */\n\twakeUp(): void {\n\t\tconst wake = this.#wake;\n\t\tthis.#wake = undefined;\n\t\twake?.();\n\t}\n\n\t/** Cuts short every `within` pending: the connection is gone. */\n\trelease(): void {\n\t\tfor (const watcher of this.#watchers) watcher();\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\trace<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, fail } = this.hooks;\n\t\tconst clock = this.hooks.clock();\n\t\treturn clock.race(promise, ms, (passed) =>\n\t\t\tfail(timedOut(host, what, seconds, passed ? clock.seconds : 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 { inbox, failure, closed, fail, host } = this.hooks;\n\t\tconst start = performance.now();\n\t\tfor (;;) {\n\t\t\tconst next = inbox.shift();\n\t\t\tif (next) {\n\t\t\t\tthis.#replies++;\n\t\t\t\treturn next;\n\t\t\t}\n\t\t\tconst failed = failure();\n\t\t\tif (failed) throw failed;\n\t\t\tif (closed()) throw fail(lost(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 { host, closed, hungUp } = this.hooks;\n\t\tconst watcher = Promise.withResolvers<void>();\n\t\tif (closed()) watcher.resolve();\n\t\telse this.#watchers.add(watcher.resolve);\n\t\tconst gone = watcher.promise;\n\t\tlet over = false;\n\t\tconst hung = gone.then(() => {\n\t\t\tif (!over) throw hungUp(lost(host, what));\n\t\t});\n\t\tconst race = Promise.race([promise, hung]) 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 wakes `gone` and so settles `race` unheard.\n\t\trace.catch(() => undefined);\n\t\thung.catch(() => undefined);\n\t\treturn this.race(race, seconds, what).finally(() => {\n\t\t\tover = true;\n\t\t\tthis.#watchers.delete(watcher.resolve);\n\t\t});\n\t}\n}\n",
17
+ "import type { Socket, SocketHandler } from 'bun';\nimport type { SmtpError } from '../errors';\nimport { Outgoing } from '../io/outgoing';\nimport type { Reply } from '../protocol/reply';\nimport { Inbox } from './inbox';\nimport { badReply, lost, refused, tlsFailed } from './refusal';\nimport { connectFailure, socketHandlers } from './socket-events';\nimport { Waits } from './socket-waits';\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\t#socket: Socket<undefined> | undefined;\n\t#outgoing = new Outgoing(() => 0);\n\t#tls = false; // whose events count: the TLS socket's after STARTTLS\n\treadonly #inbox = new Inbox();\n\t#failure: SmtpError | undefined;\n\t#closed = false;\n\t#handshaking: ((ok: boolean, error: unknown) => void) | undefined;\n\treadonly #waits: Waits;\n\tsecure = false;\n\t/** Replies read so far: a failure with the same count as before a command got no reply to it. */\n\tget replies(): number {\n\t\treturn this.#waits.replies;\n\t}\n\t/** The certificate checked out against the host name. */\n\tverified = false;\n\n\tprivate constructor(\n\t\treadonly host: string,\n\t\t/** Times the waits; only the sender or pool sets it (a new `Clock` per transaction), never while a wait is pending. */\n\t\tpublic clock: Clock,\n\t) {\n\t\tthis.#waits = new Waits({\n\t\t\thost,\n\t\t\tclock: () => this.clock,\n\t\t\tinbox: this.#inbox,\n\t\t\tfailure: () => this.#failure,\n\t\t\tclosed: () => this.#closed,\n\t\t\tfail: (error) => this.#fail(error),\n\t\t\thungUp: (otherwise) => this.#hungUp(otherwise),\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\treply(what: string, seconds: number): Promise<Reply> {\n\t\treturn this.#waits.reply(what, seconds);\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\treturn this.#waits.within(promise, seconds, what);\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(\n\t\t\t\tawait client.#waits.race(connecting, seconds, 'the connection'),\n\t\t\t);\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\tthrow connectFailure(endpoint, error);\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.#waits\n\t\t\t\t.race(handshake, seconds, 'the TLS handshake')\n\t\t\t\t.catch((e) => {\n\t\t\t\t\tclient.close(true);\n\t\t\t\t\tthrow e;\n\t\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#handlers(tls: boolean): SocketHandler<undefined> {\n\t\treturn socketHandlers(() => this.#tls === tls, {\n\t\t\treceive: (chunk) => this.#receive(chunk),\n\t\t\tdrain: () => this.#outgoing.drain(),\n\t\t\tlost: () => this.#lost(),\n\t\t\thandshake: (ok, error) => this.#handshaking?.(ok, error),\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\tthis.#waits.wakeUp();\n\t}\n\n\t#lost(): void {\n\t\tthis.#closed = true;\n\t\tthis.#waits.release();\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/** Queues bytes; false once the connection failed. */\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.#waits.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.#waits.race(handshake, seconds, 'the TLS handshake');\n\t}\n\n\t/** Alive and silent: nothing failed, closed, or arrived unasked. A pool checks it before it lends the connection. */\n\tget quiet(): boolean {\n\t\treturn !this.#failure && !this.#closed && !this.#inbox.holding;\n\t}\n\n\t/** Whether the open connection keeps the process alive: a pool unrefs an idle one. */\n\tref(keep: boolean): void {\n\t\tif (keep) this.#socket?.ref();\n\t\telse this.#socket?.unref();\n\t}\n\n\t/** A new message: the server's reply budget starts over. */\n\tnewMessage(): void {\n\t\tthis.#inbox.reset();\n\t}\n\n\t/** Hangs up; `now` at once, so a cut message 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",
17
18
  "import type { SendMailResult } from './options';\nimport { open, type Ready } from './session';\nimport type { ClientSettings } from './settings';\nimport { ClientSocket } from './socket';\nimport type { Clock, Endpoint, TlsTarget } from './target';\nimport type { Delivered } from './transaction';\n\n/** Errors from before MAIL FROM: another MX host may do better. */\nexport const early = new WeakSet<object>();\n\n/** A connection, past its greeting, EHLO, STARTTLS and AUTH. */\nexport interface Session {\n\treadonly socket: ClientSocket;\n\treadonly ready: Ready;\n}\n\n/** Connects and opens a session; a failure is marked `early`. The socket's clock is the delivery's. */\nexport async function connect(\n\tendpoint: Endpoint,\n\tsettings: Pick<\n\t\tClientSettings,\n\t\t| 'tls'\n\t\t| 'secure'\n\t\t| 'ca'\n\t\t| 'timeouts'\n\t\t| 'helo'\n\t\t| 'auth'\n\t\t| 'allowPlaintextAuth'\n\t>,\n\tclock: Clock,\n): Promise<Session> {\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\ttry {\n\t\tconst ready = await open(socket, settings, tls);\n\t\treturn { socket, ready };\n\t} catch (error) {\n\t\tearly.add(error as object);\n\t\tsocket.write('QUIT\\r\\n');\n\t\tsocket.close();\n\t\tthrow error;\n\t}\n}\n\n/** What a delivery reports: the server's answers, where they came from and how the session was secured. */\nexport function resultOf(\n\tdelivered: Delivered,\n\t{ socket, ready }: Session,\n\tendpoint: Pick<Endpoint, 'host' | 'port'>,\n): SendMailResult {\n\treturn {\n\t\t...delivered,\n\t\thost: endpoint.host,\n\t\tport: endpoint.port,\n\t\ttls: socket.secure ? { verified: socket.verified } : false,\n\t\tauthenticated: ready.authenticated,\n\t};\n}\n",
18
19
  "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/** What a connection is: where it greets from, how it secures and authenticates, how long each wait lasts (seconds). Shared by every message sent over it. */\nexport interface ConnectionSettings {\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 timeouts: Required<SendMailTimeouts>;\n}\n\n/** What one message is: its envelope, its size, its DSN request, how its lines end. */\nexport interface EnvelopeSettings {\n\treadonly from: string;\n\treadonly to: readonly string[];\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}\n\n/** The options, checked, with their defaults: the connection's, the envelope's, and the transaction's `deadline` in seconds. */\nexport interface ClientSettings extends ConnectionSettings, EnvelopeSettings {\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",
19
20
  "// 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",
@@ -26,7 +27,7 @@
26
27
  "import { connect, resultOf } from '../connect';\nimport type { Content } from '../content';\nimport type { SendMailResult } from '../options';\nimport type { ClientSettings } from '../settings';\nimport { Clock, type Endpoint } from '../target';\nimport { inStep, transact } from '../transaction';\nimport { borrow, release } from './idle';\nimport { identityOf } from './options';\nimport { RESET_WAIT, reset, stale } from './reset';\nimport { type Entry, hangUp, type PoolState } from './state';\n\n/** Thrown inside the pool: the lent connection was dead, so try a fresh one. */\nclass Stale extends Error {}\n\n/** After an aborted message, off the caller's path: back to the pool if the server resets. */\nfunction recover(state: PoolState, entry: Entry): void {\n\tconst job = reset(entry, new Clock(RESET_WAIT), RESET_WAIT)\n\t\t.then((ok) => (ok ? release(state, entry) : hangUp(entry, false)))\n\t\t.catch(() => hangUp(entry, false));\n\tstate.resetting.add(job);\n\tjob.finally(() => state.resetting.delete(job));\n}\n\nasync function send(\n\tstate: PoolState,\n\tentry: Entry,\n\tsettings: ClientSettings,\n\tcontent: Content,\n\tclock: Clock,\n\treused: boolean,\n): Promise<SendMailResult> {\n\tconst { socket, ready } = entry;\n\tsocket.clock = clock; // a transaction takes its own clock\n\tsocket.newMessage(); // and its own budget of reply bytes\n\tconst before = socket.replies;\n\tlet result: SendMailResult;\n\ttry {\n\t\tconst { delivered } = await transact(socket, settings, content, ready);\n\t\tresult = {\n\t\t\t...resultOf(delivered, entry, entry.identity),\n\t\t\treused,\n\t\t};\n\t} catch (error) {\n\t\tif (inStep(error)) {\n\t\t\tentry.messages++;\n\t\t\trecover(state, entry);\n\t\t} else hangUp(entry);\n\t\tif (reused && stale(entry, before, error)) throw new Stale();\n\t\tthrow error;\n\t}\n\t// Only transact can fail a delivery: what follows cannot.\n\tentry.messages++;\n\trelease(state, entry);\n\treturn result;\n}\n\n/** One delivery to one server address, over a pooled connection when there is one. */\nexport async function attempt(\n\tstate: PoolState,\n\tendpoint: Endpoint,\n\tsettings: ClientSettings,\n\tcontent: Content,\n\tclock: Clock,\n): Promise<SendMailResult> {\n\tconst identity = identityOf(endpoint, settings);\n\tconst wait = Math.min(RESET_WAIT, settings.timeouts.command);\n\tconst entry = await borrow(state, identity, wait, clock);\n\tif (entry) {\n\t\ttry {\n\t\t\treturn await send(state, entry, settings, content, clock, true);\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof Stale)) throw error;\n\t\t\t// Once, on a fresh connection, so that the caller never sees it.\n\t\t}\n\t}\n\tconst { socket, ready } = await connect(endpoint, settings, clock);\n\tconst fresh: Entry = {\n\t\tsocket,\n\t\tready,\n\t\tidentity,\n\t\tborn: performance.now(),\n\t\tmessages: 0,\n\t};\n\treturn send(state, fresh, settings, content, clock, false);\n}\n",
27
28
  "import { SmtpError } from '../../errors';\nimport { contentOf } from '../content';\nimport type {\n\tMessageSource,\n\tSendMailOptions,\n\tSendMailResult,\n} from '../options';\nimport { deliver } from '../send';\nimport { settingsOf } from '../settings';\nimport { Clock } from '../target';\nimport { limitsOf, type SmtpPoolOptions } from './options';\nimport { attempt } from './send';\nimport { hangUp, newState } from './state';\n\nexport type { SmtpPoolOptions } from './options';\n\n/** A pool of SMTP connections: a delivery takes an idle one to the same server, as `sendMail` would open, or opens one. */\nexport interface SmtpPool {\n\t/** `sendMail`, over a pooled connection. `result.reused` tells whether one carried a message before. */\n\tsendMail(\n\t\tmessage: MessageSource,\n\t\toptions: SendMailOptions,\n\t): Promise<SendMailResult>;\n\t/** QUITs the idle connections, waits for the busy ones, and refuses any further `sendMail` with `STOPPED`. */\n\tclose(): Promise<void>;\n}\n\n/**\n * Creates a pool. Connections are kept apart by what they are: server\n * address, greeting name, TLS and credentials. One is reset (RSET) when it\n * is lent, and closed after a 421, a timeout, a bad reply, a lost stream,\n * or bytes it was not asked for.\n */\nexport function createSmtpPool(options?: SmtpPoolOptions): SmtpPool {\n\tconst state = newState(limitsOf(options));\n\treturn {\n\t\tsendMail(message, sendOptions) {\n\t\t\tconst job = (async () => {\n\t\t\t\tif (state.closed)\n\t\t\t\t\tthrow new SmtpError('STOPPED', 'The SMTP pool is closed');\n\t\t\t\tconst settings = settingsOf(sendOptions);\n\t\t\t\tconst content = contentOf(\n\t\t\t\t\tmessage,\n\t\t\t\t\tsettings.normalizeLineEnds,\n\t\t\t\t\tsettings.size,\n\t\t\t\t);\n\t\t\t\treturn deliver(\n\t\t\t\t\t(endpoint, s, c, clock) => attempt(state, endpoint, s, c, clock),\n\t\t\t\t\tsendOptions,\n\t\t\t\t\tsettings,\n\t\t\t\t\tcontent,\n\t\t\t\t\tnew Clock(settings.deadline),\n\t\t\t\t);\n\t\t\t})();\n\t\t\tstate.busy.add(job);\n\t\t\tconst done = () => state.busy.delete(job);\n\t\t\tjob.then(done, done);\n\t\t\treturn job;\n\t\t},\n\t\tasync close() {\n\t\t\tstate.closed = true;\n\t\t\tfor (const entry of state.idle.splice(0)) hangUp(entry);\n\t\t\tawait Promise.allSettled([...state.busy]);\n\t\t\tawait Promise.allSettled([...state.resetting]);\n\t\t},\n\t};\n}\n"
28
29
  ],
29
- "mappings": "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",
30
- "debugId": "CDDCD67CAFC1023D64756E2164756E21",
30
+ "mappings": "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",
31
+ "debugId": "7F1B42BBCDFFD91464756E2164756E21",
31
32
  "names": []
32
33
  }
@@ -0,0 +1,36 @@
1
+ import type { SmtpError } from '../errors';
2
+ import type { Reply } from '../protocol/reply';
3
+ import type { Inbox } from './inbox';
4
+ import type { Clock } from './target';
5
+ /** What the waits read from their `ClientSocket`, and how they fail it. */
6
+ export interface WaitsHooks {
7
+ readonly host: string;
8
+ readonly clock: () => Clock;
9
+ readonly inbox: Inbox;
10
+ readonly failure: () => SmtpError | undefined;
11
+ readonly closed: () => boolean;
12
+ readonly fail: (error: SmtpError) => SmtpError;
13
+ readonly hungUp: (otherwise: SmtpError) => SmtpError;
14
+ }
15
+ /** The waits of a `ClientSocket`: the reply loop and the caller's promises, each bounded by its timeout and the deadline. */
16
+ export declare class Waits {
17
+ #private;
18
+ private readonly hooks;
19
+ /** Replies read so far. */
20
+ get replies(): number;
21
+ constructor(hooks: WaitsHooks);
22
+ /** Wakes the reply loop: something arrived, or the connection went. */
23
+ wakeUp(): void;
24
+ /** Cuts short every `within` pending: the connection is gone. */
25
+ release(): void;
26
+ /**
27
+ * `promise`, or a `TIMEOUT` once `seconds` passed since `start` (now by
28
+ * default), or the deadline did, whichever comes first.
29
+ */
30
+ race<T>(promise: Promise<T>, seconds: number, what: string, start?: number): Promise<T>;
31
+ /** The next reply, within `seconds` all told; `what` names it in errors: `the greeting`, `the reply to MAIL FROM`. */
32
+ reply(what: string, seconds: number): Promise<Reply>;
33
+ /** 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). */
34
+ within<T>(promise: Promise<T>, seconds: number, what: string): Promise<T>;
35
+ }
36
+ //# sourceMappingURL=socket-waits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket-waits.d.ts","sourceRoot":"","sources":["../../src/client/socket-waits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,2EAA2E;AAC3E,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,SAAS,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,SAAS,CAAC;CACrD;AAED,6HAA6H;AAC7H,qBAAa,KAAK;;IAUL,OAAO,CAAC,QAAQ,CAAC,KAAK;IALlC,2BAA2B;IAC3B,IAAI,OAAO,IAAI,MAAM,CAEpB;gBAE4B,KAAK,EAAE,UAAU;IAE9C,uEAAuE;IACvE,MAAM,IAAI,IAAI;IAMd,iEAAiE;IACjE,OAAO,IAAI,IAAI;IAIf;;;OAGG;IACH,IAAI,CAAC,CAAC,EACL,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,KAAK,SAAoB,GACvB,OAAO,CAAC,CAAC,CAAC;IASb,sHAAsH;IAChH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAuB1D,wLAAwL;IACxL,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAmBzE"}
@@ -13,16 +13,16 @@ export declare class ClientSocket {
13
13
  clock: Clock;
14
14
  secure: boolean;
15
15
  /** Replies read so far: a failure with the same count as before a command got no reply to it. */
16
- replies: number;
16
+ get replies(): number;
17
17
  /** The certificate checked out against the host name. */
18
18
  verified: boolean;
19
19
  private constructor();
20
- /** Connects, with TLS from the first byte when `tls` is given. */
21
- static open(endpoint: Endpoint, tls: TlsTarget | undefined, seconds: number, clock: Clock): Promise<ClientSocket>;
22
20
  /** The next reply, within `seconds` all told; `what` names it in errors: `the greeting`, `the reply to MAIL FROM`. */
23
21
  reply(what: string, seconds: number): Promise<Reply>;
24
22
  /** 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). */
25
23
  within<T>(promise: Promise<T>, seconds: number, what: string): Promise<T>;
24
+ /** Connects, with TLS from the first byte when `tls` is given. */
25
+ static open(endpoint: Endpoint, tls: TlsTarget | undefined, seconds: number, clock: Clock): Promise<ClientSocket>;
26
26
  /** Queues bytes; false once the connection failed. */
27
27
  write(data: Uint8Array | string): boolean;
28
28
  /** Waits until the server took everything written. */
@@ -1 +1 @@
1
- {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/client/socket.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI/C,OAAO,EACN,KAAK,KAAK,EACV,KAAK,QAAQ,EAEb,KAAK,SAAS,EAEd,MAAM,UAAU,CAAC;AAElB;;;;;GAKG;AACH,qBAAa,YAAY;;IAiBvB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,uHAAuH;IAChH,KAAK,EAAE,KAAK;IATpB,MAAM,UAAS;IACf,iGAAiG;IACjG,OAAO,SAAK;IACZ,yDAAyD;IACzD,QAAQ,UAAS;IAEjB,OAAO;IAMP,kEAAkE;WACrD,IAAI,CAChB,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,SAAS,GAAG,SAAS,EAC1B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,GACV,OAAO,CAAC,YAAY,CAAC;IA4GxB,sHAAsH;IAChH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAqB1D,wLAAwL;IACxL,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAmBzE,sDAAsD;IACtD,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO;IAQzC,sDAAsD;IAChD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB7C,6GAA6G;IACvG,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB9D,qHAAqH;IACrH,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,sFAAsF;IACtF,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAKxB,4DAA4D;IAC5D,UAAU,IAAI,IAAI;IAIlB,kEAAkE;IAClE,KAAK,CAAC,GAAG,UAAQ,GAAG,IAAI;CAKxB"}
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/client/socket.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAK/C,OAAO,EACN,KAAK,KAAK,EACV,KAAK,QAAQ,EAEb,KAAK,SAAS,EAEd,MAAM,UAAU,CAAC;AAElB;;;;;GAKG;AACH,qBAAa,YAAY;;IAkBvB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,uHAAuH;IAChH,KAAK,EAAE,KAAK;IAXpB,MAAM,UAAS;IACf,iGAAiG;IACjG,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,yDAAyD;IACzD,QAAQ,UAAS;IAEjB,OAAO;IAgBP,sHAAsH;IACtH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAIpD,wLAAwL;IACxL,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAIzE,kEAAkE;WACrD,IAAI,CAChB,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,SAAS,GAAG,SAAS,EAC1B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,GACV,OAAO,CAAC,YAAY,CAAC;IA2FxB,sDAAsD;IACtD,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO;IAQzC,sDAAsD;IAChD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB7C,6GAA6G;IACvG,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB9D,qHAAqH;IACrH,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,sFAAsF;IACtF,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAKxB,4DAA4D;IAC5D,UAAU,IAAI,IAAI;IAIlB,kEAAkE;IAClE,KAAK,CAAC,GAAG,UAAQ,GAAG,IAAI;CAKxB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bumail/smtp",
3
- "version": "0.12.0",
3
+ "version": "0.12.1",
4
4
  "description": "An SMTP server on Bun.listen — RFC 5321 with PIPELINING, SIZE, 8BITMIME, SMTPUTF8, STARTTLS and AUTH after TLS, policy hooks, and no open relay — and a client that delivers a message to a smarthost or by MX",
5
5
  "license": "MIT",
6
6
  "type": "module",