@bobfrankston/rmfmail 1.2.169 → 1.2.171

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.
@@ -101,18 +101,34 @@ export async function cloudStat(filename) {
101
101
  return null;
102
102
  }
103
103
  }
104
+ /** Find a config file by name in the .rmfmail folder, DETERMINISTICALLY.
105
+ * Drive allows duplicate names; a second device signed into a different
106
+ * Google account created its own allowlist.jsonc in the shared folder and
107
+ * files?.[0] then made every device's pick a coin flip — stale bases and
108
+ * cross-account clobbers (2026-07-23 wipe). Preference order: a file THIS
109
+ * account owns, then newest modifiedTime. Duplicates are logged loudly. */
110
+ async function gDriveFindFile(filename, token) {
111
+ const q = encodeURIComponent(`name='${filename}' and '${gDriveFolderId}' in parents and trashed=false`);
112
+ const res = await globalThis.fetch(`https://www.googleapis.com/drive/v3/files?q=${q}&fields=files(id,modifiedTime,ownedByMe,capabilities(canEdit))`, { headers: { "Authorization": `Bearer ${token}` } });
113
+ if (!res.ok)
114
+ return null;
115
+ const files = (await res.json()).files || [];
116
+ if (files.length === 0)
117
+ return null;
118
+ if (files.length > 1) {
119
+ console.warn(`[settings] ${filename}: ${files.length} same-named files in the shared folder — using own/newest. Clean the duplicates (owners differ?).`);
120
+ files.sort((a, b) => (b.ownedByMe === true ? 1 : 0) - (a.ownedByMe === true ? 1 : 0) || String(b.modifiedTime).localeCompare(String(a.modifiedTime)));
121
+ }
122
+ const f = files[0];
123
+ return { id: f.id, modifiedTime: f.modifiedTime || '', ownedByMe: f.ownedByMe === true, capabilitiesCanEdit: f.capabilities?.canEdit !== false };
124
+ }
104
125
  async function gDriveRead(filename) {
105
126
  if (!tokenProvider || !gDriveFolderId)
106
127
  return null;
107
128
  try {
108
129
  const token = await tokenProvider();
109
- // Find file by name in folder
110
- const q = encodeURIComponent(`name='${filename}' and '${gDriveFolderId}' in parents and trashed=false`);
111
- const listRes = await globalThis.fetch(`https://www.googleapis.com/drive/v3/files?q=${q}&fields=files(id)`, { headers: { "Authorization": `Bearer ${token}` } });
112
- if (!listRes.ok)
113
- return null;
114
- const listData = await listRes.json();
115
- const fileId = listData.files?.[0]?.id;
130
+ const found = await gDriveFindFile(filename, token);
131
+ const fileId = found?.id;
116
132
  if (!fileId)
117
133
  return null;
118
134
  // Download content
@@ -131,14 +147,17 @@ async function gDriveWrite(filename, content) {
131
147
  return false;
132
148
  try {
133
149
  const token = await tokenProvider();
134
- // Check if file exists
135
- const q = encodeURIComponent(`name='${filename}' and '${gDriveFolderId}' in parents and trashed=false`);
136
- const listRes = await globalThis.fetch(`https://www.googleapis.com/drive/v3/files?q=${q}&fields=files(id)`, { headers: { "Authorization": `Bearer ${token}` } });
137
- if (!listRes.ok)
138
- return false;
139
- const listData = await listRes.json();
140
- const fileId = listData.files?.[0]?.id;
150
+ const found = await gDriveFindFile(filename, token);
151
+ const fileId = found?.id;
141
152
  if (fileId) {
153
+ // A file EXISTS but this account can't edit it (someone else's
154
+ // copy in a shared folder). Creating a same-named sibling is how
155
+ // the duplicate-file mess started — never fork; fail loudly and
156
+ // keep the change local-only.
157
+ if (!found.capabilitiesCanEdit) {
158
+ console.error(`[settings] ${filename}: existing shared file is not editable by this account — NOT creating a duplicate. Change kept locally.`);
159
+ return false;
160
+ }
142
161
  // Update existing
143
162
  const res = await globalThis.fetch(`https://www.googleapis.com/upload/drive/v3/files/${fileId}?uploadType=media`, {
144
163
  method: "PATCH",
@@ -148,6 +167,8 @@ async function gDriveWrite(filename, content) {
148
167
  },
149
168
  body: content,
150
169
  });
170
+ if (!res.ok)
171
+ console.error(`[settings] ${filename}: cloud update failed (${res.status})`);
151
172
  return res.ok;
152
173
  }
153
174
  else {
@@ -322,6 +343,33 @@ function parseJsonc(text) {
322
343
  return JSON.parse(stripped);
323
344
  }
324
345
  // ── Public API ──
346
+ // Stale-while-revalidate for SHARED JSONC files. Cache-first reads froze
347
+ // these files at their install-day snapshot: once IndexedDB had a copy,
348
+ // GDrive was never consulted again, so desktop edits (new allowlist
349
+ // entries, preference changes) never reached the phone (Bob 2026-07-22:
350
+ // "android doesn't seem to be honoring the email white list"). Reads stay
351
+ // instant off the cache; a throttled background pull updates the cache so
352
+ // the NEXT read sees the shared copy. Caches are caches, never the source
353
+ // of truth. (Per-device files like devices/<id>/state.json are exempt —
354
+ // only this device writes them.)
355
+ const SHARED_REFRESH_MS = 5 * 60_000;
356
+ const __lastSharedRefresh = new Map();
357
+ function refreshSharedFile(filename, cached) {
358
+ const now = Date.now();
359
+ if (now - (__lastSharedRefresh.get(filename) || 0) < SHARED_REFRESH_MS)
360
+ return;
361
+ __lastSharedRefresh.set(filename, now);
362
+ void (async () => {
363
+ try {
364
+ const fresh = await gDriveRead(filename);
365
+ if (fresh && fresh !== cached) {
366
+ await idbWrite(filename, fresh);
367
+ console.log(`[settings] ${filename} refreshed from GDrive (shared copy changed)`);
368
+ }
369
+ }
370
+ catch { /* offline / auth pending — keep serving the cache */ }
371
+ })();
372
+ }
325
373
  /** Load accounts — first from IndexedDB cache, then GDrive */
326
374
  export async function loadAccounts() {
327
375
  // Try local cache first
@@ -379,6 +427,7 @@ export async function saveAccounts(accounts) {
379
427
  export async function loadPreferences() {
380
428
  const cached = await idbRead("preferences.jsonc");
381
429
  if (cached) {
430
+ refreshSharedFile("preferences.jsonc", cached);
382
431
  try {
383
432
  const data = parseJsonc(cached);
384
433
  return {
@@ -435,6 +484,7 @@ export async function saveSettings(settings) {
435
484
  export async function loadAllowlist() {
436
485
  const cached = await idbRead("allowlist.jsonc");
437
486
  if (cached) {
487
+ refreshSharedFile("allowlist.jsonc", cached);
438
488
  try {
439
489
  return parseJsonc(cached);
440
490
  }
@@ -450,10 +500,55 @@ export async function loadAllowlist() {
450
500
  }
451
501
  return { ...DEFAULT_ALLOWLIST };
452
502
  }
453
- /** Save allowlist */
503
+ const ALLOWLIST_KEYS = ["senders", "domains", "recipients", "flaggedSenders", "flaggedDomains"];
504
+ function allowlistEntryCount(l) {
505
+ return ALLOWLIST_KEYS.reduce((n, k) => n + (Array.isArray(l?.[k]) ? l[k].length : 0), 0);
506
+ }
507
+ /** Read-modify-write against the FRESHEST copy. The load→mutate→save shape
508
+ * clobbered the shared file twice (2026-07-22/23): a phone whose cached
509
+ * base was 12 days stale wrote it back minus everything added since, and a
510
+ * fresh install whose base was DEFAULT_ALLOWLIST wiped the file to ~nothing
511
+ * (restored from Drive revisions). Mutations now apply to the live cloud
512
+ * copy when reachable; the cache is only the offline fallback. */
513
+ export async function updateAllowlist(mutate) {
514
+ let base = null;
515
+ try {
516
+ const fresh = await gDriveRead("allowlist.jsonc");
517
+ if (fresh) {
518
+ await idbWrite("allowlist.jsonc", fresh);
519
+ try {
520
+ base = parseJsonc(fresh);
521
+ }
522
+ catch { /* corrupt cloud copy — fall back */ }
523
+ }
524
+ }
525
+ catch { /* offline / auth pending */ }
526
+ if (!base)
527
+ base = await loadAllowlist();
528
+ const out = mutate(base) || base;
529
+ await saveAllowlist(out);
530
+ return out;
531
+ }
532
+ /** Save allowlist. Backstop shrink guard: a write that would discard more
533
+ * than half of a substantial cloud copy is the wipe signature (stale or
534
+ * default base) — keep it out of the shared file. The local cache still
535
+ * updates so the device's own view is consistent; the next
536
+ * stale-while-revalidate pull re-syncs it with the cloud. */
454
537
  export async function saveAllowlist(list) {
455
538
  const content = JSON.stringify(list, null, 2);
456
539
  await idbWrite("allowlist.jsonc", content);
540
+ try {
541
+ const cloudRaw = await gDriveRead("allowlist.jsonc");
542
+ if (cloudRaw) {
543
+ const cloudCount = allowlistEntryCount(parseJsonc(cloudRaw));
544
+ const newCount = allowlistEntryCount(list);
545
+ if (cloudCount > 10 && newCount < cloudCount / 2) {
546
+ console.error(`[settings] REFUSING allowlist cloud write: ${cloudCount} → ${newCount} entries (stale/default base — see 2026-07-23 wipe). Local cache updated only.`);
547
+ return;
548
+ }
549
+ }
550
+ }
551
+ catch { /* cloud unreadable — proceed; the guard only fires when it can verify */ }
457
552
  await gDriveWrite("allowlist.jsonc", content);
458
553
  }
459
554
  /** Load autocomplete settings */
@@ -1 +1 @@
1
- {"version":3,"file":"web-settings.js","sourceRoot":"","sources":["web-settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-settings.js","sourceRoot":"","sources":["web-settings.ts"],"names":[],"mappings":"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"}
@@ -112,19 +112,36 @@ export async function cloudStat(filename: string): Promise<{ id: string; modifie
112
112
  }
113
113
  }
114
114
 
115
+
116
+ /** Find a config file by name in the .rmfmail folder, DETERMINISTICALLY.
117
+ * Drive allows duplicate names; a second device signed into a different
118
+ * Google account created its own allowlist.jsonc in the shared folder and
119
+ * files?.[0] then made every device's pick a coin flip — stale bases and
120
+ * cross-account clobbers (2026-07-23 wipe). Preference order: a file THIS
121
+ * account owns, then newest modifiedTime. Duplicates are logged loudly. */
122
+ async function gDriveFindFile(filename: string, token: string): Promise<{ id: string; modifiedTime: string; ownedByMe: boolean; capabilitiesCanEdit: boolean } | null> {
123
+ const q = encodeURIComponent(`name='${filename}' and '${gDriveFolderId}' in parents and trashed=false`);
124
+ const res = await globalThis.fetch(
125
+ `https://www.googleapis.com/drive/v3/files?q=${q}&fields=files(id,modifiedTime,ownedByMe,capabilities(canEdit))`,
126
+ { headers: { "Authorization": `Bearer ${token}` } }
127
+ );
128
+ if (!res.ok) return null;
129
+ const files: any[] = ((await res.json()) as any).files || [];
130
+ if (files.length === 0) return null;
131
+ if (files.length > 1) {
132
+ console.warn(`[settings] ${filename}: ${files.length} same-named files in the shared folder — using own/newest. Clean the duplicates (owners differ?).`);
133
+ files.sort((a, b) => (b.ownedByMe === true ? 1 : 0) - (a.ownedByMe === true ? 1 : 0) || String(b.modifiedTime).localeCompare(String(a.modifiedTime)));
134
+ }
135
+ const f = files[0];
136
+ return { id: f.id, modifiedTime: f.modifiedTime || '', ownedByMe: f.ownedByMe === true, capabilitiesCanEdit: f.capabilities?.canEdit !== false };
137
+ }
138
+
115
139
  async function gDriveRead(filename: string): Promise<string | null> {
116
140
  if (!tokenProvider || !gDriveFolderId) return null;
117
141
  try {
118
142
  const token = await tokenProvider();
119
- // Find file by name in folder
120
- const q = encodeURIComponent(`name='${filename}' and '${gDriveFolderId}' in parents and trashed=false`);
121
- const listRes = await globalThis.fetch(
122
- `https://www.googleapis.com/drive/v3/files?q=${q}&fields=files(id)`,
123
- { headers: { "Authorization": `Bearer ${token}` } }
124
- );
125
- if (!listRes.ok) return null;
126
- const listData = await listRes.json() as any;
127
- const fileId = listData.files?.[0]?.id;
143
+ const found = await gDriveFindFile(filename, token);
144
+ const fileId = found?.id;
128
145
  if (!fileId) return null;
129
146
  // Download content
130
147
  const res = await globalThis.fetch(
@@ -143,17 +160,18 @@ async function gDriveWrite(filename: string, content: string): Promise<boolean>
143
160
  if (!tokenProvider || !gDriveFolderId) return false;
144
161
  try {
145
162
  const token = await tokenProvider();
146
- // Check if file exists
147
- const q = encodeURIComponent(`name='${filename}' and '${gDriveFolderId}' in parents and trashed=false`);
148
- const listRes = await globalThis.fetch(
149
- `https://www.googleapis.com/drive/v3/files?q=${q}&fields=files(id)`,
150
- { headers: { "Authorization": `Bearer ${token}` } }
151
- );
152
- if (!listRes.ok) return false;
153
- const listData = await listRes.json() as any;
154
- const fileId = listData.files?.[0]?.id;
163
+ const found = await gDriveFindFile(filename, token);
164
+ const fileId = found?.id;
155
165
 
156
166
  if (fileId) {
167
+ // A file EXISTS but this account can't edit it (someone else's
168
+ // copy in a shared folder). Creating a same-named sibling is how
169
+ // the duplicate-file mess started — never fork; fail loudly and
170
+ // keep the change local-only.
171
+ if (!found!.capabilitiesCanEdit) {
172
+ console.error(`[settings] ${filename}: existing shared file is not editable by this account — NOT creating a duplicate. Change kept locally.`);
173
+ return false;
174
+ }
157
175
  // Update existing
158
176
  const res = await globalThis.fetch(
159
177
  `https://www.googleapis.com/upload/drive/v3/files/${fileId}?uploadType=media`,
@@ -166,6 +184,7 @@ async function gDriveWrite(filename: string, content: string): Promise<boolean>
166
184
  body: content,
167
185
  }
168
186
  );
187
+ if (!res.ok) console.error(`[settings] ${filename}: cloud update failed (${res.status})`);
169
188
  return res.ok;
170
189
  } else {
171
190
  // Create new
@@ -356,6 +375,32 @@ function parseJsonc(text: string): any {
356
375
 
357
376
  // ── Public API ──
358
377
 
378
+ // Stale-while-revalidate for SHARED JSONC files. Cache-first reads froze
379
+ // these files at their install-day snapshot: once IndexedDB had a copy,
380
+ // GDrive was never consulted again, so desktop edits (new allowlist
381
+ // entries, preference changes) never reached the phone (Bob 2026-07-22:
382
+ // "android doesn't seem to be honoring the email white list"). Reads stay
383
+ // instant off the cache; a throttled background pull updates the cache so
384
+ // the NEXT read sees the shared copy. Caches are caches, never the source
385
+ // of truth. (Per-device files like devices/<id>/state.json are exempt —
386
+ // only this device writes them.)
387
+ const SHARED_REFRESH_MS = 5 * 60_000;
388
+ const __lastSharedRefresh = new Map<string, number>();
389
+ function refreshSharedFile(filename: string, cached: string): void {
390
+ const now = Date.now();
391
+ if (now - (__lastSharedRefresh.get(filename) || 0) < SHARED_REFRESH_MS) return;
392
+ __lastSharedRefresh.set(filename, now);
393
+ void (async () => {
394
+ try {
395
+ const fresh = await gDriveRead(filename);
396
+ if (fresh && fresh !== cached) {
397
+ await idbWrite(filename, fresh);
398
+ console.log(`[settings] ${filename} refreshed from GDrive (shared copy changed)`);
399
+ }
400
+ } catch { /* offline / auth pending — keep serving the cache */ }
401
+ })();
402
+ }
403
+
359
404
  /** Load accounts — first from IndexedDB cache, then GDrive */
360
405
  export async function loadAccounts(): Promise<AccountConfig[]> {
361
406
  // Try local cache first
@@ -407,6 +452,7 @@ export async function saveAccounts(accounts: AccountConfig[]): Promise<void> {
407
452
  export async function loadPreferences(): Promise<typeof DEFAULT_PREFERENCES> {
408
453
  const cached = await idbRead("preferences.jsonc");
409
454
  if (cached) {
455
+ refreshSharedFile("preferences.jsonc", cached);
410
456
  try {
411
457
  const data = parseJsonc(cached);
412
458
  return {
@@ -465,6 +511,7 @@ export async function saveSettings(settings: MailxSettings): Promise<void> {
465
511
  export async function loadAllowlist(): Promise<typeof DEFAULT_ALLOWLIST> {
466
512
  const cached = await idbRead("allowlist.jsonc");
467
513
  if (cached) {
514
+ refreshSharedFile("allowlist.jsonc", cached);
468
515
  try { return parseJsonc(cached); } catch { /* */ }
469
516
  }
470
517
  const content = await gDriveRead("allowlist.jsonc");
@@ -475,10 +522,51 @@ export async function loadAllowlist(): Promise<typeof DEFAULT_ALLOWLIST> {
475
522
  return { ...DEFAULT_ALLOWLIST };
476
523
  }
477
524
 
478
- /** Save allowlist */
525
+ const ALLOWLIST_KEYS = ["senders", "domains", "recipients", "flaggedSenders", "flaggedDomains"] as const;
526
+ function allowlistEntryCount(l: any): number {
527
+ return ALLOWLIST_KEYS.reduce((n, k) => n + (Array.isArray(l?.[k]) ? l[k].length : 0), 0);
528
+ }
529
+
530
+ /** Read-modify-write against the FRESHEST copy. The load→mutate→save shape
531
+ * clobbered the shared file twice (2026-07-22/23): a phone whose cached
532
+ * base was 12 days stale wrote it back minus everything added since, and a
533
+ * fresh install whose base was DEFAULT_ALLOWLIST wiped the file to ~nothing
534
+ * (restored from Drive revisions). Mutations now apply to the live cloud
535
+ * copy when reachable; the cache is only the offline fallback. */
536
+ export async function updateAllowlist(mutate: (list: typeof DEFAULT_ALLOWLIST) => typeof DEFAULT_ALLOWLIST | void): Promise<typeof DEFAULT_ALLOWLIST> {
537
+ let base: typeof DEFAULT_ALLOWLIST | null = null;
538
+ try {
539
+ const fresh = await gDriveRead("allowlist.jsonc");
540
+ if (fresh) {
541
+ await idbWrite("allowlist.jsonc", fresh);
542
+ try { base = parseJsonc(fresh); } catch { /* corrupt cloud copy — fall back */ }
543
+ }
544
+ } catch { /* offline / auth pending */ }
545
+ if (!base) base = await loadAllowlist();
546
+ const out = mutate(base) || base;
547
+ await saveAllowlist(out);
548
+ return out;
549
+ }
550
+
551
+ /** Save allowlist. Backstop shrink guard: a write that would discard more
552
+ * than half of a substantial cloud copy is the wipe signature (stale or
553
+ * default base) — keep it out of the shared file. The local cache still
554
+ * updates so the device's own view is consistent; the next
555
+ * stale-while-revalidate pull re-syncs it with the cloud. */
479
556
  export async function saveAllowlist(list: typeof DEFAULT_ALLOWLIST): Promise<void> {
480
557
  const content = JSON.stringify(list, null, 2);
481
558
  await idbWrite("allowlist.jsonc", content);
559
+ try {
560
+ const cloudRaw = await gDriveRead("allowlist.jsonc");
561
+ if (cloudRaw) {
562
+ const cloudCount = allowlistEntryCount(parseJsonc(cloudRaw));
563
+ const newCount = allowlistEntryCount(list);
564
+ if (cloudCount > 10 && newCount < cloudCount / 2) {
565
+ console.error(`[settings] REFUSING allowlist cloud write: ${cloudCount} → ${newCount} entries (stale/default base — see 2026-07-23 wipe). Local cache updated only.`);
566
+ return;
567
+ }
568
+ }
569
+ } catch { /* cloud unreadable — proceed; the guard only fires when it can verify */ }
482
570
  await gDriveWrite("allowlist.jsonc", content);
483
571
  }
484
572