@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.
- package/dist/config/schema.d.ts +535 -5
- package/dist/config/schema.js +71 -6
- package/dist/config/schema.js.map +1 -1
- package/dist/delivery/application/decideTransportOutcome.d.ts +15 -0
- package/dist/delivery/application/decideTransportOutcome.js +14 -0
- package/dist/delivery/application/decideTransportOutcome.js.map +1 -0
- package/dist/delivery/application/outboxRepository.d.ts +83 -0
- package/dist/delivery/application/outboxRepository.js +2 -0
- package/dist/delivery/application/outboxRepository.js.map +1 -0
- package/dist/delivery/domain/deliveryProgress.d.ts +17 -0
- package/dist/delivery/domain/deliveryProgress.js +34 -0
- package/dist/delivery/domain/deliveryProgress.js.map +1 -0
- package/dist/delivery/domain/deliveryState.d.ts +21 -0
- package/dist/delivery/domain/deliveryState.js +7 -0
- package/dist/delivery/domain/deliveryState.js.map +1 -0
- package/dist/delivery/domain/identity.d.ts +28 -0
- package/dist/delivery/domain/identity.js +28 -0
- package/dist/delivery/domain/identity.js.map +1 -0
- package/dist/delivery/domain/json.d.ts +5 -0
- package/dist/delivery/domain/json.js +2 -0
- package/dist/delivery/domain/json.js.map +1 -0
- package/dist/delivery/domain/transportOutcome.d.ts +31 -0
- package/dist/delivery/domain/transportOutcome.js +2 -0
- package/dist/delivery/domain/transportOutcome.js.map +1 -0
- package/dist/delivery/infrastructure/deliveryProcessor.d.ts +42 -0
- package/dist/delivery/infrastructure/deliveryProcessor.js +179 -0
- package/dist/delivery/infrastructure/deliveryProcessor.js.map +1 -0
- package/dist/delivery/infrastructure/deliveryRuntime.d.ts +17 -0
- package/dist/delivery/infrastructure/deliveryRuntime.js +186 -0
- package/dist/delivery/infrastructure/deliveryRuntime.js.map +1 -0
- package/dist/delivery/infrastructure/emailOutboxPayload.d.ts +7 -0
- package/dist/delivery/infrastructure/emailOutboxPayload.js +42 -0
- package/dist/delivery/infrastructure/emailOutboxPayload.js.map +1 -0
- package/dist/delivery/infrastructure/outboxEvent.d.ts +30 -0
- package/dist/delivery/infrastructure/outboxEvent.js +72 -0
- package/dist/delivery/infrastructure/outboxEvent.js.map +1 -0
- package/dist/delivery/infrastructure/outboxSdkAdapter.d.ts +7 -0
- package/dist/delivery/infrastructure/outboxSdkAdapter.js +164 -0
- package/dist/delivery/infrastructure/outboxSdkAdapter.js.map +1 -0
- package/dist/delivery/infrastructure/perAccountRateLimiter.d.ts +9 -0
- package/dist/delivery/infrastructure/perAccountRateLimiter.js +27 -0
- package/dist/delivery/infrastructure/perAccountRateLimiter.js.map +1 -0
- package/dist/delivery/infrastructure/smtpTransport.d.ts +43 -0
- package/dist/delivery/infrastructure/smtpTransport.js +142 -0
- package/dist/delivery/infrastructure/smtpTransport.js.map +1 -0
- package/dist/sdk/diskdClient.d.ts +1 -1
- package/dist/sdk/diskdClient.js +1 -1
- package/dist/server.js +87 -14
- package/dist/server.js.map +1 -1
- package/dist/store/driveStore.d.ts +3 -3
- package/dist/store/driveStore.js +24 -8
- package/dist/store/driveStore.js.map +1 -1
- package/dist/store/payloadTypes.d.ts +4 -0
- package/dist/sync/sync.d.ts +5 -4
- package/dist/sync/sync.js +21 -10
- package/dist/sync/sync.js.map +1 -1
- package/dist/tools/findMailboxFolder.d.ts +2 -2
- package/dist/tools/getEmail.d.ts +4 -4
- package/dist/tools/getEmails.d.ts +4 -4
- package/dist/tools/listEmails.d.ts +22 -9
- package/dist/tools/listEmails.js +37 -26
- package/dist/tools/listEmails.js.map +1 -1
- package/dist/tools/setEmailAttributes.d.ts +2 -2
- package/dist/tools/systemHydrateEmailAttachment.d.ts +4 -4
- package/dist/tools/systemHydrateEmailBodies.d.ts +8 -8
- 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":"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"}
|
|
@@ -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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAgB,cAAc,EAAqB,MAAM,wBAAwB,CAAC;AAGzF,MAAM,qBAAqB,GAAG,MAAM,CAAC;AACrC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AACnC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAuCjC,MAAM,eAAe,GAAG,CAAC;KACtB,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC;KACD,WAAW,EAAE,CAAC;AAIjB,MAAM,mBAAmB,GAAG,CAAC,OAA2B,EAAE,QAAgB,EAAU,EAAE,CACpF,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC;KAC3E,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;KAC7E,IAAI,CAAC,IAAI,CAAC,CAAC;AAEhB,MAAM,aAAa,GAAG,CAAC,YAAgC,EAA6B,EAAE,CACpF,YAAY,KAAK,SAAS,IAAI,YAAY,IAAI,GAAG,IAAI,YAAY,GAAG,GAAG;IACrE,CAAC,CAAC,WAAW;IACb,CAAC,CAAC,WAAW,CAAC;AAElB,MAAM,yBAAyB,GAAG,CAAC,OAA2B,EAAW,EAAE,CACzE,OAAO,CAAC,YAAY,KAAK,SAAS,IAAI,OAAO,CAAC,YAAY,IAAI,GAAG,IAAI,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC;AAElG,MAAM,sBAAsB,GAAG,CAAC,OAA2B,EAAW,EAAE,CACtE,OAAO,KAAK,MAAM;IAClB,OAAO,KAAK,MAAM;IAClB,OAAO,KAAK,MAAM;IAClB,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI;IACrC,OAAO,KAAK,WAAW;IACvB,OAAO,KAAK,SAAS;IACrB,OAAO,KAAK,KAAK,CAAC;AAEpB,kFAAkF;AAClF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAAoB,EAAE;IACtE,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;IACnE,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;IAC5B,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACtD,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAC/D,OAAO;YACL,IAAI,EAAE,0BAA0B;YAChC,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE;SACtD,CAAC;IACJ,CAAC;IACD,IAAI,yBAAyB,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,OAAO;YACL,IAAI,EAAE,0BAA0B;YAChC,SAAS,EAAE;gBACT,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC;gBACzC,OAAO,EAAE,EAAE,MAAM,EAAE;aACpB;SACF,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO;YACL,IAAI,EAAE,0BAA0B;YAChC,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE;SACtD,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5E,OAAO;YACL,IAAI,EAAE,0BAA0B;YAChC,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE;SACtD,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,OAAgB,EAChB,IAAkB,EACK,EAAE,CAAC,CAAC;IAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,MAAM,EAAE,IAAI,CAAC,GAAG;IAChB,UAAU,EAAE,IAAI,CAAC,QAAQ;IACzB,GAAG,EAAE,EAAE,kBAAkB,EAAE,IAAI,CAAC,UAAU,EAAE;IAC5C,iBAAiB,EAAE,qBAAqB;IACxC,eAAe,EAAE,mBAAmB;IACpC,aAAa,EAAE,iBAAiB;IAChC,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC;QAC3B,CAAC,CAAC;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK;YACvC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS;YAClC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa;YAC1C,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa;SAC3C;QACH,CAAC,CAAC;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK;YACvC,IAAI,EAAE,OAAO,CAAC,QAAQ;SACvB;CACN,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,SAAiB,EAAU,EAAE,CAC3D,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC;AAE/F,MAAM,eAAe,GAAG,CAAC,KAAc,EAAsB,EAAE;IAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,MAA0B,EAAqB,EAAE,CAC/E,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;IACvB,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAgB,EAAc,EAAE;IAC9D,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,SAAS,GAAG,UAAU,CAAC,eAAe,CAAC,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhG,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACtB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC;oBACpC,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;oBACrD,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE;oBAC9D,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3B,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3B,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;oBAC7B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO;oBAChC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;oBAC9B,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,SAAS;oBAC3C,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,SAAS;oBACjD,iBAAiB,EAAE,IAAI;oBACvB,gBAAgB,EAAE,IAAI;iBACvB,CAAC,CAAC;gBACH,OAAO;oBACL,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE;wBACP,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,QAAQ,EAAE,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC;wBAC/C,QAAQ,EAAE,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC;wBAC/C,QAAQ,EAAE,IAAI,CAAC,QAAQ;qBACxB;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QACD,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE;KAC/B,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* APIS_BASE_URL := env APIS_BASE_URL
|
|
11
11
|
* | TOML [sdk].base_url
|
|
12
12
|
*
|
|
13
|
-
* SDK constraint
|
|
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/sdk/diskdClient.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* APIS_BASE_URL := env APIS_BASE_URL
|
|
11
11
|
* | TOML [sdk].base_url
|
|
12
12
|
*
|
|
13
|
-
* SDK constraint
|
|
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
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
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(
|
|
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", () =>
|
|
247
|
-
process.on("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) });
|
package/dist/server.js.map
CHANGED
|
@@ -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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"}
|