@bumail/queue 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +27 -1
  2. package/dist/chunks/{index-sz13a17b.js → index-t6q7zxgj.js} +14 -3
  3. package/dist/chunks/{index-sz13a17b.js.map → index-t6q7zxgj.js.map} +4 -4
  4. package/dist/contract/checks.d.ts +4 -0
  5. package/dist/contract/checks.d.ts.map +1 -1
  6. package/dist/contract/queue-store.d.ts +15 -7
  7. package/dist/contract/queue-store.d.ts.map +1 -1
  8. package/dist/contract/types.d.ts +5 -0
  9. package/dist/contract/types.d.ts.map +1 -1
  10. package/dist/errors.d.ts +3 -1
  11. package/dist/errors.d.ts.map +1 -1
  12. package/dist/index.d.ts +1 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +64 -26
  15. package/dist/index.js.map +4 -4
  16. package/dist/memory/index.js +10 -6
  17. package/dist/memory/index.js.map +3 -3
  18. package/dist/memory/store.d.ts +2 -2
  19. package/dist/memory/store.d.ts.map +1 -1
  20. package/dist/postgres/complete.d.ts +13 -0
  21. package/dist/postgres/complete.d.ts.map +1 -0
  22. package/dist/postgres/index.js +85 -74
  23. package/dist/postgres/index.js.map +6 -5
  24. package/dist/postgres/store.d.ts +2 -2
  25. package/dist/postgres/store.d.ts.map +1 -1
  26. package/dist/queue/deliver.d.ts.map +1 -1
  27. package/dist/queue/notify.d.ts +35 -6
  28. package/dist/queue/notify.d.ts.map +1 -1
  29. package/dist/redis/complete.d.ts +11 -0
  30. package/dist/redis/complete.d.ts.map +1 -0
  31. package/dist/redis/index.js +133 -110
  32. package/dist/redis/index.js.map +7 -6
  33. package/dist/redis/scripts.d.ts +8 -5
  34. package/dist/redis/scripts.d.ts.map +1 -1
  35. package/dist/redis/store.d.ts +2 -2
  36. package/dist/redis/store.d.ts.map +1 -1
  37. package/dist/sqlite/index.js +29 -20
  38. package/dist/sqlite/index.js.map +5 -4
  39. package/dist/sqlite/insert.d.ts +5 -0
  40. package/dist/sqlite/insert.d.ts.map +1 -0
  41. package/dist/sqlite/store.d.ts +2 -2
  42. package/dist/sqlite/store.d.ts.map +1 -1
  43. package/docs/guide.md +29 -0
  44. package/docs/roadmap.md +36 -10
  45. package/docs/troubleshooting.md +64 -1
  46. package/package.json +4 -4
package/dist/index.js.map CHANGED
@@ -18,7 +18,7 @@
18
18
  "import { DEFAULT_MAX_RETURN } from '../../dsn/policy';\nimport type { QueueOptions } from '../options';\nimport { HOUR, MINUTE, numberOf } from './numbers';\n\nexport interface RetrySettings {\n\treadonly first: number;\n\treadonly factor: number;\n\treadonly max: number;\n\treadonly jitter: number;\n\treadonly giveUpAfter: number;\n}\n\nexport interface LimitSettings {\n\treadonly maxMessageSize: number;\n\treadonly maxRecipients: number;\n\treadonly maxItems: number | undefined;\n\treadonly maxReplyText: number;\n\treadonly maxDsnReturn: number;\n}\n\nexport function retryOf(options: QueueOptions): RetrySettings {\n\tconst r = options.retry ?? {};\n\tconst first = numberOf('retry.first', r.first, 30 * MINUTE, 1);\n\treturn {\n\t\tfirst,\n\t\tfactor: numberOf('retry.factor', r.factor, 2, 1, 100, false),\n\t\tmax: numberOf('retry.max', r.max, Math.max(first, 4 * HOUR), first),\n\t\tjitter: numberOf('retry.jitter', r.jitter, 0.1, 0, 1, false),\n\t\tgiveUpAfter: numberOf('retry.giveUpAfter', r.giveUpAfter, 120 * HOUR, 0),\n\t};\n}\n\nexport function limitsOf(options: QueueOptions): LimitSettings {\n\tconst l = options.limits ?? {};\n\treturn {\n\t\tmaxMessageSize: numberOf(\n\t\t\t'limits.maxMessageSize',\n\t\t\tl.maxMessageSize,\n\t\t\t25 * 1024 * 1024,\n\t\t\t1,\n\t\t),\n\t\tmaxRecipients: numberOf('limits.maxRecipients', l.maxRecipients, 100, 1),\n\t\tmaxItems:\n\t\t\tl.maxItems === undefined\n\t\t\t\t? undefined\n\t\t\t\t: numberOf('limits.maxItems', l.maxItems, 0, 1),\n\t\tmaxReplyText: numberOf('limits.maxReplyText', l.maxReplyText, 512, 64, 900),\n\t\tmaxDsnReturn: numberOf(\n\t\t\t'limits.maxDsnReturn',\n\t\t\tl.maxDsnReturn,\n\t\t\tDEFAULT_MAX_RETURN,\n\t\t\t0,\n\t\t),\n\t};\n}\n",
19
19
  "import { invalid } from '../../errors';\nimport type { QueueOptions } from '../options';\nimport { MAX_TIMER, numberOf } from './numbers';\n\n/** The longest wait `sendMail` takes, in seconds: its timer's own limit. */\nconst MAX_SECONDS = Math.floor(MAX_TIMER / 1000);\n\nfunction checkSeconds(name: string, value: unknown): void {\n\tif (value === undefined) return;\n\tif (\n\t\ttypeof value !== 'number' ||\n\t\t!Number.isFinite(value) ||\n\t\tvalue <= 0 ||\n\t\tvalue > MAX_SECONDS\n\t) {\n\t\tthrow invalid(\n\t\t\t`${name} must be a number of seconds above 0 and at most ${MAX_SECONDS}, not ${value}`,\n\t\t);\n\t}\n}\n\nexport function checkTls(name: string, tls: unknown): void {\n\tif (\n\t\ttls !== undefined &&\n\t\ttls !== 'opportunistic' &&\n\t\ttls !== 'required' &&\n\t\ttls !== 'none'\n\t) {\n\t\tthrow invalid(\n\t\t\t`${name} must be 'opportunistic', 'required' or 'none', not ${tls}`,\n\t\t);\n\t}\n}\n\n/** What every session takes, whatever its route: the MX port and TLS, the timeouts. */\nexport function checkSessions(options: QueueOptions): void {\n\tnumberOf('mxPort', options.mxPort, 25, 1, 65535);\n\tcheckTls('mxTls', options.mxTls);\n\tconst timeouts = options.timeouts;\n\tif (timeouts !== undefined) {\n\t\tif (typeof timeouts !== 'object' || timeouts === null) {\n\t\t\tthrow invalid('timeouts must be an object of seconds');\n\t\t}\n\t\tfor (const [step, value] of Object.entries(timeouts)) {\n\t\t\tcheckSeconds(`timeouts.${step}`, value);\n\t\t}\n\t}\n\tcheckSeconds('deadline', options.deadline);\n}\n",
20
20
  "import { invalid } from '../../errors';\nimport type { QueueOptions, Route, Smarthost } from '../options';\nimport { numberOf } from './numbers';\nimport { checkTls } from './sessions';\n\n/**\n * A smarthost `sendMail` will take, checked now rather than at each\n * delivery: a host, a port, a TLS mode, and credentials only over TLS\n * whose certificate is checked — `sendMail`'s own rule\n * (`@bumail/smtp`'s `client/settings.ts`), with no way out for a test.\n */\nfunction checkRoute(name: string, route: Route): void {\n\tif (route === 'mx') return;\n\tconst smarthost = route as Smarthost | undefined;\n\tconst host = smarthost?.host;\n\tif (typeof host !== 'string' || !/^[^\\s/]+$/.test(host)) {\n\t\tthrow invalid(`${name} must be 'mx' or a smarthost with a host`);\n\t}\n\tconst { port, secure, tls, auth } = smarthost as Smarthost;\n\tnumberOf(`${name}.port`, port, 25, 1, 65535);\n\tif (secure !== undefined && typeof secure !== 'boolean') {\n\t\tthrow invalid(`${name}.secure must be true or false, not ${secure}`);\n\t}\n\tcheckTls(`${name}.tls`, tls);\n\tif (tls === 'none' && secure) {\n\t\tthrow invalid(\n\t\t\t`${name}.secure is TLS from the first byte: it cannot go with tls: 'none'`,\n\t\t);\n\t}\n\tif (auth === undefined) return;\n\tif (typeof auth?.username !== 'string' || auth.username === '') {\n\t\tthrow invalid(`${name}.auth.username must be a non-empty string`);\n\t}\n\tif (typeof auth.password !== 'string' || auth.password === '') {\n\t\tthrow invalid(`${name}.auth.password must be a non-empty string`);\n\t}\n\tconst { mechanism } = auth;\n\tif (\n\t\tmechanism !== undefined &&\n\t\tmechanism !== 'PLAIN' &&\n\t\tmechanism !== 'LOGIN'\n\t) {\n\t\tthrow invalid(\n\t\t\t`${name}.auth.mechanism must be 'PLAIN' or 'LOGIN', not ${mechanism}`,\n\t\t);\n\t}\n\tif (tls !== undefined && tls !== 'required') {\n\t\tthrow invalid(\n\t\t\t`${name}.auth needs tls: 'required', the default with auth: with tls: '${tls}' the password would go to a server whose certificate is not checked`,\n\t\t);\n\t}\n}\n\nexport function checkRoutes(options: QueueOptions): void {\n\tif (options.fallback !== undefined) {\n\t\tconst fallback = options.fallback as Route | null;\n\t\tif (\n\t\t\ttypeof fallback !== 'object' ||\n\t\t\tfallback === null ||\n\t\t\ttypeof fallback.host !== 'string'\n\t\t) {\n\t\t\tthrow invalid(\n\t\t\t\t'fallback must be a smarthost with a host, not an mx route',\n\t\t\t);\n\t\t}\n\t\tcheckRoute('fallback', fallback);\n\t}\n\tcheckRoute('route', options.route ?? 'mx');\n\tconst routes = Object.entries(options.routes ?? {});\n\tfor (const [domain, route] of routes)\n\t\tcheckRoute(`routes[\"${domain}\"]`, route);\n\tconst usesMx =\n\t\t(options.route ?? 'mx') === 'mx' || routes.some(([, r]) => r === 'mx');\n\tif (usesMx && typeof options.resolver?.mx !== 'function') {\n\t\tthrow invalid(\n\t\t\t\"The 'mx' route needs a resolver, such as @bumail/dns's nodeResolver()\",\n\t\t);\n\t}\n}\n",
