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.
- package/README.md +15 -51
- package/dist/accounts/gmailConnection.d.ts +5 -1
- package/dist/accounts/gmailConnection.d.ts.map +1 -1
- package/dist/accounts/gmailConnection.js +14 -2
- package/dist/accounts/gmailConnection.js.map +1 -1
- package/dist/accounts/googleAuth.js +1 -1
- package/dist/accounts/googleAuth.js.map +1 -1
- package/dist/accounts/microsoftAuth.d.ts +21 -0
- package/dist/accounts/microsoftAuth.d.ts.map +1 -0
- package/dist/accounts/microsoftAuth.js +220 -0
- package/dist/accounts/microsoftAuth.js.map +1 -0
- package/dist/accounts/registry.d.ts +21 -8
- package/dist/accounts/registry.d.ts.map +1 -1
- package/dist/accounts/registry.js +190 -24
- package/dist/accounts/registry.js.map +1 -1
- package/dist/cli.d.ts +13 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +881 -572
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +105 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +128 -13
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +7 -1
- package/dist/context.js.map +1 -1
- package/dist/http/admin.d.ts +21 -0
- package/dist/http/admin.d.ts.map +1 -0
- package/dist/http/admin.js +618 -0
- package/dist/http/admin.js.map +1 -0
- package/dist/http/app.d.ts +2 -0
- package/dist/http/app.d.ts.map +1 -1
- package/dist/http/app.js +332 -45
- package/dist/http/app.js.map +1 -1
- package/dist/http/rest.d.ts +28 -0
- package/dist/http/rest.d.ts.map +1 -0
- package/dist/http/rest.js +1130 -0
- package/dist/http/rest.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/licensing/refresher.d.ts +23 -7
- package/dist/licensing/refresher.d.ts.map +1 -1
- package/dist/licensing/refresher.js +93 -37
- package/dist/licensing/refresher.js.map +1 -1
- package/dist/mcp/buildServer.d.ts +4 -2
- package/dist/mcp/buildServer.d.ts.map +1 -1
- package/dist/mcp/buildServer.js +286 -230
- package/dist/mcp/buildServer.js.map +1 -1
- package/dist/permissions.d.ts +30 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +119 -0
- package/dist/permissions.js.map +1 -0
- package/dist/service/emailService.d.ts +16 -9
- package/dist/service/emailService.d.ts.map +1 -1
- package/dist/service/emailService.js +44 -19
- package/dist/service/emailService.js.map +1 -1
- package/dist/storage/adminAudit.d.ts +14 -0
- package/dist/storage/adminAudit.d.ts.map +1 -0
- package/dist/storage/adminAudit.js +32 -0
- package/dist/storage/adminAudit.js.map +1 -0
- package/dist/storage/apiKeys.d.ts +28 -5
- package/dist/storage/apiKeys.d.ts.map +1 -1
- package/dist/storage/apiKeys.js +153 -10
- package/dist/storage/apiKeys.js.map +1 -1
- package/dist/storage/db.d.ts +524 -0
- package/dist/storage/db.d.ts.map +1 -1
- package/dist/storage/db.js +184 -8
- package/dist/storage/db.js.map +1 -1
- package/dist/storage/gmailConnectionGrants.d.ts +9 -0
- package/dist/storage/gmailConnectionGrants.d.ts.map +1 -1
- package/dist/storage/gmailConnectionGrants.js +30 -7
- package/dist/storage/gmailConnectionGrants.js.map +1 -1
- package/dist/storage/members.d.ts +7 -4
- package/dist/storage/members.d.ts.map +1 -1
- package/dist/storage/members.js +34 -8
- package/dist/storage/members.js.map +1 -1
- package/dist/storage/restIdempotency.d.ts +28 -0
- package/dist/storage/restIdempotency.d.ts.map +1 -0
- package/dist/storage/restIdempotency.js +47 -0
- package/dist/storage/restIdempotency.js.map +1 -0
- package/dist/telemetry.d.ts +9 -2
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +117 -54
- package/dist/telemetry.js.map +1 -1
- 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"}
|
package/dist/telemetry.d.ts
CHANGED
|
@@ -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
|
-
|
|
9
|
+
capture(options: {
|
|
8
10
|
distinctId: string;
|
|
9
11
|
event: string;
|
|
10
12
|
properties: Record<string, boolean | number | string>;
|
|
11
13
|
disableGeoip?: boolean;
|
|
12
|
-
}):
|
|
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 {};
|
package/dist/telemetry.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
status
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
58
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
package/dist/telemetry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fluxmail",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"mcpName": "io.github.churichard/fluxmail",
|
|
5
|
-
"description": "
|
|
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.
|
|
49
|
-
"@fluxmail/provider-imap": "0.
|
|
50
|
-
"@fluxmail/provider-gmail": "0.
|
|
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",
|