fluxmail 0.1.0 → 0.2.1

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 (73) hide show
  1. package/LICENSE.md +111 -0
  2. package/README.md +68 -0
  3. package/dist/accounts/gmailConnection.d.ts +17 -0
  4. package/dist/accounts/gmailConnection.d.ts.map +1 -0
  5. package/dist/accounts/gmailConnection.js +32 -0
  6. package/dist/accounts/gmailConnection.js.map +1 -0
  7. package/dist/accounts/googleAuth.js +7 -3
  8. package/dist/accounts/googleAuth.js.map +1 -1
  9. package/dist/accounts/registry.d.ts +11 -2
  10. package/dist/accounts/registry.d.ts.map +1 -1
  11. package/dist/accounts/registry.js +121 -28
  12. package/dist/accounts/registry.js.map +1 -1
  13. package/dist/cli.js +278 -15
  14. package/dist/cli.js.map +1 -1
  15. package/dist/config.d.ts +5 -1
  16. package/dist/config.d.ts.map +1 -1
  17. package/dist/config.js +20 -13
  18. package/dist/config.js.map +1 -1
  19. package/dist/context.d.ts +2 -0
  20. package/dist/context.d.ts.map +1 -1
  21. package/dist/context.js +3 -1
  22. package/dist/context.js.map +1 -1
  23. package/dist/http/app.d.ts +2 -0
  24. package/dist/http/app.d.ts.map +1 -1
  25. package/dist/http/app.js +96 -18
  26. package/dist/http/app.js.map +1 -1
  27. package/dist/index.d.ts +5 -4
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +4 -3
  30. package/dist/index.js.map +1 -1
  31. package/dist/licensing/activation.d.ts.map +1 -1
  32. package/dist/licensing/activation.js.map +1 -1
  33. package/dist/licensing/entitlements.d.ts.map +1 -1
  34. package/dist/licensing/entitlements.js.map +1 -1
  35. package/dist/licensing/lease.d.ts.map +1 -1
  36. package/dist/licensing/lease.js.map +1 -1
  37. package/dist/mcp/buildServer.d.ts +7 -1
  38. package/dist/mcp/buildServer.d.ts.map +1 -1
  39. package/dist/mcp/buildServer.js +108 -40
  40. package/dist/mcp/buildServer.js.map +1 -1
  41. package/dist/scheduler/sendScheduler.d.ts.map +1 -1
  42. package/dist/scheduler/sendScheduler.js +1 -3
  43. package/dist/scheduler/sendScheduler.js.map +1 -1
  44. package/dist/service/emailService.d.ts +1 -0
  45. package/dist/service/emailService.d.ts.map +1 -1
  46. package/dist/service/emailService.js +11 -6
  47. package/dist/service/emailService.js.map +1 -1
  48. package/dist/storage/apiKeys.d.ts.map +1 -1
  49. package/dist/storage/apiKeys.js +8 -2
  50. package/dist/storage/apiKeys.js.map +1 -1
  51. package/dist/storage/db.d.ts +446 -0
  52. package/dist/storage/db.d.ts.map +1 -1
  53. package/dist/storage/db.js +89 -0
  54. package/dist/storage/db.js.map +1 -1
  55. package/dist/storage/gmailConnectionGrants.d.ts +28 -0
  56. package/dist/storage/gmailConnectionGrants.d.ts.map +1 -0
  57. package/dist/storage/gmailConnectionGrants.js +70 -0
  58. package/dist/storage/gmailConnectionGrants.js.map +1 -0
  59. package/dist/storage/imapState.d.ts +15 -0
  60. package/dist/storage/imapState.d.ts.map +1 -0
  61. package/dist/storage/imapState.js +89 -0
  62. package/dist/storage/imapState.js.map +1 -0
  63. package/dist/storage/members.d.ts.map +1 -1
  64. package/dist/storage/members.js.map +1 -1
  65. package/dist/storage/scheduledSends.d.ts.map +1 -1
  66. package/dist/storage/scheduledSends.js.map +1 -1
  67. package/dist/telemetry.d.ts +28 -0
  68. package/dist/telemetry.d.ts.map +1 -0
  69. package/dist/telemetry.js +220 -0
  70. package/dist/telemetry.js.map +1 -0
  71. package/dist/version.d.ts.map +1 -1
  72. package/dist/version.js.map +1 -1
  73. package/package.json +22 -7
