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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"threads.js","sourceRoot":"","sources":["../../../src/generated/models/threads.ts"],"names":[],"mappings":""}
|
package/dist/gmail-cache.d.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
export declare const TTL: {
|
|
2
|
-
readonly THREAD_LIST: number;
|
|
3
|
-
readonly THREAD: number;
|
|
4
|
-
readonly LABELS: number;
|
|
5
|
-
readonly PROFILE: number;
|
|
6
|
-
readonly LABEL_COUNTS: number;
|
|
7
|
-
readonly CALENDAR_LIST: number;
|
|
8
|
-
readonly CALENDAR_EVENTS: number;
|
|
9
|
-
};
|
|
10
|
-
export declare function cacheThreadList(email: string, params: {
|
|
11
|
-
folder?: string;
|
|
12
|
-
query?: string;
|
|
13
|
-
maxResults?: number;
|
|
14
|
-
labelIds?: string[];
|
|
15
|
-
pageToken?: string;
|
|
16
|
-
}, data: unknown): Promise<void>;
|
|
17
|
-
export declare function getCachedThreadList<T = unknown>(email: string, params: {
|
|
18
|
-
folder?: string;
|
|
19
|
-
query?: string;
|
|
20
|
-
maxResults?: number;
|
|
21
|
-
labelIds?: string[];
|
|
22
|
-
pageToken?: string;
|
|
23
|
-
}): Promise<T | undefined>;
|
|
24
|
-
export declare function invalidateThreadLists(email: string): Promise<void>;
|
|
25
|
-
export declare function cacheThread(email: string, threadId: string, data: unknown): Promise<void>;
|
|
26
|
-
export declare function getCachedThread<T = unknown>(email: string, threadId: string): Promise<T | undefined>;
|
|
27
|
-
export declare function invalidateThread(email: string, threadId: string): Promise<void>;
|
|
28
|
-
export declare function invalidateThreads(email: string, threadIds: string[]): Promise<void>;
|
|
29
|
-
export declare function cacheLabels(email: string, data: unknown): Promise<void>;
|
|
30
|
-
export declare function getCachedLabels<T = unknown>(email: string): Promise<T | undefined>;
|
|
31
|
-
export declare function invalidateLabels(email: string): Promise<void>;
|
|
32
|
-
export declare function cacheLabelCounts(email: string, data: unknown): Promise<void>;
|
|
33
|
-
export declare function getCachedLabelCounts<T = unknown>(email: string): Promise<T | undefined>;
|
|
34
|
-
export declare function invalidateLabelCounts(email: string): Promise<void>;
|
|
35
|
-
export declare function cacheProfile(email: string, data: unknown): Promise<void>;
|
|
36
|
-
export declare function getCachedProfile<T = unknown>(email: string): Promise<T | undefined>;
|
|
37
|
-
export declare function getLastHistoryId(email: string): Promise<string | undefined>;
|
|
38
|
-
export declare function setLastHistoryId(email: string, historyId: string): Promise<void>;
|
|
39
|
-
export declare function cacheCalendarList(email: string, data: unknown): Promise<void>;
|
|
40
|
-
export declare function getCachedCalendarList<T = unknown>(email: string): Promise<T | undefined>;
|
|
41
|
-
export declare function invalidateCalendarLists(email: string): Promise<void>;
|
|
42
|
-
export declare function cacheCalendarEvents(email: string, params: {
|
|
43
|
-
calendarId?: string;
|
|
44
|
-
timeMin?: string;
|
|
45
|
-
timeMax?: string;
|
|
46
|
-
query?: string;
|
|
47
|
-
maxResults?: number;
|
|
48
|
-
pageToken?: string;
|
|
49
|
-
}, data: unknown): Promise<void>;
|
|
50
|
-
export declare function getCachedCalendarEvents<T = unknown>(email: string, params: {
|
|
51
|
-
calendarId?: string;
|
|
52
|
-
timeMin?: string;
|
|
53
|
-
timeMax?: string;
|
|
54
|
-
query?: string;
|
|
55
|
-
maxResults?: number;
|
|
56
|
-
pageToken?: string;
|
|
57
|
-
}): Promise<T | undefined>;
|
|
58
|
-
export declare function invalidateCalendarEvents(email: string, calendarId?: string): Promise<void>;
|
|
59
|
-
export declare function clearExpired(): Promise<void>;
|
|
60
|
-
export declare function clearAll(email: string): Promise<void>;
|
package/dist/gmail-cache.js
DELETED
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
// Prisma-based cache for Gmail API responses.
|
|
2
|
-
// Each cache entry is scoped to an account email. TTL-based expiry is checked
|
|
3
|
-
// at read time. All methods are async (Prisma is async).
|
|
4
|
-
// Single SQLite DB shared across all accounts via the Prisma singleton.
|
|
5
|
-
import { getPrisma } from './db.js';
|
|
6
|
-
// TTL constants in milliseconds
|
|
7
|
-
export const TTL = {
|
|
8
|
-
THREAD_LIST: 5 * 60 * 1000, // 5 minutes
|
|
9
|
-
THREAD: 30 * 60 * 1000, // 30 minutes
|
|
10
|
-
LABELS: 30 * 60 * 1000, // 30 minutes
|
|
11
|
-
PROFILE: 24 * 60 * 60 * 1000, // 24 hours
|
|
12
|
-
LABEL_COUNTS: 2 * 60 * 1000, // 2 minutes
|
|
13
|
-
CALENDAR_LIST: 30 * 60 * 1000, // 30 minutes
|
|
14
|
-
CALENDAR_EVENTS: 5 * 60 * 1000, // 5 minutes
|
|
15
|
-
};
|
|
16
|
-
function isExpired(createdAt, ttlMs) {
|
|
17
|
-
return createdAt.getTime() + ttlMs < Date.now();
|
|
18
|
-
}
|
|
19
|
-
// ---------------------------------------------------------------------------
|
|
20
|
-
// Thread list cache
|
|
21
|
-
// ---------------------------------------------------------------------------
|
|
22
|
-
export async function cacheThreadList(email, params, data) {
|
|
23
|
-
const prisma = await getPrisma();
|
|
24
|
-
const where = {
|
|
25
|
-
email,
|
|
26
|
-
folder: params.folder ?? '',
|
|
27
|
-
query: params.query ?? '',
|
|
28
|
-
label_ids: params.labelIds?.join(',') ?? '',
|
|
29
|
-
page_token: params.pageToken ?? '',
|
|
30
|
-
max_results: params.maxResults ?? 0,
|
|
31
|
-
};
|
|
32
|
-
await prisma.thread_lists.upsert({
|
|
33
|
-
where: { email_folder_query_label_ids_page_token_max_results: where },
|
|
34
|
-
create: { ...where, data: JSON.stringify(data), ttl_ms: TTL.THREAD_LIST },
|
|
35
|
-
update: { data: JSON.stringify(data), ttl_ms: TTL.THREAD_LIST, created_at: new Date() },
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
export async function getCachedThreadList(email, params) {
|
|
39
|
-
const prisma = await getPrisma();
|
|
40
|
-
const row = await prisma.thread_lists.findUnique({
|
|
41
|
-
where: {
|
|
42
|
-
email_folder_query_label_ids_page_token_max_results: {
|
|
43
|
-
email,
|
|
44
|
-
folder: params.folder ?? '',
|
|
45
|
-
query: params.query ?? '',
|
|
46
|
-
label_ids: params.labelIds?.join(',') ?? '',
|
|
47
|
-
page_token: params.pageToken ?? '',
|
|
48
|
-
max_results: params.maxResults ?? 0,
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
});
|
|
52
|
-
if (!row || isExpired(row.created_at, row.ttl_ms))
|
|
53
|
-
return undefined;
|
|
54
|
-
return JSON.parse(row.data);
|
|
55
|
-
}
|
|
56
|
-
export async function invalidateThreadLists(email) {
|
|
57
|
-
const prisma = await getPrisma();
|
|
58
|
-
await prisma.thread_lists.deleteMany({ where: { email } });
|
|
59
|
-
}
|
|
60
|
-
// ---------------------------------------------------------------------------
|
|
61
|
-
// Individual thread cache
|
|
62
|
-
// ---------------------------------------------------------------------------
|
|
63
|
-
export async function cacheThread(email, threadId, data) {
|
|
64
|
-
const prisma = await getPrisma();
|
|
65
|
-
await prisma.threads.upsert({
|
|
66
|
-
where: { email_thread_id: { email, thread_id: threadId } },
|
|
67
|
-
create: { email, thread_id: threadId, data: JSON.stringify(data), ttl_ms: TTL.THREAD },
|
|
68
|
-
update: { data: JSON.stringify(data), ttl_ms: TTL.THREAD, created_at: new Date() },
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
export async function getCachedThread(email, threadId) {
|
|
72
|
-
const prisma = await getPrisma();
|
|
73
|
-
const row = await prisma.threads.findUnique({
|
|
74
|
-
where: { email_thread_id: { email, thread_id: threadId } },
|
|
75
|
-
});
|
|
76
|
-
if (!row || isExpired(row.created_at, row.ttl_ms))
|
|
77
|
-
return undefined;
|
|
78
|
-
return JSON.parse(row.data);
|
|
79
|
-
}
|
|
80
|
-
export async function invalidateThread(email, threadId) {
|
|
81
|
-
const prisma = await getPrisma();
|
|
82
|
-
await prisma.threads.deleteMany({ where: { email, thread_id: threadId } });
|
|
83
|
-
}
|
|
84
|
-
export async function invalidateThreads(email, threadIds) {
|
|
85
|
-
const prisma = await getPrisma();
|
|
86
|
-
await prisma.threads.deleteMany({ where: { email, thread_id: { in: threadIds } } });
|
|
87
|
-
}
|
|
88
|
-
// ---------------------------------------------------------------------------
|
|
89
|
-
// Labels cache
|
|
90
|
-
// ---------------------------------------------------------------------------
|
|
91
|
-
export async function cacheLabels(email, data) {
|
|
92
|
-
const prisma = await getPrisma();
|
|
93
|
-
await prisma.labels.upsert({
|
|
94
|
-
where: { email },
|
|
95
|
-
create: { email, data: JSON.stringify(data), ttl_ms: TTL.LABELS },
|
|
96
|
-
update: { data: JSON.stringify(data), ttl_ms: TTL.LABELS, created_at: new Date() },
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
export async function getCachedLabels(email) {
|
|
100
|
-
const prisma = await getPrisma();
|
|
101
|
-
const row = await prisma.labels.findUnique({ where: { email } });
|
|
102
|
-
if (!row || isExpired(row.created_at, row.ttl_ms))
|
|
103
|
-
return undefined;
|
|
104
|
-
return JSON.parse(row.data);
|
|
105
|
-
}
|
|
106
|
-
export async function invalidateLabels(email) {
|
|
107
|
-
const prisma = await getPrisma();
|
|
108
|
-
await prisma.labels.deleteMany({ where: { email } });
|
|
109
|
-
}
|
|
110
|
-
// ---------------------------------------------------------------------------
|
|
111
|
-
// Label counts cache
|
|
112
|
-
// ---------------------------------------------------------------------------
|
|
113
|
-
export async function cacheLabelCounts(email, data) {
|
|
114
|
-
const prisma = await getPrisma();
|
|
115
|
-
await prisma.label_counts.upsert({
|
|
116
|
-
where: { email },
|
|
117
|
-
create: { email, data: JSON.stringify(data), ttl_ms: TTL.LABEL_COUNTS },
|
|
118
|
-
update: { data: JSON.stringify(data), ttl_ms: TTL.LABEL_COUNTS, created_at: new Date() },
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
export async function getCachedLabelCounts(email) {
|
|
122
|
-
const prisma = await getPrisma();
|
|
123
|
-
const row = await prisma.label_counts.findUnique({ where: { email } });
|
|
124
|
-
if (!row || isExpired(row.created_at, row.ttl_ms))
|
|
125
|
-
return undefined;
|
|
126
|
-
return JSON.parse(row.data);
|
|
127
|
-
}
|
|
128
|
-
export async function invalidateLabelCounts(email) {
|
|
129
|
-
const prisma = await getPrisma();
|
|
130
|
-
await prisma.label_counts.deleteMany({ where: { email } });
|
|
131
|
-
}
|
|
132
|
-
// ---------------------------------------------------------------------------
|
|
133
|
-
// Profile cache
|
|
134
|
-
// ---------------------------------------------------------------------------
|
|
135
|
-
export async function cacheProfile(email, data) {
|
|
136
|
-
const prisma = await getPrisma();
|
|
137
|
-
await prisma.profiles.upsert({
|
|
138
|
-
where: { email },
|
|
139
|
-
create: { email, data: JSON.stringify(data), ttl_ms: TTL.PROFILE },
|
|
140
|
-
update: { data: JSON.stringify(data), ttl_ms: TTL.PROFILE, created_at: new Date() },
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
export async function getCachedProfile(email) {
|
|
144
|
-
const prisma = await getPrisma();
|
|
145
|
-
const row = await prisma.profiles.findUnique({ where: { email } });
|
|
146
|
-
if (!row || isExpired(row.created_at, row.ttl_ms))
|
|
147
|
-
return undefined;
|
|
148
|
-
return JSON.parse(row.data);
|
|
149
|
-
}
|
|
150
|
-
// ---------------------------------------------------------------------------
|
|
151
|
-
// Sync state (persistent, no TTL)
|
|
152
|
-
// ---------------------------------------------------------------------------
|
|
153
|
-
export async function getLastHistoryId(email) {
|
|
154
|
-
const prisma = await getPrisma();
|
|
155
|
-
const row = await prisma.sync_states.findUnique({
|
|
156
|
-
where: { email_key: { email, key: 'history_id' } },
|
|
157
|
-
});
|
|
158
|
-
return row?.value;
|
|
159
|
-
}
|
|
160
|
-
export async function setLastHistoryId(email, historyId) {
|
|
161
|
-
const prisma = await getPrisma();
|
|
162
|
-
await prisma.sync_states.upsert({
|
|
163
|
-
where: { email_key: { email, key: 'history_id' } },
|
|
164
|
-
create: { email, key: 'history_id', value: historyId },
|
|
165
|
-
update: { value: historyId },
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
// ---------------------------------------------------------------------------
|
|
169
|
-
// Calendar list cache
|
|
170
|
-
// ---------------------------------------------------------------------------
|
|
171
|
-
export async function cacheCalendarList(email, data) {
|
|
172
|
-
const prisma = await getPrisma();
|
|
173
|
-
await prisma.calendar_lists.upsert({
|
|
174
|
-
where: { email },
|
|
175
|
-
create: { email, data: JSON.stringify(data), ttl_ms: TTL.CALENDAR_LIST },
|
|
176
|
-
update: { data: JSON.stringify(data), ttl_ms: TTL.CALENDAR_LIST, created_at: new Date() },
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
export async function getCachedCalendarList(email) {
|
|
180
|
-
const prisma = await getPrisma();
|
|
181
|
-
const row = await prisma.calendar_lists.findUnique({ where: { email } });
|
|
182
|
-
if (!row || isExpired(row.created_at, row.ttl_ms))
|
|
183
|
-
return undefined;
|
|
184
|
-
return JSON.parse(row.data);
|
|
185
|
-
}
|
|
186
|
-
export async function invalidateCalendarLists(email) {
|
|
187
|
-
const prisma = await getPrisma();
|
|
188
|
-
await prisma.calendar_lists.deleteMany({ where: { email } });
|
|
189
|
-
}
|
|
190
|
-
// ---------------------------------------------------------------------------
|
|
191
|
-
// Calendar events cache
|
|
192
|
-
// ---------------------------------------------------------------------------
|
|
193
|
-
export async function cacheCalendarEvents(email, params, data) {
|
|
194
|
-
const prisma = await getPrisma();
|
|
195
|
-
const where = {
|
|
196
|
-
email,
|
|
197
|
-
calendar_id: params.calendarId ?? '',
|
|
198
|
-
time_min: params.timeMin ?? '',
|
|
199
|
-
time_max: params.timeMax ?? '',
|
|
200
|
-
query: params.query ?? '',
|
|
201
|
-
max_results: params.maxResults ?? 0,
|
|
202
|
-
page_token: params.pageToken ?? '',
|
|
203
|
-
};
|
|
204
|
-
await prisma.calendar_events.upsert({
|
|
205
|
-
where: { email_calendar_id_time_min_time_max_query_max_results_page_token: where },
|
|
206
|
-
create: { ...where, data: JSON.stringify(data), ttl_ms: TTL.CALENDAR_EVENTS },
|
|
207
|
-
update: { data: JSON.stringify(data), ttl_ms: TTL.CALENDAR_EVENTS, created_at: new Date() },
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
export async function getCachedCalendarEvents(email, params) {
|
|
211
|
-
const prisma = await getPrisma();
|
|
212
|
-
const row = await prisma.calendar_events.findUnique({
|
|
213
|
-
where: {
|
|
214
|
-
email_calendar_id_time_min_time_max_query_max_results_page_token: {
|
|
215
|
-
email,
|
|
216
|
-
calendar_id: params.calendarId ?? '',
|
|
217
|
-
time_min: params.timeMin ?? '',
|
|
218
|
-
time_max: params.timeMax ?? '',
|
|
219
|
-
query: params.query ?? '',
|
|
220
|
-
max_results: params.maxResults ?? 0,
|
|
221
|
-
page_token: params.pageToken ?? '',
|
|
222
|
-
},
|
|
223
|
-
},
|
|
224
|
-
});
|
|
225
|
-
if (!row || isExpired(row.created_at, row.ttl_ms))
|
|
226
|
-
return undefined;
|
|
227
|
-
return JSON.parse(row.data);
|
|
228
|
-
}
|
|
229
|
-
export async function invalidateCalendarEvents(email, calendarId) {
|
|
230
|
-
const prisma = await getPrisma();
|
|
231
|
-
if (calendarId) {
|
|
232
|
-
await prisma.calendar_events.deleteMany({ where: { email, calendar_id: calendarId } });
|
|
233
|
-
}
|
|
234
|
-
else {
|
|
235
|
-
await prisma.calendar_events.deleteMany({ where: { email } });
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
// ---------------------------------------------------------------------------
|
|
239
|
-
// Housekeeping
|
|
240
|
-
// ---------------------------------------------------------------------------
|
|
241
|
-
export async function clearExpired() {
|
|
242
|
-
const prisma = await getPrisma();
|
|
243
|
-
const now = Date.now();
|
|
244
|
-
// Use raw SQL for the timestamp arithmetic across all cache tables
|
|
245
|
-
await prisma.$executeRawUnsafe(`DELETE FROM thread_lists WHERE (strftime('%s', created_at) * 1000 + ttl_ms) < ?`, now);
|
|
246
|
-
await prisma.$executeRawUnsafe(`DELETE FROM threads WHERE (strftime('%s', created_at) * 1000 + ttl_ms) < ?`, now);
|
|
247
|
-
await prisma.$executeRawUnsafe(`DELETE FROM labels WHERE (strftime('%s', created_at) * 1000 + ttl_ms) < ?`, now);
|
|
248
|
-
await prisma.$executeRawUnsafe(`DELETE FROM label_counts WHERE (strftime('%s', created_at) * 1000 + ttl_ms) < ?`, now);
|
|
249
|
-
await prisma.$executeRawUnsafe(`DELETE FROM profiles WHERE (strftime('%s', created_at) * 1000 + ttl_ms) < ?`, now);
|
|
250
|
-
await prisma.$executeRawUnsafe(`DELETE FROM calendar_lists WHERE (strftime('%s', created_at) * 1000 + ttl_ms) < ?`, now);
|
|
251
|
-
await prisma.$executeRawUnsafe(`DELETE FROM calendar_events WHERE (strftime('%s', created_at) * 1000 + ttl_ms) < ?`, now);
|
|
252
|
-
}
|
|
253
|
-
export async function clearAll(email) {
|
|
254
|
-
const prisma = await getPrisma();
|
|
255
|
-
await prisma.thread_lists.deleteMany({ where: { email } });
|
|
256
|
-
await prisma.threads.deleteMany({ where: { email } });
|
|
257
|
-
await prisma.labels.deleteMany({ where: { email } });
|
|
258
|
-
await prisma.label_counts.deleteMany({ where: { email } });
|
|
259
|
-
await prisma.profiles.deleteMany({ where: { email } });
|
|
260
|
-
await prisma.sync_states.deleteMany({ where: { email } });
|
|
261
|
-
await prisma.calendar_lists.deleteMany({ where: { email } });
|
|
262
|
-
await prisma.calendar_events.deleteMany({ where: { email } });
|
|
263
|
-
}
|
|
264
|
-
//# sourceMappingURL=gmail-cache.js.map
|
package/dist/gmail-cache.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gmail-cache.js","sourceRoot":"","sources":["../src/gmail-cache.ts"],"names":[],"mappings":"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"}
|