zele 0.2.0 → 0.3.5

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 (158) hide show
  1. package/README.md +38 -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 +28 -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 +114 -128
  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.d.ts +2 -0
  31. package/dist/commands/watch.js +73 -0
  32. package/dist/commands/watch.js.map +1 -0
  33. package/dist/db.js +12 -13
  34. package/dist/db.js.map +1 -1
  35. package/dist/generated/browser.d.ts +12 -27
  36. package/dist/generated/client.d.ts +13 -28
  37. package/dist/generated/client.js +1 -1
  38. package/dist/generated/commonInputTypes.d.ts +90 -26
  39. package/dist/generated/enums.d.ts +0 -4
  40. package/dist/generated/enums.js +0 -3
  41. package/dist/generated/enums.js.map +1 -1
  42. package/dist/generated/internal/class.d.ts +22 -55
  43. package/dist/generated/internal/class.js +12 -4
  44. package/dist/generated/internal/class.js.map +1 -1
  45. package/dist/generated/internal/prismaNamespace.d.ts +272 -511
  46. package/dist/generated/internal/prismaNamespace.js +54 -66
  47. package/dist/generated/internal/prismaNamespace.js.map +1 -1
  48. package/dist/generated/internal/prismaNamespaceBrowser.d.ts +60 -74
  49. package/dist/generated/internal/prismaNamespaceBrowser.js +50 -62
  50. package/dist/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  51. package/dist/generated/models/Account.d.ts +1637 -0
  52. package/dist/generated/models/Account.js +2 -0
  53. package/dist/generated/models/Account.js.map +1 -0
  54. package/dist/generated/models/CalendarList.d.ts +1161 -0
  55. package/dist/generated/models/CalendarList.js +2 -0
  56. package/dist/generated/models/CalendarList.js.map +1 -0
  57. package/dist/generated/models/Label.d.ts +1161 -0
  58. package/dist/generated/models/Label.js +2 -0
  59. package/dist/generated/models/Label.js.map +1 -0
  60. package/dist/generated/models/Profile.d.ts +1269 -0
  61. package/dist/generated/models/Profile.js +2 -0
  62. package/dist/generated/models/Profile.js.map +1 -0
  63. package/dist/generated/models/SyncState.d.ts +1130 -0
  64. package/dist/generated/models/SyncState.js +2 -0
  65. package/dist/generated/models/SyncState.js.map +1 -0
  66. package/dist/generated/models/Thread.d.ts +1608 -0
  67. package/dist/generated/models/Thread.js +2 -0
  68. package/dist/generated/models/Thread.js.map +1 -0
  69. package/dist/generated/models.d.ts +6 -9
  70. package/dist/gmail-client.d.ts +119 -94
  71. package/dist/gmail-client.js +862 -315
  72. package/dist/gmail-client.js.map +1 -1
  73. package/dist/mail-tui.d.ts +1 -0
  74. package/dist/mail-tui.js +517 -0
  75. package/dist/mail-tui.js.map +1 -0
  76. package/dist/output.d.ts +6 -4
  77. package/dist/output.js +124 -17
  78. package/dist/output.js.map +1 -1
  79. package/package.json +39 -11
  80. package/schema.prisma +81 -113
  81. package/src/api-utils.ts +103 -5
  82. package/src/auth.ts +224 -143
  83. package/src/calendar-client.ts +196 -89
  84. package/src/cli.ts +32 -1
  85. package/src/commands/attachment.ts +18 -19
  86. package/src/commands/auth-cmd.ts +19 -9
  87. package/src/commands/calendar.ts +42 -85
  88. package/src/commands/draft.ts +19 -22
  89. package/src/commands/label.ts +21 -57
  90. package/src/commands/mail-actions.ts +11 -19
  91. package/src/commands/mail.ts +104 -149
  92. package/src/commands/profile.ts +12 -28
  93. package/src/commands/watch.ts +88 -0
  94. package/src/db.ts +13 -16
  95. package/src/generated/browser.ts +49 -0
  96. package/src/generated/client.ts +71 -0
  97. package/src/generated/commonInputTypes.ts +332 -0
  98. package/src/generated/enums.ts +17 -0
  99. package/src/generated/internal/class.ts +250 -0
  100. package/src/generated/internal/prismaNamespace.ts +1198 -0
  101. package/src/generated/internal/prismaNamespaceBrowser.ts +169 -0
  102. package/src/generated/models/Account.ts +1848 -0
  103. package/src/generated/models/CalendarList.ts +1331 -0
  104. package/src/generated/models/Label.ts +1331 -0
  105. package/src/generated/models/Profile.ts +1439 -0
  106. package/src/generated/models/SyncState.ts +1300 -0
  107. package/src/generated/models/Thread.ts +1787 -0
  108. package/src/generated/models.ts +17 -0
  109. package/src/gmail-client.test.ts +59 -0
  110. package/src/gmail-client.ts +1034 -422
  111. package/src/mail-tui.tsx +1061 -0
  112. package/src/output.test.ts +1093 -0
  113. package/src/output.ts +128 -20
  114. package/src/schema.sql +58 -68
  115. package/src/test-fixtures/email-html/safe-claude-event.html +28 -0
  116. package/src/test-fixtures/email-html/safe-product-announcement.html +25 -0
  117. package/src/test-fixtures/email-html/safe-tracked-links.html +27 -0
  118. package/src/test-fixtures/email-html-snapshots/safe-claude-event.html.md +9 -0
  119. package/src/test-fixtures/email-html-snapshots/safe-product-announcement.html.md +13 -0
  120. package/src/test-fixtures/email-html-snapshots/safe-tracked-links.html.md +7 -0
  121. package/AGENTS.md +0 -26
  122. package/CHANGELOG.md +0 -36
  123. package/dist/generated/models/accounts.d.ts +0 -2000
  124. package/dist/generated/models/accounts.js +0 -2
  125. package/dist/generated/models/accounts.js.map +0 -1
  126. package/dist/generated/models/calendar_events.d.ts +0 -1433
  127. package/dist/generated/models/calendar_events.js +0 -2
  128. package/dist/generated/models/calendar_events.js.map +0 -1
  129. package/dist/generated/models/calendar_lists.d.ts +0 -1131
  130. package/dist/generated/models/calendar_lists.js +0 -2
  131. package/dist/generated/models/calendar_lists.js.map +0 -1
  132. package/dist/generated/models/label_counts.d.ts +0 -1131
  133. package/dist/generated/models/label_counts.js +0 -2
  134. package/dist/generated/models/label_counts.js.map +0 -1
  135. package/dist/generated/models/labels.d.ts +0 -1131
  136. package/dist/generated/models/labels.js +0 -2
  137. package/dist/generated/models/labels.js.map +0 -1
  138. package/dist/generated/models/profiles.d.ts +0 -1131
  139. package/dist/generated/models/profiles.js +0 -2
  140. package/dist/generated/models/profiles.js.map +0 -1
  141. package/dist/generated/models/sync_states.d.ts +0 -1107
  142. package/dist/generated/models/sync_states.js +0 -2
  143. package/dist/generated/models/sync_states.js.map +0 -1
  144. package/dist/generated/models/thread_lists.d.ts +0 -1404
  145. package/dist/generated/models/thread_lists.js +0 -2
  146. package/dist/generated/models/thread_lists.js.map +0 -1
  147. package/dist/generated/models/threads.d.ts +0 -1247
  148. package/dist/generated/models/threads.js +0 -2
  149. package/dist/generated/models/threads.js.map +0 -1
  150. package/dist/gmail-cache.d.ts +0 -60
  151. package/dist/gmail-cache.js +0 -264
  152. package/dist/gmail-cache.js.map +0 -1
  153. package/docs/gogcli-gmail-implementation.md +0 -599
  154. package/scripts/test-device-code-clients.ts +0 -186
  155. package/scripts/test-micropython-scopes.ts +0 -72
  156. package/scripts/test-oauth-clients.ts +0 -257
  157. package/src/gmail-cache.ts +0 -339
  158. package/tsconfig.json +0 -16
