@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.
@@ -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: string;
279
+ api_key?: string | undefined;
268
280
  base_url?: string | undefined;
269
281
  workspace_id?: string | undefined;
270
282
  }, {
271
- api_key: string;
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: string;
411
+ api_key?: string | undefined;
397
412
  base_url?: string | undefined;
398
413
  workspace_id?: string | undefined;
399
414
  }, {
400
- api_key: string;
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: string;
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;
@@ -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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"}
@@ -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
- * - OAuth refresh: imapflow accepts an `accessToken` for XOAUTH2;
12
- * the pool keeps a per-account "fetcher" that swaps the access
13
- * token in-place at reconnect time. The provider-side refresh is
14
- * a follow-up (see SDK gap notes); for v1 the password path is
15
- * fully wired and OAuth runs against a long-lived access token.
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 declare const buildImapPool: (accounts: readonly Account[]) => ImapPool;
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
- * - OAuth refresh: imapflow accepts an `accessToken` for XOAUTH2;
12
- * the pool keeps a per-account "fetcher" that swaps the access
13
- * token in-place at reconnect time. The provider-side refresh is
14
- * a follow-up (see SDK gap notes); for v1 the password path is
15
- * fully wired and OAuth runs against a long-lived access token.
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
- const buildClient = (acct) => {
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
- export const buildImapPool = (accounts) => {
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 && cached.usable)
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 cached.logout();
138
+ await client.connect();
62
139
  }
63
- catch {
64
- // ignore: connection was already broken
140
+ catch (cause) {
141
+ delayReconnect(accountId);
142
+ closeClient(accountId, client, "evict");
143
+ return Err(imapError(accountId, `connect failed: ${toErrorMessage(cause)}`, cause));
65
144
  }
66
- liveById.delete(accountId);
67
- }
68
- const client = buildClient(acct);
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 client.connect();
152
+ return await pending;
71
153
  }
