@bobfrankston/rmfmail 1.0.706 → 1.0.707
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/client/android-bootstrap.bundle.js +163 -2
- package/client/android-bootstrap.bundle.js.map +2 -2
- package/client/app.bundle.js.map +2 -2
- package/client/compose/compose.bundle.js +15 -1
- package/client/compose/compose.bundle.js.map +2 -2
- package/client/compose/compose.js +25 -5
- package/client/compose/compose.js.map +1 -1
- package/client/compose/compose.ts +21 -5
- package/package.json +1 -1
- package/packages/mailx-service/index.d.ts +27 -2
- package/packages/mailx-service/index.d.ts.map +1 -1
- package/packages/mailx-service/index.js +17 -0
- package/packages/mailx-service/index.js.map +1 -1
- package/packages/mailx-service/index.ts +21 -2
- package/packages/mailx-settings/index.d.ts.map +1 -1
- package/packages/mailx-settings/index.js +11 -1
- package/packages/mailx-settings/index.js.map +1 -1
- package/packages/mailx-settings/index.ts +11 -1
- package/packages/mailx-store-web/package.json +1 -1
- package/packages/mailx-store-web/web-service.d.ts +88 -3
- package/packages/mailx-store-web/web-service.d.ts.map +1 -1
- package/packages/mailx-store-web/web-service.js +92 -2
- package/packages/mailx-store-web/web-service.js.map +1 -1
- package/packages/mailx-store-web/web-service.ts +110 -5
- package/packages/mailx-types/index.d.ts +1 -0
- package/packages/mailx-types/index.d.ts.map +1 -1
- package/packages/mailx-types/index.js.map +1 -1
- package/packages/mailx-types/index.ts +1 -0
- package/packages/mailx-types/mailx-api.d.ts +212 -0
- package/packages/mailx-types/mailx-api.d.ts.map +1 -0
- package/packages/mailx-types/mailx-api.js +41 -0
- package/packages/mailx-types/mailx-api.js.map +1 -0
- package/packages/mailx-types/mailx-api.ts +159 -0
- package/packages/mailx-types/package.json +1 -1
- /package/packages/mailx-imap/{node_modules.npmglobalize-stash-44928 → node_modules.npmglobalize-stash-40064}/.package-lock.json +0 -0
|
@@ -3662,8 +3662,8 @@ ${textEncoded}`;
|
|
|
3662
3662
|
const raw = `${headers}\r
|
|
3663
3663
|
\r
|
|
3664
3664
|
${bodyEncoded}`;
|
|
3665
|
-
const
|
|
3666
|
-
return {
|
|
3665
|
+
const draftUid = await this.syncManager.saveDraft(accountId, raw, previousDraftUid, id);
|
|
3666
|
+
return { draftUid, draftId: id };
|
|
3667
3667
|
}
|
|
3668
3668
|
async deleteDraft(accountId, draftUid) {
|
|
3669
3669
|
await this.syncManager.deleteDraft(accountId, draftUid);
|
|
@@ -3829,6 +3829,167 @@ ${bodyEncoded}`;
|
|
|
3829
3829
|
cfg.priorityDomains.splice(i, 1);
|
|
3830
3830
|
await cloudWrite2("contacts.jsonc", JSON.stringify(cfg, null, 2));
|
|
3831
3831
|
}
|
|
3832
|
+
// ── MailxApi contract: name aliases ───────────────────────────────
|
|
3833
|
+
// The IPC dispatch names (`sendMessage`, `searchMessages`) differ from
|
|
3834
|
+
// the historical web method names (`send`, `search`). Thin aliases keep
|
|
3835
|
+
// the existing internal method bodies while satisfying `implements
|
|
3836
|
+
// MailxApi`. NEW methods should use the IPC name directly so this
|
|
3837
|
+
// section doesn't grow.
|
|
3838
|
+
sendMessage(msg) {
|
|
3839
|
+
return this.send(msg);
|
|
3840
|
+
}
|
|
3841
|
+
searchMessages(query, page, pageSize, scope, accountId, folderId, _includeTrashSpam) {
|
|
3842
|
+
return this.search(query, page, pageSize, scope, accountId, folderId);
|
|
3843
|
+
}
|
|
3844
|
+
// ── MailxApi contract: explicit stubs for unimplemented Android features ─
|
|
3845
|
+
//
|
|
3846
|
+
// Every method below is in the contract but has no Android implementation
|
|
3847
|
+
// today. Each is declared explicitly so it's *visible* in this file —
|
|
3848
|
+
// before the contract was added, these were just absent and IPC calls
|
|
3849
|
+
// returned "parent bridge has no method X", silently swallowed by
|
|
3850
|
+
// `.catch()` in callers. Now the gap is in one auditable list.
|
|
3851
|
+
//
|
|
3852
|
+
// Implementation policy:
|
|
3853
|
+
// - Pure read with no Android backing: return [] / {} / null / false.
|
|
3854
|
+
// UI degrades gracefully; no crash.
|
|
3855
|
+
// - Write that mutates state: throw `notImpl()` so a UI button that
|
|
3856
|
+
// calls it surfaces an error rather than appearing to succeed.
|
|
3857
|
+
// - OS-specific (Word, msger popups, OS file open): also `notImpl()`.
|
|
3858
|
+
// These are declared optional `?:` in the contract so we technically
|
|
3859
|
+
// could omit them entirely — explicit stubs are clearer.
|
|
3860
|
+
//
|
|
3861
|
+
// To wire one up: replace the stub body, run tsc, the contract enforces
|
|
3862
|
+
// the signature.
|
|
3863
|
+
notImpl(name) {
|
|
3864
|
+
throw new Error(`Not implemented on Android: ${name}`);
|
|
3865
|
+
}
|
|
3866
|
+
// Threads / attachments / message reads
|
|
3867
|
+
getThreadMessages(_accountId, _threadId) {
|
|
3868
|
+
return [];
|
|
3869
|
+
}
|
|
3870
|
+
async getAttachment(_accountId, _uid, _attachmentId, _folderId) {
|
|
3871
|
+
return this.notImpl("getAttachment");
|
|
3872
|
+
}
|
|
3873
|
+
// Spam / abuse
|
|
3874
|
+
async markAsSpamMessages(_accountId, _uids) {
|
|
3875
|
+
return this.notImpl("markAsSpamMessages");
|
|
3876
|
+
}
|
|
3877
|
+
async recordSpamReport(_accountId, _uid, _folderId) {
|
|
3878
|
+
return this.notImpl("recordSpamReport");
|
|
3879
|
+
}
|
|
3880
|
+
// Folder CRUD
|
|
3881
|
+
async createFolder(_accountId, _parentPath, _name) {
|
|
3882
|
+
this.notImpl("createFolder");
|
|
3883
|
+
}
|
|
3884
|
+
async renameFolder(_accountId, _folderId, _newName) {
|
|
3885
|
+
this.notImpl("renameFolder");
|
|
3886
|
+
}
|
|
3887
|
+
async deleteFolder(_accountId, _folderId) {
|
|
3888
|
+
this.notImpl("deleteFolder");
|
|
3889
|
+
}
|
|
3890
|
+
async moveFolderToTrash(_accountId, _folderId) {
|
|
3891
|
+
this.notImpl("moveFolderToTrash");
|
|
3892
|
+
}
|
|
3893
|
+
async emptyFolder(_accountId, _folderId) {
|
|
3894
|
+
this.notImpl("emptyFolder");
|
|
3895
|
+
}
|
|
3896
|
+
// Outbox management
|
|
3897
|
+
getOutboxStatus() {
|
|
3898
|
+
return { count: 0, items: [] };
|
|
3899
|
+
}
|
|
3900
|
+
listQueuedOutgoing() {
|
|
3901
|
+
return [];
|
|
3902
|
+
}
|
|
3903
|
+
cancelQueuedOutgoing(_filePath) {
|
|
3904
|
+
return { ok: true };
|
|
3905
|
+
}
|
|
3906
|
+
// Sync infrastructure — getSyncPending already defined above
|
|
3907
|
+
async drainStoreSync() {
|
|
3908
|
+
}
|
|
3909
|
+
reauthGoogleScopes() {
|
|
3910
|
+
return { cleared: 0 };
|
|
3911
|
+
}
|
|
3912
|
+
// Contacts extensions
|
|
3913
|
+
async addPreferredContact(_entry) {
|
|
3914
|
+
this.notImpl("addPreferredContact");
|
|
3915
|
+
}
|
|
3916
|
+
async addToDenylist(_email) {
|
|
3917
|
+
this.notImpl("addToDenylist");
|
|
3918
|
+
}
|
|
3919
|
+
hasBccHistoryTo(_email) {
|
|
3920
|
+
return false;
|
|
3921
|
+
}
|
|
3922
|
+
async loadContactsConfig() {
|
|
3923
|
+
return null;
|
|
3924
|
+
}
|
|
3925
|
+
// Calendar — Android UI has its own native calendar; no JS-side data.
|
|
3926
|
+
async getCalendarEvents(_fromMs, _toMs) {
|
|
3927
|
+
return [];
|
|
3928
|
+
}
|
|
3929
|
+
async createCalendarEvent(_ev) {
|
|
3930
|
+
return this.notImpl("createCalendarEvent");
|
|
3931
|
+
}
|
|
3932
|
+
async updateCalendarEvent(_uuid, _patch) {
|
|
3933
|
+
return this.notImpl("updateCalendarEvent");
|
|
3934
|
+
}
|
|
3935
|
+
async deleteCalendarEvent(_uuid) {
|
|
3936
|
+
return this.notImpl("deleteCalendarEvent");
|
|
3937
|
+
}
|
|
3938
|
+
// Tasks — same story
|
|
3939
|
+
async getTasks(_includeCompleted) {
|
|
3940
|
+
return [];
|
|
3941
|
+
}
|
|
3942
|
+
async createTask(_t) {
|
|
3943
|
+
return this.notImpl("createTask");
|
|
3944
|
+
}
|
|
3945
|
+
async updateTask(_uuid, _patch) {
|
|
3946
|
+
return this.notImpl("updateTask");
|
|
3947
|
+
}
|
|
3948
|
+
async deleteTask(_uuid) {
|
|
3949
|
+
return this.notImpl("deleteTask");
|
|
3950
|
+
}
|
|
3951
|
+
// User dictionary (cloud-mirrored) — Android can implement these via
|
|
3952
|
+
// the same userdict.jsonc cloud round-trip the desktop uses; until that
|
|
3953
|
+
// wire-up lands, return safe defaults so spellcheck.ts catch() paths
|
|
3954
|
+
// don't fire and clutter logs.
|
|
3955
|
+
async getUserDict() {
|
|
3956
|
+
return [];
|
|
3957
|
+
}
|
|
3958
|
+
async addUserDictWord(_word) {
|
|
3959
|
+
return [];
|
|
3960
|
+
}
|
|
3961
|
+
async removeUserDictWord(_word) {
|
|
3962
|
+
return [];
|
|
3963
|
+
}
|
|
3964
|
+
// Diagnostics / version / primary account
|
|
3965
|
+
getDiagnostics() {
|
|
3966
|
+
return { ok: true, platform: "android" };
|
|
3967
|
+
}
|
|
3968
|
+
getPrimaryAccount(_feature) {
|
|
3969
|
+
return null;
|
|
3970
|
+
}
|
|
3971
|
+
getVersion() {
|
|
3972
|
+
return { version: "android", platform: "android" };
|
|
3973
|
+
}
|
|
3974
|
+
consumePendingMailto() {
|
|
3975
|
+
return null;
|
|
3976
|
+
}
|
|
3977
|
+
logClientEvent(..._args) {
|
|
3978
|
+
}
|
|
3979
|
+
// Setup / repair / unsubscribe
|
|
3980
|
+
async setupAccount(_name, _email, _password) {
|
|
3981
|
+
return this.notImpl("setupAccount");
|
|
3982
|
+
}
|
|
3983
|
+
async repairAccounts() {
|
|
3984
|
+
return this.notImpl("repairAccounts");
|
|
3985
|
+
}
|
|
3986
|
+
async unsubscribeOneClick(_url) {
|
|
3987
|
+
return this.notImpl("unsubscribeOneClick");
|
|
3988
|
+
}
|
|
3989
|
+
// AI transforms — pipe through to web autocomplete or no-op
|
|
3990
|
+
async aiTransform(_req) {
|
|
3991
|
+
return this.notImpl("aiTransform");
|
|
3992
|
+
}
|
|
3832
3993
|
};
|
|
3833
3994
|
function parseJsoncLoose(raw) {
|
|
3834
3995
|
try {
|