21
- "import { isMailbox } from '@bumail/smtp/client';\nimport type { QueueItem, RecipientUpdate } from '../contract/types';\nimport { QueueError } from '../errors';\nimport { attemptGroup, type Used } from './attempt';\nimport { domainOf } from './envelope';\nimport type { Events } from './events';\nimport type { Lapse } from './lease';\nimport type { KeyedLimiter } from './limiter';\nimport { type NotifyContext, notify } from './notify';\nimport { type Settled, settle } from './settle';\n\nexport interface DeliveryContext extends NotifyContext {\n\treadonly domains: KeyedLimiter;\n\treadonly events: Events;\n\t/** The worker is stopping: a group not started yet is left for later. */\n\treadonly stopping: () => boolean;\n\t/** The outcome is recorded: the lease needs no more renewal. */\n\treadonly recorded: () => void;\n\t/**\n\t * Whether the lease could have passed to another worker by `now`: a\n\t * renewal found it taken, or its last expiry is past. `undefined` while\n\t * it surely held.\n\t */\n\treadonly leaseLapsed: (now: number) => Promise<Lapse | undefined>;\n}\n\n/**\n * Said when the item is gone at `complete` and the lease had lapsed. With\n * no record of who removed it, neither case can tell another worker that\n * finished it from a cancel, so each names both; either way what this\n * worker sent may have been sent again, and it reports no outcome.\n */\nconst goneAfter = (lapse: Lapse, id: string): QueueError =>\n\tnew QueueError(\n\t\t'LEASE_LOST',\n\t\tlapse === 'taken'\n\t\t\t? `The lease on ${id} was lost while it was delivered, and the item is gone: finished by the worker that took it, the message then sent twice, or cancelled`\n\t\t\t: `The lease on ${id} expired before its outcome was recorded, and the item is gone: lost to another worker that finished it, the message then sent twice, or cancelled`,\n\t);\n\n/** The recipients still to deliver, by domain. */\nfunction groupsOf(item: QueueItem): Map<string, string[]> {\n\tconst groups = new Map<string, string[]>();\n\tfor (const r of item.recipients) {\n\t\tif (r.status === 'delivered' || r.status === 'failed') continue;\n\t\tconst domain = domainOf(r.address);\n\t\tconst group = groups.get(domain);\n\t\tif (group) group.push(r.address);\n\t\telse groups.set(domain, [r.address]);\n\t}\n\treturn groups;\n}\n\n/**\n * Every recipient of an item whose sender `sendMail` would refuse — kept\n * by a store written to by other code, since `enqueue` refuses it — fails\n * at once, as X.1.7 (bad sender's mailbox address syntax), rather than be\n * deferred on every attempt until `retry.giveUpAfter`.\n */\nconst badSender = (address: string): RecipientUpdate => ({\n\taddress,\n\tstatus: 'failed',\n\treply: {\n\t\tstatus: '5.1.7',\n\t\ttext: \"The sender's address is not one SMTP can carry\",\n\t},\n});\n\n/**\n * A pending recipient of an item whose message the store no longer gives\n * — a Redis key evicted or deleted, a row removed by hand — fails at once,\n * as X.3.0 (mail system status): no session can send what cannot be read,\n * and an attempt left without an outcome would be claimed again at every\n * lease, forever, keeping its `maxItems` place.\n */\nconst unreadable = (address: string): RecipientUpdate => ({\n\taddress,\n\tstatus: 'failed',\n\treply: {\n\t\tstatus: '5.3.0',\n\t\ttext: 'Message unreadable: the queue store holds the item but not its message',\n\t},\n});\n\nconst unreadableError = (id: string): QueueError =>\n\tnew QueueError(\n\t\t'MESSAGE_UNREADABLE',\n\t\t`The message of ${id} is unreadable: the store holds the item but not its message, so every pending recipient failed`,\n\t);\n\n/** Tells the listeners each recipient's outcome. */\nfunction emitOutcomes(\n\tevents: Events,\n\titem: QueueItem,\n\tsettled: Settled,\n\tused: ReadonlyMap<string, Used>,\n): void {\n\tconst { attempts, nextAttemptAt } = settled.result;\n\tconst base = (u: RecipientUpdate) => ({\n\t\tid: item.id,\n\t\tfrom: item.from,\n\t\trecipient: u.address,\n\t\t...(u.reply ? { reply: u.reply } : {}),\n\t\tattempts,\n\t\t...used.get(u.address),\n\t});\n\tconst marked = (u: RecipientUpdate) => ({\n\t\t...(u.mayHaveReachedMx ? { mayHaveReachedMx: true as const } : {}),\n\t\t...(u.mayHaveReachedFallback\n\t\t\t? { mayHaveReachedFallback: true as const }\n\t\t\t: {}),\n\t});\n\tfor (const u of settled.delivered) events.emit('delivered', base(u));\n\tfor (const u of settled.deferred) {\n\t\tevents.emit('deferred', { ...base(u), ...marked(u), nextAttemptAt });\n\t}\n\tfor (const u of settled.failed) {\n\t\tevents.emit('failed', { ...base(u), ...marked(u) });\n\t}\n}\n\n/**\n * Delivers a claimed item: one session per recipient domain, at most\n * `perDomain` at once to each — none, and no slot taken, when its sender\n * is one `sendMail` would refuse — then the outcome recorded — which lets go\n * of the lease — then the events and the DSNs. An item whose message the\n * store no longer gives fails every pending recipient, said on the `error`\n * event, its DSN without the original.\n */\nexport async function deliverItem(\n\tctx: DeliveryContext,\n\titem: QueueItem,\n): Promise<void> {\n\tconst { store } = ctx;\n\tconst message = await store.readMessage(item.id);\n\tif (!message) {\n\t\t// Gone with its message: cancelled, or finished by another worker.\n\t\tif ((await store.get(item.id)) === undefined) return;\n\t\tconst failed = [...groupsOf(item).values()].flat().map(unreadable);\n\t\tawait record(ctx, item, failed, false, undefined, new Map());\n\t\treturn;\n\t}\n\tconst groups = groupsOf(item);\n\tlet skipped = false;\n\tconst used = new Map<string, Used>();\n\t// A sender sendMail would refuse: no session, no slot, every recipient at once.\n\tconst outcomes =\n\t\titem.from !== '' && !isMailbox(item.from)\n\t\t\t? [[...groups.values()].flat().map(badSender)]\n\t\t\t: await Promise.all(\n\t\t\t\t\t[...groups].map(async ([domain, group]) => {\n\t\t\t\t\t\tconst release = await ctx.domains.acquire(domain);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (ctx.stopping()) {\n\t\t\t\t\t\t\t\tskipped = true;\n\t\t\t\t\t\t\t\treturn [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn await attemptGroup(\n\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\tdomain,\n\t\t\t\t\t\t\t\tgroup,\n\t\t\t\t\t\t\t\tused,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\trelease();\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t);\n\tawait record(ctx, item, outcomes.flat(), skipped, message, used);\n}\n\n/**\n * Records an attempt's outcomes — which lets go of the lease — then tells\n * the events and sends the DSNs, the original returned when there is one.\n * With no `message` (the store lost it), the `MESSAGE_UNREADABLE` error\n * comes first of the events, and only once the failures are recorded: a\n * lease lost meanwhile, or a `complete` that throws, says nothing of them,\n * and an item cancelled meanwhile tells nothing at all.\n */\nasync function record(\n\tctx: DeliveryContext,\n\titem: QueueItem,\n\tupdates: readonly RecipientUpdate[],\n\tskipped: boolean,\n\tmessage: Uint8Array | undefined,\n\tused: ReadonlyMap<string, Used>,\n): Promise<void> {\n\tconst { settings, store, events } = ctx;\n\tconst now = settings.now();\n\tconst settled = settle(item, updates, skipped, now, settings);\n\tconst after = await store.complete(item.id, settings.owner, settled.result);\n\tctx.recorded();\n\tif (!after && (await store.get(item.id)) === undefined) {\n\t\tconst lapse = await ctx.leaseLapsed(now);\n\t\tif (lapse) {\n\t\t\t// Lost or cancelled: no outcome told, as when the item is still there.\n\t\t\tevents.emit('error', { error: goneAfter(lapse, item.id), id: item.id });\n\t\t\treturn;\n\t\t}\n\t\t// Cancelled under a lease that held, with no session for a lost\n\t\t// message: nothing happened, and nothing was recorded, so nothing is told.\n\t\tif (!message) return;\n\t\t// Otherwise what the sessions did still happened; no DSN.\n\t\temitOutcomes(events, item, settled, used);\n\t\treturn;\n\t}\n\tif (!after) {\n\t\tconst error = new QueueError(\n\t\t\t'LEASE_LOST',\n\t\t\t`The lease on ${item.id} was lost before its outcome was recorded; another worker will try it again`,\n\t\t);\n\t\tevents.emit('error', { error, id: item.id });\n\t\treturn;\n\t}\n\tif (!message) {\n\t\tevents.emit('error', { error: unreadableError(item.id), id: item.id });\n\t}\n\temitOutcomes(events, item, settled, used);\n\tawait notify(ctx, item, message, 'failed', settled.failed, now);\n\t// SUCCESS asked, and the next hop listed no DSN: responsibility stays here (RFC 3461 §5.2.2).\n\tconst relayed = settled.delivered.filter((u) => u.dsnOffered === false);\n\tawait notify(ctx, item, message, 'relayed', relayed, now);\n\tif (settled.delayDsn) {\n\t\tawait notify(ctx, item, message, 'delayed', settled.deferred, now);\n\t}\n}\n",
21
+ "import { isMailbox } from '@bumail/smtp/client';\nimport type { QueueItem, RecipientUpdate } from '../contract/types';\nimport { QueueError } from '../errors';\nimport { attemptGroup, type Used } from './attempt';\nimport { domainOf } from './envelope';\nimport type { Events } from './events';\nimport type { Lapse } from './lease';\nimport type { KeyedLimiter } from './limiter';\nimport { dsnsOf, type NotifyContext, tellDsns } from './notify';\nimport { type Settled, settle } from './settle';\n\nexport interface DeliveryContext extends NotifyContext {\n\treadonly domains: KeyedLimiter;\n\treadonly events: Events;\n\t/** The worker is stopping: a group not started yet is left for later. */\n\treadonly stopping: () => boolean;\n\t/** The outcome is recorded: the lease needs no more renewal. */\n\treadonly recorded: () => void;\n\t/**\n\t * Whether the lease could have passed to another worker by `now`: a\n\t * renewal found it taken, or its last expiry is past. `undefined` while\n\t * it surely held.\n\t */\n\treadonly leaseLapsed: (now: number) => Promise<Lapse | undefined>;\n}\n\n/**\n * Said when the item is gone at `complete` and the lease had lapsed. With\n * no record of who removed it, neither case can tell another worker that\n * finished it from a cancel, so each names both; either way what this\n * worker sent may have been sent again, and it reports no outcome.\n */\nconst goneAfter = (lapse: Lapse, id: string): QueueError =>\n\tnew QueueError(\n\t\t'LEASE_LOST',\n\t\tlapse === 'taken'\n\t\t\t? `The lease on ${id} was lost while it was delivered, and the item is gone: finished by the worker that took it, the message then sent twice, or cancelled`\n\t\t\t: `The lease on ${id} expired before its outcome was recorded, and the item is gone: lost to another worker that finished it, the message then sent twice, or cancelled`,\n\t);\n\n/** The recipients still to deliver, by domain. */\nfunction groupsOf(item: QueueItem): Map<string, string[]> {\n\tconst groups = new Map<string, string[]>();\n\tfor (const r of item.recipients) {\n\t\tif (r.status === 'delivered' || r.status === 'failed') continue;\n\t\tconst domain = domainOf(r.address);\n\t\tconst group = groups.get(domain);\n\t\tif (group) group.push(r.address);\n\t\telse groups.set(domain, [r.address]);\n\t}\n\treturn groups;\n}\n\n/**\n * Every recipient of an item whose sender `sendMail` would refuse — kept\n * by a store written to by other code, since `enqueue` refuses it — fails\n * at once, as X.1.7 (bad sender's mailbox address syntax), rather than be\n * deferred on every attempt until `retry.giveUpAfter`.\n */\nconst badSender = (address: string): RecipientUpdate => ({\n\taddress,\n\tstatus: 'failed',\n\treply: {\n\t\tstatus: '5.1.7',\n\t\ttext: \"The sender's address is not one SMTP can carry\",\n\t},\n});\n\n/**\n * A pending recipient of an item whose message the store no longer gives\n * — a Redis key evicted or deleted, a row removed by hand — fails at once,\n * as X.3.0 (mail system status): no session can send what cannot be read,\n * and an attempt left without an outcome would be claimed again at every\n * lease, forever, keeping its `maxItems` place.\n */\nconst unreadable = (address: string): RecipientUpdate => ({\n\taddress,\n\tstatus: 'failed',\n\treply: {\n\t\tstatus: '5.3.0',\n\t\ttext: 'Message unreadable: the queue store holds the item but not its message',\n\t},\n});\n\nconst unreadableError = (id: string): QueueError =>\n\tnew QueueError(\n\t\t'MESSAGE_UNREADABLE',\n\t\t`The message of ${id} is unreadable: the store holds the item but not its message, so every pending recipient failed`,\n\t);\n\n/** Tells the listeners each recipient's outcome. */\nfunction emitOutcomes(\n\tevents: Events,\n\titem: QueueItem,\n\tsettled: Settled,\n\tused: ReadonlyMap<string, Used>,\n): void {\n\tconst { attempts, nextAttemptAt } = settled.result;\n\tconst base = (u: RecipientUpdate) => ({\n\t\tid: item.id,\n\t\tfrom: item.from,\n\t\trecipient: u.address,\n\t\t...(u.reply ? { reply: u.reply } : {}),\n\t\tattempts,\n\t\t...used.get(u.address),\n\t});\n\tconst marked = (u: RecipientUpdate) => ({\n\t\t...(u.mayHaveReachedMx ? { mayHaveReachedMx: true as const } : {}),\n\t\t...(u.mayHaveReachedFallback\n\t\t\t? { mayHaveReachedFallback: true as const }\n\t\t\t: {}),\n\t});\n\tfor (const u of settled.delivered) events.emit('delivered', base(u));\n\tfor (const u of settled.deferred) {\n\t\tevents.emit('deferred', { ...base(u), ...marked(u), nextAttemptAt });\n\t}\n\tfor (const u of settled.failed) {\n\t\tevents.emit('failed', { ...base(u), ...marked(u) });\n\t}\n}\n\n/**\n * Delivers a claimed item: one session per recipient domain, at most\n * `perDomain` at once to each — none, and no slot taken, when its sender\n * is one `sendMail` would refuse — then the outcome recorded — which lets go\n * of the lease — then the events and the DSNs. An item whose message the\n * store no longer gives fails every pending recipient, said on the `error`\n * event, its DSN without the original.\n */\nexport async function deliverItem(\n\tctx: DeliveryContext,\n\titem: QueueItem,\n): Promise<void> {\n\tconst { store } = ctx;\n\tconst message = await store.readMessage(item.id);\n\tif (!message) {\n\t\t// Gone with its message: cancelled, or finished by another worker.\n\t\tif ((await store.get(item.id)) === undefined) return;\n\t\tconst failed = [...groupsOf(item).values()].flat().map(unreadable);\n\t\tawait record(ctx, item, failed, false, undefined, new Map());\n\t\treturn;\n\t}\n\tconst groups = groupsOf(item);\n\tlet skipped = false;\n\tconst used = new Map<string, Used>();\n\t// A sender sendMail would refuse: no session, no slot, every recipient at once.\n\tconst outcomes =\n\t\titem.from !== '' && !isMailbox(item.from)\n\t\t\t? [[...groups.values()].flat().map(badSender)]\n\t\t\t: await Promise.all(\n\t\t\t\t\t[...groups].map(async ([domain, group]) => {\n\t\t\t\t\t\tconst release = await ctx.domains.acquire(domain);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (ctx.stopping()) {\n\t\t\t\t\t\t\t\tskipped = true;\n\t\t\t\t\t\t\t\treturn [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn await attemptGroup(\n\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\tdomain,\n\t\t\t\t\t\t\t\tgroup,\n\t\t\t\t\t\t\t\tused,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\trelease();\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t);\n\tawait record(ctx, item, outcomes.flat(), skipped, message, used);\n}\n\n/**\n * Records an attempt's outcomes — which lets go of the lease — then tells\n * the events and sends the DSNs, the original returned when there is one.\n * With no `message` (the store lost it), the `MESSAGE_UNREADABLE` error\n * comes first of the events, and only once the failures are recorded: a\n * lease lost meanwhile, or a `complete` that throws, says nothing of them,\n * and an item cancelled meanwhile tells nothing at all. A DSN that cannot\n * be built is left out and said on `error` once the outcome is recorded,\n * not before; the outcome, `delayNotified` of a delayed one included, stays.\n */\nasync function record(\n\tctx: DeliveryContext,\n\titem: QueueItem,\n\tupdates: readonly RecipientUpdate[],\n\tskipped: boolean,\n\tmessage: Uint8Array | undefined,\n\tused: ReadonlyMap<string, Used>,\n): Promise<void> {\n\tconst { settings, store, events } = ctx;\n\tconst now = settings.now();\n\tconst settled = settle(item, updates, skipped, now, settings);\n\t// The DSNs are built first and recorded with the outcome, in one step.\n\tconst { pending, failures } = dsnsOf(ctx, item, message, settled, now);\n\tconst completed = await store.complete(\n\t\titem.id,\n\t\tsettings.owner,\n\t\tsettled.result,\n\t\tpending.map((p) => p.item),\n\t);\n\tctx.recorded();\n\tif (!completed && (await store.get(item.id)) === undefined) {\n\t\tconst lapse = await ctx.leaseLapsed(now);\n\t\tif (lapse) {\n\t\t\t// Lost or cancelled: no outcome told, as when the item is still there.\n\t\t\tevents.emit('error', { error: goneAfter(lapse, item.id), id: item.id });\n\t\t\treturn;\n\t\t}\n\t\t// Cancelled under a lease that held, with no session for a lost\n\t\t// message: nothing happened, and nothing was recorded, so nothing is told.\n\t\tif (!message) return;\n\t\t// Otherwise what the sessions did still happened; no DSN.\n\t\temitOutcomes(events, item, settled, used);\n\t\treturn;\n\t}\n\tif (!completed) {\n\t\tconst error = new QueueError(\n\t\t\t'LEASE_LOST',\n\t\t\t`The lease on ${item.id} was lost before its outcome was recorded; another worker will try it again`,\n\t\t);\n\t\tevents.emit('error', { error, id: item.id });\n\t\treturn;\n\t}\n\tif (!message) {\n\t\tevents.emit('error', { error: unreadableError(item.id), id: item.id });\n\t}\n\temitOutcomes(events, item, settled, used);\n\t// A DSN that could not be built is said now, its outcome recorded.\n\tfor (const error of failures) events.emit('error', { error, id: item.id });\n\tawait tellDsns(ctx, item, pending, completed);\n}\n",
22
22
  "import { isMailbox } from '@bumail/smtp/client';\nimport type { QueueItem, RecipientUpdate } from '../contract/types';\nimport type { DeliveryContext } from './deliver';\nimport {\n\tdeliverHeld,\n\tfallBackAtOnce,\n\theldAtFallback,\n} from './fallback-session';\nimport { routeOf } from './route';\nimport { session, type Used } from './session';\n\nexport type { Used } from './session';\n\n/**\n * A recipient `sendMail` would refuse — kept by a store written to by\n * other code, since `enqueue` refuses it — fails alone, as X.1.3 (bad\n * destination mailbox address syntax), so the session for its domain\n * still goes ahead for the others.\n */\nconst badAddress = (address: string): RecipientUpdate => ({\n\taddress,\n\tstatus: 'failed',\n\treply: {\n\t\tstatus: '5.1.3',\n\t\ttext: 'The address is not one SMTP can carry',\n\t},\n});\n\n/**\n * One delivery for one domain's recipients: each one's outcome, whatever\n * happened, and in `used` the route each took. By MX with a `fallback`:\n * the recipients the smarthost may already hold (`mayHaveReachedFallback`)\n * go to it first, skipping the MX (`deliverHeld`); the others go by MX, and\n * those whose outcome is a connection failure, a timeout or a reputation\n * refusal go at once to the fallback smarthost (`fallBackAtOnce`).\n */\nexport async function attemptGroup(\n\tctx: DeliveryContext,\n\titem: QueueItem,\n\tmessage: Uint8Array,\n\tdomain: string,\n\trecipients: readonly string[],\n\tused: Map<string, Used>,\n): Promise<RecipientUpdate[]> {\n\tconst { settings } = ctx;\n\tconst bad = recipients.filter((address) => !isMailbox(address));\n\tconst group = recipients.filter(isMailbox);\n\tif (group.length === 0) return bad.map(badAddress);\n\tconst route = routeOf(settings, domain);\n\tconst label = route === 'mx' ? 'mx' : 'smarthost';\n\tfor (const address of group) used.set(address, { route: label });\n\tconst { fallback } = settings.options;\n\tconst held = heldAtFallback(item, group, route === 'mx', fallback);\n\t// First, so these do not wait behind an MX timeout.\n\tconst kept =\n\t\tfallback === undefined\n\t\t\t? []\n\t\t\t: await deliverHeld(ctx, item, message, domain, held, fallback, used);\n\tconst viaMx = group.filter((address) => !held.includes(address));\n\tlet updates: RecipientUpdate[] = [];\n\tif (viaMx.length > 0) {\n\t\tconst first = await session(ctx, item, message, domain, viaMx, route);\n\t\tupdates =\n\t\t\tfallback !== undefined && route === 'mx'\n\t\t\t\t? await fallBackAtOnce(\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\titem,\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t\tdomain,\n\t\t\t\t\t\tfirst,\n\t\t\t\t\t\tfallback,\n\t\t\t\t\t\tused,\n\t\t\t\t\t)\n\t\t\t\t: first.updates;\n\t}\n\treturn [...kept, ...updates, ...bad.map(badAddress)];\n}\n",
