@bobfrankston/mailx 1.0.450 → 1.0.452
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/bin/mailx.js.map +1 -0
- package/bin/mailx.ts +1498 -0
- package/bin/postinstall.js.map +1 -0
- package/bin/postinstall.ts +41 -0
- package/bin/tsconfig.json +10 -0
- package/client/.gitattributes +10 -0
- package/client/app.js +51 -2
- package/client/app.js.map +1 -0
- package/client/app.ts +3112 -0
- package/client/components/address-book.js.map +1 -0
- package/client/components/address-book.ts +204 -0
- package/client/components/alarms.js.map +1 -0
- package/client/components/alarms.ts +276 -0
- package/client/components/calendar-sidebar.js.map +1 -0
- package/client/components/calendar-sidebar.ts +474 -0
- package/client/components/calendar.js.map +1 -0
- package/client/components/calendar.ts +211 -0
- package/client/components/context-menu.js.map +1 -0
- package/client/components/context-menu.ts +95 -0
- package/client/components/folder-picker.js.map +1 -0
- package/client/components/folder-picker.ts +127 -0
- package/client/components/folder-tree.js.map +1 -0
- package/client/components/folder-tree.ts +1069 -0
- package/client/components/message-list.js.map +1 -0
- package/client/components/message-list.ts +1129 -0
- package/client/components/message-viewer.js.map +1 -0
- package/client/components/message-viewer.ts +1257 -0
- package/client/components/outbox-view.js.map +1 -0
- package/client/components/outbox-view.ts +102 -0
- package/client/components/tasks.js.map +1 -0
- package/client/components/tasks.ts +234 -0
- package/client/compose/compose.js.map +1 -0
- package/client/compose/compose.ts +1231 -0
- package/client/compose/editor.js.map +1 -0
- package/client/compose/editor.ts +599 -0
- package/client/compose/ghost-text.js.map +1 -0
- package/client/compose/ghost-text.ts +140 -0
- package/client/index.html +1 -0
- package/client/lib/android-bootstrap.js.map +1 -0
- package/client/lib/android-bootstrap.ts +9 -0
- package/client/lib/api-client.js.map +1 -0
- package/client/lib/api-client.ts +439 -0
- package/client/lib/local-service.js.map +1 -0
- package/client/lib/local-service.ts +646 -0
- package/client/lib/local-store.js.map +1 -0
- package/client/lib/local-store.ts +283 -0
- package/client/lib/message-state.js.map +1 -0
- package/client/lib/message-state.ts +140 -0
- package/client/tsconfig.json +19 -0
- package/package.json +15 -15
- package/packages/mailx-api/.gitattributes +10 -0
- package/packages/mailx-api/index.d.ts.map +1 -0
- package/packages/mailx-api/index.js.map +1 -0
- package/packages/mailx-api/index.ts +283 -0
- package/packages/mailx-api/tsconfig.json +9 -0
- package/packages/mailx-compose/.gitattributes +10 -0
- package/packages/mailx-compose/index.d.ts.map +1 -0
- package/packages/mailx-compose/index.js.map +1 -0
- package/packages/mailx-compose/index.ts +85 -0
- package/packages/mailx-compose/tsconfig.json +9 -0
- package/packages/mailx-core/index.d.ts.map +1 -0
- package/packages/mailx-core/index.js.map +1 -0
- package/packages/mailx-core/index.ts +424 -0
- package/packages/mailx-core/ipc.d.ts.map +1 -0
- package/packages/mailx-core/ipc.js.map +1 -0
- package/packages/mailx-core/ipc.ts +62 -0
- package/packages/mailx-core/tsconfig.json +9 -0
- package/packages/mailx-host/.gitattributes +10 -0
- package/packages/mailx-host/index.d.ts.map +1 -0
- package/packages/mailx-host/index.js.map +1 -0
- package/packages/mailx-host/index.ts +38 -0
- package/packages/mailx-host/package.json +10 -2
- package/packages/mailx-host/tsconfig.json +9 -0
- package/packages/mailx-send/.gitattributes +10 -0
- package/packages/mailx-send/cli-queue.d.ts.map +1 -0
- package/packages/mailx-send/cli-queue.js.map +1 -0
- package/packages/mailx-send/cli-queue.ts +62 -0
- package/packages/mailx-send/cli-send.d.ts.map +1 -0
- package/packages/mailx-send/cli-send.js.map +1 -0
- package/packages/mailx-send/cli-send.ts +83 -0
- package/packages/mailx-send/cli.d.ts.map +1 -0
- package/packages/mailx-send/cli.js.map +1 -0
- package/packages/mailx-send/cli.ts +126 -0
- package/packages/mailx-send/index.d.ts.map +1 -0
- package/packages/mailx-send/index.js.map +1 -0
- package/packages/mailx-send/index.ts +333 -0
- package/packages/mailx-send/mailsend/cli.d.ts.map +1 -0
- package/packages/mailx-send/mailsend/cli.js.map +1 -0
- package/packages/mailx-send/mailsend/cli.ts +81 -0
- package/packages/mailx-send/mailsend/index.d.ts.map +1 -0
- package/packages/mailx-send/mailsend/index.js.map +1 -0
- package/packages/mailx-send/mailsend/index.ts +333 -0
- package/packages/mailx-send/mailsend/package-lock.json +65 -0
- package/packages/mailx-send/mailsend/tsconfig.json +21 -0
- package/packages/mailx-send/package-lock.json +65 -0
- package/packages/mailx-send/package.json +1 -1
- package/packages/mailx-send/tsconfig.json +21 -0
- package/packages/mailx-server/.gitattributes +10 -0
- package/packages/mailx-server/index.d.ts.map +1 -0
- package/packages/mailx-server/index.js.map +1 -0
- package/packages/mailx-server/index.ts +429 -0
- package/packages/mailx-server/tsconfig.json +9 -0
- package/packages/mailx-service/google-sync.d.ts.map +1 -0
- package/packages/mailx-service/google-sync.js.map +1 -0
- package/packages/mailx-service/google-sync.ts +238 -0
- package/packages/mailx-service/index.d.ts.map +1 -0
- package/packages/mailx-service/index.js.map +1 -0
- package/packages/mailx-service/index.ts +2461 -0
- package/packages/mailx-service/jsonrpc.d.ts.map +1 -0
- package/packages/mailx-service/jsonrpc.js.map +1 -0
- package/packages/mailx-service/jsonrpc.ts +268 -0
- package/packages/mailx-service/tsconfig.json +9 -0
- package/packages/mailx-settings/.gitattributes +10 -0
- package/packages/mailx-settings/cloud.d.ts.map +1 -0
- package/packages/mailx-settings/cloud.js.map +1 -0
- package/packages/mailx-settings/cloud.ts +388 -0
- package/packages/mailx-settings/index.d.ts.map +1 -0
- package/packages/mailx-settings/index.js.map +1 -0
- package/packages/mailx-settings/index.ts +892 -0
- package/packages/mailx-settings/tsconfig.json +9 -0
- package/packages/mailx-store/.gitattributes +10 -0
- package/packages/mailx-store/db.d.ts.map +1 -0
- package/packages/mailx-store/db.js.map +1 -0
- package/packages/mailx-store/db.ts +2007 -0
- package/packages/mailx-store/file-store.d.ts.map +1 -0
- package/packages/mailx-store/file-store.js.map +1 -0
- package/packages/mailx-store/file-store.ts +82 -0
- package/packages/mailx-store/index.d.ts.map +1 -0
- package/packages/mailx-store/index.js.map +1 -0
- package/packages/mailx-store/index.ts +7 -0
- package/packages/mailx-store/tsconfig.json +9 -0
- package/packages/mailx-store-web/android-bootstrap.d.ts.map +1 -0
- package/packages/mailx-store-web/android-bootstrap.js.map +1 -0
- package/packages/mailx-store-web/android-bootstrap.ts +1262 -0
- package/packages/mailx-store-web/db.d.ts.map +1 -0
- package/packages/mailx-store-web/db.js.map +1 -0
- package/packages/mailx-store-web/db.ts +756 -0
- package/packages/mailx-store-web/gmail-api-web.d.ts.map +1 -0
- package/packages/mailx-store-web/gmail-api-web.js.map +1 -0
- package/packages/mailx-store-web/gmail-api-web.ts +11 -0
- package/packages/mailx-store-web/imap-web-provider.d.ts.map +1 -0
- package/packages/mailx-store-web/imap-web-provider.js.map +1 -0
- package/packages/mailx-store-web/imap-web-provider.ts +156 -0
- package/packages/mailx-store-web/index.d.ts.map +1 -0
- package/packages/mailx-store-web/index.js.map +1 -0
- package/packages/mailx-store-web/index.ts +10 -0
- package/packages/mailx-store-web/main-thread-host.d.ts.map +1 -0
- package/packages/mailx-store-web/main-thread-host.js.map +1 -0
- package/packages/mailx-store-web/main-thread-host.ts +322 -0
- package/packages/mailx-store-web/package.json +4 -4
- package/packages/mailx-store-web/provider-types.d.ts.map +1 -0
- package/packages/mailx-store-web/provider-types.js.map +1 -0
- package/packages/mailx-store-web/provider-types.ts +7 -0
- package/packages/mailx-store-web/sync-manager.d.ts.map +1 -0
- package/packages/mailx-store-web/sync-manager.js.map +1 -0
- package/packages/mailx-store-web/sync-manager.ts +508 -0
- package/packages/mailx-store-web/tsconfig.json +10 -0
- package/packages/mailx-store-web/web-jsonrpc.d.ts.map +1 -0
- package/packages/mailx-store-web/web-jsonrpc.js.map +1 -0
- package/packages/mailx-store-web/web-jsonrpc.ts +116 -0
- package/packages/mailx-store-web/web-message-store.d.ts.map +1 -0
- package/packages/mailx-store-web/web-message-store.js.map +1 -0
- package/packages/mailx-store-web/web-message-store.ts +97 -0
- package/packages/mailx-store-web/web-service.d.ts.map +1 -0
- package/packages/mailx-store-web/web-service.js.map +1 -0
- package/packages/mailx-store-web/web-service.ts +616 -0
- package/packages/mailx-store-web/web-settings.d.ts.map +1 -0
- package/packages/mailx-store-web/web-settings.js.map +1 -0
- package/packages/mailx-store-web/web-settings.ts +522 -0
- package/packages/mailx-store-web/worker-entry.d.ts.map +1 -0
- package/packages/mailx-store-web/worker-entry.js.map +1 -0
- package/packages/mailx-store-web/worker-entry.ts +215 -0
- package/packages/mailx-store-web/worker-tcp-transport.d.ts.map +1 -0
- package/packages/mailx-store-web/worker-tcp-transport.js.map +1 -0
- package/packages/mailx-store-web/worker-tcp-transport.ts +101 -0
- package/packages/mailx-types/.gitattributes +10 -0
- package/packages/mailx-types/index.d.ts.map +1 -0
- package/packages/mailx-types/index.js.map +1 -0
- package/packages/mailx-types/index.ts +498 -0
- package/packages/mailx-types/tsconfig.json +9 -0
- package/tsconfig.base.json +2 -1
- package/tsconfig.json +9 -0
- package/build-apk.cmd +0 -3
- package/npmg.bat +0 -6
- package/packages/mailx-imap/index.d.ts +0 -442
- package/packages/mailx-imap/index.js +0 -3669
- package/packages/mailx-imap/package.json +0 -25
- package/packages/mailx-imap/providers/gmail-api.d.ts +0 -8
- package/packages/mailx-imap/providers/gmail-api.js +0 -8
- package/packages/mailx-imap/providers/types.d.ts +0 -9
- package/packages/mailx-imap/providers/types.js +0 -9
- package/packages/mailx-imap/tsconfig.tsbuildinfo +0 -1
- package/rebuild.cmd +0 -23
- package/tdview.cmd +0 -2
- package/temp.ps1 +0 -10
- package/test-smtp-direct.mjs +0 -4
- package/unbash.cmd +0 -55
- 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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"}
|