fluxmail 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +15 -51
  2. package/dist/accounts/gmailConnection.d.ts +5 -1
  3. package/dist/accounts/gmailConnection.d.ts.map +1 -1
  4. package/dist/accounts/gmailConnection.js +14 -2
  5. package/dist/accounts/gmailConnection.js.map +1 -1
  6. package/dist/accounts/googleAuth.js +1 -1
  7. package/dist/accounts/googleAuth.js.map +1 -1
  8. package/dist/accounts/microsoftAuth.d.ts +21 -0
  9. package/dist/accounts/microsoftAuth.d.ts.map +1 -0
  10. package/dist/accounts/microsoftAuth.js +220 -0
  11. package/dist/accounts/microsoftAuth.js.map +1 -0
  12. package/dist/accounts/registry.d.ts +21 -8
  13. package/dist/accounts/registry.d.ts.map +1 -1
  14. package/dist/accounts/registry.js +190 -24
  15. package/dist/accounts/registry.js.map +1 -1
  16. package/dist/cli.d.ts +13 -0
  17. package/dist/cli.d.ts.map +1 -1
  18. package/dist/cli.js +881 -572
  19. package/dist/cli.js.map +1 -1
  20. package/dist/config.d.ts +105 -1
  21. package/dist/config.d.ts.map +1 -1
  22. package/dist/config.js +128 -13
  23. package/dist/config.js.map +1 -1
  24. package/dist/context.d.ts +2 -0
  25. package/dist/context.d.ts.map +1 -1
  26. package/dist/context.js +7 -1
  27. package/dist/context.js.map +1 -1
  28. package/dist/http/admin.d.ts +21 -0
  29. package/dist/http/admin.d.ts.map +1 -0
  30. package/dist/http/admin.js +618 -0
  31. package/dist/http/admin.js.map +1 -0
  32. package/dist/http/app.d.ts +2 -0
  33. package/dist/http/app.d.ts.map +1 -1
  34. package/dist/http/app.js +332 -45
  35. package/dist/http/app.js.map +1 -1
  36. package/dist/http/rest.d.ts +28 -0
  37. package/dist/http/rest.d.ts.map +1 -0
  38. package/dist/http/rest.js +1130 -0
  39. package/dist/http/rest.js.map +1 -0
  40. package/dist/index.d.ts +4 -2
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +4 -2
  43. package/dist/index.js.map +1 -1
  44. package/dist/licensing/refresher.d.ts +23 -7
  45. package/dist/licensing/refresher.d.ts.map +1 -1
  46. package/dist/licensing/refresher.js +93 -37
  47. package/dist/licensing/refresher.js.map +1 -1
  48. package/dist/mcp/buildServer.d.ts +4 -2
  49. package/dist/mcp/buildServer.d.ts.map +1 -1
  50. package/dist/mcp/buildServer.js +286 -230
  51. package/dist/mcp/buildServer.js.map +1 -1
  52. package/dist/permissions.d.ts +30 -0
  53. package/dist/permissions.d.ts.map +1 -0
  54. package/dist/permissions.js +119 -0
  55. package/dist/permissions.js.map +1 -0
  56. package/dist/service/emailService.d.ts +16 -9
  57. package/dist/service/emailService.d.ts.map +1 -1
  58. package/dist/service/emailService.js +44 -19
  59. package/dist/service/emailService.js.map +1 -1
  60. package/dist/storage/adminAudit.d.ts +14 -0
  61. package/dist/storage/adminAudit.d.ts.map +1 -0
  62. package/dist/storage/adminAudit.js +32 -0
  63. package/dist/storage/adminAudit.js.map +1 -0
  64. package/dist/storage/apiKeys.d.ts +28 -5
  65. package/dist/storage/apiKeys.d.ts.map +1 -1
  66. package/dist/storage/apiKeys.js +153 -10
  67. package/dist/storage/apiKeys.js.map +1 -1
  68. package/dist/storage/db.d.ts +524 -0
  69. package/dist/storage/db.d.ts.map +1 -1
  70. package/dist/storage/db.js +184 -8
  71. package/dist/storage/db.js.map +1 -1
  72. package/dist/storage/gmailConnectionGrants.d.ts +9 -0
  73. package/dist/storage/gmailConnectionGrants.d.ts.map +1 -1
  74. package/dist/storage/gmailConnectionGrants.js +30 -7
  75. package/dist/storage/gmailConnectionGrants.js.map +1 -1
  76. package/dist/storage/members.d.ts +7 -4
  77. package/dist/storage/members.d.ts.map +1 -1
  78. package/dist/storage/members.js +34 -8
  79. package/dist/storage/members.js.map +1 -1
  80. package/dist/storage/restIdempotency.d.ts +28 -0
  81. package/dist/storage/restIdempotency.d.ts.map +1 -0
  82. package/dist/storage/restIdempotency.js +47 -0
  83. package/dist/storage/restIdempotency.js.map +1 -0
  84. package/dist/telemetry.d.ts +9 -2
  85. package/dist/telemetry.d.ts.map +1 -1
  86. package/dist/telemetry.js +117 -54
  87. package/dist/telemetry.js.map +1 -1
  88. package/package.json +7 -5