23
23
  "import type {\n\tReply,\n\tSendMailResult,\n\tSmtpError,\n\tSmtpErrorCode,\n} from '@bumail/smtp/client';\nimport type { Diagnostic, RecipientUpdate } from '../contract/types';\nimport { cleanText } from '../text';\n\n/**\n * An `SmtpError`, read by its `name`: a second copy of `@bumail/smtp` (a\n * different version installed for the app) throws errors of another\n * class, which `instanceof` would take for unknown ones.\n */\nexport const isSmtpError = (error: unknown): error is SmtpError =>\n\terror instanceof Error &&\n\terror.name === 'SmtpError' &&\n\ttypeof (error as { code?: unknown }).code === 'string';\n\n/**\n * `sendMail` refused its options: the route is misconfigured (a smarthost\n * it cannot use, a bad timeout), not the recipient. Retried, never bounced\n * at once: fixing the configuration and restarting delivers the message.\n */\nexport const isRouteError = (error: unknown): boolean =>\n\tisSmtpError(error) && error.code === 'INVALID_OPTION';\n\n/** An enhanced status code, `x.y.z` (RFC 3463 §2). */\nconst STATUS = /^[245]\\.\\d{1,3}\\.\\d{1,3}$/;\n\n/** What a reply says, bounded and cleaned. */\nexport function diagnosticOf(\n\treply: Reply,\n\tmax: number,\n\thost?: string,\n): Diagnostic {\n\tconst text =\n\t\ttypeof reply.text === 'string' ? reply.text : reply.text.join(' ');\n\treturn {\n\t\tcode: reply.code,\n\t\t...(reply.status && STATUS.test(reply.status)\n\t\t\t? { status: reply.status }\n\t\t\t: {}),\n\t\ttext: cleanText(text, max),\n\t\t...(host ? { host: cleanText(host, 255) } : {}),\n\t};\n}\n\n/**\n * The status code an error with no reply stands for (RFC 3463 §3): a null\n * MX is X.1.10 (RFC 7505 §4.2), a domain that cannot be found X.1.2, a\n * host that does not answer X.4.1, a connection lost or timed out X.4.2,\n * TLS X.7.0 (security).\n */\nconst ERROR_STATUS: Partial<Record<SmtpErrorCode, string>> = {\n\tNULL_MX: '1.10',\n\tDNS_FAILED: '1.2',\n\tCONNECTION_FAILED: '4.1',\n\tCONNECTION_LOST: '4.2',\n\tTIMEOUT: '4.2',\n\tTLS_UNAVAILABLE: '7.10',\n\tTLS_FAILED: '7.0',\n\tAUTH_UNAVAILABLE: '7.0',\n\tINVALID_OPTION: '3.5',\n};\n\n/**\n * A failure that never got a reply. Whether the MX or the fallback smarthost\n * may nonetheless hold a copy (`SmtpError.afterData`) is not said here:\n * `session` marks the outcomes `mayHaveReachedMx` or `mayHaveReachedFallback`\n * from the error.\n */\nfunction diagnosticOfError(\n\terror: unknown,\n\ttemporary: boolean,\n\tmax: number,\n\thost?: string,\n): Diagnostic {\n\tconst text = error instanceof Error ? error.message : String(error);\n\tconst detail = isSmtpError(error)\n\t\t? (ERROR_STATUS[error.code] ?? '0.0')\n\t\t: '0.0';\n\treturn {\n\t\tstatus: `${temporary ? 4 : 5}.${detail}`,\n\t\ttext: cleanText(text, max),\n\t\t...(host ? { host: cleanText(host, 255) } : {}),\n\t};\n}\n\n/** Each recipient of a delivery `sendMail` resolved: taken, or refused one by one. */\nexport function outcomesOf(\n\tresult: SendMailResult,\n\tgroup: readonly string[],\n\tmax: number,\n): RecipientUpdate[] {\n\tconst host = result.host;\n\tconst updates = new Map<string, RecipientUpdate>();\n\tfor (const { recipient } of result.accepted) {\n\t\tupdates.set(recipient, {\n\t\t\taddress: recipient,\n\t\t\tstatus: 'delivered',\n\t\t\treply: diagnosticOf(result.reply, max, host),\n\t\t\t// Only a plain `false` means no DSN at the next hop (an older sender says nothing).\n\t\t\t...(result.dsnOffered === false ? { dsnOffered: false } : {}),\n\t\t});\n\t}\n\tfor (const { recipient, reply } of result.rejected) {\n\t\tupdates.set(recipient, {\n\t\t\taddress: recipient,\n\t\t\tstatus: reply.code >= 500 ? 'failed' : 'deferred',\n\t\t\treply: diagnosticOf(reply, max, host),\n\t\t});\n\t}\n\t// sendMail names every recipient it was given; a fake may not.\n\treturn group.map(\n\t\t(address) =>\n\t\t\tupdates.get(address) ?? {\n\t\t\t\taddress,\n\t\t\t\tstatus: 'deferred',\n\t\t\t\treply: {\n\t\t\t\t\ttext: 'The delivery said nothing of this recipient',\n\t\t\t\t\t...(host ? { host: cleanText(host, 255) } : {}),\n\t\t\t\t},\n\t\t\t},\n\t);\n}\n\n/**\n * Each recipient of a delivery `sendMail` rejected: by its own reply when\n * the server refused every one, else all alike — deferred when the error\n * is temporary (a 4xx, the network, a timeout) or the route's own\n * (`INVALID_OPTION`, X.3.5), failed otherwise.\n */\nexport function outcomesOfError(\n\terror: unknown,\n\tgroup: readonly string[],\n\tmax: number,\n\thost?: string,\n): RecipientUpdate[] {\n\tconst rejected = new Map(\n\t\tisSmtpError(error)\n\t\t\t? (error.rejected ?? []).map((r) => [r.recipient, r.reply])\n\t\t\t: [],\n\t);\n\tconst temporary =\n\t\t!isSmtpError(error) || error.temporary || isRouteError(error);\n\treturn group.map((address): RecipientUpdate => {\n\t\tconst own = rejected.get(address);\n\t\tif (own) {\n\t\t\treturn {\n\t\t\t\taddress,\n\t\t\t\tstatus: own.code >= 500 ? 'failed' : 'deferred',\n\t\t\t\treply: diagnosticOf(own, max, host),\n\t\t\t};\n\t\t}\n\t\tconst reply =\n\t\t\tisSmtpError(error) && error.reply\n\t\t\t\t? diagnosticOf(error.reply, max, host)\n\t\t\t\t: diagnosticOfError(error, temporary, max, host);\n\t\treturn { address, status: temporary ? 'deferred' : 'failed', reply };\n\t});\n}\n",
