agent-inbox 0.2.4 → 0.2.5

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 (138) hide show
  1. package/CLAUDE.md +1 -92
  2. package/README.md +6 -73
  3. package/dist/federation/connection-manager.d.ts +0 -8
  4. package/dist/federation/connection-manager.d.ts.map +1 -1
  5. package/dist/federation/connection-manager.js +0 -12
  6. package/dist/federation/connection-manager.js.map +1 -1
  7. package/dist/federation/delivery-queue.d.ts +3 -11
  8. package/dist/federation/delivery-queue.d.ts.map +1 -1
  9. package/dist/federation/delivery-queue.js +8 -38
  10. package/dist/federation/delivery-queue.js.map +1 -1
  11. package/dist/index.d.ts +0 -17
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +0 -98
  14. package/dist/index.js.map +1 -1
  15. package/dist/jsonrpc/mail-push-types.d.ts +22 -2
  16. package/dist/jsonrpc/mail-push-types.d.ts.map +1 -1
  17. package/dist/jsonrpc/mail-push-types.js +18 -1
  18. package/dist/jsonrpc/mail-push-types.js.map +1 -1
  19. package/dist/jsonrpc/mail-push.d.ts +12 -1
  20. package/dist/jsonrpc/mail-push.d.ts.map +1 -1
  21. package/dist/jsonrpc/mail-push.js +13 -2
  22. package/dist/jsonrpc/mail-push.js.map +1 -1
  23. package/dist/jsonrpc/mail-server.d.ts.map +1 -1
  24. package/dist/jsonrpc/mail-server.js +42 -18
  25. package/dist/jsonrpc/mail-server.js.map +1 -1
  26. package/dist/router/message-router.d.ts +0 -15
  27. package/dist/router/message-router.d.ts.map +1 -1
  28. package/dist/router/message-router.js +3 -25
  29. package/dist/router/message-router.js.map +1 -1
  30. package/dist/storage/interface.d.ts +2 -9
  31. package/dist/storage/interface.d.ts.map +1 -1
  32. package/dist/storage/memory.d.ts +1 -4
  33. package/dist/storage/memory.d.ts.map +1 -1
  34. package/dist/storage/memory.js +6 -12
  35. package/dist/storage/memory.js.map +1 -1
  36. package/dist/storage/sqlite.d.ts +1 -6
  37. package/dist/storage/sqlite.d.ts.map +1 -1
  38. package/dist/storage/sqlite.js +6 -28
  39. package/dist/storage/sqlite.js.map +1 -1
  40. package/dist/types.d.ts +0 -79
  41. package/dist/types.d.ts.map +1 -1
  42. package/docs/DESIGN.md +0 -15
  43. package/package.json +3 -28
  44. package/rules/agent-inbox.md +0 -1
  45. package/src/federation/connection-manager.ts +0 -12
  46. package/src/federation/delivery-queue.ts +8 -38
  47. package/src/index.ts +0 -148
  48. package/src/jsonrpc/mail-push-types.ts +43 -2
  49. package/src/jsonrpc/mail-push.ts +34 -3
  50. package/src/jsonrpc/mail-server.ts +45 -26
  51. package/src/router/message-router.ts +4 -41
  52. package/src/storage/interface.ts +2 -11
  53. package/src/storage/memory.ts +8 -15
  54. package/src/storage/sqlite.ts +9 -36
  55. package/src/types.ts +0 -73
  56. package/test/load.test.ts +1 -1
  57. package/test/mail-push.test.ts +101 -1
  58. package/test/mail-server.test.ts +108 -0
  59. package/AGENTS.md +0 -18
  60. package/dist/federation/queue-store.d.ts +0 -42
  61. package/dist/federation/queue-store.d.ts.map +0 -1
  62. package/dist/federation/queue-store.js +0 -87
  63. package/dist/federation/queue-store.js.map +0 -1
  64. package/dist/index.d.mts +0 -2
  65. package/dist/index.mjs +0 -1
  66. package/dist/index.mjs.map +0 -1
  67. package/dist/mail/address-book.d.ts +0 -43
  68. package/dist/mail/address-book.d.ts.map +0 -1
  69. package/dist/mail/address-book.js +0 -95
  70. package/dist/mail/address-book.js.map +0 -1
  71. package/dist/mail/attachment-store.d.ts +0 -31
  72. package/dist/mail/attachment-store.d.ts.map +0 -1
  73. package/dist/mail/attachment-store.js +0 -74
  74. package/dist/mail/attachment-store.js.map +0 -1
  75. package/dist/mail/email-mapper.d.ts +0 -41
  76. package/dist/mail/email-mapper.d.ts.map +0 -1
  77. package/dist/mail/email-mapper.js +0 -216
  78. package/dist/mail/email-mapper.js.map +0 -1
  79. package/dist/mail/fs-attachment-store.d.ts +0 -38
  80. package/dist/mail/fs-attachment-store.d.ts.map +0 -1
  81. package/dist/mail/fs-attachment-store.js +0 -165
  82. package/dist/mail/fs-attachment-store.js.map +0 -1
  83. package/dist/mail/mail-gateway.d.ts +0 -114
  84. package/dist/mail/mail-gateway.d.ts.map +0 -1
  85. package/dist/mail/mail-gateway.js +0 -402
  86. package/dist/mail/mail-gateway.js.map +0 -1
  87. package/dist/mail/provider-transport.d.ts +0 -138
  88. package/dist/mail/provider-transport.d.ts.map +0 -1
  89. package/dist/mail/provider-transport.js +0 -434
  90. package/dist/mail/provider-transport.js.map +0 -1
  91. package/dist/mail/rate-limiter.d.ts +0 -20
  92. package/dist/mail/rate-limiter.d.ts.map +0 -1
  93. package/dist/mail/rate-limiter.js +0 -56
  94. package/dist/mail/rate-limiter.js.map +0 -1
  95. package/dist/mail/smtp-transport.d.ts +0 -141
  96. package/dist/mail/smtp-transport.d.ts.map +0 -1
  97. package/dist/mail/smtp-transport.js +0 -415
  98. package/dist/mail/smtp-transport.js.map +0 -1
  99. package/dist/mail/types.d.ts +0 -177
  100. package/dist/mail/types.d.ts.map +0 -1
  101. package/dist/mail/types.js +0 -11
  102. package/dist/mail/types.js.map +0 -1
  103. package/dist/router/destination.d.ts +0 -69
  104. package/dist/router/destination.d.ts.map +0 -1
  105. package/dist/router/destination.js +0 -106
  106. package/dist/router/destination.js.map +0 -1
  107. package/docs/MAIL-INTEROP-PLAN.md +0 -660
  108. package/renovate.json5 +0 -6
  109. package/src/federation/queue-store.ts +0 -124
  110. package/src/mail/address-book.ts +0 -111
  111. package/src/mail/attachment-store.ts +0 -90
  112. package/src/mail/email-mapper.ts +0 -288
  113. package/src/mail/fs-attachment-store.ts +0 -163
  114. package/src/mail/mail-gateway.ts +0 -505
  115. package/src/mail/provider-transport.ts +0 -577
  116. package/src/mail/rate-limiter.ts +0 -51
  117. package/src/mail/smtp-transport.ts +0 -589
  118. package/src/mail/types.ts +0 -221
  119. package/src/router/destination.ts +0 -140
  120. package/test/federation/delivery-queue-sqlite.test.ts +0 -158
  121. package/test/mail/address-book.test.ts +0 -111
  122. package/test/mail/attachment-store-contract.test.ts +0 -92
  123. package/test/mail/attachment-store.test.ts +0 -69
  124. package/test/mail/destination.test.ts +0 -115
  125. package/test/mail/dsn-parse.test.ts +0 -239
  126. package/test/mail/email-mapper.test.ts +0 -341
  127. package/test/mail/external-id.test.ts +0 -43
  128. package/test/mail/fs-attachment-store.test.ts +0 -134
  129. package/test/mail/full-flow-e2e.test.ts +0 -200
  130. package/test/mail/mail-gateway.test.ts +0 -419
  131. package/test/mail/mail-transport-contract.test.ts +0 -134
  132. package/test/mail/mock-mail.ts +0 -161
  133. package/test/mail/mock-postmark.ts +0 -66
  134. package/test/mail/provider-transport.test.ts +0 -381
  135. package/test/mail/rate-limiter.test.ts +0 -48
  136. package/test/mail/router-mail-integration.test.ts +0 -138
  137. package/test/mail/smtp-e2e.test.ts +0 -98
  138. package/test/mail/smtp-transport.test.ts +0 -138