@@ -0,0 +1,28 @@
1
+ import { type FluxmailDb } from './db.js';
2
+ export declare const REST_IDEMPOTENCY_TTL_MS: number;
3
+ export type IdempotencyReservation = {
4
+ status: 'reserved';
5
+ } | {
6
+ status: 'conflict';
7
+ } | {
8
+ status: 'in_progress';
9
+ } | {
10
+ status: 'replay';
11
+ responseStatus: number;
12
+ responseBody: string;
13
+ };
14
+ export declare function reserveIdempotencyKey(db: FluxmailDb, input: {
15
+ principalId: string;
16
+ idempotencyKey: string;
17
+ requestHash: string;
18
+ now?: number;
19
+ ttlMs?: number;
20
+ }): IdempotencyReservation;
21
+ export declare function completeIdempotencyKey(db: FluxmailDb, input: {
22
+ principalId: string;
23
+ idempotencyKey: string;
24
+ requestHash: string;
25
+ responseStatus: number;
26
+ responseBody: string;
27
+ }): boolean;
28
+ //# sourceMappingURL=restIdempotency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restIdempotency.d.ts","sourceRoot":"","sources":["../../src/storage/restIdempotency.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAE3D,eAAO,MAAM,uBAAuB,QAAsB,CAAC;AAE3D,MAAM,MAAM,sBAAsB,GAC9B;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,GACtB;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,GACtB;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,GACzB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,UAAU,EACd,KAAK,EAAE;IACL,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,sBAAsB,CAmCxB;AAED,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,UAAU,EACd,KAAK,EAAE;IACL,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB,GACA,OAAO,CAcT"}
@@ -0,0 +1,47 @@
1
+ import { and, eq, lt } from 'drizzle-orm';
2
+ import { restIdempotency } from './db.js';
3
+ export const REST_IDEMPOTENCY_TTL_MS = 24 * 60 * 60 * 1000;
4
+ export function reserveIdempotencyKey(db, input) {
5
+ const now = input.now ?? Date.now();
6
+ db.delete(restIdempotency).where(lt(restIdempotency.expiresAt, now)).run();
7
+ const result = db
8
+ .insert(restIdempotency)
9
+ .values({
10
+ principalId: input.principalId,
11
+ idempotencyKey: input.idempotencyKey,
12
+ requestHash: input.requestHash,
13
+ state: 'in_progress',
14
+ createdAt: now,
15
+ expiresAt: now + (input.ttlMs ?? REST_IDEMPOTENCY_TTL_MS),
16
+ })
17
+ .onConflictDoNothing()
18
+ .run();
19
+ if (result.changes === 1)
20
+ return { status: 'reserved' };
21
+ const existing = db
22
+ .select()
23
+ .from(restIdempotency)
24
+ .where(and(eq(restIdempotency.principalId, input.principalId), eq(restIdempotency.idempotencyKey, input.idempotencyKey)))
25
+ .get();
26
+ if (!existing)
27
+ return { status: 'in_progress' };
28
+ if (existing.requestHash !== input.requestHash)
29
+ return { status: 'conflict' };
30
+ if (existing.state !== 'completed' || existing.responseStatus === null || existing.responseBody === null) {
31
+ return { status: 'in_progress' };
32
+ }
33
+ return {
34
+ status: 'replay',
35
+ responseStatus: existing.responseStatus,
36
+ responseBody: existing.responseBody,
37
+ };
38
+ }
39
+ export function completeIdempotencyKey(db, input) {
40
+ const result = db
41
+ .update(restIdempotency)
42
+ .set({ state: 'completed', responseStatus: input.responseStatus, responseBody: input.responseBody })
43
+ .where(and(eq(restIdempotency.principalId, input.principalId), eq(restIdempotency.idempotencyKey, input.idempotencyKey), eq(restIdempotency.requestHash, input.requestHash), eq(restIdempotency.state, 'in_progress')))
44
+ .run();
45
+ return result.changes === 1;
46
+ }
47
+ //# sourceMappingURL=restIdempotency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restIdempotency.js","sourceRoot":"","sources":["../../src/storage/restIdempotency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAmB,MAAM,SAAS,CAAC;AAE3D,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAQ3D,MAAM,UAAU,qBAAqB,CACnC,EAAc,EACd,KAMC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACpC,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAE3E,MAAM,MAAM,GAAG,EAAE;SACd,MAAM,CAAC,eAAe,CAAC;SACvB,MAAM,CAAC;QACN,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,uBAAuB,CAAC;KAC1D,CAAC;SACD,mBAAmB,EAAE;SACrB,GAAG,EAAE,CAAC;IACT,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAExD,MAAM,QAAQ,GAAG,EAAE;SAChB,MAAM,EAAE;SACR,IAAI,CAAC,eAAe,CAAC;SACrB,KAAK,CACJ,GAAG,CAAC,EAAE,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,cAAc,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAClH;SACA,GAAG,EAAE,CAAC;IACT,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAChD,IAAI,QAAQ,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW;QAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAC9E,IAAI,QAAQ,CAAC,KAAK,KAAK,WAAW,IAAI,QAAQ,CAAC,cAAc,KAAK,IAAI,IAAI,QAAQ,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;QACzG,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACnC,CAAC;IACD,OAAO;QACL,MAAM,EAAE,QAAQ;QAChB,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,YAAY,EAAE,QAAQ,CAAC,YAAY;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,EAAc,EACd,KAMC;IAED,MAAM,MAAM,GAAG,EAAE;SACd,MAAM,CAAC,eAAe,CAAC;SACvB,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;SACnG,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,EAClD,EAAE,CAAC,eAAe,CAAC,cAAc,EAAE,KAAK,CAAC,cAAc,CAAC,EACxD,EAAE,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,EAClD,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,aAAa,CAAC,CACzC,CACF;SACA,GAAG,EAAE,CAAC;IACT,OAAO,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC;AAC9B,CAAC"}
@@ -1,15 +1,17 @@
1
1
  export type TelemetryProperties = Record<string, boolean | number | string | undefined>;
