@diskd-ai/email-client-mcp 0.1.34 → 0.1.39

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 (66) hide show
  1. package/dist/config/schema.d.ts +535 -5
  2. package/dist/config/schema.js +71 -6
  3. package/dist/config/schema.js.map +1 -1
  4. package/dist/delivery/application/decideTransportOutcome.d.ts +15 -0
  5. package/dist/delivery/application/decideTransportOutcome.js +14 -0
  6. package/dist/delivery/application/decideTransportOutcome.js.map +1 -0
  7. package/dist/delivery/application/outboxRepository.d.ts +83 -0
  8. package/dist/delivery/application/outboxRepository.js +2 -0
  9. package/dist/delivery/application/outboxRepository.js.map +1 -0
  10. package/dist/delivery/domain/deliveryProgress.d.ts +17 -0
  11. package/dist/delivery/domain/deliveryProgress.js +34 -0
  12. package/dist/delivery/domain/deliveryProgress.js.map +1 -0
  13. package/dist/delivery/domain/deliveryState.d.ts +21 -0
  14. package/dist/delivery/domain/deliveryState.js +7 -0
  15. package/dist/delivery/domain/deliveryState.js.map +1 -0
  16. package/dist/delivery/domain/identity.d.ts +28 -0
  17. package/dist/delivery/domain/identity.js +28 -0
  18. package/dist/delivery/domain/identity.js.map +1 -0
  19. package/dist/delivery/domain/json.d.ts +5 -0
  20. package/dist/delivery/domain/json.js +2 -0
  21. package/dist/delivery/domain/json.js.map +1 -0
  22. package/dist/delivery/domain/transportOutcome.d.ts +31 -0
  23. package/dist/delivery/domain/transportOutcome.js +2 -0
  24. package/dist/delivery/domain/transportOutcome.js.map +1 -0
  25. package/dist/delivery/infrastructure/deliveryProcessor.d.ts +42 -0
  26. package/dist/delivery/infrastructure/deliveryProcessor.js +179 -0
  27. package/dist/delivery/infrastructure/deliveryProcessor.js.map +1 -0
  28. package/dist/delivery/infrastructure/deliveryRuntime.d.ts +17 -0
  29. package/dist/delivery/infrastructure/deliveryRuntime.js +186 -0
  30. package/dist/delivery/infrastructure/deliveryRuntime.js.map +1 -0
  31. package/dist/delivery/infrastructure/emailOutboxPayload.d.ts +7 -0
  32. package/dist/delivery/infrastructure/emailOutboxPayload.js +42 -0
  33. package/dist/delivery/infrastructure/emailOutboxPayload.js.map +1 -0
  34. package/dist/delivery/infrastructure/outboxEvent.d.ts +30 -0
  35. package/dist/delivery/infrastructure/outboxEvent.js +72 -0
  36. package/dist/delivery/infrastructure/outboxEvent.js.map +1 -0
  37. package/dist/delivery/infrastructure/outboxSdkAdapter.d.ts +7 -0
  38. package/dist/delivery/infrastructure/outboxSdkAdapter.js +164 -0
  39. package/dist/delivery/infrastructure/outboxSdkAdapter.js.map +1 -0
  40. package/dist/delivery/infrastructure/perAccountRateLimiter.d.ts +9 -0
  41. package/dist/delivery/infrastructure/perAccountRateLimiter.js +27 -0
  42. package/dist/delivery/infrastructure/perAccountRateLimiter.js.map +1 -0
  43. package/dist/delivery/infrastructure/smtpTransport.d.ts +43 -0
  44. package/dist/delivery/infrastructure/smtpTransport.js +142 -0
  45. package/dist/delivery/infrastructure/smtpTransport.js.map +1 -0
  46. package/dist/sdk/diskdClient.d.ts +1 -1
  47. package/dist/sdk/diskdClient.js +1 -1
  48. package/dist/server.js +87 -14
  49. package/dist/server.js.map +1 -1
  50. package/dist/store/driveStore.d.ts +3 -3
  51. package/dist/store/driveStore.js +24 -8
  52. package/dist/store/driveStore.js.map +1 -1
  53. package/dist/store/payloadTypes.d.ts +4 -0
  54. package/dist/sync/sync.d.ts +5 -4
  55. package/dist/sync/sync.js +21 -10
  56. package/dist/sync/sync.js.map +1 -1
  57. package/dist/tools/findMailboxFolder.d.ts +2 -2
  58. package/dist/tools/getEmail.d.ts +4 -4
  59. package/dist/tools/getEmails.d.ts +4 -4
  60. package/dist/tools/listEmails.d.ts +22 -9
  61. package/dist/tools/listEmails.js +37 -26
  62. package/dist/tools/listEmails.js.map +1 -1
  63. package/dist/tools/setEmailAttributes.d.ts +2 -2
  64. package/dist/tools/systemHydrateEmailAttachment.d.ts +4 -4
  65. package/dist/tools/systemHydrateEmailBodies.d.ts +8 -8
  66. package/package.json +5 -2