24
24
  "import type { Diagnostic } from '../contract/types';\nimport { isSmtpError } from './outcome';\n\n/** Words a refusal uses when it names a blocklist or a reputation, for a server that gives no enhanced code. */\nconst REPUTATION =\n\t/\\b(?:block ?list(?:ed)?|black ?list(?:ed)?|deny ?list(?:ed)?|spamhaus|rbl|dnsbl|reputation|banned)\\b|\\bblocked\\b|\\blisted (?:in|on|at)\\b/i;\n\n/** A greylisting: a `4.7.x` that asks to come back, which a smarthost would not change. */\nconst GREYLIST = /gr[ae]y ?list/i;\n\n/**\n * Whether what the other side said (or why nobody said anything) is a\n * reason to try the fallback smarthost rather than wait: a connection\n * that failed or timed out (X.4.1, X.4.2, no reply at all), or a refusal\n * read as a matter of policy or reputation, a `4.7.x` or `5.7.x` (RFC\n * 3463 §3.8, security or policy status) or, with no enhanced code, text\n * that names a blocklist or a reputation.\n *\n * It is not a reason when the message may already be at the MX: an\n * `SmtpError` marked `afterData` (the final dot was written and no reply\n * came, a timeout or a lost connection that reads as 4.4.2) would be one\n * more copy by the smarthost, so the recipient is deferred for the MX retry\n * (RFC 5321 §4.1.5) and marked `mayHaveReachedMx`, which keeps every later\n * attempt from falling back on its own (`attemptGroup`). When the error\n * carries the envelope (`accepted`, `rejected`), the caller has marked\n * every recipient the MX did not refuse at `RCPT`; a refused one is judged\n * by its own `RCPT` reply, as before `DATA`. An `@bumail/smtp` without the\n * field behaves as before.\n *\n * It is not a reason when the smarthost would be refused alike: an\n * unknown or full mailbox (`5.1.x`, `x.2.x`), a domain that does not\n * exist, a null MX, a route that is misconfigured, or a TLS failure of\n * the MX (an `SmtpError` coded `TLS_*`, even one that carries a reply such\n * as a refused STARTTLS `454 4.7.0`), which the operator's TLS policy meant\n * to refuse, or a greylisting (`4.7.x` whose text says so), which the MX\n * retry settles.\n */\nexport function fallsBack(\n\treply: Diagnostic | undefined,\n\terror?: unknown,\n): boolean {\n\tif (!reply) return false;\n\tif (isSmtpError(error) && error.afterData && !error.accepted) return false;\n\tif (isSmtpError(error) && error.code.startsWith('TLS_')) return false;\n\tif (GREYLIST.test(reply.text)) return false;\n\tif (reply.code === undefined) {\n\t\treturn reply.status === '4.4.1' || reply.status === '4.4.2';\n\t}\n\tif (reply.code < 400) return false;\n\tif (reply.status !== undefined) {\n\t\treturn /^[45]\\.7\\.\\d+$/.test(reply.status);\n\t}\n\treturn REPUTATION.test(reply.text);\n}\n",
@@ -26,14 +26,14 @@
26
26
  "import type { QueueItem, RecipientUpdate } from '../contract/types';\nimport type { DeliveryContext } from './deliver';\nimport type { RecipientEvent } from './events';\nimport type { Route } from './options';\nimport {\n\tisRouteError,\n\tisSmtpError,\n\toutcomesOf,\n\toutcomesOfError,\n} from './outcome';\nimport { dsnOptionsOf, hostOf, sendOptionsOf } from './route';\n\n/** Which server may hold the message: the MX, or the fallback smarthost. */\ntype Doubt = 'mayHaveReachedMx' | 'mayHaveReachedFallback';\n\n/** A deferred or failed outcome, marked: that server may hold the message. */\nconst marked = (u: RecipientUpdate, key: Doubt): RecipientUpdate =>\n\tu.status === 'delivered' ? u : { ...u, [key]: true };\n\n/**\n * The outcomes of a session that failed after the final dot, marked: the\n * server (`key`) may hold a copy for every recipient it did not refuse at RCPT. A\n * recipient it refused there never had one, and keeps its own outcome. An\n * error with no envelope (an older `@bumail/smtp`) leaves every recipient\n * in doubt.\n */\nfunction doubtful(\n\tupdates: RecipientUpdate[],\n\terror: {\n\t\treadonly accepted?: readonly { recipient: string }[];\n\t\treadonly rejected?: readonly { recipient: string }[];\n\t},\n\tkey: Doubt,\n): RecipientUpdate[] {\n\tif (!error.accepted) return updates.map((u) => marked(u, key));\n\t// Only a refusal at RCPT proves there is no copy: any other recipient is in\n\t// doubt, one listed as both accepted and refused (a malformed envelope) too.\n\tconst taken = new Set(error.accepted.map((r) => r.recipient));\n\tconst refused = new Set(\n\t\t(error.rejected ?? []).map((r) => r.recipient).filter((a) => !taken.has(a)),\n\t);\n\treturn updates.map((u) => (refused.has(u.address) ? u : marked(u, key)));\n}\n\n/** The route a recipient's last session took, as its events tell it. */\nexport type Used = Pick<RecipientEvent, 'route' | 'fallback' | 'mxReply'>;\n\n/** One session's outcomes, and the error that ended it, if any. */\nexport interface Attempt {\n\treadonly updates: RecipientUpdate[];\n\treadonly error?: unknown;\n}\n\n/** One session, by `route` (the domain's own when none is given): each recipient's outcome, whatever happened. */\nexport async function session(\n\tctx: DeliveryContext,\n\titem: QueueItem,\n\tmessage: Uint8Array,\n\tdomain: string,\n\tgroup: readonly string[],\n\troute: Route,\n\toverride?: Route,\n): Promise<Attempt> {\n\tconst { settings } = ctx;\n\tconst max = settings.limits.maxReplyText;\n\ttry {\n\t\tconst options = {\n\t\t\t...sendOptionsOf(settings, domain, item.from, group, override),\n\t\t\t...dsnOptionsOf(item, group),\n\t\t};\n\t\tconst result = await settings.send(message, options);\n\t\treturn { updates: outcomesOf(result, group, max) };\n\t} catch (error) {\n\t\t// A route sendMail cannot use is the operator's to fix: said, and retried.\n\t\tif (isRouteError(error)) ctx.events.emit('error', { error, id: item.id });\n\t\tconst updates = outcomesOfError(error, group, max, hostOf(route));\n\t\t// The final dot was written and no reply came: that server may hold a copy.\n\t\tconst key = route === 'mx' ? 'mayHaveReachedMx' : 'mayHaveReachedFallback';\n\t\tconst doubt =\n\t\t\t(route === 'mx' || override !== undefined) &&\n\t\t\tisSmtpError(error) &&\n\t\t\terror.afterData;\n\t\treturn { updates: doubt ? doubtful(updates, error, key) : updates, error };\n\t}\n}\n",
27
27
  "import type { QueueItem, RecipientUpdate } from '../contract/types';\nimport type { DeliveryContext } from './deliver';\nimport { fallsBack } from './fallback';\nimport type { Route } from './options';\nimport { type Attempt, session, type Used } from './session';\n\n/**\n * What a recipient becomes once the fallback answered for its MX outcome.\n * The fallback decides when it delivered, or when the MX refused for good\n * (a `5.7.x`). A smarthost that refuses what the MX only deferred (a bad\n * password, a sender it does not allow) leaves the recipient deferred, with\n * the smarthost's reply as the diagnostic: no DSN, tried again later.\n */\nfunction merged(mx: RecipientUpdate, fb: RecipientUpdate): RecipientUpdate {\n\tif (mx.status === 'deferred' && fb.status === 'failed') {\n\t\treturn { ...fb, status: 'deferred' };\n\t}\n\treturn fb;\n}\n\n/**\n * A recipient the smarthost may already hold stays deferred when it\n * refuses: its earlier copy may still arrive, so no DSN (as `merged`).\n */\nconst stillHeld = (u: RecipientUpdate): RecipientUpdate =>\n\tu.status === 'failed' ? { ...u, status: 'deferred' } : u;\n\n/**\n * The automatic fallback, after the MX session: the recipients whose MX\n * outcome is a connection failure, a timeout or a reputation refusal\n * (`fallsBack`) go at once to the fallback smarthost, in a session of their\n * own, and its outcome replaces the first (`merged`). A recipient marked\n * `mayHaveReachedMx` never does. Returns every update, replaced or not.\n */\nexport async function fallBackAtOnce(\n\tctx: DeliveryContext,\n\titem: QueueItem,\n\tmessage: Uint8Array,\n\tdomain: string,\n\tfirst: Attempt,\n\tfallback: Route,\n\tused: Map<string, Used>,\n): Promise<RecipientUpdate[]> {\n\t// Recorded by an earlier attempt: the MX may hold a copy, so no automatic fallback.\n\tconst mxHeld = new Set(\n\t\titem.recipients.filter((r) => r.mayHaveReachedMx).map((r) => r.address),\n\t);\n\tconst mx = new Map(\n\t\tfirst.updates\n\t\t\t.filter(\n\t\t\t\t(u) =>\n\t\t\t\t\tu.status !== 'delivered' &&\n\t\t\t\t\t!u.mayHaveReachedMx &&\n\t\t\t\t\t!mxHeld.has(u.address) &&\n\t\t\t\t\tfallsBack(u.reply, first.error),\n\t\t\t)\n\t\t\t.map((u) => [u.address, u]),\n\t);\n\tif (mx.size === 0) return first.updates;\n\tconst second = await session(\n\t\tctx,\n\t\titem,\n\t\tmessage,\n\t\tdomain,\n\t\t[...mx.keys()],\n\t\tfallback,\n\t\tfallback,\n\t);\n\tfor (const [address, u] of mx) {\n\t\tused.set(address, {\n\t\t\troute: 'smarthost',\n\t\t\tfallback: true,\n\t\t\t...(u.reply ? { mxReply: u.reply } : {}),\n\t\t});\n\t}\n\treturn [\n\t\t...first.updates.filter((u) => !mx.has(u.address)),\n\t\t...second.updates.map((u) => {\n\t\t\tconst was = mx.get(u.address);\n\t\t\treturn was ? merged(was, u) : u;\n\t\t}),\n\t];\n}\n\n/**\n * The recipients marked `mayHaveReachedFallback` (and not `mayHaveReachedMx`)\n * while a `fallback` is configured and the domain goes by MX: the smarthost\n * may hold a copy, so they skip the MX and go to it again, in one session of\n * their own. A refusal leaves them deferred (`stillHeld`).\n */\nexport function heldAtFallback(\n\titem: QueueItem,\n\tgroup: readonly string[],\n\tbyMx: boolean,\n\tfallback: Route | undefined,\n): string[] {\n\tif (!byMx || fallback === undefined) return [];\n\tconst held = new Set(\n\t\titem.recipients\n\t\t\t.filter((r) => r.mayHaveReachedFallback && !r.mayHaveReachedMx)\n\t\t\t.map((r) => r.address),\n\t);\n\treturn group.filter((address) => held.has(address));\n}\n\n/** The held recipients' session at the fallback smarthost. */\nexport async function deliverHeld(\n\tctx: DeliveryContext,\n\titem: QueueItem,\n\tmessage: Uint8Array,\n\tdomain: string,\n\theld: readonly string[],\n\tfallback: Route,\n\tused: Map<string, Used>,\n): Promise<RecipientUpdate[]> {\n\tif (held.length === 0) return [];\n\tfor (const address of held) {\n\t\tused.set(address, { route: 'smarthost', fallback: true });\n\t}\n\tconst second = await session(\n\t\tctx,\n\t\titem,\n\t\tmessage,\n\t\tdomain,\n\t\theld,\n\t\tfallback,\n\t\tfallback,\n\t);\n\treturn second.updates.map(stillHeld);\n}\n",
28
28
  "import type { RetrySettings } from './settings';\n\n/**\n * The wait after the `attempts`-th attempt failed for now: `first`, then\n * `factor` times the wait before, at most `max`, plus up to `jitter` of\n * itself — never less, so RFC 5321 §4.5.4.1's 30 minutes stay a floor.\n */\nexport function retryDelay(\n\tattempts: number,\n\tretry: RetrySettings,\n\trandom: () => number,\n): number {\n\tconst exponent = Math.max(0, attempts - 1);\n\tconst delay = Math.min(retry.first * retry.factor ** exponent, retry.max);\n\treturn delay + delay * retry.jitter * Math.min(1, Math.max(0, random()));\n}\n\n/** When a message's deferred recipients give up: `giveUpAfter` after it was enqueued. */\nexport const giveUpAt = (createdAt: number, retry: RetrySettings) =>\n\tcreatedAt + retry.giveUpAfter;\n\n/**\n * The next attempt after the `attempts`-th, at `now`: the back-off, but no\n * later than the moment of giving up, so the last try falls on it.\n * `undefined` when that moment has come: what is still deferred fails.\n */\nexport function nextAttemptAt(\n\tcreatedAt: number,\n\tnow: number,\n\tattempts: number,\n\tretry: RetrySettings,\n\trandom: () => number,\n): number | undefined {\n\tconst end = giveUpAt(createdAt, retry);\n\tif (now >= end) return undefined;\n\treturn Math.min(now + retryDelay(attempts, retry, random), end);\n}\n",