package/dist/cli.js CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
+ import { emitKeypressEvents } from 'node:readline';
2
3
  import { Command } from 'commander';
3
4
  import { serve } from '@hono/node-server';
4
5
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
@@ -8,6 +9,7 @@ import { configFilePath, maskStoredConfigValue, readStoredConfig, resolveDataDir
8
9
  import { createApp } from './http/app.js';
9
10
  import { buildMcpServer } from './mcp/buildServer.js';
10
11
  import { runLoopbackFlow } from './accounts/googleAuth.js';
12
+ import { prepareHostedGmailConnection, selectGmailConnectionMode, validateAccountConnectionFlags, } from './accounts/gmailConnection.js';
11
13
  import { createApiKey, listApiKeys, revokeApiKey } from './storage/apiKeys.js';
12
14
  import { addMember, findMember, listMembers, removeMember } from './storage/members.js';
13
15
  import { activateLicense } from './licensing/activation.js';
@@ -17,6 +19,71 @@ import { checkLicenseState, clearLease, getEntitlements, readLeaseRow, } from '.
17
19
  import { loadInstanceId, startLicenseRefresher } from './licensing/refresher.js';
18
20
  import { VERSION } from './version.js';
19
21
  import { countPending } from './storage/scheduledSends.js';
22
+ import { getTelemetry, isTelemetryEnabled, setTelemetryEnabled, shutdownTelemetry } from './telemetry.js';
23
+ function connectionPort(value, option) {
24
+ const port = Number(value);
25
+ if (!Number.isInteger(port) || port < 1 || port > 65_535) {
26
+ throw new EmailError('invalid_request', `${option} must be an integer between 1 and 65535.`);
27
+ }
28
+ return port;
29
+ }
30
+ function connectionSecurity(value, option) {
31
+ if (value !== 'tls' && value !== 'starttls') {
32
+ throw new EmailError('invalid_request', `${option} must be "tls" or "starttls".`);
33
+ }
34
+ return value;
35
+ }
36
+ async function hiddenPrompt(label) {
37
+ if (!process.stdin.isTTY || !process.stdin.setRawMode) {
38
+ throw new EmailError('invalid_request', `${label} must be supplied through a password environment variable.`);
39
+ }
40
+ emitKeypressEvents(process.stdin);
41
+ const wasRaw = process.stdin.isRaw;
42
+ const wasPaused = process.stdin.isPaused();
43
+ process.stdout.write(`${label}: `);
44
+ process.stdin.setRawMode(true);
45
+ process.stdin.resume();
46
+ return new Promise((resolve, reject) => {
47
+ let value = '';
48
+ const finish = (error) => {
49
+ process.stdin.off('keypress', onKeypress);
50
+ process.stdin.setRawMode(wasRaw);
51
+ if (wasPaused)
52
+ process.stdin.pause();
53
+ process.stdout.write('\n');
54
+ if (error)
55
+ reject(error);
56
+ else
57
+ resolve(value);
58
+ };
59
+ const onKeypress = (input, key) => {
60
+ if (key.ctrl && key.name === 'c')
61
+ return finish(new Error('Canceled'));
62
+ if (key.name === 'return' || key.name === 'enter')
63
+ return finish();
64
+ if (key.name === 'backspace') {
65
+ if (value) {
66
+ value = value.slice(0, -1);
67
+ process.stdout.write('\b \b');
68
+ }
69
+ return;
70
+ }
71
+ if (key.ctrl || !input)
72
+ return;
73
+ value += input;
74
+ process.stdout.write('*'.repeat([...input].length));
75
+ };
76
+ process.stdin.on('keypress', onKeypress);
77
+ });
78
+ }
79
+ async function accountSecret(envName, label) {
80
+ if (!envName)
81
+ return hiddenPrompt(label);
82
+ const value = process.env[envName];
83
+ if (!value)
84
+ throw new EmailError('invalid_request', `${envName} is not set or is empty.`);
85
+ return value;
86
+ }
20
87
  function planLine(ent) {
21
88
  const members = `${ent.maxMembers} member${ent.maxMembers === 1 ? '' : 's'}`;
22
89
  return `${ent.plan} (up to ${ent.maxAccounts} mailboxes, ${members})`;
@@ -28,7 +95,31 @@ function warnLicense(db, log = console.error) {
28
95
  log(`Warning: ${warning}`);
29
96
  }
30
97
  const program = new Command();
31
- program.name('fluxmail').description('Fluxmail, a self-hosted MCP server for your email').version(VERSION);
98
+ program
99
+ .name('fluxmail')
100
+ .description('Fluxmail, a self-hosted MCP server for your email')
101
+ .version(VERSION, '-v, --version');
102
+ function commandPath(command) {
103
+ const names = [];
104
+ for (let current = command; current?.parent; current = current.parent)
105
+ names.unshift(current.name());
106
+ return names.join(' ');
107
+ }
108
+ program.hook('preAction', (_command, actionCommand) => {
109
+ const command = commandPath(actionCommand);
110
+ // Respect the opt-out before creating a telemetry client or recording this command.
111
+ if (command === 'telemetry disable')
112
+ return;
113
+ const dataDir = resolveDataDir();
114
+ getTelemetry(dataDir).capture('cli command used', {
115
+ product_surface: 'cli',
116
+ command,
117
+ });
118
+ });
119
+ program.hook('postAction', async (_command, actionCommand) => {
120
+ if (actionCommand.name() !== 'serve' && actionCommand.name() !== 'stdio')
121
+ await shutdownTelemetry();
122
+ });
32
123
  program
33
124
  .command('serve')
34
125
  .description('Run the HTTP server (Streamable HTTP MCP at /mcp)')
@@ -37,8 +128,9 @@ program
37
128
  const app = createApp(ctx);
38
129
  ctx.scheduler.start();
39
130
  serve({ fetch: app.fetch, port: ctx.config.port }, () => {
40
- console.log(`Fluxmail listening on ${ctx.config.baseUrl}`);
41
- console.log(` MCP endpoint: ${ctx.config.baseUrl}/mcp`);
131
+ ctx.telemetry.capture('mcp server started', { product_surface: 'mcp', transport: 'http' });
132
+ console.log(`Fluxmail listening on ${ctx.config.publicUrl}`);
133
+ console.log(` MCP endpoint: ${ctx.config.publicUrl}/mcp`);
42
134
  console.log(` Auth mode: ${ctx.config.authMode}`);
43
135
  if (ctx.config.authMode === 'apikey' && listApiKeys(ctx.db).length === 0) {
44
136
  console.log(' Note: no API keys exist yet. Run "fluxmail apikey create --name <name>" to create one.');
@@ -46,7 +138,7 @@ program
46
138
  const accounts = ctx.registry.listAccounts();
47
139
  console.log(accounts.length
48
140
  ? ` Accounts: ${accounts.map((a) => `${a.email} (${a.status})`).join(', ')}`
49
- : ' Accounts: none (run "fluxmail accounts add gmail")');
141
+ : ' Accounts: none (run "fluxmail accounts add gmail" or "fluxmail accounts add imap")');
50
142
  console.log(` Plan: ${planLine(getEntitlements(ctx.db))}`);
51
143
  warnLicense(ctx.db, console.log);
52
144
  startLicenseRefresher({
@@ -62,9 +154,10 @@ program
62
154
  .description('Run as a stdio MCP server (for Claude Desktop / Claude Code local config)')
63
155
  .action(async () => {
64
156
  const ctx = createContext();
65
- const server = buildMcpServer(ctx.service);
157
+ const server = buildMcpServer(ctx.service, { telemetry: ctx.telemetry, transport: 'stdio' });
66
158
  ctx.scheduler.start();
67
159
  await server.connect(new StdioServerTransport());
160
+ ctx.telemetry.capture('mcp server started', { product_surface: 'mcp', transport: 'stdio' });
68
161
  // stdout belongs to the MCP protocol; log to stderr only.
69
162
  startLicenseRefresher({
70
163
  db: ctx.db,
@@ -81,19 +174,40 @@ program
81
174
  const accounts = program.command('accounts').description('Manage connected email accounts');
82
175
  accounts
83
176
  .command('add')
84
- .argument('<provider>', 'Email provider (currently: gmail)')
177
+ .argument('<provider>', 'Email provider: gmail or imap')
85
178
  .option('--reauthorize <account-id>', 'Reconnect an existing account')
86
179
  .option('--member <member>', 'Member (id or email) who owns the new mailbox; omit for a shared mailbox')
87
- .description('Connect an account via OAuth (opens a browser consent flow)')
88
- .action(async (provider, opts) => {
89
- if (provider !== 'gmail') {
90
- console.error(`Provider "${provider}" is not supported yet. Available: gmail`);
180
+ .option('--local', 'Use the local browser callback for Gmail')
181
+ .option('--hosted', 'Use FLUXMAIL_PUBLIC_URL for the Gmail callback')
182
+ .option('--email <address>', 'Mailbox address (required for IMAP)')
183
+ .option('--display-name <name>', 'Sender name for IMAP messages')
184
+ .option('--imap-host <host>', 'IMAP server hostname')
185
+ .option('--imap-port <port>', 'IMAP server port', '993')
186
+ .option('--imap-security <mode>', 'IMAP security: tls or starttls', 'tls')
187
+ .option('--imap-user <user>', 'IMAP username; defaults to the mailbox address')
188
+ .option('--imap-password-env <name>', 'Read the IMAP password from this environment variable')
189
+ .option('--smtp-host <host>', 'SMTP server hostname')
190
+ .option('--smtp-port <port>', 'SMTP server port', '587')
191
+ .option('--smtp-security <mode>', 'SMTP security: tls or starttls', 'starttls')
192
+ .option('--smtp-user <user>', 'SMTP username; defaults to the IMAP username')
193
+ .option('--smtp-password-env <name>', 'Read a separate SMTP password from this environment variable')
194
+ .option('--sent-folder <path>', 'Sent mailbox path')
195
+ .option('--drafts-folder <path>', 'Drafts mailbox path')
196
+ .option('--trash-folder <path>', 'Trash mailbox path')
197
+ .option('--archive-folder <path>', 'Archive mailbox path')
198
+ .option('--spam-folder <path>', 'Spam mailbox path')
199
+ .option('--no-save-sent', 'Do not append SMTP submissions to the Sent folder')
200
+ .description('Connect a Gmail or IMAP account')
201
+ .action(async (provider, opts, command) => {
202
+ if (provider !== 'gmail' && provider !== 'imap') {
203
+ console.error(`Provider "${provider}" is not supported. Available: gmail, imap`);
91
204
  process.exitCode = 1;
92
205
  return;
93
206
  }
94
207
  const ctx = createContext();
95
208
  warnLicense(ctx.db);
96
209
  try {
210
+ validateAccountConnectionFlags(provider, opts);
97
211
  if (opts.reauthorize && opts.member) {
98
212
  throw new EmailError('invalid_request', '--member cannot be combined with --reauthorize; use "fluxmail accounts assign" to change ownership.');
99
213
  }
@@ -105,6 +219,69 @@ accounts
105
219
  }
106
220
  if (!existing)
107
221
  ctx.registry.assertCanAddAccount();
222
+ if (provider === 'imap') {
223
+ const previousCredentials = existing ? ctx.registry.loadImapCredentials(existing.id) : undefined;
224
+ const email = opts.email?.trim();
225
+ if (!email || !email.includes('@'))
226
+ throw new EmailError('invalid_request', '--email must be a mailbox address.');
227
+ if (!opts.imapHost)
228
+ throw new EmailError('invalid_request', '--imap-host is required for IMAP accounts.');
229
+ if (!opts.smtpHost)
230
+ throw new EmailError('invalid_request', '--smtp-host is required for IMAP accounts.');
231
+ if (existing && existing.email !== email) {
232
+ throw new EmailError('invalid_request', `Account ${existing.id} belongs to ${existing.email}, not ${email}.`);
233
+ }
234
+ const imapPassword = await accountSecret(opts.imapPasswordEnv, 'IMAP password');
235
+ const smtpPassword = opts.smtpPasswordEnv
236
+ ? await accountSecret(opts.smtpPasswordEnv, 'SMTP password')
237
+ : imapPassword;
238
+ const imapUser = opts.imapUser ?? email;
239
+ const credentials = {
240
+ imap: {
241
+ host: opts.imapHost,
242
+ port: connectionPort(opts.imapPort, '--imap-port'),
243
+ security: connectionSecurity(opts.imapSecurity, '--imap-security'),
244
+ user: imapUser,
245
+ password: imapPassword,
246
+ },
247
+ smtp: {
248
+ host: opts.smtpHost,
249
+ port: connectionPort(opts.smtpPort, '--smtp-port'),
250
+ security: connectionSecurity(opts.smtpSecurity, '--smtp-security'),
251
+ user: opts.smtpUser ?? imapUser,
252
+ password: smtpPassword,
253
+ },
254
+ saveSent: previousCredentials && command.getOptionValueSource('saveSent') === 'default'
255
+ ? previousCredentials.saveSent
256
+ : opts.saveSent,
257
+ folderOverrides: {
258
+ ...previousCredentials?.folderOverrides,
259
+ ...(opts.sentFolder ? { sent: opts.sentFolder } : {}),
260
+ ...(opts.draftsFolder ? { drafts: opts.draftsFolder } : {}),
261
+ ...(opts.trashFolder ? { trash: opts.trashFolder } : {}),
262
+ ...(opts.archiveFolder ? { archive: opts.archiveFolder } : {}),
263
+ ...(opts.spamFolder ? { spam: opts.spamFolder } : {}),
264
+ },
265
+ };
266
+ console.log('Checking IMAP and SMTP settings...');
267
+ const warnings = await ctx.registry.testImapCredentials(email, credentials, opts.displayName);
268
+ const account = ctx.registry.addImapAccount(email, credentials, opts.displayName, member?.id, opts.reauthorize);
269
+ console.log(`Connected ${account.email} (account id: ${account.id})`);
270
+ for (const warning of warnings)
271
+ console.log(`Warning: ${warning.message}.`);
272
+ return;
273
+ }
274
+ const gmailConnectionMode = selectGmailConnectionMode(ctx.config, opts);
275
+ if (gmailConnectionMode === 'hosted') {
276
+ const { connectionUrl } = prepareHostedGmailConnection(ctx.db, ctx.config, {
277
+ ...(member ? { memberId: member.id } : {}),
278
+ ...(existing ? { reauthorizeAccountId: existing.id } : {}),
279
+ });
280
+ console.log('\nOpen this URL in your browser to connect Gmail:\n');
281
+ console.log(` ${connectionUrl}\n`);
282
+ console.log('This link expires in 10 minutes and can only be used once.');
283
+ return;
284
+ }
108
285
  const account = await runLoopbackFlow(ctx.config, (url) => {
109
286
  console.log('\nOpen this URL in your browser to authorize Gmail access:\n');
110
287
  console.log(` ${url}\n`);
@@ -129,6 +306,68 @@ accounts
129
306
  process.exitCode = 1;
130
307
  }
131
308
  });
309
+ accounts
310
+ .command('configure')
311
+ .argument('<accountId>')
312
+ .option('--sent-folder <path>', 'Sent path, or auto to clear the override')
313
+ .option('--drafts-folder <path>', 'Drafts path, or auto to clear the override')
314
+ .option('--trash-folder <path>', 'Trash path, or auto to clear the override')
315
+ .option('--archive-folder <path>', 'Archive path, or auto to clear the override')
316
+ .option('--spam-folder <path>', 'Spam path, or auto to clear the override')
317
+ .description('Set special folder paths for an IMAP account')
318
+ .action(async (accountId, opts) => {
319
+ const ctx = createContext();
320
+ warnLicense(ctx.db);
321
+ try {
322
+ const changes = [
323
+ ['sent', opts.sentFolder],
324
+ ['drafts', opts.draftsFolder],
325
+ ['trash', opts.trashFolder],
326
+ ['archive', opts.archiveFolder],
327
+ ['spam', opts.spamFolder],
328
+ ];
329
+ if (!changes.some(([, value]) => value !== undefined)) {
330
+ throw new EmailError('invalid_request', 'Pass at least one folder option.');
331
+ }
332
+ const credentials = ctx.registry.loadImapCredentials(accountId);
333
+ const provider = ctx.registry.getProvider(accountId);
334
+ try {
335
+ const existingPaths = new Set((await provider.listFolders()).map((folder) => folder.id));
336
+ const overrides = { ...credentials.folderOverrides };
337
+ for (const [role, value] of changes) {
338
+ if (value === undefined)
339
+ continue;
340
+ if (value === 'auto')
341
+ delete overrides[role];
342
+ else {
343
+ if (!existingPaths.has(value)) {
344
+ throw new EmailError('not_found', `No selectable mailbox named "${value}".`);
345
+ }
346
+ overrides[role] = value;
347
+ }
348
+ }
349
+ credentials.folderOverrides = overrides;
350
+ ctx.registry.saveImapCredentials(accountId, credentials);
351
+ const checked = ctx.registry.getProvider(accountId);
352
+ try {
353
+ console.log(`Updated folder settings for ${accountId}.`);
354
+ for (const warning of (await checked.getFolderWarnings?.()) ?? []) {
355
+ console.log(`Warning: ${warning.message}.`);
356
+ }
357
+ }
358
+ finally {
359
+ await checked.close?.();
360
+ }
361
+ }
362
+ finally {
363
+ await provider.close?.();
364
+ }
365
+ }
366
+ catch (err) {
367
+ console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
368
+ process.exitCode = 1;
369
+ }
370
+ });
132
371
  accounts
133
372
  .command('list')
134
373
  .description('List connected accounts')
@@ -137,7 +376,7 @@ accounts
137
376
  warnLicense(ctx.db);
138
377
  const all = ctx.registry.listAccounts();
139
378
  if (!all.length) {
140
- console.log('No accounts connected. Run "fluxmail accounts add gmail".');
379
+ console.log('No accounts connected. Run "fluxmail accounts add gmail" or "fluxmail accounts add imap".');
141
380
  return;
142
381
  }
143
382
  const memberNames = new Map(listMembers(ctx.db).map((m) => [m.id, m.name]));
@@ -171,9 +410,7 @@ accounts
171
410
  }
172
411
  const member = opts.member ? findMember(ctx.db, opts.member) : undefined;
173
412
  const account = ctx.registry.assignAccountMember(accountId, member?.id ?? null);
174
- console.log(member
175
- ? `${account.email} is now owned by ${member.name}`
176
- : `${account.email} is now shared`);
413
+ console.log(member ? `${account.email} is now owned by ${member.name}` : `${account.email} is now shared`);
177
414
  }
178
415
  catch (err) {
179
416
  console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
@@ -419,6 +656,31 @@ configCmd
419
656
  console.log(`${key}=${maskStoredConfigValue(key, value)}`);
420
657
  }
421
658
  });
659
+ const telemetryCmd = program.command('telemetry').description('Manage anonymous usage telemetry');
660
+ telemetryCmd
661
+ .command('disable')
662
+ .description('Stop sending anonymous usage telemetry')
663
+ .action(() => {
664
+ const dataDir = resolveDataDir();
665
+ setTelemetryEnabled(dataDir, false);
666
+ console.log('Telemetry disabled.');
667
+ });
668
+ telemetryCmd
669
+ .command('enable')
670
+ .description('Allow anonymous usage telemetry')
671
+ .action(() => {
672
+ const dataDir = resolveDataDir();
673
+ setTelemetryEnabled(dataDir, true);
674
+ unsetStoredConfig(dataDir, 'FLUXMAIL_TELEMETRY');
675
+ console.log('Telemetry enabled. FLUXMAIL_TELEMETRY=0 or DO_NOT_TRACK=1 can still turn it off.');
676
+ });
677
+ telemetryCmd
678
+ .command('status')
679
+ .description('Show whether anonymous usage telemetry is enabled')
680
+ .action(() => {
681
+ const dataDir = resolveDataDir();
682
+ console.log(`Telemetry is ${isTelemetryEnabled(dataDir) ? 'enabled' : 'disabled'}.`);
683
+ });
422
684
  program
423
685
  .command('status')
424
686
  .description('Show accounts, members, entitlements, and provider availability')
@@ -427,8 +689,9 @@ program
427
689
  warnLicense(ctx.db);
428
690
  console.log(JSON.stringify(await ctx.service.status(), null, 2));
429
691
  });
430
- program.parseAsync(process.argv).catch((err) => {
692
+ program.parseAsync(process.argv).catch(async (err) => {
431
693
  console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
432
694
  process.exitCode = 1;
695
+ await shutdownTelemetry();
433
696
  });
434
697
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -5,7 +5,9 @@ export interface FluxmailConfig {
5
5
  encryptionKey: Buffer;
6
6
  port: number;
7
7
  /** Public base URL of the HTTP server, used to build OAuth redirect URIs. */
8
- baseUrl: string;
8
+ publicUrl: string;
9
+ /** Whether FLUXMAIL_PUBLIC_URL was explicitly set instead of using the localhost default. */
10
+ publicUrlConfigured?: boolean;
9
11
  /** Port for the ephemeral loopback OAuth listener used by `fluxmail accounts add`. */
10
12
  oauthPort: number;
11
13
  /** Bind address for the OAuth listener. Docker uses 0.0.0.0 so its published port can reach it. */
@@ -31,6 +33,8 @@ export declare function expandHome(p: string): string;
31
33
  /** Resolve (and create) the data dir, honoring cwd .env files and FLUXMAIL_DATA_DIR. */
32
34
  export declare function resolveDataDir(): string;
33
35
  export declare function configFilePath(dataDir: string): string;
36
+ /** Apply settings persisted by `fluxmail config set` without overriding the current environment. */
37
+ export declare function applyStoredConfig(dataDir: string): void;
34
38
  /** Settings persisted by `fluxmail config set`, e.g. GOOGLE_CLIENT_ID. */
35
39
  export declare function readStoredConfig(dataDir: string): Record<string, string>;
36
40
  export declare function setStoredConfig(dataDir: string, key: string, value: string): void;
@@ -1 +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,OAAO,EAAE,MAAM,CAAC;IAChB,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;AA+CD;;;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;AAmED,wBAAgB,UAAU,IAAI,cAAc,CAoC3C"}
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,6FAA6F;IAC7F,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,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;AAED,oGAAoG;AACpG,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEvD;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,CAoC3C"}
package/dist/config.js CHANGED
@@ -38,7 +38,10 @@ function parseEnvContent(content) {
38
38
  const eq = trimmed.indexOf('=');
39
39
  if (eq === -1)
40
40
  continue;
41
- const key = trimmed.slice(0, eq).trim().replace(/^export\s+/, '');
41
+ const key = trimmed
42
+ .slice(0, eq)
43
+ .trim()
44
+ .replace(/^export\s+/, '');
42
45
  if (key)
43
46
  out[key] = parseEnvValue(trimmed.slice(eq + 1).trim());
44
47
  }
@@ -79,6 +82,10 @@ export function resolveDataDir() {
79
82
  export function configFilePath(dataDir) {
80
83
  return path.join(dataDir, 'config.env');
81
84
  }
85
+ /** Apply settings persisted by `fluxmail config set` without overriding the current environment. */
86
+ export function applyStoredConfig(dataDir) {
87
+ applyDotEnvFile(configFilePath(dataDir));
88
+ }
82
89
  /** Best-effort permission tightening: chmod fails on files owned by another user, but the read may still work. */
83
90
  function tryRestrictPermissions(file) {
84
91
  try {
@@ -142,23 +149,23 @@ function readPort(name, fallback) {
142
149
  }
143
150
  return value;
144
151
  }
145
- function readBaseUrl(port) {
146
- const value = (process.env.FLUXMAIL_BASE_URL ?? `http://localhost:${port}`).replace(/\/+$/, '');
152
+ function readPublicUrl(port) {
153
+ const value = (process.env.FLUXMAIL_PUBLIC_URL ?? `http://localhost:${port}`).replace(/\/+$/, '');
147
154
  let parsed;
148
155
  try {
149
156
  parsed = new URL(value);
150
157
  }
151
158
  catch {
152
- throw new Error(`FLUXMAIL_BASE_URL must be a valid HTTP or HTTPS URL, got "${value}"`);
159
+ throw new Error(`FLUXMAIL_PUBLIC_URL must be a valid HTTP or HTTPS URL, got "${value}"`);
153
160
  }
154
161
  if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
155
- throw new Error(`FLUXMAIL_BASE_URL must use HTTP or HTTPS, got "${parsed.protocol}"`);
162
+ throw new Error(`FLUXMAIL_PUBLIC_URL must use HTTP or HTTPS, got "${parsed.protocol}"`);
156
163
  }
157
164
  if (parsed.username || parsed.password) {
158
- throw new Error('FLUXMAIL_BASE_URL cannot contain embedded credentials');
165
+ throw new Error('FLUXMAIL_PUBLIC_URL cannot contain embedded credentials');
159
166
  }
160
167
  if (parsed.search || parsed.hash) {
161
- throw new Error('FLUXMAIL_BASE_URL cannot contain a query string or fragment');
168
+ throw new Error('FLUXMAIL_PUBLIC_URL cannot contain a query string or fragment');
162
169
  }
163
170
  return value;
164
171
  }
@@ -181,22 +188,22 @@ function loadEncryptionKey(dataDir) {
181
188
  export function loadConfig() {
182
189
  // Precedence: shell env > cwd .env.local > cwd .env > data-dir config.env.
183
190
  const dataDir = resolveDataDir();
184
- applyDotEnvFile(configFilePath(dataDir));
191
+ applyStoredConfig(dataDir);
185
192
  const port = readPort('FLUXMAIL_PORT', 8977);
186
193
  const oauthPort = readPort('FLUXMAIL_OAUTH_PORT', 8976);
187
- const baseUrl = readBaseUrl(port);
194
+ const publicUrlConfigured = process.env.FLUXMAIL_PUBLIC_URL !== undefined;
195
+ const publicUrl = readPublicUrl(port);
188
196
  const authModeEnv = process.env.FLUXMAIL_AUTH ?? 'apikey';
189
197
  if (authModeEnv !== 'apikey' && authModeEnv !== 'none') {
190
198
  throw new Error(`FLUXMAIL_AUTH must be "apikey" or "none", got "${authModeEnv}"`);
191
199
  }
192
200
  const config = {
193
201
  dataDir,
194
- dbPath: process.env.FLUXMAIL_DB_PATH
195
- ? expandHome(process.env.FLUXMAIL_DB_PATH)
196
- : path.join(dataDir, 'fluxmail.db'),
202
+ dbPath: process.env.FLUXMAIL_DB_PATH ? expandHome(process.env.FLUXMAIL_DB_PATH) : path.join(dataDir, 'fluxmail.db'),
197
203
  encryptionKey: loadEncryptionKey(dataDir),
198
204
  port,
199
- baseUrl,
205
+ publicUrl,
206
+ publicUrlConfigured,
200
207
  oauthPort,
201
208
  oauthHost: process.env.FLUXMAIL_OAUTH_HOST ?? '127.0.0.1',
202
209
  authMode: authModeEnv,