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.
Files changed (157) hide show
  1. package/README.md +1 -1
  2. package/bin/zele +27 -0
  3. package/dist/api-utils.d.ts +51 -2
  4. package/dist/api-utils.js +89 -3
  5. package/dist/api-utils.js.map +1 -1
  6. package/dist/auth.d.ts +27 -6
  7. package/dist/auth.js +185 -129
  8. package/dist/auth.js.map +1 -1
  9. package/dist/calendar-client.d.ts +16 -9
  10. package/dist/calendar-client.js +163 -59
  11. package/dist/calendar-client.js.map +1 -1
  12. package/dist/cli.js +34 -1
  13. package/dist/cli.js.map +1 -1
  14. package/dist/commands/attachment.js +17 -15
  15. package/dist/commands/attachment.js.map +1 -1
  16. package/dist/commands/auth-cmd.js +20 -9
  17. package/dist/commands/auth-cmd.js.map +1 -1
  18. package/dist/commands/calendar.js +67 -78
  19. package/dist/commands/calendar.js.map +1 -1
  20. package/dist/commands/draft.js +25 -18
  21. package/dist/commands/draft.js.map +1 -1
  22. package/dist/commands/label.js +33 -45
  23. package/dist/commands/label.js.map +1 -1
  24. package/dist/commands/mail-actions.js +11 -13
  25. package/dist/commands/mail-actions.js.map +1 -1
  26. package/dist/commands/mail.js +119 -127
  27. package/dist/commands/mail.js.map +1 -1
  28. package/dist/commands/profile.js +18 -21
  29. package/dist/commands/profile.js.map +1 -1
  30. package/dist/commands/watch.js +33 -261
  31. package/dist/commands/watch.js.map +1 -1
  32. package/dist/db.js +12 -13
  33. package/dist/db.js.map +1 -1
  34. package/dist/generated/browser.d.ts +12 -27
  35. package/dist/generated/client.d.ts +13 -28
  36. package/dist/generated/client.js +1 -1
  37. package/dist/generated/commonInputTypes.d.ts +90 -26
  38. package/dist/generated/enums.d.ts +0 -4
  39. package/dist/generated/enums.js +0 -3
  40. package/dist/generated/enums.js.map +1 -1
  41. package/dist/generated/internal/class.d.ts +22 -55
  42. package/dist/generated/internal/class.js +12 -4
  43. package/dist/generated/internal/class.js.map +1 -1
  44. package/dist/generated/internal/prismaNamespace.d.ts +272 -511
  45. package/dist/generated/internal/prismaNamespace.js +54 -66
  46. package/dist/generated/internal/prismaNamespace.js.map +1 -1
  47. package/dist/generated/internal/prismaNamespaceBrowser.d.ts +60 -74
  48. package/dist/generated/internal/prismaNamespaceBrowser.js +50 -62
  49. package/dist/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  50. package/dist/generated/models/Account.d.ts +1637 -0
  51. package/dist/generated/models/Account.js +2 -0
  52. package/dist/generated/models/Account.js.map +1 -0
  53. package/dist/generated/models/CalendarList.d.ts +1161 -0
  54. package/dist/generated/models/CalendarList.js +2 -0
  55. package/dist/generated/models/CalendarList.js.map +1 -0
  56. package/dist/generated/models/Label.d.ts +1161 -0
  57. package/dist/generated/models/Label.js +2 -0
  58. package/dist/generated/models/Label.js.map +1 -0
  59. package/dist/generated/models/Profile.d.ts +1269 -0
  60. package/dist/generated/models/Profile.js +2 -0
  61. package/dist/generated/models/Profile.js.map +1 -0
  62. package/dist/generated/models/SyncState.d.ts +1130 -0
  63. package/dist/generated/models/SyncState.js +2 -0
  64. package/dist/generated/models/SyncState.js.map +1 -0
  65. package/dist/generated/models/Thread.d.ts +1608 -0
  66. package/dist/generated/models/Thread.js +2 -0
  67. package/dist/generated/models/Thread.js.map +1 -0
  68. package/dist/generated/models.d.ts +6 -9
  69. package/dist/gmail-client.d.ts +119 -94
  70. package/dist/gmail-client.js +862 -322
  71. package/dist/gmail-client.js.map +1 -1
  72. package/dist/mail-tui.d.ts +1 -0
  73. package/dist/mail-tui.js +517 -0
  74. package/dist/mail-tui.js.map +1 -0
  75. package/dist/output.d.ts +6 -0
  76. package/dist/output.js +124 -11
  77. package/dist/output.js.map +1 -1
  78. package/package.json +39 -11
  79. package/schema.prisma +81 -113
  80. package/src/api-utils.ts +103 -5
  81. package/src/auth.ts +224 -143
  82. package/src/calendar-client.ts +196 -89
  83. package/src/cli.ts +39 -1
  84. package/src/commands/attachment.ts +18 -19
  85. package/src/commands/auth-cmd.ts +19 -9
  86. package/src/commands/calendar.ts +42 -85
  87. package/src/commands/draft.ts +19 -22
  88. package/src/commands/label.ts +21 -57
  89. package/src/commands/mail-actions.ts +11 -19
  90. package/src/commands/mail.ts +109 -148
  91. package/src/commands/profile.ts +12 -28
  92. package/src/commands/watch.ts +37 -304
  93. package/src/db.ts +13 -16
  94. package/src/generated/browser.ts +49 -0
  95. package/src/generated/client.ts +71 -0
  96. package/src/generated/commonInputTypes.ts +332 -0
  97. package/src/generated/enums.ts +17 -0
  98. package/src/generated/internal/class.ts +250 -0
  99. package/src/generated/internal/prismaNamespace.ts +1198 -0
  100. package/src/generated/internal/prismaNamespaceBrowser.ts +169 -0
  101. package/src/generated/models/Account.ts +1848 -0
  102. package/src/generated/models/CalendarList.ts +1331 -0
  103. package/src/generated/models/Label.ts +1331 -0
  104. package/src/generated/models/Profile.ts +1439 -0
  105. package/src/generated/models/SyncState.ts +1300 -0
  106. package/src/generated/models/Thread.ts +1787 -0
  107. package/src/generated/models.ts +17 -0
  108. package/src/gmail-client.test.ts +59 -0
  109. package/src/gmail-client.ts +1034 -429
  110. package/src/mail-tui.tsx +1061 -0
  111. package/src/output.test.ts +1093 -0
  112. package/src/output.ts +128 -13
  113. package/src/schema.sql +58 -68
  114. package/src/test-fixtures/email-html/safe-claude-event.html +28 -0
  115. package/src/test-fixtures/email-html/safe-product-announcement.html +25 -0
  116. package/src/test-fixtures/email-html/safe-tracked-links.html +27 -0
  117. package/src/test-fixtures/email-html-snapshots/safe-claude-event.html.md +9 -0
  118. package/src/test-fixtures/email-html-snapshots/safe-product-announcement.html.md +13 -0
  119. package/src/test-fixtures/email-html-snapshots/safe-tracked-links.html.md +7 -0
  120. package/AGENTS.md +0 -26
  121. package/CHANGELOG.md +0 -43
  122. package/dist/generated/models/accounts.d.ts +0 -2000
  123. package/dist/generated/models/accounts.js +0 -2
  124. package/dist/generated/models/accounts.js.map +0 -1
  125. package/dist/generated/models/calendar_events.d.ts +0 -1433
  126. package/dist/generated/models/calendar_events.js +0 -2
  127. package/dist/generated/models/calendar_events.js.map +0 -1
  128. package/dist/generated/models/calendar_lists.d.ts +0 -1131
  129. package/dist/generated/models/calendar_lists.js +0 -2
  130. package/dist/generated/models/calendar_lists.js.map +0 -1
  131. package/dist/generated/models/label_counts.d.ts +0 -1131
  132. package/dist/generated/models/label_counts.js +0 -2
  133. package/dist/generated/models/label_counts.js.map +0 -1
  134. package/dist/generated/models/labels.d.ts +0 -1131
  135. package/dist/generated/models/labels.js +0 -2
  136. package/dist/generated/models/labels.js.map +0 -1
  137. package/dist/generated/models/profiles.d.ts +0 -1131
  138. package/dist/generated/models/profiles.js +0 -2
  139. package/dist/generated/models/profiles.js.map +0 -1
  140. package/dist/generated/models/sync_states.d.ts +0 -1107
  141. package/dist/generated/models/sync_states.js +0 -2
  142. package/dist/generated/models/sync_states.js.map +0 -1
  143. package/dist/generated/models/thread_lists.d.ts +0 -1404
  144. package/dist/generated/models/thread_lists.js +0 -2
  145. package/dist/generated/models/thread_lists.js.map +0 -1
  146. package/dist/generated/models/threads.d.ts +0 -1247
  147. package/dist/generated/models/threads.js +0 -2
  148. package/dist/generated/models/threads.js.map +0 -1
  149. package/dist/gmail-cache.d.ts +0 -60
  150. package/dist/gmail-cache.js +0 -264
  151. package/dist/gmail-cache.js.map +0 -1
  152. package/docs/gogcli-gmail-implementation.md +0 -599
  153. package/scripts/test-device-code-clients.ts +0 -186
  154. package/scripts/test-micropython-scopes.ts +0 -72
  155. package/scripts/test-oauth-clients.ts +0 -257
  156. package/src/gmail-cache.ts +0 -339
  157. package/tsconfig.json +0 -16
@@ -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;