29
- "import type { QueueStore } from '../contract/queue-store';\nimport type { Diagnostic, QueueItem, RecipientUpdate } from '../contract/types';\nimport { buildDsn, type DsnKind } from '../dsn/build';\nimport { asked, returnOf } from '../dsn/policy';\nimport type { Events } from './events';\nimport { giveUpAt } from './retry';\nimport type { Settings } from './settings';\n\nexport interface NotifyContext {\n\treadonly settings: Settings;\n\treadonly store: QueueStore;\n\treadonly events: Events;\n}\n\n/** Said in a failed DSN of a recipient whose message the MX may hold. */\nconst MAY_HAVE_REACHED =\n\t'An earlier attempt may have reached the receiving server, so the message may have been delivered.';\n\n/** Said in a failed DSN of a recipient whose message the fallback smarthost may hold. */\nconst MAY_HAVE_REACHED_FALLBACK =\n\t'An earlier attempt may have reached the fallback smarthost, so the message may have been delivered.';\n\n/** The reply a DSN reports: a failed recipient's, with a sentence more for each server that may hold the message. */\nfunction reported(r: RecipientUpdate, kind: DsnKind): Diagnostic | undefined {\n\tconst said = [\n\t\t...(r.mayHaveReachedMx ? [MAY_HAVE_REACHED] : []),\n\t\t...(r.mayHaveReachedFallback ? [MAY_HAVE_REACHED_FALLBACK] : []),\n\t];\n\tif (kind !== 'failed' || said.length === 0) return r.reply;\n\tconst reply: Diagnostic = r.reply ?? { text: '' };\n\treturn {\n\t\t...reply,\n\t\ttext: [reply.text, ...said].filter((t) => t !== '').join(' '),\n\t};\n}\n\n/**\n * Enqueues a DSN (RFC 3464) back to the item's sender for those of these\n * recipients that asked for one of this kind (`NOTIFY`, RFC 3461 §4.1:\n * `NEVER`, or the events listed; failure and delay when absent), from the\n * null sender, so it never causes one of its own. `ret` and `envid` of the\n * item shape its content and name the original (RFC 3461 §4.3, §4.4).\n * Nothing for an item from the null sender (RFC 5321 §4.5.5, RFC 3464\n * §2: a DSN is never sent about a DSN). It bypasses `maxItems`: a full\n * queue loses no bounce. A failure goes to the `error` event. With no\n * `message` — the store lost it — the DSN returns nothing of it.\n */\nexport async function notify(\n\tctx: NotifyContext,\n\titem: QueueItem,\n\tmessage: Uint8Array | undefined,\n\tkind: Exclude<DsnKind, 'delivered'>,\n\trecipients: readonly RecipientUpdate[],\n\tnow: number,\n): Promise<void> {\n\tconst states = new Map(item.recipients.map((r) => [r.address, r]));\n\tconst wanted = recipients.filter((r) =>\n\t\tasked(kind, states.get(r.address)?.notify),\n\t);\n\tif (item.from === '' || wanted.length === 0) return;\n\tconst { settings, store, events } = ctx;\n\ttry {\n\t\tconst lastAttempt = new Date(now);\n\t\tconst dsn = buildDsn({\n\t\t\tkind,\n\t\t\treportingMta: settings.hostname,\n\t\t\tfrom: settings.dsn.from,\n\t\t\tto: item.from,\n\t\t\tarrival: new Date(item.createdAt),\n\t\t\tdate: lastAttempt,\n\t\t\t...(item.envid === undefined ? {} : { envid: item.envid }),\n\t\t\trecipients: wanted.map((r) => {\n\t\t\t\tconst reply = reported(r, kind);\n\t\t\t\tconst orcpt = states.get(r.address)?.orcpt;\n\t\t\t\treturn {\n\t\t\t\t\taddress: r.address,\n\t\t\t\t\t...(reply ? { reply } : {}),\n\t\t\t\t\tlastAttempt,\n\t\t\t\t\t...(orcpt ? { orcpt } : {}),\n\t\t\t\t};\n\t\t\t}),\n\t\t\t...(kind === 'delayed'\n\t\t\t\t? { willRetryUntil: new Date(giveUpAt(item.createdAt, settings.retry)) }\n\t\t\t\t: {}),\n\t\t\t...(message ? { original: message } : {}),\n\t\t\t// RET speaks of failure DSNs (RFC 3461 §4.3): a relayed one returns headers.\n\t\t\treturnContent:\n\t\t\t\tkind === 'relayed'\n\t\t\t\t\t? 'headers'\n\t\t\t\t\t: returnOf(item.ret, settings.dsn.returnContent),\n\t\t\tmaxReturn: settings.limits.maxDsnReturn,\n\t\t});\n\t\tconst added = await store.add({\n\t\t\tfrom: '',\n\t\t\tto: [item.from],\n\t\t\tmessage: dsn,\n\t\t\tcreatedAt: now,\n\t\t});\n\t\tevents.emit('dsn', {\n\t\t\tkind,\n\t\t\tid: added.id,\n\t\t\tof: item.id,\n\t\t\tto: item.from,\n\t\t\trecipients: wanted.map((r) => r.address),\n\t\t});\n\t} catch (error) {\n\t\tevents.emit('error', { error, id: item.id });\n\t}\n}\n",
29
+ "import type { QueueStore } from '../contract/queue-store';\nimport type {\n\tCompleted,\n\tDiagnostic,\n\tNewQueueItem,\n\tQueueItem,\n\tRecipientUpdate,\n} from '../contract/types';\nimport { buildDsn, type DsnKind } from '../dsn/build';\nimport { asked, returnOf } from '../dsn/policy';\nimport { QueueError } from '../errors';\nimport type { Events } from './events';\nimport { giveUpAt } from './retry';\nimport type { Settings } from './settings';\nimport type { Settled } from './settle';\n\nexport interface NotifyContext {\n\treadonly settings: Settings;\n\treadonly store: QueueStore;\n\treadonly events: Events;\n}\n\n/** Said in a failed DSN of a recipient whose message the MX may hold. */\nconst MAY_HAVE_REACHED =\n\t'An earlier attempt may have reached the receiving server, so the message may have been delivered.';\n\n/** Said in a failed DSN of a recipient whose message the fallback smarthost may hold. */\nconst MAY_HAVE_REACHED_FALLBACK =\n\t'An earlier attempt may have reached the fallback smarthost, so the message may have been delivered.';\n\n/** The reply a DSN reports: a failed recipient's, with a sentence more for each server that may hold the message. */\nfunction reported(r: RecipientUpdate, kind: DsnKind): Diagnostic | undefined {\n\tconst said = [\n\t\t...(r.mayHaveReachedMx ? [MAY_HAVE_REACHED] : []),\n\t\t...(r.mayHaveReachedFallback ? [MAY_HAVE_REACHED_FALLBACK] : []),\n\t];\n\tif (kind !== 'failed' || said.length === 0) return r.reply;\n\tconst reply: Diagnostic = r.reply ?? { text: '' };\n\treturn {\n\t\t...reply,\n\t\ttext: [reply.text, ...said].filter((t) => t !== '').join(' '),\n\t};\n}\n\n/** A DSN built for an item, ready to go to the store with `complete`, and what its `dsn` event says. */\nexport interface PendingDsn {\n\treadonly item: NewQueueItem;\n\treadonly kind: Exclude<DsnKind, 'delivered'>;\n\treadonly to: string;\n\treadonly recipients: readonly string[];\n}\n\n/**\n * Builds the DSN (RFC 3464) back to the item's sender for those of these\n * recipients that asked for one of this kind (`NOTIFY`, RFC 3461 §4.1:\n * `NEVER`, or the events listed; failure and delay when absent), from the\n * null sender, so it never causes one of its own. `ret` and `envid` of the\n * item shape its content and name the original (RFC 3461 §4.3, §4.4).\n * Nothing for an item from the null sender (RFC 5321 §4.5.5, RFC 3464\n * §2: a DSN is never sent about a DSN). With no `message` — the store lost\n * it — the DSN returns nothing of it. The store enqueues it, in the step\n * that records the outcome (`complete`), bypassing `maxItems`: a full queue\n * loses no bounce. One that cannot be built is left out and its error\n * pushed to `failures`, for the caller to say once the outcome is recorded:\n * the outcome is recorded all the same, `delayNotified` included.\n */\nexport function dsnsFor(\n\tctx: Pick<NotifyContext, 'settings'>,\n\titem: QueueItem,\n\tmessage: Uint8Array | undefined,\n\tkind: Exclude<DsnKind, 'delivered'>,\n\trecipients: readonly RecipientUpdate[],\n\tnow: number,\n\tfailures: unknown[],\n): PendingDsn[] {\n\tconst states = new Map(item.recipients.map((r) => [r.address, r]));\n\tconst wanted = recipients.filter((r) =>\n\t\tasked(kind, states.get(r.address)?.notify),\n\t);\n\tif (item.from === '' || wanted.length === 0) return [];\n\tconst { settings } = ctx;\n\ttry {\n\t\tconst lastAttempt = new Date(now);\n\t\tconst dsn = buildDsn({\n\t\t\tkind,\n\t\t\treportingMta: settings.hostname,\n\t\t\tfrom: settings.dsn.from,\n\t\t\tto: item.from,\n\t\t\tarrival: new Date(item.createdAt),\n\t\t\tdate: lastAttempt,\n\t\t\t...(item.envid === undefined ? {} : { envid: item.envid }),\n\t\t\trecipients: wanted.map((r) => {\n\t\t\t\tconst reply = reported(r, kind);\n\t\t\t\tconst orcpt = states.get(r.address)?.orcpt;\n\t\t\t\treturn {\n\t\t\t\t\taddress: r.address,\n\t\t\t\t\t...(reply ? { reply } : {}),\n\t\t\t\t\tlastAttempt,\n\t\t\t\t\t...(orcpt ? { orcpt } : {}),\n\t\t\t\t};\n\t\t\t}),\n\t\t\t...(kind === 'delayed'\n\t\t\t\t? { willRetryUntil: new Date(giveUpAt(item.createdAt, settings.retry)) }\n\t\t\t\t: {}),\n\t\t\t...(message ? { original: message } : {}),\n\t\t\t// RET speaks of failure DSNs (RFC 3461 §4.3): a relayed one returns headers.\n\t\t\treturnContent:\n\t\t\t\tkind === 'relayed'\n\t\t\t\t\t? 'headers'\n\t\t\t\t\t: returnOf(item.ret, settings.dsn.returnContent),\n\t\t\tmaxReturn: settings.limits.maxDsnReturn,\n\t\t});\n\t\treturn [\n\t\t\t{\n\t\t\t\titem: { from: '', to: [item.from], message: dsn, createdAt: now },\n\t\t\t\tkind,\n\t\t\t\tto: item.from,\n\t\t\t\trecipients: wanted.map((r) => r.address),\n\t\t\t},\n\t\t];\n\t} catch (error) {\n\t\tfailures.push(error);\n\t\treturn [];\n\t}\n}\n\n/**\n * The DSNs an attempt's outcome calls for, in the order failed, relayed,\n * delayed, and the errors of those that could not be built.\n */\nexport function dsnsOf(\n\tctx: Pick<NotifyContext, 'settings'>,\n\titem: QueueItem,\n\tmessage: Uint8Array | undefined,\n\tsettled: Settled,\n\tnow: number,\n): { pending: PendingDsn[]; failures: unknown[] } {\n\tconst failures: unknown[] = [];\n\tconst build = (\n\t\tkind: Exclude<DsnKind, 'delivered'>,\n\t\trecipients: readonly RecipientUpdate[],\n\t) => dsnsFor(ctx, item, message, kind, recipients, now, failures);\n\tconst pending = [\n\t\t...build('failed', settled.failed),\n\t\t// SUCCESS asked, and the next hop listed no DSN: responsibility stays here (RFC 3461 §5.2.2).\n\t\t...build(\n\t\t\t'relayed',\n\t\t\tsettled.delivered.filter((u) => u.dsnOffered === false),\n\t\t),\n\t\t...(settled.delayDsn ? build('delayed', settled.deferred) : []),\n\t];\n\treturn { pending, failures };\n}\n\n/**\n * Tells the listeners each DSN the store inserted with the outcome, by the\n * ids it gave, in the order given. A store written before `complete` took\n * the DSNs answers with the bare item: that is said on the `error` event,\n * and each DSN goes to `add` instead, as it did, with no step shared with\n * the outcome. A store that answers the new shape but gives back fewer DSNs\n * than asked (the stores here throw instead, and write nothing) has an\n * `error` event for each one missing.\n */\nexport async function tellDsns(\n\tctx: NotifyContext,\n\titem: QueueItem,\n\tpending: readonly PendingDsn[],\n\tcompleted: Completed,\n): Promise<void> {\n\tconst { store, events } = ctx;\n\tconst stored = (completed as Partial<Completed>).dsns;\n\tconst outdated = !Array.isArray(stored);\n\tif (outdated && pending.length > 0) {\n\t\tconst error = new QueueError(\n\t\t\t'INVALID',\n\t\t\t'Queue store outdated: complete returned the item alone, not { item, dsns }; its DSNs are added one by one, outside the step that records the outcome',\n\t\t);\n\t\tevents.emit('error', { error, id: item.id });\n\t}\n\tfor (const [index, dsn] of pending.entries()) {\n\t\tlet id: string | undefined;\n\t\tif (outdated) {\n\t\t\ttry {\n\t\t\t\tid = (await store.add(dsn.item)).id;\n\t\t\t} catch (error) {\n\t\t\t\tevents.emit('error', { error, id: item.id });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t} else {\n\t\t\tid = stored[index]?.id;\n\t\t\tif (id === undefined) {\n\t\t\t\tconst error = new QueueError(\n\t\t\t\t\t'INVALID',\n\t\t\t\t\t`The queue store stored ${stored.length} of the ${pending.length} DSNs of ${item.id}: a ${dsn.kind} DSN to ${dsn.to} is lost`,\n\t\t\t\t);\n\t\t\t\tevents.emit('error', { error, id: item.id });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tevents.emit('dsn', {\n\t\t\tkind: dsn.kind,\n\t\t\tid,\n\t\t\tof: item.id,\n\t\t\tto: dsn.to,\n\t\t\trecipients: dsn.recipients,\n\t\t});\n\t}\n}\n",
30
30
  "import type {\n\tAttemptResult,\n\tQueueItem,\n\tRecipientUpdate,\n} from '../contract/types';\nimport { asked } from '../dsn/policy';\nimport { nextAttemptAt } from './retry';\nimport type { Settings } from './settings';\n\n/** An attempt's outcomes, sorted, and what to record and send for them. */\nexport interface Settled {\n\treadonly result: AttemptResult;\n\treadonly delivered: readonly RecipientUpdate[];\n\t/** Failed in this attempt: a 5xx, or given up. */\n\treadonly failed: readonly RecipientUpdate[];\n\t/** Still deferred, to try again at `result.nextAttemptAt`. */\n\treadonly deferred: readonly RecipientUpdate[];\n\t/** A \"delayed\" DSN is due for the deferred recipients. */\n\treadonly delayDsn: boolean;\n}\n\n/**\n * A deferred recipient past the moment of giving up: failed, as X.4.7\n * (RFC 3463 §3.5, delivery time expired), the remote reply's code and text\n * kept as they were said.\n */\nfunction expired(update: RecipientUpdate): RecipientUpdate {\n\treturn {\n\t\taddress: update.address,\n\t\tstatus: 'failed',\n\t\treply: { text: '', ...update.reply, status: '4.4.7' },\n\t\t...(update.mayHaveReachedMx ? { mayHaveReachedMx: true as const } : {}),\n\t\t...(update.mayHaveReachedFallback\n\t\t\t? { mayHaveReachedFallback: true as const }\n\t\t\t: {}),\n\t};\n}\n\n/**\n * What an attempt comes to: the count, the next attempt (RFC 5321\n * §4.5.4.1's back-off, or now when some recipients were left out because\n * the worker is stopping), the deferred recipients that gave up, and\n * whether the \"delayed\" DSN is due — once, for a sender that is not null.\n */\nexport function settle(\n\titem: QueueItem,\n\tupdates: readonly RecipientUpdate[],\n\tskipped: boolean,\n\tnow: number,\n\tsettings: Settings,\n): Settled {\n\tconst attempts = item.attempts + (updates.length > 0 ? 1 : 0);\n\tconst next = nextAttemptAt(\n\t\titem.createdAt,\n\t\tnow,\n\t\tattempts,\n\t\tsettings.retry,\n\t\tsettings.random,\n\t);\n\t// A recipient the MX or the fallback smarthost may hold keeps its marks in what is recorded and told, whatever route or path made this outcome.\n\tconst was = new Map(item.recipients.map((r) => [r.address, r]));\n\tconst all = updates\n\t\t.map((u): RecipientUpdate => {\n\t\t\tconst r = was.get(u.address);\n\t\t\tif (!r || u.status === 'delivered') return u;\n\t\t\treturn {\n\t\t\t\t...u,\n\t\t\t\t...(r.mayHaveReachedMx ? { mayHaveReachedMx: true as const } : {}),\n\t\t\t\t...(r.mayHaveReachedFallback\n\t\t\t\t\t? { mayHaveReachedFallback: true as const }\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\t})\n\t\t.map((u) =>\n\t\t\tu.status === 'deferred' && next === undefined ? expired(u) : u,\n\t\t);\n\tconst deferred = all.filter((u) => u.status === 'deferred');\n\tconst { delayAfter } = settings.dsn;\n\tconst delayDsn =\n\t\t!item.delayNotified &&\n\t\tdeferred.some((u) => asked('delayed', was.get(u.address)?.notify)) &&\n\t\titem.from !== '' &&\n\t\tdelayAfter !== false &&\n\t\tdeferred.length > 0 &&\n\t\tnow - item.createdAt >= delayAfter;\n\treturn {\n\t\tresult: {\n\t\t\tnow,\n\t\t\trecipients: all,\n\t\t\t// Left out by a stop with nothing deferred: due at once. Otherwise the\n\t\t\t// back-off holds for the whole item, the left-out domains included.\n\t\t\tnextAttemptAt:\n\t\t\t\tnext === undefined || (skipped && deferred.length === 0) ? now : next,\n\t\t\tattempts,\n\t\t\tdelayNotified: item.delayNotified || delayDsn,\n\t\t},\n\t\tdelivered: all.filter((u) => u.status === 'delivered'),\n\t\tfailed: all.filter((u) => u.status === 'failed'),\n\t\tdeferred,\n\t\tdelayDsn,\n\t};\n}\n",
