@diskd-ai/email-client-mcp 0.1.2 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/schema.d.ts +33 -16
- package/dist/config/schema.js +9 -2
- package/dist/config/schema.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.d.ts +13 -8
- package/dist/sdk/diskdClient.js +29 -15
- 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/package.json +2 -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>;
|
|
@@ -259,16 +265,22 @@ declare const watcherSchema: z.ZodObject<{
|
|
|
259
265
|
folders?: string[] | undefined;
|
|
260
266
|
flag_reconcile_window?: number | undefined;
|
|
261
267
|
}>;
|
|
268
|
+
/**
|
|
269
|
+
* Optional [sdk] block. The SDK's `APIS_API_KEY` / `APIS_BASE_URL` /
|
|
270
|
+
* `APIS_WORKSPACE_ID` come from the spawned-pod env (injected by
|
|
271
|
+
* mcp-hub k8s-gateway) on real deployments; the TOML overrides are
|
|
272
|
+
* only useful for local development or unusual setups.
|
|
273
|
+
*/
|
|
262
274
|
declare const sdkSchema: z.ZodObject<{
|
|
263
|
-
api_key: z.ZodString
|
|
275
|
+
api_key: z.ZodOptional<z.ZodString>;
|
|
264
276
|
base_url: z.ZodOptional<z.ZodString>;
|
|
265
277
|
workspace_id: z.ZodOptional<z.ZodString>;
|
|
266
278
|
}, "strip", z.ZodTypeAny, {
|
|
267
|
-
api_key
|
|
279
|
+
api_key?: string | undefined;
|
|
268
280
|
base_url?: string | undefined;
|
|
269
281
|
workspace_id?: string | undefined;
|
|
270
282
|
}, {
|
|
271
|
-
api_key
|
|
283
|
+
api_key?: string | undefined;
|
|
272
284
|
base_url?: string | undefined;
|
|
273
285
|
workspace_id?: string | undefined;
|
|
274
286
|
}>;
|
|
@@ -322,6 +334,7 @@ export declare const configSchema: z.ZodObject<{
|
|
|
322
334
|
}>, z.ZodObject<{
|
|
323
335
|
name: z.ZodString;
|
|
324
336
|
email: z.ZodString;
|
|
337
|
+
username: z.ZodOptional<z.ZodString>;
|
|
325
338
|
full_name: z.ZodOptional<z.ZodString>;
|
|
326
339
|
oauth2: z.ZodObject<{
|
|
327
340
|
provider: z.ZodString;
|
|
@@ -370,6 +383,7 @@ export declare const configSchema: z.ZodObject<{
|
|
|
370
383
|
client_secret: string;
|
|
371
384
|
refresh_token: string;
|
|
372
385
|
};
|
|
386
|
+
username?: string | undefined;
|
|
373
387
|
full_name?: string | undefined;
|
|
374
388
|
}, {
|
|
375
389
|
name: string;
|
|
@@ -386,21 +400,22 @@ export declare const configSchema: z.ZodObject<{
|
|
|
386
400
|
client_secret: string;
|
|
387
401
|
refresh_token: string;
|
|
388
402
|
};
|
|
403
|
+
username?: string | undefined;
|
|
389
404
|
full_name?: string | undefined;
|
|
390
405
|
}>]>, "many">;
|
|
391
|
-
sdk: z.ZodObject<{
|
|
392
|
-
api_key: z.ZodString
|
|
406
|
+
sdk: z.ZodOptional<z.ZodObject<{
|
|
407
|
+
api_key: z.ZodOptional<z.ZodString>;
|
|
393
408
|
base_url: z.ZodOptional<z.ZodString>;
|
|
394
409
|
workspace_id: z.ZodOptional<z.ZodString>;
|
|
395
410
|
}, "strip", z.ZodTypeAny, {
|
|
396
|
-
api_key
|
|
411
|
+
api_key?: string | undefined;
|
|
397
412
|
base_url?: string | undefined;
|
|
398
413
|
workspace_id?: string | undefined;
|
|
399
414
|
}, {
|
|
400
|
-
api_key
|
|
415
|
+
api_key?: string | undefined;
|
|
401
416
|
base_url?: string | undefined;
|
|
402
417
|
workspace_id?: string | undefined;
|
|
403
|
-
}
|
|
418
|
+
}>>;
|
|
404
419
|
watcher: z.ZodDefault<z.ZodObject<{
|
|
405
420
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
406
421
|
interval_ms: z.ZodDefault<z.ZodNumber>;
|
|
@@ -445,19 +460,20 @@ export declare const configSchema: z.ZodObject<{
|
|
|
445
460
|
client_secret: string;
|
|
446
461
|
refresh_token: string;
|
|
447
462
|
};
|
|
463
|
+
username?: string | undefined;
|
|
448
464
|
full_name?: string | undefined;
|
|
449
465
|
})[];
|
|
450
|
-
sdk: {
|
|
451
|
-
api_key: string;
|
|
452
|
-
base_url?: string | undefined;
|
|
453
|
-
workspace_id?: string | undefined;
|
|
454
|
-
};
|
|
455
466
|
watcher: {
|
|
456
467
|
enabled: boolean;
|
|
457
468
|
interval_ms: number;
|
|
458
469
|
flag_reconcile_window: number;
|
|
459
470
|
folders?: string[] | undefined;
|
|
460
471
|
};
|
|
472
|
+
sdk?: {
|
|
473
|
+
api_key?: string | undefined;
|
|
474
|
+
base_url?: string | undefined;
|
|
475
|
+
workspace_id?: string | undefined;
|
|
476
|
+
} | undefined;
|
|
461
477
|
}, {
|
|
462
478
|
accounts: ({
|
|
463
479
|
name: string;
|
|
@@ -486,13 +502,14 @@ export declare const configSchema: z.ZodObject<{
|
|
|
486
502
|
client_secret: string;
|
|
487
503
|
refresh_token: string;
|
|
488
504
|
};
|
|
505
|
+
username?: string | undefined;
|
|
489
506
|
full_name?: string | undefined;
|
|
490
507
|
})[];
|
|
491
|
-
sdk
|
|
492
|
-
api_key
|
|
508
|
+
sdk?: {
|
|
509
|
+
api_key?: string | undefined;
|
|
493
510
|
base_url?: string | undefined;
|
|
494
511
|
workspace_id?: string | undefined;
|
|
495
|
-
};
|
|
512
|
+
} | undefined;
|
|
496
513
|
watcher?: {
|
|
497
514
|
enabled?: boolean | undefined;
|
|
498
515
|
interval_ms?: number | undefined;
|
package/dist/config/schema.js
CHANGED
|
@@ -31,6 +31,7 @@ const oauth2Schema = z.object({
|
|
|
31
31
|
const oauthAccountSchema = z.object({
|
|
32
32
|
name: z.string().min(1),
|
|
33
33
|
email: z.string().min(1),
|
|
34
|
+
username: z.string().optional(),
|
|
34
35
|
full_name: z.string().optional(),
|
|
35
36
|
oauth2: oauth2Schema,
|
|
36
37
|
imap: imapSchema,
|
|
@@ -43,14 +44,20 @@ const watcherSchema = z.object({
|
|
|
43
44
|
folders: z.array(z.string()).optional(),
|
|
44
45
|
flag_reconcile_window: z.number().int().min(0).default(500),
|
|
45
46
|
});
|
|
47
|
+
/**
|
|
48
|
+
* Optional [sdk] block. The SDK's `APIS_API_KEY` / `APIS_BASE_URL` /
|
|
49
|
+
* `APIS_WORKSPACE_ID` come from the spawned-pod env (injected by
|
|
50
|
+
* mcp-hub k8s-gateway) on real deployments; the TOML overrides are
|
|
51
|
+
* only useful for local development or unusual setups.
|
|
52
|
+
*/
|
|
46
53
|
const sdkSchema = z.object({
|
|
47
|
-
api_key: z.string().min(1),
|
|
54
|
+
api_key: z.string().min(1).optional(),
|
|
48
55
|
base_url: z.string().url().optional(),
|
|
49
56
|
workspace_id: z.string().optional(),
|
|
50
57
|
});
|
|
51
58
|
export const configSchema = z.object({
|
|
52
59
|
accounts: z.array(accountSchema).min(1),
|
|
53
|
-
sdk: sdkSchema,
|
|
60
|
+
sdk: sdkSchema.optional(),
|
|
54
61
|
watcher: watcherSchema.default({
|
|
55
62
|
enabled: true,
|
|
56
63
|
interval_ms: 60_000,
|
|
@@ -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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"}
|
|
@@ -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,14 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Build the @diskd-ai/sdk client used by the drive-backed messages store.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* Credential resolution (each independently):
|
|
5
|
+
* workspaceId := TOML [sdk].workspace_id
|
|
6
|
+
* | env APIS_WORKSPACE_ID (injected by mcp-hub k8s-gateway)
|
|
7
|
+
* | env MCP_HUB_WORKSPACE_ID (legacy, also from k8s-gateway)
|
|
8
|
+
* APIS_API_KEY := env APIS_API_KEY (mcp-hub injects from cluster Secret)
|
|
9
|
+
* | TOML [sdk].api_key (lower precedence; only fills if env empty)
|
|
10
|
+
* APIS_BASE_URL := env APIS_BASE_URL
|
|
11
|
+
* | TOML [sdk].base_url
|
|
9
12
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
13
|
+
* SDK constraint (5.1.x): `APIS_API_KEY` and `APIS_BASE_URL` are read
|
|
14
|
+
* from `process.env` only -- there is no constructor param. We mirror
|
|
15
|
+
* TOML values into env via `ensureEnv` (only when env is empty) so cluster
|
|
16
|
+
* env always wins over per-server TOML.
|
|
12
17
|
*/
|
|
13
18
|
import { diskd } from "@diskd-ai/sdk";
|
|
14
19
|
import type { SdkSettings } from "../config/schema.js";
|
|
@@ -18,4 +23,4 @@ export type DiskdRuntime = {
|
|
|
18
23
|
readonly workspaceId: string;
|
|
19
24
|
readonly messagesStore: ReturnType<typeof diskd.os.messagesStore>;
|
|
20
25
|
};
|
|
21
|
-
export declare const buildDiskd: (sdkSettings: SdkSettings, envWorkspaceId: string | undefined) => Result<ConfigError, DiskdRuntime>;
|
|
26
|
+
export declare const buildDiskd: (sdkSettings: SdkSettings | undefined, envWorkspaceId: string | undefined) => Result<ConfigError, DiskdRuntime>;
|
package/dist/sdk/diskdClient.js
CHANGED
|
@@ -1,36 +1,50 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Build the @diskd-ai/sdk client used by the drive-backed messages store.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* Credential resolution (each independently):
|
|
5
|
+
* workspaceId := TOML [sdk].workspace_id
|
|
6
|
+
* | env APIS_WORKSPACE_ID (injected by mcp-hub k8s-gateway)
|
|
7
|
+
* | env MCP_HUB_WORKSPACE_ID (legacy, also from k8s-gateway)
|
|
8
|
+
* APIS_API_KEY := env APIS_API_KEY (mcp-hub injects from cluster Secret)
|
|
9
|
+
* | TOML [sdk].api_key (lower precedence; only fills if env empty)
|
|
10
|
+
* APIS_BASE_URL := env APIS_BASE_URL
|
|
11
|
+
* | TOML [sdk].base_url
|
|
9
12
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
13
|
+
* SDK constraint (5.1.x): `APIS_API_KEY` and `APIS_BASE_URL` are read
|
|
14
|
+
* from `process.env` only -- there is no constructor param. We mirror
|
|
15
|
+
* TOML values into env via `ensureEnv` (only when env is empty) so cluster
|
|
16
|
+
* env always wins over per-server TOML.
|
|
12
17
|
*/
|
|
13
18
|
import { diskd } from "@diskd-ai/sdk";
|
|
14
19
|
import { configError } from "../domain/errors.js";
|
|
15
20
|
import { Err, Ok } from "../domain/result.js";
|
|
16
21
|
const ensureEnv = (key, value) => {
|
|
17
|
-
// Only set if unset, so an explicit env value (e.g. from mcp-hub) wins
|
|
18
|
-
// over the TOML when present.
|
|
19
22
|
const current = process.env[key];
|
|
20
23
|
if (current === undefined || current.length === 0) {
|
|
21
24
|
process.env[key] = value;
|
|
22
25
|
}
|
|
23
26
|
};
|
|
27
|
+
const readEnv = (key) => {
|
|
28
|
+
const v = process.env[key];
|
|
29
|
+
return v !== undefined && v.length > 0 ? v : undefined;
|
|
30
|
+
};
|
|
24
31
|
export const buildDiskd = (sdkSettings, envWorkspaceId) => {
|
|
25
|
-
|
|
32
|
+
// workspaceId: TOML > APIS_WORKSPACE_ID > MCP_HUB_WORKSPACE_ID.
|
|
33
|
+
const workspaceId = sdkSettings?.workspace_id ?? readEnv("APIS_WORKSPACE_ID") ?? envWorkspaceId;
|
|
26
34
|
if (workspaceId === undefined || workspaceId.length === 0) {
|
|
27
|
-
return Err(configError("workspace_id is missing -- set [sdk].workspace_id in TOML
|
|
35
|
+
return Err(configError("workspace_id is missing -- expected APIS_WORKSPACE_ID or MCP_HUB_WORKSPACE_ID env (set by mcp-hub k8s-gateway), or [sdk].workspace_id in TOML"));
|
|
28
36
|
}
|
|
29
|
-
|
|
30
|
-
|
|
37
|
+
// Mirror TOML values into env only when env is empty so cluster
|
|
38
|
+
// injection (mcp-hub specs.ts) always wins.
|
|
39
|
+
if (sdkSettings?.api_key)
|
|
40
|
+
ensureEnv("APIS_API_KEY", sdkSettings.api_key);
|
|
41
|
+
if (sdkSettings?.base_url)
|
|
31
42
|
ensureEnv("APIS_BASE_URL", sdkSettings.base_url);
|
|
32
|
-
if (
|
|
33
|
-
return Err(configError("APIS_BASE_URL is not set --
|
|
43
|
+
if (readEnv("APIS_BASE_URL") === undefined) {
|
|
44
|
+
return Err(configError("APIS_BASE_URL is not set -- expected env from mcp-hub k8s-gateway, or [sdk].base_url in TOML"));
|
|
45
|
+
}
|
|
46
|
+
if (readEnv("APIS_API_KEY") === undefined) {
|
|
47
|
+
return Err(configError("APIS_API_KEY is not set -- expected env from mcp-hub k8s-gateway, or [sdk].api_key in TOML"));
|
|
34
48
|
}
|
|
35
49
|
const auth = diskd.auth.apiKey({ workspaceId });
|
|
36
50
|
const messagesStore = diskd.os.messagesStore({ auth });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diskdClient.js","sourceRoot":"","sources":["../../src/sdk/diskdClient.ts"],"names":[],"mappings":"AAAA
|
|
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":";AACA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,YAAY,EACZ,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,KAAyC,EAAQ,EAAE;IAC3E,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;IAC9E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,OAAO,IAAI,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,IAAuB,EAAuB,EAAE;IACvE,sEAAsE;IACtE,6BAA6B;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IACzD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;IACrC,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,GAAG,CAAC,iCAAiC,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IACvD,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;IACzC,IAAI,GAAG,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;QACtB,GAAG,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC1E,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;QACxB,GAAG,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,GAAG,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAE9D,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;
|
|
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/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@diskd-ai/email-client-mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "Drive-backed multi-account email MCP with reliable IMAP-to-mailboxes sync.",
|
|
5
5
|
"license": "LGPL-3.0-or-later",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
|
-
"email-client-mcp": "
|
|
8
|
+
"email-client-mcp": "dist/server.js"
|
|
9
9
|
},
|
|
10
10
|
"main": "./dist/server.js",
|
|
11
11
|
"files": [
|