72
- catch (cause) {
73
- return Err(imapError(accountId, `connect failed: ${cause?.message ?? String(cause)}`, cause));
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.values()).map(async (c) => {
159
+ const closes = Array.from(liveById.entries()).map(async ([accountId, client]) => {
80
160
  try {
81
- await c.logout();
161
+ await client.logout();
82
162
  }
83
- catch {
84
- // ignore on shutdown
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
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../src/imap/pool.ts"],"names":[],"mappings":"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"}
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
- * SDK constraint observed in 5.1.x: `APIS_API_KEY` and `APIS_BASE_URL`
5
- * are read from `process.env` only -- there is no constructor param.
6
- * We therefore copy the TOML `[sdk]` block into env *before* calling
7
- * `diskd.auth.apiKey()`. This is a small SDK gap (would prefer explicit
8
- * params); documented in the design plan and called out here.
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
- * Workspace id falls back to `MCP_HUB_WORKSPACE_ID` (injected by mcp-hub
11
- * k8s-gateway specs) so deployments don't have to encode workspaceId twice.
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>;
@@ -1,36 +1,50 @@
1
1
  /**
2
2
  * Build the @diskd-ai/sdk client used by the drive-backed messages store.
3
3
  *
4
- * SDK constraint observed in 5.1.x: `APIS_API_KEY` and `APIS_BASE_URL`
5
- * are read from `process.env` only -- there is no constructor param.
6
- * We therefore copy the TOML `[sdk]` block into env *before* calling
7
- * `diskd.auth.apiKey()`. This is a small SDK gap (would prefer explicit
8
- * params); documented in the design plan and called out here.
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
- * Workspace id falls back to `MCP_HUB_WORKSPACE_ID` (injected by mcp-hub
11
- * k8s-gateway specs) so deployments don't have to encode workspaceId twice.
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
- const workspaceId = sdkSettings.workspace_id ?? envWorkspaceId;
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 or MCP_HUB_WORKSPACE_ID in env"));
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
- ensureEnv("APIS_API_KEY", sdkSettings.api_key);
30
- if (sdkSettings.base_url)
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 (process.env.APIS_BASE_URL === undefined || process.env.APIS_BASE_URL.length === 0) {
33
- return Err(configError("APIS_BASE_URL is not set -- provide [sdk].base_url in TOML or APIS_BASE_URL in env"));
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;;;;;;;;;;;GAWG;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,uEAAuE;IACvE,8BAA8B;IAC9B,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,CAAC,MAAM,UAAU,GAAG,CACxB,WAAwB,EACxB,cAAkC,EACC,EAAE;IACrC,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,IAAI,cAAc,CAAC;IAC/D,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,GAAG,CACR,WAAW,CACT,0FAA0F,CAC3F,CACF,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,WAAW,CAAC,QAAQ;QAAE,SAAS,CAAC,eAAe,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC3E,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtF,OAAO,GAAG,CACR,WAAW,CACT,oFAAoF,CACrF,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"}
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: {
@@ -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":";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,EAAE;QAC7C,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC;KAClD,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAa;QACzB,KAAK,EAAE,UAA0C;QACjD,IAAI,EAAE;YACJ,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;gBAC/B,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBAC3C,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK;oBAAE,OAAO,CAAC,CAAC;gBAC9B,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBAClC,OAAO,EAAE,CACP,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACf,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,CAAkB;qBACpD,CAAC,CAAC,CACJ,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,GAAG,CAAC;wBACT,IAAI,EAAE,WAAW;wBACjB,SAAS;wBACT,OAAO,EAAE,gBAAiB,KAAe,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;qBACzD,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YACD,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;gBACtC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBAC3C,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK;oBAAE,OAAO,CAAC,CAAC;gBAC9B,IAAI,CAAC;oBACH,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC5C,OAAO,EAAE,CAAC,CAAC,CAGV,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,GAAG,CAAC;wBACT,IAAI,EAAE,WAAW;wBACjB,SAAS;wBACT,OAAO,EAAE,UAAU,IAAI,KAAM,KAAe,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;qBAC5D,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YACD,UAAU,EAAE,KAAK,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK;gBAC1D,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBAC3C,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC5D,0DAA0D;gBAC1D,oDAAoD;gBACpD,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE;oBAC1D,MAAM,GAAG,GAAc,EAAE,CAAC;oBAC1B,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC;wBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC1E,OAAO,GAAG,CAAC;gBACb,CAAC,CAAC,CAAC;gBACH,KAAK,MAAM,CAAC,IAAI,GAAG;oBAAE,MAAM,CAAU,CAAC;YACxC,CAAC;YACD,mBAAmB,EAAE,KAAK,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK;gBACnE,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBAC3C,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC5D,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE;oBAC1D,MAAM,GAAG,GAAc,EAAE,CAAC;oBAC1B,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,sBAAsB,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC;wBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACnF,OAAO,GAAG,CAAC;gBACb,CAAC,CAAC,CAAC;gBACH,KAAK,MAAM,CAAC,IAAI,GAAG;oBAAE,MAAM,CAAU,CAAC;YACxC,CAAC;SACF;QACD,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;KACtB,CAAC;IAEF,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAEnF,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,aAAa,CAAC,MAAM,EAAE;QACpB,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ;QAC5B,QAAQ,EAAE,IAAI;QACd,OAAO;KACR,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,GAAG,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAE1D,iEAAiE;IACjE,mEAAmE;IACnE,+BAA+B;IAC/B,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,4BAA4B,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAiB,EAAE;QACvD,GAAG,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,GAAG,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,GAAG,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,GAAG,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC;AAEF,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAG,GAAa,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -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
- void tick();
117
+ runTick();
112
118
  timer = setInterval(() => {
113
- void tick();
119
+ runTick();
114
120
  }, intervalMs);
115
121
  };
116
122
  const stop = async () => {
@@ -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.2",
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": "./dist/server.js"
8
+ "email-client-mcp": "dist/server.js"
9
9
  },
10
10
  "main": "./dist/server.js",
11
11
  "files": [