31
31
  "import type { QueueItem } from '../contract/types';\nimport { QueueError } from '../errors';\nimport type { NotifyContext } from './notify';\n\n/**\n * How a lease was lost. `taken`: a renewal found the item still in the\n * store, held by another worker or by none. `expired`: the lease's last\n * expiry passed, so another worker could claim it.\n */\nexport type Lapse = 'taken' | 'expired';\n\n/** What a worker knows of its lease on an item it delivers. */\nexport interface LeaseState {\n\treadonly item: QueueItem;\n\t/** The outcome is recorded, or a renewal was refused: no more renewals count. */\n\tdone: boolean;\n\t/** The lease's last expiry this worker set: the claim's, then each renewal's. */\n\texpiresAt: number;\n\t/** A renewal was refused while the item was still in the store. */\n\ttaken: boolean;\n\t/** The look a refused renewal takes at the item. */\n\tlooking: Promise<void>;\n}\n\nexport function leaseOf(ctx: NotifyContext, item: QueueItem): LeaseState {\n\tconst { settings } = ctx;\n\treturn {\n\t\titem,\n\t\tdone: false,\n\t\texpiresAt: item.lease?.expiresAt ?? settings.now() + settings.leaseMs,\n\t\ttaken: false,\n\t\tlooking: Promise.resolve(),\n\t};\n}\n\n/** After a refused renewal: an item still there was taken, and is said so; a gone one is left to `lapsed`. */\nasync function lookAfterRefusal(\n\tctx: NotifyContext,\n\tlease: LeaseState,\n): Promise<void> {\n\tconst { id } = lease.item;\n\tif ((await ctx.store.get(id)) === undefined) return;\n\tlease.taken = true;\n\tconst error = new QueueError(\n\t\t'LEASE_LOST',\n\t\t`The lease on ${id} was lost while it was delivered`,\n\t);\n\tctx.events.emit('error', { error, id });\n}\n\n/**\n * One renewal. A renewal that is held keeps its expiry, even one that\n * lands after the outcome is recorded. One refused while the item is\n * still there — held by another worker or by none — says so once, and\n * ends the renewals; one refused for an item gone says nothing and ends\n * them: a cancel, or another worker that finished it, which `lapsed` tells\n * apart by the expiry. One that fails (the store busy, unreachable) says\n * so, and the next one tries again: the lease may still be held.\n * Resolves `false` once no more renewals are wanted.\n */\nexport async function renew(\n\tctx: NotifyContext,\n\tlease: LeaseState,\n): Promise<boolean> {\n\tconst { settings, store, events } = ctx;\n\tconst { id } = lease.item;\n\tconst next = settings.now() + settings.leaseMs;\n\tlet held: boolean;\n\ttry {\n\t\theld = await store.renew(id, settings.owner, next);\n\t} catch (error) {\n\t\tif (!lease.done) events.emit('error', { error, id });\n\t\treturn !lease.done;\n\t}\n\tif (held) lease.expiresAt = Math.max(lease.expiresAt, next);\n\tif (lease.done) return false;\n\tif (held) return true;\n\tlease.done = true;\n\tlease.looking = lookAfterRefusal(ctx, lease).catch((error: unknown) => {\n\t\tevents.emit('error', { error, id });\n\t});\n\treturn false;\n}\n\n/**\n * Whether the lease could have passed to another worker by `now`: a\n * renewal found it taken, or its last expiry is past. `undefined` while\n * it surely held, by this worker's clock.\n */\nexport async function lapsed(\n\tlease: LeaseState,\n\tnow: number,\n): Promise<Lapse | undefined> {\n\tawait lease.looking;\n\tif (lease.taken) return 'taken';\n\treturn lease.expiresAt <= now ? 'expired' : undefined;\n}\n\n/** Resolves once the look a refused renewal took at the item is over. */\nexport const settled = (lease: LeaseState): Promise<void> => lease.looking;\n",
32
32
  "/** A count of slots: who asks past it waits, first come first served. */\nexport class Limiter {\n\treadonly #size: number;\n\t#used = 0;\n\treadonly #waiting: (() => void)[] = [];\n\n\tconstructor(size: number) {\n\t\tthis.#size = size;\n\t}\n\n\t/** A slot, once one is free; call what it resolves to, once, to give it back. */\n\tasync acquire(): Promise<() => void> {\n\t\tif (this.#used >= this.#size) {\n\t\t\tawait new Promise<void>((resolve) => this.#waiting.push(resolve));\n\t\t} else {\n\t\t\tthis.#used++;\n\t\t}\n\t\tlet released = false;\n\t\treturn () => {\n\t\t\tif (released) return;\n\t\t\treleased = true;\n\t\t\tconst next = this.#waiting.shift();\n\t\t\t// The slot passes to the next in line without being freed in between.\n\t\t\tif (next) next();\n\t\t\telse this.#used--;\n\t\t};\n\t}\n}\n\n/** One `Limiter` per key, made when first asked for and dropped once idle. */\nexport class KeyedLimiter {\n\treadonly #size: number;\n\treadonly #limiters = new Map<string, { limiter: Limiter; users: number }>();\n\n\tconstructor(size: number) {\n\t\tthis.#size = size;\n\t}\n\n\tasync acquire(key: string): Promise<() => void> {\n\t\tlet entry = this.#limiters.get(key);\n\t\tif (!entry) {\n\t\t\tentry = { limiter: new Limiter(this.#size), users: 0 };\n\t\t\tthis.#limiters.set(key, entry);\n\t\t}\n\t\tentry.users++;\n\t\tconst release = await entry.limiter.acquire();\n\t\tconst held = entry;\n\t\treturn () => {\n\t\t\trelease();\n\t\t\tif (--held.users === 0) this.#limiters.delete(key);\n\t\t};\n\t}\n}\n",
