zele 0.3.0 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/zele +27 -0
- package/dist/api-utils.d.ts +51 -2
- package/dist/api-utils.js +89 -3
- package/dist/api-utils.js.map +1 -1
- package/dist/auth.d.ts +27 -6
- package/dist/auth.js +185 -129
- package/dist/auth.js.map +1 -1
- package/dist/calendar-client.d.ts +16 -9
- package/dist/calendar-client.js +163 -59
- package/dist/calendar-client.js.map +1 -1
- package/dist/cli.js +34 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/attachment.js +17 -15
- package/dist/commands/attachment.js.map +1 -1
- package/dist/commands/auth-cmd.js +20 -9
- package/dist/commands/auth-cmd.js.map +1 -1
- package/dist/commands/calendar.js +67 -78
- package/dist/commands/calendar.js.map +1 -1
- package/dist/commands/draft.js +25 -18
- package/dist/commands/draft.js.map +1 -1
- package/dist/commands/label.js +33 -45
- package/dist/commands/label.js.map +1 -1
- package/dist/commands/mail-actions.js +11 -13
- package/dist/commands/mail-actions.js.map +1 -1
- package/dist/commands/mail.js +119 -127
- package/dist/commands/mail.js.map +1 -1
- package/dist/commands/profile.js +18 -21
- package/dist/commands/profile.js.map +1 -1
- package/dist/commands/watch.js +33 -261
- package/dist/commands/watch.js.map +1 -1
- package/dist/db.js +12 -13
- package/dist/db.js.map +1 -1
- package/dist/generated/browser.d.ts +12 -27
- package/dist/generated/client.d.ts +13 -28
- package/dist/generated/client.js +1 -1
- package/dist/generated/commonInputTypes.d.ts +90 -26
- package/dist/generated/enums.d.ts +0 -4
- package/dist/generated/enums.js +0 -3
- package/dist/generated/enums.js.map +1 -1
- package/dist/generated/internal/class.d.ts +22 -55
- package/dist/generated/internal/class.js +12 -4
- package/dist/generated/internal/class.js.map +1 -1
- package/dist/generated/internal/prismaNamespace.d.ts +272 -511
- package/dist/generated/internal/prismaNamespace.js +54 -66
- package/dist/generated/internal/prismaNamespace.js.map +1 -1
- package/dist/generated/internal/prismaNamespaceBrowser.d.ts +60 -74
- package/dist/generated/internal/prismaNamespaceBrowser.js +50 -62
- package/dist/generated/internal/prismaNamespaceBrowser.js.map +1 -1
- package/dist/generated/models/Account.d.ts +1637 -0
- package/dist/generated/models/Account.js +2 -0
- package/dist/generated/models/Account.js.map +1 -0
- package/dist/generated/models/CalendarList.d.ts +1161 -0
- package/dist/generated/models/CalendarList.js +2 -0
- package/dist/generated/models/CalendarList.js.map +1 -0
- package/dist/generated/models/Label.d.ts +1161 -0
- package/dist/generated/models/Label.js +2 -0
- package/dist/generated/models/Label.js.map +1 -0
- package/dist/generated/models/Profile.d.ts +1269 -0
- package/dist/generated/models/Profile.js +2 -0
- package/dist/generated/models/Profile.js.map +1 -0
- package/dist/generated/models/SyncState.d.ts +1130 -0
- package/dist/generated/models/SyncState.js +2 -0
- package/dist/generated/models/SyncState.js.map +1 -0
- package/dist/generated/models/Thread.d.ts +1608 -0
- package/dist/generated/models/Thread.js +2 -0
- package/dist/generated/models/Thread.js.map +1 -0
- package/dist/generated/models.d.ts +6 -9
- package/dist/gmail-client.d.ts +119 -94
- package/dist/gmail-client.js +862 -322
- package/dist/gmail-client.js.map +1 -1
- package/dist/mail-tui.d.ts +1 -0
- package/dist/mail-tui.js +517 -0
- package/dist/mail-tui.js.map +1 -0
- package/dist/output.d.ts +6 -0
- package/dist/output.js +124 -11
- package/dist/output.js.map +1 -1
- package/package.json +39 -11
- package/schema.prisma +81 -113
- package/src/api-utils.ts +103 -5
- package/src/auth.ts +224 -143
- package/src/calendar-client.ts +196 -89
- package/src/cli.ts +39 -1
- package/src/commands/attachment.ts +18 -19
- package/src/commands/auth-cmd.ts +19 -9
- package/src/commands/calendar.ts +42 -85
- package/src/commands/draft.ts +19 -22
- package/src/commands/label.ts +21 -57
- package/src/commands/mail-actions.ts +11 -19
- package/src/commands/mail.ts +109 -148
- package/src/commands/profile.ts +12 -28
- package/src/commands/watch.ts +37 -304
- package/src/db.ts +13 -16
- package/src/generated/browser.ts +49 -0
- package/src/generated/client.ts +71 -0
- package/src/generated/commonInputTypes.ts +332 -0
- package/src/generated/enums.ts +17 -0
- package/src/generated/internal/class.ts +250 -0
- package/src/generated/internal/prismaNamespace.ts +1198 -0
- package/src/generated/internal/prismaNamespaceBrowser.ts +169 -0
- package/src/generated/models/Account.ts +1848 -0
- package/src/generated/models/CalendarList.ts +1331 -0
- package/src/generated/models/Label.ts +1331 -0
- package/src/generated/models/Profile.ts +1439 -0
- package/src/generated/models/SyncState.ts +1300 -0
- package/src/generated/models/Thread.ts +1787 -0
- package/src/generated/models.ts +17 -0
- package/src/gmail-client.test.ts +59 -0
- package/src/gmail-client.ts +1034 -429
- package/src/mail-tui.tsx +1061 -0
- package/src/output.test.ts +1093 -0
- package/src/output.ts +128 -13
- package/src/schema.sql +58 -68
- package/src/test-fixtures/email-html/safe-claude-event.html +28 -0
- package/src/test-fixtures/email-html/safe-product-announcement.html +25 -0
- package/src/test-fixtures/email-html/safe-tracked-links.html +27 -0
- package/src/test-fixtures/email-html-snapshots/safe-claude-event.html.md +9 -0
- package/src/test-fixtures/email-html-snapshots/safe-product-announcement.html.md +13 -0
- package/src/test-fixtures/email-html-snapshots/safe-tracked-links.html.md +7 -0
- package/AGENTS.md +0 -26
- package/CHANGELOG.md +0 -43
- package/dist/generated/models/accounts.d.ts +0 -2000
- package/dist/generated/models/accounts.js +0 -2
- package/dist/generated/models/accounts.js.map +0 -1
- package/dist/generated/models/calendar_events.d.ts +0 -1433
- package/dist/generated/models/calendar_events.js +0 -2
- package/dist/generated/models/calendar_events.js.map +0 -1
- package/dist/generated/models/calendar_lists.d.ts +0 -1131
- package/dist/generated/models/calendar_lists.js +0 -2
- package/dist/generated/models/calendar_lists.js.map +0 -1
- package/dist/generated/models/label_counts.d.ts +0 -1131
- package/dist/generated/models/label_counts.js +0 -2
- package/dist/generated/models/label_counts.js.map +0 -1
- package/dist/generated/models/labels.d.ts +0 -1131
- package/dist/generated/models/labels.js +0 -2
- package/dist/generated/models/labels.js.map +0 -1
- package/dist/generated/models/profiles.d.ts +0 -1131
- package/dist/generated/models/profiles.js +0 -2
- package/dist/generated/models/profiles.js.map +0 -1
- package/dist/generated/models/sync_states.d.ts +0 -1107
- package/dist/generated/models/sync_states.js +0 -2
- package/dist/generated/models/sync_states.js.map +0 -1
- package/dist/generated/models/thread_lists.d.ts +0 -1404
- package/dist/generated/models/thread_lists.js +0 -2
- package/dist/generated/models/thread_lists.js.map +0 -1
- package/dist/generated/models/threads.d.ts +0 -1247
- package/dist/generated/models/threads.js +0 -2
- package/dist/generated/models/threads.js.map +0 -1
- package/dist/gmail-cache.d.ts +0 -60
- package/dist/gmail-cache.js +0 -264
- package/dist/gmail-cache.js.map +0 -1
- package/docs/gogcli-gmail-implementation.md +0 -599
- package/scripts/test-device-code-clients.ts +0 -186
- package/scripts/test-micropython-scopes.ts +0 -72
- package/scripts/test-oauth-clients.ts +0 -257
- package/src/gmail-cache.ts +0 -339
- package/tsconfig.json +0 -16
package/dist/mail-tui.js
ADDED
|
@@ -0,0 +1,517 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Termcast email extension — browse and read emails in a Raycast-like TUI.
|
|
3
|
+
// Uses List with detail view, sections for date grouping, infinite scroll via
|
|
4
|
+
// useCachedPromise pagination, and a dropdown for account selection.
|
|
5
|
+
// Reuses existing GmailClient, auth, and email-to-markdown conversion from the CLI.
|
|
6
|
+
//
|
|
7
|
+
// gaxios (used by googleapis) checks `typeof window !== 'undefined'` to decide whether
|
|
8
|
+
// to use window.fetch or import('node-fetch'). Termcast provides a window global (for
|
|
9
|
+
// the Raycast UI runtime) but without fetch. gaxios sees window exists → tries
|
|
10
|
+
// window.fetch → gets undefined → "fetchImpl is not a function". Fix: ensure
|
|
11
|
+
// window.fetch is set to the native Bun fetch.
|
|
12
|
+
const globalWithWindow = globalThis;
|
|
13
|
+
if (typeof globalThis.fetch === 'function' && typeof globalWithWindow.window?.fetch !== 'function') {
|
|
14
|
+
globalWithWindow.window = { ...globalWithWindow.window, fetch: globalThis.fetch };
|
|
15
|
+
}
|
|
16
|
+
import { Action, ActionPanel, Color, Detail, Form, Icon, List, showToast, Toast, useNavigation, showFailureToast, } from 'termcast';
|
|
17
|
+
import { useCachedPromise } from '@termcast/utils';
|
|
18
|
+
import { useState, useMemo, useCallback, useEffect } from 'react';
|
|
19
|
+
import { getClients, getClient, listAccounts, login, logout } from './auth.js';
|
|
20
|
+
import { isTruthy } from './api-utils.js';
|
|
21
|
+
import { renderEmailBody, replyParser, formatDate, formatSender } from './output.js';
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Constants
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
const PAGE_SIZE = 25;
|
|
26
|
+
const ACCOUNT_COLORS = [Color.Blue, Color.Green, Color.Purple, Color.Orange, Color.Magenta];
|
|
27
|
+
const ADD_ACCOUNT = '__add_account__';
|
|
28
|
+
const MANAGE_ACCOUNTS = '__manage_accounts__';
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Helpers
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
function accountColor(email) {
|
|
33
|
+
let hash = 0;
|
|
34
|
+
for (const c of email)
|
|
35
|
+
hash = ((hash << 5) - hash + c.charCodeAt(0)) | 0;
|
|
36
|
+
return ACCOUNT_COLORS[Math.abs(hash) % ACCOUNT_COLORS.length];
|
|
37
|
+
}
|
|
38
|
+
/** Classify a date string into a section bucket. */
|
|
39
|
+
function dateSection(dateStr) {
|
|
40
|
+
const date = new Date(dateStr);
|
|
41
|
+
if (isNaN(date.getTime()))
|
|
42
|
+
return 'Older';
|
|
43
|
+
const now = new Date();
|
|
44
|
+
const tenMinutesAgo = new Date(now.getTime() - 10 * 60 * 1000);
|
|
45
|
+
const oneHourAgo = new Date(now.getTime() - 60 * 60 * 1000);
|
|
46
|
+
const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
|
47
|
+
const yesterday = new Date(today.getTime() - 86400000);
|
|
48
|
+
const weekAgo = new Date(today.getTime() - 7 * 86400000);
|
|
49
|
+
const monthAgo = new Date(today.getTime() - 30 * 86400000);
|
|
50
|
+
if (date >= tenMinutesAgo)
|
|
51
|
+
return 'Last 10 Minutes';
|
|
52
|
+
if (date >= oneHourAgo)
|
|
53
|
+
return 'Last Hour';
|
|
54
|
+
if (date >= today)
|
|
55
|
+
return 'Today';
|
|
56
|
+
if (date >= yesterday)
|
|
57
|
+
return 'Yesterday';
|
|
58
|
+
if (date >= weekAgo)
|
|
59
|
+
return 'This Week';
|
|
60
|
+
if (date >= monthAgo)
|
|
61
|
+
return 'This Month';
|
|
62
|
+
return 'Older';
|
|
63
|
+
}
|
|
64
|
+
const SECTION_ORDER = ['Last 10 Minutes', 'Last Hour', 'Today', 'Yesterday', 'This Week', 'This Month', 'Older'];
|
|
65
|
+
function threadStatusIcon(thread) {
|
|
66
|
+
const unread = thread.unread;
|
|
67
|
+
const starred = thread.labelIds?.includes('STARRED') ?? false;
|
|
68
|
+
if (unread && starred)
|
|
69
|
+
return { source: Icon.Star, tintColor: Color.Yellow };
|
|
70
|
+
if (unread)
|
|
71
|
+
return { source: Icon.CircleFilled, tintColor: Color.Blue };
|
|
72
|
+
if (starred)
|
|
73
|
+
return { source: Icon.Star, tintColor: Color.Yellow };
|
|
74
|
+
return { source: Icon.Circle, tintColor: Color.SecondaryText };
|
|
75
|
+
}
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
// Data fetching
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
function useAccounts() {
|
|
80
|
+
return useCachedPromise(async () => {
|
|
81
|
+
const accounts = await listAccounts();
|
|
82
|
+
return accounts;
|
|
83
|
+
}, []);
|
|
84
|
+
}
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// Account Dropdown
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
function AccountDropdown({ accounts, value, onChange, onAdded, onRemoved, }) {
|
|
89
|
+
const { push } = useNavigation();
|
|
90
|
+
return (_jsxs(List.Dropdown, { tooltip: "Account", value: value, onChange: (newValue) => {
|
|
91
|
+
if (newValue === ADD_ACCOUNT) {
|
|
92
|
+
push(_jsx(AddAccount, { onAdded: onAdded }));
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (newValue === MANAGE_ACCOUNTS) {
|
|
96
|
+
push(_jsx(ManageAccounts, { onAdded: onAdded, onRemoved: onRemoved }));
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
onChange(newValue);
|
|
100
|
+
}, children: [_jsx(List.Dropdown.Item, { title: "All Accounts", value: "all", icon: Icon.Globe }), _jsx(List.Dropdown.Section, { title: "Accounts", children: accounts.map((a) => (_jsx(List.Dropdown.Item, { title: a.email, value: a.email, icon: { source: Icon.Person, tintColor: accountColor(a.email) } }, a.email))) }), _jsxs(List.Dropdown.Section, { children: [_jsx(List.Dropdown.Item, { title: "Add Account", value: ADD_ACCOUNT, icon: Icon.Plus }), _jsx(List.Dropdown.Item, { title: "Manage Accounts", value: MANAGE_ACCOUNTS, icon: Icon.Gear })] })] }));
|
|
101
|
+
}
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
// Add Account (interactive login)
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
function AddAccount({ onAdded, }) {
|
|
106
|
+
const { pop } = useNavigation();
|
|
107
|
+
const [isLoggingIn, setIsLoggingIn] = useState(false);
|
|
108
|
+
const [didAutoStart, setDidAutoStart] = useState(false);
|
|
109
|
+
const handleLogin = async () => {
|
|
110
|
+
if (isLoggingIn)
|
|
111
|
+
return;
|
|
112
|
+
setIsLoggingIn(true);
|
|
113
|
+
const result = await login(undefined, {
|
|
114
|
+
openBrowser: true,
|
|
115
|
+
allowManualCodeEntry: false,
|
|
116
|
+
showInstructions: false,
|
|
117
|
+
});
|
|
118
|
+
setIsLoggingIn(false);
|
|
119
|
+
if (result instanceof Error) {
|
|
120
|
+
await showFailureToast(result, { title: 'Failed to add account' });
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
await onAdded?.(result.email);
|
|
124
|
+
await showToast({ style: Toast.Style.Success, title: `Added ${result.email}` });
|
|
125
|
+
pop();
|
|
126
|
+
};
|
|
127
|
+
useEffect(() => {
|
|
128
|
+
if (didAutoStart)
|
|
129
|
+
return;
|
|
130
|
+
setDidAutoStart(true);
|
|
131
|
+
void handleLogin();
|
|
132
|
+
}, [didAutoStart]);
|
|
133
|
+
return (_jsx(Detail, { navigationTitle: "Add Account", markdown: `# Add Account\n\n` +
|
|
134
|
+
`The browser opens automatically for Google sign-in.\n\n` +
|
|
135
|
+
`Complete login in the browser, then come back here. ` +
|
|
136
|
+
`This screen waits for the localhost callback and will finish automatically.`, actions: _jsx(ActionPanel, { children: _jsx(Action, { title: isLoggingIn ? 'Waiting for Login...' : 'Open Browser Again', icon: Icon.Globe, onAction: handleLogin }) }) }));
|
|
137
|
+
}
|
|
138
|
+
// ---------------------------------------------------------------------------
|
|
139
|
+
// Manage Accounts
|
|
140
|
+
// ---------------------------------------------------------------------------
|
|
141
|
+
function ManageAccounts({ onAdded, onRemoved, }) {
|
|
142
|
+
const accounts = useAccounts();
|
|
143
|
+
const handleAdded = async (email) => {
|
|
144
|
+
await accounts.revalidate();
|
|
145
|
+
await onAdded?.(email);
|
|
146
|
+
};
|
|
147
|
+
const handleRemoved = async (email) => {
|
|
148
|
+
const result = await logout(email);
|
|
149
|
+
if (result instanceof Error) {
|
|
150
|
+
await showFailureToast(result, { title: `Failed to remove ${email}` });
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
await accounts.revalidate();
|
|
154
|
+
await onRemoved?.(email);
|
|
155
|
+
await showToast({ style: Toast.Style.Success, title: `Removed ${email}` });
|
|
156
|
+
};
|
|
157
|
+
return (_jsxs(List, { navigationTitle: "Manage Accounts", isLoading: accounts.isLoading, children: [accounts.data?.map((a) => (_jsx(List.Item, { title: a.email, icon: { source: Icon.Person, tintColor: accountColor(a.email) }, accessories: [{ tag: { value: a.appId.slice(0, 12) + '...', color: Color.SecondaryText } }], actions: _jsxs(ActionPanel, { children: [_jsx(Action.CopyToClipboard, { title: "Copy Email", content: a.email }), _jsx(Action, { title: "Logout Account", icon: Icon.Trash, style: Action.Style.Destructive, onAction: () => handleRemoved(a.email) })] }) }, `${a.email}-${a.appId}`))), _jsx(List.Item, { title: "Add Account", icon: Icon.Plus, actions: _jsx(ActionPanel, { children: _jsx(Action.Push, { title: "Add Account", target: _jsx(AddAccount, { onAdded: handleAdded }) }) }) }, "add-account")] }));
|
|
158
|
+
}
|
|
159
|
+
// ---------------------------------------------------------------------------
|
|
160
|
+
// Reply Form
|
|
161
|
+
// ---------------------------------------------------------------------------
|
|
162
|
+
function ReplyForm({ threadId, account, replyAll, revalidate, }) {
|
|
163
|
+
const { pop } = useNavigation();
|
|
164
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
165
|
+
const handleSubmit = async (values) => {
|
|
166
|
+
if (!values.body?.trim()) {
|
|
167
|
+
await showToast({ style: Toast.Style.Failure, title: 'Body is required' });
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
setIsLoading(true);
|
|
171
|
+
const { client } = await getClient([account]);
|
|
172
|
+
const result = await client.replyToThread({
|
|
173
|
+
threadId,
|
|
174
|
+
body: values.body,
|
|
175
|
+
replyAll,
|
|
176
|
+
});
|
|
177
|
+
setIsLoading(false);
|
|
178
|
+
if (result instanceof Error) {
|
|
179
|
+
await showFailureToast(result, { title: 'Failed to send reply' });
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
await showToast({ style: Toast.Style.Success, title: 'Reply sent' });
|
|
183
|
+
revalidate();
|
|
184
|
+
pop();
|
|
185
|
+
};
|
|
186
|
+
return (_jsx(Form, { isLoading: isLoading, navigationTitle: replyAll ? 'Reply All' : 'Reply', actions: _jsx(ActionPanel, { children: _jsx(Action.SubmitForm, { title: "Send Reply", onSubmit: handleSubmit }) }), children: _jsx(Form.TextArea, { id: "body", title: "Message", placeholder: "Type your reply..." }) }));
|
|
187
|
+
}
|
|
188
|
+
// ---------------------------------------------------------------------------
|
|
189
|
+
// Forward Form
|
|
190
|
+
// ---------------------------------------------------------------------------
|
|
191
|
+
function ForwardForm({ threadId, account, revalidate, }) {
|
|
192
|
+
const { pop } = useNavigation();
|
|
193
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
194
|
+
const handleSubmit = async (values) => {
|
|
195
|
+
if (!values.to?.trim()) {
|
|
196
|
+
await showToast({ style: Toast.Style.Failure, title: 'Recipient is required' });
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
setIsLoading(true);
|
|
200
|
+
const recipients = values.to.split(',').map((e) => ({ email: e.trim() })).filter((e) => e.email);
|
|
201
|
+
const { client } = await getClient([account]);
|
|
202
|
+
const result = await client.forwardThread({
|
|
203
|
+
threadId,
|
|
204
|
+
to: recipients,
|
|
205
|
+
body: values.body || undefined,
|
|
206
|
+
});
|
|
207
|
+
setIsLoading(false);
|
|
208
|
+
if (result instanceof Error) {
|
|
209
|
+
await showFailureToast(result, { title: 'Failed to forward' });
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
await showToast({ style: Toast.Style.Success, title: `Forwarded to ${values.to}` });
|
|
213
|
+
revalidate();
|
|
214
|
+
pop();
|
|
215
|
+
};
|
|
216
|
+
return (_jsxs(Form, { isLoading: isLoading, navigationTitle: "Forward", actions: _jsx(ActionPanel, { children: _jsx(Action.SubmitForm, { title: "Forward", onSubmit: handleSubmit }) }), children: [_jsx(Form.TextField, { id: "to", title: "To", placeholder: "recipient@example.com" }), _jsx(Form.TextArea, { id: "body", title: "Message", placeholder: "Optional message to prepend..." })] }));
|
|
217
|
+
}
|
|
218
|
+
// ---------------------------------------------------------------------------
|
|
219
|
+
// Thread Detail (full thread view, pushed via Enter)
|
|
220
|
+
// ---------------------------------------------------------------------------
|
|
221
|
+
function ThreadDetail({ threadId, account, revalidate, }) {
|
|
222
|
+
const thread = useCachedPromise(async (tid, acct) => {
|
|
223
|
+
const { client } = await getClient([acct]);
|
|
224
|
+
const result = await client.getThread({ threadId: tid });
|
|
225
|
+
if (result instanceof Error)
|
|
226
|
+
throw result;
|
|
227
|
+
return result.parsed;
|
|
228
|
+
}, [threadId, account]);
|
|
229
|
+
if (thread.isLoading || !thread.data) {
|
|
230
|
+
return _jsx(Detail, { markdown: "", navigationTitle: "Loading..." });
|
|
231
|
+
}
|
|
232
|
+
const t = thread.data;
|
|
233
|
+
const messages = t.messages;
|
|
234
|
+
// Build markdown: each message as a section with compact heading
|
|
235
|
+
// Prefer text/plain + email-reply-parser for clean quote stripping.
|
|
236
|
+
// Fall back to HTML → turndown when no text body is available.
|
|
237
|
+
const parts = messages.map((msg) => {
|
|
238
|
+
const senderName = msg.from.name || msg.from.email;
|
|
239
|
+
const heading = `### ${senderName} — ${formatDate(msg.date)}`;
|
|
240
|
+
const attachmentLine = msg.attachments.length > 0
|
|
241
|
+
? `📎 ${msg.attachments.map((a) => `${a.filename} (${formatSize(a.size)})`).join(', ')}`
|
|
242
|
+
: null;
|
|
243
|
+
let body;
|
|
244
|
+
if (msg.textBody) {
|
|
245
|
+
body = replyParser.parseReply(msg.textBody);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
body = renderEmailBody(msg.body, msg.mimeType);
|
|
249
|
+
}
|
|
250
|
+
return [heading, attachmentLine, '', body].filter((l) => l !== null).join('\n');
|
|
251
|
+
});
|
|
252
|
+
const markdown = `# ${t.subject}\n\n---\n\n` + parts.join('\n\n---\n\n');
|
|
253
|
+
// Collect unique participants
|
|
254
|
+
const participants = new Map();
|
|
255
|
+
for (const msg of messages) {
|
|
256
|
+
participants.set(msg.from.email, msg.from.name || msg.from.email);
|
|
257
|
+
for (const r of msg.to)
|
|
258
|
+
participants.set(r.email, r.name || r.email);
|
|
259
|
+
}
|
|
260
|
+
const labels = [...new Set(messages.flatMap((m) => m.labelIds))]
|
|
261
|
+
.filter((l) => typeof l === 'string' && !l.startsWith('Label_')) // skip internal IDs
|
|
262
|
+
.slice(0, 10);
|
|
263
|
+
const latestMsg = messages[messages.length - 1];
|
|
264
|
+
return (_jsx(Detail, { navigationTitle: t.subject, markdown: markdown, metadata: _jsxs(Detail.Metadata, { children: [_jsx(Detail.Metadata.Label, { title: "From", text: formatSender(latestMsg.from) }), _jsx(Detail.Metadata.Label, { title: "To", text: latestMsg.to.map((r) => r.name || r.email).join(', ') }), latestMsg.cc && latestMsg.cc.length > 0 && (_jsx(Detail.Metadata.Label, { title: "Cc", text: latestMsg.cc.map((r) => r.name || r.email).join(', ') })), _jsx(Detail.Metadata.Label, { title: "Date", text: latestMsg.date }), _jsx(Detail.Metadata.Separator, {}), _jsx(Detail.Metadata.Label, { title: "Messages", text: String(t.messageCount) }), _jsx(Detail.Metadata.Label, { title: "Participants", text: [...participants.values()].join(', ') }), labels.length > 0 && (_jsx(Detail.Metadata.TagList, { title: "Labels", children: labels.map((l) => (_jsx(Detail.Metadata.TagList.Item, { text: l, color: labelColor(l) }, l))) })), _jsx(Detail.Metadata.Separator, {}), _jsx(Detail.Metadata.Label, { title: "Thread ID", text: t.id }), _jsx(Detail.Metadata.Label, { title: "Account", text: account })] }), actions: _jsxs(ActionPanel, { children: [_jsxs(ActionPanel.Section, { title: "Reply & Forward", children: [_jsx(Action.Push, { title: "Reply", icon: Icon.Reply, shortcut: { modifiers: ['ctrl'], key: 'r' }, target: _jsx(ReplyForm, { threadId: threadId, account: account, revalidate: revalidate }) }), _jsx(Action.Push, { title: "Reply All", icon: Icon.Reply, shortcut: { modifiers: ['ctrl', 'shift'], key: 'r' }, target: _jsx(ReplyForm, { threadId: threadId, account: account, replyAll: true, revalidate: revalidate }) }), _jsx(Action.Push, { title: "Forward", icon: Icon.Forward, shortcut: { modifiers: ['ctrl'], key: 'f' }, target: _jsx(ForwardForm, { threadId: threadId, account: account, revalidate: revalidate }) })] }), _jsxs(ActionPanel.Section, { title: "Copy", children: [_jsx(Action.CopyToClipboard, { title: "Copy Thread ID", content: t.id }), _jsx(Action.CopyToClipboard, { title: "Copy Subject", content: t.subject }), latestMsg && (_jsx(Action.CopyToClipboard, { title: "Copy Email Body", content: renderEmailBody(latestMsg.body, latestMsg.mimeType) }))] })] }) }));
|
|
265
|
+
}
|
|
266
|
+
// ---------------------------------------------------------------------------
|
|
267
|
+
// Main Command
|
|
268
|
+
// ---------------------------------------------------------------------------
|
|
269
|
+
export default function Command() {
|
|
270
|
+
const [selectedAccount, setSelectedAccount] = useState('all');
|
|
271
|
+
const [searchText, setSearchText] = useState('');
|
|
272
|
+
const [isShowingDetail, setIsShowingDetail] = useState(true);
|
|
273
|
+
const [selectedThreads, setSelectedThreads] = useState([]);
|
|
274
|
+
const accounts = useAccounts();
|
|
275
|
+
const accountList = accounts.data ?? [];
|
|
276
|
+
// Fetch threads with pagination
|
|
277
|
+
const { data: threads, isLoading, pagination, revalidate, } = useCachedPromise((query, account) => {
|
|
278
|
+
return async ({ cursor }) => {
|
|
279
|
+
const accountFilter = account === 'all' ? undefined : [account];
|
|
280
|
+
const clients = await getClients(accountFilter);
|
|
281
|
+
// Single selected account: standard cursor pagination.
|
|
282
|
+
if (account !== 'all') {
|
|
283
|
+
const pageToken = cursor?.mode === 'single' ? cursor.nextPageToken : undefined;
|
|
284
|
+
const { email, client } = clients[0];
|
|
285
|
+
const result = await client.listThreads({
|
|
286
|
+
query: query || undefined,
|
|
287
|
+
maxResults: PAGE_SIZE,
|
|
288
|
+
pageToken: pageToken || undefined,
|
|
289
|
+
});
|
|
290
|
+
if (result instanceof Error) {
|
|
291
|
+
await showFailureToast(result, { title: 'Failed to fetch emails' });
|
|
292
|
+
return { data: [], hasMore: false };
|
|
293
|
+
}
|
|
294
|
+
const data = result.threads.map((t) => ({ ...t, account: email }));
|
|
295
|
+
return {
|
|
296
|
+
data,
|
|
297
|
+
hasMore: !!result.nextPageToken,
|
|
298
|
+
cursor: {
|
|
299
|
+
mode: 'single',
|
|
300
|
+
nextPageToken: result.nextPageToken ?? undefined,
|
|
301
|
+
},
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
// Multi-account: keep one token per account and merge sorted pages.
|
|
305
|
+
const previousByAccount = cursor?.mode === 'multi' ? cursor.nextByAccount : {};
|
|
306
|
+
const results = await Promise.all(clients.map(async ({ email, client }) => {
|
|
307
|
+
// null means this account is exhausted and should not be fetched anymore.
|
|
308
|
+
if (previousByAccount[email] === null) {
|
|
309
|
+
return {
|
|
310
|
+
email,
|
|
311
|
+
result: null,
|
|
312
|
+
nextPageToken: null,
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
const result = await client.listThreads({
|
|
316
|
+
query: query || undefined,
|
|
317
|
+
maxResults: PAGE_SIZE,
|
|
318
|
+
pageToken: previousByAccount[email] ?? undefined,
|
|
319
|
+
});
|
|
320
|
+
if (result instanceof Error) {
|
|
321
|
+
return {
|
|
322
|
+
email,
|
|
323
|
+
result: null,
|
|
324
|
+
nextPageToken: null,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
return {
|
|
328
|
+
email,
|
|
329
|
+
result,
|
|
330
|
+
nextPageToken: result.nextPageToken ?? null,
|
|
331
|
+
};
|
|
332
|
+
}));
|
|
333
|
+
const successfulResults = results
|
|
334
|
+
.map((r) => (r.result ? { email: r.email, result: r.result } : null))
|
|
335
|
+
.filter(isTruthy);
|
|
336
|
+
const merged = successfulResults
|
|
337
|
+
.flatMap(({ email, result }) => result.threads.map((t) => ({ ...t, account: email })))
|
|
338
|
+
.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());
|
|
339
|
+
const nextByAccount = {};
|
|
340
|
+
for (const { email, nextPageToken } of results) {
|
|
341
|
+
nextByAccount[email] = nextPageToken;
|
|
342
|
+
}
|
|
343
|
+
const hasMore = Object.values(nextByAccount).some((token) => token !== null);
|
|
344
|
+
return {
|
|
345
|
+
data: merged,
|
|
346
|
+
hasMore,
|
|
347
|
+
cursor: { mode: 'multi', nextByAccount },
|
|
348
|
+
};
|
|
349
|
+
};
|
|
350
|
+
}, [searchText, selectedAccount], { keepPreviousData: true });
|
|
351
|
+
const handleAccountAdded = useCallback(async (email) => {
|
|
352
|
+
await accounts.revalidate();
|
|
353
|
+
setSelectedAccount(email);
|
|
354
|
+
await revalidate();
|
|
355
|
+
}, [accounts, revalidate]);
|
|
356
|
+
const handleAccountRemoved = useCallback(async (email) => {
|
|
357
|
+
await accounts.revalidate();
|
|
358
|
+
if (selectedAccount === email) {
|
|
359
|
+
setSelectedAccount('all');
|
|
360
|
+
}
|
|
361
|
+
await revalidate();
|
|
362
|
+
}, [accounts, revalidate, selectedAccount]);
|
|
363
|
+
const allThreads = threads ?? [];
|
|
364
|
+
// Group threads into sections
|
|
365
|
+
const sections = useMemo(() => {
|
|
366
|
+
const groups = new Map();
|
|
367
|
+
for (const section of SECTION_ORDER)
|
|
368
|
+
groups.set(section, []);
|
|
369
|
+
for (const thread of allThreads) {
|
|
370
|
+
const section = dateSection(thread.date);
|
|
371
|
+
const list = groups.get(section);
|
|
372
|
+
if (list)
|
|
373
|
+
list.push(thread);
|
|
374
|
+
}
|
|
375
|
+
return SECTION_ORDER.map((name) => ({
|
|
376
|
+
name,
|
|
377
|
+
threads: groups.get(name) ?? [],
|
|
378
|
+
})).filter((s) => s.threads.length > 0);
|
|
379
|
+
}, [allThreads]);
|
|
380
|
+
const multiAccount = accountList.length > 1;
|
|
381
|
+
// Selection helpers
|
|
382
|
+
const toggleSelection = useCallback((threadId) => {
|
|
383
|
+
setSelectedThreads((prev) => prev.includes(threadId) ? prev.filter((id) => id !== threadId) : [...prev, threadId]);
|
|
384
|
+
}, []);
|
|
385
|
+
// Bulk actions
|
|
386
|
+
const handleBulkAction = useCallback(async (actionName, fn) => {
|
|
387
|
+
if (selectedThreads.length === 0)
|
|
388
|
+
return;
|
|
389
|
+
// Group selected threads by account
|
|
390
|
+
const byAccount = new Map();
|
|
391
|
+
for (const tid of selectedThreads) {
|
|
392
|
+
const thread = allThreads.find((t) => t.id === tid);
|
|
393
|
+
if (!thread)
|
|
394
|
+
continue;
|
|
395
|
+
const list = byAccount.get(thread.account) ?? [];
|
|
396
|
+
list.push(tid);
|
|
397
|
+
byAccount.set(thread.account, list);
|
|
398
|
+
}
|
|
399
|
+
for (const [acct, ids] of byAccount) {
|
|
400
|
+
const { client } = await getClient([acct]);
|
|
401
|
+
const result = await fn(client, ids);
|
|
402
|
+
if (result instanceof Error) {
|
|
403
|
+
await showFailureToast(result, { title: `Failed to ${actionName}` });
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
await showToast({ style: Toast.Style.Success, title: `${actionName}: ${selectedThreads.length} thread(s)` });
|
|
408
|
+
setSelectedThreads([]);
|
|
409
|
+
revalidate();
|
|
410
|
+
}, [selectedThreads, allThreads, revalidate]);
|
|
411
|
+
return (_jsx(List, { isLoading: isLoading || accounts.isLoading, isShowingDetail: isShowingDetail, searchBarPlaceholder: "Search emails...", onSearchTextChange: setSearchText, throttle: true, pagination: pagination ? { ...pagination, pageSize: PAGE_SIZE } : undefined, searchBarAccessory: accountList.length > 0 ? (_jsx(AccountDropdown, { accounts: accountList, value: selectedAccount, onChange: setSelectedAccount, onAdded: handleAccountAdded, onRemoved: handleAccountRemoved })) : undefined, children: sections.map((section) => (_jsx(List.Section, { title: section.name, children: section.threads.map((thread) => {
|
|
412
|
+
const isSelected = selectedThreads.includes(thread.id);
|
|
413
|
+
const hasSelection = selectedThreads.length > 0;
|
|
414
|
+
// Icon: selection mode or status
|
|
415
|
+
const icon = hasSelection
|
|
416
|
+
? { source: isSelected ? Icon.CheckCircle : Icon.Circle, tintColor: isSelected ? Color.Blue : Color.SecondaryText }
|
|
417
|
+
: threadStatusIcon(thread);
|
|
418
|
+
// Accessories
|
|
419
|
+
const accessories = [];
|
|
420
|
+
if (thread.messageCount > 1) {
|
|
421
|
+
accessories.push({ tag: { value: String(thread.messageCount), color: Color.SecondaryText } });
|
|
422
|
+
}
|
|
423
|
+
if (multiAccount || selectedAccount === 'all') {
|
|
424
|
+
accessories.push({ tag: { value: thread.account.split('@')[0] ?? thread.account, color: accountColor(thread.account) } });
|
|
425
|
+
}
|
|
426
|
+
accessories.push({ text: formatDate(thread.date) });
|
|
427
|
+
// Detail panel: latest message body as markdown
|
|
428
|
+
const detail = isShowingDetail ? (_jsx(List.Item.Detail, { markdown: `# ${thread.subject}\n\n${thread.snippet}`, metadata: _jsxs(List.Item.Detail.Metadata, { children: [_jsx(List.Item.Detail.Metadata.Label, { title: "From", text: formatSender(thread.from) }), _jsx(List.Item.Detail.Metadata.Label, { title: "Date", text: thread.date }), _jsx(List.Item.Detail.Metadata.Separator, {}), thread.labelIds.length > 0 && (_jsx(List.Item.Detail.Metadata.TagList, { title: "Labels", children: thread.labelIds
|
|
429
|
+
.filter((l) => !l.startsWith('Label_'))
|
|
430
|
+
.slice(0, 8)
|
|
431
|
+
.map((l) => (_jsx(List.Item.Detail.Metadata.TagList.Item, { text: l, color: labelColor(l) }, l))) })), _jsx(List.Item.Detail.Metadata.Separator, {}), _jsx(List.Item.Detail.Metadata.Label, { title: "Messages", text: String(thread.messageCount) }), _jsx(List.Item.Detail.Metadata.Label, { title: "Thread ID", text: thread.id }), multiAccount && (_jsx(List.Item.Detail.Metadata.Label, { title: "Account", text: thread.account }))] }) })) : undefined;
|
|
432
|
+
return (_jsx(List.Item, { title: thread.subject || '(no subject)', subtitle: formatSender(thread.from), icon: icon, accessories: accessories, keywords: [thread.from.email, thread.from.name ?? '', thread.account], detail: detail, actions: _jsxs(ActionPanel, { children: [hasSelection && (_jsxs(ActionPanel.Section, { title: "Selection", children: [_jsx(Action, { title: isSelected ? 'Deselect Thread' : 'Select Thread', icon: isSelected ? Icon.CheckCircle : Icon.Circle, onAction: () => toggleSelection(thread.id) }), _jsx(Action, { title: `Archive ${selectedThreads.length} Selected`, icon: Icon.Tray, onAction: () => handleBulkAction('Archived', (c, ids) => c.archive({ threadIds: ids })) }), _jsx(Action, { title: `Mark ${selectedThreads.length} as Read`, icon: Icon.Eye, onAction: () => handleBulkAction('Marked as read', (c, ids) => c.markAsRead({ threadIds: ids })) }), _jsx(Action, { title: `Star ${selectedThreads.length} Selected`, icon: Icon.Star, onAction: () => handleBulkAction('Starred', (c, ids) => c.star({ threadIds: ids })) }), _jsx(Action, { title: `Trash ${selectedThreads.length} Selected`, icon: Icon.Trash, style: Action.Style.Destructive, onAction: () => handleBulkAction('Trashed', async (c, ids) => {
|
|
433
|
+
for (const id of ids) {
|
|
434
|
+
await c.trash({ threadId: id });
|
|
435
|
+
}
|
|
436
|
+
}) }), _jsx(Action, { title: "Deselect All", icon: Icon.XMarkCircle, onAction: () => setSelectedThreads([]) })] })), _jsxs(ActionPanel.Section, { children: [_jsx(Action.Push, { title: "Open Thread", icon: Icon.Eye, target: _jsx(ThreadDetail, { threadId: thread.id, account: thread.account, revalidate: revalidate }) }), !hasSelection && (_jsx(Action, { title: "Select Thread", icon: Icon.CheckCircle, shortcut: { modifiers: ['ctrl'], key: 'x' }, onAction: () => toggleSelection(thread.id) })), _jsx(Action, { title: thread.unread ? 'Mark as Read' : 'Mark as Unread', icon: thread.unread ? Icon.Eye : Icon.EyeDisabled, shortcut: { modifiers: ['ctrl'], key: 'u' }, onAction: async () => {
|
|
437
|
+
const { client } = await getClient([thread.account]);
|
|
438
|
+
const result = thread.unread
|
|
439
|
+
? await client.markAsRead({ threadIds: [thread.id] })
|
|
440
|
+
: await client.markAsUnread({ threadIds: [thread.id] });
|
|
441
|
+
if (result instanceof Error) {
|
|
442
|
+
await showFailureToast(result);
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
await showToast({
|
|
446
|
+
style: Toast.Style.Success,
|
|
447
|
+
title: thread.unread ? 'Marked as read' : 'Marked as unread',
|
|
448
|
+
});
|
|
449
|
+
revalidate();
|
|
450
|
+
} }), _jsx(Action, { title: "Archive", icon: Icon.Tray, shortcut: { modifiers: ['ctrl'], key: 'e' }, onAction: async () => {
|
|
451
|
+
const { client } = await getClient([thread.account]);
|
|
452
|
+
const result = await client.archive({ threadIds: [thread.id] });
|
|
453
|
+
if (result instanceof Error) {
|
|
454
|
+
await showFailureToast(result);
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
457
|
+
await showToast({ style: Toast.Style.Success, title: 'Archived' });
|
|
458
|
+
revalidate();
|
|
459
|
+
} }), _jsx(Action, { title: thread.labelIds.includes('STARRED') ? 'Unstar' : 'Star', icon: Icon.Star, shortcut: { modifiers: ['ctrl'], key: 's' }, onAction: async () => {
|
|
460
|
+
const { client } = await getClient([thread.account]);
|
|
461
|
+
const isStarred = thread.labelIds.includes('STARRED');
|
|
462
|
+
const result = isStarred
|
|
463
|
+
? await client.unstar({ threadIds: [thread.id] })
|
|
464
|
+
: await client.star({ threadIds: [thread.id] });
|
|
465
|
+
if (result instanceof Error) {
|
|
466
|
+
await showFailureToast(result);
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
await showToast({
|
|
470
|
+
style: Toast.Style.Success,
|
|
471
|
+
title: isStarred ? 'Unstarred' : 'Starred',
|
|
472
|
+
});
|
|
473
|
+
revalidate();
|
|
474
|
+
} })] }), _jsxs(ActionPanel.Section, { title: "Reply & Forward", children: [_jsx(Action.Push, { title: "Reply", icon: Icon.Reply, shortcut: { modifiers: ['ctrl'], key: 'r' }, target: _jsx(ReplyForm, { threadId: thread.id, account: thread.account, revalidate: revalidate }) }), _jsx(Action.Push, { title: "Reply All", icon: Icon.Reply, shortcut: { modifiers: ['ctrl', 'shift'], key: 'r' }, target: _jsx(ReplyForm, { threadId: thread.id, account: thread.account, replyAll: true, revalidate: revalidate }) }), _jsx(Action.Push, { title: "Forward", icon: Icon.Forward, shortcut: { modifiers: ['ctrl'], key: 'f' }, target: _jsx(ForwardForm, { threadId: thread.id, account: thread.account, revalidate: revalidate }) })] }), _jsxs(ActionPanel.Section, { title: "Copy", children: [_jsx(Action.CopyToClipboard, { title: "Copy Thread ID", content: thread.id }), _jsx(Action.CopyToClipboard, { title: "Copy Subject", content: thread.subject }), _jsx(Action.CopyToClipboard, { title: "Copy Sender Email", content: thread.from.email })] }), _jsx(ActionPanel.Section, { children: _jsx(Action, { title: "Trash", icon: Icon.Trash, style: Action.Style.Destructive, shortcut: { modifiers: ['ctrl'], key: 'backspace' }, onAction: async () => {
|
|
475
|
+
const { client } = await getClient([thread.account]);
|
|
476
|
+
await client.trash({ threadId: thread.id });
|
|
477
|
+
await showToast({ style: Toast.Style.Success, title: 'Trashed' });
|
|
478
|
+
revalidate();
|
|
479
|
+
} }) }), _jsxs(ActionPanel.Section, { children: [_jsx(Action, { title: "Refresh", icon: Icon.ArrowClockwise, shortcut: { modifiers: ['ctrl', 'shift'], key: 'r' }, onAction: () => revalidate() }), _jsx(Action, { title: "Toggle Detail", icon: Icon.Sidebar, shortcut: { modifiers: ['ctrl'], key: 'd' }, onAction: () => setIsShowingDetail((v) => !v) })] })] }) }, `${thread.account}-${thread.id}`));
|
|
480
|
+
}) }, section.name))) }));
|
|
481
|
+
}
|
|
482
|
+
// ---------------------------------------------------------------------------
|
|
483
|
+
// Label color mapping
|
|
484
|
+
// ---------------------------------------------------------------------------
|
|
485
|
+
function labelColor(label) {
|
|
486
|
+
switch (label) {
|
|
487
|
+
case 'INBOX':
|
|
488
|
+
return Color.Blue;
|
|
489
|
+
case 'STARRED':
|
|
490
|
+
return Color.Yellow;
|
|
491
|
+
case 'IMPORTANT':
|
|
492
|
+
return Color.Orange;
|
|
493
|
+
case 'SENT':
|
|
494
|
+
return Color.Green;
|
|
495
|
+
case 'DRAFT':
|
|
496
|
+
return Color.Purple;
|
|
497
|
+
case 'SPAM':
|
|
498
|
+
return Color.Red;
|
|
499
|
+
case 'TRASH':
|
|
500
|
+
return Color.Red;
|
|
501
|
+
case 'UNREAD':
|
|
502
|
+
return Color.Blue;
|
|
503
|
+
default:
|
|
504
|
+
return Color.SecondaryText;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
// ---------------------------------------------------------------------------
|
|
508
|
+
// Size formatting
|
|
509
|
+
// ---------------------------------------------------------------------------
|
|
510
|
+
function formatSize(bytes) {
|
|
511
|
+
if (bytes < 1024)
|
|
512
|
+
return `${bytes} B`;
|
|
513
|
+
if (bytes < 1048576)
|
|
514
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
515
|
+
return `${(bytes / 1048576).toFixed(1)} MB`;
|
|
516
|
+
}
|
|
517
|
+
//# sourceMappingURL=mail-tui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mail-tui.js","sourceRoot":"","sources":["../src/mail-tui.tsx"],"names":[],"mappings":"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"}
|
package/dist/output.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import EmailReplyParser from 'email-reply-parser';
|
|
1
2
|
export declare function htmlToMarkdown(html: string): string;
|
|
2
3
|
export declare function renderEmailBody(body: string, mimeType: string): string;
|
|
4
|
+
export declare const replyParser: EmailReplyParser;
|
|
3
5
|
/** Print any value as YAML to stdout. */
|
|
4
6
|
export declare function printYaml(data: unknown): void;
|
|
5
7
|
/**
|
|
@@ -35,3 +37,7 @@ export declare function formatFlags(item: {
|
|
|
35
37
|
export declare function hint(msg: string): void;
|
|
36
38
|
export declare function success(msg: string): void;
|
|
37
39
|
export declare function error(msg: string): void;
|
|
40
|
+
/** Handle any error from a client method in a command context.
|
|
41
|
+
* Prints a user-friendly message to stderr and exits.
|
|
42
|
+
* AuthError gets a "Try: zele login" hint; all others print their message. */
|
|
43
|
+
export declare function handleCommandError(err: Error): never;
|