@@ -0,0 +1,164 @@
1
+ import { z } from "zod";
2
+ import { Err, None, Ok, Some } from "../../domain/result.js";
3
+ import { isValidMailboxId } from "../../store/conventions.js";
4
+ import { encodeDeliveryProgress } from "../domain/deliveryProgress.js";
5
+ const exchangeStateSchema = z.enum([
6
+ "review",
7
+ "outbox",
8
+ "sent",
9
+ "failed",
10
+ "reconciliation_required",
11
+ ]);
12
+ const jsonValueSchema = z.lazy(() => z.union([
13
+ z.string(),
14
+ z.number().finite(),
15
+ z.boolean(),
16
+ z.null(),
17
+ z.array(jsonValueSchema),
18
+ z.record(jsonValueSchema),
19
+ ]));
20
+ const jsonObjectSchema = z.record(jsonValueSchema);
21
+ const sdkOutboxItemSchema = z
22
+ .object({
23
+ externalId: z.string().min(1),
24
+ account: z.string().min(1),
25
+ mailboxId: z.string().refine(isValidMailboxId, "invalid mailboxId"),
26
+ state: exchangeStateSchema,
27
+ payload: jsonObjectSchema,
28
+ result: jsonObjectSchema.nullable(),
29
+ revision: z.string().min(1),
30
+ deliveryAttempts: z.number().int().min(0),
31
+ leaseOwner: z.string().min(1).nullable(),
32
+ leaseExpiresAt: z.string().datetime({ offset: true }).nullable(),
33
+ failureReason: z.string().min(1).nullable(),
34
+ createdAt: z.string().datetime({ offset: true }),
35
+ updatedAt: z.string().datetime({ offset: true }),
36
+ })
37
+ .strict();
38
+ const sdkOutboxPageSchema = z
39
+ .object({
40
+ items: z.array(z.unknown()),
41
+ nextCursor: z.string().min(1).nullable(),
42
+ })
43
+ .strict();
44
+ const toOption = (value) => (value === null ? None : Some(value));
45
+ const invalidResponse = (operation, message) => ({ kind: "InvalidResponse", operation, message });
46
+ export const parseSdkOutboxItem = (operation, rawItem) => {
47
+ const parsed = sdkOutboxItemSchema.safeParse(rawItem);
48
+ if (!parsed.success) {
49
+ return Err(invalidResponse(operation, parsed.error.issues.map((issue) => `${issue.path.join(".")}: ${issue.message}`).join("; ")));
50
+ }
51
+ let lease;
52
+ if (parsed.data.leaseOwner === null && parsed.data.leaseExpiresAt === null) {
53
+ lease = { kind: "Available" };
54
+ }
55
+ else if (parsed.data.leaseOwner !== null && parsed.data.leaseExpiresAt !== null) {
56
+ lease = {
57
+ kind: "Leased",
58
+ owner: parsed.data.leaseOwner,
59
+ expiresAt: parsed.data.leaseExpiresAt,
60
+ };
61
+ }
62
+ else {
63
+ return Err(invalidResponse(operation, "lease owner and expiry must be present together"));
64
+ }
65
+ if ((parsed.data.state === "sent" || parsed.data.state === "failed") &&
66
+ lease.kind !== "Available") {
67
+ return Err(invalidResponse(operation, "terminal item must not retain a lease"));
68
+ }
69
+ if (parsed.data.state === "failed" && parsed.data.failureReason === null) {
70
+ return Err(invalidResponse(operation, "failed item must include a failure reason"));
71
+ }
72
+ return Ok({
73
+ externalId: parsed.data.externalId,
74
+ account: parsed.data.account,
75
+ mailboxId: parsed.data.mailboxId,
76
+ state: parsed.data.state,
77
+ payload: parsed.data.payload,
78
+ result: toOption(parsed.data.result),
79
+ revision: parsed.data.revision,
80
+ deliveryAttempts: parsed.data.deliveryAttempts,
81
+ lease,
82
+ failureReason: toOption(parsed.data.failureReason),
83
+ createdAt: parsed.data.createdAt,
84
+ updatedAt: parsed.data.updatedAt,
85
+ });
86
+ };
87
+ const causeMessage = (cause) => {
88
+ if (cause instanceof Error)
89
+ return cause.message;
90
+ try {
91
+ return String(cause);
92
+ }
93
+ catch {
94
+ return "unprintable SDK failure";
95
+ }
96
+ };
97
+ const classifySdkFailure = (operation, cause) => {
98
+ const message = causeMessage(cause);
99
+ if (/\bREVISION_CONFLICT\b/.test(message))
100
+ return { kind: "RevisionConflict", operation };
101
+ if (/\bLEASE_CONFLICT\b/.test(message))
102
+ return { kind: "LeaseConflict", operation };
103
+ if (/\bLEASE_EXPIRED\b/.test(message))
104
+ return { kind: "LeaseExpired", operation };
105
+ if (/\bNOT_FOUND\b/.test(message))
106
+ return { kind: "NotFound", operation };
107
+ if (/Invalid messages_store response/.test(message)) {
108
+ return invalidResponse(operation, message);
109
+ }
110
+ return { kind: "SdkFailure", operation, message };
111
+ };
112
+ const runItemOperation = async (operation, call) => {
113
+ try {
114
+ return parseSdkOutboxItem(operation, await call());
115
+ }
116
+ catch (cause) {
117
+ return Err(classifySdkFailure(operation, cause));
118
+ }
119
+ };
120
+ const toSdkTerminalOutcome = (outcome) => outcome.kind === "Sent"
121
+ ? { state: "sent", providerResponse: outcome.providerResponse }
122
+ : { state: "failed", reason: outcome.reason };
123
+ export const buildOutboxRepository = (sdk) => ({
124
+ get: (externalId) => runItemOperation("Get", () => sdk.outbox.get({ externalId })),
125
+ listPending: async (input) => {
126
+ try {
127
+ const rawPage = await sdk.outbox.listPending({
128
+ limit: input.limit,
129
+ ...(input.cursor.tag === "Some" ? { cursor: input.cursor.value } : {}),
130
+ });
131
+ const parsedPage = sdkOutboxPageSchema.safeParse(rawPage);
132
+ if (!parsedPage.success) {
133
+ return Err(invalidResponse("ListPending", parsedPage.error.issues
134
+ .map((issue) => `${issue.path.join(".")}: ${issue.message}`)
135
+ .join("; ")));
136
+ }
137
+ const parsedItems = parsedPage.data.items.map((item) => parseSdkOutboxItem("ListPending", item));
138
+ const failedItem = parsedItems.find((item) => item.tag === "Err");
139
+ if (failedItem !== undefined && failedItem.tag === "Err")
140
+ return failedItem;
141
+ return Ok({
142
+ items: parsedItems.flatMap((item) => (item.tag === "Ok" ? [item.value] : [])),
143
+ nextCursor: toOption(parsedPage.data.nextCursor),
144
+ });
145
+ }
146
+ catch (cause) {
147
+ return Err(classifySdkFailure("ListPending", cause));
148
+ }
149
+ },
150
+ claim: (input) => runItemOperation("Claim", () => sdk.outbox.claim(input)),
151
+ renewLease: (input) => runItemOperation("RenewLease", () => sdk.outbox.renewLease(input)),
152
+ writeProgress: (input) => runItemOperation("WriteProgress", () => sdk.exchange.update({
153
+ externalId: input.externalId,
154
+ expectedRevision: input.expectedRevision,
155
+ patch: { result: encodeDeliveryProgress(input.progress) },
156
+ })),
157
+ writeTerminal: (input) => runItemOperation("WriteTerminal", () => sdk.outbox.writeTerminal({
158
+ externalId: input.externalId,
159
+ expectedRevision: input.expectedRevision,
160
+ leaseOwner: input.leaseOwner,
161
+ outcome: toSdkTerminalOutcome(input.outcome),
162
+ })),
163
+ });
164
+ //# sourceMappingURL=outboxSdkAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outboxSdkAdapter.js","sourceRoot":"","sources":["../../../src/delivery/infrastructure/outboxSdkAdapter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAA4B,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAU9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAKvE,MAAM,mBAAmB,GAA6B,CAAC,CAAC,IAAI,CAAC;IAC3D,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,yBAAyB;CAC1B,CAAC,CAAC;AAEH,MAAM,eAAe,GAAyB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CACxD,CAAC,CAAC,KAAK,CAAC;IACN,CAAC,CAAC,MAAM,EAAE;IACV,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE;IACnB,CAAC,CAAC,OAAO,EAAE;IACX,CAAC,CAAC,IAAI,EAAE;IACR,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;IACxB,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC;CAC1B,CAAC,CACH,CAAC;AAEF,MAAM,gBAAgB,GAA0B,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AAE1E,MAAM,mBAAmB,GAAG,CAAC;KAC1B,MAAM,CAAC;IACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;IACnE,KAAK,EAAE,mBAAmB;IAC1B,OAAO,EAAE,gBAAgB;IACzB,MAAM,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;IAChE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC3C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAChD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;CACjD,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,mBAAmB,GAAG,CAAC;KAC1B,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,QAAQ,GAAG,CAAI,KAAe,EAAa,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAE1F,MAAM,eAAe,GAAG,CACtB,SAAoC,EACpC,OAAe,EACQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;AAE9E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,SAAoC,EACpC,OAAgB,EAC2B,EAAE;IAC7C,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,GAAG,CACR,eAAe,CACb,SAAS,EACT,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC3F,CACF,CAAC;IACJ,CAAC;IAED,IAAI,KAAkB,CAAC;IACvB,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;QAC3E,KAAK,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAChC,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;QAClF,KAAK,GAAG;YACN,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;YAC7B,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc;SACtC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,CAAC,eAAe,CAAC,SAAS,EAAE,iDAAiD,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,IACE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC;QAChE,KAAK,CAAC,IAAI,KAAK,WAAW,EAC1B,CAAC;QACD,OAAO,GAAG,CAAC,eAAe,CAAC,SAAS,EAAE,uCAAuC,CAAC,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;QACzE,OAAO,GAAG,CAAC,eAAe,CAAC,SAAS,EAAE,2CAA2C,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,EAAE,CAAC;QACR,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;QAClC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO;QAC5B,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;QAChC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;QACxB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO;QAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACpC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;QAC9B,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB;QAC9C,KAAK;QACL,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;QAClD,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;QAChC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;KACjC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAc,EAAU,EAAE;IAC9C,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACjD,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,yBAAyB,CAAC;IACnC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACzB,SAAoC,EACpC,KAAc,EACS,EAAE;IACzB,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC;IAC1F,IAAI,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;IACpF,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;IAClF,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAC1E,IAAI,iCAAiC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,OAAO,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,KAAK,EAC5B,SAAoC,EACpC,IAA4B,EACwB,EAAE;IACtD,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,SAAS,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IACnD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,OAA8B,EAAsB,EAAE,CAClF,OAAO,CAAC,IAAI,KAAK,MAAM;IACrB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE;IAC/D,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;AAElD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,GAAsB,EAAoB,EAAE,CAAC,CAAC;IAClF,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IAClF,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC3C,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvE,CAAC,CAAC;YACH,MAAM,UAAU,GAAG,mBAAmB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC1D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO,GAAG,CACR,eAAe,CACb,aAAa,EACb,UAAU,CAAC,KAAK,CAAC,MAAM;qBACpB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;qBAC3D,IAAI,CAAC,IAAI,CAAC,CACd,CACF,CAAC;YACJ,CAAC;YAED,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACrD,kBAAkB,CAAC,aAAa,EAAE,IAAI,CAAC,CACxC,CAAC;YACF,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;YAClE,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,GAAG,KAAK,KAAK;gBAAE,OAAO,UAAU,CAAC;YAE5E,OAAO,EAAE,CAAC;gBACR,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC7E,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;aACjD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,GAAG,CAAC,kBAAkB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1E,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACzF,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CACvB,gBAAgB,CAAC,eAAe,EAAE,GAAG,EAAE,CACrC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;QAClB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,KAAK,EAAE,EAAE,MAAM,EAAE,sBAAsB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;KAC1D,CAAC,CACH;IACH,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CACvB,gBAAgB,CAAC,eAAe,EAAE,GAAG,EAAE,CACrC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;QACvB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC;KAC7C,CAAC,CACH;CACJ,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ export type PerAccountRateLimiter = {
2
+ readonly waitForTurn: (accountId: string) => Promise<void>;
3
+ };
4
+ type RateLimiterDependencies = {
5
+ readonly nowMs: () => number;
6
+ readonly sleep: (milliseconds: number) => Promise<void>;
7
+ };
8
+ export declare const buildPerAccountRateLimiter: (ratePerMinute: number, dependencies?: RateLimiterDependencies) => PerAccountRateLimiter;
9
+ export {};
@@ -0,0 +1,27 @@
1
+ const defaultDependencies = {
2
+ nowMs: () => Date.now(),
3
+ sleep: (milliseconds) => new Promise((resolve) => {
4
+ setTimeout(resolve, milliseconds);
5
+ }),
6
+ };
7
+ export const buildPerAccountRateLimiter = (ratePerMinute, dependencies = defaultDependencies) => {
8
+ const intervalMs = Math.ceil(60_000 / ratePerMinute);
9
+ const nextAllowedByAccount = new Map();
10
+ const tails = new Map();
11
+ return {
12
+ waitForTurn: async (accountId) => {
13
+ const prior = tails.get(accountId) ?? Promise.resolve();
14
+ const turn = prior.then(async () => {
15
+ const waitMs = Math.max(0, (nextAllowedByAccount.get(accountId) ?? dependencies.nowMs()) - dependencies.nowMs());
16
+ if (waitMs > 0)
17
+ await dependencies.sleep(waitMs);
18
+ nextAllowedByAccount.set(accountId, dependencies.nowMs() + intervalMs);
19
+ });
20
+ tails.set(accountId, turn);
21
+ await turn;
22
+ if (tails.get(accountId) === turn)
23
+ tails.delete(accountId);
24
+ },
25
+ };
26
+ };
27
+ //# sourceMappingURL=perAccountRateLimiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perAccountRateLimiter.js","sourceRoot":"","sources":["../../../src/delivery/infrastructure/perAccountRateLimiter.ts"],"names":[],"mappings":"AASA,MAAM,mBAAmB,GAA4B;IACnD,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;IACvB,KAAK,EAAE,CAAC,YAAY,EAAE,EAAE,CACtB,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACtB,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACpC,CAAC,CAAC;CACL,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,aAAqB,EACrB,eAAwC,mBAAmB,EACpC,EAAE;IACzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;IACrD,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE/C,OAAO;QACL,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBACjC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CACrB,CAAC,EACD,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE,CACrF,CAAC;gBACF,IAAI,MAAM,GAAG,CAAC;oBAAE,MAAM,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACjD,oBAAoB,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,KAAK,EAAE,GAAG,UAAU,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC3B,MAAM,IAAI,CAAC;YACX,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI;gBAAE,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,43 @@
1
+ import type { EmailOutboxPayload } from "@diskd-ai/sdk";
2
+ import { type Account, type SmtpSettings } from "../../config/schema.js";
3
+ import type { TransportOutcome } from "../domain/transportOutcome.js";
4
+ type PasswordSmtpAuth = {
5
+ readonly type: "login";
6
+ readonly user: string;
7
+ readonly pass: string;
8
+ };
9
+ type OAuthSmtpAuth = {
10
+ readonly type: "OAuth2";
11
+ readonly user: string;
12
+ readonly clientId: string;
13
+ readonly clientSecret: string;
14
+ readonly refreshToken: string;
15
+ };
16
+ export type SmtpConnectionOptions = {
17
+ readonly host: string;
18
+ readonly port: number;
19
+ readonly secure: boolean;
20
+ readonly requireTLS: boolean;
21
+ readonly tls: {
22
+ readonly rejectUnauthorized: boolean;
23
+ };
24
+ readonly connectionTimeout: number;
25
+ readonly greetingTimeout: number;
26
+ readonly socketTimeout: number;
27
+ readonly auth: PasswordSmtpAuth | OAuthSmtpAuth;
28
+ };
29
+ export type SmtpMessage = {
30
+ readonly payload: EmailOutboxPayload;
31
+ readonly fromAddress: string;
32
+ readonly fromName: string;
33
+ };
34
+ export type SmtpSender = {
35
+ readonly send: (message: SmtpMessage) => Promise<TransportOutcome>;
36
+ readonly close: () => void;
37
+ };
38
+ /** Classify only failures proven to occur before SMTP acceptance as retryable. */
39
+ export declare const classifySmtpFailure: (cause: unknown) => TransportOutcome;
40
+ export declare const buildSmtpConnectionOptions: (account: Account, smtp: SmtpSettings) => SmtpConnectionOptions;
41
+ export declare const toSmtpMessageId: (messageId: string) => string;
42
+ export declare const buildSmtpSender: (account: Account) => SmtpSender;
43
+ export {};
@@ -0,0 +1,142 @@
1
+ import { createHash } from "node:crypto";
2
+ import * as nodemailer from "nodemailer";
3
+ import { z } from "zod";
4
+ import { isOAuthAccount } from "../../config/schema.js";
5
+ const CONNECTION_TIMEOUT_MS = 30_000;
6
+ const GREETING_TIMEOUT_MS = 30_000;
7
+ const SOCKET_TIMEOUT_MS = 60_000;
8
+ const smtpErrorSchema = z
9
+ .object({
10
+ message: z.string().optional(),
11
+ code: z.string().optional(),
12
+ command: z.string().optional(),
13
+ response: z.string().optional(),
14
+ responseCode: z.number().int().optional(),
15
+ syscall: z.string().optional(),
16
+ })
17
+ .passthrough();
18
+ const formatFailureReason = (details, fallback) => [details.code, details.command, details.response, details.message ?? fallback]
19
+ .filter((part) => typeof part === "string" && part.length > 0)
20
+ .join(": ");
21
+ const rejectionKind = (responseCode) => responseCode !== undefined && responseCode >= 400 && responseCode < 500
22
+ ? "Transient"
23
+ : "Permanent";
24
+ const hasDefinitiveSmtpResponse = (details) => details.responseCode !== undefined && details.responseCode >= 400 && details.responseCode < 600;
25
+ const isPreSubmissionCommand = (command) => command === "CONN" ||
26
+ command === "EHLO" ||
27
+ command === "HELO" ||
28
+ command?.startsWith("AUTH ") === true ||
29
+ command === "MAIL FROM" ||
30
+ command === "RCPT TO" ||
31
+ command === "API";
32
+ /** Classify only failures proven to occur before SMTP acceptance as retryable. */
33
+ export const classifySmtpFailure = (cause) => {
34
+ const parsed = smtpErrorSchema.safeParse(cause);
35
+ const fallback = cause instanceof Error ? cause.message : String(cause);
36
+ if (!parsed.success) {
37
+ return { kind: "UnknownOutcome", failure: { reason: fallback } };
38
+ }
39
+ const details = parsed.data;
40
+ const reason = formatFailureReason(details, fallback);
41
+ if (details.code === "EAUTH" || details.code === "EREQUIRETLS") {
42
+ return {
43
+ kind: "RejectedBeforeAcceptance",
44
+ rejection: { kind: "Permanent", failure: { reason } },
45
+ };
46
+ }
47
+ if (hasDefinitiveSmtpResponse(details)) {
48
+ return {
49
+ kind: "RejectedBeforeAcceptance",
50
+ rejection: {
51
+ kind: rejectionKind(details.responseCode),
52
+ failure: { reason },
53
+ },
54
+ };
55
+ }
56
+ if (details.syscall === "connect") {
57
+ return {
58
+ kind: "RejectedBeforeAcceptance",
59
+ rejection: { kind: "Transient", failure: { reason } },
60
+ };
61
+ }
62
+ if (details.code === "EENVELOPE" && isPreSubmissionCommand(details.command)) {
63
+ return {
64
+ kind: "RejectedBeforeAcceptance",
65
+ rejection: { kind: "Permanent", failure: { reason } },
66
+ };
67
+ }
68
+ return { kind: "UnknownOutcome", failure: { reason } };
69
+ };
70
+ export const buildSmtpConnectionOptions = (account, smtp) => ({
71
+ host: smtp.host,
72
+ port: smtp.port,
73
+ secure: smtp.tls,
74
+ requireTLS: smtp.starttls,
75
+ tls: { rejectUnauthorized: smtp.verify_ssl },
76
+ connectionTimeout: CONNECTION_TIMEOUT_MS,
77
+ greetingTimeout: GREETING_TIMEOUT_MS,
78
+ socketTimeout: SOCKET_TIMEOUT_MS,
79
+ auth: isOAuthAccount(account)
80
+ ? {
81
+ type: "OAuth2",
82
+ user: account.username ?? account.email,
83
+ clientId: account.oauth2.client_id,
84
+ clientSecret: account.oauth2.client_secret,
85
+ refreshToken: account.oauth2.refresh_token,
86
+ }
87
+ : {
88
+ type: "login",
89
+ user: account.username ?? account.email,
90
+ pass: account.password,
91
+ },
92
+ });
93
+ export const toSmtpMessageId = (messageId) => `<${createHash("sha256").update(messageId, "utf8").digest("hex")}@email-client-mcp.invalid>`;
94
+ const readSmtpAddress = (value) => {
95
+ if (typeof value === "string")
96
+ return value;
97
+ const parsed = z.object({ address: z.string() }).safeParse(value);
98
+ return parsed.success ? parsed.data.address : undefined;
99
+ };
100
+ const normalizeSmtpAddresses = (values) => values.flatMap((value) => {
101
+ const address = readSmtpAddress(value);
102
+ return address === undefined ? [] : [address];
103
+ });
104
+ export const buildSmtpSender = (account) => {
105
+ if (account.smtp === undefined) {
106
+ throw new Error(`SMTP settings missing for account: ${account.name}`);
107
+ }
108
+ const transport = nodemailer.createTransport(buildSmtpConnectionOptions(account, account.smtp));
109
+ return {
110
+ send: async (message) => {
111
+ try {
112
+ const info = await transport.sendMail({
113
+ messageId: toSmtpMessageId(message.payload.messageId),
114
+ from: { name: message.fromName, address: message.fromAddress },
115
+ to: [...message.payload.to],
116
+ cc: [...message.payload.cc],
117
+ bcc: [...message.payload.bcc],
118
+ subject: message.payload.subject,
119
+ text: message.payload.bodyText,
120
+ html: message.payload.bodyHtml || undefined,
121
+ inReplyTo: message.payload.inReplyTo ?? undefined,
122
+ disableFileAccess: true,
123
+ disableUrlAccess: true,
124
+ });
125
+ return {
126
+ kind: "Accepted",
127
+ receipt: {
128
+ messageId: info.messageId,
129
+ accepted: normalizeSmtpAddresses(info.accepted),
130
+ rejected: normalizeSmtpAddresses(info.rejected),
131
+ response: info.response,
132
+ },
133
+ };
134
+ }
135
+ catch (cause) {
136
+ return classifySmtpFailure(cause);
137
+ }
138
+ },
139
+ close: () => transport.close(),
140
+ };
141
+ };
142
+ //# sourceMappingURL=smtpTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smtpTransport.js","sourceRoot":"","sources":["../../../src/delivery/infrastructure/smtpTransport.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@
10
10
  * APIS_BASE_URL := env APIS_BASE_URL