33
33
  "import type { QueueItem } from '../contract/types';\nimport { deliverItem } from './deliver';\nimport { type LeaseState, lapsed, leaseOf, renew, settled } from './lease';\nimport { KeyedLimiter, Limiter } from './limiter';\nimport type { NotifyContext } from './notify';\n\n/**\n * Claims due items and delivers them, at most `concurrency` at once,\n * renewing each lease while its item is delivered. `start()` runs passes\n * every `pollInterval`, or at once when woken; `stop()` lets every\n * delivery under way finish and gives back what it had not started.\n */\nexport class Worker {\n\treadonly #ctx: NotifyContext;\n\treadonly #slots: Limiter;\n\treadonly #domains: KeyedLimiter;\n\treadonly #inFlight = new Set<Promise<void>>();\n\t#stopping = false;\n\t/** `start()` was called while a `stop()` was under way: start again once it ends. */\n\t#restart = false;\n\t#loop: Promise<void> | undefined;\n\t#wake: (() => void) | undefined;\n\t/** A wake came while no sleep was under way: the next sleep is skipped. */\n\t#woken = false;\n\n\tconstructor(ctx: NotifyContext) {\n\t\tthis.#ctx = ctx;\n\t\tthis.#slots = new Limiter(ctx.settings.concurrency);\n\t\tthis.#domains = new KeyedLimiter(ctx.settings.perDomain);\n\t}\n\n\t/** Renews the lease every third of it until the outcome is recorded, or a renewal ends them. */\n\t#renewing(lease: LeaseState): () => void {\n\t\tconst timer = setInterval(() => {\n\t\t\tvoid renew(this.#ctx, lease).then((more) => {\n\t\t\t\tif (!more) clearInterval(timer);\n\t\t\t});\n\t\t}, this.#ctx.settings.leaseMs / 3);\n\t\ttimer.unref?.();\n\t\treturn () => {\n\t\t\tlease.done = true;\n\t\t\tclearInterval(timer);\n\t\t};\n\t}\n\n\tasync #deliver(item: QueueItem): Promise<void> {\n\t\tconst lease = leaseOf(this.#ctx, item);\n\t\tconst stop = this.#renewing(lease);\n\t\ttry {\n\t\t\tawait deliverItem(\n\t\t\t\t{\n\t\t\t\t\t...this.#ctx,\n\t\t\t\t\tdomains: this.#domains,\n\t\t\t\t\tstopping: () => this.#stopping,\n\t\t\t\t\trecorded: stop,\n\t\t\t\t\tleaseLapsed: (now) => lapsed(lease, now),\n\t\t\t\t},\n\t\t\t\titem,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthis.#ctx.events.emit('error', { error, id: item.id });\n\t\t} finally {\n\t\t\tstop();\n\t\t\t// A refused renewal's look at the item ends with the delivery.\n\t\t\tawait settled(lease);\n\t\t}\n\t}\n\n\t/** The next due item, or `undefined` when nothing is, or the worker is stopping. */\n\t#claim(): Promise<QueueItem | undefined> {\n\t\tconst { settings, store } = this.#ctx;\n\t\tif (this.#stopping) return Promise.resolve(undefined);\n\t\treturn store.claim({\n\t\t\towner: settings.owner,\n\t\t\tnow: settings.now(),\n\t\t\tleaseMs: settings.leaseMs,\n\t\t});\n\t}\n\n\t/**\n\t * One pass: claims and delivers every item due, `concurrency` at a time,\n\t * claiming again as each one ends — so a DSN enqueued meanwhile goes in\n\t * the same pass. Resolves once all are done, with how many it claimed.\n\t */\n\tasync deliverDue(): Promise<number> {\n\t\tconst mine = new Set<Promise<void>>();\n\t\tlet claimed = 0;\n\t\twhile (!this.#stopping) {\n\t\t\tconst release = await this.#slots.acquire();\n\t\t\tlet item: QueueItem | undefined;\n\t\t\ttry {\n\t\t\t\titem = await this.#claim();\n\t\t\t} catch (error) {\n\t\t\t\trelease();\n\t\t\t\tawait Promise.all(mine);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tif (!item) {\n\t\t\t\trelease();\n\t\t\t\tif (mine.size === 0) break;\n\t\t\t\tawait Promise.race(mine);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tclaimed++;\n\t\t\tconst delivery: Promise<void> = this.#deliver(item).finally(() => {\n\t\t\t\trelease();\n\t\t\t\tmine.delete(delivery);\n\t\t\t\tthis.#inFlight.delete(delivery);\n\t\t\t});\n\t\t\tmine.add(delivery);\n\t\t\tthis.#inFlight.add(delivery);\n\t\t}\n\t\tawait Promise.all(mine);\n\t\treturn claimed;\n\t}\n\n\t/** Wakes a sleeping `start()` loop, or spares it its next sleep: something was enqueued. */\n\twake(): void {\n\t\tif (this.#wake) this.#wake();\n\t\telse this.#woken = true;\n\t}\n\n\tstart(): void {\n\t\tif (this.#stopping) {\n\t\t\tthis.#restart = true;\n\t\t\treturn;\n\t\t}\n\t\tif (this.#loop) return;\n\t\tthis.#loop = this.#run();\n\t}\n\n\tasync #sleep(): Promise<void> {\n\t\tif (this.#woken) {\n\t\t\tthis.#woken = false;\n\t\t\treturn;\n\t\t}\n\t\tawait new Promise<void>((resolve) => {\n\t\t\tconst timer = setTimeout(resolve, this.#ctx.settings.pollInterval);\n\t\t\tthis.#wake = () => {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tresolve();\n\t\t\t};\n\t\t});\n\t\tthis.#wake = undefined;\n\t}\n\n\tasync #run(): Promise<void> {\n\t\twhile (!this.#stopping) {\n\t\t\tthis.#woken = false;\n\t\t\ttry {\n\t\t\t\tawait this.deliverDue();\n\t\t\t} catch (error) {\n\t\t\t\tthis.#ctx.events.emit('error', { error });\n\t\t\t}\n\t\t\tif (this.#stopping) break;\n\t\t\tawait this.#sleep();\n\t\t}\n\t}\n\n\t/**\n\t * Claims nothing more, lets every delivery under way end, and gives back\n\t * what was claimed but not started, due at once for the next worker. A\n\t * `start()` called meanwhile starts again once this ends.\n\t */\n\tasync stop(): Promise<void> {\n\t\tthis.#restart = false;\n\t\tthis.#stopping = true;\n\t\tthis.#wake?.();\n\t\tawait this.#loop;\n\t\tawait Promise.all(this.#inFlight);\n\t\tthis.#loop = undefined;\n\t\tthis.#stopping = false;\n\t\tif (this.#restart) {\n\t\t\tthis.#restart = false;\n\t\t\tthis.start();\n\t\t}\n\t}\n}\n",
34
34
  "import type { QueueItem, QueueListOptions } from '../contract/types';\nimport {\n\tcheckEnvelope,\n\tcheckLineEnds,\n\ttype MessageSource,\n\ttype QueueEnvelope,\n\treadMessage,\n} from './envelope';\nimport { Events, type QueueEvents, type QueueListener } from './events';\nimport type { QueueOptions } from './options';\nimport { settingsOf } from './settings';\nimport { Worker } from './worker';\n\n/** The outbound queue: what the app enqueues, delivered across restarts. */\nexport interface Queue {\n\t/** This worker's name on its leases. */\n\treadonly owner: string;\n\t/**\n\t * Takes a message to send — already signed, as it will leave — with its\n\t * envelope, and keeps it in the store, every recipient pending, due at\n\t * once. Refuses with `INVALID`, `MESSAGE_TOO_BIG`,\n\t * `TOO_MANY_RECIPIENTS` or `QUEUE_FULL`. The queue sends whatever it is\n\t * given: authenticate the submitter before you enqueue.\n\t */\n\tenqueue(message: MessageSource, envelope: QueueEnvelope): Promise<QueueItem>;\n\t/** One pass by hand: delivers every item due now; resolves with how many it claimed. */\n\tdeliverDue(): Promise<number>;\n\t/** Delivers in the background: a pass every `pollInterval`, and at once after `enqueue`. */\n\tstart(): void;\n\t/** Claims nothing more, lets the deliveries under way end, and gives back the rest. */\n\tstop(): Promise<void>;\n\t/** Listens to an event; returns what stops listening. */\n\ton<E extends keyof QueueEvents>(\n\t\tevent: E,\n\t\tlistener: QueueListener<E>,\n\t): () => void;\n\t/** The items in the queue, the next due first. */\n\tlist(options?: QueueListOptions): Promise<QueueItem[]>;\n\tget(id: string): Promise<QueueItem | undefined>;\n\t/**\n\t * Makes an item due now, and wakes the worker. False when there is no\n\t * such item, or when a worker is delivering it: its outcome sets the\n\t * next attempt, so asking now would change nothing.\n\t */\n\tretryNow(id: string): Promise<boolean>;\n\t/** Drops an item, its message and its recipients, with no DSN; the item as it stood, or `undefined`. */\n\tcancel(id: string): Promise<QueueItem | undefined>;\n}\n\n/**\n * Creates the queue over a store. Nothing is delivered until `start()`,\n * or `deliverDue()` by hand. Several queues — in one process or several —\n * may share a store: each claims items under its own `owner`.\n */\nexport function createQueue(options: QueueOptions): Queue {\n\tconst settings = settingsOf(options);\n\tconst store = options.store;\n\tconst events = new Events();\n\tconst worker = new Worker({ settings, store, events });\n\tconst { limits } = settings;\n\treturn {\n\t\towner: settings.owner,\n\t\tasync enqueue(message, envelope) {\n\t\t\tconst { from, to, ...dsn } = checkEnvelope(\n\t\t\t\tenvelope,\n\t\t\t\tlimits.maxRecipients,\n\t\t\t);\n\t\t\tconst bytes = await readMessage(message, limits.maxMessageSize);\n\t\t\tcheckLineEnds(bytes);\n\t\t\tconst item = await store.add(\n\t\t\t\t{ from, to, message: bytes, createdAt: settings.now(), ...dsn },\n\t\t\t\tlimits.maxItems === undefined ? {} : { maxItems: limits.maxItems },\n\t\t\t);\n\t\t\tworker.wake();\n\t\t\treturn item;\n\t\t},\n\t\tdeliverDue: () => worker.deliverDue(),\n\t\tstart: () => worker.start(),\n\t\tstop: () => worker.stop(),\n\t\ton: (event, listener) => events.on(event, listener),\n\t\tlist: (listOptions) => store.list(listOptions),\n\t\tget: (id) => store.get(id),\n\t\tasync retryNow(id) {\n\t\t\tconst now = settings.now();\n\t\t\tconst lease = (await store.get(id))?.lease;\n\t\t\tif (lease && lease.expiresAt > now) return false;\n\t\t\tconst moved = await store.reschedule(id, now);\n\t\t\tif (moved) worker.wake();\n\t\t\treturn moved;\n\t\t},\n\t\tcancel: (id) => store.cancel(id),\n\t};\n}\n"
35
35
  ],
36
- "mappings": "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",
37
- "debugId": "9F6E913A6461985264756E2164756E21",
36
+ "mappings": "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",
37
+ "debugId": "9190A6EB36D3FC0664756E2164756E21",
38
38
  "names": []
39
39
  }
@@ -2,16 +2,16 @@ import {
2
2
  QueueError2,
3
3
  checkTime,
4
4
  checkOwner,
5
+ checkComplete,
5
6
  checkNewItem,
6
7
  checkMaxItems,
7
8
  checkClaim,
8
- checkResult,
9
9
  checkList,
10
10
  isDone,
11
11
  applyAttempt,
12
12
  newItem,
13
13
  claimable
14
- } from "../chunks/index-sz13a17b.js";
14
+ } from "../chunks/index-t6q7zxgj.js";
15
15
 
16
16
  // src/memory/store.ts
17
17
  var byDue = (a, b) => a.item.nextAttemptAt - b.item.nextAttemptAt || a.seq - b.seq;