2
2
  export interface Telemetry {
3
3
  capture(event: string, properties?: TelemetryProperties): void;
4
+ /** Keep shutdown open until an in-flight operation records its final event. */
5
+ beginActivity?(): () => void;
4
6
  shutdown(): Promise<void>;
5
7
  }
6
8
  interface PostHogClient {
7
- captureImmediate(options: {
9
+ capture(options: {
8
10
  distinctId: string;
9
11
  event: string;
10
12
  properties: Record<string, boolean | number | string>;
11
13
  disableGeoip?: boolean;
12
- }): Promise<void>;
14
+ }): void;
13
15
  shutdown(timeoutMs?: number): Promise<void>;
14
16
  }
15
17
  export declare function publishTelemetryId(file: string, candidateFile: string, candidateId: string): string;
@@ -22,6 +24,11 @@ export declare function createTelemetry(options: {
22
24
  env?: NodeJS.ProcessEnv;
23
25
  client?: PostHogClient;
24
26
  }): Telemetry;
27
+ interface EndEventSource {
28
+ once(event: 'end', listener: () => void): unknown;
29
+ }
30
+ /** Flush queued telemetry when a long-running input stream reaches EOF. */
31
+ export declare function installTelemetryStreamEndHandler(stream: EndEventSource, shutdown?: () => Promise<void>): void;
25
32
  export declare function getTelemetry(dataDir: string): Telemetry;
