@bobfrankston/rmfmail 1.2.113 → 1.2.114
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 +5 -5
- package/bin/mailx.js +72 -3
- package/bin/mailx.js.map +1 -1
- package/bin/mailx.ts +62 -3
- package/client/android-bootstrap.bundle.js +60 -3
- package/client/android-bootstrap.bundle.js.map +2 -2
- package/client/app.bundle.js +42 -0
- package/client/app.bundle.js.map +2 -2
- package/client/app.js +58 -0
- package/client/app.js.map +1 -1
- package/client/app.ts +60 -0
- package/client/compose/compose.ts +13 -5
- package/package.json +1 -1
- package/packages/mailx-imap/index.d.ts +4 -1
- package/packages/mailx-imap/index.d.ts.map +1 -1
- package/packages/mailx-imap/index.js +59 -5
- package/packages/mailx-imap/index.js.map +1 -1
- package/packages/mailx-imap/index.ts +55 -5
- package/packages/mailx-imap/package-lock.json +2 -2
- package/packages/mailx-imap/package.json +1 -1
- package/packages/mailx-store-web/android-bootstrap.js +48 -3
- package/packages/mailx-store-web/android-bootstrap.js.map +1 -1
- package/packages/mailx-store-web/android-bootstrap.ts +47 -4
- package/packages/mailx-store-web/package.json +1 -1
- package/packages/mailx-store-web/web-service.d.ts +21 -0
- package/packages/mailx-store-web/web-service.d.ts.map +1 -1
- package/packages/mailx-store-web/web-service.js +11 -0
- package/packages/mailx-store-web/web-service.js.map +1 -1
- package/packages/mailx-store-web/web-service.ts +11 -0
- package/packages/mailx-types/mailx-api.d.ts +22 -0
- package/packages/mailx-types/mailx-api.d.ts.map +1 -1
- package/packages/mailx-types/mailx-api.ts +7 -0
- package/packages/mailx-types/package.json +1 -1
|
@@ -6386,6 +6386,9 @@ ${bodyEncoded}`;
|
|
|
6386
6386
|
getThreadMessages(_accountId, _threadId) {
|
|
6387
6387
|
return [];
|
|
6388
6388
|
}
|
|
6389
|
+
async getMessageSource(_accountId, _uid, _folderId) {
|
|
6390
|
+
return this.notImpl("getMessageSource");
|
|
6391
|
+
}
|
|
6389
6392
|
async getAttachment(_accountId, _uid, _attachmentId, _folderId) {
|
|
6390
6393
|
return this.notImpl("getAttachment");
|
|
6391
6394
|
}
|
|
@@ -6433,6 +6436,20 @@ ${bodyEncoded}`;
|
|
|
6433
6436
|
reauthGoogleScopes() {
|
|
6434
6437
|
return { cleared: 0 };
|
|
6435
6438
|
}
|
|
6439
|
+
/** No per-folder sync lane on Android — a folder "sync now" refreshes the
|
|
6440
|
+
* whole account (cheap: Gmail incremental sync / one IMAP pass). */
|
|
6441
|
+
async syncFolderNow(accountId, _folderId) {
|
|
6442
|
+
await this.syncAccount(accountId);
|
|
6443
|
+
}
|
|
6444
|
+
cancelServerSearch() {
|
|
6445
|
+
}
|
|
6446
|
+
async copyMessages(_accountId, _uids, _folderIds, _targetFolderId) {
|
|
6447
|
+
this.notImpl("copyMessages");
|
|
6448
|
+
}
|
|
6449
|
+
/** `{}` = play the built-in chime — no custom sound files on Android. */
|
|
6450
|
+
async getReminderSound() {
|
|
6451
|
+
return {};
|
|
6452
|
+
}
|
|
6436
6453
|
// Contacts extensions. The contacts.jsonc mutation logic is shared with
|
|
6437
6454
|
// the desktop service — see mailx-types/contacts-config.ts. These used
|
|
6438
6455
|
// to be `notImpl()` stubs, so the phone's ★ / ⊘ autocomplete buttons did
|
|
@@ -6501,6 +6518,9 @@ ${bodyEncoded}`;
|
|
|
6501
6518
|
async getCalendarEvents(_fromMs, _toMs) {
|
|
6502
6519
|
return [];
|
|
6503
6520
|
}
|
|
6521
|
+
async getCalendars() {
|
|
6522
|
+
return [];
|
|
6523
|
+
}
|
|
6504
6524
|
async createCalendarEvent(_ev) {
|
|
6505
6525
|
return this.notImpl("createCalendarEvent");
|
|
6506
6526
|
}
|
|
@@ -11133,7 +11153,10 @@ function installBridge() {
|
|
|
11133
11153
|
},
|
|
11134
11154
|
getAccounts: () => service.getAccounts(),
|
|
11135
11155
|
getFolders: (accountId) => service.getFolders(accountId),
|
|
11136
|
-
|
|
11156
|
+
// Full arg pass-through — this adapter used to stop at pageSize, so
|
|
11157
|
+
// sort toggles and the per-folder search box silently did nothing on
|
|
11158
|
+
// the phone (service.getMessages supports all seven).
|
|
11159
|
+
getMessages: (accountId, folderId, page, pageSize, sort, sortDir, search) => service.getMessages(accountId, folderId, page, pageSize, sort, sortDir, search),
|
|
11137
11160
|
getUnifiedInbox: (page, pageSize) => service.getUnifiedInbox(page, pageSize),
|
|
11138
11161
|
getMessage: (accountId, uid, allowRemote, folderId) => service.getMessage(accountId, uid, allowRemote, folderId),
|
|
11139
11162
|
updateFlags: async (accountId, uid, flags) => {
|
|
@@ -11169,7 +11192,9 @@ function installBridge() {
|
|
|
11169
11192
|
await service.deleteDraft(accountId, draftUid);
|
|
11170
11193
|
return { ok: true };
|
|
11171
11194
|
},
|
|
11172
|
-
|
|
11195
|
+
// Full arg pass-through — dropping scope/accountId/folderId made every
|
|
11196
|
+
// Android search behave as all-mailboxes regardless of the UI scope.
|
|
11197
|
+
searchMessages: (query, page, pageSize, scope, accountId, folderId, includeTrashSpam) => service.searchMessages(query, page, pageSize, scope, accountId, folderId, includeTrashSpam),
|
|
11173
11198
|
searchContacts: (query) => service.searchContacts(query),
|
|
11174
11199
|
listContacts: (query, page = 1, pageSize = 100) => service.listContacts(query || "", page, pageSize),
|
|
11175
11200
|
upsertContact: (name, email) => service.upsertContact(name || "", email),
|
|
@@ -11317,11 +11342,43 @@ function installBridge() {
|
|
|
11317
11342
|
},
|
|
11318
11343
|
onEvent: (handler) => {
|
|
11319
11344
|
eventHandlers.push(handler);
|
|
11345
|
+
},
|
|
11346
|
+
// ── Wire-shape adapters (C154) ──
|
|
11347
|
+
// These service methods return the raw value, but api-client (and the
|
|
11348
|
+
// desktop jsonrpc dispatcher) speak a wrapped shape on the wire —
|
|
11349
|
+
// adapt here so both platforms answer identically.
|
|
11350
|
+
readJsoncFile: async (name) => ({ content: await service.readJsoncFile(name) }),
|
|
11351
|
+
writeJsoncFile: async (name, content) => {
|
|
11352
|
+
await service.writeJsoncFile(name, content);
|
|
11353
|
+
return { ok: true };
|
|
11354
|
+
},
|
|
11355
|
+
formatJsonc: async (content) => ({ content: await service.formatJsonc(content) }),
|
|
11356
|
+
readConfigHelp: async (name) => ({ content: await service.readConfigHelp(name) }),
|
|
11357
|
+
drainStoreSync: async () => {
|
|
11358
|
+
await service.drainStoreSync();
|
|
11359
|
+
return { ok: true };
|
|
11360
|
+
},
|
|
11361
|
+
syncFolderNow: async (accountId, folderId) => {
|
|
11362
|
+
await service.syncFolderNow(accountId, folderId);
|
|
11363
|
+
return { ok: true };
|
|
11320
11364
|
}
|
|
11321
11365
|
};
|
|
11366
|
+
const svcAny = service;
|
|
11367
|
+
const svcNames = /* @__PURE__ */ new Set([
|
|
11368
|
+
...Object.getOwnPropertyNames(Object.getPrototypeOf(service)),
|
|
11369
|
+
...Object.getOwnPropertyNames(service)
|
|
11370
|
+
]);
|
|
11371
|
+
let backfilled = 0;
|
|
11372
|
+
for (const name of svcNames) {
|
|
11373
|
+
if (name === "constructor" || name === "notImpl") continue;
|
|
11374
|
+
if (typeof svcAny[name] !== "function") continue;
|
|
11375
|
+
if (name in api) continue;
|
|
11376
|
+
api[name] = (...args) => svcAny[name](...args);
|
|
11377
|
+
backfilled++;
|
|
11378
|
+
}
|
|
11322
11379
|
window.mailxapi = api;
|
|
11323
11380
|
window.dispatchEvent(new CustomEvent("mailxapiready"));
|
|
11324
|
-
console.log(
|
|
11381
|
+
console.log(`[android] mailxapi bridge installed (${backfilled} contract methods backfilled)`);
|
|
11325
11382
|
}
|
|
11326
11383
|
export {
|
|
11327
11384
|
initAndroid,
|