@diskd-ai/email-client-mcp 0.1.3 → 0.1.7
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 +11 -0
- package/dist/config/schema.js +1 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/imap/fetch.d.ts +15 -5
- package/dist/imap/fetch.js +70 -19
- package/dist/imap/fetch.js.map +1 -1
- package/dist/imap/oauth.d.ts +12 -0
- package/dist/imap/oauth.js +67 -0
- package/dist/imap/oauth.js.map +1 -0
- package/dist/imap/pool.d.ts +40 -6
- package/dist/imap/pool.js +118 -31
- package/dist/imap/pool.js.map +1 -1
- package/dist/sdk/diskdClient.js.map +1 -1
- package/dist/server.js +3 -1
- package/dist/server.js.map +1 -1
- package/dist/sync/watcher.js +8 -2
- package/dist/sync/watcher.js.map +1 -1
- package/dist/tools/getEmail.d.ts +2 -2
- package/dist/tools/getEmails.d.ts +2 -2
- package/package.json +6 -2
package/dist/config/schema.d.ts
CHANGED
|
@@ -58,6 +58,7 @@ declare const passwordAccountSchema: z.ZodObject<{
|
|
|
58
58
|
declare const oauthAccountSchema: z.ZodObject<{
|
|
59
59
|
name: z.ZodString;
|
|
60
60
|
email: z.ZodString;
|
|
61
|
+
username: z.ZodOptional<z.ZodString>;
|
|
61
62
|
full_name: z.ZodOptional<z.ZodString>;
|
|
62
63
|
oauth2: z.ZodObject<{
|
|
63
64
|
provider: z.ZodString;
|
|
@@ -106,6 +107,7 @@ declare const oauthAccountSchema: z.ZodObject<{
|
|
|
106
107
|
client_secret: string;
|
|
107
108
|
refresh_token: string;
|
|
108
109
|
};
|
|
110
|
+
username?: string | undefined;
|
|
109
111
|
full_name?: string | undefined;
|
|
110
112
|
}, {
|
|
111
113
|
name: string;
|
|
@@ -122,6 +124,7 @@ declare const oauthAccountSchema: z.ZodObject<{
|
|
|
122
124
|
client_secret: string;
|
|
123
125
|
refresh_token: string;
|
|
124
126
|
};
|
|
127
|
+
username?: string | undefined;
|
|
125
128
|
full_name?: string | undefined;
|
|
126
129
|
}>;
|
|
127
130
|
export declare const accountSchema: z.ZodUnion<[z.ZodObject<{
|
|
@@ -173,6 +176,7 @@ export declare const accountSchema: z.ZodUnion<[z.ZodObject<{
|
|
|
173
176
|
}>, z.ZodObject<{
|
|
174
177
|
name: z.ZodString;
|
|
175
178
|
email: z.ZodString;
|
|
179
|
+
username: z.ZodOptional<z.ZodString>;
|
|
176
180
|
full_name: z.ZodOptional<z.ZodString>;
|
|
177
181
|
oauth2: z.ZodObject<{
|
|
178
182
|
provider: z.ZodString;
|
|
@@ -221,6 +225,7 @@ export declare const accountSchema: z.ZodUnion<[z.ZodObject<{
|
|
|
221
225
|
client_secret: string;
|
|
222
226
|
refresh_token: string;
|
|
223
227
|
};
|
|
228
|
+
username?: string | undefined;
|
|
224
229
|
full_name?: string | undefined;
|
|
225
230
|
}, {
|
|
226
231
|
name: string;
|
|
@@ -237,6 +242,7 @@ export declare const accountSchema: z.ZodUnion<[z.ZodObject<{
|
|
|
237
242
|
client_secret: string;
|
|
238
243
|
refresh_token: string;
|
|
239
244
|
};
|
|
245
|
+
username?: string | undefined;
|
|
240
246
|
full_name?: string | undefined;
|
|
241
247
|
}>]>;
|
|
242
248
|
export type Account = z.infer<typeof accountSchema>;
|
|
@@ -328,6 +334,7 @@ export declare const configSchema: z.ZodObject<{
|
|
|
328
334
|
}>, z.ZodObject<{
|
|
329
335
|
name: z.ZodString;
|
|
330
336
|
email: z.ZodString;
|
|
337
|
+
username: z.ZodOptional<z.ZodString>;
|
|
331
338
|
full_name: z.ZodOptional<z.ZodString>;
|
|
332
339
|
oauth2: z.ZodObject<{
|
|
333
340
|
provider: z.ZodString;
|
|
@@ -376,6 +383,7 @@ export declare const configSchema: z.ZodObject<{
|
|
|
376
383
|
client_secret: string;
|
|
377
384
|
refresh_token: string;
|
|
378
385
|
};
|
|
386
|
+
username?: string | undefined;
|
|
379
387
|
full_name?: string | undefined;
|
|
380
388
|
}, {
|
|
381
389
|
name: string;
|
|
@@ -392,6 +400,7 @@ export declare const configSchema: z.ZodObject<{
|
|
|
392
400
|
client_secret: string;
|
|
393
401
|
refresh_token: string;
|
|
394
402
|
};
|
|
403
|
+
username?: string | undefined;
|
|
395
404
|
full_name?: string | undefined;
|
|
396
405
|
}>]>, "many">;
|
|
397
406
|
sdk: z.ZodOptional<z.ZodObject<{
|
|
@@ -451,6 +460,7 @@ export declare const configSchema: z.ZodObject<{
|
|
|
451
460
|
client_secret: string;
|
|
452
461
|
refresh_token: string;
|
|
453
462
|
};
|
|
463
|
+
username?: string | undefined;
|
|
454
464
|
full_name?: string | undefined;
|
|
455
465
|
})[];
|
|
456
466
|
watcher: {
|
|
@@ -492,6 +502,7 @@ export declare const configSchema: z.ZodObject<{
|
|
|
492
502
|
client_secret: string;
|
|
493
503
|
refresh_token: string;
|
|
494
504
|
};
|
|
505
|
+
username?: string | undefined;
|
|
495
506
|
full_name?: string | undefined;
|
|
496
507
|
})[];
|
|
497
508
|
sdk?: {
|
package/dist/config/schema.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/imap/fetch.d.ts
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* read tools (`get_email`, `get_emails`, `list_emails`). All helpers are
|
|
4
4
|
* BODY.PEEK by default so reads do not silently flip `\\Seen`.
|
|
5
5
|
*
|
|
6
|
-
* Body decoding strategy:
|
|
7
|
-
* `text/plain` and `text/html
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* Body decoding strategy: first fetch `BODYSTRUCTURE`, then request the
|
|
7
|
+
* concrete MIME part ids for `text/plain` and `text/html`. Never pass semantic
|
|
8
|
+
* names such as `html` to imapflow: some IMAP servers (OVH) reject
|
|
9
|
+
* `BODY.PEEK[HTML]` with `BAD Command Argument Error. 11`.
|
|
10
10
|
*/
|
|
11
11
|
import type { ImapFlow } from "imapflow";
|
|
12
12
|
import type { FetchedMessageLike } from "./mapper.js";
|
|
@@ -15,6 +15,15 @@ export type FolderStatusSnapshot = {
|
|
|
15
15
|
readonly uidNext: number;
|
|
16
16
|
readonly messages: number;
|
|
17
17
|
};
|
|
18
|
+
type BodyPartCandidate = {
|
|
19
|
+
readonly textPartId: string | null;
|
|
20
|
+
readonly htmlPartId: string | null;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Find concrete IMAP body part ids for display bodies.
|
|
24
|
+
* Attachments are skipped.
|
|
25
|
+
*/
|
|
26
|
+
export declare const findDisplayBodyPartIds: (bodyStructure: unknown) => BodyPartCandidate;
|
|
18
27
|
/**
|
|
19
28
|
* Run a callback under a per-folder IMAP lock. imapflow requires this
|
|
20
29
|
* for any FETCH/STORE/MOVE operation. The lock is released even if the
|
|
@@ -29,7 +38,7 @@ export type FetchedEnvelopeBundle = {
|
|
|
29
38
|
};
|
|
30
39
|
/**
|
|
31
40
|
* UID-range fetch for the watcher. Yields envelope + flags + bodyStructure
|
|
32
|
-
*
|
|
41
|
+
* plus display body parts without setting `\\Seen`.
|
|
33
42
|
*/
|
|
34
43
|
export declare function fetchUidRange(client: ImapFlow, fromUid: number, toUid: number): AsyncIterable<FetchedEnvelopeBundle>;
|
|
35
44
|
/**
|
|
@@ -42,3 +51,4 @@ export declare const fetchOneByUid: (client: ImapFlow, uid: number) => Promise<F
|
|
|
42
51
|
* watcher's flag-reconciliation pass (no body, no bodyStructure).
|
|
43
52
|
*/
|
|
44
53
|
export declare function fetchEnvelopesUidRange(client: ImapFlow, fromUid: number, toUid: number): AsyncIterable<FetchedMessageLike>;
|
|
54
|
+
export {};
|
package/dist/imap/fetch.js
CHANGED
|
@@ -3,12 +3,51 @@
|
|
|
3
3
|
* read tools (`get_email`, `get_emails`, `list_emails`). All helpers are
|
|
4
4
|
* BODY.PEEK by default so reads do not silently flip `\\Seen`.
|
|
5
5
|
*
|
|
6
|
-
* Body decoding strategy:
|
|
7
|
-
* `text/plain` and `text/html
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* Body decoding strategy: first fetch `BODYSTRUCTURE`, then request the
|
|
7
|
+
* concrete MIME part ids for `text/plain` and `text/html`. Never pass semantic
|
|
8
|
+
* names such as `html` to imapflow: some IMAP servers (OVH) reject
|
|
9
|
+
* `BODY.PEEK[HTML]` with `BAD Command Argument Error. 11`.
|
|
10
10
|
*/
|
|
11
|
-
const
|
|
11
|
+
const isAttachmentNode = (node) => node.disposition === "attachment" ||
|
|
12
|
+
(node.disposition === "inline" &&
|
|
13
|
+
Boolean(node.dispositionParameters?.filename ?? node.parameters?.name));
|
|
14
|
+
const fallbackSinglePartId = (type) => {
|
|
15
|
+
if (type === "text/plain" || type === "text/html")
|
|
16
|
+
return "1";
|
|
17
|
+
return null;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Find concrete IMAP body part ids for display bodies.
|
|
21
|
+
* Attachments are skipped.
|
|
22
|
+
*/
|
|
23
|
+
export const findDisplayBodyPartIds = (bodyStructure) => {
|
|
24
|
+
const result = {
|
|
25
|
+
textPartId: null,
|
|
26
|
+
htmlPartId: null,
|
|
27
|
+
};
|
|
28
|
+
const visit = (raw) => {
|
|
29
|
+
if (result.textPartId && result.htmlPartId)
|
|
30
|
+
return;
|
|
31
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw))
|
|
32
|
+
return;
|
|
33
|
+
const node = raw;
|
|
34
|
+
if (isAttachmentNode(node))
|
|
35
|
+
return;
|
|
36
|
+
const type = node.type?.toLowerCase();
|
|
37
|
+
const partId = node.part ?? fallbackSinglePartId(type);
|
|
38
|
+
if (type === "text/plain" && partId && !result.textPartId) {
|
|
39
|
+
result.textPartId = partId;
|
|
40
|
+
}
|
|
41
|
+
else if (type === "text/html" && partId && !result.htmlPartId) {
|
|
42
|
+
result.htmlPartId = partId;
|
|
43
|
+
}
|
|
44
|
+
for (const child of node.childNodes ?? []) {
|
|
45
|
+
visit(child);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
visit(bodyStructure);
|
|
49
|
+
return result;
|
|
50
|
+
};
|
|
12
51
|
/**
|
|
13
52
|
* Run a callback under a per-folder IMAP lock. imapflow requires this
|
|
14
53
|
* for any FETCH/STORE/MOVE operation. The lock is released even if the
|
|
@@ -42,13 +81,21 @@ const decodeBuffer = (b) => {
|
|
|
42
81
|
return null;
|
|
43
82
|
return b.toString("utf8");
|
|
44
83
|
};
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
84
|
+
const fetchDisplayBodies = async (client, uid, bodyStructure) => {
|
|
85
|
+
const { textPartId, htmlPartId } = findDisplayBodyPartIds(bodyStructure);
|
|
86
|
+
const partIds = [...new Set([textPartId, htmlPartId].filter((id) => id !== null))];
|
|
87
|
+
if (partIds.length === 0) {
|
|
88
|
+
return { bodyText: null, bodyHtml: null };
|
|
89
|
+
}
|
|
90
|
+
const bodyMsg = await client.fetchOne(String(uid), {
|
|
91
|
+
uid: true,
|
|
92
|
+
bodyParts: partIds,
|
|
93
|
+
}, { uid: true });
|
|
94
|
+
const bodyParts = bodyMsg === false ? undefined : bodyMsg.bodyParts;
|
|
95
|
+
return {
|
|
96
|
+
bodyText: textPartId ? decodeBuffer(bodyParts?.get(textPartId)) : null,
|
|
97
|
+
bodyHtml: htmlPartId ? decodeBuffer(bodyParts?.get(htmlPartId)) : null,
|
|
98
|
+
};
|
|
52
99
|
};
|
|
53
100
|
const toInternalDate = (raw) => {
|
|
54
101
|
if (raw instanceof Date)
|
|
@@ -68,22 +115,26 @@ const toLike = (msg) => ({
|
|
|
68
115
|
});
|
|
69
116
|
/**
|
|
70
117
|
* UID-range fetch for the watcher. Yields envelope + flags + bodyStructure
|
|
71
|
-
*
|
|
118
|
+
* plus display body parts without setting `\\Seen`.
|
|
72
119
|
*/
|
|
73
120
|
export async function* fetchUidRange(client, fromUid, toUid) {
|
|
74
121
|
const range = `${fromUid}:${toUid}`;
|
|
122
|
+
const messages = [];
|
|
75
123
|
for await (const msg of client.fetch(range, {
|
|
76
124
|
uid: true,
|
|
77
125
|
flags: true,
|
|
78
126
|
envelope: true,
|
|
79
127
|
bodyStructure: true,
|
|
80
|
-
bodyParts: BODY_PARTS,
|
|
81
128
|
internalDate: true,
|
|
82
129
|
}, { uid: true })) {
|
|
130
|
+
messages.push(msg);
|
|
131
|
+
}
|
|
132
|
+
for (const msg of messages) {
|
|
133
|
+
const bodies = await fetchDisplayBodies(client, msg.uid, msg.bodyStructure);
|
|
83
134
|
yield {
|
|
84
135
|
imapMessage: toLike(msg),
|
|
85
|
-
bodyText:
|
|
86
|
-
bodyHtml:
|
|
136
|
+
bodyText: bodies.bodyText,
|
|
137
|
+
bodyHtml: bodies.bodyHtml,
|
|
87
138
|
};
|
|
88
139
|
}
|
|
89
140
|
}
|
|
@@ -97,15 +148,15 @@ export const fetchOneByUid = async (client, uid) => {
|
|
|
97
148
|
flags: true,
|
|
98
149
|
envelope: true,
|
|
99
150
|
bodyStructure: true,
|
|
100
|
-
bodyParts: BODY_PARTS,
|
|
101
151
|
internalDate: true,
|
|
102
152
|
}, { uid: true });
|
|
103
153
|
if (!msg)
|
|
104
154
|
return null;
|
|
155
|
+
const bodies = await fetchDisplayBodies(client, msg.uid, msg.bodyStructure);
|
|
105
156
|
return {
|
|
106
157
|
imapMessage: toLike(msg),
|
|
107
|
-
bodyText:
|
|
108
|
-
bodyHtml:
|
|
158
|
+
bodyText: bodies.bodyText,
|
|
159
|
+
bodyHtml: bodies.bodyHtml,
|
|
109
160
|
};
|
|
110
161
|
};
|
|
111
162
|
/**
|
package/dist/imap/fetch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/imap/fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/imap/fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth2 access-token exchange for IMAP XOAUTH2.
|
|
3
|
+
*
|
|
4
|
+
* Gmail and Microsoft IMAP do not accept refresh tokens as IMAP
|
|
5
|
+
* credentials. The refresh token must first be exchanged for a
|
|
6
|
+
* short-lived access token, then passed to ImapFlow as `accessToken`.
|
|
7
|
+
*/
|
|
8
|
+
import type { OAuthAccount } from "../config/schema.js";
|
|
9
|
+
import { type ImapError } from "../domain/errors.js";
|
|
10
|
+
import { type Result } from "../domain/result.js";
|
|
11
|
+
export type OAuthTokenFetcher = (account: OAuthAccount) => Promise<Result<ImapError, string>>;
|
|
12
|
+
export declare const refreshOAuthAccessToken: OAuthTokenFetcher;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth2 access-token exchange for IMAP XOAUTH2.
|
|
3
|
+
*
|
|
4
|
+
* Gmail and Microsoft IMAP do not accept refresh tokens as IMAP
|
|
5
|
+
* credentials. The refresh token must first be exchanged for a
|
|
6
|
+
* short-lived access token, then passed to ImapFlow as `accessToken`.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
import { imapError } from "../domain/errors.js";
|
|
10
|
+
import { Err, Ok } from "../domain/result.js";
|
|
11
|
+
const tokenResponseSchema = z.object({
|
|
12
|
+
access_token: z.string().min(1),
|
|
13
|
+
});
|
|
14
|
+
const tokenUrlForProvider = (provider) => {
|
|
15
|
+
switch (provider) {
|
|
16
|
+
case "google":
|
|
17
|
+
return Ok("https://oauth2.googleapis.com/token");
|
|
18
|
+
case "microsoft":
|
|
19
|
+
return Ok("https://login.microsoftonline.com/common/oauth2/v2.0/token");
|
|
20
|
+
default:
|
|
21
|
+
return Err(imapError("oauth", `unsupported oauth2 provider: ${provider}`));
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
export const refreshOAuthAccessToken = async (account) => {
|
|
25
|
+
const tokenUrl = tokenUrlForProvider(account.oauth2.provider);
|
|
26
|
+
if (tokenUrl.tag === "Err") {
|
|
27
|
+
return Err(imapError(account.name, tokenUrl.error.message, tokenUrl.error));
|
|
28
|
+
}
|
|
29
|
+
const body = new URLSearchParams({
|
|
30
|
+
grant_type: "refresh_token",
|
|
31
|
+
client_id: account.oauth2.client_id,
|
|
32
|
+
client_secret: account.oauth2.client_secret,
|
|
33
|
+
refresh_token: account.oauth2.refresh_token,
|
|
34
|
+
});
|
|
35
|
+
let response;
|
|
36
|
+
try {
|
|
37
|
+
response = await fetch(tokenUrl.value, {
|
|
38
|
+
method: "POST",
|
|
39
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
40
|
+
body: body.toString(),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
catch (cause) {
|
|
44
|
+
return Err(imapError(account.name, "oauth2 token refresh request failed", cause));
|
|
45
|
+
}
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
let text = "";
|
|
48
|
+
try {
|
|
49
|
+
text = await response.text();
|
|
50
|
+
}
|
|
51
|
+
catch (cause) {
|
|
52
|
+
return Err(imapError(account.name, "oauth2 token refresh failed and body read failed", cause));
|
|
53
|
+
}
|
|
54
|
+
return Err(imapError(account.name, `oauth2 token refresh failed (${response.status}): ${text}`));
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const parsed = tokenResponseSchema.safeParse(await response.json());
|
|
58
|
+
if (!parsed.success) {
|
|
59
|
+
return Err(imapError(account.name, "oauth2 token refresh response missing access_token"));
|
|
60
|
+
}
|
|
61
|
+
return Ok(parsed.data.access_token);
|
|
62
|
+
}
|
|
63
|
+
catch (cause) {
|
|
64
|
+
return Err(imapError(account.name, "oauth2 token refresh response parse failed", cause));
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/imap/oauth.ts"],"names":[],"mappings":"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"}
|
package/dist/imap/pool.d.ts
CHANGED
|
@@ -8,19 +8,53 @@
|
|
|
8
8
|
* can share one socket without races.
|
|
9
9
|
* - On a connection that has dropped (`usable === false`), the next
|
|
10
10
|
* `forAccount(...)` call rebuilds it.
|
|
11
|
-
* -
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
11
|
+
* - Every `ImapFlow` client has an `error` listener. Socket timeouts
|
|
12
|
+
* evict only that account's client and throttle reconnect by 30s
|
|
13
|
+
* instead of becoming an unhandled process-level event.
|
|
14
|
+
* - OAuth refresh: Gmail/Microsoft refresh tokens are exchanged for
|
|
15
|
+
* short-lived access tokens before ImapFlow receives XOAUTH2 auth.
|
|
16
16
|
*/
|
|
17
17
|
import { ImapFlow } from "imapflow";
|
|
18
18
|
import { type Account } from "../config/schema.js";
|
|
19
19
|
import { type ImapError } from "../domain/errors.js";
|
|
20
20
|
import { type Result } from "../domain/result.js";
|
|
21
|
+
import { type OAuthTokenFetcher } from "./oauth.js";
|
|
22
|
+
export type ImapPoolEvent = {
|
|
23
|
+
readonly kind: "clientError";
|
|
24
|
+
readonly accountId: string;
|
|
25
|
+
readonly message: string;
|
|
26
|
+
readonly reconnectDelayMs: number;
|
|
27
|
+
} | {
|
|
28
|
+
readonly kind: "clientClosed";
|
|
29
|
+
readonly accountId: string;
|
|
30
|
+
} | {
|
|
31
|
+
readonly kind: "closeError";
|
|
32
|
+
readonly accountId: string;
|
|
33
|
+
readonly phase: "evict" | "shutdown";
|
|
34
|
+
readonly message: string;
|
|
35
|
+
} | {
|
|
36
|
+
readonly kind: "reconnectDelayed";
|
|
37
|
+
readonly accountId: string;
|
|
38
|
+
readonly delayMs: number;
|
|
39
|
+
};
|
|
40
|
+
export type ImapPoolOptions = {
|
|
41
|
+
readonly reconnectDelayMs?: number;
|
|
42
|
+
readonly nowMs?: () => number;
|
|
43
|
+
readonly sleep?: (delayMs: number) => Promise<void>;
|
|
44
|
+
readonly onEvent?: (event: ImapPoolEvent) => void;
|
|
45
|
+
readonly fetchOAuthToken?: OAuthTokenFetcher;
|
|
46
|
+
readonly createClient?: (account: Account, auth: ImapAuth) => ImapFlow;
|
|
47
|
+
};
|
|
21
48
|
export type ImapPool = {
|
|
22
49
|
readonly forAccount: (accountId: string) => Promise<Result<ImapError, ImapFlow>>;
|
|
23
50
|
readonly closeAll: () => Promise<void>;
|
|
24
51
|
readonly accountIds: readonly string[];
|
|
25
52
|
};
|
|
26
|
-
export
|
|
53
|
+
export type ImapAuth = {
|
|
54
|
+
readonly user: string;
|
|
55
|
+
readonly pass: string;
|
|
56
|
+
} | {
|
|
57
|
+
readonly user: string;
|
|
58
|
+
readonly accessToken: string;
|
|
59
|
+
};
|
|
60
|
+
export declare const buildImapPool: (accounts: readonly Account[], options?: ImapPoolOptions) => ImapPool;
|
package/dist/imap/pool.js
CHANGED
|
@@ -8,27 +8,26 @@
|
|
|
8
8
|
* can share one socket without races.
|
|
9
9
|
* - On a connection that has dropped (`usable === false`), the next
|
|
10
10
|
* `forAccount(...)` call rebuilds it.
|
|
11
|
-
* -
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
11
|
+
* - Every `ImapFlow` client has an `error` listener. Socket timeouts
|
|
12
|
+
* evict only that account's client and throttle reconnect by 30s
|
|
13
|
+
* instead of becoming an unhandled process-level event.
|
|
14
|
+
* - OAuth refresh: Gmail/Microsoft refresh tokens are exchanged for
|
|
15
|
+
* short-lived access tokens before ImapFlow receives XOAUTH2 auth.
|
|
16
16
|
*/
|
|
17
17
|
import { ImapFlow } from "imapflow";
|
|
18
18
|
import { isOAuthAccount } from "../config/schema.js";
|
|
19
19
|
import { imapError } from "../domain/errors.js";
|
|
20
20
|
import { Err, Ok } from "../domain/result.js";
|
|
21
|
-
|
|
21
|
+
import { refreshOAuthAccessToken } from "./oauth.js";
|
|
22
|
+
const DEFAULT_RECONNECT_DELAY_MS = 30_000;
|
|
23
|
+
const buildClient = (acct, auth) => {
|
|
22
24
|
if (isOAuthAccount(acct)) {
|
|
23
25
|
return new ImapFlow({
|
|
24
26
|
host: acct.imap.host,
|
|
25
27
|
port: acct.imap.port,
|
|
26
28
|
secure: acct.imap.tls,
|
|
27
29
|
tls: { rejectUnauthorized: acct.imap.verify_ssl },
|
|
28
|
-
auth
|
|
29
|
-
user: acct.email,
|
|
30
|
-
accessToken: acct.oauth2.refresh_token,
|
|
31
|
-
},
|
|
30
|
+
auth,
|
|
32
31
|
logger: false,
|
|
33
32
|
});
|
|
34
33
|
}
|
|
@@ -37,55 +36,143 @@ const buildClient = (acct) => {
|
|
|
37
36
|
port: acct.imap.port,
|
|
38
37
|
secure: acct.imap.tls,
|
|
39
38
|
tls: { rejectUnauthorized: acct.imap.verify_ssl },
|
|
40
|
-
auth
|
|
41
|
-
user: acct.username ?? acct.email,
|
|
42
|
-
pass: acct.password,
|
|
43
|
-
},
|
|
39
|
+
auth,
|
|
44
40
|
logger: false,
|
|
45
41
|
});
|
|
46
42
|
};
|
|
47
|
-
|
|
43
|
+
const toErrorMessage = (cause) => cause instanceof Error ? cause.message : String(cause);
|
|
44
|
+
const defaultSleep = (delayMs) => new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
45
|
+
const resolveAuth = async (acct, fetchOAuthToken) => {
|
|
46
|
+
if (!isOAuthAccount(acct)) {
|
|
47
|
+
return Ok({ user: acct.username ?? acct.email, pass: acct.password });
|
|
48
|
+
}
|
|
49
|
+
const token = await fetchOAuthToken(acct);
|
|
50
|
+
if (token.tag === "Err")
|
|
51
|
+
return token;
|
|
52
|
+
return Ok({ user: acct.username ?? acct.email, accessToken: token.value });
|
|
53
|
+
};
|
|
54
|
+
export const buildImapPool = (accounts, options = {}) => {
|
|
55
|
+
const reconnectDelayMs = options.reconnectDelayMs ?? DEFAULT_RECONNECT_DELAY_MS;
|
|
56
|
+
const nowMs = options.nowMs ?? (() => Date.now());
|
|
57
|
+
const sleep = options.sleep ?? defaultSleep;
|
|
58
|
+
const createClient = options.createClient ?? buildClient;
|
|
59
|
+
const fetchOAuthToken = options.fetchOAuthToken ?? refreshOAuthAccessToken;
|
|
48
60
|
const byId = new Map();
|
|
49
61
|
for (const a of accounts)
|
|
50
62
|
byId.set(a.name, a);
|
|
51
63
|
const liveById = new Map();
|
|
64
|
+
const reconnectAfterById = new Map();
|
|
65
|
+
const connectingById = new Map();
|
|
66
|
+
const emitEvent = (event) => {
|
|
67
|
+
options.onEvent?.(event);
|
|
68
|
+
};
|
|
69
|
+
const delayReconnect = (accountId) => {
|
|
70
|
+
reconnectAfterById.set(accountId, nowMs() + reconnectDelayMs);
|
|
71
|
+
};
|
|
72
|
+
const waitForReconnectWindow = async (accountId) => {
|
|
73
|
+
const reconnectAfter = reconnectAfterById.get(accountId);
|
|
74
|
+
if (reconnectAfter === undefined)
|
|
75
|
+
return;
|
|
76
|
+
const delayMs = reconnectAfter - nowMs();
|
|
77
|
+
if (delayMs <= 0) {
|
|
78
|
+
reconnectAfterById.delete(accountId);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
emitEvent({ kind: "reconnectDelayed", accountId, delayMs });
|
|
82
|
+
await sleep(delayMs);
|
|
83
|
+
if (reconnectAfterById.get(accountId) === reconnectAfter) {
|
|
84
|
+
reconnectAfterById.delete(accountId);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
const closeClient = (accountId, client, phase) => {
|
|
88
|
+
try {
|
|
89
|
+
client.close();
|
|
90
|
+
}
|
|
91
|
+
catch (cause) {
|
|
92
|
+
emitEvent({ kind: "closeError", accountId, phase, message: toErrorMessage(cause) });
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
const attachLifecycleHandlers = (accountId, client) => {
|
|
96
|
+
client.on("error", (error) => {
|
|
97
|
+
if (liveById.get(accountId) === client)
|
|
98
|
+
liveById.delete(accountId);
|
|
99
|
+
delayReconnect(accountId);
|
|
100
|
+
emitEvent({
|
|
101
|
+
kind: "clientError",
|
|
102
|
+
accountId,
|
|
103
|
+
message: toErrorMessage(error),
|
|
104
|
+
reconnectDelayMs,
|
|
105
|
+
});
|
|
106
|
+
closeClient(accountId, client, "evict");
|
|
107
|
+
});
|
|
108
|
+
client.on("close", () => {
|
|
109
|
+
if (liveById.get(accountId) === client)
|
|
110
|
+
liveById.delete(accountId);
|
|
111
|
+
emitEvent({ kind: "clientClosed", accountId });
|
|
112
|
+
});
|
|
113
|
+
};
|
|
52
114
|
const forAccount = async (accountId) => {
|
|
53
115
|
const acct = byId.get(accountId);
|
|
54
116
|
if (!acct)
|
|
55
117
|
return Err(imapError(accountId, "unknown account id"));
|
|
56
118
|
const cached = liveById.get(accountId);
|
|
57
|
-
if (cached
|
|
119
|
+
if (cached?.usable)
|
|
58
120
|
return Ok(cached);
|
|
59
121
|
if (cached && !cached.usable) {
|
|
122
|
+
liveById.delete(accountId);
|
|
123
|
+
closeClient(accountId, cached, "evict");
|
|
124
|
+
}
|
|
125
|
+
const connecting = connectingById.get(accountId);
|
|
126
|
+
if (connecting !== undefined)
|
|
127
|
+
return await connecting;
|
|
128
|
+
const connectFresh = async () => {
|
|
129
|
+
await waitForReconnectWindow(accountId);
|
|
130
|
+
const auth = await resolveAuth(acct, fetchOAuthToken);
|
|
131
|
+
if (auth.tag === "Err") {
|
|
132
|
+
delayReconnect(accountId);
|
|
133
|
+
return auth;
|
|
134
|
+
}
|
|
135
|
+
const client = createClient(acct, auth.value);
|
|
136
|
+
attachLifecycleHandlers(accountId, client);
|
|
60
137
|
try {
|
|
61
|
-
await
|
|
138
|
+
await client.connect();
|
|
62
139
|
}
|
|
63
|
-
catch {
|
|
64
|
-
|
|
140
|
+
catch (cause) {
|
|
141
|
+
delayReconnect(accountId);
|
|
142
|
+
closeClient(accountId, client, "evict");
|
|
143
|
+
return Err(imapError(accountId, `connect failed: ${toErrorMessage(cause)}`, cause));
|
|
65
144
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
145
|
+
reconnectAfterById.delete(accountId);
|
|
146
|
+
liveById.set(accountId, client);
|
|
147
|
+
return Ok(client);
|
|
148
|
+
};
|
|
149
|
+
const pending = connectFresh();
|
|
150
|
+
connectingById.set(accountId, pending);
|
|
69
151
|
try {
|
|
70
|
-
await
|
|
152
|
+
return await pending;
|
|
71
153
|
}
|
|
72
|
-
|
|
73
|
-
|
|
154
|
+
finally {
|
|
155
|
+
connectingById.delete(accountId);
|
|
74
156
|
}
|
|
75
|
-
liveById.set(accountId, client);
|
|
76
|
-
return Ok(client);
|
|
77
157
|
};
|
|
78
158
|
const closeAll = async () => {
|
|
79
|
-
const closes = Array.from(liveById.
|
|
159
|
+
const closes = Array.from(liveById.entries()).map(async ([accountId, client]) => {
|
|
80
160
|
try {
|
|
81
|
-
await
|
|
161
|
+
await client.logout();
|
|
82
162
|
}
|
|
83
|
-
catch {
|
|
84
|
-
|
|
163
|
+
catch (cause) {
|
|
164
|
+
emitEvent({
|
|
165
|
+
kind: "closeError",
|
|
166
|
+
accountId,
|
|
167
|
+
phase: "shutdown",
|
|
168
|
+
message: toErrorMessage(cause),
|
|
169
|
+
});
|
|
170
|
+
closeClient(accountId, client, "shutdown");
|
|
85
171
|
}
|
|
86
172
|
});
|
|
87
173
|
await Promise.all(closes);
|
|
88
174
|
liveById.clear();
|
|
175
|
+
reconnectAfterById.clear();
|
|
89
176
|
};
|
|
90
177
|
return { forAccount, closeAll, accountIds: Array.from(byId.keys()) };
|
|
91
178
|
};
|
package/dist/imap/pool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../../src/imap/pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAgB,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAkB,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../../src/imap/pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diskdClient.js","sourceRoot":"","sources":["../../src/sdk/diskdClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAoB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAO3D,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,KAAa,EAAQ,EAAE;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC3B,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,GAAW,EAAsB,EAAE;IAClD,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,WAAoC,EACpC,cAAkC,EACC,EAAE;IACrC,gEAAgE;IAChE,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"diskdClient.js","sourceRoot":"","sources":["../../src/sdk/diskdClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAoB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAO3D,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,KAAa,EAAQ,EAAE;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC3B,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,GAAW,EAAsB,EAAE;IAClD,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,WAAoC,EACpC,cAAkC,EACC,EAAE;IACrC,gEAAgE;IAChE,MAAM,WAAW,GAAG,WAAW,EAAE,YAAY,IAAI,OAAO,CAAC,mBAAmB,CAAC,IAAI,cAAc,CAAC;IAChG,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,GAAG,CACR,WAAW,CACT,+IAA+I,CAChJ,CACF,CAAC;IACJ,CAAC;IAED,gEAAgE;IAChE,4CAA4C;IAC5C,IAAI,WAAW,EAAE,OAAO;QAAE,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACzE,IAAI,WAAW,EAAE,QAAQ;QAAE,SAAS,CAAC,eAAe,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAE5E,IAAI,OAAO,CAAC,eAAe,CAAC,KAAK,SAAS,EAAE,CAAC;QAC3C,OAAO,GAAG,CACR,WAAW,CACT,8FAA8F,CAC/F,CACF,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,CAAC,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,GAAG,CACR,WAAW,CACT,4FAA4F,CAC7F,CACF,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;AAC5C,CAAC,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -56,7 +56,9 @@ const main = async () => {
|
|
|
56
56
|
}
|
|
57
57
|
log("sdk ready", { workspaceId: diskd.value.workspaceId });
|
|
58
58
|
const driveStore = buildDriveStore(diskd.value.messagesStore);
|
|
59
|
-
const pool = buildImapPool(cfg.value.accounts
|
|
59
|
+
const pool = buildImapPool(cfg.value.accounts, {
|
|
60
|
+
onEvent: (event) => log("imap.pool-event", event),
|
|
61
|
+
});
|
|
60
62
|
const syncDeps = {
|
|
61
63
|
drive: driveStore,
|
|
62
64
|
imap: {
|
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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"}
|
package/dist/sync/watcher.js
CHANGED
|
@@ -44,6 +44,12 @@ export const buildWatcher = (deps, accounts, watcher, log) => {
|
|
|
44
44
|
}
|
|
45
45
|
let timer = null;
|
|
46
46
|
let stopped = false;
|
|
47
|
+
const runTick = () => {
|
|
48
|
+
void tick().catch((cause) => {
|
|
49
|
+
const msg = cause?.message ?? String(cause);
|
|
50
|
+
log("watcher.tick-unhandled", { error: msg });
|
|
51
|
+
});
|
|
52
|
+
};
|
|
47
53
|
const runForAccount = async (acct) => {
|
|
48
54
|
const existing = inFlight.get(acct.name);
|
|
49
55
|
if (existing !== undefined) {
|
|
@@ -108,9 +114,9 @@ export const buildWatcher = (deps, accounts, watcher, log) => {
|
|
|
108
114
|
}
|
|
109
115
|
log("watcher.start", { intervalMs, accounts: accounts.map((a) => a.name) });
|
|
110
116
|
// Fire one tick immediately on boot so first sync does not wait a full interval.
|
|
111
|
-
|
|
117
|
+
runTick();
|
|
112
118
|
timer = setInterval(() => {
|
|
113
|
-
|
|
119
|
+
runTick();
|
|
114
120
|
}, intervalMs);
|
|
115
121
|
};
|
|
116
122
|
const stop = async () => {
|
package/dist/sync/watcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/sync/watcher.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/sync/watcher.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/getEmail.d.ts
CHANGED
|
@@ -21,14 +21,14 @@ export declare const getEmailInput: z.ZodObject<{
|
|
|
21
21
|
uid: number;
|
|
22
22
|
mailbox: string;
|
|
23
23
|
account: string;
|
|
24
|
-
format: "
|
|
24
|
+
format: "raw" | "text" | "stripped";
|
|
25
25
|
markRead: boolean;
|
|
26
26
|
maxLength?: number | undefined;
|
|
27
27
|
}, {
|
|
28
28
|
uid: number;
|
|
29
29
|
mailbox: string;
|
|
30
30
|
account: string;
|
|
31
|
-
format?: "
|
|
31
|
+
format?: "raw" | "text" | "stripped" | undefined;
|
|
32
32
|
maxLength?: number | undefined;
|
|
33
33
|
markRead?: boolean | undefined;
|
|
34
34
|
}>;
|
|
@@ -17,13 +17,13 @@ export declare const getEmailsInput: z.ZodObject<{
|
|
|
17
17
|
mailbox: string;
|
|
18
18
|
account: string;
|
|
19
19
|
uids: number[];
|
|
20
|
-
format: "
|
|
20
|
+
format: "raw" | "text" | "stripped";
|
|
21
21
|
maxLength?: number | undefined;
|
|
22
22
|
}, {
|
|
23
23
|
mailbox: string;
|
|
24
24
|
account: string;
|
|
25
25
|
uids: number[];
|
|
26
|
-
format?: "
|
|
26
|
+
format?: "raw" | "text" | "stripped" | undefined;
|
|
27
27
|
maxLength?: number | undefined;
|
|
28
28
|
}>;
|
|
29
29
|
export type GetEmailsInput = z.infer<typeof getEmailsInput>;
|
package/package.json
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@diskd-ai/email-client-mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "Drive-backed multi-account email MCP with reliable IMAP-to-mailboxes sync.",
|
|
5
5
|
"license": "LGPL-3.0-or-later",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/diskd-ai/email-client-mcp"
|
|
9
|
+
},
|
|
6
10
|
"type": "module",
|
|
7
11
|
"bin": {
|
|
8
|
-
"email-client-mcp": "
|
|
12
|
+
"email-client-mcp": "dist/server.js"
|
|
9
13
|
},
|
|
10
14
|
"main": "./dist/server.js",
|
|
11
15
|
"files": [
|