fluxmail 0.20.0 → 0.21.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/dist/accounts/oauthCallback.d.ts +6 -3
- package/dist/accounts/oauthCallback.d.ts.map +1 -1
- package/dist/accounts/oauthCallback.js +8 -6
- package/dist/accounts/oauthCallback.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +93 -10
- package/dist/cli.js.map +1 -1
- package/dist/cliCloudAuth.d.ts +48 -0
- package/dist/cliCloudAuth.d.ts.map +1 -0
- package/dist/cliCloudAuth.js +254 -0
- package/dist/cliCloudAuth.js.map +1 -0
- package/dist/cliCloudClient.d.ts +29 -0
- package/dist/cliCloudClient.d.ts.map +1 -0
- package/dist/cliCloudClient.js +154 -0
- package/dist/cliCloudClient.js.map +1 -0
- package/dist/cliInstances.d.ts +39 -4
- package/dist/cliInstances.d.ts.map +1 -1
- package/dist/cliInstances.js +76 -8
- package/dist/cliInstances.js.map +1 -1
- package/dist/cliMail.d.ts.map +1 -1
- package/dist/cliMail.js +54 -143
- package/dist/cliMail.js.map +1 -1
- package/dist/cliMailBackend.d.ts +125 -0
- package/dist/cliMailBackend.d.ts.map +1 -0
- package/dist/cliMailBackend.js +354 -0
- package/dist/cliMailBackend.js.map +1 -0
- package/dist/cliOutput.d.ts.map +1 -1
- package/dist/cliOutput.js +19 -2
- package/dist/cliOutput.js.map +1 -1
- package/dist/feedback.d.ts +13 -29
- package/dist/feedback.d.ts.map +1 -1
- package/dist/feedback.js +2 -1
- package/dist/feedback.js.map +1 -1
- package/dist/http/admin.d.ts.map +1 -1
- package/dist/http/admin.js +4 -2
- package/dist/http/admin.js.map +1 -1
- package/dist/http/rest.d.ts.map +1 -1
- package/dist/http/rest.js +13 -6
- package/dist/http/rest.js.map +1 -1
- package/dist/mcp/attachmentContent.d.ts +1 -1
- package/dist/mcp/attachmentContent.d.ts.map +1 -1
- package/dist/mcp/buildServer.d.ts.map +1 -1
- package/dist/mcp/buildServer.js +37 -9
- package/dist/mcp/buildServer.js.map +1 -1
- package/dist/mcp/outputSchemas.d.ts +189 -3100
- package/dist/mcp/outputSchemas.d.ts.map +1 -1
- package/dist/sendAt.d.ts +4 -0
- package/dist/sendAt.d.ts.map +1 -0
- package/dist/sendAt.js +10 -0
- package/dist/sendAt.js.map +1 -0
- package/dist/service/emailService.d.ts.map +1 -1
- package/dist/service/emailService.js +20 -1
- package/dist/service/emailService.js.map +1 -1
- package/dist/storage/fileLock.d.ts +2 -0
- package/dist/storage/fileLock.d.ts.map +1 -1
- package/dist/storage/fileLock.js +25 -4
- package/dist/storage/fileLock.js.map +1 -1
- package/dist/telemetry.d.ts +5 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +17 -2
- package/dist/telemetry.js.map +1 -1
- package/package.json +8 -9
package/dist/cliInstances.js
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { chmodSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
3
|
import path from 'node:path';
|
|
3
4
|
import { EmailError } from '@fluxmail/core';
|
|
4
5
|
import { resolveDataDir } from './config.js';
|
|
5
6
|
import { createContext } from './context.js';
|
|
6
7
|
import { createApp } from './http/app.js';
|
|
7
8
|
import { CliStartupError } from './cliStartupDiagnostics.js';
|
|
9
|
+
import { withFileLock } from './storage/fileLock.js';
|
|
8
10
|
import { OPERATION_TELEMETRY_EVENT } from './telemetry.js';
|
|
11
|
+
/** Guards every change to a Cloud session: refresh, login, logout and profile removal. */
|
|
12
|
+
export const CLOUD_SESSION_LOCK = {
|
|
13
|
+
timeoutMs: 45_000,
|
|
14
|
+
staleMs: 30_000,
|
|
15
|
+
description: 'another Fluxmail Cloud token refresh',
|
|
16
|
+
};
|
|
9
17
|
const EMAIL_ERROR_CODES = new Set([
|
|
10
18
|
'auth_expired',
|
|
11
19
|
'rate_limited',
|
|
@@ -18,17 +26,29 @@ const EMAIL_ERROR_CODES = new Set([
|
|
|
18
26
|
'unsupported_capability',
|
|
19
27
|
]);
|
|
20
28
|
const SAFE_INSTANCE_API_TELEMETRY_CODES = new Set([
|
|
29
|
+
'attachment_limit',
|
|
30
|
+
'busy',
|
|
31
|
+
'deadline_exceeded',
|
|
32
|
+
'hourly_limit_exceeded',
|
|
21
33
|
'https_required',
|
|
22
34
|
'idempotency_conflict',
|
|
23
35
|
'idempotency_in_progress',
|
|
24
36
|
'internal',
|
|
25
37
|
'invalid_response',
|
|
38
|
+
'mailbox_busy',
|
|
26
39
|
'request_failed',
|
|
40
|
+
'request_limit',
|
|
27
41
|
'request_timeout',
|
|
28
42
|
'request_too_large',
|
|
43
|
+
'response_limit',
|
|
44
|
+
'send_outcome_unknown',
|
|
29
45
|
'setup_required',
|
|
46
|
+
'subscription_required',
|
|
30
47
|
'unauthorized',
|
|
48
|
+
'unavailable',
|
|
31
49
|
'unsupported_media_type',
|
|
50
|
+
'unsupported_operation',
|
|
51
|
+
'workspace_unavailable',
|
|
32
52
|
]);
|
|
33
53
|
const SAFE_CONNECTION_STAGES = new Set([
|
|
34
54
|
'cli_validation',
|
|
@@ -47,6 +67,9 @@ export function setRequestDeadlineMs(value) {
|
|
|
47
67
|
}
|
|
48
68
|
requestDeadlineMs = value;
|
|
49
69
|
}
|
|
70
|
+
export function currentRequestDeadlineMs() {
|
|
71
|
+
return requestDeadlineMs;
|
|
72
|
+
}
|
|
50
73
|
export class InstanceApiError extends Error {
|
|
51
74
|
code;
|
|
52
75
|
status;
|
|
@@ -64,7 +87,7 @@ export class InstanceApiError extends Error {
|
|
|
64
87
|
this.name = 'InstanceApiError';
|
|
65
88
|
}
|
|
66
89
|
}
|
|
67
|
-
function requestTimeoutError() {
|
|
90
|
+
export function requestTimeoutError() {
|
|
68
91
|
return new InstanceApiError('request_timeout', 'The request timed out. Check the operation status before retrying a send.', 0);
|
|
69
92
|
}
|
|
70
93
|
export function instanceResponseError(code, message, status, data, requestId, connectionStage) {
|
|
@@ -151,6 +174,10 @@ export function instanceConfigPath() {
|
|
|
151
174
|
export function credentialPath() {
|
|
152
175
|
return path.join(cliDirectory(), 'credentials.json');
|
|
153
176
|
}
|
|
177
|
+
/** Kept apart from member sessions because refreshing rewrites this file on every token rotation. */
|
|
178
|
+
export function cloudCredentialPath() {
|
|
179
|
+
return path.join(cliDirectory(), 'cloud-credentials.json');
|
|
180
|
+
}
|
|
154
181
|
function readJson(filePath, fallback, kind) {
|
|
155
182
|
try {
|
|
156
183
|
return JSON.parse(readFileSync(filePath, 'utf8'));
|
|
@@ -165,8 +192,16 @@ function writePrivateJson(filePath, value) {
|
|
|
165
192
|
const directory = path.dirname(filePath);
|
|
166
193
|
mkdirSync(directory, { recursive: true, mode: 0o700 });
|
|
167
194
|
chmodSync(directory, 0o700);
|
|
168
|
-
|
|
169
|
-
|
|
195
|
+
// Another CLI process may read this file at any moment, so it must never see a partial write.
|
|
196
|
+
const temporaryPath = `${filePath}.${randomBytes(6).toString('hex')}.tmp`;
|
|
197
|
+
try {
|
|
198
|
+
writeFileSync(temporaryPath, `${JSON.stringify(value, null, 2)}\n`, { mode: 0o600 });
|
|
199
|
+
renameSync(temporaryPath, filePath);
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
rmSync(temporaryPath, { force: true });
|
|
203
|
+
throw error;
|
|
204
|
+
}
|
|
170
205
|
}
|
|
171
206
|
export function loadInstanceConfig() {
|
|
172
207
|
return readJson(instanceConfigPath(), { instances: {} }, 'instance_config');
|
|
@@ -180,6 +215,27 @@ function loadCredentials() {
|
|
|
180
215
|
function saveCredentials(credentials) {
|
|
181
216
|
writePrivateJson(credentialPath(), credentials);
|
|
182
217
|
}
|
|
218
|
+
export function cloudSessionLockPath() {
|
|
219
|
+
return path.join(cliDirectory(), 'cloud-refresh.lock');
|
|
220
|
+
}
|
|
221
|
+
function loadCloudCredentials() {
|
|
222
|
+
return readJson(cloudCredentialPath(), { sessions: {} }, 'credentials');
|
|
223
|
+
}
|
|
224
|
+
export function loadCloudSession(instanceName) {
|
|
225
|
+
return loadCloudCredentials().sessions[instanceName];
|
|
226
|
+
}
|
|
227
|
+
export function saveCloudSession(instanceName, session) {
|
|
228
|
+
const credentials = loadCloudCredentials();
|
|
229
|
+
credentials.sessions[instanceName] = session;
|
|
230
|
+
writePrivateJson(cloudCredentialPath(), credentials);
|
|
231
|
+
}
|
|
232
|
+
export function clearCloudSession(instanceName) {
|
|
233
|
+
const credentials = loadCloudCredentials();
|
|
234
|
+
if (!credentials.sessions[instanceName])
|
|
235
|
+
return;
|
|
236
|
+
delete credentials.sessions[instanceName];
|
|
237
|
+
writePrivateJson(cloudCredentialPath(), credentials);
|
|
238
|
+
}
|
|
183
239
|
function validInstanceName(name) {
|
|
184
240
|
const normalized = name.trim();
|
|
185
241
|
if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$/.test(normalized)) {
|
|
@@ -221,6 +277,12 @@ export function saveRemoteInstance(name, serverUrl) {
|
|
|
221
277
|
config.active ??= instanceName;
|
|
222
278
|
saveInstanceConfig(config);
|
|
223
279
|
}
|
|
280
|
+
export function saveCloudInstance(name, serverUrl) {
|
|
281
|
+
const instanceName = validInstanceName(name);
|
|
282
|
+
const config = loadInstanceConfig();
|
|
283
|
+
config.instances[instanceName] = { kind: 'cloud', serverUrl: validateRemoteServerUrl(serverUrl) };
|
|
284
|
+
saveInstanceConfig(config);
|
|
285
|
+
}
|
|
224
286
|
export function useInstance(name) {
|
|
225
287
|
const config = loadInstanceConfig();
|
|
226
288
|
if (!config.instances[name])
|
|
@@ -236,15 +298,15 @@ export function removeInstance(name) {
|
|
|
236
298
|
if (config.active === name)
|
|
237
299
|
config.active = Object.keys(config.instances)[0];
|
|
238
300
|
saveInstanceConfig(config);
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
301
|
+
clearSessionToken(name);
|
|
302
|
+
// A refresh in flight would otherwise save its rotated tokens after this.
|
|
303
|
+
withFileLock(cloudSessionLockPath(), CLOUD_SESSION_LOCK, () => clearCloudSession(name));
|
|
242
304
|
}
|
|
243
305
|
export function resolveInstance(name) {
|
|
244
306
|
const config = loadInstanceConfig();
|
|
245
307
|
const selected = name ?? config.active;
|
|
246
308
|
if (!selected)
|
|
247
|
-
throw new CliStartupError('invalid_request', 'No CLI instance is configured.\nFor an existing local instance, run "fluxmail --instance local login".\nFor a new local instance, run "fluxmail setup".\nFor a remote instance, run "fluxmail login --server <url>".', 'instance_not_configured');
|
|
309
|
+
throw new CliStartupError('invalid_request', 'No CLI instance is configured.\nFor an existing local instance, run "fluxmail --instance local login".\nFor a new local instance, run "fluxmail setup".\nFor a remote instance, run "fluxmail login --server <url>".\nFor Fluxmail Cloud, run "fluxmail login --cloud".', 'instance_not_configured');
|
|
248
310
|
const profile = config.instances[selected];
|
|
249
311
|
if (!profile)
|
|
250
312
|
throw new CliStartupError('not_found', `No CLI instance named "${selected}".`, 'instance_not_found');
|
|
@@ -407,8 +469,14 @@ export class InstanceClient {
|
|
|
407
469
|
return envelope;
|
|
408
470
|
}
|
|
409
471
|
}
|
|
472
|
+
/** Administration stays in the Cloud dashboard; the CLI only reads and manages mail there. */
|
|
473
|
+
export function cloudManagementError(profile, page = '') {
|
|
474
|
+
return new EmailError('unsupported_capability', `This command manages a self-hosted instance. Use the Fluxmail Cloud dashboard at ${profile.serverUrl}${page}.`);
|
|
475
|
+
}
|
|
410
476
|
export function instanceClient(name, requireToken = true, requestTimeoutMs) {
|
|
411
477
|
const selected = resolveInstance(name);
|
|
478
|
+
if (selected.profile.kind === 'cloud')
|
|
479
|
+
throw cloudManagementError(selected.profile);
|
|
412
480
|
if (requireToken && !selected.token)
|
|
413
481
|
throw new EmailError('permission_denied', `Log in to instance "${selected.name}" first.`);
|
|
414
482
|
return new InstanceClient(selected.name, selected.profile, selected.token, requestTimeoutMs);
|
package/dist/cliInstances.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cliInstances.js","sourceRoot":"","sources":["../src/cliInstances.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cliInstances.js","sourceRoot":"","sources":["../src/cliInstances.ts"],"names":[],"mappings":"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"}
|
package/dist/cliMail.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cliMail.d.ts","sourceRoot":"","sources":["../src/cliMail.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"cliMail.d.ts","sourceRoot":"","sources":["../src/cliMail.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAIhE,UAAU,kBAAkB;IAC1B,gBAAgB,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAC3C,eAAe,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAC1C,cAAc,EAAE,MAAM,YAAY,CAAC;IACnC,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,iFAAiF;IACjF,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;CACzE;AA4RD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAsaxF"}
|
package/dist/cliMail.js
CHANGED
|
@@ -3,7 +3,8 @@ import path from 'node:path';
|
|
|
3
3
|
import { lookup as lookupMimeType } from 'mime-types';
|
|
4
4
|
import { EmailError, parseEmailSearch, parseSingleAddress, } from '@fluxmail/core';
|
|
5
5
|
import { printOutput } from './cliOutput.js';
|
|
6
|
-
import { apiErrorCode,
|
|
6
|
+
import { apiErrorCode, localFailure } from './cliInstances.js';
|
|
7
|
+
import { mailBackend } from './cliMailBackend.js';
|
|
7
8
|
const MODIFY_ACTIONS = {
|
|
8
9
|
markRead: 'markRead',
|
|
9
10
|
'mark-read': 'markRead',
|
|
@@ -161,49 +162,18 @@ function addQueryOptions(command, includeText) {
|
|
|
161
162
|
command.option('--text <query>', 'Filter by literal full-text search');
|
|
162
163
|
return command;
|
|
163
164
|
}
|
|
164
|
-
function queryString(options, typedQuery) {
|
|
165
|
-
const query = new URLSearchParams();
|
|
166
|
-
for (const [key, value] of [
|
|
167
|
-
['folder', options.folder],
|
|
168
|
-
['query', typedQuery],
|
|
169
|
-
['text', options.text],
|
|
170
|
-
['from', options.from],
|
|
171
|
-
['to', options.to],
|
|
172
|
-
['subject', options.subject],
|
|
173
|
-
['after', options.after],
|
|
174
|
-
['before', options.before],
|
|
175
|
-
['rawProviderQuery', options.rawProviderQuery],
|
|
176
|
-
['pageSize', options.pageSize],
|
|
177
|
-
['pageToken', options.pageToken],
|
|
178
|
-
]) {
|
|
179
|
-
if (value !== undefined)
|
|
180
|
-
query.set(key, value);
|
|
181
|
-
}
|
|
182
|
-
if (options.read !== undefined)
|
|
183
|
-
query.set('read', String(options.read));
|
|
184
|
-
if (options.starred !== undefined)
|
|
185
|
-
query.set('starred', String(options.starred));
|
|
186
|
-
if (options.hasAttachment !== undefined)
|
|
187
|
-
query.set('hasAttachment', String(options.hasAttachment));
|
|
188
|
-
if (options.includeSnippet !== undefined)
|
|
189
|
-
query.set('includeSnippet', String(options.includeSnippet));
|
|
190
|
-
if (options.includeSearchContext !== undefined) {
|
|
191
|
-
query.set('includeSearchContext', String(options.includeSearchContext));
|
|
192
|
-
}
|
|
193
|
-
return query.size ? `?${query}` : '';
|
|
194
|
-
}
|
|
195
165
|
const LISTING_PAGE_ATTEMPTS = 3;
|
|
196
166
|
const LISTING_RETRY_DELAY_MS = 1_000;
|
|
197
|
-
const RETRYABLE_LISTING_CODES = new Set(['provider_unavailable', 'request_timeout']);
|
|
167
|
+
const RETRYABLE_LISTING_CODES = new Set(['provider_unavailable', 'request_timeout', 'deadline_exceeded']);
|
|
198
168
|
/**
|
|
199
169
|
* Fetch one page of an --all listing. Listing is read-only, so a page that hit a
|
|
200
170
|
* provider deadline or a dropped connection is requested again instead of
|
|
201
171
|
* discarding the pages already collected.
|
|
202
172
|
*/
|
|
203
|
-
async function listingPage(
|
|
173
|
+
async function listingPage(mail, accountId, query, typedQuery) {
|
|
204
174
|
for (let attempt = 1;; attempt++) {
|
|
205
175
|
try {
|
|
206
|
-
return await
|
|
176
|
+
return await mail.listMessages(accountId, query, typedQuery);
|
|
207
177
|
}
|
|
208
178
|
catch (error) {
|
|
209
179
|
if (attempt >= LISTING_PAGE_ATTEMPTS || !RETRYABLE_LISTING_CODES.has(apiErrorCode(error)))
|
|
@@ -212,24 +182,23 @@ async function listingPage(client, pathname) {
|
|
|
212
182
|
}
|
|
213
183
|
}
|
|
214
184
|
}
|
|
215
|
-
async function mailListing(
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
if (options.maxResults !== undefined)
|
|
185
|
+
async function mailListing(mail, accountId, { all, maxResults, ...query }, typedQuery) {
|
|
186
|
+
if (!all) {
|
|
187
|
+
if (maxResults !== undefined)
|
|
219
188
|
throw new EmailError('invalid_request', '--max-results requires --all.');
|
|
220
|
-
return
|
|
189
|
+
return mail.listMessages(accountId, query, typedQuery);
|
|
221
190
|
}
|
|
222
|
-
const maximum =
|
|
191
|
+
const maximum = maxResults === undefined ? 1000 : Number(maxResults);
|
|
223
192
|
if (!Number.isInteger(maximum) || maximum < 1 || maximum > 10_000) {
|
|
224
193
|
throw new EmailError('invalid_request', '--max-results must be between 1 and 10000.');
|
|
225
194
|
}
|
|
226
|
-
const requestedPageSize =
|
|
195
|
+
const requestedPageSize = query.pageSize === undefined ? 100 : Number(query.pageSize);
|
|
227
196
|
if (!Number.isInteger(requestedPageSize) || requestedPageSize < 1 || requestedPageSize > 100) {
|
|
228
197
|
throw new EmailError('invalid_request', '--page-size must be between 1 and 100.');
|
|
229
198
|
}
|
|
230
199
|
const data = [];
|
|
231
200
|
const warnings = [];
|
|
232
|
-
let pageToken =
|
|
201
|
+
let pageToken = query.pageToken;
|
|
233
202
|
const seenTokens = new Set();
|
|
234
203
|
let meta = { exhausted: false };
|
|
235
204
|
for (;;) {
|
|
@@ -238,11 +207,7 @@ async function mailListing(client, accountId, options, typedQuery) {
|
|
|
238
207
|
throw new EmailError('provider_unavailable', 'The provider repeated a page token.');
|
|
239
208
|
seenTokens.add(pageToken);
|
|
240
209
|
}
|
|
241
|
-
const page = await listingPage(
|
|
242
|
-
...options,
|
|
243
|
-
pageSize: String(Math.min(requestedPageSize, maximum - data.length)),
|
|
244
|
-
pageToken,
|
|
245
|
-
}, typedQuery)}`);
|
|
210
|
+
const page = await listingPage(mail, accountId, { ...query, pageSize: String(Math.min(requestedPageSize, maximum - data.length)), pageToken }, typedQuery);
|
|
246
211
|
data.push(...page.data.slice(0, maximum - data.length));
|
|
247
212
|
warnings.push(...(page.warnings ?? []));
|
|
248
213
|
meta = page.meta ?? {};
|
|
@@ -256,51 +221,6 @@ async function mailListing(client, accountId, options, typedQuery) {
|
|
|
256
221
|
}
|
|
257
222
|
return { data, meta, ...(warnings.length ? { warnings } : {}) };
|
|
258
223
|
}
|
|
259
|
-
async function resolveAccountId(client, requested) {
|
|
260
|
-
const requestedRef = requested?.trim();
|
|
261
|
-
if (requestedRef && /^acct_[^@\s]+$/.test(requestedRef))
|
|
262
|
-
return requestedRef;
|
|
263
|
-
const listed = await client.json('/api/v1/accounts');
|
|
264
|
-
if (listed.length === 0) {
|
|
265
|
-
throw new EmailError('invalid_request', 'No email accounts are available. Connect an account first.');
|
|
266
|
-
}
|
|
267
|
-
const member = await client.json('/api/v1/me');
|
|
268
|
-
const accounts = listed.filter((account) => account.ownerMemberId === member.id || account.sharedWithAll || account.grantedMemberIds.includes(member.id));
|
|
269
|
-
if (requestedRef) {
|
|
270
|
-
const normalized = requestedRef.toLowerCase();
|
|
271
|
-
const account = accounts.find((candidate) => candidate.id === requestedRef || candidate.email.toLowerCase() === normalized);
|
|
272
|
-
if (!account)
|
|
273
|
-
throw new EmailError('not_found', `No accessible account has id or email "${requestedRef}".`);
|
|
274
|
-
return account.id;
|
|
275
|
-
}
|
|
276
|
-
if (accounts.length === 0) {
|
|
277
|
-
throw new EmailError('invalid_request', 'No email accounts are accessible to this member.');
|
|
278
|
-
}
|
|
279
|
-
if (accounts.length > 1) {
|
|
280
|
-
throw new EmailError('invalid_request', `Multiple accounts are available. Pass --mail-account or -a with one of: ${accounts
|
|
281
|
-
.map((account) => `${account.id} (${account.email})`)
|
|
282
|
-
.join(', ')}.`);
|
|
283
|
-
}
|
|
284
|
-
return accounts[0].id;
|
|
285
|
-
}
|
|
286
|
-
async function responseError(response) {
|
|
287
|
-
let error;
|
|
288
|
-
try {
|
|
289
|
-
const body = (await response.json());
|
|
290
|
-
error = body.error;
|
|
291
|
-
}
|
|
292
|
-
catch {
|
|
293
|
-
// The fallback below does not expose response content.
|
|
294
|
-
}
|
|
295
|
-
throw withLocalFailure(instanceResponseError(error?.code ?? 'request_failed', error?.message ?? `Request failed with HTTP ${response.status}.`, response.status, error?.data, error?.requestId), response);
|
|
296
|
-
}
|
|
297
|
-
function jsonRequest(body, headers = {}) {
|
|
298
|
-
return {
|
|
299
|
-
method: 'POST',
|
|
300
|
-
headers: { 'content-type': 'application/json', ...headers },
|
|
301
|
-
body: JSON.stringify(body),
|
|
302
|
-
};
|
|
303
|
-
}
|
|
304
224
|
export function registerMailCommands(program, options) {
|
|
305
225
|
const run = (fn) => async () => {
|
|
306
226
|
try {
|
|
@@ -311,9 +231,9 @@ export function registerMailCommands(program, options) {
|
|
|
311
231
|
}
|
|
312
232
|
};
|
|
313
233
|
const accountContext = async () => {
|
|
314
|
-
const
|
|
315
|
-
const accountId = await resolveAccountId(
|
|
316
|
-
return {
|
|
234
|
+
const mail = mailBackend(options.selectedInstance());
|
|
235
|
+
const accountId = await mail.resolveAccountId(options.selectedAccount());
|
|
236
|
+
return { mail, accountId };
|
|
317
237
|
};
|
|
318
238
|
const printEnvelope = async (request) => printOutput(await request, options.selectedFormat());
|
|
319
239
|
const folders = program.command('folders').description('Work with navigable mailbox folders');
|
|
@@ -321,22 +241,22 @@ export function registerMailCommands(program, options) {
|
|
|
321
241
|
.command('list')
|
|
322
242
|
.description('List folders in an email account')
|
|
323
243
|
.action(run(async () => {
|
|
324
|
-
const {
|
|
325
|
-
await printEnvelope(
|
|
244
|
+
const { mail, accountId } = await accountContext();
|
|
245
|
+
await printEnvelope(mail.listFolders(accountId));
|
|
326
246
|
}));
|
|
327
247
|
const labels = program.command('labels').description('Work with Gmail labels and Outlook categories');
|
|
328
248
|
labels
|
|
329
249
|
.command('list')
|
|
330
250
|
.description('List Gmail user labels or Outlook categories')
|
|
331
251
|
.action(run(async () => {
|
|
332
|
-
const {
|
|
333
|
-
await printEnvelope(
|
|
252
|
+
const { mail, accountId } = await accountContext();
|
|
253
|
+
await printEnvelope(mail.listLabels(accountId));
|
|
334
254
|
}));
|
|
335
255
|
const emails = program.command('emails').description('Read, send, and organize email');
|
|
336
256
|
const listEmails = addQueryOptions(emails.command('list').description('List and filter messages'), true);
|
|
337
257
|
listEmails.action(async (query) => run(async () => {
|
|
338
|
-
const {
|
|
339
|
-
await printEnvelope(mailListing(
|
|
258
|
+
const { mail, accountId } = await accountContext();
|
|
259
|
+
await printEnvelope(mailListing(mail, accountId, query));
|
|
340
260
|
})());
|
|
341
261
|
const search = addQueryOptions(emails.command('search').argument('<query>', 'Typed portable search query').description('Search messages'), false).allowUnknownOption();
|
|
342
262
|
search.action(async (query, queryOptions) => run(async () => {
|
|
@@ -349,8 +269,8 @@ export function registerMailCommands(program, options) {
|
|
|
349
269
|
for (const warning of parsed.diagnostics.filter((item) => item.severity === 'warning')) {
|
|
350
270
|
console.error(`Search warning: ${warning.message}`);
|
|
351
271
|
}
|
|
352
|
-
const {
|
|
353
|
-
await printEnvelope(mailListing(
|
|
272
|
+
const { mail, accountId } = await accountContext();
|
|
273
|
+
await printEnvelope(mailListing(mail, accountId, queryOptions, query));
|
|
354
274
|
})());
|
|
355
275
|
const batchSearch = emails
|
|
356
276
|
.command('search-batch')
|
|
@@ -407,8 +327,7 @@ export function registerMailCommands(program, options) {
|
|
|
407
327
|
}).filter(([, value]) => value !== undefined)),
|
|
408
328
|
};
|
|
409
329
|
}
|
|
410
|
-
const
|
|
411
|
-
const response = await client.jsonEnvelope('/api/v1/messages/search', jsonRequest(request));
|
|
330
|
+
const response = await mailBackend(options.selectedInstance()).searchBatch(request);
|
|
412
331
|
printOutput(response, options.selectedFormat());
|
|
413
332
|
if (response.data.some((group) => group.error !== undefined)) {
|
|
414
333
|
options.reportPartialFailure('partial_failure', localFailure(response));
|
|
@@ -420,9 +339,8 @@ export function registerMailCommands(program, options) {
|
|
|
420
339
|
.description('Get a complete message')
|
|
421
340
|
.option('--include-headers', 'Include Message-ID, References, In-Reply-To, and other threading headers')
|
|
422
341
|
.action(async (messageId, getOptions) => run(async () => {
|
|
423
|
-
const {
|
|
424
|
-
await printEnvelope(
|
|
425
|
-
(getOptions.includeHeaders ? '?includeHeaders=true' : '')));
|
|
342
|
+
const { mail, accountId } = await accountContext();
|
|
343
|
+
await printEnvelope(mail.getMessage(accountId, messageId, getOptions.includeHeaders === true));
|
|
426
344
|
})());
|
|
427
345
|
const send = addMessageContentOptions(emails.command('send').description('Send or schedule a message'))
|
|
428
346
|
.option('--draft <draft-id>', 'Send an existing draft')
|
|
@@ -451,8 +369,8 @@ export function registerMailCommands(program, options) {
|
|
|
451
369
|
if (!sendOptions.idempotencyKey) {
|
|
452
370
|
throw new EmailError('invalid_request', 'Pass --idempotency-key and reuse it when retrying this send.');
|
|
453
371
|
}
|
|
454
|
-
const {
|
|
455
|
-
const response = await
|
|
372
|
+
const { mail, accountId } = await accountContext();
|
|
373
|
+
const response = await mail.send(accountId, request, sendOptions.idempotencyKey);
|
|
456
374
|
printOutput(response, options.selectedFormat());
|
|
457
375
|
if (response.data.status === 'uncertain' || response.data.status === 'sending')
|
|
458
376
|
options.reportPartialFailure('uncertain', localFailure(response));
|
|
@@ -465,8 +383,8 @@ export function registerMailCommands(program, options) {
|
|
|
465
383
|
throw new EmailError('invalid_request', '--draft cannot be combined with message content.');
|
|
466
384
|
}
|
|
467
385
|
const request = previewOptions.draft ? { draftId: previewOptions.draft } : messageRequest(previewOptions);
|
|
468
|
-
const {
|
|
469
|
-
await printEnvelope(
|
|
386
|
+
const { mail, accountId } = await accountContext();
|
|
387
|
+
await printEnvelope(mail.previewSend(accountId, request));
|
|
470
388
|
})());
|
|
471
389
|
const forward = emails
|
|
472
390
|
.command('forward')
|
|
@@ -503,8 +421,8 @@ export function registerMailCommands(program, options) {
|
|
|
503
421
|
if (!forwardOptions.idempotencyKey) {
|
|
504
422
|
throw new EmailError('invalid_request', 'Pass --idempotency-key and reuse it when retrying this forward.');
|
|
505
423
|
}
|
|
506
|
-
const {
|
|
507
|
-
const response = await
|
|
424
|
+
const { mail, accountId } = await accountContext();
|
|
425
|
+
const response = await mail.forward(accountId, messageId, request, forwardOptions.idempotencyKey);
|
|
508
426
|
printOutput(response, options.selectedFormat());
|
|
509
427
|
if (response.data.status === 'uncertain' || response.data.status === 'sending')
|
|
510
428
|
options.reportPartialFailure('uncertain', localFailure(response));
|
|
@@ -516,8 +434,8 @@ export function registerMailCommands(program, options) {
|
|
|
516
434
|
.argument('<operation-id>', 'Delivery operation ID')
|
|
517
435
|
.description('Check a send or forward outcome')
|
|
518
436
|
.action(async (operationId) => run(async () => {
|
|
519
|
-
const {
|
|
520
|
-
await printEnvelope(
|
|
437
|
+
const { mail, accountId } = await accountContext();
|
|
438
|
+
await printEnvelope(mail.deliveryStatus(accountId, operationId));
|
|
521
439
|
})());
|
|
522
440
|
const modify = emails
|
|
523
441
|
.command('modify')
|
|
@@ -550,8 +468,8 @@ export function registerMailCommands(program, options) {
|
|
|
550
468
|
...(modifyOptions.label.length ? { labels: modifyOptions.label } : {}),
|
|
551
469
|
};
|
|
552
470
|
}
|
|
553
|
-
const {
|
|
554
|
-
const response = await
|
|
471
|
+
const { mail, accountId } = await accountContext();
|
|
472
|
+
const response = await mail.modify(accountId, request);
|
|
555
473
|
printOutput(response, options.selectedFormat());
|
|
556
474
|
if (response.data.failed.length || response.data.uncertainIds.length) {
|
|
557
475
|
options.reportPartialFailure('partial_failure', localFailure(response));
|
|
@@ -563,8 +481,8 @@ export function registerMailCommands(program, options) {
|
|
|
563
481
|
.argument('<thread-id>', 'Provider thread ID')
|
|
564
482
|
.description('Get a complete thread')
|
|
565
483
|
.action(async (threadId) => run(async () => {
|
|
566
|
-
const {
|
|
567
|
-
await printEnvelope(
|
|
484
|
+
const { mail, accountId } = await accountContext();
|
|
485
|
+
await printEnvelope(mail.getThread(accountId, threadId));
|
|
568
486
|
})());
|
|
569
487
|
const drafts = program.command('drafts').description('Create and manage drafts');
|
|
570
488
|
drafts
|
|
@@ -572,47 +490,44 @@ export function registerMailCommands(program, options) {
|
|
|
572
490
|
.argument('<draft-id>', 'Provider draft ID')
|
|
573
491
|
.description('Read a draft')
|
|
574
492
|
.action(async (draftId) => run(async () => {
|
|
575
|
-
const {
|
|
576
|
-
await printEnvelope(
|
|
493
|
+
const { mail, accountId } = await accountContext();
|
|
494
|
+
await printEnvelope(mail.getDraft(accountId, draftId));
|
|
577
495
|
})());
|
|
578
496
|
const createDraft = addMessageContentOptions(drafts.command('create').description('Create a draft'));
|
|
579
497
|
createDraft.action(async (draftOptions) => run(async () => {
|
|
580
498
|
const request = messageRequest(draftOptions);
|
|
581
|
-
const {
|
|
582
|
-
await printEnvelope(
|
|
499
|
+
const { mail, accountId } = await accountContext();
|
|
500
|
+
await printEnvelope(mail.createDraft(accountId, request));
|
|
583
501
|
})());
|
|
584
502
|
const updateDraft = addMessageContentOptions(drafts.command('update').argument('<draft-id>', 'Provider draft ID').description('Replace the content of a draft'));
|
|
585
503
|
updateDraft.action(async (draftId, draftOptions) => run(async () => {
|
|
586
504
|
const request = messageRequest(draftOptions);
|
|
587
|
-
const {
|
|
588
|
-
await printEnvelope(
|
|
589
|
-
...jsonRequest(request),
|
|
590
|
-
method: 'PUT',
|
|
591
|
-
}));
|
|
505
|
+
const { mail, accountId } = await accountContext();
|
|
506
|
+
await printEnvelope(mail.updateDraft(accountId, draftId, request));
|
|
592
507
|
})());
|
|
593
508
|
drafts
|
|
594
509
|
.command('delete')
|
|
595
510
|
.argument('<draft-id>', 'Provider draft ID')
|
|
596
511
|
.description('Delete a draft')
|
|
597
512
|
.action(async (draftId) => run(async () => {
|
|
598
|
-
const {
|
|
599
|
-
await printEnvelope(
|
|
513
|
+
const { mail, accountId } = await accountContext();
|
|
514
|
+
await printEnvelope(mail.deleteDraft(accountId, draftId));
|
|
600
515
|
})());
|
|
601
516
|
const scheduled = program.command('scheduled').description('Manage scheduled sends');
|
|
602
517
|
scheduled
|
|
603
518
|
.command('list')
|
|
604
519
|
.description('List scheduled sends')
|
|
605
520
|
.action(run(async () => {
|
|
606
|
-
const {
|
|
607
|
-
await printEnvelope(
|
|
521
|
+
const { mail, accountId } = await accountContext();
|
|
522
|
+
await printEnvelope(mail.listScheduled(accountId));
|
|
608
523
|
}));
|
|
609
524
|
scheduled
|
|
610
525
|
.command('cancel')
|
|
611
526
|
.argument('<schedule-id>', 'Scheduled send ID')
|
|
612
527
|
.description('Cancel a scheduled send and keep its draft')
|
|
613
528
|
.action(async (scheduleId) => run(async () => {
|
|
614
|
-
const {
|
|
615
|
-
await printEnvelope(
|
|
529
|
+
const { mail, accountId } = await accountContext();
|
|
530
|
+
await printEnvelope(mail.cancelScheduled(accountId, scheduleId));
|
|
616
531
|
})());
|
|
617
532
|
const attachments = program.command('attachments').description('Download message attachments');
|
|
618
533
|
attachments
|
|
@@ -627,22 +542,18 @@ export function registerMailCommands(program, options) {
|
|
|
627
542
|
if (!downloadOptions.force && existsSync(outputPath)) {
|
|
628
543
|
throw new EmailError('invalid_request', `Output file already exists: ${outputPath}`);
|
|
629
544
|
}
|
|
630
|
-
const {
|
|
631
|
-
const
|
|
632
|
-
if (!response.ok)
|
|
633
|
-
await responseError(response);
|
|
634
|
-
const content = Buffer.from(await response.arrayBuffer());
|
|
545
|
+
const { mail, accountId } = await accountContext();
|
|
546
|
+
const { content, mimeType, warning } = await mail.downloadAttachment(accountId, messageId, attachmentId);
|
|
635
547
|
try {
|
|
636
548
|
writeFileSync(outputPath, content, { flag: downloadOptions.force ? 'w' : 'wx' });
|
|
637
549
|
}
|
|
638
550
|
catch (error) {
|
|
639
551
|
throw new EmailError('invalid_request', `Could not write attachment to ${outputPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
640
552
|
}
|
|
641
|
-
const warning = response.headers.get('fluxmail-warning');
|
|
642
553
|
printOutput({
|
|
643
554
|
data: {
|
|
644
555
|
output: outputPath,
|
|
645
|
-
mimeType:
|
|
556
|
+
mimeType: mimeType ?? 'application/octet-stream',
|
|
646
557
|
sizeBytes: content.length,
|
|
647
558
|
},
|
|
648
559
|
...(warning ? { warnings: [warning] } : {}),
|