11
11
  * | TOML [sdk].base_url
12
12
  *
13
- * SDK constraint (5.1.x): `APIS_API_KEY` and `APIS_BASE_URL` are read
13
+ * SDK constraint: `APIS_API_KEY` and `APIS_BASE_URL` are read
14
14
  * from `process.env` only -- there is no constructor param. We mirror
15
15
  * TOML values into env via `ensureEnv` (only when env is empty) so cluster
16
16
  * env always wins over per-server TOML.
@@ -10,7 +10,7 @@
10
10
  * APIS_BASE_URL := env APIS_BASE_URL
11
11
  * | TOML [sdk].base_url
12
12
  *
13
- * SDK constraint (5.1.x): `APIS_API_KEY` and `APIS_BASE_URL` are read
13
+ * SDK constraint: `APIS_API_KEY` and `APIS_BASE_URL` are read
14
14
  * from `process.env` only -- there is no constructor param. We mirror
15
15
  * TOML values into env via `ensureEnv` (only when env is empty) so cluster
16
16
  * env always wins over per-server TOML.
package/dist/server.js CHANGED
@@ -14,9 +14,15 @@
14
14
  *
15
15
  * Logs go to stderr only (stdout is reserved for MCP JSON-RPC).
16
16
  */
17
+ import { randomUUID } from "node:crypto";
17
18
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
18
19
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
19
20
  import { loadConfig } from "./config/loader.js";
