@bobfrankston/mailx 1.0.451 → 1.0.453

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 (205) hide show
  1. package/bin/mailx.js.map +1 -0
  2. package/bin/mailx.ts +1498 -0
  3. package/bin/postinstall.js.map +1 -0
  4. package/bin/postinstall.ts +41 -0
  5. package/bin/tsconfig.json +10 -0
  6. package/client/.gitattributes +10 -0
  7. package/client/app.js +51 -2
  8. package/client/app.js.map +1 -0
  9. package/client/app.ts +3112 -0
  10. package/client/components/address-book.js.map +1 -0
  11. package/client/components/address-book.ts +204 -0
  12. package/client/components/alarms.js.map +1 -0
  13. package/client/components/alarms.ts +276 -0
  14. package/client/components/calendar-sidebar.js.map +1 -0
  15. package/client/components/calendar-sidebar.ts +474 -0
  16. package/client/components/calendar.js.map +1 -0
  17. package/client/components/calendar.ts +211 -0
  18. package/client/components/context-menu.js.map +1 -0
  19. package/client/components/context-menu.ts +95 -0
  20. package/client/components/folder-picker.js.map +1 -0
  21. package/client/components/folder-picker.ts +127 -0
  22. package/client/components/folder-tree.js.map +1 -0
  23. package/client/components/folder-tree.ts +1069 -0
  24. package/client/components/message-list.js.map +1 -0
  25. package/client/components/message-list.ts +1129 -0
  26. package/client/components/message-viewer.js.map +1 -0
  27. package/client/components/message-viewer.ts +1257 -0
  28. package/client/components/outbox-view.js.map +1 -0
  29. package/client/components/outbox-view.ts +102 -0
  30. package/client/components/tasks.js.map +1 -0
  31. package/client/components/tasks.ts +234 -0
  32. package/client/compose/compose.js.map +1 -0
  33. package/client/compose/compose.ts +1231 -0
  34. package/client/compose/editor.js.map +1 -0
  35. package/client/compose/editor.ts +599 -0
  36. package/client/compose/ghost-text.js.map +1 -0
  37. package/client/compose/ghost-text.ts +140 -0
  38. package/client/index.html +1 -0
  39. package/client/lib/android-bootstrap.js.map +1 -0
  40. package/client/lib/android-bootstrap.ts +9 -0
  41. package/client/lib/api-client.js.map +1 -0
  42. package/client/lib/api-client.ts +439 -0
  43. package/client/lib/local-service.js.map +1 -0
  44. package/client/lib/local-service.ts +646 -0
  45. package/client/lib/local-store.js.map +1 -0
  46. package/client/lib/local-store.ts +283 -0
  47. package/client/lib/message-state.js.map +1 -0
  48. package/client/lib/message-state.ts +140 -0
  49. package/client/tsconfig.json +19 -0
  50. package/package.json +18 -16
  51. package/packages/mailx-api/.gitattributes +10 -0
  52. package/packages/mailx-api/index.d.ts.map +1 -0
  53. package/packages/mailx-api/index.js.map +1 -0
  54. package/packages/mailx-api/index.ts +283 -0
  55. package/packages/mailx-api/package.json +1 -1
  56. package/packages/mailx-api/tsconfig.json +9 -0
  57. package/packages/mailx-compose/.gitattributes +10 -0
  58. package/packages/mailx-compose/index.d.ts.map +1 -0
  59. package/packages/mailx-compose/index.js.map +1 -0
  60. package/packages/mailx-compose/index.ts +85 -0
  61. package/packages/mailx-compose/tsconfig.json +9 -0
  62. package/packages/mailx-core/index.d.ts.map +1 -0
  63. package/packages/mailx-core/index.js.map +1 -0
  64. package/packages/mailx-core/index.ts +424 -0
  65. package/packages/mailx-core/ipc.d.ts.map +1 -0
  66. package/packages/mailx-core/ipc.js.map +1 -0
  67. package/packages/mailx-core/ipc.ts +62 -0
  68. package/packages/mailx-core/package.json +1 -1
  69. package/packages/mailx-core/tsconfig.json +9 -0
  70. package/packages/mailx-host/.gitattributes +10 -0
  71. package/packages/mailx-host/index.d.ts.map +1 -0
  72. package/packages/mailx-host/index.js.map +1 -0
  73. package/packages/mailx-host/index.ts +38 -0
  74. package/packages/mailx-host/package.json +10 -2
  75. package/packages/mailx-host/tsconfig.json +9 -0
  76. package/packages/mailx-send/.gitattributes +10 -0
  77. package/packages/mailx-send/cli-queue.d.ts.map +1 -0
  78. package/packages/mailx-send/cli-queue.js.map +1 -0
  79. package/packages/mailx-send/cli-queue.ts +62 -0
  80. package/packages/mailx-send/cli-send.d.ts.map +1 -0
  81. package/packages/mailx-send/cli-send.js.map +1 -0
  82. package/packages/mailx-send/cli-send.ts +83 -0
  83. package/packages/mailx-send/cli.d.ts.map +1 -0
  84. package/packages/mailx-send/cli.js.map +1 -0
  85. package/packages/mailx-send/cli.ts +126 -0
  86. package/packages/mailx-send/index.d.ts.map +1 -0
  87. package/packages/mailx-send/index.js.map +1 -0
  88. package/packages/mailx-send/index.ts +333 -0
  89. package/packages/mailx-send/mailsend/cli.d.ts.map +1 -0
  90. package/packages/mailx-send/mailsend/cli.js.map +1 -0
  91. package/packages/mailx-send/mailsend/cli.ts +81 -0
  92. package/packages/mailx-send/mailsend/index.d.ts.map +1 -0
  93. package/packages/mailx-send/mailsend/index.js.map +1 -0
  94. package/packages/mailx-send/mailsend/index.ts +333 -0
  95. package/packages/mailx-send/mailsend/package-lock.json +65 -0
  96. package/packages/mailx-send/mailsend/tsconfig.json +21 -0
  97. package/packages/mailx-send/package-lock.json +65 -0
  98. package/packages/mailx-send/package.json +1 -1
  99. package/packages/mailx-send/tsconfig.json +21 -0
  100. package/packages/mailx-server/.gitattributes +10 -0
  101. package/packages/mailx-server/index.d.ts.map +1 -0
  102. package/packages/mailx-server/index.js.map +1 -0
  103. package/packages/mailx-server/index.ts +429 -0
  104. package/packages/mailx-server/package.json +1 -1
  105. package/packages/mailx-server/tsconfig.json +9 -0
  106. package/packages/mailx-service/google-sync.d.ts.map +1 -0
  107. package/packages/mailx-service/google-sync.js.map +1 -0
  108. package/packages/mailx-service/google-sync.ts +238 -0
  109. package/packages/mailx-service/index.d.ts.map +1 -0
  110. package/packages/mailx-service/index.js.map +1 -0
  111. package/packages/mailx-service/index.ts +2461 -0
  112. package/packages/mailx-service/jsonrpc.d.ts.map +1 -0
  113. package/packages/mailx-service/jsonrpc.js.map +1 -0
  114. package/packages/mailx-service/jsonrpc.ts +268 -0
  115. package/packages/mailx-service/package.json +1 -1
  116. package/packages/mailx-service/tsconfig.json +9 -0
  117. package/packages/mailx-settings/.gitattributes +10 -0
  118. package/packages/mailx-settings/cloud.d.ts.map +1 -0
  119. package/packages/mailx-settings/cloud.js.map +1 -0
  120. package/packages/mailx-settings/cloud.ts +388 -0
  121. package/packages/mailx-settings/index.d.ts.map +1 -0
  122. package/packages/mailx-settings/index.js.map +1 -0
  123. package/packages/mailx-settings/index.ts +892 -0
  124. package/packages/mailx-settings/package.json +1 -1
  125. package/packages/mailx-settings/tsconfig.json +9 -0
  126. package/packages/mailx-store/.gitattributes +10 -0
  127. package/packages/mailx-store/db.d.ts.map +1 -0
  128. package/packages/mailx-store/db.js.map +1 -0
  129. package/packages/mailx-store/db.ts +2007 -0
  130. package/packages/mailx-store/file-store.d.ts.map +1 -0
  131. package/packages/mailx-store/file-store.js.map +1 -0
  132. package/packages/mailx-store/file-store.ts +82 -0
  133. package/packages/mailx-store/index.d.ts.map +1 -0
  134. package/packages/mailx-store/index.js.map +1 -0
  135. package/packages/mailx-store/index.ts +7 -0
  136. package/packages/mailx-store/package.json +1 -1
  137. package/packages/mailx-store/tsconfig.json +9 -0
  138. package/packages/mailx-store-web/android-bootstrap.d.ts.map +1 -0
  139. package/packages/mailx-store-web/android-bootstrap.js.map +1 -0
  140. package/packages/mailx-store-web/android-bootstrap.ts +1262 -0
  141. package/packages/mailx-store-web/db.d.ts.map +1 -0
  142. package/packages/mailx-store-web/db.js.map +1 -0
  143. package/packages/mailx-store-web/db.ts +756 -0
  144. package/packages/mailx-store-web/gmail-api-web.d.ts.map +1 -0
  145. package/packages/mailx-store-web/gmail-api-web.js.map +1 -0
  146. package/packages/mailx-store-web/gmail-api-web.ts +11 -0
  147. package/packages/mailx-store-web/imap-web-provider.d.ts.map +1 -0
  148. package/packages/mailx-store-web/imap-web-provider.js.map +1 -0
  149. package/packages/mailx-store-web/imap-web-provider.ts +156 -0
  150. package/packages/mailx-store-web/index.d.ts.map +1 -0
  151. package/packages/mailx-store-web/index.js.map +1 -0
  152. package/packages/mailx-store-web/index.ts +10 -0
  153. package/packages/mailx-store-web/main-thread-host.d.ts.map +1 -0
  154. package/packages/mailx-store-web/main-thread-host.js.map +1 -0
  155. package/packages/mailx-store-web/main-thread-host.ts +322 -0
  156. package/packages/mailx-store-web/package.json +4 -4
  157. package/packages/mailx-store-web/provider-types.d.ts.map +1 -0
  158. package/packages/mailx-store-web/provider-types.js.map +1 -0
  159. package/packages/mailx-store-web/provider-types.ts +7 -0
  160. package/packages/mailx-store-web/sync-manager.d.ts.map +1 -0
  161. package/packages/mailx-store-web/sync-manager.js.map +1 -0
  162. package/packages/mailx-store-web/sync-manager.ts +508 -0
  163. package/packages/mailx-store-web/tsconfig.json +10 -0
  164. package/packages/mailx-store-web/web-jsonrpc.d.ts.map +1 -0
  165. package/packages/mailx-store-web/web-jsonrpc.js.map +1 -0
  166. package/packages/mailx-store-web/web-jsonrpc.ts +116 -0
  167. package/packages/mailx-store-web/web-message-store.d.ts.map +1 -0
  168. package/packages/mailx-store-web/web-message-store.js.map +1 -0
  169. package/packages/mailx-store-web/web-message-store.ts +97 -0
  170. package/packages/mailx-store-web/web-service.d.ts.map +1 -0
  171. package/packages/mailx-store-web/web-service.js.map +1 -0
  172. package/packages/mailx-store-web/web-service.ts +616 -0
  173. package/packages/mailx-store-web/web-settings.d.ts.map +1 -0
  174. package/packages/mailx-store-web/web-settings.js.map +1 -0
  175. package/packages/mailx-store-web/web-settings.ts +522 -0
  176. package/packages/mailx-store-web/worker-entry.d.ts.map +1 -0
  177. package/packages/mailx-store-web/worker-entry.js.map +1 -0
  178. package/packages/mailx-store-web/worker-entry.ts +215 -0
  179. package/packages/mailx-store-web/worker-tcp-transport.d.ts.map +1 -0
  180. package/packages/mailx-store-web/worker-tcp-transport.js.map +1 -0
  181. package/packages/mailx-store-web/worker-tcp-transport.ts +101 -0
  182. package/packages/mailx-types/.gitattributes +10 -0
  183. package/packages/mailx-types/index.d.ts.map +1 -0
  184. package/packages/mailx-types/index.js.map +1 -0
  185. package/packages/mailx-types/index.ts +498 -0
  186. package/packages/mailx-types/package.json +1 -1
  187. package/packages/mailx-types/tsconfig.json +9 -0
  188. package/tsconfig.base.json +2 -1
  189. package/tsconfig.json +9 -0
  190. package/build-apk.cmd +0 -3
  191. package/npmg.bat +0 -6
  192. package/packages/mailx-imap/index.d.ts +0 -442
  193. package/packages/mailx-imap/index.js +0 -3684
  194. package/packages/mailx-imap/package.json +0 -25
  195. package/packages/mailx-imap/providers/gmail-api.d.ts +0 -8
  196. package/packages/mailx-imap/providers/gmail-api.js +0 -8
  197. package/packages/mailx-imap/providers/types.d.ts +0 -9
  198. package/packages/mailx-imap/providers/types.js +0 -9
  199. package/packages/mailx-imap/tsconfig.tsbuildinfo +0 -1
  200. package/rebuild.cmd +0 -23
  201. package/tdview.cmd +0 -2
  202. package/temp.ps1 +0 -10
  203. package/test-smtp-direct.mjs +0 -4
  204. package/unbash.cmd +0 -55
  205. package/unwedge.cmd +0 -1