@@ -1,138 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import {
3
- smtpErrorToResult,
4
- parsedToInboundMail,
5
- toNodemailerMessage,
6
- mailauthToResults,
7
- } from "../../src/mail/smtp-transport.js";
8
- import { makeOutboundMail } from "./mock-mail.js";
9
-
10
- describe("smtpErrorToResult", () => {
11
- it("maps 5xx to permanent", () => {
12
- expect(smtpErrorToResult({ responseCode: 550, response: "no user" })).toEqual({
13
- disposition: "permanent",
14
- code: 550,
15
- detail: "no user",
16
- });
17
- });
18
-
19
- it("maps 4xx to transient", () => {
20
- expect(smtpErrorToResult({ responseCode: 451 }).disposition).toBe("transient");
21
- });
22
-
23
- it("maps connection/DNS errors (no code) to transient", () => {
24
- expect(smtpErrorToResult({ message: "ECONNREFUSED" })).toEqual({
25
- disposition: "transient",
26
- detail: "ECONNREFUSED",
27
- });
28
- });
29
- });
30
-
31
- describe("parsedToInboundMail", () => {
32
- it("builds an InboundMail from parsed fields", () => {
33
- const mail = parsedToInboundMail(
34
- {
35
- from: { value: [{ address: "ext@other.org", name: "Ext" }] },
36
- to: { value: [{ address: "alice@example.com" }] },
37
- cc: { value: [{ address: "bob@example.com" }] },
38
- subject: "hi",
39
- text: "body",
40
- messageId: "<m1@other.org>",
41
- inReplyTo: "<p0@other.org>",
42
- references: "<root@other.org> <p0@other.org>",
43
- date: new Date("2026-01-01T00:00:00Z"),
44
- headers: new Map([["x-priority", "1"]]),
45
- },
46
- {
47
- envelopeFrom: "ext@other.org",
48
- envelopeTo: ["alice@example.com"],
49
- remote: { ip: "203.0.113.5" },
50
- sizeBytes: 200,
51
- }
52
- );
53
-
54
- expect(mail.from).toEqual({ address: "ext@other.org", name: "Ext" });
55
- expect(mail.to).toEqual([{ address: "alice@example.com", name: undefined }]);
56
- expect(mail.cc).toEqual([{ address: "bob@example.com", name: undefined }]);
57
- expect(mail.headers.messageId).toBe("<m1@other.org>");
58
- expect(mail.headers.references).toEqual([
59
- "<root@other.org>",
60
- "<p0@other.org>",
61
- ]);
62
- expect(mail.headers.raw["x-priority"]).toBe("1");
63
- expect(mail.remote).toEqual({ ip: "203.0.113.5" });
64
- expect(mail.receivedAt).toBe("2026-01-01T00:00:00.000Z");
65
- });
66
-
67
- it("falls back to the envelope sender when From is missing", () => {
68
- const mail = parsedToInboundMail(
69
- { to: { value: [{ address: "alice@example.com" }] } },
70
- { envelopeFrom: "bounce@mta.net", envelopeTo: [], sizeBytes: 1 }
71
- );
72
- expect(mail.from).toEqual({ address: "bounce@mta.net" });
73
- });
74
- });
75
-
76
- describe("toNodemailerMessage", () => {
77
- it("maps an OutboundMail to nodemailer fields", () => {
78
- const msg = toNodemailerMessage(
79
- makeOutboundMail({
80
- from: { address: "alice@example.com", name: "Alice" },
81
- to: [{ address: "ext@other.org" }],
82
- cc: [{ address: "c@other.org" }],
83
- subject: "subject",
84
- text: "text body",
85
- headers: {
86
- messageId: "<m@example.com>",
87
- inReplyTo: "<p@other.org>",
88
- references: ["<r@other.org>"],
89
- },
90
- })
91
- );
92
- expect(msg.from).toEqual({ name: "Alice", address: "alice@example.com" });
93
- expect(msg.to).toEqual(["ext@other.org"]);
94
- expect(msg.cc).toEqual(["c@other.org"]);
95
- expect(msg.messageId).toBe("<m@example.com>");
96
- expect(msg.inReplyTo).toBe("<p@other.org>");
97
- expect(msg.references).toEqual(["<r@other.org>"]);
98
- });
99
-
100
- it("includes dkim options when provided", () => {
101
- const msg = toNodemailerMessage(makeOutboundMail(), {
102
- domainName: "example.com",
103
- keySelector: "s1",
104
- privateKey: "KEY",
105
- });
106
- expect(msg.dkim).toEqual({
107
- domainName: "example.com",
108
- keySelector: "s1",
109
- privateKey: "KEY",
110
- });
111
- });
112
- });
113
-
114
- describe("mailauthToResults", () => {
115
- it("normalizes a full pass verdict", () => {
116
- expect(
117
- mailauthToResults({
118
- spf: { status: { result: "pass" } },
119
- dkim: { results: [{ status: { result: "pass" } }] },
120
- dmarc: { status: { result: "pass" } },
121
- })
122
- ).toEqual({ spf: "pass", dkim: "pass", dmarc: "pass" });
123
- });
124
-
125
- it("defaults missing verdicts to none", () => {
126
- expect(mailauthToResults({})).toEqual({
127
- spf: "none",
128
- dkim: "none",
129
- dmarc: "none",
130
- });
131
- });
132
-
133
- it("maps dmarc fail through", () => {
134
- expect(
135
- mailauthToResults({ dmarc: { status: { result: "fail" } } }).dmarc
136
- ).toBe("fail");
137
- });
138
- });