@bobfrankston/mailx-store-web 0.1.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/android-bootstrap.d.ts +16 -0
- package/android-bootstrap.d.ts.map +1 -0
- package/android-bootstrap.js +1438 -0
- package/android-bootstrap.js.map +1 -0
- package/android-bootstrap.ts +1450 -0
- package/db.d.ts +146 -0
- package/db.d.ts.map +1 -0
- package/db.js +725 -0
- package/db.js.map +1 -0
- package/db.ts +831 -0
- package/gmail-api-web.d.ts +11 -0
- package/gmail-api-web.d.ts.map +1 -0
- package/gmail-api-web.js +11 -0
- package/gmail-api-web.js.map +1 -0
- package/gmail-api-web.ts +11 -0
- package/imap-web-provider.d.ts +33 -0
- package/imap-web-provider.d.ts.map +1 -0
- package/imap-web-provider.js +140 -0
- package/imap-web-provider.js.map +1 -0
- package/imap-web-provider.ts +156 -0
- package/index.d.ts +10 -0
- package/index.d.ts.map +1 -0
- package/index.js +10 -0
- package/index.js.map +1 -0
- package/index.ts +10 -0
- package/main-thread-host.d.ts +15 -0
- package/main-thread-host.d.ts.map +1 -0
- package/main-thread-host.js +292 -0
- package/main-thread-host.js.map +1 -0
- package/main-thread-host.ts +322 -0
- package/package.json +41 -0
- package/provider-types.d.ts +7 -0
- package/provider-types.d.ts.map +1 -0
- package/provider-types.js +7 -0
- package/provider-types.js.map +1 -0
- package/provider-types.ts +7 -0
- package/sql-wasm-esm.js +10 -0
- package/sql.js.d.ts +29 -0
- package/sync-manager.d.ts +68 -0
- package/sync-manager.d.ts.map +1 -0
- package/sync-manager.js +506 -0
- package/sync-manager.js.map +1 -0
- package/sync-manager.ts +508 -0
- package/tsconfig.json +10 -0
- package/web-jsonrpc.d.ts +20 -0
- package/web-jsonrpc.d.ts.map +1 -0
- package/web-jsonrpc.js +112 -0
- package/web-jsonrpc.js.map +1 -0
- package/web-jsonrpc.ts +126 -0
- package/web-message-store.d.ts +16 -0
- package/web-message-store.d.ts.map +1 -0
- package/web-message-store.js +89 -0
- package/web-message-store.js.map +1 -0
- package/web-message-store.ts +97 -0
- package/web-service.d.ts +136 -0
- package/web-service.d.ts.map +1 -0
- package/web-service.js +687 -0
- package/web-service.js.map +1 -0
- package/web-service.ts +754 -0
- package/web-settings.d.ts +91 -0
- package/web-settings.d.ts.map +1 -0
- package/web-settings.js +518 -0
- package/web-settings.js.map +1 -0
- package/web-settings.ts +547 -0
- package/worker-bundle.js +6838 -0
- package/worker-entry.d.ts +8 -0
- package/worker-entry.d.ts.map +1 -0
- package/worker-entry.js +218 -0
- package/worker-entry.js.map +1 -0
- package/worker-entry.ts +245 -0
- package/worker-tcp-transport.d.ts +28 -0
- package/worker-tcp-transport.d.ts.map +1 -0
- package/worker-tcp-transport.js +98 -0
- package/worker-tcp-transport.js.map +1 -0
- package/worker-tcp-transport.ts +101 -0
package/db.d.ts
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebAssembly SQLite metadata index for mailx (Android/browser).
|
|
3
|
+
* API-compatible with @bobfrankston/mailx-store's MailxDB.
|
|
4
|
+
* Uses sql.js (SQLite compiled to WebAssembly) for in-browser SQLite.
|
|
5
|
+
*
|
|
6
|
+
* Database is persisted to IndexedDB on every write operation.
|
|
7
|
+
* Bodies are stored in IndexedDB via WebMessageStore (not filesystem).
|
|
8
|
+
*/
|
|
9
|
+
import type { MessageEnvelope, Folder, EmailAddress, PagedResult, MessageQuery } from "@bobfrankston/mailx-types";
|
|
10
|
+
export declare class WebMailxDB {
|
|
11
|
+
private db;
|
|
12
|
+
private ready;
|
|
13
|
+
private saveTimer;
|
|
14
|
+
constructor(dbName?: string);
|
|
15
|
+
private init;
|
|
16
|
+
/** Wait for DB initialization */
|
|
17
|
+
waitReady(): Promise<void>;
|
|
18
|
+
/** One-shot junk-contact purge — see desktop equivalent in mailx-store/db.ts.
|
|
19
|
+
* Bump TARGET when filter rules tighten so we sweep historical rows once
|
|
20
|
+
* per device. Flag stored in localStorage (the web DB has no kv table). */
|
|
21
|
+
private runOneShotJunkContactPurge;
|
|
22
|
+
/** Persist DB to IndexedDB (debounced — batches rapid writes) */
|
|
23
|
+
private scheduleSave;
|
|
24
|
+
/** Force immediate persist */
|
|
25
|
+
flush(): Promise<void>;
|
|
26
|
+
close(): void;
|
|
27
|
+
private run;
|
|
28
|
+
private get;
|
|
29
|
+
private all;
|
|
30
|
+
private lastId;
|
|
31
|
+
upsertAccount(id: string, name: string, email: string, configJson: string): void;
|
|
32
|
+
getAccounts(): {
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
email: string;
|
|
36
|
+
lastSync: number;
|
|
37
|
+
}[];
|
|
38
|
+
getAccountConfigs(): {
|
|
39
|
+
id: string;
|
|
40
|
+
name: string;
|
|
41
|
+
email: string;
|
|
42
|
+
configJson: string;
|
|
43
|
+
}[];
|
|
44
|
+
updateLastSync(accountId: string, timestamp: number): void;
|
|
45
|
+
upsertFolder(accountId: string, folderPath: string, name: string, specialUse: string, delimiter: string): number;
|
|
46
|
+
getFolders(accountId: string): Folder[];
|
|
47
|
+
deleteFolder(folderId: number): void;
|
|
48
|
+
markFolderRead(folderId: number): void;
|
|
49
|
+
deleteAllMessages(accountId: string, folderId: number): void;
|
|
50
|
+
updateFolderCounts(folderId: number, total: number, unread: number): void;
|
|
51
|
+
updateFolderSync(folderId: number, uidvalidity: number, highestModseq: string): void;
|
|
52
|
+
getFolderSync(folderId: number): {
|
|
53
|
+
uidvalidity: number;
|
|
54
|
+
highestModseq: string;
|
|
55
|
+
};
|
|
56
|
+
upsertMessage(msg: {
|
|
57
|
+
accountId: string;
|
|
58
|
+
folderId: number;
|
|
59
|
+
uid: number;
|
|
60
|
+
messageId: string;
|
|
61
|
+
inReplyTo: string;
|
|
62
|
+
references: string[];
|
|
63
|
+
date: number;
|
|
64
|
+
subject: string;
|
|
65
|
+
from: EmailAddress;
|
|
66
|
+
to: EmailAddress[];
|
|
67
|
+
cc: EmailAddress[];
|
|
68
|
+
flags: string[];
|
|
69
|
+
size: number;
|
|
70
|
+
hasAttachments: boolean;
|
|
71
|
+
preview: string;
|
|
72
|
+
bodyPath: string;
|
|
73
|
+
}): number;
|
|
74
|
+
getMessages(query: MessageQuery): PagedResult<MessageEnvelope>;
|
|
75
|
+
getUnifiedInbox(page?: number, pageSize?: number): PagedResult<MessageEnvelope>;
|
|
76
|
+
getMessageByUid(accountId: string, uid: number, folderId?: number): MessageEnvelope;
|
|
77
|
+
getMessageBodyPath(accountId: string, uid: number): string;
|
|
78
|
+
updateMessageFlags(accountId: string, uid: number, flags: string[]): void;
|
|
79
|
+
updateBodyPath(accountId: string, uid: number, bodyPath: string): void;
|
|
80
|
+
getMessagesWithoutBody(accountId: string, limit?: number): {
|
|
81
|
+
uid: number;
|
|
82
|
+
folderId: number;
|
|
83
|
+
}[];
|
|
84
|
+
getHighestUid(accountId: string, folderId: number): number;
|
|
85
|
+
getOldestDate(accountId: string, folderId: number): number;
|
|
86
|
+
getMessageCount(accountId: string, folderId: number): number;
|
|
87
|
+
getUidsForFolder(accountId: string, folderId: number): number[];
|
|
88
|
+
deleteMessage(accountId: string, uid: number): void;
|
|
89
|
+
recalcFolderCounts(folderId: number): void;
|
|
90
|
+
beginTransaction(): void;
|
|
91
|
+
commitTransaction(): void;
|
|
92
|
+
rollbackTransaction(): void;
|
|
93
|
+
/** Delete every contact row tied to a single Google contact identity
|
|
94
|
+
* (resourceName like "people/c12345"). Used by the People-API
|
|
95
|
+
* incremental sync when Google flags a contact as deleted. A single
|
|
96
|
+
* Google contact can have multiple email-rows; remove them all. */
|
|
97
|
+
deleteContactByGoogleId(googleId: string): number;
|
|
98
|
+
/** Stamp the google_id + organization on an already-recorded contact row.
|
|
99
|
+
* Web side mirrors mailx-store/db.ts — the Google sync calls
|
|
100
|
+
* `recordSentAddress` first to upsert, then this to attach the
|
|
101
|
+
* Google identity for incremental delete tracking. */
|
|
102
|
+
setContactGoogleId(email: string, googleId: string, organization: string): void;
|
|
103
|
+
recordSentAddress(name: string, email: string): void;
|
|
104
|
+
seedContactsFromMessages(): number;
|
|
105
|
+
searchContacts(query: string, limit?: number): {
|
|
106
|
+
name: string;
|
|
107
|
+
email: string;
|
|
108
|
+
source: string;
|
|
109
|
+
useCount: number;
|
|
110
|
+
}[];
|
|
111
|
+
/** Address-book listing. Same shape as mailx-store/db.ts:listContacts so
|
|
112
|
+
* the address-book modal renders identically on desktop and Android. */
|
|
113
|
+
listContacts(query: string, page?: number, pageSize?: number): {
|
|
114
|
+
items: any[];
|
|
115
|
+
total: number;
|
|
116
|
+
page: number;
|
|
117
|
+
pageSize: number;
|
|
118
|
+
};
|
|
119
|
+
upsertContact(name: string, email: string): void;
|
|
120
|
+
deleteContactLocal(email: string): void;
|
|
121
|
+
/** Q49 heuristic: has the user ever sent to `recipientEmail` with a
|
|
122
|
+
* non-empty Cc? Scans Sent folder(s). Used by compose to auto-expand
|
|
123
|
+
* the Cc row on reply to a frequent-Cc'd recipient. */
|
|
124
|
+
hasCcHistoryTo(recipientEmail: string): boolean;
|
|
125
|
+
searchMessages(query: string, page?: number, pageSize?: number, accountId?: string, folderId?: number): PagedResult<MessageEnvelope>;
|
|
126
|
+
queueSyncAction(accountId: string, action: string, uid: number, folderId: number, extra?: {
|
|
127
|
+
targetFolderId?: number;
|
|
128
|
+
flags?: string[];
|
|
129
|
+
rawMessage?: string;
|
|
130
|
+
}): void;
|
|
131
|
+
getPendingSyncActions(accountId: string): any[];
|
|
132
|
+
completeSyncAction(id: number): void;
|
|
133
|
+
failSyncAction(id: number, error: string): void;
|
|
134
|
+
/** Delete a queued sync action by (accountId, action, uid) — used by the
|
|
135
|
+
* send path which tracks queued sends via a unique negative uid rather
|
|
136
|
+
* than threading the row id through the async send pipeline. */
|
|
137
|
+
completeSyncActionByUid(accountId: string, action: string, uid: number): void;
|
|
138
|
+
/** Mark a send-queue action failed by uid — same tracking-key rationale. */
|
|
139
|
+
failSyncActionByUid(accountId: string, action: string, uid: number, error: string): void;
|
|
140
|
+
getPendingSyncCount(accountId: string): number;
|
|
141
|
+
getTotalPendingSyncCount(): number;
|
|
142
|
+
/** Reset the entire database */
|
|
143
|
+
resetStore(): Promise<void>;
|
|
144
|
+
private rowToEnvelope;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=db.d.ts.map
|
package/db.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["db.ts"],"names":[],"mappings":"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"}
|