fluxmail 0.0.1 → 0.2.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 (92) hide show
  1. package/README.md +37 -10
  2. package/dist/accounts/googleAuth.d.ts +31 -0
  3. package/dist/accounts/googleAuth.d.ts.map +1 -0
  4. package/dist/accounts/googleAuth.js +147 -0
  5. package/dist/accounts/googleAuth.js.map +1 -0
  6. package/dist/accounts/registry.d.ts +37 -0
  7. package/dist/accounts/registry.d.ts.map +1 -0
  8. package/dist/accounts/registry.js +278 -0
  9. package/dist/accounts/registry.js.map +1 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +629 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/config.d.ts +40 -0
  15. package/dist/config.d.ts.map +1 -0
  16. package/dist/config.js +216 -0
  17. package/dist/config.js.map +1 -0
  18. package/dist/context.d.ts +15 -0
  19. package/dist/context.d.ts.map +1 -0
  20. package/dist/context.js +15 -0
  21. package/dist/context.js.map +1 -0
  22. package/dist/http/app.d.ts +16 -0
  23. package/dist/http/app.d.ts.map +1 -0
  24. package/dist/http/app.js +118 -0
  25. package/dist/http/app.js.map +1 -0
  26. package/dist/index.d.ts +14 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +14 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/licensing/activation.d.ts +5 -0
  31. package/dist/licensing/activation.d.ts.map +1 -0
  32. package/dist/licensing/activation.js +11 -0
  33. package/dist/licensing/activation.js.map +1 -0
  34. package/dist/licensing/client.d.ts +52 -0
  35. package/dist/licensing/client.d.ts.map +1 -0
  36. package/dist/licensing/client.js +75 -0
  37. package/dist/licensing/client.js.map +1 -0
  38. package/dist/licensing/entitlements.d.ts +55 -0
  39. package/dist/licensing/entitlements.d.ts.map +1 -0
  40. package/dist/licensing/entitlements.js +116 -0
  41. package/dist/licensing/entitlements.js.map +1 -0
  42. package/dist/licensing/lease.d.ts +47 -0
  43. package/dist/licensing/lease.d.ts.map +1 -0
  44. package/dist/licensing/lease.js +103 -0
  45. package/dist/licensing/lease.js.map +1 -0
  46. package/dist/licensing/refresher.d.ts +46 -0
  47. package/dist/licensing/refresher.d.ts.map +1 -0
  48. package/dist/licensing/refresher.js +150 -0
  49. package/dist/licensing/refresher.js.map +1 -0
  50. package/dist/mcp/buildServer.d.ts +28 -0
  51. package/dist/mcp/buildServer.d.ts.map +1 -0
  52. package/dist/mcp/buildServer.js +414 -0
  53. package/dist/mcp/buildServer.js.map +1 -0
  54. package/dist/scheduler/sendScheduler.d.ts +38 -0
  55. package/dist/scheduler/sendScheduler.d.ts.map +1 -0
  56. package/dist/scheduler/sendScheduler.js +128 -0
  57. package/dist/scheduler/sendScheduler.js.map +1 -0
  58. package/dist/service/emailService.d.ts +139 -0
  59. package/dist/service/emailService.d.ts.map +1 -0
  60. package/dist/service/emailService.js +380 -0
  61. package/dist/service/emailService.js.map +1 -0
  62. package/dist/storage/apiKeys.d.ts +27 -0
  63. package/dist/storage/apiKeys.d.ts.map +1 -0
  64. package/dist/storage/apiKeys.js +49 -0
  65. package/dist/storage/apiKeys.js.map +1 -0
  66. package/dist/storage/crypto.d.ts +4 -0
  67. package/dist/storage/crypto.d.ts.map +1 -0
  68. package/dist/storage/crypto.js +21 -0
  69. package/dist/storage/crypto.js.map +1 -0
  70. package/dist/storage/db.d.ts +1041 -0
  71. package/dist/storage/db.d.ts.map +1 -0
  72. package/dist/storage/db.js +211 -0
  73. package/dist/storage/db.js.map +1 -0
  74. package/dist/storage/imapState.d.ts +15 -0
  75. package/dist/storage/imapState.d.ts.map +1 -0
  76. package/dist/storage/imapState.js +89 -0
  77. package/dist/storage/imapState.js.map +1 -0
  78. package/dist/storage/members.d.ts +29 -0
  79. package/dist/storage/members.d.ts.map +1 -0
  80. package/dist/storage/members.js +67 -0
  81. package/dist/storage/members.js.map +1 -0
  82. package/dist/storage/scheduledSends.d.ts +60 -0
  83. package/dist/storage/scheduledSends.d.ts.map +1 -0
  84. package/dist/storage/scheduledSends.js +169 -0
  85. package/dist/storage/scheduledSends.js.map +1 -0
  86. package/dist/version.d.ts +2 -0
  87. package/dist/version.d.ts.map +1 -0
  88. package/dist/version.js +7 -0
  89. package/dist/version.js.map +1 -0
  90. package/package.json +49 -15
  91. package/bin/fluxmail.js +0 -4
  92. package/src/cli.js +0 -36
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ export interface FluxmailConfig {
2
+ dataDir: string;
3
+ dbPath: string;
4
+ /** 32-byte key for AES-256-GCM token encryption. */
5
+ encryptionKey: Buffer;
6
+ port: number;
7
+ /** Public base URL of the HTTP server, used to build OAuth redirect URIs. */
8
+ publicUrl: string;
9
+ /** Port for the ephemeral loopback OAuth listener used by `fluxmail accounts add`. */
10
+ oauthPort: number;
11
+ /** Bind address for the OAuth listener. Docker uses 0.0.0.0 so its published port can reach it. */
12
+ oauthHost: string;
13
+ /** 'apikey' (default) requires a bearer token on /mcp; 'none' is for trusted networks only. */
14
+ authMode: 'apikey' | 'none';
15
+ /** Paid-tier license key (fluxmail_lic_…); absent means free tier. */
16
+ licenseKey?: string;
17
+ /** Base URL of the hosted license server. */
18
+ licenseServerUrl: string;
19
+ google?: {
20
+ clientId: string;
21
+ clientSecret: string;
22
+ };
23
+ }
24
+ /**
25
+ * Load .env.local and .env from the working directory. Real environment
26
+ * variables always win; .env.local wins over .env.
27
+ */
28
+ export declare function loadDotEnv(cwd?: string): void;
29
+ /** Expand a leading "~" (e.g. FLUXMAIL_DATA_DIR=~/.fluxmail), which Node does not do. */
30
+ export declare function expandHome(p: string): string;
31
+ /** Resolve (and create) the data dir, honoring cwd .env files and FLUXMAIL_DATA_DIR. */
32
+ export declare function resolveDataDir(): string;
33
+ export declare function configFilePath(dataDir: string): string;
34
+ /** Settings persisted by `fluxmail config set`, e.g. GOOGLE_CLIENT_ID. */
35
+ export declare function readStoredConfig(dataDir: string): Record<string, string>;
36
+ export declare function setStoredConfig(dataDir: string, key: string, value: string): void;
37
+ export declare function unsetStoredConfig(dataDir: string, key: string): boolean;
38
+ export declare function maskStoredConfigValue(key: string, value: string): string;
39
+ export declare function loadConfig(): FluxmailConfig;
40
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAC;IAClB,mGAAmG;IACnG,SAAS,EAAE,MAAM,CAAC;IAClB,+FAA+F;IAC/F,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC5B,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAkDD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,SAAgB,GAAG,IAAI,CAGpD;AAED,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI5C;AAED,wFAAwF;AACxF,wBAAgB,cAAc,IAAI,MAAM,CAMvC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AAWD,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKxE;AAID,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAUjF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAMvE;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGxE;AA6DD,wBAAgB,UAAU,IAAI,cAAc,CAkC3C"}
package/dist/config.js ADDED
@@ -0,0 +1,216 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import path from 'node:path';
5
+ import { DEFAULT_LICENSE_SERVER_URL } from './licensing/client.js';
6
+ function unquoteEnvValue(value) {
7
+ if (value.startsWith('"') && value.endsWith('"')) {
8
+ try {
9
+ const parsed = JSON.parse(value);
10
+ return typeof parsed === 'string' ? parsed : value.slice(1, -1);
11
+ }
12
+ catch {
13
+ return value.slice(1, -1);
14
+ }
15
+ }
16
+ if (value.startsWith("'") && value.endsWith("'"))
17
+ return value.slice(1, -1);
18
+ return value;
19
+ }
20
+ function parseEnvValue(raw) {
21
+ // A fully quoted value may contain "#" verbatim.
22
+ if ((raw.startsWith('"') && raw.endsWith('"')) || (raw.startsWith("'") && raw.endsWith("'"))) {
23
+ return unquoteEnvValue(raw);
24
+ }
25
+ // Otherwise strip an inline comment (whitespace + #), like dotenv and docker compose do.
26
+ const quoted = raw.match(/^("(?:[^"\\]|\\.)*"|'[^']*')\s+#/);
27
+ if (quoted?.[1])
28
+ return unquoteEnvValue(quoted[1]);
29
+ const comment = raw.search(/\s#/);
30
+ return comment === -1 ? raw : raw.slice(0, comment).trimEnd();
31
+ }
32
+ function parseEnvContent(content) {
33
+ const out = {};
34
+ for (const line of content.split('\n')) {
35
+ const trimmed = line.trim();
36
+ if (!trimmed || trimmed.startsWith('#'))
37
+ continue;
38
+ const eq = trimmed.indexOf('=');
39
+ if (eq === -1)
40
+ continue;
41
+ const key = trimmed
42
+ .slice(0, eq)
43
+ .trim()
44
+ .replace(/^export\s+/, '');
45
+ if (key)
46
+ out[key] = parseEnvValue(trimmed.slice(eq + 1).trim());
47
+ }
48
+ return out;
49
+ }
50
+ function applyDotEnvFile(file) {
51
+ if (!existsSync(file))
52
+ return;
53
+ for (const [key, value] of Object.entries(parseEnvContent(readFileSync(file, 'utf8')))) {
54
+ if (process.env[key] === undefined)
55
+ process.env[key] = value;
56
+ }
57
+ }
58
+ /**
59
+ * Load .env.local and .env from the working directory. Real environment
60
+ * variables always win; .env.local wins over .env.
61
+ */
62
+ export function loadDotEnv(cwd = process.cwd()) {
63
+ applyDotEnvFile(path.join(cwd, '.env.local'));
64
+ applyDotEnvFile(path.join(cwd, '.env'));
65
+ }
66
+ /** Expand a leading "~" (e.g. FLUXMAIL_DATA_DIR=~/.fluxmail), which Node does not do. */
67
+ export function expandHome(p) {
68
+ if (p === '~')
69
+ return homedir();
70
+ if (p.startsWith('~/'))
71
+ return path.join(homedir(), p.slice(2));
72
+ return p;
73
+ }
74
+ /** Resolve (and create) the data dir, honoring cwd .env files and FLUXMAIL_DATA_DIR. */
75
+ export function resolveDataDir() {
76
+ loadDotEnv();
77
+ const fromEnv = process.env.FLUXMAIL_DATA_DIR;
78
+ const dataDir = fromEnv ? expandHome(fromEnv) : path.join(homedir(), '.fluxmail');
79
+ mkdirSync(dataDir, { recursive: true });
80
+ return dataDir;
81
+ }
82
+ export function configFilePath(dataDir) {
83
+ return path.join(dataDir, 'config.env');
84
+ }
85
+ /** Best-effort permission tightening: chmod fails on files owned by another user, but the read may still work. */
86
+ function tryRestrictPermissions(file) {
87
+ try {
88
+ chmodSync(file, 0o600);
89
+ }
90
+ catch {
91
+ // Reading (or a later write) will surface a real permission problem.
92
+ }
93
+ }
94
+ /** Settings persisted by `fluxmail config set`, e.g. GOOGLE_CLIENT_ID. */
95
+ export function readStoredConfig(dataDir) {
96
+ const file = configFilePath(dataDir);
97
+ if (!existsSync(file))
98
+ return {};
99
+ tryRestrictPermissions(file);
100
+ return parseEnvContent(readFileSync(file, 'utf8'));
101
+ }
102
+ const CONFIG_KEY_PATTERN = /^[A-Z][A-Z0-9_]*$/;
103
+ export function setStoredConfig(dataDir, key, value) {
104
+ if (!CONFIG_KEY_PATTERN.test(key)) {
105
+ throw new Error(`Invalid key "${key}": use UPPER_SNAKE_CASE, e.g. GOOGLE_CLIENT_ID`);
106
+ }
107
+ if (key === 'FLUXMAIL_DATA_DIR') {
108
+ throw new Error('FLUXMAIL_DATA_DIR cannot be stored in the data dir itself; set it in your shell or a .env file');
109
+ }
110
+ const stored = readStoredConfig(dataDir);
111
+ stored[key] = value;
112
+ writeStoredConfig(dataDir, stored);
113
+ }
114
+ export function unsetStoredConfig(dataDir, key) {
115
+ const stored = readStoredConfig(dataDir);
116
+ if (!(key in stored))
117
+ return false;
118
+ delete stored[key];
119
+ writeStoredConfig(dataDir, stored);
120
+ return true;
121
+ }
122
+ export function maskStoredConfigValue(key, value) {
123
+ if (!/SECRET|KEY|TOKEN|PASSWORD/i.test(key))
124
+ return value;
125
+ return value.length > 8 ? `${value.slice(0, 4)}…${value.slice(-4)}` : '********';
126
+ }
127
+ function writeStoredConfig(dataDir, values) {
128
+ const file = configFilePath(dataDir);
129
+ const lines = Object.entries(values).map(([k, v]) => `${k}=${JSON.stringify(v)}`);
130
+ writeFileSync(file, lines.join('\n') + (lines.length ? '\n' : ''), { mode: 0o600 });
131
+ tryRestrictPermissions(file);
132
+ }
133
+ function decodeEncryptionKey(value, errorMessage) {
134
+ if (!/^[0-9a-fA-F]{64}$/.test(value))
135
+ throw new Error(errorMessage);
136
+ return Buffer.from(value, 'hex');
137
+ }
138
+ function readPort(name, fallback) {
139
+ const raw = process.env[name];
140
+ if (raw === undefined)
141
+ return fallback;
142
+ const value = Number(raw);
143
+ if (!Number.isInteger(value) || value < 1 || value > 65_535) {
144
+ throw new Error(`${name} must be an integer between 1 and 65535, got "${raw}"`);
145
+ }
146
+ return value;
147
+ }
148
+ function readPublicUrl(port) {
149
+ const value = (process.env.FLUXMAIL_PUBLIC_URL ?? `http://localhost:${port}`).replace(/\/+$/, '');
150
+ let parsed;
151
+ try {
152
+ parsed = new URL(value);
153
+ }
154
+ catch {
155
+ throw new Error(`FLUXMAIL_PUBLIC_URL must be a valid HTTP or HTTPS URL, got "${value}"`);
156
+ }
157
+ if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
158
+ throw new Error(`FLUXMAIL_PUBLIC_URL must use HTTP or HTTPS, got "${parsed.protocol}"`);
159
+ }
160
+ if (parsed.username || parsed.password) {
161
+ throw new Error('FLUXMAIL_PUBLIC_URL cannot contain embedded credentials');
162
+ }
163
+ if (parsed.search || parsed.hash) {
164
+ throw new Error('FLUXMAIL_PUBLIC_URL cannot contain a query string or fragment');
165
+ }
166
+ return value;
167
+ }
168
+ function loadEncryptionKey(dataDir) {
169
+ const fromEnv = process.env.FLUXMAIL_ENCRYPTION_KEY;
170
+ if (fromEnv) {
171
+ return decodeEncryptionKey(fromEnv, 'FLUXMAIL_ENCRYPTION_KEY must be exactly 64 hex characters (32 bytes)');
172
+ }
173
+ // Auto-generate on first run so getting started requires zero key management.
174
+ const keyPath = path.join(dataDir, 'encryption.key');
175
+ if (existsSync(keyPath)) {
176
+ tryRestrictPermissions(keyPath);
177
+ const key = decodeEncryptionKey(readFileSync(keyPath, 'utf8').trim(), `Corrupt encryption key at ${keyPath}`);
178
+ return key;
179
+ }
180
+ const key = randomBytes(32);
181
+ writeFileSync(keyPath, key.toString('hex') + '\n', { mode: 0o600 });
182
+ return key;
183
+ }
184
+ export function loadConfig() {
185
+ // Precedence: shell env > cwd .env.local > cwd .env > data-dir config.env.
186
+ const dataDir = resolveDataDir();
187
+ applyDotEnvFile(configFilePath(dataDir));
188
+ const port = readPort('FLUXMAIL_PORT', 8977);
189
+ const oauthPort = readPort('FLUXMAIL_OAUTH_PORT', 8976);
190
+ const publicUrl = readPublicUrl(port);
191
+ const authModeEnv = process.env.FLUXMAIL_AUTH ?? 'apikey';
192
+ if (authModeEnv !== 'apikey' && authModeEnv !== 'none') {
193
+ throw new Error(`FLUXMAIL_AUTH must be "apikey" or "none", got "${authModeEnv}"`);
194
+ }
195
+ const config = {
196
+ dataDir,
197
+ dbPath: process.env.FLUXMAIL_DB_PATH ? expandHome(process.env.FLUXMAIL_DB_PATH) : path.join(dataDir, 'fluxmail.db'),
198
+ encryptionKey: loadEncryptionKey(dataDir),
199
+ port,
200
+ publicUrl,
201
+ oauthPort,
202
+ oauthHost: process.env.FLUXMAIL_OAUTH_HOST ?? '127.0.0.1',
203
+ authMode: authModeEnv,
204
+ licenseServerUrl: (process.env.FLUXMAIL_LICENSE_SERVER_URL ?? DEFAULT_LICENSE_SERVER_URL).replace(/\/+$/, ''),
205
+ };
206
+ const licenseKey = process.env.FLUXMAIL_LICENSE_KEY?.trim();
207
+ if (licenseKey)
208
+ config.licenseKey = licenseKey;
209
+ const clientId = process.env.GOOGLE_CLIENT_ID;
210
+ const clientSecret = process.env.GOOGLE_CLIENT_SECRET;
211
+ if (clientId && clientSecret) {
212
+ config.google = { clientId, clientSecret };
213
+ }
214
+ return config;
215
+ }
216
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type FluxmailConfig } from './config.js';
2
+ import { type FluxmailDb } from './storage/db.js';
3
+ import { AccountRegistry } from './accounts/registry.js';
4
+ import { EmailService } from './service/emailService.js';
5
+ import { SendScheduler } from './scheduler/sendScheduler.js';
6
+ export interface AppContext {
7
+ config: FluxmailConfig;
8
+ db: FluxmailDb;
9
+ registry: AccountRegistry;
10
+ service: EmailService;
11
+ /** Inert until start(); only the long-lived serve/stdio commands start it. */
12
+ scheduler: SendScheduler;
13
+ }
14
+ export declare function createContext(): AppContext;
15
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,EAAE,EAAE,UAAU,CAAC;IACf,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,YAAY,CAAC;IACtB,8EAA8E;IAC9E,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,wBAAgB,aAAa,IAAI,UAAU,CAQ1C"}
@@ -0,0 +1,15 @@
1
+ import { loadConfig } from './config.js';
2
+ import { openDb } from './storage/db.js';
3
+ import { AccountRegistry } from './accounts/registry.js';
4
+ import { EmailService } from './service/emailService.js';
5
+ import { SendScheduler } from './scheduler/sendScheduler.js';
6
+ export function createContext() {
7
+ const config = loadConfig();
8
+ const db = openDb(config.dbPath);
9
+ const registry = new AccountRegistry(db, config);
10
+ const service = new EmailService(registry, db);
11
+ const scheduler = new SendScheduler(db, service);
12
+ service.onScheduleChanged = () => scheduler.wake();
13
+ return { config, db, registry, service, scheduler };
14
+ }
15
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAuB,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAmB,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAW7D,MAAM,UAAU,aAAa;IAC3B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACjD,OAAO,CAAC,iBAAiB,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACnD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACtD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Hono } from 'hono';
2
+ import type { HttpBindings } from '@hono/node-server';
3
+ import type { FluxmailConfig } from '../config.js';
4
+ import type { FluxmailDb } from '../storage/db.js';
5
+ import type { AccountRegistry } from '../accounts/registry.js';
6
+ import type { EmailService } from '../service/emailService.js';
7
+ export interface AppDeps {
8
+ config: FluxmailConfig;
9
+ db: FluxmailDb;
10
+ registry: AccountRegistry;
11
+ service: EmailService;
12
+ }
13
+ export declare function createApp(deps: AppDeps): Hono<{
14
+ Bindings: HttpBindings;
15
+ }>;
16
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/http/app.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAQ5E,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,cAAc,CAAC;IACvB,EAAE,EAAE,UAAU,CAAC;IACf,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAAE,QAAQ,EAAE,YAAY,CAAA;CAAE,CAAC,CAsHzE"}
@@ -0,0 +1,118 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ import { Hono } from 'hono';
3
+ import { isEmailError } from '@fluxmail/core';
4
+ import { RESPONSE_ALREADY_SENT } from '@hono/node-server/utils/response';
5
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
6
+ import { authenticateApiKey } from '../storage/apiKeys.js';
7
+ import { buildMcpServer } from '../mcp/buildServer.js';
8
+ import { buildAuthUrl, createOAuthClient, exchangeCode } from '../accounts/googleAuth.js';
9
+ import { VERSION } from '../version.js';
10
+ const OAUTH_STATE_TTL_MS = 10 * 60 * 1000;
11
+ export function createApp(deps) {
12
+ const { config, db, registry, service } = deps;
13
+ const app = new Hono();
14
+ const oauthStates = new Map();
15
+ // Connecting a mailbox is instance administration: only unscoped admin keys
16
+ // qualify; member-scoped keys are confined to mailbox access over MCP.
17
+ const adminAuthorized = (c, allowQueryKey = false) => {
18
+ if (config.authMode === 'none')
19
+ return true;
20
+ const bearer = c.req.header('authorization')?.replace(/^Bearer\s+/i, '');
21
+ const key = bearer ?? (allowQueryKey ? c.req.query('key') : undefined);
22
+ if (!key)
23
+ return false;
24
+ return authenticateApiKey(db, key)?.memberId === null;
25
+ };
26
+ // Authenticate an MCP request and resolve the mailbox scope its key authorizes.
27
+ // A member-scoped key is confined to shared and owned mailboxes; an admin key
28
+ // (or authMode 'none') gets unscoped access.
29
+ const scopeForRequest = (c) => {
30
+ if (config.authMode === 'none')
31
+ return { memberId: null };
32
+ const bearer = c.req.header('authorization')?.replace(/^Bearer\s+/i, '');
33
+ return bearer ? authenticateApiKey(db, bearer) : null;
34
+ };
35
+ app.get('/healthz', (c) => c.json({ ok: true, name: 'fluxmail', version: VERSION }));
36
+ // Stateless Streamable HTTP: a fresh server+transport pair per request.
37
+ app.post('/mcp', async (c) => {
38
+ const scope = scopeForRequest(c);
39
+ if (!scope) {
40
+ return c.json({
41
+ jsonrpc: '2.0',
42
+ error: { code: -32001, message: 'Unauthorized: pass an API key as a Bearer token' },
43
+ id: null,
44
+ }, 401);
45
+ }
46
+ let body;
47
+ try {
48
+ body = await c.req.json();
49
+ }
50
+ catch {
51
+ return c.json({ jsonrpc: '2.0', error: { code: -32700, message: 'Parse error' }, id: null }, 400);
52
+ }
53
+ const server = buildMcpServer(service.withScope(scope));
54
+ const transport = new StreamableHTTPServerTransport({
55
+ sessionIdGenerator: undefined,
56
+ enableJsonResponse: true,
57
+ });
58
+ c.env.outgoing.on('close', () => {
59
+ void transport.close();
60
+ void server.close();
61
+ });
62
+ await server.connect(transport);
63
+ await transport.handleRequest(c.env.incoming, c.env.outgoing, body);
64
+ return RESPONSE_ALREADY_SENT;
65
+ });
66
+ const methodNotAllowed = (c) => c.json({
67
+ jsonrpc: '2.0',
68
+ error: { code: -32000, message: 'Method not allowed: this server runs in stateless mode' },
69
+ id: null,
70
+ }, 405);
71
+ app.get('/mcp', methodNotAllowed);
72
+ app.delete('/mcp', methodNotAllowed);
73
+ // Server-hosted OAuth flow (for remote deployments; the CLI uses a loopback flow instead).
74
+ app.get('/auth/google', (c) => {
75
+ if (!adminAuthorized(c, true)) {
76
+ return c.text('Unauthorized: append ?key=<an admin API key>', 401);
77
+ }
78
+ const now = Date.now();
79
+ for (const [state, expiry] of oauthStates) {
80
+ if (expiry < now)
81
+ oauthStates.delete(state);
82
+ }
83
+ const state = randomBytes(16).toString('hex');
84
+ oauthStates.set(state, now + OAUTH_STATE_TTL_MS);
85
+ const client = createOAuthClient(config, `${config.publicUrl}/auth/google/callback`);
86
+ return c.redirect(buildAuthUrl(client, state));
87
+ });
88
+ app.get('/auth/google/callback', async (c) => {
89
+ const state = c.req.query('state');
90
+ const expiry = state ? oauthStates.get(state) : undefined;
91
+ if (!state || !expiry || expiry < Date.now()) {
92
+ return c.text('Invalid or expired OAuth state. Restart from /auth/google.', 400);
93
+ }
94
+ oauthStates.delete(state);
95
+ const error = c.req.query('error');
96
+ if (error)
97
+ return c.text(`Google returned an error: ${error}`, 400);
98
+ const code = c.req.query('code');
99
+ if (!code)
100
+ return c.text('Missing code parameter.', 400);
101
+ const client = createOAuthClient(config, `${config.publicUrl}/auth/google/callback`);
102
+ try {
103
+ const { email, displayName, tokens } = await exchangeCode(client, code);
104
+ const account = registry.addGmailAccount(email, tokens, displayName);
105
+ return c.html(`<html><body style="font-family: sans-serif"><h2>${email} is connected to Fluxmail</h2>` +
106
+ `<p>Account id: <code>${account.id}</code>. You can close this tab.</p></body></html>`);
107
+ }
108
+ catch (err) {
109
+ // Surface why connecting failed (expired code, missing refresh token,
110
+ // account limit) instead of a blank 500 the user cannot act on.
111
+ if (isEmailError(err))
112
+ return c.text(`Could not connect the account: ${err.message}`, 400);
113
+ return c.text('Could not connect the account; check the server logs.', 500);
114
+ }
115
+ });
116
+ return app;
117
+ }
118
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/http/app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export { createContext, type AppContext } from './context.js';
2
+ export { createApp } from './http/app.js';
3
+ export { buildMcpServer } from './mcp/buildServer.js';
4
+ export { EmailService, buildForwardBody, type SendInput, type ForwardInput } from './service/emailService.js';
5
+ export { AccountRegistry } from './accounts/registry.js';
6
+ export { loadConfig, loadDotEnv, resolveDataDir, configFilePath, maskStoredConfigValue, readStoredConfig, setStoredConfig, unsetStoredConfig, type FluxmailConfig, } from './config.js';
7
+ export { openDb } from './storage/db.js';
8
+ export { encryptString, decryptString } from './storage/crypto.js';
9
+ export { getEntitlements, checkLicenseState, assertAccountLimit, assertMemberLimit, assertWithinQuota, readLeaseRow, saveLeaseToken, clearLease, PERSONAL_TIER, GRACE_PERIOD_MS, type Entitlements, type LicenseState, } from './licensing/entitlements.js';
10
+ export { addMember, getMember, findMember, listMembers, removeMember, type MemberInfo } from './storage/members.js';
11
+ export { verifyLease, licensePublicKeys, PINNED_LICENSE_PUBLIC_KEYS, type LeasePayload } from './licensing/lease.js';
12
+ export { validateLicense, releaseLicense, DEFAULT_LICENSE_SERVER_URL, LICENSE_KEY_PATTERN, type ValidateOutcome, } from './licensing/client.js';
13
+ export { refreshLicense, startLicenseRefresher, loadInstanceId, type RefreshResult } from './licensing/refresher.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9G,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,UAAU,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,UAAU,EACV,aAAa,EACb,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACpH,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACrH,OAAO,EACL,eAAe,EACf,cAAc,EACd,0BAA0B,EAC1B,mBAAmB,EACnB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ export { createContext } from './context.js';
2
+ export { createApp } from './http/app.js';
3
+ export { buildMcpServer } from './mcp/buildServer.js';
4
+ export { EmailService, buildForwardBody } from './service/emailService.js';
5
+ export { AccountRegistry } from './accounts/registry.js';
6
+ export { loadConfig, loadDotEnv, resolveDataDir, configFilePath, maskStoredConfigValue, readStoredConfig, setStoredConfig, unsetStoredConfig, } from './config.js';
7
+ export { openDb } from './storage/db.js';
8
+ export { encryptString, decryptString } from './storage/crypto.js';
9
+ export { getEntitlements, checkLicenseState, assertAccountLimit, assertMemberLimit, assertWithinQuota, readLeaseRow, saveLeaseToken, clearLease, PERSONAL_TIER, GRACE_PERIOD_MS, } from './licensing/entitlements.js';
10
+ export { addMember, getMember, findMember, listMembers, removeMember } from './storage/members.js';
11
+ export { verifyLease, licensePublicKeys, PINNED_LICENSE_PUBLIC_KEYS } from './licensing/lease.js';
12
+ export { validateLicense, releaseLicense, DEFAULT_LICENSE_SERVER_URL, LICENSE_KEY_PATTERN, } from './licensing/client.js';
13
+ export { refreshLicense, startLicenseRefresher, loadInstanceId } from './licensing/refresher.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAmB,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAqC,MAAM,2BAA2B,CAAC;AAC9G,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,UAAU,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,GAElB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,UAAU,EACV,aAAa,EACb,eAAe,GAGhB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAmB,MAAM,sBAAsB,CAAC;AACpH,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,0BAA0B,EAAqB,MAAM,sBAAsB,CAAC;AACrH,OAAO,EACL,eAAe,EACf,cAAc,EACd,0BAA0B,EAC1B,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,cAAc,EAAsB,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { FluxmailDb } from '../storage/db.js';
2
+ import { type RefreshOptions, type RefreshResult } from './refresher.js';
3
+ /** Validate a replacement key before allowing it to overwrite stored config. */
4
+ export declare function activateLicense(db: FluxmailDb, opts: RefreshOptions): Promise<RefreshResult>;
5
+ //# sourceMappingURL=activation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../src/licensing/activation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAkB,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEzF,gFAAgF;AAChF,wBAAsB,eAAe,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAMlG"}
@@ -0,0 +1,11 @@
1
+ import { setStoredConfig } from '../config.js';
2
+ import { refreshLicense } from './refresher.js';
3
+ /** Validate a replacement key before allowing it to overwrite stored config. */
4
+ export async function activateLicense(db, opts) {
5
+ const result = await refreshLicense(db, opts);
6
+ if (result.outcome === 'refreshed' || result.outcome === 'outage') {
7
+ setStoredConfig(opts.dataDir, 'FLUXMAIL_LICENSE_KEY', opts.licenseKey);
8
+ }
9
+ return result;
10
+ }
11
+ //# sourceMappingURL=activation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activation.js","sourceRoot":"","sources":["../../src/licensing/activation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,cAAc,EAA2C,MAAM,gBAAgB,CAAC;AAEzF,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAAc,EAAE,IAAoB;IACxE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC9C,IAAI,MAAM,CAAC,OAAO,KAAK,WAAW,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAClE,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}