26
33
  export declare function shutdownTelemetry(): Promise<void>;
27
34
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;AAExF,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC/D,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,UAAU,aAAa;IACrB,gBAAgB,CAAC,OAAO,EAAE;QACxB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;QACtD,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AA6FD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAcnG;AAkBD,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAW/E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAEpF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAI3E;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAInH;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB,GAAG,SAAS,CAqEZ;AAID,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAGvD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAIvD"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;AAExF,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC/D,+EAA+E;IAC/E,aAAa,CAAC,IAAI,MAAM,IAAI,CAAC;IAC7B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,UAAU,aAAa;IACrB,OAAO,CAAC,OAAO,EAAE;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;QACtD,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAqHD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAcnG;AAkBD,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAW/E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAEpF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAI3E;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAInH;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB,GAAG,SAAS,CAgGZ;AAID,UAAU,cAAc;IACtB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;CACnD;AAED,2EAA2E;AAC3E,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,cAAc,EACtB,QAAQ,GAAE,MAAM,OAAO,CAAC,IAAI,CAAqB,GAChD,IAAI,CAMN;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAGvD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAIvD"}
package/dist/telemetry.js CHANGED
@@ -12,51 +12,76 @@ const POSTHOG_PROJECT_TOKEN = 'phc_t9WdWpoONslidKRejBKMYG8FLjLo0tR84U8lFKE4MlN';
12
12
  const POSTHOG_HOST = 'https://t.fluxmail.ai';
13
13
  const POSTHOG_REQUEST_TIMEOUT_MS = 500;
14
14
  const POSTHOG_SHUTDOWN_TIMEOUT_MS = 1_000;
15
+ function acceptedTelemetryResponse(text = '') {
16
+ return {
17
+ status: 200,
18
+ text: async () => text,
19
+ json: async () => {
20
+ try {
21
+ return text ? JSON.parse(text) : {};
22
+ }
23
+ catch {
24
+ return {};
25
+ }
26
+ },
27
+ headers: { get: () => null },
28
+ };
29
+ }
15
30
  /** Keep pooled analytics sockets under our control so shutdown can close them. */
