zele 0.3.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.
- 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 +26 -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 +112 -126
- 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 +30 -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 +102 -147
- 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/output.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// Output formatting utilities for zele CLI.
|
|
2
2
|
// Handles YAML output with TTY-aware coloring, date formatting,
|
|
3
3
|
// HTML-to-markdown email conversion (turndown), and stderr hints.
|
|
4
|
-
//
|
|
4
|
+
// Data goes to stdout (console.log), hints/progress/errors to stderr (console.error).
|
|
5
|
+
// Prefer console.log/console.error over raw process.stdout/stderr when possible.
|
|
5
6
|
//
|
|
6
7
|
// All structured data is output as YAML (js-yaml). In TTY mode, keys are
|
|
7
8
|
// colored cyan and values are left at the terminal default. In non-TTY mode,
|
|
@@ -9,7 +10,9 @@
|
|
|
9
10
|
// Line wrapping is set to Infinity (no folding) everywhere.
|
|
10
11
|
import yaml from 'js-yaml';
|
|
11
12
|
import TurndownService from 'turndown';
|
|
13
|
+
import { remark } from 'remark';
|
|
12
14
|
import pc from 'picocolors';
|
|
15
|
+
import EmailReplyParser from 'email-reply-parser';
|
|
13
16
|
// ---------------------------------------------------------------------------
|
|
14
17
|
// TTY detection (used for coloring + wrapping decisions)
|
|
15
18
|
// ---------------------------------------------------------------------------
|
|
@@ -38,7 +41,7 @@ turndown.addRule('tracking-pixels', {
|
|
|
38
41
|
},
|
|
39
42
|
replacement: () => '',
|
|
40
43
|
});
|
|
41
|
-
// Strip <style
|
|
44
|
+
// Strip <style>, <head>, <script> tags
|
|
42
45
|
turndown.addRule('strip-style', {
|
|
43
46
|
filter: ['style', 'head', 'script'],
|
|
44
47
|
replacement: () => '',
|
|
@@ -52,27 +55,121 @@ turndown.addRule('images', {
|
|
|
52
55
|
},
|
|
53
56
|
});
|
|
54
57
|
// ---------------------------------------------------------------------------
|
|
58
|
+
// Email-specific turndown rules
|
|
59
|
+
// Email HTML heavily relies on layout tables. These are not data tables —
|
|
60
|
+
// they're used for positioning (like a 600px centered wrapper). We unwrap
|
|
61
|
+
// them so only the cell content survives as markdown.
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Strip common quoted-reply wrappers from Gmail/Outlook.
|
|
64
|
+
turndown.addRule('quoted-replies', {
|
|
65
|
+
filter: (node) => {
|
|
66
|
+
const hasClass = (name) => {
|
|
67
|
+
const cls = node.getAttribute('class') ?? '';
|
|
68
|
+
return new RegExp(`(^|\\s)${name}(\\s|$)`).test(cls);
|
|
69
|
+
};
|
|
70
|
+
if (node.nodeName === 'DIV') {
|
|
71
|
+
if (hasClass('gmail_quote') || hasClass('gmail_extra'))
|
|
72
|
+
return true;
|
|
73
|
+
const id = node.getAttribute('id') ?? '';
|
|
74
|
+
if (id === 'appendonsend' || id === 'divRplyFwdMsg')
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
if (node.nodeName === 'BLOCKQUOTE') {
|
|
78
|
+
const type = node.getAttribute('type') ?? '';
|
|
79
|
+
if (type === 'cite')
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
return false;
|
|
83
|
+
},
|
|
84
|
+
replacement: () => '',
|
|
85
|
+
});
|
|
86
|
+
// Unwrap layout tables: tables used for email layout (width, align, role="presentation")
|
|
87
|
+
// just pass through their text content instead of rendering as markdown tables.
|
|
88
|
+
turndown.addRule('layout-tables', {
|
|
89
|
+
filter: (node) => {
|
|
90
|
+
if (node.nodeName !== 'TABLE')
|
|
91
|
+
return false;
|
|
92
|
+
const role = (node.getAttribute('role') ?? '').toLowerCase();
|
|
93
|
+
if (role === 'presentation')
|
|
94
|
+
return true;
|
|
95
|
+
// Heuristic: tables with explicit width or align are almost always layout
|
|
96
|
+
const width = node.getAttribute('width') ?? '';
|
|
97
|
+
const align = node.getAttribute('align') ?? '';
|
|
98
|
+
if (width || align)
|
|
99
|
+
return true;
|
|
100
|
+
// Tables with cellpadding/cellspacing/border="0" are layout tables
|
|
101
|
+
const border = (node.getAttribute('border') ?? '').trim();
|
|
102
|
+
const cellpadding = node.getAttribute('cellpadding') ?? '';
|
|
103
|
+
const cellspacing = node.getAttribute('cellspacing') ?? '';
|
|
104
|
+
if (border === '0' || cellpadding || cellspacing)
|
|
105
|
+
return true;
|
|
106
|
+
return false;
|
|
107
|
+
},
|
|
108
|
+
replacement: (content) => {
|
|
109
|
+
// _content already has the inner text converted by turndown
|
|
110
|
+
return content;
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
// Strip hidden/preheader elements.
|
|
114
|
+
turndown.addRule('hidden-elements', {
|
|
115
|
+
filter: (node) => {
|
|
116
|
+
const style = node.getAttribute('style') ?? '';
|
|
117
|
+
if (/display\s*:\s*none/i.test(style))
|
|
118
|
+
return true;
|
|
119
|
+
if (/mso-hide\s*:\s*all/i.test(style))
|
|
120
|
+
return true;
|
|
121
|
+
if (node.hasAttribute('hidden'))
|
|
122
|
+
return true;
|
|
123
|
+
const cls = node.getAttribute('class') ?? '';
|
|
124
|
+
if (/(^|\s)preheader(\s|$)/.test(cls))
|
|
125
|
+
return true;
|
|
126
|
+
if (/(^|\s)preview-text(\s|$)/.test(cls))
|
|
127
|
+
return true;
|
|
128
|
+
return false;
|
|
129
|
+
},
|
|
130
|
+
replacement: () => '',
|
|
131
|
+
});
|
|
132
|
+
// ---------------------------------------------------------------------------
|
|
55
133
|
// HTML -> Markdown conversion
|
|
56
134
|
// ---------------------------------------------------------------------------
|
|
57
135
|
export function htmlToMarkdown(html) {
|
|
58
136
|
// Pre-clean: remove common email noise
|
|
59
137
|
const cleaned = html
|
|
60
138
|
.replace(/<!\-\-[\s\S]*?\-\->/g, '') // HTML comments
|
|
61
|
-
.replace(/<o:p>[\s\S]*?<\/o:p>/gi, '')
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
139
|
+
.replace(/<o:p>[\s\S]*?<\/o:p>/gi, '') // Outlook tags
|
|
140
|
+
.replace(/<!\[if[\s\S]*?<!\[endif\]>/gi, ''); // Outlook conditional comments
|
|
141
|
+
let md = turndown.turndown(cleaned);
|
|
142
|
+
// Replace non-breaking/zero-width spaces before remark sees them
|
|
143
|
+
md = md.replace(/[\u00A0\u200B\u200C\u200D\uFEFF]/g, ' ');
|
|
144
|
+
// Parse and re-serialize through remark for stable, normalized markdown.
|
|
145
|
+
// This collapses whitespace, fixes list indentation, and validates structure.
|
|
146
|
+
const normalized = remark().processSync(md).toString();
|
|
147
|
+
// Remark escapes certain characters for markdown safety. Undo escapes that
|
|
148
|
+
// hurt readability in terminal output:
|
|
149
|
+
// - brackets: only for our synthetic [image: ...] placeholders
|
|
150
|
+
// - ampersands: only inside link destination parens (URL readability)
|
|
151
|
+
return normalized
|
|
152
|
+
.replace(/\\\[image:/g, '[image:')
|
|
153
|
+
.replace(/\(([^\n)]*)\)/g, (whole, inner) => {
|
|
154
|
+
if (!/(https?:\/\/|mailto:)/i.test(inner))
|
|
155
|
+
return whole;
|
|
156
|
+
return `(${inner.replace(/\\&/g, '&')})`;
|
|
157
|
+
})
|
|
158
|
+
.trim();
|
|
65
159
|
}
|
|
66
160
|
// ---------------------------------------------------------------------------
|
|
67
161
|
// Email body rendering (auto-detect HTML vs plain text)
|
|
68
162
|
// ---------------------------------------------------------------------------
|
|
69
163
|
export function renderEmailBody(body, mimeType) {
|
|
70
|
-
if (mimeType === 'text/html')
|
|
164
|
+
if (mimeType === 'text/html')
|
|
71
165
|
return htmlToMarkdown(body);
|
|
72
|
-
}
|
|
73
166
|
return body.trim();
|
|
74
167
|
}
|
|
75
168
|
// ---------------------------------------------------------------------------
|
|
169
|
+
// Quoted reply stripping (email-reply-parser)
|
|
170
|
+
// ---------------------------------------------------------------------------
|
|
171
|
+
export const replyParser = new EmailReplyParser();
|
|
172
|
+
// ---------------------------------------------------------------------------
|
|
76
173
|
// YAML output
|
|
77
174
|
// ---------------------------------------------------------------------------
|
|
78
175
|
/**
|
|
@@ -202,12 +299,28 @@ export function formatFlags(item) {
|
|
|
202
299
|
// Stderr hints (following gogcli pattern: data to stdout, hints to stderr)
|
|
203
300
|
// ---------------------------------------------------------------------------
|
|
204
301
|
export function hint(msg) {
|
|
205
|
-
|
|
302
|
+
console.error(pc.dim(`# ${msg}`));
|
|
206
303
|
}
|
|
207
304
|
export function success(msg) {
|
|
208
|
-
|
|
305
|
+
console.error(pc.green(msg));
|
|
209
306
|
}
|
|
210
307
|
export function error(msg) {
|
|
211
|
-
|
|
308
|
+
console.error(pc.red(msg));
|
|
309
|
+
}
|
|
310
|
+
// ---------------------------------------------------------------------------
|
|
311
|
+
// Centralized command error handler (errore pattern)
|
|
312
|
+
// ---------------------------------------------------------------------------
|
|
313
|
+
import { AuthError } from './api-utils.js';
|
|
314
|
+
/** Handle any error from a client method in a command context.
|
|
315
|
+
* Prints a user-friendly message to stderr and exits.
|
|
316
|
+
* AuthError gets a "Try: zele login" hint; all others print their message. */
|
|
317
|
+
export function handleCommandError(err) {
|
|
318
|
+
if (err instanceof AuthError) {
|
|
319
|
+
error(`${err.message}. Try: zele login`);
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
error(err.message);
|
|
323
|
+
}
|
|
324
|
+
process.exit(1);
|
|
212
325
|
}
|
|
213
326
|
//# sourceMappingURL=output.js.map
|
package/dist/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zele",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.5",
|
|
4
4
|
"description": "Gmail CLI — manage email from your terminal",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/cli.js",
|
|
7
|
-
"bin": "./
|
|
7
|
+
"bin": "./bin/zele",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "rm -rf dist && tsc",
|
|
10
|
+
"prepublishOnly": "bun run build",
|
|
11
|
+
"dev": "tsx src/cli.ts",
|
|
12
|
+
"generate": "prisma generate && bun run generate:sql",
|
|
13
|
+
"generate:sql": "rm -f dev.db && prisma db push --url 'file:dev.db' --accept-data-loss && echo '-- Generated by bun run generate:sql. Do not edit.' > src/schema.sql && sqlite3 dev.db '.schema' >> src/schema.sql",
|
|
14
|
+
"test": "vitest"
|
|
15
|
+
},
|
|
8
16
|
"keywords": [
|
|
9
17
|
"gmail",
|
|
10
18
|
"cli",
|
|
@@ -12,37 +20,57 @@
|
|
|
12
20
|
],
|
|
13
21
|
"author": "remorses",
|
|
14
22
|
"license": "ISC",
|
|
23
|
+
"packageManager": "bun@1.3.9",
|
|
15
24
|
"dependencies": {
|
|
16
25
|
"@googleapis/gmail": "^16.1.1",
|
|
17
26
|
"@libsql/client": "^0.15.15",
|
|
18
27
|
"@prisma/adapter-libsql": "^7.3.0",
|
|
19
28
|
"@prisma/client": "^7.3.0",
|
|
29
|
+
"@termcast/utils": "^2.2.6",
|
|
20
30
|
"email-addresses": "^5.0.0",
|
|
31
|
+
"email-reply-parser": "^2.3.5",
|
|
32
|
+
"errore": "^0.11.0",
|
|
21
33
|
"fkill": "^10.0.3",
|
|
22
34
|
"goke": "^6.1.3",
|
|
23
35
|
"google-auth-library": "^10.5.0",
|
|
24
36
|
"js-yaml": "^4.1.1",
|
|
25
37
|
"mimetext": "^3.0.28",
|
|
26
38
|
"picocolors": "^1.1.1",
|
|
39
|
+
"react": "^19.2.4",
|
|
40
|
+
"remark": "^15.0.1",
|
|
41
|
+
"termcast": "^1.3.38",
|
|
27
42
|
"ts-ics": "^2.4.0",
|
|
28
43
|
"tsdav": "^2.1.7",
|
|
29
44
|
"turndown": "^7.2.0",
|
|
30
45
|
"zod": "^4.3.6"
|
|
31
46
|
},
|
|
47
|
+
"commands": [
|
|
48
|
+
{
|
|
49
|
+
"name": "mail-tui",
|
|
50
|
+
"title": "Mail",
|
|
51
|
+
"description": "Browse and read emails",
|
|
52
|
+
"mode": "view"
|
|
53
|
+
}
|
|
54
|
+
],
|
|
32
55
|
"devDependencies": {
|
|
33
56
|
"@types/email-addresses": "^3.0.0",
|
|
34
57
|
"@types/js-yaml": "^4.0.9",
|
|
35
58
|
"@types/node": "^25.2.0",
|
|
59
|
+
"@types/react": "^19.1.2",
|
|
36
60
|
"@types/turndown": "^5.0.5",
|
|
37
61
|
"prisma": "^7.3.0",
|
|
38
62
|
"tsx": "^4.19.4",
|
|
39
|
-
"typescript": "^5.9.3"
|
|
63
|
+
"typescript": "^5.9.3",
|
|
64
|
+
"vitest": "^4.0.18"
|
|
40
65
|
},
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
|
|
66
|
+
"trustedDependencies": [
|
|
67
|
+
"@prisma/engines",
|
|
68
|
+
"prisma"
|
|
69
|
+
],
|
|
70
|
+
"files": [
|
|
71
|
+
"dist",
|
|
72
|
+
"bin",
|
|
73
|
+
"src",
|
|
74
|
+
"schema.prisma"
|
|
75
|
+
]
|
|
76
|
+
}
|
package/schema.prisma
CHANGED
|
@@ -7,152 +7,120 @@ datasource db {
|
|
|
7
7
|
provider = "sqlite"
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
// Lifecycle status for account credentials stored in `
|
|
10
|
+
// Lifecycle status for account credentials stored in `Account`.
|
|
11
11
|
enum AccountStatus {
|
|
12
12
|
active
|
|
13
13
|
disabled
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
// Stores one OAuth credential set per
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
// Caches thread list/search responses per account and query parameters.
|
|
36
|
-
// Used for fast list/search rendering and reduced Gmail API calls.
|
|
37
|
-
model thread_lists {
|
|
38
|
-
id Int @id @default(autoincrement())
|
|
39
|
-
email String
|
|
40
|
-
folder String @default("")
|
|
41
|
-
query String @default("")
|
|
42
|
-
label_ids String @default("")
|
|
43
|
-
page_token String @default("")
|
|
44
|
-
max_results Int @default(0)
|
|
45
|
-
data String // JSON blob of ThreadListResult
|
|
46
|
-
ttl_ms Int
|
|
47
|
-
created_at DateTime @default(now())
|
|
48
|
-
|
|
49
|
-
account accounts @relation(fields: [email], references: [email], onDelete: Cascade)
|
|
50
|
-
|
|
51
|
-
@@unique([email, folder, query, label_ids, page_token, max_results])
|
|
16
|
+
// Stores one OAuth credential set per (email, appId) pair.
|
|
17
|
+
// appId is the Google OAuth client ID used during login, enabling
|
|
18
|
+
// multiple OAuth apps per email (different quotas, scopes, etc.).
|
|
19
|
+
// Default is the Thunderbird client ID (the original/only client).
|
|
20
|
+
model Account {
|
|
21
|
+
email String
|
|
22
|
+
appId String
|
|
23
|
+
accountStatus AccountStatus
|
|
24
|
+
tokens String // JSON-encoded OAuth2 Credentials
|
|
25
|
+
createdAt DateTime
|
|
26
|
+
updatedAt DateTime @updatedAt
|
|
27
|
+
|
|
28
|
+
threads Thread[]
|
|
29
|
+
labels Label?
|
|
30
|
+
profiles Profile?
|
|
31
|
+
syncStates SyncState[]
|
|
32
|
+
calendarLists CalendarList?
|
|
33
|
+
|
|
34
|
+
@@id([email, appId])
|
|
52
35
|
}
|
|
53
36
|
|
|
54
37
|
// Caches hydrated thread payloads per account + thread ID.
|
|
55
38
|
// Used by mail read and post-mutation cache invalidation.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
39
|
+
// rawData stores the raw Google gmail_v1.Schema$Thread response (format: full)
|
|
40
|
+
// so the cache is resilient to changes in our own ThreadData type.
|
|
41
|
+
// Indexed columns are extracted for queryability and display.
|
|
42
|
+
model Thread {
|
|
43
|
+
id Int @id @default(autoincrement())
|
|
44
|
+
email String
|
|
45
|
+
appId String
|
|
46
|
+
threadId String
|
|
47
|
+
subject String // extracted for display/search
|
|
48
|
+
snippet String // extracted for display
|
|
49
|
+
fromEmail String // extracted for filtering
|
|
50
|
+
fromName String // extracted for display
|
|
51
|
+
date String // extracted for sorting (RFC2822 from header)
|
|
52
|
+
labelIds String // comma-separated, extracted for filtering
|
|
53
|
+
hasUnread Boolean // extracted for filtering
|
|
54
|
+
msgCount Int // extracted for display
|
|
55
|
+
historyId String? // for sync
|
|
56
|
+
rawData String // raw Google API response JSON (gmail_v1.Schema$Thread)
|
|
57
|
+
ttlMs Int
|
|
58
|
+
createdAt DateTime
|
|
59
|
+
|
|
60
|
+
account Account @relation(fields: [email, appId], references: [email, appId], onDelete: Cascade)
|
|
61
|
+
|
|
62
|
+
@@unique([email, appId, threadId])
|
|
67
63
|
}
|
|
68
64
|
|
|
69
65
|
// Caches label metadata per account (label id/name/type payload).
|
|
70
66
|
// Used by label list/get and related command outputs.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
67
|
+
// rawData stores the raw Google gmail_v1.Schema$Label[] response.
|
|
68
|
+
model Label {
|
|
69
|
+
email String
|
|
70
|
+
appId String
|
|
71
|
+
rawData String // raw Google API response JSON (gmail_v1.Schema$Label[])
|
|
72
|
+
ttlMs Int
|
|
73
|
+
createdAt DateTime
|
|
79
74
|
|
|
80
|
-
|
|
81
|
-
// Used by label counts to avoid recomputing on every invocation.
|
|
82
|
-
model label_counts {
|
|
83
|
-
email String @id
|
|
84
|
-
data String // JSON blob of label counts
|
|
85
|
-
ttl_ms Int
|
|
86
|
-
created_at DateTime @default(now())
|
|
75
|
+
account Account @relation(fields: [email, appId], references: [email, appId], onDelete: Cascade)
|
|
87
76
|
|
|
88
|
-
|
|
77
|
+
@@id([email, appId])
|
|
89
78
|
}
|
|
90
79
|
|
|
91
80
|
// Caches Gmail profile payload per account (totals/history id).
|
|
92
81
|
// Used by profile command and account metadata lookups.
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
82
|
+
// Fully flattened — no JSON blob needed, only 4 fields from Google.
|
|
83
|
+
model Profile {
|
|
84
|
+
email String
|
|
85
|
+
appId String
|
|
86
|
+
emailAddress String // from Gmail API
|
|
87
|
+
messagesTotal Int // from Gmail API
|
|
88
|
+
threadsTotal Int // from Gmail API
|
|
89
|
+
historyId String // from Gmail API
|
|
90
|
+
ttlMs Int
|
|
91
|
+
createdAt DateTime
|
|
92
|
+
|
|
93
|
+
account Account @relation(fields: [email, appId], references: [email, appId], onDelete: Cascade)
|
|
94
|
+
|
|
95
|
+
@@id([email, appId])
|
|
100
96
|
}
|
|
101
97
|
|
|
102
98
|
// Caches calendar list per account.
|
|
103
99
|
// Used by cal list to avoid fetching calendar metadata on every invocation.
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
100
|
+
// rawData stores parsed CalendarListItem[] JSON (not raw tsdav — parsed at write time).
|
|
101
|
+
model CalendarList {
|
|
102
|
+
email String
|
|
103
|
+
appId String
|
|
104
|
+
rawData String // JSON blob of CalendarListItem[]
|
|
105
|
+
ttlMs Int
|
|
106
|
+
createdAt DateTime
|
|
109
107
|
|
|
110
|
-
account
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// Caches calendar event list responses per account and query parameters.
|
|
114
|
-
// Used for fast cal events rendering and reduced Calendar API calls.
|
|
115
|
-
model calendar_events {
|
|
116
|
-
id Int @id @default(autoincrement())
|
|
117
|
-
email String
|
|
118
|
-
calendar_id String @default("")
|
|
119
|
-
time_min String @default("")
|
|
120
|
-
time_max String @default("")
|
|
121
|
-
query String @default("")
|
|
122
|
-
max_results Int @default(0)
|
|
123
|
-
page_token String @default("")
|
|
124
|
-
data String // JSON blob of EventListResult
|
|
125
|
-
ttl_ms Int
|
|
126
|
-
created_at DateTime @default(now())
|
|
127
|
-
|
|
128
|
-
account accounts @relation(fields: [email], references: [email], onDelete: Cascade)
|
|
129
|
-
|
|
130
|
-
@@unique([email, calendar_id, time_min, time_max, query, max_results, page_token])
|
|
131
|
-
}
|
|
108
|
+
account Account @relation(fields: [email, appId], references: [email, appId], onDelete: Cascade)
|
|
132
109
|
|
|
133
|
-
|
|
134
|
-
// Add new values here as sync metadata needs evolve.
|
|
135
|
-
enum SyncStateKey {
|
|
136
|
-
history_id
|
|
110
|
+
@@id([email, appId])
|
|
137
111
|
}
|
|
138
112
|
|
|
139
113
|
// Stores persistent per-account sync metadata as generic key/value pairs.
|
|
140
114
|
// Use this for lightweight sync cursors and markers that are not cached API
|
|
141
115
|
// payloads, for example `history_id` (incremental Gmail history cursor),
|
|
142
116
|
// `last_full_sync_at`, or other small account-scoped checkpoints.
|
|
143
|
-
|
|
144
|
-
// Why generic instead of typed columns/tables:
|
|
145
|
-
// - keeps schema stable while sync features evolve
|
|
146
|
-
// - enables simple upsert by (email, key)
|
|
147
|
-
//
|
|
148
|
-
// If many core sync fields become permanent, consider promoting them to a
|
|
149
|
-
// typed table for stronger validation and query ergonomics.
|
|
150
|
-
model sync_states {
|
|
117
|
+
model SyncState {
|
|
151
118
|
email String
|
|
152
|
-
|
|
119
|
+
appId String
|
|
120
|
+
key String
|
|
153
121
|
value String
|
|
154
122
|
|
|
155
|
-
account
|
|
123
|
+
account Account @relation(fields: [email, appId], references: [email, appId], onDelete: Cascade)
|
|
156
124
|
|
|
157
|
-
@@id([email, key])
|
|
125
|
+
@@id([email, appId, key])
|
|
158
126
|
}
|