@@ -1,17 +1,29 @@
1
1
  // Mail commands: list, search, read, send, reply, forward.
2
- // Core email operations wrapping GmailClient with cache-first reads
3
- // and YAML output for list views.
2
+ // Core email operations wrapping GmailClient with YAML output for list views.
3
+ // Cache is handled by the client — commands just call methods and use data.
4
4
  // Multi-account: list/search fetch all accounts concurrently and merge by date.
5
5
  import { z } from 'zod';
6
6
  import fs from 'node:fs';
7
+ import React from 'react';
7
8
  import { getClients, getClient } from '../auth.js';
8
- import * as cache from '../gmail-cache.js';
9
+ import { AuthError } from '../api-utils.js';
9
10
  import * as out from '../output.js';
11
+ import { handleCommandError } from '../output.js';
10
12
  import pc from 'picocolors';
11
13
  // ---------------------------------------------------------------------------
12
14
  // Register commands
13
15
  // ---------------------------------------------------------------------------
14
16
  export function registerMailCommands(cli) {
17
+ // =========================================================================
18
+ // mail (TUI)
19
+ // =========================================================================
20
+ cli
21
+ .command('mail', 'Browse emails in TUI')
22
+ .action(async () => {
23
+ const { renderWithProviders } = await import('termcast');
24
+ const { default: Command } = await import('../mail-tui.js');
25
+ await renderWithProviders(React.createElement(Command));
26
+ });
15
27
  // =========================================================================
16
28
  // mail list
17
29
  // =========================================================================
@@ -21,7 +33,6 @@ export function registerMailCommands(cli) {
21
33
  .option('--max [max]', 'Max results per page (default: 20)')
22
34
  .option('--page <page>', 'Pagination token')
23
35
  .option('--label <label>', 'Filter by label name')
24
- .option('--no-cache', 'Skip cache')
25
36
  .action(async (options) => {
26
37
  const folder = options.folder ?? 'inbox';
27
38
  const max = options.max ? Number(options.max) : 20;
@@ -30,40 +41,29 @@ export function registerMailCommands(cli) {
30
41
  out.error('--page cannot be used with multiple accounts (page tokens are per-account)');
31
42
  process.exit(1);
32
43
  }
33
- const cacheParams = {
34
- folder,
35
- maxResults: max,
36
- labelIds: options.label ? [options.label] : undefined,
37
- pageToken: options.page,
38
- };
39
- // Fetch from all accounts concurrently, tolerating individual failures
40
- const settled = await Promise.allSettled(clients.map(async ({ email, client }) => {
41
- if (!options.noCache) {
42
- const cached = await cache.getCachedThreadList(email, cacheParams);
43
- if (cached) {
44
- return { email, result: cached };
45
- }
46
- }
44
+ // Fetch from all accounts concurrently
45
+ const results = await Promise.all(clients.map(async ({ email, client }) => {
47
46
  const result = await client.listThreads({
48
47
  folder,
49
48
  maxResults: max,
50
49
  labelIds: options.label ? [options.label] : undefined,
51
50
  pageToken: options.page,
52
51
  });
53
- if (!options.noCache) {
54
- await cache.cacheThreadList(email, cacheParams, result);
55
- }
52
+ if (result instanceof Error)
53
+ return result;
56
54
  return { email, result };
57
55
  }));
58
- const allResults = settled
59
- .filter((r) => {
60
- if (r.status === 'rejected') {
61
- out.error(`Failed to fetch: ${r.reason}`);
56
+ const allResults = results.filter((r) => {
57
+ if (r instanceof AuthError) {
58
+ out.error(`${r.message}. Try: zele login`);
59
+ return false;
60
+ }
61
+ if (r instanceof Error) {
62
+ out.error(`Failed to fetch: ${r.message}`);
62
63
  return false;
63
64
  }
64
65
  return true;
65
- })
66
- .map((r) => r.value);
66
+ });
67
67
  // Merge threads from all accounts, sorted by date descending, capped at max
68
68
  const merged = allResults
69
69
  .flatMap(({ email, result }) => result.threads.map((t) => ({ ...t, account: email })))
@@ -76,6 +76,7 @@ export function registerMailCommands(cli) {
76
76
  const showAccount = clients.length > 1;
77
77
  out.printList(merged.map((t) => ({
78
78
  ...(showAccount ? { account: t.account } : {}),
79
+ id: t.id,
79
80
  flags: out.formatFlags(t),
80
81
  from: out.formatSender(t.from),
81
82
  subject: t.subject,
@@ -88,7 +89,7 @@ export function registerMailCommands(cli) {
88
89
  // mail search
89
90
  // =========================================================================
90
91
  cli
91
- .command('mail search <query>', 'Search email threads')
92
+ .command('mail search <query>', 'Search email threads using Gmail query syntax (from:, to:, subject:, has:attachment, etc). See https://support.google.com/mail/answer/7190')
92
93
  .option('--max [max]', 'Max results (default: 20)')
93
94
  .option('--page <page>', 'Pagination token')
94
95
  .action(async (query, options) => {
@@ -98,24 +99,28 @@ export function registerMailCommands(cli) {
98
99
  out.error('--page cannot be used with multiple accounts (page tokens are per-account)');
99
100
  process.exit(1);
100
101
  }
101
- // Search all accounts concurrently, tolerating individual failures
102
- const settled = await Promise.allSettled(clients.map(async ({ email, client }) => {
102
+ // Search all accounts concurrently
103
+ const results = await Promise.all(clients.map(async ({ email, client }) => {
103
104
  const result = await client.listThreads({
104
105
  query,
105
106
  maxResults: max,
106
107
  pageToken: options.page,
107
108
  });
109
+ if (result instanceof Error)
110
+ return result;
108
111
  return { email, result };
109
112
  }));
110
- const allResults = settled
111
- .filter((r) => {
112
- if (r.status === 'rejected') {
113
- out.error(`Failed to search: ${r.reason}`);
113
+ const allResults = results.filter((r) => {
114
+ if (r instanceof AuthError) {
115
+ out.error(`${r.message}. Try: zele login`);
116
+ return false;
117
+ }
118
+ if (r instanceof Error) {
119
+ out.error(`Failed to search: ${r.message}`);
114
120
  return false;
115
121
  }
116
122
  return true;
117
- })
118
- .map((r) => r.value);
123
+ });
119
124
  const merged = allResults
120
125
  .flatMap(({ email, result }) => result.threads.map((t) => ({ ...t, account: email })))
121
126
  .sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime())
@@ -127,6 +132,7 @@ export function registerMailCommands(cli) {
127
132
  const showAccount = clients.length > 1;
128
133
  out.printList(merged.map((t) => ({
129
134
  ...(showAccount ? { account: t.account } : {}),
135
+ id: t.id,
130
136
  flags: out.formatFlags(t),
131
137
  from: out.formatSender(t.from),
132
138
  subject: t.subject,
@@ -141,56 +147,84 @@ export function registerMailCommands(cli) {
141
147
  cli
142
148
  .command('mail read <threadId>', 'Read a full email thread')
143
149
  .option('--raw', 'Show raw message (first message only)')
144
- .option('--no-cache', 'Skip cache')
150
+ .option('--raw-html', 'Show raw HTML body per message (no markdown conversion)')
145
151
  .action(async (threadId, options) => {
146
- const { email, client } = await getClient(options.account);
152
+ const { client } = await getClient(options.account);
153
+ if (options.raw && options.rawHtml) {
154
+ out.error('--raw and --raw-html cannot be used together');
155
+ process.exit(1);
156
+ }
147
157
  if (options.raw) {
148
- const thread = await client.getThread({ threadId });
158
+ const { parsed: thread } = await client.getThread({ threadId });
149
159
  if (thread.messages.length === 0) {
150
160
  out.hint('No messages in thread');
151
161
  return;
152
162
  }
153
163
  const rawMsg = await client.getRawMessage({ messageId: thread.messages[0].id });
154
- process.stdout.write(rawMsg + '\n');
164
+ if (rawMsg instanceof Error)
165
+ handleCommandError(rawMsg);
166
+ console.log(rawMsg);
155
167
  return;
156
168
  }
157
- // Cache-first read
158
- let thread;
159
- if (!options.noCache) {
160
- thread = await cache.getCachedThread(email, threadId);
161
- }
162
- if (!thread) {
163
- thread = await client.getThread({ threadId });
164
- if (!options.noCache) {
165
- await cache.cacheThread(email, threadId, thread);
166
- }
167
- }
169
+ const { parsed: thread } = await client.getThread({ threadId });
168
170
  if (thread.messages.length === 0) {
169
171
  out.hint('No messages in thread');
170
172
  return;
171
173
  }
174
+ if (options.rawHtml) {
175
+ thread.messages.forEach((msg, index) => {
176
+ console.log(msg.body);
177
+ if (index < thread.messages.length - 1) {
178
+ console.log('\n<!-- ZELE_MESSAGE_SEPARATOR -->\n');
179
+ }
180
+ });
181
+ return;
182
+ }
183
+ const w = Math.min(process.stdout.columns || 72, 72);
184
+ const rule = pc.dim('─'.repeat(w));
172
185
  // Render thread header
173
- process.stdout.write(pc.bold(thread.subject) + '\n');
174
- process.stdout.write(pc.dim(`Thread ID: ${thread.id} | ${thread.messageCount} message(s)`) + '\n');
175
- process.stdout.write(pc.dim('─'.repeat(60)) + '\n\n');
186
+ console.log(pc.bold(thread.subject));
187
+ // Collect unique participants
188
+ const participants = new Map();
189
+ for (const msg of thread.messages) {
190
+ participants.set(msg.from.email, msg.from.name || msg.from.email);
191
+ for (const r of msg.to)
192
+ participants.set(r.email, r.name || r.email);
193
+ }
194
+ const participantStr = [...participants.values()].join(', ');
195
+ console.log(pc.dim(`${thread.messageCount} message(s) · ${participantStr}`));
196
+ console.log(pc.dim(`ID: ${thread.id}`));
197
+ console.log(rule + '\n');
176
198
  // Render each message
177
199
  for (const msg of thread.messages) {
178
- const fromStr = out.formatSenderFull(msg.from);
200
+ const fromStr = out.formatSender(msg.from);
179
201
  const dateStr = out.formatDate(msg.date);
180
- const flags = out.formatFlags(msg);
181
- process.stdout.write(pc.bold(fromStr) + (flags ? ` ${flags}` : '') + '\n');
182
- process.stdout.write(pc.dim(`To: ${msg.to.map((t) => t.email).join(', ')}`) + '\n');
202
+ // Flags as dim tags
203
+ const flagParts = [];
204
+ if (msg.unread)
205
+ flagParts.push(pc.yellow('[unread]'));
206
+ if (msg.starred)
207
+ flagParts.push(pc.yellow('[starred]'));
208
+ const flagStr = flagParts.length > 0 ? ' ' + flagParts.join(' ') : '';
209
+ console.log(pc.bold(`From: `) + fromStr + flagStr);
210
+ console.log(pc.dim(` To: ${msg.to.map((t) => t.email).join(', ')}`));
183
211
  if (msg.cc && msg.cc.length > 0) {
184
- process.stdout.write(pc.dim(`Cc: ${msg.cc.map((c) => c.email).join(', ')}`) + '\n');
212
+ console.log(pc.dim(` Cc: ${msg.cc.map((c) => c.email).join(', ')}`));
185
213
  }
186
- process.stdout.write(pc.dim(`Date: ${dateStr} | ID: ${msg.id}`) + '\n');
214
+ console.log(pc.dim(`Date: ${dateStr}`));
187
215
  if (msg.attachments.length > 0) {
188
- process.stdout.write(pc.dim(`Attachments: ${msg.attachments.map((a) => a.filename).join(', ')}`) + '\n');
216
+ const attList = msg.attachments.map((a) => {
217
+ const size = a.size < 1024 ? `${a.size} B`
218
+ : a.size < 1048576 ? `${(a.size / 1024).toFixed(1)} KB`
219
+ : `${(a.size / 1048576).toFixed(1)} MB`;
220
+ return `${a.filename} (${size})`;
221
+ });
222
+ console.log(pc.dim(`Attachments: ${attList.join(', ')}`));
189
223
  }
190
- process.stdout.write('\n');
224
+ console.log();
191
225
  const body = out.renderEmailBody(msg.body, msg.mimeType);
192
- process.stdout.write(body + '\n');
193
- process.stdout.write('\n' + pc.dim('─'.repeat(60)) + '\n\n');
226
+ console.log(body);
227
+ console.log('\n' + rule + '\n');
194
228
  }
195
229
  });
196
230
  // =========================================================================
@@ -232,7 +266,7 @@ export function registerMailCommands(cli) {
232
266
  process.exit(1);
233
267
  }
234
268
  const parseEmails = (str) => str.split(',').map((e) => e.trim()).filter(Boolean).map((email) => ({ email }));
235
- const { email, client } = await getClient(options.account);
269
+ const { client } = await getClient(options.account);
236
270
  const result = await client.sendMessage({
237
271
  to: parseEmails(options.to),
238
272
  subject: options.subject,
@@ -241,7 +275,6 @@ export function registerMailCommands(cli) {
241
275
  bcc: options.bcc ? parseEmails(options.bcc) : undefined,
242
276
  fromEmail: options.from,
243
277
  });
244
- await cache.invalidateThreadLists(email);
245
278
  out.printYaml(result);
246
279
  out.success(`Sent to ${options.to}`);
247
280
  });
@@ -256,13 +289,6 @@ export function registerMailCommands(cli) {
256
289
  .option('--all', 'Reply all (include all original recipients)')
257
290
  .option('--from <from>', z.string().describe('Send-as alias email'))
258
291
  .action(async (threadId, options) => {
259
- const { email, client } = await getClient(options.account);
260
- const thread = await client.getThread({ threadId });
261
- if (thread.messages.length === 0) {
262
- out.error('No messages in thread');
263
- process.exit(1);
264
- }
265
- const lastMsg = thread.messages[thread.messages.length - 1];
266
292
  let body = options.body ?? '';
267
293
  if (options.bodyFile) {
268
294
  if (options.bodyFile === '-') {
@@ -280,42 +306,19 @@ export function registerMailCommands(cli) {
280
306
  out.error('--body or --body-file is required');
281
307
  process.exit(1);
282
308
  }
283
- const replyTo = lastMsg.replyTo ?? lastMsg.from.email;
284
- const to = [{ email: replyTo }];
285
- let cc;
286
- if (options.all) {
287
- const profile = await client.getProfile();
288
- const myEmail = profile.emailAddress.toLowerCase();
289
- const allRecipients = [
290
- ...lastMsg.to.map((r) => r.email),
291
- ...(lastMsg.cc?.map((r) => r.email) ?? []),
292
- ]
293
- .filter((e) => e.toLowerCase() !== myEmail)
294
- .filter((e) => e.toLowerCase() !== replyTo.toLowerCase());
295
- if (allRecipients.length > 0) {
296
- cc = allRecipients.map((e) => ({ email: e }));
297
- }
298
- }
299
- if (options.cc) {
300
- const extra = options.cc
301
- .split(',')
302
- .map((e) => ({ email: e.trim() }))
303
- .filter((e) => e.email);
304
- cc = [...(cc ?? []), ...extra];
305
- }
306
- const refs = [lastMsg.references, lastMsg.messageId].filter(Boolean).join(' ');
307
- const result = await client.sendMessage({
308
- to,
309
- subject: lastMsg.subject.startsWith('Re:') ? lastMsg.subject : `Re: ${lastMsg.subject}`,
309
+ const { client } = await getClient(options.account);
310
+ const cc = options.cc
311
+ ? options.cc.split(',').map((e) => ({ email: e.trim() })).filter((e) => e.email)
312
+ : undefined;
313
+ const result = await client.replyToThread({
314
+ threadId,
310
315
  body,
316
+ replyAll: options.all,
311
317
  cc,
312
- threadId,
313
- inReplyTo: lastMsg.messageId,
314
- references: refs || undefined,
315
318
  fromEmail: options.from,
316
319
  });
317
- await cache.invalidateThread(email, threadId);
318
- await cache.invalidateThreadLists(email);
320
+ if (result instanceof Error)
321
+ handleCommandError(result);
319
322
  out.printYaml(result);
320
323
  out.success('Reply sent');
321
324
  });
@@ -332,36 +335,19 @@ export function registerMailCommands(cli) {
332
335
  out.error('--to is required');
333
336
  process.exit(1);
334
337
  }
335
- const { email, client } = await getClient(options.account);
336
- const thread = await client.getThread({ threadId });
337
- if (thread.messages.length === 0) {
338
- out.error('No messages in thread');
339
- process.exit(1);
340
- }
341
- const lastMsg = thread.messages[thread.messages.length - 1];
342
- const forwardedBody = out.renderEmailBody(lastMsg.body, lastMsg.mimeType);
343
- const fullBody = [
344
- options.body ?? '',
345
- '',
346
- '---------- Forwarded message ----------',
347
- `From: ${out.formatSenderFull(lastMsg.from)}`,
348
- `Date: ${lastMsg.date}`,
349
- `Subject: ${lastMsg.subject}`,
350
- `To: ${lastMsg.to.map((t) => t.email).join(', ')}`,
351
- '',
352
- forwardedBody,
353
- ].join('\n');
354
338
  const recipients = options.to
355
339
  .split(',')
356
340
  .map((e) => ({ email: e.trim() }))
357
341
  .filter((e) => e.email);
358
- const result = await client.sendMessage({
342
+ const { client } = await getClient(options.account);
343
+ const result = await client.forwardThread({
344
+ threadId,
359
345
  to: recipients,
360
- subject: `Fwd: ${lastMsg.subject}`,
361
- body: fullBody,
346
+ body: options.body,
362
347
  fromEmail: options.from,
363
348
  });
364
- await cache.invalidateThreadLists(email);
349
+ if (result instanceof Error)
350
+ handleCommandError(result);
365
351
  out.printYaml(result);
366
352
  out.success(`Forwarded to ${options.to}`);
367
353
  });
@@ -1 +1 @@
1
- {"version":3,"file":"mail.js","sourceRoot":"","sources":["../../src/commands/mail.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mail.js","sourceRoot":"","sources":["../../src/commands/mail.ts"],"names":[],"mappings":"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"}
@@ -1,40 +1,37 @@
1
1
  // Profile command: show account info.
2
2
  // Displays email address, message/thread counts, and aliases as YAML.
3
+ // Cache is handled by the client — commands just call methods and use data.
3
4
  // Multi-account: shows all accounts or filtered by --account.
4
5
  import { getClients } from '../auth.js';
5
- import * as cache from '../gmail-cache.js';
6
+ import { AuthError } from '../api-utils.js';
6
7
  import * as out from '../output.js';
7
8
  export function registerProfileCommands(cli) {
8
9
  cli
9
10
  .command('profile', 'Show Gmail account info')
10
- .option('--no-cache', 'Skip cache')
11
11
  .action(async (options) => {
12
12
  const clients = await getClients(options.account);
13
- // Fetch all accounts concurrently, tolerating individual failures
14
- const settled = await Promise.allSettled(clients.map(async ({ email, client }) => {
15
- let profile;
16
- if (!options.noCache) {
17
- profile = await cache.getCachedProfile(email);
18
- }
19
- if (!profile) {
20
- profile = await client.getProfile();
21
- if (!options.noCache) {
22
- await cache.cacheProfile(email, profile);
23
- }
24
- }
13
+ // Fetch all accounts concurrently
14
+ const allResults = await Promise.all(clients.map(async ({ client }) => {
15
+ const profile = await client.getProfile();
16
+ if (profile instanceof Error)
17
+ return profile;
25
18
  // Always fetch aliases fresh
26
19
  const aliases = await client.getEmailAliases();
27
- return { email, profile, aliases };
20
+ if (aliases instanceof Error)
21
+ return aliases;
22
+ return { profile, aliases };
28
23
  }));
29
- const results = settled
30
- .filter((r) => {
31
- if (r.status === 'rejected') {
32
- out.error(`Failed to fetch profile: ${r.reason}`);
24
+ const results = allResults.filter((r) => {
25
+ if (r instanceof AuthError) {
26
+ out.error(`${r.message}. Try: zele login`);
27
+ return false;
28
+ }
29
+ if (r instanceof Error) {
30
+ out.error(`Failed to fetch profile: ${r.message}`);
33
31
  return false;
34
32
  }
35
33
  return true;
36
- })
37
- .map((r) => r.value);
34
+ });
38
35
  for (const { profile, aliases } of results) {
39
36
  out.printYaml({
40
37
  email: profile.emailAddress,
@@ -1 +1 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,sEAAsE;AACtE,8DAA8D;AAG9D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAA;AAC1C,OAAO,KAAK,GAAG,MAAM,cAAc,CAAA;AAEnC,MAAM,UAAU,uBAAuB,CAAC,GAAS;IAC/C,GAAG;SACA,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC;SAC7C,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAIjD,kEAAkE;QAClE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;YACtC,IAAI,OAA4B,CAAA;YAChC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrB,OAAO,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAU,KAAK,CAAC,CAAA;YACxD,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAA;gBACnC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACrB,MAAM,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;gBAC1C,CAAC;YACH,CAAC;YAED,6BAA6B;YAC7B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAA;YAE9C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;QACpC,CAAC,CAAC,CACH,CAAA;QAED,MAAM,OAAO,GAAG,OAAO;aACpB,MAAM,CAAC,CAAC,CAAC,EAAkI,EAAE;YAC5I,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC5B,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;gBACjD,OAAO,KAAK,CAAA;YACd,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QAEtB,KAAK,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;YAC3C,GAAG,CAAC,SAAS,CAAC;gBACZ,KAAK,EAAE,OAAO,CAAC,YAAY;gBAC3B,cAAc,EAAE,OAAO,CAAC,aAAa;gBACrC,aAAa,EAAE,OAAO,CAAC,YAAY;gBACnC,UAAU,EAAE,OAAO,CAAC,SAAS;gBAC7B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC3B,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI;oBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;iBACnB,CAAC,CAAC;aACJ,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,sEAAsE;AACtE,4EAA4E;AAC5E,8DAA8D;AAG9D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,GAAG,MAAM,cAAc,CAAA;AAEnC,MAAM,UAAU,uBAAuB,CAAC,GAAS;IAC/C,GAAG;SACA,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC;SAC7C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAEjD,kCAAkC;QAClC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YAC/B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAA;YACzC,IAAI,OAAO,YAAY,KAAK;gBAAE,OAAO,OAAO,CAAA;YAC5C,6BAA6B;YAC7B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAA;YAC9C,IAAI,OAAO,YAAY,KAAK;gBAAE,OAAO,OAAO,CAAA;YAC5C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;QAC7B,CAAC,CAAC,CACH,CAAA;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAiC,EAAE;YACnE,IAAI,CAAC,YAAY,SAAS,EAAE,CAAC;gBAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,mBAAmB,CAAC,CAAC;gBAAC,OAAO,KAAK,CAAA;YAAC,CAAC;YACxF,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;gBAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAAC,OAAO,KAAK,CAAA;YAAC,CAAC;YAC5F,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,CAAA;QAEJ,KAAK,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;YAC3C,GAAG,CAAC,SAAS,CAAC;gBACZ,KAAK,EAAE,OAAO,CAAC,YAAY;gBAC3B,cAAc,EAAE,OAAO,CAAC,aAAa;gBACrC,aAAa,EAAE,OAAO,CAAC,YAAY;gBACnC,UAAU,EAAE,OAAO,CAAC,SAAS;gBAC7B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC3B,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI;oBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;iBACnB,CAAC,CAAC;aACJ,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Goke } from 'goke';
2
+ export declare function registerWatchCommands(cli: Goke): void;
@@ -0,0 +1,73 @@
1
+ // Mail watch command: poll for new emails using Gmail History API.
2
+ // Thin CLI wrapper around GmailClient.watchInbox() async generator.
3
+ // Multi-account: watches all accounts concurrently and merges output.
4
+ import { z } from 'zod';
5
+ import { getClients } from '../auth.js';
6
+ import { AuthError } from '../api-utils.js';
7
+ import * as out from '../output.js';
8
+ // ---------------------------------------------------------------------------
9
+ // Register commands
10
+ // ---------------------------------------------------------------------------
11
+ export function registerWatchCommands(cli) {
12
+ cli
13
+ .command('mail watch', 'Watch for new emails (poll via History API)')
14
+ .option('--interval [interval]', z.string().describe('Poll interval in seconds (default: 15)'))
15
+ .option('--folder [folder]', z.string().describe('Folder to watch (default: inbox)'))
16
+ .option('--query [query]', z.string().describe('Filter messages client-side (from:, to:, cc:, subject:, is:unread, is:starred, has:attachment, -negate). See https://support.google.com/mail/answer/7190'))
17
+ .option('--once', z.boolean().describe('Print changes once and exit (no loop)'))
18
+ .action(async (options) => {
19
+ const interval = options.interval ? Number(options.interval) : 15;
20
+ if (isNaN(interval) || interval < 1) {
21
+ out.error('--interval must be a positive number of seconds');
22
+ process.exit(1);
23
+ }
24
+ const folder = options.folder ?? 'inbox';
25
+ const clients = await getClients(options.account);
26
+ // Clean exit on SIGINT
27
+ process.on('SIGINT', () => {
28
+ out.hint('Stopped watching');
29
+ process.exit(0);
30
+ });
31
+ out.hint(`Polling every ${interval}s for ${folder} changes (Ctrl+C to stop)`);
32
+ // Watch all accounts concurrently, print events as they arrive
33
+ const generators = clients.map(({ client }) => client.watchInbox({
34
+ folder,
35
+ intervalMs: interval * 1000,
36
+ query: options.query,
37
+ once: options.once,
38
+ }));
39
+ // Consume all generators concurrently, surface errors to the user
40
+ const settled = await Promise.allSettled(generators.map(async (gen) => {
41
+ for await (const event of gen) {
42
+ out.printList([formatWatchEvent(event)]);
43
+ }
44
+ }));
45
+ for (const result of settled) {
46
+ if (result.status === 'rejected') {
47
+ const err = result.reason;
48
+ if (err instanceof AuthError) {
49
+ out.error(`${err.message}. Try: zele login`);
50
+ }
51
+ else {
52
+ out.error(`Watch failed: ${err instanceof Error ? err.message : String(err)}`);
53
+ }
54
+ }
55
+ }
56
+ });
57
+ }
58
+ // ---------------------------------------------------------------------------
59
+ // Helpers
60
+ // ---------------------------------------------------------------------------
61
+ function formatWatchEvent(event) {
62
+ return {
63
+ account: event.account.email,
64
+ type: event.type,
65
+ from: out.formatSender(event.message.from),
66
+ subject: event.message.subject,
67
+ date: out.formatDate(event.message.date),
68
+ thread_id: event.threadId,
69
+ message_id: event.message.id,
70
+ flags: out.formatFlags(event.message),
71
+ };
72
+ }
73
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}