16
31
  function createPostHogTransport() {
17
32
  const httpAgent = new HttpAgent({ keepAlive: true });
18
33
  const httpsAgent = new HttpsAgent({ keepAlive: true });
19
34
  return {
20
35
  async fetch(url, options) {
21
- const target = new URL(url);
22
- const send = target.protocol === 'https:' ? httpsRequest : target.protocol === 'http:' ? httpRequest : undefined;
23
- if (!send)
24
- throw new Error(`Unsupported telemetry URL protocol: ${target.protocol}`);
25
- const body = options.body instanceof Blob
26
- ? Buffer.from(await options.body.arrayBuffer())
27
- : options.body === undefined
28
- ? undefined
29
- : Buffer.from(options.body);
30
- return new Promise((resolve, reject) => {
31
- const request = send(target, {
32
- method: options.method,
33
- headers: options.headers,
34
- signal: options.signal,
35
- agent: target.protocol === 'https:' ? httpsAgent : httpAgent,
36
- }, (response) => {
37
- const chunks = [];
38
- response.on('data', (chunk) => {
39
- chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
40
- });
41
- response.once('error', reject);
42
- response.once('end', () => {
43
- const text = Buffer.concat(chunks).toString('utf8');
44
- resolve({
45
- status: response.statusCode ?? 0,
46
- text: async () => text,
47
- json: async () => JSON.parse(text),
48
- headers: {
49
- get(name) {
50
- const value = response.headers[name.toLowerCase()];
51
- return Array.isArray(value) ? value.join(', ') : (value ?? null);
36
+ try {
37
+ const target = new URL(url);
38
+ const send = target.protocol === 'https:' ? httpsRequest : target.protocol === 'http:' ? httpRequest : undefined;
39
+ if (!send)
40
+ return acceptedTelemetryResponse();
41
+ const body = options.body instanceof Blob
42
+ ? Buffer.from(await options.body.arrayBuffer())
43
+ : options.body === undefined
44
+ ? undefined
45
+ : Buffer.from(options.body);
46
+ return await new Promise((resolve, reject) => {
47
+ const request = send(target, {
48
+ method: options.method,
49
+ headers: options.headers,
50
+ signal: options.signal,
51
+ agent: target.protocol === 'https:' ? httpsAgent : httpAgent,
52
+ }, (response) => {
53
+ const chunks = [];
54
+ response.on('data', (chunk) => {
55
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
56
+ });
57
+ response.once('error', reject);
58
+ response.once('end', () => {
59
+ const text = Buffer.concat(chunks).toString('utf8');
60
+ const status = response.statusCode ?? 0;
61
+ if (status < 200 || status >= 400)
62
+ return resolve(acceptedTelemetryResponse(text));
63
+ resolve({
64
+ status,
65
+ text: async () => text,
66
+ json: async () => JSON.parse(text),
67
+ headers: {
68
+ get(name) {
69
+ const value = response.headers[name.toLowerCase()];
70
+ return Array.isArray(value) ? value.join(', ') : (value ?? null);
71
+ },
52
72
  },
53
- },
73
+ });
54
74
  });
55
75
  });
76
+ request.once('error', reject);
77
+ request.end(body);
56
78
  });
57
- request.once('error', reject);
58
- request.end(body);
59
- });
79
+ }
80
+ catch {
81
+ // The SDK logs batch delivery failures to stderr. Telemetry is best
82
+ // effort, so absorb transport failures before they reach the SDK.
83
+ return acceptedTelemetryResponse();
84
+ }
60
85
  },
61
86
  destroy() {
62
87
  httpAgent.destroy();
@@ -136,7 +161,32 @@ export function createTelemetry(options) {
136
161
  const env = options.env ?? withStoredTelemetrySetting(options.dataDir);
137
162
  let initialized;
138
163
  let initializationFailed = false;
164
+ let activeActivities = 0;
165
+ let shutdownPromise;
166
+ const idleWaiters = new Set();
139
167
  let closed = false;
168
+ function beginActivity() {
169
+ if (closed || shutdownPromise)
170
+ return () => { };
171
+ activeActivities += 1;
172
+ let finished = false;
173
+ return () => {
174
+ if (finished)
175
+ return;
176
+ finished = true;
177
+ activeActivities -= 1;
178
+ if (activeActivities !== 0)
179
+ return;
180
+ for (const resolve of idleWaiters)
181
+ resolve();
182
+ idleWaiters.clear();
183
+ };
184
+ }
185
+ function waitForIdle() {
186
+ if (activeActivities === 0)
187
+ return Promise.resolve();
188
+ return new Promise((resolve) => idleWaiters.add(resolve));
189
+ }
140
190
  function initialize() {
141
191
  if (closed || initializationFailed || !isTelemetryEnabled(options.dataDir, env))
142
192
  return undefined;
@@ -165,14 +215,32 @@ export function createTelemetry(options) {
165
215
  return undefined;
166
216
  }
167
217
  }
218
+ const shutdown = () => {
219
+ shutdownPromise ??= (async () => {
220
+ await waitForIdle();
221
+ closed = true;
222
+ if (!initialized)
223
+ return;
224
+ try {
225
+ await initialized.client.shutdown(POSTHOG_SHUTDOWN_TIMEOUT_MS);
226
+ }
227
+ catch {
228
+ // Network and analytics failures are intentionally ignored.
229
+ }
230
+ finally {
231
+ initialized.transport?.destroy();
232
+ }
233
+ })();
234
+ return shutdownPromise;
235
+ };
168
236
  return {
237
+ beginActivity,
169
238
  capture(event, properties = {}) {
170
239
  const telemetry = initialize();
171
240
  if (!telemetry)
172
241
  return;
173
242
  try {
174
- void telemetry.client
175
- .captureImmediate({
243
+ telemetry.client.capture({
176
244
  distinctId: telemetry.distinctId,
177
245
  event,
178
246
  disableGeoip: true,
@@ -184,37 +252,32 @@ export function createTelemetry(options) {
184
252
  platform: process.platform,
185
253
  arch: process.arch,
186
254
  },
187
- })
188
- .catch(() => { });
255
+ });
189
256
  }
190
257
  catch {
191
258
  // Telemetry must never affect Fluxmail behavior.
192
259
  }
193
260
  },
194
- async shutdown() {
195
- closed = true;
196
- if (!initialized)
197
- return;
198
- try {
199
- await initialized.client.shutdown(POSTHOG_SHUTDOWN_TIMEOUT_MS);
200
- }
201
- catch {
202
- // Network and analytics failures are intentionally ignored.
203
- }
204
- finally {
205
- initialized.transport?.destroy();
206
- }
207
- },
261
+ shutdown,
208
262
  };
209
263
  }
210
264
  let sharedTelemetry;
265
+ /** Flush queued telemetry when a long-running input stream reaches EOF. */
266
+ export function installTelemetryStreamEndHandler(stream, shutdown = shutdownTelemetry) {
267
+ stream.once('end', () => {
268
+ // The MCP SDK starts request handlers in microtasks after consuming input.
269
+ // Wait one turn so the final request can register as active before shutdown.
270
+ setImmediate(() => void shutdown().catch(() => { }));
271
+ });
272
+ }
211
273
  export function getTelemetry(dataDir) {
212
274
  sharedTelemetry ??= createTelemetry({ dataDir });
213
275
  return sharedTelemetry;
214
276
  }
215
277
  export async function shutdownTelemetry() {
216
278
  const telemetry = sharedTelemetry;
217
- sharedTelemetry = undefined;
218
279
  await telemetry?.shutdown();
280
+ if (sharedTelemetry === telemetry)
281
+ sharedTelemetry = undefined;
219
282
  }
220
283
  //# sourceMappingURL=telemetry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpF,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,4EAA4E;AAC5E,qDAAqD;AACrD,MAAM,qBAAqB,GAAG,iDAAiD,CAAC;AAChF,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAC7C,MAAM,0BAA0B,GAAG,GAAG,CAAC;AACvC,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAwC1C,SAAS,yBAAyB,CAAC,IAAI,GAAG,EAAE;IAC1C,OAAO;QACL,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;QACtB,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAa,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE;KAC7B,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,SAAS,sBAAsB;IAC7B,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvD,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO;YACtB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,MAAM,IAAI,GACR,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;gBACtG,IAAI,CAAC,IAAI;oBAAE,OAAO,yBAAyB,EAAE,CAAC;gBAE9C,MAAM,IAAI,GACR,OAAO,CAAC,IAAI,YAAY,IAAI;oBAC1B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC/C,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS;wBAC1B,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAElC,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBAC3C,MAAM,OAAO,GAAG,IAAI,CAClB,MAAM,EACN;wBACE,MAAM,EAAE,OAAO,CAAC,MAAM;wBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;wBACxB,MAAM,EAAE,OAAO,CAAC,MAAM;wBACtB,KAAK,EAAE,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;qBAC7D,EACD,CAAC,QAAQ,EAAE,EAAE;wBACX,MAAM,MAAM,GAAa,EAAE,CAAC;wBAC5B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;4BAC7C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;wBACnE,CAAC,CAAC,CAAC;wBACH,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;wBAC/B,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;4BACxB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;4BACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC;4BACxC,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,IAAI,GAAG;gCAAE,OAAO,OAAO,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC;4BACnF,OAAO,CAAC;gCACN,MAAM;gCACN,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;gCACtB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY;gCAC7C,OAAO,EAAE;oCACP,GAAG,CAAC,IAAI;wCACN,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;wCACnD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;oCACnE,CAAC;iCACF;6BACF,CAAC,CAAC;wBACL,CAAC,CAAC,CAAC;oBACL,CAAC,CACF,CAAC;oBACF,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,oEAAoE;gBACpE,kEAAkE;gBAClE,OAAO,yBAAyB,EAAE,CAAC;YACrC,CAAC;QACH,CAAC;QACD,OAAO;YACL,SAAS,CAAC,OAAO,EAAE,CAAC;YACpB,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAyB;IACzC,OAAO,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAE9C,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7C,OAAO,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,aAAqB,EAAE,WAAmB;IACzF,IAAI,CAAC;QACH,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAC9B,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,GAAG,CAAC;QAChE,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC;QAElC,2EAA2E;QAC3E,8EAA8E;QAC9E,aAAa,CAAC,IAAI,EAAE,GAAG,WAAW,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACzD,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAChD,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC;IACzD,aAAa,CAAC,aAAa,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAe;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACpE,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,EAAE,WAAW,EAAE,CAAC;IACtD,OAAO,CACL,OAAO,KAAK,GAAG;QACf,OAAO,KAAK,OAAO;QACnB,OAAO,KAAK,IAAI;QAChB,OAAO,KAAK,KAAK;QACjB,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;QAC1B,GAAG,CAAC,QAAQ,KAAK,MAAM;QACvB,GAAG,CAAC,MAAM,KAAK,SAAS,CACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,GAAuB;IACzE,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;AACvH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,OAAgB;IACnE,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,OAAO;QAAE,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;;QACtC,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,OAAe,EAAE,MAAyB,OAAO,CAAC,GAAG;IAC9F,IAAI,GAAG,CAAC,kBAAkB,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IACrD,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,kBAAkB,CAAC;IACnE,OAAO,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,kBAAkB,EAAE,aAAa,EAAE,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAI/B;IACC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,0BAA0B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvE,IAAI,WAAoG,CAAC;IACzG,IAAI,oBAAoB,GAAG,KAAK,CAAC;IACjC,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,eAA0C,CAAC;IAC/C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAc,CAAC;IAC1C,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,SAAS,aAAa;QACpB,IAAI,MAAM,IAAI,eAAe;YAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QAC/C,gBAAgB,IAAI,CAAC,CAAC;QACtB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,OAAO,GAAG,EAAE;YACV,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,gBAAgB,IAAI,CAAC,CAAC;YACtB,IAAI,gBAAgB,KAAK,CAAC;gBAAE,OAAO;YACnC,KAAK,MAAM,OAAO,IAAI,WAAW;gBAAE,OAAO,EAAE,CAAC;YAC7C,WAAW,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC,CAAC;IACJ,CAAC;IAED,SAAS,WAAW;QAClB,IAAI,gBAAgB,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QACrD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,SAAS,UAAU;QACjB,IAAI,MAAM,IAAI,oBAAoB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAClG,IAAI,WAAW;YAAE,OAAO,WAAW,CAAC;QACpC,IAAI,SAAuC,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACpD,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC;YAClE,MAAM,MAAM,GACV,OAAO,CAAC,MAAM;gBACd,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,qBAAqB,EAAE;oBAC7D,IAAI,EAAE,GAAG,CAAC,qBAAqB,IAAI,YAAY;oBAC/C,YAAY,EAAE,IAAI;oBAClB,OAAO,EAAE,EAAE;oBACX,aAAa,EAAE,MAAM;oBACrB,cAAc,EAAE,0BAA0B;oBAC1C,eAAe,EAAE,CAAC;oBAClB,KAAK,EAAE,SAAS,EAAE,KAAK;iBACxB,CAAC,CAAC;YACL,WAAW,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;YAChD,OAAO,WAAW,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,EAAE,OAAO,EAAE,CAAC;YACrB,oBAAoB,GAAG,IAAI,CAAC;YAC5B,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,GAAkB,EAAE;QACnC,eAAe,KAAK,CAAC,KAAK,IAAI,EAAE;YAC9B,MAAM,WAAW,EAAE,CAAC;YACpB,MAAM,GAAG,IAAI,CAAC;YACd,IAAI,CAAC,WAAW;gBAAE,OAAO;YACzB,IAAI,CAAC;gBACH,MAAM,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;YACjE,CAAC;YAAC,MAAM,CAAC;gBACP,4DAA4D;YAC9D,CAAC;oBAAS,CAAC;gBACT,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,eAAe,CAAC;IACzB,CAAC,CAAC;IAEF,OAAO;QACL,aAAa;QACb,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,EAAE;YAC5B,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS;gBAAE,OAAO;YACvB,IAAI,CAAC;gBACH,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;oBACvB,UAAU,EAAE,SAAS,CAAC,UAAU;oBAChC,KAAK;oBACL,YAAY,EAAE,IAAI;oBAClB,UAAU,EAAE;wBACV,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;wBAC3F,uBAAuB,EAAE,KAAK;wBAC9B,gBAAgB,EAAE,OAAO;wBACzB,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;wBACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;qBAC0B;iBAC/C,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,iDAAiD;YACnD,CAAC;QACH,CAAC;QACD,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,IAAI,eAAsC,CAAC;AAM3C,2EAA2E;AAC3E,MAAM,UAAU,gCAAgC,CAC9C,MAAsB,EACtB,WAAgC,iBAAiB;IAEjD,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;QACtB,2EAA2E;QAC3E,6EAA6E;QAC7E,YAAY,CAAC,GAAG,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,eAAe,KAAK,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACjD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,SAAS,GAAG,eAAe,CAAC;IAClC,MAAM,SAAS,EAAE,QAAQ,EAAE,CAAC;IAC5B,IAAI,eAAe,KAAK,SAAS;QAAE,eAAe,GAAG,SAAS,CAAC;AACjE,CAAC"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "fluxmail",
3
- "version": "0.2.1",
3
+ "version": "0.4.0",
4
4
  "mcpName": "io.github.churichard/fluxmail",
5
- "description": "Fluxmail MCP server: unified email tools over Gmail and IMAP/SMTP",
5
+ "description": "Self-hosted email API with MCP and REST support for Gmail, Outlook, and IMAP/SMTP",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
7
7
  "homepage": "https://github.com/churichard/fluxmail-mcp#readme",
8
8
  "repository": {
@@ -37,6 +37,7 @@
37
37
  },
38
38
  "dependencies": {
39
39
  "@hono/node-server": "^1.14.3",
40
+ "@hono/zod-openapi": "0.19.10",
40
41
  "@modelcontextprotocol/sdk": "^1.13.0",
41
42
  "better-sqlite3": "^11.10.0",
42
43
  "commander": "^13.1.0",
@@ -45,9 +46,10 @@
45
46
  "hono": "^4.7.11",
46
47
  "posthog-node": "^5.41.0",
47
48
  "zod": "^3.25.67",
48
- "@fluxmail/core": "0.2.1",
49
- "@fluxmail/provider-imap": "0.2.1",
50
- "@fluxmail/provider-gmail": "0.2.1"
49
+ "@fluxmail/core": "0.4.0",
50
+ "@fluxmail/provider-imap": "0.4.0",
51
+ "@fluxmail/provider-gmail": "0.4.0",
52
+ "@fluxmail/provider-outlook": "0.4.0"
51
53
  },
52
54
  "devDependencies": {
53
55
  "@types/better-sqlite3": "^7.6.13",