21
+ import { buildDeliveryProcessor } from "./delivery/infrastructure/deliveryProcessor.js";
22
+ import { buildDeliveryRuntime, } from "./delivery/infrastructure/deliveryRuntime.js";
23
+ import { buildOutboxRepository } from "./delivery/infrastructure/outboxSdkAdapter.js";
24
+ import { buildPerAccountRateLimiter } from "./delivery/infrastructure/perAccountRateLimiter.js";
25
+ import { buildSmtpSender } from "./delivery/infrastructure/smtpTransport.js";
20
26
  import { errorMessage } from "./domain/errors.js";
21
27
  import { Err, Ok } from "./domain/result.js";
22
28
  import { downloadPartByUid, fetchDisplayBodyByUid, fetchEnvelopesUidRange, fetchMetadataUidRange, folderStatus, withMailboxLock, } from "./imap/fetch.js";
@@ -103,6 +109,7 @@ const main = async () => {
103
109
  return Ok(list.map((f) => ({
104
110
  path: f.path,
105
111
  specialUse: (f.specialUse ?? null),
112
+ delimiter: f.delimiter,
106
113
  })));
107
114
  }
108
115
  catch (cause) {
@@ -197,6 +204,41 @@ const main = async () => {
197
204
  imap: { downloadPart: syncDeps.imap.downloadPart },
198
205
  };
199
206
  const watcher = buildWatcher(syncDeps, cfg.value.accounts, cfg.value.watcher, log);
207
+ const smtpSenders = [];
208
+ let deliveryRuntime;
209
+ let requestShutdown = (signal, exitCode) => {
210
+ log("shutdown requested before runtime initialization", { signal, exitCode });
211
+ process.exitCode = exitCode;
212
+ };
213
+ if (cfg.value.deliver.enabled) {
214
+ const deliveryAccounts = cfg.value.accounts.map((account) => {
215
+ const sender = buildSmtpSender(account);
216
+ smtpSenders.push(sender);
217
+ return { config: account, sender };
218
+ });
219
+ const repository = buildOutboxRepository(diskd.value.messagesStore);
220
+ const processor = buildDeliveryProcessor({
221
+ repository,
222
+ accounts: deliveryAccounts,
223
+ rateLimiter: buildPerAccountRateLimiter(cfg.value.deliver.rate_limit_per_account_per_minute),
224
+ leaseOwner: `email-client-mcp-${randomUUID()}`,
225
+ now: () => new Date(),
226
+ log,
227
+ });
228
+ deliveryRuntime = buildDeliveryRuntime({
229
+ natsUrl: cfg.value.deliver.nats_url,
230
+ workspaceId: diskd.value.workspaceId,
231
+ repository,
232
+ processor,
233
+ log,
234
+ onFatal: (cause) => {
235
+ log("delivery fatal", {
236
+ error: cause instanceof Error ? cause.message : String(cause),
237
+ });
238
+ requestShutdown("delivery-fatal", 1);
239
+ },
240
+ });
241
+ }
200
242
  const server = new McpServer({
201
243
  name: "email-client-mcp",
202
244
  version: PACKAGE_VERSION,
@@ -212,17 +254,17 @@ const main = async () => {
212
254
  const transport = new StdioServerTransport();
213
255
  await server.connect(transport);
214
256
  log("mcp ready", { accounts: cfg.value.accounts.length });
215
- // Start watcher after MCP transport is ready. The interval fires
216
- // immediately on the first tick (see watcher.start), then on every
217
- // clamped interval thereafter.
218
- if (cfg.value.watcher.enabled) {
219
- watcher.start();
220
- }
221
- else {
222
- log("watcher.disabled-by-config");
223
- }
224
- const shutdown = async (signal) => {
225
- log("shutdown", { signal });
257
+ let shutdownPromise;
258
+ const shutdown = async (signal, exitCode) => {
259
+ log("shutdown", { signal, exitCode });
260
+ if (deliveryRuntime !== undefined) {
261
+ try {
262
+ await deliveryRuntime.stop();
263
+ }
264
+ catch (e) {
265
+ log("delivery stop error", { error: String(e) });
266
+ }
267
+ }
226
268
  try {
227
269
  await watcher.stop();
228
270
  }
@@ -235,16 +277,47 @@ const main = async () => {
235
277
  catch (e) {
236
278
  log("pool close error", { error: String(e) });
237
279
  }
280
+ for (const sender of smtpSenders) {
281
+ try {
282
+ sender.close();
283
+ }
284
+ catch (e) {
285
+ log("smtp close error", { error: String(e) });
286
+ }
287
+ }
238
288
  try {
239
289
  await server.close();
240
290
  }
241
291
  catch (e) {
242
292
  log("server close error", { error: String(e) });
243
293
  }
244
- process.exit(0);
294
+ process.exit(exitCode);
295
+ };
296
+ requestShutdown = (signal, exitCode) => {
297
+ if (shutdownPromise !== undefined)
298
+ return;
299
+ shutdownPromise = shutdown(signal, exitCode).catch((cause) => {
300
+ log("shutdown failed", { error: cause instanceof Error ? cause.message : String(cause) });
301
+ process.exit(1);
302
+ });
245
303
  };
246
- process.on("SIGINT", () => void shutdown("SIGINT"));
247
- process.on("SIGTERM", () => void shutdown("SIGTERM"));
304
+ process.on("SIGINT", () => requestShutdown("SIGINT", 0));
305
+ process.on("SIGTERM", () => requestShutdown("SIGTERM", 0));
306
+ if (deliveryRuntime !== undefined) {
307
+ await deliveryRuntime.start();
308
+ }
309
+ else {
310
+ log("delivery.disabled-by-config");
311
+ }
312
+ // Start watcher after MCP transport is ready. The interval fires
313
+ // immediately on the first tick (see watcher.start), then on every
314
+ // clamped interval thereafter.
315
+ if (cfg.value.watcher.enabled) {
316
+ watcher.start();
317
+ }
318
+ else {
319
+ log("watcher.disabled-by-config");
320
+ }
248
321
  };
249
322
  main().catch((err) => {
250
323
  log("fatal", { error: err?.message ?? String(err) });
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}