@@ -0,0 +1,388 @@
1
+ /**
2
+ * Cloud storage for mailx settings — Google Drive API (drive.file scope).
3
+ *
4
+ * Uses a single app-owned "mailx" folder on Drive, accessed by folder ID.
5
+ * The drive.file scope only sees files/folders created by this OAuth client,
6
+ * which prevents conflicts with existing folders of the same name.
7
+ * All machines using the same OAuth client ID share the same folder.
8
+ *
9
+ * ── Restoring removed providers ──
10
+ * OneDrive (removed 2026-04-06): Required microsoft-credentials.json in ~/.mailx/,
11
+ * MS_SCOPES = "https://graph.microsoft.com/Files.ReadWrite offline_access",
12
+ * authenticateOAuth with tokenDir ~/.mailx/tokens/microsoft/.
13
+ * Read/write via Graph API: GET/PUT https://graph.microsoft.com/v1.0/me/drive/root:/{path}:/content
14
+ * Azure AD app registration needed: https://portal.azure.com → App registrations → Desktop app
15
+ *
16
+ * Dropbox (removed 2026-04-06): Never implemented — placeholder only.
17
+ * Would need Dropbox OAuth app, token management, and Dropbox API v2 calls.
18
+ */
19
+
20
+ import fs from "node:fs";
21
+ import path from "node:path";
22
+ import { authenticateOAuth } from "@bobfrankston/oauthsupport";
23
+
24
+ const SETTINGS_DIR = path.join(process.env.USERPROFILE || process.env.HOME || ".", ".mailx");
25
+
26
+ // ── Credentials ──
27
+
28
+ // Google Drive: reuse iflow's OAuth credentials (same Google Cloud project)
29
+ function findGoogleCredentials(): string | null {
30
+ // Check mailx local dir first, then iflow package
31
+ const local = path.join(SETTINGS_DIR, "google-credentials.json");
32
+ if (fs.existsSync(local)) return local;
33
+ try {
34
+ let dir = import.meta.dirname;
35
+ for (let i = 0; i < 5; i++) {
36
+ for (const pkg of ["iflow-direct", "iflow"]) {
37
+ for (const name of ["iflow-credentials.json"]) {
38
+ const p = path.join(dir, "node_modules", "@bobfrankston", pkg, name);
39
+ if (fs.existsSync(p)) return p;
40
+ }
41
+ }
42
+ const parent = path.dirname(dir);
43
+ if (parent === dir) break;
44
+ dir = parent;
45
+ }
46
+ } catch { /* iflow not installed */ }
47
+ return null;
48
+ }
49
+
50
+ const GDRIVE_TOKEN_DIR = path.join(SETTINGS_DIR, "tokens", "gdrive");
51
+ // drive: full access so we can find pre-existing folders like "home/.mailx"
52
+ // that weren't created by this OAuth client. drive.file was safer but couldn't
53
+ // discover folders created manually or by other tools — which broke first-run
54
+ // setup when the user's convention is a nested path.
55
+ // The Gmail scope is already mail.google.com (full email), so this isn't a
56
+ // bigger privacy ask. Token cache at tokens/gdrive/ will re-auth on scope change.
57
+ const GDRIVE_SCOPES = "https://www.googleapis.com/auth/drive";
58
+
59
+ /** Paths to try when no config.path is set (fresh install). Order matters:
60
+ * "home/.mailx" is the user convention for shared family settings; "mailx"
61
+ * is the auto-created default. First one that exists on GDrive wins. */
62
+ const GDRIVE_PATH_SEARCH_ORDER = ["home/.mailx", "mailx"];
63
+
64
+ // ── Token helpers ──
65
+
66
+ /** Get a GDrive-capable token. Prefers the Gmail token (which now includes
67
+ * drive scope) — avoids a second OAuth consent prompt. Falls back to the
68
+ * dedicated GDrive token dir for non-Gmail setups or when Gmail token
69
+ * doesn't have drive scope yet. */
70
+ async function getGoogleDriveToken(): Promise<string | null> {
71
+ // Strategy 1: reuse a Gmail token that already has drive scope.
72
+ // Scan the tokens/ dir for any account token with drive in its scope.
73
+ const tokensDir = path.join(SETTINGS_DIR, "tokens");
74
+ if (fs.existsSync(tokensDir)) {
75
+ try {
76
+ for (const entry of fs.readdirSync(tokensDir)) {
77
+ if (entry === "gdrive") continue;
78
+ const tokenPath = path.join(tokensDir, entry, "oauth-token.json");
79
+ if (!fs.existsSync(tokenPath)) continue;
80
+ try {
81
+ const tok = JSON.parse(fs.readFileSync(tokenPath, "utf-8"));
82
+ if (tok.scope?.includes("drive") && tok.refresh_token) {
83
+ console.log(` [cloud] Reusing Gmail token from ${entry} (has drive scope)`);
84
+ const creds = findGoogleCredentials();
85
+ if (!creds) continue;
86
+ const refreshed = await authenticateOAuth(creds, {
87
+ scope: tok.scope,
88
+ tokenDirectory: path.join(tokensDir, entry),
89
+ tokenFileName: "oauth-token.json",
90
+ credentialsKey: "installed",
91
+ includeOfflineAccess: true,
92
+ });
93
+ if (refreshed?.access_token) {
94
+ console.log(` [cloud] GDrive auth: success (via Gmail token)`);
95
+ return refreshed.access_token;
96
+ }
97
+ }
98
+ } catch { /* skip this token */ }
99
+ }
100
+ } catch { /* tokens dir unreadable */ }
101
+ }
102
+
103
+ // Strategy 2: dedicated GDrive token (legacy path or non-Gmail setups)
104
+ const creds = findGoogleCredentials();
105
+ if (!creds) {
106
+ console.error(" [cloud] No Google credentials found (checked ~/.mailx/google-credentials.json and iflow package)");
107
+ return null;
108
+ }
109
+ const tokenPath = path.join(GDRIVE_TOKEN_DIR, "token.json");
110
+ if (fs.existsSync(tokenPath)) {
111
+ try {
112
+ const existing = JSON.parse(fs.readFileSync(tokenPath, "utf-8"));
113
+ const expired = existing.expires_at ? Date.now() >= existing.expires_at : true;
114
+ const hasRefresh = !!existing.refresh_token;
115
+ console.log(` [cloud] GDrive token (dedicated): ${expired ? "expired" : "valid"}, refresh_token: ${hasRefresh ? "yes" : "NO"}, scope: ${existing.scope || "?"}`);
116
+ if (existing.scope && existing.scope !== GDRIVE_SCOPES) {
117
+ console.log(` [cloud] Scope changed (${existing.scope} → ${GDRIVE_SCOPES}) — re-authenticating...`);
118
+ fs.unlinkSync(tokenPath);
119
+ }
120
+ } catch { /* ignore */ }
121
+ } else {
122
+ console.log(` [cloud] GDrive token: not found at ${tokenPath} (will auth)`);
123
+ }
124
+ try {
125
+ const token = await authenticateOAuth(creds, {
126
+ scope: GDRIVE_SCOPES,
127
+ tokenDirectory: GDRIVE_TOKEN_DIR,
128
+ tokenFileName: "token.json",
129
+ credentialsKey: "installed",
130
+ includeOfflineAccess: true,
131
+ });
132
+ if (token?.access_token) {
133
+ console.log(` [cloud] GDrive auth: success (dedicated token)`);
134
+ } else {
135
+ console.error(` [cloud] GDrive auth: returned null — OAuth likely timed out`);
136
+ }
137
+ return token?.access_token || null;
138
+ } catch (e: any) {
139
+ console.error(` [cloud] GDrive auth FAILED: ${e.message}`);
140
+ return null;
141
+ }
142
+ }
143
+
144
+ // ── Google Drive API (folder-ID based) ──
145
+
146
+ /** Walk a nested folder path on GDrive ("home/.mailx" → find "home", find
147
+ * ".mailx" inside it). Returns the leaf folder ID, or null if any segment is
148
+ * missing. When `create` is true, creates the LAST segment if missing (won't
149
+ * create intermediate segments — that's a user error). */
150
+ async function walkGDrivePath(token: string, segments: string[], create: boolean): Promise<string | null> {
151
+ const fullPath = segments.join("/");
152
+ let parentId: string | undefined;
153
+ for (let i = 0; i < segments.length; i++) {
154
+ const seg = segments[i];
155
+ const found = await gDriveFindFolder(token, seg, parentId);
156
+ if (found) {
157
+ console.log(` [cloud] walk '${fullPath}': '${seg}' → ${found}${parentId ? ` (in ${parentId})` : ""}`);
158
+ parentId = found;
159
+ } else if (create && i === segments.length - 1) {
160
+ const body: any = { name: seg, mimeType: "application/vnd.google-apps.folder" };
161
+ if (parentId) body.parents = [parentId];
162
+ const res = await fetch("https://www.googleapis.com/drive/v3/files", {
163
+ method: "POST",
164
+ headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" },
165
+ body: JSON.stringify(body),
166
+ });
167
+ if (!res.ok) return null;
168
+ const created = await res.json() as any;
169
+ parentId = created.id;
170
+ } else {
171
+ return null;
172
+ }
173
+ }
174
+ return parentId || null;
175
+ }
176
+
177
+ /** Resolve a folder ID back to its name (for diagnostic logging). */
178
+ async function gDriveGetFolderName(token: string, folderId: string): Promise<string | null> {
179
+ try {
180
+ const res = await fetch(`https://www.googleapis.com/drive/v3/files/${folderId}?fields=name,parents`, {
181
+ headers: { Authorization: `Bearer ${token}` },
182
+ });
183
+ if (!res.ok) return null;
184
+ const data = await res.json() as any;
185
+ return data.name || null;
186
+ } catch { return null; }
187
+ }
188
+
189
+ /** Find a single folder by name, optionally inside a parent. */
190
+ async function gDriveFindFolder(token: string, name: string, parentId?: string): Promise<string | null> {
191
+ let query = `name='${name}' and mimeType='application/vnd.google-apps.folder' and trashed=false`;
192
+ if (parentId) query += ` and '${parentId}' in parents`;
193
+ const res = await fetch(`https://www.googleapis.com/drive/v3/files?q=${encodeURIComponent(query)}&fields=files(id,name)`, {
194
+ headers: { Authorization: `Bearer ${token}` },
195
+ });
196
+ if (!res.ok) { console.error(` [cloud] gdrive folder search '${name}': ${res.status} ${res.statusText}`); return null; }
197
+ const data = await res.json() as any;
198
+ return data.files?.[0]?.id || null;
199
+ }
200
+
201
+ /** Find the settings folder on GDrive, or create a flat "mailx" folder.
202
+ * Supports nested paths from config (e.g. "home/.mailx") by walking each
203
+ * segment. Falls back to the folderId in config if set, so a stale ID that
204
+ * points to the wrong folder gets corrected on next lookup. */
205
+ export async function gDriveFindOrCreateFolder(): Promise<string | null> {
206
+ const token = await getGoogleDriveToken();
207
+ if (!token) return null;
208
+ // Read path from config — supports nested like "home/.mailx"
209
+ let cfgEntry: any = null;
210
+ try {
211
+ const cfgPath = path.join(SETTINGS_DIR, "config.jsonc");
212
+ if (fs.existsSync(cfgPath)) {
213
+ const raw = fs.readFileSync(cfgPath, "utf-8").replace(/\/\/.*$/gm, "").replace(/\/\*[\s\S]*?\*\//g, "");
214
+ cfgEntry = JSON.parse(raw).sharedDir;
215
+ }
216
+ } catch { /* ignore */ }
217
+
218
+ // Build search list: configured path first, then common conventions
219
+ const configuredPath = (typeof cfgEntry === "object" && cfgEntry?.path) ? cfgEntry.path : null;
220
+ const pathsToTry = configuredPath
221
+ ? [configuredPath]
222
+ : GDRIVE_PATH_SEARCH_ORDER;
223
+
224
+ try {
225
+ for (const tryPath of pathsToTry) {
226
+ console.log(` [cloud] Trying GDrive path: '${tryPath}'`);
227
+ const segments = tryPath.split(/[/\\]/).filter(Boolean);
228
+ const folderId = await walkGDrivePath(token, segments, false);
229
+ if (folderId) {
230
+ // Resolve folder ID back to name for verification
231
+ const name = await gDriveGetFolderName(token, folderId);
232
+ console.log(` [cloud] Found existing '${tryPath}' → folder '${name || "?"}' (${folderId})`);
233
+ return folderId;
234
+ }
235
+ console.log(` [cloud] Path '${tryPath}' not found on GDrive`);
236
+ }
237
+ // None found — create the last (simplest) path
238
+ const createPath = configuredPath || GDRIVE_PATH_SEARCH_ORDER[GDRIVE_PATH_SEARCH_ORDER.length - 1];
239
+ const segments = createPath.split(/[/\\]/).filter(Boolean);
240
+ const created = await walkGDrivePath(token, segments, true);
241
+ if (created) console.log(` [cloud] Created '${createPath}' folder: ${created}`);
242
+ return created;
243
+ } catch (e: any) {
244
+ console.error(` [cloud] gdrive folder setup: ${e.message}`);
245
+ return null;
246
+ }
247
+ }
248
+
249
+ /** Read a file by name from a folder (by ID) */
250
+ async function gDriveReadFromFolder(folderId: string, fileName: string): Promise<string | null> {
251
+ const token = await getGoogleDriveToken();
252
+ if (!token) { console.error(` [cloud] gdrive read ${fileName}: no token`); return null; }
253
+ try {
254
+ // Find file in folder
255
+ const query = `name='${fileName}' and '${folderId}' in parents and trashed=false`;
256
+ const res = await fetch(`https://www.googleapis.com/drive/v3/files?q=${encodeURIComponent(query)}&fields=files(id)`, {
257
+ headers: { Authorization: `Bearer ${token}` },
258
+ });
259
+ if (!res.ok) { console.error(` [cloud] gdrive lookup '${fileName}': ${res.status}`); return null; }
260
+ const data = await res.json() as any;
261
+ const fileId = data.files?.[0]?.id;
262
+ if (!fileId) return null;
263
+
264
+ // Download content
265
+ const contentRes = await fetch(`https://www.googleapis.com/drive/v3/files/${fileId}?alt=media`, {
266
+ headers: { Authorization: `Bearer ${token}` },
267
+ });
268
+ if (!contentRes.ok) { console.error(` [cloud] gdrive download ${fileName}: ${contentRes.status}`); return null; }
269
+ return await contentRes.text();
270
+ } catch (e: any) {
271
+ console.error(` [cloud] gdrive read ${fileName}: ${e.message}`);
272
+ return null;
273
+ }
274
+ }
275
+
276
+ /** Write a file by name to a folder (by ID) — creates or updates.
277
+ * Throws on failure with a descriptive error so callers can surface it to the UI. */
278
+ async function gDriveWriteToFolder(folderId: string, fileName: string, content: string): Promise<void> {
279
+ const token = await getGoogleDriveToken();
280
+ if (!token) throw new Error("Google Drive: no auth token (OAuth not granted or expired)");
281
+ // Check if file exists in folder
282
+ const query = `name='${fileName}' and '${folderId}' in parents and trashed=false`;
283
+ const findRes = await fetch(`https://www.googleapis.com/drive/v3/files?q=${encodeURIComponent(query)}&fields=files(id)`, {
284
+ headers: { Authorization: `Bearer ${token}` },
285
+ });
286
+ if (!findRes.ok) {
287
+ const body = await findRes.text().catch(() => "");
288
+ throw new Error(`Google Drive: lookup '${fileName}' failed (${findRes.status} ${findRes.statusText}) ${body.slice(0, 200)}`);
289
+ }
290
+ const findData = await findRes.json() as any;
291
+ const existingId = findData.files?.[0]?.id;
292
+
293
+ if (existingId) {
294
+ // Update existing file
295
+ const res = await fetch(`https://www.googleapis.com/upload/drive/v3/files/${existingId}?uploadType=media`, {
296
+ method: "PATCH",
297
+ headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" },
298
+ body: content,
299
+ });
300
+ if (!res.ok) {
301
+ const body = await res.text().catch(() => "");
302
+ throw new Error(`Google Drive: update '${fileName}' failed (${res.status} ${res.statusText}) ${body.slice(0, 200)}`);
303
+ }
304
+ } else {
305
+ // Create new file in folder
306
+ const boundary = "mailx_boundary_" + Date.now();
307
+ const metadata = JSON.stringify({ name: fileName, parents: [folderId] });
308
+ const body = `--${boundary}\r\nContent-Type: application/json\r\n\r\n${metadata}\r\n--${boundary}\r\nContent-Type: application/json\r\n\r\n${content}\r\n--${boundary}--`;
309
+ const res = await fetch("https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart", {
310
+ method: "POST",
311
+ headers: { Authorization: `Bearer ${token}`, "Content-Type": `multipart/related; boundary=${boundary}` },
312
+ body,
313
+ });
314
+ if (!res.ok) {
315
+ const errBody = await res.text().catch(() => "");
316
+ throw new Error(`Google Drive: create '${fileName}' failed (${res.status} ${res.statusText}) ${errBody.slice(0, 200)}`);
317
+ }
318
+ }
319
+ }
320
+
321
+ // ── Public API ──
322
+
323
+ export type CloudProvider = "gdrive" | "google" | "local";
324
+
325
+ export interface CloudFile {
326
+ /** Read a file. For gdrive, path is just the filename (folder ID is implicit). */
327
+ read(filePath: string): Promise<string | null>;
328
+ /** Write a file. For gdrive, path is just the filename. Throws on failure with a descriptive error. */
329
+ write(filePath: string, content: string): Promise<void>;
330
+ /** Check if a file exists. */
331
+ exists(filePath: string): Promise<boolean>;
332
+ }
333
+
334
+ /**
335
+ * Get a cloud file provider. For gdrive, pass the folder ID.
336
+ * Files are stored flat in the folder (no subdirectory navigation).
337
+ */
338
+ export function getCloudProvider(provider: string, folderId?: string): CloudFile | null {
339
+ switch (provider) {
340
+ case "google":
341
+ case "gdrive":
342
+ if (!folderId) {
343
+ console.error(" [cloud] gdrive requires a folder ID — run initCloudConfig first");
344
+ return null;
345
+ }
346
+ return {
347
+ read: (fileName) => gDriveReadFromFolder(folderId, fileName),
348
+ write: (fileName, content) => gDriveWriteToFolder(folderId, fileName, content),
349
+ exists: async (fileName) => (await gDriveReadFromFolder(folderId, fileName)) !== null,
350
+ };
351
+ case "local":
352
+ return {
353
+ read: async (p) => { try { return fs.readFileSync(p, "utf-8"); } catch { return null; } },
354
+ write: async (p, c) => { fs.writeFileSync(p, c); },
355
+ exists: async (p) => fs.existsSync(p),
356
+ };
357
+ default:
358
+ console.error(` [cloud] Provider "${provider}" not supported — only gdrive is available`);
359
+ return null;
360
+ }
361
+ }
362
+
363
+ /** Fetch the authenticated Google user's profile (name + email) via the People API.
364
+ * Caller must supply an OAuth access token whose scopes include `contacts.readonly`
365
+ * or `userinfo.profile`. The Drive token (drive.file) does NOT have the right scope
366
+ * on its own — use the Gmail/IMAP OAuth token instead (mailx-imap's
367
+ * ImapManager.getOAuthToken). Returns null on failure. */
368
+ export async function getGoogleProfile(token: string): Promise<{ name?: string; email?: string } | null> {
369
+ if (!token) return null;
370
+ try {
371
+ const res = await fetch("https://people.googleapis.com/v1/people/me?personFields=names,emailAddresses", {
372
+ headers: { Authorization: `Bearer ${token}` },
373
+ });
374
+ if (!res.ok) {
375
+ console.error(` [cloud] People API: ${res.status} ${res.statusText}`);
376
+ return null;
377
+ }
378
+ const data = await res.json() as any;
379
+ const name = data.names?.find((n: any) => n.displayName)?.displayName
380
+ || data.names?.[0]?.displayName;
381
+ const email = data.emailAddresses?.find((e: any) => e.metadata?.primary)?.value
382
+ || data.emailAddresses?.[0]?.value;
383
+ return { name, email };
384
+ } catch (e: any) {
385
+ console.error(` [cloud] getGoogleProfile: ${e.message}`);
386
+ return null;
387
+ }
388
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}