@bobfrankston/rmfmail 1.2.234 → 1.2.236
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/TODO.md +6 -1
- package/client/app.bundle.js.map +1 -1
- package/client/compose/compose.bundle.js +28 -4
- package/client/compose/compose.bundle.js.map +2 -2
- package/client/compose/compose.js +46 -5
- package/client/compose/compose.js.map +1 -1
- package/client/compose/compose.ts +37 -4
- package/client/lib/api-client.ts +1 -1
- package/package.json +1 -1
- package/packages/mailx-service/index.d.ts +21 -2
- package/packages/mailx-service/index.d.ts.map +1 -1
- package/packages/mailx-service/index.js +121 -7
- package/packages/mailx-service/index.js.map +1 -1
- package/packages/mailx-service/index.ts +132 -9
- package/packages/mailx-service/test/word-edit-guard.test.mjs +92 -0
- package/packages/mailx-types/mailx-api.d.ts +3 -0
- package/packages/mailx-types/mailx-api.d.ts.map +1 -1
- package/packages/mailx-types/mailx-api.ts +3 -1
- /package/packages/mailx-imap/{node_modules.npmglobalize-stash-38492 → node_modules.npmglobalize-stash-15996}/.package-lock.json +0 -0
|
@@ -1097,9 +1097,34 @@ export class MailxService implements MailxApi {
|
|
|
1097
1097
|
|
|
1098
1098
|
// ── External edit in Microsoft Word ──
|
|
1099
1099
|
|
|
1100
|
-
/** Per-session map: editId → temp file path
|
|
1101
|
-
* Lives in memory only — cleared when the user closes
|
|
1102
|
-
|
|
1100
|
+
/** Per-session map: editId → temp file path, which editor got it, and
|
|
1101
|
+
* watcher cleanup. Lives in memory only — cleared when the user closes
|
|
1102
|
+
* compose or sends. */
|
|
1103
|
+
private wordEdits = new Map<string, {
|
|
1104
|
+
path: string;
|
|
1105
|
+
stop: () => void;
|
|
1106
|
+
opener: string;
|
|
1107
|
+
/** The compose HTML this file was converted FROM. Lets a later click
|
|
1108
|
+
* tell "nothing has changed, just show me the editor again" from
|
|
1109
|
+
* "I've typed more since, give me a fresh document". */
|
|
1110
|
+
html: string;
|
|
1111
|
+
/** Set when the editor is known to have closed the document (the
|
|
1112
|
+
* win32 Word autosave sidecar reports this). A closed session must
|
|
1113
|
+
* not be re-activated — the file on disk no longer reflects what the
|
|
1114
|
+
* user would expect to see. */
|
|
1115
|
+
closed?: boolean;
|
|
1116
|
+
}>();
|
|
1117
|
+
|
|
1118
|
+
/** In-flight opens, keyed by editId. Converting a body to .docx and
|
|
1119
|
+
* launching Word takes seconds, during which the button looks dead — so
|
|
1120
|
+
* the user clicks it again, and again. Each of those clicks used to
|
|
1121
|
+
* convert its own timestamped file and spawn its own Word window, and
|
|
1122
|
+
* because each open re-armed the watcher on ITS file, only the LAST
|
|
1123
|
+
* window's saves came back: editing in one of the earlier windows was
|
|
1124
|
+
* silently discarded (Bob 2026-08-09: "it shouldn't spawn multiple
|
|
1125
|
+
* instances but just ignore extras"). Extra clicks now join the first
|
|
1126
|
+
* open's promise instead of starting a second one. */
|
|
1127
|
+
private wordEditOpens = new Map<string, Promise<{ ok: boolean; path: string; opener: string; reused?: boolean; superseded?: boolean }>>();
|
|
1103
1128
|
|
|
1104
1129
|
/** Hand the current compose body off to Microsoft Word for editing. Writes
|
|
1105
1130
|
* the HTML to `~/.mailx/external-edit/<editId>.html`, opens it via the
|
|
@@ -1111,7 +1136,79 @@ export class MailxService implements MailxApi {
|
|
|
1111
1136
|
* Windows-only by current default — on Mac/Linux there's no equivalent
|
|
1112
1137
|
* reliable round-trip. The compose toolbar should hide the button on
|
|
1113
1138
|
* non-win32 platforms. */
|
|
1114
|
-
async openInWord(editId: string, html: string, fromPopout = false): Promise<{ ok: boolean; path: string; opener: string }> {
|
|
1139
|
+
async openInWord(editId: string, html: string, fromPopout = false): Promise<{ ok: boolean; path: string; opener: string; reused?: boolean; superseded?: boolean }> {
|
|
1140
|
+
// A second click while the first open is still working joins it —
|
|
1141
|
+
// same promise, same file, one Word window.
|
|
1142
|
+
const inFlight = this.wordEditOpens.get(editId);
|
|
1143
|
+
if (inFlight) {
|
|
1144
|
+
console.log(` [word-edit] open already in progress for ${editId} — ignoring extra click`);
|
|
1145
|
+
return inFlight;
|
|
1146
|
+
}
|
|
1147
|
+
// Re-activate the existing document rather than converting a second
|
|
1148
|
+
// one — but only while it is plausibly still OPEN in the editor with
|
|
1149
|
+
// the SAME content we handed over. Two independent signals, because
|
|
1150
|
+
// neither covers every platform:
|
|
1151
|
+
// - `closed` is definitive but exists only for Word on Windows,
|
|
1152
|
+
// where the autosave sidecar sees the document go away;
|
|
1153
|
+
// - an unchanged body means a re-conversion would produce the same
|
|
1154
|
+
// document anyway, so re-opening the existing one is right for
|
|
1155
|
+
// any editor.
|
|
1156
|
+
// Re-launching the same path makes the OS raise the window that
|
|
1157
|
+
// already holds it instead of opening a second copy. Newer
|
|
1158
|
+
// compose-side text is deliberately NOT pushed into an open document:
|
|
1159
|
+
// that would fight whatever the user is typing in Word.
|
|
1160
|
+
const live = this.wordEdits.get(editId);
|
|
1161
|
+
const liveOnDisk = !!live && !live.closed && fs.existsSync(live.path);
|
|
1162
|
+
if (liveOnDisk && live!.html === html) {
|
|
1163
|
+
console.log(` [word-edit] ${live!.path} already open via ${live!.opener} — re-activating, not re-opening`);
|
|
1164
|
+
void this.relaunchExternal(live!.path, live!.opener);
|
|
1165
|
+
return { ok: true, path: live!.path, opener: live!.opener, reused: true };
|
|
1166
|
+
}
|
|
1167
|
+
// Body changed since the hand-off: the user is asking for a document
|
|
1168
|
+
// that reflects what rmfmail holds now, so a fresh one it is. The old
|
|
1169
|
+
// window may still be sitting there, and openInWordUncached stops its
|
|
1170
|
+
// watcher — saves made in it from here on go nowhere. Report that so
|
|
1171
|
+
// the UI can say it out loud; silently ignoring those saves is the
|
|
1172
|
+
// failure mode this whole change exists to remove.
|
|
1173
|
+
const superseded = liveOnDisk;
|
|
1174
|
+
const open = this.openInWordUncached(editId, html, fromPopout)
|
|
1175
|
+
.then(r => (superseded ? { ...r, superseded: true } : r))
|
|
1176
|
+
.finally(() => { this.wordEditOpens.delete(editId); });
|
|
1177
|
+
this.wordEditOpens.set(editId, open);
|
|
1178
|
+
return open;
|
|
1179
|
+
}
|
|
1180
|
+
|
|
1181
|
+
/** Re-launch an already-written external-edit file. Same launch commands
|
|
1182
|
+
* as the first open; the OS activates the existing window when the
|
|
1183
|
+
* document is already loaded. Failure is not fatal — the file is there
|
|
1184
|
+
* and the watcher is still armed. */
|
|
1185
|
+
private async relaunchExternal(filePath: string, opener: string): Promise<void> {
|
|
1186
|
+
try {
|
|
1187
|
+
const { spawn } = await import("node:child_process");
|
|
1188
|
+
const go = (cmd: string, args: string[]) => {
|
|
1189
|
+
const child = spawn(cmd, args, { detached: true, stdio: "ignore", windowsHide: true });
|
|
1190
|
+
child.on("error", () => { /* editor vanished — nothing to do */ });
|
|
1191
|
+
child.unref();
|
|
1192
|
+
};
|
|
1193
|
+
if (process.platform === "win32") {
|
|
1194
|
+
if (opener === "word") go("cmd", ["/c", "start", "", "/B", "winword.exe", filePath]);
|
|
1195
|
+
else if (opener === "libreoffice") go("cmd", ["/c", "start", "", "/B", "soffice.exe", "--writer", filePath]);
|
|
1196
|
+
else go("cmd", ["/c", "start", "", filePath]);
|
|
1197
|
+
return;
|
|
1198
|
+
}
|
|
1199
|
+
if (process.platform === "darwin") {
|
|
1200
|
+
if (opener === "word") go("open", ["-a", "Microsoft Word", filePath]);
|
|
1201
|
+
else if (opener === "libreoffice") go("open", ["-a", "LibreOffice", filePath]);
|
|
1202
|
+
else go("open", [filePath]);
|
|
1203
|
+
return;
|
|
1204
|
+
}
|
|
1205
|
+
go("xdg-open", [filePath]);
|
|
1206
|
+
} catch (e: any) {
|
|
1207
|
+
console.warn(` [word-edit] re-activate failed: ${e?.message || e}`);
|
|
1208
|
+
}
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
private async openInWordUncached(editId: string, html: string, fromPopout = false): Promise<{ ok: boolean; path: string; opener: string }> {
|
|
1115
1212
|
const dir = path.join(getConfigDir(), "external-edit");
|
|
1116
1213
|
fs.mkdirSync(dir, { recursive: true });
|
|
1117
1214
|
// Pre-convert to .docx (Word's native format) so Save in Word writes
|
|
@@ -1179,7 +1276,7 @@ export class MailxService implements MailxApi {
|
|
|
1179
1276
|
const htmlPath = path.join(dir, `${fileBase}.html`);
|
|
1180
1277
|
fs.writeFileSync(htmlPath, wrapped, "utf-8");
|
|
1181
1278
|
// Use the .html path instead of .docx for both launch and watch.
|
|
1182
|
-
return this.openExternalHtmlFallback(editId, htmlPath);
|
|
1279
|
+
return this.openExternalHtmlFallback(editId, htmlPath, html);
|
|
1183
1280
|
}
|
|
1184
1281
|
|
|
1185
1282
|
// Stop any existing watcher for this edit (re-open re-arms cleanly).
|
|
@@ -1297,7 +1394,14 @@ export class MailxService implements MailxApi {
|
|
|
1297
1394
|
// just close()). Raising main over a compose POPOUT would
|
|
1298
1395
|
// bury the very window the user needs, so the forwarder
|
|
1299
1396
|
// uses this to skip the focus in that case.
|
|
1300
|
-
if (code === 0)
|
|
1397
|
+
if (code === 0) {
|
|
1398
|
+
// Document closed: the next Edit-in-Word click must
|
|
1399
|
+
// convert afresh rather than re-raise a window that
|
|
1400
|
+
// is no longer there.
|
|
1401
|
+
const entry = this.wordEdits.get(editId);
|
|
1402
|
+
if (entry) entry.closed = true;
|
|
1403
|
+
this.imapManager.emit("wordEditClosed", { editId, fromPopout });
|
|
1404
|
+
}
|
|
1301
1405
|
});
|
|
1302
1406
|
console.log(` [word-edit] autosave sidecar armed — closing Word is the only step`);
|
|
1303
1407
|
} catch (e: any) {
|
|
@@ -1333,6 +1437,7 @@ export class MailxService implements MailxApi {
|
|
|
1333
1437
|
const sig = `${savedPath}:${stat.size}:${stat.mtimeMs}`;
|
|
1334
1438
|
if (sig === lastSig) return;
|
|
1335
1439
|
lastSig = sig;
|
|
1440
|
+
console.log(` [word-edit] file changed: ${name} (${stat.size} bytes) — converting`);
|
|
1336
1441
|
try {
|
|
1337
1442
|
let inner: string;
|
|
1338
1443
|
if (isDocx) {
|
|
@@ -1357,6 +1462,15 @@ export class MailxService implements MailxApi {
|
|
|
1357
1462
|
// vanished: "it acts as if it never happened" (Bob
|
|
1358
1463
|
// 2026-08-06). Focus belongs at the END of the session
|
|
1359
1464
|
// (wordEditClosed), not on every keystroke-triggered save.
|
|
1465
|
+
if (!inner.trim()) {
|
|
1466
|
+
// Never mirror an empty conversion into compose: that
|
|
1467
|
+
// replaces the user's message with nothing, which
|
|
1468
|
+
// reads as "it lost my work" rather than "the convert
|
|
1469
|
+
// failed".
|
|
1470
|
+
console.error(` [word-edit] conversion produced NO content for ${name} — not mirroring (message left as-is)`);
|
|
1471
|
+
return;
|
|
1472
|
+
}
|
|
1473
|
+
console.log(` [word-edit] save mirrored: ${name} → ${inner.length} chars of HTML for ${editId}`);
|
|
1360
1474
|
this.imapManager.emit("wordEditUpdated", { editId, html: inner });
|
|
1361
1475
|
} catch (e: any) {
|
|
1362
1476
|
console.error(` [word-edit] read after save failed: ${e.message}`);
|
|
@@ -1368,7 +1482,7 @@ export class MailxService implements MailxApi {
|
|
|
1368
1482
|
if (debounce) clearTimeout(debounce);
|
|
1369
1483
|
try { autosaveChild?.kill(); } catch { /* */ }
|
|
1370
1484
|
};
|
|
1371
|
-
this.wordEdits.set(editId, { path: filePath, stop });
|
|
1485
|
+
this.wordEdits.set(editId, { path: filePath, stop, opener, html });
|
|
1372
1486
|
|
|
1373
1487
|
return { ok: opener !== "none", path: filePath, opener };
|
|
1374
1488
|
}
|
|
@@ -1377,7 +1491,7 @@ export class MailxService implements MailxApi {
|
|
|
1377
1491
|
* .html-based flow: writes <editId>.html, watches it, emits the body
|
|
1378
1492
|
* content on save. User has to Save-As-Web-Page in Word for the file
|
|
1379
1493
|
* to update — but at least the edit path works. */
|
|
1380
|
-
private async openExternalHtmlFallback(editId: string, filePath: string): Promise<{ ok: boolean; path: string; opener: string }> {
|
|
1494
|
+
private async openExternalHtmlFallback(editId: string, filePath: string, html: string): Promise<{ ok: boolean; path: string; opener: string }> {
|
|
1381
1495
|
const dir = path.dirname(filePath);
|
|
1382
1496
|
this.wordEdits.get(editId)?.stop();
|
|
1383
1497
|
const { spawn } = await import("node:child_process");
|
|
@@ -1438,6 +1552,15 @@ export class MailxService implements MailxApi {
|
|
|
1438
1552
|
const bm = updatedHtml.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
|
|
1439
1553
|
inner = bm ? bm[1] : updatedHtml;
|
|
1440
1554
|
}
|
|
1555
|
+
if (!inner.trim()) {
|
|
1556
|
+
// Never mirror an empty conversion into compose: that
|
|
1557
|
+
// replaces the user's message with nothing, which
|
|
1558
|
+
// reads as "it lost my work" rather than "the convert
|
|
1559
|
+
// failed".
|
|
1560
|
+
console.error(` [word-edit] conversion produced NO content for ${name} — not mirroring (message left as-is)`);
|
|
1561
|
+
return;
|
|
1562
|
+
}
|
|
1563
|
+
console.log(` [word-edit] save mirrored: ${name} → ${inner.length} chars of HTML for ${editId}`);
|
|
1441
1564
|
this.imapManager.emit("wordEditUpdated", { editId, html: inner });
|
|
1442
1565
|
} catch (e: any) {
|
|
1443
1566
|
console.error(` [word-edit fallback] read failed: ${e.message}`);
|
|
@@ -1445,7 +1568,7 @@ export class MailxService implements MailxApi {
|
|
|
1445
1568
|
}, 300);
|
|
1446
1569
|
});
|
|
1447
1570
|
const stop = () => { try { watcher.close(); } catch { /* */ } if (debounce) clearTimeout(debounce); };
|
|
1448
|
-
this.wordEdits.set(editId, { path: filePath, stop });
|
|
1571
|
+
this.wordEdits.set(editId, { path: filePath, stop, opener, html });
|
|
1449
1572
|
return { ok: opener !== "none", path: filePath, opener };
|
|
1450
1573
|
}
|
|
1451
1574
|
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exercises the openInWord de-duplication on the REAL compiled service class,
|
|
3
|
+
* with only the expensive tail (convert + launch) stubbed — the guard itself,
|
|
4
|
+
* the session map and the flags are the shipped code.
|
|
5
|
+
*/
|
|
6
|
+
import fs from "node:fs";
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
import os from "node:os";
|
|
9
|
+
import assert from "node:assert";
|
|
10
|
+
|
|
11
|
+
const { MailxService } = await import("file:///Y:/dev/email/mailx/app/packages/mailx-service/index.js");
|
|
12
|
+
|
|
13
|
+
const svc = Object.create(MailxService.prototype);
|
|
14
|
+
svc.wordEdits = new Map();
|
|
15
|
+
svc.wordEditOpens = new Map();
|
|
16
|
+
|
|
17
|
+
const dir = fs.mkdtempSync(path.join(os.tmpdir(), "wordguard-"));
|
|
18
|
+
let uncachedCalls = 0;
|
|
19
|
+
let relaunches = 0;
|
|
20
|
+
let resolveGate = null;
|
|
21
|
+
|
|
22
|
+
// stub the expensive tail: pretend to convert + launch, register the session
|
|
23
|
+
svc.openInWordUncached = async (editId, html) => {
|
|
24
|
+
uncachedCalls++;
|
|
25
|
+
if (resolveGate) await resolveGate; // hold the "conversion" open
|
|
26
|
+
const filePath = path.join(dir, `${editId}-${uncachedCalls}.docx`);
|
|
27
|
+
fs.writeFileSync(filePath, "docx");
|
|
28
|
+
svc.wordEdits.get(editId)?.stop?.();
|
|
29
|
+
svc.wordEdits.set(editId, { path: filePath, stop: () => {}, opener: "word", html });
|
|
30
|
+
return { ok: true, path: filePath, opener: "word" };
|
|
31
|
+
};
|
|
32
|
+
svc.relaunchExternal = async () => { relaunches++; };
|
|
33
|
+
|
|
34
|
+
const ID = "compose-1";
|
|
35
|
+
const BODY = "<p>hello</p>";
|
|
36
|
+
|
|
37
|
+
// 1. Rapid repeat clicks during a slow open → ONE conversion, one window.
|
|
38
|
+
let release;
|
|
39
|
+
resolveGate = new Promise(r => { release = r; });
|
|
40
|
+
const clicks = [svc.openInWord(ID, BODY), svc.openInWord(ID, BODY), svc.openInWord(ID, BODY)];
|
|
41
|
+
release();
|
|
42
|
+
const results = await Promise.all(clicks);
|
|
43
|
+
assert.strictEqual(uncachedCalls, 1, `3 rapid clicks must convert once, got ${uncachedCalls}`);
|
|
44
|
+
assert.strictEqual(new Set(results.map(r => r.path)).size, 1, "all clicks must get the same file");
|
|
45
|
+
resolveGate = null;
|
|
46
|
+
|
|
47
|
+
// 2. Click again later, body unchanged → re-activate, no new document.
|
|
48
|
+
const again = await svc.openInWord(ID, BODY);
|
|
49
|
+
assert.strictEqual(uncachedCalls, 1, "unchanged body must not convert again");
|
|
50
|
+
assert.strictEqual(relaunches, 1, "unchanged body must re-raise the existing window");
|
|
51
|
+
assert.strictEqual(again.reused, true, "caller must be told it was a re-activation");
|
|
52
|
+
|
|
53
|
+
// 3. Body changed since hand-off → fresh document, and say the old one is dead.
|
|
54
|
+
const changed = await svc.openInWord(ID, "<p>hello, more</p>");
|
|
55
|
+
assert.strictEqual(uncachedCalls, 2, "changed body must produce a fresh document");
|
|
56
|
+
assert.strictEqual(changed.superseded, true, "must report that the earlier window is now orphaned");
|
|
57
|
+
assert.notStrictEqual(changed.path, again.path, "fresh document must be a different file");
|
|
58
|
+
|
|
59
|
+
// 4. Editor closed (sidecar reported it) → next click converts afresh.
|
|
60
|
+
svc.wordEdits.get(ID).closed = true;
|
|
61
|
+
const afterClose = await svc.openInWord(ID, "<p>hello, more</p>");
|
|
62
|
+
assert.strictEqual(uncachedCalls, 3, "a closed document must not be re-activated");
|
|
63
|
+
assert.ok(!afterClose.reused, "closed session must not report reuse");
|
|
64
|
+
assert.ok(!afterClose.superseded, "a closed window is not superseded — it is gone");
|
|
65
|
+
|
|
66
|
+
// 5. File deleted underneath us → convert afresh, no crash.
|
|
67
|
+
fs.unlinkSync(svc.wordEdits.get(ID).path);
|
|
68
|
+
const afterUnlink = await svc.openInWord(ID, "<p>hello, more</p>");
|
|
69
|
+
assert.strictEqual(uncachedCalls, 4, "missing file must force a fresh conversion");
|
|
70
|
+
assert.ok(!afterUnlink.reused);
|
|
71
|
+
|
|
72
|
+
// 6. Two different compose windows must not interfere.
|
|
73
|
+
const other = await svc.openInWord("compose-2", BODY);
|
|
74
|
+
assert.strictEqual(uncachedCalls, 5, "a different editId is a different document");
|
|
75
|
+
assert.notStrictEqual(other.path, afterUnlink.path);
|
|
76
|
+
|
|
77
|
+
// 7. A failing open must not wedge the guard — the next click retries.
|
|
78
|
+
svc.openInWordUncached = async () => { throw new Error("html-to-docx exploded"); };
|
|
79
|
+
await assert.rejects(() => svc.openInWord("compose-3", BODY));
|
|
80
|
+
let retried = false;
|
|
81
|
+
svc.openInWordUncached = async (editId, html) => {
|
|
82
|
+
retried = true;
|
|
83
|
+
const p = path.join(dir, "retry.docx");
|
|
84
|
+
fs.writeFileSync(p, "docx");
|
|
85
|
+
svc.wordEdits.set(editId, { path: p, stop: () => {}, opener: "word", html });
|
|
86
|
+
return { ok: true, path: p, opener: "word" };
|
|
87
|
+
};
|
|
88
|
+
await svc.openInWord("compose-3", BODY);
|
|
89
|
+
assert.ok(retried, "a failed open must leave the button usable, not latched");
|
|
90
|
+
|
|
91
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
92
|
+
console.log("word-edit guard: 7 scenarios passed");
|
|
@@ -229,10 +229,13 @@ export interface MailxApi {
|
|
|
229
229
|
}>;
|
|
230
230
|
logClientEvent?(...args: any[]): void | Promise<void>;
|
|
231
231
|
getVersion?(): any | Promise<any>;
|
|
232
|
+
/** `reused` ⇒ this draft was already open in an editor; that window was
|
|
233
|
+
* raised instead of a second copy being spawned. */
|
|
232
234
|
openInWord?(editId: string, html: string): Promise<{
|
|
233
235
|
ok: boolean;
|
|
234
236
|
path: string;
|
|
235
237
|
opener: string;
|
|
238
|
+
reused?: boolean;
|
|
236
239
|
}>;
|
|
237
240
|
closeWordEdit?(editId: string): Promise<void>;
|
|
238
241
|
showReminderPopup?(opts: any): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mailx-api.d.ts","sourceRoot":"","sources":["mailx-api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mailx-api.d.ts","sourceRoot":"","sources":["mailx-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -169,7 +169,9 @@ export interface MailxApi {
|
|
|
169
169
|
// ── Desktop-only (OS popups, native FS, Word integration) ─────────
|
|
170
170
|
// Browser/Android services may omit these — declared optional so a
|
|
171
171
|
// missing implementation on the web side compiles cleanly.
|
|
172
|
-
|
|
172
|
+
/** `reused` ⇒ this draft was already open in an editor; that window was
|
|
173
|
+
* raised instead of a second copy being spawned. */
|
|
174
|
+
openInWord?(editId: string, html: string): Promise<{ ok: boolean; path: string; opener: string; reused?: boolean }>;
|
|
173
175
|
closeWordEdit?(editId: string): Promise<void>;
|
|
174
176
|
showReminderPopup?(opts: any): Promise<{ button: string; form?: any }>;
|
|
175
177
|
openInTextEditor?(filePath: string): Promise<{ ok: boolean; opener: string; reason?: string }>;
|