@@ -25,6 +25,9 @@ class MemoryQueueStore {
25
25
  if (max !== undefined && this.#entries.size >= max) {
26
26
  throw new QueueError2("QUEUE_FULL", `The queue holds ${this.#entries.size} items, its limit`);
27
27
  }
28
+ return this.#insert(item);
29
+ }
30
+ #insert(item) {
28
31
  const entry = {
29
32
  item: newItem(crypto.randomUUID(), item),
30
33
  message: item.message.slice(),
@@ -80,15 +83,16 @@ class MemoryQueueStore {
80
83
  entry.item = { ...entry.item, lease: { owner, expiresAt } };
81
84
  return true;
82
85
  }
83
- async complete(id, owner, result) {
84
- checkResult(result);
86
+ async complete(id, owner, result, dsns) {
87
+ checkComplete(owner, result, dsns);
85
88
  const entry = this.#held(id, owner);
86
89
  if (!entry)
87
90
  return;
88
91
  entry.item = applyAttempt(entry.item, result);
89
92
  if (isDone(entry.item))
90
93
  this.#entries.delete(id);
91
- return structuredClone(entry.item);
94
+ const inserted = dsns.map((dsn) => this.#insert(dsn));
95
+ return { item: structuredClone(entry.item), dsns: inserted };
92
96
  }
93
97
  async reschedule(id, at, owner) {
94
98
  checkTime("at", at);
@@ -115,5 +119,5 @@ export {
115
119
  MemoryQueueStore
116
120
  };
117
121
 
118
- //# debugId=E6F9A2B10DF5B49964756E2164756E21
122
+ //# debugId=5C74AFF3D9CEFD6764756E2164756E21
119
123
  //# sourceMappingURL=index.js.map
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/memory/store.ts"],
4
4
  "sourcesContent": [
5
- "import {\n\tapplyAttempt,\n\tcheckClaim,\n\tcheckList,\n\tcheckMaxItems,\n\tcheckNewItem,\n\tcheckOwner,\n\tcheckResult,\n\tcheckTime,\n\tclaimable,\n\tisDone,\n\tnewItem,\n} from '../contract/checks';\nimport type { QueueStore } from '../contract/queue-store';\nimport type {\n\tAddOptions,\n\tAttemptResult,\n\tClaimRequest,\n\tNewQueueItem,\n\tQueueItem,\n\tQueueListOptions,\n} from '../contract/types';\nimport { QueueError } from '../errors';\n\ninterface Entry {\n\titem: QueueItem;\n\tmessage: Uint8Array;\n\t/** The order items were added in: the oldest first among those equally due. */\n\treadonly seq: number;\n}\n\n/** The earliest due first, then the oldest. */\nconst byDue = (a: Entry, b: Entry) =>\n\ta.item.nextAttemptAt - b.item.nextAttemptAt || a.seq - b.seq;\n\n/**\n * A `QueueStore` in memory: for specs, and for a single process that can\n * lose its queue on a restart. Every operation runs without awaiting, so\n * claims never interleave, and every item it returns is a copy.\n */\nexport class MemoryQueueStore implements QueueStore {\n\treadonly #entries = new Map<string, Entry>();\n\t#seq = 0;\n\n\tasync add(item: NewQueueItem, options: AddOptions = {}): Promise<QueueItem> {\n\t\tcheckNewItem(item);\n\t\tconst max = checkMaxItems(options.maxItems);\n\t\tif (max !== undefined && this.#entries.size >= max) {\n\t\t\tthrow new QueueError(\n\t\t\t\t'QUEUE_FULL',\n\t\t\t\t`The queue holds ${this.#entries.size} items, its limit`,\n\t\t\t);\n\t\t}\n\t\tconst entry: Entry = {\n\t\t\titem: newItem(crypto.randomUUID(), item),\n\t\t\tmessage: item.message.slice(),\n\t\t\tseq: this.#seq++,\n\t\t};\n\t\tthis.#entries.set(entry.item.id, entry);\n\t\treturn structuredClone(entry.item);\n\t}\n\n\tasync get(id: string): Promise<QueueItem | undefined> {\n\t\tconst entry = this.#entries.get(id);\n\t\treturn entry && structuredClone(entry.item);\n\t}\n\n\tasync list(options?: QueueListOptions): Promise<QueueItem[]> {\n\t\tconst { offset, limit } = checkList(options);\n\t\treturn [...this.#entries.values()]\n\t\t\t.sort(byDue)\n\t\t\t.slice(offset, offset + limit)\n\t\t\t.map((entry) => structuredClone(entry.item));\n\t}\n\n\tasync count(): Promise<number> {\n\t\treturn this.#entries.size;\n\t}\n\n\tasync readMessage(id: string): Promise<Uint8Array | undefined> {\n\t\treturn this.#entries.get(id)?.message.slice();\n\t}\n\n\tasync claim(request: ClaimRequest): Promise<QueueItem | undefined> {\n\t\tcheckClaim(request);\n\t\tlet next: Entry | undefined;\n\t\tfor (const entry of this.#entries.values()) {\n\t\t\tif (!claimable(entry.item, request.now)) continue;\n\t\t\tif (!next || byDue(entry, next) < 0) next = entry;\n\t\t}\n\t\tif (!next) return undefined;\n\t\tnext.item = {\n\t\t\t...next.item,\n\t\t\tlease: {\n\t\t\t\towner: request.owner,\n\t\t\t\texpiresAt: request.now + request.leaseMs,\n\t\t\t},\n\t\t};\n\t\treturn structuredClone(next.item);\n\t}\n\n\t/** The entry while `owner` holds its lease. */\n\t#held(id: string, owner: string): Entry | undefined {\n\t\tcheckOwner(owner);\n\t\tconst entry = this.#entries.get(id);\n\t\treturn entry?.item.lease?.owner === owner ? entry : undefined;\n\t}\n\n\tasync renew(id: string, owner: string, expiresAt: number): Promise<boolean> {\n\t\tcheckTime('expiresAt', expiresAt);\n\t\tconst entry = this.#held(id, owner);\n\t\tif (!entry) return false;\n\t\tentry.item = { ...entry.item, lease: { owner, expiresAt } };\n\t\treturn true;\n\t}\n\n\tasync complete(\n\t\tid: string,\n\t\towner: string,\n\t\tresult: AttemptResult,\n\t): Promise<QueueItem | undefined> {\n\t\tcheckResult(result);\n\t\tconst entry = this.#held(id, owner);\n\t\tif (!entry) return undefined;\n\t\tentry.item = applyAttempt(entry.item, result);\n\t\tif (isDone(entry.item)) this.#entries.delete(id);\n\t\treturn structuredClone(entry.item);\n\t}\n\n\tasync reschedule(id: string, at: number, owner?: string): Promise<boolean> {\n\t\tcheckTime('at', at);\n\t\tconst entry =\n\t\t\towner === undefined ? this.#entries.get(id) : this.#held(id, owner);\n\t\tif (!entry) return false;\n\t\tif (owner === undefined) {\n\t\t\tentry.item = { ...entry.item, nextAttemptAt: at };\n\t\t} else {\n\t\t\tconst { lease: _, ...rest } = entry.item;\n\t\t\tentry.item = { ...rest, nextAttemptAt: at };\n\t\t}\n\t\treturn true;\n\t}\n\n\tasync cancel(id: string): Promise<QueueItem | undefined> {\n\t\tconst entry = this.#entries.get(id);\n\t\tif (!entry) return undefined;\n\t\tthis.#entries.delete(id);\n\t\treturn structuredClone(entry.item);\n\t}\n}\n"
5
+ "import {\n\tapplyAttempt,\n\tcheckClaim,\n\tcheckComplete,\n\tcheckList,\n\tcheckMaxItems,\n\tcheckNewItem,\n\tcheckOwner,\n\tcheckTime,\n\tclaimable,\n\tisDone,\n\tnewItem,\n} from '../contract/checks';\nimport type { QueueStore } from '../contract/queue-store';\nimport type {\n\tAddOptions,\n\tAttemptResult,\n\tClaimRequest,\n\tCompleted,\n\tNewQueueItem,\n\tQueueItem,\n\tQueueListOptions,\n} from '../contract/types';\nimport { QueueError } from '../errors';\n\ninterface Entry {\n\titem: QueueItem;\n\tmessage: Uint8Array;\n\t/** The order items were added in: the oldest first among those equally due. */\n\treadonly seq: number;\n}\n\n/** The earliest due first, then the oldest. */\nconst byDue = (a: Entry, b: Entry) =>\n\ta.item.nextAttemptAt - b.item.nextAttemptAt || a.seq - b.seq;\n\n/**\n * A `QueueStore` in memory: for specs, and for a single process that can\n * lose its queue on a restart. Every operation runs without awaiting, so\n * claims never interleave, and every item it returns is a copy.\n */\nexport class MemoryQueueStore implements QueueStore {\n\treadonly #entries = new Map<string, Entry>();\n\t#seq = 0;\n\n\tasync add(item: NewQueueItem, options: AddOptions = {}): Promise<QueueItem> {\n\t\tcheckNewItem(item);\n\t\tconst max = checkMaxItems(options.maxItems);\n\t\tif (max !== undefined && this.#entries.size >= max) {\n\t\t\tthrow new QueueError(\n\t\t\t\t'QUEUE_FULL',\n\t\t\t\t`The queue holds ${this.#entries.size} items, its limit`,\n\t\t\t);\n\t\t}\n\t\treturn this.#insert(item);\n\t}\n\n\t/** Stores a checked item under a new id; a copy of it. */\n\t#insert(item: NewQueueItem): QueueItem {\n\t\tconst entry: Entry = {\n\t\t\titem: newItem(crypto.randomUUID(), item),\n\t\t\tmessage: item.message.slice(),\n\t\t\tseq: this.#seq++,\n\t\t};\n\t\tthis.#entries.set(entry.item.id, entry);\n\t\treturn structuredClone(entry.item);\n\t}\n\n\tasync get(id: string): Promise<QueueItem | undefined> {\n\t\tconst entry = this.#entries.get(id);\n\t\treturn entry && structuredClone(entry.item);\n\t}\n\n\tasync list(options?: QueueListOptions): Promise<QueueItem[]> {\n\t\tconst { offset, limit } = checkList(options);\n\t\treturn [...this.#entries.values()]\n\t\t\t.sort(byDue)\n\t\t\t.slice(offset, offset + limit)\n\t\t\t.map((entry) => structuredClone(entry.item));\n\t}\n\n\tasync count(): Promise<number> {\n\t\treturn this.#entries.size;\n\t}\n\n\tasync readMessage(id: string): Promise<Uint8Array | undefined> {\n\t\treturn this.#entries.get(id)?.message.slice();\n\t}\n\n\tasync claim(request: ClaimRequest): Promise<QueueItem | undefined> {\n\t\tcheckClaim(request);\n\t\tlet next: Entry | undefined;\n\t\tfor (const entry of this.#entries.values()) {\n\t\t\tif (!claimable(entry.item, request.now)) continue;\n\t\t\tif (!next || byDue(entry, next) < 0) next = entry;\n\t\t}\n\t\tif (!next) return undefined;\n\t\tnext.item = {\n\t\t\t...next.item,\n\t\t\tlease: {\n\t\t\t\towner: request.owner,\n\t\t\t\texpiresAt: request.now + request.leaseMs,\n\t\t\t},\n\t\t};\n\t\treturn structuredClone(next.item);\n\t}\n\n\t/** The entry while `owner` holds its lease. */\n\t#held(id: string, owner: string): Entry | undefined {\n\t\tcheckOwner(owner);\n\t\tconst entry = this.#entries.get(id);\n\t\treturn entry?.item.lease?.owner === owner ? entry : undefined;\n\t}\n\n\tasync renew(id: string, owner: string, expiresAt: number): Promise<boolean> {\n\t\tcheckTime('expiresAt', expiresAt);\n\t\tconst entry = this.#held(id, owner);\n\t\tif (!entry) return false;\n\t\tentry.item = { ...entry.item, lease: { owner, expiresAt } };\n\t\treturn true;\n\t}\n\n\tasync complete(\n\t\tid: string,\n\t\towner: string,\n\t\tresult: AttemptResult,\n\t\tdsns: readonly NewQueueItem[],\n\t): Promise<Completed | undefined> {\n\t\t// Everything is checked before anything is applied, with no await\n\t\t// between: the outcome and its DSNs are both stored, or neither.\n\t\tcheckComplete(owner, result, dsns);\n\t\tconst entry = this.#held(id, owner);\n\t\tif (!entry) return undefined;\n\t\tentry.item = applyAttempt(entry.item, result);\n\t\tif (isDone(entry.item)) this.#entries.delete(id);\n\t\tconst inserted = dsns.map((dsn) => this.#insert(dsn));\n\t\treturn { item: structuredClone(entry.item), dsns: inserted };\n\t}\n\n\tasync reschedule(id: string, at: number, owner?: string): Promise<boolean> {\n\t\tcheckTime('at', at);\n\t\tconst entry =\n\t\t\towner === undefined ? this.#entries.get(id) : this.#held(id, owner);\n\t\tif (!entry) return false;\n\t\tif (owner === undefined) {\n\t\t\tentry.item = { ...entry.item, nextAttemptAt: at };\n\t\t} else {\n\t\t\tconst { lease: _, ...rest } = entry.item;\n\t\t\tentry.item = { ...rest, nextAttemptAt: at };\n\t\t}\n\t\treturn true;\n\t}\n\n\tasync cancel(id: string): Promise<QueueItem | undefined> {\n\t\tconst entry = this.#entries.get(id);\n\t\tif (!entry) return undefined;\n\t\tthis.#entries.delete(id);\n\t\treturn structuredClone(entry.item);\n\t}\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "E6F9A2B10DF5B49964756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "5C74AFF3D9CEFD6764756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,5 +1,5 @@
1
1
  import type { QueueStore } from '../contract/queue-store';
2
- import type { AddOptions, AttemptResult, ClaimRequest, NewQueueItem, QueueItem, QueueListOptions } from '../contract/types';
2
+ import type { AddOptions, AttemptResult, ClaimRequest, Completed, NewQueueItem, QueueItem, QueueListOptions } from '../contract/types';
3
3
  /**
4
4
  * A `QueueStore` in memory: for specs, and for a single process that can
5
5
  * lose its queue on a restart. Every operation runs without awaiting, so
@@ -14,7 +14,7 @@ export declare class MemoryQueueStore implements QueueStore {
14
14
  readMessage(id: string): Promise<Uint8Array | undefined>;
15
15
  claim(request: ClaimRequest): Promise<QueueItem | undefined>;
16
16
  renew(id: string, owner: string, expiresAt: number): Promise<boolean>;
17
- complete(id: string, owner: string, result: AttemptResult): Promise<QueueItem | undefined>;
17
+ complete(id: string, owner: string, result: AttemptResult, dsns: readonly NewQueueItem[]): Promise<Completed | undefined>;
18
18
  reschedule(id: string, at: number, owner?: string): Promise<boolean>;
19
19
  cancel(id: string): Promise<QueueItem | undefined>;
20
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/memory/store.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EACX,UAAU,EACV,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,MAAM,mBAAmB,CAAC;AAc3B;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,UAAU;;IAI5C,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IAkBrE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAK/C,IAAI,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAQtD,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAIxB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAIxD,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAyB5D,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQrE,QAAQ,CACb,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,aAAa,GACnB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAS3B,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAcpE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CAMxD"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/memory/store.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EACX,UAAU,EACV,aAAa,EACb,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,MAAM,mBAAmB,CAAC;AAc3B;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,UAAU;;IAI5C,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IAuBrE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAK/C,IAAI,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAQtD,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAIxB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAIxD,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAyB5D,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQrE,QAAQ,CACb,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,SAAS,YAAY,EAAE,GAC3B,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAY3B,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAcpE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;CAMxD"}
@@ -0,0 +1,13 @@
1
+ import type { AttemptResult, Completed, NewQueueItem, QueueItem } from '../contract/types';
2
+ import type { PostgresClient } from './options';
3
+ import type { Statements } from './statements';
4
+ /** The parameters of `insert` for `added`, whose message is `message`. */
5
+ export declare const insertValues: (added: QueueItem, message: Uint8Array) => (string | number | Uint8Array<ArrayBufferLike> | null)[];
6
+ /**
7
+ * The outcome of an attempt and the DSNs it asks for, in one transaction:
8
+ * a DSN that cannot be stored undoes the outcome too, and a lease lost
9
+ * writes nothing. The DSNs get their ids here and go in, in order, with no
10
+ * `maxItems` lock: a DSN is never refused for a full queue.
11
+ */
12
+ export declare function complete(connected: () => Promise<PostgresClient>, q: Statements, id: string, owner: string, result: AttemptResult, dsns: readonly NewQueueItem[]): Promise<Completed | undefined>;
13
+ //# sourceMappingURL=complete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complete.d.ts","sourceRoot":"","sources":["../../src/postgres/complete.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACX,aAAa,EACb,SAAS,EACT,YAAY,EACZ,SAAS,EACT,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,0EAA0E;AAC1E,eAAO,MAAM,YAAY,GAAI,OAAO,SAAS,EAAE,SAAS,UAAU,6DAQjE,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC7B,SAAS,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,EACxC,CAAC,EAAE,UAAU,EACb,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,SAAS,YAAY,EAAE,GAC3B,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CA6BhC"}